@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/index.js
CHANGED
|
@@ -1,71 +1,79 @@
|
|
|
1
|
-
var
|
|
2
|
-
`)}function R(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function
|
|
1
|
+
var Py=Object.defineProperty;var F=(e,r)=>()=>(e&&(r=e(e=0)),r);var Ay=(e,r)=>{for(var t in r)Py(e,t,{get:r[t],enumerable:!0})};import{existsSync as My,mkdirSync as Uy,readFileSync as sa,readdirSync as fI,statSync as Bu,writeFileSync as Ly}from"node:fs";import Wu from"node:path";function fr(e){console.error(e),process.exit(1)}function le(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function N(e,r){return e||fr(`missing ${r}`),e}function yt(e){try{return JSON.parse(e)}catch{return null}}function _(e,r){try{return JSON.parse(sa(e,"utf8"))}catch(t){if(arguments.length>1)return r;fr(`failed to read ${e}: ${t.message}`)}}function ce(e,r){Uy(Wu.dirname(e),{recursive:!0}),Ly(e,`${JSON.stringify(r,null,2)}
|
|
2
|
+
`)}function R(e){return String(e||"").toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"worker"}function Hu(e){return R(`${new Date().toISOString().replace(/[-:]/g,"").replace(/\..+/,"Z")}-${e}`)}function tr(e){return String(e).replace(/\/+$/,"")}function Mo(e){return String(e||"").replace(/\s+/g," ").trim()}function Uo(e){try{return Bu(e).size}catch{return 0}}function Lo(e){try{return Bu(e).mtime.toISOString()}catch{return null}}function Bo(e,r){return My(e)?sa(e,"utf8").split(`
|
|
3
3
|
`).slice(-r).join(`
|
|
4
|
-
`):""}function
|
|
5
|
-
`).map(r=>r.trim()).filter(Boolean)}function Q(e,r){try{let t=xu("git",r,le({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 _u(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 Eo(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 qi(n,"missing worktree path");let s=Q(e,["rev-parse","HEAD"]);if(s.status!==0)return qi(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 qi(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=_u(e,i,a),c=_u(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 qi(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var Ce=F(()=>{"use strict";w();Ar()});import{homedir as zi}from"node:os";import Or from"node:path";function Eu(e){return e==="~"?zi():e.startsWith("~/")||e.startsWith("~\\")?Or.join(zi(),e.slice(2)):e}function gt(e){return Or.resolve(Eu(e))}function he(e){let r=Eu(e),t=Or.resolve(r),n=Or.resolve(zi());return t===n?"~":t.startsWith(`${n}${Or.sep}`)?`~/${Or.relative(n,t).split(Or.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 he(e)}var tr=F(()=>{"use strict"});import{existsSync as Zi,readFileSync as Au}from"node:fs";import{homedir as uy}from"node:os";import fr from"node:path";import{fileURLToPath as dy}from"node:url";function my(e){let r=fr.join(e,"package.json");if(!Zi(r))return null;try{let t=JSON.parse(Au(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function Ou(e){return my(e)==="kynver"}function Qi(e){let r=fr.resolve(e);if(!Zi(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?fr.resolve(n):null}function fy(e=import.meta.url){let r=fr.dirname(dy(e));for(let t=0;t<8;t+=1){let n=fr.join(r,"package.json");if(Zi(n))try{if(JSON.parse(Au(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=fr.dirname(r);if(o===r)break;r=o}return null}function Xi(e,r,t,n){if(!t)return;let o=fr.resolve(t);e.has(o)||Ou(o)&&(e.add(o),r.push({repo:o,source:n}))}function Iu(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];Xi(t,n,Qi(r),"cwd_git");let o=fy(e?.runtimeModuleUrl??import.meta.url);o&&Xi(t,n,Qi(o),"runtime_checkout");let s=uy();for(let i of py)Xi(t,n,gt(fr.join(s,i)),"well_known_path");return n}function gr(e){return Iu(e)[0]??null}var py,un=F(()=>{"use strict";Ce();tr();py=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});function kt(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 Du(e,r){return e[r]?.trim()||null}function Te(e=process.env,r={}){let t=[],n=r.boxKind?.trim();if(n)return{boxKind:kt(n),source:"config",slugInferenceBlocked:!1,warnings:t};let o=Du(e,"KYNVER_BOX_KIND");if(o)return{boxKind:kt(o),source:"env",slugInferenceBlocked:!1,warnings:t};let s=Du(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 Ke(e={},r=process.env){return Te(r,e).boxKind}var De=F(()=>{"use strict"});import{readFileSync as Ty}from"node:fs";import Mu from"node:os";function yt(e){if(e!==void 0){let r=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return r?Number(r[1])*1024:Mu.freemem()}if(process.platform==="linux")try{let t=Ty("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(t)return Number(t[1])*1024}catch{}return Mu.freemem()}var No=F(()=>{"use strict"});import{existsSync as Dy,readFileSync as My,statfsSync as Uy}from"node:fs";function Hu(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!Dy(e))continue;let r=My(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function ca(e={}){if(!(e.forceWsl===void 0?Hu():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||Wu,n=e.wslHostFreeWarnBytes??Uu,o=e.wslHostFreeCriticalBytes??Lu,s=e.statfs??Uy,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. ${Bu()}`),{ok:f,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:p,probeError:null}}function Bu(){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 Uu,Lu,Wu,ua=F(()=>{"use strict";Uu=25*1024*1024*1024,Lu=12*1024*1024*1024,Wu="/mnt/c"});import{statfsSync as Ly}from"node:fs";function Me(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??Wy,n=e.diskFreeCriticalBytes??Hy,o=e.diskMaxUsedPercent??By,s=e.diskHardMaxUsedPercent??Fy,i=Ly(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:ca(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("; ")),$y({ok:h,path:r,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:S,wslHost:k})}function $y(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 Wy,Hy,By,Fy,Rt=F(()=>{"use strict";ua();Wy=30*1024*1024*1024,Hy=15*1024*1024*1024,By=80,Fy=90});import{existsSync as Fu}from"node:fs";import{homedir as Ku}from"node:os";import hr from"node:path";function te(e){let r=hr.resolve(gt(e.trim()));for(;Ky.has(hr.basename(r));)r=hr.dirname(r);return r}function de(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return te(e);let r=v().harnessRoot?.trim();if(r)return te(r);let t=hr.join(Ku(),".kynver","harness");return Fu(t)?t:Fu($u)?$u:t}function pe(e){return hr.join(te(e),"runs")}function nr(e){return hr.join(te(e),"worktrees")}function Nr(){let e=de();return{harnessRoot:e,runsDir:pe(e),worktreesDir:nr(e)}}function vt(e,r){return hr.join(e,R(r))}var $u,Ky,ke=F(()=>{"use strict";I();tr();w();$u=hr.join(Ku(),".openclaw","harness"),Ky=new Set(["runs","worktrees"])});import{existsSync as jy,readdirSync as Vy,statSync as Gy}from"node:fs";import bt from"node:path";function oe(){return Nr()}function U(e){let{runsDir:r}=oe();return _(bt.join(vt(r,R(e)),"run.json"))}function ne(){let{runsDir:e}=oe();return ju(e)}function To(e){return ju(pe(e))}function Yy(e){try{return Gy(e).isDirectory()}catch{return!1}}function ju(e){if(!jy(e))return[];let r=[];for(let t of Vy(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=bt.join(e,t.name);if(!Yy(n))continue;let o=_(bt.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function ye(e,r){let{runsDir:t}=oe();return _(bt.join(vt(t,R(e)),"workers",R(r),"worker.json"))}function Ue(e){let{runsDir:r}=oe();ce(bt.join(vt(r,e.id),"run.json"),e)}function V(e,r){let{runsDir:t}=oe();ce(bt.join(vt(t,e),"workers",r.name,"worker.json"),r)}function x(e){let{harnessRoot:r}=oe();return mn(r,e)}function mn(e,r){return vt(pe(e),R(r))}var L=F(()=>{"use strict";ke();w()});import{existsSync as Jy,readdirSync as qy}from"node:fs";import zy from"node:path";function Pe(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(R(n));let t=zy.join(x(e.id),"workers");if(!Jy(t))return[...r];for(let n of qy(t,{withFileTypes:!0}))n.isDirectory()&&r.add(R(n.name));return[...r]}var St=F(()=>{"use strict";L();w()});function da(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 Vu(e){let r=e.trim();if(!r)return null;let t=da(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=da(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=da(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function Gu(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?Vu(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=Vu(t);return n||t}var Yu=F(()=>{"use strict"});import{existsSync as Xy,readFileSync as Qy}from"node:fs";function pa(e){return e==="complete"}function Tr(e){return pa(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function _e(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!Xy(e))return r;let t=Date.now()+Zy,n=new Date(t).toISOString(),o=Qy(e,"utf8").split(`
|
|
6
|
-
`).filter(Boolean);for(let s of o){let i=
|
|
7
|
-
`).find(Boolean)??o,160):"npm audit failed"}function
|
|
8
|
-
${e.stderr}`.trim(),t=
|
|
9
|
-
`).filter(Boolean);for(let n of t){let o=ft(n);if(!o)continue;let s=yR(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=rd(a);l&&(r.currentTool=l)}let i=td(o);i&&vR(r,Lo({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&RR(r,o)}return r}function bR(e){return wt(e)}function nd(e){let r=td(e);if(!r)return;let t=Lo({command:r.command,exitCode:r.exitCode,stdout:r.stdout,stderr:r.stderr,interleavedOutput:r.interleaved}),n=Co(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 ka(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] ${Co(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"?nd(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=rd(n)??"tool";return`[tool:${r}] ${o}`}if(e.type==="result")return`[result] ${e.subtype||""} ${Co(String(e.result||""))}`.trim()}var hn=F(()=>{"use strict";ha();w()});function wR(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function od(e){let r=(e??"").trim();if(!r)return null;for(let t of SR)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${wR(r)}`};return null}var SR,sd=F(()=>{"use strict";SR=[{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 id(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function CR(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 _R(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:id(e.head)}function xR(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 Mr(e){if(e.alive||CR(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=id(e.headCommit)??_R(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:xR(s,r,t)}}var kn=F(()=>{"use strict"});function yn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function PR(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 ER(e){if(yn(e.headCommit)||yn(e.prUrl)||yn(e.artifactBundlePath)||yn(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&yn(r.head))}function Ur(e){return PR(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:ER(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 ad(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var Rn=F(()=>{"use strict"});function ya(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 ld(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function Ct(e){let r=e.trim();if(!r)return null;let t=ya(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=ya(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=ya(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=ld(l);for(let u of n){let d=ld(u);d>c&&(l=u,c=d)}return l}var Wo=F(()=>{"use strict"});function _t(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function AR(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function Lr(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:_t(e)}function Ho(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function cd(e){let r=null;if(typeof e=="string"){let o=Ct(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=Lr(String(s.prUrl??s.pr_url??"")),a=_t(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:_t(s.mergeCommit??s.merge_commit),reason:_t(s.reason)})}return n}function ud(e,r){let t=[],n=Lr(_t(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=Lr(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function Ra(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(!AR(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?Lr(_t(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?Lr(r.targetPrUrls[0]):null):null;if(s){let d=ud(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=cd(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=cd(n),a=new Map(i.map(d=>[Ho(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>Ho(Lr(d)??d)).filter(Boolean)),c=ud(t,n);if(r.landingOnly)for(let d of c){if(l.size>0&&!l.has(Ho(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=Ho(Lr(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 va(e){if(e.blocked)return e.detail??e.reason}var ba=F(()=>{"use strict";Wo()});function dd(e){let r=Date.now();if(e.completionBlocker&&!pd(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&NR(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=Ur(o);if(s.blocked){let i=ad(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=Ra({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=va(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(IR(e))return{state:"done",reason:"empty abandoned worker record"};let o=od(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Mr({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>OR)return{state:"needs_attention",reason:`no first stream event ${Yi(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>xt?{state:"stale",reason:`no log/event/heartbeat activity for ${Yi(n)}s`}:{state:"ok",reason:"recent activity"}}function pd(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function IR(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 NR(e){let r=null;if(typeof e=="string"?r=Ct(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 TR(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??Tr(t))}function T(e,r={}){let t=wt(e.stdoutPath),n=_e(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=TR(e,t.finalResult,n),i=o?!1:$(e.pid),a=_o(e.stdoutPath),l=_o(e.stderrPath),c=_o(e.heartbeatPath),u=cn(e.worktreePath),d=Eo(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),f=bu([t.lastEventAt,n.lastHeartbeatAt,xo(e.stdoutPath),xo(e.stderrPath),xo(e.heartbeatPath)]),m=t.error||!i&&!s&&Po(e.stderrPath,10).trim()||void 0,p=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,g=pd(p)?null:p,k=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,h=dd({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 Z(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function Wr(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function Pt(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 OR,xt,G=F(()=>{"use strict";Dr();hn();sd();kn();Ce();Rn();ba();Wo();w();OR=18e4,xt=6e5});import{readFileSync as DR}from"node:fs";function MR(e){if(!e||process.platform!=="linux")return null;try{return DR(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function md(e){if(!e.pid||process.platform!=="linux")return!0;let r=MR(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 vn(e){if(typeof e.completionBlocker=="string"&&e.completionBlocker.trim())return!1;let r=T(e);return r.alive&&!md(e)?!1:r.alive&&!r.finalResult&&r.attention.state!=="done"}var Bo=F(()=>{"use strict";G()});import gd from"node:os";import UR from"node:path";function fd(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function LR(e=v(),r,t){let n=fd(e.perWorkerMemBytes,bn),o=fd(e.memReserveBytes,Sn),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):wn)),i=$o({config:e,configuredMaxWorkersOverride:r,totalMemBytes:t??gd.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function Sa(e,r={}){let t=r.perWorkerMemBytes??bn,n=r.memReserveBytes??Sn,o=r.memUtilization??wn,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,Fo)}function WR(){return yt()}function HR(e){let r=0;for(let t of Pe(e)){let n=_(UR.join(x(e.id),"workers",R(t),"worker.json"),void 0);!n||!vn(n)||r++}return r}function BR(){let e=0;for(let r of ne())e+=HR(r);return e}function Hr(e){let r=e.config??v(),t=e.totalMemBytes??gd.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=LR(r,e.configuredMaxWorkersOverride,t),c=Ke(r),u=e.freeMemBytes??WR(),d=e.activeWorkers??BR(),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),H=Math.min(S,p),b=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:Me({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});b&&!b.ok&&(H=0);let E=null;return H<=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:H>0,totalMemBytes:t,freeMemBytes:u,memReserveBytes:o,perWorkerMemBytes:n,configuredMaxWorkers:i,workerCapSource:l,boxKind:c,autoCap:g,capacityWorkers:m,maxConcurrentWorkers:h,activeWorkers:d,slotsAvailable:H,reason:E,...b?{diskGate:b}:{}}}var bn,Sn,wn,Fo,Cn=F(()=>{"use strict";No();I();De();Ko();Rt();L();St();Bo();w();bn=500*1024*1024,Sn=4*1024*1024*1024,wn=.85,Fo=64});function Br(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function $o(e){let r=e.config??{},t=e.env??process.env,n=Br(r.perWorkerMemBytes,bn),o=Br(r.memReserveBytes,Sn),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):wn)),i=Sa(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:Br(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let c=Br(r.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,Fo),autoCap:i,workerCapSource:"config"}}let l=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&Br(t.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,Fo),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}function wa(e={}){let r=e.totalMemBytes??0,t=Sa(r,{perWorkerMemBytes:Br(e.config?.perWorkerMemBytes,bn),memReserveBytes:Br(e.config?.memReserveBytes,Sn),memUtilization:e.config?.memUtilization&&Number(e.config.memUtilization)>0?Number(e.config.memUtilization):wn}),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 Ko=F(()=>{"use strict";Cn()});var kd={};Qk(kd,{runDeviceLogin:()=>Ca});import hd from"node:os";function FR(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?rr(String(r)):void 0}async function $R(e){await new Promise(r=>setTimeout(r,e))}async function Ca(e){let r=FR(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=`${hd.hostname()} (${hd.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 $R(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?(_n(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 _a=F(()=>{"use strict";I();w()});import{existsSync as Rd,mkdirSync as vd,readFileSync as bd,writeFileSync as Sd}from"node:fs";import{homedir as KR,totalmem as jR}from"node:os";import xa from"node:path";import VR from"node:os";function v(){if(!Rd(jo))return{};try{return JSON.parse(bd(jo,"utf8"))}catch{return{}}}function je(e){vd(Vo,{recursive:!0}),Sd(jo,`${JSON.stringify(Pa(e),null,2)}
|
|
10
|
-
`,{mode:384})}function
|
|
11
|
-
`,{mode:384})}function ee(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:xn().apiKey}function _n(e){wd({...xn(),apiKey:e})}function yd(e){let r=process.env.KYNVER_RUNNER_TOKEN?.trim();if(r)return r;let t=xn();if(t.runnerToken&&!(e&&t.runnerTokenAgentOsId&&t.runnerTokenAgentOsId!==e))return t.runnerToken}function Fr(e,r){wd({...xn(),runnerToken:r,runnerTokenAgentOsId:e})}function W(e){let r=Go(e);return r||Yo("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),r}function Go(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?rr(String(r)):void 0}function Cd(e,r){let t=e||yd(r)||(r?void 0:yd(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)}function JR(e,r){let t=Cd(e,r);if(t)return t;Yo("requires --secret, KYNVER_RUNNER_TOKEN, a scoped runner token (`kynver runner credential`), ~/.kynver/credentials runnerToken, KYNVER_API_KEY with an API base URL to mint one, or (legacy) KYNVER_RUNTIME_SECRET / KYNVER_CRON_SECRET / OPENCLAW_CRON_SECRET")}async function Ea(e,r,t){let n=Cd(e,r);if(n)return{ok:!0,secret:n};let o=ee(),s=Go(t?.baseUrl);if(o&&r&&s)try{let i=await $r(r,{baseUrl:s,apiKey:o});return Fr(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 Ea(e,r,t);if(n.ok)return n.secret;Yo(n.reason)}async function _d(e,r){let t=ee(),n=Go(r?.baseUrl);if(!t||!e||!n)return null;try{let o=await $r(e,{baseUrl:n,apiKey:t});return Fr(e,o),o}catch{return null}}async function xd(e,r,t){let n=ee(),o=Go(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 $r(r,{baseUrl:o,apiKey:n});return s&&s!==e?(Fr(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 $r(e,r){let t=r?.apiKey||ee();if(!t)throw new Error("API key required \u2014 run `kynver login` first");let o=`${W(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 Pd(e){let r=(e.agentOsId?String(e.agentOsId):v().agentOsId)||"";r||Yo("runner credential requires --agent-os-id or agentOsId in ~/.kynver/config.json");try{let t=await $r(r,{baseUrl:e.baseUrl?String(e.baseUrl):void 0});Fr(r,t),console.log(JSON.stringify({ok:!0,agentOsId:r,credentialsPath:Y(Et),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 Yo(e){console.error(e),process.exit(1)}function Pn(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 Jo(e){let r=v(),t=Me({diskPath:typeof e.diskPath=="string"?e.diskPath:"/"}),n=wa({totalMemBytes:VR.totalmem(),diskPath:t.path,diskGateOk:t.ok,diskFreeBytes:t.freeBytes,config:r}),o=YR(r,e),s=Pa({...r,...GR(r,e),...o,workerProvider:typeof e.provider=="string"?e.provider:r.workerProvider||"cursor",...e.chatOauth===!0?{chatUseClaudeOauth:!0}:{}});je(s);let i=Te(process.env,s),a,l=ee(),c=s.agentOsId;if(l&&c)try{let u=await $r(c,{baseUrl:typeof e.apiBaseUrl=="string"?e.apiBaseUrl:s.apiBaseUrl,apiKey:l});Fr(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(jo),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 Ed(e){let r=typeof e.apiKey=="string"?e.apiKey:process.env.KYNVER_API_KEY;if(r){_n(r),console.log(JSON.stringify({ok:!0,credentialsPath:Y(Et)},null,2));return}let{runDeviceLogin:t}=await Promise.resolve().then(()=>(_a(),kd));(await t(e)).ok||process.exit(1),console.log(JSON.stringify({ok:!0,credentialsPath:Y(Et)},null,2))}var Vo,jo,Et,CI,_I,I=F(()=>{"use strict";un();tr();w();De();Ko();Rt();Vo=xa.join(KR(),".kynver"),jo=xa.join(Vo,"config.json"),Et=xa.join(Vo,"credentials");CI=500*1024*1024,_I=4*1024*1024*1024});import{existsSync as Zk,readFileSync as ey}from"node:fs";import{dirname as Vi,join as fu}from"node:path";import{fileURLToPath as mu}from"node:url";function ry(e){let r=Vi(mu(e));for(let t=0;t<6;t+=1){if(Zk(fu(r,"package.json")))return r;let n=Vi(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${Vi(mu(e))}`)}function gu(e=import.meta.url){let r=fu(ry(e),"package.json"),t=JSON.parse(ey(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var an=gu();function ty(e){return e.some(r=>r==="--version"||r==="-v")}function ny(e,r){console.log(r?`${r} ${e}`:e),process.exit(0)}function hu(e,r=import.meta.url,t){return ty(e)?(ny(gu(r),t),!0):!1}un();import{existsSync as Nu,readFileSync as gy}from"node:fs";import Ao from"node:path";var ra={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},ta=Object.keys(ra),ea={"@kynver-app/runtime":"Kynver runtime","@kynver-app/openclaw-agent-os":"OpenClaw AgentOS plugin","@kynver-app/mcp-agent-os":"AgentOS MCP server"},hy={"@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 Tu(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 pn(e,r){let t=Tu(e),n=Tu(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 na(e,r){return pn(e,r)>=0}function ky(e){let r=null;for(let t of e)(!r||pn(t,r)>0)&&(r=t);return r}function yy(e){try{let r=JSON.parse(gy(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function Ry(e,r){let t=[r,process.env.KYNVER_REPO,e].filter(o=>!!o?.trim());for(let o of t){let s=Ao.resolve(o);if(Nu(Ao.join(s,"packages/kynver-runtime/package.json"))&&Nu(Ao.join(s,"package.json")))return s}return gr({cwd:e})?.repo??null}function oa(e={}){let r=e.cwd??process.cwd(),t=Ry(r,e.repoRoot);if(!t)return{};let n={};for(let o of ta){let s=Ao.join(t,hy[o]),i=yy(s);i&&(n[o]={version:i,source:"repo",path:s})}return n}function vy(e){return e==="@kynver-app/runtime"?["npm run kynver:build","npm run kynver"]:[`npm run build -w ${e}`]}function by(e){let{packageName:r,minimumVersion:t,effectiveVersion:n,effectiveSource:o,repoVersion:s}=e,i=[];return s&&na(s,t)?(i.push(`Use the monorepo checkout (${s}) instead of a stale npm install: ${vy(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 Sy(e){if(e.length===0)return{version:null,source:"unknown"};let r=ky(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 Oo(e={}){let r=(i,a)=>i?typeof i=="string"?{version:i,source:a}:i:null,t=ta.map(i=>{let a=ra[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}=Sy(l),p=u?.version??null,g=f?na(f,a):!1,k=g?[]:by({packageName:i,minimumVersion:a,effectiveVersion:f,effectiveSource:m,repoVersion:p}),h=g?`${ea[i]} ${f} meets memory-cost minimum ${a} (${m}).`:`${ea[i]} is below memory-cost minimum ${a}`+(f?` (effective ${f} via ${m})`:" (no version detected)")+".";return{packageName:i,displayName:ea[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 dn=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(`
|
|
12
|
-
`)),this.name="MemoryCostPackageVersionGuardError",this.result=r}};function sa(e={}){let r=Oo(e);if(!r.ok)throw new dn(r);return r}function wy(e){return new dn(e).message}import{readFile as Cy}from"node:fs/promises";import{homedir as _y}from"node:os";import Ir from"node:path";var xy=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function ht(e){let r=e?.trim();return r||null}function Py(e){return[...new Set(e.filter(r=>!!r))]}function Ey(){let e=_y(),r=ht(process.env.KYNVER_OPENCLAW_NPM_ROOT)??ht(process.env.OPENCLAW_NPM_ROOT)??Ir.join(e,".openclaw","npm"),t=ht(process.env.KYNVER_NPM_GLOBAL_ROOT)??ht(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(ht(process.env.NPM_CONFIG_PREFIX)?Ir.join(ht(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):Ir.join(e,".npm-global","lib","node_modules"));return Py([Ir.join(r,"lib","node_modules"),Ir.join(r,"node_modules"),t.endsWith("node_modules")?t:Ir.join(t,"lib","node_modules")])}async function Ay(e){try{let r=JSON.parse(await Cy(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function Oy(e){let r=Ey(),t=new Set,n=[];for(let o of r){let s=Ir.join(o,e,"package.json");t.has(s)||(t.add(s),n.push(s))}return n}async function Io(e=new Date().toISOString()){let r={};for(let t of xy){let n=null;for(let o of Oy(t)){let s=await Ay(o);s&&(!n||pn(s,n.version)>0)&&(n={version:s,path:o})}n&&(r[t]={version:n.version,observedAt:e,path:n.path})}return r}function Iy(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 ia(e={}){let[r,t]=await Promise.all([Io(),Promise.resolve(oa({cwd:e.cwd,repoRoot:e.repoRoot}))]),n={},o=e.selfPackageName==="@kynver-app/runtime"&&e.selfVersion?e.selfVersion:an;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:Iy(r),repo:t,self:n}}async function Ny(e={}){let r=await ia(e);return Oo(r)}async function aa(e={}){let r=await ia(e);return sa(r)}function la(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}I();function or(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}}I();function Ad(){let e=Number(process.env.KYNVER_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):3e4}async function Od(e){let r=new AbortController,t=setTimeout(()=>r.abort(),Ad());try{return await e(r.signal)}finally{clearTimeout(t)}}function Id(e){return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:Ad()}}}async function kr(e,r,t){let n;try{n=await Od(s=>fetch(e,{method:"POST",headers:or(r),body:JSON.stringify(t),signal:s}))}catch(s){return Id(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 kr(e,r,t);if(o.ok||o.status!==401)return o;let s=await xd(r,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await kr(e,s.token,t),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function qo(e,r){let t;try{t=await Od(o=>fetch(e,{method:"GET",headers:or(r),signal:o}))}catch(o){return Id(o)}let n=null;try{n=await t.json()}catch{n=null}return{ok:t.ok,status:t.status,response:n}}var zo=[{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"}],Nd=new Map(zo.map(e=>[e.slug,e]));function Aa(e){if(!e)return null;let r=e.trim().toLowerCase();return Nd.get(r)??null}function Td(e){return Aa(e)?.dispatchLane??null}function Xo(e){return Aa(e)?.defaultRoleLane??null}function qR(e){return e?Nd.has(e.trim().toLowerCase()):!1}function Oa(){return zo.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function zR(){return zo.filter(e=>e.dispatchLane==="landing").map(e=>e.slug)}function Dd(e){return(e??"").trim().toLowerCase()}function XR(e){switch(Dd(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 QR(e){let r=Dd(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=XR(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function Md(e){return QR(e)??"any"}Rt();Cn();L();L();function Qo(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Ia(e){return e.toLowerCase()}function ZR(e){let r=Qo(e,"roleLane");if(r)return r;let t=Ia(Qo(e,"executorRef")),n=Ia(Qo(e,"title")),o=Ia(Qo(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=Xo(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function Ud(e){let r=ZR(e);return r?{...e,roleLane:r}:e}I();var xe="cursor",ev=new Set(["claude","opus","anthropic"]),rv=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function Na(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Ve(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return ev.has(r)?!0:r.includes("claude")||r.includes("opus")}function Zo(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Ve(r))return!0;let t=Na(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=Na(e,"description");if(rv.some(s=>s.test(n)))return!0;let o=Na(e,"title");return!!/\[use-claude-worker\]/i.test(o)}function tv(e,r){return{provider:xe,model:Da,rule:`policy:cursor_default${r}`,requestedModel:e}}function Ta(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Ve(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(Zo(t)||r.rule==="explicit:cli"&&Ve(r.provider)||!Ve(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return tv(r.model,o)}function En(e,r=xe){let t=e?.trim();return t?Ve(t)?xe:t==="codex"?"codex":t:r}function nv(e){let r=[...new Set(e.map(t=>t.trim().toLowerCase()).filter(Boolean))];return r.includes(xe)?[...new Set(r.map(t=>Ve(t)?xe:t))]:r.every(t=>Ve(t))?[xe]:r}var Ld={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 Kr(e){return Ld[e]}function Ma(){return Object.values(Ld)}import{existsSync as sv}from"node:fs";import{homedir as iv}from"node:os";import Bd from"node:path";import{createHash as Wd}from"node:crypto";import{statSync as ov}from"node:fs";import{spawnSync as Hd}from"node:child_process";function Ge(e){try{let r=ov(e),t=`${e}|${r.size}|${r.mtimeMs}`;return Wd("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function Ot(e){return Wd("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function Ee(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function Ye(e,r,t={}){let n=t.timeoutMs??8e3;try{let o=Hd(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 es(e,r,t={}){let n=t.timeoutMs??8e3;try{return Hd(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 av="codex";function lv(){let e=iv();return[Bd.join(e,".codex","auth.json"),Bd.join(e,".config","codex","auth.json")]}function Ua(e=new Date().toISOString()){let r=Ee(av,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:Ot("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=lv().find(s=>sv(s)),n=Ye(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?Ge(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 cv}from"node:fs";import{homedir as uv}from"node:os";import La from"node:path";function dv(){let e=process.env.HERMES_HOME?.trim(),r=e?La.resolve(e):La.join(uv(),".hermes");return La.join(r,"auth.json")}function An(e=new Date().toISOString()){let r=Ee("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Ye(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=dv(),o=cv(n),s=es(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?Ge(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 yr(e=new Date().toISOString()){let r=Ua(e);if(r.ready)return{...r,path:"codex_cli"};let t=An(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 Fd=["low","medium","high"],$d={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function Wa(e,r){let t=Kr(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function Kd(e,r){let t=Kr(e.providerId),n=Kr(r.providerId),o=Fd.indexOf(t.costTier)-Fd.indexOf(n.costTier);if(o!==0)return o;let s=$d[e.binding.authSource]-$d[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function rs(e){let r=Ma().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&Wa(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(Kd)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return Wa(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 pv}from"node:fs";import{homedir as mv}from"node:os";import fv from"node:path";var gv="claude";function hv(){let e=mv();return[fv.join(e,".claude",".credentials.json")]}function ts(e=new Date().toISOString()){let r=Ee(gv,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!0,authSource:"api_key_env",sessionFingerprint:Ot("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=Ye(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=hv().find(i=>pv(i)),o=es(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?Ge(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 kv}from"node:fs";import{homedir as yv}from"node:os";import Rv from"node:path";var vv="agent";function bv(){let e=yv();return[Rv.join(e,".config","cursor","auth.json")]}function ns(e=new Date().toISOString()){let r=Ee(vv,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!0,authSource:"api_key_env",sessionFingerprint:Ot("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=Ye(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=bv().find(s=>kv(s)),o=!!n&&t.ok;return{providerId:"cursor",ready:o,authSource:"oauth_local",sessionFingerprint:n?Ge(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 Sv,readFileSync as wv}from"node:fs";import{homedir as Cv}from"node:os";import Ha from"node:path";var _v=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function xv(){let e=process.env.HERMES_HOME?.trim(),r=e?Ha.resolve(e):Ha.join(Cv(),".hermes");return Ha.join(r,".env")}function Pv(e){try{let r=wv(e,"utf8"),t=[];for(let n of _v)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function Ba(e=new Date().toISOString()){let r=Ee("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Ye(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=xv(),o=Sv(n),s=o?Pv(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?Ge(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 Fa(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=yr(r),n={codex:t,cursor:ns(r),claude:ts(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:Ba(r),hermesOpenAiCodex:An(r),codexAdapterPath:t.path,readyCount:o}}function Ev(e,r){switch(e){case"codex":return yr(r);case"cursor":return ns(r);case"claude":return ts(r)}}var Av=[/\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],Ov=[/\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 $a(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function jd(e){let r=$a(e,"executorRef").toLowerCase(),t=$a(e,"title").toLowerCase(),n=$a(e,"description").toLowerCase(),o=`${r}
|
|
4
|
+
`):""}function Fu(e){return e?sa(Wu.resolve(e),"utf8"):""}function Ir(e){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function gr(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 hn(e,r){try{process.kill(-e,r)}catch{process.kill(e,r)}}function $u(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 ia(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var w=F(()=>{"use strict"});function aa(e){return By.has(e)?!0:Wy.some(r=>e.endsWith(r))}function ju(e){return Object.keys(e).filter(aa).sort()}function Ne(e){let r={...e};for(let t of Object.keys(r))aa(t)&&delete r[t];return r}function Hy(e){let r=ju(e);return{forbiddenPresent:r,safe:r.length===0}}function Vu(e){return Ne(e)}var Ku,By,Wy,Or=F(()=>{"use strict";Ku=["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"],By=new Set(Ku),Wy=["_SECRET","_API_KEY"]});import{spawnSync as Yu}from"node:child_process";function ue(e,r,t={}){let n=Yu("git",r,le({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);fr(o)}return n.stdout||""}function Ju(e){ue(e,["rev-parse","--show-toplevel"])}function kn(e){return ue(e,["status","--short"],{allowFailure:!0}).split(`
|
|
5
|
+
`).map(r=>r.trim()).filter(Boolean)}function Q(e,r){try{let t=Yu("git",r,le({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 Gu(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 Wo(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 la(n,"missing worktree path");let s=Q(e,["rev-parse","HEAD"]);if(s.status!==0)return la(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 la(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=Gu(e,i,a),c=Gu(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 la(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var Ce=F(()=>{"use strict";w();Or()});import{homedir as ca}from"node:os";import Nr from"node:path";function qu(e){return e==="~"?ca():e.startsWith("~/")||e.startsWith("~\\")?Nr.join(ca(),e.slice(2)):e}function Rt(e){return Nr.resolve(qu(e))}function he(e){let r=qu(e),t=Nr.resolve(r),n=Nr.resolve(ca());return t===n?"~":t.startsWith(`${n}${Nr.sep}`)?`~/${Nr.relative(n,t).split(Nr.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 he(e)}var nr=F(()=>{"use strict"});import{existsSync as pa,readFileSync as zu}from"node:fs";import{homedir as Fy}from"node:os";import hr from"node:path";import{fileURLToPath as $y}from"node:url";function jy(e){let r=hr.join(e,"package.json");if(!pa(r))return null;try{let t=JSON.parse(zu(r,"utf8"));return typeof t.name=="string"?t.name.trim():null}catch{return null}}function Xu(e){return jy(e)==="kynver"}function da(e){let r=hr.resolve(e);if(!pa(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?hr.resolve(n):null}function Vy(e=import.meta.url){let r=hr.dirname($y(e));for(let t=0;t<8;t+=1){let n=hr.join(r,"package.json");if(pa(n))try{if(JSON.parse(zu(n,"utf8")).name==="@kynver-app/runtime")return r}catch{}let o=hr.dirname(r);if(o===r)break;r=o}return null}function ua(e,r,t,n){if(!t)return;let o=hr.resolve(t);e.has(o)||Xu(o)&&(e.add(o),r.push({repo:o,source:n}))}function Qu(e){let r=e?.cwd??process.cwd(),t=new Set,n=[];ua(t,n,da(r),"cwd_git");let o=Vy(e?.runtimeModuleUrl??import.meta.url);o&&ua(t,n,da(o),"runtime_checkout");let s=Fy();for(let i of Ky)ua(t,n,Rt(hr.join(s,i)),"well_known_path");return n}function kr(e){return Qu(e)[0]??null}var Ky,yn=F(()=>{"use strict";Ce();nr();Ky=["Kynver","repos/Kynver","repos/kynver-source-main","code/Kynver","projects/Kynver"]});function bt(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 rd(e,r){return e[r]?.trim()||null}function Te(e=process.env,r={}){let t=[],n=r.boxKind?.trim();if(n)return{boxKind:bt(n),source:"config",slugInferenceBlocked:!1,warnings:t};let o=rd(e,"KYNVER_BOX_KIND");if(o)return{boxKind:bt(o),source:"env",slugInferenceBlocked:!1,warnings:t};let s=rd(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 je(e={},r=process.env){return Te(r,e).boxKind}var De=F(()=>{"use strict"});import{readFileSync as uR}from"node:fs";import td from"node:os";function St(e){if(e!==void 0){let r=e.match(/^MemAvailable:\s+(\d+)\s*kB/m);return r?Number(r[1])*1024:td.freemem()}if(process.platform==="linux")try{let t=uR("/proc/meminfo","utf8").match(/^MemAvailable:\s+(\d+)\s*kB/m);if(t)return Number(t[1])*1024}catch{}return td.freemem()}var Ko=F(()=>{"use strict"});import{existsSync as dR,readFileSync as pR,statfsSync as mR}from"node:fs";function id(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!dR(e))continue;let r=pR(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}function Sa(e={}){if(!(e.forceWsl===void 0?id():e.forceWsl))return null;let t=e.wslHostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||sd,n=e.wslHostFreeWarnBytes??nd,o=e.wslHostFreeCriticalBytes??od,s=e.statfs??mR,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. ${ad()}`),{ok:f,path:t,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:n,criticalBelowBytes:o,reason:p,probeError:null}}function ad(){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 nd,od,sd,wa=F(()=>{"use strict";nd=25*1024*1024*1024,od=12*1024*1024*1024,sd="/mnt/c"});import{statfsSync as fR}from"node:fs";function Me(e={}){let r=e.diskPath?.trim()||"/",t=e.diskFreeWarnBytes??gR,n=e.diskFreeCriticalBytes??hR,o=e.diskMaxUsedPercent??kR,s=e.diskHardMaxUsedPercent??yR,i=fR(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:Sa(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("; ")),RR({ok:h,path:r,freeBytes:a,totalBytes:l,usedPercent:c,warnBelowBytes:t,criticalBelowBytes:n,maxUsedPercent:o,hardMaxUsedPercent:s,reason:S,wslHost:k})}function RR(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 gR,hR,kR,yR,wt=F(()=>{"use strict";wa();gR=30*1024*1024*1024,hR=15*1024*1024*1024,kR=80,yR=90});import{existsSync as ld}from"node:fs";import{homedir as ud}from"node:os";import yr from"node:path";function te(e){let r=yr.resolve(Rt(e.trim()));for(;vR.has(yr.basename(r));)r=yr.dirname(r);return r}function de(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return te(e);let r=v().harnessRoot?.trim();if(r)return te(r);let t=yr.join(ud(),".kynver","harness");return ld(t)?t:ld(cd)?cd:t}function pe(e){return yr.join(te(e),"runs")}function or(e){return yr.join(te(e),"worktrees")}function Dr(){let e=de();return{harnessRoot:e,runsDir:pe(e),worktreesDir:or(e)}}function Ct(e,r){return yr.join(e,R(r))}var cd,vR,ke=F(()=>{"use strict";O();nr();w();cd=yr.join(ud(),".openclaw","harness"),vR=new Set(["runs","worktrees"])});import{existsSync as bR,readdirSync as SR,statSync as wR}from"node:fs";import _t from"node:path";function oe(){return Dr()}function U(e){let{runsDir:r}=oe();return _(_t.join(Ct(r,R(e)),"run.json"))}function ne(){let{runsDir:e}=oe();return dd(e)}function jo(e){return dd(pe(e))}function CR(e){try{return wR(e).isDirectory()}catch{return!1}}function dd(e){if(!bR(e))return[];let r=[];for(let t of SR(e,{withFileTypes:!0})){if(t.name==="runs")continue;let n=_t.join(e,t.name);if(!CR(n))continue;let o=_(_t.join(n,"run.json"),void 0);o?.id&&r.push(o)}return r}function ye(e,r){let{runsDir:t}=oe();return _(_t.join(Ct(t,R(e)),"workers",R(r),"worker.json"))}function Ue(e){let{runsDir:r}=oe();ce(_t.join(Ct(r,e.id),"run.json"),e)}function V(e,r){let{runsDir:t}=oe();ce(_t.join(Ct(t,e),"workers",r.name,"worker.json"),r)}function x(e){let{harnessRoot:r}=oe();return bn(r,e)}function bn(e,r){return Ct(pe(e),R(r))}var L=F(()=>{"use strict";ke();w()});import{existsSync as _R,readdirSync as xR}from"node:fs";import ER from"node:path";function Ee(e){let r=new Set;for(let n of Object.keys(e.workers||{}))r.add(R(n));let t=ER.join(x(e.id),"workers");if(!_R(t))return[...r];for(let n of xR(t,{withFileTypes:!0}))n.isDirectory()&&r.add(R(n.name));return[...r]}var xt=F(()=>{"use strict";L();w()});function Ca(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 pd(e){let r=e.trim();if(!r)return null;let t=Ca(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=Ca(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=Ca(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function md(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?pd(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=pd(t);return n||t}var fd=F(()=>{"use strict"});import{existsSync as PR,readFileSync as AR}from"node:fs";function _a(e){return e==="complete"}function Mr(e){return _a(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function _e(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!PR(e))return r;let t=Date.now()+IR,n=new Date(t).toISOString(),o=AR(e,"utf8").split(`
|
|
6
|
+
`).filter(Boolean);for(let s of o){let i=yt(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)),_a(r.lastHeartbeatPhase)&&(r.terminalFinalResult=md(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 IR,Ur=F(()=>{"use strict";fd();w();IR=6e4});function TR(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function DR(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 MR(e){let r=TR(e[0]);return!!(r&&OR.has(r))}function Vo(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function xa(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function UR(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function LR(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;NR.has(n)&&(t+=1);continue}r.push(n)}}return r}function gd(e){let r=!1,t=e.map(o=>{let s=UR(o);return s!==o&&(r=!0),s}),n=LR(t);if(n.length===2){let[o,s]=n;if(Vo(s))return{argv:[t[0]??"rg","-g",s,o,"."],changed:!0}}return{argv:t,changed:r}}function Go(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=DR(i.trim());if(!a.length||!MR(a))return i;let l=gd(a);return l.changed?(o=!0,l.argv.join(" ")):i});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function Ea(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 hd(e){let{pattern:r,target:t}=Ea(e);return r?xa(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:Vo(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function kd(e){let{pattern:r,target:t}=Ea(e);if(!r)return null;if(xa(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&Vo(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function yd(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 Rd(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 Yo(e){let r=e.meta?.trim()||(e.command?Rd(e.command):null)||null;if(r){let t=hd(r),n=yd(t);if(n)return n;let o=kd(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=Go(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 OR,NR,Pa=F(()=>{"use strict";OR=new Set(["rg","ripgrep","grep"]),NR=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function Sn(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function FR(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 wn(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function vd(e){let r=e.metadata;if(!wn(r))return null;let t=r.vulnerabilities;if(!wn(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 $R(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 KR(e,r){let t=e.error;if(wn(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?Sn(o.split(`
|
|
7
|
+
`).find(Boolean)??o,160):"npm audit failed"}function bd(e){let r=`${e.stdout}
|
|
8
|
+
${e.stderr}`.trim(),t=FR(r);if(!t||!wn(t)){let o=Sn(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(wn(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${KR(t,e.stderr)}`};let n=vd(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:$R(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function jR(e){return BR.test(e)}function VR(e){return WR.test(e)}function GR(e){let r=Yo({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&&HR.test(n)){let i=Sn(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=Go(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=Sn(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 Jo(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(jR(e.command)){let i=r.trim()||n.trim()||t.trim();return bd({exitCode:e.exitCode,stdout:i,stderr:t})}if(VR(e.command))return GR({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=Yo({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=Sn(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var BR,WR,HR,Aa=F(()=>{"use strict";Pa();BR=/\bnpm\s+audit\b/i,WR=/\b(rg|ripgrep)\b/i,HR=/\b(error|invalid|unknown|panic|not found)\b/i});import{existsSync as YR,readFileSync as JR}from"node:fs";function qR(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function Sd(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 zR(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 wd(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 XR(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function Et(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null};if(!YR(e))return r;let t=JR(e,"utf8").split(`
|
|
9
|
+
`).filter(Boolean);for(let n of t){let o=yt(n);if(!o)continue;let s=qR(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=Sd(a);l&&(r.currentTool=l)}let i=wd(o);i&&XR(r,Jo({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&zR(r,o)}return r}function QR(e){return Et(e)}function Cd(e){let r=wd(e);if(!r)return;let t=Jo({command:r.command,exitCode:r.exitCode,stdout:r.stdout,stderr:r.stderr,interleavedOutput:r.interleaved}),n=Mo(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 Ia(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] ${Mo(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"?Cd(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=Sd(n)??"tool";return`[tool:${r}] ${o}`}if(e.type==="result")return`[result] ${e.subtype||""} ${Mo(String(e.result||""))}`.trim()}var Cn=F(()=>{"use strict";Aa();w()});function ev(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function _d(e){let r=(e??"").trim();if(!r)return null;for(let t of ZR)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${ev(r)}`};return null}var ZR,xd=F(()=>{"use strict";ZR=[{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 Ed(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function rv(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 tv(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Ed(e.head)}function nv(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 Lr(e){if(e.alive||rv(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=Ed(e.headCommit)??tv(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:nv(s,r,t)}}var _n=F(()=>{"use strict"});function xn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function ov(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 sv(e){if(xn(e.headCommit)||xn(e.prUrl)||xn(e.artifactBundlePath)||xn(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&xn(r.head))}function Br(e){return ov(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:sv(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 Pd(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var En=F(()=>{"use strict"});function Oa(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 Ad(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function Pt(e){let r=e.trim();if(!r)return null;let t=Oa(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=Oa(s[1]??"");u&&n.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=Oa(r.slice(i,a+1));u&&n.push(u)}if(n.length===0)return null;let l=n[n.length-1],c=Ad(l);for(let u of n){let d=Ad(u);d>c&&(l=u,c=d)}return l}var qo=F(()=>{"use strict"});function At(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function iv(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function Wr(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:At(e)}function zo(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Id(e){let r=null;if(typeof e=="string"){let o=Pt(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=Wr(String(s.prUrl??s.pr_url??"")),a=At(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:At(s.mergeCommit??s.merge_commit),reason:At(s.reason)})}return n}function Od(e,r){let t=[],n=Wr(At(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=Wr(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function Na(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(!iv(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?Wr(At(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?Wr(r.targetPrUrls[0]):null):null;if(s){let d=Od(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=Id(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=Id(n),a=new Map(i.map(d=>[zo(d.prUrl),d])),l=new Set(r.targetPrUrls.map(d=>zo(Wr(d)??d)).filter(Boolean)),c=Od(t,n);if(r.landingOnly)for(let d of c){if(l.size>0&&!l.has(zo(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=zo(Wr(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 Ta(e){if(e.blocked)return e.detail??e.reason}var Da=F(()=>{"use strict";qo()});function Nd(e){let r=Date.now();if(e.completionBlocker&&!Td(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&cv(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=Br(o);if(s.blocked){let i=Pd(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=Na({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Ta(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(lv(e))return{state:"done",reason:"empty abandoned worker record"};let o=_d(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Lr({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>av)return{state:"needs_attention",reason:`no first stream event ${ia(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 ${ia(n)}s`}:{state:"ok",reason:"recent activity"}}function Td(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function lv(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 cv(e){let r=null;if(typeof e=="string"?r=Pt(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 uv(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??Mr(t))}function T(e,r={}){let t=Et(e.stdoutPath),n=_e(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=uv(e,t.finalResult,n),i=o?!1:$(e.pid),a=Uo(e.stdoutPath),l=Uo(e.stderrPath),c=Uo(e.heartbeatPath),u=kn(e.worktreePath),d=Wo(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),f=$u([t.lastEventAt,n.lastHeartbeatAt,Lo(e.stdoutPath),Lo(e.stderrPath),Lo(e.heartbeatPath)]),m=t.error||!i&&!s&&Bo(e.stderrPath,10).trim()||void 0,p=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,g=Td(p)?null:p,k=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,h=Nd({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 Z(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function Hr(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}function Ot(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 av,It,G=F(()=>{"use strict";Ur();Cn();xd();_n();Ce();En();Da();qo();w();av=18e4,It=6e5});import{readFileSync as dv}from"node:fs";function pv(e){if(!e||process.platform!=="linux")return null;try{return dv(`/proc/${e}/cmdline`,"utf8").replace(/\0/g," ")}catch{return null}}function Dd(e){if(!e.pid||process.platform!=="linux")return!0;let r=pv(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 Pn(e){if(typeof e.completionBlocker=="string"&&e.completionBlocker.trim())return!1;let r=T(e);return r.alive&&!Dd(e)?!1:r.alive&&!r.finalResult&&r.attention.state!=="done"}var Xo=F(()=>{"use strict";G()});import Ud from"node:os";import mv from"node:path";function Md(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function fv(e=v(),r,t){let n=Md(e.perWorkerMemBytes,An),o=Md(e.memReserveBytes,In),s=Math.min(1,Math.max(.1,Number(e.memUtilization)>0?Number(e.memUtilization):On)),i=Zo({config:e,configuredMaxWorkersOverride:r,totalMemBytes:t??Ud.totalmem()});return{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i.configuredMaxWorkers,autoCap:i.autoCap,workerCapSource:i.workerCapSource}}function Ma(e,r={}){let t=r.perWorkerMemBytes??An,n=r.memReserveBytes??In,o=r.memUtilization??On,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,Qo)}function gv(){return St()}function hv(e){let r=0;for(let t of Ee(e)){let n=_(mv.join(x(e.id),"workers",R(t),"worker.json"),void 0);!n||!Pn(n)||r++}return r}function kv(){let e=0;for(let r of ne())e+=hv(r);return e}function Fr(e){let r=e.config??v(),t=e.totalMemBytes??Ud.totalmem(),{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s,configuredMaxWorkers:i,autoCap:a,workerCapSource:l}=fv(r,e.configuredMaxWorkersOverride,t),c=je(r),u=e.freeMemBytes??gv(),d=e.activeWorkers??kv(),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),b=e.skipDiskGate||process.env.KYNVER_RESOURCE_GATE_SKIP_DISK==="1"?void 0:Me({diskPath:e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/"});b&&!b.ok&&(W=0);let P=null;return W<=0&&(b&&!b.ok?P=b.reason??"disk gate blocked worker admission":d>=h?P=`at worker limit (${d}/${h} running)`:p<=0?P="insufficient free memory \u2014 waiting for workers to finish":P="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:P,...b?{diskGate:b}:{}}}var An,In,On,Qo,Nn=F(()=>{"use strict";Ko();O();De();es();wt();L();xt();Xo();w();An=500*1024*1024,In=4*1024*1024*1024,On=.85,Qo=64});function $r(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Zo(e){let r=e.config??{},t=e.env??process.env,n=$r(r.perWorkerMemBytes,An),o=$r(r.memReserveBytes,In),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):On)),i=Ma(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:$r(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let c=$r(r.maxConcurrentWorkers,0)||null;if(c)return{configuredMaxWorkers:Math.min(c,Qo),autoCap:i,workerCapSource:"config"}}let l=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&$r(t.KYNVER_MAX_WORKERS,0)||null;return l?{configuredMaxWorkers:Math.min(l,Qo),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}function Ua(e={}){let r=e.totalMemBytes??0,t=Ma(r,{perWorkerMemBytes:$r(e.config?.perWorkerMemBytes,An),memReserveBytes:$r(e.config?.memReserveBytes,In),memUtilization:e.config?.memUtilization&&Number(e.config.memUtilization)>0?Number(e.config.memUtilization):On}),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 es=F(()=>{"use strict";Nn()});var Bd={};Ay(Bd,{runDeviceLogin:()=>La});import Ld from"node:os";function yv(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?tr(String(r)):void 0}async function Rv(e){await new Promise(r=>setTimeout(r,e))}async function La(e){let r=yv(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=`${Ld.hostname()} (${Ld.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 Rv(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?(Tn(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 Ba=F(()=>{"use strict";O();w()});import{existsSync as Hd,mkdirSync as Fd,readFileSync as $d,writeFileSync as Kd}from"node:fs";import{homedir as vv,totalmem as bv}from"node:os";import Wa from"node:path";import Sv from"node:os";function v(){if(!Hd(rs))return{};try{return JSON.parse($d(rs,"utf8"))}catch{return{}}}function Ve(e){Fd(ts,{recursive:!0}),Kd(rs,`${JSON.stringify(Ha(e),null,2)}
|
|
10
|
+
`,{mode:384})}function Ha(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:he(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:he(e.defaultRepo.trim())}:{}}}function Tt(e){return Ha(e)}function wv(e,r){let t=Dn(),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"?kr()?.repo:void 0)||e.defaultRepo?.trim()||process.env.KYNVER_DEFAULT_REPO?.trim()||process.env.KYNVER_HARNESS_REPO?.trim()||kr()?.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:tr(n)}:{},...o?{agentOsId:o}:{},...i?{defaultRepo:i}:{},...a?{harnessRoot:a}:{},...typeof r.agentOsSlug=="string"?{agentOsSlug:r.agentOsSlug}:e.agentOsSlug?{agentOsSlug:e.agentOsSlug}:{}}}function Cv(e,r,t=bv()){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=Te(process.env,{...e,...o?{boxKind:bt(o)}:{}}).boxKind,i=Me({diskPath:typeof r.diskPath=="string"?r.diskPath:"/"}),a=Ua({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 Dn(){if(!Hd(Nt))return{};try{return JSON.parse($d(Nt,"utf8"))}catch{return{}}}function jd(e){Fd(ts,{recursive:!0}),Kd(Nt,`${JSON.stringify(e,null,2)}
|
|
11
|
+
`,{mode:384})}function ee(){return process.env.KYNVER_API_KEY?process.env.KYNVER_API_KEY:Dn().apiKey}function Tn(e){jd({...Dn(),apiKey:e})}function Wd(e){let r=process.env.KYNVER_RUNNER_TOKEN?.trim();if(r)return r;let t=Dn();if(t.runnerToken&&!(e&&t.runnerTokenAgentOsId&&t.runnerTokenAgentOsId!==e))return t.runnerToken}function Kr(e,r){jd({...Dn(),runnerToken:r,runnerTokenAgentOsId:e})}function B(e){let r=Mn(e);return r||ns("requires --base-url, KYNVER_API_URL, KYNVER_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl"),r}function Vd(e){return Mn(e)}function Mn(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?tr(String(r)):void 0}function Gd(e,r){let t=e||Wd(r)||(r?void 0:Wd(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)}function _v(e,r){let t=Gd(e,r);if(t)return t;ns("requires --secret, KYNVER_RUNNER_TOKEN, a scoped runner token (`kynver runner credential`), ~/.kynver/credentials runnerToken, KYNVER_API_KEY with an API base URL to mint one, or (legacy) KYNVER_RUNTIME_SECRET / KYNVER_CRON_SECRET / OPENCLAW_CRON_SECRET")}async function Fa(e,r,t){let n=Gd(e,r);if(n)return{ok:!0,secret:n};let o=ee(),s=Mn(t?.baseUrl);if(o&&r&&s)try{let i=await jr(r,{baseUrl:s,apiKey:o});return Kr(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 Fa(e,r,t);if(n.ok)return n.secret;ns(n.reason)}async function Yd(e,r){let t=ee(),n=Mn(r?.baseUrl);if(!t||!e||!n)return null;try{let o=await jr(e,{baseUrl:n,apiKey:t});return Kr(e,o),o}catch{return null}}async function Jd(e,r,t){let n=ee(),o=Mn(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 jr(r,{baseUrl:o,apiKey:n});return s&&s!==e?(Kr(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 jr(e,r){let t=r?.apiKey||ee();if(!t)throw new Error("API key required \u2014 run `kynver login` first");let o=`${B(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 qd(e){let r=(e.agentOsId?String(e.agentOsId):v().agentOsId)||"";r||ns("runner credential requires --agent-os-id or agentOsId in ~/.kynver/config.json");try{let t=await jr(r,{baseUrl:e.baseUrl?String(e.baseUrl):void 0});Kr(r,t),console.log(JSON.stringify({ok:!0,agentOsId:r,credentialsPath:Y(Nt),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 ns(e){console.error(e),process.exit(1)}function Un(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 os(e){let r=v(),t=Me({diskPath:typeof e.diskPath=="string"?e.diskPath:"/"}),n=Ua({totalMemBytes:Sv.totalmem(),diskPath:t.path,diskGateOk:t.ok,diskFreeBytes:t.freeBytes,config:r}),o=Cv(r,e),s=Ha({...r,...wv(r,e),...o,workerProvider:typeof e.provider=="string"?e.provider:r.workerProvider||"cursor",...e.chatOauth===!0?{chatUseClaudeOauth:!0}:{}});Ve(s);let i=Te(process.env,s),a,l=ee(),c=s.agentOsId;if(l&&c)try{let u=await jr(c,{baseUrl:typeof e.apiBaseUrl=="string"?e.apiBaseUrl:s.apiBaseUrl,apiKey:l});Kr(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(rs),config:Tt(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 zd(e){let r=typeof e.apiKey=="string"?e.apiKey:process.env.KYNVER_API_KEY;if(r){Tn(r),console.log(JSON.stringify({ok:!0,credentialsPath:Y(Nt)},null,2));return}let{runDeviceLogin:t}=await Promise.resolve().then(()=>(Ba(),Bd));(await t(e)).ok||process.exit(1),console.log(JSON.stringify({ok:!0,credentialsPath:Y(Nt)},null,2))}var ts,rs,Nt,bN,SN,O=F(()=>{"use strict";yn();nr();w();De();es();wt();ts=Wa.join(vv(),".kynver"),rs=Wa.join(ts,"config.json"),Nt=Wa.join(ts,"credentials");bN=500*1024*1024,SN=4*1024*1024*1024});import{existsSync as Iy,readFileSync as Oy}from"node:fs";import{dirname as oa,join as Mu}from"node:path";import{fileURLToPath as Du}from"node:url";function Ny(e){let r=oa(Du(e));for(let t=0;t<6;t+=1){if(Iy(Mu(r,"package.json")))return r;let n=oa(r);if(n===r)break;r=n}throw new Error(`package.json not found above ${oa(Du(e))}`)}function Uu(e=import.meta.url){let r=Mu(Ny(e),"package.json"),t=JSON.parse(Oy(r,"utf8"));if(typeof t.version!="string"||!t.version.trim())throw new Error(`Missing package.json version at ${r}`);return t.version}var gn=Uu();function Ty(e){return e.some(r=>r==="--version"||r==="-v")}function Dy(e,r){console.log(r?`${r} ${e}`:e),process.exit(0)}function Lu(e,r=import.meta.url,t){return Ty(e)?(Dy(Uu(r),t),!0):!1}yn();import{existsSync as Zu,readFileSync as Gy}from"node:fs";import Ho from"node:path";var fa={"@kynver-app/runtime":"0.1.83","@kynver-app/openclaw-agent-os":"0.1.43","@kynver-app/mcp-agent-os":"0.3.34"},ga=Object.keys(fa),ma={"@kynver-app/runtime":"Kynver runtime","@kynver-app/openclaw-agent-os":"OpenClaw AgentOS plugin","@kynver-app/mcp-agent-os":"AgentOS MCP server"},Yy={"@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 ed(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 vn(e,r){let t=ed(e),n=ed(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 ha(e,r){return vn(e,r)>=0}function Jy(e){let r=null;for(let t of e)(!r||vn(t,r)>0)&&(r=t);return r}function qy(e){try{let r=JSON.parse(Gy(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function zy(e,r){let t=[r,process.env.KYNVER_REPO,e].filter(o=>!!o?.trim());for(let o of t){let s=Ho.resolve(o);if(Zu(Ho.join(s,"packages/kynver-runtime/package.json"))&&Zu(Ho.join(s,"package.json")))return s}return kr({cwd:e})?.repo??null}function ka(e={}){let r=e.cwd??process.cwd(),t=zy(r,e.repoRoot);if(!t)return{};let n={};for(let o of ga){let s=Ho.join(t,Yy[o]),i=qy(s);i&&(n[o]={version:i,source:"repo",path:s})}return n}function Xy(e){return e==="@kynver-app/runtime"?["npm run kynver:build","npm run kynver"]:[`npm run build -w ${e}`]}function Qy(e){let{packageName:r,minimumVersion:t,effectiveVersion:n,effectiveSource:o,repoVersion:s}=e,i=[];return s&&ha(s,t)?(i.push(`Use the monorepo checkout (${s}) instead of a stale npm install: ${Xy(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 Zy(e){if(e.length===0)return{version:null,source:"unknown"};let r=Jy(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 Fo(e={}){let r=(i,a)=>i?typeof i=="string"?{version:i,source:a}:i:null,t=ga.map(i=>{let a=fa[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}=Zy(l),p=u?.version??null,g=f?ha(f,a):!1,k=g?[]:Qy({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 Rn=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(`
|
|
12
|
+
`)),this.name="MemoryCostPackageVersionGuardError",this.result=r}};function ya(e={}){let r=Fo(e);if(!r.ok)throw new Rn(r);return r}function eR(e){return new Rn(e).message}import{readFile as rR}from"node:fs/promises";import{homedir as tR}from"node:os";import Tr from"node:path";var nR=["@kynver-app/runtime","@kynver-app/openclaw-agent-os","@kynver-app/mcp-agent-os"];function vt(e){let r=e?.trim();return r||null}function oR(e){return[...new Set(e.filter(r=>!!r))]}function sR(){let e=tR(),r=vt(process.env.KYNVER_OPENCLAW_NPM_ROOT)??vt(process.env.OPENCLAW_NPM_ROOT)??Tr.join(e,".openclaw","npm"),t=vt(process.env.KYNVER_NPM_GLOBAL_ROOT)??vt(process.env.KYNVER_NPM_GLOBAL_MODULES_ROOT)??(vt(process.env.NPM_CONFIG_PREFIX)?Tr.join(vt(process.env.NPM_CONFIG_PREFIX),"lib","node_modules"):Tr.join(e,".npm-global","lib","node_modules"));return oR([Tr.join(r,"lib","node_modules"),Tr.join(r,"node_modules"),t.endsWith("node_modules")?t:Tr.join(t,"lib","node_modules")])}async function iR(e){try{let r=JSON.parse(await rR(e,"utf8"));return typeof r.version=="string"&&r.version.trim()?r.version.trim():null}catch{return null}}function aR(e){let r=sR(),t=new Set,n=[];for(let o of r){let s=Tr.join(o,e,"package.json");t.has(s)||(t.add(s),n.push(s))}return n}async function $o(e=new Date().toISOString()){let r={};for(let t of nR){let n=null;for(let o of aR(t)){let s=await iR(o);s&&(!n||vn(s,n.version)>0)&&(n={version:s,path:o})}n&&(r[t]={version:n.version,observedAt:e,path:n.path})}return r}function lR(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 Ra(e={}){let[r,t]=await Promise.all([$o(),Promise.resolve(ka({cwd:e.cwd,repoRoot:e.repoRoot}))]),n={},o=e.selfPackageName==="@kynver-app/runtime"&&e.selfVersion?e.selfVersion:gn;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:lR(r),repo:t,self:n}}async function cR(e={}){let r=await Ra(e);return Fo(r)}async function va(e={}){let r=await Ra(e);return ya(r)}function ba(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}O();function Le(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}}O();function Xd(){let e=Number(process.env.KYNVER_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):3e4}async function Qd(e){let r=new AbortController,t=setTimeout(()=>r.abort(),Xd());try{return await e(r.signal)}finally{clearTimeout(t)}}function Zd(e){return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:Xd()}}}async function Rr(e,r,t){let n;try{n=await Qd(s=>fetch(e,{method:"POST",headers:Le(r),body:JSON.stringify(t),signal:s}))}catch(s){return Zd(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 Rr(e,r,t);if(o.ok||o.status!==401)return o;let s=await Jd(r,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await Rr(e,s.token,t),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function ss(e,r){let t;try{t=await Qd(o=>fetch(e,{method:"GET",headers:Le(r),signal:o}))}catch(o){return Zd(o)}let n=null;try{n=await t.json()}catch{n=null}return{ok:t.ok,status:t.status,response:n}}var ep="embedded-1",xv=[{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"}],Ev={"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
|
+
`)},Pv={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},Vr={version:ep,generatedAt:"1970-01-01T00:00:00.000Z",personas:xv,instructions:Ev,policyThresholds:Pv};var Dt=Vr,rp="embedded";function Av(){return Dt}function Mt(){return Dt.version}function sr(){return rp}function $a(e,r){Dt=e,rp=r}function Ut(e){let r=Dt.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=Vr.instructions[e];return typeof t=="string"?t:""}function Gr(e,r){let t=Dt.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=Vr.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function is(e){if(!e)return null;let r=e.trim().toLowerCase();return Dt.personas.find(t=>t.slug===r)??null}var Iv=["implementation","review","landing"],Ov=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function Nv(e){return Iv.includes(e)}function Tv(e){return Ov.includes(e)}function tp(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||Nv(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:Tv(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var as=Vr.personas.map(tp),np=new Map(as.map(e=>[e.slug,e]));function Ka(e){if(!e)return null;let r=e.trim().toLowerCase(),t=np.get(r)??null,n=is(r);if(!n)return t;let o=tp(n);return t?{...o,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:o}function op(e){return Ka(e)?.dispatchLane??null}function ls(e){return Ka(e)?.defaultRoleLane??null}function Dv(e){if(!e)return!1;let r=e.trim().toLowerCase();return np.has(r)||is(r)!==null}function ja(){return as.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function Mv(){return as.filter(e=>e.dispatchLane==="landing").map(e=>e.slug)}function sp(e){return(e??"").trim().toLowerCase()}function Uv(e){switch(sp(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 Lv(e){let r=sp(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=Uv(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function ip(e){return Lv(e)??"any"}wt();Nn();L();L();function cs(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Va(e){return e.toLowerCase()}function Bv(e){let r=cs(e,"roleLane");if(r)return r;let t=Va(cs(e,"executorRef")),n=Va(cs(e,"title")),o=Va(cs(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=ls(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function ap(e){let r=Bv(e);return r?{...e,roleLane:r}:e}O();var xe="cursor",Wv=new Set(["claude","opus","anthropic"]),Hv=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function Ga(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Ge(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return Wv.has(r)?!0:r.includes("claude")||r.includes("opus")}function us(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Ge(r))return!0;let t=Ga(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=Ga(e,"description");if(Hv.some(s=>s.test(n)))return!0;let o=Ga(e,"title");return!!/\[use-claude-worker\]/i.test(o)}function Fv(e,r){return{provider:xe,model:Ja,rule:`policy:cursor_default${r}`,requestedModel:e}}function Ya(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Ge(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(us(t)||r.rule==="explicit:cli"&&Ge(r.provider)||!Ge(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return Fv(r.model,o)}function Ln(e,r=xe){let t=e?.trim();return t?Ge(t)?xe:t==="codex"?"codex":t:r}function $v(e){let r=[...new Set(e.map(t=>t.trim().toLowerCase()).filter(Boolean))];return r.includes(xe)?[...new Set(r.map(t=>Ge(t)?xe:t))]:r.every(t=>Ge(t))?[xe]:r}var lp={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 Yr(e){return lp[e]}function qa(){return Object.values(lp)}import{existsSync as jv}from"node:fs";import{homedir as Vv}from"node:os";import dp from"node:path";import{createHash as cp}from"node:crypto";import{statSync as Kv}from"node:fs";import{spawnSync as up}from"node:child_process";function Ye(e){try{let r=Kv(e),t=`${e}|${r.size}|${r.mtimeMs}`;return cp("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function Lt(e){return cp("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function Pe(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function Je(e,r,t={}){let n=t.timeoutMs??8e3;try{let o=up(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 ds(e,r,t={}){let n=t.timeoutMs??8e3;try{return up(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 Gv="codex";function Yv(){let e=Vv();return[dp.join(e,".codex","auth.json"),dp.join(e,".config","codex","auth.json")]}function za(e=new Date().toISOString()){let r=Pe(Gv,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:Lt("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=Yv().find(s=>jv(s)),n=Je(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?Ye(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 Jv}from"node:fs";import{homedir as qv}from"node:os";import Xa from"node:path";function zv(){let e=process.env.HERMES_HOME?.trim(),r=e?Xa.resolve(e):Xa.join(qv(),".hermes");return Xa.join(r,"auth.json")}function Bn(e=new Date().toISOString()){let r=Pe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Je(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=zv(),o=Jv(n),s=ds(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?Ye(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 vr(e=new Date().toISOString()){let r=za(e);if(r.ready)return{...r,path:"codex_cli"};let t=Bn(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 pp=["low","medium","high"],mp={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function Qa(e,r){let t=Yr(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function fp(e,r){let t=Yr(e.providerId),n=Yr(r.providerId),o=pp.indexOf(t.costTier)-pp.indexOf(n.costTier);if(o!==0)return o;let s=mp[e.binding.authSource]-mp[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function ps(e){let r=qa().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&Qa(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(fp)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return Qa(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 Xv}from"node:fs";import{homedir as Qv}from"node:os";import Zv from"node:path";var eb="claude";function rb(){let e=Qv();return[Zv.join(e,".claude",".credentials.json")]}function ms(e=new Date().toISOString()){let r=Pe(eb,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!0,authSource:"api_key_env",sessionFingerprint:Lt("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=Je(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=rb().find(i=>Xv(i)),o=ds(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?Ye(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 tb}from"node:fs";import{homedir as nb}from"node:os";import ob from"node:path";var sb="agent";function ib(){let e=nb();return[ob.join(e,".config","cursor","auth.json")]}function fs(e=new Date().toISOString()){let r=Pe(sb,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!0,authSource:"api_key_env",sessionFingerprint:Lt("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=Je(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=ib().find(s=>tb(s)),o=!!n&&t.ok;return{providerId:"cursor",ready:o,authSource:"oauth_local",sessionFingerprint:n?Ye(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 ab,readFileSync as lb}from"node:fs";import{homedir as cb}from"node:os";import Za from"node:path";var ub=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function db(){let e=process.env.HERMES_HOME?.trim(),r=e?Za.resolve(e):Za.join(cb(),".hermes");return Za.join(r,".env")}function pb(e){try{let r=lb(e,"utf8"),t=[];for(let n of ub)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function el(e=new Date().toISOString()){let r=Pe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Je(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=db(),o=ab(n),s=o?pb(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?Ye(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 rl(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=vr(r),n={codex:t,cursor:fs(r),claude:ms(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:el(r),hermesOpenAiCodex:Bn(r),codexAdapterPath:t.path,readyCount:o}}function mb(e,r){switch(e){case"codex":return vr(r);case"cursor":return fs(r);case"claude":return ms(r)}}var fb=[/\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],gb=[/\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 tl(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function gp(e){let r=tl(e,"executorRef").toLowerCase(),t=tl(e,"title").toLowerCase(),n=tl(e,"description").toLowerCase(),o=`${r}
|
|
13
17
|
${t}
|
|
14
|
-
${n}`;return Av.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":Ov.some(s=>s.test(o))?"low":"elevated"}function Iv(e){let r=Kr(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 Nv(e){let r=e.inventory??Fa();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function jr(e){let r=Iv({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 Ka(e){let r=e.task??{},t=jd(r),n=Nv({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:yr())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=xe;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let u=rs({inventory:n,riskClass:t});return jr(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 jr({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 jr({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 jr({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let a=rs({inventory:n,riskClass:t});if(a)return jr({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 jr({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"}})}Ar();w();import{closeSync as Gd,openSync as Yd}from"node:fs";import{spawn as Lv}from"node:child_process";var Tv=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function Dv(e){return e.replace(Tv,"")}var Mv=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function ja(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}var Uv=new Set(["cursor"]);function Vd(e){let r=e.trim().toLowerCase();return Uv.has(r)?"auto":null}function os(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=Dv(t).trim()||r;return Mv.test(o)||!ja(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 Vr(e,r){let t=(e??"").trim();return t?ja(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 ss(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=Vd(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")`}:ja(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 It="claude-sonnet-4-6",Jd={name:"claude",defaultModel:It,preflightModel(e){return os(e,It)},start(e){let r=os(e.model,It);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model,n=Yd(e.stdoutPath,"a"),o=Yd(e.stderrPath,"a"),s=["ignore",n,o],i=Lv("claude",["--model",t,"-p","--verbose","--permission-mode","bypassPermissions","--output-format","stream-json","--include-partial-messages",e.prompt],le({cwd:e.worktreePath,detached:!0,stdio:s,env:Ne(process.env)}));if(Gd(n),Gd(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}}};Ar();w();import{closeSync as Qd,existsSync as Bv,openSync as Zd}from"node:fs";import{spawn as ep}from"node:child_process";Ar();w();import{closeSync as qd,openSync as zd}from"node:fs";import{spawn as Wv}from"node:child_process";var is=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function Hv(){return Ne({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1"})}function Xd(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 Va={name:"hermes-codex",defaultModel:is,preflightModel(e){return Vr(e,is)},start(e){let r=Vr(e.model,is);if(!r.ok)throw new Error(`hermes-codex provider model preflight failed: ${r.note}`);let t=r.model,n=zd(e.stdoutPath,"a"),o=zd(e.stderrPath,"a"),s=["ignore",n,o],i=Ee("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),a=Xd(t,e.prompt),l=Wv(i,a,le({cwd:e.worktreePath,detached:!0,shell:!1,stdio:s,env:Hv()}));if(qd(n),qd(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 Fv(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var Rr=Fv();function $v(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function Kv(){return Ne({...process.env,CI:"1",NO_COLOR:"1"})}function rp(e,r){return["exec","--sandbox","read-only","--ask-for-approval","never","--model",e,r]}function jv(e,r,t){if(!(process.platform!=="win32"&&Bv("/usr/bin/script")))return ep(e,r,t);let o=[e,...r].map(s=>`'${s.replace(/'/g,"'\\''")}'`).join(" ");return ep("script",["-qfc",o,"/dev/null"],t)}var Ga={name:"codex",defaultModel:Rr,preflightModel(e){return Vr(e,Rr)},start(e){if(yr().path==="hermes_openai_codex")return Va.start(e);let t=Vr(e.model,Rr);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=Zd(e.stdoutPath,"a"),s=Zd(e.stderrPath,"a"),i=["ignore",o,s],a=$v(),l=rp(n,e.prompt),c=jv(a,l,le({cwd:e.worktreePath,detached:!0,shell:!1,stdio:i,env:Kv()}));if(Qd(o),Qd(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 Vv="claude-sonnet-4-6",Da="composer-2.5";function as(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function tp(e){return e.toLowerCase()}function Ja(e=v()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||Vv}function Ya(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 Gv(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:Da,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:It,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function np(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 Yv(e){let r=tp(as(e,"executorRef")),t=as(e,"title").toLowerCase(),n=as(e,"priority")||"normal",o=tp(as(e,"roleLane"));if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:Rr,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:Rr,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 np(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(np(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=Ja();return{model:s,provider:Ya(s),rule:"default:global"}}function ls(e){let r;if(e.explicitModel?.trim()){let o=e.explicitModel.trim(),s=Gv(o,e.explicitProvider);s?r=s:r={model:o,provider:e.explicitProvider?.trim()||Ya(o),rule:"explicit:cli",requestedModel:o}}else if(e.task&&Object.keys(e.task).length>0){let o=Yv(e.task);r={...o,requestedModel:o.model}}else{let o=Ja();r={model:o,provider:e.explicitProvider?.trim()||Ya(o),rule:"default:global",requestedModel:o}}let t=Ta({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"||Ve(t.provider)&&(e.explicitProviderIsOperatorOverride||Zo(e.task)))return t;let n=Ka({task:e.task,explicitProvider:e.explicitProvider??t.provider,explicitModel:t.model});return{provider:n.provider,model:n.provider==="codex"?n.model??t.model??Rr:t.model,rule:n.rule,requestedModel:t.requestedModel,orchestrationAudit:n.audit}}function op(e,r,t){return e||r||t||Ja()||It}function sp(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function ip(){return{maxTaskAttempts:sp(process.env.KYNVER_MAX_TASK_ATTEMPTS,4),dispatchCooldownMs:sp(process.env.KYNVER_DISPATCH_COOLDOWN_MS,5e3)}}I();import Xv from"node:path";L();G();w();var qa="kynver-harness:",ap="@runner:";function za(e){return e?.trim()?e.trim():null}function Jv(e){let r=za(e);if(!r?.startsWith(qa))return null;let t=r.slice(qa.length),n=t.indexOf(ap);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function Xa(e,r){let t=e.trim(),n=r.trim();return`${qa}${t}${ap}${n}`}function Qa(e,r){let t=za(r);return t?Jv(e)===t:!1}function cs(e){let r=za(e.workerLeaseOwner);return r&&Qa(r,e.runId)?r:Xa(e.runId,e.runnerId)}import lp from"node:os";De();De();import qv from"node:os";function zv(e=process.env){return Te(e).boxKind}function On(e,r){let t=(r??qv.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function vr(e){return e?.trim()?e.trim():null}function Je(e={}){let r=e.env??process.env;return{runnerId:vr(r.KYNVER_RUNTIME_ID)??vr(r.OPENCLAW_RUNTIME_ID)??vr(r.HOSTNAME)??lp.hostname(),hostname:vr(r.HOSTNAME)??lp.hostname(),profile:vr(r.KYNVER_RUNNER_PROFILE)??vr(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:vr(r.KYNVER_HARNESS_REPO)??vr(r.KYNVER_DEFAULT_REPO),runId:e.runId??null}}function cp(e,r){return _(Xv.join(x(e),"workers",R(r),"worker.json"),void 0)}async function us(e,r){let t=U(e),n=String(r.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=W(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)):ds,a=Je({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let f=cp(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=cs({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 up(e,r){let t=U(e);for(let n of Object.keys(t.workers||{})){let o=cp(e,n);if(!(!o||o.taskId!==r||!$(o.pid)||T(o).status==="done"))return!0}return!1}Ce();L();L();import{existsSync as hS,mkdirSync as kS}from"node:fs";import Tt from"node:path";var Qv=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,Zv="next-action-fix:";function ps(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function dp(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:ps(e)}function eb(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(Zv)||t.includes("repair")||t.includes("unblock"))}function rb(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(Qv);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=ps(String(n.targetPrUrl??n.target_pr_url??"")),s=ps(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?dp(o):null,targetPrBranch:s}}catch{return r}}function pp(e){if(!eb(e))return null;let r=rb(e.description),t=e.prUrl?dp(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??ps(e.branch)}:null}function mp(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 Za(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?[...mp({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
|
|
15
|
-
`)
|
|
16
|
-
`)
|
|
17
|
-
`)}function cl(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??Tn(e.snapshot.worktreePath,e.exec)??void 0};let r=ys({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 Rs(e,r=ks){let t=e.prUrlHint??al(e.status.finalResult)??null,n=Pp(e.status,{prUrl:t,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!ll({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?cl({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r}):{ok:!0};if(t)return cl({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});if(!Tb(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=Op(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??Tn(n.worktreePath,r)??void 0;if(n.changedFiles.length>0){let A=ys({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=hs(n.worktreePath,i,n.branch,r);if(l)return cl({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=ys({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??Tn(n.worktreePath,r)??void 0;let p=e.run.base?.trim()||"main",g=Ip({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:p.replace(/^origin\//,""),title:Db(e.worker.name,e.worker.runId),body:Mb(e.worker.taskId,e.worker.name,e.worker.runId),exec:r});if(!g.ok||!g.prUrl){if(_p(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();hn();function vs(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 Np(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 Tp(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function Dp(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Up(e){let r=Dp(e);if(!r)return[];let t=Dp(r.worktreeHandoff),n=Tp(t?.disposableArtifactsRemoved);return n.length?n:Tp(r.disposableArtifactsRemoved)}function Mp(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function Lp(e,r){let t=vs(e);if(t.length===0)return!0;if(r.length===0)return!1;let n=new Set(r.map(o=>Mp(o)));return t.every(o=>{let s=Mp(Np(o));return n.has(s)})}function bs(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Wp(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function Ub(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 Lb(e){let r=Wp(e.disposableArtifactsRemoved),t=Up(e.finalResult);return[...new Set([...r,...t])]}function Hp(e){let r=Wp(e.changedFiles),t=vs(r),n=Lb(e),o=t.length===0||Lp(r,n);return bs(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`}:bs(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`}:bs(e.artifactBundlePath)||bs(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}:Ub(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`}}L();G();w();import Wb from"node:path";var Hb=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"]);function Bp(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function Bb(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 Fb(e){let r=e.finalResult??null,t=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:Bb(r);return{finalResult:r??t??"completed",summary:t}}function ul(e,r,t){if(Bp(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=Fb(r),s=t?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),V(e.runId,e)}function $b(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 Fp(e,r){let t=$b(r);if(t.size===0)return[];let n=U(e),o=[];for(let s of Object.keys(n.workers||{})){let i=_(Wb.join(x(n.id),"workers",R(s),"worker.json"),void 0);if(!i?.taskId||Bp(i))continue;let a=t.get(i.taskId);if(!a||a==="running"||!Hb.has(a))continue;let l=T(i,{base:n.base,baseCommit:n.baseCommit});ul(i,l,{source:`board-task-${a}`}),o.push({worker:s,taskId:i.taskId,taskStatus:a})}return o}w();w();import Ss from"node:path";var Kb=/^[a-z0-9][a-z0-9._-]{0,127}$/i,jb=/^[a-z0-9][a-z0-9._-]{0,63}$/i,dl=new Set(["undefined","null"]),$p="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function Dn(e){let r=e.trim();if(!Kb.test(r))throw new Error(`invalid run id: ${e}`);return r}function Kp(e){let r=e.trim();if(!jb.test(r))throw new Error(`invalid worker name: ${e}`);return r}function pl(e){return typeof e=="string"?e.trim():""}function Le(e){let r=pl(e.run),t=pl(e.name);return(!r||dl.has(r))&&pr(`missing --run RUN_ID (${$p})`),(!t||dl.has(t))&&pr(`missing --name WORKER_NAME (${$p})`),{runId:Dn(r),workerName:Kp(t)}}function ws(e){let r=pl(e.run);return(!r||dl.has(r))&&pr("missing --run RUN_ID (usage: kynver run status --run RUN_ID)"),Dn(r)}function ml(e){let r=Ss.resolve(e);if(r.includes(".."))throw new Error("repo path must not contain .. segments");return r}function Vb(e,r){return r.map(t=>{let n=Ss.resolve(e,t),o=Ss.relative(e,n);if(o.startsWith("..")||Ss.isAbsolute(o))throw new Error(`owned path escapes repo: ${t}`);return n})}function Gb(e){return!Number.isFinite(e)||e<=0||e>500?40:Math.floor(e)}async function jp(e,r,t){let n=await fetch(e,{method:"POST",headers:or(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 Yb(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function Vp(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Mn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Jb(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function qb(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 Yp(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function zb(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function Un(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,V(e.runId,e))}function Xb(e){e.completionBlocker&&(delete e.completionBlocker,V(e.runId,e))}function Cs(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function Qb(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function Wn(e){let{runId:r,workerName:t}=Le(e),n=ye(r,t),o=U(n.runId),s=T(n,Cs(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!Z(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&&Yr(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&sl(n)&&Xb(n),!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&n.dispatched&&a){let P=Rs({worker:n,run:o,status:s});if(!P.ok)return Un(n,P.reason),{ok:!1,reason:P.reason,nextAction:P.nextAction,completionBlocked:!0};(P.prUrl||P.headCommit)&&(s=T(n,Cs(o)),s=Qb(s,P))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched){let P=Hp({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 Un(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=W(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 jp(p,m,k);if((h.status===401||h.status===403)&&!f){let P=await _d(i,{baseUrl:d});P&&P!==m&&(m=P,h=await jp(p,m,k))}if(h.ok){let P=vp(h.parsed);if(!bp(P)){let se=`completion acknowledged but board not advanced: ${P.detail??(P.routeOutcome?`harness completion returned ${P.routeOutcome}`:"harness completion did not advance the linked task")}`;Un(n,se);let Fe={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:h.parsed};return ol(n,n.runId,Fe),{ok:!1,httpStatus:h.status,response:h.parsed,reason:se,completionBlocked:!0}}Un(n,void 0);let b=P.routeOutcome??"acknowledged",E={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:h.parsed};ol(n,n.runId,E),ul(n,s,{source:"harness-completion"});let B=s.prUrl;return{ok:!0,httpStatus:h.status,response:h.parsed,reason:b,...B?{prHandoff:{prUrl:B}}:{}}}let S=h.status===401||h.status===403,A=Yb(h.parsed)??(S?"runner token unauthorized":"non-2xx response"),H=S?`completion replay rejected (${h.status}): ${A}`:`completion replay failed (${h.status}): ${A}`;return Un(n,H),{ok:!1,httpStatus:h.status,response:h.parsed,completionBlocked:!0}}async function _s(e){try{let{runId:r,workerName:t}=Le(e),n=ye(r,t),o=U(n.runId),s=T(n,Cs(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!Z(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 Wn(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 gl(e){let{runId:r,workerName:t}=Le(e),n=ye(r,t),o=U(n.runId),s=T(n,Cs(o));ce(Ln.join(n.workerDir,"last-status.json"),s),console.log(JSON.stringify(s,null,2))}function Zb(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 fl(e){if(typeof e!="string")return;let r=e.trim();return r.length?r:void 0}function eS(e){let r={};(e.blocked===!0||e.blocked==="true")&&(r.blocked=!0),(e.running===!0||e.running==="true")&&(r.running=!0);let t=fl(e.task??e.taskId);t&&(r.task=t);let n=fl(e.worker??e.name);n&&(r.worker=n);let o=fl(e.status);return o&&(r.status=o),r}function rS(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 Jp(e,r){let t=eS(r);if(Object.keys(t).length===0)return e;let n=e.workers.filter(s=>rS(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:br(n,"status"),attentionCounts:br(n,"attention"),lifecycleCounts:br(n,"lifecycleStage")}),e.controller&&(o.controller=Xp(n)),o}function qp(e){let r=ws(e),t=e.full===!0||e.full==="true",n=Jp(t?Jr(r):Zp(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:Zb(r)},needsAttention:n.needsAttention,..."summary"in n?{summary:n.summary}:{},..."controller"in n?{controller:n.controller}:{},workers:o},null,2))}function zp(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=Mr({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=Yp(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,f=Vp(n.completionResponse),m=Vp(f?.task),p=Mn(f?.outcome),g=Mn(f?.status),k=Array.isArray(f?.warnings)?f.warnings.filter(b=>typeof b=="string"&&b.trim().length>0):[],h=Mn(m?.prUrl)??Mn(f?.prUrl),S=Mn(n.completionReportedAt),A=Jb({finished:Z(o),completionBlocker:c,completionOutcome:p,completionReportedAt:S}),H=qb({completionBlocker:c,completionOutcome:p,completionReportedAt:S,finished:Z(o)}),P=zb({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:H,ancestry:o.gitAncestry.relation,ancestryChecked:o.gitAncestry.checked}}function tS(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&&!Yp(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function nS(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 br(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 Gp(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 Xp(e){let r=e.filter(Gp),t=e.filter(n=>{if(Gp(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 Qp(e,r,t){let n={runId:e.id,name:e.name,status:Pt(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:br(r,"status"),attentionCounts:br(r,"attention"),lifecycleCounts:br(r,"lifecycleStage")},n.controller=Xp(r)),n}function oS(e){return e.status==="done"&&e.attention==="done"}function Jr(e){let r=U(e),n=Object.keys(r.workers||{}).map(s=>{let i=_(Ln.join(x(r.id),"workers",R(s),"worker.json"),void 0);return i?zp({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=Qp(r,n,!1);return ce(Ln.join(x(r.id),"last-board.json"),o),o}function Zp(e){let r=U(e),n=Object.keys(r.workers||{}).map(i=>{let a=_(Ln.join(x(r.id),"workers",R(i),"worker.json"),void 0);return a?tS(a)?nS(i,a):zp({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!oS(i)),s=Qp(r,o,!0);return s.status=Pt(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:br(n,"status"),allAttentionCounts:br(n,"attention")},ce(Ln.join(x(r.id),"last-board-compact.json"),s),s}async function em(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=Jr(t),s=W(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 sS(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 Nt(e){let r=ws(e),t=e.full===!0||e.full==="true",n=Jp(t?Jr(r):Zp(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=sS(r)),console.log(JSON.stringify(n,null,2))}function hl(e){let{runId:r,workerName:t}=Le(e),n=ye(r,t),o=Po(n.stdoutPath,Number(e.lines||40));if(e.raw===!0||e.raw==="true"){process.stdout.write(o);return}for(let s of o.split(`
|
|
18
|
-
`).filter(Boolean)){let i=ft(s),a=i?ka(i):s;a&&console.log(a)}}function kl(e){let{runId:r,workerName:t}=Le(e),n=ye(r,t);if(!$(n.pid)){console.log(JSON.stringify({worker:n.name,pid:n.pid,status:"not_running"},null,2));return}if(ln(n.pid,"SIGTERM"),Er(1500),$(n.pid)){ln(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 uS=5e3,dS=360*60*1e3,pS=3,mS=5e3;function fS(e){let{runId:r,workerName:t}=Le(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 qr(e){let r=fS(e),t=r.pollMs??uS,n=r.maxTotalMs??dS,o=r.completeAttempts??pS,s=r.completeBackoffMs??mS,i=ye(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(Yr(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=ye(r.run,r.name),Yr(i))return{worker:i.name,runId:i.runId,outcome:"completed",httpStatus:200,attempts:0,reason:"completion-already-acknowledged"};let u=T(i);if(Z(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`};Er(t)}let l,c;for(let u=1;u<=o;u++){let d=await Wn({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&&Er(s)}return{worker:i.name,runId:i.runId,outcome:"blocked",httpStatus:l,attempts:o,reason:c??"completion failed after retries"}}async function yl(e){try{let r=await qr(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 gS(){return tm.join(cS(new URL(".",import.meta.url)),"cli.js")}function Rl(e){let r=e.cliPath??gS();if(!aS(r))return;let t=tm.join(e.workerDir,"auto-complete.log"),n;try{n=lS(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=iS(s,i,le({detached:!0,stdio:o,env:process.env}));return n!==void 0&&rm(n),a.unref(),{pid:a.pid,logPath:t,cliPath:r}}catch{if(n!==void 0)try{rm(n)}catch{}return}}Ce();function nm(e,r,t){ue(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)}}De();I();function xs(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||xe,model:r.model,rule:r.routingRule||"explicit:spawn",requestedModel:r.requestedModel??r.model}:ls({explicitModel:r.model,explicitProvider:r.provider,explicitProviderIsOperatorOverride:!!r.provider?.trim()}),s=Rp(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}=oe(),l=Tt.join(x(e.id),"workers",n);kS(l,{recursive:!0});let c=Tt.join(a,e.id,n),u=r.repairTargetBranch?.trim()||void 0,d=u||r.branch||`agent/${e.id}/${n}`;if(hS(c))throw new Error(`worktree path already exists: ${c}`);ue(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u?nm(e.repo,c,u):ue(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0});let f=Tt.join(l,"stdout.jsonl"),m=Tt.join(l,"stderr.log"),p=Tt.join(l,"heartbeat.jsonl"),g=Za({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 ue(e.repo,["worktree","remove","--force",c],{allowFailure:!0}),ue(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=op(S.model,i,s.defaultModel),H=v(),P=Te(process.env,H),b=Je().runnerId,E=On(P.boxKind),B={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:b,startedAt:new Date().toISOString()};if(V(e.id,B),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:Tt.join(l,"worker.json")}},e.status="running",Ue(e),B.agentOsId&&B.taskId){let M;try{M=Rl({runId:e.id,workerName:n,workerDir:l,agentOsId:B.agentOsId})}catch(se){let Fe=`completion sidecar failed to spawn: ${se.message}`;B.completionBlocker=Fe,V(e.id,B)}if(M)M.pid&&(B.completionSidecarPid=M.pid,V(e.id,B));else{let se="completion sidecar failed to spawn (CLI not found or spawn error)";B.completionBlocker=se,B.completionSidecarSpawnFailedAt=new Date().toISOString(),V(e.id,B)}}return B}async function vl(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):vu(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=xs(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 qr({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)}L();Bo();w();import yS from"node:path";function RS(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 Ps(e){let r=U(e),t=[];for(let n of Object.keys(r.workers||{})){let o=_(yS.join(x(r.id),"workers",R(n),"worker.json"),void 0);!o?.taskId||!vn(o)||t.push({runId:r.id,workerName:n,taskId:o.taskId,pid:o.pid,...RS(o)})}return t}w();import{createHash as om}from"node:crypto";function sr(e){let r=e.replace(/\r\n/g,`
|
|
19
|
-
`)
|
|
20
|
-
|
|
21
|
-
`,{mode:384})}function mm(e){let{outboxDir:r,archiveDir:t}=zr(),n=We.join(r,`${e.id}.json`),o=We.join(r,e.bodyPath),s=We.join(t,`${e.id}.json`),i=We.join(t,e.bodyPath);Sl(n)&&cm(n,s),Sl(o)&&cm(o,i)}function Fn(e){let{outboxDir:r}=zr();return{jsonPath:We.join(r,`${e.id}.json`),bodyPath:We.join(r,e.bodyPath)}}function fm(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 gm(e,r,t={}){let n=await im(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=Dt(r.summary),a=Dt(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=sr(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 hm(e,r){return{planId:r.planId,title:e.title,summary:e.summary??null,body:e.body,bodyHash:sr(e.body),versionId:r.versionId,versionNumber:r.versionNumber}}var km="persisted and read back",xS="queued for retry",Pl="failed and needs action";async function Ut(e,r={}){e.bodyPathHint&&Bn(e.bodyPathHint);let t=Is(e),n=Cl(t);if(n?.readbackEvidence)return{userStatus:km,outboxId:n.id,planId:n.readbackEvidence.planId,readbackEvidence:n.readbackEvidence,idempotencyKey:t};if(e.immediateFailure)return ym(e,e.immediateFailure.message,e.immediateFailure.kind,n);let o=r.writePlan??am,s=r.verifyReadback??gm;try{let i=await o(e,r),a={...e,planId:i.planId},l=hm(a,i),c=await s(e.agentOsSlug,PS(e,l),r);return n&&mm(n),{userStatus:km,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(!sm(a.kind)){let l=xl(e,{lastError:a.message,lastFailureKind:a.kind,existing:n??void 0}),c=Fn(l),u=Rm(l,a.message);return{userStatus:Pl,outboxId:u.id,outboxPath:c.jsonPath,bodyPath:c.bodyPath,lastError:a.message,idempotencyKey:t}}return ym(e,a.message,a.kind,n)}}function PS(e,r){return e.operation==="update_metadata"?{...r,body:"",bodyHash:""}:r}function ym(e,r,t,n){let o=xl(e,{lastError:r,lastFailureKind:t,existing:n??void 0}),s=Fn(o);if(o.retryCount>=o.maxRetries){let i=Rm(o,r);return{userStatus:Pl,outboxId:i.id,outboxPath:s.jsonPath,bodyPath:s.bodyPath,lastError:r,idempotencyKey:o.idempotencyKey}}return{userStatus:xS,outboxId:o.id,outboxPath:s.jsonPath,bodyPath:s.bodyPath,lastError:r,idempotencyKey:o.idempotencyKey}}function Rm(e,r){let t={...e,queueStatus:"failed",userStatus:Pl,lastError:r,updatedAt:new Date().toISOString()};return pm(t),t}import ES from"node:path";async function Ds(e={},r={}){let t=Xr().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=dm(s),a=fm(s,i),l=await Ut(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 El(e){let r=ES.join(Ts(),`${e}.json`);return _l(r)}function Ms(e){let r=Fn(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(`
|
|
22
|
-
`)}function Us(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 Al(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 bm}from"node:child_process";import{spawnSync as AS}from"node:child_process";function vm(){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=AS("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 Sm=new Set(["SUCCESS","SKIPPED","NEUTRAL"]),OS=new Set(["CLEAN","HAS_HOOKS"]);function Il(e){return e?.trim()?["--repo",e.trim()]:[]}function wm(e){let r=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return r?`${r[1]}/${r[2]}`:null}function Cm(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 $n(e){return typeof e.name=="string"&&e.name||typeof e.context=="string"&&e.context||typeof e.workflowName=="string"&&e.workflowName||"unknown check"}function IS(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&&Sm.has(i))){if(i){n.push(`${$n(s)}=${i}`);continue}if(!(l&&Sm.has(l))){if(l&&l!=="PENDING"&&l!=="EXPECTED"){n.push(`${$n(s)}=${l}`);continue}if(l==="PENDING"||l==="EXPECTED"){t.push(`${$n(s)}=${l}`);continue}if(a&&a!=="COMPLETED"){t.push(`${$n(s)}=${a}`);continue}t.push(`${$n(s)}=PENDING`)}}}return{pending:t,failed:n}}function NS(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 TS=/^##\s*(test\s*plan|verification|test\s*evidence|verify)\b/im,DS=/typecheck|npm run (test|build|typecheck)|vitest|tsc\b|verify-pr-local|local verify|local-verify|tests? (pass|green)|build green|node --test/i,MS=/^docs[(:]/i,US=/docs[- ]only|documentation only|no[- ]code change|no code changes|low[- ]risk|plan tracker only|markdown only/i;function LS(e){let r=typeof e.title=="string"?e.title.trim():"",t=typeof e.body=="string"?e.body.trim():"",n=MS.test(r)||US.test(t),o=TS.test(t),s=DS.test(t);return n||o||s||e.vercelCheckSuccess===!0}function WS(e){if(!LS({title:e.title,body:e.body,vercelCheckSuccess:NS(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 HS(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(!OS.has(e.mergeStateStatus))throw new Error(`PR #${e.number} mergeStateStatus is ${e.mergeStateStatus}`);let r=IS(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(", ")}`);WS(e)}function BS(e){try{return HS(e),null}catch(r){return r instanceof Error?r.message:String(r)}}function FS(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 $S(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 KS(e,r){if(!r?.trim())return;let t=bm("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}`)&&bm("git",["worktree","remove","--force",o],{cwd:e,encoding:"utf8"}))}}async function _m(e){let r=e.cwd??process.cwd(),t=e.exec??ks,n=e.prUrl.trim();if(!n)throw new Error("prUrl is required");let o=vm();if(!o.configured)return{prUrl:n,outcome:"blocked",reason:o.reason};let s=Cm(t,r,["pr","view",n,...Il(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=BS(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,...Il(e.repo),"--squash"]);if(l.status!==0){let u=Ol(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=Ol(t,r,a,e.repo);c||(c=Ol(t,r,a,e.repo));try{let u=$S(t,r,e.repo);FS(t,r,u,s.headRefName),KS(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 Ol(e,r,t,n){try{let o=Cm(e,r,["pr","view",t,...Il(n),"--json","number,url,mergedAt,mergeCommit,state"]);return o.state==="MERGED"||o.mergedAt?o:null}catch{return null}}I();async function xm(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 Pm(){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(`
|
|
23
|
-
`)}
|
|
24
|
-
`)}function GS(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 Sr(e){let r=e.pipeline===!0||e.pipeline==="true";try{let on=function(C){return C.landPrDispatch===!0?!0:C.task?.executor==="land_pr"};var t=on;let n=U(String(N(String(e.run||""),"--run"))),o=String(N(String(e.agentOsId||""),"--agent-os-id")),s=W(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=Je({runId:n.id}),u=Xa(n.id,c.runnerId),d=e.diskPath?Me({diskPath:String(e.diskPath)}):Me({diskPath:n.repo}),f=Hr({runId:n.id}),m=GS(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=Ps(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`,H=C=>({agentOsId:o,dryRun:l,maxStarts:C,leaseOwner:u,leaseDurationMs:Number(e.leaseMs)>0?Math.floor(Number(e.leaseMs)):ds,runnerDiskGate:d,runnerResourceGate:f,activeHarnessWorkers:S,runnerPresence:c,harnessBoardSnapshot:Jr(n.id),...e.lane?{lane:Md(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,H(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=Em(E),y=Am(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 B=ip(),M=[],se=[],Fe=Number(E.inspected)||0;async function be(C,y,O){let j=await Al({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 sn(C){let y=C.task,O=String(y.id);if(p&&!m.has(O))return be(y,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...m]});let j=y.prUrl?String(y.prUrl):"";if(!j)return be(y,"land_pr task missing prUrl");try{let $e=await _m({prUrl:j,repo:wm(j),cwd:n.repo}),pt=await xm({baseUrl:s,secret:i,agentOsId:o,runId:n.id,task:y,report:$e});return pt.ok?(M.push({taskId:O,started:!0,landPr:!0,outcome:$e.outcome,completionStatus:pt.status}),!0):be(y,`land_pr completion POST failed (HTTP ${pt.status})`,{landPr:!0,outcome:$e.outcome})}catch($e){return be(y,$e.message)}}async function Se(C){let y="duplicate_dispatch_prevented: live local worker already owns this task",O=await Al({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=jS(C),j=String(y.id);if(p&&!m.has(j))return be(y,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...m]});let $e=VS(y.personaSlug);if($e&&(!O?.personaInjectionReady||!O.personaMarkdown))return be(y,`persona_injection_required: missing anchored context-envelope persona block for "${$e}"`);if(up(n.id,j))return Se(y);let pt=Number(y.attempt)||1;if(pt>B.maxTaskAttempts)return be(y,`task attempt ${pt} exceeds KYNVER_MAX_TASK_ATTEMPTS (${B.maxTaskAttempts})`);let qk=R(`t-${y.id}-a${y.attempt}`),mt=ls({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,task:Ud(y)});try{let ji=y.planId?String(y.planId):void 0,So=pp({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}),wo=xs(n,{name:qk,task:Om(y,o),ownedPaths:e.owned?String(e.owned).split(",").map(zk=>zk.trim()).filter(Boolean):[],model:mt.model,provider:mt.provider,routingRule:mt.rule,requestedModel:mt.requestedModel,agentOsId:o,taskId:String(y.id),planId:ji,branch:So?.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:So?.targetPrUrl??(y.prUrl?String(y.prUrl):void 0),repairTargetPrUrl:So?.targetPrUrl,repairTargetBranch:So?.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??$e,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:wo.name,pid:wo.pid,branch:wo.branch,model:wo.model,provider:mt.provider,routingRule:mt.rule,instructionPolicyFingerprint:O?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(O?.instructionPolicyEvidence?.ruleSlugs)?O.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:O?.personaSlug??$e,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(ji){return be(y,ji.message)}}let D=new Set;async function ie(C){let y=C.task,O=String(y.id);if(D.has(O))return be(y,"dispatch_retry_loop_prevented: task already failed to start this tick");let j=on(C)?await sn(C):await X(C);return j||D.add(O),j}for(let C of E.started)await ie(C);if(se.push(...E.skipped??[]),p)for(let C of se){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}Fe+=Number(C.result.inspected)||0,se.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 ie(O)}}let ge=M.filter(C=>C.started).length,we=Em(E),ae=Am(E),bo=ge===0&&(we?.capacityIdle===!0||Number(E.resourceGate?.slotsAvailable)>0);if(bo&&we?.summary){let C=we.skipReasonCounts?.retry_ceiling_exceeded??0,y=E.overAttemptIdleRecovery??we.overAttemptIdleRecovery,O=y?.attempted===!0?`; over_attempt_recovery minted=${y.minted??0} started=${y.started??0}`:C>0?"; over_attempt_recovery not attempted":"",j=ae?`; dispatch_skip_drain scanned=${ae.scanned??0} advanced=${ae.advanced??0}`:"";console.error(`[dispatch] ${we.summary}${C>0?`; retry_ceiling_exceeded=${C}`:""}${O}${j}`)}let du={runId:n.id,agentOsId:o,dryRun:!1,leaseOwner:u,startedCount:ge,capacityIdle:bo,admissionExhaustion:we,dispatchSkipDrain:ae,outcomes:M,skipped:se.map(C=>({taskId:C.task.id,skipReason:C.skipReason})),inspected:Fe,pagesScanned:E.pagesScanned??null,candidatesExhausted:E.candidatesExhausted??null,diskGate:E.diskGate,resourceGate:E.resourceGate},pu=C=>!C.started&&C.nonFatal!==!0;if(r)return{ok:!M.some(pu),...du};console.log(JSON.stringify(du,null,2)),M.some(pu)&&process.exit(1)}catch(n){if(r)return{ok:!1,error:n.message};console.error(`run dispatch failed: ${n.message}`),process.exit(1)}}Rt();ua();hn();ha();ga();Dr();I();De();import YS from"node:os";function Kn(e,r={}){let t=(r.boxKind??Ke(v())).trim().toLowerCase()||"forge",n=r.hostLabel??YS.hostname();return{boxId:r.boxId??On(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}:{}}}function JS(e){let r={ts:e.ts??new Date().toISOString(),phase:e.phase,summary:e.summary,changedFiles:e.changedFiles??[],blocker:e.blocker??null};return e.boxResourceSnapshot&&(r.boxResourceSnapshot=e.boxResourceSnapshot),e.prEvidence?.length&&(r.prEvidence=e.prEvidence),`${JSON.stringify(r)}
|
|
25
|
-
|
|
26
|
-
`)}function
|
|
18
|
+
${n}`;return fb.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":gb.some(s=>s.test(o))?"low":"elevated"}function hb(e){let r=Yr(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 kb(e){let r=e.inventory??rl();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function Jr(e){let r=hb({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 nl(e){let r=e.task??{},t=gp(r),n=kb({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:vr())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=xe;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let u=ps({inventory:n,riskClass:t});return Jr(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 Jr({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 Jr({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 Jr({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let a=ps({inventory:n,riskClass:t});if(a)return Jr({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 Jr({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"}})}Or();w();import{closeSync as kp,openSync as yp}from"node:fs";import{spawn as Sb}from"node:child_process";var yb=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function Rb(e){return e.replace(yb,"")}var vb=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function ol(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}var bb=new Set(["cursor"]);function hp(e){let r=e.trim().toLowerCase();return bb.has(r)?"auto":null}function gs(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=Rb(t).trim()||r;return vb.test(o)||!ol(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 qr(e,r){let t=(e??"").trim();return t?ol(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 hs(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=hp(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")`}:ol(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 Bt="claude-sonnet-4-6",Rp={name:"claude",defaultModel:Bt,preflightModel(e){return gs(e,Bt)},start(e){let r=gs(e.model,Bt);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model,n=yp(e.stdoutPath,"a"),o=yp(e.stderrPath,"a"),s=["ignore",n,o],i=Sb("claude",["--model",t,"-p","--verbose","--permission-mode","bypassPermissions","--output-format","stream-json","--include-partial-messages",e.prompt],le({cwd:e.worktreePath,detached:!0,stdio:s,env:Ne(process.env)}));if(kp(n),kp(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}}};Or();w();import{closeSync as wp,existsSync as _b,openSync as Cp}from"node:fs";import{spawn as _p}from"node:child_process";Or();w();import{closeSync as vp,openSync as bp}from"node:fs";import{spawn as wb}from"node:child_process";var ks=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function Cb(){return Ne({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1"})}function Sp(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 sl={name:"hermes-codex",defaultModel:ks,preflightModel(e){return qr(e,ks)},start(e){let r=qr(e.model,ks);if(!r.ok)throw new Error(`hermes-codex provider model preflight failed: ${r.note}`);let t=r.model,n=bp(e.stdoutPath,"a"),o=bp(e.stderrPath,"a"),s=["ignore",n,o],i=Pe("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),a=Sp(t,e.prompt),l=wb(i,a,le({cwd:e.worktreePath,detached:!0,shell:!1,stdio:s,env:Cb()}));if(vp(n),vp(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 xb(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var br=xb();function Eb(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function Pb(){return Ne({...process.env,CI:"1",NO_COLOR:"1"})}function xp(e,r){return["exec","--sandbox","read-only","--ask-for-approval","never","--model",e,r]}function Ab(e,r,t){if(!(process.platform!=="win32"&&_b("/usr/bin/script")))return _p(e,r,t);let o=[e,...r].map(s=>`'${s.replace(/'/g,"'\\''")}'`).join(" ");return _p("script",["-qfc",o,"/dev/null"],t)}var il={name:"codex",defaultModel:br,preflightModel(e){return qr(e,br)},start(e){if(vr().path==="hermes_openai_codex")return sl.start(e);let t=qr(e.model,br);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=Cp(e.stdoutPath,"a"),s=Cp(e.stderrPath,"a"),i=["ignore",o,s],a=Eb(),l=xp(n,e.prompt),c=Ab(a,l,le({cwd:e.worktreePath,detached:!0,shell:!1,stdio:i,env:Pb()}));if(wp(o),wp(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 Ib="claude-sonnet-4-6",Ja="composer-2.5";function ys(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Ep(e){return e.toLowerCase()}function ll(e=v()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||Ib}function al(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 Ob(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:Ja,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:Bt,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function Pp(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 Nb(e){let r=Ep(ys(e,"executorRef")),t=ys(e,"title").toLowerCase(),n=ys(e,"priority")||"normal",o=Ep(ys(e,"roleLane"));if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:br,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:br,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 Pp(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(Pp(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=ll();return{model:s,provider:al(s),rule:"default:global"}}function Rs(e){let r;if(e.explicitModel?.trim()){let o=e.explicitModel.trim(),s=Ob(o,e.explicitProvider);s?r=s:r={model:o,provider:e.explicitProvider?.trim()||al(o),rule:"explicit:cli",requestedModel:o}}else if(e.task&&Object.keys(e.task).length>0){let o=Nb(e.task);r={...o,requestedModel:o.model}}else{let o=ll();r={model:o,provider:e.explicitProvider?.trim()||al(o),rule:"default:global",requestedModel:o}}let t=Ya({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"||Ge(t.provider)&&(e.explicitProviderIsOperatorOverride||us(e.task)))return t;let n=nl({task:e.task,explicitProvider:e.explicitProvider??t.provider,explicitModel:t.model});return{provider:n.provider,model:n.provider==="codex"?n.model??t.model??br:t.model,rule:n.rule,requestedModel:t.requestedModel,orchestrationAudit:n.audit}}function Ap(e,r,t){return e||r||t||ll()||Bt}function Ip(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Op(){return{maxTaskAttempts:Ip(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(Gr("harness.maxTaskAttempts",4))),dispatchCooldownMs:Ip(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(Gr("harness.dispatchCooldownMs",5e3)))}}O();import Ub from"node:path";L();G();w();var cl="kynver-harness:",Np="@runner:";function ul(e){return e?.trim()?e.trim():null}function Tb(e){let r=ul(e);if(!r?.startsWith(cl))return null;let t=r.slice(cl.length),n=t.indexOf(Np);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function dl(e,r){let t=e.trim(),n=r.trim();return`${cl}${t}${Np}${n}`}function pl(e,r){let t=ul(r);return t?Tb(e)===t:!1}function vs(e){let r=ul(e.workerLeaseOwner);return r&&pl(r,e.runId)?r:dl(e.runId,e.runnerId)}import Tp from"node:os";De();De();import Db from"node:os";function Mb(e=process.env){return Te(e).boxKind}function Wn(e,r){let t=(r??Db.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function Sr(e){return e?.trim()?e.trim():null}function qe(e={}){let r=e.env??process.env;return{runnerId:Sr(r.KYNVER_RUNTIME_ID)??Sr(r.OPENCLAW_RUNTIME_ID)??Sr(r.HOSTNAME)??Tp.hostname(),hostname:Sr(r.HOSTNAME)??Tp.hostname(),profile:Sr(r.KYNVER_RUNNER_PROFILE)??Sr(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:Sr(r.KYNVER_HARNESS_REPO)??Sr(r.KYNVER_DEFAULT_REPO),runId:e.runId??null}}function Dp(e,r){return _(Ub.join(x(e),"workers",R(r),"worker.json"),void 0)}async function bs(e,r){let t=U(e),n=String(r.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=B(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)):Ss,a=qe({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let f=Dp(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=vs({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 Mp(e,r){let t=U(e);for(let n of Object.keys(t.workers||{})){let o=Dp(e,n);if(!(!o||o.taskId!==r||!$(o.pid)||T(o).status==="done"))return!0}return!1}Ce();L();L();import{existsSync as rw,mkdirSync as tw}from"node:fs";import Ht from"node:path";var Lb=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,Bb="next-action-fix:";function ws(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Up(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:ws(e)}function Wb(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(Bb)||t.includes("repair")||t.includes("unblock"))}function Hb(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(Lb);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=ws(String(n.targetPrUrl??n.target_pr_url??"")),s=ws(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?Up(o):null,targetPrBranch:s}}catch{return r}}function Lp(e){if(!Wb(e))return null;let r=Hb(e.description),t=e.prUrl?Up(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??ws(e.branch)}:null}function Bp(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 ml(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=[...Ut(`worker.prompt.progress.${n}`).split(`
|
|
19
|
+
`),o],i=Ut(`worker.prompt.merge_gate.${n}`).split(`
|
|
20
|
+
`),a=Ut(`worker.prompt.plan_artifacts.${n}`).split(`
|
|
21
|
+
`);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.",...Ut("worker.prompt.core_rules").split(`
|
|
22
|
+
`),"",...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?[...Bp({targetPrUrl:e.repairTargetPrUrl,targetPrBranch:e.repairTargetBranch??null}),""]:[],"Task:",e.task].join(`
|
|
23
|
+
`)}w();O();w();Or();import{closeSync as gl,existsSync as Hp,mkdirSync as Vb,openSync as hl,statSync as Gb,unlinkSync as Wp}from"node:fs";import{spawn as Yb}from"node:child_process";import Jb from"node:os";import ze from"node:path";import{existsSync as Hn,readdirSync as Fb}from"node:fs";import zr from"node:path";var $b=/^\d{4}\.\d{1,2}\.\d{1,2}-[a-f0-9]+$/i;function Kb(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 jb(e){let r=zr.join(e,"versions");if(!Hn(r))return null;let t=null,n=-1;for(let o of Fb(r,{withFileTypes:!0})){if(!o.isDirectory()||!$b.test(o.name))continue;let s=Kb(o.name);s==null||s<=n||(n=s,t=zr.join(r,o.name))}return t}function Cs(e){let r=e?.trim()||zr.join(process.env.LOCALAPPDATA||"","cursor-agent"),t=zr.join(r,"node.exe"),n=zr.join(r,"index.js");if(Hn(t)&&Hn(n))return{nodeExe:t,indexJs:n,versionDir:r};let o=jb(r);if(!o)return null;let s=zr.join(o,"node.exe"),i=zr.join(o,"index.js");return!Hn(s)||!Hn(i)?null:{nodeExe:s,indexJs:i,versionDir:o}}var fl="composer-2.5",qb=15e3,zb=6e4,Xb=3e4;function Qb(e,r,t){return{executable:e,prefixArgs:[r],shell:!1,detached:!0,bundledVersionDir:t}}function Zb(e){if(process.platform==="win32"){let r=/\.(cmd|bat)$/i.test(e),t=/node\.exe$/i.test(e)&&Hp(ze.join(ze.dirname(e),"index.js"));if(r||t||e==="agent"){let o=r?Cs(ze.dirname(e)):t?{nodeExe:e,indexJs:ze.join(ze.dirname(e),"index.js"),versionDir:ze.dirname(e)}:Cs();if(o)return Qb(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 eS(){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=Cs(process.env.KYNVER_CURSOR_AGENT_ROOT?.trim()||void 0);if(r)return r.nodeExe;let t=ze.join(process.env.LOCALAPPDATA||"","cursor-agent","agent.cmd");if(Hp(t))return t}return"agent"}function rS(e,r){return Ne({...process.env,CI:"1",NO_COLOR:"1",...r.bundledVersionDir?{CURSOR_INVOKED_AS:ze.basename(e)||"agent.cmd"}:{}})}function Fp(e){e<=0||Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}function kl(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 tS(){let e=process.env.KYNVER_CURSOR_START_LOCK_DIR?.trim()||ze.join(Jb.homedir(),".kynver","locks");return Vb(e,{recursive:!0}),ze.join(e,"cursor-agent-start.lock")}function nS(){if(process.env.KYNVER_CURSOR_START_LOCK==="0")return()=>{};let e=tS(),r=kl("KYNVER_CURSOR_START_LOCK_TIMEOUT_MS",zb),t=kl("KYNVER_CURSOR_START_LOCK_STALE_MS",Xb),n=Date.now();for(;;)try{let o=hl(e,"wx");return gl(o),()=>{try{Wp(e)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-Gb(e).mtimeMs>t){Wp(e);continue}}catch{continue}if(Date.now()-n>r)throw new Error(`timed out waiting for Cursor agent start lock: ${e}`);Fp(250)}}var $p={name:"cursor",defaultModel:fl,preflightModel(e){return hs(e,fl)},start(e){let r=hs(e.model,fl);if(!r.ok)throw new Error(`cursor provider model preflight failed: ${r.note}`);let t=r.model,n=hl(e.stdoutPath,"a"),o=hl(e.stderrPath,"a"),s=["ignore",n,o],i=eS(),a=Zb(i),l=nS(),c;try{c=Yb(a.executable,[...a.prefixArgs,"-p","--force","--trust","--workspace",e.worktreePath,"--output-format","stream-json","--stream-partial-output","--model",t,e.prompt],le({cwd:e.worktreePath,detached:a.detached,shell:a.shell,stdio:s,env:rS(i,a)})),Fp(kl("KYNVER_CURSOR_START_LOCK_HOLD_MS",qb))}finally{l(),gl(n),gl(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 _s={claude:Rp,codex:il,cursor:$p},Kp=null;function jp(e){if(Kp)return Kp;let r=e?.trim();if(r){let o=_s[r];if(!o)throw new Error(`unknown worker provider "${r}" \u2014 supported: ${Object.keys(_s).join(", ")}`);return o}let t=Ln(v().workerProvider),n=_s[t];if(!n)throw new Error(`unknown worker provider "${t}" \u2014 supported: ${Object.keys(_s).join(", ")}`);return n}w();import{spawn as VS}from"node:child_process";import{existsSync as GS,openSync as YS,closeSync as xm}from"node:fs";import Em from"node:path";import{fileURLToPath as JS}from"node:url";L();function xs(e){return!!e.completionReportedAt?.trim()}function yl(e,r,t){e.completionReportedAt=t.completionReportedAt,e.completionOutcome=t.completionOutcome,t.completionResponse!==void 0&&(e.completionResponse=t.completionResponse),V(r,e)}function oS(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Rl(e){return!!(oS(e.completionBlocker)||e.completionOutcome==="rejected")}function Xr(e){return xs(e)&&!Rl(e)}L();G();O();import Gn from"node:path";function vl(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Fn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}var sS=new Set(["review_scheduled","review_already_scheduled","skipped_terminal_task","closed","dispatched","dispatch_already_done"]);function Vp(e){let r=vl(e);if(!r)return{routeOutcome:null,taskAdvanced:!1,detail:null};let t=Fn(r.outcome),n=Fn(r.detail)??Fn(r.error),o=vl(r.task),s=vl(r.closedTask),i=o?Fn(o.status):null,a=s?Fn(s.status):null,l=t!==null&&sS.has(t)||i==="awaiting_review"||i==="done"||a==="done";return{routeOutcome:t,taskAdvanced:l,detail:n}}function Gp(e){return e.taskAdvanced}L();_n();var iS="expert-lane-pr-review:",aS="plan-review-task",lS="scheduledjob:";function Yp(e){if(!e)return null;let r=e.trim().toLowerCase();return r.length?r:null}function Jp(e){let r=(e.executorRef??"").toLowerCase();if(r.startsWith(iS)||r===aS||r.startsWith("daemon-review:"))return!0;if(r.startsWith(lS)&&e.parentTaskId){let n=Yp(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=Yp(e.personaSlug);if(n==="lorentz"||n==="dalton")return!0}return!1}var qp=/^(lane:)?(review|deep_review|planning|landing)(:|$)/i,cS=new Set(ja()),uS=/no commits between/i;function zp(e){return!!(e&&uS.test(e))}function me(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Xp(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:me(e.head)}function bl(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?me(t[0]):null}function dS(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 pS(e,r){if(r.changedFiles.length>0)return!1;let t=me(e.personaSlug)?.toLowerCase();if(t&&cS.has(t))return!0;let n=me(e.routingRule)??"";return!!(n&&qp.test(n))}function mS(e,r){if(e.changedFiles.length>0)return!0;let t=me(r?.baseRef);if(t&&r?.exec&&r.worktreePath){let n=dS(r.worktreePath,t,r.exec);if(n===0)return!1;if(n!==null&&n>0)return!0}return!!(me(e.headCommit)||Xp(e.gitAncestry))}function Sl(e){if(!e.dispatched)return{required:!1,reason:"not_dispatched"};if(Jp({title:e.taskTitle??void 0,personaSlug:e.personaSlug,parentTaskId:e.parentTaskId,executorRef:e.executorRef}))return{required:!1,reason:"expert_review_task"};let r=me(e.routingRule)??"";if(r&&qp.test(r))return{required:!1,reason:"review_lane"};let t=e.worker??{personaSlug:e.personaSlug,routingRule:e.routingRule};if(pS(t,e.snapshot))return{required:!1,reason:"review_artifact"};if(me(e.patchPath)||me(e.artifactBundlePath))return{required:!1,reason:"patch_or_bundle"};if(me(e.repairTargetPrUrl))return{required:!1,reason:"repair_target_pr"};if(me(e.prUrl)??me(e.taskPrUrl)??me(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 mS(e.snapshot,s)?{required:!0,snapshot:e.snapshot}:{required:!1,reason:"no_work_product"}}function Qp(e,r){return{changedFiles:e.changedFiles,branch:e.branch,worktreePath:e.worktreePath,gitAncestry:e.gitAncestry,finalResult:e.finalResult,headCommit:me(r?.headCommit)??Xp(e.gitAncestry),prUrl:me(r?.prUrl)??null}}import{spawnSync as fS}from"node:child_process";function em(e){let r=e.trim();if(!r)return null;let t=r.match(/^git@github\.com:([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(t)return Zp(t[1]);let n=r.match(/^ssh:\/\/git@github\.com\/([^/]+\/[^/\s]+?)(?:\.git)?$/i);if(n)return Zp(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 Zp(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}Ce();function gS(e,r,t){try{let n=fS(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 Ps={git:(e,r)=>Q(e,r),gh:(e,r)=>gS("gh",e,r)};function hS(e){return e.split(`
|
|
24
|
+
`).map(r=>r.trim()).find(Boolean)??""}function rm(e,r){let t=r.git(e,["remote","get-url","origin"]);return t.status!==0?null:em(t.stdout)}function $n(e,r){let t=r.git(e,["rev-parse","HEAD"]);return t.status!==0?null:t.stdout.trim()||null}function Es(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 As(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=$n(r,s)??void 0;return{ok:!0,committed:o,pushed:!0,headCommit:a}}function tm(e){let r=Es(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=kS(t.stdout)??Es(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 kS(e){let t=hS(e).match(/https?:\/\/[^\s]+\/pull\/\d+/i);return t?t[0]:null}function yS(e){return e.gh(process.cwd(),["--version"]).status===0}function RS(e,r){return`AgentOS harness: ${e} (${r})`}function vS(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(`
|
|
25
|
+
`)}function wl(e){if(e.snapshot.changedFiles.length===0)return{ok:!0,prUrl:e.prUrl,headCommit:e.snapshot.headCommit??$n(e.snapshot.worktreePath,e.exec)??void 0};let r=As({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 Is(e,r=Ps){let t=e.prUrlHint??bl(e.status.finalResult)??null,n=Qp(e.status,{prUrl:t,headCommit:null}),o=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main";if(!Sl({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?wl({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r}):{ok:!0};if(t)return wl({snapshot:n,prUrl:t,commitMessage:`chore(harness): update PR handoff for ${e.worker.name}`,exec:r});if(!yS(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=rm(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??$n(n.worktreePath,r)??void 0;if(n.changedFiles.length>0){let A=As({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=Es(n.worktreePath,i,n.branch,r);if(l)return wl({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=As({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??$n(n.worktreePath,r)??void 0;let p=e.run.base?.trim()||"main",g=tm({worktreePath:n.worktreePath,repo:i,branch:n.branch,base:p.replace(/^origin\//,""),title:RS(e.worker.name,e.worker.runId),body:vS(e.worker.taskId,e.worker.name,e.worker.runId),exec:r});if(!g.ok||!g.prUrl){if(zp(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();Cn();function Os(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 nm(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 om(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function sm(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function am(e){let r=sm(e);if(!r)return[];let t=sm(r.worktreeHandoff),n=om(t?.disposableArtifactsRemoved);return n.length?n:om(r.disposableArtifactsRemoved)}function im(e){return e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/+$/,"")}function lm(e,r){let t=Os(e);if(t.length===0)return!0;if(r.length===0)return!1;let n=new Set(r.map(o=>im(o)));return t.every(o=>{let s=im(nm(o));return n.has(s)})}function Ns(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function cm(e){return Array.isArray(e)?e.map(r=>typeof r=="string"?r.trim():"").filter(Boolean):[]}function bS(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 SS(e){let r=cm(e.disposableArtifactsRemoved),t=am(e.finalResult);return[...new Set([...r,...t])]}function um(e){let r=cm(e.changedFiles),t=Os(r),n=SS(e),o=t.length===0||lm(r,n);return Ns(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`}:Ns(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`}:Ns(e.artifactBundlePath)||Ns(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}:bS(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`}}L();G();w();import wS from"node:path";var CS=new Set(["awaiting_review","blocked","done","needs_input","waiting","scheduled","ready","cancelled","failed"]);function dm(e){return!!(typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim())}function _S(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 xS(e){let r=e.finalResult??null,t=typeof e.lastHeartbeatSummary=="string"?e.lastHeartbeatSummary:_S(r);return{finalResult:r??t??"completed",summary:t}}function Cl(e,r,t){if(dm(e)&&e.status==="done"&&e.completionSnapshot!=null)return;let n=new Date().toISOString(),o=xS(r),s=t?.source?.trim();e.completionReportedAt=n,e.completionSnapshot=o,e.status="done",s&&(e.completionAckSource=s),V(e.runId,e)}function ES(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 pm(e,r){let t=ES(r);if(t.size===0)return[];let n=U(e),o=[];for(let s of Object.keys(n.workers||{})){let i=_(wS.join(x(n.id),"workers",R(s),"worker.json"),void 0);if(!i?.taskId||dm(i))continue;let a=t.get(i.taskId);if(!a||a==="running"||!CS.has(a))continue;let l=T(i,{base:n.base,baseCommit:n.baseCommit});Cl(i,l,{source:`board-task-${a}`}),o.push({worker:s,taskId:i.taskId,taskStatus:a})}return o}w();w();import Ts from"node:path";var PS=/^[a-z0-9][a-z0-9._-]{0,127}$/i,AS=/^[a-z0-9][a-z0-9._-]{0,63}$/i,_l=new Set(["undefined","null"]),mm="usage: kynver worker <action> --run RUN_ID --name WORKER_NAME";function Kn(e){let r=e.trim();if(!PS.test(r))throw new Error(`invalid run id: ${e}`);return r}function fm(e){let r=e.trim();if(!AS.test(r))throw new Error(`invalid worker name: ${e}`);return r}function xl(e){return typeof e=="string"?e.trim():""}function Be(e){let r=xl(e.run),t=xl(e.name);return(!r||_l.has(r))&&fr(`missing --run RUN_ID (${mm})`),(!t||_l.has(t))&&fr(`missing --name WORKER_NAME (${mm})`),{runId:Kn(r),workerName:fm(t)}}function Ds(e){let r=xl(e.run);return(!r||_l.has(r))&&fr("missing --run RUN_ID (usage: kynver run status --run RUN_ID)"),Kn(r)}function El(e){let r=Ts.resolve(e);if(r.includes(".."))throw new Error("repo path must not contain .. segments");return r}function IS(e,r){return r.map(t=>{let n=Ts.resolve(e,t),o=Ts.relative(e,n);if(o.startsWith("..")||Ts.isAbsolute(o))throw new Error(`owned path escapes repo: ${t}`);return n})}function OS(e){return!Number.isFinite(e)||e<=0||e>500?40:Math.floor(e)}async function gm(e,r,t){let n=await fetch(e,{method:"POST",headers:Le(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 NS(e){if(e&&typeof e=="object"){let r=e.error;if(typeof r=="string"&&r.trim())return r.trim()}}function hm(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function jn(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function TS(e){return e.completionBlocker?`blocked:${e.completionBlocker}`:e.completionOutcome?e.completionOutcome:e.completionReportedAt?"completion_acknowledged":e.finished?"worker_finished":"in_progress"}function DS(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 ym(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function MS(e){return e.prUrl?"pr_handoff":e.headCommit?"commit_handoff":e.changedFiles.length>0?"dirty_worktree":"none"}function Vn(e,r){(e.completionBlocker??void 0)!==(r??void 0)&&(r?e.completionBlocker=r:delete e.completionBlocker,V(e.runId,e))}function US(e){e.completionBlocker&&(delete e.completionBlocker,V(e.runId,e))}function Ms(e){return e?{base:e.base,baseCommit:e.baseCommit}:{}}function LS(e,r){return{...e,...r.prUrl?{prUrl:r.prUrl}:{},...r.headCommit?{headCommit:r.headCommit}:{}}}async function Yn(e){let{runId:r,workerName:t}=Be(e),n=ye(r,t),o=U(n.runId),s=T(n,Ms(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!Z(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&&Xr(n))return{ok:!0,skipped:!0,reason:"completion-already-acknowledged",httpStatus:200};if(!l&&Rl(n)&&US(n),!(e.skipPrHandoff===!0||e.skipPrHandoff==="true")&&n.dispatched&&a){let E=Is({worker:n,run:o,status:s});if(!E.ok)return Vn(n,E.reason),{ok:!1,reason:E.reason,nextAction:E.nextAction,completionBlocked:!0};(E.prUrl||E.headCommit)&&(s=T(n,Ms(o)),s=LS(s,E))}let u=s.gitAncestry.headIsAncestorOfBase===!1&&s.gitAncestry.head?s.gitAncestry.head:s.headCommit;if(n.dispatched){let E=um({changedFiles:s.changedFiles,finalResult:s.finalResult,prUrl:s.prUrl,headCommit:u,disposableArtifactsRemoved:n.disposableArtifactsRemoved});if(!E.allowed){let b=E.detail??`worktree completion blocked (${E.state})`;return Vn(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=B(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 gm(p,m,k);if((h.status===401||h.status===403)&&!f){let E=await Yd(i,{baseUrl:d});E&&E!==m&&(m=E,h=await gm(p,m,k))}if(h.ok){let E=Vp(h.parsed);if(!Gp(E)){let se=`completion acknowledged but board not advanced: ${E.detail??(E.routeOutcome?`harness completion returned ${E.routeOutcome}`:"harness completion did not advance the linked task")}`;Vn(n,se);let $e={completionReportedAt:new Date().toISOString(),completionOutcome:"rejected",completionResponse:h.parsed};return yl(n,n.runId,$e),{ok:!1,httpStatus:h.status,response:h.parsed,reason:se,completionBlocked:!0}}Vn(n,void 0);let b=E.routeOutcome??"acknowledged",P={completionReportedAt:new Date().toISOString(),completionOutcome:"acknowledged",completionResponse:h.parsed};yl(n,n.runId,P),Cl(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=NS(h.parsed)??(S?"runner token unauthorized":"non-2xx response"),W=S?`completion replay rejected (${h.status}): ${A}`:`completion replay failed (${h.status}): ${A}`;return Vn(n,W),{ok:!1,httpStatus:h.status,response:h.parsed,completionBlocked:!0}}async function Us(e){try{let{runId:r,workerName:t}=Be(e),n=ye(r,t),o=U(n.runId),s=T(n,Ms(o)),i=(e.agentOsId?String(e.agentOsId):n.agentOsId)||"",a=(e.taskId?String(e.taskId):n.taskId)||null;if(!Z(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 Yn(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 Al(e){let{runId:r,workerName:t}=Be(e),n=ye(r,t),o=U(n.runId),s=T(n,Ms(o));ce(Gn.join(n.workerDir,"last-status.json"),s),console.log(JSON.stringify(s,null,2))}function BS(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 Pl(e){if(typeof e!="string")return;let r=e.trim();return r.length?r:void 0}function WS(e){let r={};(e.blocked===!0||e.blocked==="true")&&(r.blocked=!0),(e.running===!0||e.running==="true")&&(r.running=!0);let t=Pl(e.task??e.taskId);t&&(r.task=t);let n=Pl(e.worker??e.name);n&&(r.worker=n);let o=Pl(e.status);return o&&(r.status=o),r}function HS(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 Rm(e,r){let t=WS(r);if(Object.keys(t).length===0)return e;let n=e.workers.filter(s=>HS(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:wr(n,"status"),attentionCounts:wr(n,"attention"),lifecycleCounts:wr(n,"lifecycleStage")}),e.controller&&(o.controller=Sm(n)),o}function vm(e){let r=Ds(e),t=e.full===!0||e.full==="true",n=Rm(t?Qr(r):Cm(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:BS(r)},needsAttention:n.needsAttention,..."summary"in n?{summary:n.summary}:{},..."controller"in n?{controller:n.controller}:{},workers:o},null,2))}function bm(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=Lr({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=ym(l)?void 0:l,u=c?"blocked":o.status,d=c?"blocked":o.attention.state,f=hm(n.completionResponse),m=hm(f?.task),p=jn(f?.outcome),g=jn(f?.status),k=Array.isArray(f?.warnings)?f.warnings.filter(b=>typeof b=="string"&&b.trim().length>0):[],h=jn(m?.prUrl)??jn(f?.prUrl),S=jn(n.completionReportedAt),A=TS({finished:Z(o),completionBlocker:c,completionOutcome:p,completionReportedAt:S}),W=DS({completionBlocker:c,completionOutcome:p,completionReportedAt:S,finished:Z(o)}),E=MS({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 P=b.ruleSlugs;return Array.isArray(P)?P.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:E,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 FS(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&&!ym(t)?!1:typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim()||e.completionOutcome==="acknowledged"?!0:r==="done"}function $S(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 wr(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 km(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 Sm(e){let r=e.filter(km),t=e.filter(n=>{if(km(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 wm(e,r,t){let n={runId:e.id,name:e.name,status:Ot(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:wr(r,"status"),attentionCounts:wr(r,"attention"),lifecycleCounts:wr(r,"lifecycleStage")},n.controller=Sm(r)),n}function KS(e){return e.status==="done"&&e.attention==="done"}function Qr(e){let r=U(e),n=Object.keys(r.workers||{}).map(s=>{let i=_(Gn.join(x(r.id),"workers",R(s),"worker.json"),void 0);return i?bm({run:r,workerName:s,worker:i}):{worker:s,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=wm(r,n,!1);return ce(Gn.join(x(r.id),"last-board.json"),o),o}function Cm(e){let r=U(e),n=Object.keys(r.workers||{}).map(i=>{let a=_(Gn.join(x(r.id),"workers",R(i),"worker.json"),void 0);return a?FS(a)?$S(i,a):bm({run:r,workerName:i,worker:a}):{worker:i,status:"missing",attention:"needs_attention",attentionReason:"worker.json not found"}}),o=n.filter(i=>!KS(i)),s=wm(r,o,!0);return s.status=Ot(r.status,n),s.summary={...s.summary??{},totalWorkerCount:n.length,shownWorkerCount:o.length,omittedTerminalDoneWorkerCount:n.length-o.length,allStatusCounts:wr(n,"status"),allAttentionCounts:wr(n,"attention")},ce(Gn.join(x(r.id),"last-board-compact.json"),s),s}async function _m(e,r){let t=String(e.run||""),n=String(e.agentOsId||"");if(!t||!n)return null;let o=Qr(t),s=B(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 jS(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 Wt(e){let r=Ds(e),t=e.full===!0||e.full==="true",n=Rm(t?Qr(r):Cm(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=jS(r)),console.log(JSON.stringify(n,null,2))}function Il(e){let{runId:r,workerName:t}=Be(e),n=ye(r,t),o=Bo(n.stdoutPath,Number(e.lines||40));if(e.raw===!0||e.raw==="true"){process.stdout.write(o);return}for(let s of o.split(`
|
|
26
|
+
`).filter(Boolean)){let i=yt(s),a=i?Ia(i):s;a&&console.log(a)}}function Ol(e){let{runId:r,workerName:t}=Be(e),n=ye(r,t);if(!$(n.pid)){console.log(JSON.stringify({worker:n.name,pid:n.pid,status:"not_running"},null,2));return}if(hn(n.pid,"SIGTERM"),Ir(1500),$(n.pid)){hn(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 qS=5e3,zS=360*60*1e3,XS=3,QS=5e3;function ZS(e){let{runId:r,workerName:t}=Be(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 Zr(e){let r=ZS(e),t=r.pollMs??qS,n=r.maxTotalMs??zS,o=r.completeAttempts??XS,s=r.completeBackoffMs??QS,i=ye(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(Xr(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=ye(r.run,r.name),Xr(i))return{worker:i.name,runId:i.runId,outcome:"completed",httpStatus:200,attempts:0,reason:"completion-already-acknowledged"};let u=T(i);if(Z(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`};Ir(t)}let l,c;for(let u=1;u<=o;u++){let d=await Yn({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&&Ir(s)}return{worker:i.name,runId:i.runId,outcome:"blocked",httpStatus:l,attempts:o,reason:c??"completion failed after retries"}}async function Nl(e){try{let r=await Zr(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 ew(){return Em.join(JS(new URL(".",import.meta.url)),"cli.js")}function Tl(e){let r=e.cliPath??ew();if(!GS(r))return;let t=Em.join(e.workerDir,"auto-complete.log"),n;try{n=YS(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=VS(s,i,le({detached:!0,stdio:o,env:process.env}));return n!==void 0&&xm(n),a.unref(),{pid:a.pid,logPath:t,cliPath:r}}catch{if(n!==void 0)try{xm(n)}catch{}return}}Ce();function Pm(e,r,t){ue(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)}}De();O();function Ls(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||xe,model:r.model,rule:r.routingRule||"explicit:spawn",requestedModel:r.requestedModel??r.model}:Rs({explicitModel:r.model,explicitProvider:r.provider,explicitProviderIsOperatorOverride:!!r.provider?.trim()}),s=jp(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}=oe(),l=Ht.join(x(e.id),"workers",n);tw(l,{recursive:!0});let c=Ht.join(a,e.id,n),u=r.repairTargetBranch?.trim()||void 0,d=u||r.branch||`agent/${e.id}/${n}`;if(rw(c))throw new Error(`worktree path already exists: ${c}`);ue(e.repo,["fetch","origin","--prune"],{allowFailure:!0}),u?Pm(e.repo,c,u):ue(e.repo,["worktree","add","-b",d,c,e.baseCommit],{throwError:!0});let f=Ht.join(l,"stdout.jsonl"),m=Ht.join(l,"stderr.log"),p=Ht.join(l,"heartbeat.jsonl"),g=ml({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 ue(e.repo,["worktree","remove","--force",c],{allowFailure:!0}),ue(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=Ap(S.model,i,s.defaultModel),W=v(),E=Te(process.env,W),b=qe().runnerId,P=Wn(E.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:E.boxKind,boxId:P,runtimeId:b,startedAt:new Date().toISOString()};if(V(e.id,H),e.workers={...e.workers||{},[n]:{workerDir:l,statusPath:Ht.join(l,"worker.json")}},e.status="running",Ue(e),H.agentOsId&&H.taskId){let M;try{M=Tl({runId:e.id,workerName:n,workerDir:l,agentOsId:H.agentOsId})}catch(se){let $e=`completion sidecar failed to spawn: ${se.message}`;H.completionBlocker=$e,V(e.id,H)}if(M)M.pid&&(H.completionSidecarPid=M.pid,V(e.id,H));else{let se="completion sidecar failed to spawn (CLI not found or spawn error)";H.completionBlocker=se,H.completionSidecarSpawnFailedAt=new Date().toISOString(),V(e.id,H)}}return H}async function Dl(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):Fu(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=Ls(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 Zr({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)}L();Xo();w();import nw from"node:path";function ow(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 Bs(e){let r=U(e),t=[];for(let n of Object.keys(r.workers||{})){let o=_(nw.join(x(r.id),"workers",R(n),"worker.json"),void 0);!o?.taskId||!Pn(o)||t.push({runId:r.id,workerName:n,taskId:o.taskId,pid:o.pid,...ow(o)})}return t}w();import{createHash as Am}from"node:crypto";function ir(e){let r=e.replace(/\r\n/g,`
|
|
27
|
+
`).trimEnd();return Am("sha256").update(r,"utf8").digest("hex")}function Ft(e){if(e==null)return null;let r=e.trim();return r?Am("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 Jn(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 Ml(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 Im(e){return e!=="permanent"}function Hs(e){let r={"Content-Type":"application/json"};return e&&(r.Authorization=`Bearer ${e}`),r}async function Fs(e){let r=await e.text();try{return JSON.parse(r)}catch{return r}}async function Om(e,r,t={}){let n=B(t.baseUrl),o=t.apiKey??ee(),s=t.fetchFn??fetch,i=`${n}/api/agent-os/${encodeURIComponent(e)}/plans/${encodeURIComponent(r)}`;try{let a=await s(i,{method:"GET",headers:Hs(o)}),l=await Fs(a);if(!a.ok){let c=typeof l=="object"&&l&&"error"in l?String(l.error):`GET plan failed (${a.status})`;throw Jn(a.status,c)}return l}catch(a){throw a instanceof J?a:Ml(a)}}async function Nm(e,r={}){let t=B(r.baseUrl),n=r.apiKey??ee(),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:Ws(e),initialVersion:{title:e.title,body:e.body,summary:e.summary??null,changeSummary:e.changeSummary??null,author:e.author??null,sourceRefs:Ws(e)}},p=await o(f,{method:"POST",headers:Hs(n),body:JSON.stringify(m)}),g=await Fs(p);if(!p.ok){let h=typeof g=="object"&&g&&"error"in g?String(g.error):`create plan failed (${p.status})`;throw Jn(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:Ws(e)},p=await o(f,{method:"PATCH",headers:Hs(n),body:JSON.stringify(m)}),g=await Fs(p);if(!p.ok){let h=typeof g=="object"&&g&&"error"in g?String(g.error):`update plan failed (${p.status})`;throw Jn(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:Ws(e),markCurrent:e.markCurrent!==!1},c=await o(a,{method:"POST",headers:Hs(n),body:JSON.stringify(l)}),u=await Fs(c);if(!c.ok){let f=typeof u=="object"&&u&&"error"in u?String(u.error):`add version failed (${c.status})`;throw Jn(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:Ml(i)}}function Ws(e){let r={...e.sourceRefs??{}};return e.model&&(r.model=e.model),Object.keys(r).length?r:e.sourceRefs??null}import{createHash as sw}from"node:crypto";function $s(e){let r={operation:e.operation,agentOsSlug:e.agentOsSlug,planId:e.planId??null,planSlug:e.planSlug??null,title:e.title.trim(),summaryHash:Ft(e.summary),bodyHash:ir(e.body),changeSummary:e.changeSummary?.trim()??null,markCurrent:e.markCurrent??!0};return sw("sha256").update(JSON.stringify(r),"utf8").digest("hex")}import{mkdirSync as Tm}from"node:fs";import{homedir as iw}from"node:os";import $t from"node:path";function Ks(){let e=process.env.KYNVER_STATE_ROOT;return e?$t.resolve(e):$t.join(iw(),".kynver","state")}function js(){return $t.join(Ks(),"plan-outbox")}function aw(){return $t.join(Ks(),"plan-outbox-archive")}function et(){let e=js(),r=aw();return Tm(e,{recursive:!0}),Tm(r,{recursive:!0}),{outboxDir:e,archiveDir:r}}function qn(e){if(e.startsWith("/tmp/")||e.startsWith("/var/folders/"))return!0;let r=$t.resolve(e);return r.startsWith("/tmp/")||r.startsWith($t.join("/var","folders"))}import{existsSync as Ul,readFileSync as Mm,renameSync as Dm,readdirSync as lw,writeFileSync as Ll,unlinkSync as VU}from"node:fs";import We from"node:path";import{randomUUID as cw}from"node:crypto";var uw=12;function rt(){let{outboxDir:e}=et(),r=lw(e).filter(n=>n.endsWith(".json")),t=[];for(let n of r){let o=Wl(We.join(e,n));o&&o.queueStatus==="queued"&&t.push(o)}return t.sort((n,o)=>n.createdAt.localeCompare(o.createdAt))}function Bl(e){for(let r of rt())if(r.idempotencyKey===e)return r;return null}function Wl(e){if(!Ul(e))return null;try{return JSON.parse(Mm(e,"utf8"))}catch{return null}}function Um(e){let{outboxDir:r}=et(),t=We.join(r,e.bodyPath);return Mm(t,"utf8")}function Hl(e,r){let{outboxDir:t}=et(),n=new Date().toISOString(),o=r.existing?.id??cw(),s=r.existing?.bodyPath??`${o}.body.md`,i=We.join(t,`${o}.json`),a=We.join(t,s);r.existing||Ll(a,e.body,"utf8");let l={id:o,idempotencyKey:$s(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:ir(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??uw,lastError:r.lastError,lastFailureKind:r.lastFailureKind,queueStatus:"queued",userStatus:"queued for retry",readbackEvidence:null};return Ll(i,`${JSON.stringify(l,null,2)}
|
|
28
|
+
`,{mode:384}),l}function Lm(e){let{outboxDir:r}=et(),t=We.join(r,`${e.id}.json`);Ll(t,`${JSON.stringify(e,null,2)}
|
|
29
|
+
`,{mode:384})}function Bm(e){let{outboxDir:r,archiveDir:t}=et(),n=We.join(r,`${e.id}.json`),o=We.join(r,e.bodyPath),s=We.join(t,`${e.id}.json`),i=We.join(t,e.bodyPath);Ul(n)&&Dm(n,s),Ul(o)&&Dm(o,i)}function zn(e){let{outboxDir:r}=et();return{jsonPath:We.join(r,`${e.id}.json`),bodyPath:We.join(r,e.bodyPath)}}function Wm(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 Hm(e,r,t={}){let n=await Om(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=Ft(r.summary),a=Ft(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=ir(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 Fm(e,r){return{planId:r.planId,title:e.title,summary:e.summary??null,body:e.body,bodyHash:ir(e.body),versionId:r.versionId,versionNumber:r.versionNumber}}var $m="persisted and read back",dw="queued for retry",Fl="failed and needs action";async function Kt(e,r={}){e.bodyPathHint&&qn(e.bodyPathHint);let t=$s(e),n=Bl(t);if(n?.readbackEvidence)return{userStatus:$m,outboxId:n.id,planId:n.readbackEvidence.planId,readbackEvidence:n.readbackEvidence,idempotencyKey:t};if(e.immediateFailure)return Km(e,e.immediateFailure.message,e.immediateFailure.kind,n);let o=r.writePlan??Nm,s=r.verifyReadback??Hm;try{let i=await o(e,r),a={...e,planId:i.planId},l=Fm(a,i),c=await s(e.agentOsSlug,pw(e,l),r);return n&&Bm(n),{userStatus:$m,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(!Im(a.kind)){let l=Hl(e,{lastError:a.message,lastFailureKind:a.kind,existing:n??void 0}),c=zn(l),u=jm(l,a.message);return{userStatus:Fl,outboxId:u.id,outboxPath:c.jsonPath,bodyPath:c.bodyPath,lastError:a.message,idempotencyKey:t}}return Km(e,a.message,a.kind,n)}}function pw(e,r){return e.operation==="update_metadata"?{...r,body:"",bodyHash:""}:r}function Km(e,r,t,n){let o=Hl(e,{lastError:r,lastFailureKind:t,existing:n??void 0}),s=zn(o);if(o.retryCount>=o.maxRetries){let i=jm(o,r);return{userStatus:Fl,outboxId:i.id,outboxPath:s.jsonPath,bodyPath:s.bodyPath,lastError:r,idempotencyKey:o.idempotencyKey}}return{userStatus:dw,outboxId:o.id,outboxPath:s.jsonPath,bodyPath:s.bodyPath,lastError:r,idempotencyKey:o.idempotencyKey}}function jm(e,r){let t={...e,queueStatus:"failed",userStatus:Fl,lastError:r,updatedAt:new Date().toISOString()};return Lm(t),t}import mw from"node:path";async function Vs(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=Um(s),a=Wm(s,i),l=await Kt(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 $l(e){let r=mw.join(js(),`${e}.json`);return Wl(r)}function Gs(e){let r=zn(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(`
|
|
30
|
+
`)}function Ys(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 Kl(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 Gm}from"node:child_process";import{spawnSync as fw}from"node:child_process";function Vm(){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=fw("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 Ym=new Set(["SUCCESS","SKIPPED","NEUTRAL"]),gw=new Set(["CLEAN","HAS_HOOKS"]);function Vl(e){return e?.trim()?["--repo",e.trim()]:[]}function Jm(e){let r=/github\.com\/([^/]+)\/([^/]+)\/pull\/\d+/i.exec(e.trim());return r?`${r[1]}/${r[2]}`:null}function qm(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 hw(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&&Ym.has(i))){if(i){n.push(`${Xn(s)}=${i}`);continue}if(!(l&&Ym.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 kw(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 yw=/^##\s*(test\s*plan|verification|test\s*evidence|verify)\b/im,Rw=/typecheck|npm run (test|build|typecheck)|vitest|tsc\b|verify-pr-local|local verify|local-verify|tests? (pass|green)|build green|node --test/i,vw=/^docs[(:]/i,bw=/docs[- ]only|documentation only|no[- ]code change|no code changes|low[- ]risk|plan tracker only|markdown only/i;function Sw(e){let r=typeof e.title=="string"?e.title.trim():"",t=typeof e.body=="string"?e.body.trim():"",n=vw.test(r)||bw.test(t),o=yw.test(t),s=Rw.test(t);return n||o||s||e.vercelCheckSuccess===!0}function ww(e){if(!Sw({title:e.title,body:e.body,vercelCheckSuccess:kw(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 Cw(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(!gw.has(e.mergeStateStatus))throw new Error(`PR #${e.number} mergeStateStatus is ${e.mergeStateStatus}`);let r=hw(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(", ")}`);ww(e)}function _w(e){try{return Cw(e),null}catch(r){return r instanceof Error?r.message:String(r)}}function xw(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 Ew(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 Pw(e,r){if(!r?.trim())return;let t=Gm("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}`)&&Gm("git",["worktree","remove","--force",o],{cwd:e,encoding:"utf8"}))}}async function zm(e){let r=e.cwd??process.cwd(),t=e.exec??Ps,n=e.prUrl.trim();if(!n)throw new Error("prUrl is required");let o=Vm();if(!o.configured)return{prUrl:n,outcome:"blocked",reason:o.reason};let s=qm(t,r,["pr","view",n,...Vl(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=_w(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,...Vl(e.repo),"--squash"]);if(l.status!==0){let u=jl(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=jl(t,r,a,e.repo);c||(c=jl(t,r,a,e.repo));try{let u=Ew(t,r,e.repo);xw(t,r,u,s.headRefName),Pw(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 jl(e,r,t,n){try{let o=qm(e,r,["pr","view",t,...Vl(n),"--json","number,url,mergedAt,mergeCommit,state"]);return o.state==="MERGED"||o.mergedAt?o:null}catch{return null}}O();async function Xm(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 Qm(){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(`
|
|
31
|
+
`)}var Ss=3600*1e3;function Zm(e){let r=e.admissionExhaustion;return!r||typeof r!="object"?null:r}function ef(e){let r=e.dispatchSkipDrain;return!r||typeof r!="object"?null:r}function Aw(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 Iw(e){if(typeof e!="string")return null;let r=e.trim().toLowerCase();return r.length?r:null}function rf(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("",Qm());let n=Ys(e);if(n?.outboxId){let o=$l(n.outboxId);o?t.push("",Gs(o)):t.push("","## Plan persistence risk","",`Unconfirmed AgentOS plan write (outboxId=${n.outboxId}).`)}return t.join(`
|
|
32
|
+
`)}function Ow(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 Cr(e){let r=e.pipeline===!0||e.pipeline==="true";try{let mn=function(C){return C.landPrDispatch===!0?!0:C.task?.executor==="land_pr"};var t=mn;let n=U(String(N(String(e.run||""),"--run"))),o=String(N(String(e.agentOsId||""),"--agent-os-id")),s=B(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=qe({runId:n.id}),u=dl(n.id,c.runnerId),d=e.diskPath?Me({diskPath:String(e.diskPath)}):Me({diskPath:n.repo}),f=Fr({runId:n.id}),m=Ow(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=Bs(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)):Ss,runnerDiskGate:d,runnerResourceGate:f,activeHarnessWorkers:S,runnerPresence:c,harnessBoardSnapshot:Qr(n.id),...e.lane?{lane:ip(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)}:{}}),E=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}},b=await E(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 P=b.result;if(l){let C=Zm(P),y=ef(P),I={runId:n.id,agentOsId:o,dryRun:!0,wouldStart:P.started.map(j=>({taskId:j.task.id,title:j.task.title,reason:j.reason})),skipped:P.skipped.map(j=>({taskId:j.task.id,skipReason:j.skipReason,reason:j.reason})),diskGate:P.diskGate,resourceGate:P.resourceGate,inspected:P.inspected,pagesScanned:P.pagesScanned??null,candidatesExhausted:P.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=Op(),M=[],se=[],$e=Number(P.inspected)||0;async function be(C,y,I){let j=await Kl({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 fn(C){let y=C.task,I=String(y.id);if(p&&!m.has(I))return be(y,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...m]});let j=y.prUrl?String(y.prUrl):"";if(!j)return be(y,"land_pr task missing prUrl");try{let Ke=await zm({prUrl:j,repo:Jm(j),cwd:n.repo}),ht=await Xm({baseUrl:s,secret:i,agentOsId:o,runId:n.id,task:y,report:Ke});return ht.ok?(M.push({taskId:I,started:!0,landPr:!0,outcome:Ke.outcome,completionStatus:ht.status}),!0):be(y,`land_pr completion POST failed (HTTP ${ht.status})`,{landPr:!0,outcome:Ke.outcome})}catch(Ke){return be(y,Ke.message)}}async function Se(C){let y="duplicate_dispatch_prevented: live local worker already owns this task",I=await Kl({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=Aw(C),j=String(y.id);if(p&&!m.has(j))return be(y,"exact_target_mismatch: dispatch-next returned a different task than requested",{requestedTargetTaskIds:[...m]});let Ke=Iw(y.personaSlug);if(Ke&&(!I?.personaInjectionReady||!I.personaMarkdown))return be(y,`persona_injection_required: missing anchored context-envelope persona block for "${Ke}"`);if(Mp(n.id,j))return Se(y);let ht=Number(y.attempt)||1;if(ht>H.maxTaskAttempts)return be(y,`task attempt ${ht} exceeds KYNVER_MAX_TASK_ATTEMPTS (${H.maxTaskAttempts})`);let xy=R(`t-${y.id}-a${y.attempt}`),kt=Rs({explicitModel:e.model?String(e.model):void 0,explicitProvider:e.provider?String(e.provider):void 0,explicitProviderIsOperatorOverride:!!e.provider,task:ap(y)});try{let na=y.planId?String(y.planId):void 0,To=Lp({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}),Do=Ls(n,{name:xy,task:rf(y,o),ownedPaths:e.owned?String(e.owned).split(",").map(Ey=>Ey.trim()).filter(Boolean):[],model:kt.model,provider:kt.provider,routingRule:kt.rule,requestedModel:kt.requestedModel,agentOsId:o,taskId:String(y.id),planId:na,branch:To?.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:To?.targetPrUrl??(y.prUrl?String(y.prUrl):void 0),repairTargetPrUrl:To?.targetPrUrl,repairTargetBranch:To?.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??Ke,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:Do.name,pid:Do.pid,branch:Do.branch,model:Do.model,provider:kt.provider,routingRule:kt.rule,instructionPolicyFingerprint:I?.instructionPolicyFingerprint??null,instructionPolicyRuleCount:Array.isArray(I?.instructionPolicyEvidence?.ruleSlugs)?I.instructionPolicyEvidence.ruleSlugs.length:null,personaSlug:I?.personaSlug??Ke,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(na){return be(y,na.message)}}let D=new Set;async function ie(C){let y=C.task,I=String(y.id);if(D.has(I))return be(y,"dispatch_retry_loop_prevented: task already failed to start this tick");let j=mn(C)?await fn(C):await X(C);return j||D.add(I),j}for(let C of P.started)await ie(C);if(se.push(...P.skipped??[]),p)for(let C of se){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 E(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}$e+=Number(C.result.inspected)||0,se.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 ie(I)}}let ge=M.filter(C=>C.started).length,we=Zm(P),ae=ef(P),No=ge===0&&(we?.capacityIdle===!0||Number(P.resourceGate?.slotsAvailable)>0);if(No&&we?.summary){let C=we.skipReasonCounts?.retry_ceiling_exceeded??0,y=P.overAttemptIdleRecovery??we.overAttemptIdleRecovery,I=y?.attempted===!0?`; over_attempt_recovery minted=${y.minted??0} started=${y.started??0}`:C>0?"; over_attempt_recovery not attempted":"",j=ae?`; dispatch_skip_drain scanned=${ae.scanned??0} advanced=${ae.advanced??0}`:"";console.error(`[dispatch] ${we.summary}${C>0?`; retry_ceiling_exceeded=${C}`:""}${I}${j}`)}let Nu={runId:n.id,agentOsId:o,dryRun:!1,leaseOwner:u,startedCount:ge,capacityIdle:No,admissionExhaustion:we,dispatchSkipDrain:ae,outcomes:M,skipped:se.map(C=>({taskId:C.task.id,skipReason:C.skipReason})),inspected:$e,pagesScanned:P.pagesScanned??null,candidatesExhausted:P.candidatesExhausted??null,diskGate:P.diskGate,resourceGate:P.resourceGate},Tu=C=>!C.started&&C.nonFatal!==!0;if(r)return{ok:!M.some(Tu),...Nu};console.log(JSON.stringify(Nu,null,2)),M.some(Tu)&&process.exit(1)}catch(n){if(r)return{ok:!1,error:n.message};console.error(`run dispatch failed: ${n.message}`),process.exit(1)}}wt();wa();Cn();Aa();Pa();Ur();O();De();import Nw from"node:os";function Qn(e,r={}){let t=(r.boxKind??je(v())).trim().toLowerCase()||"forge",n=r.hostLabel??Nw.hostname();return{boxId:r.boxId??Wn(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}:{}}}function Tw(e){let r={ts:e.ts??new Date().toISOString(),phase:e.phase,summary:e.summary,changedFiles:e.changedFiles??[],blocker:e.blocker??null};return e.boxResourceSnapshot&&(r.boxResourceSnapshot=e.boxResourceSnapshot),e.prEvidence?.length&&(r.prEvidence=e.prEvidence),`${JSON.stringify(r)}
|
|
33
|
+
`}G();En();function Dw(e){if(e.skipReason==="engagement_required")return!0;let r=e.reason??"";return r.includes("engagement_required")||r.includes("engagement_not_found")||r.includes("engagement_expired")||r.includes("engagement_revoked")}Da();_n();import{createHash as tf}from"node:crypto";function Js(e){return JSON.stringify(Gl(e))}function Gl(e){if(Array.isArray(e))return e.map(Gl);if(e&&typeof e=="object"){let r={};for(let t of Object.keys(e).sort())r[t]=Gl(e[t]);return r}return e}function Mw(e){return`ib1-${tf("sha256").update(Js(e),"utf8").digest("hex").slice(0,16)}`}function Uw(e){return`ib-${tf("sha256").update(Buffer.from(e)).digest("hex").slice(0,12)}`}function qs(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 jt(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")}var nf={"ib-3bab6314f0ba":"53a2040646cd479e1f5f1aea9abf7848ce8b62e32001efb8044dfd90e8ab87ed"};function Yl(e,r=process.env){let t=qs(r.KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY);if(t)return t;let n=nf[e];return n?qs(n):null}import{createPublicKey as Lw,verify as Bw}from"node:crypto";var Ww=Buffer.from("302a300506032b6570032100","hex");function Hw(e){return Lw({key:Buffer.concat([Ww,Buffer.from(e)]),format:"der",type:"spki"})}function of(e,r){if(!jt(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(Js(e.bundle),"utf8");return Bw(null,n,Hw(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 Jl(e,r=process.env){if(!jt(e))return{ok:!1,reason:"malformed signed bundle payload"};let t=Yl(e.publicKeyId,r);return t?of(e,t):{ok:!1,reason:`no verification key for publicKeyId "${e.publicKeyId}" (not pinned; set KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY)`}}import{mkdirSync as Fw,readFileSync as $w,renameSync as Kw,writeFileSync as jw}from"node:fs";import{homedir as Vw}from"node:os";import sf from"node:path";function ql(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return sf.join(Vw(),".kynver",`instruction-bundle-${r}.json`)}function zl(e,r){try{let t=ql(e);Fw(sf.dirname(t),{recursive:!0});let n=`${t}.tmp-${process.pid}`;jw(n,JSON.stringify(r),"utf8"),Kw(n,t)}catch{}}function Xl(e){try{let r=$w(ql(e),"utf8"),t=JSON.parse(r);return jt(t)?t:null}catch{return null}}var af=15*6e4,Gw=1e4,ar={lastAttemptAtMs:0,etag:null,diskCacheTried:!1,routeMissingLogged:!1};function eo(e,r){console.error(JSON.stringify({event:e,...r}))}function lf(e,r,t){let n=Jl(e);return n.ok?($a(n.bundle,r),r==="server"&&zl(t,e),!0):(eo("instruction_bundle_signature_invalid",{agentOsId:t,source:r,publicKeyId:e.publicKeyId,reason:n.reason}),!1)}function Zn(e){if(ar.diskCacheTried)return!1;ar.diskCacheTried=!0;let r=Xl(e);return r?lf(r,"disk",e):!1}async function Ql(e){let r=e.nowMs??Date.now(),t=()=>({source:sr(),version:Mt(),updated:!1});if(!e.force&&r-ar.lastAttemptAtMs<af)return t();ar.lastAttemptAtMs=r;let n=e.baseUrl?.trim().replace(/\/$/,""),o=e.secret?.trim();if(!n||!o)return sr()==="embedded"&&Zn(e.agentOsId)?{...t(),updated:!0}:t();let s=e.fetchImpl??fetch,i=new AbortController,a=setTimeout(()=>i.abort(),Gw);try{let l=Le(o);delete l["Content-Type"],ar.etag&&sr()==="server"&&(l["If-None-Match"]=ar.etag);let c=await s(`${n}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/runtime/instruction-bundle`,{headers:l,signal:i.signal});if(c.status===304)return t();if(c.status===404)return ar.routeMissingLogged||(ar.routeMissingLogged=!0,eo("instruction_bundle_route_missing",{agentOsId:e.agentOsId,baseUrl:n})),sr()==="embedded"&&Zn(e.agentOsId)?{...t(),updated:!0}:t();if(!c.ok)return eo("instruction_bundle_fetch_failed",{agentOsId:e.agentOsId,status:c.status}),sr()==="embedded"&&Zn(e.agentOsId)?{...t(),updated:!0}:t();let u=await c.json().catch(()=>null);return!u||!lf(u,"server",e.agentOsId)?sr()==="embedded"&&Zn(e.agentOsId)?{...t(),updated:!0}:t():(ar.etag=c.headers.get("etag"),eo("instruction_bundle_loaded",{agentOsId:e.agentOsId,version:Mt(),publicKeyId:u.publicKeyId}),{...t(),updated:!0})}catch(l){return eo("instruction_bundle_fetch_error",{agentOsId:e.agentOsId,error:l instanceof Error?l.message:String(l)}),sr()==="embedded"&&Zn(e.agentOsId)?{...t(),updated:!0}:t()}finally{clearTimeout(a)}}var Zl="openai-codex",Yw=new Set(["upstream_503","connection_refused","connection_reset","sse_no_event","sse_idle_timeout"]),Jw=[/\bsk-[a-zA-Z0-9_-]{8,}\b/g,/\bBearer\s+[a-zA-Z0-9._-]{8,}\b/gi,/\baccess[_-]?token["\s:=]+[a-zA-Z0-9._-]{8,}/gi];function lr(e,r=400){let t=String(e??"").replace(/\s+/g," ").trim();for(let n of Jw)t=t.replace(n,"[redacted]");return t.length>r?`${t.slice(0,r)}\u2026`:t}function qw(e,r){let t=[];e instanceof Error?(t.push(e.message),t.push(e.name)):typeof e=="string"?t.push(e):e!=null&&t.push(String(e));let n=e,o=r??n?.status_code??n?.statusCode??void 0;return o!=null&&t.push(`http ${o}`),{haystack:t.join(" ").toLowerCase(),statusCode:o}}function uf(e,r){let{haystack:t,statusCode:n}=qw(e,r),o=e instanceof Error?e.message:typeof e=="string"?e:String(e??"");if(n===402||/billing|credit|payment required|insufficient_quota/.test(t))return{errorClass:"billing",summary:lr(o||"Billing or credits exhausted"),statusCode:n,transient:!1};if(n===401||n===403||/\bunauthorized\b|\bforbidden\b/.test(t))return{errorClass:"auth",summary:lr(o||"Authentication failed"),statusCode:n,transient:!1};if(n===429||/rate limit|too many requests|throttl/.test(t))return{errorClass:"rate_limit",summary:lr(o||"Rate limited"),statusCode:n,transient:!0};if(n===503||/upstream connect error|connection termination|remote connection failure|delayed connect error/.test(t))return{errorClass:"upstream_503",summary:lr(o||"ChatGPT Codex backend returned HTTP 503"),statusCode:n??503,transient:!0};if(/connection refused/.test(t))return{errorClass:"connection_refused",summary:lr(o||"Connection refused by ChatGPT Codex backend"),statusCode:n,transient:!0};if(/no sse events|no bytes within|no stream events|codex stream produced no/.test(t)){let s=/no bytes|ttfb|first byte/.test(t)?"sse_no_event":"sse_idle_timeout";return{errorClass:s,summary:lr(o||(s==="sse_no_event"?"Codex stream opened but sent no events":"Codex stream stalled after the first event")),statusCode:n,transient:!0}}return/connection reset|connection lost|connection closed|disconnect\/reset/.test(t)?{errorClass:"connection_reset",summary:lr(o||"Connection reset while talking to ChatGPT Codex"),statusCode:n,transient:!0}:{errorClass:"unknown",summary:lr(o||"Unknown provider error"),statusCode:n,transient:!1}}function df(e){let r=e.env??process.env,t=Math.max(1,e.defaultRetries??3),n=String(e.provider??"").toLowerCase(),o=String(e.platform??"").toLowerCase();if(n!==Zl||o!=="cron")return t;let s=r.HERMES_CODEX_CRON_API_MAX_RETRIES?.trim();if(!s)return Math.max(t,5);let i=Number.parseInt(s,10);return!Number.isFinite(i)||i<1?Math.max(t,5):Math.max(t,i)}var cf={upstream_503:"ChatGPT Codex backend outage (HTTP 503)",connection_refused:"ChatGPT Codex backend refused the connection",connection_reset:"ChatGPT Codex connection dropped mid-request",sse_no_event:"Codex stream never started (no SSE events)",sse_idle_timeout:"Codex stream stalled (no SSE events after the first byte)",rate_limit:"ChatGPT Codex rate limit",billing:"ChatGPT Codex billing or quota limit",auth:"ChatGPT Codex authentication problem",unknown:"ChatGPT Codex provider error"};function pf(e){let r=e.provider?.trim()||Zl,t=e.model?.trim()||"(unknown model)",n=e.jobName?.trim()||"Scheduled Hermes job",o=cf[e.errorClass]??cf.unknown,s=e.degraded?"degraded":"failed";return[`\u26A0\uFE0F ${n} \u2014 AI provider ${s} (not a Kynver harness failure).`,"",`Provider: ${r} (ChatGPT Codex subscription)`,`Model: ${t}`,`What happened: ${o} after ${e.attempts} attempt(s) with backoff.`,`Details: ${e.summary}`,"","This is a ChatGPT/Codex API issue on chatgpt.com \u2014 not AgentOS, not the Kynver runtime, and not your local harness.","The cron job will run again on its next schedule. If it persists, check ChatGPT/Codex status or re-auth with: hermes auth status openai-codex"].join(`
|
|
34
|
+
`)}function mf(e,r){return`\u26A0\uFE0F Cron job '${e}' \u2014 provider degraded
|
|
27
35
|
|
|
28
|
-
${r}`}function
|
|
29
|
-
`)){let o=n.match(/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)$/);if(!o||!t.has(o[1]))continue;let s=o[1];r[s]=o[2].replace(/^["']|["']$/g,"").trim()}return r}function cw(e){for(let r of Ul){let t=He(e,r);if(t)return{ok:!0,databaseUrl:t,source:`env:${r}`,hint:Vn(t)}}return null}function uw(e,r){for(let t of Hs({cwd:e,env:r})){let n=Bm(t);for(let o of Ll){let s=n[o]?.trim();if(s)return{ok:!0,databaseUrl:s,source:`env-file:${o}`,hint:`${Vn(s)} (${Hm.basename(t)})`}}}return null}function dw(e){let r=process.platform==="win32"?"neon.cmd":"neon",t=["connection-string",e.branch,"--prisma","-o","json","--no-color","--no-analytics"];e.projectId&&t.push("--project-id",e.projectId),e.databaseName&&t.push("--database-name",e.databaseName),e.roleName&&t.push("--role-name",e.roleName),e.pooled&&t.push("--pooled");let n;try{let o=lw(r,t,{encoding:"utf8",env:process.env,timeout:3e4});if(o.status!==0)return null;n=(o.stdout||"").trim()}catch{try{n=aw("neonctl",t,{encoding:"utf8",env:process.env,timeout:3e4}).trim()}catch{return null}}if(!n)return null;try{let o=JSON.parse(n),s=typeof o.connection_uri=="string"&&o.connection_uri||typeof o.connection_string=="string"&&o.connection_string||typeof o.connectionString=="string"&&o.connectionString;if(s)return s}catch{}return/^postgres(ql)?:\/\//i.test(n)?n:null}function pw(e,r){let t=He(e,"KYNVER_NEON_BRANCH")||He(e,"NEON_BRANCH")||"production",n=r({branch:t,projectId:He(e,"KYNVER_NEON_PROJECT_ID")||He(e,"NEON_PROJECT_ID"),databaseName:He(e,"KYNVER_NEON_DATABASE_NAME")||He(e,"NEON_DATABASE_NAME"),roleName:He(e,"KYNVER_NEON_ROLE_NAME")||He(e,"NEON_ROLE_NAME"),pooled:He(e,"KYNVER_NEON_POOLED")==="1"||He(e,"NEON_POOLED")==="1"});return n?{ok:!0,databaseUrl:n,source:"neon-cli",hint:Vn(n)}:null}function Fm(e={}){let r=e.env??process.env,t=e.cwd??process.cwd(),n=e.neonConnectionString??dw,o=[],s=Hs({cwd:t,env:r}),i=pw(r,n);if(o.push("neon-cli"),i)return i;for(let u of Ul)o.push(`env:${u}`);let a=cw(r);if(a)return a;for(let u of Ll)o.push(`env-file:${u}`);let l=uw(t,r);return l||{ok:!1,reason:"No production database credentials found. Authenticate Neon CLI (`neon auth`), set KYNVER_NEON_* / NEON_* project hints, or provide PRODUCTION_DATABASE_URL / KYNVER_PRODUCTION_DATABASE_URL (process env, KYNVER_ENV_FILE, ~/.kynver/.env, or selective .env keys in the repo / defaultRepo checkout)."+(s.length>0?` Searched env files: ${s.slice(0,6).join(", ")}${s.length>6?"\u2026":""}.`:""),attempted:o}}function mw(e={}){let r=Fm(e);if(!r.ok)throw new Error(r.reason);return process.env.DATABASE_URL=r.databaseUrl,console.error(`[kynver-cli] database target: ${r.hint} (source: ${r.source})`),r}Ce();L();import{existsSync as oC,mkdirSync as sC}from"node:fs";import iC from"node:path";L();St();import{existsSync as Xw,readFileSync as Qw}from"node:fs";import Xm from"node:path";import Jw from"node:path";L();St();G();w();import fw from"node:path";var gw=new Set(["running","dispatching","pending","queued","needs_attention"]),ar=new Set(["completed","failed","cancelled","done"]);function Qr(e){let r=Pe(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=_(fw.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),Wr(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function Gn(){let e=[];for(let r of ne()){if(!gw.has(r.status))continue;let t=Qr(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Ue(r),e.push({runId:r.id,from:n,to:t})}return e}L();St();G();w();Dr();hn();import{existsSync as Cr,lstatSync as Pw,readdirSync as Ew,readlinkSync as Aw,renameSync as Jl,rmSync as Ow}from"node:fs";import Xe from"node:path";ke();w();import fe from"node:path";var hw=`${fe.sep}runs${fe.sep}runs${fe.sep}`;function Lt(e){return e.includes(hw)}function kw(e,r){if(!Lt(e))return e;let t=te(r),n=pe(t),o=`${fe.sep}runs${fe.sep}runs${fe.sep}`,s=e.indexOf(o);if(s<0)return e;let i=e.slice(s+o.length);return fe.join(n,i)}function Wl(e,r){return fe.join(pe(te(e)),R(r))}function lr(e,r,t){return fe.join(Wl(e,r),"workers",R(t))}function $m(e,r,t){let n=te(e);return fe.join(n,"runs","runs",R(r),"workers",R(t))}function Hl(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function Zr(e){return{workerJsonPath:fe.join(e,"worker.json"),stdoutPath:fe.join(e,"stdout.jsonl"),stderrPath:fe.join(e,"stderr.log"),heartbeatPath:fe.join(e,"heartbeat.jsonl"),lastStatusPath:fe.join(e,"last-status.json")}}function Bl(e){let r=Zr(lr(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!Lt(e.statusPath)?e.statusPath:r}import{existsSync as wr,mkdirSync as vw,readdirSync as Vm,renameSync as bw,statSync as $l}from"node:fs";import z from"node:path";I();un();tr();import Km from"node:path";function yw(e){return Km.resolve(gt(e.trim()))}function Fl(e,r,t){let n=e?.trim();return n?{repo:yw(n),source:r,persistedInConfig:t}:null}function Re(e={}){let r=e.env??process.env,t=e.config??v(),n=Fl(t.defaultRepo,"config",!0);if(n)return n;let o=Fl(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=Fl(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);if(s)return s;let i=gr({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl});return i?{repo:i.repo,source:i.source,persistedInConfig:!1}:null}function Fs(e,r){let t={...r??v(),defaultRepo:he(Km.resolve(e))};return je(t),t}function Rw(e){let r=e?.config??v(),t=Re({...e,config:r});if(!t)return{ok:!1,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)."};if(t.persistedInConfig)return{ok:!0,resolved:t,config:r};let n=Fs(t.repo,r);return{ok:!0,resolved:{...t,persistedInConfig:!0,source:"config"},config:n}}function Wt(e){return{defaultRepo:Y(e.repo),source:e.source,persistedInConfig:e.persistedInConfig}}Dr();ke();L();w();var Ht=900*1e3,Gm=3600*1e3;function Kl(e,r){let t=z.resolve(e),n=z.resolve(pe(r)),o=z.relative(n,t);return o!==".."&&!o.startsWith("..")&&!z.isAbsolute(o)}function jl(e){if(!wr(e))return[];try{return Vm(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function Vl(e){let r=z.join(e,"workers");if(!wr(r))return[];try{return Vm(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function Ym(e){return z.join(e,"archived-workers")}function Sw(e,r){let t=z.join(Ym(e),R(r));return wr(t)?`${t}-${Date.now()}`:t}function jm(e,r,t){if(!wr(e))return!1;try{let n=r-$l(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function Gl(e,r=Date.now(),t=Ht){if(!wr(e))return!1;let n=Zr(e),o=_(n.workerJsonPath,void 0);if(o?.status==="running"&&$(o.pid))return!0;let s=_e(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(jm(n.stdoutPath,r,t)||jm(n.heartbeatPath,r,t))}function ww(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-$l(z.join(e,"worker.json")).mtimeMs}catch{return 0}}function Cw(e,r,t,n){if(Gl(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=ww(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 et(e,r=Date.now(),t=Ht){for(let n of Vl(e))if(Gl(z.join(e,"workers",n),r,t))return!0;return!1}function _w(){return{repo:Re()?.repo??"",base:"origin/main",baseCommit:"unknown"}}function xw(e,r){let t=z.join(pe(e),R(r));if(!wr(t))return null;let n=Vl(t);if(n.length===0)return null;let o;try{o=$l(t).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=lr(e,r,a);s[a]={workerDir:l,statusPath:z.join(l,"worker.json")}}let i=et(t);return{id:r,name:r,..._w(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function $s(e){let r=te(e??de()),t=pe(r),n=[];for(let o of jl(t)){let s=z.join(t,o,"run.json");if(wr(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=xw(r,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}Ue(i),n.push({runId:o,action:"repaired_run_json",reason:et(z.join(t,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function Ks(e,r={}){let t=te(e??de()),n=pe(t),o=r.now??Date.now(),s=r.archiveAgeMs??Gm,i=[];$s(t);for(let a of jl(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||{}),...Vl(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(Ym(l),R(m));if(wr(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=Cw(p,k,o,s);if(!h.eligible){i.push({runId:u.id,worker:m,action:"skipped",reason:h.reason});continue}let S=Sw(l,m);vw(z.dirname(S),{recursive:!0}),bw(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&&Ue(u)}return{workers:i}}function Yl(e,r=Date.now()){let t=new Set,n=pe(e);for(let o of jl(n)){let s=z.join(n,o);et(s,r)&&t.add(`${e}\0${o}`)}return t}L();w();function Iw(e,r){let t=Wl(e,r),n;try{n=Pw(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=Xe.resolve(Xe.dirname(t),Aw(t));if(et(o)||et(t))return null;let s=`${t}.materialize-${Date.now()}`;return Jl(o,s),Ow(t),Jl(s,t),o}function Nw(e){let r=[];for(let t of Hl()){let n=Xe.join(e.fromDir,t),o=Xe.join(e.toDir,t);!Cr(n)||Cr(o)||(Jl(n,o),r.push(t))}return r}function Jm(e,r){let t=Zr(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 Tw(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=Zr(e.canonicalDir),t=_(r.lastStatusPath,void 0),n=Cr(r.stdoutPath),o=Cr(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?wt(r.stdoutPath):{finalResult:null},a=o?_e(r.heartbeatPath):_e(""),l=Tr(a),c=Tw({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:Xe.join(oe().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}),Jm(u,e.canonicalDir),u}function Mw(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=lr(r,e.id,o),a=Xe.join(i,"worker.json");(Lt(s.workerDir)||Lt(s.statusPath)||s.workerDir!==i||s.statusPath!==a)&&(n[o]={workerDir:i,statusPath:a},t=!0)}return t&&(e.workers=n,Ue(e)),t}function Uw(e){let r=[],t=lr(e.harnessRoot,e.run.id,e.workerName),n=$m(e.harnessRoot,e.run.id,e.workerName),o=Zr(t),s=Nw({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=Bl({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=_(i,void 0);if(!a&&Cr(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=Cr(t),u=Hl().some(d=>Cr(Xe.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:Xe.join(oe().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 Jm(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 Lw(e,r){let t=Xe.join(x(e.id),"workers");if(!Cr(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of Ew(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function js(){let{harnessRoot:e}=oe(),r=$s(e),t=[];for(let n of ne()){let o=Iw(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),Mw(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 Lw(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:lr(e,n.id,i),statusPath:Xe.join(lr(e,n.id,i),"worker.json")}},Ue(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(...Uw({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}function Ww(){let e=js(),r=e.workers.reduce((n,o)=>(n[o.action]=(n[o.action]??0)+1,n),{}),t=e.runMetadataRetention.runs.reduce((n,o)=>(n[o.action]=(n[o.action]??0)+1,n),{});console.log(JSON.stringify({ok:!0,totals:r,runMetadataRetention:{totals:t,details:e.runMetadataRetention.runs},details:e.workers},null,2))}Dr();Wo();G();L();St();w();import{execFileSync as qm}from"node:child_process";import zm from"node:path";function ql(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:null}function Hw(e){let r=ql(e)?.match(/\/pull\/(\d+)$/);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function Bw(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function Fw(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 $w(e){let r=null;if(typeof e=="string"?r=Ct(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=ql(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 Kw(e){try{let n=qm("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=qm("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:ql(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 jw(e){let r=_e(e.heartbeatPath);return e.completionSnapshot?.finalResult??Tr(r)}function Vw(e){let r=new Map,t=x(e.id);for(let n of Pe(e)){let o=_(zm.join(t,"workers",R(n),"worker.json"),void 0);if(o)for(let s of $w(jw(o))){let i=Hw(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function Gw(e,r){let t=_e(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,Bw(r)].filter(Boolean).join(`
|
|
30
|
-
`);return Fw(n)}function Yw(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function Vs(e={}){let r=e.lookupPr??Kw,t=[],n=new Map;for(let o of ne()){let s=Vw(o),i=x(o.id);for(let a of Pe(o)){let l=zm.join(i,"workers",R(a),"worker.json"),c=_(l,void 0);if(!c||!Yw(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 Gw(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 qw=900*1e3;function zw(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function Bt(){let e=js();if(zw()){let s=Vs(),i=Ks();return{workers:[],finalizedRuns:Gn(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let r=[],t=Date.now();for(let s of ne())for(let i of Pe(s)){let a=Jw.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>qw,m=Number.isFinite(d)&&t-d>xt;if(f&&m){ln(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=Vs(),o=Ks();return{workers:r,finalizedRuns:Gn(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}function zl(){let e=Bt(),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))}G();w();function Zw(e){if(!e||!Xw(e))return 0;try{return Qw(e,"utf8").trim().length}catch{return 0}}function eC(e,r){let t=Xm.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=Zw(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:Wr(o),completionBlocked:a}}function rC(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 tC(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 nC(e){let r=0;for(let t of Pe(e)){let n=Xm.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 Gs(){return Bt(),ne().map(e=>{let t=Pe(e).map(d=>eC(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}=tC(t),c=nC(e),u=Pt(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:rC({run:e,workers:t,openWorkerCount:c}),evidence:{missingHeartbeatWorkers:n,missingFinalResultWorkers:o,landingBlockedWorkers:s,completionBlockedWorkers:i,workers:t}}})}function Xl(){console.log(JSON.stringify(Gs(),null,2))}w();function aC(e){let r=typeof e.repo=="string"?e.repo.trim():"";if(r)return r;let t=Re();return t?t.repo:(N("","--repo (or set defaultRepo via `kynver setup` / KYNVER_DEFAULT_REPO)"),"")}function Yn(e){let r=ml(aC(e));Pu(r);let t=e.id?Dn(String(e.id)):Ru(String(e.name||"run")),n=x(t);oC(n)&&lC(`run already exists: ${t}`),sC(n,{recursive:!0});let o=String(e.base||"origin/main"),s=ue(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:{}};ce(iC.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 Ql(){Xl()}function lC(e){console.error(e),process.exit(1)}w();function Qm(e){let r=e.trim();return r?Gs().find(n=>n.name===r&&n.status!=="completed")??null:null}function Zl(e){let r=String(N(String(e.name||""),"--name")),t=Qm(r);console.log(JSON.stringify({runId:t?.id??null,name:r,status:t?.status??null,effectiveStatus:t?.effectiveStatus??null},null,2))}Bo();I();import cC from"node:path";L();G();w();async function Ft(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=W(e.baseUrl?String(e.baseUrl):void 0),s=await K(e.secret?String(e.secret):void 0,n,{baseUrl:o}),i=Je({runId:t.id}).runnerId,a=await em({run:t.id,agentOsId:n,...e},"run_sweep"),l=[];for(let f of Object.keys(t.workers||{})){let m=_(cC.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=cs({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)}}I();un();ke();ke();import{existsSync as hC,readdirSync as ef,statSync as kC}from"node:fs";import yC from"node:path";import{execFileSync as uC}from"node:child_process";import{existsSync as Zm,readdirSync as dC,statSync as pC}from"node:fs";import mC from"node:path";var fC=2500;function gC(e,r=fC){if(!Zm(e))return 0;try{let n=uC("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 cr(e,r=5e4){if(!Zm(e))return 0;let t=gC(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=dC(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=mC.join(i,l),u;try{u=pC(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}function ec(e={}){let r=te(e.harnessRoot??de()),t=nr(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!hC(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=ef(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=yC.join(t,u.name);try{let f=kC(d);l=l===null?f.mtimeMs:Math.min(l,f.mtimeMs)}catch{}try{for(let f of ef(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=cr(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}}ke();import Ie from"node:path";Rn();import zs from"node:path";Ce();G();var Ys=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function rc(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of Ys)if(r===t||r.startsWith(`${t}/`))return!0;return!1}function Ae(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!rc(n)})}function rt(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 Jn(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?Ae(e.changedFiles).length>0:!!(rt(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}w();function qn(e){return e.status||(e.status=T(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function tc(e,r){if(e.status)return Ae(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):cn(e.worktreePath);return Ae(t).length>0}function RC(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function nc(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=RC(e);if(o&&!$(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):cn(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"}:Eo(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??rt(s)};return e.status=u,u}return qn(e)}G();G();Dr();w();function oc(e,r=Date.now(),t=Ht){let n=_e(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function Js(e,r=Date.now(),t=Ht){return $(e.pid)?!0:oc(e,r,t)}function vC(e,r){return r?r.runTerminalCache.derive(e.run):Qr(e.run)}function ur(e,r=Date.now()){return Js(e.worker,r)}function sc(e,r){return ar.has(e.run.status)?!1:vC(e,r)!==null}function rf(e,r,t=Date.now()){if(ur(e,t))return!0;if(ar.has(e.run.status)||sc(e,r))return!1;let n=qn(e);return Z(n)?!1:!!ur(e,t)}Rn();G();function tf(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(ur(e))return!0;let n=r??qn(e);return!!(!Z(n)||Jn(n)||Ae(n.changedFiles).length>0||Ur({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:rt(n.finalResult)}).blocked)}Ce();w();import{existsSync as of,mkdirSync as bC,writeFileSync as nf}from"node:fs";import qs from"node:path";function sf(e,r,t){return qs.join(e,"salvage",R(r),R(t))}function af(e){return of(qs.join(sf(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function lf(e){let r=sf(e.harnessRoot,e.indexed.runId,e.indexed.workerName);bC(r,{recursive:!0});let t=qs.join(r,"salvage.patch"),n=!1;if(of(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(`
|
|
31
|
-
`);a.trim()&&(
|
|
36
|
+
${r}`}function ff(e){let{provider:r,model:t,authSource:n,costTier:o,riskClass:s,costRationale:i,routingRule:a,escalatedFrom:l,escalatedReason:c}=e;return{provider:r,model:t,authSource:n,costTier:o,riskClass:s,costRationale:i,routingRule:a,escalatedFrom:l,escalatedReason:c}}function zw(e){return ff(e)}var ec=["off","observe","enforce"],Xw=["foreground_harness_spawn","shell_platform_dispatch"],Qw=["allow_local","observe_bypass","enforce_harness_task"];function Zw(e){let r=(e??"off").trim().toLowerCase();return ec.includes(r)?r:"off"}function zs(e=process.env){return Zw(e.KYNVER_ORCHESTRATION_POLICY_MODE)}function rc(e=process.env){let r=e.KYNVER_ORCHESTRATION_ENFORCE_TASKS?.trim().toLowerCase();return r?r==="1"||r==="true"||r==="yes"||r==="on":zs(e)==="enforce"}import{createHash as eC}from"node:crypto";function ro(e){if(e==null)return null;let r=e.trim();return r.length?r:null}function tc(e){let r=ro(e.sessionId)??"anonymous",t=ro(e.title)??ro(e.action)??"foreground",n=eC("sha256").update([ro(e.planId)??"",ro(e.parentTaskId)??"",t.toLowerCase()].join("|")).digest("hex").slice(0,16);return`hermes-foreground:${r}:${n}`}function rC(e,r){return e==="enforce"&&r?"enforce_harness_task":e==="observe"?"observe_bypass":"allow_local"}function tC(e,r=process.env){let t=zs(r),n=rc(r),o=rC(t,n),s=o==="enforce_harness_task"?tc({sessionId:e.sessionId,planId:e.planId,parentTaskId:e.parentTaskId,title:e.title,action:e.action}):null,i;return t==="off"?i="Orchestration policy off \u2014 local foreground path allowed.":o==="observe_bypass"?i=`Observe mode: ${e.action} bypass logged; local fallback preserved.`:o==="enforce_harness_task"?i=`Enforce mode: ${e.action} must create linked harness AgentTask (${s}).`:i="Local foreground path allowed.",{mode:t,decision:o,idempotencyKey:s,bypassLogged:o==="observe_bypass",reason:i}}function nC(e,r){let t=e;return r&&(t=t.split(r).join("[REDACTED_SECRET]")),t=t.replace(/kynver_[a-z0-9_]+/gi,"[REDACTED_KYNVER_TOKEN]"),t=t.replace(/sk-[a-zA-Z0-9_-]+/g,"[REDACTED_API_KEY]"),t}Or();import*as Xs from"node:fs";import{homedir as gf}from"node:os";import*as Xe from"node:path";function hf(e){return e.startsWith("~/")?Xe.join(gf(),e.slice(2)):e}function Qs(e={}){let r=e.env??process.env,t=e.cwd??process.cwd(),n=e.homeDir??(r.HOME?.trim()||r.USERPROFILE?.trim()||gf()),o=new Set,s=[],i=c=>{let u=Xe.resolve(hf(c));o.has(u)||(o.add(u),s.push(u))},a=r.KYNVER_ENV_FILE?.trim();a&&i(a);let l=t;for(let c=0;c<12;c+=1){i(Xe.join(l,".env"));let u=Xe.dirname(l);if(u===l)break;l=u}i(Xe.join(n,".kynver",".env"));try{let c=Xe.join(n,".kynver","config.json");if(Xs.existsSync(c)){let d=JSON.parse(Xs.readFileSync(c,"utf8")).defaultRepo?.trim();d&&i(Xe.join(d,".env"))}}catch{}return s}import{execFileSync as oC,spawnSync as sC}from"node:child_process";import*as Zs from"node:fs";import*as kf from"node:path";function to(e){if(!e?.trim())return"(not set)";try{let r=new URL(e),t=(r.pathname||"").replace(/^\//,"").split("?")[0]||"(no database name)";return`${r.hostname} / ${t}`}catch{return"(invalid URL)"}}var nc=["KYNVER_PRODUCTION_DATABASE_URL","PRODUCTION_DATABASE_URL"],oc=[...nc];function He(e,r){return e[r]?.trim()||void 0}function yf(e){if(!Zs.existsSync(e))return{};let r={},t=new Set(oc);for(let n of Zs.readFileSync(e,"utf8").split(`
|
|
37
|
+
`)){let o=n.match(/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)$/);if(!o||!t.has(o[1]))continue;let s=o[1];r[s]=o[2].replace(/^["']|["']$/g,"").trim()}return r}function iC(e){for(let r of nc){let t=He(e,r);if(t)return{ok:!0,databaseUrl:t,source:`env:${r}`,hint:to(t)}}return null}function aC(e,r){for(let t of Qs({cwd:e,env:r})){let n=yf(t);for(let o of oc){let s=n[o]?.trim();if(s)return{ok:!0,databaseUrl:s,source:`env-file:${o}`,hint:`${to(s)} (${kf.basename(t)})`}}}return null}function lC(e){let r=process.platform==="win32"?"neon.cmd":"neon",t=["connection-string",e.branch,"--prisma","-o","json","--no-color","--no-analytics"];e.projectId&&t.push("--project-id",e.projectId),e.databaseName&&t.push("--database-name",e.databaseName),e.roleName&&t.push("--role-name",e.roleName),e.pooled&&t.push("--pooled");let n;try{let o=sC(r,t,{encoding:"utf8",env:process.env,timeout:3e4});if(o.status!==0)return null;n=(o.stdout||"").trim()}catch{try{n=oC("neonctl",t,{encoding:"utf8",env:process.env,timeout:3e4}).trim()}catch{return null}}if(!n)return null;try{let o=JSON.parse(n),s=typeof o.connection_uri=="string"&&o.connection_uri||typeof o.connection_string=="string"&&o.connection_string||typeof o.connectionString=="string"&&o.connectionString;if(s)return s}catch{}return/^postgres(ql)?:\/\//i.test(n)?n:null}function cC(e,r){let t=He(e,"KYNVER_NEON_BRANCH")||He(e,"NEON_BRANCH")||"production",n=r({branch:t,projectId:He(e,"KYNVER_NEON_PROJECT_ID")||He(e,"NEON_PROJECT_ID"),databaseName:He(e,"KYNVER_NEON_DATABASE_NAME")||He(e,"NEON_DATABASE_NAME"),roleName:He(e,"KYNVER_NEON_ROLE_NAME")||He(e,"NEON_ROLE_NAME"),pooled:He(e,"KYNVER_NEON_POOLED")==="1"||He(e,"NEON_POOLED")==="1"});return n?{ok:!0,databaseUrl:n,source:"neon-cli",hint:to(n)}:null}function Rf(e={}){let r=e.env??process.env,t=e.cwd??process.cwd(),n=e.neonConnectionString??lC,o=[],s=Qs({cwd:t,env:r}),i=cC(r,n);if(o.push("neon-cli"),i)return i;for(let u of nc)o.push(`env:${u}`);let a=iC(r);if(a)return a;for(let u of oc)o.push(`env-file:${u}`);let l=aC(t,r);return l||{ok:!1,reason:"No production database credentials found. Authenticate Neon CLI (`neon auth`), set KYNVER_NEON_* / NEON_* project hints, or provide PRODUCTION_DATABASE_URL / KYNVER_PRODUCTION_DATABASE_URL (process env, KYNVER_ENV_FILE, ~/.kynver/.env, or selective .env keys in the repo / defaultRepo checkout)."+(s.length>0?` Searched env files: ${s.slice(0,6).join(", ")}${s.length>6?"\u2026":""}.`:""),attempted:o}}function uC(e={}){let r=Rf(e);if(!r.ok)throw new Error(r.reason);return process.env.DATABASE_URL=r.databaseUrl,console.error(`[kynver-cli] database target: ${r.hint} (source: ${r.source})`),r}Ce();L();import{existsSync as r_,mkdirSync as t_}from"node:fs";import n_ from"node:path";L();xt();import{existsSync as JC,readFileSync as qC}from"node:fs";import Af from"node:path";import VC from"node:path";L();xt();G();w();import dC from"node:path";var pC=new Set(["running","dispatching","pending","queued","needs_attention"]),cr=new Set(["completed","failed","cancelled","done"]);function tt(e){let r=Ee(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=_(dC.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),Hr(l)&&(s=!0),l.finalResult&&l.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function no(){let e=[];for(let r of ne()){if(!pC.has(r.status))continue;let t=tt(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,Ue(r),e.push({runId:r.id,from:n,to:t})}return e}L();xt();G();w();Ur();Cn();import{existsSync as xr,lstatSync as CC,readdirSync as _C,readlinkSync as xC,renameSync as gc,rmSync as EC}from"node:fs";import Qe from"node:path";ke();w();import fe from"node:path";var mC=`${fe.sep}runs${fe.sep}runs${fe.sep}`;function Vt(e){return e.includes(mC)}function fC(e,r){if(!Vt(e))return e;let t=te(r),n=pe(t),o=`${fe.sep}runs${fe.sep}runs${fe.sep}`,s=e.indexOf(o);if(s<0)return e;let i=e.slice(s+o.length);return fe.join(n,i)}function sc(e,r){return fe.join(pe(te(e)),R(r))}function ur(e,r,t){return fe.join(sc(e,r),"workers",R(t))}function vf(e,r,t){let n=te(e);return fe.join(n,"runs","runs",R(r),"workers",R(t))}function ic(){return["stdout.jsonl","stderr.log","heartbeat.jsonl","last-status.json","auto-complete.log","worker.json"]}function nt(e){return{workerJsonPath:fe.join(e,"worker.json"),stdoutPath:fe.join(e,"stdout.jsonl"),stderrPath:fe.join(e,"stderr.log"),heartbeatPath:fe.join(e,"heartbeat.jsonl"),lastStatusPath:fe.join(e,"last-status.json")}}function ac(e){let r=nt(ur(e.harnessRoot,e.runId,e.workerName)).workerJsonPath;return e.statusPath&&!Vt(e.statusPath)?e.statusPath:r}import{existsSync as _r,mkdirSync as kC,readdirSync as wf,renameSync as yC,statSync as cc}from"node:fs";import z from"node:path";O();yn();nr();import bf from"node:path";function gC(e){return bf.resolve(Rt(e.trim()))}function lc(e,r,t){let n=e?.trim();return n?{repo:gC(n),source:r,persistedInConfig:t}:null}function Re(e={}){let r=e.env??process.env,t=e.config??v(),n=lc(t.defaultRepo,"config",!0);if(n)return n;let o=lc(r.KYNVER_DEFAULT_REPO,"env_default_repo",!1);if(o)return o;let s=lc(r.KYNVER_HARNESS_REPO,"env_harness_repo",!1);if(s)return s;let i=kr({cwd:e.cwd,runtimeModuleUrl:e.runtimeModuleUrl});return i?{repo:i.repo,source:i.source,persistedInConfig:!1}:null}function ei(e,r){let t={...r??v(),defaultRepo:he(bf.resolve(e))};return Ve(t),t}function hC(e){let r=e?.config??v(),t=Re({...e,config:r});if(!t)return{ok:!1,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)."};if(t.persistedInConfig)return{ok:!0,resolved:t,config:r};let n=ei(t.repo,r);return{ok:!0,resolved:{...t,persistedInConfig:!0,source:"config"},config:n}}function Gt(e){return{defaultRepo:Y(e.repo),source:e.source,persistedInConfig:e.persistedInConfig}}Ur();ke();L();w();var Yt=900*1e3,Cf=3600*1e3;function uc(e,r){let t=z.resolve(e),n=z.resolve(pe(r)),o=z.relative(n,t);return o!==".."&&!o.startsWith("..")&&!z.isAbsolute(o)}function dc(e){if(!_r(e))return[];try{return wf(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function pc(e){let r=z.join(e,"workers");if(!_r(r))return[];try{return wf(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function _f(e){return z.join(e,"archived-workers")}function RC(e,r){let t=z.join(_f(e),R(r));return _r(t)?`${t}-${Date.now()}`:t}function Sf(e,r,t){if(!_r(e))return!1;try{let n=r-cc(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function mc(e,r=Date.now(),t=Yt){if(!_r(e))return!1;let n=nt(e),o=_(n.workerJsonPath,void 0);if(o?.status==="running"&&$(o.pid))return!0;let s=_e(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(Sf(n.stdoutPath,r,t)||Sf(n.heartbeatPath,r,t))}function vC(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-cc(z.join(e,"worker.json")).mtimeMs}catch{return 0}}function bC(e,r,t,n){if(mc(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=vC(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 ot(e,r=Date.now(),t=Yt){for(let n of pc(e))if(mc(z.join(e,"workers",n),r,t))return!0;return!1}function SC(){return{repo:Re()?.repo??"",base:"origin/main",baseCommit:"unknown"}}function wC(e,r){let t=z.join(pe(e),R(r));if(!_r(t))return null;let n=pc(t);if(n.length===0)return null;let o;try{o=cc(t).birthtime.toISOString()}catch{o=new Date().toISOString()}let s={};for(let a of n){let l=ur(e,r,a);s[a]={workerDir:l,statusPath:z.join(l,"worker.json")}}let i=ot(t);return{id:r,name:r,...SC(),status:i?"running":"needs_attention",createdAt:o,workers:s}}function ri(e){let r=te(e??de()),t=pe(r),n=[];for(let o of dc(t)){let s=z.join(t,o,"run.json");if(_r(s)){n.push({runId:o,action:"skipped",reason:"run.json present"});continue}let i=wC(r,o);if(!i){n.push({runId:o,action:"skipped",reason:"no worker dirs on disk"});continue}Ue(i),n.push({runId:o,action:"repaired_run_json",reason:ot(z.join(t,o))?"synthesized run.json while worker artifacts still active":"synthesized run.json from orphan worker metadata dirs"})}return{runs:n}}function ti(e,r={}){let t=te(e??de()),n=pe(t),o=r.now??Date.now(),s=r.archiveAgeMs??Cf,i=[];ri(t);for(let a of dc(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||{}),...pc(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(_f(l),R(m));if(_r(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=bC(p,k,o,s);if(!h.eligible){i.push({runId:u.id,worker:m,action:"skipped",reason:h.reason});continue}let S=RC(l,m);kC(z.dirname(S),{recursive:!0}),yC(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&&Ue(u)}return{workers:i}}function fc(e,r=Date.now()){let t=new Set,n=pe(e);for(let o of dc(n)){let s=z.join(n,o);ot(s,r)&&t.add(`${e}\0${o}`)}return t}L();w();function PC(e,r){let t=sc(e,r),n;try{n=CC(t)}catch{return null}if(!n.isSymbolicLink())return null;let o=Qe.resolve(Qe.dirname(t),xC(t));if(ot(o)||ot(t))return null;let s=`${t}.materialize-${Date.now()}`;return gc(o,s),EC(t),gc(s,t),o}function AC(e){let r=[];for(let t of ic()){let n=Qe.join(e.fromDir,t),o=Qe.join(e.toDir,t);!xr(n)||xr(o)||(gc(n,o),r.push(t))}return r}function xf(e,r){let t=nt(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 IC(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 OC(e){let r=nt(e.canonicalDir),t=_(r.lastStatusPath,void 0),n=xr(r.stdoutPath),o=xr(r.heartbeatPath);if(!(n||o||t!=null))return null;let i=n?Et(r.stdoutPath):{finalResult:null},a=o?_e(r.heartbeatPath):_e(""),l=Mr(a),c=IC({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:Qe.join(oe().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}),xf(u,e.canonicalDir),u}function NC(e,r){let t=!1,n={...e.workers||{}};for(let[o,s]of Object.entries(n)){let i=ur(r,e.id,o),a=Qe.join(i,"worker.json");(Vt(s.workerDir)||Vt(s.statusPath)||s.workerDir!==i||s.statusPath!==a)&&(n[o]={workerDir:i,statusPath:a},t=!0)}return t&&(e.workers=n,Ue(e)),t}function TC(e){let r=[],t=ur(e.harnessRoot,e.run.id,e.workerName),n=vf(e.harnessRoot,e.run.id,e.workerName),o=nt(t),s=AC({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=ac({harnessRoot:e.harnessRoot,runId:e.run.id,workerName:e.workerName,statusPath:e.statusPath}),a=_(i,void 0);if(!a&&xr(o.workerJsonPath)&&(a=_(o.workerJsonPath,void 0)),!a){let l=OC({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=xr(t),u=ic().some(d=>xr(Qe.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:Qe.join(oe().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 xf(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 DC(e,r){let t=Qe.join(x(e.id),"workers");if(!xr(t))return[];let n=new Set(Object.keys(e.workers||{})),o=[];for(let s of _C(t,{withFileTypes:!0}))s.isDirectory()&&(n.has(s.name)||o.push(s.name));return o}function ni(){let{harnessRoot:e}=oe(),r=ri(e),t=[];for(let n of ne()){let o=PC(e,n.id);o&&t.push({runId:n.id,worker:"*",action:"materialized_run_symlink",reason:`replaced symlink with real run dir (was ${o})`}),NC(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 DC(n,e))s.add(i),n.workers={...n.workers||{},[i]:{workerDir:ur(e,n.id,i),statusPath:Qe.join(ur(e,n.id,i),"worker.json")}},Ue(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(...TC({run:n,workerName:i,harnessRoot:e,statusPath:a?.statusPath}))}}return{workers:t,runMetadataRetention:r}}function MC(){let e=ni(),r=e.workers.reduce((n,o)=>(n[o.action]=(n[o.action]??0)+1,n),{}),t=e.runMetadataRetention.runs.reduce((n,o)=>(n[o.action]=(n[o.action]??0)+1,n),{});console.log(JSON.stringify({ok:!0,totals:r,runMetadataRetention:{totals:t,details:e.runMetadataRetention.runs},details:e.workers},null,2))}Ur();qo();G();L();xt();w();import{execFileSync as Ef}from"node:child_process";import Pf from"node:path";function hc(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:null}function UC(e){let r=hc(e)?.match(/\/pull\/(\d+)$/);if(!r)return null;let t=Number.parseInt(r[1],10);return Number.isFinite(t)?t:null}function LC(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return""}}function BC(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 WC(e){let r=null;if(typeof e=="string"?r=Pt(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=hc(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 HC(e){try{let n=Ef("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=Ef("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:hc(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 FC(e){let r=_e(e.heartbeatPath);return e.completionSnapshot?.finalResult??Mr(r)}function $C(e){let r=new Map,t=x(e.id);for(let n of Ee(e)){let o=_(Pf.join(t,"workers",R(n),"worker.json"),void 0);if(o)for(let s of WC(FC(o))){let i=UC(s.prUrl);i!=null&&!r.has(i)&&r.set(i,s)}}return r}function KC(e,r){let t=_e(e.heartbeatPath),n=[e.name,e.repairTargetPrUrl,e.taskPrUrl,e.branch,t.lastHeartbeatSummary,LC(r)].filter(Boolean).join(`
|
|
38
|
+
`);return BC(n)}function jC(e){return e.localOnly===!0&&!e.taskId&&!e.agentOsId}function oi(e={}){let r=e.lookupPr??HC,t=[],n=new Map;for(let o of ne()){let s=$C(o),i=x(o.id);for(let a of Ee(o)){let l=Pf.join(i,"workers",R(a),"worker.json"),c=_(l,void 0);if(!c||!jC(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 KC(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 GC=900*1e3;function YC(){return process.env.KYNVER_NO_STALE_CLEANUP==="1"}function Jt(){let e=ni();if(YC()){let s=oi(),i=ti();return{workers:[],finalizedRuns:no(),metadataReconcile:e,localPrAttentionReconcile:s,terminalWorkerArchive:i}}let r=[],t=Date.now();for(let s of ne())for(let i of Ee(s)){let a=VC.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>GC,m=Number.isFinite(d)&&t-d>It;if(f&&m){hn(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=oi(),o=ti();return{workers:r,finalizedRuns:no(),metadataReconcile:e,localPrAttentionReconcile:n,terminalWorkerArchive:o}}function kc(){let e=Jt(),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))}G();w();function zC(e){if(!e||!JC(e))return 0;try{return qC(e,"utf8").trim().length}catch{return 0}}function XC(e,r){let t=Af.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=zC(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:Hr(o),completionBlocked:a}}function QC(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 ZC(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 e_(e){let r=0;for(let t of Ee(e)){let n=Af.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 si(){return Jt(),ne().map(e=>{let t=Ee(e).map(d=>XC(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}=ZC(t),c=e_(e),u=Ot(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:QC({run:e,workers:t,openWorkerCount:c}),evidence:{missingHeartbeatWorkers:n,missingFinalResultWorkers:o,landingBlockedWorkers:s,completionBlockedWorkers:i,workers:t}}})}function yc(){console.log(JSON.stringify(si(),null,2))}w();function o_(e){let r=typeof e.repo=="string"?e.repo.trim():"";if(r)return r;let t=Re();return t?t.repo:(N("","--repo (or set defaultRepo via `kynver setup` / KYNVER_DEFAULT_REPO)"),"")}function oo(e){let r=El(o_(e));Ju(r);let t=e.id?Kn(String(e.id)):Hu(String(e.name||"run")),n=x(t);r_(n)&&s_(`run already exists: ${t}`),t_(n,{recursive:!0});let o=String(e.base||"origin/main"),s=ue(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:{}};ce(n_.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 Rc(){yc()}function s_(e){console.error(e),process.exit(1)}w();function If(e){let r=e.trim();return r?si().find(n=>n.name===r&&n.status!=="completed")??null:null}function vc(e){let r=String(N(String(e.name||""),"--name")),t=If(r);console.log(JSON.stringify({runId:t?.id??null,name:r,status:t?.status??null,effectiveStatus:t?.effectiveStatus??null},null,2))}Xo();O();import i_ from"node:path";L();G();w();async function qt(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=B(e.baseUrl?String(e.baseUrl):void 0),s=await K(e.secret?String(e.secret):void 0,n,{baseUrl:o}),i=qe({runId:t.id}).runnerId,a=await _m({run:t.id,agentOsId:n,...e},"run_sweep"),l=[];for(let f of Object.keys(t.workers||{})){let m=_(i_.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=vs({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)}}O();yn();ke();ke();import{existsSync as m_,readdirSync as Nf,statSync as f_}from"node:fs";import g_ from"node:path";import{execFileSync as a_}from"node:child_process";import{existsSync as Of,readdirSync as l_,statSync as c_}from"node:fs";import u_ from"node:path";var d_=2500;function p_(e,r=d_){if(!Of(e))return 0;try{let n=a_("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 dr(e,r=5e4){if(!Of(e))return 0;let t=p_(e);if(t!==null)return t;let n=0,o=0,s=[e];for(;s.length>0;){let i=s.pop(),a;try{a=l_(i)}catch{continue}for(let l of a){if(o++>r)return null;let c=u_.join(i,l),u;try{u=c_(c)}catch{continue}u.isDirectory()?s.push(c):n+=u.size}}return n}function bc(e={}){let r=te(e.harnessRoot??de()),t=or(r),n=e.now??Date.now(),o=new Date(n).toISOString();if(!m_(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=Nf(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=g_.join(t,u.name);try{let f=f_(d);l=l===null?f.mtimeMs:Math.min(l,f.mtimeMs)}catch{}try{for(let f of Nf(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=dr(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}}ke();import Oe from"node:path";En();import ci from"node:path";Ce();G();var ii=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function Sc(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of ii)if(r===t||r.startsWith(`${t}/`))return!0;return!1}function Ae(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!Sc(n)})}function st(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 so(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?Ae(e.changedFiles).length>0:!!(st(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}w();function io(e){return e.status||(e.status=T(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function wc(e,r){if(e.status)return Ae(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):kn(e.worktreePath);return Ae(t).length>0}function h_(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function Cc(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=h_(e);if(o&&!$(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):kn(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"}:Wo(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??st(s)};return e.status=u,u}return io(e)}G();G();Ur();w();function _c(e,r=Date.now(),t=Yt){let n=_e(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function ai(e,r=Date.now(),t=Yt){return $(e.pid)?!0:_c(e,r,t)}function k_(e,r){return r?r.runTerminalCache.derive(e.run):tt(e.run)}function pr(e,r=Date.now()){return ai(e.worker,r)}function xc(e,r){return cr.has(e.run.status)?!1:k_(e,r)!==null}function Tf(e,r,t=Date.now()){if(pr(e,t))return!0;if(cr.has(e.run.status)||xc(e,r))return!1;let n=io(e);return Z(n)?!1:!!pr(e,t)}En();G();function Df(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(pr(e))return!0;let n=r??io(e);return!!(!Z(n)||so(n)||Ae(n.changedFiles).length>0||Br({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:st(n.finalResult)}).blocked)}Ce();w();import{existsSync as Uf,mkdirSync as y_,writeFileSync as Mf}from"node:fs";import li from"node:path";function Lf(e,r,t){return li.join(e,"salvage",R(r),R(t))}function Bf(e){return Uf(li.join(Lf(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function Wf(e){let r=Lf(e.harnessRoot,e.indexed.runId,e.indexed.workerName);y_(r,{recursive:!0});let t=li.join(r,"salvage.patch"),n=!1;if(Uf(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(`
|
|
39
|
+
`);a.trim()&&(Mf(t,a.endsWith(`
|
|
32
40
|
`)?a:`${a}
|
|
33
|
-
`),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
|
|
34
|
-
`),o}var SC=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function wC(e){return!SC.has(e.skipReason)||ur(e.indexed,e.now)?!1:af({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})?!0:e.writeSalvageEvidence?(lf({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}),!0):!1}function CC(e){let{indexed:r,includeOrphans:t,worktreesAgeMs:n,terminalWorktreesAgeMs:o}=e;return r?ar.has(r.run.status)||e.liveness&&sc(r,e.liveness)||e.liveness&&Z(nc(r,e.liveness))&&!ur(r)?o:n:t?o:n}function _C(e,r){if(e.harnessRoot?.trim())return zs.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${zs.sep}runs${zs.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function cf(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=CC(e);if(n<=0&&!t&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(ur(r,a))return"active_worker";let c=nc(r,e.liveness),u=_C(e,r),d=p=>u&&wC({indexed:r,harnessRoot:u,skipReason:p,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})?null:p;if(tf(r,c)){let p=d("completion_blocked");if(p)return p}if(tc(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(rf(r,e.liveness,a)||!Z(c))return"run_still_active";if(Jn(c)){let p=d("pr_or_unmerged_commits");if(p)return p}if(Ae(c.changedFiles).length>0){let p=d("dirty_worktree");if(p)return p}if(Ur({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:rt(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 ic(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,diskPressure:i}=e;return!i&&n<t?"below_age_threshold":s.has(zs.resolve(o))||r&&ur(r)?"active_worker":r&&tc(r,e.gitStatusCache)?"dirty_worktree":null}function uf(e){return ic(e)}var zn=216e5,Xn=6048e5,Xs=216e5,Qs=36e5,Zs=120;var df=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function pf(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)df.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||df.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as hf,readdirSync as kf,statSync as EC}from"node:fs";import yf from"node:path";L();ke();import mf from"node:path";w();function PC(e,r){return Js(e,r)}function ff(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=_(mf.join(mn(o,s.id),"workers",R(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=mf.resolve(l.worktreePath);PC(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of Yl(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function gf(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}w();function AC(e,r){try{let t=EC(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function OC(e,r){let t=yf.join(e,"runs",r,"run.json");return hf(t)?_(t,null):null}function Rf(e){try{return kf(e).length===0}catch{return!1}}function vf(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(gf(n,r,t,i.liveRunKeys)||!Rf(n))return"run_still_active";let a=OC(r,t);return a&&!ar.has(a.status)&&!Qr(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function bf(e){if(!hf(e.worktreesDir))return[];let r=[],t;try{t=kf(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=yf.join(e.worktreesDir,o);Rf(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:AC(s,e.now)})}return r}Ce();import{existsSync as lc,rmSync as If}from"node:fs";import{existsSync as DC,rmSync as MC}from"node:fs";ke();import{lstatSync as IC,readdirSync as NC}from"node:fs";function Sf(e){try{let r=IC(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 wf(e,r=32){let t=Sf(e);if(!t)return!1;if(t.foreign)return!0;try{let n=NC(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=Sf(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as TC}from"node:child_process";import xf from"node:path";import Oe from"node:path";function Cf(e,r,t,n){let o=Oe.resolve(e),s=`${Oe.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=Oe.relative(t,i);if(a.startsWith("..")||Oe.isAbsolute(a))return"path_outside_harness";let l=a.split(Oe.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(Oe.resolve(r))?"path_outside_harness":null}function ei(e,r,t){return Cf(e,r,t,"node_modules")}function ri(e,r,t){return Cf(e,r,t,".next")}function ti(e,r,t){let n=Oe.resolve(e),o=Oe.relative(t,n);return o.startsWith("..")||Oe.isAbsolute(o)||o.split(Oe.sep).length<3||!n.startsWith(Oe.resolve(r))?"path_outside_harness":null}function _f(e,r,t){let n=Oe.resolve(e);return ei(n,r,t)===null||ri(n,r,t)===null||ti(n,r,t)===null}function Ef(){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 Pf(e){let r=TC("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function Af(e,r,t){if(!_f(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=Pf(["chown","-R",`${n}:${o}`,xf.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=Pf(["rm","-rf",xf.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 ac="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 UC(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function Of(e,r,t={}){if(!DC(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?nr(n):null,i=e.bytes??cr(e.path)??void 0,a=t.removePath??MC,l=t.hasForeignOwnedEntry??wf;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!UC(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=Ef();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${ac}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let m=Af(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}; ${ac}`}}}function cc(e){let r=e.harnessRoot;return!r||!Kl(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function uc(e,r){let t=cc(e);if(t)return t;let n=Of(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function Nf(e,r){return uc(e,r)}function Tf(e,r){return uc(e,r)}function Df(e,r){return uc(e,r)}function Mf(e,r){let t=cc(e);if(t)return t;if(!lc(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??cr(e.path);return If(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 Uf(e,r){let t=cc(e);if(t)return t;if(!lc(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??cr(e.path);return n&&ue(n,["worktree","remove","--force",e.path],{allowFailure:!0}),lc(e.path)&&If(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 ni,readdirSync as oi,statSync as LC}from"node:fs";import Qe from"node:path";function dc(e,r){try{let t=LC(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function Wf(e,r){let t=Qe.relative(r,e);return t===""||!t.startsWith("..")&&!Qe.isAbsolute(t)}function Lf(e,r,t,n){let o=[];for(let s of Ys){if(s===".next")continue;let i=Qe.join(e,s);if(!ni(i))continue;let a=Qe.resolve(i);t.has(a)||Wf(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:dc(a,r.now)}))}return o}function Hf(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...Lf(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!ni(e.worktreesDir))return r;for(let n of oi(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=Qe.join(e.worktreesDir,n.name);for(let s of oi(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=Qe.join(o,s.name);r.push(...Lf(i,e,t,{runId:n.name,worker:s.name}))}}return r}function Bf(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;ni(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:dc(a,e.now)})))}if(!t||!ni(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(Qe.resolve(i.worktreePath));for(let i of oi(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=Qe.join(e.worktreesDir,i.name),l;try{l=oi(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=Qe.resolve(Qe.join(a,c.name));o.has(u)||s.has(u)||Wf(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:dc(u,e.now)}))}}return n}import{existsSync as Kf,readdirSync as Ff,statSync as WC}from"node:fs";import $t from"node:path";var HC=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function BC(e,r){try{let t=WC(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function FC(e,r){let t=$t.relative(r,e);return t===""||!t.startsWith("..")&&!$t.isAbsolute(t)}function $C(e,r,t,n,o,s){if(!Kf(n))return;let i=$t.resolve(n);r.has(i)||FC(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:BC(i,t.now)}))}function $f(e,r,t,n,o){for(let s of HC)$C(e,r,t,$t.join(n,s.dirName),s.kind,o)}function jf(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||$f(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!Kf(e.worktreesDir))return r;for(let n of Ff(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=$t.join(e.worktreesDir,n.name),s;try{s=Ff(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=$t.join(o,i.name);$f(r,t,e,a,{runId:n.name,worker:i.name})}}return r}Ce();import{existsSync as Vf,statSync as KC}from"node:fs";import Ze from"node:path";function jC(e,r){try{let t=KC(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function VC(e){let r=[],t=null;for(let n of e.split(`
|
|
35
|
-
`)){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
|
|
36
|
-
`).map(c=>c.trim()).filter(c=>c.length>0);if(Ae(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}ke();import{existsSync as
|
|
37
|
-
`).map(t=>t.trim()).filter(Boolean)}var ii=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=rg(t)??[];return this.cache.set(t,o),o}};var ai=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=Qr(r);return this.cache.set(r.id,n),n}};function i_(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function tg(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:i_(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 a_(e={}){let r=e.harnessRoot?te(e.harnessRoot):de(),t=Qf({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function l_(e){return typeof e=="string"?{reason:e}:e}function Kt(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function li(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:cr(e.path,t)}}function ng(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 c_(e,r){return e.kind==="remove_next_cache"?Tf(e,r):Nf(e,r)}function u_(e,r,t){return e.kind==="remove_next_cache"?ri(e.path,r,t):ei(e.path,r,t)}function d_(e){let r=new Map;for(let t of e)for(let[n,o]of Jf(t))r.set(n,o);return r}function og(e,r){return e.runId&&e.worker?Ie.join(r,e.runId,e.worker):Ie.resolve(e.path,"..")}function ci(e={}){let r=pc(e),t=Zf();r=eg(r,t);let n=a_(e);Be("scan",`${n.scanRoots.length} harness root(s)`);let o=ff(n.scanRoots,n.now),s=r.finalizeStaleRuns?Gn().map(b=>({runId:b.runId,from:b.from,to:b.to})):[];s.length>0&&Be("finalize",`${s.length} stale run(s) marked terminal`),Be("index","building worktree index");let i=d_(n.scanRoots);Be("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new ai,gitStatusCache:new ii,gitRevCache:new si},l=[],c=[],u=new Set,d=r.maxActionsPerSweep,f=()=>c.length>=d;for(let b of n.scanRoots){if(f())break;Be("root",b);let E=Ie.join(b,"worktrees"),B=Yf(i,b),M={harnessRoot:b,worktreesDir:E,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:B,now:n.now},se=r.scanDependencyCaches?jf(M):[];Be("dependency",r.scanDependencyCaches?`${se.length} cache candidate(s) at ${b}`:"skipped (worktree-only sweep)");let Fe=0;for(let Se of se){if(f())break;Fe+=1,Fe%50===0&&Be("dependency",`${Fe}/${se.length} evaluated`);let X=Ie.resolve(Se.path);if(u.has(X))continue;u.add(X);let D={...Se,path:X},ie=u_(D,b,E);if(ie){Kt(l,D.path,ie),c.push({...D,executed:!1,skipped:!0,skipReason:ie});continue}let ge=og(D,E),we=B.get(Ie.resolve(ge))??null,ae=ic({indexed:we,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:D.ageMs,worktreePath:ge,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(ae){Kt(l,D.path,ae),c.push({...D,executed:!1,skipped:!0,skipReason:ae});continue}c.push(c_(li(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let Se of Hf(M)){if(f())break;let X=Ie.resolve(Se.path);if(u.has(X))continue;u.add(X);let D={...Se,path:X},ie=ti(D.path,b,E);if(ie){Kt(l,D.path,ie),c.push({...D,executed:!1,skipped:!0,skipReason:ie});continue}let ge=og(D,E),we=B.get(Ie.resolve(ge))??null,ae=uf({indexed:we,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:D.ageMs,worktreePath:ge,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(ae){Kt(l,D.path,ae),c.push({...D,executed:!1,skipped:!0,skipReason:ae});continue}c.push(Df(li(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let be=[...Bf(M),...Gf(M)];Be("worktrees",`${be.length} candidate(s) at ${b}`);let on=new Set,sn=0;for(let Se of be){if(f())break;sn+=1,sn%50===0&&Be("worktrees",`${sn}/${be.length} evaluated`);let X=Ie.resolve(Se.path);if(on.has(X))continue;on.add(X);let D={...Se,path:X},ie=B.get(Ie.resolve(D.path))??null,ge=ie?null:fc({worktreePath:D.path,harnessRoot:b,runId:D.runId,workerName:D.worker,now:n.now}),we=cf({indexed:ie,worktreePath:Ie.resolve(D.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:D.ageMs,orphanSafety:ge,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:b,writeSalvageEvidence:r.execute});if(we){let{reason:ae,detail:bo}=l_(we);Kt(l,D.path,ae,bo),c.push({...D,executed:!1,skipped:!0,skipReason:ae});continue}c.push(Uf(li(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!f()&&r.runDirectoriesAgeMs>=0)for(let Se of bf({harnessRoot:b,worktreesDir:E,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(f())break;let X=Ie.resolve(Se.path);if(u.has(X))continue;u.add(X);let D={...Se,path:X},ie=D.runId??Ie.basename(X),ge=vf({harnessRoot:b,runId:ie,runPath:X,ageMs:D.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(ge){Kt(l,D.path,ge),c.push({...D,executed:!1,skipped:!0,skipReason:ge});continue}c.push(Mf(li(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?ec({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0;Be("complete",`${c.length} action(s), ${S} skipped, ${h} removed`);let H=pf(c,l),P=tg({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:ng(c,l)},...A?{storage:A}:{},...H.length>0?{preservedLivePaths:H}:{},...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:ng(c,l)},...A?{storage:A}:{},...H.length>0?{preservedLivePaths:H}:{},...p>0?{removedRunDirectories:p}:{},compactSummary:P}}function hc(e){let r=qf(e);return ci({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function kc(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}I();import{mkdirSync as Bk,realpathSync as Fk}from"node:fs";import{fileURLToPath as rA}from"node:url";I();w();_a();import p_ from"node:os";function m_(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?rr(String(r)):void 0}async function f_(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 ui(e){let r=m_(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)),ee()||(typeof e.apiKey=="string"?_n(e.apiKey):(await Ca({...e,apiBaseUrl:r})).ok||process.exit(1));let t=ee();t||(console.error("No API key after login \u2014 aborting."),process.exit(1));let n=await f_(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 Jo(o),console.log(""),console.log(` Bootstrap complete \u2014 ${p_.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 DP from"node:os";I();I();De();Ko();import g_ from"node:os";function sg(e,r){console.error(JSON.stringify({event:"daemon_identity",level:e,message:r}))}function ig(e=v(),r=process.env){let t=Te(r,e),n=$o({config:e,totalMemBytes:g_.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)sg("warn",a);for(let a of s)sg("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 h_,readFileSync as k_,renameSync as y_,writeFileSync as R_}from"node:fs";import{homedir as v_}from"node:os";import ag from"node:path";function lg(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return ag.join(v_(),".kynver",`daemon-heartbeat-${r}.json`)}function cg(e){try{let r=lg(e.agentOsId);h_(ag.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}`;R_(n,JSON.stringify(t),"utf8"),y_(n,r)}catch{}}function ug(e){try{let r=k_(lg(e),"utf8"),t=JSON.parse(r);return typeof t?.observedAt!="string"?null:t}catch{return null}}function dg(e,r,t=Date.now()){if(!e)return!1;let n=Date.parse(e.observedAt);return Number.isNaN(n)?!0:t-n>r}function b_(e){let r=process.env[e]?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"}function jt(){process.platform==="win32"&&(b_("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 S_}from"node:fs";import{homedir as w_}from"node:os";import C_ from"node:path";function pg(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 eo(e,r,t=1){let n=Number(process.env[e]);return!Number.isFinite(n)||n<t?r:Math.floor(n)}function _r(){let e=process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim();return e||C_.join(w_(),".kynver","agent-os-cron.json")}function __(e=_r()){let r=process.env.KYNVER_CRON_TICK_STATE_PATH?.trim();return r||`${e.replace(/\.json$/i,"")}.tick-state.json`}function x_(){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 yc(){return process.env.KYNVER_CRON_SECRET?.trim()||process.env.OPENCLAW_CRON_SECRET?.trim()||process.env.KYNVER_RUNTIME_SECRET?.trim()||null}function dr(){let e=_r(),r=__(e),t=x_(),n=yc(),o=!!(t&&n),s=S_(e),i=o&&(s||pg("KYNVER_CRON_TICK_FORCE",!1));return{storePath:e,statePath:r,lockPath:`${r}.lock`,fireBaseUrl:t,secret:n,tickEnabled:pg("KYNVER_CRON_TICK_ENABLED",i),tickIntervalMs:eo("KYNVER_CRON_TICK_INTERVAL_MS",6e4,5e3),missedRunPolicy:process.env.KYNVER_CRON_MISSED_RUN_POLICY?.trim().toLowerCase()==="skip"?"skip":"catch_up",maxCatchUpPerTick:eo("KYNVER_CRON_MAX_CATCH_UP_PER_TICK",3,0),maxRetries:eo("KYNVER_CRON_MAX_RETRIES",3,0),retryBackoffMs:eo("KYNVER_CRON_RETRY_BACKOFF_MS",6e4,1e3),inflightLeaseMs:eo("KYNVER_CRON_INFLIGHT_LEASE_MS",12e4,5e3)}}function di(e=dr()){return e.tickEnabled&&!!(e.fireBaseUrl&&e.secret)}function P_(e){return e.replace(/\/+$/,"")}async function mg(e){let r=e.fetchFn??fetch,t=e.entry.spec.callbackPath.startsWith("/")?e.entry.spec.callbackPath:`/${e.entry.spec.callbackPath}`,n=`${P_(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:or(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 E_,existsSync as Rc,openSync as A_,readFileSync as O_,unlinkSync as fg,writeFileSync as I_}from"node:fs";var N_=10*6e4;function gg(e){if(!Rc(e))return null;try{let r=JSON.parse(O_(e,"utf8"));if(typeof r.pid=="number"&&typeof r.at=="string")return r}catch{return null}return null}function T_(e){let r=gg(e);if(!r||!$(r.pid))return!0;let t=Date.parse(r.at);return Number.isNaN(t)?!0:Date.now()-t>N_}function hg(e){if(Rc(e)&&!T_(e)){let r=gg(e);return{acquired:!1,reason:r?`held by pid ${r.pid}`:"held by another process"}}if(Rc(e))try{fg(e)}catch{}try{let r=A_(e,"wx");return I_(r,JSON.stringify({pid:process.pid,at:new Date().toISOString()}),"utf8"),E_(r),{acquired:!0}}catch(r){if(r.code==="EEXIST")return{acquired:!1,reason:"concurrent acquire"};throw r}}function kg(e){try{fg(e)}catch{}}var D_=/^[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+$/;function M_(e){return D_.test(e.trim())}function U_(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 ro(e,r,t,n){let o=e.trim();return o==="*"?!0:U_(o,t,n).has(r)}function L_(e,r){let t=e.trim().split(/\s+/);if(t.length!==5)return!1;let[n,o,s,i,a]=t;return ro(n,r.getUTCMinutes(),0,59)&&ro(o,r.getUTCHours(),0,23)&&ro(s,r.getUTCDate(),1,31)&&ro(i,r.getUTCMonth()+1,1,12)&&ro(a,r.getUTCDay(),0,6)}var W_=366*24*60;function H_(e){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),0,0))}function yg(e,r){if(!M_(e))return null;let t=H_(r);t=new Date(t.getTime()+6e4);for(let n=0;n<W_;n++){if(L_(e,t))return t;t=new Date(t.getTime()+6e4)}return null}function Rg(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=yg(e.cron.trim(),r);return t?t.toISOString():null}return null}function vc(e,r){if(e.scheduleKind!=="cron"||!e.cron?.trim())return null;let t=yg(e.cron.trim(),r);return t?t.toISOString():null}import{promises as B_}from"node:fs";async function vg(e){try{return await B_.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function F_(e){if(!e)return[];try{let r=JSON.parse(e);return Array.isArray(r.entries)?r.entries:[]}catch{return[]}}async function nt(e=_r()){let r=await vg(e);return F_(r)}async function bg(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 Sg(e,r=_r()){let t=await nt(r),n=t.findIndex(o=>o.providerScheduleId===e.providerScheduleId);n>=0?t[n]=e:t.push(e),await bg(r,t)}async function wg(e=_r()){return await vg(e)!==null?{created:!1}:(await bg(e,[]),{created:!0})}import{randomBytes as $_}from"node:crypto";import{promises as to}from"node:fs";import K_ from"node:path";var pi={version:1,jobs:{}};async function j_(e){try{return await to.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function V_(e){if(!e)return{...pi,jobs:{...pi.jobs}};try{let r=JSON.parse(e);return r?.version!==1||typeof r.jobs!="object"||!r.jobs?{...pi,jobs:{}}:r}catch{return{...pi,jobs:{}}}}async function mi(e){let r=await j_(e);return V_(r)}async function G_(e,r){await to.mkdir(K_.dirname(e),{recursive:!0});let t=$_(6).toString("hex"),n=`${e}.tmp-${process.pid}-${Date.now()}-${t}`;await to.writeFile(n,`${JSON.stringify(r,null,2)}
|
|
38
|
-
`,"utf8");try{await
|
|
39
|
-
`).map(m=>m.trim()).filter(Boolean).slice(0,
|
|
40
|
-
`)){let i=s.match(
|
|
41
|
-
`))!==-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
|
|
42
|
-
`)||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")}:Dx.has(t)?{ok:!0,mutating:!1}:Mx.has(t)?{ok:!0,mutating:!0}:{ok:!1,mutating:!1,reason:`verb not allowlisted: ${t}`}}var Wx=10*6e4,Hx=5e3,th=2e5;async function nh(e,r,t={}){let n=rh(e);if(!n.ok)return{exitCode:null,timedOut:!1,refused:n.reason};let o=t.cliEntry??process.argv[1],s=t.timeoutMs??Wx,i=new qt(r);return new Promise(a=>{let l=0,c=!1,u=Lx(process.execPath,[o,...e],{stdio:["ignore","pipe","pipe"],env:process.env}),d=m=>{if(l>=th)return;let p=m.toString("utf8").slice(0,th-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"),Hx).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 Fx=25e3,$x=32e3,Kx=5e3,jx=6e4,oh=5*6e4,Vx=5e3,Gx="claude-sonnet-4-6";async function Yx(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(),Vx);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 sh(e=process.env){let r=v(),t=r.agentOsId?.trim(),n=ee();if(!t||!n)return null;let o=await Yx(r.apiBaseUrl,n,e);return o?{bridgeUrl:o.replace(/\/$/,""),agentOsId:t,apiKey:n,boxId:Bx.hostname(),model:e.KYNVER_CHAT_MODEL?.trim()||r.defaultModel?.trim()||Gx,useClaudeOauth:r.chatUseClaudeOauth===!0}:null}async function Jx(e,r){let t=new AbortController,n=setTimeout(()=>t.abort(),$x),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:Fx}),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 ot(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 qx(e,r){let t=0,n=Array.isArray(r.payload?.argv)?r.payload.argv:[],o=await nh(n,s=>{ot(e,r.turnId,[{seq:t++,kind:"delta",text:s}])});o.refused?await ot(e,r.turnId,[{seq:t++,kind:"error",error:`command_refused: ${o.refused}`}]).catch(()=>{}):await ot(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 zx(e,r){let t=0,n=!1,o=new AbortController,s=l=>{n||ot(e,r.turnId,[{seq:t++,kind:"delta",text:l}]).then(c=>{c||(n=!0,o.abort())})},i=new qt(s),a=Zg(process.env,{oauthOptIn:e.useClaudeOauth});if(!a){await ot(e,r.turnId,[{seq:0,kind:"error",error:"no_local_credentials"}]).catch(()=>{});return}try{let l=await eh({creds:a,model:e.model,payload:r.payload,onDelta:c=>i.push(c),signal:o.signal});i.close(),n||await ot(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 ot(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 _c(e,r){for(let n=0;n<e&&!r();n+=500)await new Promise(o=>setTimeout(o,Math.min(500,e-n)))}async function ih(e){let r=await sh();for(r||console.error(JSON.stringify({event:"chat_claim_loop_waiting",reason:!ee()||!v().agentOsId?.trim()?"machine_not_linked":"bridge_not_discovered (rollout off, discovery route missing/404, or API unreachable)",rediscoverMs:oh}));!r&&!e.shouldStop();){if(!ee()||!v().agentOsId?.trim()||(await _c(oh,e.shouldStop),e.shouldStop()))return;r=await sh()}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 Jx(r,e.shouldStop);if(t==="auth_error"){console.error(JSON.stringify({event:"chat_claim_auth_error"})),await _c(jx,e.shouldStop);continue}t&&(t.payload?.kind==="command"?await qx(r,t):await zx(r,t))}catch(t){console.error(JSON.stringify({event:"chat_claim_error",error:t instanceof Error?t.message:String(t)})),await _c(Kx,e.shouldStop)}console.error(JSON.stringify({event:"chat_claim_loop_stop"}))}}var Xx=6e4,Qx=5*6e4,Zx=10,eP=250;async function xc(e,r){let t=e;for(;t>0&&!r();){let n=Math.min(eP,t);await mr(n),t-=n}}async function so(e){jt();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)):Xx,s=!1,i=0;process.on("SIGINT",()=>{s=!0}),process.on("SIGTERM",()=>{s=!0});let a=ig(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=dr(),c=ih({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{cg({agentOsId:t,runId:r});let d=await Ea(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 xc(o,()=>s);continue}u&&(u=!1,console.error(JSON.stringify({event:"daemon_runner_credential_recovered",agentOsId:t})));let f=await Cc({run:r,agentOsId:t,execute:n,...e});if(console.error(JSON.stringify({event:"daemon_tick",...f})),l.tickEnabled){let p=fi(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 Vt({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>=Zx?Qx:o;await xc(m,()=>s)}catch(d){console.error(JSON.stringify({event:"daemon_tick_error",error:d.message})),await xc(o,()=>s)}await c,console.error(JSON.stringify({event:"daemon_stop",runId:r,agentOsId:t}))}I();import{spawn as rP}from"node:child_process";w();var tP=15*6e4,ah=2*6e4,lh=1e4,nP=5e3,oP=5*6e4,sP=30*6e4,ch=5e3;function iP(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:tP}function hi(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 aP(e,r=nP,t=oP){let n=Math.min(Math.max(e,1)-1,10);return Math.min(r*2**n,t)}function lP(e,r,t=sP){return r-e>=t}function st(e,r={}){console.error(JSON.stringify({event:`daemon_keeper_${e}`,...r}))}function cP(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 ki(e,r=process.argv.slice(2)){let t=String(N(String(e.agentOsId||v().agentOsId||""),"--agent-os-id")),n=iP(e.stallMs),o=cP(r),s=process.argv[1],i=!1,a=null,l=0,c=u=>{i=!0,st("stop",{signal:u}),a?.pid&&a.kill(u)};for(process.on("SIGINT",()=>c("SIGINT")),process.on("SIGTERM",()=>c("SIGTERM")),st("start",{agentOsId:t,stallMs:n,childArgv:o});!i;){let u=Date.now(),d=!1,f=null,m=null;for(a=rP(process.execPath,[s,...o],{stdio:"inherit",env:process.env}),st("child_spawned",{pid:a.pid??null}),a.on("exit",(k,h)=>{d=!0,f=k,m=h});!d&&!i&&(await mr(ch),!(d||i));){if(Date.now()-u<ah)continue;let k=ug(t),h=k&&k.pid===a.pid?k:null;if(h&&dg(h,n)){st("stall_detected",{pid:a.pid??null,lastBeatAt:h.observedAt,stallMs:n}),a.kill("SIGTERM"),await mr(lh),d||a.kill("SIGKILL");break}if(!h&&Date.now()-u>n+ah){st("no_heartbeat_detected",{pid:a.pid??null,stallMs:n}),a.kill("SIGTERM"),await mr(lh),d||a.kill("SIGKILL");break}}for(;!d&&!i;)await mr(ch);if(i)break;let p=Date.now();lP(u,p)&&(l=0),l+=1;let g=aP(l);st("child_exited",{code:f,signal:m,uptimeMs:p-u,consecutiveFailures:l,respawnInMs:g}),await mr(g)}st("stopped",{agentOsId:t})}L();import{existsSync as vi}from"node:fs";async function yi(e=dr()){let r=await nt(e.storePath).catch(()=>[]),t=await mi(e.statePath).catch(()=>({version:1,jobs:{}})),n=!!(e.fireBaseUrl&&e.secret),o=di(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 fP}from"node:os";import gP from"node:path";import{existsSync as uh,mkdirSync as uP,readFileSync as dh,writeFileSync as dP}from"node:fs";import{homedir as pP}from"node:os";import ph from"node:path";var xr=ph.join(pP(),".kynver",".env");function Pc(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 mP(e,r=`# Managed by kynver cron install \u2014 safe to edit; re-run install to merge keys.
|
|
41
|
+
`),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 Mf(li.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
|
|
42
|
+
`),o}var R_=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function v_(e){return!R_.has(e.skipReason)||pr(e.indexed,e.now)?!1:Bf({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})?!0:e.writeSalvageEvidence?(Wf({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}),!0):!1}function b_(e){let{indexed:r,includeOrphans:t,worktreesAgeMs:n,terminalWorktreesAgeMs:o}=e;return r?cr.has(r.run.status)||e.liveness&&xc(r,e.liveness)||e.liveness&&Z(Cc(r,e.liveness))&&!pr(r)?o:n:t?o:n}function S_(e,r){if(e.harnessRoot?.trim())return ci.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${ci.sep}runs${ci.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function Hf(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=b_(e);if(n<=0&&!t&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(pr(r,a))return"active_worker";let c=Cc(r,e.liveness),u=S_(e,r),d=p=>u&&v_({indexed:r,harnessRoot:u,skipReason:p,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})?null:p;if(Df(r,c)){let p=d("completion_blocked");if(p)return p}if(wc(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(Tf(r,e.liveness,a)||!Z(c))return"run_still_active";if(so(c)){let p=d("pr_or_unmerged_commits");if(p)return p}if(Ae(c.changedFiles).length>0){let p=d("dirty_worktree");if(p)return p}if(Br({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:st(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 Ec(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,diskPressure:i}=e;return!i&&n<t?"below_age_threshold":s.has(ci.resolve(o))||r&&pr(r)?"active_worker":r&&wc(r,e.gitStatusCache)?"dirty_worktree":null}function Ff(e){return Ec(e)}var ao=216e5,lo=6048e5,ui=216e5,di=36e5,pi=120;var $f=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function Kf(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)$f.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||$f.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as Yf,readdirSync as Jf,statSync as __}from"node:fs";import qf from"node:path";L();ke();import jf from"node:path";w();function C_(e,r){return ai(e,r)}function Vf(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of jo(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=_(jf.join(bn(o,s.id),"workers",R(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=jf.resolve(l.worktreePath);C_(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of fc(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function Gf(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}w();function x_(e,r){try{let t=__(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function E_(e,r){let t=qf.join(e,"runs",r,"run.json");return Yf(t)?_(t,null):null}function zf(e){try{return Jf(e).length===0}catch{return!1}}function Xf(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(Gf(n,r,t,i.liveRunKeys)||!zf(n))return"run_still_active";let a=E_(r,t);return a&&!cr.has(a.status)&&!tt(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function Qf(e){if(!Yf(e.worktreesDir))return[];let r=[],t;try{t=Jf(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=qf.join(e.worktreesDir,o);zf(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:x_(s,e.now)})}return r}Ce();import{existsSync as Ac,rmSync as lg}from"node:fs";import{existsSync as O_,rmSync as N_}from"node:fs";ke();import{lstatSync as P_,readdirSync as A_}from"node:fs";function Zf(e){try{let r=P_(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 eg(e,r=32){let t=Zf(e);if(!t)return!1;if(t.foreign)return!0;try{let n=A_(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=Zf(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as I_}from"node:child_process";import ng from"node:path";import Ie from"node:path";function rg(e,r,t,n){let o=Ie.resolve(e),s=`${Ie.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=Ie.relative(t,i);if(a.startsWith("..")||Ie.isAbsolute(a))return"path_outside_harness";let l=a.split(Ie.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(Ie.resolve(r))?"path_outside_harness":null}function mi(e,r,t){return rg(e,r,t,"node_modules")}function fi(e,r,t){return rg(e,r,t,".next")}function gi(e,r,t){let n=Ie.resolve(e),o=Ie.relative(t,n);return o.startsWith("..")||Ie.isAbsolute(o)||o.split(Ie.sep).length<3||!n.startsWith(Ie.resolve(r))?"path_outside_harness":null}function tg(e,r,t){let n=Ie.resolve(e);return mi(n,r,t)===null||fi(n,r,t)===null||gi(n,r,t)===null}function sg(){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 og(e){let r=I_("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function ig(e,r,t){if(!tg(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=og(["chown","-R",`${n}:${o}`,ng.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=og(["rm","-rf",ng.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 Pc="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 T_(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function ag(e,r,t={}){if(!O_(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?or(n):null,i=e.bytes??dr(e.path)??void 0,a=t.removePath??N_,l=t.hasForeignOwnedEntry??eg;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!T_(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=sg();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${Pc}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let m=ig(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}; ${Pc}`}}}function Ic(e){let r=e.harnessRoot;return!r||!uc(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function Oc(e,r){let t=Ic(e);if(t)return t;let n=ag(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function cg(e,r){return Oc(e,r)}function ug(e,r){return Oc(e,r)}function dg(e,r){return Oc(e,r)}function pg(e,r){let t=Ic(e);if(t)return t;if(!Ac(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??dr(e.path);return lg(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 mg(e,r){let t=Ic(e);if(t)return t;if(!Ac(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??dr(e.path);return n&&ue(n,["worktree","remove","--force",e.path],{allowFailure:!0}),Ac(e.path)&&lg(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 hi,readdirSync as ki,statSync as D_}from"node:fs";import Ze from"node:path";function Nc(e,r){try{let t=D_(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function gg(e,r){let t=Ze.relative(r,e);return t===""||!t.startsWith("..")&&!Ze.isAbsolute(t)}function fg(e,r,t,n){let o=[];for(let s of ii){if(s===".next")continue;let i=Ze.join(e,s);if(!hi(i))continue;let a=Ze.resolve(i);t.has(a)||gg(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:Nc(a,r.now)}))}return o}function hg(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...fg(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!hi(e.worktreesDir))return r;for(let n of ki(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=Ze.join(e.worktreesDir,n.name);for(let s of ki(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=Ze.join(o,s.name);r.push(...fg(i,e,t,{runId:n.name,worker:s.name}))}}return r}function kg(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;hi(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:Nc(a,e.now)})))}if(!t||!hi(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(Ze.resolve(i.worktreePath));for(let i of ki(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=Ze.join(e.worktreesDir,i.name),l;try{l=ki(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=Ze.resolve(Ze.join(a,c.name));o.has(u)||s.has(u)||gg(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:Nc(u,e.now)}))}}return n}import{existsSync as vg,readdirSync as yg,statSync as M_}from"node:fs";import zt from"node:path";var U_=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function L_(e,r){try{let t=M_(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function B_(e,r){let t=zt.relative(r,e);return t===""||!t.startsWith("..")&&!zt.isAbsolute(t)}function W_(e,r,t,n,o,s){if(!vg(n))return;let i=zt.resolve(n);r.has(i)||B_(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:L_(i,t.now)}))}function Rg(e,r,t,n,o){for(let s of U_)W_(e,r,t,zt.join(n,s.dirName),s.kind,o)}function bg(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||Rg(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!vg(e.worktreesDir))return r;for(let n of yg(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=zt.join(e.worktreesDir,n.name),s;try{s=yg(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=zt.join(o,i.name);Rg(r,t,e,a,{runId:n.name,worker:i.name})}}return r}Ce();import{existsSync as Sg,statSync as H_}from"node:fs";import er from"node:path";function F_(e,r){try{let t=H_(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function $_(e){let r=[],t=null;for(let n of e.split(`
|
|
43
|
+
`)){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 K_(e,r){let t=er.relative(er.resolve(r),er.resolve(e));return t!==""&&!t.startsWith("..")&&!er.isAbsolute(t)}var j_=200;function wg(e){if(!e.includeOrphans||!Sg(e.worktreesDir))return[];let r=new Set;for(let s of e.index.values())s.run.repo&&r.add(er.resolve(s.run.repo));let t=new Set;for(let s of e.index.values())t.add(er.resolve(s.worktreePath));let n=[],o=new Set;for(let s of r){let i=0,a;try{a=ue(s,["worktree","list","--porcelain"],{allowFailure:!0})}catch{continue}let l=$_(a);for(let c of l){if(i>=j_)break;let u=er.resolve(c.path);if(u===er.resolve(s)||!K_(u,e.worktreesDir)||t.has(u)||o.has(u)||!Sg(u))continue;let f=er.relative(e.worktreesDir,u).split(er.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:F_(u,e.now)})}}return n}L();w();import co from"node:path";function Cg(e,r){let t=co.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?co.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function _g(e){let r=new Map;for(let t of jo(e))for(let n of Object.keys(t.workers||{})){let o=co.join(bn(e,t.id),"workers",R(n),"worker.json"),s=_(o,void 0);s?.worktreePath&&r.set(co.resolve(s.worktreePath),{harnessRoot:e,worktreePath:co.resolve(s.worktreePath),runId:t.id,workerName:n,run:t,worker:s})}return r}function uo(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function it(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?n:r}function Tc(e={}){let r=e.execute===!0||e.execute!==!1&&uo("KYNVER_CLEANUP_EXECUTE"),t=e.finalizeStaleRuns!==!1&&!uo("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??it("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??it("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??it("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??it("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),l=e.maxActionsPerSweep??it("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),c=e.includeOrphans===!0||uo("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=uo("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&&!uo("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),m=it("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),p=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:f&&m>0?m:null,g=it("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 xg(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 Tc({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})}Ce();import{existsSync as Eg}from"node:fs";import Dc from"node:path";w();var V_=1800*1e3;function Mc(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??V_;if(!Eg(e.worktreePath))return null;if(e.runId&&e.workerName){let c=Dc.join(e.harnessRoot,"runs",e.runId,"workers",e.workerName),u=_(Dc.join(c,"worker.json"),void 0);if(u&&_c(u,r,t))return"active_worker"}let n=Dc.join(e.worktreePath,".git");if(!Eg(n))return null;let o=Q(e.worktreePath,["status","--porcelain"]);if(o.status!==0)return"pr_or_unmerged_commits";let s=o.stdout.split(`
|
|
44
|
+
`).map(c=>c.trim()).filter(c=>c.length>0);if(Ae(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}ke();import{existsSync as G_}from"node:fs";import{homedir as Y_}from"node:os";import Pg from"node:path";var J_=["/var/tmp/kynver-harness",Pg.join(Y_(),".openclaw","harness")];function Uc(e,r,t){if(!t?.trim())return;let n=te(t.trim());e.has(n)||(e.add(n),r.push(n))}function q_(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 Ag(e={}){let r=new Set,t=[];Uc(r,t,e.harnessRoot??de());let n=process.env.KYNVER_CLEANUP_EXTRA_ROOTS?.split(",").map(o=>o.trim()).filter(Boolean);for(let o of n??[])Uc(r,t,o);if(q_(e))for(let o of J_){let s=Pg.resolve(o);!r.has(s)&&G_(s)&&Uc(r,t,s)}return t}wt();function z_(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function X_(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Ig(e={}){let r=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",t=X_("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=Me({...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 Og(e,r){if(!r.pressured)return e;let t=e.execute||!z_("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 Fe(e,r){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let t=r?`: ${r}`:"";console.error(`[kynver cleanup] ${e}${t}`)}Ce();var yi=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 Q_}from"node:child_process";import{existsSync as Z_}from"node:fs";import ex from"node:path";var rx=5e3;function tx(e,r){if(!Z_(ex.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=Q_("git",r,{cwd:e,encoding:"utf8",timeout:rx}),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 Ng(e){let r=tx(e,["status","--short"]);return r.error==="not_a_git_repo"?[]:r.error==="git_timeout"||r.status!==0?null:r.stdout.split(`
|
|
45
|
+
`).map(t=>t.trim()).filter(Boolean)}var Ri=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=Ng(t)??[];return this.cache.set(t,o),o}};var vi=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=tt(r);return this.cache.set(r.id,n),n}};function nx(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function Tg(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:nx(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 ox(e={}){let r=e.harnessRoot?te(e.harnessRoot):de(),t=Ag({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function sx(e){return typeof e=="string"?{reason:e}:e}function Xt(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function bi(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:dr(e.path,t)}}function Dg(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 ix(e,r){return e.kind==="remove_next_cache"?ug(e,r):cg(e,r)}function ax(e,r,t){return e.kind==="remove_next_cache"?fi(e.path,r,t):mi(e.path,r,t)}function lx(e){let r=new Map;for(let t of e)for(let[n,o]of _g(t))r.set(n,o);return r}function Mg(e,r){return e.runId&&e.worker?Oe.join(r,e.runId,e.worker):Oe.resolve(e.path,"..")}function Si(e={}){let r=Tc(e),t=Ig();r=Og(r,t);let n=ox(e);Fe("scan",`${n.scanRoots.length} harness root(s)`);let o=Vf(n.scanRoots,n.now),s=r.finalizeStaleRuns?no().map(b=>({runId:b.runId,from:b.from,to:b.to})):[];s.length>0&&Fe("finalize",`${s.length} stale run(s) marked terminal`),Fe("index","building worktree index");let i=lx(n.scanRoots);Fe("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new vi,gitStatusCache:new Ri,gitRevCache:new yi},l=[],c=[],u=new Set,d=r.maxActionsPerSweep,f=()=>c.length>=d;for(let b of n.scanRoots){if(f())break;Fe("root",b);let P=Oe.join(b,"worktrees"),H=Cg(i,b),M={harnessRoot:b,worktreesDir:P,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:H,now:n.now},se=r.scanDependencyCaches?bg(M):[];Fe("dependency",r.scanDependencyCaches?`${se.length} cache candidate(s) at ${b}`:"skipped (worktree-only sweep)");let $e=0;for(let Se of se){if(f())break;$e+=1,$e%50===0&&Fe("dependency",`${$e}/${se.length} evaluated`);let X=Oe.resolve(Se.path);if(u.has(X))continue;u.add(X);let D={...Se,path:X},ie=ax(D,b,P);if(ie){Xt(l,D.path,ie),c.push({...D,executed:!1,skipped:!0,skipReason:ie});continue}let ge=Mg(D,P),we=H.get(Oe.resolve(ge))??null,ae=Ec({indexed:we,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:D.ageMs,worktreePath:ge,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(ae){Xt(l,D.path,ae),c.push({...D,executed:!1,skipped:!0,skipReason:ae});continue}c.push(ix(bi(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let Se of hg(M)){if(f())break;let X=Oe.resolve(Se.path);if(u.has(X))continue;u.add(X);let D={...Se,path:X},ie=gi(D.path,b,P);if(ie){Xt(l,D.path,ie),c.push({...D,executed:!1,skipped:!0,skipReason:ie});continue}let ge=Mg(D,P),we=H.get(Oe.resolve(ge))??null,ae=Ff({indexed:we,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:D.ageMs,worktreePath:ge,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(ae){Xt(l,D.path,ae),c.push({...D,executed:!1,skipped:!0,skipReason:ae});continue}c.push(dg(bi(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let be=[...kg(M),...wg(M)];Fe("worktrees",`${be.length} candidate(s) at ${b}`);let mn=new Set,fn=0;for(let Se of be){if(f())break;fn+=1,fn%50===0&&Fe("worktrees",`${fn}/${be.length} evaluated`);let X=Oe.resolve(Se.path);if(mn.has(X))continue;mn.add(X);let D={...Se,path:X},ie=H.get(Oe.resolve(D.path))??null,ge=ie?null:Mc({worktreePath:D.path,harnessRoot:b,runId:D.runId,workerName:D.worker,now:n.now}),we=Hf({indexed:ie,worktreePath:Oe.resolve(D.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:D.ageMs,orphanSafety:ge,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:b,writeSalvageEvidence:r.execute});if(we){let{reason:ae,detail:No}=sx(we);Xt(l,D.path,ae,No),c.push({...D,executed:!1,skipped:!0,skipReason:ae});continue}c.push(mg(bi(D,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!f()&&r.runDirectoriesAgeMs>=0)for(let Se of Qf({harnessRoot:b,worktreesDir:P,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(f())break;let X=Oe.resolve(Se.path);if(u.has(X))continue;u.add(X);let D={...Se,path:X},ie=D.runId??Oe.basename(X),ge=Xf({harnessRoot:b,runId:ie,runPath:X,ageMs:D.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(ge){Xt(l,D.path,ge),c.push({...D,executed:!1,skipped:!0,skipReason:ge});continue}c.push(pg(bi(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?bc({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0;Fe("complete",`${c.length} action(s), ${S} skipped, ${h} removed`);let W=Kf(c,l),E=Tg({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:Dg(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:Dg(c,l)},...A?{storage:A}:{},...W.length>0?{preservedLivePaths:W}:{},...p>0?{removedRunDirectories:p}:{},compactSummary:E}}function Lc(e){let r=xg(e);return Si({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function Bc(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}O();import{mkdirSync as ky,realpathSync as yy}from"node:fs";import{fileURLToPath as QA}from"node:url";O();w();Ba();import cx from"node:os";function ux(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?tr(String(r)):void 0}async function dx(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 wi(e){let r=ux(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)),ee()||(typeof e.apiKey=="string"?Tn(e.apiKey):(await La({...e,apiBaseUrl:r})).ok||process.exit(1));let t=ee();t||(console.error("No API key after login \u2014 aborting."),process.exit(1));let n=await dx(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 os(o),console.log(""),console.log(` Bootstrap complete \u2014 ${cx.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 OP from"node:os";O();O();De();es();import px from"node:os";function Ug(e,r){console.error(JSON.stringify({event:"daemon_identity",level:e,message:r}))}function Lg(e=v(),r=process.env){let t=Te(r,e),n=Zo({config:e,totalMemBytes:px.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)Ug("warn",a);for(let a of s)Ug("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 mx,readFileSync as fx,renameSync as gx,writeFileSync as hx}from"node:fs";import{homedir as kx}from"node:os";import Bg from"node:path";function Wg(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return Bg.join(kx(),".kynver",`daemon-heartbeat-${r}.json`)}function Hg(e){try{let r=Wg(e.agentOsId);mx(Bg.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}`;hx(n,JSON.stringify(t),"utf8"),gx(n,r)}catch{}}function Fg(e){try{let r=fx(Wg(e),"utf8"),t=JSON.parse(r);return typeof t?.observedAt!="string"?null:t}catch{return null}}function $g(e,r,t=Date.now()){if(!e)return!1;let n=Date.parse(e.observedAt);return Number.isNaN(n)?!0:t-n>r}function yx(e){let r=process.env[e]?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"}function Qt(){process.platform==="win32"&&(yx("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 Rx}from"node:fs";import{homedir as vx}from"node:os";import bx from"node:path";function Kg(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 po(e,r,t=1){let n=Number(process.env[e]);return!Number.isFinite(n)||n<t?r:Math.floor(n)}function Er(){let e=process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim();return e||bx.join(vx(),".kynver","agent-os-cron.json")}function Sx(e=Er()){let r=process.env.KYNVER_CRON_TICK_STATE_PATH?.trim();return r||`${e.replace(/\.json$/i,"")}.tick-state.json`}function wx(){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 Wc(){return process.env.KYNVER_CRON_SECRET?.trim()||process.env.OPENCLAW_CRON_SECRET?.trim()||process.env.KYNVER_RUNTIME_SECRET?.trim()||null}function mr(){let e=Er(),r=Sx(e),t=wx(),n=Wc(),o=!!(t&&n),s=Rx(e),i=o&&(s||Kg("KYNVER_CRON_TICK_FORCE",!1));return{storePath:e,statePath:r,lockPath:`${r}.lock`,fireBaseUrl:t,secret:n,tickEnabled:Kg("KYNVER_CRON_TICK_ENABLED",i),tickIntervalMs:po("KYNVER_CRON_TICK_INTERVAL_MS",6e4,5e3),missedRunPolicy:process.env.KYNVER_CRON_MISSED_RUN_POLICY?.trim().toLowerCase()==="skip"?"skip":"catch_up",maxCatchUpPerTick:po("KYNVER_CRON_MAX_CATCH_UP_PER_TICK",3,0),maxRetries:po("KYNVER_CRON_MAX_RETRIES",3,0),retryBackoffMs:po("KYNVER_CRON_RETRY_BACKOFF_MS",6e4,1e3),inflightLeaseMs:po("KYNVER_CRON_INFLIGHT_LEASE_MS",12e4,5e3)}}function Ci(e=mr()){return e.tickEnabled&&!!(e.fireBaseUrl&&e.secret)}function Cx(e){return e.replace(/\/+$/,"")}async function jg(e){let r=e.fetchFn??fetch,t=e.entry.spec.callbackPath.startsWith("/")?e.entry.spec.callbackPath:`/${e.entry.spec.callbackPath}`,n=`${Cx(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:Le(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 _x,existsSync as Hc,openSync as xx,readFileSync as Ex,unlinkSync as Vg,writeFileSync as Px}from"node:fs";var Ax=10*6e4;function Gg(e){if(!Hc(e))return null;try{let r=JSON.parse(Ex(e,"utf8"));if(typeof r.pid=="number"&&typeof r.at=="string")return r}catch{return null}return null}function Ix(e){let r=Gg(e);if(!r||!$(r.pid))return!0;let t=Date.parse(r.at);return Number.isNaN(t)?!0:Date.now()-t>Ax}function Yg(e){if(Hc(e)&&!Ix(e)){let r=Gg(e);return{acquired:!1,reason:r?`held by pid ${r.pid}`:"held by another process"}}if(Hc(e))try{Vg(e)}catch{}try{let r=xx(e,"wx");return Px(r,JSON.stringify({pid:process.pid,at:new Date().toISOString()}),"utf8"),_x(r),{acquired:!0}}catch(r){if(r.code==="EEXIST")return{acquired:!1,reason:"concurrent acquire"};throw r}}function Jg(e){try{Vg(e)}catch{}}var Ox=/^[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+$/;function Nx(e){return Ox.test(e.trim())}function Tx(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 mo(e,r,t,n){let o=e.trim();return o==="*"?!0:Tx(o,t,n).has(r)}function Dx(e,r){let t=e.trim().split(/\s+/);if(t.length!==5)return!1;let[n,o,s,i,a]=t;return mo(n,r.getUTCMinutes(),0,59)&&mo(o,r.getUTCHours(),0,23)&&mo(s,r.getUTCDate(),1,31)&&mo(i,r.getUTCMonth()+1,1,12)&&mo(a,r.getUTCDay(),0,6)}var Mx=366*24*60;function Ux(e){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),0,0))}function qg(e,r){if(!Nx(e))return null;let t=Ux(r);t=new Date(t.getTime()+6e4);for(let n=0;n<Mx;n++){if(Dx(e,t))return t;t=new Date(t.getTime()+6e4)}return null}function zg(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=qg(e.cron.trim(),r);return t?t.toISOString():null}return null}function Fc(e,r){if(e.scheduleKind!=="cron"||!e.cron?.trim())return null;let t=qg(e.cron.trim(),r);return t?t.toISOString():null}import{promises as Lx}from"node:fs";async function Xg(e){try{return await Lx.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function Bx(e){if(!e)return[];try{let r=JSON.parse(e);return Array.isArray(r.entries)?r.entries:[]}catch{return[]}}async function at(e=Er()){let r=await Xg(e);return Bx(r)}async function Qg(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 Zg(e,r=Er()){let t=await at(r),n=t.findIndex(o=>o.providerScheduleId===e.providerScheduleId);n>=0?t[n]=e:t.push(e),await Qg(r,t)}async function eh(e=Er()){return await Xg(e)!==null?{created:!1}:(await Qg(e,[]),{created:!0})}import{randomBytes as Wx}from"node:crypto";import{promises as fo}from"node:fs";import Hx from"node:path";var _i={version:1,jobs:{}};async function Fx(e){try{return await fo.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function $x(e){if(!e)return{..._i,jobs:{..._i.jobs}};try{let r=JSON.parse(e);return r?.version!==1||typeof r.jobs!="object"||!r.jobs?{..._i,jobs:{}}:r}catch{return{..._i,jobs:{}}}}async function xi(e){let r=await Fx(e);return $x(r)}async function Kx(e,r){await fo.mkdir(Hx.dirname(e),{recursive:!0});let t=Wx(6).toString("hex"),n=`${e}.tmp-${process.pid}-${Date.now()}-${t}`;await fo.writeFile(n,`${JSON.stringify(r,null,2)}
|
|
46
|
+
`,"utf8");try{await fo.rename(n,e)}catch(o){let s=o.code;if(s!=="EPERM"&&s!=="EEXIST"&&s!=="EACCES")throw o;await fo.unlink(n).catch(()=>{})}}async function rh(e,r){await Kx(e,r)}function th(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 jx(e,r){if(!e.inflightUntil)return!1;let t=Date.parse(e.inflightUntil);return!Number.isNaN(t)&&t>r}function Vx(e){return!!e.completedAt}function Gx(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 Yx(e,r,t){if(r.nextFireAt)return r.nextFireAt;let n=zg(e.spec,t);return r.nextFireAt=n,n}function Jx(e,r,t,n){if(e.paused||Vx(r)||jx(r,t)||!Gx(r,n,t))return!1;let o=r.nextFireAt?Date.parse(r.nextFireAt):NaN;return Number.isNaN(o)?!1:t>=o}function qx(e,r,t){e.spec.scheduleKind==="cron"&&(r.nextFireAt=Fc(e.spec,t))}async function Zt(e={}){let r=e.env??mr(),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=Yg(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 at(r.storePath),i=e.agentOsIdFilter?s.filter(m=>m.spec.target.agentOsId===e.agentOsIdFilter):s,a=await xi(r.statePath),l=[];for(let m of i){let p=th(a,m.providerScheduleId);Yx(m,p,t),Jx(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=Fc(m.spec,t),d++;continue}}if(f<=0){d++;continue}p.inflightUntil=new Date(n+r.inflightLeaseMs).toISOString(),p.lastAttemptAt=t.toISOString(),qx(m,p,t);try{let g=await jg({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 rh(r.statePath,a),{enabled:!0,scanned:i.length,due:l.length,fired:c,skippedJobs:d,errors:u}}finally{Jg(r.lockPath)}}w();L();import nh from"node:path";var oh="mesh-cron-lease.json";function Ei(e){return _(nh.join(x(e),oh),null)}function sh(e,r){ce(nh.join(x(e),oh),{...r,updatedAt:new Date().toISOString()})}function ih(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 hE from"node:path";O();var zx=1;function en(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 Xx(e){let{maxStarts:r,...t}=e;return t}async function $c(e,r){if(r<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let t=Xx(e);if(t.targetTaskId||t.targetTaskIds){let u=await Cr({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:en(u)}}let n=Math.min(r,zx),o=Math.max(0,r-n),s=await Cr({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=en(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await Cr({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=en(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function ah(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 Qx(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function go(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function lh(e,r){let t=Qx(r),n=go(t?.recommendedMaxStarts),o=go(t?.actionableReady),s=go(t?.queuedTasks),i=go(t?.boardAdvancedThisTick)??0,a=go(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}}Nn();L();_n();G();w();G();L();w();import Zx from"node:path";O();async function ch(e){let r=B(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 uh(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=_(Zx.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 ch({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();De();function eE(e=process.env){let r=v();return je(r,e)!=="forge"}function dh(e,r=process.env){if(eE(r))return e?.maxConcurrentWorkers??void 0}async function ph(e,r){let t=B(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 ss(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();De();import{spawnSync as rE}from"node:child_process";var tE=1e4,nE=4*1024*1024,mh=(e,r,t)=>{try{let n=rE(e,r,{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t?.timeoutMs??tE,maxBuffer:nE});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 rn(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 fh(e,r,t){return`${e} ${r} ${t}`}function ho(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 gh(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 oE=8e3,sE=30,iE=100,aE=400;function Kc(e){return process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()?!0:e("gh",["auth","token"]).ok}function tn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function lE(e){return Array.isArray(e)?e.map(r=>tn(r)).filter(r=>r!==null).slice(0,sE).map(r=>({context:r.context??null,state:r.state??null,target_url:r.target_url??null,description:r.description??null})):[]}function hh(e,r,t){let n=rn(e,"gh",["api",`repos/${r}/commits/${t}/status`]);return n?{state:n.state??null,statuses:lE(n.statuses)}:null}var kh={provider:"github",kind:"pr_snapshot",version:"1",isAvailable:Kc,collect(e,r){let t=gh(e);if(!t)return null;let n=rn(r,"gh",["api",`repos/${t.repo}/pulls/${t.number}`]);if(!n)return null;let o=tn(n.head),s=typeof o?.sha=="string"?o.sha:null,i=tn(n.user),a=tn(tn(o?.repo)?.owner),l=typeof n.body=="string"?n.body.slice(0,oE):null,c=[],u={state:null,statuses:[]};if(s){let m=rn(r,"gh",["api",`repos/${t.repo}/commits/${s}/check-runs?per_page=100`]);Array.isArray(m?.check_runs)&&(c=m.check_runs.map(p=>tn(p)).filter(p=>p!==null).slice(0,iE).map(p=>({name:p.name??null,status:p.status??null,conclusion:p.conclusion??null}))),u=hh(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(`
|
|
47
|
+
`).map(m=>m.trim()).filter(Boolean).slice(0,aE):[];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}}},yh={provider:"github",kind:"commit_status",version:"1",isAvailable:Kc,collect(e,r){let t=ho(e);return t?hh(r,t.repo,t.sha):null}},Rh={provider:"github",kind:"branch_reachability",version:"1",isAvailable:Kc,collect(e,r){let t=ho(e);if(!t)return null;let n=rn(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=rn(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 cE=5,uE=/\b(READY|ERROR|BUILDING|QUEUED|CANCELED|INITIALIZING)\b/i,dE=/https:\/\/[^\s]+/,vh={provider:"vercel",kind:"deployment_status",version:"1",isAvailable(e){return e("vercel",["whoami"]).ok},collect(e,r){let t=ho(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(`
|
|
48
|
+
`)){let i=s.match(dE)?.[0];if(!i)continue;let a=s.match(uE)?.[1]?.toUpperCase()??null;if(o.push({url:i,state:a}),o.length>=cE)break}return{found:o.length>0,deployments:o}}};var jc=[];function Pi(e){jc.some(r=>r.provider===e.provider&&r.kind===e.kind)||jc.push(e)}function bh(e,r){return jc.find(t=>t.provider===e&&t.kind===r)??null}function Sh(){Pi(kh),Pi(yh),Pi(Rh),Pi(vh)}var pE=8,mE=25e3;function wh(e,r={}){Sh();let t=r.run??mh,n=r.now??(()=>new Date),o=r.maxSubjects??pE,s=Date.now()+(r.deadlineMs??mE),i=new Set,a=e.filter(m=>{let p=fh(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=bh(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}L();w();import fE from"node:path";var gE="provider-evidence-wanted.json";function Ch(e){return fE.join(x(e),gE)}function _h(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 xh(e){let r=_(Ch(e),null);return _h(r?.wanted)}function Eh(e,r){ce(Ch(e),{savedAt:new Date().toISOString(),wanted:r})}function Ph(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.providerEvidenceWanted;return Array.isArray(r)?_h(r):null}async function kE(e,r){let t=U(e),n=[];for(let o of Object.keys(t.workers||{})){let s=_(hE.join(x(t.id),"workers",R(o),"worker.json"),void 0);if(!s?.taskId||s.localOnly)continue;if(Xr(s)){n.push({worker:o,ok:!0,taskId:s.taskId??null,skipped:!0});continue}let i=T(s);if(!Z(i))continue;let a=Lr({alive:i.alive,finalResult:i.finalResult,changedFiles:i.changedFiles,gitAncestry:i.gitAncestry});if(!s.dispatched&&!i.finalResult&&!a?.salvageable)continue;let l=await Yn({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 yE(e,r,t,n,o){let s=B(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 $o(),c=Bs(r),u=null;try{let g=xh(r);u=g.length>0?wh(g):null}catch{u=null}let d=Ei(r),f=await Rr(a,i,{agentOsId:e,runId:r,ingestHarness:!0,harnessBoardSnapshot:Qr(r),resourceGate:t,boxResourceSnapshot:Qn(t,{harnessRunId:r,boxKind:je(v())}),packageVersions:l,...o?{harnessCleanup:o}:{},runnerPresence:qe({runId:r}),activeHarnessWorkers:c,...d?.leaseToken?{meshCronLeaseToken:d.leaseToken}:{},...u&&u.items.length>0?{providerEvidence:u.items}:{}}),m=Ph(f.response);if(m)try{Eh(r,m)}catch{}let p=ih(f);if(p)try{sh(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 Vc(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";Wt({run:r});let o=await ph(t,e),s=dh(o),i=Fr({runId:r,configuredMaxWorkersOverride:s}),a=Bc()?Lc(r):void 0,l=await yE(t,r,i,e,a),c=pm(r,l),u=await bs(r,e),d=await kE(r,e),f=Fr({runId:r,configuredMaxWorkersOverride:s}),m=Jt(),p=await uh(r,e),g=lh(f,l),k=g.maxStarts,h=await qt({run:r,agentOsId:t,pipeline:!0,...e}),S=null,A=0,W=ah(l),E=k;if(n&&E>0&&W.length>0){let P=Math.min(E,W.length),H=await $c({...e,run:r,agentOsId:t,targetTaskIds:W.join(",")},P),M=en(H);A+=M,E=Math.max(0,E-M),S={exactTargetTaskIds:W,exact:H,startedCount:A}}if(n&&E>0){let P=await $c({...e,run:r,agentOsId:t},E),H=en(P);A+=H,S=S&&typeof S=="object"?{...S,broad:P,startedCount:A}:P}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 b=!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:b}}O();import LE from"node:os";import{readFileSync as RE}from"node:fs";import{homedir as vE,platform as bE}from"node:os";import SE from"node:path";import{execFileSync as wE}from"node:child_process";function Ah(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 CE(){if(bE()==="darwin")try{let e=wE("security",["find-generic-password","-s","Claude Code-credentials","-w"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]});return Ah(e.trim())}catch{return null}try{let e=RE(SE.join(vE(),".claude",".credentials.json"),"utf8");return Ah(e)}catch{return null}}function Ih(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=CE();if(s)return{kind:"oauth",token:s}}return null}var _E="You are Claude Code, Anthropic's official CLI for Claude.";function xE(){return{blocks:[],stopReason:null,inputTokens:0,outputTokens:0}}function EE(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 PE(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*AE(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(`
|
|
49
|
+
`))!==-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 IE(e=process.env){return(e.ANTHROPIC_BASE_URL?.trim()||"https://api.anthropic.com").replace(/\/$/,"")}async function Oh(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:_E},{type:"text",text:n.system}]);let i=await fetch(`${IE()}/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=xE();for await(let l of AE(i.body)){let c=EE(a,l);c&&e.onDelta(c)}return PE(a)}var nn=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 DE}from"node:child_process";var OE=new Set(["run list","run status","worker list","worker status","worker tail","status","cron status","monitor status","monitor list"]),NE=new Set(["run create","run dispatch","run sweep","worker start","worker stop","worker complete","cleanup"]),TE=["--secret","--api-key","--keeper-child"];function Nh(e){if(!Array.isArray(e)||e.length===0||e.some(n=>typeof n!="string"))return{ok:!1,mutating:!1,reason:"argv must be a non-empty string array"};for(let n of e){if(TE.some(o=>n===o||n.startsWith(`${o}=`)))return{ok:!1,mutating:!1,reason:`forbidden flag: ${n}`};if(n.includes(`
|
|
50
|
+
`)||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")}:OE.has(t)?{ok:!0,mutating:!1}:NE.has(t)?{ok:!0,mutating:!0}:{ok:!1,mutating:!1,reason:`verb not allowlisted: ${t}`}}var ME=10*6e4,UE=5e3,Th=2e5;async function Dh(e,r,t={}){let n=Nh(e);if(!n.ok)return{exitCode:null,timedOut:!1,refused:n.reason};let o=t.cliEntry??process.argv[1],s=t.timeoutMs??ME,i=new nn(r);return new Promise(a=>{let l=0,c=!1,u=DE(process.execPath,[o,...e],{stdio:["ignore","pipe","pipe"],env:process.env}),d=m=>{if(l>=Th)return;let p=m.toString("utf8").slice(0,Th-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"),UE).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 BE=25e3,WE=32e3,HE=5e3,FE=6e4,Mh=5*6e4,$E=5e3,KE="claude-sonnet-4-6";async function jE(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(),$E);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 Uh(e=process.env){let r=v(),t=r.agentOsId?.trim(),n=ee();if(!t||!n)return null;let o=await jE(r.apiBaseUrl,n,e);return o?{bridgeUrl:o.replace(/\/$/,""),agentOsId:t,apiKey:n,boxId:LE.hostname(),model:e.KYNVER_CHAT_MODEL?.trim()||r.defaultModel?.trim()||KE,useClaudeOauth:r.chatUseClaudeOauth===!0}:null}async function VE(e,r){let t=new AbortController,n=setTimeout(()=>t.abort(),WE),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:BE}),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 lt(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 GE(e,r){let t=0,n=Array.isArray(r.payload?.argv)?r.payload.argv:[],o=await Dh(n,s=>{lt(e,r.turnId,[{seq:t++,kind:"delta",text:s}])});o.refused?await lt(e,r.turnId,[{seq:t++,kind:"error",error:`command_refused: ${o.refused}`}]).catch(()=>{}):await lt(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 YE(e,r){let t=0,n=!1,o=new AbortController,s=l=>{n||lt(e,r.turnId,[{seq:t++,kind:"delta",text:l}]).then(c=>{c||(n=!0,o.abort())})},i=new nn(s),a=Ih(process.env,{oauthOptIn:e.useClaudeOauth});if(!a){await lt(e,r.turnId,[{seq:0,kind:"error",error:"no_local_credentials"}]).catch(()=>{});return}try{let l=await Oh({creds:a,model:e.model,payload:r.payload,onDelta:c=>i.push(c),signal:o.signal});i.close(),n||await lt(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 lt(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 Gc(e,r){for(let n=0;n<e&&!r();n+=500)await new Promise(o=>setTimeout(o,Math.min(500,e-n)))}async function Lh(e){let r=await Uh();for(r||console.error(JSON.stringify({event:"chat_claim_loop_waiting",reason:!ee()||!v().agentOsId?.trim()?"machine_not_linked":"bridge_not_discovered (rollout off, discovery route missing/404, or API unreachable)",rediscoverMs:Mh}));!r&&!e.shouldStop();){if(!ee()||!v().agentOsId?.trim()||(await Gc(Mh,e.shouldStop),e.shouldStop()))return;r=await Uh()}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 VE(r,e.shouldStop);if(t==="auth_error"){console.error(JSON.stringify({event:"chat_claim_auth_error"})),await Gc(FE,e.shouldStop);continue}t&&(t.payload?.kind==="command"?await GE(r,t):await YE(r,t))}catch(t){console.error(JSON.stringify({event:"chat_claim_error",error:t instanceof Error?t.message:String(t)})),await Gc(HE,e.shouldStop)}console.error(JSON.stringify({event:"chat_claim_loop_stop"}))}}var JE=6e4,qE=5*6e4,zE=10,XE=250;async function Yc(e,r){let t=e;for(;t>0&&!r();){let n=Math.min(XE,t);await gr(n),t-=n}}async function ko(e){Qt();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)):JE,s=!1,i=0;process.on("SIGINT",()=>{s=!0}),process.on("SIGTERM",()=>{s=!0});let a=Lg(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=mr(),c=Lh({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{Hg({agentOsId:t,runId:r,instructionBundleVersion:Mt()});let d=await Fa(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 Yc(o,()=>s);continue}u&&(u=!1,console.error(JSON.stringify({event:"daemon_runner_credential_recovered",agentOsId:t}))),await Ql({agentOsId:t,baseUrl:Vd(e.baseUrl?String(e.baseUrl):void 0),secret:d.secret});let f=await Vc({run:r,agentOsId:t,execute:n,...e});if(console.error(JSON.stringify({event:"daemon_tick",...f})),l.tickEnabled){let k=Ei(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 Zt({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(Gr("daemon.maxIdleStreak",zE)),p=Math.floor(Gr("daemon.idleIntervalMs",qE)),g=i>=m?p:o;await Yc(g,()=>s)}catch(d){console.error(JSON.stringify({event:"daemon_tick_error",error:d.message})),await Yc(o,()=>s)}await c,console.error(JSON.stringify({event:"daemon_stop",runId:r,agentOsId:t}))}O();import{spawn as QE}from"node:child_process";w();var ZE=15*6e4,Bh=2*6e4,Wh=1e4,eP=5e3,rP=5*6e4,tP=30*6e4,Hh=5e3;function nP(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:ZE}function Ai(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 oP(e,r=eP,t=rP){let n=Math.min(Math.max(e,1)-1,10);return Math.min(r*2**n,t)}function sP(e,r,t=tP){return r-e>=t}function ct(e,r={}){console.error(JSON.stringify({event:`daemon_keeper_${e}`,...r}))}function iP(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 Ii(e,r=process.argv.slice(2)){let t=String(N(String(e.agentOsId||v().agentOsId||""),"--agent-os-id")),n=nP(e.stallMs),o=iP(r),s=process.argv[1],i=!1,a=null,l=0,c=u=>{i=!0,ct("stop",{signal:u}),a?.pid&&a.kill(u)};for(process.on("SIGINT",()=>c("SIGINT")),process.on("SIGTERM",()=>c("SIGTERM")),ct("start",{agentOsId:t,stallMs:n,childArgv:o});!i;){let u=Date.now(),d=!1,f=null,m=null;for(a=QE(process.execPath,[s,...o],{stdio:"inherit",env:process.env}),ct("child_spawned",{pid:a.pid??null}),a.on("exit",(k,h)=>{d=!0,f=k,m=h});!d&&!i&&(await gr(Hh),!(d||i));){if(Date.now()-u<Bh)continue;let k=Fg(t),h=k&&k.pid===a.pid?k:null;if(h&&$g(h,n)){ct("stall_detected",{pid:a.pid??null,lastBeatAt:h.observedAt,stallMs:n}),a.kill("SIGTERM"),await gr(Wh),d||a.kill("SIGKILL");break}if(!h&&Date.now()-u>n+Bh){ct("no_heartbeat_detected",{pid:a.pid??null,stallMs:n}),a.kill("SIGTERM"),await gr(Wh),d||a.kill("SIGKILL");break}}for(;!d&&!i;)await gr(Hh);if(i)break;let p=Date.now();sP(u,p)&&(l=0),l+=1;let g=oP(l);ct("child_exited",{code:f,signal:m,uptimeMs:p-u,consecutiveFailures:l,respawnInMs:g}),await gr(g)}ct("stopped",{agentOsId:t})}L();import{existsSync as Ti}from"node:fs";async function Oi(e=mr()){let r=await at(e.storePath).catch(()=>[]),t=await xi(e.statePath).catch(()=>({version:1,jobs:{}})),n=!!(e.fireBaseUrl&&e.secret),o=Ci(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 dP}from"node:os";import pP from"node:path";import{existsSync as Fh,mkdirSync as aP,readFileSync as $h,writeFileSync as lP}from"node:fs";import{homedir as cP}from"node:os";import Kh from"node:path";var Pr=Kh.join(cP(),".kynver",".env");function Jc(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 uP(e,r=`# Managed by kynver cron install \u2014 safe to edit; re-run install to merge keys.
|
|
43
51
|
`){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(`
|
|
44
|
-
`)}function
|
|
45
|
-
`)}function Ph(e,r){if(!Xt())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=EP(),n=xh.join(t,Oc),o=AP(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."};_P(t,{recursive:!0});let s=CP(n);xP(n,o,"utf8");let i=_h("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=_h("systemctl",["--user","enable","--now",Oc],{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 ${Oc}`:`Wrote ${n} but enable failed: ${a.stderr||a.stdout}`}}L();function Eh(e,r){if(r?.trim())return r.trim();if(e.defaultDaemonRunId?.trim())return e.defaultDaemonRunId.trim();let t=oe().runsDir;return Ah(t)?ne().sort((o,s)=>Date.parse(s.createdAt)-Date.parse(o.createdAt))[0]?.id??null:null}async function wi(e={}){let r=e.execute!==!1,t=v(),n=rr(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=Sh(),i=fh({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=mh(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=Eh(u,e.runId);d&&(u.defaultDaemonRunId=d),je(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 wg(i.storePath);l.storeInitialized=f.created||Ah(i.storePath);let m=ee();if(m)try{let p=await $r(o,{baseUrl:n,apiKey:m});Fr(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 kh(n,o,m,void 0,{requireProvider:"kynver-cron"}),g=Rh(o,p.requestedCron,p.dedupeKey),k={providerScheduleId:gh(g),spec:g,registeredAt:new Date().toISOString(),paused:!1};await Sg(k,i.storePath),l.watchdog={remoteJobId:p.job.id,provider:p.selectedProvider??p.job.provider,localProviderScheduleId:k.providerScheduleId};let h=await hh(n,o,m),S=vh(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."],H=[];if(S.length)if(e.confirmQstashRemoval){let P=bh(h);if(!P.allowed)a.push(P.reason);else for(let b of S)await yh(n,o,b.id,m),H.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:H,manualSteps:A}}catch(p){l.watchdog={error:p.message},a.push(`watchdog registration failed: ${p.message}`)}if(e.installSystemd){let p=Eh({...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=Ph({envFilePath:i.envFilePath,agentOsId:o,runId:p,kynverBin:bi()},r)}}if(!e.skipTestFire&&a.length===0){let p=await Vt({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 zt({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 OP=["deployment_provider","cron_secret","env_file","cron_store"];function Oh(e){let r=e?.trim().toLowerCase();if(r==="qstash"||r==="kynver-cron"||r==="openclaw-cron")return r;if(r==="openclaw")return"openclaw-cron"}function IP(e){let r=Oh(process.env.KYNVER_SCHEDULER_PROVIDER);if(r==="qstash"||r==="openclaw-cron")return!1;if(r==="kynver-cron")return!0;let t=Oh(e.deploymentSchedulerProvider);return t==="qstash"||t==="openclaw-cron"?!1:t==="kynver-cron"?!0:!!(e.agentOsId?.trim()&&e.apiBaseUrl?.trim())}async function NP(e){if(!IP(e))return{expectsKynverCron:!1,ready:!0,failedChecks:[]};let t=(await zt({config:e})).checks.filter(n=>OP.includes(n.id)&&!n.ok);return{expectsKynverCron:!0,ready:t.length===0,failedChecks:t}}function TP(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 Ic(e){return e===!0||e==="true"||e==="1"||e==="yes"||e==="on"}async function Ih(e){if(Ic(e.args.skipCron))return{action:"skipped"};let r=await NP(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=Ic(e.args.installSystemd)||Ic(e.args["install-systemd"]),n=await wi({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 TP(r.failedChecks))console.log(` ${o}`);return console.log(""),{action:"guided",installOk:!1,blockers:n.blockers}}function MP(e,r){return e.filter(n=>n.repo===r&&!ar.has(n.status)).sort((n,o)=>(o.createdAt??"").localeCompare(n.createdAt??""))[0]?.id??null}async function Nh(e){jt();let r=v();(!ee()||!r.agentOsId?.trim())&&(console.log(" This machine isn't linked yet \u2014 running bootstrap first."),await ui(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&&(je({...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()||Re()?.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=MP(ne(),n)??"",o?console.log(` Reusing run ${o} for ${n}.`):o=Yn({...e,repo:n,name:"agent"}).runId),await Ih({config:r,agentOsId:t,runId:o,args:e}),console.log(""),console.log(` ${DP.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(hi(s)){await ki(s,UP(o,t,e));return}await so(s)}function UP(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}L();L();G();import{existsSync as LP,rmSync as WP}from"node:fs";import Nc from"node:path";function HP(e){let r=e.replace(/\\/g,"/").replace(/^\.\//,"").trim();if(!r||r.startsWith("/")||r.includes(".."))throw new Error(`unsafe path: ${e}`);return r}function BP(e){return typeof e!="string"||!e.trim()?[]:e.split(",").map(r=>r.trim()).filter(Boolean)}function FP(e){let{runId:r,workerName:t}=Le(e),n=ye(r,t),o=[...BP(e.path),...Array.isArray(e.paths)?e.paths:[]];if(o.length===0)return{ok:!1,removed:[],reason:"requires at least one --path"};let s=Nc.resolve(n.worktreePath),i=[];for(let c of o){let u=HP(c),d=Nc.resolve(s,u);if(!d.startsWith(s+Nc.sep)&&d!==s)return{ok:!1,removed:i,reason:`path escapes worktree: ${c}`};if(!LP(d))return{ok:!1,removed:i,reason:`path not found: ${c}`};WP(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 Th(e){let r=FP(e);console.log(JSON.stringify(r,null,2)),r.ok||process.exit(1)}I();import lE from"node:path";No();var $P=/--max-old-space-size=(\d+)/;function KP(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Tc(){return KP(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB,1024)}function Ci(e=process.env){let r={...e};if(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB==="0")return r;let t=r.NODE_OPTIONS??"";if($P.test(t))return r;let o=`--max-old-space-size=${Tc()}`;return r.NODE_OPTIONS=t.trim()?`${t.trim()} ${o}`:o,r}function Qt(e=Tc()){return`--max-old-space-size=${e}`}I();import{spawnSync as jP}from"node:child_process";No();function _i(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Mh(e=v()){let r=process.env.KYNVER_BUILD_MEM_BUDGET_BYTES?_i(process.env.KYNVER_BUILD_MEM_BUDGET_BYTES,1610612736):void 0,t=process.env.KYNVER_BUILD_MEM_RESERVE_BYTES?_i(process.env.KYNVER_BUILD_MEM_RESERVE_BYTES,2147483648):void 0;return{perBuildBudgetBytes:r??_i(e.perWorkerMemBytes,1610612736),reserveBytes:t??_i(e.memReserveBytes,2147483648)}}var xi=0;function Uc(){xi+=1}function Lc(){xi=Math.max(0,xi-1)}function it(e={}){let r={...Mh(),...e},t=e.memAvailableBytes??yt(),n=r.perBuildBudgetBytes+r.reserveBytes,o=t>=n;return{admitted:o,memAvailableBytes:t,requiredBytes:n,activeBuilds:xi,reason:o?null:`insufficient memory: need ${n} bytes available (budget ${r.perBuildBudgetBytes} + reserve ${r.reserveBytes}), have ${t}`}}function VP(e){e<=0||jP(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function Wc(e,r=2e3,t={}){let n=Date.now()+Math.max(0,e),o=it({...t,memAvailableBytes:t.memAvailableBytes?.()});for(;!o.admitted&&Date.now()<n;)VP(Math.min(r,n-Date.now())),o=it({...t,memAvailableBytes:t.memAvailableBytes?.()});return o}import{spawnSync as sE}from"node:child_process";w();import{closeSync as YP,existsSync as Hc,mkdirSync as JP,openSync as qP,readdirSync as Wh,readFileSync as zP,unlinkSync as Bc,writeFileSync as XP}from"node:fs";import Fc from"node:path";import{mkdirSync as GP}from"node:fs";import Uh from"node:path";function Lh(){return Uh.join(Ns(),"heavy-verification")}function ao(){return Uh.join(Lh(),"slots")}function Zt(){let e=ao();return GP(e,{recursive:!0}),e}var rn=120*6e4,Pi=1;function QP(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Ai(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function en(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?QP(e,Pi):Pi}function ZP(e){return`slot-${e}`}function Hh(e,r=ao()){return Fc.join(r,`${e}.json`)}function $c(e){if(!Hc(e))return null;try{let r=JSON.parse(zP(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 Ei(e,r=rn){if(!e||!$(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function eE(e,r){let t=$c(e);if(Ei(t,r))try{Bc(e)}catch{}}function rE(e){return JP(e,{recursive:!0}),e}function co(e={}){let r=rE(e.slotsDir??Zt()),t=e.staleMs??rn,n=0;for(let o of Wh(r)){if(!o.endsWith(".json"))continue;let s=Fc.join(r,o),i=Hc(s);eE(s,t),i&&!Hc(s)&&(n+=1)}return n}function Kc(e={}){let r=e.slotsDir??Zt(),t=e.staleMs??rn;co({slotsDir:r,staleMs:t});let n=[];for(let o of Wh(r)){if(!o.endsWith(".json"))continue;let s=$c(Fc.join(r,o));s&&!Ei(s,t)&&n.push(s)}return n}function lo(e={}){return Kc(e).length}function uo(e,r={}){if(Ai())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:en(),reason:null};let t=r.slotsDir??Zt(),n=r.staleMs??rn,o=r.maxSlots??en();co({slotsDir:t,staleMs:n});for(let i=0;i<o;i+=1){let a=ZP(i),l=Hh(a,t),c=$c(l);if(c&&Ei(c,n))try{Bc(l)}catch{}else if(c&&!Ei(c,n))continue;let u={slotId:a,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let d=qP(l,"wx");XP(d,JSON.stringify(u,null,2),"utf8"),YP(d);let f=lo({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=lo({slotsDir:t,staleMs:n});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:o,reason:`heavy verification at capacity (${s}/${o} slots)`}}function tn(e,r={}){if(!e)return;let t=Hh(e,r.slotsDir??ao());try{Bc(t)}catch{}}function po(e,r={}){if(Ai())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:en(),reason:null};let t=r.slotsDir??Zt(),n=r.staleMs??rn,o=r.maxSlots??en();co({slotsDir:t,staleMs:n});let s=lo({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 tE}from"node:child_process";function nE(e){e<=0||tE(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function mo(e,r,t=2e3,n={}){let o=Date.now()+Math.max(0,r),s=uo(e,n);for(;!s.admitted&&Date.now()<o;)nE(Math.min(t,o-Date.now())),s=uo(e,n);return s}ke();import jc from"node:path";function oE(e){let r=nr(de()),t=jc.relative(r,jc.resolve(e));return t.length>0&&!t.startsWith("..")&&!jc.isAbsolute(t)}function Bh(e){return oE(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 iE(e){let r=[];for(let[t,n]of Object.entries(e))n!==void 0&&r.push(`${t}=${n}`);return r}function Fh(e,r){let t=sE(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 Oi(e){let r=e.waitForAdmissionMs??6e5,t=r>0?mo(e.command,r):aE(e.command);if(!t.admitted)return{ok:!1,exitCode:1,stdout:"",stderr:t.reason??"heavy verification gate denied",admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:Qt(),admission:it(),verificationGate:t,command:e.command};let n=t.slotId,o=r>0?Wc(r):it();if(!o.admitted)return tn(n),{ok:!1,exitCode:1,stdout:"",stderr:o.reason??"build admission denied",admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:Qt(),admission:o,verificationGate:t,command:e.command};let s=Bh(e.cwd);if(!s.ok)return tn(n),{ok:!1,exitCode:1,stdout:"",stderr:s.reason,admitted:!0,wrappedWithSystemd:!1,nodeOptionsFlag:Qt(),admission:o,verificationGate:t,command:e.command};let i=Ci({...process.env,...e.env}),a=Qt(),l=Xt();Uc();try{let c;if(l){let u=Si({cwd:e.cwd,command:["/usr/bin/env",...iE(i),"/bin/bash","-lc",e.command]});c=Fh(u,{cwd:e.cwd,env:i,timeoutMs:e.timeoutMs})}else c=Fh([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{Lc(),tn(n)}}function aE(e){let r=mo(e,0);return r.admitted?r:{...po(e),slotId:null}}var Ii=["npm run typecheck","npm run test"];function fo(e,r=Ii,t={}){let n=[],o=!0;for(let s of r){let i=Oi({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 $h(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 Kh(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($h(String(A)));else typeof i=="string"&&s.push($h(i));let a=W(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:${En(u.workerProvider,xe)}`,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:or(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 cE(e){let r=N(e.worktree?String(e.worktree):void 0,"worktree"),t=lE.resolve(r),n=fo(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 jh(e){let r=N(e.plan?String(e.plan):void 0,"plan");if(e.local===!0||e.local==="true"){cE(e);return}let n=v().agentOsSlug;n||(console.error("requires agentOsSlug in ~/.kynver/config.json for verify (session route)"),process.exit(1));let o=W(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 uE from"node:path";w();function Vh(e){let r=uE.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=fo(r,n.length?n:Ii,{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(`
|
|
46
|
-
`)[0]}`)}process.exit(s.passed?0:1)}
|
|
47
|
-
`)){let o=
|
|
48
|
-
`),diagnostic:re(e)}}function
|
|
52
|
+
`)}function Ni(e=Pr){return Fh(e)?Jc($h(e,"utf8")):new Map}function jh(e,r={}){let t=r.filePath??Pr,n=Fh(t)?$h(t,"utf8"):"",o=Jc(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=Jc(n),l=a.size!==o.size;if(!l){for(let[u,d]of o)if(a.get(u)!==d){l=!0;break}}let c=uP(o);return l&&(aP(Kh.dirname(t),{recursive:!0}),lP(t,c,{mode:384})),{path:t,changed:l,keysWritten:s,keysRemoved:i}}var Ar="watchdog:board-sweep",mP="*/5 * * * *",fP=["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 Vh(e){let r=e.storePath?.trim()||Er(),t=e.envFilePath?.trim()||Pr,n=pP.join(dP(),".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:fP,prerequisites:s,systemdSupported:process.platform==="linux",watchdogSpec:{kind:"watchdog",cron:mP,dedupeKey:Ar,callbackPath:o}}}async function on(e){let r=e.envFilePath??Pr,t=[],n=mr(),o=await Oi(n),s=Ni(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:Ti(r)&&!!s.get("KYNVER_CRON_SECRET"),summary:Ti(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:Ti(n.storePath),summary:Ti(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 at(n.storePath).catch(()=>[])).find(u=>u.spec.dedupeKey===Ar);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();nr();w();import{existsSync as ik}from"node:fs";import{createHash as gP}from"node:crypto";function Gh(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:${gP("sha1").update(r).digest("hex").slice(0,16)}`}async function qc(e,r,t={}){return fetch(e,{...t,headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`,...t.headers}})}async function Yh(e,r,t,n={}){let o=new URLSearchParams(n),s=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/jobs?${o}`,i=await qc(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 Jh(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 qc(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??Ar,requestedCron:c.requestedCron??n??"*/5 * * * *",selectedProvider:c.selectedProvider??c.job.provider??null}}async function qh(e,r,t,n){let o=`${e}/api/agent-os/by-id/${encodeURIComponent(r)}/scheduler/jobs/${encodeURIComponent(t)}/cancel`,s=await qc(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 zh(e,r,t=Ar){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 Xh(e){return e.filter(r=>r.kind==="watchdog"&&r.dedupeKey===Ar&&r.provider==="qstash"&&r.status!=="cancelled")}function hP(e){return e.find(r=>r.kind==="watchdog"&&r.dedupeKey===Ar&&r.provider==="kynver-cron"&&r.status!=="cancelled")}function Qh(e){return hP(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 kP}from"node:crypto";function yP(){return kP(32).toString("base64url")}function Zh(e=Pr){let r=Wc();if(r)return{secret:r,generated:!1,source:"env"};let n=Ni(e).get("KYNVER_CRON_SECRET")?.trim();return n?{secret:n,generated:!1,source:"env-file"}:{secret:yP(),generated:!0,source:"generated"}}import{realpathSync as RP}from"node:fs";function Di(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 RP.native(t)}catch{return t}}function ek(e){return/\s/.test(e)?`"${e.replace(/"/g,'\\"')}"`:e}import{existsSync as bP,mkdirSync as SP,writeFileSync as wP}from"node:fs";import{homedir as CP}from"node:os";import nk from"node:path";import{spawnSync as tk}from"node:child_process";import{spawnSync as vP}from"node:child_process";var zc="1.5G";var yo;function sn(){return process.env.KYNVER_BUILD_SKIP_SYSTEMD==="1"||process.env.KYNVER_BUILD_SKIP_SYSTEMD==="true"?!1:yo!==void 0?yo:process.platform!=="linux"?(yo=!1,!1):(yo=vP("systemd-run",["--version"],{encoding:"utf8",stdio:["ignore","ignore","pipe"]}).status===0,yo)}function Mi(e){let r=e.memoryMax??process.env.KYNVER_BUILD_SYSTEMD_MEMORY_MAX??zc,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 Xc="kynver-cron-daemon.service";function _P(){return nk.join(CP(),".config","systemd","user")}function xP(e){let r=ek(e.kynverBin?.trim()||Di());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(`
|
|
53
|
+
`)}function ok(e,r){if(!sn())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=_P(),n=nk.join(t,Xc),o=xP(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."};SP(t,{recursive:!0});let s=bP(n);wP(n,o,"utf8");let i=tk("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=tk("systemctl",["--user","enable","--now",Xc],{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 ${Xc}`:`Wrote ${n} but enable failed: ${a.stderr||a.stdout}`}}L();function sk(e,r){if(r?.trim())return r.trim();if(e.defaultDaemonRunId?.trim())return e.defaultDaemonRunId.trim();let t=oe().runsDir;return ik(t)?ne().sort((o,s)=>Date.parse(s.createdAt)-Date.parse(o.createdAt))[0]?.id??null:null}async function Ui(e={}){let r=e.execute!==!1,t=v(),n=tr(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=Zh(),i=Vh({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=jh(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=sk(u,e.runId);d&&(u.defaultDaemonRunId=d),Ve(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 eh(i.storePath);l.storeInitialized=f.created||ik(i.storePath);let m=ee();if(m)try{let p=await jr(o,{baseUrl:n,apiKey:m});Kr(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 Jh(n,o,m,void 0,{requireProvider:"kynver-cron"}),g=zh(o,p.requestedCron,p.dedupeKey),k={providerScheduleId:Gh(g),spec:g,registeredAt:new Date().toISOString(),paused:!1};await Zg(k,i.storePath),l.watchdog={remoteJobId:p.job.id,provider:p.selectedProvider??p.job.provider,localProviderScheduleId:k.providerScheduleId};let h=await Yh(n,o,m),S=Xh(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 E=Qh(h);if(!E.allowed)a.push(E.reason);else for(let b of S)await qh(n,o,b.id,m),W.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(E=>({id:E.id,provider:E.provider,status:E.status})),removed:W,manualSteps:A}}catch(p){l.watchdog={error:p.message},a.push(`watchdog registration failed: ${p.message}`)}if(e.installSystemd){let p=sk({...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=ok({envFilePath:i.envFilePath,agentOsId:o,runId:p,kynverBin:Di()},r)}}if(!e.skipTestFire&&a.length===0){let p=await Zt({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 on({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 EP=["deployment_provider","cron_secret","env_file","cron_store"];function ak(e){let r=e?.trim().toLowerCase();if(r==="qstash"||r==="kynver-cron"||r==="openclaw-cron")return r;if(r==="openclaw")return"openclaw-cron"}function PP(e){let r=ak(process.env.KYNVER_SCHEDULER_PROVIDER);if(r==="qstash"||r==="openclaw-cron")return!1;if(r==="kynver-cron")return!0;let t=ak(e.deploymentSchedulerProvider);return t==="qstash"||t==="openclaw-cron"?!1:t==="kynver-cron"?!0:!!(e.agentOsId?.trim()&&e.apiBaseUrl?.trim())}async function AP(e){if(!PP(e))return{expectsKynverCron:!1,ready:!0,failedChecks:[]};let t=(await on({config:e})).checks.filter(n=>EP.includes(n.id)&&!n.ok);return{expectsKynverCron:!0,ready:t.length===0,failedChecks:t}}function IP(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 Qc(e){return e===!0||e==="true"||e==="1"||e==="yes"||e==="on"}async function lk(e){if(Qc(e.args.skipCron))return{action:"skipped"};let r=await AP(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=Qc(e.args.installSystemd)||Qc(e.args["install-systemd"]),n=await Ui({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 IP(r.failedChecks))console.log(` ${o}`);return console.log(""),{action:"guided",installOk:!1,blockers:n.blockers}}function NP(e,r){return e.filter(n=>n.repo===r&&!cr.has(n.status)).sort((n,o)=>(o.createdAt??"").localeCompare(n.createdAt??""))[0]?.id??null}async function ck(e){Qt();let r=v();(!ee()||!r.agentOsId?.trim())&&(console.log(" This machine isn't linked yet \u2014 running bootstrap first."),await wi(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&&(Ve({...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()||Re()?.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=NP(ne(),n)??"",o?console.log(` Reusing run ${o} for ${n}.`):o=oo({...e,repo:n,name:"agent"}).runId),await lk({config:r,agentOsId:t,runId:o,args:e}),console.log(""),console.log(` ${OP.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(Ai(s)){await Ii(s,TP(o,t,e));return}await ko(s)}function TP(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}L();L();G();import{existsSync as DP,rmSync as MP}from"node:fs";import Zc from"node:path";function UP(e){let r=e.replace(/\\/g,"/").replace(/^\.\//,"").trim();if(!r||r.startsWith("/")||r.includes(".."))throw new Error(`unsafe path: ${e}`);return r}function LP(e){return typeof e!="string"||!e.trim()?[]:e.split(",").map(r=>r.trim()).filter(Boolean)}function BP(e){let{runId:r,workerName:t}=Be(e),n=ye(r,t),o=[...LP(e.path),...Array.isArray(e.paths)?e.paths:[]];if(o.length===0)return{ok:!1,removed:[],reason:"requires at least one --path"};let s=Zc.resolve(n.worktreePath),i=[];for(let c of o){let u=UP(c),d=Zc.resolve(s,u);if(!d.startsWith(s+Zc.sep)&&d!==s)return{ok:!1,removed:i,reason:`path escapes worktree: ${c}`};if(!DP(d))return{ok:!1,removed:i,reason:`path not found: ${c}`};MP(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 uk(e){let r=BP(e);console.log(JSON.stringify(r,null,2)),r.ok||process.exit(1)}O();import sA from"node:path";Ko();var WP=/--max-old-space-size=(\d+)/;function HP(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function eu(){return HP(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB,1024)}function Li(e=process.env){let r={...e};if(process.env.KYNVER_NODE_OLD_SPACE_SIZE_MB==="0")return r;let t=r.NODE_OPTIONS??"";if(WP.test(t))return r;let o=`--max-old-space-size=${eu()}`;return r.NODE_OPTIONS=t.trim()?`${t.trim()} ${o}`:o,r}function an(e=eu()){return`--max-old-space-size=${e}`}O();import{spawnSync as FP}from"node:child_process";Ko();function Bi(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function pk(e=v()){let r=process.env.KYNVER_BUILD_MEM_BUDGET_BYTES?Bi(process.env.KYNVER_BUILD_MEM_BUDGET_BYTES,1610612736):void 0,t=process.env.KYNVER_BUILD_MEM_RESERVE_BYTES?Bi(process.env.KYNVER_BUILD_MEM_RESERVE_BYTES,2147483648):void 0;return{perBuildBudgetBytes:r??Bi(e.perWorkerMemBytes,1610612736),reserveBytes:t??Bi(e.memReserveBytes,2147483648)}}var Wi=0;function nu(){Wi+=1}function ou(){Wi=Math.max(0,Wi-1)}function ut(e={}){let r={...pk(),...e},t=e.memAvailableBytes??St(),n=r.perBuildBudgetBytes+r.reserveBytes,o=t>=n;return{admitted:o,memAvailableBytes:t,requiredBytes:n,activeBuilds:Wi,reason:o?null:`insufficient memory: need ${n} bytes available (budget ${r.perBuildBudgetBytes} + reserve ${r.reserveBytes}), have ${t}`}}function $P(e){e<=0||FP(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function su(e,r=2e3,t={}){let n=Date.now()+Math.max(0,e),o=ut({...t,memAvailableBytes:t.memAvailableBytes?.()});for(;!o.admitted&&Date.now()<n;)$P(Math.min(r,n-Date.now())),o=ut({...t,memAvailableBytes:t.memAvailableBytes?.()});return o}import{spawnSync as tA}from"node:child_process";w();import{closeSync as jP,existsSync as iu,mkdirSync as VP,openSync as GP,readdirSync as gk,readFileSync as YP,unlinkSync as au,writeFileSync as JP}from"node:fs";import lu from"node:path";import{mkdirSync as KP}from"node:fs";import mk from"node:path";function fk(){return mk.join(Ks(),"heavy-verification")}function Ro(){return mk.join(fk(),"slots")}function ln(){let e=Ro();return KP(e,{recursive:!0}),e}var un=120*6e4,Hi=1;function qP(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function $i(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function cn(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?qP(e,Hi):Hi}function zP(e){return`slot-${e}`}function hk(e,r=Ro()){return lu.join(r,`${e}.json`)}function cu(e){if(!iu(e))return null;try{let r=JSON.parse(YP(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 Fi(e,r=un){if(!e||!$(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function XP(e,r){let t=cu(e);if(Fi(t,r))try{au(e)}catch{}}function QP(e){return VP(e,{recursive:!0}),e}function bo(e={}){let r=QP(e.slotsDir??ln()),t=e.staleMs??un,n=0;for(let o of gk(r)){if(!o.endsWith(".json"))continue;let s=lu.join(r,o),i=iu(s);XP(s,t),i&&!iu(s)&&(n+=1)}return n}function uu(e={}){let r=e.slotsDir??ln(),t=e.staleMs??un;bo({slotsDir:r,staleMs:t});let n=[];for(let o of gk(r)){if(!o.endsWith(".json"))continue;let s=cu(lu.join(r,o));s&&!Fi(s,t)&&n.push(s)}return n}function vo(e={}){return uu(e).length}function So(e,r={}){if($i())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:cn(),reason:null};let t=r.slotsDir??ln(),n=r.staleMs??un,o=r.maxSlots??cn();bo({slotsDir:t,staleMs:n});for(let i=0;i<o;i+=1){let a=zP(i),l=hk(a,t),c=cu(l);if(c&&Fi(c,n))try{au(l)}catch{}else if(c&&!Fi(c,n))continue;let u={slotId:a,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let d=GP(l,"wx");JP(d,JSON.stringify(u,null,2),"utf8"),jP(d);let f=vo({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=vo({slotsDir:t,staleMs:n});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:o,reason:`heavy verification at capacity (${s}/${o} slots)`}}function dn(e,r={}){if(!e)return;let t=hk(e,r.slotsDir??Ro());try{au(t)}catch{}}function wo(e,r={}){if($i())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:cn(),reason:null};let t=r.slotsDir??ln(),n=r.staleMs??un,o=r.maxSlots??cn();bo({slotsDir:t,staleMs:n});let s=vo({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 ZP}from"node:child_process";function eA(e){e<=0||ZP(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function Co(e,r,t=2e3,n={}){let o=Date.now()+Math.max(0,r),s=So(e,n);for(;!s.admitted&&Date.now()<o;)eA(Math.min(t,o-Date.now())),s=So(e,n);return s}ke();import du from"node:path";function rA(e){let r=or(de()),t=du.relative(r,du.resolve(e));return t.length>0&&!t.startsWith("..")&&!du.isAbsolute(t)}function kk(e){return rA(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 nA(e){let r=[];for(let[t,n]of Object.entries(e))n!==void 0&&r.push(`${t}=${n}`);return r}function yk(e,r){let t=tA(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 Ki(e){let r=e.waitForAdmissionMs??6e5,t=r>0?Co(e.command,r):oA(e.command);if(!t.admitted)return{ok:!1,exitCode:1,stdout:"",stderr:t.reason??"heavy verification gate denied",admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:an(),admission:ut(),verificationGate:t,command:e.command};let n=t.slotId,o=r>0?su(r):ut();if(!o.admitted)return dn(n),{ok:!1,exitCode:1,stdout:"",stderr:o.reason??"build admission denied",admitted:!1,wrappedWithSystemd:!1,nodeOptionsFlag:an(),admission:o,verificationGate:t,command:e.command};let s=kk(e.cwd);if(!s.ok)return dn(n),{ok:!1,exitCode:1,stdout:"",stderr:s.reason,admitted:!0,wrappedWithSystemd:!1,nodeOptionsFlag:an(),admission:o,verificationGate:t,command:e.command};let i=Li({...process.env,...e.env}),a=an(),l=sn();nu();try{let c;if(l){let u=Mi({cwd:e.cwd,command:["/usr/bin/env",...nA(i),"/bin/bash","-lc",e.command]});c=yk(u,{cwd:e.cwd,env:i,timeoutMs:e.timeoutMs})}else c=yk([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{ou(),dn(n)}}function oA(e){let r=Co(e,0);return r.admitted?r:{...wo(e),slotId:null}}var ji=["npm run typecheck","npm run test"];function _o(e,r=ji,t={}){let n=[],o=!0;for(let s of r){let i=Ki({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 Rk(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 vk(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(Rk(String(A)));else typeof i=="string"&&s.push(Rk(i));let a=B(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:${Ln(u.workerProvider,xe)}`,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:Le(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 iA(e){let r=N(e.worktree?String(e.worktree):void 0,"worktree"),t=sA.resolve(r),n=_o(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 bk(e){let r=N(e.plan?String(e.plan):void 0,"plan");if(e.local===!0||e.local==="true"){iA(e);return}let n=v().agentOsSlug;n||(console.error("requires agentOsSlug in ~/.kynver/config.json for verify (session route)"),process.exit(1));let o=B(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 aA from"node:path";w();function Sk(e){let r=aA.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=_o(r,n.length?n:ji,{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(`
|
|
54
|
+
`)[0]}`)}process.exit(s.passed?0:1)}O();import{readFileSync as lA}from"node:fs";w();var cA=["create","add_version","update_metadata"],uA=["approval_guard","auth","network","server","tool_interruption"];function dA(e){let r=e.bodyFile?String(e.bodyFile):void 0;if(r)return{body:lA(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 wk(e){let r=N(e.operation?String(e.operation):void 0,"operation");if(!cA.includes(r))throw new Error(`invalid --operation ${r}`);let t=r,n=v(),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}=dA(e);a&&qn(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:pA(e)},c=await Kt(l);console.log(JSON.stringify(c,null,2)),c.userStatus==="failed and needs action"&&process.exit(1)}function pA(e){let r=e.failureKind?String(e.failureKind):void 0;if(!r)return;if(!uA.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 Ck(){let e=rt();console.log(JSON.stringify({count:e.length,items:e},null,2))}async function _k(e){let r=e.max?Number(e.max):void 0,t=e.id?String(e.id):void 0,n=await Vs({max:r,outboxId:t});console.log(JSON.stringify(n,null,2)),n.failed>0&&process.exit(1)}function xk(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=Si({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 Ek(e){let r=e.trim();if(!r.startsWith("{")&&!r.startsWith("["))return null;try{return JSON.parse(r)}catch{return null}}function re(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 Vi(e){let r=e.trim();if(!r)return null;let t=Ek(r);if(t!==null)return t;for(let n of r.split(`
|
|
55
|
+
`)){let o=Ek(n);if(o!==null)return o}return null}function Gi(e){let r=[];switch(r.push(`Background auto-complete \xB7 ${e.runId} / ${e.worker}`),e.outcome){case"completed":r.push("Outcome: harness completion posted to AgentOS successfully."),r.push("AgentOS task should close or advance to review per completion routing."),r.push("Next: check Command Center \u2014 no manual complete needed unless the board still shows running.");break;case"blocked":r.push(`Outcome: worker finished but completion was blocked${e.httpStatus?` (HTTP ${e.httpStatus})`:""}.`),e.reason&&r.push(`Blocker: ${e.reason}`),r.push("Next: fix the blocker (auth, landing gate, dirty worktree) and replay completion from Command Center.");break;case"timed_out":r.push(`Outcome: monitor gave up waiting \u2014 ${e.reason??"worker did not finish in time"}.`),r.push("Next: inspect the worker process/logs; stop or unblock the worker, then retry auto-complete.");break;case"missing_link":r.push(`Outcome: cannot complete \u2014 ${e.reason??"worker missing agentOsId/taskId"}.`),r.push("Next: re-dispatch with board linkage or run `kynver worker complete` with --agent-os-id.");break;default:r.push(`Outcome: ${e.outcome}`)}return{primary:r.join(`
|
|
56
|
+
`),diagnostic:re(e)}}function pn(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(`
|
|
49
57
|
`),diagnostic:re(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(`
|
|
50
|
-
`),diagnostic:re(e)}}function
|
|
51
|
-
`),diagnostic:re(e)};let l=
|
|
52
|
-
`),diagnostic:re(e)}}function ve(e){return typeof e=="string"&&e.trim()?e.trim():null}function
|
|
53
|
-
`),diagnostic:re(e)}}var
|
|
58
|
+
`),diagnostic:re(e)}}function pu(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:null}function rr(e){return typeof e=="string"&&e.trim()?e.trim():null}function Yi(e){let r=pu(e);if(!r)return{primary:"Harness worker complete finished with no parseable result.",diagnostic:re(e)};let t=rr(r.worker)??"worker",n=rr(r.runId),o=rr(r.status)==="skipped",s=typeof r.httpStatus=="number"?r.httpStatus:null,i=pu(r.response),a=[];if(a.push(`Harness worker complete \xB7 ${t}${n?` (${n})`:""}`),o)return a.push(`Outcome: skipped \u2014 ${rr(r.reason)??"worker not finished yet"}.`),a.push("Next: wait for the worker to exit or post a finalResult, then retry complete."),{primary:a.join(`
|
|
59
|
+
`),diagnostic:re(e)};let l=rr(i?.outcome),c=pu(i?.task),u=rr(c?.status),d=rr(c?.prUrl)??rr(i?.prUrl);if(s&&s>=200&&s<300)a.push("Outcome: completion callback accepted by AgentOS."),l&&a.push(`Routing: ${l.replace(/_/g," ")}`),u&&a.push(`AgentOS task status: ${u}`),d&&a.push(`PR: ${d}`),a.push("Next: check Command Center for review scheduling or blockers.");else{a.push(`Outcome: completion failed${s!=null?` (HTTP ${s})`:""}.`);let f=rr(i?.detail)??rr(i?.error);f&&a.push(`Blocker: ${f}`),a.push("Next: fix the reported blocker and replay completion from the board.")}return{primary:a.join(`
|
|
60
|
+
`),diagnostic:re(e)}}function ve(e){return typeof e=="string"&&e.trim()?e.trim():null}function mu(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:null}function mA(e){let r=mu(e);return r?ve(r.prUrl)??ve(r.pr):null}function xo(e){let r=mu(e);if(!r)return{primary:"Harness worker status unavailable.",diagnostic:re(e)};let t=ve(r.worker)??ve(r.name)??"worker",n=ve(r.runId),o=ve(r.status)??"unknown",s=r.alive===!0,i=mu(r.attention),a=ve(i?.state)??ve(r.attentionState),l=ve(i?.reason)??ve(r.attentionReason),c=ve(r.taskId),u=ve(r.prUrl)??mA(r.finalResult),d=ve(r.branch),f=ve(r.headCommit),m=[];return m.push(`Harness worker ${t}${n?` (${n})`:""}`),m.push(`Process: ${s?"running":"stopped"} \xB7 harness status: ${o}`),a&&m.push(l?`Attention: ${a} \u2014 ${l}`:`Attention: ${a}`),c&&m.push(`AgentOS task: ${c}`),u&&m.push(`PR: ${u}`),d&&m.push(`Branch: ${d}`),f&&m.push(`Commit: ${f.slice(0,12)}`),o==="done"||o==="exited"?m.push(u?"Outcome: worker finished \u2014 open the PR or check Command Center for review routing.":"Outcome: worker finished \u2014 check Command Center for task status and next action."):a==="blocked"||a==="needs_attention"?m.push("Next: resolve the blocker on the board or wait for the monitor to auto-complete when terminal."):s&&m.push("Next: wait for completion or poll again; background monitor will auto-complete when eligible."),{primary:m.join(`
|
|
61
|
+
`),diagnostic:re(e)}}var fA="\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Diagnostic (JSON) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500";function Pk(e){return e.diagnostic?.trim()?`${e.primary}
|
|
54
62
|
|
|
55
|
-
${
|
|
56
|
-
${e.diagnostic}`:e.primary}function
|
|
57
|
-
`).slice(-3).join(" ")}`),r.push("Next: retry on the runner host or inspect harness logs.");let n=
|
|
58
|
-
`),diagnostic:re(n??{stdout:e.stdout,stderr:e.stderr})}}function
|
|
59
|
-
${t.slice(0,800)}`,diagnostic:re({stdout:e.stdout,stderr:e.stderr})}}if(e.scope==="worker"&&e.action==="status")return
|
|
60
|
-
`),diagnostic:re(r)}}if(e.scope==="run"&&e.action==="status"){let t=r.workers;return Array.isArray(t)&&t.length===1?go(t[0]):{primary:`Harness run status \xB7 ${r.runId??"run"} (${Array.isArray(t)?t.length:0} workers).`,diagnostic:re(r)}}return{primary:`Harness ${e.scope} ${e.action} completed successfully on the runner.`,diagnostic:re(r)}}import SE from"node:path";L();G();w();G();w();function Mi(e){let{worker:r,status:t,taskLease:n}=e,o=n?.leaseOwner??null;if(r.dispatched&&n){if(n.status==="running"&&o&&!Qa(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>xt?{health:"stale",reason:`heartbeat older than ${Math.floor(xt/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"}}ke();w();import{existsSync as Zh,mkdirSync as RE,readdirSync as vE,unlinkSync as bE}from"node:fs";import Yc from"node:path";function ek(){let{harnessRoot:e}=Nr(),r=Yc.join(e,"monitors");return RE(r,{recursive:!0}),r}function at(e,r){return r?`${R(e)}--${R(r)}`:R(e)}function Jc(e){return Yc.join(ek(),`${e}.json`)}function lt(e){return _(Jc(e),void 0)}function ct(e){ce(Jc(e.monitorId),e)}function qc(e){let r=Jc(e);return Zh(r)?(bE(r),!0):!1}function rk(){let e=ek();if(!Zh(e))return[];let r=[];for(let t of vE(e)){if(!t.endsWith(".json"))continue;let n=_(Yc.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 ho(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"),gs(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"),Wr(t)&&n.push(t.attention.reason||"landing gate blocked");let o=Z(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 tk(e){let r=new Map,t=e.agentOsId?.trim();if(!t||e.taskIds.length===0)return r;let n=W(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 nk(e,r){return _(SE.join(x(e),"workers",R(r),"worker.json"),void 0)}function ok(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 sk(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=Mi({worker:e,status:n,taskLease:o}),i=ho({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 ut(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=ok(r,t),i=[];for(let p of s){let g=nk(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 tk({agentOsId:a,taskIds:l,baseUrl:e.baseUrl?String(e.baseUrl):void 0,secret:e.secret?String(e.secret):void 0}),u=i.map(p=>sk(p,c)),d;a&&e.renewLeases!==!1&&e.renewLeases!=="false"&&(d=await us(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 qr({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 Ui(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=ok(r,t),o=[];for(let s of n){let i=nk(r,s);i&&o.push(sk(i,new Map))}return{runId:r,workers:o,autoCompleted:[]}}function ko(){return rk()}function zc(e){let r=String(e.run||"");N(r,"--run");let t=at(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(),ct(n),qc(t),{monitorId:t,stopped:!0,pid:n.pid}}async function Li(e){let r=String(e.run||""),t=String(e.name||"");N(r,"--run"),N(t,"--name");let n=ye(r,t),o=U(r),s=T(n,{base:o.base,baseCommit:o.baseCommit}),i=ho({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 qr({...e,run:r,name:t});console.log(JSON.stringify(a,null,2)),a.outcome!=="completed"&&a.outcome!=="blocked"&&(process.exitCode=1)}w();var wE=5e3,CE=360*60*1e3;async function Xc(e){let r=String(e.monitorId||""),t=Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):wE,n=Number(e.maxTotalMs)>0?Math.floor(Number(e.maxTotalMs)):CE,o=Date.now();for(;Date.now()-o<=n;){let s=r?lt(r):void 0;if(s?.stoppedAt)break;let i=await ut({...e,autoComplete:e.autoComplete??!0,renewLeases:e.renewLeases??!0}),a=nn({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(),ct(s));break}Er(t)}}w();ke();import{spawn as _E}from"node:child_process";import{closeSync as ik,existsSync as xE,openSync as PE}from"node:fs";import ak from"node:path";import{fileURLToPath as EE}from"node:url";function AE(){return ak.join(EE(new URL(".",import.meta.url)),"cli.js")}function Wi(e){let r=e.cliPath??AE();if(!xE(r))return;let t=at(e.runId,e.workerName),{harnessRoot:n}=Nr(),o=ak.join(n,"monitors",`${t}.log`),s;try{s=PE(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=_E(i,l,le({detached:!0,stdio:c,env:process.env}));s!==void 0&&ik(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 ct(d),{monitorId:t,pid:u.pid,logPath:o,session:d}}catch{if(s!==void 0)try{ik(s)}catch{}return}}w();async function lk(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=at(r,t),o=lt(n);if(o?.pid&&!o.stoppedAt)return{monitorId:n,session:o,spawned:!1,pid:o.pid};let s=Wi({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 ck(e){if(String(e.run||"")){let t=e.tick===!0||e.tick==="true"?await ut({...e,autoComplete:!1}):Ui(e);console.log(JSON.stringify(t,null,2));return}console.log(JSON.stringify({monitors:ko()},null,2))}function uk(e){console.log(JSON.stringify(zc(e),null,2))}function dk(){console.log(JSON.stringify({monitors:ko()},null,2))}async function pk(e){await Xc(e)}async function mk(e){let r=await ut(e);console.log(JSON.stringify(r,null,2))}L();G();w();I();import OE from"node:path";function yo(e,r,t,n,o,s){return{runId:e,worker:r,taskId:t,agentOsId:n,leaseOwner:o,action:"skipped",reason:s}}async function IE(e){let r=W(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 ne())for(let l of Object.keys(a.workers??{})){let c=OE.join(x(a.id),"workers",R(l),"worker.json"),u=_(c,void 0);if(!u){s.push(yo(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(yo(a.id,l,d,f,m,"not a fully-leased dispatched worker"));continue}if(t&&f!==t)continue;if(u.completionReportedAt){s.push(yo(a.id,l,d,f,m,"completion already reported"));continue}let p=T(u);if(p.finalResult){s.push(yo(a.id,l,d,f,m,"has final result \u2014 let pipeline tick complete it"));continue}if(p.alive){s.push(yo(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 fk(e){let r=await IE(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)}tr();I();import NE from"node:path";import{homedir as TE}from"node:os";var Qc=NE.join(TE(),".kynver","config.json");function Zc(e){let r=v(),t=Re({...e,config:r});if(!t)return{ok:!1,remediated:!1,alreadyPersisted:!1,configPath:Y(Qc),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(Qc),resolved:Wt(t),config:At(r)};let n=Fs(t.repo,r),o=Wt({...t,persistedInConfig:!0,source:"config"});return{ok:!0,remediated:!0,alreadyPersisted:!1,configPath:Y(Qc),resolved:o,config:At(n),remediation:"defaultRepo persisted in ~/.kynver/config.json \u2014 `kynver run create` no longer requires --repo."}}function gk(e=!1){let r=Zc();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 hk(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 wk from"node:path";tr();I();import{accessSync as DE,constants as ME,existsSync as eu,readFileSync as UE}from"node:fs";import{homedir as Hi}from"node:os";import Bi from"node:path";import{spawnSync as LE}from"node:child_process";ke();function kk(e,r){try{let t=LE(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 yk(e){let r=e?.trim();if(r)return r.length<=12?`${r}\u2026`:`${r.slice(0,12)}\u2026`}function WE(e){if(!eu(e))return!1;try{return DE(e,ME.W_OK),!0}catch{return!1}}var Rk={packageVersion:()=>an,commandOnPath:e=>kk(process.platform==="win32"?"where":"which",[e]),kynverVersion:e=>kk(e,["--version"]),loadConfig:()=>v(),configFilePath:()=>Bi.join(Hi(),".kynver","config.json"),credentialsFilePath:()=>Bi.join(Hi(),".kynver","credentials"),readCredentials:()=>{let e=Bi.join(Hi(),".kynver","credentials");if(!eu(e))return{hasApiKey:!1};try{let r=JSON.parse(UE(e,"utf8"));return{hasApiKey:!!r.apiKey?.trim(),runnerTokenPrefix:yk(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:yk(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:di(),qstashTokenPresent:!!process.env.QSTASH_TOKEN?.trim(),kynverHostedDeployment:(()=>{let e=process.env.KYNVER_HOSTED_DEPLOYMENT?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"})()}),harnessRoot:()=>de(),legacyOpenclawHarnessRoot:()=>Bi.join(Hi(),".openclaw","harness"),pathExists:e=>eu(e),pathWritable:e=>WE(e)};function vk(e,r){return e.kynverSchedulerProvider==="openclaw-cron"||r.deploymentSchedulerProvider==="openclaw-cron"}function HE(e,r){return e.kynverSchedulerProvider==="kynver-cron"||r.deploymentSchedulerProvider==="kynver-cron"}function bk(e){return!!e.openclawCronStorePath}function BE(e,r){return e.kynverSchedulerProvider==="qstash"||r.deploymentSchedulerProvider==="qstash"}function Sk(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(BE(e,r)&&!vk(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(HE(e,r)&&!vk(e,r)){if(bk(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(bk(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 FE(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 $E(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 KE(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=Re({config:o}),c=l?Wt(l):null,u=hk(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?he(o.harnessRoot):null}})}return{id:"user_config",label:"User config (~/.kynver)",checks:s}}function jE(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 VE(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 GE(e){let r=e.harnessRoot(),t=wk.join(r,"runs"),n=wk.join(r,"worktrees"),o=he(r),s=he(t),i=he(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 YE(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 JE(e){let r=e.envSnapshot(),t=e.loadConfig(),n=e.readCredentials(),o=e.harnessRoot(),s=e.legacyOpenclawHarnessRoot(),i=he(o),a=he(s),l=r.opusHarnessRoot?he(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},Sk(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 Ck(e=Rk){let r=[$E(e),KE(e),jE(e),VE(e),GE(e),YE(e),JE(e)],t=FE(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 _k(e={}){let r;if(e.remediateDefaultRepo===!0){let n=Zc();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=Ck();r&&(t.notes=[...t.notes??[],r]),console.log(JSON.stringify(t,null,2)),t.ready||(process.exitCode=1)}I();async function xk(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=W(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 qo(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))}tr();var ru=["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"],tu=["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 qE(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 nu(e,r=qE()){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:[...ru],runnerSteps:[...tu]}}function Pk(e){return{...e,deploymentSchedulerProvider:"qstash"}}I();import zE from"node:path";import{homedir as XE}from"node:os";var Ek=zE.join(XE(),".kynver","config.json");function Ak(e=!1){let r=v(),t=nu(r),n={...t,configPath:Y(Ek),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
|
|
61
|
-
`),console.log("Deployment (Vercel):");for(let o of
|
|
62
|
-
User runner:`);for(let o of
|
|
63
|
+
${fA}
|
|
64
|
+
${e.diagnostic}`:e.primary}function gA(e){let r=[`Harness ${e.scope} ${e.action} failed.`];e.timedOut?r.push("Reason: command timed out on the runner host."):e.error?r.push(`Reason: ${e.error}`):e.exitCode!=null&&r.push(`Exit code: ${e.exitCode}`);let t=e.stderr.trim();t&&r.push(`Stderr: ${t.split(`
|
|
65
|
+
`).slice(-3).join(" ")}`),r.push("Next: retry on the runner host or inspect harness logs.");let n=Vi(e.stdout);return{primary:r.join(`
|
|
66
|
+
`),diagnostic:re(n??{stdout:e.stdout,stderr:e.stderr})}}function Ak(e){if(!e.ok)return gA(e);let r=Vi(e.stdout);if(r===null){let t=e.stdout.trim()||e.stderr.trim()||"(no output)";return{primary:`Harness ${e.scope} ${e.action} finished.
|
|
67
|
+
${t.slice(0,800)}`,diagnostic:re({stdout:e.stdout,stderr:e.stderr})}}if(e.scope==="worker"&&e.action==="status")return xo(r);if(e.scope==="worker"&&e.action==="complete")return Yi(r);if(e.scope==="monitor"&&(e.action==="tick"||e.action==="run-loop"))return pn(r);if(e.scope==="monitor"&&e.action==="auto-complete"){let t=r;if(t.outcome&&t.worker&&t.runId)return Gi(r);if(Array.isArray(t.blockers))return{primary:[`Monitor auto-complete blocked \xB7 ${t.runId??"run"} / ${t.worker??"worker"}`,`Blockers: ${t.blockers.join("; ")}`,"Next: resolve blockers on the runner, then retry auto-complete."].join(`
|
|
68
|
+
`),diagnostic:re(r)}}if(e.scope==="run"&&e.action==="status"){let t=r.workers;return Array.isArray(t)&&t.length===1?xo(t[0]):{primary:`Harness run status \xB7 ${r.runId??"run"} (${Array.isArray(t)?t.length:0} workers).`,diagnostic:re(r)}}return{primary:`Harness ${e.scope} ${e.action} completed successfully on the runner.`,diagnostic:re(r)}}import RA from"node:path";L();G();w();G();w();function Ji(e){let{worker:r,status:t,taskLease:n}=e,o=n?.leaseOwner??null;if(r.dispatched&&n){if(n.status==="running"&&o&&!pl(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"}}ke();w();import{existsSync as Ik,mkdirSync as hA,readdirSync as kA,unlinkSync as yA}from"node:fs";import fu from"node:path";function Ok(){let{harnessRoot:e}=Dr(),r=fu.join(e,"monitors");return hA(r,{recursive:!0}),r}function dt(e,r){return r?`${R(e)}--${R(r)}`:R(e)}function gu(e){return fu.join(Ok(),`${e}.json`)}function pt(e){return _(gu(e),void 0)}function mt(e){ce(gu(e.monitorId),e)}function hu(e){let r=gu(e);return Ik(r)?(yA(r),!0):!1}function Nk(){let e=Ok();if(!Ik(e))return[];let r=[];for(let t of kA(e)){if(!t.endsWith(".json"))continue;let n=_(fu.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 Eo(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"),xs(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"),Hr(t)&&n.push(t.attention.reason||"landing gate blocked");let o=Z(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 Tk(e){let r=new Map,t=e.agentOsId?.trim();if(!t||e.taskIds.length===0)return r;let n=B(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 Dk(e,r){return _(RA.join(x(e),"workers",R(r),"worker.json"),void 0)}function Mk(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 Uk(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=Ji({worker:e,status:n,taskLease:o}),i=Eo({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 ft(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=Mk(r,t),i=[];for(let p of s){let g=Dk(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 Tk({agentOsId:a,taskIds:l,baseUrl:e.baseUrl?String(e.baseUrl):void 0,secret:e.secret?String(e.secret):void 0}),u=i.map(p=>Uk(p,c)),d;a&&e.renewLeases!==!1&&e.renewLeases!=="false"&&(d=await bs(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 Zr({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 qi(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=Mk(r,t),o=[];for(let s of n){let i=Dk(r,s);i&&o.push(Uk(i,new Map))}return{runId:r,workers:o,autoCompleted:[]}}function Po(){return Nk()}function ku(e){let r=String(e.run||"");N(r,"--run");let t=dt(r,e.name?String(e.name):void 0),n=pt(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),hu(t),{monitorId:t,stopped:!0,pid:n.pid}}async function zi(e){let r=String(e.run||""),t=String(e.name||"");N(r,"--run"),N(t,"--name");let n=ye(r,t),o=U(r),s=T(n,{base:o.base,baseCommit:o.baseCommit}),i=Eo({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 Zr({...e,run:r,name:t});console.log(JSON.stringify(a,null,2)),a.outcome!=="completed"&&a.outcome!=="blocked"&&(process.exitCode=1)}w();var vA=5e3,bA=360*60*1e3;async function yu(e){let r=String(e.monitorId||""),t=Number(e.pollMs)>0?Math.floor(Number(e.pollMs)):vA,n=Number(e.maxTotalMs)>0?Math.floor(Number(e.maxTotalMs)):bA,o=Date.now();for(;Date.now()-o<=n;){let s=r?pt(r):void 0;if(s?.stoppedAt)break;let i=await ft({...e,autoComplete:e.autoComplete??!0,renewLeases:e.renewLeases??!0}),a=pn({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}Ir(t)}}w();ke();import{spawn as SA}from"node:child_process";import{closeSync as Lk,existsSync as wA,openSync as CA}from"node:fs";import Bk from"node:path";import{fileURLToPath as _A}from"node:url";function xA(){return Bk.join(_A(new URL(".",import.meta.url)),"cli.js")}function Xi(e){let r=e.cliPath??xA();if(!wA(r))return;let t=dt(e.runId,e.workerName),{harnessRoot:n}=Dr(),o=Bk.join(n,"monitors",`${t}.log`),s;try{s=CA(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=SA(i,l,le({detached:!0,stdio:c,env:process.env}));s!==void 0&&Lk(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{Lk(s)}catch{}return}}w();async function Wk(e){let r=String(e.run||"");N(r,"--run");let t=e.name?String(e.name):void 0,n=dt(r,t),o=pt(n);if(o?.pid&&!o.stoppedAt)return{monitorId:n,session:o,spawned:!1,pid:o.pid};let s=Xi({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 Hk(e){if(String(e.run||"")){let t=e.tick===!0||e.tick==="true"?await ft({...e,autoComplete:!1}):qi(e);console.log(JSON.stringify(t,null,2));return}console.log(JSON.stringify({monitors:Po()},null,2))}function Fk(e){console.log(JSON.stringify(ku(e),null,2))}function $k(){console.log(JSON.stringify({monitors:Po()},null,2))}async function Kk(e){await yu(e)}async function jk(e){let r=await ft(e);console.log(JSON.stringify(r,null,2))}L();G();w();O();import EA from"node:path";function Ao(e,r,t,n,o,s){return{runId:e,worker:r,taskId:t,agentOsId:n,leaseOwner:o,action:"skipped",reason:s}}async function PA(e){let r=B(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 ne())for(let l of Object.keys(a.workers??{})){let c=EA.join(x(a.id),"workers",R(l),"worker.json"),u=_(c,void 0);if(!u){s.push(Ao(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(Ao(a.id,l,d,f,m,"not a fully-leased dispatched worker"));continue}if(t&&f!==t)continue;if(u.completionReportedAt){s.push(Ao(a.id,l,d,f,m,"completion already reported"));continue}let p=T(u);if(p.finalResult){s.push(Ao(a.id,l,d,f,m,"has final result \u2014 let pipeline tick complete it"));continue}if(p.alive){s.push(Ao(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 Vk(e){let r=await PA(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)}nr();O();import AA from"node:path";import{homedir as IA}from"node:os";var Ru=AA.join(IA(),".kynver","config.json");function vu(e){let r=v(),t=Re({...e,config:r});if(!t)return{ok:!1,remediated:!1,alreadyPersisted:!1,configPath:Y(Ru),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(Ru),resolved:Gt(t),config:Tt(r)};let n=ei(t.repo,r),o=Gt({...t,persistedInConfig:!0,source:"config"});return{ok:!0,remediated:!0,alreadyPersisted:!1,configPath:Y(Ru),resolved:o,config:Tt(n),remediation:"defaultRepo persisted in ~/.kynver/config.json \u2014 `kynver run create` no longer requires --repo."}}function Gk(e=!1){let r=vu();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 Yk(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 ey from"node:path";nr();O();import{accessSync as OA,constants as NA,existsSync as bu,readFileSync as TA}from"node:fs";import{homedir as Qi}from"node:os";import Zi from"node:path";import{spawnSync as DA}from"node:child_process";ke();function Jk(e,r){try{let t=DA(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 qk(e){let r=e?.trim();if(r)return r.length<=12?`${r}\u2026`:`${r.slice(0,12)}\u2026`}function MA(e){if(!bu(e))return!1;try{return OA(e,NA.W_OK),!0}catch{return!1}}var zk={packageVersion:()=>gn,commandOnPath:e=>Jk(process.platform==="win32"?"where":"which",[e]),kynverVersion:e=>Jk(e,["--version"]),loadConfig:()=>v(),configFilePath:()=>Zi.join(Qi(),".kynver","config.json"),credentialsFilePath:()=>Zi.join(Qi(),".kynver","credentials"),readCredentials:()=>{let e=Zi.join(Qi(),".kynver","credentials");if(!bu(e))return{hasApiKey:!1};try{let r=JSON.parse(TA(e,"utf8"));return{hasApiKey:!!r.apiKey?.trim(),runnerTokenPrefix:qk(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:qk(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:Ci(),qstashTokenPresent:!!process.env.QSTASH_TOKEN?.trim(),kynverHostedDeployment:(()=>{let e=process.env.KYNVER_HOSTED_DEPLOYMENT?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"})()}),harnessRoot:()=>de(),legacyOpenclawHarnessRoot:()=>Zi.join(Qi(),".openclaw","harness"),pathExists:e=>bu(e),pathWritable:e=>MA(e)};function Xk(e,r){return e.kynverSchedulerProvider==="openclaw-cron"||r.deploymentSchedulerProvider==="openclaw-cron"}function UA(e,r){return e.kynverSchedulerProvider==="kynver-cron"||r.deploymentSchedulerProvider==="kynver-cron"}function Qk(e){return!!e.openclawCronStorePath}function LA(e,r){return e.kynverSchedulerProvider==="qstash"||r.deploymentSchedulerProvider==="qstash"}function Zk(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(LA(e,r)&&!Xk(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(UA(e,r)&&!Xk(e,r)){if(Qk(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(Qk(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 BA(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 WA(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 HA(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=Re({config:o}),c=l?Gt(l):null,u=Yk(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?he(o.harnessRoot):null}})}return{id:"user_config",label:"User config (~/.kynver)",checks:s}}function FA(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 $A(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 KA(e){let r=e.harnessRoot(),t=ey.join(r,"runs"),n=ey.join(r,"worktrees"),o=he(r),s=he(t),i=he(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 jA(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 VA(e){let r=e.envSnapshot(),t=e.loadConfig(),n=e.readCredentials(),o=e.harnessRoot(),s=e.legacyOpenclawHarnessRoot(),i=he(o),a=he(s),l=r.opusHarnessRoot?he(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},Zk(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 ry(e=zk){let r=[WA(e),HA(e),FA(e),$A(e),KA(e),jA(e),VA(e)],t=BA(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 ty(e={}){let r;if(e.remediateDefaultRepo===!0){let n=vu();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=ry();r&&(t.notes=[...t.notes??[],r]),console.log(JSON.stringify(t,null,2)),t.ready||(process.exitCode=1)}O();async function ny(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=B(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 ss(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))}nr();var Su=["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"],wu=["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 GA(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 Cu(e,r=GA()){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:[...Su],runnerSteps:[...wu]}}function oy(e){return{...e,deploymentSchedulerProvider:"qstash"}}O();import YA from"node:path";import{homedir as JA}from"node:os";var sy=YA.join(JA(),".kynver","config.json");function iy(e=!1){let r=v(),t=Cu(r),n={...t,configPath:Y(sy),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
|
|
69
|
+
`),console.log("Deployment (Vercel):");for(let o of Su)console.log(` - ${o}`);console.log(`
|
|
70
|
+
User runner:`);for(let o of wu)console.log(` - ${o}`);if(console.log(`
|
|
63
71
|
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(`
|
|
64
72
|
Blockers:`);for(let o of t.blockers)console.log(` ! ${o}`);process.exitCode=1;return}console.log(`
|
|
65
|
-
No local blockers detected on this runner.`)}function
|
|
73
|
+
No local blockers detected on this runner.`)}function ay(e=!1){let r=v(),t=Cu(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=oy(r);Ve(n);let o={ok:!0,attested:!0,configPath:Y(sy),deploymentSchedulerProvider:"qstash",config:Tt(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 ly(e){let r=await Oi();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 cy(e){let r=typeof e.agentOsId=="string"?e.agentOsId:void 0,t=await Zt({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 qA(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 uy(e){let r=e.dryRun===!0||e["dry-run"]===!0,t=await Ui({execute:r?!1:qA(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)
|
|
66
74
|
`:`Kynver Cron install
|
|
67
75
|
`),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(`
|
|
68
76
|
Hosted deployment (manual):`);for(let n of t.plan.deploymentSteps)console.log(` - ${n}`);if(t.blockers.length){console.log(`
|
|
69
|
-
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
|
|
70
|
-
`);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)}
|
|
71
|
-
`)),process.exit(e)}async function Kk(e=process.argv.slice(2)){if(hu(e,import.meta.url,"kynver"))return;if(e.length===0||ou(e[0]))return Fi(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&&ou(t)||n.some(ou))return Fi(0);let o=Pn(n),{runsDir:s,worktreesDir:i}=oe();if(Bk(s,{recursive:!0}),Bk(i,{recursive:!0}),r==="daemon"&&jt(),la(r,t)){let a,l=o.run?String(o.run).trim():"";if(l)try{a=U(l).repo}catch{a=void 0}await aa({repoRoot:a,cwd:a})}if(r==="login")return void await Ed(o);if(r==="bootstrap")return void await ui(o);if(r==="start")return void await Nh(o);if(r==="status")return Nt(o);if(r==="runner"&&t==="credential")return void await Pd(o);if(r==="setup")return void await Jo(o);if(r==="daemon")return hi(o)?void await ki(o):void await so(o);if(r==="plan"&&t==="progress")return void await Kh(o);if(r==="plan"&&t==="verify")return void await jh(o);if(r==="harness"&&t==="verify")return Vh(o);if(r==="plan"&&t==="persist")return void await Gh(o);if(r==="plan"&&t==="outbox"){let a=n.shift();if(a==="list")return void await Yh();if(a==="drain")return void await Jh(Pn(n));$k("plan",`outbox ${a??""}`.trim())}if(r==="cleanup")return qh(o);if(r==="config"&&t==="ensure-default-repo")return gk(o.json===!0);if(r==="doctor"&&t==="runtime-takeover")return _k(o);if(r==="scheduler"&&t==="cutover-check")return Ak(o.json===!0);if(r==="scheduler"&&t==="attest-cutover")return Ok(o.json===!0);if(r==="cron"&&t==="install")return void await Tk(o);if(r==="cron"&&t==="verify")return void await Dk(o);if(r==="cron"&&t==="status")return void await Ik(o.json===!0);if(r==="cron"&&t==="tick")return void await Nk(o);if(r==="lane"&&t==="tick"){let a=n.shift();return void await Hk(Pn(n),a)}if(r==="board"&&t==="contract")return void await xk(o);if(r==="run"&&t==="create")return void Yn(o);if(r==="run"&&t==="list")return Ql();if(r==="run"&&t==="resolve")return Zl(o);if(r==="run"&&t==="status")return Nt(o);if(r==="run"&&t==="dispatch")return void await Sr(o);if(r==="run"&&t==="sweep")return void await Ft(o);if(r==="run"&&t==="reconcile")return zl();if(r==="run"&&t==="unblock")return void await fk(o);if(r==="worker"&&t==="start")return void await vl(o);if(r==="worker"&&t==="list")return qp(o);if(r==="worker"&&t==="status")return gl(o);if(r==="worker"&&t==="tail")return hl(o);if(r==="worker"&&t==="stop")return kl(o);if(r==="worker"&&t==="complete")return void await _s(o);if(r==="worker"&&t==="discard-disposable")return Th(o);if(r==="worker"&&t==="auto-complete")return void await yl(o);if(r==="monitor"&&t==="start"){let a=await lk(o);console.log(JSON.stringify(a,null,2));return}if(r==="monitor"&&t==="status")return void await ck(o);if(r==="monitor"&&t==="stop")return uk(o);if(r==="monitor"&&t==="list")return dk();if(r==="monitor"&&t==="tick")return void await mk(o);if(r==="monitor"&&t==="auto-complete")return void await Li(o);if(r==="monitor"&&t==="run-loop")return void await pk(o);$k(r,t)}var tA=process.argv[1]&&Fk.native(process.argv[1])===Fk.native(rA(import.meta.url));tA&&Kk().catch(e=>{console.error(e),process.exit(1)});var nA="https://api.vercel.com";function oA(e){let r=e?.trim();return r||process.env.VERCEL_TOKEN?.trim()||null}function jk(e){return(e??"").trim().toUpperCase()}function sA(e){if(typeof e!="string"||!e.trim())return null;let r=e.trim();return r.startsWith("http")?r:`https://${r}`}async function su(e,r={}){let t=e.trim();if(!t)return{ok:!1,readyState:null,previewUrl:null,error:"missing deployment id or URL"};let n=oA(r.token);if(!n)return{ok:!1,readyState:null,previewUrl:null,error:"VERCEL_TOKEN not configured"};let o=r.teamId?.trim()||process.env.VERCEL_TEAM_ID?.trim(),s=o?`?teamId=${encodeURIComponent(o)}`:"",i=r.fetchImpl??fetch;try{let a=await i(`${nA}/v13/deployments/${encodeURIComponent(t)}${s}`,{headers:{Authorization:`Bearer ${n}`}});if(!a.ok){let u=await a.text();return{ok:!1,readyState:null,previewUrl:null,error:`Vercel API ${a.status}: ${u.slice(0,200)}`}}let l=await a.json();return{ok:!0,readyState:jk(l.readyState??l.state)||null,previewUrl:sA(l.url),error:null}}catch(a){return{ok:!1,readyState:null,previewUrl:null,error:a instanceof Error?a.message:"Vercel API fetch failed"}}}function iu(e,r){let t=jk(e);return t==="READY"?"ready":t==="ERROR"||t==="CANCELED"?"error":t==="BUILDING"||t==="QUEUED"||t==="INITIALIZING"||r?"building":"error"}var Vk=/(^|\.)vercel\.app$/i,Gk=/^dpl_[a-z0-9]+$/i;function $i(e){let r=e.trim();if(!r||/vercel\.com/i.test(r))return!1;if(Gk.test(r))return!0;try{let t=new URL(r.startsWith("http")?r:`https://${r}`);return Vk.test(t.hostname)}catch{return!1}}function iA(e){let r=e.trim();if(!r)return null;try{return new URL(r)}catch{return null}}function aA(e){let r=e.pathname.split("/").filter(Boolean);if(r.length<3)return null;let t=r[r.length-1]?.trim();return!t||t==="deployments"?null:t}function lA(e){let r=e.pathname.split("/").filter(Boolean),t=r.indexOf("deployments");return t<0||t>=r.length-1?null:r[t+1]?.trim()||null}function dt(e){let r={kind:"unknown",previewUrl:null,inspectTarget:null,deploymentId:null},t=e.trim();if(!t)return r;if(/^dpl_[a-z0-9]+$/i.test(t))return{kind:"deployment_id",previewUrl:null,inspectTarget:t,deploymentId:t};let n=iA(t);if(!n)return r;if(Vk.test(n.hostname)){let o=n.origin;return{kind:"deployment_host",previewUrl:o,inspectTarget:o,deploymentId:null}}if(n.hostname==="vercel.com"||n.hostname.endsWith(".vercel.com")){let o=lA(n)??aA(n);return{kind:"dashboard",previewUrl:null,inspectTarget:o&&Gk.test(o)?o:null,deploymentId:o}}return r}function Yk(e){return dt(e).kind==="dashboard"}var cA=/vercel/i;function au(e){let r=typeof e=="string"?e.trim().toLowerCase():"";return r==="success"?"success":r==="pending"?"pending":r==="failure"?"failure":r==="error"?"error":"unknown"}function lu(e){let r=typeof e=="string"?e.trim():"";return!!(r&&cA.test(r))}function vo(e){let t=(Array.isArray(e)?e:[]).filter(l=>lu(l.context));if(t.length===0)return null;let n=l=>l==="failure"||l==="error"?0:l==="pending"?1:l==="success"?2:1,o=null,s=1/0;for(let l of t){let c=n(au(l.state));c<s&&(o=l,s=c)}if(!o)return null;let i=typeof o.target_url=="string"&&o.target_url.trim()?o.target_url.trim():null,a=i?dt(i):null;return{context:String(o.context??"Vercel").trim(),state:au(o.state),targetUrl:i,description:typeof o.description=="string"&&o.description.trim()?o.description.trim():null,deploymentId:a?.deploymentId??null,previewUrl:a?.previewUrl??null,dashboardUrl:a?.kind==="dashboard"?i:null}}function uA(e){return e==="success"?"ready":e==="pending"?"building":e==="failure"||e==="error"?"error":"unavailable"}function Ki(e){return e.filter(Boolean).join("; ")}function cu(e){let r=typeof e=="string"?e.trim():"";if(!r)return{target:null,classified:null,reason:"missing target_url"};let t=dt(r);return t.inspectTarget&&$i(t.inspectTarget)?{target:t.inspectTarget,classified:t,reason:null}:t.kind==="dashboard"?{target:null,classified:t,reason:t.deploymentId?"dashboard deployment id is not API-inspectable; trust GitHub Vercel status":"dashboard URL is not valid for Vercel API lookup"}:{target:null,classified:t,reason:"unrecognized Vercel URL"}}function uu(e,r={}){let t=r.observedAt??new Date().toISOString(),n=vo(e);if(!n)return{status:"not_run",previewUrl:null,deploymentUrl:null,summary:"No Vercel GitHub status context on commit",observedAt:t,inspectSkipped:!0,inspectReason:"no_vercel_status_context",githubState:null,vercelContext:null};let o=uA(n.state),s=n.previewUrl??n.dashboardUrl,i=n.previewUrl??n.dashboardUrl;return{status:o,previewUrl:s,deploymentUrl:i,summary:Ki([`GitHub ${n.context}=${n.state}`,n.description??"",n.dashboardUrl?"dashboard target_url (API lookup skipped)":""]),observedAt:t,inspectSkipped:!0,inspectReason:n.dashboardUrl&&n.state==="success"?"trusted_github_status_dashboard_url":n.dashboardUrl?"dashboard_url_not_api_inspectable":"github_status_only",githubState:n.state,vercelContext:n.context}}async function Jk(e){let r=e.observedAt??new Date().toISOString(),t=uu(e.statuses??[],{observedAt:r}),n=vo(e.statuses??[]);if(!n)return t;if(n.state==="success")return{...t,inspectSkipped:!0,inspectReason:n.dashboardUrl?"trusted_github_status_dashboard_url":"trusted_github_status"};if(!e.allowInspect)return{...t,inspectSkipped:!0,inspectReason:"api_lookup_disabled"};let{target:o,reason:s}=cu(n.targetUrl);if(!o)return{...t,inspectSkipped:!0,inspectReason:s??"not_api_inspectable",summary:Ki([t.summary??"",s??"skipped Vercel API lookup"])};let a=await(e.runInspect??su)(o),l=new Date().toISOString();if(!a.ok&&a.error?.includes("VERCEL_TOKEN"))return{status:"unavailable",previewUrl:t.previewUrl,deploymentUrl:t.deploymentUrl,summary:"VERCEL_TOKEN not configured for API fallback",observedAt:l,inspectSkipped:!0,inspectReason:"vercel_token_missing",githubState:n.state,vercelContext:n.context};if(!a.ok)return{status:n.state==="pending"?"building":"error",previewUrl:t.previewUrl,deploymentUrl:o.startsWith("http")?o:t.deploymentUrl,summary:Ki([`Vercel API lookup ${o} failed`,a.error??""]),observedAt:l,inspectSkipped:!1,inspectReason:null,githubState:n.state,vercelContext:n.context};let c=iu(a.readyState,n.state==="pending"),u=a.previewUrl??(o.startsWith("http")?o:t.previewUrl);return{status:c,previewUrl:u,deploymentUrl:u??t.deploymentUrl,summary:Ki([`Vercel API ${o}=${a.readyState??"unknown"}`,c==="ready"?"preview ready":""]),observedAt:l,inspectSkipped:!1,inspectReason:null,githubState:n.state,vercelContext:n.context}}export{Rr as CODEX_DEFAULT_MODEL,ds as DEFAULT_DISPATCH_LEASE_MS,Ii as DEFAULT_HARNESS_VERIFY_COMMANDS,Pi as DEFAULT_HEAVY_VERIFICATION_MAX_CONCURRENT,Zs as DEFAULT_MAX_ACTIONS_PER_SWEEP,zn as DEFAULT_NODE_MODULES_AGE_MS,Qs as DEFAULT_RUN_DIRECTORIES_AGE_MS,Xs as DEFAULT_TERMINAL_WORKTREES_AGE_MS,xe as DEFAULT_WORKER_PROVIDER,Xn as DEFAULT_WORKTREES_AGE_MS,Lu as DEFAULT_WSL_HOST_CRITICAL_FREE_BYTES,Wu as DEFAULT_WSL_HOST_MOUNT,Uu as DEFAULT_WSL_HOST_WARN_FREE_BYTES,Su as FORBIDDEN_WORKER_ENV_KEYS,Ys as HARNESS_BUILD_CACHE_RELATIVE_PATHS,is as HERMES_OPENAI_CODEX_DEFAULT_MODEL,ta as MEMORY_COST_MANAGED_PACKAGES,ra as MEMORY_COST_PACKAGE_MIN_VERSIONS,dn as MemoryCostPackageVersionGuardError,Nl as OPENAI_CODEX_PROVIDER,ew as ORCHESTRATION_ACTION_KINDS,rw as ORCHESTRATION_POLICY_DECISIONS,Tl as ORCHESTRATION_POLICY_MODES,an as PACKAGE_VERSION,Ht as RUN_METADATA_ACTIVE_SIGNAL_MS,Gm as TERMINAL_WORKER_ARCHIVE_AGE_MS,zS as TRANSIENT_OPENAI_CODEX_ERROR_CLASSES,zo as WORKER_PERSONA_CATALOG,mw as applyProductionDatabaseToProcess,Ks as archiveTerminalWorkerMetadata,sa as assertMemoryCostPackageVersionGuard,ho as assessAutoCompleteEligibility,it as assessBuildAdmission,Mr as assessExitedWorkerSalvage,po as assessHeavyVerificationGate,fc as assessOrphanWorktreeSafety,ll as assessPrHandoffRequirement,Ur as assessWorkerLanding,Ra as assessWorkerLandingContract,cy as auditWorkerEnv,qr as autoCompleteWorker,yl as autoCompleteWorkerCli,Kn as buildBoxResourceSnapshotFromGate,rp as buildCodexExecArgv,Om as buildDispatchTaskText,Ml as buildForegroundHarnessIdempotencyKey,Xd as buildHermesOpenAiCodexChatArgv,ia as buildMemoryCostPackageGuardInput,Fa as buildOrchestrationProviderInventory,Za as buildPrompt,Gs as buildRunListRows,Si as buildSystemdRunArgv,lr as canonicalWorkerDir,ed as classifyNpmAuditOutcome,Nm as classifyOpenAiCodexError,jd as classifyOrchestrationRisk,qu as classifyRepoSearchMeta,Lo as classifyShellCommandOutcome,dt as classifyVercelUrl,Mi as classifyWorkerHealth,Ga as codexProvider,Yl as collectFilesystemLiveRunKeys,Jk as collectVercelEvidence,Kd as compareProviderCandidates,pn as compareSemver,_s as completeWorker,dd as computeAttention,T as computeWorkerStatus,lo as countActiveHeavyVerificationSlots,Yn as createRun,On as defaultBoxId,Pt as deriveRunStatus,Uo as diagnoseRepoSearchFailure,gr as discoverDefaultRepo,Iu as discoverDefaultRepoCandidates,Hs as discoverProductionDbEnvFilePaths,Sr as dispatchRun,Ds as drainPlanOutbox,Ta as enforceCursorWorkerProvider,aa as enforceMemoryCostPackageGuardAtStartup,Rs as ensurePrReadyHandoff,Ny as evaluateMemoryCostPackageGuardAtStartup,Oo as evaluateMemoryCostPackageVersionGuard,sw as evaluateOrchestrationPolicy,uu as evidenceFromGitHubVercelStatus,Wm as expandHomePath,Us as extractPlanOutboxFromTask,al as extractPrUrlFromText,fa as extractSearchMeta,Qu as extractSearchMetaFromToolLine,Ti as formatAutoCompleteOutcomeNotice,Mm as formatCronJobDeliveryFailure,Qh as formatHarnessToolReadable,JS as formatHeartbeatLine,wy as formatMemoryCostPackageGuardError,nn as formatMonitorTickNotice,Dm as formatOpenAiCodexFailureNotice,Ms as formatPlanOutboxHandoffBlock,Xu as formatRepoSearchGuidance,Wt as formatResolvedDefaultRepo,Di as formatWorkerCompleteNotice,go as formatWorkerStatusNotice,Nr as getHarnessPaths,Ui as getMonitorStatus,Kr as getOrchestrationProviderCapability,Xo as getPersonaDefaultRoleLane,Td as getPersonaDispatchLane,Aa as getWorkerPersonaCatalogEntry,Qi as gitRepoRoot,pe as harnessRunsDir,ec as harnessStorageSnapshot,nr as harnessWorktreesDir,Lt as hasNestedRunsSegment,sr as hashPlanBody,Va as hermesCodexProvider,vn as isActiveHarnessWorker,Ve as isClaudeFamilyProvider,Yk as isDashboardVercelUrl,qS as isEngagementRequiredSkip,Z as isFinishedWorkerStatus,Ji as isForbiddenWorkerEnvKey,rc as isGeneratedHarnessPath,Kl as isHarnessRunMetadataPath,Ai as isHeavyVerificationGateSkipped,$i as isInspectableVercelTarget,qR as isKnownWorkerPersonaSlug,Ou as isKynverMonorepoRoot,Wr as isLandingBlockedWorkerStatus,Dl as isOrchestrationEnforceTasksEnabled,kc as isPipelineCleanupEnabled,ma as isRgExcludeScopeTarget,Do as isSingleFileSearchTarget,Xt as isSystemdRunAvailable,pa as isTerminalHeartbeatPhase,lu as isVercelStatusContext,Hu as isWslHost,Xh as joinHarnessNotice,va as landingContractAttentionReason,Kc as listActiveHeavyVerificationSlots,wu as listForbiddenWorkerEnvKeys,ko as listMonitors,Ma as listOrchestrationProviderCapabilities,Xr as listOutboxItems,Ql as listRuns,Xl as listRunsCli,v as loadUserConfig,Kk as main,Ci as mergeNodeOptionsForBuildCheck,zu as metaToNormalizedRgCommand,Vd as normalizeCursorModelAlias,te as normalizeHarnessRoot,Mo as normalizeRepoSearchCommand,Ju as normalizeRgArgv,Me as observeRunnerDiskGate,ca as observeWslHostDisk,ZS as orchestrationAuditForWorkerJson,Pn as parseArgs,bR as parseClaudeStream,wt as parseHarnessStream,_e as parseHeartbeat,Fs as persistDefaultRepo,Ut as persistPlan,vo as pickVercelStatusContext,kr as postJson,nv as preferCursorExecutor,os as preflightClaudeModel,Vr as preflightCodexModel,ss as preflightCursorModel,ts as probeClaudeOAuthBinding,Ua as probeCodexOAuthBinding,ns as probeCursorOAuthBinding,Ba as probeHermesCliAdapter,An as probeHermesOpenAiCodexBinding,Ev as probeOrchestrationProviderBinding,oa as probeRepoPackageVersions,Wa as providerCapableForRisk,yt as readMemAvailableBytes,Bm as readProductionDbKeysFromEnvFile,co as reclaimStaleHeavyVerificationSlots,Vs as reconcileLocalOnlyMergedPrAttention,zl as reconcileRunsCli,Bt as reconcileStaleWorkers,js as reconcileWorkerMetadata,Ww as reconcileWorkerMetadataCli,iw as redactHarness,ir as redactProviderErrorText,tn as releaseHeavyVerificationSlot,Rw as remediateDefaultRepo,$s as repairMissingRunMetadata,kw as repairNestedRunsPath,W as resolveBaseUrl,zv as resolveBoxKindFromEnv,JR as resolveCallbackSecret,K as resolveCallbackSecretWithMint,yr as resolveCodexOrchestrationAdapter,En as resolveConfiguredWorkerProvider,Re as resolveDefaultRepo,de as resolveHarnessRoot,Qm as resolveHarnessRunByName,Zl as resolveHarnessRunCli,en as resolveHeavyVerificationMaxConcurrent,Tm as resolveOpenAiCodexRetryBudget,Ls as resolveOrchestrationPolicyMode,Ka as resolveOrchestrationRouting,Fm as resolveProductionDatabaseUrl,ws as resolveRunTargetArg,cu as resolveVercelInspectTarget,Bl as resolveWorkerJsonPath,Le as resolveWorkerTargetArgs,Oi as runBoundedBuildCheck,so as runDaemon,et as runDirHasActiveRetentionSignals,ci as runHarnessCleanup,fo as runHarnessVerifyCommands,ut as runMonitorTick,hc as runPipelineHarnessCleanup,Nt as runStatus,Vn as safeDatabaseUrlHint,Um as sanitizeOrchestrationAudit,je as saveUserConfig,Cu as scrubClaudeEnv,Ne as scrubWorkerEnv,rs as selectCheapestCapableProvider,na as semverAtLeast,la as shouldEnforceMemoryCostPackageGuardCli,Rl as spawnCompletionSidecar,Wi as spawnMonitorSidecar,xs as spawnWorkerProcess,vl as startWorker,kl as stopWorker,ka as summarizeEvent,Zu as summarizeNpmAuditReport,nd as summarizeShellToolCallEvent,Bu as summarizeWslRecoverySteps,Ft as sweepRun,hl as tailWorker,Zo as taskAllowsClaudeWorker,Tr as terminalFinalResultFromHeartbeat,uo as tryAcquireHeavyVerificationSlot,Fi as usage,Vb as validateOwnedPaths,ml as validateRepo,Dn as validateRunId,Gb as validateTailLines,Kp as validateWorkerName,mo as waitForHeavyVerificationSlot,Gl as workerDirHasActiveRetentionSignals,zR as workerPersonaLandingSlugs,Oa as workerPersonaReviewSlugs,gl as workerStatus};
|
|
77
|
+
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 dy(e){let r=v(),t=await on({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"}
|
|
78
|
+
`);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 XA from"node:os";O();De();Nn();w();var Io={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 zA}from"node:child_process";import py from"node:path";function my(e,r,t){let o=[py.join(r,Io.landScript),String(e),...Io.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=zA("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 fy(e){let r=e.repoPath?String(e.repoPath).trim():"";return r?py.resolve(r):Re()?.repo??process.cwd()}async function gy(e){let r=String(N(String(e.agentOsId||""),"--agent-os-id")),t=String(e.repo||Io.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=Fr({runId:s??"fleet-lane-tick"}),a={...Qn(i,{harnessRunId:s,boxKind:je(v()),hostLabel:XA.hostname()}),providerHealthy:i.ok,authorizedForRepair:i.ok,authorizedForLanding:i.ok,systemHealthBlockers:i.ok?[]:[i.reason??"resource_gate_blocked"],actionableWorkers:i.activeWorkers},l=B(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 Rr(u,c,{repo:t,fleet:n,execute:o,runId:s,boxCapacity:a})).response,m=[],p=fy(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=my(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 Rr(`${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 hy(e,r){let t=String(r??e.lane??"").trim();t!=="landing-maintainer"&&(console.error(`unknown lane: ${t||"(none)"}`),process.exit(1));let n=await gy(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 _u(e){return e==="help"||e==="--help"||e==="-h"}function Ry(e,r){let t=[e,r].filter(Boolean).join(" ");console.error(`unknown command: ${t||"(none)"}`),ea(1)}function ea(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(`
|
|
79
|
+
`)),process.exit(e)}async function vy(e=process.argv.slice(2)){if(Lu(e,import.meta.url,"kynver"))return;if(e.length===0||_u(e[0]))return ea(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&&_u(t)||n.some(_u))return ea(0);let o=Un(n),{runsDir:s,worktreesDir:i}=oe();if(ky(s,{recursive:!0}),ky(i,{recursive:!0}),r==="daemon"&&Qt(),ba(r,t)){let a,l=o.run?String(o.run).trim():"";if(l)try{a=U(l).repo}catch{a=void 0}await va({repoRoot:a,cwd:a})}if(r==="login")return void await zd(o);if(r==="bootstrap")return void await wi(o);if(r==="start")return void await ck(o);if(r==="status")return Wt(o);if(r==="runner"&&t==="credential")return void await qd(o);if(r==="setup")return void await os(o);if(r==="daemon")return Ai(o)?void await Ii(o):void await ko(o);if(r==="plan"&&t==="progress")return void await vk(o);if(r==="plan"&&t==="verify")return void await bk(o);if(r==="harness"&&t==="verify")return Sk(o);if(r==="plan"&&t==="persist")return void await wk(o);if(r==="plan"&&t==="outbox"){let a=n.shift();if(a==="list")return void await Ck();if(a==="drain")return void await _k(Un(n));Ry("plan",`outbox ${a??""}`.trim())}if(r==="cleanup")return xk(o);if(r==="config"&&t==="ensure-default-repo")return Gk(o.json===!0);if(r==="doctor"&&t==="runtime-takeover")return ty(o);if(r==="scheduler"&&t==="cutover-check")return iy(o.json===!0);if(r==="scheduler"&&t==="attest-cutover")return ay(o.json===!0);if(r==="cron"&&t==="install")return void await uy(o);if(r==="cron"&&t==="verify")return void await dy(o);if(r==="cron"&&t==="status")return void await ly(o.json===!0);if(r==="cron"&&t==="tick")return void await cy(o);if(r==="lane"&&t==="tick"){let a=n.shift();return void await hy(Un(n),a)}if(r==="board"&&t==="contract")return void await ny(o);if(r==="run"&&t==="create")return void oo(o);if(r==="run"&&t==="list")return Rc();if(r==="run"&&t==="resolve")return vc(o);if(r==="run"&&t==="status")return Wt(o);if(r==="run"&&t==="dispatch")return void await Cr(o);if(r==="run"&&t==="sweep")return void await qt(o);if(r==="run"&&t==="reconcile")return kc();if(r==="run"&&t==="unblock")return void await Vk(o);if(r==="worker"&&t==="start")return void await Dl(o);if(r==="worker"&&t==="list")return vm(o);if(r==="worker"&&t==="status")return Al(o);if(r==="worker"&&t==="tail")return Il(o);if(r==="worker"&&t==="stop")return Ol(o);if(r==="worker"&&t==="complete")return void await Us(o);if(r==="worker"&&t==="discard-disposable")return uk(o);if(r==="worker"&&t==="auto-complete")return void await Nl(o);if(r==="monitor"&&t==="start"){let a=await Wk(o);console.log(JSON.stringify(a,null,2));return}if(r==="monitor"&&t==="status")return void await Hk(o);if(r==="monitor"&&t==="stop")return Fk(o);if(r==="monitor"&&t==="list")return $k();if(r==="monitor"&&t==="tick")return void await jk(o);if(r==="monitor"&&t==="auto-complete")return void await zi(o);if(r==="monitor"&&t==="run-loop")return void await Kk(o);Ry(r,t)}var ZA=process.argv[1]&&yy.native(process.argv[1])===yy.native(QA(import.meta.url));ZA&&vy().catch(e=>{console.error(e),process.exit(1)});var eI="https://api.vercel.com";function rI(e){let r=e?.trim();return r||process.env.VERCEL_TOKEN?.trim()||null}function by(e){return(e??"").trim().toUpperCase()}function tI(e){if(typeof e!="string"||!e.trim())return null;let r=e.trim();return r.startsWith("http")?r:`https://${r}`}async function xu(e,r={}){let t=e.trim();if(!t)return{ok:!1,readyState:null,previewUrl:null,error:"missing deployment id or URL"};let n=rI(r.token);if(!n)return{ok:!1,readyState:null,previewUrl:null,error:"VERCEL_TOKEN not configured"};let o=r.teamId?.trim()||process.env.VERCEL_TEAM_ID?.trim(),s=o?`?teamId=${encodeURIComponent(o)}`:"",i=r.fetchImpl??fetch;try{let a=await i(`${eI}/v13/deployments/${encodeURIComponent(t)}${s}`,{headers:{Authorization:`Bearer ${n}`}});if(!a.ok){let u=await a.text();return{ok:!1,readyState:null,previewUrl:null,error:`Vercel API ${a.status}: ${u.slice(0,200)}`}}let l=await a.json();return{ok:!0,readyState:by(l.readyState??l.state)||null,previewUrl:tI(l.url),error:null}}catch(a){return{ok:!1,readyState:null,previewUrl:null,error:a instanceof Error?a.message:"Vercel API fetch failed"}}}function Eu(e,r){let t=by(e);return t==="READY"?"ready":t==="ERROR"||t==="CANCELED"?"error":t==="BUILDING"||t==="QUEUED"||t==="INITIALIZING"||r?"building":"error"}var Sy=/(^|\.)vercel\.app$/i,wy=/^dpl_[a-z0-9]+$/i;function ra(e){let r=e.trim();if(!r||/vercel\.com/i.test(r))return!1;if(wy.test(r))return!0;try{let t=new URL(r.startsWith("http")?r:`https://${r}`);return Sy.test(t.hostname)}catch{return!1}}function nI(e){let r=e.trim();if(!r)return null;try{return new URL(r)}catch{return null}}function oI(e){let r=e.pathname.split("/").filter(Boolean);if(r.length<3)return null;let t=r[r.length-1]?.trim();return!t||t==="deployments"?null:t}function sI(e){let r=e.pathname.split("/").filter(Boolean),t=r.indexOf("deployments");return t<0||t>=r.length-1?null:r[t+1]?.trim()||null}function gt(e){let r={kind:"unknown",previewUrl:null,inspectTarget:null,deploymentId:null},t=e.trim();if(!t)return r;if(/^dpl_[a-z0-9]+$/i.test(t))return{kind:"deployment_id",previewUrl:null,inspectTarget:t,deploymentId:t};let n=nI(t);if(!n)return r;if(Sy.test(n.hostname)){let o=n.origin;return{kind:"deployment_host",previewUrl:o,inspectTarget:o,deploymentId:null}}if(n.hostname==="vercel.com"||n.hostname.endsWith(".vercel.com")){let o=sI(n)??oI(n);return{kind:"dashboard",previewUrl:null,inspectTarget:o&&wy.test(o)?o:null,deploymentId:o}}return r}function Cy(e){return gt(e).kind==="dashboard"}var iI=/vercel/i;function Pu(e){let r=typeof e=="string"?e.trim().toLowerCase():"";return r==="success"?"success":r==="pending"?"pending":r==="failure"?"failure":r==="error"?"error":"unknown"}function Au(e){let r=typeof e=="string"?e.trim():"";return!!(r&&iI.test(r))}function Oo(e){let t=(Array.isArray(e)?e:[]).filter(l=>Au(l.context));if(t.length===0)return null;let n=l=>l==="failure"||l==="error"?0:l==="pending"?1:l==="success"?2:1,o=null,s=1/0;for(let l of t){let c=n(Pu(l.state));c<s&&(o=l,s=c)}if(!o)return null;let i=typeof o.target_url=="string"&&o.target_url.trim()?o.target_url.trim():null,a=i?gt(i):null;return{context:String(o.context??"Vercel").trim(),state:Pu(o.state),targetUrl:i,description:typeof o.description=="string"&&o.description.trim()?o.description.trim():null,deploymentId:a?.deploymentId??null,previewUrl:a?.previewUrl??null,dashboardUrl:a?.kind==="dashboard"?i:null}}function aI(e){return e==="success"?"ready":e==="pending"?"building":e==="failure"||e==="error"?"error":"unavailable"}function ta(e){return e.filter(Boolean).join("; ")}function Iu(e){let r=typeof e=="string"?e.trim():"";if(!r)return{target:null,classified:null,reason:"missing target_url"};let t=gt(r);return t.inspectTarget&&ra(t.inspectTarget)?{target:t.inspectTarget,classified:t,reason:null}:t.kind==="dashboard"?{target:null,classified:t,reason:t.deploymentId?"dashboard deployment id is not API-inspectable; trust GitHub Vercel status":"dashboard URL is not valid for Vercel API lookup"}:{target:null,classified:t,reason:"unrecognized Vercel URL"}}function Ou(e,r={}){let t=r.observedAt??new Date().toISOString(),n=Oo(e);if(!n)return{status:"not_run",previewUrl:null,deploymentUrl:null,summary:"No Vercel GitHub status context on commit",observedAt:t,inspectSkipped:!0,inspectReason:"no_vercel_status_context",githubState:null,vercelContext:null};let o=aI(n.state),s=n.previewUrl??n.dashboardUrl,i=n.previewUrl??n.dashboardUrl;return{status:o,previewUrl:s,deploymentUrl:i,summary:ta([`GitHub ${n.context}=${n.state}`,n.description??"",n.dashboardUrl?"dashboard target_url (API lookup skipped)":""]),observedAt:t,inspectSkipped:!0,inspectReason:n.dashboardUrl&&n.state==="success"?"trusted_github_status_dashboard_url":n.dashboardUrl?"dashboard_url_not_api_inspectable":"github_status_only",githubState:n.state,vercelContext:n.context}}async function _y(e){let r=e.observedAt??new Date().toISOString(),t=Ou(e.statuses??[],{observedAt:r}),n=Oo(e.statuses??[]);if(!n)return t;if(n.state==="success")return{...t,inspectSkipped:!0,inspectReason:n.dashboardUrl?"trusted_github_status_dashboard_url":"trusted_github_status"};if(!e.allowInspect)return{...t,inspectSkipped:!0,inspectReason:"api_lookup_disabled"};let{target:o,reason:s}=Iu(n.targetUrl);if(!o)return{...t,inspectSkipped:!0,inspectReason:s??"not_api_inspectable",summary:ta([t.summary??"",s??"skipped Vercel API lookup"])};let a=await(e.runInspect??xu)(o),l=new Date().toISOString();if(!a.ok&&a.error?.includes("VERCEL_TOKEN"))return{status:"unavailable",previewUrl:t.previewUrl,deploymentUrl:t.deploymentUrl,summary:"VERCEL_TOKEN not configured for API fallback",observedAt:l,inspectSkipped:!0,inspectReason:"vercel_token_missing",githubState:n.state,vercelContext:n.context};if(!a.ok)return{status:n.state==="pending"?"building":"error",previewUrl:t.previewUrl,deploymentUrl:o.startsWith("http")?o:t.deploymentUrl,summary:ta([`Vercel API lookup ${o} failed`,a.error??""]),observedAt:l,inspectSkipped:!1,inspectReason:null,githubState:n.state,vercelContext:n.context};let c=Eu(a.readyState,n.state==="pending"),u=a.previewUrl??(o.startsWith("http")?o:t.previewUrl);return{status:c,previewUrl:u,deploymentUrl:u??t.deploymentUrl,summary:ta([`Vercel API ${o}=${a.readyState??"unknown"}`,c==="ready"?"preview ready":""]),observedAt:l,inspectSkipped:!1,inspectReason:null,githubState:n.state,vercelContext:n.context}}export{br as CODEX_DEFAULT_MODEL,Ss as DEFAULT_DISPATCH_LEASE_MS,ji as DEFAULT_HARNESS_VERIFY_COMMANDS,Hi as DEFAULT_HEAVY_VERIFICATION_MAX_CONCURRENT,pi as DEFAULT_MAX_ACTIONS_PER_SWEEP,ao as DEFAULT_NODE_MODULES_AGE_MS,di as DEFAULT_RUN_DIRECTORIES_AGE_MS,ui as DEFAULT_TERMINAL_WORKTREES_AGE_MS,xe as DEFAULT_WORKER_PROVIDER,lo as DEFAULT_WORKTREES_AGE_MS,od as DEFAULT_WSL_HOST_CRITICAL_FREE_BYTES,sd as DEFAULT_WSL_HOST_MOUNT,nd as DEFAULT_WSL_HOST_WARN_FREE_BYTES,Vr as EMBEDDED_INSTRUCTION_BUNDLE,ep as EMBEDDED_INSTRUCTION_BUNDLE_VERSION,Ku as FORBIDDEN_WORKER_ENV_KEYS,ii as HARNESS_BUILD_CACHE_RELATIVE_PATHS,ks as HERMES_OPENAI_CODEX_DEFAULT_MODEL,af as INSTRUCTION_BUNDLE_REFRESH_TTL_MS,ga as MEMORY_COST_MANAGED_PACKAGES,fa as MEMORY_COST_PACKAGE_MIN_VERSIONS,Rn as MemoryCostPackageVersionGuardError,Zl as OPENAI_CODEX_PROVIDER,Xw as ORCHESTRATION_ACTION_KINDS,Qw as ORCHESTRATION_POLICY_DECISIONS,ec as ORCHESTRATION_POLICY_MODES,gn as PACKAGE_VERSION,nf as PINNED_INSTRUCTION_BUNDLE_PUBLIC_KEYS,Yt as RUN_METADATA_ACTIVE_SIGNAL_MS,Cf as TERMINAL_WORKER_ARCHIVE_AGE_MS,Yw as TRANSIENT_OPENAI_CODEX_ERROR_CLASSES,as as WORKER_PERSONA_CATALOG,uC as applyProductionDatabaseToProcess,ti as archiveTerminalWorkerMetadata,ya as assertMemoryCostPackageVersionGuard,Eo as assessAutoCompleteEligibility,ut as assessBuildAdmission,Lr as assessExitedWorkerSalvage,wo as assessHeavyVerificationGate,Mc as assessOrphanWorktreeSafety,Sl as assessPrHandoffRequirement,Br as assessWorkerLanding,Na as assessWorkerLandingContract,Hy as auditWorkerEnv,Zr as autoCompleteWorker,Nl as autoCompleteWorkerCli,Qn as buildBoxResourceSnapshotFromGate,xp as buildCodexExecArgv,rf as buildDispatchTaskText,tc as buildForegroundHarnessIdempotencyKey,Sp as buildHermesOpenAiCodexChatArgv,Ra as buildMemoryCostPackageGuardInput,rl as buildOrchestrationProviderInventory,ml as buildPrompt,si as buildRunListRows,Mi as buildSystemdRunArgv,Js as canonicalJsonStringify,ur as canonicalWorkerDir,bd as classifyNpmAuditOutcome,uf as classifyOpenAiCodexError,gp as classifyOrchestrationRisk,hd as classifyRepoSearchMeta,Jo as classifyShellCommandOutcome,gt as classifyVercelUrl,Ji as classifyWorkerHealth,il as codexProvider,fc as collectFilesystemLiveRunKeys,_y as collectVercelEvidence,fp as compareProviderCandidates,vn as compareSemver,Us as completeWorker,Nd as computeAttention,Mw as computeInstructionBundleVersion,T as computeWorkerStatus,vo as countActiveHeavyVerificationSlots,oo as createRun,Wn as defaultBoxId,Uw as deriveInstructionBundleKeyId,Ot as deriveRunStatus,Yo as diagnoseRepoSearchFailure,kr as discoverDefaultRepo,Qu as discoverDefaultRepoCandidates,Qs as discoverProductionDbEnvFilePaths,Cr as dispatchRun,Vs as drainPlanOutbox,Ya as enforceCursorWorkerProvider,va as enforceMemoryCostPackageGuardAtStartup,Ql as ensureInstructionBundle,Is as ensurePrReadyHandoff,cR as evaluateMemoryCostPackageGuardAtStartup,Fo as evaluateMemoryCostPackageVersionGuard,tC as evaluateOrchestrationPolicy,Ou as evidenceFromGitHubVercelStatus,hf as expandHomePath,Ys as extractPlanOutboxFromTask,bl as extractPrUrlFromText,Ea as extractSearchMeta,Rd as extractSearchMetaFromToolLine,Gi as formatAutoCompleteOutcomeNotice,mf as formatCronJobDeliveryFailure,Ak as formatHarnessToolReadable,Tw as formatHeartbeatLine,eR as formatMemoryCostPackageGuardError,pn as formatMonitorTickNotice,pf as formatOpenAiCodexFailureNotice,Gs as formatPlanOutboxHandoffBlock,yd as formatRepoSearchGuidance,Gt as formatResolvedDefaultRepo,Yi as formatWorkerCompleteNotice,xo as formatWorkerStatusNotice,Av as getActiveInstructionBundle,sr as getActiveInstructionBundleSource,Mt as getActiveInstructionBundleVersion,Dr as getHarnessPaths,qi as getMonitorStatus,Yr as getOrchestrationProviderCapability,ls as getPersonaDefaultRoleLane,op as getPersonaDispatchLane,Ka as getWorkerPersonaCatalogEntry,da as gitRepoRoot,pe as harnessRunsDir,bc as harnessStorageSnapshot,or as harnessWorktreesDir,Vt as hasNestedRunsSegment,ir as hashPlanBody,sl as hermesCodexProvider,ql as instructionBundleCachePath,Pn as isActiveHarnessWorker,Ge as isClaudeFamilyProvider,Cy as isDashboardVercelUrl,Dw as isEngagementRequiredSkip,Z as isFinishedWorkerStatus,aa as isForbiddenWorkerEnvKey,Sc as isGeneratedHarnessPath,uc as isHarnessRunMetadataPath,$i as isHeavyVerificationGateSkipped,ra as isInspectableVercelTarget,Dv as isKnownWorkerPersonaSlug,Xu as isKynverMonorepoRoot,Hr as isLandingBlockedWorkerStatus,rc as isOrchestrationEnforceTasksEnabled,Bc as isPipelineCleanupEnabled,xa as isRgExcludeScopeTarget,jt as isSignedInstructionBundleShape,Vo as isSingleFileSearchTarget,sn as isSystemdRunAvailable,_a as isTerminalHeartbeatPhase,Au as isVercelStatusContext,id as isWslHost,Pk as joinHarnessNotice,Ta as landingContractAttentionReason,uu as listActiveHeavyVerificationSlots,ju as listForbiddenWorkerEnvKeys,Po as listMonitors,qa as listOrchestrationProviderCapabilities,rt as listOutboxItems,Rc as listRuns,yc as listRunsCli,Xl as loadInstructionBundleCache,v as loadUserConfig,vy as main,Li as mergeNodeOptionsForBuildCheck,kd as metaToNormalizedRgCommand,hp as normalizeCursorModelAlias,te as normalizeHarnessRoot,Go as normalizeRepoSearchCommand,gd as normalizeRgArgv,Me as observeRunnerDiskGate,Sa as observeWslHostDisk,zw as orchestrationAuditForWorkerJson,Un as parseArgs,QR as parseClaudeStream,Et as parseHarnessStream,_e as parseHeartbeat,qs as parseRawEd25519Key,ei as persistDefaultRepo,Kt as persistPlan,Oo as pickVercelStatusContext,Rr as postJson,$v as preferCursorExecutor,gs as preflightClaudeModel,qr as preflightCodexModel,hs as preflightCursorModel,ms as probeClaudeOAuthBinding,za as probeCodexOAuthBinding,fs as probeCursorOAuthBinding,el as probeHermesCliAdapter,Bn as probeHermesOpenAiCodexBinding,mb as probeOrchestrationProviderBinding,ka as probeRepoPackageVersions,Qa as providerCapableForRisk,St as readMemAvailableBytes,yf as readProductionDbKeysFromEnvFile,bo as reclaimStaleHeavyVerificationSlots,oi as reconcileLocalOnlyMergedPrAttention,kc as reconcileRunsCli,Jt as reconcileStaleWorkers,ni as reconcileWorkerMetadata,MC as reconcileWorkerMetadataCli,nC as redactHarness,lr as redactProviderErrorText,dn as releaseHeavyVerificationSlot,hC as remediateDefaultRepo,ri as repairMissingRunMetadata,fC as repairNestedRunsPath,B as resolveBaseUrl,Mb as resolveBoxKindFromEnv,is as resolveBundlePersona,_v as resolveCallbackSecret,K as resolveCallbackSecretWithMint,vr as resolveCodexOrchestrationAdapter,Ln as resolveConfiguredWorkerProvider,Re as resolveDefaultRepo,de as resolveHarnessRoot,If as resolveHarnessRunByName,vc as resolveHarnessRunCli,cn as resolveHeavyVerificationMaxConcurrent,Yl as resolveInstructionBundlePublicKey,Ut as resolveInstructionText,df as resolveOpenAiCodexRetryBudget,zs as resolveOrchestrationPolicyMode,nl as resolveOrchestrationRouting,Gr as resolvePolicyThreshold,Rf as resolveProductionDatabaseUrl,Ds as resolveRunTargetArg,Iu as resolveVercelInspectTarget,ac as resolveWorkerJsonPath,Be as resolveWorkerTargetArgs,Ki as runBoundedBuildCheck,ko as runDaemon,ot as runDirHasActiveRetentionSignals,Si as runHarnessCleanup,_o as runHarnessVerifyCommands,ft as runMonitorTick,Lc as runPipelineHarnessCleanup,Wt as runStatus,to as safeDatabaseUrlHint,ff as sanitizeOrchestrationAudit,zl as saveInstructionBundleCache,Ve as saveUserConfig,Vu as scrubClaudeEnv,Ne as scrubWorkerEnv,ps as selectCheapestCapableProvider,ha as semverAtLeast,$a as setActiveInstructionBundle,ba as shouldEnforceMemoryCostPackageGuardCli,Tl as spawnCompletionSidecar,Xi as spawnMonitorSidecar,Ls as spawnWorkerProcess,Dl as startWorker,Ol as stopWorker,Ia as summarizeEvent,vd as summarizeNpmAuditReport,Cd as summarizeShellToolCallEvent,ad as summarizeWslRecoverySteps,qt as sweepRun,Il as tailWorker,us as taskAllowsClaudeWorker,Mr as terminalFinalResultFromHeartbeat,So as tryAcquireHeavyVerificationSlot,ea as usage,IS as validateOwnedPaths,El as validateRepo,Kn as validateRunId,OS as validateTailLines,fm as validateWorkerName,of as verifyInstructionBundleSignatureWithKey,Jl as verifySignedInstructionBundle,Co as waitForHeavyVerificationSlot,mc as workerDirHasActiveRetentionSignals,Mv as workerPersonaLandingSlugs,ja as workerPersonaReviewSlugs,Al as workerStatus};
|