@kynver-app/runtime 0.1.142 → 0.1.148
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +52 -53
- package/dist/index.js +68 -69
- package/dist/instruction-bundle/contract.js +1 -1
- package/dist/provider-evidence/collect.d.ts +5 -0
- package/dist/provider-evidence/index.d.ts +1 -0
- package/dist/provider-evidence/shared-cache.d.ts +8 -0
- package/dist/server/cleanup.js +11 -11
- package/dist/server/default-repo.js +1 -1
- package/dist/server/monitor.js +6 -6
- package/dist/server/worker-policy.js +1 -1
- package/dist/server/wsl-crash-dumps.d.ts +2 -0
- package/dist/server/wsl-crash-dumps.js +1 -0
- package/dist/worker-persona-catalog.js +1 -1
- package/package.json +7 -2
package/dist/server/monitor.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
var u=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};function D(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
|
|
1
|
+
var u=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};function D(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 ee(e){let r=e.trim();if(!r)return null;let t=D(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=D(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=D(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function re(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?ee(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=ee(t);return n||t}var te=u(()=>{"use strict"});import{existsSync as fr,mkdirSync as Pt,readFileSync as pr,readdirSync as Ut,statSync as ne,writeFileSync as Tt}from"node:fs";function oe(e){console.error(e),process.exit(1)}function M(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function E(e){try{return JSON.parse(e)}catch{return null}}function C(e){try{return ne(e).size}catch{return 0}}function A(e){try{return ne(e).mtime.toISOString()}catch{return null}}function se(e,r){return fr(e)?pr(e,"utf8").split(`
|
|
2
2
|
`).slice(-r).join(`
|
|
3
|
-
`):""}function w(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function
|
|
4
|
-
`).filter(Boolean);for(let s of o){let i=E(s);if(!i||typeof i!="object"||Array.isArray(i))continue;let a=i;if(r.heartbeatCount++,a.ts){let l=String(a.ts),m=Date.parse(l);Number.isFinite(m)&&m>t?r.timestampAnomalies.push({kind:"future_heartbeat_timestamp",observedAt:l,clampedTo:n}):r.lastHeartbeatAt=l}a.phase!==void 0&&a.phase!==null&&(r.lastHeartbeatPhase=String(a.phase)),a.summary!==void 0&&a.summary!==null&&(r.lastHeartbeatSummary=String(a.summary)),
|
|
3
|
+
`):""}function w(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function ie(e){let r=null,t=-1/0;for(let n of e){if(!n)continue;let o=Date.parse(n);Number.isFinite(o)&&o>t&&(t=o,r=n)}return r}function I(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var p=u(()=>{"use strict"});import{existsSync as gr,readFileSync as hr}from"node:fs";function ae(e){return e==="complete"}function le(e){return ae(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function ue(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!gr(e))return r;let t=Date.now()+yr,n=new Date(t).toISOString(),o=hr(e,"utf8").split(`
|
|
4
|
+
`).filter(Boolean);for(let s of o){let i=E(s);if(!i||typeof i!="object"||Array.isArray(i))continue;let a=i;if(r.heartbeatCount++,a.ts){let l=String(a.ts),m=Date.parse(l);Number.isFinite(m)&&m>t?r.timestampAnomalies.push({kind:"future_heartbeat_timestamp",observedAt:l,clampedTo:n}):r.lastHeartbeatAt=l}a.phase!==void 0&&a.phase!==null&&(r.lastHeartbeatPhase=String(a.phase)),a.summary!==void 0&&a.summary!==null&&(r.lastHeartbeatSummary=String(a.summary)),ae(r.lastHeartbeatPhase)&&(r.terminalFinalResult=re(a)),r.heartbeatBlocker=a.blocker?String(a.blocker):null,a.boxResourceSnapshot&&typeof a.boxResourceSnapshot=="object"&&!Array.isArray(a.boxResourceSnapshot)&&(r.lastBoxResourceSnapshot=a.boxResourceSnapshot),Array.isArray(a.prEvidence)&&(r.lastPrEvidence=a.prEvidence.filter(l=>!!l&&typeof l=="object"&&typeof l.prUrl=="string"))}return r}var yr,ce=u(()=>{"use strict";te();p();yr=6e4});function kr(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function Rr(e){if(!e)return[];let r=[],t="",n,o=!1;for(let s of e){if(o){t+=s,o=!1;continue}if(s==="\\"){o=!0;continue}if(n){s===n?n=void 0:t+=s;continue}if(s==='"'||s==="'"){n=s;continue}if(/\s/.test(s)){t&&(r.push(t),t="");continue}t+=s}return t&&r.push(t),r}function Sr(e){let r=kr(e[0]);return!!(r&&br.has(r))}function K(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function F(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function xr(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function _r(e){let r=[];for(let t=1;t<e.length;t+=1){let n=e[t];if(n){if(n==="--"){r.push(...e.slice(t+1));break}if(n.startsWith("-")){if(n.includes("="))continue;de.has(n)&&(t+=1);continue}r.push(n)}}return r}function vr(e){let r=!1,t=e.map((o,s)=>{let i=xr(o),a=e[s-1];return a&&de.has(a)&&o.startsWith("!")&&!o.includes("/")&&!o.endsWith("/**")&&(i=`${o}/**`),i!==o&&(r=!0),i}),n=_r(t);if(n.length===2){let[o,s]=n;if(F(s))return{argv:[t[0]??"rg",o,"-g",`${s}/**`,"."],changed:!0};if(K(s))return{argv:[t[0]??"rg","-g",s,o,"."],changed:!0}}return r&&n.length===1?{argv:[...t,"."],changed:!0}:{argv:t,changed:r}}function H(e){let r=e.trim();if(!r)return{command:r,changed:!1};let t=r.includes("&&")?" && ":r.includes("||")?" || ":"; ",n=r.split(/\s*(?:&&|\|\||;)\s*/u),o=!1,s=n.map(i=>{let a=Rr(i.trim());if(!a.length||!Sr(a))return i;let l=vr(a);return l.changed?(o=!0,l.argv.join(" ")):i});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function me(e){if(!e)return{};let r=e.match(/search\s+"(.+)"\s+in\s+([^()]+?)(?:\s*\(|$)/iu);if(r)return{pattern:r[1],target:r[2]?.trim()};let t=e.match(/^search\s+"(.+)"\s+in\s+(.+)$/iu);return t?{pattern:t[1],target:t[2]?.trim()}:{}}function Er(e){let{pattern:r,target:t}=me(e);return r?F(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:K(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function Cr(e){let{pattern:r,target:t}=me(e);if(!r)return null;if(F(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&K(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function Ar(e){if(e.kind==="bad_scope"&&e.pattern?.includes("agent-os-land-pr")&&e.target==="package.json")return"Search package.json with a glob from the repo root: `rg -g package.json agent-os-land-pr .` \u2014 or run `node scripts/agent-os-land-pr.mjs <pr-url>` directly.";if(e.kind==="bad_scope"&&e.pattern&&e.target)return`Use \`rg -g '${e.target}' ${e.pattern} .\` from the repo root instead of treating ${e.target} as a folder.`;if(e.kind==="rg_exclude_syntax"&&e.pattern){let r=e.target?`${e.target.trim()}/**`:"!node_modules/**";return`Repo search scope \`${e.target??"!node_modules"}\` is not a valid ripgrep path. Use \`rg "${e.pattern}" -g '${r}' .\` from the repo root (exclude globs need a \`/**\` suffix).`}return e.kind==="no_matches"&&e.pattern?`No matches for "${e.pattern}". Try a broader pattern, drop overly short tokens, or search from the repo root with \`rg "${e.pattern}" .\`.`:null}function wr(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 L(e){let r=e.meta?.trim()||(e.command?wr(e.command):null)||null;if(r){let t=Er(r),n=Ar(t);if(n)return n;let o=Cr(r);if(o?.changed)return`Repo search used an invalid scope. Retry with: \`${o.command}\`.`}if(e.command&&/\b(rg|ripgrep)\b/i.test(e.command)){let t=H(e.command);if(t.changed)return`Ripgrep scope may be invalid. Retry with: \`${t.command}\`.`;if(e.exitCode===1)return"Ripgrep returned no matches (exit 1). Try a broader pattern or search from the repo root."}return null}var br,de,fe=u(()=>{"use strict";br=new Set(["rg","ripgrep","grep"]),de=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function R(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function Ur(e){let r=e.trim();if(!r)return null;if(r.startsWith("{"))try{return JSON.parse(r)}catch{}let t=r.indexOf("{"),n=r.lastIndexOf("}");if(t>=0&&n>t)try{return JSON.parse(r.slice(t,n+1))}catch{return null}return null}function S(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Tr(e){let r=e.metadata;if(!S(r))return null;let t=r.vulnerabilities;if(!S(t))return null;let n=s=>typeof t[s]=="number"?t[s]:0,o={info:n("info"),low:n("low"),moderate:n("moderate"),high:n("high"),critical:n("critical"),total:n("total")};return typeof t.total!="number"&&!o.critical&&!o.high&&!o.moderate&&!o.low&&!o.info?null:o}function Br(e){let r=[];e.critical&&r.push(`${e.critical} critical`),e.high&&r.push(`${e.high} high`),e.moderate&&r.push(`${e.moderate} moderate`),e.low&&r.push(`${e.low} low`),e.info&&r.push(`${e.info} info`);let t=r.length?r.join(", "):"see report";return`npm audit: ${e.total} vulnerabilit${e.total===1?"y":"ies"} (${t}) \u2014 remediation required`}function Nr(e,r){let t=e.error;if(S(t)){let s=typeof t.summary=="string"?t.summary.trim():"",i=typeof t.code=="string"?t.code.trim():"";if(s)return i?`${i}: ${s}`:s;if(i)return i}let n=typeof e.message=="string"?e.message.trim():"";if(n)return n;let o=r.trim();return o?R(o.split(`
|
|
5
5
|
`).find(Boolean)??o,160):"npm audit failed"}function Dr(e){let r=`${e.stdout}
|
|
6
|
-
${e.stderr}`.trim(),t=Ur(r);if(!t||!S(t)){let o=R(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(S(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${Nr(t,e.stderr)}`};let n=Tr(t);return n?e.exitCode===0&&n.total===0?{kind:"success",exitCode:0,summary:"npm audit: no vulnerabilities reported",audit:n}:{kind:"audit_findings",exitCode:e.exitCode,summary:Br(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function Mr(e){return Or.test(e)}function Ir(e){return
|
|
7
|
-
`).filter(Boolean);for(let n of t){let o=E(n);if(!o)continue;let s=Lr(o);if(s&&(r.firstEventAt||=s,r.lastEventAt=s),o.type==="stream_event"&&o.event&&typeof o.event=="object"&&o.event.type==="content_block_start"){let a=o.event.content_block;a?.type==="tool_use"&&(r.currentTool=String(a.name||"tool"))}if(o.type==="assistant"&&o.message&&typeof o.message=="object"){let a=o.message.content;if(Array.isArray(a)){let l=a.find(m=>m?.type==="tool_use");l&&(r.currentTool=String(l.name||r.currentTool))}}if(o.type==="tool_call"&&o.subtype==="started"){let a=o.tool_call&&typeof o.tool_call=="object"&&!Array.isArray(o.tool_call)?o.tool_call:void 0,l=$r(a);l&&(r.currentTool=l)}let i=Yr(o);i&&Gr(r,
|
|
8
|
-
`).map(r=>r.trim()).filter(Boolean)}function O(e,r){try{let t=ve("git",r,M({cwd:e,encoding:"utf8"}));return{status:t.status,stdout:t.stdout||"",stderr:t.stderr||"",error:t.error?t.error.message:null}}catch(t){return{status:null,stdout:"",stderr:"",error:t.message}}}function _e(e,r,t){let n=O(e,["merge-base","--is-ancestor",r,t]);return n.status===0?{isAncestor:!0,error:null}:n.status===1?{isAncestor:!1,error:null}:{isAncestor:null,error:n.error||n.stderr||n.stdout||`git exited ${n.status}`}}function Ce(e,r="origin/main"){let t=typeof r=="string"?{base:r}:r,n=t.baseCommit?.trim()||t.base?.trim()||"origin/main",o=t.baseCommit?.trim()||null;if(!e)return $(n,"missing worktree path");let s=O(e,["rev-parse","HEAD"]);if(s.status!==0)return $(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let f=O(e,["rev-parse",n]);if(f.status!==0)return $(n,f.error||f.stderr||f.stdout||`failed to resolve ${n}`,s.stdout.trim());i=f.stdout.trim()}let a=s.stdout.trim();if(a===i)return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:!0,headIsAncestorOfBase:!0,relation:"synced"};let l=_e(e,i,a),m=_e(e,a,i),d=l.error||m.error||void 0;if(l.isAncestor==null||m.isAncestor==null)return{checked:!1,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:m.isAncestor,relation:"unknown",...d?{error:d}:{}};let c=l.isAncestor?"ahead":m.isAncestor?"merged":"diverged";return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:m.isAncestor,relation:c,...d?{error:d}:{}}}function $(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var j=u(()=>{"use strict";p();xe()});function x(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function et(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 rt(e){if(x(e.headCommit)||x(e.prUrl)||x(e.artifactBundlePath)||x(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&x(r.head))}function Ae(e){return et(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:rt(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 we(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var Oe=u(()=>{"use strict"});function Y(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 Pe(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function P(e){let r=e.trim();if(!r)return null;let t=Y(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let d=Y(s[1]??"");d&&n.push(d)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let d=Y(r.slice(i,a+1));d&&n.push(d)}if(n.length===0)return null;let l=n[n.length-1],m=Pe(l);for(let d of n){let c=Pe(d);c>m&&(l=d,m=c)}return l}var G=u(()=>{"use strict"});function We(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 Ue(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function tt(e){return new Set(e.map(r=>Ue(We(r)??r)).filter(Boolean))}function Te(e,r,t){let n=We(e)??e;if(!n)return"unrelated";let o=Ue(n);return tt(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var Be=u(()=>{"use strict"});function k(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function nt(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]}`:k(e)}function W(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Ne(e){let r=null;if(typeof e=="string"){let o=P(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=b(String(s.prUrl??s.pr_url??"")),a=k(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:k(s.mergeCommit??s.merge_commit),reason:k(s.reason)})}return n}function De(e,r){let t=[],n=b(k(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=b(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function Me(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(!nt(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?b(k(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?b(r.targetPrUrls[0]):null):null;if(s){let c=De(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.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=Ne(n).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=Ne(n),a=new Map(i.map(c=>[W(c.prUrl),c])),l=new Set(r.targetPrUrls.map(c=>W(b(c)??c)).filter(Boolean)),m=De(t,n);if(r.landingOnly)for(let c of m){let f=a.get(W(c)),g=Te(c,r.targetPrUrls,f);if(!(g==="contract"||g==="support"))return l.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=W(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 Ie(e){if(e.blocked)return e.detail??e.reason}var Ke=u(()=>{"use strict";G();Be()});function st(e){let r=Date.now();if(e.completionBlocker&&!Fe(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&at(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=Ae(o);if(s.blocked){let i=we(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=Me({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Ie(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(it(e))return{state:"done",reason:"empty abandoned worker record"};let o=ye(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Re({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let a=e.error?.trim();return{state:"needs_attention",reason:a?`${s.attentionReason} (${a})`:s.attentionReason}}let i=e.error?.trim();return{state:"needs_attention",reason:i?`process exited without a final result: ${i}`:s?.attentionReason??"process exited without a final result"}}if(e.heartbeatBlocker)return{state:"blocked",reason:`worker heartbeat reported blocker: ${e.heartbeatBlocker}`};let t=e.startedAt?Date.parse(e.startedAt):NaN;if(!e.firstEventAt&&e.stdoutBytes===0&&e.heartbeatBytes===0&&Number.isFinite(t)&&r-t>ot)return{state:"needs_attention",reason:`no first stream event ${I(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>U?{state:"stale",reason:`no log/event/heartbeat activity for ${I(n)}s`}:{state:"ok",reason:"recent activity"}}function Fe(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function it(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 at(e){let r=null;if(typeof e=="string"?r=P(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 lt(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??ae(t))}function He(e,r={}){let t=ge(e.stdoutPath),n=le(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=lt(e,t.finalResult,n),i=o?!1:w(e.pid),a=C(e.stdoutPath),l=C(e.stderrPath),m=C(e.heartbeatPath),d=Ee(e.worktreePath),c=Ce(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),f=se([t.lastEventAt,n.lastHeartbeatAt,A(e.stdoutPath),A(e.stderrPath),A(e.heartbeatPath)]),g=t.error||!i&&!s&&oe(e.stderrPath,10).trim()||void 0,h=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,y=Fe(h)?null:h,dr=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,N=st({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:l,heartbeatBytes:m,lastActivityAt:f,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:g,changedFiles:d,gitAncestry:c,completionBlocker:y,landingContract:dr,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),mr=y||N.state==="blocked"?"blocked":o||N.state==="done"?"done":s?"exited":i?"running":"exited";return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:mr,attention:N,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:l,heartbeatBytes:m,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:f,currentTool:o?null:t.currentTool,heartbeatCount:n.heartbeatCount,lastHeartbeatAt:n.lastHeartbeatAt,lastHeartbeatPhase:n.lastHeartbeatPhase,lastHeartbeatSummary:n.lastHeartbeatSummary,heartbeatBlocker:n.heartbeatBlocker,timestampAnomalies:n.timestampAnomalies,finalResult:s,error:g,changedFiles:d,gitAncestry:c,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.orchestrationAudit?.provider??null,boxKind:e.boxKind??null,boxId:e.boxId??null,runtimeId:e.runtimeId??null,personaSlug:e.personaSlug??null,dispatched:e.dispatched??null,localOnly:e.localOnly??null}}function Le(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function $e(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}var ot,U,_=u(()=>{"use strict";ue();he();be();Se();j();Oe();Ke();G();p();ot=18e4,U=6e5});var v=u(()=>{"use strict"});var Ve=u(()=>{"use strict";j();v()});var V=u(()=>{"use strict"});var ze=u(()=>{"use strict"});var Je=u(()=>{"use strict"});var Wn,Un,z=u(()=>{"use strict";Wn=25*1024*1024*1024,Un=12*1024*1024*1024});var Mn,In,Xe=u(()=>{"use strict";z();Mn=5*1024*1024*1024,In=10*1024*1024*1024});var jn,Yn,J=u(()=>{"use strict";Xe();z();jn=30*1024*1024*1024,Yn=15*1024*1024*1024});var qe=u(()=>{"use strict";T();p()});var Qe=u(()=>{"use strict";_()});var ht,yt,Ze=u(()=>{"use strict";Je();B();V();q();J();T();qe();Qe();p();ht=500*1024*1024,yt=4*1024*1024*1024});var q=u(()=>{"use strict";Ze()});import{homedir as kt}from"node:os";import Rt from"node:path";var St,er=u(()=>{"use strict";St=Rt.join(kt(),".kynver",".env")});var rr=u(()=>{"use strict"});var tr=u(()=>{"use strict";rr()});var nr=u(()=>{"use strict"});var or=u(()=>{"use strict";tr();nr()});var sr=u(()=>{"use strict"});var ir=u(()=>{"use strict";sr()});var ar=u(()=>{"use strict";er();v();B();or();ir()});import{homedir as _t,totalmem as cs}from"node:os";import Q from"node:path";var lr,Rs,Ss,xs,_s,B=u(()=>{"use strict";Ve();v();p();V();ze();q();J();ar();lr=Q.join(_t(),".kynver"),Rs=Q.join(lr,"config.json"),Ss=Q.join(lr,"credentials"),xs=500*1024*1024,_s=4*1024*1024*1024});import{homedir as vt}from"node:os";import Et from"node:path";var Ps,ur=u(()=>{"use strict";B();v();p();Ps=Et.join(vt(),".openclaw","harness")});var T=u(()=>{"use strict";ur();p()});_();var je="kynver-harness:",ut="@runner:";function Ye(e){return e?.trim()?e.trim():null}function ct(e){let r=Ye(e);if(!r?.startsWith(je))return null;let t=r.slice(je.length),n=t.indexOf(ut);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function Ge(e,r){let t=Ye(r);return t?ct(e)===t:!1}_();p();function dt(e){let{worker:r,status:t,taskLease:n}=e,o=n?.leaseOwner??null;if(r.dispatched&&n){if(n.status==="running"&&o&&!Ge(o,r.runId))return{health:"orphaned",reason:`task lease held by ${o}, expected harness run ${r.runId}`};let i=r.leaseToken?.trim()??"",a=n.leaseToken?.trim()??"";if(n.status==="running"&&i&&a&&i!==a)return{health:"orphaned",reason:"task leaseToken superseded on board \u2014 completion replay would fail"};if(n.status==="running"&&!t.alive&&!t.finalResult)return{health:"orphaned",reason:"board task running but worker process is not alive"}}if(r.status==="running"&&!t.alive&&!t.finalResult)return{health:"orphaned",reason:"worker.json still running but process is dead"};if(t.attention.state==="stale")return{health:"stale",reason:t.attention.reason};let s=t.lastHeartbeatAt?Date.parse(t.lastHeartbeatAt):NaN;return t.alive&&Number.isFinite(s)&&Date.now()-s>U?{health:"stale",reason:`heartbeat older than ${Math.floor(U/1e3)}s`}:t.alive&&r.pid&&!w(r.pid)?{health:"orphaned",reason:"pid recorded but process is not alive"}:n?.status==="running"&&!t.alive&&t.finalResult?{health:"healthy",reason:"finished worker awaiting completion replay"}:{health:"healthy",reason:t.attention.reason||"worker within expected lifecycle bounds"}}T();function cr(e){return!!e.completionReportedAt?.trim()}_();function Ct(e){let{worker:r,status:t}=e,n=[];r.localOnly&&n.push("local-only worker (no board linkage)"),(!r.agentOsId||!r.taskId)&&n.push("missing agentOsId/taskId linkage"),cr(r)&&n.push("completion already acknowledged"),r.completionBlocker&&n.push(r.completionBlocker),t.heartbeatBlocker&&t.alive&&n.push(`worker heartbeat blocker: ${t.heartbeatBlocker}`),t.attention.state==="blocked"&&n.push(t.attention.reason||"worker attention blocked"),$e(t)&&n.push(t.attention.reason||"landing gate blocked");let o=Le(t),s;return o?t.finalResult?s="final_result":t.alive?s="terminal_status":s="process_exited":n.push("worker has not reached a terminal condition"),{eligible:o&&n.length===0,terminalVerified:o,terminalReason:s,blockers:n}}export{Ct as assessAutoCompleteEligibility,dt as classifyWorkerHealth,He as computeWorkerStatus};
|
|
6
|
+
${e.stderr}`.trim(),t=Ur(r);if(!t||!S(t)){let o=R(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(S(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${Nr(t,e.stderr)}`};let n=Tr(t);return n?e.exitCode===0&&n.total===0?{kind:"success",exitCode:0,summary:"npm audit: no vulnerabilities reported",audit:n}:{kind:"audit_findings",exitCode:e.exitCode,summary:Br(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function Mr(e){return Or.test(e)}function Ir(e){return Wr.test(e)}function Kr(e){let r=L({command:e.command,exitCode:e.exitCode});if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"ripgrep finished (exit 0)"};if(e.exitCode===1){let n=(e.stderr||e.interleaved).trim();if(n&&Pr.test(n)){let i=R(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=H(e.command),s=o.changed&&!r?` Retry with: \`${o.command}\`.`:"";return{kind:"search_no_matches",exitCode:1,summary:r??`ripgrep: no matches (exit 1).${s} Try a broader pattern or search from the repo root.`}}let t=R(e.interleaved||e.stdout||e.stderr||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:r??`ripgrep failed (exit ${e.exitCode}): ${t}`}}function pe(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(Mr(e.command)){let i=r.trim()||n.trim()||t.trim();return Dr({exitCode:e.exitCode,stdout:i,stderr:t})}if(Ir(e.command))return Kr({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=L({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=R(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var Or,Wr,Pr,ge=u(()=>{"use strict";fe();Or=/\bnpm\s+audit\b/i,Wr=/\b(rg|ripgrep)\b/i,Pr=/\b(error|invalid|unknown|panic|not found)\b/i});import{existsSync as Fr,readFileSync as Hr}from"node:fs";function Lr(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function $r(e){if(!e)return null;for(let r of Object.keys(e))if(r.endsWith("ToolCall")){let t=r.slice(0,-8);return t.length?t:r}return null}function jr(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 Yr(e){if(e.type!=="tool_call"||e.subtype!=="completed")return null;let t=(e.tool_call&&typeof e.tool_call=="object"&&!Array.isArray(e.tool_call)?e.tool_call:null)?.shellToolCall;if(!t||typeof t!="object"||Array.isArray(t))return null;let n=t,o=n.args,s=o&&typeof o=="object"&&!Array.isArray(o)&&typeof o.command=="string"?String(o.command):"",i=n.result;if(!i||typeof i!="object"||Array.isArray(i))return null;let a=i.success??i.failure;if(!a||typeof a!="object"||Array.isArray(a))return null;let l=a,m=typeof l.exitCode=="number"?l.exitCode:0;return{command:s,exitCode:m,stdout:typeof l.stdout=="string"?l.stdout:"",stderr:typeof l.stderr=="string"?l.stderr:"",interleaved:typeof l.interleavedOutput=="string"?l.interleavedOutput:""}}function Gr(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function he(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null};if(!Fr(e))return r;let t=Hr(e,"utf8").split(`
|
|
7
|
+
`).filter(Boolean);for(let n of t){let o=E(n);if(!o)continue;let s=Lr(o);if(s&&(r.firstEventAt||=s,r.lastEventAt=s),o.type==="stream_event"&&o.event&&typeof o.event=="object"&&o.event.type==="content_block_start"){let a=o.event.content_block;a?.type==="tool_use"&&(r.currentTool=String(a.name||"tool"))}if(o.type==="assistant"&&o.message&&typeof o.message=="object"){let a=o.message.content;if(Array.isArray(a)){let l=a.find(m=>m?.type==="tool_use");l&&(r.currentTool=String(l.name||r.currentTool))}}if(o.type==="tool_call"&&o.subtype==="started"){let a=o.tool_call&&typeof o.tool_call=="object"&&!Array.isArray(o.tool_call)?o.tool_call:void 0,l=$r(a);l&&(r.currentTool=l)}let i=Yr(o);i&&Gr(r,pe({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&jr(r,o)}return r}var ye=u(()=>{"use strict";ge();p()});function zr(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function be(e){let r=(e??"").trim();if(!r)return null;for(let t of Vr)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${zr(r)}`};return null}var Vr,ke=u(()=>{"use strict";Vr=[{test:/\b(?:invalid|unknown|unsupported|unrecognized)\b[^.\n]*\bmodel\b/i,label:"provider rejected the requested model"},{test:/\bmodel\b[^.\n]*\b(?:not\s+(?:found|supported|available|recognized|valid)|is\s+not\s+valid|does\s+not\s+exist)/i,label:"provider rejected the requested model"},{test:/\b(?:did you mean|available models|choose (?:a|one of)|supported models)\b/i,label:"provider rejected the requested model"},{test:/model preflight failed/i,label:"model/provider preflight failed"},{test:/\b(?:command not found|ENOENT|is the .*CLI on PATH|executable not found|no such file or directory)\b/i,label:"provider CLI is missing or not on PATH"},{test:/\bfailed to spawn\b/i,label:"provider failed to spawn the worker process"},{test:/\b(?:not logged in|unauthorized|authentication (?:failed|required)|invalid api key|missing api key|401)\b/i,label:"provider authentication failed"}]});function Re(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Jr(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 Xr(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:Re(e.head)}function qr(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 Se(e){if(e.alive||Jr(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=Re(e.headCommit)??Xr(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:qr(s,r,t)}}var xe=u(()=>{"use strict"});var Qr,Jt,_e=u(()=>{"use strict";Qr=["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"],Jt=new Set(Qr)});import{spawnSync as Ee}from"node:child_process";function Zr(e,r,t={}){let n=Ee("git",r,M({cwd:e,encoding:"utf8"}));if(n.status!==0&&!t.allowFailure){let o=`git ${r.join(" ")} failed: ${n.stderr||n.stdout}`;if(t.throwError)throw new Error(o);oe(o)}return n.stdout||""}function Ce(e){return Zr(e,["status","--short"],{allowFailure:!0}).split(`
|
|
8
|
+
`).map(r=>r.trim()).filter(Boolean)}function O(e,r){try{let t=Ee("git",r,M({cwd:e,encoding:"utf8"}));return{status:t.status,stdout:t.stdout||"",stderr:t.stderr||"",error:t.error?t.error.message:null}}catch(t){return{status:null,stdout:"",stderr:"",error:t.message}}}function ve(e,r,t){let n=O(e,["merge-base","--is-ancestor",r,t]);return n.status===0?{isAncestor:!0,error:null}:n.status===1?{isAncestor:!1,error:null}:{isAncestor:null,error:n.error||n.stderr||n.stdout||`git exited ${n.status}`}}function Ae(e,r="origin/main"){let t=typeof r=="string"?{base:r}:r,n=t.baseCommit?.trim()||t.base?.trim()||"origin/main",o=t.baseCommit?.trim()||null;if(!e)return $(n,"missing worktree path");let s=O(e,["rev-parse","HEAD"]);if(s.status!==0)return $(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let f=O(e,["rev-parse",n]);if(f.status!==0)return $(n,f.error||f.stderr||f.stdout||`failed to resolve ${n}`,s.stdout.trim());i=f.stdout.trim()}let a=s.stdout.trim();if(a===i)return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:!0,headIsAncestorOfBase:!0,relation:"synced"};let l=ve(e,i,a),m=ve(e,a,i),d=l.error||m.error||void 0;if(l.isAncestor==null||m.isAncestor==null)return{checked:!1,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:m.isAncestor,relation:"unknown",...d?{error:d}:{}};let c=l.isAncestor?"ahead":m.isAncestor?"merged":"diverged";return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:m.isAncestor,relation:c,...d?{error:d}:{}}}function $(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var j=u(()=>{"use strict";p();_e()});function x(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function et(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 rt(e){if(x(e.headCommit)||x(e.prUrl)||x(e.artifactBundlePath)||x(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&x(r.head))}function we(e){return et(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:rt(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 Oe(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var We=u(()=>{"use strict"});function Y(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 Pe(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function W(e){let r=e.trim();if(!r)return null;let t=Y(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let d=Y(s[1]??"");d&&n.push(d)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let d=Y(r.slice(i,a+1));d&&n.push(d)}if(n.length===0)return null;let l=n[n.length-1],m=Pe(l);for(let d of n){let c=Pe(d);c>m&&(l=d,m=c)}return l}var G=u(()=>{"use strict"});function Ue(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 Te(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function tt(e){return new Set(e.map(r=>Te(Ue(r)??r)).filter(Boolean))}function Be(e,r,t){let n=Ue(e)??e;if(!n)return"unrelated";let o=Te(n);return tt(r).has(o)?"contract":t?(t.outcome==="skipped"||t.outcome==="blocked")&&t.reason?.trim()?"support":(t.outcome==="merged","unrelated"):"unrelated"}var Ne=u(()=>{"use strict"});function k(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function nt(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]}`:k(e)}function P(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function De(e){let r=null;if(typeof e=="string"){let o=W(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=b(String(s.prUrl??s.pr_url??"")),a=k(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:k(s.mergeCommit??s.merge_commit),reason:k(s.reason)})}return n}function Me(e,r){let t=[],n=b(k(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=b(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function Ie(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(!nt(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?b(k(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?b(r.targetPrUrls[0]):null):null;if(s){let c=Me(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.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=De(n).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=De(n),a=new Map(i.map(c=>[P(c.prUrl),c])),l=new Set(r.targetPrUrls.map(c=>P(b(c)??c)).filter(Boolean)),m=Me(t,n);if(r.landingOnly)for(let c of m){let f=a.get(P(c)),g=Be(c,r.targetPrUrls,f);if(!(g==="contract"||g==="support"))return l.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=P(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 Ke(e){if(e.blocked)return e.detail??e.reason}var Fe=u(()=>{"use strict";G();Ne()});function st(e){let r=Date.now();if(e.completionBlocker&&!He(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&at(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=we(o);if(s.blocked){let i=Oe(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=Ie({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Ke(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(it(e))return{state:"done",reason:"empty abandoned worker record"};let o=be(e.error);if(o)return{state:"blocked",reason:o.reason};let s=Se({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let a=e.error?.trim();return{state:"needs_attention",reason:a?`${s.attentionReason} (${a})`:s.attentionReason}}let i=e.error?.trim();return{state:"needs_attention",reason:i?`process exited without a final result: ${i}`:s?.attentionReason??"process exited without a final result"}}if(e.heartbeatBlocker)return{state:"blocked",reason:`worker heartbeat reported blocker: ${e.heartbeatBlocker}`};let t=e.startedAt?Date.parse(e.startedAt):NaN;if(!e.firstEventAt&&e.stdoutBytes===0&&e.heartbeatBytes===0&&Number.isFinite(t)&&r-t>ot)return{state:"needs_attention",reason:`no first stream event ${I(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>U?{state:"stale",reason:`no log/event/heartbeat activity for ${I(n)}s`}:{state:"ok",reason:"recent activity"}}function He(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function it(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 at(e){let r=null;if(typeof e=="string"?r=W(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 lt(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??le(t))}function Le(e,r={}){let t=he(e.stdoutPath),n=ue(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=lt(e,t.finalResult,n),i=o?!1:w(e.pid),a=C(e.stdoutPath),l=C(e.stderrPath),m=C(e.heartbeatPath),d=Ce(e.worktreePath),c=Ae(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),f=ie([t.lastEventAt,n.lastHeartbeatAt,A(e.stdoutPath),A(e.stderrPath),A(e.heartbeatPath)]),g=t.error||!i&&!s&&se(e.stderrPath,10).trim()||void 0,h=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,y=He(h)?null:h,dr=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,N=st({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:l,heartbeatBytes:m,lastActivityAt:f,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:g,changedFiles:d,gitAncestry:c,completionBlocker:y,landingContract:dr,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),mr=y||N.state==="blocked"?"blocked":o||N.state==="done"?"done":s?"exited":i?"running":"exited";return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:mr,attention:N,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:l,heartbeatBytes:m,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:f,currentTool:o?null:t.currentTool,heartbeatCount:n.heartbeatCount,lastHeartbeatAt:n.lastHeartbeatAt,lastHeartbeatPhase:n.lastHeartbeatPhase,lastHeartbeatSummary:n.lastHeartbeatSummary,heartbeatBlocker:n.heartbeatBlocker,timestampAnomalies:n.timestampAnomalies,finalResult:s,error:g,changedFiles:d,gitAncestry:c,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.orchestrationAudit?.provider??null,boxKind:e.boxKind??null,boxId:e.boxId??null,runtimeId:e.runtimeId??null,personaSlug:e.personaSlug??null,dispatched:e.dispatched??null,localOnly:e.localOnly??null}}function $e(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function je(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}var ot,U,_=u(()=>{"use strict";ce();ye();ke();xe();j();We();Fe();G();p();ot=18e4,U=6e5});var v=u(()=>{"use strict"});var ze=u(()=>{"use strict";j();v()});var V=u(()=>{"use strict"});var z=u(()=>{"use strict"});var Je=u(()=>{"use strict"});var Un,Tn,J=u(()=>{"use strict";Un=25*1024*1024*1024,Tn=12*1024*1024*1024});var In,Kn,Xe=u(()=>{"use strict";J();In=5*1024*1024*1024,Kn=10*1024*1024*1024});var Yn,Gn,X=u(()=>{"use strict";Xe();J();Yn=30*1024*1024*1024,Gn=15*1024*1024*1024});var qe=u(()=>{"use strict";T();p()});var Qe=u(()=>{"use strict";_()});var yt,bt,Ze=u(()=>{"use strict";Je();B();V();z();Q();X();T();qe();Qe();p();yt=500*1024*1024,bt=4*1024*1024*1024});var Q=u(()=>{"use strict";Ze()});import{homedir as Rt}from"node:os";import St from"node:path";var xt,er=u(()=>{"use strict";xt=St.join(Rt(),".kynver",".env")});var rr=u(()=>{"use strict"});var tr=u(()=>{"use strict";rr()});var nr=u(()=>{"use strict"});var or=u(()=>{"use strict";tr();nr()});var sr=u(()=>{"use strict"});var ir=u(()=>{"use strict";sr()});var ar=u(()=>{"use strict";er();v();B();or();ir()});import{homedir as vt,totalmem as ds}from"node:os";import Z from"node:path";var lr,Ss,xs,_s,vs,B=u(()=>{"use strict";ze();v();p();V();z();Q();X();ar();lr=Z.join(vt(),".kynver"),Ss=Z.join(lr,"config.json"),xs=Z.join(lr,"credentials"),_s=500*1024*1024,vs=4*1024*1024*1024});import{homedir as Et}from"node:os";import Ct from"node:path";var Ps,ur=u(()=>{"use strict";B();v();p();Ps=Ct.join(Et(),".openclaw","harness")});var T=u(()=>{"use strict";ur();p()});_();var Ye="kynver-harness:",ut="@runner:";function Ge(e){return e?.trim()?e.trim():null}function ct(e){let r=Ge(e);if(!r?.startsWith(Ye))return null;let t=r.slice(Ye.length),n=t.indexOf(ut);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function Ve(e,r){let t=Ge(r);return t?ct(e)===t:!1}_();p();function dt(e){let{worker:r,status:t,taskLease:n}=e,o=n?.leaseOwner??null;if(r.dispatched&&n){if(n.status==="running"&&o&&!Ve(o,r.runId))return{health:"orphaned",reason:`task lease held by ${o}, expected harness run ${r.runId}`};let i=r.leaseToken?.trim()??"",a=n.leaseToken?.trim()??"";if(n.status==="running"&&i&&a&&i!==a)return{health:"orphaned",reason:"task leaseToken superseded on board \u2014 completion replay would fail"};if(n.status==="running"&&!t.alive&&!t.finalResult)return{health:"orphaned",reason:"board task running but worker process is not alive"}}if(r.status==="running"&&!t.alive&&!t.finalResult)return{health:"orphaned",reason:"worker.json still running but process is dead"};if(t.attention.state==="stale")return{health:"stale",reason:t.attention.reason};let s=t.lastHeartbeatAt?Date.parse(t.lastHeartbeatAt):NaN;return t.alive&&Number.isFinite(s)&&Date.now()-s>U?{health:"stale",reason:`heartbeat older than ${Math.floor(U/1e3)}s`}:t.alive&&r.pid&&!w(r.pid)?{health:"orphaned",reason:"pid recorded but process is not alive"}:n?.status==="running"&&!t.alive&&t.finalResult?{health:"healthy",reason:"finished worker awaiting completion replay"}:{health:"healthy",reason:t.attention.reason||"worker within expected lifecycle bounds"}}T();function cr(e){return!!e.completionReportedAt?.trim()}_();function At(e){let{worker:r,status:t}=e,n=[];r.localOnly&&n.push("local-only worker (no board linkage)"),(!r.agentOsId||!r.taskId)&&n.push("missing agentOsId/taskId linkage"),cr(r)&&n.push("completion already acknowledged"),r.completionBlocker&&n.push(r.completionBlocker),t.heartbeatBlocker&&t.alive&&n.push(`worker heartbeat blocker: ${t.heartbeatBlocker}`),t.attention.state==="blocked"&&n.push(t.attention.reason||"worker attention blocked"),je(t)&&n.push(t.attention.reason||"landing gate blocked");let o=$e(t),s;return o?t.finalResult?s="final_result":t.alive?s="terminal_status":s="process_exited":n.push("worker has not reached a terminal condition"),{eligible:o&&n.length===0,terminalVerified:o,terminalReason:s,blockers:n}}export{At as assessAutoCompleteEligibility,dt as classifyWorkerHealth,Le as computeWorkerStatus};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var n=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(o){throw t=[o],o}};function I(e){return Le.has(e)?!0:He.some(r=>e.endsWith(r))}function Q(e){return Object.keys(e).filter(I).sort()}function p(e){let r={...e};for(let t of Object.keys(r))I(t)&&delete r[t];return r}function $e(e){let r=Q(e);return{forbiddenPresent:r,safe:r.length===0}}var Fe,Le,He,d=n(()=>{"use strict";Fe=["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"],Le=new Set(Fe),He=["_SECRET","_API_KEY"]});function D(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}var a=n(()=>{"use strict"});var N=n(()=>{"use strict";a();d()});var f=n(()=>{"use strict"});var Z=n(()=>{"use strict";N();f()});var B=n(()=>{"use strict"});var ee=n(()=>{"use strict"});var re=n(()=>{"use strict"});var rt,tt,M=n(()=>{"use strict";rt=25*1024*1024*1024,tt=12*1024*1024*1024});var at,lt,te=n(()=>{"use strict";M();at=5*1024*1024*1024,lt=10*1024*1024*1024});var ft,gt,T=n(()=>{"use strict";te();M();ft=30*1024*1024*1024,gt=15*1024*1024*1024});import{homedir as Ve}from"node:os";import Ye from"node:path";var Rt,ne=n(()=>{"use strict";g();f();a();Rt=Ye.join(Ve(),".openclaw","harness")});var K=n(()=>{"use strict";ne();a()});var ie=n(()=>{"use strict";K();a()});var se=n(()=>{"use strict"});var ae=n(()=>{"use strict";se();a()});var le=n(()=>{"use strict"});var ce=n(()=>{"use strict";le()});var ue=n(()=>{"use strict";ce();a()});var de=n(()=>{"use strict"});var me=n(()=>{"use strict"});var pe=n(()=>{"use strict"});var F=n(()=>{"use strict"});var fe=n(()=>{"use strict"});var ge=n(()=>{"use strict";F();fe()});var he=n(()=>{"use strict";ae();ue();de();me();N();pe();ge();F();a()});var ye=n(()=>{"use strict";he()});var Qe,Ze,ve=n(()=>{"use strict";re();g();B();L();T();K();ie();ye();a();Qe=500*1024*1024,Ze=4*1024*1024*1024});var L=n(()=>{"use strict";ve()});import{homedir as er}from"node:os";import rr from"node:path";var tr,be=n(()=>{"use strict";tr=rr.join(er(),".kynver",".env")});var ke=n(()=>{"use strict"});var xe=n(()=>{"use strict";ke()});var Re=n(()=>{"use strict"});var Se=n(()=>{"use strict";xe();Re()});var _e=n(()=>{"use strict"});var Ce=n(()=>{"use strict";_e()});var Ee=n(()=>{"use strict";be();f();g();Se();Ce()});import{homedir as or,totalmem as Yo}from"node:os";import H from"node:path";var Ae,ti,ni,oi,ii,g=n(()=>{"use strict";Z();f();a();B();ee();L();T();Ee();Ae=H.join(or(),".kynver"),ti=H.join(Ae,"config.json"),ni=H.join(Ae,"credentials"),oi=500*1024*1024,ii=4*1024*1024*1024});d();g();d();a();d();a();d();a();var Zi=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function cr(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var ur=cr();var we="composer-2.5";var u="cursor",dr=new Set(["claude","opus","anthropic"]),mr=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function j(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function l(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return dr.has(r)?!0:r.includes("claude")||r.includes("opus")}function $(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&l(r))return!0;let t=j(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let o=j(e,"description");if(mr.some(s=>s.test(o)))return!0;let i=j(e,"title");return!!/\[use-claude-worker\]/i.test(i)}function pr(e,r){return{provider:u,model:we,rule:`policy:cursor_default${r}`,requestedModel:e}}function Ie(e){let{routing:r,task:t}=e,o=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&l(o))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if($(t)||r.rule==="explicit:cli"&&l(r.provider)||!l(r.provider))return r;let i=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return pr(r.model,i)}function fr(e,r=u){let t=e?.trim();return t?l(t)?u:t==="codex"?"codex":t:r}function gr(e){let r=[...new Set(e.map(t=>t.trim().toLowerCase()).filter(Boolean))];return r.includes(u)?[...new Set(r.map(t=>l(t)?u:t))]:r.every(t=>l(t))?[u]:r}var hr=/\b(npm run typecheck|tsc\b[^|&;]*--noEmit|node scripts\/verify-pr-local\.mjs|kynver (harness )?verify)\b/i,yr=/\b(npm run build\b|next build\b)\b/i,vr=/\b(vercel (build|deploy|--prod))\b/i,br=/\b(openai|anthropic|perplexity|voyage)\b.*\b(api|cli)\b|\b(paid|billable)[-_ ]?compute\b/i;function V(e){let r=e.trim();return r?br.test(r)?{heavy:!0,commandClass:"paid_compute",reason:"paid external compute requires heavy-verification token and operator approval"}:vr.test(r)?{heavy:!0,commandClass:"vercel_verify",reason:"Vercel build/deploy verification requires heavy-verification token"}:yr.test(r)?{heavy:!0,commandClass:"full_build",reason:"full app build requires heavy-verification token"}:hr.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 S="heavy_verification_token_required";import{spawnSync as Mr}from"node:child_process";a();import{closeSync as Cr,existsSync as G,mkdirSync as Er,openSync as Ar,readdirSync as Be,readFileSync as Or,unlinkSync as Me,writeFileSync as Pr}from"node:fs";import q from"node:path";import{mkdirSync as xr}from"node:fs";import{tmpdir as Rr}from"node:os";import _ from"node:path";import{homedir as kr}from"node:os";import De from"node:path";function We(){let e=process.env.KYNVER_STATE_ROOT;return e?De.resolve(e):De.join(kr(),".kynver","state")}function Sr(){return!!(process.env.VERCEL||process.env.VERCEL_ENV||process.env.AWS_LAMBDA_FUNCTION_NAME||process.env.AWS_EXECUTION_ENV)}function _r(){let e=process.env.KYNVER_HEAVY_VERIFICATION_STATE_ROOT;return e?_.resolve(e):Sr()?_.join(Rr(),"kynver","state","heavy-verification"):_.join(We(),"heavy-verification")}function Y(){return _.join(_r(),"slots")}function y(){let e=Y();return xr(e,{recursive:!0}),e}var v=120*6e4,Ne=1;function wr(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function A(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function C(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?wr(e,Ne):Ne}function Ir(e){return`slot-${e}`}function Dr(e,r=Y()){return q.join(r,`${e}.json`)}function X(e){if(!G(e))return null;try{let r=JSON.parse(Or(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 E(e,r=v){if(!e||!D(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function Wr(e,r){let t=X(e);if(E(t,r))try{Me(e)}catch{}}function Nr(e){return Er(e,{recursive:!0}),e}function J(e={}){let r=Nr(e.slotsDir??y()),t=e.staleMs??v,o=0;for(let i of Be(r)){if(!i.endsWith(".json"))continue;let s=q.join(r,i),c=G(s);Wr(s,t),c&&!G(s)&&(o+=1)}return o}function Br(e={}){let r=e.slotsDir??y(),t=e.staleMs??v;J({slotsDir:r,staleMs:t});let o=[];for(let i of Be(r)){if(!i.endsWith(".json"))continue;let s=X(q.join(r,i));s&&!E(s,t)&&o.push(s)}return o}function z(e={}){return Br(e).length}function b(e,r={}){if(A())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:C(),reason:null};let t=r.slotsDir??y(),o=r.staleMs??v,i=r.maxSlots??C();J({slotsDir:t,staleMs:o});for(let c=0;c<i;c+=1){let P=Ir(c),w=Dr(P,t),k=X(w);if(k&&E(k,o))try{Me(w)}catch{}else if(k&&!E(k,o))continue;let Ue={slotId:P,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let m=Ar(w,"wx");Pr(m,JSON.stringify(Ue,null,2),"utf8"),Cr(m);let Ke=z({slotsDir:t,staleMs:o});return{admitted:!0,slotId:P,activeSlots:Ke,maxSlots:i,reason:null}}catch(m){if(m.code==="EEXIST")continue;throw m}}let s=z({slotsDir:t,staleMs:o});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:i,reason:`heavy verification at capacity (${s}/${i} slots)`}}function O(e,r={}){if(A())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:C(),reason:null};let t=r.slotsDir??y(),o=r.staleMs??v,i=r.maxSlots??C();J({slotsDir:t,staleMs:o});let s=z({slotsDir:t,staleMs:o}),c=s<i;return{admitted:c,slotId:null,activeSlots:s,maxSlots:i,reason:c?null:`heavy verification at capacity (${s}/${i} slots); waiting for ${e}`}}function Tr(e){e<=0||Mr(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function Te(e,r,t=2e3,o={}){let i=Date.now()+Math.max(0,r),s=b(e,o);for(;!s.admitted&&Date.now()<i;)Tr(Math.min(t,i-Date.now())),s=b(e,o);return s}function Ur(e,r={}){let t=V(e);if(!t.heavy)return{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:"command does not require heavy-verification token",verificationGate:{...O(e),slotId:null}};if(A())return{allowed:!0,outcome:"heavy_verification_skipped",commandClass:t.commandClass,reason:"KYNVER_HEAVY_VERIFICATION_SKIP bypasses gate",verificationGate:{...O(e),slotId:null}};let o=r.waitMs??0,i=o>0?Te(e,o,r.pollMs):b(e);return i.admitted?{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:t.reason??"heavy-verification token acquired",verificationGate:i}:{allowed:!1,outcome:S,commandClass:t.commandClass,reason:t.reason??i.reason??S,verificationGate:i}}export{u as DEFAULT_WORKER_PROVIDER,S as HEAVY_VERIFICATION_TOKEN_REQUIRED,$e as auditWorkerEnv,V as classifyHeavyShellCommand,Ie as enforceCursorWorkerProvider,Ur as gateWorkerShellCommand,l as isClaudeFamilyProvider,I as isForbiddenWorkerEnvKey,Q as listForbiddenWorkerEnvKeys,gr as preferCursorExecutor,fr as resolveConfiguredWorkerProvider,p as scrubWorkerEnv,$ as taskAllowsClaudeWorker};
|
|
1
|
+
var n=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(o){throw t=[o],o}};function I(e){return Le.has(e)?!0:He.some(r=>e.endsWith(r))}function Z(e){return Object.keys(e).filter(I).sort()}function p(e){let r={...e};for(let t of Object.keys(r))I(t)&&delete r[t];return r}function $e(e){let r=Z(e);return{forbiddenPresent:r,safe:r.length===0}}var Fe,Le,He,d=n(()=>{"use strict";Fe=["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"],Le=new Set(Fe),He=["_SECRET","_API_KEY"]});function D(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}var a=n(()=>{"use strict"});var N=n(()=>{"use strict";a();d()});var f=n(()=>{"use strict"});var ee=n(()=>{"use strict";N();f()});var B=n(()=>{"use strict"});var M=n(()=>{"use strict"});var re=n(()=>{"use strict"});var tt,nt,T=n(()=>{"use strict";tt=25*1024*1024*1024,nt=12*1024*1024*1024});var lt,ct,te=n(()=>{"use strict";T();lt=5*1024*1024*1024,ct=10*1024*1024*1024});var gt,ht,U=n(()=>{"use strict";te();T();gt=30*1024*1024*1024,ht=15*1024*1024*1024});import{homedir as Ve}from"node:os";import Ye from"node:path";var St,ne=n(()=>{"use strict";g();f();a();St=Ye.join(Ve(),".openclaw","harness")});var F=n(()=>{"use strict";ne();a()});var ie=n(()=>{"use strict";F();a()});var se=n(()=>{"use strict"});var ae=n(()=>{"use strict";se();a()});var le=n(()=>{"use strict"});var ce=n(()=>{"use strict";le()});var ue=n(()=>{"use strict";ce();a()});var de=n(()=>{"use strict"});var me=n(()=>{"use strict"});var pe=n(()=>{"use strict"});var L=n(()=>{"use strict"});var fe=n(()=>{"use strict"});var ge=n(()=>{"use strict";L();fe()});var he=n(()=>{"use strict";ae();ue();de();me();N();pe();ge();L();a()});var ye=n(()=>{"use strict";he()});var Ze,er,ve=n(()=>{"use strict";re();g();B();M();H();U();F();ie();ye();a();Ze=500*1024*1024,er=4*1024*1024*1024});var H=n(()=>{"use strict";ve()});import{homedir as rr}from"node:os";import tr from"node:path";var nr,be=n(()=>{"use strict";nr=tr.join(rr(),".kynver",".env")});var ke=n(()=>{"use strict"});var xe=n(()=>{"use strict";ke()});var Re=n(()=>{"use strict"});var Se=n(()=>{"use strict";xe();Re()});var _e=n(()=>{"use strict"});var Ce=n(()=>{"use strict";_e()});var Ee=n(()=>{"use strict";be();f();g();Se();Ce()});import{homedir as ir,totalmem as Go}from"node:os";import $ from"node:path";var Ae,ni,oi,ii,si,g=n(()=>{"use strict";ee();f();a();B();M();H();U();Ee();Ae=$.join(ir(),".kynver"),ni=$.join(Ae,"config.json"),oi=$.join(Ae,"credentials"),ii=500*1024*1024,si=4*1024*1024*1024});d();g();d();a();d();a();d();a();var es=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function ur(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var dr=ur();var we="composer-2.5";var u="cursor",mr=new Set(["claude","opus","anthropic"]),pr=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function V(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function l(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return mr.has(r)?!0:r.includes("claude")||r.includes("opus")}function j(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&l(r))return!0;let t=V(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let o=V(e,"description");if(pr.some(s=>s.test(o)))return!0;let i=V(e,"title");return!!/\[use-claude-worker\]/i.test(i)}function fr(e,r){return{provider:u,model:we,rule:`policy:cursor_default${r}`,requestedModel:e}}function Ie(e){let{routing:r,task:t}=e,o=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&l(o))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(j(t)||r.rule==="explicit:cli"&&l(r.provider)||!l(r.provider))return r;let i=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return fr(r.model,i)}function gr(e,r=u){let t=e?.trim();return t?l(t)?u:t==="codex"?"codex":t:r}function hr(e){let r=[...new Set(e.map(t=>t.trim().toLowerCase()).filter(Boolean))];return r.includes(u)?[...new Set(r.map(t=>l(t)?u:t))]:r.every(t=>l(t))?[u]:r}var yr=/\b(npm run typecheck|tsc\b[^|&;]*--noEmit|node scripts\/verify-pr-local\.mjs|kynver (harness )?verify)\b/i,vr=/\b(npm run build\b|next build\b)\b/i,br=/\b(vercel (build|deploy|--prod))\b/i,kr=/\b(openai|anthropic|perplexity|voyage)\b.*\b(api|cli)\b|\b(paid|billable)[-_ ]?compute\b/i;function Y(e){let r=e.trim();return r?kr.test(r)?{heavy:!0,commandClass:"paid_compute",reason:"paid external compute requires heavy-verification token and operator approval"}:br.test(r)?{heavy:!0,commandClass:"vercel_verify",reason:"Vercel build/deploy verification requires heavy-verification token"}:vr.test(r)?{heavy:!0,commandClass:"full_build",reason:"full app build requires heavy-verification token"}:yr.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 S="heavy_verification_token_required";import{spawnSync as Tr}from"node:child_process";a();import{closeSync as Er,existsSync as z,mkdirSync as Ar,openSync as Or,readdirSync as Be,readFileSync as Pr,unlinkSync as Me,writeFileSync as wr}from"node:fs";import X from"node:path";import{mkdirSync as Rr}from"node:fs";import{tmpdir as Sr}from"node:os";import _ from"node:path";import{homedir as xr}from"node:os";import De from"node:path";function We(){let e=process.env.KYNVER_STATE_ROOT;return e?De.resolve(e):De.join(xr(),".kynver","state")}function _r(){return!!(process.env.VERCEL||process.env.VERCEL_ENV||process.env.AWS_LAMBDA_FUNCTION_NAME||process.env.AWS_EXECUTION_ENV)}function Cr(){let e=process.env.KYNVER_HEAVY_VERIFICATION_STATE_ROOT;return e?_.resolve(e):_r()?_.join(Sr(),"kynver","state","heavy-verification"):_.join(We(),"heavy-verification")}function G(){return _.join(Cr(),"slots")}function y(){let e=G();return Rr(e,{recursive:!0}),e}var v=120*6e4,Ne=1;function Ir(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function A(){let e=process.env.KYNVER_HEAVY_VERIFICATION_SKIP?.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function C(){let e=process.env.KYNVER_HEAVY_VERIFICATION_MAX_CONCURRENT;return e?Ir(e,Ne):Ne}function Dr(e){return`slot-${e}`}function Wr(e,r=G()){return X.join(r,`${e}.json`)}function J(e){if(!z(e))return null;try{let r=JSON.parse(Pr(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 E(e,r=v){if(!e||!D(e.pid))return!0;let t=Date.parse(e.acquiredAt);return Number.isNaN(t)?!0:Date.now()-t>r}function Nr(e,r){let t=J(e);if(E(t,r))try{Me(e)}catch{}}function Br(e){return Ar(e,{recursive:!0}),e}function Q(e={}){let r=Br(e.slotsDir??y()),t=e.staleMs??v,o=0;for(let i of Be(r)){if(!i.endsWith(".json"))continue;let s=X.join(r,i),c=z(s);Nr(s,t),c&&!z(s)&&(o+=1)}return o}function Mr(e={}){let r=e.slotsDir??y(),t=e.staleMs??v;Q({slotsDir:r,staleMs:t});let o=[];for(let i of Be(r)){if(!i.endsWith(".json"))continue;let s=J(X.join(r,i));s&&!E(s,t)&&o.push(s)}return o}function q(e={}){return Mr(e).length}function b(e,r={}){if(A())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:C(),reason:null};let t=r.slotsDir??y(),o=r.staleMs??v,i=r.maxSlots??C();Q({slotsDir:t,staleMs:o});for(let c=0;c<i;c+=1){let P=Dr(c),w=Wr(P,t),k=J(w);if(k&&E(k,o))try{Me(w)}catch{}else if(k&&!E(k,o))continue;let Ue={slotId:P,pid:process.pid,acquiredAt:new Date().toISOString(),command:e};try{let m=Or(w,"wx");wr(m,JSON.stringify(Ue,null,2),"utf8"),Er(m);let Ke=q({slotsDir:t,staleMs:o});return{admitted:!0,slotId:P,activeSlots:Ke,maxSlots:i,reason:null}}catch(m){if(m.code==="EEXIST")continue;throw m}}let s=q({slotsDir:t,staleMs:o});return{admitted:!1,slotId:null,activeSlots:s,maxSlots:i,reason:`heavy verification at capacity (${s}/${i} slots)`}}function O(e,r={}){if(A())return{admitted:!0,slotId:null,activeSlots:0,maxSlots:C(),reason:null};let t=r.slotsDir??y(),o=r.staleMs??v,i=r.maxSlots??C();Q({slotsDir:t,staleMs:o});let s=q({slotsDir:t,staleMs:o}),c=s<i;return{admitted:c,slotId:null,activeSlots:s,maxSlots:i,reason:c?null:`heavy verification at capacity (${s}/${i} slots); waiting for ${e}`}}function Ur(e){e<=0||Tr(process.execPath,["-e",`const d=Date.now()+${Math.floor(e)};while(Date.now()<d);`],{stdio:"ignore"})}function Te(e,r,t=2e3,o={}){let i=Date.now()+Math.max(0,r),s=b(e,o);for(;!s.admitted&&Date.now()<i;)Ur(Math.min(t,i-Date.now())),s=b(e,o);return s}function Kr(e,r={}){let t=Y(e);if(!t.heavy)return{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:"command does not require heavy-verification token",verificationGate:{...O(e),slotId:null}};if(A())return{allowed:!0,outcome:"heavy_verification_skipped",commandClass:t.commandClass,reason:"KYNVER_HEAVY_VERIFICATION_SKIP bypasses gate",verificationGate:{...O(e),slotId:null}};let o=r.waitMs??0,i=o>0?Te(e,o,r.pollMs):b(e);return i.admitted?{allowed:!0,outcome:"allowed",commandClass:t.commandClass,reason:t.reason??"heavy-verification token acquired",verificationGate:i}:{allowed:!1,outcome:S,commandClass:t.commandClass,reason:t.reason??i.reason??S,verificationGate:i}}export{u as DEFAULT_WORKER_PROVIDER,S as HEAVY_VERIFICATION_TOKEN_REQUIRED,$e as auditWorkerEnv,Y as classifyHeavyShellCommand,Ie as enforceCursorWorkerProvider,Kr as gateWorkerShellCommand,l as isClaudeFamilyProvider,I as isForbiddenWorkerEnvKey,Z as listForbiddenWorkerEnvKeys,hr as preferCursorExecutor,gr as resolveConfiguredWorkerProvider,p as scrubWorkerEnv,j as taskAllowsClaudeWorker};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{execFileSync as L}from"node:child_process";import{existsSync as _,readFileSync as R,readdirSync as A,statSync as M}from"node:fs";import S from"node:path";import{existsSync as O,readFileSync as k,statfsSync as Z}from"node:fs";var ee=25*1024*1024*1024,se=12*1024*1024*1024,f="/mnt/c";function U(){if(process.platform!=="linux")return!1;for(let e of["/proc/sys/kernel/osrelease","/proc/version"])try{if(!O(e))continue;let r=k(e,"utf8");if(/microsoft|wsl/i.test(r))return!0}catch{}return!1}var P=5*1024*1024*1024,$=10*1024*1024*1024,I=2,Y=4;function w(e,r){let t=process.env[e];if(!t)return r;let s=Number(t);return Number.isFinite(s)?s:r}function N(){let e=process.env.KYNVER_WSL_WIN_USER?.trim();if(e)return e;try{let s=L("cmd.exe",["/c","echo","%USERNAME%"],{encoding:"utf8",timeout:5e3,stdio:["ignore","pipe","ignore"]}).trim();if(s&&s!=="%USERNAME%"&&!s.includes("%"))return s}catch{}let r=process.env.USER?.trim()||process.env.LOGNAME?.trim(),t=process.env.KYNVER_WSL_HOST_MOUNT?.trim()||f;return r&&_(S.join(t,"Users",r))?r:null}function V(e={}){let r=e.crashDumpDir?.trim()||process.env.KYNVER_WSL_CRASH_DUMP_DIR?.trim();if(r)return r;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||f,s=e.windowsUser??N();return s?`${t.replace(/\\/g,"/").replace(/\/$/,"")}/Users/${s}/AppData/Local/Temp/wsl-crashes`:null}function K(e){let r=/^wsl-crash-\d+-(\d+)-(.+)-(\d+)\.dmp$/i.exec(e);if(!r)return{executableHint:null,signal:null,pid:null};let t=Number(r[1]),s=r[2]??"",n=Number(r[3]),o=s.split("_").filter(Boolean);return{executableHint:o.length>0?o[o.length-1]:null,signal:Number.isFinite(n)?n:null,pid:Number.isFinite(t)?t:null}}function T(){try{if(_("/proc/sys/kernel/core_pattern"))return R("/proc/sys/kernel/core_pattern","utf8").trim()}catch{}try{return L("sysctl",["-n","kernel.core_pattern"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function z(e){return!!(e&&/wsl-capture-crash/i.test(e))}function G(e,r=f){let t=S.join(r,"Users",e,".wslconfig");if(!_(t))return{maxCrashDumpCount:null,crashDumpFolder:null};let s;try{s=R(t,"utf8")}catch{return null}let n=null,o=null;for(let l of s.split(/\r?\n/)){let i=l.replace(/#.*$/,"").trim();if(!i||i.startsWith("["))continue;let a=i.indexOf("=");if(a<0)continue;let c=i.slice(0,a).trim().toLowerCase(),b=i.slice(a+1).trim();if(c==="maxcrashdumpcount"){let m=Number(b);n=Number.isFinite(m)?m:null}else c==="crashdumpfolder"&&(o=b.replace(/^["']|["']$/g,"")||null)}return{maxCrashDumpCount:n,crashDumpFolder:o}}function j(e){if(!_(e))return[];let r=A(e,{withFileTypes:!0}),t=[];for(let s of r){if(!s.isFile()||!s.name.toLowerCase().endsWith(".dmp"))continue;let n=S.join(e,s.name);try{let o=M(n),l=K(s.name);t.push({name:s.name,path:n,bytes:o.size,mtimeMs:o.mtimeMs,executableHint:l.executableHint,signal:l.signal,pid:l.pid})}catch{}}return t.sort((s,n)=>n.mtimeMs-s.mtimeMs),t}function X(e={}){if(!(e.forceWsl===void 0?U():e.forceWsl))return null;let t=e.hostMount?.trim()||process.env.KYNVER_WSL_HOST_MOUNT?.trim()||f,s=e.windowsUser??N(),n=e.warnBelowBytes??w("KYNVER_WSL_CRASH_DUMP_WARN_BYTES",P),o=e.criticalBelowBytes??w("KYNVER_WSL_CRASH_DUMP_CRITICAL_BYTES",$),l=e.warnCount??w("KYNVER_WSL_CRASH_DUMP_WARN_COUNT",I),i=e.criticalCount??w("KYNVER_WSL_CRASH_DUMP_CRITICAL_COUNT",Y),a=(e.readCorePattern??T)(),c=z(a),b=null;s&&(b=(e.readWslConfig??G)(s,t));let m=b?.maxCrashDumpCount??null,h=m===-1,p=V({hostMount:t,windowsUser:s,crashDumpDir:e.crashDumpDir});if(!p)return{ok:!0,path:null,windowsUser:s,dumpCount:0,totalBytes:0,warnBelowBytes:n,criticalBelowBytes:o,warnCount:l,criticalCount:i,dumps:[],executables:[],corePattern:a,wslCaptureEnabled:c,maxCrashDumpCount:m,dumpsDisabledInWslConfig:h,reason:null,probeError:"windows_user_unresolved"};let d;try{d=(e.listDumps??j)(p)}catch(u){return{ok:!1,path:p,windowsUser:s,dumpCount:0,totalBytes:0,warnBelowBytes:n,criticalBelowBytes:o,warnCount:l,criticalCount:i,dumps:[],executables:[],corePattern:a,wslCaptureEnabled:c,maxCrashDumpCount:m,dumpsDisabledInWslConfig:h,reason:`WSL crash dump probe failed at ${p}: ${u.message}`,probeError:u.message}}let C=d.reduce((u,D)=>u+D.bytes,0),g=d.length,W=[...new Set(d.map(u=>u.executableHint).filter(u=>!!u))],x=C>=o,F=C>=n,y=g>=i,H=g>=l,E=!(x||y||F||H),B=null;if(!E){let u=x||y?"critical":"warning",D=(C/1024**3).toFixed(1),v=W.length>0?W.join(", "):"unknown";B=`WSL crash dumps ${u}: ${g} file(s), ${D} GiB at ${p} (executables: ${v}). `+q({wslCaptureEnabled:c,dumpsDisabledInWslConfig:h})}return{ok:E,path:p,windowsUser:s,dumpCount:g,totalBytes:C,warnBelowBytes:n,criticalBelowBytes:o,warnCount:l,criticalCount:i,dumps:d,executables:W,corePattern:a,wslCaptureEnabled:c,maxCrashDumpCount:m,dumpsDisabledInWslConfig:h,reason:B,probeError:null}}function q(e={}){let r=["Recovery:","1) run `kynver wsl-crashes --execute` or scripts/cleanup-wsl-crashes.ps1 to prune old .dmp files;"];return e.dumpsDisabledInWslConfig||r.push("2) add `[wsl2]\\nmaxCrashDumpCount=-1` to %USERPROFILE%/.wslconfig then `wsl --shutdown` to disable future dumps;"),e.wslCaptureEnabled&&r.push("3) investigate crashing executables (node OOM/SIGBUS often follows Windows C: pressure \u2014 see docs/runbooks/wsl-disk-pressure.md);"),r.push("full runbook: docs/runbooks/wsl-disk-pressure.md."),r.join(" ")}export{X as observeWslCrashDumps,T as readKernelCorePattern};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var d="embedded-1",c=[{slug:"ghost",displayName:"Ghost",description:"Orchestration persona.",dispatchLane:null,defaultRoleLane:"system"},{slug:"astra",displayName:"Astra",description:"Planning persona.",dispatchLane:"implementation",defaultRoleLane:"plan_author"},{slug:"rhea",displayName:"Rhea",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"mnemo",displayName:"Mnemo",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"sentinel",displayName:"Sentinel",description:"Review persona.",dispatchLane:"review",defaultRoleLane:"deep_reviewer"},{slug:"pixel",displayName:"Pixel",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"schema",displayName:"Schema",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"atlas",displayName:"Atlas",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"runtime_verifier"},{slug:"bridge",displayName:"Bridge",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"catalyst",displayName:"Catalyst",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"lorentz",displayName:"Lorentz",description:"Review persona.",dispatchLane:"review",defaultRoleLane:"report_reviewer"},{slug:"dalton",displayName:"Dalton",description:"Landing persona.",dispatchLane:"landing",defaultRoleLane:"implementer"}],m={"worker.prompt.core_rules":["Structured final result (recommended): record completion as JSON with summary, files, PR URLs, verification, risks, and blockers.","Completion handoff (required): before you stop, summarize the outcome in your last message and append a heartbeat line with phase `complete
|
|
1
|
+
var d="embedded-1",c=[{slug:"ghost",displayName:"Ghost",description:"Orchestration persona.",dispatchLane:null,defaultRoleLane:"system"},{slug:"astra",displayName:"Astra",description:"Planning persona.",dispatchLane:"implementation",defaultRoleLane:"plan_author"},{slug:"rhea",displayName:"Rhea",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"mnemo",displayName:"Mnemo",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"sentinel",displayName:"Sentinel",description:"Review persona.",dispatchLane:"review",defaultRoleLane:"deep_reviewer"},{slug:"pixel",displayName:"Pixel",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"schema",displayName:"Schema",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"atlas",displayName:"Atlas",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"runtime_verifier"},{slug:"bridge",displayName:"Bridge",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"catalyst",displayName:"Catalyst",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"lorentz",displayName:"Lorentz",description:"Review persona.",dispatchLane:"review",defaultRoleLane:"report_reviewer"},{slug:"dalton",displayName:"Dalton",description:"Landing persona.",dispatchLane:"landing",defaultRoleLane:"implementer"}],m={"worker.prompt.core_rules":["Structured final result (recommended): record completion as JSON with summary, files, PR URLs, verification, risks, and blockers.","Completion handoff (required): before you stop, summarize the outcome in your last message and append a heartbeat line with phase `complete` and a structured finalResult object. Commit your work cleanly and open a GitHub PR (draft OK) for substantial changes \u2014 never leave uncommitted changes behind without reporting them.","Review-only workers must not open new implementation PRs \u2014 review the existing PR and record a verdict in the final result.","Keep verification targeted to touched paths; avoid full-monorepo verification unless explicitly requested.","Do not run `npm publish`.","If verification fails, append a heartbeat line immediately with the failing command, reason, and next action."].join(`
|
|
2
2
|
`),"worker.prompt.progress.compact":"Plan progress: when planId is set, report progress with `kynver plan progress --plan <planId> --row <rowKey> --role implementer --status in_progress|running|partial|blocked`. Do not mark rows done from the worker CLI.","worker.prompt.progress.full":["Structured plan progress (required when planId is set):","- Report checkpoints with `kynver plan progress --plan <planId> --row <rowKey> --role implementer --status in_progress|running|partial|blocked`.","- When a slice is finished, emit `partial` with evidence (`--evidence pr:<url>`, `--evidence path:<file>`, or `--evidence command:<cmd>`).","- Do not propose or confirm row `done` from the worker CLI."].join(`
|
|
3
3
|
`),"worker.prompt.merge_gate.compact":"Verification cost control: prefer local verification before requesting CI runs; do not push empty commits to re-trigger CI; record verification evidence on the PR.","worker.prompt.merge_gate.full":["Verification cost control:","- Prefer local verification of touched paths before requesting any CI run.","- Do not push empty commits to re-trigger CI.","- Record verification evidence on the PR before requesting review."].join(`
|
|
4
4
|
`),"worker.prompt.plan_artifacts.compact":"Plan artifacts: when authoring or revising plan documents, open a GitHub PR early and iterate from that PR branch; do not leave the canonical plan only in a local worktree.","worker.prompt.plan_artifacts.full":["Plan artifacts (when authoring or revising plan documents):","- Create a feature branch and open a GitHub PR (draft OK) before substantial drafting; commit and push the plan file.","- Iterate on that PR branch and link the PR URL on the related task and progress evidence."].join(`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kynver-app/runtime",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.148",
|
|
4
4
|
"description": "Kynver AgentOS local execution runtime and CLI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -84,6 +84,11 @@
|
|
|
84
84
|
"types": "./dist/server/memory-cost-enforce.d.ts",
|
|
85
85
|
"import": "./dist/server/memory-cost-enforce.js",
|
|
86
86
|
"default": "./dist/server/memory-cost-enforce.js"
|
|
87
|
+
},
|
|
88
|
+
"./server/wsl-crash-dumps": {
|
|
89
|
+
"types": "./dist/server/wsl-crash-dumps.d.ts",
|
|
90
|
+
"import": "./dist/server/wsl-crash-dumps.js",
|
|
91
|
+
"default": "./dist/server/wsl-crash-dumps.js"
|
|
87
92
|
}
|
|
88
93
|
},
|
|
89
94
|
"files": [
|
|
@@ -92,7 +97,7 @@
|
|
|
92
97
|
"README.md"
|
|
93
98
|
],
|
|
94
99
|
"scripts": {
|
|
95
|
-
"build": "esbuild src/cli.ts src/index.ts src/worker-persona-catalog.ts src/instruction-bundle/contract.ts src/server/monitor.ts src/server/landing.ts src/server/worker-policy.ts src/server/orchestration.ts src/server/heavy-verification.ts src/server/memory-cost.ts src/server/pr-evidence.ts src/server/default-repo.ts src/server/cleanup.ts src/server/repo-search.ts src/server/harness-notice.ts src/server/memory-cost-enforce.ts --bundle --platform=node --format=esm --packages=external --outbase=src --outdir=dist --minify && tsc -p tsconfig.json --emitDeclarationOnly && node scripts/chmod-cli-bin.mjs",
|
|
100
|
+
"build": "esbuild src/cli.ts src/index.ts src/worker-persona-catalog.ts src/instruction-bundle/contract.ts src/server/monitor.ts src/server/landing.ts src/server/worker-policy.ts src/server/orchestration.ts src/server/heavy-verification.ts src/server/memory-cost.ts src/server/pr-evidence.ts src/server/default-repo.ts src/server/cleanup.ts src/server/repo-search.ts src/server/harness-notice.ts src/server/memory-cost-enforce.ts src/server/wsl-crash-dumps.ts --bundle --platform=node --format=esm --packages=external --outbase=src --outdir=dist --minify && tsc -p tsconfig.json --emitDeclarationOnly && node scripts/chmod-cli-bin.mjs",
|
|
96
101
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
97
102
|
"test": "vitest run --config vitest.config.ts",
|
|
98
103
|
"prepublishOnly": "node ../../scripts/npm-publish-guard.mjs && npm run build"
|