@kynver-app/runtime 0.2.59 → 0.2.65
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/dist/cli.js +95 -91
- package/dist/index.js +119 -115
- package/dist/local-run-store/index.js +7 -7
- package/dist/server/cleanup.js +14 -14
- package/dist/server/default-repo.js +1 -1
- package/dist/server/dispatch-routing.js +3 -3
- package/dist/server/heavy-verification.js +1 -1
- package/dist/server/memory-cost-enforce.js +2 -2
- package/dist/server/memory-cost.js +2 -2
- package/dist/server/model-routing.js +3 -3
- package/dist/server/monitor.js +7 -7
- package/dist/server/worker-policy.js +2 -2
- package/package.json +1 -1
package/dist/server/monitor.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
var l=(e,r,n)=>()=>{if(n)throw n[0];try{return e&&(r=e(e=0)),r}catch(t){throw n=[t],t}};function
|
|
1
|
+
var l=(e,r,n)=>()=>{if(n)throw n[0];try{return e&&(r=e(e=0)),r}catch(t){throw n=[t],t}};function V(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let n=JSON.parse(r);if(n&&typeof n=="object"&&!Array.isArray(n))return n}catch{return null}return null}function fe(e){let r=e.trim();if(!r)return null;let n=V(r);if(n)return n;let t=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let u=V(s[1]??"");u&&t.push(u)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let u=V(r.slice(i,a+1));u&&t.push(u)}return t.length>0?t[t.length-1]:null}function pe(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?fe(r)??(r.trim()||null):r;let n=typeof e.summary=="string"?e.summary.trim():"";if(!n)return null;let t=fe(n);return t||n}var ge=l(()=>{"use strict"});import{existsSync as Ur,mkdirSync as mt,readFileSync as Dr,readdirSync as ft,renameSync as pt,rmSync as gt,statSync as he,writeFileSync as ht}from"node:fs";function G(e){console.error(e),process.exit(1)}function z(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function O(e){try{return JSON.parse(e)}catch{return null}}function I(e){try{return he(e).size}catch{return 0}}function P(e){try{return he(e).mtime.toISOString()}catch{return null}}function ye(e,r){return Ur(e)?Dr(e,"utf8").split(`
|
|
2
2
|
`).slice(-r).join(`
|
|
3
|
-
`):""}function
|
|
4
|
-
`).filter(Boolean);for(let s of o){let i=O(s);if(!i||typeof i!="object"||Array.isArray(i))continue;let a=i;if(r.heartbeatCount++,a.ts){let u=String(a.ts),m=Date.parse(u);Number.isFinite(m)&&m>n?r.timestampAnomalies.push({kind:"future_heartbeat_timestamp",observedAt:u,clampedTo:t}):r.lastHeartbeatAt=u}a.phase!==void 0&&a.phase!==null&&(r.lastHeartbeatPhase=String(a.phase)),a.summary!==void 0&&a.summary!==null&&(r.lastHeartbeatSummary=String(a.summary)),
|
|
5
|
-
`).find(Boolean)??o,160):"npm audit failed"}function
|
|
6
|
-
${e.stderr}`.trim(),n=
|
|
7
|
-
`).filter(Boolean);for(let t of n){let o=O(t);if(!o)continue;let s=
|
|
8
|
-
`).map(r=>r.trim()).filter(Boolean)}function T(e,r){try{let n=$e("git",r,G({cwd:e,encoding:"utf8"}));return{status:n.status,stdout:n.stdout||"",stderr:n.stderr||"",error:n.error?n.error.message:null}}catch(n){return{status:null,stdout:"",stderr:"",error:n.message}}}function He(e,r,n){let t=T(e,["merge-base","--is-ancestor",r,n]);return t.status===0?{isAncestor:!0,error:null}:t.status===1?{isAncestor:!1,error:null}:{isAncestor:null,error:t.error||t.stderr||t.stdout||`git exited ${t.status}`}}function je(e,r="origin/main"){let n=typeof r=="string"?{base:r}:r,t=n.baseCommit?.trim()||n.base?.trim()||"origin/main",o=n.baseCommit?.trim()||null;if(!e)return Z(t,"missing worktree path");let s=T(e,["rev-parse","HEAD"]);if(s.status!==0)return Z(t,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let f=T(e,["rev-parse",t]);if(f.status!==0)return Z(t,f.error||f.stderr||f.stdout||`failed to resolve ${t}`,s.stdout.trim());i=f.stdout.trim()}let a=s.stdout.trim();if(a===i)return{checked:!0,base:t,head:a,baseHead:i,baseIsAncestorOfHead:!0,headIsAncestorOfBase:!0,relation:"synced"};let u=He(e,i,a),m=He(e,a,i),d=u.error||m.error||void 0;if(u.isAncestor==null||m.isAncestor==null)return{checked:!1,base:t,head:a,baseHead:i,baseIsAncestorOfHead:u.isAncestor,headIsAncestorOfBase:m.isAncestor,relation:"unknown",...d?{error:d}:{}};let c=u.isAncestor?"ahead":m.isAncestor?"merged":"diverged";return{checked:!0,base:t,head:a,baseHead:i,baseIsAncestorOfHead:u.isAncestor,headIsAncestorOfBase:m.isAncestor,relation:c,...d?{error:d}:{}}}function Z(e,r,n=null){return{checked:!1,base:e,head:n,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var ee=l(()=>{"use strict";x();p();Fe()});function C(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function On(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 wn(e){if(C(e.headCommit)||C(e.prUrl)||C(e.artifactBundlePath)||C(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&C(r.head))}function Ye(e){return On(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:wn(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 Ve(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var Ge=l(()=>{"use strict"});function re(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let n=JSON.parse(r);if(n&&typeof n=="object"&&!Array.isArray(n))return n}catch{return null}return null}function ze(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function K(e){let r=e.trim();if(!r)return null;let n=re(r);if(n)return n;let t=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let d=re(s[1]??"");d&&t.push(d)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let d=re(r.slice(i,a+1));d&&t.push(d)}if(t.length===0)return null;let u=t[t.length-1],m=ze(u);for(let d of t){let c=ze(d);c>m&&(u=d,m=c)}return u}var ne=l(()=>{"use strict"});function Je(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 qe(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function In(e){return new Set(e.map(r=>qe(Je(r)??r)).filter(Boolean))}function Xe(e,r,n){let t=Je(e)??e;if(!t)return"unrelated";let o=qe(t);return In(r).has(o)?"contract":n?(n.outcome==="skipped"||n.outcome==="blocked")&&n.reason?.trim()?"support":(n.outcome==="merged","unrelated"):"unrelated"}var Ze=l(()=>{"use strict"});function S(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Pn(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function b(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:S(e)}function U(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Qe(e){let r=null;if(typeof e=="string"){let o=K(e);o&&(r=o)}else e&&typeof e=="object"&&!Array.isArray(e)&&(r=e);if(!r)return[];let n=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(n))return[];let t=[];for(let o of n){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=b(String(s.prUrl??s.pr_url??"")),a=S(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||t.push({prUrl:i,outcome:a,mergeCommit:S(s.mergeCommit??s.merge_commit),reason:S(s.reason)})}return t}function er(e,r){let n=[],t=b(S(e.prUrl)??"");if(t&&n.push(t),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=b(String(o.prUrl??o.pr_url??""));s&&n.push(s)}return[...new Set(n)]}function rr(e){let{contract:r,snapshot:n}=e,t=e.finalResult??n.finalResult;if(!r.landingOnly&&r.targetPrUrls.length===0&&!r.repairEnforceOriginalPr)return{blocked:!1};if(!Pn(t))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?b(S(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?b(r.targetPrUrls[0]):null):null;if(s){let c=er(n,t);if(!(t&&typeof t=="object"&&!Array.isArray(t)&&t.supersedesOriginalTargetPr===!0)){for(let y of c)if(y!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${y} instead of canonical target ${s}`}}let h=Qe(t).find(y=>y.prUrl===s);if(!h||h.outcome!=="merged"&&!(h.reason?.trim()&&(h.outcome==="skipped"||h.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=Qe(t),a=new Map(i.map(c=>[U(c.prUrl),c])),u=new Set(r.targetPrUrls.map(c=>U(b(c)??c)).filter(Boolean)),m=er(n,t);if(r.landingOnly)for(let c of m){let f=a.get(U(c)),g=Xe(c,r.targetPrUrls,f);if(!(g==="contract"||g==="support"))return u.size>0?{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${c}`}:{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 d=[];for(let c of r.targetPrUrls){let f=U(b(c)??c),g=a.get(f);if(!g){d.push(f);continue}g.outcome!=="merged"&&!g.reason?.trim()&&d.push(f)}return d.length>0?{blocked:!0,reason:d.every(c=>a.has(c))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${d.join(", ")}`}:{blocked:!1}}function nr(e){if(e.blocked)return e.detail??e.reason}var tr=l(()=>{"use strict";ne();Ze()});function Wn(e){let r=Date.now();if(e.completionBlocker&&!or(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&Kn(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=Ye(o);if(s.blocked){let i=Ve(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=rr({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=nr(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(Tn(e))return{state:"done",reason:"empty abandoned worker record"};let o=Ke(e.error);if(o)return{state:"blocked",reason:o.reason};let s=De({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 n=e.startedAt?Date.parse(e.startedAt):NaN;if(!e.firstEventAt&&e.stdoutBytes===0&&e.heartbeatBytes===0&&Number.isFinite(n)&&r-n>Nn)return{state:"needs_attention",reason:`no first stream event ${z(n)}s after start`};let t=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(t)&&r-t>B?{state:"stale",reason:`no log/event/heartbeat activity for ${z(t)}s`}:{state:"ok",reason:"recent activity"}}function or(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function Tn(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 Kn(e){let r=null;if(typeof e=="string"?r=K(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return!1;let n=r.targetPrReconciliation??r.target_pr_reconciliation;return Array.isArray(n)?n.some(t=>!t||typeof t!="object"||Array.isArray(t)?!1:String(t.outcome??"").trim()==="merged"):!1}function Un(e,r,n){let t=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&t!==void 0&&t!==null?t:r||(t??ke(n))}function sr(e,r={}){let n=We(e.stdoutPath),t=Re(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Un(e,n.finalResult,t),i=o?!1:P(e.pid),a=w(e.stdoutPath),u=w(e.stderrPath),m=w(e.heartbeatPath),d=Le(e.worktreePath),c=je(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),f=ye([n.lastEventAt,t.lastHeartbeatAt,I(e.stdoutPath),I(e.stderrPath),I(e.heartbeatPath)]),g=n.error||!i&&!s&&he(e.stderrPath,10).trim()||void 0,h=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,y=or(h)?null:h,Nr=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,j=Wn({alive:i,finalResult:s,firstEventAt:n.firstEventAt,stdoutBytes:a,stderrBytes:u,heartbeatBytes:m,lastActivityAt:f,heartbeatBlocker:t.heartbeatBlocker,startedAt:e.startedAt,error:g,changedFiles:d,gitAncestry:c,completionBlocker:y,landingContract:Nr,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),Wr=y||j.state==="blocked"?"blocked":o||j.state==="done"?"done":s?"exited":i?"running":"exited";return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:Wr,attention:j,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:u,heartbeatBytes:m,firstEventAt:n.firstEventAt,lastEventAt:n.lastEventAt,lastActivityAt:f,currentTool:o?null:n.currentTool,heartbeatCount:t.heartbeatCount,lastHeartbeatAt:t.lastHeartbeatAt,lastHeartbeatPhase:t.lastHeartbeatPhase,lastHeartbeatSummary:t.lastHeartbeatSummary,heartbeatBlocker:t.heartbeatBlocker,timestampAnomalies:t.timestampAnomalies,finalResult:s,error:g,changedFiles:d,gitAncestry:c,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.provider??e.orchestrationAudit?.provider??null,usage:n.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 ir(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function ar(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}var Nn,B,A=l(()=>{"use strict";xe();Te();Ue();Me();ee();Ge();tr();ne();p();Nn=18e4,B=6e5});var te=l(()=>{"use strict";ee();x()});var k=l(()=>{"use strict"});var D=l(()=>{"use strict"});var dr=l(()=>{"use strict"});var fo,po,oe=l(()=>{"use strict";fo=25*1024*1024*1024,po=12*1024*1024*1024});var ko,Ro,mr=l(()=>{"use strict";oe();ko=5*1024*1024*1024,Ro=10*1024*1024*1024});var Co,Ao,se=l(()=>{"use strict";mr();oe();Co=30*1024*1024*1024,Ao=15*1024*1024*1024});var fr=l(()=>{"use strict";M();p()});var pr=l(()=>{"use strict";A()});var $n,Ln,yr=l(()=>{"use strict";dr();_();k();D();F();se();M();fr();pr();p();$n=500*1024*1024,Ln=4*1024*1024*1024});var F=l(()=>{"use strict";yr()});import{homedir as Yn}from"node:os";import Vn from"node:path";var br,le=l(()=>{"use strict";br=Vn.join(Yn(),".kynver",".env")});var kr=l(()=>{"use strict"});var Rr=l(()=>{"use strict";kr()});var xr=l(()=>{"use strict"});var ue=l(()=>{"use strict";Rr();xr()});var Sr=l(()=>{"use strict"});var _r=l(()=>{"use strict";Sr()});var H=l(()=>{"use strict";le();x();_();ue();_r()});var vr=l(()=>{"use strict";k();k()});var Er=l(()=>{"use strict";le();ue();H()});var Cr=l(()=>{"use strict";p()});import Xn from"node:path";var Gs,ce=l(()=>{"use strict";x();Cr();Gs=Xn.join(".openclaw","harness")});var L=l(()=>{"use strict";_();k();D();F();ce()});var Or=l(()=>{"use strict";te();k();vr();_();H();Er();p();L()});import{homedir as tt,totalmem as bi}from"node:os";import de from"node:path";var wr,Ii,Pi,Ni,Wi,_=l(()=>{"use strict";te();x();p();k();D();F();se();H();Or();L();wr=de.join(tt(),".kynver"),Ii=de.join(wr,"config.json"),Pi=de.join(wr,"credentials"),Ni=500*1024*1024,Wi=4*1024*1024*1024});var Ir=l(()=>{"use strict";_();ce();L();p()});var M=l(()=>{"use strict";Ir();p()});A();var lr="kynver-harness:",Bn="@runner:";function ur(e){return e?.trim()?e.trim():null}function Dn(e){let r=ur(e);if(!r?.startsWith(lr))return null;let n=r.slice(lr.length),t=n.indexOf(Bn);return t>=0?n.slice(0,t).trim()||null:n.trim()||null}function cr(e,r){let n=ur(r);return n?Dn(e)===n:!1}A();p();function Mn(e){let{worker:r,status:n,taskLease:t}=e,o=t?.leaseOwner??null;if(r.dispatched&&t){if(t.status==="running"&&o&&!cr(o,r.runId))return{health:"orphaned",reason:`task lease held by ${o}, expected harness run ${r.runId}`};let i=r.leaseToken?.trim()??"",a=t.leaseToken?.trim()??"";if(t.status==="running"&&i&&a&&i!==a)return{health:"orphaned",reason:"task leaseToken superseded on board \u2014 completion replay would fail"};if(t.status==="running"&&!n.alive&&!n.finalResult)return{health:"orphaned",reason:"board task running but worker process is not alive"}}if(r.status==="running"&&!n.alive&&!n.finalResult)return{health:"orphaned",reason:"worker.json still running but process is dead"};if(n.attention.state==="stale")return{health:"stale",reason:n.attention.reason};let s=n.lastHeartbeatAt?Date.parse(n.lastHeartbeatAt):NaN;return n.alive&&Number.isFinite(s)&&Date.now()-s>B?{health:"stale",reason:`heartbeat older than ${Math.floor(B/1e3)}s`}:n.alive&&r.pid&&!P(r.pid)?{health:"orphaned",reason:"pid recorded but process is not alive"}:t?.status==="running"&&!n.alive&&n.finalResult?{health:"healthy",reason:"finished worker awaiting completion replay"}:{health:"healthy",reason:n.attention.reason||"worker within expected lifecycle bounds"}}M();function Pr(e){return!!e.completionReportedAt?.trim()}A();function ot(e){let{worker:r,status:n}=e,t=[];r.localOnly&&t.push("local-only worker (no board linkage)"),(!r.agentOsId||!r.taskId)&&t.push("missing agentOsId/taskId linkage"),Pr(r)&&t.push("completion already acknowledged"),r.completionBlocker&&t.push(r.completionBlocker),n.heartbeatBlocker&&n.alive&&t.push(`worker heartbeat blocker: ${n.heartbeatBlocker}`),n.attention.state==="blocked"&&t.push(n.attention.reason||"worker attention blocked"),ar(n)&&t.push(n.attention.reason||"landing gate blocked");let o=ir(n),s;return o?n.finalResult?s="final_result":n.alive?s="terminal_status":s="process_exited":t.push("worker has not reached a terminal condition"),{eligible:o&&t.length===0,terminalVerified:o,terminalReason:s,blockers:t}}export{ot as assessAutoCompleteEligibility,Mn as classifyWorkerHealth,sr as computeWorkerStatus};
|
|
3
|
+
`):""}function N(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function be(e){let r=null,n=-1/0;for(let t of e){if(!t)continue;let o=Date.parse(t);Number.isFinite(o)&&o>n&&(n=o,r=t)}return r}function J(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var p=l(()=>{"use strict"});import{existsSync as Mr,readFileSync as Fr}from"node:fs";function ke(e){return e==="complete"}function Re(e){return ke(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function xe(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!Mr(e))return r;let n=Date.now()+Hr,t=new Date(n).toISOString(),o=Fr(e,"utf8").split(`
|
|
4
|
+
`).filter(Boolean);for(let s of o){let i=O(s);if(!i||typeof i!="object"||Array.isArray(i))continue;let a=i;if(r.heartbeatCount++,a.ts){let u=String(a.ts),m=Date.parse(u);Number.isFinite(m)&&m>n?r.timestampAnomalies.push({kind:"future_heartbeat_timestamp",observedAt:u,clampedTo:t}):r.lastHeartbeatAt=u}a.phase!==void 0&&a.phase!==null&&(r.lastHeartbeatPhase=String(a.phase)),a.summary!==void 0&&a.summary!==null&&(r.lastHeartbeatSummary=String(a.summary)),ke(r.lastHeartbeatPhase)&&(r.terminalFinalResult=pe(a)),r.heartbeatBlocker=a.blocker?String(a.blocker):null,a.boxResourceSnapshot&&typeof a.boxResourceSnapshot=="object"&&!Array.isArray(a.boxResourceSnapshot)&&(r.lastBoxResourceSnapshot=a.boxResourceSnapshot),Array.isArray(a.prEvidence)&&(r.lastPrEvidence=a.prEvidence.filter(u=>!!u&&typeof u=="object"&&typeof u.prUrl=="string"))}return r}var Hr,Se=l(()=>{"use strict";ge();p();Hr=6e4});function ve(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function W(e){if(!e)return[];let r=[],n="",t,o=!1;for(let s of e){if(o){n+=s,o=!1;continue}if(s==="\\"){o=!0;continue}if(t){s===t?t=void 0:n+=s;continue}if(s==='"'||s==="'"){t=s;continue}if(/\s/.test(s)){n&&(r.push(n),n="");continue}n+=s}return n&&r.push(n),r}function Ee(e){let r=ve(e[0]);return!!(r&&Lr.has(r))}function jr(e){let r=e.trim();return r.includes("/")?r.split("/").pop()??r:r}function Yr(e){if(!e||e.includes("*"))return null;let r=jr(e);return!r||r.includes("/")?null:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(r)?r:null}function Ce(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function q(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function Vr(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function Gr(e){let r=[];for(let n=1;n<e.length;n+=1){let t=e[n];if(t){if(t==="--"){r.push(...e.slice(n+1));break}if(t.startsWith("-")){if(t.includes("="))continue;_e.has(t)&&(n+=1);continue}r.push(t)}}return r}function zr(e){let r=!1,n=e.map((o,s)=>{let i=Vr(o),a=e[s-1];return a&&_e.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),t=Gr(n);if(t.length===2){let[o,s]=t;if(q(s))return{argv:[n[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};let i=Yr(s);if(i)return{argv:[n[0]??"rg","-g",i,o,"."],changed:!0}}return r&&t.length===1?{argv:[...n,"."],changed:!0}:{argv:n,changed:r}}function Ae(e){for(let r=1;r<e.length;r+=1){let n=e[r];if(n&&(n==="-c"||n==="-lc"||n==="-cl"||/^-[a-zA-Z]*c[a-zA-Z]*$/u.test(n)))return r+1}return-1}function K(e){let r=e.trim();if(!r)return{command:r,wrapped:!1};let n=W(r);if(!n.length)return{command:r,wrapped:!1};let t=ve(n[0]);if(!t||!$r.has(t))return{command:r,wrapped:!1};let o=Ae(n);if(o<0||o>=n.length)return{command:r,wrapped:!1};let s=n.slice(o).join(" ").trim();return s?{command:s,wrapped:!0}:{command:r,wrapped:!1}}function Jr(e,r){let n=e.trim(),t=W(n),o=Ae(t);if(o<0)return r;let s=t.slice(0,o).join(" "),i=r.includes("'")?`"${r.replace(/"/g,'\\"')}"`:`'${r}'`;return`${s} ${i}`}function qr(e){let r=e.trim(),n=K(r),t=W(n.command);if(!t.length||!Ee(t))return{segment:r,changed:!1};let o=zr(t);if(!o.changed)return{segment:r,changed:!1};let s=o.argv.join(" ");return n.wrapped?{segment:Jr(r,s),changed:!0}:{segment:s,changed:!0}}function X(e){let r=e.trim();if(!r)return{command:r,changed:!1};let n=r.includes("&&")?" && ":r.includes("||")?" || ":"; ",t=r.split(/\s*(?:&&|\|\||;)\s*/u),o=!1,s=t.map(i=>{let a=qr(i);return a.changed&&(o=!0),a.segment});return o?{command:s.join(n),changed:!0}:{command:r,changed:!1}}function we(e){let r=K(e).command,n=W(r.trim());return n.length&&Ee(n)?!0:/\b(rg|ripgrep)\b/i.test(r)}function Oe(e){if(!e)return{};let r=e.match(/search\s+"(.+)"\s+in\s+([^()]+?)(?:\s*\(|$)/iu);if(r)return{pattern:r[1],target:r[2]?.trim()};let n=e.match(/^search\s+"(.+)"\s+in\s+(.+)$/iu);return n?{pattern:n[1],target:n[2]?.trim()}:{}}function Xr(e){let{pattern:r,target:n}=Oe(e);return r?q(n)?{kind:"rg_exclude_syntax",pattern:r,target:n}:Ce(n)?{kind:"bad_scope",pattern:r,target:n}:{kind:"not_repo_search",pattern:r,target:n}:{kind:"not_repo_search"}}function Zr(e){let{pattern:r,target:n}=Oe(e);if(!r)return null;if(q(n)){let t=`${n.trim()}/**`;return{command:`rg "${r}" -g '${t}' .`,changed:!0}}return n&&Ce(n)?{command:`rg -g ${n} "${r}" .`,changed:!0}:null}function Qr(e){if(e.kind==="bad_scope"&&e.pattern&&e.target)return`Use \`rg -g '${e.target}' ${e.pattern} .\` from the repo root instead of treating ${e.target} as a folder.`;if(e.kind==="rg_exclude_syntax"&&e.pattern){let r=e.target?`${e.target.trim()}/**`:"!node_modules/**";return`Repo search scope \`${e.target??"!node_modules"}\` is not a valid ripgrep path. Use \`rg "${e.pattern}" -g '${r}' .\` from the repo root (exclude globs need a \`/**\` suffix).`}return e.kind==="no_matches"&&e.pattern?`No matches for "${e.pattern}". Try a broader pattern, drop overly short tokens, or search from the repo root with \`rg "${e.pattern}" .\`.`:null}function en(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 Z(e){let r=e.meta?.trim()||(e.command?en(e.command):null)||null;if(r){let n=Xr(r),t=Qr(n);if(t)return t;let o=Zr(r);if(o?.changed)return`Repo search used an invalid scope. Retry with: \`${o.command}\`.`}if(e.command&&/\b(rg|ripgrep)\b/i.test(e.command)){let n=X(e.command);if(n.changed)return`Ripgrep scope may be invalid. Retry with: \`${n.command}\`.`;if(e.exitCode===1)return"Ripgrep returned no matches (exit 1). Try a broader pattern or search from the repo root."}return null}var Lr,$r,_e,Ie=l(()=>{"use strict";Lr=new Set(["rg","ripgrep","grep"]),$r=new Set(["bash","sh","dash","zsh"]),_e=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function v(e,r=200){let n=e.replace(/\s+/g," ").trim();return n.length>r?`${n.slice(0,r-1)}\u2026`:n}function tn(e){let r=e.trim();if(!r)return null;if(r.startsWith("{"))try{return JSON.parse(r)}catch{}let n=r.indexOf("{"),t=r.lastIndexOf("}");if(n>=0&&t>n)try{return JSON.parse(r.slice(n,t+1))}catch{return null}return null}function E(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function on(e){let r=e.metadata;if(!E(r))return null;let n=r.vulnerabilities;if(!E(n))return null;let t=s=>typeof n[s]=="number"?n[s]:0,o={info:t("info"),low:t("low"),moderate:t("moderate"),high:t("high"),critical:t("critical"),total:t("total")};return typeof n.total!="number"&&!o.critical&&!o.high&&!o.moderate&&!o.low&&!o.info?null:o}function sn(e){let r=[];e.critical&&r.push(`${e.critical} critical`),e.high&&r.push(`${e.high} high`),e.moderate&&r.push(`${e.moderate} moderate`),e.low&&r.push(`${e.low} low`),e.info&&r.push(`${e.info} info`);let n=r.length?r.join(", "):"see report";return`npm audit: ${e.total} vulnerabilit${e.total===1?"y":"ies"} (${n}) \u2014 remediation required`}function an(e,r){let n=e.error;if(E(n)){let s=typeof n.summary=="string"?n.summary.trim():"",i=typeof n.code=="string"?n.code.trim():"";if(s)return i?`${i}: ${s}`:s;if(i)return i}let t=typeof e.message=="string"?e.message.trim():"";if(t)return t;let o=r.trim();return o?v(o.split(`
|
|
5
|
+
`).find(Boolean)??o,160):"npm audit failed"}function ln(e){let r=`${e.stdout}
|
|
6
|
+
${e.stderr}`.trim(),n=tn(r);if(!n||!E(n)){let o=v(r||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit failed (invalid or missing JSON): ${o}`,parseError:"invalid_json"}}if(E(n.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${an(n,e.stderr)}`};let t=on(n);return t?e.exitCode===0&&t.total===0?{kind:"success",exitCode:0,summary:"npm audit: no vulnerabilities reported",audit:t}:{kind:"audit_findings",exitCode:e.exitCode,summary:sn(t),audit:t}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function un(e){return rn.test(e)}function cn(e){let r=K(e).command;return Pe.test(e)||Pe.test(r)||we(e)}function dn(e){let r=Z({command:e.command,exitCode:e.exitCode});if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"ripgrep finished (exit 0)"};if(e.exitCode===1){let t=(e.stderr||e.interleaved).trim();if(t&&nn.test(t)){let i=v(t,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=X(e.command),s=o.changed&&!r?` Retry with: \`${o.command}\`.`:"";return{kind:"search_no_matches",exitCode:1,summary:r??`ripgrep: no matches (exit 1).${s} Try a broader pattern or search from the repo root.`}}let n=v(e.interleaved||e.stdout||e.stderr||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:r??`ripgrep failed (exit ${e.exitCode}): ${n}`}}function Ne(e){let r=e.stdout??"",n=e.stderr??"",t=e.interleavedOutput??"";if(un(e.command)){let i=r.trim()||t.trim()||n.trim();return ln({exitCode:e.exitCode,stdout:i,stderr:n})}if(cn(e.command))return dn({command:e.command,exitCode:e.exitCode,stdout:r,stderr:n,interleaved:t});let o=Z({command:e.command,exitCode:e.exitCode});if(o&&e.exitCode!==0)return{kind:"command_failure",exitCode:e.exitCode,summary:o};if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"command succeeded (exit 0)"};let s=v(t||r||n||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var rn,Pe,nn,We=l(()=>{"use strict";Ie();rn=/\bnpm\s+audit\b/i,Pe=/\b(rg|ripgrep)\b/i,nn=/\b(error|invalid|unknown|panic|not found)\b/i});import{existsSync as mn,readFileSync as fn}from"node:fs";function pn(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function gn(e){if(!e)return null;for(let r of Object.keys(e))if(r.endsWith("ToolCall")){let n=r.slice(0,-8);return n.length?n:r}return null}function hn(e,r){e.finalResult=r.result||r.subtype||r.terminal_reason||"completed",r.is_error&&(e.error=String(r.result||r.api_error_status||"stream result error"))}function R(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function yn(e){let r=e.usage;return r&&typeof r=="object"&&!Array.isArray(r)?r:null}function bn(e){if(typeof e.model=="string"&&e.model.trim())return e.model.trim();let r=e.modelUsage;if(r&&typeof r=="object"&&!Array.isArray(r)){let n=Object.keys(r)[0];if(n?.trim())return n.trim()}}function kn(e,r){let n=yn(r);if(!n)return;let t=R(n.input_tokens)??R(n.inputTokens)??R(n.prompt_tokens),o=R(n.output_tokens)??R(n.outputTokens)??R(n.completion_tokens);if(t===void 0&&o===void 0)return;let s=bn(r)??e.usage?.model;e.usage={...t!==void 0?{inputTokens:t}:{},...o!==void 0?{outputTokens:o}:{},...s?{model:s}:{}}}function Rn(e){if(e.type!=="tool_call"||e.subtype!=="completed")return null;let n=(e.tool_call&&typeof e.tool_call=="object"&&!Array.isArray(e.tool_call)?e.tool_call:null)?.shellToolCall;if(!n||typeof n!="object"||Array.isArray(n))return null;let t=n,o=t.args,s=o&&typeof o=="object"&&!Array.isArray(o)&&typeof o.command=="string"?String(o.command):"",i=t.result;if(!i||typeof i!="object"||Array.isArray(i))return null;let a=i.success??i.failure;if(!a||typeof a!="object"||Array.isArray(a))return null;let u=a,m=typeof u.exitCode=="number"?u.exitCode:0;return{command:s,exitCode:m,stdout:typeof u.stdout=="string"?u.stdout:"",stderr:typeof u.stderr=="string"?u.stderr:"",interleaved:typeof u.interleavedOutput=="string"?u.interleavedOutput:""}}function xn(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function Ke(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null,usage:null};if(!mn(e))return r;let n=fn(e,"utf8").split(`
|
|
7
|
+
`).filter(Boolean);for(let t of n){let o=O(t);if(!o)continue;let s=pn(o);if(s&&(r.firstEventAt||=s,r.lastEventAt=s),o.type==="stream_event"&&o.event&&typeof o.event=="object"&&o.event.type==="content_block_start"){let a=o.event.content_block;a?.type==="tool_use"&&(r.currentTool=String(a.name||"tool"))}if(o.type==="assistant"&&o.message&&typeof o.message=="object"){let a=o.message.content;if(Array.isArray(a)){let u=a.find(m=>m?.type==="tool_use");u&&(r.currentTool=String(u.name||r.currentTool))}}if(o.type==="tool_call"&&o.subtype==="started"){let a=o.tool_call&&typeof o.tool_call=="object"&&!Array.isArray(o.tool_call)?o.tool_call:void 0,u=gn(a);u&&(r.currentTool=u)}let i=Rn(o);i&&xn(r,Ne({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&hn(r,o),kn(r,o)}return r}var Te=l(()=>{"use strict";We();p()});function _n(e,r=240){let n=e.replace(/\s+/g," ").trim();return n.length>r?`${n.slice(0,r-1)}\u2026`:n}function Be(e){let r=(e??"").trim();if(!r)return null;for(let n of Sn)if(n.test.test(r))return{blocked:!0,reason:`${n.label}: ${_n(r)}`};return null}var Sn,Ue=l(()=>{"use strict";Sn=[{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 De(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function vn(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 En(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:De(e.head)}function Cn(e,r,n){let t=["exited_with_changes_salvage"];if((e==="uncommitted"||e==="both")&&t.push(`${r} uncommitted change${r===1?"":"s"} with no final result`),(e==="committed_ahead"||e==="both")&&n){let o=n.length>12?n.slice(0,12):n;t.push(`commit ${o} ahead of base with no final result`)}return t.push("review worktree \u2014 commit, open a PR, or run a salvage worker before discarding"),t.join(": ")}function Me(e){if(e.alive||vn(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,n=De(e.headCommit)??En(e.gitAncestry),t=r>0,o=!!n;if(!t&&!o)return{kind:"none",salvageable:!1,uncommittedCount:0,headCommit:null,attentionReason:"process exited without a final result"};let s=t&&o?"both":t?"uncommitted":"committed_ahead";return{kind:s,salvageable:!0,uncommittedCount:r,headCommit:n,attentionReason:Cn(s,r,n)}}var Fe=l(()=>{"use strict"});var x=l(()=>{"use strict"});var An,Wt,wn,Kt,He=l(()=>{"use strict";An=["ANTHROPIC_API_KEY","ANALYST_API_KEY","RECRUITER_API_KEY","AUTH_SECRET","NEXTAUTH_SECRET","DATABASE_URL","PRODUCTION_DATABASE_URL","KYNVER_PRODUCTION_DATABASE_URL","REDIS_URL","GOOGLE_CLIENT_SECRET","GITHUB_CLIENT_SECRET","KYNVER_API_KEY","KYNVER_SERVICE_SECRET","KYNVER_RUNTIME_SECRET","KYNVER_CRON_SECRET","OPENCLAW_CRON_SECRET","QSTASH_TOKEN","QSTASH_CURRENT_SIGNING_KEY","QSTASH_NEXT_SIGNING_KEY","TOOL_SECRETS_KEK","TOOL_EXECUTOR_DISPATCH_SECRET","CLOUDFLARE_API_TOKEN","STRIPE_SECRET_KEY","STRIPE_WEBHOOK_SECRET","STRIPE_IDENTITY_WEBHOOK_SECRET","VOYAGE_API_KEY","PERPLEXITY_API_KEY","FRED_API_KEY","FMP_API_KEY","CURSOR_API_KEY","MEMORY_CONTENT_KEK","LLM_BYOK_KEK","KYNVER_COMMAND_AUTH_KEY","KYNVER_INSTRUCTION_BUNDLE_KEY","KYNVER_MEMORY_LEDGER_KEY","KYNVER_JWKS_PRIVATE_KEY_JWK"],Wt=new Set(An),wn=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],Kt=new Set(wn)});import{spawnSync as $e}from"node:child_process";function On(e,r,n={}){let t=$e("git",r,z({cwd:e,encoding:"utf8"}));if(t.status!==0&&!n.allowFailure){let o=In(e,r,t);if(n.throwError)throw new Error(o);G(o)}return t.stdout||""}function In(e,r,n){let t=typeof n.stderr=="string"&&n.stderr.trim()||typeof n.stdout=="string"&&n.stdout.trim()||n.error?.message||`exit ${n.status??"unknown"}`;return`git ${r.join(" ")} failed in ${e}: ${t}`}function je(e){return On(e,["status","--short"],{allowFailure:!0}).split(`
|
|
8
|
+
`).map(r=>r.trim()).filter(Boolean)}function C(e,r){try{let n=$e("git",r,z({cwd:e,encoding:"utf8"}));return{status:n.status,stdout:n.stdout||"",stderr:n.stderr||"",error:n.error?n.error.message:null}}catch(n){return{status:null,stdout:"",stderr:"",error:n.message}}}function Le(e,r,n){let t=C(e,["merge-base","--is-ancestor",r,n]);return t.status===0?{isAncestor:!0,error:null}:t.status===1?{isAncestor:!1,error:null}:{isAncestor:null,error:t.error||t.stderr||t.stdout||`git exited ${t.status}`}}function Ye(e,r="origin/main"){let n=typeof r=="string"?{base:r}:r,t=n.baseCommit?.trim()||n.base?.trim()||"origin/main",o=n.baseCommit?.trim()||null;if(!e)return Q(t,"missing worktree path");let s=C(e,["rev-parse","HEAD"]);if(s.status!==0)return Q(t,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let f=C(e,["rev-parse",t]);if(f.status!==0)return Q(t,f.error||f.stderr||f.stdout||`failed to resolve ${t}`,s.stdout.trim());i=f.stdout.trim()}let a=s.stdout.trim();if(a===i)return{checked:!0,base:t,head:a,baseHead:i,baseIsAncestorOfHead:!0,headIsAncestorOfBase:!0,relation:"synced"};let u=Le(e,i,a),m=Le(e,a,i),d=u.error||m.error||void 0;if(u.isAncestor==null||m.isAncestor==null)return{checked:!1,base:t,head:a,baseHead:i,baseIsAncestorOfHead:u.isAncestor,headIsAncestorOfBase:m.isAncestor,relation:"unknown",...d?{error:d}:{}};let c=u.isAncestor?"ahead":m.isAncestor?"merged":"diverged";return{checked:!0,base:t,head:a,baseHead:i,baseIsAncestorOfHead:u.isAncestor,headIsAncestorOfBase:m.isAncestor,relation:c,...d?{error:d}:{}}}function Q(e,r,n=null){return{checked:!1,base:e,head:n,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var T=l(()=>{"use strict";x();p();He()});function A(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Pn(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 Nn(e){if(A(e.headCommit)||A(e.prUrl)||A(e.artifactBundlePath)||A(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&A(r.head))}function Ve(e){return Pn(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:Nn(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 Ge(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var ze=l(()=>{"use strict"});function re(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let n=JSON.parse(r);if(n&&typeof n=="object"&&!Array.isArray(n))return n}catch{return null}return null}function Je(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function B(e){let r=e.trim();if(!r)return null;let n=re(r);if(n)return n;let t=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let d=re(s[1]??"");d&&t.push(d)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let d=re(r.slice(i,a+1));d&&t.push(d)}if(t.length===0)return null;let u=t[t.length-1],m=Je(u);for(let d of t){let c=Je(d);c>m&&(u=d,m=c)}return u}var ne=l(()=>{"use strict"});function qe(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 Xe(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Wn(e){return new Set(e.map(r=>Xe(qe(r)??r)).filter(Boolean))}function Ze(e,r,n){let t=qe(e)??e;if(!t)return"unrelated";let o=Xe(t);return Wn(r).has(o)?"contract":n?(n.outcome==="skipped"||n.outcome==="blocked")&&n.reason?.trim()?"support":(n.outcome==="merged","unrelated"):"unrelated"}var Qe=l(()=>{"use strict"});function S(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Kn(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function b(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:S(e)}function U(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function er(e){let r=null;if(typeof e=="string"){let o=B(e);o&&(r=o)}else e&&typeof e=="object"&&!Array.isArray(e)&&(r=e);if(!r)return[];let n=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(n))return[];let t=[];for(let o of n){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=b(String(s.prUrl??s.pr_url??"")),a=S(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||t.push({prUrl:i,outcome:a,mergeCommit:S(s.mergeCommit??s.merge_commit),reason:S(s.reason)})}return t}function rr(e,r){let n=[],t=b(S(e.prUrl)??"");if(t&&n.push(t),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=b(String(o.prUrl??o.pr_url??""));s&&n.push(s)}return[...new Set(n)]}function nr(e){let{contract:r,snapshot:n}=e,t=e.finalResult??n.finalResult;if(!r.landingOnly&&r.targetPrUrls.length===0&&!r.repairEnforceOriginalPr)return{blocked:!1};if(!Kn(t))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?b(S(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?b(r.targetPrUrls[0]):null):null;if(s){let c=rr(n,t);if(!(t&&typeof t=="object"&&!Array.isArray(t)&&t.supersedesOriginalTargetPr===!0)){for(let y of c)if(y!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${y} instead of canonical target ${s}`}}let h=er(t).find(y=>y.prUrl===s);if(!h||h.outcome!=="merged"&&!(h.reason?.trim()&&(h.outcome==="skipped"||h.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=er(t),a=new Map(i.map(c=>[U(c.prUrl),c])),u=new Set(r.targetPrUrls.map(c=>U(b(c)??c)).filter(Boolean)),m=rr(n,t);if(r.landingOnly)for(let c of m){let f=a.get(U(c)),g=Ze(c,r.targetPrUrls,f);if(!(g==="contract"||g==="support"))return u.size>0?{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${c}`}:{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 d=[];for(let c of r.targetPrUrls){let f=U(b(c)??c),g=a.get(f);if(!g){d.push(f);continue}g.outcome!=="merged"&&!g.reason?.trim()&&d.push(f)}return d.length>0?{blocked:!0,reason:d.every(c=>a.has(c))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${d.join(", ")}`}:{blocked:!1}}function tr(e){if(e.blocked)return e.detail??e.reason}var or=l(()=>{"use strict";ne();Qe()});function Bn(e){let r=Date.now();if(e.completionBlocker&&!sr(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&Dn(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=Ve(o);if(s.blocked){let i=Ge(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=nr({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=tr(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(Un(e))return{state:"done",reason:"empty abandoned worker record"};let o=Be(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Me({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 n=e.startedAt?Date.parse(e.startedAt):NaN;if(!e.firstEventAt&&e.stdoutBytes===0&&e.heartbeatBytes===0&&Number.isFinite(n)&&r-n>Tn)return{state:"needs_attention",reason:`no first stream event ${J(n)}s after start`};let t=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(t)&&r-t>D?{state:"stale",reason:`no log/event/heartbeat activity for ${J(t)}s`}:{state:"ok",reason:"recent activity"}}function sr(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function Un(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 Dn(e){let r=null;if(typeof e=="string"?r=B(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return!1;let n=r.targetPrReconciliation??r.target_pr_reconciliation;return Array.isArray(n)?n.some(t=>!t||typeof t!="object"||Array.isArray(t)?!1:String(t.outcome??"").trim()==="merged"):!1}function Mn(e,r,n){let t=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&t!==void 0&&t!==null?t:r||(t??Re(n))}function ir(e,r={}){let n=Ke(e.stdoutPath),t=xe(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Mn(e,n.finalResult,t),i=o?!1:N(e.pid),a=I(e.stdoutPath),u=I(e.stderrPath),m=I(e.heartbeatPath),d=je(e.worktreePath),c=Ye(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),f=be([n.lastEventAt,t.lastHeartbeatAt,P(e.stdoutPath),P(e.stderrPath),P(e.heartbeatPath)]),g=n.error||!i&&!s&&ye(e.stderrPath,10).trim()||void 0,h=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,y=sr(h)?null:h,Tr=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,Y=Bn({alive:i,finalResult:s,firstEventAt:n.firstEventAt,stdoutBytes:a,stderrBytes:u,heartbeatBytes:m,lastActivityAt:f,heartbeatBlocker:t.heartbeatBlocker,startedAt:e.startedAt,error:g,changedFiles:d,gitAncestry:c,completionBlocker:y,landingContract:Tr,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),Br=y||Y.state==="blocked"?"blocked":o||Y.state==="done"?"done":s?"exited":i?"running":"exited";return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:Br,attention:Y,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:u,heartbeatBytes:m,firstEventAt:n.firstEventAt,lastEventAt:n.lastEventAt,lastActivityAt:f,currentTool:o?null:n.currentTool,heartbeatCount:t.heartbeatCount,lastHeartbeatAt:t.lastHeartbeatAt,lastHeartbeatPhase:t.lastHeartbeatPhase,lastHeartbeatSummary:t.lastHeartbeatSummary,heartbeatBlocker:t.heartbeatBlocker,timestampAnomalies:t.timestampAnomalies,finalResult:s,error:g,changedFiles:d,gitAncestry:c,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.provider??e.orchestrationAudit?.provider??null,usage:n.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 ar(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function lr(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}var Tn,D,w=l(()=>{"use strict";Se();Te();Ue();Fe();T();ze();or();ne();p();Tn=18e4,D=6e5});var mr=l(()=>{"use strict";T()});var te=l(()=>{"use strict";T();x();mr()});var oe=l(()=>{"use strict";p()});var k=l(()=>{"use strict"});var M=l(()=>{"use strict"});var fr=l(()=>{"use strict"});var vo,Eo,se=l(()=>{"use strict";vo=25*1024*1024*1024,Eo=12*1024*1024*1024});var Io,Po,pr=l(()=>{"use strict";se();Io=5*1024*1024*1024,Po=10*1024*1024*1024});var Uo,Do,ie=l(()=>{"use strict";pr();se();Uo=30*1024*1024*1024,Do=15*1024*1024*1024});var gr=l(()=>{"use strict";F();p()});var hr=l(()=>{"use strict";w()});var Yn,Vn,kr=l(()=>{"use strict";fr();_();k();M();H();ie();F();gr();hr();p();Yn=500*1024*1024,Vn=4*1024*1024*1024});var H=l(()=>{"use strict";kr()});import{homedir as zn}from"node:os";import Jn from"node:path";var Rr,ue=l(()=>{"use strict";Rr=Jn.join(zn(),".kynver",".env")});var xr=l(()=>{"use strict"});var Sr=l(()=>{"use strict";xr()});var _r=l(()=>{"use strict"});var ce=l(()=>{"use strict";Sr();_r()});var vr=l(()=>{"use strict"});var Er=l(()=>{"use strict";vr()});var L=l(()=>{"use strict";ue();x();_();ce();Er()});var Cr=l(()=>{"use strict";k();k()});var Ar=l(()=>{"use strict";ue();ce();L()});var wr=l(()=>{"use strict";p()});import et from"node:path";var oi,de=l(()=>{"use strict";x();wr();oi=et.join(".openclaw","harness")});var j=l(()=>{"use strict";_();k();M();H();de()});var Ir=l(()=>{"use strict";te();k();Cr();_();L();Ar();oe();j()});var it,vi,Pr=l(()=>{"use strict";it=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],vi=it.join("|")});import{homedir as at,totalmem as Wi}from"node:os";import me from"node:path";var Nr,Vi,Gi,zi,Ji,_=l(()=>{"use strict";te();x();oe();k();M();H();ie();L();Ir();Pr();j();Nr=me.join(at(),".kynver"),Vi=me.join(Nr,"config.json"),Gi=me.join(Nr,"credentials"),zi=500*1024*1024,Ji=4*1024*1024*1024});var Wr=l(()=>{"use strict";_();de();j();p()});var F=l(()=>{"use strict";Wr();p()});w();var ur="kynver-harness:",Fn="@runner:";function cr(e){return e?.trim()?e.trim():null}function Hn(e){let r=cr(e);if(!r?.startsWith(ur))return null;let n=r.slice(ur.length),t=n.indexOf(Fn);return t>=0?n.slice(0,t).trim()||null:n.trim()||null}function dr(e,r){let n=cr(r);return n?Hn(e)===n:!1}w();p();function Ln(e){let{worker:r,status:n,taskLease:t}=e,o=t?.leaseOwner??null;if(r.dispatched&&t){if(t.status==="running"&&o&&!dr(o,r.runId))return{health:"orphaned",reason:`task lease held by ${o}, expected harness run ${r.runId}`};let i=r.leaseToken?.trim()??"",a=t.leaseToken?.trim()??"";if(t.status==="running"&&i&&a&&i!==a)return{health:"orphaned",reason:"task leaseToken superseded on board \u2014 completion replay would fail"};if(t.status==="running"&&!n.alive&&!n.finalResult)return{health:"orphaned",reason:"board task running but worker process is not alive"}}if(r.status==="running"&&!n.alive&&!n.finalResult)return{health:"orphaned",reason:"worker.json still running but process is dead"};if(n.attention.state==="stale")return{health:"stale",reason:n.attention.reason};let s=n.lastHeartbeatAt?Date.parse(n.lastHeartbeatAt):NaN;return n.alive&&Number.isFinite(s)&&Date.now()-s>D?{health:"stale",reason:`heartbeat older than ${Math.floor(D/1e3)}s`}:n.alive&&r.pid&&!N(r.pid)?{health:"orphaned",reason:"pid recorded but process is not alive"}:t?.status==="running"&&!n.alive&&n.finalResult?{health:"healthy",reason:"finished worker awaiting completion replay"}:{health:"healthy",reason:n.attention.reason||"worker within expected lifecycle bounds"}}F();function Kr(e){return!!e.completionReportedAt?.trim()}w();function lt(e){let{worker:r,status:n}=e,t=[];r.localOnly&&t.push("local-only worker (no board linkage)"),(!r.agentOsId||!r.taskId)&&t.push("missing agentOsId/taskId linkage"),Kr(r)&&t.push("completion already acknowledged"),r.completionBlocker&&t.push(r.completionBlocker),n.heartbeatBlocker&&n.alive&&t.push(`worker heartbeat blocker: ${n.heartbeatBlocker}`),n.attention.state==="blocked"&&t.push(n.attention.reason||"worker attention blocked"),lr(n)&&t.push(n.attention.reason||"landing gate blocked");let o=ar(n),s;return o?n.finalResult?s="final_result":n.alive?s="terminal_status":s="process_exited":t.push("worker has not reached a terminal condition"),{eligible:o&&t.length===0,terminalVerified:o,terminalReason:s,blockers:t}}export{lt as assessAutoCompleteEligibility,Ln as classifyWorkerHealth,ir as computeWorkerStatus};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var i=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};function
|
|
2
|
-
${n}`,s=Pr(e.personaSlug);return!!(r.startsWith(Cr)||r===Ar||r.startsWith("daemon-review:")||s&&A.has(s)&&(r.includes("evidence")||r.includes("validate")||r.includes("review")||Ir(r,o)||V(o))||r.startsWith(wr)&&e.parentTaskId&&s&&A.has(s)||e.planId&&!e.parentTaskId&&s&&A.has(s)&&V(o)||t.includes("expert pr review")||e.parentTaskId&&(t.startsWith("review:")||t.includes("review required")||t.includes("runtime review"))&&s&&A.has(s))}var Tr=/^claude[-_]/i,Wr=/^(?:opus|sonnet|haiku)\b/i;function he(e){let r=e.trim();return Tr.test(r)||Wr.test(r)}function ye(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function ve(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function Re(e){return e.trim().toLowerCase().startsWith("gemini-")}function Kr(e){return ye(e)?"codex":he(e)?"claude":Re(e)?"gemini":(ve(e),"cursor")}function Mr(e){if(!e.startsWith("provider:"))return null;let r=e.slice(9),t=r.indexOf(":"),n=(t>=0?r.slice(0,t):r).trim().toLowerCase(),o=t>=0&&r.slice(t+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:o,rule:o?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:o,rule:"executor_ref:provider_cursor"}:n==="gemini-api"||n==="gemini_api"||n==="google-api"?{provider:"gemini-api",model:o,rule:"executor_ref:provider_gemini_api"}:n==="gemini"||n==="google"||n==="gemini_cli"?{provider:"gemini",model:o,rule:o?"executor_ref:provider_gemini_model":"executor_ref:provider_gemini"}:null:null}function Dr(e){if(!e.startsWith("harness-lane:"))return null;let r=e.split(":").map(o=>o.trim()).filter(Boolean);if(r.length<2)return null;let t=r[1],n=r.slice(2).join(":");return n?he(n)||ye(n)||ve(n)||Re(n)?{lane:t,model:n,provider:Kr(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function w(e){let r=typeof e=="string"?e.trim():"";return r?Mr(r)??Dr(r):null}m();a();var Ze="kynver",er=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],lt=er.map(e=>`mcp__${Ze}__${e}`);a();a();var Ga=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function ut(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var dt=ut();a();var Rl=600*1e3;a();var Nl=600*1e3;var rr="composer-2.5";var f="cursor",gt={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible",google:"gemini",gemini_cli:"gemini",gemini_api:"gemini-api","google-api":"gemini-api",google_api:"gemini-api"};function nr(e){let r=e.trim().toLowerCase();return gt[r]??r}var ht=new Set(["claude","opus","anthropic"]),yt=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function b(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function u(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return ht.has(r)?!0:r.includes("claude")||r.includes("opus")}function ie(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&u(r))return!0;let t=b(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=w(b(e,"executorRef"));if(n?.provider&&u(n.provider)||n?.model&&u(vt(n.model)))return!0;let o=b(e,"description");if(yt.some(l=>l.test(o)))return!0;let s=b(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function vt(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function Rt(e,r){return{provider:f,model:rr,rule:`policy:cursor_default${r}`,requestedModel:e}}var _t=["explicit:","executor_ref:","factory:","task:"];function bt(e){return _t.some(r=>e.startsWith(r))}function or(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||w(b(e,"executorRef"))?.provider?!0:ie(e)}function tr(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&u(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||bt(r.rule)||or(t)||!u(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return Rt(r.model,o)}function kt(e,r=f){let t=e?.trim();return t?nr(t):r}function xt(e){let r=[...new Set(e.map(t=>t.trim().toLowerCase()).filter(Boolean))];return r.includes(f)?[...new Set(r.map(t=>u(t)?f:t))]:r.every(t=>u(t))?[f]:r}var Et=/\b(npm run typecheck|tsc\b[^|&;]*--noEmit|node scripts\/verify-pr-local\.mjs|kynver (harness )?verify)\b/i,St=/\b(npm run build\b|next build\b)\b/i,Ot=/\b(vercel (build|deploy|--prod))\b/i,Ct=/\b(openai|anthropic|perplexity|voyage)\b.*\b(api|cli)\b|\b(paid|billable)[-_ ]?compute\b/i;function se(e){let r=e.trim();return r?Ct.test(r)?{heavy:!0,commandClass:"paid_compute",reason:"paid external compute requires heavy-verification token and operator approval"}:Ot.test(r)?{heavy:!0,commandClass:"vercel_verify",reason:"Vercel build/deploy verification requires heavy-verification token"}:St.test(r)?{heavy:!0,commandClass:"full_build",reason:"full app build requires heavy-verification token"}:Et.test(r)?{heavy:!0,commandClass:"full_typecheck",reason:"full repo typecheck requires heavy-verification token"}:{heavy:!1,commandClass:"allowed",reason:null}:{heavy:!1,commandClass:"allowed",reason:null}}var B="heavy_verification_token_required";import{spawnSync as Vt}from"node:child_process";a();import{closeSync as Tt,existsSync as x,mkdirSync as Wt,openSync as Kt,readdirSync as lr,readFileSync as Mt,statSync as Dt,unlinkSync as cr,writeFileSync as Bt}from"node:fs";import ce from"node:path";import{mkdirSync as wt}from"node:fs";import{tmpdir as Pt}from"node:os";import U from"node:path";import{homedir as At}from"node:os";import ir from"node:path";function sr(){let e=process.env.KYNVER_STATE_ROOT;return e?ir.resolve(e):ir.join(At(),".kynver","state")}function It(){return!!(process.env.VERCEL||process.env.VERCEL_ENV||process.env.AWS_LAMBDA_FUNCTION_NAME||process.env.AWS_EXECUTION_ENV)}function Nt(){let e=process.env.KYNVER_HEAVY_VERIFICATION_STATE_ROOT;return e?U.resolve(e):It()?U.join(Pt(),"kynver","state","heavy-verification"):U.join(sr(),"heavy-verification")}function ae(){return U.join(Nt(),"slots")}function k(){let e=ae();return wt(e,{recursive:!0}),e}var E=120*6e4,ar=1;function Ut(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function F(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function L(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?Ut(e,ar):ar}function Lt(e){return`slot-${e}`}function Ft(e,r=ae()){return ce.join(r,`${e}.json`)}function ue(e){if(!x(e))return null;try{let r=JSON.parse(Mt(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 ur(e,r=E){if(!e||!Y(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function dr(e,r){let t=ue(e);if(t)return ur(t,r);if(!x(e))return!0;try{return Date.now()-Dt(e).mtimeMs>r}catch{return!0}}function $t(e,r){if(dr(e,r))try{cr(e)}catch{}}function Ht(e){return Wt(e,{recursive:!0}),e}function de(e={}){let r=Ht(e.slotsDir??k()),t=e.staleMs??E,n=0;for(let o of lr(r)){if(!o.endsWith(".json"))continue;let s=ce.join(r,o),l=x(s);$t(s,t),l&&!x(s)&&(n+=1)}return n}function jt(e={}){let r=e.slotsDir??k(),t=e.staleMs??E;de({slotsDir:r,staleMs:t});let n=[];for(let o of lr(r)){if(!o.endsWith(".json"))continue;let s=ue(ce.join(r,o));s&&!ur(s,t)&&n.push(s)}return n}function le(e={}){return jt(e).length}function S(e,r={}){if(F())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:L(),reason:null};let t=r.slotsDir??k(),n=r.staleMs??E,o=r.maxSlots??L();de({slotsDir:t,staleMs:n});for(let l=0;l<o;l+=1){let c=Lt(l),h=Ft(c,t),mr=ue(h);if(dr(h,n))try{cr(h)}catch{}else if(mr||x(h))continue;let fr={slotId:c,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let y=Kt(h,"wx");Bt(y,JSON.stringify(fr,null,2),"utf8"),Tt(y);let gr=le({slotsDir:t,staleMs:n});return{admitted:!0,slotId:c,activeSlots:gr,maxSlots:o,reason:null}}catch(y){if(y.code==="EEXIST")continue;throw y}}let s=le({slotsDir:t,staleMs:n});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:o,reason:`heavy verification at capacity (${s}/${o} slots)`}}function $(e,r={}){if(F())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:L(),reason:null};let t=r.slotsDir??k(),n=r.staleMs??E,o=r.maxSlots??L();de({slotsDir:t,staleMs:n});let s=le({slotsDir:t,staleMs:n}),l=s<o;return{admitted:l,slotId:null,activeSlots:s,maxSlots:o,reason:l?null:`heavy verification at capacity (${s}/${o} slots); waiting for ${e}`}}function Yt(e){e<=0||Vt(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function pr(e,r,t=2e3,n={}){let o=Date.now()+Math.max(0,r),s=S(e,n);for(;!s.admitted&&Date.now()<o;)Yt(Math.min(t,o-Date.now())),s=S(e,n);return s}function Gt(e,r={}){let t=se(e);if(!t.heavy)return{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:"command does not require heavy-verification token",verificationGate:{...$(e),slotId:null}};if(F())return{allowed:!0,outcome:"heavy_verification_skipped",commandClass:t.commandClass,reason:"KYNVER_HEAVY_VERIFICATION_SKIP bypasses gate",verificationGate:{...$(e),slotId:null}};let n=r.waitMs??0,o=n>0?pr(e,n,r.pollMs):S(e);return o.admitted?{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:t.reason??"heavy-verification token acquired",verificationGate:o}:{allowed:!1,outcome:B,commandClass:t.commandClass,reason:t.reason??o.reason??B,verificationGate:o}}export{f as DEFAULT_WORKER_PROVIDER,B as HEAVY_VERIFICATION_TOKEN_REQUIRED,j as KYNVER_NO_PROD_DB_CREDENTIALS_ENV,Or as auditReviewWorkerCredentialScope,xr as auditWorkerEnv,d as buildWorkerSpawnEnv,se as classifyHeavyShellCommand,tr as enforceCursorWorkerProvider,Gt as gateWorkerShellCommand,u as isClaudeFamilyProvider,v as isForbiddenWorkerEnvKey,Nr as isHarnessExpertReviewWorker,ge as isNoProdCredentialReviewEnvironment,pe as listForbiddenWorkerEnvKeys,me as listOperatorAllowedWorkerEnvKeys,nr as normalizeWorkerProviderName,xt as preferCursorExecutor,kt as resolveConfiguredWorkerProvider,O as scrubWorkerEnv,ie as taskAllowsClaudeWorker,or as taskExpressesWorkerProviderPreference};
|
|
1
|
+
var i=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};function Y(e){let r=e[Or];return r?new Set(r.split(/[\s,]+/).map(t=>t.trim()).filter(Boolean)):new Set}function v(e,r={}){return br.has(e)?!0:Er.has(e)||r.operatorAllow?.has(e)||Sr.some(t=>e.endsWith(t))?!1:kr.some(t=>e.endsWith(t))}function he(e){let r=Y(e);return Object.keys(e).filter(t=>v(t,{operatorAllow:r})).sort()}function ye(e){let r=Y(e);return r.size===0?[]:Object.keys(e).filter(t=>r.has(t)&&!v(t,{operatorAllow:r})&&v(t)).sort()}function C(e){let r=Y(e),t={...e};for(let n of Object.keys(t))v(n,{operatorAllow:r})&&delete t[n];return t}function Cr(e){let r=he(e),t=ye(e);return{forbiddenPresent:r,safe:r.length===0,...t.length?{operatorAllowedActive:t}:{}}}var _r,br,kr,xr,Er,Sr,Or,A=i(()=>{"use strict";_r=["ANTHROPIC_API_KEY","ANALYST_API_KEY","RECRUITER_API_KEY","AUTH_SECRET","NEXTAUTH_SECRET","DATABASE_URL","PRODUCTION_DATABASE_URL","KYNVER_PRODUCTION_DATABASE_URL","REDIS_URL","GOOGLE_CLIENT_SECRET","GITHUB_CLIENT_SECRET","KYNVER_API_KEY","KYNVER_SERVICE_SECRET","KYNVER_RUNTIME_SECRET","KYNVER_CRON_SECRET","OPENCLAW_CRON_SECRET","QSTASH_TOKEN","QSTASH_CURRENT_SIGNING_KEY","QSTASH_NEXT_SIGNING_KEY","TOOL_SECRETS_KEK","TOOL_EXECUTOR_DISPATCH_SECRET","CLOUDFLARE_API_TOKEN","STRIPE_SECRET_KEY","STRIPE_WEBHOOK_SECRET","STRIPE_IDENTITY_WEBHOOK_SECRET","VOYAGE_API_KEY","PERPLEXITY_API_KEY","FRED_API_KEY","FMP_API_KEY","CURSOR_API_KEY","MEMORY_CONTENT_KEK","LLM_BYOK_KEK","KYNVER_COMMAND_AUTH_KEY","KYNVER_INSTRUCTION_BUNDLE_KEY","KYNVER_MEMORY_LEDGER_KEY","KYNVER_JWKS_PRIVATE_KEY_JWK"],br=new Set(_r),kr=["_SECRET","_API_KEY","_KEK","_KEY","_TOKEN","_PASSWORD","_PASSPHRASE","_SALT"],xr=["GITHUB_TOKEN","GH_TOKEN","CLAUDE_CODE_OAUTH_TOKEN","CODEX_API_KEY","GEMINI_API_KEY"],Er=new Set(xr),Sr=["_PUBLIC_KEY"],Or="KYNVER_WORKER_ENV_ALLOW"});var g=i(()=>{"use strict"});function z(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}var a=i(()=>{"use strict"});var I=i(()=>{"use strict";g();a();A()});var Ee=i(()=>{"use strict";I()});var X=i(()=>{"use strict";I();g();Ee()});var Q=i(()=>{"use strict";a()});var m=i(()=>{"use strict"});var N=i(()=>{"use strict"});var Se=i(()=>{"use strict"});var An,wn,Z=i(()=>{"use strict";An=25*1024*1024*1024,wn=12*1024*1024*1024});var Tn,Kn,Oe=i(()=>{"use strict";Z();Tn=5*1024*1024*1024,Kn=10*1024*1024*1024});var Fn,$n,ee=i(()=>{"use strict";Oe();Z();Fn=30*1024*1024*1024,$n=15*1024*1024*1024});var Ae=i(()=>{"use strict";a()});import Vr from"node:path";var Xn,re=i(()=>{"use strict";g();Ae();Xn=Vr.join(".openclaw","harness")});var T=i(()=>{"use strict";f();m();N();K();re()});var Ie=i(()=>{"use strict";f();re();T();a()});var ne=i(()=>{"use strict";Ie();a()});var Ne=i(()=>{"use strict";ne();a()});var We=i(()=>{"use strict"});var Te=i(()=>{"use strict";We();a()});var Ke=i(()=>{"use strict"});var Me=i(()=>{"use strict";Ke()});var De=i(()=>{"use strict";Me();a()});var Be=i(()=>{"use strict"});var Ue=i(()=>{"use strict"});var Le=i(()=>{"use strict"});var oe=i(()=>{"use strict"});var Fe=i(()=>{"use strict"});var $e=i(()=>{"use strict";oe();Fe()});var He=i(()=>{"use strict";Te();De();Be();Ue();I();Le();$e();oe();a()});var Ve=i(()=>{"use strict";He()});var Qr,Zr,je=i(()=>{"use strict";Se();f();m();N();K();ee();ne();Ne();Ve();a();Qr=500*1024*1024,Zr=4*1024*1024*1024});var K=i(()=>{"use strict";je()});import{homedir as et}from"node:os";import rt from"node:path";var Ye,ie=i(()=>{"use strict";Ye=rt.join(et(),".kynver",".env")});var Ge=i(()=>{"use strict"});var qe=i(()=>{"use strict";Ge()});var ze=i(()=>{"use strict"});var se=i(()=>{"use strict";qe();ze()});var Je=i(()=>{"use strict"});var Xe=i(()=>{"use strict";Je()});var D=i(()=>{"use strict";ie();g();f();se();Xe()});var Qe=i(()=>{"use strict";m();m()});var Ze=i(()=>{"use strict";ie();se();D()});var er=i(()=>{"use strict";X();m();Qe();f();D();Ze();Q();T()});function _(e){let r=e.trim().toLowerCase();return ut[r]??r}var rr,ct,ut,B=i(()=>{"use strict";rr=["claude","cursor","codex","gemini","gemini-api","openai-compatible"],ct=rr.join("|"),ut={anthropic:"claude",opus:"claude",openai:"openai-compatible",openai_compatible:"openai-compatible","openai-compat":"openai-compatible",chatgpt:"codex",gpt:"codex","openai-api":"openai-compatible",openai_api:"openai-compatible",google:"gemini",gemini_cli:"gemini",gemini_api:"gemini-api","google-api":"gemini-api",google_api:"gemini-api"}});import{homedir as pt,totalmem as qs}from"node:os";import ae from"node:path";var tr,aa,la,ca,ua,f=i(()=>{"use strict";X();g();Q();m();N();K();ee();D();er();B();T();tr=ae.join(pt(),".kynver"),aa=ae.join(tr,"config.json"),la=ae.join(tr,"credentials"),ca=500*1024*1024,ua=4*1024*1024*1024});A();A();var G="KYNVER_NO_PROD_DB_CREDENTIALS",Ar=["KYNVER_ENV_FILE"],wr=new Set(["1","true","yes","on"]);function Re(e){let r=e[G]?.trim().toLowerCase();return r!==void 0&&wr.has(r)}function p(e,r={}){let t=C(e);if(!r.reviewWorker)return t;let n={...t,[G]:"1"};for(let o of Ar)delete n[o];return n}var ve=["DATABASE_URL","PRODUCTION_DATABASE_URL","KYNVER_PRODUCTION_DATABASE_URL"];function Pr(e,r={}){let t=p(e,r),n=Object.keys(t).filter(c=>c.endsWith("_SECRET")||c.endsWith("_API_KEY")||ve.includes(c)),o=ve.every(c=>t[c]===void 0),s=r.reviewWorker?t.KYNVER_ENV_FILE===void 0:!0,l=Re(t);return{reviewMode:!!r.reviewWorker,noProdFlagPresent:r.reviewWorker?l:!0,forbiddenKeysAfterScrub:n.sort(),productionDbKeysAbsent:o,envFilePointerStripped:s,safe:o&&n.length===0&&s&&(!r.reviewWorker||l)}}var Ir="expert-lane-pr-review:",Nr="plan-review-task",Wr="scheduledjob:",w=new Set(["lorentz","dalton","rhea","sentinel"]);function Tr(e){if(!e)return null;let r=e.trim().toLowerCase();return r.length?r:null}function q(e){return/\b(deep[- ]?review|plan review|review .*plan|security review|red[- ]team|lb\d+|risk register|signoff|verification|evidence|prove|gate)\b/.test(e)}function Kr(e,r){return e.startsWith("factory:")?e.includes("lb")||q(r):!1}function Mr(e){let r=(e.executorRef??"").toLowerCase(),t=(e.title??"").toLowerCase(),n=(e.description??"").toLowerCase(),o=`${t}
|
|
2
|
+
${n}`,s=Tr(e.personaSlug);return!!(r.startsWith(Ir)||r===Nr||r.startsWith("daemon-review:")||s&&w.has(s)&&(r.includes("evidence")||r.includes("validate")||r.includes("review")||Kr(r,o)||q(o))||r.startsWith(Wr)&&e.parentTaskId&&s&&w.has(s)||e.planId&&!e.parentTaskId&&s&&w.has(s)&&q(o)||t.includes("expert pr review")||e.parentTaskId&&(t.startsWith("review:")||t.includes("review required")||t.includes("runtime review"))&&s&&w.has(s))}var Dr=/^claude[-_]/i,Br=/^(?:opus|sonnet|haiku)\b/i;function _e(e){let r=e.trim();return Dr.test(r)||Br.test(r)}function be(e){let r=e.trim().toLowerCase();return r.startsWith("gpt-")||r.startsWith("gpt5")||r.includes("codex")}function ke(e){let r=e.trim().toLowerCase();return r.includes("composer")||r.includes("cursor")}function xe(e){return e.trim().toLowerCase().startsWith("gemini-")}function Ur(e){return be(e)?"codex":_e(e)?"claude":xe(e)?"gemini":(ke(e),"cursor")}function Lr(e){if(!e.startsWith("provider:"))return null;let r=e.slice(9),t=r.indexOf(":"),n=(t>=0?r.slice(0,t):r).trim().toLowerCase(),o=t>=0&&r.slice(t+1).trim()||void 0;return n?n==="claude"||n==="opus"||n==="anthropic"?{provider:"claude",model:o,rule:o?"executor_ref:provider_claude_model":"executor_ref:provider_claude"}:n==="codex"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-compatible"||n==="openai"||n==="openai_compatible"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="chatgpt"||n==="gpt"?{provider:"codex",model:o,rule:"executor_ref:provider_codex"}:n==="openai-api"||n==="openai_api"?{provider:"openai-compatible",model:o,rule:"executor_ref:provider_openai_compatible"}:n==="cursor"||n==="composer"?{provider:"cursor",model:o,rule:"executor_ref:provider_cursor"}:n==="gemini-api"||n==="gemini_api"||n==="google-api"?{provider:"gemini-api",model:o,rule:"executor_ref:provider_gemini_api"}:n==="gemini"||n==="google"||n==="gemini_cli"?{provider:"gemini",model:o,rule:o?"executor_ref:provider_gemini_model":"executor_ref:provider_gemini"}:null:null}function Fr(e){if(!e.startsWith("harness-lane:"))return null;let r=e.split(":").map(o=>o.trim()).filter(Boolean);if(r.length<2)return null;let t=r[1],n=r.slice(2).join(":");return n?_e(n)||be(n)||ke(n)||xe(n)?{lane:t,model:n,provider:Ur(n),rule:"executor_ref:harness_lane_model"}:{lane:t,rule:"executor_ref:harness_lane"}:{lane:t,rule:"executor_ref:harness_lane"}}function P(e){let r=typeof e=="string"?e.trim():"";return r?Lr(r)??Fr(r):null}f();a();var ir="kynver",sr=["agent_os_context_envelope","agent_os_search_memory","agent_os_search_skills","agent_os_get_skill","agent_os_progress_note"],ht=sr.map(e=>`mcp__${ir}__${e}`);a();a();var cl=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function vt(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var Rt=vt();a();var Kl=600*1e3;a();var ql=600*1e3;var ar="composer-2.5";B();B();var d="cursor",xt=new Set(["claude","opus","anthropic"]),Et=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function k(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function u(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return xt.has(r)?!0:r.includes("claude")||r.includes("opus")}function le(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&u(r))return!0;let t=k(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=P(k(e,"executorRef"));if(n?.provider&&u(n.provider)||n?.model&&u(St(n.model)))return!0;let o=k(e,"description");if(Et.some(l=>l.test(o)))return!0;let s=k(e,"title");return!!/\[use-claude-worker\]/i.test(s)}function St(e){let r=e.trim().toLowerCase();return/^claude[-_]/.test(r)||/^(?:opus|sonnet|haiku)\b/.test(r)?"claude":r}function Ot(e,r){return{provider:d,model:ar,rule:`policy:cursor_default${r}`,requestedModel:e}}var Ct=["explicit:","executor_ref:","factory:","task:"];function At(e){return Ct.some(r=>e.startsWith(r))}function ce(e){if(!e)return!1;let r=e.workerProviderOverride;return typeof r=="string"&&r.trim()||P(k(e,"executorRef"))?.provider?!0:le(e)}function lr(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&u(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(n||At(r.rule)||ce(t)||!u(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return Ot(r.model,o)}function wt(e,r=d){let t=e?.trim();return t?_(t):r}function Pt(e){let r=[...new Set(e.map(t=>t.trim().toLowerCase()).filter(Boolean))];return r.includes(d)?[...new Set(r.map(t=>u(t)?d:t))]:r.every(t=>u(t))?[d]:r}var It=/\b(npm run typecheck|tsc\b[^|&;]*--noEmit|node scripts\/verify-pr-local\.mjs|kynver (harness )?verify)\b/i,Nt=/\b(npm run build\b|next build\b)\b/i,Wt=/\b(vercel (build|deploy|--prod))\b/i,Tt=/\b(openai|anthropic|perplexity|voyage)\b.*\b(api|cli)\b|\b(paid|billable)[-_ ]?compute\b/i;function ue(e){let r=e.trim();return r?Tt.test(r)?{heavy:!0,commandClass:"paid_compute",reason:"paid external compute requires heavy-verification token and operator approval"}:Wt.test(r)?{heavy:!0,commandClass:"vercel_verify",reason:"Vercel build/deploy verification requires heavy-verification token"}:Nt.test(r)?{heavy:!0,commandClass:"full_build",reason:"full app build requires heavy-verification token"}:It.test(r)?{heavy:!0,commandClass:"full_typecheck",reason:"full repo typecheck requires heavy-verification token"}:{heavy:!1,commandClass:"allowed",reason:null}:{heavy:!1,commandClass:"allowed",reason:null}}var F="heavy_verification_token_required";import{spawnSync as Qt}from"node:child_process";a();import{closeSync as Lt,existsSync as E,mkdirSync as Ft,openSync as $t,readdirSync as pr,readFileSync as Ht,statSync as Vt,unlinkSync as mr,writeFileSync as jt}from"node:fs";import me from"node:path";import{mkdirSync as Mt}from"node:fs";import{tmpdir as Dt}from"node:os";import $ from"node:path";import{homedir as Kt}from"node:os";import cr from"node:path";function ur(){let e=process.env.KYNVER_STATE_ROOT;return e?cr.resolve(e):cr.join(Kt(),".kynver","state")}function Bt(){return!!(process.env.VERCEL||process.env.VERCEL_ENV||process.env.AWS_LAMBDA_FUNCTION_NAME||process.env.AWS_EXECUTION_ENV)}function Ut(){let e=process.env.KYNVER_HEAVY_VERIFICATION_STATE_ROOT;return e?$.resolve(e):Bt()?$.join(Dt(),"kynver","state","heavy-verification"):$.join(ur(),"heavy-verification")}function de(){return $.join(Ut(),"slots")}function x(){let e=de();return Mt(e,{recursive:!0}),e}var S=120*6e4,dr=1;function Yt(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function V(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function H(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?Yt(e,dr):dr}function Gt(e){return`slot-${e}`}function qt(e,r=de()){return me.join(r,`${e}.json`)}function fe(e){if(!E(e))return null;try{let r=JSON.parse(Ht(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 fr(e,r=S){if(!e||!z(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function gr(e,r){let t=fe(e);if(t)return fr(t,r);if(!E(e))return!0;try{return Date.now()-Vt(e).mtimeMs>r}catch{return!0}}function zt(e,r){if(gr(e,r))try{mr(e)}catch{}}function Jt(e){return Ft(e,{recursive:!0}),e}function ge(e={}){let r=Jt(e.slotsDir??x()),t=e.staleMs??S,n=0;for(let o of pr(r)){if(!o.endsWith(".json"))continue;let s=me.join(r,o),l=E(s);zt(s,t),l&&!E(s)&&(n+=1)}return n}function Xt(e={}){let r=e.slotsDir??x(),t=e.staleMs??S;ge({slotsDir:r,staleMs:t});let n=[];for(let o of pr(r)){if(!o.endsWith(".json"))continue;let s=fe(me.join(r,o));s&&!fr(s,t)&&n.push(s)}return n}function pe(e={}){return Xt(e).length}function O(e,r={}){if(V())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:H(),reason:null};let t=r.slotsDir??x(),n=r.staleMs??S,o=r.maxSlots??H();ge({slotsDir:t,staleMs:n});for(let l=0;l<o;l+=1){let c=Gt(l),h=qt(c,t),yr=fe(h);if(gr(h,n))try{mr(h)}catch{}else if(yr||E(h))continue;let vr={slotId:c,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let y=$t(h,"wx");jt(y,JSON.stringify(vr,null,2),"utf8"),Lt(y);let Rr=pe({slotsDir:t,staleMs:n});return{admitted:!0,slotId:c,activeSlots:Rr,maxSlots:o,reason:null}}catch(y){if(y.code==="EEXIST")continue;throw y}}let s=pe({slotsDir:t,staleMs:n});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:o,reason:`heavy verification at capacity (${s}/${o} slots)`}}function j(e,r={}){if(V())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:H(),reason:null};let t=r.slotsDir??x(),n=r.staleMs??S,o=r.maxSlots??H();ge({slotsDir:t,staleMs:n});let s=pe({slotsDir:t,staleMs:n}),l=s<o;return{admitted:l,slotId:null,activeSlots:s,maxSlots:o,reason:l?null:`heavy verification at capacity (${s}/${o} slots); waiting for ${e}`}}function Zt(e){e<=0||Qt(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function hr(e,r,t=2e3,n={}){let o=Date.now()+Math.max(0,r),s=O(e,n);for(;!s.admitted&&Date.now()<o;)Zt(Math.min(t,o-Date.now())),s=O(e,n);return s}function en(e,r={}){let t=ue(e);if(!t.heavy)return{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:"command does not require heavy-verification token",verificationGate:{...j(e),slotId:null}};if(V())return{allowed:!0,outcome:"heavy_verification_skipped",commandClass:t.commandClass,reason:"KYNVER_HEAVY_VERIFICATION_SKIP bypasses gate",verificationGate:{...j(e),slotId:null}};let n=r.waitMs??0,o=n>0?hr(e,n,r.pollMs):O(e);return o.admitted?{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:t.reason??"heavy-verification token acquired",verificationGate:o}:{allowed:!1,outcome:F,commandClass:t.commandClass,reason:t.reason??o.reason??F,verificationGate:o}}export{d as DEFAULT_WORKER_PROVIDER,F as HEAVY_VERIFICATION_TOKEN_REQUIRED,G as KYNVER_NO_PROD_DB_CREDENTIALS_ENV,Pr as auditReviewWorkerCredentialScope,Cr as auditWorkerEnv,p as buildWorkerSpawnEnv,ue as classifyHeavyShellCommand,lr as enforceCursorWorkerProvider,en as gateWorkerShellCommand,u as isClaudeFamilyProvider,v as isForbiddenWorkerEnvKey,Mr as isHarnessExpertReviewWorker,Re as isNoProdCredentialReviewEnvironment,he as listForbiddenWorkerEnvKeys,ye as listOperatorAllowedWorkerEnvKeys,_ as normalizeWorkerProviderName,Pt as preferCursorExecutor,wt as resolveConfiguredWorkerProvider,C as scrubWorkerEnv,le as taskAllowsClaudeWorker,ce as taskExpressesWorkerProviderPreference};
|