@kynver-app/runtime 0.2.153 → 0.2.156
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -2
- package/dist/cli.js +245 -231
- package/dist/daemon-tick-thread.js +55 -55
- package/dist/desktop-entry.js +195 -182
- package/dist/index.js +269 -255
- package/dist/server/cleanup.js +1 -1
- package/package.json +1 -1
package/dist/server/cleanup.js
CHANGED
|
@@ -72,7 +72,7 @@ child.on("error", (e) => {
|
|
|
72
72
|
if (!child.pid) finish(127, null, String(e && e.message));
|
|
73
73
|
});
|
|
74
74
|
child.on("exit", (code, signal) => finish(code, signal));
|
|
75
|
-
`});function Et(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e.handoffState;return typeof r=="string"&&pu.has(r)}function Ct(e){return!!(e&&du.test(e))}function ro(e){if(e.noRestartAt?.trim())return"stopped_by_hand";if(e.finalResult&&!Et(e.finalResult))return"finished";if(e.alive)return e.stale?"stuck":"running";let r=e.error?.trim()??"",t=e.exit??null;if(t?.oomEvidence||Ct(r))return"oom";let n=e.reconcileReason??"";return/reconciled stale worker/i.test(n)?"stuck":eo.test(r)||eo.test(n)?"timed_out":t&&t.exitCode===0&&!t.signal&&!t.spawnError?"no_report":t&&(t.signal||t.spawnError||t.exitCode!==null&&t.exitCode!==0)||r?"crashed":"no_report"}function to(e){let r=[fu(e.stopClass)],t=Qn(e.exit);t&&r.push(t),e.exit?.oomEvidence&&r.push(`evidence: ${e.exit.oomEvidence.detail}`),e.stopClass==="no_report"&&e.exit?.exitCode===0&&r.push("it exited normally but never sent a final report");let n=e.error?.replace(/\s+/g," ").trim();return n?r.push(`last output: ${n.length>300?`${n.slice(-300)}`:n}`):e.stopClass==="stuck"&&e.reconcileReason&&r.push(e.reconcileReason),r.join(" \u2014 ").slice(0,600)}function fu(e){switch(e){case"finished":return"finished";case"oom":return"ran out of memory";case"crashed":return"crashed";case"no_report":return"stopped without reporting";case"timed_out":return"timed out";case"stuck":return"stuck (no progress)";case"stopped_by_hand":return"stopped on purpose";default:return"running"}}var du,eo,pu,no=m(()=>{"use strict";se();b();vt();du=/javascript heap out of memory|reached heap limit|allocation failed - process out of memory|\bout of memory\b|\boom[- ]?kill(?:ed|er)?\b|std::bad_alloc|cannot allocate memory|\benomem\b|exit(?:ed)? (?:with )?(?:code|status) 137\b|killed process \d+/i,eo=/\btimed? ?out\b|\btimeout\b|deadline exceeded/i,pu=new Set(["exited_without_final_result","exited_without_complete_heartbeat","exit_failure"])});function oo(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function wt(e){let r=(e??"").trim();if(!r)return null;if(He(r))return{blocked:!0,reason:`provider authentication failed: ${oo(r)}`};for(let t of mu)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${oo(r)}`};return null}var mu,so=m(()=>{"use strict";br();bt();mu=[{test:/(?:claude provider refuses to spawn: worker prompt is empty after argv assembly|Input must be provided (?:either )?through stdin or as a prompt argument)/i,label:"provider prompt delivery failed"},{test:Gn,label:"Claude Code doesn't know this model (update Claude Code with `claude update`, or pick another model)"},{test:/\b(?:invalid|unknown|unsupported|unrecognized)\b[^.\n]*\bmodel\b/i,label:"provider rejected the requested model"},{test:/\bmodel\b[^.\n]*\b(?:not\s+(?:found|supported|available|recognized|valid)|is\s+not\s+valid|does\s+not\s+exist)/i,label:"provider rejected the requested model"},{test:/\b(?:did you mean|available models|choose (?:a|one of)|supported models)\b/i,label:"provider rejected the requested model"},{test:/model preflight failed/i,label:"model/provider preflight failed"},{test:/\b(?:command not found|ENOENT|is the .*CLI on PATH|executable not found|no such file or directory)\b/i,label:"provider CLI is missing or not on PATH"},{test:/\bfailed to spawn\b/i,label:"provider failed to spawn the worker process"},{test:/\b(?:not logged in|unauthorized|authentication (?:failed|required)|invalid api key|missing api key|401)\b/i,label:"provider authentication failed"},{test:/\b(?:out of usage|increase limits?|switch to auto|ask your admin to increase your limit|usage limits?|quota exceeded|insufficient_quota|credits? exhausted|billing|payment required)\b/i,label:"provider quota exhausted"}]});function io(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function gu(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 hu(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:io(e.head)}function ku(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 ao(e){if(e.alive||gu(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=io(e.headCommit)??hu(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:ku(s,r,t)}}var uo=m(()=>{"use strict"});import{existsSync as yu,readFileSync as Ru,statSync as po}from"node:fs";import Sr from"node:path";function _u(e,r=process.env){let t=e?Su:bu,n=r.KYNVER_WORKER_GIT_PROBE_CACHE_TTL_MS?.trim();if(!n)return t;let o=Number(n);return Number.isFinite(o)&&o>=0?Math.floor(o):t}function vu(e){return e.baseCommit?.trim()||e.base?.trim()||"origin/main"}function At(e){try{return po(e).mtimeMs}catch{return-1}}function Eu(e){let r=Sr.join(e,".git");try{if(po(r).isDirectory())return r;let t=/^gitdir:\s*(.+)$/m.exec(Ru(r,"utf8"));return t?Sr.resolve(e,t[1].trim()):null}catch{return null}}function lo(e){let r=Eu(e);return[At(e),r?At(Sr.join(r,"HEAD")):-2,r?At(Sr.join(r,"index")):-2].join(":")}function co(e,r){return{changedFiles:Ue(e),gitAncestry:or(e,{base:r.base,baseCommit:r.baseCommit})}}function Cu(e,r){for(ie.delete(e),ie.set(e,r);ie.size>xu;){let t=ie.keys().next().value;if(t===void 0)break;ie.delete(t)}}function fo(e,r,t){let n=vu(r);if(!e||!e.trim())return $e.missingWorktree++,{changedFiles:[],gitAncestry:ve(n,"missing worktree path")};let o=`${e}\0${n}`;if(!yu(e))return ie.delete(o),$e.missingWorktree++,{changedFiles:[],gitAncestry:ve(n,`worktree no longer exists: ${e}`)};if(t.alive)return ie.delete(o),$e.liveProbes++,co(e,r);let s=t.ttlMs??_u(!!r.baseCommit?.trim()),i=t.now??Date.now(),a=lo(e),u=ie.get(o);if(s>0&&u&&u.fingerprint===a&&i<u.expiresAt)return $e.hits++,u.probe;$e.misses++;let l=co(e,r);if(s>0){let c=.8+.4*(t.random??Math.random)();Cu(o,{fingerprint:lo(e),expiresAt:i+Math.round(s*c),probe:l})}return l}var bu,Su,xu,ie,$e,mo=m(()=>{"use strict";H();bu=10*6e4,Su=60*6e4,xu=2048,ie=new Map,$e={hits:0,misses:0,liveProbes:0,missingWorktree:0}});function je(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function wu(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 Au(e){if(je(e.headCommit)||je(e.prUrl)||je(e.artifactBundlePath)||je(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&je(r.head))}function Ne(e){return wu(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:Au(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 go(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var xr=m(()=>{"use strict"});function Pt(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 ho(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function _r(e){let r=e.trim();if(!r)return null;let t=Pt(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let c=Pt(s[1]??"");c&&n.push(c)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let c=Pt(r.slice(i,a+1));c&&n.push(c)}if(n.length===0)return null;let u=n[n.length-1],l=ho(u);for(let c of n){let d=ho(c);d>l&&(u=c,l=d)}return u}var Ot=m(()=>{"use strict"});function ko(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:e.trim()||null}function yo(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Pu(e){return new Set(e.map(r=>yo(ko(r)??r)).filter(Boolean))}function Ro(e,r,t){let n=ko(e)??e;if(!n)return"unrelated";let o=yo(n);return Pu(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var bo=m(()=>{"use strict"});function De(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Ou(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function pe(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:De(e)}function vr(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function So(e){let r=null;if(typeof e=="string"){let o=_r(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=pe(String(s.prUrl??s.pr_url??"")),a=De(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:De(s.mergeCommit??s.merge_commit),reason:De(s.reason)})}return n}function xo(e,r){let t=[],n=pe(De(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=pe(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function _o(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(!Ou(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?pe(De(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?pe(r.targetPrUrls[0]):null):null;if(s){let d=xo(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let y of d)if(y!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${y} instead of canonical target ${s}`}}let f=So(n).find(y=>y.prUrl===s);if(!f||f.outcome!=="merged"&&!(f.reason?.trim()&&(f.outcome==="skipped"||f.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=So(n),a=new Map(i.map(d=>[vr(d.prUrl),d])),u=new Set(r.targetPrUrls.map(d=>vr(pe(d)??d)).filter(Boolean)),l=xo(t,n);if(r.landingOnly)for(let d of l){let p=a.get(vr(d)),g=Ro(d,r.targetPrUrls,p);if(!(g==="contract"||g==="support"))return u.size>0?{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${d}`}:{blocked:!0,reason:"unrelated_implementation_pr",detail:"Landing-only worker must not open new implementation PRs"}}if(r.targetPrUrls.length===0)return{blocked:!1};let c=[];for(let d of r.targetPrUrls){let p=vr(pe(d)??d),g=a.get(p);if(!g){c.push(p);continue}g.outcome!=="merged"&&!g.reason?.trim()&&c.push(p)}return c.length>0?{blocked:!0,reason:c.every(d=>a.has(d))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${c.join(", ")}`}:{blocked:!1}}function vo(e){if(e.blocked)return e.detail??e.reason}var Eo=m(()=>{"use strict";Ot();bo()});function Du(e){let r=Date.now();if(e.providerTerminalError||Rr(e.finalResult)||e.finalResult&&e.error?.trim()||He(e.error)||He(e.finalResult)){let o=e.error||(typeof e.finalResult=="string"?e.finalResult:"provider terminal error");return{state:"blocked",reason:wt(o)?.reason??`provider terminal error: ${o}`}}if(e.completionBlocker&&!Co(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&Tu(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=Ne(o);if(s.blocked){let i=go(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=_o({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=vo(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(Wu(e))return{state:"done",reason:"empty abandoned worker record"};let o=wt(e.error);if(o)return{state:"blocked",reason:o.reason};let s=ao({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let u=e.error?.trim();return{state:"needs_attention",reason:u?`${s.attentionReason} (${u})`:s.attentionReason}}let i=e.error?.trim(),a=Ct(i);return{state:"needs_attention",reason:i?`process exited without a final result${a?" (ran out of memory)":""}: ${i}`:s?.attentionReason??"process exited without a final result"}}if(e.heartbeatBlocker)return{state:"blocked",reason:`worker heartbeat reported blocker: ${e.heartbeatBlocker}`};let t=e.startedAt?Date.parse(e.startedAt):NaN;if(!e.firstEventAt&&e.stdoutBytes===0&&e.heartbeatBytes===0&&Number.isFinite(t)&&r-t>Iu)return{state:"needs_attention",reason:`no first stream event ${tt(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>Nu?{state:"stale",reason:`no log/event/heartbeat activity for ${tt(n)}s`}:{state:"ok",reason:"recent activity"}}function Co(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function Wu(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 Tu(e){let r=null;if(typeof e=="string"?r=_r(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 Mu(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??Dn(t))}function Er(e,r={}){let t=qn(e.stdoutPath),n=Oe(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Mu(e,t.finalResult,n),i=o?!1:J(e.pid),a=rr(e.stdoutPath),u=rr(e.stderrPath),l=rr(e.heartbeatPath),{changedFiles:c,gitAncestry:d}=fo(e.worktreePath,{base:r.base,baseCommit:r.baseCommit},{alive:i}),p=pn([t.lastEventAt,n.lastHeartbeatAt,tr(e.stdoutPath),tr(e.stderrPath),tr(e.heartbeatPath)]),g=i?null:_t(e.workerDir),f=s&&!Et(s)?s:null,y=t.error||!i&&!s&&nr(e.stderrPath,10).trim()||void 0,S=y||!i&&s&&!f&&nr(e.stderrPath,10).trim()||void 0,R=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,O=Co(R)?null:R,B=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,C=Du({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:u,heartbeatBytes:l,lastActivityAt:p,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:y,providerTerminalError:t.providerTerminalError,changedFiles:c,gitAncestry:d,completionBlocker:O,landingContract:B,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),xe=O||C.state==="blocked"?"blocked":o||C.state==="done"?"done":s?"exited":i?"running":"exited",I=e.stopClass&&e.stopClass!=="running"&&e.stopClass!=="finished"?e.stopClass:null,V=ro({alive:i,finalResult:s,error:S??null,stale:C.state==="stale",noRestartAt:e.noRestartAt??null,reconcileReason:e.reconcileReason??null,exit:g}),N=I&&!i&&!f?I:V,A=N==="running"||N==="finished"?null:(I===N?e.stopReason:void 0)??to({stopClass:N,exit:g,error:S??null,reconcileReason:e.reconcileReason??null});return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:xe,stopClass:N,stopReason:A,exit:g,attention:C,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:u,heartbeatBytes:l,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:p,currentTool:o?null:t.currentTool,heartbeatCount:n.heartbeatCount,lastHeartbeatAt:n.lastHeartbeatAt,lastHeartbeatPhase:n.lastHeartbeatPhase,lastHeartbeatSummary:n.lastHeartbeatSummary,heartbeatBlocker:n.heartbeatBlocker,timestampAnomalies:n.timestampAnomalies,finalResult:s,error:y,providerTerminalError:t.providerTerminalError,changedFiles:c,gitAncestry:d,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.provider??e.orchestrationAudit?.provider??null,usage:t.usage??null,boxKind:e.boxKind??null,boxId:e.boxId??null,runtimeId:e.runtimeId??null,personaSlug:e.personaSlug??null,dispatched:e.dispatched??null,localOnly:e.localOnly??null}}function fe(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function wo(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}var Iu,Nu,me=m(()=>{"use strict";hr();Zn();no();vt();br();so();uo();mo();xr();Eo();Ot();b();Iu=18e4,Nu=6e5});var Ao=m(()=>{"use strict";me();b()});function Po(e,r={}){let t=r.perWorkerMemBytes??It,n=r.memReserveBytes??Nt,o=r.memUtilization??Dt,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,Cr)}var It,Nt,Dt,Cr,Oo=m(()=>{"use strict";xn();ae();de();ur();wr();fr();se();gt();Ao();b();It=500*1024*1024,Nt=4*1024*1024*1024,Dt=.85,Cr=64});function Ge(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Wt(e){let r=e.config??{},t=e.env??process.env,n=Ge(r.perWorkerMemBytes,It),o=Ge(r.memReserveBytes,Nt),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):Dt)),i=Po(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:Ge(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let l=Ge(r.maxConcurrentWorkers,0)||null;if(l)return{configuredMaxWorkers:Math.min(l,Cr),autoCap:i,workerCapSource:"config"}}let u=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&Ge(t.KYNVER_MAX_WORKERS,0)||null;return u?{configuredMaxWorkers:Math.min(u,Cr),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var wr=m(()=>{"use strict";Oo()});import{homedir as Ku}from"node:os";import Uu from"node:path";var Io,Tt=m(()=>{"use strict";Io=Uu.join(Ku(),".kynver",".env")});var No=m(()=>{"use strict"});var Do=m(()=>{"use strict";No()});var Wo=m(()=>{"use strict"});var To=m(()=>{"use strict";b()});var Mt=m(()=>{"use strict";Do();Wo();To()});var Mo=m(()=>{"use strict"});var Ko=m(()=>{"use strict";Mo()});var Ar=m(()=>{"use strict";Tt();oe();ae();Mt();Ko()});var Fo=m(()=>{"use strict";de();de()});var Lo=m(()=>{"use strict";Tt();Mt();Ar()});var Kt=m(()=>{"use strict"});import{existsSync as Z,mkdirSync as Fu,readdirSync as Pr,renameSync as Ho,statSync as Lu}from"node:fs";import Q from"node:path";function jo(e){try{return Lu(e).isDirectory()}catch{return!1}}function Hu(e){if(!Z(e))return!0;for(let r of $o){let t=Q.join(e,r);if(Z(t)&&(!jo(t)||Pr(t).length>0))return!1}return!0}function $u(e){let r=Q.join(e,"runs");if(!Z(r)||!jo(r))return!1;for(let t of Pr(r,{withFileTypes:!0})){if(!t.isDirectory()||t.name==="runs")continue;let n=Q.join(r,t.name,"run.json");if(_(n,void 0)?.id)return!0}return!1}function ju(e){let r=Q.join(e,"runs");if(!Z(r))return!1;for(let t of Pr(r,{withFileTypes:!0})){if(!t.isDirectory())continue;if(_(Q.join(r,t.name,"run.json"),void 0)?.boxKind==="ghost")return!0}return!1}function Gu(e){let r=Q.join(e,"ghost");return Z(r)?!Z(Q.join(r,"runs")):ju(e)}function Go(e){return $u(e.sharedRoot)?Hu(e.forgeRoot)?Gu(e.sharedRoot)?{action:"blocked",blocker:"Forge legacy harness migration blocked: Ghost pool is co-hosted on this host (ghost namespace or ghost-attributed runs under ~/.kynver/harness). Drain in-flight Ghost runs from the shared root, or get operator sign-off for a fresh Forge cutover before enabling box-scoped isolation."}:{action:"migrate"}:{action:"none"}:{action:"none"}}function Yo(e,r){Fu(r,{recursive:!0});for(let t of $o){let n=Q.join(e,t),o=Q.join(r,t);if(Z(n)){if(Z(o)&&Pr(o).length>0)throw new Error(`Forge legacy harness migration failed: ${o} is not empty`);if(Z(o)){Ho(n,o);continue}Ho(n,o)}}}var $o,Vo=m(()=>{"use strict";b();$o=["runs","worktrees"]});import{existsSync as w}from"node:fs";import{homedir as Yu}from"node:os";import E from"node:path";function Ut(e=process.env){return e.HOME?.trim()||Yu()}function Bt(e=process.env){return E.join(Ut(e),".kynver","harness")}function Or(e){let r=E.resolve(j(e.trim()));for(;Vu.has(E.basename(r));)r=E.dirname(r);return r}function zu(e,r=process.env){return E.join(Bt(r),e)}function Ju(e=process.env){let r=Bt(e);if(w(E.join(r,"runs")))return!0;if(w(r)&&!w(E.join(r,"ghost"))&&!w(E.join(r,"forge")))return w(r);let t=E.join(Ut(e),zo);return w(t)}function Ir(e){let r=e.env??process.env,t=r.KYNVER_HARNESS_ROOT?.trim()||r.OPUS_HARNESS_ROOT?.trim();if(t)return{harnessRoot:Or(t),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:Or(n),source:"config"};let o=zu(e.boxKind,r);if(w(E.join(o,"runs"))||w(o)&&!Xu(o))return{harnessRoot:o,source:"box_scoped"};let i=Bt(r);if(e.boxKind==="forge"){let a=Go({sharedRoot:i,forgeRoot:o});if(a.action==="blocked")return{harnessRoot:o,source:"box_scoped",migrationBlocker:a.blocker};if(a.action==="migrate")return e.allowForgeLegacyMigration!==!1&&Yo(i,o),{harnessRoot:o,source:"legacy_migrated"}}if(e.boxKind==="ghost"&&Ju(r)){if(w(E.join(i,"runs")))return{harnessRoot:i,source:"legacy_shared"};if(w(i)&&!w(E.join(i,"ghost"))&&!w(E.join(i,"forge")))return{harnessRoot:i,source:"legacy_shared"};let u=E.join(Ut(r),zo);if(w(u))return{harnessRoot:u,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function Xu(e){if(!w(e))return!0;for(let r of["runs","worktrees"]){let t=E.join(e,r);if(w(t))return!1}return!0}var zo,Vu,Ft=m(()=>{"use strict";oe();Vo();zo=E.join(".openclaw","harness");Vu=new Set(["runs","worktrees"])});import Jo from"node:os";function Nr(e){return e?.trim()?e.trim():null}function qu(e,r){let t=r.trim().toLowerCase()||"host";return`${e}-${t}`.replace(/[^a-z0-9._-]+/g,"-")}function Zu(e){return e.KYNVER_DISPATCH_STRICT_IDENTITY==="1"||e.KYNVER_DISPATCH_STRICT_IDENTITY==="true"||e.KYNVER_DAEMON_STRICT_IDENTITY==="1"||e.KYNVER_DAEMON_STRICT_IDENTITY==="true"}function Dr(e=ge(),r=process.env,t={}){let n=Ce(r,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||Nr(r.KYNVER_BOX_KIND)),a=t.strict===!0||Zu(r);if((t.requireExplicitBoxKind||a)&&!i&&s.push("boxKind is not persisted in ~/.kynver/config.json and KYNVER_BOX_KIND is unset \u2014 run `kynver setup` (customers: boxKind=box) or `kynver setup --box-kind forge|ghost` for operator pools before dispatch"),n.slugInferenceBlocked&&!i){let y="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind";a||t.requireExplicitBoxKind?s.push(y):o.push(`${y} \u2014 defaulting box kind to box (customer), not forge/ghost`)}let u=Nr(e.runnerId),l=Nr(r.KYNVER_RUNTIME_ID)??Nr(r.OPENCLAW_RUNTIME_ID),c=u??l??qu(n.boxKind,Jo.hostname()),d=u?"config":l?"env":"derived";d==="derived"&&o.push(`runnerId not persisted \u2014 using derived id "${c}"; run \`kynver setup --box-kind ${n.boxKind}\` to persist runner identity`);let p=Wt({config:e,env:r,totalMemBytes:Jo.totalmem()}),g=ar(n.boxKind,p.configuredMaxWorkers??it(n.boxKind,p.autoCap)),f=Ir({boxKind:n.boxKind,configuredHarnessRoot:e.harnessRoot,env:r});return f.migrationBlocker&&s.push(f.migrationBlocker),s.length>0?{ok:!1,identity:null,errors:s,warnings:o}:{ok:!0,identity:{boxKind:n.boxKind,boxKindSource:n.source,runnerId:c,runnerIdSource:d,maxConcurrentWorkers:g,workerCapSource:p.workerCapSource,harnessRoot:f.harnessRoot,harnessRootSource:f.source},errors:s,warnings:o}}var Wr=m(()=>{"use strict";ae();de();ur();wr();Ft()});var qo=m(()=>{"use strict";sr();de();Fo();ae();Ar();Lo();st();Kt();Wr()});var tl,Om,Zo=m(()=>{"use strict";tl=["claude","cursor","codex","gemini","gemini-api","openai-compatible","venice"],Om=tl.join("|")});var Qo=m(()=>{"use strict";oe()});var es=m(()=>{"use strict";Qo()});var rs=m(()=>{"use strict"});var ts=m(()=>{"use strict";rs()});import{existsSync as ol,mkdirSync as ig,readFileSync as sl,writeFileSync as ag}from"node:fs";import{homedir as il,totalmem as lg}from"node:os";import Lt from"node:path";function al(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:j(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:j(e.defaultRepo.trim())}:{}}}function ss(e){let r=e.defaultRepo?.trim();return!r||e.defaultBase?.trim()||!yn(j(r))?e:{...e,defaultBase:kn}}function ul(){if(!ol(ns))return null;try{return JSON.parse(sl(ns,"utf8"))}catch{return null}}function ge(){let e=ul();return e?ss(al(e)):{}}var os,ns,wg,Ag,Pg,ae=m(()=>{"use strict";sr();oe();ot();bn();st();de();ur();wr();fr();Ar();qo();Zo();Wr();es();Kt();ts();os=Lt.join(il(),".kynver"),ns=Lt.join(os,"config.json"),wg=Lt.join(os,"credentials");Ag=500*1024*1024,Pg=4*1024*1024*1024});import Ht from"node:path";function W(e){return Or(e)}function ue(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return W(e);let r=ge(),t=r.harnessRoot?.trim();if(t)return W(t);let n=Dr(r,process.env);return n.identity?n.identity.harnessRoot:Ir({boxKind:"forge",configuredHarnessRoot:null}).harnessRoot}function X(e){return Ht.join(W(e),"runs")}function We(e){return Ht.join(W(e),"worktrees")}function An(){let e=ue();return{harnessRoot:e,runsDir:X(e),worktreesDir:We(e)}}function ft(e,r){return Ht.join(e,x(r))}var q=m(()=>{"use strict";ae();Ft();Wr();b()});q();import U from"node:path";xr();import Kr from"node:path";H();me();var $t=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function is(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of $t)if(r===t||r.startsWith(`${t}/`))return!0;return!1}function T(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!is(n)})}function he(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 Ye(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?T(e.changedFiles).length>0:!!(he(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}b();function Ve(e){return e.status||(e.status=Er(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function jt(e,r){if(e.status)return T(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):Ue(e.worktreePath);return T(t).length>0}function ll(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function Gt(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=ll(e);if(o&&!J(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):Ue(e.worktreePath),a=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main",l=r?.gitRevCache?.countAheadOfMain(e.worktreePath,a)===0?{checked:!0,base:a,relation:"synced"}:or(e.worktreePath,{base:e.run.base,baseCommit:e.run.baseCommit}),c={runId:e.runId,worker:e.workerName,pid:t.pid,alive:!1,status:t.status??(n?"done":"exited"),attention:{state:n?"done":"stale"},branch:t.branch,worktreePath:e.worktreePath,ownedPaths:t.ownedPaths,stdoutBytes:0,stderrBytes:0,heartbeatBytes:0,firstEventAt:null,lastEventAt:null,lastActivityAt:t.completionReportedAt??null,currentTool:null,heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,heartbeatBlocker:null,changedFiles:i,gitAncestry:l,finalResult:s,completionBlocker:typeof t.completionBlocker=="string"&&t.completionBlocker.trim()||null,prUrl:t.repairTargetPrUrl??t.taskPrUrl??he(s)};return e.status=c,c}return Ve(e)}me();se();gt();me();b();import cl from"node:path";var dl=new Set(["running","dispatching","pending","queued","needs_attention"]),ke=new Set(["completed","failed","cancelled","done"]);function ye(e){let r=mt(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=_(cl.join(Pe(e.id),"workers",x(i),"worker.json"),void 0);if(!a)continue;let u=Er(a,{base:e.base,baseCommit:e.baseCommit});if(u.alive&&!u.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),wo(u)&&(s=!0),u.finalResult&&u.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function as(){let e=[];for(let r of dt()){if(!dl.has(r.status))continue;let t=ye(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,pt(r),e.push({runId:r.id,from:n,to:t})}return e}me();hr();import{existsSync as Tr,mkdirSync as Rh,readdirSync as cs,renameSync as bh,statSync as pl}from"node:fs";import Re from"node:path";ae();sr();oe();H();hr();q();se();q();b();import le from"node:path";var ah=`${le.sep}runs${le.sep}runs${le.sep}`;function us(e){return{workerJsonPath:le.join(e,"worker.json"),stdoutPath:le.join(e,"stdout.jsonl"),stderrPath:le.join(e,"stderr.log"),heartbeatPath:le.join(e,"heartbeat.jsonl"),lastStatusPath:le.join(e,"last-status.json")}}b();ae();var $="<redacted>",Yt=`[^\\s"'\\\\,}\\]]`,lh=[[new RegExp(`\\b(?:postgres(?:ql)?|mysql|mongodb(?:\\+srv)?|redis|rediss):\\/\\/${Yt}+`,"gi"),$],[new RegExp(`\\b[a-z][a-z0-9+.-]*:\\/\\/[^\\s/@:"']+:[^\\s/@"']+@${Yt}+`,"gi"),$],[/\bkynver_u_[A-Za-z0-9_-]+/g,$],[/\bkyn_[A-Za-z0-9]{12,}/g,$],[/\bsk-ant-[A-Za-z0-9_-]+/g,$],[/\bsk-[A-Za-z0-9_-]{8,}/g,$],[/\bkr[a-z]1\.[A-Za-z0-9._~+/=-]{8,}/g,$],[/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{16,}/g,$],[/\bgithub_pat_[A-Za-z0-9_]{16,}/g,$],[/\b(Bearer|Basic)\s+(?!<redacted>)[A-Za-z0-9._~+/=-]{8,}/gi,`$1 ${$}`],[new RegExp(`(\\b(?:[A-Z0-9_]*(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD)|DATABASE_URL|KYNVER_DATABASE_URL)\\s*=\\s*)(?!<redacted>)${Yt}+`,"g"),`$1${$}`]];var ch=256*1024*1024;var ze=900*1e3,Ih=3600*1e3;function ds(e,r){let t=Re.resolve(e),n=Re.resolve(X(r)),o=Re.relative(n,t);return o!==".."&&!o.startsWith("..")&&!Re.isAbsolute(o)}function fl(e){if(!Tr(e))return[];try{return cs(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function ml(e){let r=Re.join(e,"workers");if(!Tr(r))return[];try{return cs(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function ls(e,r,t){if(!Tr(e))return!1;try{let n=r-pl(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function gl(e,r=Date.now(),t=ze){if(!Tr(e))return!1;let n=us(e),o=_(n.workerJsonPath,void 0);if(o?.status==="running"&&J(o.pid))return!0;let s=Oe(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(ls(n.stdoutPath,r,t)||ls(n.heartbeatPath,r,t))}function hl(e,r=Date.now(),t=ze){for(let n of ml(e))if(gl(Re.join(e,"workers",n),r,t))return!0;return!1}function ps(e,r=Date.now()){let t=new Set,n=X(e);for(let o of fl(n)){let s=Re.join(n,o);hl(s,r)&&t.add(`${e}\0${o}`)}return t}b();function kl(e,r=Date.now(),t=ze){let n=Oe(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function Te(e,r=Date.now(),t=ze){return J(e.pid)?!0:kl(e,r,t)}function yl(e,r){return r?r.runTerminalCache.derive(e.run):ye(e.run)}function ee(e,r=Date.now()){return Te(e.worker,r)}function Vt(e,r){return ke.has(e.run.status)?!1:yl(e,r)!==null}function fs(e,r,t=Date.now()){if(ee(e,t))return!0;if(ke.has(e.run.status)||Vt(e,r))return!1;let n=Ve(e);return fe(n)?!1:!!ee(e,t)}xr();me();function ms(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(ee(e))return!0;let n=r??Ve(e);return!!(!fe(n)||Ye(n)||T(n.changedFiles).length>0||Ne({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:he(n.finalResult)}).blocked)}H();b();import{existsSync as hs,mkdirSync as Rl,writeFileSync as gs}from"node:fs";import Mr from"node:path";function ks(e,r,t){return Mr.join(e,"salvage",x(r),x(t))}function ys(e){return hs(Mr.join(ks(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function Rs(e){let r=ks(e.harnessRoot,e.indexed.runId,e.indexed.workerName);Rl(r,{recursive:!0});let t=Mr.join(r,"salvage.patch"),n=!1;if(hs(e.indexed.worktreePath)){let s=P(e.indexed.worktreePath,["diff","HEAD"]),i=P(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(u=>u.trim()).join(`
|
|
75
|
+
`});function Et(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e.handoffState;return typeof r=="string"&&pu.has(r)}function Ct(e){return!!(e&&du.test(e))}function ro(e){if(e.noRestartAt?.trim())return"stopped_by_hand";if(e.finalResult&&!Et(e.finalResult))return"finished";if(e.alive)return e.stale?"stuck":"running";let r=e.error?.trim()??"",t=e.exit??null;if(t?.oomEvidence||Ct(r))return"oom";let n=e.reconcileReason??"";return/reconciled stale worker/i.test(n)?"stuck":eo.test(r)||eo.test(n)?"timed_out":t&&t.exitCode===0&&!t.signal&&!t.spawnError?"no_report":t&&(t.signal||t.spawnError||t.exitCode!==null&&t.exitCode!==0)||r?"crashed":"no_report"}function to(e){let r=[fu(e.stopClass)],t=Qn(e.exit);t&&r.push(t),e.exit?.oomEvidence&&r.push(`evidence: ${e.exit.oomEvidence.detail}`),e.stopClass==="no_report"&&e.exit?.exitCode===0&&r.push("it exited normally but never sent a final report");let n=e.error?.replace(/\s+/g," ").trim();return n?r.push(`last output: ${n.length>300?`${n.slice(-300)}`:n}`):e.stopClass==="stuck"&&e.reconcileReason&&r.push(e.reconcileReason),r.join(" \u2014 ").slice(0,600)}function fu(e){switch(e){case"finished":return"finished";case"oom":return"ran out of memory";case"crashed":return"crashed";case"no_report":return"stopped without reporting";case"timed_out":return"timed out";case"stuck":return"stuck (no progress)";case"stopped_by_hand":return"stopped on purpose";default:return"running"}}var du,eo,pu,no=m(()=>{"use strict";se();b();vt();du=/javascript heap out of memory|reached heap limit|allocation failed - process out of memory|\bout of memory\b|\boom[- ]?kill(?:ed|er)?\b|std::bad_alloc|cannot allocate memory|\benomem\b|exit(?:ed)? (?:with )?(?:code|status) 137\b|killed process \d+/i,eo=/\btimed? ?out\b|\btimeout\b|deadline exceeded/i,pu=new Set(["exited_without_final_result","exited_without_complete_heartbeat","exit_failure"])});function oo(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function wt(e){let r=(e??"").trim();if(!r)return null;if(He(r))return{blocked:!0,reason:`provider authentication failed: ${oo(r)}`};for(let t of mu)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${oo(r)}`};return null}var mu,so=m(()=>{"use strict";br();bt();mu=[{test:/(?:claude provider refuses to spawn: worker prompt is empty after argv assembly|Input must be provided (?:either )?through stdin or as a prompt argument)/i,label:"provider prompt delivery failed"},{test:Gn,label:"Claude Code doesn't know this model (update Claude Code with `claude update`, or pick another model)"},{test:/\b(?:invalid|unknown|unsupported|unrecognized)\b[^.\n]*\bmodel\b/i,label:"provider rejected the requested model"},{test:/\bmodel\b[^.\n]*\b(?:not\s+(?:found|supported|available|recognized|valid)|is\s+not\s+valid|does\s+not\s+exist)/i,label:"provider rejected the requested model"},{test:/\b(?:did you mean|available models|choose (?:a|one of)|supported models)\b/i,label:"provider rejected the requested model"},{test:/model preflight failed/i,label:"model/provider preflight failed"},{test:/\b(?:command not found|ENOENT|is the .*CLI on PATH|executable not found|no such file or directory)\b/i,label:"provider CLI is missing or not on PATH"},{test:/\bfailed to spawn\b/i,label:"provider failed to spawn the worker process"},{test:/\b(?:not logged in|unauthorized|authentication (?:failed|required)|invalid api key|missing api key|401)\b/i,label:"provider authentication failed"},{test:/\b(?:out of usage|increase limits?|switch to auto|ask your admin to increase your limit|usage limits?|quota exceeded|insufficient_quota|credits? exhausted|billing|payment required)\b/i,label:"provider quota exhausted"}]});function io(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function gu(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 hu(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:io(e.head)}function ku(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 ao(e){if(e.alive||gu(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=io(e.headCommit)??hu(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:ku(s,r,t)}}var uo=m(()=>{"use strict"});import{existsSync as yu,readFileSync as Ru,statSync as po}from"node:fs";import Sr from"node:path";function _u(e,r=process.env){let t=e?Su:bu,n=r.KYNVER_WORKER_GIT_PROBE_CACHE_TTL_MS?.trim();if(!n)return t;let o=Number(n);return Number.isFinite(o)&&o>=0?Math.floor(o):t}function vu(e){return e.baseCommit?.trim()||e.base?.trim()||"origin/main"}function At(e){try{return po(e).mtimeMs}catch{return-1}}function Eu(e){let r=Sr.join(e,".git");try{if(po(r).isDirectory())return r;let t=/^gitdir:\s*(.+)$/m.exec(Ru(r,"utf8"));return t?Sr.resolve(e,t[1].trim()):null}catch{return null}}function lo(e){let r=Eu(e);return[At(e),r?At(Sr.join(r,"HEAD")):-2,r?At(Sr.join(r,"index")):-2].join(":")}function co(e,r){return{changedFiles:Ue(e),gitAncestry:or(e,{base:r.base,baseCommit:r.baseCommit})}}function Cu(e,r){for(ie.delete(e),ie.set(e,r);ie.size>xu;){let t=ie.keys().next().value;if(t===void 0)break;ie.delete(t)}}function fo(e,r,t){let n=vu(r);if(!e||!e.trim())return $e.missingWorktree++,{changedFiles:[],gitAncestry:ve(n,"missing worktree path")};let o=`${e}\0${n}`;if(!yu(e))return ie.delete(o),$e.missingWorktree++,{changedFiles:[],gitAncestry:ve(n,`worktree no longer exists: ${e}`)};if(t.alive)return ie.delete(o),$e.liveProbes++,co(e,r);let s=t.ttlMs??_u(!!r.baseCommit?.trim()),i=t.now??Date.now(),a=lo(e),u=ie.get(o);if(s>0&&u&&u.fingerprint===a&&i<u.expiresAt)return $e.hits++,u.probe;$e.misses++;let l=co(e,r);if(s>0){let c=.8+.4*(t.random??Math.random)();Cu(o,{fingerprint:lo(e),expiresAt:i+Math.round(s*c),probe:l})}return l}var bu,Su,xu,ie,$e,mo=m(()=>{"use strict";H();bu=10*6e4,Su=60*6e4,xu=2048,ie=new Map,$e={hits:0,misses:0,liveProbes:0,missingWorktree:0}});function je(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function wu(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 Au(e){if(je(e.headCommit)||je(e.prUrl)||je(e.artifactBundlePath)||je(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&je(r.head))}function Ne(e){return wu(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:Au(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 go(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var xr=m(()=>{"use strict"});function Pt(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 ho(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function _r(e){let r=e.trim();if(!r)return null;let t=Pt(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let c=Pt(s[1]??"");c&&n.push(c)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let c=Pt(r.slice(i,a+1));c&&n.push(c)}if(n.length===0)return null;let u=n[n.length-1],l=ho(u);for(let c of n){let d=ho(c);d>l&&(u=c,l=d)}return u}var Ot=m(()=>{"use strict"});function ko(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:e.trim()||null}function yo(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Pu(e){return new Set(e.map(r=>yo(ko(r)??r)).filter(Boolean))}function Ro(e,r,t){let n=ko(e)??e;if(!n)return"unrelated";let o=yo(n);return Pu(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var bo=m(()=>{"use strict"});function De(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Ou(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function pe(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:De(e)}function vr(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function So(e){let r=null;if(typeof e=="string"){let o=_r(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=pe(String(s.prUrl??s.pr_url??"")),a=De(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:De(s.mergeCommit??s.merge_commit),reason:De(s.reason)})}return n}function xo(e,r){let t=[],n=pe(De(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=pe(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function _o(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(!Ou(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?pe(De(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?pe(r.targetPrUrls[0]):null):null;if(s){let d=xo(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let y of d)if(y!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${y} instead of canonical target ${s}`}}let f=So(n).find(y=>y.prUrl===s);if(!f||f.outcome!=="merged"&&!(f.reason?.trim()&&(f.outcome==="skipped"||f.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=So(n),a=new Map(i.map(d=>[vr(d.prUrl),d])),u=new Set(r.targetPrUrls.map(d=>vr(pe(d)??d)).filter(Boolean)),l=xo(t,n);if(r.landingOnly)for(let d of l){let p=a.get(vr(d)),g=Ro(d,r.targetPrUrls,p);if(!(g==="contract"||g==="support"))return u.size>0?{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${d}`}:{blocked:!0,reason:"unrelated_implementation_pr",detail:"Landing-only worker must not open new implementation PRs"}}if(r.targetPrUrls.length===0)return{blocked:!1};let c=[];for(let d of r.targetPrUrls){let p=vr(pe(d)??d),g=a.get(p);if(!g){c.push(p);continue}g.outcome!=="merged"&&!g.reason?.trim()&&c.push(p)}return c.length>0?{blocked:!0,reason:c.every(d=>a.has(d))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${c.join(", ")}`}:{blocked:!1}}function vo(e){if(e.blocked)return e.detail??e.reason}var Eo=m(()=>{"use strict";Ot();bo()});function Du(e){let r=Date.now();if(e.providerTerminalError||Rr(e.finalResult)||e.finalResult&&e.error?.trim()||He(e.error)||He(e.finalResult)){let o=e.error||(typeof e.finalResult=="string"?e.finalResult:"provider terminal error");return{state:"blocked",reason:wt(o)?.reason??`provider terminal error: ${o}`}}if(e.completionBlocker&&!Co(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&Tu(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=Ne(o);if(s.blocked){let i=go(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=_o({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=vo(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(Wu(e))return{state:"done",reason:"empty abandoned worker record"};let o=wt(e.error);if(o)return{state:"blocked",reason:o.reason};let s=ao({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let u=e.error?.trim();return{state:"needs_attention",reason:u?`${s.attentionReason} (${u})`:s.attentionReason}}let i=e.error?.trim(),a=Ct(i);return{state:"needs_attention",reason:i?`process exited without a final result${a?" (ran out of memory)":""}: ${i}`:s?.attentionReason??"process exited without a final result"}}if(e.heartbeatBlocker)return{state:"blocked",reason:`worker heartbeat reported blocker: ${e.heartbeatBlocker}`};let t=e.startedAt?Date.parse(e.startedAt):NaN;if(!e.firstEventAt&&e.stdoutBytes===0&&e.heartbeatBytes===0&&Number.isFinite(t)&&r-t>Iu)return{state:"needs_attention",reason:`no first stream event ${tt(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>Nu?{state:"stale",reason:`no log/event/heartbeat activity for ${tt(n)}s`}:{state:"ok",reason:"recent activity"}}function Co(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function Wu(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 Tu(e){let r=null;if(typeof e=="string"?r=_r(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 Mu(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??Dn(t))}function Er(e,r={}){let t=qn(e.stdoutPath),n=Oe(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Mu(e,t.finalResult,n),i=o?!1:J(e.pid),a=rr(e.stdoutPath),u=rr(e.stderrPath),l=rr(e.heartbeatPath),{changedFiles:c,gitAncestry:d}=fo(e.worktreePath,{base:r.base,baseCommit:r.baseCommit},{alive:i}),p=pn([t.lastEventAt,n.lastHeartbeatAt,tr(e.stdoutPath),tr(e.stderrPath),tr(e.heartbeatPath)]),g=i?null:_t(e.workerDir),f=s&&!Et(s)?s:null,y=t.error||!i&&!s&&nr(e.stderrPath,10).trim()||void 0,S=y||!i&&s&&!f&&nr(e.stderrPath,10).trim()||void 0,R=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,O=Co(R)?null:R,B=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,C=Du({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:u,heartbeatBytes:l,lastActivityAt:p,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:y,providerTerminalError:t.providerTerminalError,changedFiles:c,gitAncestry:d,completionBlocker:O,landingContract:B,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),xe=O||C.state==="blocked"?"blocked":o||C.state==="done"?"done":s?"exited":i?"running":"exited",I=e.stopClass&&e.stopClass!=="running"&&e.stopClass!=="finished"?e.stopClass:null,V=ro({alive:i,finalResult:s,error:S??null,stale:C.state==="stale",noRestartAt:e.noRestartAt??null,reconcileReason:e.reconcileReason??null,exit:g}),N=I&&!i&&!f?I:V,A=N==="running"||N==="finished"?null:(I===N?e.stopReason:void 0)??to({stopClass:N,exit:g,error:S??null,reconcileReason:e.reconcileReason??null});return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:xe,stopClass:N,stopReason:A,exit:g,attention:C,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:u,heartbeatBytes:l,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:p,currentTool:o?null:t.currentTool,heartbeatCount:n.heartbeatCount,lastHeartbeatAt:n.lastHeartbeatAt,lastHeartbeatPhase:n.lastHeartbeatPhase,lastHeartbeatSummary:n.lastHeartbeatSummary,heartbeatBlocker:n.heartbeatBlocker,timestampAnomalies:n.timestampAnomalies,finalResult:s,error:y,providerTerminalError:t.providerTerminalError,changedFiles:c,gitAncestry:d,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.provider??e.orchestrationAudit?.provider??null,usage:t.usage??null,boxKind:e.boxKind??null,boxId:e.boxId??null,runtimeId:e.runtimeId??null,personaSlug:e.personaSlug??null,dispatched:e.dispatched??null,localOnly:e.localOnly??null}}function fe(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function wo(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}var Iu,Nu,me=m(()=>{"use strict";hr();Zn();no();vt();br();so();uo();mo();xr();Eo();Ot();b();Iu=18e4,Nu=6e5});var Ao=m(()=>{"use strict";me();b()});function Po(e,r={}){let t=r.perWorkerMemBytes??It,n=r.memReserveBytes??Nt,o=r.memUtilization??Dt,s=Math.max(0,Math.floor(e*o)-n),i=Math.max(1,Math.floor(s/t));return Math.min(i,Cr)}var It,Nt,Dt,Cr,Oo=m(()=>{"use strict";xn();ae();de();ur();wr();fr();se();gt();Ao();b();It=500*1024*1024,Nt=4*1024*1024*1024,Dt=.85,Cr=64});function Ge(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Wt(e){let r=e.config??{},t=e.env??process.env,n=Ge(r.perWorkerMemBytes,It),o=Ge(r.memReserveBytes,Nt),s=Math.min(1,Math.max(.1,Number(r.memUtilization)>0?Number(r.memUtilization):Dt)),i=Po(e.totalMemBytes,{perWorkerMemBytes:n,memReserveBytes:o,memUtilization:s});if(e.configuredMaxWorkersOverride!==void 0&&e.configuredMaxWorkersOverride!==null)return{configuredMaxWorkers:Ge(e.configuredMaxWorkersOverride,i),autoCap:i,workerCapSource:"workspace_override"};if(r.maxConcurrentWorkers!==void 0&&r.maxConcurrentWorkers!==null){let l=Ge(r.maxConcurrentWorkers,0)||null;if(l)return{configuredMaxWorkers:Math.min(l,Cr),autoCap:i,workerCapSource:"config"}}let u=(t.KYNVER_MAX_WORKERS_INTENTIONAL==="1"||t.KYNVER_MAX_WORKERS_INTENTIONAL==="true")&&t.KYNVER_MAX_WORKERS&&Ge(t.KYNVER_MAX_WORKERS,0)||null;return u?{configuredMaxWorkers:Math.min(u,Cr),autoCap:i,workerCapSource:"env"}:{configuredMaxWorkers:null,autoCap:i,workerCapSource:"auto"}}var wr=m(()=>{"use strict";Oo()});import{homedir as Ku}from"node:os";import Uu from"node:path";var Io,Tt=m(()=>{"use strict";Io=Uu.join(Ku(),".kynver",".env")});var No=m(()=>{"use strict"});var Do=m(()=>{"use strict";No()});var Wo=m(()=>{"use strict"});var To=m(()=>{"use strict";b()});var Mt=m(()=>{"use strict";Do();Wo();To()});var Mo=m(()=>{"use strict"});var Ko=m(()=>{"use strict";Mo()});var Ar=m(()=>{"use strict";Tt();oe();ae();Mt();Ko()});var Fo=m(()=>{"use strict";de();de()});var Lo=m(()=>{"use strict";Tt();Mt();Ar()});var Kt=m(()=>{"use strict"});import{existsSync as Z,mkdirSync as Fu,readdirSync as Pr,renameSync as Ho,statSync as Lu}from"node:fs";import Q from"node:path";function jo(e){try{return Lu(e).isDirectory()}catch{return!1}}function Hu(e){if(!Z(e))return!0;for(let r of $o){let t=Q.join(e,r);if(Z(t)&&(!jo(t)||Pr(t).length>0))return!1}return!0}function $u(e){let r=Q.join(e,"runs");if(!Z(r)||!jo(r))return!1;for(let t of Pr(r,{withFileTypes:!0})){if(!t.isDirectory()||t.name==="runs")continue;let n=Q.join(r,t.name,"run.json");if(_(n,void 0)?.id)return!0}return!1}function ju(e){let r=Q.join(e,"runs");if(!Z(r))return!1;for(let t of Pr(r,{withFileTypes:!0})){if(!t.isDirectory())continue;if(_(Q.join(r,t.name,"run.json"),void 0)?.boxKind==="ghost")return!0}return!1}function Gu(e){let r=Q.join(e,"ghost");return Z(r)?!Z(Q.join(r,"runs")):ju(e)}function Go(e){return $u(e.sharedRoot)?Hu(e.forgeRoot)?Gu(e.sharedRoot)?{action:"blocked",blocker:"Forge legacy harness migration blocked: Ghost pool is co-hosted on this host (ghost namespace or ghost-attributed runs under ~/.kynver/harness). Drain in-flight Ghost runs from the shared root, or get operator sign-off for a fresh Forge cutover before enabling box-scoped isolation."}:{action:"migrate"}:{action:"none"}:{action:"none"}}function Yo(e,r){Fu(r,{recursive:!0});for(let t of $o){let n=Q.join(e,t),o=Q.join(r,t);if(Z(n)){if(Z(o)&&Pr(o).length>0)throw new Error(`Forge legacy harness migration failed: ${o} is not empty`);if(Z(o)){Ho(n,o);continue}Ho(n,o)}}}var $o,Vo=m(()=>{"use strict";b();$o=["runs","worktrees"]});import{existsSync as w}from"node:fs";import{homedir as Yu}from"node:os";import E from"node:path";function Ut(e=process.env){return e.HOME?.trim()||Yu()}function Bt(e=process.env){return E.join(Ut(e),".kynver","harness")}function Or(e){let r=E.resolve(j(e.trim()));for(;Vu.has(E.basename(r));)r=E.dirname(r);return r}function zu(e,r=process.env){return E.join(Bt(r),e)}function Ju(e=process.env){let r=Bt(e);if(w(E.join(r,"runs")))return!0;if(w(r)&&!w(E.join(r,"ghost"))&&!w(E.join(r,"forge")))return w(r);let t=E.join(Ut(e),zo);return w(t)}function Ir(e){let r=e.env??process.env,t=r.KYNVER_HARNESS_ROOT?.trim()||r.OPUS_HARNESS_ROOT?.trim();if(t)return{harnessRoot:Or(t),source:"env"};let n=e.configuredHarnessRoot?.trim();if(n)return{harnessRoot:Or(n),source:"config"};let o=zu(e.boxKind,r);if(w(E.join(o,"runs"))||w(o)&&!Xu(o))return{harnessRoot:o,source:"box_scoped"};let i=Bt(r);if(e.boxKind==="forge"){let a=Go({sharedRoot:i,forgeRoot:o});if(a.action==="blocked")return{harnessRoot:o,source:"box_scoped",migrationBlocker:a.blocker};if(a.action==="migrate")return e.allowForgeLegacyMigration!==!1&&Yo(i,o),{harnessRoot:o,source:"legacy_migrated"}}if(e.boxKind==="ghost"&&Ju(r)){if(w(E.join(i,"runs")))return{harnessRoot:i,source:"legacy_shared"};if(w(i)&&!w(E.join(i,"ghost"))&&!w(E.join(i,"forge")))return{harnessRoot:i,source:"legacy_shared"};let u=E.join(Ut(r),zo);if(w(u))return{harnessRoot:u,source:"legacy_shared"}}return{harnessRoot:o,source:"box_scoped"}}function Xu(e){if(!w(e))return!0;for(let r of["runs","worktrees"]){let t=E.join(e,r);if(w(t))return!1}return!0}var zo,Vu,Ft=m(()=>{"use strict";oe();Vo();zo=E.join(".openclaw","harness");Vu=new Set(["runs","worktrees"])});import Jo from"node:os";function Nr(e){return e?.trim()?e.trim():null}function qu(e,r){let t=r.trim().toLowerCase()||"host";return`${e}-${t}`.replace(/[^a-z0-9._-]+/g,"-")}function Zu(e){return e.KYNVER_DISPATCH_STRICT_IDENTITY==="1"||e.KYNVER_DISPATCH_STRICT_IDENTITY==="true"||e.KYNVER_DAEMON_STRICT_IDENTITY==="1"||e.KYNVER_DAEMON_STRICT_IDENTITY==="true"}function Dr(e=ge(),r=process.env,t={}){let n=Ce(r,e),o=[...n.warnings],s=[],i=!!(e.boxKind?.trim()||Nr(r.KYNVER_BOX_KIND)),a=t.strict===!0||Zu(r);if((t.requireExplicitBoxKind||a)&&!i&&s.push("boxKind is not persisted in ~/.kynver/config.json and KYNVER_BOX_KIND is unset \u2014 run `kynver setup` (customers: boxKind=box) or `kynver setup --box-kind forge|ghost` for operator pools before dispatch"),n.slugInferenceBlocked&&!i){let y="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind";a||t.requireExplicitBoxKind?s.push(y):o.push(`${y} \u2014 defaulting box kind to box (customer), not forge/ghost`)}let u=Nr(e.runnerId),l=Nr(r.KYNVER_RUNTIME_ID)??Nr(r.OPENCLAW_RUNTIME_ID),c=u??l??qu(n.boxKind,Jo.hostname()),d=u?"config":l?"env":"derived";d==="derived"&&o.push(`runnerId not persisted \u2014 using derived id "${c}"; run \`kynver setup --box-kind ${n.boxKind}\` to persist runner identity`);let p=Wt({config:e,env:r,totalMemBytes:Jo.totalmem()}),g=ar(n.boxKind,p.configuredMaxWorkers??it(n.boxKind,p.autoCap)),f=Ir({boxKind:n.boxKind,configuredHarnessRoot:e.harnessRoot,env:r});return f.migrationBlocker&&s.push(f.migrationBlocker),s.length>0?{ok:!1,identity:null,errors:s,warnings:o}:{ok:!0,identity:{boxKind:n.boxKind,boxKindSource:n.source,runnerId:c,runnerIdSource:d,maxConcurrentWorkers:g,workerCapSource:p.workerCapSource,harnessRoot:f.harnessRoot,harnessRootSource:f.source},errors:s,warnings:o}}var Wr=m(()=>{"use strict";ae();de();ur();wr();Ft()});var qo=m(()=>{"use strict";sr();de();Fo();ae();Ar();Lo();st();Kt();Wr()});var tl,Om,Zo=m(()=>{"use strict";tl=["claude","cursor","codex","gemini","gemini-api","openai-compatible","venice"],Om=tl.join("|")});var Qo=m(()=>{"use strict";oe()});var es=m(()=>{"use strict";Qo()});var rs=m(()=>{"use strict"});var ts=m(()=>{"use strict";rs()});import{existsSync as ol,mkdirSync as ig,readFileSync as sl,writeFileSync as ag}from"node:fs";import{homedir as il,totalmem as lg}from"node:os";import Lt from"node:path";function al(e){return{...e,...e.harnessRoot?.trim()?{harnessRoot:j(e.harnessRoot.trim())}:{},...e.defaultRepo?.trim()?{defaultRepo:j(e.defaultRepo.trim())}:{}}}function ss(e){let r=e.defaultRepo?.trim();return!r||e.defaultBase?.trim()||!yn(j(r))?e:{...e,defaultBase:kn}}function ul(){if(!ol(ns))return null;try{return JSON.parse(sl(ns,"utf8"))}catch{return null}}function ge(){let e=ul();return e?ss(al(e)):{}}var os,ns,wg,Ag,Pg,ae=m(()=>{"use strict";sr();oe();ot();bn();st();de();ur();wr();fr();Ar();qo();Zo();Wr();es();Kt();ts();os=Lt.join(il(),".kynver"),ns=Lt.join(os,"config.json"),wg=Lt.join(os,"credentials");Ag=500*1024*1024,Pg=4*1024*1024*1024});import Ht from"node:path";function W(e){return Or(e)}function ue(){let e=process.env.KYNVER_HARNESS_ROOT||process.env.OPUS_HARNESS_ROOT;if(e)return W(e);let r=ge(),t=r.harnessRoot?.trim();if(t)return W(t);let n=Dr(r,process.env);return n.identity?n.identity.harnessRoot:Ir({boxKind:"forge",configuredHarnessRoot:null}).harnessRoot}function X(e){return Ht.join(W(e),"runs")}function We(e){return Ht.join(W(e),"worktrees")}function An(){let e=ue();return{harnessRoot:e,runsDir:X(e),worktreesDir:We(e)}}function ft(e,r){return Ht.join(e,x(r))}var q=m(()=>{"use strict";ae();Ft();Wr();b()});q();import U from"node:path";xr();import Kr from"node:path";H();me();var $t=[".next",".turbo","dist","build",".cache","node_modules/.cache"];function is(e){let r=e.replace(/\\/g,"/").replace(/\/+$/,"");if(r==="node_modules"||r.startsWith("node_modules/"))return!0;for(let t of $t)if(r===t||r.startsWith(`${t}/`))return!0;return!1}function T(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!is(n)})}function he(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 Ye(e){let r=e.gitAncestry?.relation;return r==="merged"||r==="synced"?T(e.changedFiles).length>0:!!(he(e.finalResult)||r==="ahead"||r==="diverged"||e.changedFiles.length>0&&e.finalResult)}b();function Ve(e){return e.status||(e.status=Er(e.worker,{base:e.run.base,baseCommit:e.run.baseCommit})),e.status}function jt(e,r){if(e.status)return T(e.status.changedFiles).length>0;let t=r?r.porcelain(e.worktreePath):Ue(e.worktreePath);return T(t).length>0}function ll(e){let r=e.worker.completionSnapshot?.finalResult;return r??(e.worker.taskPrUrl?{prUrl:e.worker.taskPrUrl}:null)}function Gt(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=ll(e);if(o&&!J(t.pid)){let i=r?.gitStatusCache?r.gitStatusCache.porcelain(e.worktreePath):Ue(e.worktreePath),a=e.run.baseCommit?.trim()||e.run.base?.trim()||"origin/main",l=r?.gitRevCache?.countAheadOfMain(e.worktreePath,a)===0?{checked:!0,base:a,relation:"synced"}:or(e.worktreePath,{base:e.run.base,baseCommit:e.run.baseCommit}),c={runId:e.runId,worker:e.workerName,pid:t.pid,alive:!1,status:t.status??(n?"done":"exited"),attention:{state:n?"done":"stale"},branch:t.branch,worktreePath:e.worktreePath,ownedPaths:t.ownedPaths,stdoutBytes:0,stderrBytes:0,heartbeatBytes:0,firstEventAt:null,lastEventAt:null,lastActivityAt:t.completionReportedAt??null,currentTool:null,heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,heartbeatBlocker:null,changedFiles:i,gitAncestry:l,finalResult:s,completionBlocker:typeof t.completionBlocker=="string"&&t.completionBlocker.trim()||null,prUrl:t.repairTargetPrUrl??t.taskPrUrl??he(s)};return e.status=c,c}return Ve(e)}me();se();gt();me();b();import cl from"node:path";var dl=new Set(["running","dispatching","pending","queued","needs_attention"]),ke=new Set(["completed","failed","cancelled","done"]);function ye(e){let r=mt(e);if(r.length===0)return"failed";let t=!1,n=!1,o=!1,s=!1;for(let i of r){let a=_(cl.join(Pe(e.id),"workers",x(i),"worker.json"),void 0);if(!a)continue;let u=Er(a,{base:e.base,baseCommit:e.baseCommit});if(u.alive&&!u.finalResult){t=!0;break}typeof a.completionBlocker=="string"&&a.completionBlocker&&(o=!0),wo(u)&&(s=!0),u.finalResult&&u.attention.state==="done"&&(n=!0)}return t||o||s?null:n?"completed":"failed"}function as(){let e=[];for(let r of dt()){if(!dl.has(r.status))continue;let t=ye(r);if(!t||t===r.status)continue;let n=r.status;r.status=t,pt(r),e.push({runId:r.id,from:n,to:t})}return e}me();hr();import{existsSync as Tr,mkdirSync as Rh,readdirSync as cs,renameSync as bh,statSync as pl}from"node:fs";import Re from"node:path";ae();sr();oe();H();hr();q();se();q();b();import le from"node:path";var ah=`${le.sep}runs${le.sep}runs${le.sep}`;function us(e){return{workerJsonPath:le.join(e,"worker.json"),stdoutPath:le.join(e,"stdout.jsonl"),stderrPath:le.join(e,"stderr.log"),heartbeatPath:le.join(e,"heartbeat.jsonl"),lastStatusPath:le.join(e,"last-status.json")}}b();ae();var $="<redacted>",Yt=`[^\\s"'\\\\,}\\]]`,lh=[[new RegExp(`\\b(?:postgres(?:ql)?|mysql|mongodb(?:\\+srv)?|redis|rediss):\\/\\/${Yt}+`,"gi"),$],[new RegExp(`\\b[a-z][a-z0-9+.-]*:\\/\\/[^\\s/@:"']+:[^\\s/@"']+@${Yt}+`,"gi"),$],[/\bkynver_u_[A-Za-z0-9_-]+/g,$],[/\bkyn_[A-Za-z0-9]{12,}/g,$],[/\bsk-ant-[A-Za-z0-9_-]+/g,$],[/\bsk-[A-Za-z0-9_-]{8,}/g,$],[/\bkr[a-z]1\.[A-Za-z0-9._~+/=-]{8,}/g,$],[/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{16,}/g,$],[/\bgithub_pat_[A-Za-z0-9_]{16,}/g,$],[/\b([Bb]earer|BEARER|[Bb]asic|BASIC)\s+(?!<redacted>)(?![A-Za-z][a-z]{0,14}(?:-[A-Za-z][a-z]{0,14})*(?![A-Za-z0-9_~+/=-]|\.[A-Za-z0-9_~+/=-]))[A-Za-z0-9._~+/=-]{8,}/g,`$1 ${$}`],[new RegExp(`(\\b(?:[A-Z0-9_]*(?:API_KEY|APIKEY|TOKEN|SECRET|PASSWORD)|DATABASE_URL|KYNVER_DATABASE_URL)\\s*=\\s*)(?!<redacted>)${Yt}+`,"g"),`$1${$}`]];var ch=256*1024*1024;var ze=900*1e3,Ih=3600*1e3;function ds(e,r){let t=Re.resolve(e),n=Re.resolve(X(r)),o=Re.relative(n,t);return o!==".."&&!o.startsWith("..")&&!Re.isAbsolute(o)}function fl(e){if(!Tr(e))return[];try{return cs(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&r.name!=="runs").map(r=>r.name)}catch{return[]}}function ml(e){let r=Re.join(e,"workers");if(!Tr(r))return[];try{return cs(r,{withFileTypes:!0}).filter(t=>t.isDirectory()).map(t=>t.name)}catch{return[]}}function ls(e,r,t){if(!Tr(e))return!1;try{let n=r-pl(e).mtimeMs;return Number.isFinite(n)&&n>=0&&n<t}catch{return!1}}function gl(e,r=Date.now(),t=ze){if(!Tr(e))return!1;let n=us(e),o=_(n.workerJsonPath,void 0);if(o?.status==="running"&&J(o.pid))return!0;let s=Oe(n.heartbeatPath);if(s.lastHeartbeatAt){let i=r-Date.parse(s.lastHeartbeatAt);if(Number.isFinite(i)&&i>=0&&i<t)return!0}return!!(ls(n.stdoutPath,r,t)||ls(n.heartbeatPath,r,t))}function hl(e,r=Date.now(),t=ze){for(let n of ml(e))if(gl(Re.join(e,"workers",n),r,t))return!0;return!1}function ps(e,r=Date.now()){let t=new Set,n=X(e);for(let o of fl(n)){let s=Re.join(n,o);hl(s,r)&&t.add(`${e}\0${o}`)}return t}b();function kl(e,r=Date.now(),t=ze){let n=Oe(e.heartbeatPath);if(!n.lastHeartbeatAt)return!1;let o=r-Date.parse(n.lastHeartbeatAt);return Number.isFinite(o)&&o>=0&&o<t}function Te(e,r=Date.now(),t=ze){return J(e.pid)?!0:kl(e,r,t)}function yl(e,r){return r?r.runTerminalCache.derive(e.run):ye(e.run)}function ee(e,r=Date.now()){return Te(e.worker,r)}function Vt(e,r){return ke.has(e.run.status)?!1:yl(e,r)!==null}function fs(e,r,t=Date.now()){if(ee(e,t))return!0;if(ke.has(e.run.status)||Vt(e,r))return!1;let n=Ve(e);return fe(n)?!1:!!ee(e,t)}xr();me();function ms(e,r){if(!(typeof e.worker.completionBlocker=="string"?e.worker.completionBlocker.trim():""))return!1;if(ee(e))return!0;let n=r??Ve(e);return!!(!fe(n)||Ye(n)||T(n.changedFiles).length>0||Ne({finalResult:n.finalResult,changedFiles:n.changedFiles,gitAncestry:n.gitAncestry,prUrl:he(n.finalResult)}).blocked)}H();b();import{existsSync as hs,mkdirSync as Rl,writeFileSync as gs}from"node:fs";import Mr from"node:path";function ks(e,r,t){return Mr.join(e,"salvage",x(r),x(t))}function ys(e){return hs(Mr.join(ks(e.harnessRoot,e.runId,e.workerName),"evidence.json"))}function Rs(e){let r=ks(e.harnessRoot,e.indexed.runId,e.indexed.workerName);Rl(r,{recursive:!0});let t=Mr.join(r,"salvage.patch"),n=!1;if(hs(e.indexed.worktreePath)){let s=P(e.indexed.worktreePath,["diff","HEAD"]),i=P(e.indexed.worktreePath,["diff","--cached"]),a=[s.stdout,i.stdout].filter(u=>u.trim()).join(`
|
|
76
76
|
`);a.trim()&&(gs(t,a.endsWith(`
|
|
77
77
|
`)?a:`${a}
|
|
78
78
|
`),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 gs(Mr.join(r,"evidence.json"),`${JSON.stringify(o,null,2)}
|