@kynver-app/runtime 0.1.153 → 0.1.154

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 CHANGED
@@ -16,7 +16,7 @@ ${e.stderr}`.trim(),t=db(r);if(!t||!vn(t)){let o=bn(r||`exit ${e.exitCode}`,180)
16
16
  `),"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(`
17
17
  `),"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(`
18
18
  `),"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(`
19
- `)},Dv={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},Mt={version:Ov,generatedAt:"1970-01-01T00:00:00.000Z",personas:Nv,instructions:Tv,policyThresholds:Dv};var Kn=Mt,Ed="embedded";function Lr(){return Kn.version}function br(){return Ed}function Ad(e,r){Kn=e,Ed=r}function jn(e){let r=Kn.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=Mt.instructions[e];return typeof t=="string"?t:""}function Ut(e,r){let t=Kn.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=Mt.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function Id(e){if(!e)return null;let r=e.trim().toLowerCase();return Kn.personas.find(t=>t.slug===r)??null}import{createPublicKey as Uv,verify as Wv}from"node:crypto";var Mv={"ib-3bab6314f0ba":"53a2040646cd479e1f5f1aea9abf7848ce8b62e32001efb8044dfd90e8ab87ed","ib-26e6c695da06":"bb1700f25b2ee7d7cdcdb9f446f0f44ef2cc22a3096bc161232fb658e7cdaf38"};function Od(e,r=process.env){let t=Ra(r.KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY);if(t)return t;let n=Mv[e];return n?Ra(n):null}var Lv=Buffer.from("302a300506032b6570032100","hex");function Bv(e){return Uv({key:Buffer.concat([Lv,Buffer.from(e)]),format:"der",type:"spki"})}function Hv(e,r){if(!$n(e))return{ok:!1,reason:"malformed signed bundle payload"};let t;try{t=Buffer.from(e.signature,"base64url")}catch{return{ok:!1,reason:"signature is not base64url"}}if(t.length!==64)return{ok:!1,reason:"signature is not a 64-byte Ed25519 signature"};try{let n=Buffer.from(wd(e.bundle),"utf8");return Wv(null,n,Bv(r),t)?{ok:!0,bundle:e.bundle}:{ok:!1,reason:"Ed25519 signature mismatch"}}catch(n){return{ok:!1,reason:`signature verification failed: ${n.message}`}}}function Nd(e,r=process.env){if(!$n(e))return{ok:!1,reason:"malformed signed bundle payload"};let t=Od(e.publicKeyId,r);return t?Hv(e,t):{ok:!1,reason:`no verification key for publicKeyId "${e.publicKeyId}" (not pinned; set KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY)`}}var Fv=15*6e4,$v=1e4,or={lastAttemptAtMs:0,etag:null,diskCacheTried:!1,routeMissingLogged:!1};function Gn(e,r){console.error(JSON.stringify({event:e,...r}))}function Td(e,r,t){let n=Nd(e);return n.ok?(Ad(n.bundle,r),r==="server"&&_d(t,e),!0):(Gn("instruction_bundle_signature_invalid",{agentOsId:t,source:r,publicKeyId:e.publicKeyId,reason:n.reason}),!1)}function Vn(e){if(or.diskCacheTried)return!1;or.diskCacheTried=!0;let r=Pd(e);return r?Td(r,"disk",e):!1}async function Dd(e){let r=e.nowMs??Date.now(),t=()=>({source:br(),version:Lr(),updated:!1});if(!e.force&&r-or.lastAttemptAtMs<Fv)return t();or.lastAttemptAtMs=r;let n=e.baseUrl?.trim().replace(/\/$/,""),o=e.secret?.trim();if(!n||!o)return br()==="embedded"&&Vn(e.agentOsId)?{...t(),updated:!0}:t();let s=e.fetchImpl??fetch,i=new AbortController,a=setTimeout(()=>i.abort(),$v);try{let l=De(o);delete l["Content-Type"],or.etag&&br()==="server"&&(l["If-None-Match"]=or.etag);let c=await s(`${n}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/runtime/instruction-bundle`,{headers:l,signal:i.signal});if(c.status===304)return t();if(c.status===404)return or.routeMissingLogged||(or.routeMissingLogged=!0,Gn("instruction_bundle_route_missing",{agentOsId:e.agentOsId,baseUrl:n})),br()==="embedded"&&Vn(e.agentOsId)?{...t(),updated:!0}:t();if(!c.ok)return Gn("instruction_bundle_fetch_failed",{agentOsId:e.agentOsId,status:c.status}),br()==="embedded"&&Vn(e.agentOsId)?{...t(),updated:!0}:t();let u=await c.json().catch(()=>null);return!u||!Td(u,"server",e.agentOsId)?br()==="embedded"&&Vn(e.agentOsId)?{...t(),updated:!0}:t():(or.etag=c.headers.get("etag"),Gn("instruction_bundle_loaded",{agentOsId:e.agentOsId,version:Lr(),publicKeyId:u.publicKeyId}),{...t(),updated:!0})}catch(l){return Gn("instruction_bundle_fetch_error",{agentOsId:e.agentOsId,error:l instanceof Error?l.message:String(l)}),br()==="embedded"&&Vn(e.agentOsId)?{...t(),updated:!0}:t()}finally{clearTimeout(a)}}N();Pe();gn();rs();import Kv from"node:os";function Md(e,r){console.error(JSON.stringify({event:"daemon_identity",level:e,message:r}))}function Ud(e=b(),r=process.env){let t=_e(r,e),n=es({config:e,totalMemBytes:Kv.totalmem(),env:r}),o=[...t.warnings],s=[];if(!e.boxKind?.trim()&&!r.KYNVER_BOX_KIND?.trim()&&o.push("boxKind is not persisted in ~/.kynver/config.json \u2014 run `kynver setup --box-kind forge|ghost` so Command Center attributes snapshots to the correct pool"),t.slugInferenceBlocked){let c=r.KYNVER_DAEMON_STRICT_IDENTITY==="1"||r.KYNVER_DAEMON_STRICT_IDENTITY==="true",u="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind; treating this host as forge";c?s.push(u):o.push(u)}let i=n.configuredMaxWorkers??n.autoCap,a=rr(t.boxKind,i);gt(t.boxKind,i)&&o.push(`Forge box maxConcurrentWorkers=${i} exceeds pool cap \u2014 using ${a}; run kynver setup --box-kind forge --max-workers 4`);let l=s.length===0;for(let c of o)Md("warn",c);for(let c of s)Md("error",c);return{ok:l,box:t,workerCapSource:n.workerCapSource,maxConcurrentWorkers:a,autoCap:n.autoCap,warnings:o,errors:s}}import{mkdirSync as jv,readFileSync as Vv,renameSync as Gv,writeFileSync as Yv}from"node:fs";import{homedir as Jv}from"node:os";import Wd from"node:path";function Ld(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return Wd.join(Jv(),".kynver",`daemon-heartbeat-${r}.json`)}function Bd(e){try{let r=Ld(e.agentOsId);jv(Wd.dirname(r),{recursive:!0});let t={observedAt:(e.now??new Date).toISOString(),pid:process.pid,runId:e.runId,agentOsId:e.agentOsId,...e.instructionBundleVersion?{instructionBundleVersion:e.instructionBundleVersion}:{}},n=`${r}.tmp-${process.pid}`;Yv(n,JSON.stringify(t),"utf8"),Gv(n,r)}catch{}}function Hd(e){try{let r=Vv(Ld(e),"utf8"),t=JSON.parse(r);return typeof t?.observedAt!="string"?null:t}catch{return null}}function Fd(e,r,t=Date.now()){if(!e)return!1;let n=Date.parse(e.observedAt);return Number.isNaN(n)?!0:t-n>r}function qv(e){let r=process.env[e]?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"}function Wt(){process.platform==="win32"&&(qv("KYNVER_DAEMON_ALLOW_NATIVE_WINDOWS")||(console.error(JSON.stringify({event:"daemon_start_blocked",reason:"native_windows_console_flash",remedy:"Run the daemon inside WSL: .\\scripts\\start-tier2-wsl.ps1 \u2014 or set KYNVER_DAEMON_ALLOW_NATIVE_WINDOWS=1 to override (flashes visible consoles)."})),process.exit(1)))}N();import{existsSync as zv}from"node:fs";import{homedir as Xv}from"node:os";import Qv from"node:path";function $d(e,r){let t=process.env[e]?.trim().toLowerCase();return t?t==="0"||t==="false"||t==="no"||t==="off"?!1:t==="1"||t==="true"||t==="yes"||t==="on"?!0:r:r}function Yn(e,r,t=1){let n=Number(process.env[e]);return!Number.isFinite(n)||n<t?r:Math.floor(n)}function vr(){let e=process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim();return e||Qv.join(Xv(),".kynver","agent-os-cron.json")}function Zv(e=vr()){let r=process.env.KYNVER_CRON_TICK_STATE_PATH?.trim();return r||`${e.replace(/\.json$/i,"")}.tick-state.json`}function eS(){let e=b();return process.env.KYNVER_API_URL?.trim()||e.apiBaseUrl?.trim()||process.env.KYNVER_CRON_FIRE_BASE_URL?.trim()||process.env.OPENCLAW_CRON_FIRE_BASE_URL?.trim()||null}function ba(){return process.env.KYNVER_CRON_SECRET?.trim()||process.env.OPENCLAW_CRON_SECRET?.trim()||process.env.KYNVER_RUNTIME_SECRET?.trim()||null}function sr(){let e=vr(),r=Zv(e),t=eS(),n=ba(),o=!!(t&&n),s=zv(e),i=o&&(s||$d("KYNVER_CRON_TICK_FORCE",!1));return{storePath:e,statePath:r,lockPath:`${r}.lock`,fireBaseUrl:t,secret:n,tickEnabled:$d("KYNVER_CRON_TICK_ENABLED",i),tickIntervalMs:Yn("KYNVER_CRON_TICK_INTERVAL_MS",6e4,5e3),missedRunPolicy:process.env.KYNVER_CRON_MISSED_RUN_POLICY?.trim().toLowerCase()==="skip"?"skip":"catch_up",maxCatchUpPerTick:Yn("KYNVER_CRON_MAX_CATCH_UP_PER_TICK",3,0),maxRetries:Yn("KYNVER_CRON_MAX_RETRIES",3,0),retryBackoffMs:Yn("KYNVER_CRON_RETRY_BACKOFF_MS",6e4,1e3),inflightLeaseMs:Yn("KYNVER_CRON_INFLIGHT_LEASE_MS",12e4,5e3)}}function ks(e=sr()){return e.tickEnabled&&!!(e.fireBaseUrl&&e.secret)}function rS(e){return e.replace(/\/+$/,"")}async function Kd(e){let r=e.fetchFn??fetch,t=e.entry.spec.callbackPath.startsWith("/")?e.entry.spec.callbackPath:`/${e.entry.spec.callbackPath}`,n=`${rS(e.baseUrl)}${t}`,s={source:"kynver-cron",jobId:e.jobId??e.entry.spec.dedupeKey??null,agentOsId:e.entry.spec.target.agentOsId,kind:e.entry.spec.kind,target:e.entry.spec.target,...e.entry.spec.payload!==void 0&&{payload:e.entry.spec.payload}},i=await r(n,{method:"POST",headers:De(e.secret),body:JSON.stringify(s)}),a=null;try{a=await i.json()}catch{a=null}return{ok:i.ok,status:i.status,body:a}}w();import{closeSync as tS,existsSync as va,openSync as nS,readFileSync as oS,unlinkSync as jd,writeFileSync as sS}from"node:fs";var iS=10*6e4;function Vd(e){if(!va(e))return null;try{let r=JSON.parse(oS(e,"utf8"));if(typeof r.pid=="number"&&typeof r.at=="string")return r}catch{return null}return null}function aS(e){let r=Vd(e);if(!r||!H(r.pid))return!0;let t=Date.parse(r.at);return Number.isNaN(t)?!0:Date.now()-t>iS}function Gd(e){if(va(e)&&!aS(e)){let r=Vd(e);return{acquired:!1,reason:r?`held by pid ${r.pid}`:"held by another process"}}if(va(e))try{jd(e)}catch{}try{let r=nS(e,"wx");return sS(r,JSON.stringify({pid:process.pid,at:new Date().toISOString()}),"utf8"),tS(r),{acquired:!0}}catch(r){if(r.code==="EEXIST")return{acquired:!1,reason:"concurrent acquire"};throw r}}function Yd(e){try{jd(e)}catch{}}var lS=/^[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+$/;function cS(e){return lS.test(e.trim())}function uS(e,r,t){let n=new Set;for(let o of e.split(",")){let s=o.trim();if(!s)continue;if(s==="*"){for(let d=r;d<=t;d++)n.add(d);continue}let i=/^(.+)\/(\d+)$/.exec(s),a=i?i[1]:s,l=i?Math.max(1,Number(i[2])):1;if(a==="*"){for(let d=r;d<=t;d+=l)n.add(d);continue}let c=/^(\d+)-(\d+)$/.exec(a);if(c){let d=Math.max(r,Number(c[1])),f=Math.min(t,Number(c[2]));for(let m=d;m<=f;m+=l)n.add(m);continue}let u=Number(a);Number.isInteger(u)&&u>=r&&u<=t&&n.add(u)}return n}function Jn(e,r,t,n){let o=e.trim();return o==="*"?!0:uS(o,t,n).has(r)}function dS(e,r){let t=e.trim().split(/\s+/);if(t.length!==5)return!1;let[n,o,s,i,a]=t;return Jn(n,r.getUTCMinutes(),0,59)&&Jn(o,r.getUTCHours(),0,23)&&Jn(s,r.getUTCDate(),1,31)&&Jn(i,r.getUTCMonth()+1,1,12)&&Jn(a,r.getUTCDay(),0,6)}var pS=366*24*60;function mS(e){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),0,0))}function Jd(e,r){if(!cS(e))return null;let t=mS(r);t=new Date(t.getTime()+6e4);for(let n=0;n<pS;n++){if(dS(e,t))return t;t=new Date(t.getTime()+6e4)}return null}function qd(e,r){if(e.scheduleKind==="runAt"&&e.runAt){let t=Date.parse(e.runAt);return Number.isNaN(t)?null:new Date(t).toISOString()}if(e.scheduleKind==="cron"&&e.cron){let t=Jd(e.cron.trim(),r);return t?t.toISOString():null}return null}function Sa(e,r){if(e.scheduleKind!=="cron"||!e.cron?.trim())return null;let t=Jd(e.cron.trim(),r);return t?t.toISOString():null}import{promises as fS}from"node:fs";async function zd(e){try{return await fS.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function gS(e){if(!e)return[];try{let r=JSON.parse(e);return Array.isArray(r.entries)?r.entries:[]}catch{return[]}}async function Br(e=vr()){let r=await zd(e);return gS(r)}async function Xd(e,r){let{mkdir:t,writeFile:n,rename:o}=await import("node:fs/promises"),{randomBytes:s}=await import("node:crypto"),{dirname:i}=await import("node:path");await t(i(e),{recursive:!0});let a=`${e}.${s(4).toString("hex")}.tmp`,l=JSON.stringify({entries:r},null,2);await n(a,l,"utf8"),await o(a,e)}async function Qd(e,r=vr()){let t=await Br(r),n=t.findIndex(o=>o.providerScheduleId===e.providerScheduleId);n>=0?t[n]=e:t.push(e),await Xd(r,t)}async function Zd(e=vr()){return await zd(e)!==null?{created:!1}:(await Xd(e,[]),{created:!0})}import{randomBytes as hS}from"node:crypto";import{promises as qn}from"node:fs";import kS from"node:path";var ys={version:1,jobs:{}};async function yS(e){try{return await qn.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function RS(e){if(!e)return{...ys,jobs:{...ys.jobs}};try{let r=JSON.parse(e);return r?.version!==1||typeof r.jobs!="object"||!r.jobs?{...ys,jobs:{}}:r}catch{return{...ys,jobs:{}}}}async function Rs(e){let r=await yS(e);return RS(r)}async function bS(e,r){await qn.mkdir(kS.dirname(e),{recursive:!0});let t=hS(6).toString("hex"),n=`${e}.tmp-${process.pid}-${Date.now()}-${t}`;await qn.writeFile(n,`${JSON.stringify(r,null,2)}
19
+ `)},Dv={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},Mt={version:Ov,generatedAt:"1970-01-01T00:00:00.000Z",personas:Nv,instructions:Tv,policyThresholds:Dv};var Kn=Mt,Ed="embedded";function Lr(){return Kn.version}function br(){return Ed}function Ad(e,r){Kn=e,Ed=r}function jn(e){let r=Kn.instructions[e];if(typeof r=="string"&&r.trim())return r;let t=Mt.instructions[e];return typeof t=="string"?t:""}function Ut(e,r){let t=Kn.policyThresholds[e];if(typeof t=="number"&&Number.isFinite(t))return t;let n=Mt.policyThresholds[e];return typeof n=="number"&&Number.isFinite(n)?n:r}function Id(e){if(!e)return null;let r=e.trim().toLowerCase();return Kn.personas.find(t=>t.slug===r)??null}import{createPublicKey as Uv,verify as Wv}from"node:crypto";var Mv={"ib-3bab6314f0ba":"53a2040646cd479e1f5f1aea9abf7848ce8b62e32001efb8044dfd90e8ab87ed","ib-26e6c695da06":"bb1700f25b2ee7d7cdcdb9f446f0f44ef2cc22a3096bc161232fb658e7cdaf38"};function Od(e,r=process.env){let t=Ra(r.KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY);if(t)return t;let n=Mv[e];return n?Ra(n):null}var Lv=Buffer.from("302a300506032b6570032100","hex");function Bv(e){return Uv({key:Buffer.concat([Lv,Buffer.from(e)]),format:"der",type:"spki"})}function Hv(e,r){if(!$n(e))return{ok:!1,reason:"malformed signed bundle payload"};let t;try{t=Buffer.from(e.signature,"base64url")}catch{return{ok:!1,reason:"signature is not base64url"}}if(t.length!==64)return{ok:!1,reason:"signature is not a 64-byte Ed25519 signature"};try{let n=Buffer.from(wd(e.bundle),"utf8");return Wv(null,n,Bv(r),t)?{ok:!0,bundle:e.bundle}:{ok:!1,reason:"Ed25519 signature mismatch"}}catch(n){return{ok:!1,reason:`signature verification failed: ${n.message}`}}}function Nd(e,r=process.env){if(!$n(e))return{ok:!1,reason:"malformed signed bundle payload"};let t=Od(e.publicKeyId,r);return t?Hv(e,t):{ok:!1,reason:`no verification key for publicKeyId "${e.publicKeyId}" (not pinned; set KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY)`}}var Fv=15*6e4,$v=1e4,or={lastAttemptAtMs:0,etag:null,diskCacheTried:!1,routeMissingLogged:!1};function Gn(e,r){console.error(JSON.stringify({event:e,...r}))}function Td(e,r,t){let n=Nd(e);return n.ok?(Ad(n.bundle,r),r==="server"&&_d(t,e),!0):(Gn("instruction_bundle_signature_invalid",{agentOsId:t,source:r,publicKeyId:e.publicKeyId,reason:n.reason}),!1)}function Vn(e){if(or.diskCacheTried)return!1;or.diskCacheTried=!0;let r=Pd(e);return r?Td(r,"disk",e):!1}async function Dd(e){let r=e.nowMs??Date.now(),t=()=>({source:br(),version:Lr(),updated:!1});if(!e.force&&r-or.lastAttemptAtMs<Fv)return t();or.lastAttemptAtMs=r;let n=e.baseUrl?.trim().replace(/\/$/,""),o=e.secret?.trim();if(!n||!o)return br()==="embedded"&&Vn(e.agentOsId)?{...t(),updated:!0}:t();let s=e.fetchImpl??fetch,i=new AbortController,a=setTimeout(()=>i.abort(),$v);try{let l=De(o);delete l["Content-Type"],or.etag&&br()==="server"&&(l["If-None-Match"]=or.etag);let c=await s(`${n}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/runtime/instruction-bundle`,{headers:l,signal:i.signal});if(c.status===304)return t();if(c.status===404)return or.routeMissingLogged||(or.routeMissingLogged=!0,Gn("instruction_bundle_route_missing",{agentOsId:e.agentOsId,baseUrl:n})),br()==="embedded"&&Vn(e.agentOsId)?{...t(),updated:!0}:t();if(!c.ok)return Gn("instruction_bundle_fetch_failed",{agentOsId:e.agentOsId,status:c.status}),br()==="embedded"&&Vn(e.agentOsId)?{...t(),updated:!0}:t();let u=await c.json().catch(()=>null);return!u||!Td(u,"server",e.agentOsId)?br()==="embedded"&&Vn(e.agentOsId)?{...t(),updated:!0}:t():(or.etag=c.headers.get("etag"),Gn("instruction_bundle_loaded",{agentOsId:e.agentOsId,version:Lr(),publicKeyId:u.publicKeyId}),{...t(),updated:!0})}catch(l){return Gn("instruction_bundle_fetch_error",{agentOsId:e.agentOsId,error:l instanceof Error?l.message:String(l)}),br()==="embedded"&&Vn(e.agentOsId)?{...t(),updated:!0}:t()}finally{clearTimeout(a)}}N();Pe();gn();rs();import Kv from"node:os";function Md(e,r){console.error(JSON.stringify({event:"daemon_identity",level:e,message:r}))}function Ud(e=b(),r=process.env){let t=_e(r,e),n=es({config:e,totalMemBytes:Kv.totalmem(),env:r}),o=[...t.warnings],s=[];if(!e.boxKind?.trim()&&!r.KYNVER_BOX_KIND?.trim()&&s.push("boxKind is not persisted in ~/.kynver/config.json and KYNVER_BOX_KIND is unset \u2014 run `kynver setup --box-kind forge|ghost` before starting the daemon so Command Center attributes snapshots to the correct pool"),t.slugInferenceBlocked){let c=r.KYNVER_DAEMON_STRICT_IDENTITY==="1"||r.KYNVER_DAEMON_STRICT_IDENTITY==="true",u="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind; treating this host as forge";c?s.push(u):o.push(u)}let i=n.configuredMaxWorkers??n.autoCap,a=rr(t.boxKind,i);gt(t.boxKind,i)&&o.push(`Forge box maxConcurrentWorkers=${i} exceeds pool cap \u2014 using ${a}; run kynver setup --box-kind forge --max-workers 4`);let l=s.length===0;for(let c of o)Md("warn",c);for(let c of s)Md("error",c);return{ok:l,box:t,workerCapSource:n.workerCapSource,maxConcurrentWorkers:a,autoCap:n.autoCap,warnings:o,errors:s}}import{mkdirSync as jv,readFileSync as Vv,renameSync as Gv,writeFileSync as Yv}from"node:fs";import{homedir as Jv}from"node:os";import Wd from"node:path";function Ld(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return Wd.join(Jv(),".kynver",`daemon-heartbeat-${r}.json`)}function Bd(e){try{let r=Ld(e.agentOsId);jv(Wd.dirname(r),{recursive:!0});let t={observedAt:(e.now??new Date).toISOString(),pid:process.pid,runId:e.runId,agentOsId:e.agentOsId,...e.instructionBundleVersion?{instructionBundleVersion:e.instructionBundleVersion}:{}},n=`${r}.tmp-${process.pid}`;Yv(n,JSON.stringify(t),"utf8"),Gv(n,r)}catch{}}function Hd(e){try{let r=Vv(Ld(e),"utf8"),t=JSON.parse(r);return typeof t?.observedAt!="string"?null:t}catch{return null}}function Fd(e,r,t=Date.now()){if(!e)return!1;let n=Date.parse(e.observedAt);return Number.isNaN(n)?!0:t-n>r}function qv(e){let r=process.env[e]?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"}function Wt(){process.platform==="win32"&&(qv("KYNVER_DAEMON_ALLOW_NATIVE_WINDOWS")||(console.error(JSON.stringify({event:"daemon_start_blocked",reason:"native_windows_console_flash",remedy:"Run the daemon inside WSL: .\\scripts\\start-tier2-wsl.ps1 \u2014 or set KYNVER_DAEMON_ALLOW_NATIVE_WINDOWS=1 to override (flashes visible consoles)."})),process.exit(1)))}N();import{existsSync as zv}from"node:fs";import{homedir as Xv}from"node:os";import Qv from"node:path";function $d(e,r){let t=process.env[e]?.trim().toLowerCase();return t?t==="0"||t==="false"||t==="no"||t==="off"?!1:t==="1"||t==="true"||t==="yes"||t==="on"?!0:r:r}function Yn(e,r,t=1){let n=Number(process.env[e]);return!Number.isFinite(n)||n<t?r:Math.floor(n)}function vr(){let e=process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim();return e||Qv.join(Xv(),".kynver","agent-os-cron.json")}function Zv(e=vr()){let r=process.env.KYNVER_CRON_TICK_STATE_PATH?.trim();return r||`${e.replace(/\.json$/i,"")}.tick-state.json`}function eS(){let e=b();return process.env.KYNVER_API_URL?.trim()||e.apiBaseUrl?.trim()||process.env.KYNVER_CRON_FIRE_BASE_URL?.trim()||process.env.OPENCLAW_CRON_FIRE_BASE_URL?.trim()||null}function ba(){return process.env.KYNVER_CRON_SECRET?.trim()||process.env.OPENCLAW_CRON_SECRET?.trim()||process.env.KYNVER_RUNTIME_SECRET?.trim()||null}function sr(){let e=vr(),r=Zv(e),t=eS(),n=ba(),o=!!(t&&n),s=zv(e),i=o&&(s||$d("KYNVER_CRON_TICK_FORCE",!1));return{storePath:e,statePath:r,lockPath:`${r}.lock`,fireBaseUrl:t,secret:n,tickEnabled:$d("KYNVER_CRON_TICK_ENABLED",i),tickIntervalMs:Yn("KYNVER_CRON_TICK_INTERVAL_MS",6e4,5e3),missedRunPolicy:process.env.KYNVER_CRON_MISSED_RUN_POLICY?.trim().toLowerCase()==="skip"?"skip":"catch_up",maxCatchUpPerTick:Yn("KYNVER_CRON_MAX_CATCH_UP_PER_TICK",3,0),maxRetries:Yn("KYNVER_CRON_MAX_RETRIES",3,0),retryBackoffMs:Yn("KYNVER_CRON_RETRY_BACKOFF_MS",6e4,1e3),inflightLeaseMs:Yn("KYNVER_CRON_INFLIGHT_LEASE_MS",12e4,5e3)}}function ks(e=sr()){return e.tickEnabled&&!!(e.fireBaseUrl&&e.secret)}function rS(e){return e.replace(/\/+$/,"")}async function Kd(e){let r=e.fetchFn??fetch,t=e.entry.spec.callbackPath.startsWith("/")?e.entry.spec.callbackPath:`/${e.entry.spec.callbackPath}`,n=`${rS(e.baseUrl)}${t}`,s={source:"kynver-cron",jobId:e.jobId??e.entry.spec.dedupeKey??null,agentOsId:e.entry.spec.target.agentOsId,kind:e.entry.spec.kind,target:e.entry.spec.target,...e.entry.spec.payload!==void 0&&{payload:e.entry.spec.payload}},i=await r(n,{method:"POST",headers:De(e.secret),body:JSON.stringify(s)}),a=null;try{a=await i.json()}catch{a=null}return{ok:i.ok,status:i.status,body:a}}w();import{closeSync as tS,existsSync as va,openSync as nS,readFileSync as oS,unlinkSync as jd,writeFileSync as sS}from"node:fs";var iS=10*6e4;function Vd(e){if(!va(e))return null;try{let r=JSON.parse(oS(e,"utf8"));if(typeof r.pid=="number"&&typeof r.at=="string")return r}catch{return null}return null}function aS(e){let r=Vd(e);if(!r||!H(r.pid))return!0;let t=Date.parse(r.at);return Number.isNaN(t)?!0:Date.now()-t>iS}function Gd(e){if(va(e)&&!aS(e)){let r=Vd(e);return{acquired:!1,reason:r?`held by pid ${r.pid}`:"held by another process"}}if(va(e))try{jd(e)}catch{}try{let r=nS(e,"wx");return sS(r,JSON.stringify({pid:process.pid,at:new Date().toISOString()}),"utf8"),tS(r),{acquired:!0}}catch(r){if(r.code==="EEXIST")return{acquired:!1,reason:"concurrent acquire"};throw r}}function Yd(e){try{jd(e)}catch{}}var lS=/^[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+$/;function cS(e){return lS.test(e.trim())}function uS(e,r,t){let n=new Set;for(let o of e.split(",")){let s=o.trim();if(!s)continue;if(s==="*"){for(let d=r;d<=t;d++)n.add(d);continue}let i=/^(.+)\/(\d+)$/.exec(s),a=i?i[1]:s,l=i?Math.max(1,Number(i[2])):1;if(a==="*"){for(let d=r;d<=t;d+=l)n.add(d);continue}let c=/^(\d+)-(\d+)$/.exec(a);if(c){let d=Math.max(r,Number(c[1])),f=Math.min(t,Number(c[2]));for(let m=d;m<=f;m+=l)n.add(m);continue}let u=Number(a);Number.isInteger(u)&&u>=r&&u<=t&&n.add(u)}return n}function Jn(e,r,t,n){let o=e.trim();return o==="*"?!0:uS(o,t,n).has(r)}function dS(e,r){let t=e.trim().split(/\s+/);if(t.length!==5)return!1;let[n,o,s,i,a]=t;return Jn(n,r.getUTCMinutes(),0,59)&&Jn(o,r.getUTCHours(),0,23)&&Jn(s,r.getUTCDate(),1,31)&&Jn(i,r.getUTCMonth()+1,1,12)&&Jn(a,r.getUTCDay(),0,6)}var pS=366*24*60;function mS(e){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),0,0))}function Jd(e,r){if(!cS(e))return null;let t=mS(r);t=new Date(t.getTime()+6e4);for(let n=0;n<pS;n++){if(dS(e,t))return t;t=new Date(t.getTime()+6e4)}return null}function qd(e,r){if(e.scheduleKind==="runAt"&&e.runAt){let t=Date.parse(e.runAt);return Number.isNaN(t)?null:new Date(t).toISOString()}if(e.scheduleKind==="cron"&&e.cron){let t=Jd(e.cron.trim(),r);return t?t.toISOString():null}return null}function Sa(e,r){if(e.scheduleKind!=="cron"||!e.cron?.trim())return null;let t=Jd(e.cron.trim(),r);return t?t.toISOString():null}import{promises as fS}from"node:fs";async function zd(e){try{return await fS.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function gS(e){if(!e)return[];try{let r=JSON.parse(e);return Array.isArray(r.entries)?r.entries:[]}catch{return[]}}async function Br(e=vr()){let r=await zd(e);return gS(r)}async function Xd(e,r){let{mkdir:t,writeFile:n,rename:o}=await import("node:fs/promises"),{randomBytes:s}=await import("node:crypto"),{dirname:i}=await import("node:path");await t(i(e),{recursive:!0});let a=`${e}.${s(4).toString("hex")}.tmp`,l=JSON.stringify({entries:r},null,2);await n(a,l,"utf8"),await o(a,e)}async function Qd(e,r=vr()){let t=await Br(r),n=t.findIndex(o=>o.providerScheduleId===e.providerScheduleId);n>=0?t[n]=e:t.push(e),await Xd(r,t)}async function Zd(e=vr()){return await zd(e)!==null?{created:!1}:(await Xd(e,[]),{created:!0})}import{randomBytes as hS}from"node:crypto";import{promises as qn}from"node:fs";import kS from"node:path";var ys={version:1,jobs:{}};async function yS(e){try{return await qn.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function RS(e){if(!e)return{...ys,jobs:{...ys.jobs}};try{let r=JSON.parse(e);return r?.version!==1||typeof r.jobs!="object"||!r.jobs?{...ys,jobs:{}}:r}catch{return{...ys,jobs:{}}}}async function Rs(e){let r=await yS(e);return RS(r)}async function bS(e,r){await qn.mkdir(kS.dirname(e),{recursive:!0});let t=hS(6).toString("hex"),n=`${e}.tmp-${process.pid}-${Date.now()}-${t}`;await qn.writeFile(n,`${JSON.stringify(r,null,2)}
20
20
  `,"utf8");try{await qn.rename(n,e)}catch(o){let s=o.code;if(s!=="EPERM"&&s!=="EEXIST"&&s!=="EACCES")throw o;await qn.unlink(n).catch(()=>{})}}async function ep(e,r){await bS(e,r)}function rp(e,r){let t=e.jobs[r];if(t)return t;let n={providerScheduleId:r,nextFireAt:null,lastFiredAt:null,lastAttemptAt:null,consecutiveFailures:0,completedAt:null,inflightUntil:null};return e.jobs[r]=n,n}function vS(e,r){if(!e.inflightUntil)return!1;let t=Date.parse(e.inflightUntil);return!Number.isNaN(t)&&t>r}function SS(e){return!!e.completedAt}function wS(e,r,t,n){if(r.consecutiveFailures===0)return!0;if(e.spec.scheduleKind!=="cron"&&r.consecutiveFailures>t.maxRetries)return!1;if(!r.lastAttemptAt)return!0;let o=Date.parse(r.lastAttemptAt);return Number.isNaN(o)?!0:n-o>=t.retryBackoffMs}function CS(e,r,t){if(r.nextFireAt)return r.nextFireAt;let n=qd(e.spec,t);return r.nextFireAt=n,n}function xS(e,r,t,n){if(e.paused||SS(r)||vS(r,t)||!wS(e,r,n,t))return!1;let o=r.nextFireAt?Date.parse(r.nextFireAt):NaN;return Number.isNaN(o)?!1:t>=o}function _S(e,r,t){e.spec.scheduleKind==="cron"&&(r.nextFireAt=Sa(e.spec,t))}async function Lt(e={}){let r=e.env??sr(),t=e.now??new Date,n=t.getTime();if(!r.tickEnabled)return{enabled:!1,skipped:"tick_disabled",scanned:0,due:0,fired:0,skippedJobs:0,errors:0};if(!r.fireBaseUrl||!r.secret)return{enabled:!0,skipped:"missing_fire_credentials",scanned:0,due:0,fired:0,skippedJobs:0,errors:0};let o=Gd(r.lockPath);if(!o.acquired)return{enabled:!0,skipped:o.reason??"lock_not_acquired",scanned:0,due:0,fired:0,skippedJobs:0,errors:0,lockHeld:!0};try{let s=await Br(r.storePath),i=e.agentOsIdFilter?s.filter(m=>m.spec.target.agentOsId===e.agentOsIdFilter):s,a=await Rs(r.statePath),l=[];for(let m of i){let p=rp(a,m.providerScheduleId);CS(m,p,t),xS(m,p,n,r)&&l.push({entry:m,job:p})}l.sort((m,p)=>{let h=Date.parse(m.job.nextFireAt??"")||0,k=Date.parse(p.job.nextFireAt??"")||0;return h-k});let c=0,u=0,d=0,f=r.maxCatchUpPerTick;for(let{entry:m,job:p}of l){if(r.missedRunPolicy==="skip"&&m.spec.scheduleKind==="cron"){let h=Date.parse(p.nextFireAt??"");if(!Number.isNaN(h)&&h<n-r.tickIntervalMs*2){p.nextFireAt=Sa(m.spec,t),d++;continue}}if(f<=0){d++;continue}p.inflightUntil=new Date(n+r.inflightLeaseMs).toISOString(),p.lastAttemptAt=t.toISOString(),_S(m,p,t);try{let h=await Kd({entry:m,baseUrl:r.fireBaseUrl,secret:r.secret,fetchFn:e.fetchFn});p.inflightUntil=null,h.ok?(p.lastFiredAt=t.toISOString(),p.consecutiveFailures=0,m.spec.scheduleKind==="runAt"&&(p.completedAt=t.toISOString(),p.nextFireAt=null),c++,f--):(p.consecutiveFailures+=1,u++)}catch{p.inflightUntil=null,p.consecutiveFailures+=1,u++}}return await ep(r.statePath,a),{enabled:!0,scanned:i.length,due:l.length,fired:c,skippedJobs:d,errors:u}}finally{Yd(r.lockPath)}}w();D();import tp from"node:path";var np="mesh-cron-lease.json";function bs(e){return C(tp.join(E(e),np),null)}function op(e,r){se(tp.join(E(e),np),{...r,updatedAt:new Date().toISOString()})}function sp(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.response;if(!r||typeof r!="object"||Array.isArray(r))return null;let t=r.meshLiveness;if(!t||typeof t!="object"||Array.isArray(t))return null;let n=t.cronLease;if(!n||typeof n!="object"||Array.isArray(n))return null;let o=n;return{leaseToken:typeof o.leaseToken=="string"?o.leaseToken:null,holderBoxId:typeof o.holderBoxId=="string"?o.holderBoxId:null,authorized:o.authorized===!0,updatedAt:new Date().toISOString()}}w();import EE from"node:path";D();xn();w();import PS from"node:path";function ES(e){let r=Array.isArray(e.ownedPaths)?e.ownedPaths.filter(n=>typeof n=="string"):[],t=Array.isArray(e.writeSetPrefixes)?(e.writeSetPrefixes??[]).filter(n=>typeof n=="string"):[];return{...r.length?{ownedPaths:r}:{},...t.length?{writeSetPrefixes:t}:{},...e.allowConcurrentHotspot?{allowConcurrentHotspot:!0}:{}}}function vs(e){let r=L(e),t=[];for(let n of Object.keys(r.workers||{})){let o=C(PS.join(E(r.id),"workers",v(n),"worker.json"),void 0);!o?.taskId||!Pt(o)||t.push({runId:r.id,workerName:n,taskId:o.taskId,pid:o.pid,...ES(o)})}return t}N();N();function ip(e){if(e!==void 0&&Number.isFinite(e)&&e>0)return Math.floor(e);let r=Number(process.env.KYNVER_CALLBACK_TIMEOUT_MS);return Number.isFinite(r)&&r>0?Math.floor(r):3e4}async function ap(e,r){let t=ip(r),n=new AbortController,o;try{return await Promise.race([e(n.signal),new Promise((s,i)=>{o=setTimeout(()=>{n.abort(),i(new Error(`callback timeout after ${t}ms`))},t)})])}finally{o&&clearTimeout(o)}}function lp(e,r){let t=ip(r);return{ok:!1,status:0,response:{error:e instanceof Error?e.message:String(e),timeoutMs:t}}}async function Hr(e,r,t,n){try{return await ap(async o=>{let s=await fetch(e,{method:"POST",headers:De(r),body:JSON.stringify(t),signal:o}),i=null;try{i=await s.json()}catch{i=null}return{ok:s.ok,status:s.status,response:i}},n?.timeoutMs)}catch(o){return lp(o,n?.timeoutMs)}}async function re(e,r,t,n){let o=await Hr(e,r,t,{timeoutMs:n.timeoutMs});if(o.ok||o.status!==401)return o;let s=await fd(r,n.agentOsId,{baseUrl:n.baseUrl});return s.ok?{...await Hr(e,s.token,t,{timeoutMs:n.timeoutMs}),refreshedAuth:!0}:{...o,authRefreshFailure:s.reason}}async function Ss(e,r,t){try{return await ap(async n=>{let o=await fetch(e,{method:"GET",headers:De(r),signal:n}),s=null;try{s=await o.json()}catch{s=null}return{ok:o.ok,status:o.status,response:s}},t?.timeoutMs)}catch(n){return lp(n,t?.timeoutMs)}}N();function cp(){let e=Number(process.env.KYNVER_DISPATCH_CALLBACK_TIMEOUT_MS);return Number.isFinite(e)&&e>0?Math.floor(e):12e4}function wa(e){console.error(JSON.stringify({event:"dispatch_progress",ts:new Date().toISOString(),...e}))}function up(e){if(!e||typeof e!="object")return!1;let r=e;if(r.timeoutMs!==void 0)return!0;let t=r.error;if(typeof t!="string"||!t.trim())return!1;let n=t.toLowerCase();return n.includes("abort")||n.includes("timeout")}var AS=["implementation","review","landing"],IS=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function OS(e){return AS.includes(e)}function NS(e){return IS.includes(e)}function dp(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||OS(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:NS(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var pp=Mt.personas.map(dp),TS=new Map(pp.map(e=>[e.slug,e]));function DS(e){if(!e)return null;let r=e.trim().toLowerCase(),t=TS.get(r)??null,n=Id(r);if(!n)return t;let o=dp(n);return t?{...o,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:o}function Ca(e){return DS(e)?.defaultRoleLane??null}function mp(){return pp.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function fp(e){return(e??"").trim().toLowerCase()}function MS(e){switch(fp(e)){case"implementer":case"repair_implementer":case"plan_author":case"runtime_verifier":return"implementation";case"plan_reviewer":case"report_reviewer":case"deep_reviewer":return"review";default:return null}}function US(e){let r=fp(e);if(!r)return;if(r==="implementation"||r==="review"||r==="landing"||r==="any")return r;let t=MS(r);if(t)return t;if(r==="implement"||r==="repair"||r==="coding")return"implementation";if(r==="land"||r==="merge")return"landing"}function gp(e){return US(e)??"any"}yn();Et();D();D();function ws(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function xa(e){return e.toLowerCase()}function WS(e){let r=ws(e,"roleLane");if(r)return r;let t=xa(ws(e,"executorRef")),n=xa(ws(e,"title")),o=xa(ws(e,"personaSlug")),s=`${t} ${n}`;if(s.includes("deep review")||s.includes("security review")||t.includes("deep-reviewer"))return"deep_reviewer";if(s.includes("plan author")||s.includes("plan-author")||n.includes("strategy plan"))return"plan_author";if(s.includes("plan review")||t.includes("plan-reviewer"))return"plan_reviewer";if(s.includes("report review")||s.includes("completion report"))return"report_reviewer";if(s.includes("repair")||n.startsWith("fix ")||t.includes("repair"))return"repair_implementer";if(t.includes("cursor")||t.includes("codex")||t.includes("composer")||n.includes("implement")||n.includes("land:"))return"implementer";let i=Ca(o);if(i)return o==="lorentz"&&(s.includes("deep")||s.includes("security"))?"deep_reviewer":i;if(s.includes("review"))return"report_reviewer"}function hp(e){let r=WS(e);return r?{...e,roleLane:r}:e}N();var ir="cursor",LS=new Set(["claude","opus","anthropic"]),BS=[/\[worker-provider:\s*claude\]/i,/\[use-claude-worker\]/i,/\[operator-worker-provider:\s*claude\]/i];function _a(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function Fr(e){if(!e?.trim())return!1;let r=e.trim().toLowerCase();return LS.has(r)?!0:r.includes("claude")||r.includes("opus")}function Pa(e){if(!e)return!1;let r=e.workerProviderOverride;if(typeof r=="string"&&Fr(r))return!0;let t=_a(e,"executorRef").toLowerCase();if(t==="provider:claude"||t.startsWith("provider:claude:")||t.includes("claude-worker-override")||t.includes("operator-claude"))return!0;let n=_a(e,"description");if(BS.some(s=>s.test(n)))return!0;let o=_a(e,"title");return!!/\[use-claude-worker\]/i.test(o)}function HS(e,r){return{provider:ir,model:Ea,rule:`policy:cursor_default${r}`,requestedModel:e}}function kp(e){let{routing:r,task:t}=e,n=e.explicitProvider?.trim().toLowerCase();if(e.explicitProviderIsOperatorOverride&&Fr(n))return{...r,provider:"claude",rule:r.rule.startsWith("explicit:")?r.rule:"explicit:operator_provider"};if(Pa(t)||r.rule==="explicit:cli"&&Fr(r.provider)||!Fr(r.provider))return r;let o=r.rule&&r.rule!=="default:global"?`:${r.rule.replace(/:/g,"_")}`:"";return HS(r.model,o)}function Cs(e,r=ir){let t=e?.trim();return t?Fr(t)?ir:t==="codex"?"codex":t:r}var yp={codex:{id:"codex",displayName:"Codex (BYO OAuth / Hermes openai-codex)",costTier:"low",authSources:["oauth_local","api_key_env","subscription_hermes"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!1},cursor:{id:"cursor",displayName:"Cursor / Composer",costTier:"medium",authSources:["oauth_local","api_key_env"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0},claude:{id:"claude",displayName:"Claude Code",costTier:"high",authSources:["oauth_local"],supportsLowRiskOrchestration:!0,supportsPrivilegedPlatformActions:!0}};function Bt(e){return yp[e]}function Rp(){return Object.values(yp)}import{existsSync as $S}from"node:fs";import{homedir as KS}from"node:os";import Sp from"node:path";import{createHash as bp}from"node:crypto";import{statSync as FS}from"node:fs";import{spawnSync as vp}from"node:child_process";function je(e){try{let r=FS(e),t=`${e}|${r.size}|${r.mtimeMs}`;return bp("sha256").update(t).digest("hex").slice(0,16)}catch{return}}function Ht(e){return bp("sha256").update(`env:${e}`).digest("hex").slice(0,16)}function Ee(e,r){for(let t of r){let n=process.env[t]?.trim();if(n)return n}return e}function Ve(e,r,t={}){let n=t.timeoutMs??8e3;try{let o=vp(e,r,{encoding:"utf8",timeout:n,env:{...process.env,CI:"1",NO_COLOR:"1"}});if(o.status===0)return{ok:!0,note:t.okNote??`${e} ${r.join(" ")}: ok`};let s=(o.stderr||o.stdout||"").trim(),i=t.failPrefix??`${e} ${r.join(" ")} failed`;return{ok:!1,note:s?`${i}: ${s.slice(0,200)}`:i}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} probe failed`}}}function xs(e,r,t={}){let n=t.timeoutMs??8e3;try{return vp(e,r,{stdio:"ignore",timeout:n,env:{...process.env,CI:"1",NO_COLOR:"1"}}).status===0?{ok:!0,note:t.okNote??`${e} authenticated`}:{ok:!1,note:t.failNote??`${e} not authenticated`}}catch(o){return{ok:!1,note:o instanceof Error?o.message:`${e} auth probe failed`}}}var jS="codex";function VS(){let e=KS();return[Sp.join(e,".codex","auth.json"),Sp.join(e,".config","codex","auth.json")]}function wp(e=new Date().toISOString()){let r=Ee(jS,["KYNVER_CODEX_BIN","CODEX_BIN"]);if(process.env.CODEX_API_KEY?.trim())return{providerId:"codex",ready:!0,authSource:"api_key_env",sessionFingerprint:Ht("CODEX_API_KEY"),checkedAt:e,note:"CODEX_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=VS().find(s=>$S(s)),n=Ve(r,["login","status"],{okNote:"codex login status: authenticated",failPrefix:"codex login status"}),o=!!t&&n.ok;return{providerId:"codex",ready:o,authSource:"oauth_local",sessionFingerprint:t?je(t):void 0,checkedAt:e,note:o?"Local Codex OAuth session bound on runner":[n.note,t?void 0:"no ~/.codex/auth.json"].filter(Boolean).join("; ")}}import{existsSync as GS}from"node:fs";import{homedir as YS}from"node:os";import Aa from"node:path";function JS(){let e=process.env.HERMES_HOME?.trim(),r=e?Aa.resolve(e):Aa.join(YS(),".hermes");return Aa.join(r,"auth.json")}function _s(e=new Date().toISOString()){let r=Ee("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Ve(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=JS(),o=GS(n),s=xs(r,["auth","status","openai-codex"],{okNote:"hermes openai-codex: logged in",failNote:"hermes openai-codex: not logged in"}),i=t.ok&&s.ok;return{path:"hermes_openai_codex",ready:i,authSource:i?"subscription_hermes":"none",sessionFingerprint:o?je(n):void 0,checkedAt:e,note:i?"Hermes openai-codex subscription session bound (ChatGPT Codex OAuth)":[t.note,s.note,o?void 0:"no ~/.hermes/auth.json"].filter(Boolean).join("; ")}}function Ft(e=new Date().toISOString()){let r=wp(e);if(r.ready)return{...r,path:"codex_cli"};let t=_s(e);return t.ready?{providerId:"codex",ready:!0,authSource:t.authSource,sessionFingerprint:t.sessionFingerprint,checkedAt:t.checkedAt,note:t.note,path:"hermes_openai_codex",hermesOpenAiCodex:t}:{providerId:"codex",ready:!1,authSource:"none",checkedAt:e,path:"none",hermesOpenAiCodex:t,note:[r.note,t.note].filter(Boolean).join("; ")||"Codex CLI and Hermes openai-codex unavailable"}}var Cp=["low","medium","high"],xp={oauth_local:0,subscription_hermes:0,runner_token:1,api_key_env:2,none:3};function _p(e,r){let t=Bt(e);return r==="privileged"?t.supportsPrivilegedPlatformActions:r==="low"?t.supportsLowRiskOrchestration:!0}function qS(e,r){let t=Bt(e.providerId),n=Bt(r.providerId),o=Cp.indexOf(t.costTier)-Cp.indexOf(n.costTier);if(o!==0)return o;let s=xp[e.binding.authSource]-xp[r.binding.authSource];return s!==0?s:e.providerId.localeCompare(r.providerId)}function Ia(e){let r=Rp().map(a=>({providerId:a.id,binding:e.inventory.bindings[a.id]})).filter(a=>a.binding.ready&&_p(a.providerId,e.riskClass));if(r.length===0)return null;let n=[...r].sort(qS)[0],o="codex";if(n.providerId===o)return{providerId:n.providerId,binding:n.binding};let s=e.inventory.bindings[o],i;return _p(o,e.riskClass)?s.ready||(i=s.note??`${o} not bound`):i=`${e.riskClass} orchestration requires privileged-capable provider`,{providerId:n.providerId,binding:n.binding,escalatedFrom:o,escalatedReason:i}}import{existsSync as zS}from"node:fs";import{homedir as XS}from"node:os";import QS from"node:path";var ZS="claude";function ew(){let e=XS();return[QS.join(e,".claude",".credentials.json")]}function Pp(e=new Date().toISOString()){let r=Ee(ZS,["KYNVER_CLAUDE_BIN","CLAUDE_BIN"]);if(process.env.ANTHROPIC_API_KEY?.trim())return{providerId:"claude",ready:!0,authSource:"api_key_env",sessionFingerprint:Ht("ANTHROPIC_API_KEY"),checkedAt:e,note:"ANTHROPIC_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=Ve(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=ew().find(i=>zS(i)),o=xs(r,["auth","status"],{okNote:"claude auth status: authenticated",failNote:"claude auth status: not authenticated"}),s=t.ok&&(o.ok||!!n);return{providerId:"claude",ready:s,authSource:"oauth_local",sessionFingerprint:n?je(n):void 0,checkedAt:e,note:s?"Local Claude Code OAuth session bound on runner":[t.note,o.note,n?void 0:"no ~/.claude/.credentials.json"].filter(Boolean).join("; ")}}import{existsSync as rw}from"node:fs";import{homedir as tw}from"node:os";import nw from"node:path";var ow="agent";function sw(){let e=tw();return[nw.join(e,".config","cursor","auth.json")]}function Ep(e=new Date().toISOString()){let r=Ee(ow,["KYNVER_CURSOR_AGENT_BIN","CURSOR_AGENT_BIN"]);if(process.env.CURSOR_API_KEY?.trim())return{providerId:"cursor",ready:!0,authSource:"api_key_env",sessionFingerprint:Ht("CURSOR_API_KEY"),checkedAt:e,note:"CURSOR_API_KEY present (env binding \u2014 cloud credits path, no token stored in Kynver)"};let t=Ve(r,["-v"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=sw().find(s=>rw(s)),o=!!n&&t.ok;return{providerId:"cursor",ready:o,authSource:"oauth_local",sessionFingerprint:n?je(n):void 0,checkedAt:e,note:o?"Local Cursor/Composer OAuth session bound on runner":[t.note,n?void 0:"no ~/.config/cursor/auth.json"].filter(Boolean).join("; ")}}import{existsSync as iw,readFileSync as aw}from"node:fs";import{homedir as lw}from"node:os";import Oa from"node:path";var cw=["OPENAI_API_KEY","ANTHROPIC_API_KEY","KYNVER_API_KEY","KYNVER_BASE_URL"];function uw(){let e=process.env.HERMES_HOME?.trim(),r=e?Oa.resolve(e):Oa.join(lw(),".hermes");return Oa.join(r,".env")}function dw(e){try{let r=aw(e,"utf8"),t=[];for(let n of cw)new RegExp(`^${n}=`,"m").test(r)&&t.push(n);return t}catch{return[]}}function Ap(e=new Date().toISOString()){let r=Ee("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),t=Ve(r,["--version"],{okNote:`${r} CLI available`,failPrefix:`${r} CLI not available`}),n=uw(),o=iw(n),s=o?dw(n):[],a=s.some(c=>c.endsWith("_API_KEY"))?"api_key_env":o?"oauth_local":"none",l=t.ok&&o;return{adapterId:"hermes",cliAvailable:t.ok,profileBound:o,authSource:a,sessionFingerprint:o?je(n):void 0,checkedAt:e,note:l?`Hermes profile bound (${s.length?`keys: ${s.join(", ")}`:"no API keys detected"})`:[t.note,o?void 0:"no ~/.hermes/.env"].filter(Boolean).join("; ")}}function Ip(e={}){let r=e.nowIso?.()??new Date().toISOString(),t=Ft(r),n={codex:t,cursor:Ep(r),claude:Pp(r)},o=Object.values(n).filter(s=>s.ready).length;return{generatedAt:r,bindings:n,cloudApiCredits:{anthropicApiKey:!!process.env.ANTHROPIC_API_KEY?.trim(),openaiApiKey:!!process.env.OPENAI_API_KEY?.trim(),codexApiKey:!!process.env.CODEX_API_KEY?.trim()},hermes:Ap(r),hermesOpenAiCodex:_s(r),codexAdapterPath:t.path,readyCount:o}}var pw=[/\bprivileged\b/i,/\bproduction\s+db\b/i,/\bdb:push\b/i,/\bmigration\b/i,/\bdeploy\b/i,/\bsecrets?\b/i,/\bstripe\b/i,/\[require-approval\]/i,/\[operator-only\]/i],mw=[/\borchestration\b/i,/\bplan[- ]?progress\b/i,/\bstatus\s+sync\b/i,/\bheartbeat\b/i,/\bboard[- ]?drain\b/i,/\bmaintenance\b/i,/\[orchestration:\s*low-risk\]/i];function Na(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function fw(e){let r=Na(e,"executorRef").toLowerCase(),t=Na(e,"title").toLowerCase(),n=Na(e,"description").toLowerCase(),o=`${r}
21
21
  ${t}
22
22
  ${n}`;return pw.some(s=>s.test(o))?"privileged":r.includes("provider:claude")||r.includes("deep_review")||r.includes("security")||r.includes("landing")||r.includes("review")||t.startsWith("land:")||r.includes("implementer")||r.includes("repair")||t.includes("implement")?"elevated":mw.some(s=>s.test(o))?"low":"elevated"}function gw(e){let r=Bt(e.provider),t=e.escalatedFrom&&e.escalatedReason?`Escalated from ${e.escalatedFrom} (${e.escalatedReason}); using ${r.displayName} (${r.costTier} tier)`:`${r.displayName} selected for ${e.riskClass} orchestration (${r.costTier} tier, auth=${e.authSource})`;return{provider:e.provider,model:e.model,authSource:e.authSource,costTier:r.costTier,riskClass:e.riskClass,costRationale:t,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason}}function hw(e){let r=e.inventory??Ip();return e.codexBinding?{...r,bindings:{...r.bindings,codex:e.codexBinding}}:r}function $r(e){let r=gw({provider:e.providerId,model:e.model,authSource:e.binding.authSource,riskClass:e.riskClass,routingRule:e.routingRule,escalatedFrom:e.escalatedFrom,escalatedReason:e.escalatedReason});return{provider:e.providerId,model:e.model,rule:r.routingRule,audit:r}}function Op(e){let r=e.task??{},t=fw(r),n=hw({inventory:e.inventory,codexBinding:e.codexBinding??(e.inventory?null:Ft())}),o=e.preferLowCost===!1?null:e.explicitProvider?.trim().toLowerCase(),s=e.explicitModel?.trim()||void 0,i=ir;if(o==="codex"||o==="provider:codex"){let c=n.bindings.codex;if(!c.ready){let u=Ia({inventory:n,riskClass:t});return $r(u?{providerId:u.providerId,binding:u.binding,riskClass:t,routingRule:"orchestration:explicit_codex_unavailable_cost_aware",model:s,escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"}:{providerId:i,binding:n.bindings[i],riskClass:t,routingRule:"orchestration:codex_unavailable_escalate_cursor",model:s,escalatedFrom:"codex",escalatedReason:c.note??"codex oauth not bound"})}return $r({providerId:"codex",binding:c,riskClass:t,routingRule:"orchestration:explicit_codex",model:s})}if(o==="cursor"||o==="provider:cursor"){let c=n.bindings.cursor;if(c.ready)return $r({providerId:"cursor",binding:c,riskClass:t,routingRule:"orchestration:explicit_cursor",model:s})}if(o==="claude"||o==="provider:claude"){let c=n.bindings.claude;if(c.ready)return $r({providerId:"claude",binding:c,riskClass:t,routingRule:"orchestration:explicit_claude",model:s})}let a=Ia({inventory:n,riskClass:t});if(a)return $r({providerId:a.providerId,binding:a.binding,riskClass:t,routingRule:`orchestration:cost_aware_${a.providerId}`,model:s,escalatedFrom:a.escalatedFrom,escalatedReason:a.escalatedReason});let l=n.bindings.codex;return $r({providerId:i,binding:n.bindings[i],riskClass:t,routingRule:l.ready?"orchestration:inventory_empty_default_cursor":"orchestration:codex_unavailable_default_cursor",model:s,...l.ready?{}:{escalatedFrom:"codex",escalatedReason:l.note??"codex oauth not bound"}})}dt();w();import{closeSync as Np,openSync as Tp}from"node:fs";import{spawn as Sw}from"node:child_process";var kw=/-(?:thinking(?:-(?:high|medium|low|minimal|max|none))?|high|medium|low|minimal)$/i;function yw(e){return e.replace(kw,"")}var Rw=/^(?:gpt-|gpt5|o1|o3|o4|gemini-|grok-|composer|deepseek|llama|mistral|qwen|command-)/i;function Ta(e){return/^claude[-_]/i.test(e)||/^(?:opus|sonnet|haiku)\b/i.test(e)}var bw=new Set(["cursor"]);function vw(e){let r=e.trim().toLowerCase();return bw.has(r)?"auto":null}function Da(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let o=yw(t).trim()||r;return Rw.test(o)||!Ta(o)&&o!==r?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is not a Claude model \u2014 the "claude" provider drives the Claude CLI, which only accepts claude-* model ids (got "${o}"). Pick a Claude model or switch the worker provider.`}:o!==t?{ok:!0,model:o,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${o}" (the Claude CLI rejects reasoning-effort suffixes)`}:{ok:!0,model:o,normalized:!1}}function $t(e,r){let t=(e??"").trim();return t?Ta(t)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is a Claude model but the worker provider is "codex". Switch the provider or pick a Codex/OpenAI model.`}:{ok:!0,model:t,normalized:!1}:{ok:!0,model:r,normalized:!1}}function Ma(e,r){let t=(e??"").trim();if(!t)return{ok:!0,model:r,normalized:!1};let n=vw(t);return n?{ok:!0,model:n,normalized:!0,requested:t,note:`normalized model "${t}" \u2192 "${n}" (Cursor provider alias \u2014 use "auto" or a composer id, not "cursor")`}:Ta(t)?{ok:!1,model:t,normalized:!1,requested:t,note:`model "${t}" is a Claude model but the worker provider is "cursor". Switch the provider to "claude" or pick a Cursor model.`}:{ok:!0,model:t,normalized:!1}}var Kt="claude-sonnet-4-6",Dp={name:"claude",defaultModel:Kt,preflightModel(e){return Da(e,Kt)},start(e){let r=Da(e.model,Kt);if(!r.ok)throw new Error(`claude provider model preflight failed: ${r.note}`);let t=r.model,n=Tp(e.stdoutPath,"a"),o=Tp(e.stderrPath,"a"),s=["ignore",n,o],i=Sw("claude",["--model",t,"-p","--verbose","--permission-mode","bypassPermissions","--output-format","stream-json","--include-partial-messages",e.prompt],de({cwd:e.worktreePath,detached:!0,stdio:s,env:Ze(process.env)}));if(Np(n),Np(o),!i.pid)throw new Error("failed to spawn claude worker process (is the `claude` CLI on PATH?)");return i.unref(),{pid:i.pid,model:t}}};dt();w();import{closeSync as Lp,existsSync as _w,openSync as Bp}from"node:fs";import{spawn as Hp}from"node:child_process";dt();w();import{closeSync as Mp,openSync as Up}from"node:fs";import{spawn as ww}from"node:child_process";var Ua=process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4";function Cw(){return Ze({...process.env,CI:"1",NO_COLOR:"1",HERMES_ACCEPT_HOOKS:process.env.HERMES_ACCEPT_HOOKS??"1"})}function xw(e,r){let t=process.env.KYNVER_HERMES_CODEX_MAX_TURNS?.trim()||"40";return["chat","-q",r,"--provider","openai-codex","-m",e,"-Q","--accept-hooks","--max-turns",t,"--toolsets","hermes-cli"]}var Wp={name:"hermes-codex",defaultModel:Ua,preflightModel(e){return $t(e,Ua)},start(e){let r=$t(e.model,Ua);if(!r.ok)throw new Error(`hermes-codex provider model preflight failed: ${r.note}`);let t=r.model,n=Up(e.stdoutPath,"a"),o=Up(e.stderrPath,"a"),s=["ignore",n,o],i=Ee("hermes",["KYNVER_HERMES_BIN","HERMES_BIN"]),a=xw(t,e.prompt),l=ww(i,a,de({cwd:e.worktreePath,detached:!0,shell:!1,stdio:s,env:Cw()}));if(Mp(n),Mp(o),!l.pid)throw new Error(`failed to spawn Hermes openai-codex worker (is \`${i}\` on PATH? run \`hermes auth status openai-codex\`)`);return l.unref(),{pid:l.pid,model:t}}};function Pw(){return process.env.KYNVER_CODEX_DEFAULT_MODEL?.trim()||"gpt-5.4"}var Kr=Pw();function Ew(){return process.env.KYNVER_CODEX_BIN?.trim()||process.env.CODEX_BIN?.trim()||"codex"}function Aw(){return Ze({...process.env,CI:"1",NO_COLOR:"1"})}function Iw(e,r){return["exec","--sandbox","read-only","--ask-for-approval","never","--model",e,r]}function Ow(e,r,t){if(!(process.platform!=="win32"&&_w("/usr/bin/script")))return Hp(e,r,t);let o=[e,...r].map(s=>`'${s.replace(/'/g,"'\\''")}'`).join(" ");return Hp("script",["-qfc",o,"/dev/null"],t)}var Fp={name:"codex",defaultModel:Kr,preflightModel(e){return $t(e,Kr)},start(e){if(Ft().path==="hermes_openai_codex")return Wp.start(e);let t=$t(e.model,Kr);if(!t.ok)throw new Error(`codex provider model preflight failed: ${t.note}`);let n=t.model,o=Bp(e.stdoutPath,"a"),s=Bp(e.stderrPath,"a"),i=["ignore",o,s],a=Ew(),l=Iw(n,e.prompt),c=Ow(a,l,de({cwd:e.worktreePath,detached:!0,shell:!1,stdio:i,env:Aw()}));if(Lp(o),Lp(s),!c.pid)throw new Error(`failed to spawn Codex worker (is \`${a}\` on PATH? run \`codex login\` or set CODEX_API_KEY)`);return c.unref(),{pid:c.pid,model:n}}};var Nw="claude-sonnet-4-6",Ea="composer-2.5";function Ps(e,r){let t=e[r];return typeof t=="string"?t.trim():""}function $p(e){return e.toLowerCase()}function La(e=b()){let r=e.defaultModel?.trim();if(r)return r;let t=process.env.KYNVER_DEFAULT_MODEL?.trim();return t||Nw}function Wa(e){let r=(e??"").toLowerCase();return!r||r.includes("composer")||r.includes("cursor")||r.includes("codex")||r.startsWith("gpt-")||r.startsWith("gpt5")?"cursor":/^claude[-_]/i.test(r)||/^(?:opus|sonnet|haiku)\b/i.test(r)?"claude":"cursor"}function Tw(e,r){let t=e.trim().toLowerCase(),n=r?.trim();return t==="cursor"?{model:Ea,provider:"cursor",rule:n&&n!=="cursor"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:t==="claude"||t==="anthropic"?{model:Kt,provider:"claude",rule:n&&n!=="claude"?"explicit:model_provider_alias_overrode_provider":"explicit:model_provider_alias",requestedModel:e}:null}function Kp(e,r){return!!(e.includes("deep")&&e.includes("review")||e.includes("security")||e.includes("plan_author")||e.includes("plan-author")||r.includes("deep review")||r.includes("security review")||e.includes("plan")&&!e.includes("review")&&(e.includes("author")||e.includes("strategy")))}function Dw(e){let r=$p(Ps(e,"executorRef")),t=Ps(e,"title").toLowerCase(),n=Ps(e,"priority")||"normal",o=$p(Ps(e,"roleLane"));if(r.includes("provider:codex")||r.startsWith("codex:"))return{provider:"codex",model:Kr,rule:"lane:codex_orchestration"};if(r.includes("cursor")||r.includes("composer")||r.includes("copilot")||o==="implementer"||o==="repair_implementer")return{provider:"cursor",rule:"lane:implementation"};if(r.includes("codex"))return{provider:"codex",model:Kr,rule:"lane:codex_orchestration"};if(r.includes("landing")||t.startsWith("land:")||t.includes(" merge"))return{provider:"cursor",rule:"lane:landing"};if(r.includes("review")||/^review[\s:]/.test(t)||o.includes("review"))return Kp(r,t)||o==="deep_reviewer"?{provider:"cursor",rule:"lane:deep_review"}:{provider:"cursor",rule:"lane:review"};if(Kp(r,t)||o==="plan_author")return{provider:"cursor",rule:"lane:planning"};if(n==="critical")return{provider:"cursor",rule:"priority:critical"};if(n==="high")return{provider:"cursor",rule:"priority:high"};if(n==="low")return{provider:"cursor",rule:"priority:low"};let s=La();return{model:s,provider:Wa(s),rule:"default:global"}}function Es(e){let r;if(e.explicitModel?.trim()){let o=e.explicitModel.trim(),s=Tw(o,e.explicitProvider);s?r=s:r={model:o,provider:e.explicitProvider?.trim()||Wa(o),rule:"explicit:cli",requestedModel:o}}else if(e.task&&Object.keys(e.task).length>0){let o=Dw(e.task);r={...o,requestedModel:o.model}}else{let o=La();r={model:o,provider:e.explicitProvider?.trim()||Wa(o),rule:"default:global",requestedModel:o}}let t=kp({routing:r,task:e.task,explicitProvider:e.explicitProvider,explicitProviderIsOperatorOverride:e.explicitProviderIsOperatorOverride});if(!e.task||Object.keys(e.task).length===0||t.rule==="explicit:model_provider_alias"||t.rule==="explicit:model_provider_alias_overrode_provider"||t.rule==="explicit:cli"||Fr(t.provider)&&(e.explicitProviderIsOperatorOverride||Pa(e.task)))return t;let n=Op({task:e.task,explicitProvider:e.explicitProvider??t.provider,explicitModel:t.model});return{provider:n.provider,model:n.provider==="codex"?n.model??t.model??Kr:t.model,rule:n.rule,requestedModel:t.requestedModel,orchestrationAudit:n.audit}}function jp(e,r,t){return e||r||t||La()||Kt}function Vp(e,r){let t=Number(e);return!Number.isFinite(t)||t<=0?r:Math.floor(t)}function Gp(){return{maxTaskAttempts:Vp(process.env.KYNVER_MAX_TASK_ATTEMPTS,Math.floor(Ut("harness.maxTaskAttempts",4))),dispatchCooldownMs:Vp(process.env.KYNVER_DISPATCH_COOLDOWN_MS,Math.floor(Ut("harness.dispatchCooldownMs",5e3)))}}N();import Ww from"node:path";D();X();w();var Ba="kynver-harness:",Yp="@runner:";function Ha(e){return e?.trim()?e.trim():null}function Mw(e){let r=Ha(e);if(!r?.startsWith(Ba))return null;let t=r.slice(Ba.length),n=t.indexOf(Yp);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function Fa(e,r){let t=e.trim(),n=r.trim();return`${Ba}${t}${Yp}${n}`}function $a(e,r){let t=Ha(r);return t?Mw(e)===t:!1}function As(e){let r=Ha(e.workerLeaseOwner);return r&&$a(r,e.runId)?r:Fa(e.runId,e.runnerId)}import Jp from"node:os";Pe();Pe();import Uw from"node:os";function Is(e,r){let t=(r??Uw.hostname()).trim().toLowerCase().replace(/\s+/g,"-")||"unknown-host";return`${e}:${t}`}function Sr(e){return e?.trim()?e.trim():null}function Ge(e={}){let r=e.env??process.env;return{runnerId:Sr(r.KYNVER_RUNTIME_ID)??Sr(r.OPENCLAW_RUNTIME_ID)??Sr(r.HOSTNAME)??Jp.hostname(),hostname:Sr(r.HOSTNAME)??Jp.hostname(),profile:Sr(r.KYNVER_RUNNER_PROFILE)??Sr(r.OPENCLAW_RUNNER_PROFILE),harnessRepo:Sr(r.KYNVER_HARNESS_REPO)??Sr(r.KYNVER_DEFAULT_REPO),runId:e.runId??null,instructionBundleVersion:Lr()}}N();async function jt(e){let r=new Map,t=e.agentOsId?.trim();if(!t||e.taskIds.length===0)return r;let n=V(e.baseUrl);try{let o=await J(e.secret,t,{baseUrl:n}),s=`${n}/api/agent-os/by-id/${encodeURIComponent(t)}/harness/monitor/task-leases`,i=await re(s,o,{taskIds:[...new Set(e.taskIds)]},{agentOsId:t,baseUrl:n});if(!i.ok||!i.response||typeof i.response!="object")return r;let a=i.response.tasks;if(!Array.isArray(a))return r;for(let l of a)l?.taskId&&r.set(l.taskId,l)}catch{}return r}D();async function Os(e){let r=e.worker.leaseOwner?.trim()??null,t=e.worker.leaseToken?.trim()??null;if(t)return{leaseOwner:r,leaseToken:t};let n=e.worker.taskId?.trim();if(!n)return{leaseOwner:r,leaseToken:null};let s=(await jt({agentOsId:e.agentOsId,taskIds:[n],baseUrl:e.baseUrl,secret:e.secret})).get(n),i=s?.leaseOwner?.trim()??null,a=s?.leaseToken?.trim()??null;if(!a)return{leaseOwner:r??i,leaseToken:null};let l=r??i;return(!e.worker.leaseToken||e.worker.leaseToken!==a)&&$(e.worker.runId,{...e.worker,...l?{leaseOwner:l}:{},leaseToken:a}),{leaseOwner:l,leaseToken:a}}function qp(e,r){return C(Ww.join(E(e),"workers",v(r),"worker.json"),void 0)}async function Ns(e,r){let t=L(e),n=String(r.agentOsId||"");if(!n)return{renewed:[],failed:[],skipped:[]};let o=V(r.baseUrl?String(r.baseUrl):void 0),s=await J(r.secret?String(r.secret):void 0,n,{baseUrl:o}),i=Number(r.leaseMs)>0?Math.floor(Number(r.leaseMs)):Ka,a=Ge({runId:e}).runnerId,l=[],c=[],u=[];for(let d of Object.keys(t.workers||{})){let f=qp(e,d);if(!f?.taskId||!f.agentOsId){u.push(d);continue}if(!H(f.pid)){u.push(d);continue}if(U(f).status==="done"){u.push(d);continue}let p=As({runId:e,workerLeaseOwner:f.leaseOwner??null,runnerId:a}),h=await Os({worker:f,agentOsId:n,baseUrl:o,secret:s}),k=`${o}/api/agent-os/by-id/${encodeURIComponent(n)}/tasks/${encodeURIComponent(f.taskId)}/renew-lease`,g=await re(k,s,{leaseOwner:h.leaseOwner??p,leaseDurationMs:i,...h.leaseToken?{leaseToken:h.leaseToken}:{}},{agentOsId:n,baseUrl:o});if(g.ok){l.push(d);continue}let y=g.response&&typeof g.response=="object"&&"reason"in g.response?String(g.response.reason??`http ${g.status}`):`http ${g.status}`;c.push({worker:d,reason:y})}return{renewed:l,failed:c,skipped:u}}function zp(e,r){let t=L(e);for(let n of Object.keys(t.workers||{})){let o=qp(e,n);if(!(!o||o.taskId!==r||!H(o.pid)||U(o).status==="done"))return!0}return!1}we();D();D();import{existsSync as cx,mkdirSync as ux}from"node:fs";import Gt from"node:path";var Lw=/<!--\s*harness-contract:\s*(\{[\s\S]*?\})\s*-->/i,Bw="next-action-fix:";function Ts(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Xp(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:Ts(e)}function Hw(e){let r=(e.title??"").trim().toLowerCase();if(r.startsWith("fix:")||r.startsWith("repair:"))return!0;let t=(e.executorRef??"").toLowerCase();return!!(t.startsWith(Bw)||t.includes("repair")||t.includes("unblock"))}function Fw(e){let r={repairEnforceOriginalPr:!1,targetPrUrl:null,targetPrBranch:null};if(!e)return r;let t=e.match(Lw);if(!t?.[1])return r;try{let n=JSON.parse(t[1]),o=Ts(String(n.targetPrUrl??n.target_pr_url??"")),s=Ts(String(n.targetPrBranch??n.target_pr_branch??""));return{repairEnforceOriginalPr:n.repairEnforceOriginalPr===!0||n.repair_enforce_original_pr===!0||!!o,targetPrUrl:o?Xp(o):null,targetPrBranch:s}}catch{return r}}function Qp(e){if(!Hw(e))return null;let r=Fw(e.description),t=e.prUrl?Xp(e.prUrl):null,n=r.targetPrUrl??t;return n?{targetPrUrl:n,targetPrBranch:r.targetPrBranch??Ts(e.branch)}:null}function Zp(e){return["Repair target PR policy:","- Work on the existing target PR branch \u2014 do not open a duplicate repair PR by default.",`- Canonical target PR: ${e.targetPrUrl}`,...e.targetPrBranch?[`- Canonical target branch: \`${e.targetPrBranch}\` (checkout is already on this branch).`]:[],`- Reconcile ${e.targetPrUrl} in structured finalResult.targetPrReconciliation.`,"- Only supersede the original when the branch is inaccessible: set supersedesOriginalTargetPr: true with reason and close/comment on the original PR."]}function em(e){let r=e.ownedPaths.length?`Owned paths: ${e.ownedPaths.join(", ")}. Do not edit outside these paths without stopping and reporting why.`:"Owned paths: unrestricted for this worker, but keep edits tightly scoped.",t=!!e.model?.toLowerCase().includes("haiku"),n=t?"compact":"full",o=t?e.planId?`Active planId: ${e.planId}`:"No planId on this worker.":e.planId?`Active planId: ${e.planId}${e.taskId?` \xB7 taskId: ${e.taskId}`:""}`:"No planId on this worker \u2014 still emit progress when you touch plan-scoped work.",s=[...jn(`worker.prompt.progress.${n}`).split(`
package/dist/index.js CHANGED
@@ -45,7 +45,7 @@ ${r}`}function vh(e){let{provider:r,model:t,authSource:n,costTier:o,riskClass:s,
45
45
  `),o}var RP=new Set(["completion_blocked","dirty_worktree","pr_or_unmerged_commits","landing_blocked"]);function bP(e){return!RP.has(e.skipReason)||vr(e.indexed,e.now)?!1:Yh({harnessRoot:e.harnessRoot,runId:e.indexed.runId,workerName:e.indexed.workerName})?!0:e.writeSalvageEvidence?(Jh({harnessRoot:e.harnessRoot,indexed:e.indexed,skipReason:e.skipReason,status:e.status,now:e.now}),!0):!1}function vP(e){let{indexed:r,worktreesAgeMs:t,terminalWorktreesAgeMs:n}=e;return r&&(yr.has(r.run.status)||e.liveness&&qu(r,e.liveness)||e.liveness&&oe(Yu(r,e.liveness))&&!vr(r))?n:t}function SP(e){return!e.indexed||e.includeOrphans&&e.worktreesAgeMs<=0?0:vP(e)}function CP(e,r){if(e.harnessRoot?.trim())return ma.resolve(e.harnessRoot);let t=r.worker.workerDir;if(!t)return null;let n=`${ma.sep}runs${ma.sep}`,o=t.indexOf(n);return o<0?null:t.slice(0,o+n.length-1)}function qh(e){let{indexed:r,includeOrphans:t,worktreesAgeMs:n,ageMs:o,orphanSafety:s,worktreeRemovalGuard:i}=e,a=e.now??Date.now();if(!r)return t?s??null:"orphan_without_flag";let l=SP(e);if(n<=0&&!t&&l<=0)return"worktrees_disabled";if(l>0&&o<l)return"below_age_threshold";if(vr(r,a))return"active_worker";let c=Yu(r,e.liveness),u=CP(e,r),d=m=>u&&bP({indexed:r,harnessRoot:u,skipReason:m,status:c,now:a,writeSalvageEvidence:e.writeSalvageEvidence===!0})?null:m;if($h(r,c)){let m=d("completion_blocked");if(m)return m}if(Gu(r,e.liveness?.gitStatusCache)){let m=d("dirty_worktree");if(m)return m}let f=e.liveness?.gitRevCache?.countAheadOfMain(e.worktreePath);if(f!=null&&f>0){let m=d("pr_or_unmerged_commits");if(m)return m}if(Kh(r,e.liveness,a)||!oe(c))return"run_still_active";if(jo(c)){let m=d("pr_or_unmerged_commits");if(m)return m}if(Te(c.changedFiles).length>0){let m=d("dirty_worktree");if(m)return m}if(Qr({finalResult:c.finalResult,changedFiles:c.changedFiles,gitAncestry:c.gitAncestry,prUrl:St(c.finalResult)}).blocked){let m=d("landing_blocked");if(m)return m}if(i&&e.worktreePath){let m=i({worktreePath:e.worktreePath,indexed:!!r,runId:r?.runId,worker:r?.workerName});if(m)return m.detail?{reason:m.reason,detail:m.detail}:m.reason}return null}function zu(e){let{indexed:r,nodeModulesAgeMs:t,ageMs:n,worktreePath:o,activeWorktreePaths:s,diskPressure:i}=e;return!i&&n<t?"below_age_threshold":s.has(ma.resolve(o))||r&&vr(r)?"active_worker":r&&Gu(r,e.gitStatusCache)?"dirty_worktree":null}function zh(e){return zu(e)}var Go=216e5,Yo=6048e5,fa=216e5,ga=36e5,ha=120;var Xh=new Set(["active_worker","run_still_active","completion_blocked","landing_blocked"]);function Qh(e,r){let t=[],n=new Set,o=(s,i,a)=>{let l=`${s}\0${i}`;n.has(l)||t.length>=24||(n.add(l),t.push({path:s,reason:i,...a?{detail:a}:{}}))};for(let s of r)Xh.has(s.reason)&&o(s.path,s.reason,s.detail);for(let s of e)!s.skipped||!s.skipReason||Xh.has(s.skipReason)&&o(s.path,s.skipReason);return t}import{existsSync as tk,readdirSync as nk,statSync as xP}from"node:fs";import ok from"node:path";D();Ce();import Zh from"node:path";C();function _P(e,r){return da(e,r)}function ek(e,r=Date.now()){let t=new Set,n=new Set;for(let o of e){for(let s of Ns(o)){let i=!1;for(let a of Object.keys(s.workers||{})){let l=w(Zh.join(zn(o,s.id),"workers",v(a),"worker.json"),void 0);if(!l?.worktreePath)continue;let c=Zh.resolve(l.worktreePath);_P(l,r)&&(i=!0,t.add(c))}i&&n.add(`${o}\0${s.id}`)}for(let s of Wu(o))n.add(s)}return{activeWorktreePaths:t,liveRunKeys:n}}function rk(e,r,t,n){return t?n.has(`${r}\0${t}`):!1}C();function EP(e,r){try{let t=xP(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function PP(e,r){let t=ok.join(e,"runs",r,"run.json");return tk(t)?w(t,null):null}function sk(e){try{return nk(e).length===0}catch{return!1}}function ik(e){let{harnessRoot:r,runId:t,runPath:n,ageMs:o,runDirectoriesAgeMs:s,activeGuards:i}=e;if(rk(n,r,t,i.liveRunKeys)||!sk(n))return"run_still_active";let a=PP(r,t);return a&&!yr.has(a.status)&&!Rt(a)?"run_still_active":s>0&&o<s?"below_age_threshold":null}function ak(e){if(!tk(e.worktreesDir))return[];let r=[],t;try{t=nk(e.worktreesDir,{withFileTypes:!0})}catch{return[]}for(let n of t){if(!n.isDirectory())continue;let o=n.name;if(e.runIdFilter&&o!==e.runIdFilter)continue;let s=ok.join(e.worktreesDir,o);sk(s)&&r.push({kind:"remove_run_directory",path:s,bytes:null,harnessRoot:e.harnessRoot,runId:o,ageMs:EP(s,e.now)})}return r}Pe();import{existsSync as Qu,rmSync as kk}from"node:fs";import{existsSync as NP,rmSync as TP}from"node:fs";Ce();import{lstatSync as AP,readdirSync as OP}from"node:fs";function lk(e){try{let r=AP(e),t=typeof process.getuid=="function"?process.getuid():null,n=typeof process.getgid=="function"?process.getgid():null,o=t!==null&&(r.uid!==t||n!==null&&r.gid!==n);return{uid:r.uid,gid:r.gid,foreign:o}}catch{return null}}function ck(e,r=32){let t=lk(e);if(!t)return!1;if(t.foreign)return!0;try{let n=OP(e),o=0;for(let s of n){if(o>=r)break;let i=`${e.replace(/\/$/,"")}/${s}`,a=lk(i);if(o+=1,a?.foreign)return!0}}catch{}return!1}import{spawnSync as IP}from"node:child_process";import pk from"node:path";import De from"node:path";function uk(e,r,t,n){let o=De.resolve(e),s=`${De.sep}${n}`,i=o.endsWith(s)?o:null;if(!i)return"path_outside_harness";let a=De.relative(t,i);if(a.startsWith("..")||De.isAbsolute(a))return"path_outside_harness";let l=a.split(De.sep);return l.length<3||l[l.length-1]!==n||!o.startsWith(De.resolve(r))?"path_outside_harness":null}function ka(e,r,t){return uk(e,r,t,"node_modules")}function ya(e,r,t){return uk(e,r,t,".next")}function Ra(e,r,t){let n=De.resolve(e),o=De.relative(t,n);return o.startsWith("..")||De.isAbsolute(o)||o.split(De.sep).length<3||!n.startsWith(De.resolve(r))?"path_outside_harness":null}function dk(e,r,t){let n=De.resolve(e);return ka(n,r,t)===null||ya(n,r,t)===null||Ra(n,r,t)===null}function fk(){let e=(process.env.KYNVER_CLEANUP_PRIVILEGED??"auto").trim().toLowerCase();return e==="0"||e==="false"||e==="off"||e==="no"?"off":e==="1"||e==="true"||e==="force"||e==="yes"?"force":"auto"}function mk(e){let r=IP("sudo",["-n",...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});return{ok:r.status===0,stderr:`${r.stderr??""}${r.stdout??""}`.trim()}}function gk(e,r,t){if(!dk(e,r,t))return{ok:!1,error:"path is not an allowed harness generated cache"};let n=typeof process.getuid=="function"?process.getuid():null,o=typeof process.getgid=="function"?process.getgid():null;if(n===null||o===null)return{ok:!1,error:"privileged reclaim requires POSIX uid/gid"};let s=mk(["chown","-R",`${n}:${o}`,pk.resolve(e)]);if(s.ok)return{ok:!0,method:"chown_then_rm"};let i=mk(["rm","-rf",pk.resolve(e)]);return i.ok?{ok:!0,method:"sudo_rm"}:{ok:!1,error:s.stderr||i.stderr||"sudo -n failed (password required or not permitted)"}}var Xu="Root-owned harness caches require operator reclaim: configure passwordless sudo for chown/rm under ~/.kynver/harness/worktrees, or run `node scripts/reclaim-harness-root-owned-cache.mjs --execute` as the harness owner with sudo available. See docs/runbooks/harness-root-owned-cache-reclaim.md.";function DP(e){let r=e?.code;return r==="EACCES"||r==="EPERM"}function hk(e,r,t={}){if(!NP(e.path))return{executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{executed:!1,skipped:!0,skipReason:"dry_run"};let n=e.harnessRoot,o=n?dr(n):null,i=e.bytes??br(e.path)??void 0,a=t.removePath??TP,l=t.hasForeignOwnedEntry??ck;try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i}}catch(c){if(!DP(c)||!n||!o)return{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let u=l(e.path),d=fk();if(!(d==="force"||d==="auto"&&u))return u?{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; ${Xu}`}:{executed:!1,skipped:!0,skipReason:"remove_failed",error:c.message};let p=gk(e.path,n,o);if(p.ok&&p.method==="sudo_rm")return{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0};if(p.ok)try{return a(e.path,{recursive:!0,force:!0}),{executed:!0,skipped:!1,bytes:i,privilegedReclaim:!0}}catch(m){return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${m.message}; privileged chown succeeded but rm still failed`}}return{executed:!1,skipped:!0,skipReason:"foreign_owner",error:`${c.message}; privileged reclaim failed: ${p.error}; ${Xu}`}}}function Zu(e){let r=e.harnessRoot;return!r||!Tu(e.path,r)?null:{...e,executed:!1,skipped:!0,skipReason:"run_metadata_protected"}}function ed(e,r){let t=Zu(e);if(t)return t;let n=hk(e,r);return{...e,bytes:n.bytes??e.bytes,executed:n.executed,skipped:n.skipped,skipReason:n.skipReason,error:n.error}}function yk(e,r){return ed(e,r)}function Rk(e,r){return ed(e,r)}function bk(e,r){return ed(e,r)}function vk(e,r){let t=Zu(e);if(t)return t;if(!Qu(e.path))return{...e,executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{...e,executed:!1,skipped:!0,skipReason:"dry_run"};try{let n=e.bytes??br(e.path);return kk(e.path,{recursive:!0,force:!0}),{...e,bytes:n,executed:!0,skipped:!1}}catch(n){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:n.message}}}function Sk(e,r){let t=Zu(e);if(t)return t;if(!Qu(e.path))return{...e,executed:!1,skipped:!0,skipReason:"missing_worktree"};if(!r)return{...e,executed:!1,skipped:!0,skipReason:"dry_run"};let n=e.repo;try{let o=e.bytes??br(e.path);return n&&me(n,["worktree","remove","--force",e.path],{allowFailure:!0}),Qu(e.path)&&kk(e.path,{recursive:!0,force:!0}),{...e,bytes:o,executed:!0,skipped:!1}}catch(o){return{...e,executed:!1,skipped:!0,skipReason:"remove_failed",error:o.message}}}import{existsSync as ba,readdirSync as va,statSync as MP}from"node:fs";import or from"node:path";function rd(e,r){try{let t=MP(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function wk(e,r){let t=or.relative(r,e);return t===""||!t.startsWith("..")&&!or.isAbsolute(t)}function Ck(e,r,t,n){let o=[];for(let s of ua){if(s===".next")continue;let i=or.join(e,s);if(!ba(i))continue;let a=or.resolve(i);t.has(a)||wk(a,r.harnessRoot)&&(t.add(a),o.push({kind:"remove_build_cache",path:a,bytes:null,runId:n.runId,worker:n.worker,repo:n.repo,ageMs:rd(a,r.now)}))}return o}function _k(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||r.push(...Ck(n.worktreePath,e,t,{runId:n.runId,worker:n.workerName,repo:n.run.repo}));if(!e.includeOrphans||!ba(e.worktreesDir))return r;for(let n of va(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=or.join(e.worktreesDir,n.name);for(let s of va(o,{withFileTypes:!0})){if(!s.isDirectory())continue;let i=or.join(o,s.name);r.push(...Ck(i,e,t,{runId:n.name,worker:s.name}))}}return r}function xk(e){let r=e.worktreesAgeMs>0||e.includeOrphans,t=e.includeOrphans;if(!r&&!t)return[];let n=[],o=new Set;if(r)for(let i of e.index.values()){if(e.runIdFilter&&i.runId!==e.runIdFilter)continue;let a=i.worktreePath;ba(a)&&(o.has(a)||(o.add(a),n.push({kind:"remove_worktree",path:a,bytes:null,runId:i.runId,worker:i.workerName,repo:i.run.repo,ageMs:rd(a,e.now)})))}if(!t||!ba(e.worktreesDir))return n;let s=new Set;for(let i of e.index.values())s.add(or.resolve(i.worktreePath));for(let i of va(e.worktreesDir,{withFileTypes:!0})){if(!i.isDirectory()||e.runIdFilter&&i.name!==e.runIdFilter)continue;let a=or.join(e.worktreesDir,i.name),l;try{l=va(a,{withFileTypes:!0})}catch{continue}for(let c of l){if(!c.isDirectory())continue;let u=or.resolve(or.join(a,c.name));o.has(u)||s.has(u)||wk(u,e.harnessRoot)&&(o.add(u),n.push({kind:"remove_worktree",path:u,bytes:null,runId:i.name,worker:c.name,ageMs:rd(u,e.now)}))}}return n}import{existsSync as Ak,readdirSync as Ek,statSync as UP}from"node:fs";import xn from"node:path";var WP=[{dirName:"node_modules",kind:"remove_node_modules"},{dirName:".next",kind:"remove_next_cache"}];function LP(e,r){try{let t=UP(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function BP(e,r){let t=xn.relative(r,e);return t===""||!t.startsWith("..")&&!xn.isAbsolute(t)}function HP(e,r,t,n,o,s){if(!Ak(n))return;let i=xn.resolve(n);r.has(i)||BP(i,t.harnessRoot)&&(r.add(i),e.push({kind:o,path:i,bytes:null,harnessRoot:t.harnessRoot,runId:s.runId,worker:s.worker,repo:s.repo,ageMs:LP(i,t.now)}))}function Pk(e,r,t,n,o){for(let s of WP)HP(e,r,t,xn.join(n,s.dirName),s.kind,o)}function Ok(e){let r=[],t=new Set;for(let n of e.index.values())e.runIdFilter&&n.runId!==e.runIdFilter||Pk(r,t,e,n.worktreePath,{runId:n.runId,worker:n.workerName,repo:n.run.repo});if(!e.includeOrphans||!Ak(e.worktreesDir))return r;for(let n of Ek(e.worktreesDir,{withFileTypes:!0})){if(!n.isDirectory()||e.runIdFilter&&n.name!==e.runIdFilter)continue;let o=xn.join(e.worktreesDir,n.name),s;try{s=Ek(o,{withFileTypes:!0})}catch{continue}for(let i of s){if(!i.isDirectory())continue;let a=xn.join(o,i.name);Pk(r,t,e,a,{runId:n.name,worker:i.name})}}return r}Pe();import{existsSync as Ik,statSync as FP}from"node:fs";import sr from"node:path";function KP(e,r){try{let t=FP(e).mtimeMs;return Math.max(0,r-t)}catch{return 0}}function $P(e){let r=[],t=null;for(let n of e.split(`
46
46
  `)){if(!n.trim())continue;let[o,...s]=n.split(" "),i=s.join(" ");if(o==="worktree"){t&&r.push(t),t={path:i};continue}t&&(o==="branch"&&(t.branch=i),o==="HEAD"&&(t.head=i),o==="bare"&&(t.bare=!0))}return t&&r.push(t),r}function jP(e,r){let t=sr.relative(sr.resolve(r),sr.resolve(e));return t!==""&&!t.startsWith("..")&&!sr.isAbsolute(t)}var VP=200;function Nk(e){if(!e.includeOrphans||!Ik(e.worktreesDir))return[];let r=new Set;for(let s of e.index.values())s.run.repo&&r.add(sr.resolve(s.run.repo));let t=new Set;for(let s of e.index.values())t.add(sr.resolve(s.worktreePath));let n=[],o=new Set;for(let s of r){let i=0,a;try{a=me(s,["worktree","list","--porcelain"],{allowFailure:!0})}catch{continue}let l=$P(a);for(let c of l){if(i>=VP)break;let u=sr.resolve(c.path);if(u===sr.resolve(s)||!jP(u,e.worktreesDir)||t.has(u)||o.has(u)||!Ik(u))continue;let f=sr.relative(e.worktreesDir,u).split(sr.sep),p=f[0],m=f[1]??"unknown";o.add(u),i+=1,n.push({kind:"remove_worktree",path:u,bytes:null,runId:p,worker:m,repo:s,ageMs:KP(u,e.now)})}}return n}D();C();import Jo from"node:path";function Tk(e,r){let t=Jo.resolve(r),n=new Map;for(let[o,s]of e){let i=s.harnessRoot?Jo.resolve(s.harnessRoot):null;i&&i!==t||n.set(o,s)}return n}function Dk(e){let r=new Map;for(let t of Ns(e))for(let n of Object.keys(t.workers||{})){let o=Jo.join(zn(e,t.id),"workers",v(n),"worker.json"),s=w(o,void 0);s?.worktreePath&&r.set(Jo.resolve(s.worktreePath),{harnessRoot:e,worktreePath:Jo.resolve(s.worktreePath),runId:t.id,workerName:n,run:t,worker:s})}return r}function qo(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function Ct(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)&&n>=0?n:r}function td(e={}){let r=e.execute===!0||e.execute!==!1&&qo("KYNVER_CLEANUP_EXECUTE"),t=e.finalizeStaleRuns!==!1&&!qo("KYNVER_CLEANUP_SKIP_FINALIZE"),n=e.nodeModulesAgeMs??Ct("KYNVER_CLEANUP_NODE_MODULES_AGE_MS",216e5),o=e.scanDependencyCaches??(e.nodeModulesAgeMs!==void 0||process.env.KYNVER_CLEANUP_NODE_MODULES_AGE_MS!=null),s=e.worktreesAgeMs??Ct("KYNVER_CLEANUP_WORKTREES_AGE_MS",0),i=e.terminalWorktreesAgeMs??Ct("KYNVER_CLEANUP_TERMINAL_WORKTREES_AGE_MS",216e5),a=e.runDirectoriesAgeMs??Ct("KYNVER_CLEANUP_RUN_DIRECTORIES_AGE_MS",36e5),l=e.maxActionsPerSweep??Ct("KYNVER_CLEANUP_MAX_ACTIONS_PER_SWEEP",120),c=e.includeOrphans===!0||qo("KYNVER_CLEANUP_INCLUDE_ORPHANS"),d=qo("KYNVER_CLEANUP_SCOPE_ALL")||process.env.KYNVER_CLEANUP_SCOPE==="all"?e.runIdFilter:e.runIdFilter??(process.env.KYNVER_CLEANUP_RUN_ID||void 0),f=e.accountBytes!==!1&&!qo("KYNVER_CLEANUP_SKIP_BYTE_ACCOUNTING"),p=Ct("KYNVER_CLEANUP_STORAGE_ENTRY_CAP",2e3),m=e.storagePerRunEntryCap!==void 0?e.storagePerRunEntryCap:f&&p>0?p:null,h=Ct("KYNVER_CLEANUP_BYTE_ENTRY_CAP",2e3),k=e.byteAccountingEntryCap??(Number.isFinite(h)&&h>0?Math.floor(h):2e3);return{execute:r,finalizeStaleRuns:t,scanDependencyCaches:o,nodeModulesAgeMs:n,worktreesAgeMs:s>0?s:0,terminalWorktreesAgeMs:i>=0?i:0,runDirectoriesAgeMs:a>=0?a:0,maxActionsPerSweep:Number.isFinite(l)&&l>0?Math.floor(l):120,includeOrphans:c,runIdFilter:d?String(d):void 0,accountBytes:f,storagePerRunEntryCap:m,byteAccountingEntryCap:k}}function Mk(e){let r=process.env.KYNVER_CLEANUP_SCOPE==="all",t=Number(process.env.KYNVER_CLEANUP_WORKTREES_AGE_MS),n=r?Number.isFinite(t)&&t>0?t:6048e5:Number.isFinite(t)&&t>0?t:0;return td({runIdFilter:r?void 0:e,worktreesAgeMs:n,terminalWorktreesAgeMs:r?216e5:void 0,runDirectoriesAgeMs:r?36e5:void 0,includeOrphans:r?!0:void 0,finalizeStaleRuns:!0,accountBytes:!0,scanDependencyCaches:!0})}Pe();import{existsSync as Uk}from"node:fs";import nd from"node:path";C();var GP=1800*1e3;function od(e){let r=e.now??Date.now(),t=e.heartbeatFreshMs??GP;if(!Uk(e.worktreePath))return null;if(e.runId&&e.workerName){let c=nd.join(e.harnessRoot,"runs",e.runId,"workers",e.workerName),u=w(nd.join(c,"worker.json"),void 0);if(u&&Ju(u,r,t))return"active_worker"}let n=nd.join(e.worktreePath,".git");if(!Uk(n))return null;let o=ne(e.worktreePath,["status","--porcelain"]);if(o.status!==0)return"pr_or_unmerged_commits";let s=o.stdout.split(`
47
47
  `).map(c=>c.trim()).filter(c=>c.length>0);if(Te(s).length>0)return"dirty_worktree";let i=ne(e.worktreePath,["rev-list","--count","@{u}..HEAD"]);if(i.status===0){let c=Number(i.stdout.trim());if(Number.isFinite(c)&&c>0)return"pr_or_unmerged_commits"}let a=ne(e.worktreePath,["rev-list","--count","origin/main..HEAD"]);if(a.status!==0)return i.status!==0?"pr_or_unmerged_commits":null;let l=Number(a.stdout.trim());return Number.isFinite(l)&&l>0?"pr_or_unmerged_commits":null}Ce();import{existsSync as YP}from"node:fs";import{homedir as JP}from"node:os";import Wk from"node:path";var qP=["/var/tmp/kynver-harness",Wk.join(JP(),".openclaw","harness")];function sd(e,r,t){if(!t?.trim())return;let n=le(t.trim());e.has(n)||(e.add(n),r.push(n))}function zP(e){return e.scanWellKnown!=null?e.scanWellKnown:process.env.VITEST==="true"?!1:process.env.KYNVER_CLEANUP_SCAN_WELL_KNOWN!=="0"&&!["0","false","no"].includes((process.env.KYNVER_CLEANUP_SCAN_WELL_KNOWN??"").toLowerCase())}function Lk(e={}){let r=new Set,t=[];sd(r,t,e.harnessRoot??fe());let n=process.env.KYNVER_CLEANUP_EXTRA_ROOTS?.split(",").map(o=>o.trim()).filter(Boolean);for(let o of n??[])sd(r,t,o);if(zP(e))for(let o of qP){let s=Wk.resolve(o);!r.has(s)&&YP(s)&&sd(r,t,s)}return t}Gt();function XP(e){let r=process.env[e];return r==="1"||r==="true"||r==="yes"}function QP(e,r){let t=process.env[e];if(!t)return r;let n=Number(t);return Number.isFinite(n)?n:r}function Bk(e={}){let r=e.diskPath?.trim()||process.env.KYNVER_DISK_GUARD_PATH?.trim()||"/",t=QP("KYNVER_DISK_GUARD_MAX_USED_PERCENT",75),n=Le({...e,diskPath:r,diskMaxUsedPercent:e.diskMaxUsedPercent??t}),o=!n.ok||n.usedPercent>=t,s=process.env.KYNVER_CLEANUP_DISK_PRESSURE_FORCE?.trim().toLowerCase();return s==="none"||s==="off"||s==="0"?o=!1:(s==="pressured"||s==="on"||s==="1")&&(o=!0),{diskGate:n,pressured:o,maxUsedPercent:t}}function Hk(e,r){if(!r.pressured)return e;let t=e.execute||!XP("KYNVER_CLEANUP_DRY_RUN_ON_PRESSURE");return{...e,execute:t,nodeModulesAgeMs:0,runIdFilter:void 0,includeOrphans:!0,terminalWorktreesAgeMs:0,runDirectoriesAgeMs:0,worktreesAgeMs:e.worktreesAgeMs>0?e.worktreesAgeMs:6048e5,diskPressure:!0,diskGate:r.diskGate}}Vt();function Me(e,r){if(process.env.KYNVER_CLEANUP_QUIET==="1")return;let t=r?`: ${r}`:"";console.error(`[kynver cleanup] ${e}${t}`)}Pe();var Sa=class{aheadOfMain=new Map;countAheadOfMain(r,t="origin/main"){let n=`${r}\0${t}`;if(this.aheadOfMain.has(n))return this.aheadOfMain.get(n)??null;let o=ne(r,["rev-list","--count",`${t}..HEAD`]);if(o.status!==0)return this.aheadOfMain.set(n,null),null;let s=Number(o.stdout.trim()),i=Number.isFinite(s)?s:null;return this.aheadOfMain.set(n,i),i}};import{spawnSync as ZP}from"node:child_process";import{existsSync as eA}from"node:fs";import rA from"node:path";var tA=5e3;function nA(e,r){if(!eA(rA.join(e,".git")))return{status:null,stdout:"",stderr:"",error:"not_a_git_repo"};try{let t=ZP("git",r,{cwd:e,encoding:"utf8",timeout:tA}),n=t.error?.message?.includes("ETIMEDOUT")===!0;return{status:n?null:t.status,stdout:t.stdout||"",stderr:t.stderr||"",error:n?"git_timeout":t.error?t.error.message:null}}catch(t){return{status:null,stdout:"",stderr:"",error:t.message}}}function Fk(e){let r=nA(e,["status","--short"]);return r.error==="not_a_git_repo"?[]:r.error==="git_timeout"||r.status!==0?null:r.stdout.split(`
48
- `).map(t=>t.trim()).filter(Boolean)}var Ca=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=Fk(t)??[];return this.cache.set(t,o),o}};var wa=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=Rt(r);return this.cache.set(r.id,n),n}};function oA(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function Kk(e,r={}){let t=r.maxSampleActions??12,n=r.maxSampleSkips??8;return{harnessRoot:e.harnessRoot,scanRoots:e.scanRoots,dryRun:e.dryRun,execute:e.execute,scannedAt:e.scannedAt,finalizedRuns:e.finalizedRuns.length,actionCount:e.actions.length,actionKinds:oA(e.actions),totals:e.totals,...e.storage?{storage:e.storage}:{},...e.preservedLivePaths?.length?{preservedLivePaths:e.preservedLivePaths}:{},...e.removedRunDirectories!=null?{removedRunDirectories:e.removedRunDirectories}:{},sampleActions:e.actions.slice(0,t).map(o=>({kind:o.kind,path:o.path,...o.skipReason?{skipReason:o.skipReason}:{},...o.bytes!=null?{bytes:o.bytes}:{},...o.runId?{runId:o.runId}:{},...o.worker?{worker:o.worker}:{}})),sampleSkips:e.skips.slice(0,n)}}function sA(e={}){let r=e.harnessRoot?le(e.harnessRoot):fe(),t=Lk({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function iA(e){return typeof e=="string"?{reason:e}:e}function En(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function _a(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:br(e.path,t)}}function $k(e,r){let t={};for(let n of r)t[n.reason]=(t[n.reason]??0)+1;for(let n of e)n.skipReason&&(t[n.skipReason]=(t[n.skipReason]??0)+1);return t}function aA(e,r){return e.kind==="remove_next_cache"?Rk(e,r):yk(e,r)}function lA(e,r,t){return e.kind==="remove_next_cache"?ya(e.path,r,t):ka(e.path,r,t)}function cA(e){let r=new Map;for(let t of e)for(let[n,o]of Dk(t))r.set(n,o);return r}function jk(e,r){return e.runId&&e.worker?Ue.join(r,e.runId,e.worker):Ue.resolve(e.path,"..")}function xa(e={}){let r=td(e),t=Bk();r=Hk(r,t);let n=sA(e);Me("scan",`${n.scanRoots.length} harness root(s)`);let o=ek(n.scanRoots,n.now),s=r.finalizeStaleRuns?Ko().map(O=>({runId:O.runId,from:O.from,to:O.to})):[];s.length>0&&Me("finalize",`${s.length} stale run(s) marked terminal`),Me("index","building worktree index");let i=cA(n.scanRoots);Me("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new wa,gitStatusCache:new Ca,gitRevCache:new Sa},l=[],c=[],u=new Set,d=r.maxActionsPerSweep,f=()=>c.length>=d;for(let O of n.scanRoots){if(f())break;Me("root",O);let B=Ue.join(O,"worktrees"),Kr=Tk(i,O),Q={harnessRoot:O,worktreesDir:B,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:Kr,now:n.now},Cr=r.scanDependencyCaches?Ok(Q):[];Me("dependency",r.scanDependencyCaches?`${Cr.length} cache candidate(s) at ${O}`:"skipped (worktree-only sweep)");let Dt=0;for(let be of Cr){if(f())break;Dt+=1,Dt%50===0&&Me("dependency",`${Dt}/${Cr.length} evaluated`);let G=Ue.resolve(be.path);if(u.has(G))continue;u.add(G);let W={...be,path:G},ve=lA(W,O,B);if(ve){En(l,W.path,ve),c.push({...W,executed:!1,skipped:!0,skipReason:ve});continue}let xe=jk(W,B),wr=Kr.get(Ue.resolve(xe))??null,Ee=zu({indexed:wr,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:W.ageMs,worktreePath:xe,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(Ee){En(l,W.path,Ee),c.push({...W,executed:!1,skipped:!0,skipReason:Ee});continue}c.push(aA(_a(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let be of _k(Q)){if(f())break;let G=Ue.resolve(be.path);if(u.has(G))continue;u.add(G);let W={...be,path:G},ve=Ra(W.path,O,B);if(ve){En(l,W.path,ve),c.push({...W,executed:!1,skipped:!0,skipReason:ve});continue}let xe=jk(W,B),wr=Kr.get(Ue.resolve(xe))??null,Ee=zh({indexed:wr,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:W.ageMs,worktreePath:xe,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(Ee){En(l,W.path,Ee),c.push({...W,executed:!1,skipped:!0,skipReason:Ee});continue}c.push(bk(_a(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let Ve=[...xk(Q),...Nk(Q)];Me("worktrees",`${Ve.length} candidate(s) at ${O}`);let Mt=new Set,Ge=0;for(let be of Ve){if(f())break;Ge+=1,Ge%50===0&&Me("worktrees",`${Ge}/${Ve.length} evaluated`);let G=Ue.resolve(be.path);if(Mt.has(G))continue;Mt.add(G);let W={...be,path:G},ve=Kr.get(Ue.resolve(W.path))??null,xe=ve?null:od({worktreePath:W.path,harnessRoot:O,runId:W.runId,workerName:W.worker,now:n.now}),wr=qh({indexed:ve,worktreePath:Ue.resolve(W.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:W.ageMs,orphanSafety:xe,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:O,writeSalvageEvidence:r.execute});if(wr){let{reason:Ee,detail:fs}=iA(wr);En(l,W.path,Ee,fs),c.push({...W,executed:!1,skipped:!0,skipReason:Ee});continue}c.push(Sk(_a(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!f()&&r.runDirectoriesAgeMs>=0)for(let be of ak({harnessRoot:O,worktreesDir:B,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(f())break;let G=Ue.resolve(be.path);if(u.has(G))continue;u.add(G);let W={...be,path:G},ve=W.runId??Ue.basename(G),xe=ik({harnessRoot:O,runId:ve,runPath:G,ageMs:W.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(xe){En(l,W.path,xe),c.push({...W,executed:!1,skipped:!0,skipReason:xe});continue}c.push(vk(_a(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let p=0,m=0,h=0,k=0,g=0,y=0;for(let O of c)O.bytes&&(p+=O.bytes),!O.skipped&&!O.executed&&O.bytes&&(h+=O.bytes),O.executed?(g+=1,k+=O.bytes??0,O.kind==="remove_run_directory"&&(m+=1)):O.skipped&&(y+=1,O.skipReason==="dry_run"&&O.bytes&&(h+=O.bytes));let _=r.accountBytes?ju({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,x=ur(),E=r.execute&&mu(x),A=E?Uo({execute:!0}):null,Y=x?{observed:!0,execute:E,dumpCount:x.dumpCount,totalBytes:x.totalBytes,removedCount:A?.removed.length??0,removedBytes:A?.removedBytes??0,executables:x.executables,path:x.path,reason:x.reason}:void 0;A&&A.removed.length>0&&(k+=A.removedBytes,g+=A.removed.length,Me("wsl-crashes",`removed ${A.removed.length} dump(s), ${A.removedBytes} bytes`)),Me("complete",`${c.length} action(s), ${y} skipped, ${g} removed`);let $=Qh(c,l),F=Kk({harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!r.execute,execute:r.execute,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,diskPressure:r.diskPressure,diskGate:r.diskGate?{ok:r.diskGate.ok,path:r.diskGate.path,freeBytes:r.diskGate.freeBytes,usedPercent:r.diskGate.usedPercent,reason:r.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:c,skips:l,totals:{candidateBytes:p,reclaimableBytes:h,removedBytes:k,removedPaths:g,skippedPaths:y,skipReasons:$k(c,l)},..._?{storage:_}:{},...$.length>0?{preservedLivePaths:$}:{},...m>0?{removedRunDirectories:m}:{},...Y?{wslCrashDumps:Y}:{}});return{harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!r.execute,execute:r.execute,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,diskPressure:r.diskPressure,diskGate:r.diskGate?{ok:r.diskGate.ok,path:r.diskGate.path,freeBytes:r.diskGate.freeBytes,usedPercent:r.diskGate.usedPercent,reason:r.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:c,skips:l,totals:{candidateBytes:p,reclaimableBytes:h,removedBytes:k,removedPaths:g,skippedPaths:y,skipReasons:$k(c,l)},..._?{storage:_}:{},...$.length>0?{preservedLivePaths:$}:{},...m>0?{removedRunDirectories:m}:{},...Y?{wslCrashDumps:Y}:{},compactSummary:F}}function id(e){let r=Mk(e);return xa({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function ad(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}N();import{mkdirSync as Ob,realpathSync as Ib}from"node:fs";import{fileURLToPath as RT}from"node:url";N();C();Ql();import uA from"node:os";function dA(e){let r=(typeof e.apiBaseUrl=="string"?e.apiBaseUrl:void 0)||(typeof e.baseUrl=="string"?e.baseUrl:void 0)||process.env.KYNVER_API_URL||R().apiBaseUrl;return r?ar(String(r)):void 0}async function pA(e,r){let t=await fetch(`${e}/api/agent-os`,{headers:{Authorization:`Bearer ${r}`}});if(!t.ok)return null;let n=await t.json().catch(()=>null);if(!n?.primarySlug)return null;let o=n.items?.find(s=>s.slug===n.primarySlug);return o?.id&&o.slug?{id:o.id,slug:o.slug}:{id:"",slug:n.primarySlug}}async function Ea(e){let r=dA(e);r||(console.error("kynver bootstrap requires a Kynver URL \u2014 pass --api-base-url https://your-kynver-site or set KYNVER_API_URL."),process.exit(1)),se()||(typeof e.apiKey=="string"?po(e.apiKey):(await Xl({...e,apiBaseUrl:r})).ok||process.exit(1));let t=se();t||(console.error("No API key after login \u2014 aborting."),process.exit(1));let n=await pA(r,t);n||(console.error("Could not resolve your AgentOS workspace from the account. Confirm this account has AgentOS access, then retry."),process.exit(1));let o={...e,apiBaseUrl:r,agentOsSlug:n.slug,...n.id?{agentOsId:n.id}:{},...typeof e.repo=="string"?{}:{discoverRepo:!0}};await oi(o),console.log(""),console.log(` Bootstrap complete \u2014 ${uA.hostname()} is linked to workspace "${n.slug}".`),console.log(" Next: `kynver start` \u2014 brings the agent online with Kynver-owned keeper supervision + local Kynver Cron when needed."),console.log(" Persistent background (Linux): `kynver start --install-systemd` or `kynver cron install --install-systemd`."),console.log(" (Advanced: `kynver run create --repo /path/to/repo` + `kynver daemon --run <RUN_ID> --agent-os-id <AOS_ID> --execute`.)")}N();import BI from"node:os";N();Je();N();import mA from"node:path";import{homedir as fA}from"node:os";var ld=mA.join(fA(),".kynver","config.json");function zo(e){let r=R(),t=oa({...e,config:r});if(!t)return{ok:!1,remediated:!1,alreadyPersisted:!1,configPath:q(ld),resolved:null,reason:"No Kynver git checkout found. Clone the repo, cd into it, then run `kynver setup --repo /path/to/Kynver` (or export KYNVER_DEFAULT_REPO).",remediation:"Clone the Kynver monorepo, cd into it, then run `kynver config ensure-default-repo` (or `kynver setup --repo /path/to/Kynver`)."};if(t.persistedInConfig)return{ok:!0,remediated:!1,alreadyPersisted:!0,configPath:q(ld),resolved:vn(t),config:ln(r)};let n=sa(t.repo,r),o=vn({...t,persistedInConfig:!0,source:"config"});return{ok:!0,remediated:!0,alreadyPersisted:!1,configPath:q(ld),resolved:o,config:ln(n),remediation:"defaultRepo persisted in ~/.kynver/config.json \u2014 `kynver run create` no longer requires --repo."}}function Vk(e=!1){let r=zo();if(e){console.log(JSON.stringify(r,null,2)),r.ok||(process.exitCode=1);return}if(!r.ok){console.error(r.reason??"Could not resolve a Kynver git checkout."),r.remediation&&console.error(r.remediation),process.exitCode=1;return}if(r.alreadyPersisted){console.log(`defaultRepo already set (${r.resolved?.defaultRepo??"unknown"}) in ${r.configPath}`);return}console.log(`Persisted defaultRepo ${r.resolved?.defaultRepo??""} in ${r.configPath}. \`kynver run create\` can omit --repo.`)}function Gk(e){return e?e.persistedInConfig?{status:"pass"}:{status:"warn",remediation:"Run `kynver config ensure-default-repo` to persist defaultRepo in ~/.kynver/config.json (or `kynver doctor runtime-takeover --remediate-default-repo`)."}:{status:"warn",remediation:"Run `kynver config ensure-default-repo` from a Kynver checkout (or `kynver setup --repo /path/to/Kynver`)."}}N();Ie();qn();js();import gA from"node:os";function Yk(e,r){console.error(JSON.stringify({event:"daemon_identity",level:e,message:r}))}function Jk(e=R(),r=process.env){let t=Ae(r,e),n=$s({config:e,totalMemBytes:gA.totalmem(),env:r}),o=[...t.warnings],s=[];if(!e.boxKind?.trim()&&!r.KYNVER_BOX_KIND?.trim()&&o.push("boxKind is not persisted in ~/.kynver/config.json \u2014 run `kynver setup --box-kind forge|ghost` so Command Center attributes snapshots to the correct pool"),t.slugInferenceBlocked){let c=r.KYNVER_DAEMON_STRICT_IDENTITY==="1"||r.KYNVER_DAEMON_STRICT_IDENTITY==="true",u="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind; treating this host as forge";c?s.push(u):o.push(u)}let i=n.configuredMaxWorkers??n.autoCap,a=cr(t.boxKind,i);$t(t.boxKind,i)&&o.push(`Forge box maxConcurrentWorkers=${i} exceeds pool cap \u2014 using ${a}; run kynver setup --box-kind forge --max-workers 4`);let l=s.length===0;for(let c of o)Yk("warn",c);for(let c of s)Yk("error",c);return{ok:l,box:t,workerCapSource:n.workerCapSource,maxConcurrentWorkers:a,autoCap:n.autoCap,warnings:o,errors:s}}import{mkdirSync as hA,readFileSync as kA,renameSync as yA,writeFileSync as RA}from"node:fs";import{homedir as bA}from"node:os";import qk from"node:path";function zk(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return qk.join(bA(),".kynver",`daemon-heartbeat-${r}.json`)}function Xk(e){try{let r=zk(e.agentOsId);hA(qk.dirname(r),{recursive:!0});let t={observedAt:(e.now??new Date).toISOString(),pid:process.pid,runId:e.runId,agentOsId:e.agentOsId,...e.instructionBundleVersion?{instructionBundleVersion:e.instructionBundleVersion}:{}},n=`${r}.tmp-${process.pid}`;RA(n,JSON.stringify(t),"utf8"),yA(n,r)}catch{}}function Qk(e){try{let r=kA(zk(e),"utf8"),t=JSON.parse(r);return typeof t?.observedAt!="string"?null:t}catch{return null}}function Zk(e,r,t=Date.now()){if(!e)return!1;let n=Date.parse(e.observedAt);return Number.isNaN(n)?!0:t-n>r}function vA(e){let r=process.env[e]?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"}function Pn(){process.platform==="win32"&&(vA("KYNVER_DAEMON_ALLOW_NATIVE_WINDOWS")||(console.error(JSON.stringify({event:"daemon_start_blocked",reason:"native_windows_console_flash",remedy:"Run the daemon inside WSL: .\\scripts\\start-tier2-wsl.ps1 \u2014 or set KYNVER_DAEMON_ALLOW_NATIVE_WINDOWS=1 to override (flashes visible consoles)."})),process.exit(1)))}N();import{existsSync as SA}from"node:fs";import{homedir as CA}from"node:os";import wA from"node:path";function ey(e,r){let t=process.env[e]?.trim().toLowerCase();return t?t==="0"||t==="false"||t==="no"||t==="off"?!1:t==="1"||t==="true"||t==="yes"||t==="on"?!0:r:r}function Xo(e,r,t=1){let n=Number(process.env[e]);return!Number.isFinite(n)||n<t?r:Math.floor(n)}function Hr(){let e=process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim();return e||wA.join(CA(),".kynver","agent-os-cron.json")}function _A(e=Hr()){let r=process.env.KYNVER_CRON_TICK_STATE_PATH?.trim();return r||`${e.replace(/\.json$/i,"")}.tick-state.json`}function xA(){let e=R();return process.env.KYNVER_API_URL?.trim()||e.apiBaseUrl?.trim()||process.env.KYNVER_CRON_FIRE_BASE_URL?.trim()||process.env.OPENCLAW_CRON_FIRE_BASE_URL?.trim()||null}function cd(){return process.env.KYNVER_CRON_SECRET?.trim()||process.env.OPENCLAW_CRON_SECRET?.trim()||process.env.KYNVER_RUNTIME_SECRET?.trim()||null}function Sr(){let e=Hr(),r=_A(e),t=xA(),n=cd(),o=!!(t&&n),s=SA(e),i=o&&(s||ey("KYNVER_CRON_TICK_FORCE",!1));return{storePath:e,statePath:r,lockPath:`${r}.lock`,fireBaseUrl:t,secret:n,tickEnabled:ey("KYNVER_CRON_TICK_ENABLED",i),tickIntervalMs:Xo("KYNVER_CRON_TICK_INTERVAL_MS",6e4,5e3),missedRunPolicy:process.env.KYNVER_CRON_MISSED_RUN_POLICY?.trim().toLowerCase()==="skip"?"skip":"catch_up",maxCatchUpPerTick:Xo("KYNVER_CRON_MAX_CATCH_UP_PER_TICK",3,0),maxRetries:Xo("KYNVER_CRON_MAX_RETRIES",3,0),retryBackoffMs:Xo("KYNVER_CRON_RETRY_BACKOFF_MS",6e4,1e3),inflightLeaseMs:Xo("KYNVER_CRON_INFLIGHT_LEASE_MS",12e4,5e3)}}function Pa(e=Sr()){return e.tickEnabled&&!!(e.fireBaseUrl&&e.secret)}function EA(e){return e.replace(/\/+$/,"")}async function ry(e){let r=e.fetchFn??fetch,t=e.entry.spec.callbackPath.startsWith("/")?e.entry.spec.callbackPath:`/${e.entry.spec.callbackPath}`,n=`${EA(e.baseUrl)}${t}`,s={source:"kynver-cron",jobId:e.jobId??e.entry.spec.dedupeKey??null,agentOsId:e.entry.spec.target.agentOsId,kind:e.entry.spec.kind,target:e.entry.spec.target,...e.entry.spec.payload!==void 0&&{payload:e.entry.spec.payload}},i=await r(n,{method:"POST",headers:He(e.secret),body:JSON.stringify(s)}),a=null;try{a=await i.json()}catch{a=null}return{ok:i.ok,status:i.status,body:a}}C();import{closeSync as PA,existsSync as ud,openSync as AA,readFileSync as OA,unlinkSync as ty,writeFileSync as IA}from"node:fs";var NA=10*6e4;function ny(e){if(!ud(e))return null;try{let r=JSON.parse(OA(e,"utf8"));if(typeof r.pid=="number"&&typeof r.at=="string")return r}catch{return null}return null}function TA(e){let r=ny(e);if(!r||!H(r.pid))return!0;let t=Date.parse(r.at);return Number.isNaN(t)?!0:Date.now()-t>NA}function oy(e){if(ud(e)&&!TA(e)){let r=ny(e);return{acquired:!1,reason:r?`held by pid ${r.pid}`:"held by another process"}}if(ud(e))try{ty(e)}catch{}try{let r=AA(e,"wx");return IA(r,JSON.stringify({pid:process.pid,at:new Date().toISOString()}),"utf8"),PA(r),{acquired:!0}}catch(r){if(r.code==="EEXIST")return{acquired:!1,reason:"concurrent acquire"};throw r}}function sy(e){try{ty(e)}catch{}}var DA=/^[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+$/;function MA(e){return DA.test(e.trim())}function UA(e,r,t){let n=new Set;for(let o of e.split(",")){let s=o.trim();if(!s)continue;if(s==="*"){for(let d=r;d<=t;d++)n.add(d);continue}let i=/^(.+)\/(\d+)$/.exec(s),a=i?i[1]:s,l=i?Math.max(1,Number(i[2])):1;if(a==="*"){for(let d=r;d<=t;d+=l)n.add(d);continue}let c=/^(\d+)-(\d+)$/.exec(a);if(c){let d=Math.max(r,Number(c[1])),f=Math.min(t,Number(c[2]));for(let p=d;p<=f;p+=l)n.add(p);continue}let u=Number(a);Number.isInteger(u)&&u>=r&&u<=t&&n.add(u)}return n}function Qo(e,r,t,n){let o=e.trim();return o==="*"?!0:UA(o,t,n).has(r)}function WA(e,r){let t=e.trim().split(/\s+/);if(t.length!==5)return!1;let[n,o,s,i,a]=t;return Qo(n,r.getUTCMinutes(),0,59)&&Qo(o,r.getUTCHours(),0,23)&&Qo(s,r.getUTCDate(),1,31)&&Qo(i,r.getUTCMonth()+1,1,12)&&Qo(a,r.getUTCDay(),0,6)}var LA=366*24*60;function BA(e){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),0,0))}function iy(e,r){if(!MA(e))return null;let t=BA(r);t=new Date(t.getTime()+6e4);for(let n=0;n<LA;n++){if(WA(e,t))return t;t=new Date(t.getTime()+6e4)}return null}function ay(e,r){if(e.scheduleKind==="runAt"&&e.runAt){let t=Date.parse(e.runAt);return Number.isNaN(t)?null:new Date(t).toISOString()}if(e.scheduleKind==="cron"&&e.cron){let t=iy(e.cron.trim(),r);return t?t.toISOString():null}return null}function dd(e,r){if(e.scheduleKind!=="cron"||!e.cron?.trim())return null;let t=iy(e.cron.trim(),r);return t?t.toISOString():null}import{promises as HA}from"node:fs";async function ly(e){try{return await HA.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function FA(e){if(!e)return[];try{let r=JSON.parse(e);return Array.isArray(r.entries)?r.entries:[]}catch{return[]}}async function wt(e=Hr()){let r=await ly(e);return FA(r)}async function cy(e,r){let{mkdir:t,writeFile:n,rename:o}=await import("node:fs/promises"),{randomBytes:s}=await import("node:crypto"),{dirname:i}=await import("node:path");await t(i(e),{recursive:!0});let a=`${e}.${s(4).toString("hex")}.tmp`,l=JSON.stringify({entries:r},null,2);await n(a,l,"utf8"),await o(a,e)}async function uy(e,r=Hr()){let t=await wt(r),n=t.findIndex(o=>o.providerScheduleId===e.providerScheduleId);n>=0?t[n]=e:t.push(e),await cy(r,t)}async function dy(e=Hr()){return await ly(e)!==null?{created:!1}:(await cy(e,[]),{created:!0})}import{randomBytes as KA}from"node:crypto";import{promises as Zo}from"node:fs";import $A from"node:path";var Aa={version:1,jobs:{}};async function jA(e){try{return await Zo.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function VA(e){if(!e)return{...Aa,jobs:{...Aa.jobs}};try{let r=JSON.parse(e);return r?.version!==1||typeof r.jobs!="object"||!r.jobs?{...Aa,jobs:{}}:r}catch{return{...Aa,jobs:{}}}}async function Oa(e){let r=await jA(e);return VA(r)}async function GA(e,r){await Zo.mkdir($A.dirname(e),{recursive:!0});let t=KA(6).toString("hex"),n=`${e}.tmp-${process.pid}-${Date.now()}-${t}`;await Zo.writeFile(n,`${JSON.stringify(r,null,2)}
48
+ `).map(t=>t.trim()).filter(Boolean)}var Ca=class{cache=new Map;porcelain(r){let t=r,n=this.cache.get(t);if(n!==void 0)return n;let o=Fk(t)??[];return this.cache.set(t,o),o}};var wa=class{cache=new Map;derive(r){let t=this.cache.get(r.id);if(t!==void 0)return t;let n=Rt(r);return this.cache.set(r.id,n),n}};function oA(e){let r={};for(let t of e)r[t.kind]=(r[t.kind]??0)+1;return r}function Kk(e,r={}){let t=r.maxSampleActions??12,n=r.maxSampleSkips??8;return{harnessRoot:e.harnessRoot,scanRoots:e.scanRoots,dryRun:e.dryRun,execute:e.execute,scannedAt:e.scannedAt,finalizedRuns:e.finalizedRuns.length,actionCount:e.actions.length,actionKinds:oA(e.actions),totals:e.totals,...e.storage?{storage:e.storage}:{},...e.preservedLivePaths?.length?{preservedLivePaths:e.preservedLivePaths}:{},...e.removedRunDirectories!=null?{removedRunDirectories:e.removedRunDirectories}:{},sampleActions:e.actions.slice(0,t).map(o=>({kind:o.kind,path:o.path,...o.skipReason?{skipReason:o.skipReason}:{},...o.bytes!=null?{bytes:o.bytes}:{},...o.runId?{runId:o.runId}:{},...o.worker?{worker:o.worker}:{}})),sampleSkips:e.skips.slice(0,n)}}function sA(e={}){let r=e.harnessRoot?le(e.harnessRoot):fe(),t=Lk({harnessRoot:r}),n=e.now??Date.now();return{harnessRoot:r,scanRoots:t,now:n}}function iA(e){return typeof e=="string"?{reason:e}:e}function En(e,r,t,n){e.push({path:r,reason:t,...n?{detail:n}:{}})}function _a(e,r,t){return!r||e.bytes!=null?e:{...e,bytes:br(e.path,t)}}function $k(e,r){let t={};for(let n of r)t[n.reason]=(t[n.reason]??0)+1;for(let n of e)n.skipReason&&(t[n.skipReason]=(t[n.skipReason]??0)+1);return t}function aA(e,r){return e.kind==="remove_next_cache"?Rk(e,r):yk(e,r)}function lA(e,r,t){return e.kind==="remove_next_cache"?ya(e.path,r,t):ka(e.path,r,t)}function cA(e){let r=new Map;for(let t of e)for(let[n,o]of Dk(t))r.set(n,o);return r}function jk(e,r){return e.runId&&e.worker?Ue.join(r,e.runId,e.worker):Ue.resolve(e.path,"..")}function xa(e={}){let r=td(e),t=Bk();r=Hk(r,t);let n=sA(e);Me("scan",`${n.scanRoots.length} harness root(s)`);let o=ek(n.scanRoots,n.now),s=r.finalizeStaleRuns?Ko().map(O=>({runId:O.runId,from:O.from,to:O.to})):[];s.length>0&&Me("finalize",`${s.length} stale run(s) marked terminal`),Me("index","building worktree index");let i=cA(n.scanRoots);Me("index",`${i.size} indexed worktree(s)`);let a={runTerminalCache:new wa,gitStatusCache:new Ca,gitRevCache:new Sa},l=[],c=[],u=new Set,d=r.maxActionsPerSweep,f=()=>c.length>=d;for(let O of n.scanRoots){if(f())break;Me("root",O);let B=Ue.join(O,"worktrees"),Kr=Tk(i,O),Q={harnessRoot:O,worktreesDir:B,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter,index:Kr,now:n.now},Cr=r.scanDependencyCaches?Ok(Q):[];Me("dependency",r.scanDependencyCaches?`${Cr.length} cache candidate(s) at ${O}`:"skipped (worktree-only sweep)");let Dt=0;for(let be of Cr){if(f())break;Dt+=1,Dt%50===0&&Me("dependency",`${Dt}/${Cr.length} evaluated`);let G=Ue.resolve(be.path);if(u.has(G))continue;u.add(G);let W={...be,path:G},ve=lA(W,O,B);if(ve){En(l,W.path,ve),c.push({...W,executed:!1,skipped:!0,skipReason:ve});continue}let xe=jk(W,B),wr=Kr.get(Ue.resolve(xe))??null,Ee=zu({indexed:wr,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:W.ageMs,worktreePath:xe,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(Ee){En(l,W.path,Ee),c.push({...W,executed:!1,skipped:!0,skipReason:Ee});continue}c.push(aA(_a(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(r.scanDependencyCaches)for(let be of _k(Q)){if(f())break;let G=Ue.resolve(be.path);if(u.has(G))continue;u.add(G);let W={...be,path:G},ve=Ra(W.path,O,B);if(ve){En(l,W.path,ve),c.push({...W,executed:!1,skipped:!0,skipReason:ve});continue}let xe=jk(W,B),wr=Kr.get(Ue.resolve(xe))??null,Ee=zh({indexed:wr,includeOrphans:!0,nodeModulesAgeMs:r.nodeModulesAgeMs,ageMs:W.ageMs,worktreePath:xe,activeWorktreePaths:o.activeWorktreePaths,diskPressure:r.diskPressure,gitStatusCache:a.gitStatusCache});if(Ee){En(l,W.path,Ee),c.push({...W,executed:!1,skipped:!0,skipReason:Ee});continue}c.push(bk(_a(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}let Ve=[...xk(Q),...Nk(Q)];Me("worktrees",`${Ve.length} candidate(s) at ${O}`);let Mt=new Set,Ge=0;for(let be of Ve){if(f())break;Ge+=1,Ge%50===0&&Me("worktrees",`${Ge}/${Ve.length} evaluated`);let G=Ue.resolve(be.path);if(Mt.has(G))continue;Mt.add(G);let W={...be,path:G},ve=Kr.get(Ue.resolve(W.path))??null,xe=ve?null:od({worktreePath:W.path,harnessRoot:O,runId:W.runId,workerName:W.worker,now:n.now}),wr=qh({indexed:ve,worktreePath:Ue.resolve(W.path),includeOrphans:r.includeOrphans,worktreesAgeMs:r.worktreesAgeMs,terminalWorktreesAgeMs:r.terminalWorktreesAgeMs,ageMs:W.ageMs,orphanSafety:xe,worktreeRemovalGuard:e.worktreeRemovalGuard,liveness:a,now:n.now,harnessRoot:O,writeSalvageEvidence:r.execute});if(wr){let{reason:Ee,detail:fs}=iA(wr);En(l,W.path,Ee,fs),c.push({...W,executed:!1,skipped:!0,skipReason:Ee});continue}c.push(Sk(_a(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}if(!f()&&r.runDirectoriesAgeMs>=0)for(let be of ak({harnessRoot:O,worktreesDir:B,runDirectoriesAgeMs:r.runDirectoriesAgeMs,runIdFilter:r.runIdFilter,activeGuards:o,now:n.now})){if(f())break;let G=Ue.resolve(be.path);if(u.has(G))continue;u.add(G);let W={...be,path:G},ve=W.runId??Ue.basename(G),xe=ik({harnessRoot:O,runId:ve,runPath:G,ageMs:W.ageMs,runDirectoriesAgeMs:r.runDirectoriesAgeMs,activeGuards:o});if(xe){En(l,W.path,xe),c.push({...W,executed:!1,skipped:!0,skipReason:xe});continue}c.push(vk(_a(W,r.accountBytes,r.byteAccountingEntryCap),r.execute))}}let p=0,m=0,h=0,k=0,g=0,y=0;for(let O of c)O.bytes&&(p+=O.bytes),!O.skipped&&!O.executed&&O.bytes&&(h+=O.bytes),O.executed?(g+=1,k+=O.bytes??0,O.kind==="remove_run_directory"&&(m+=1)):O.skipped&&(y+=1,O.skipReason==="dry_run"&&O.bytes&&(h+=O.bytes));let _=r.accountBytes?ju({harnessRoot:n.harnessRoot,now:n.now,perRunEntryCap:r.storagePerRunEntryCap}):void 0,x=ur(),E=r.execute&&mu(x),A=E?Uo({execute:!0}):null,Y=x?{observed:!0,execute:E,dumpCount:x.dumpCount,totalBytes:x.totalBytes,removedCount:A?.removed.length??0,removedBytes:A?.removedBytes??0,executables:x.executables,path:x.path,reason:x.reason}:void 0;A&&A.removed.length>0&&(k+=A.removedBytes,g+=A.removed.length,Me("wsl-crashes",`removed ${A.removed.length} dump(s), ${A.removedBytes} bytes`)),Me("complete",`${c.length} action(s), ${y} skipped, ${g} removed`);let $=Qh(c,l),F=Kk({harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!r.execute,execute:r.execute,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,diskPressure:r.diskPressure,diskGate:r.diskGate?{ok:r.diskGate.ok,path:r.diskGate.path,freeBytes:r.diskGate.freeBytes,usedPercent:r.diskGate.usedPercent,reason:r.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:c,skips:l,totals:{candidateBytes:p,reclaimableBytes:h,removedBytes:k,removedPaths:g,skippedPaths:y,skipReasons:$k(c,l)},..._?{storage:_}:{},...$.length>0?{preservedLivePaths:$}:{},...m>0?{removedRunDirectories:m}:{},...Y?{wslCrashDumps:Y}:{}});return{harnessRoot:n.harnessRoot,scanRoots:n.scanRoots,dryRun:!r.execute,execute:r.execute,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,diskPressure:r.diskPressure,diskGate:r.diskGate?{ok:r.diskGate.ok,path:r.diskGate.path,freeBytes:r.diskGate.freeBytes,usedPercent:r.diskGate.usedPercent,reason:r.diskGate.reason}:void 0,scannedAt:new Date(n.now).toISOString(),finalizedRuns:s,actions:c,skips:l,totals:{candidateBytes:p,reclaimableBytes:h,removedBytes:k,removedPaths:g,skippedPaths:y,skipReasons:$k(c,l)},..._?{storage:_}:{},...$.length>0?{preservedLivePaths:$}:{},...m>0?{removedRunDirectories:m}:{},...Y?{wslCrashDumps:Y}:{},compactSummary:F}}function id(e){let r=Mk(e);return xa({execute:r.execute,finalizeStaleRuns:r.finalizeStaleRuns,accountBytes:r.accountBytes,nodeModulesAgeMs:r.nodeModulesAgeMs,worktreesAgeMs:r.worktreesAgeMs,includeOrphans:r.includeOrphans,runIdFilter:r.runIdFilter})}function ad(){return process.env.KYNVER_PIPELINE_CLEANUP!=="0"}N();import{mkdirSync as Ob,realpathSync as Ib}from"node:fs";import{fileURLToPath as RT}from"node:url";N();C();Ql();import uA from"node:os";function dA(e){let r=(typeof e.apiBaseUrl=="string"?e.apiBaseUrl:void 0)||(typeof e.baseUrl=="string"?e.baseUrl:void 0)||process.env.KYNVER_API_URL||R().apiBaseUrl;return r?ar(String(r)):void 0}async function pA(e,r){let t=await fetch(`${e}/api/agent-os`,{headers:{Authorization:`Bearer ${r}`}});if(!t.ok)return null;let n=await t.json().catch(()=>null);if(!n?.primarySlug)return null;let o=n.items?.find(s=>s.slug===n.primarySlug);return o?.id&&o.slug?{id:o.id,slug:o.slug}:{id:"",slug:n.primarySlug}}async function Ea(e){let r=dA(e);r||(console.error("kynver bootstrap requires a Kynver URL \u2014 pass --api-base-url https://your-kynver-site or set KYNVER_API_URL."),process.exit(1)),se()||(typeof e.apiKey=="string"?po(e.apiKey):(await Xl({...e,apiBaseUrl:r})).ok||process.exit(1));let t=se();t||(console.error("No API key after login \u2014 aborting."),process.exit(1));let n=await pA(r,t);n||(console.error("Could not resolve your AgentOS workspace from the account. Confirm this account has AgentOS access, then retry."),process.exit(1));let o={...e,apiBaseUrl:r,agentOsSlug:n.slug,...n.id?{agentOsId:n.id}:{},...typeof e.repo=="string"?{}:{discoverRepo:!0}};await oi(o),console.log(""),console.log(` Bootstrap complete \u2014 ${uA.hostname()} is linked to workspace "${n.slug}".`),console.log(" Next: `kynver start` \u2014 brings the agent online with Kynver-owned keeper supervision + local Kynver Cron when needed."),console.log(" Persistent background (Linux): `kynver start --install-systemd` or `kynver cron install --install-systemd`."),console.log(" (Advanced: `kynver run create --repo /path/to/repo` + `kynver daemon --run <RUN_ID> --agent-os-id <AOS_ID> --execute`.)")}N();import BI from"node:os";N();Je();N();import mA from"node:path";import{homedir as fA}from"node:os";var ld=mA.join(fA(),".kynver","config.json");function zo(e){let r=R(),t=oa({...e,config:r});if(!t)return{ok:!1,remediated:!1,alreadyPersisted:!1,configPath:q(ld),resolved:null,reason:"No Kynver git checkout found. Clone the repo, cd into it, then run `kynver setup --repo /path/to/Kynver` (or export KYNVER_DEFAULT_REPO).",remediation:"Clone the Kynver monorepo, cd into it, then run `kynver config ensure-default-repo` (or `kynver setup --repo /path/to/Kynver`)."};if(t.persistedInConfig)return{ok:!0,remediated:!1,alreadyPersisted:!0,configPath:q(ld),resolved:vn(t),config:ln(r)};let n=sa(t.repo,r),o=vn({...t,persistedInConfig:!0,source:"config"});return{ok:!0,remediated:!0,alreadyPersisted:!1,configPath:q(ld),resolved:o,config:ln(n),remediation:"defaultRepo persisted in ~/.kynver/config.json \u2014 `kynver run create` no longer requires --repo."}}function Vk(e=!1){let r=zo();if(e){console.log(JSON.stringify(r,null,2)),r.ok||(process.exitCode=1);return}if(!r.ok){console.error(r.reason??"Could not resolve a Kynver git checkout."),r.remediation&&console.error(r.remediation),process.exitCode=1;return}if(r.alreadyPersisted){console.log(`defaultRepo already set (${r.resolved?.defaultRepo??"unknown"}) in ${r.configPath}`);return}console.log(`Persisted defaultRepo ${r.resolved?.defaultRepo??""} in ${r.configPath}. \`kynver run create\` can omit --repo.`)}function Gk(e){return e?e.persistedInConfig?{status:"pass"}:{status:"warn",remediation:"Run `kynver config ensure-default-repo` to persist defaultRepo in ~/.kynver/config.json (or `kynver doctor runtime-takeover --remediate-default-repo`)."}:{status:"warn",remediation:"Run `kynver config ensure-default-repo` from a Kynver checkout (or `kynver setup --repo /path/to/Kynver`)."}}N();Ie();qn();js();import gA from"node:os";function Yk(e,r){console.error(JSON.stringify({event:"daemon_identity",level:e,message:r}))}function Jk(e=R(),r=process.env){let t=Ae(r,e),n=$s({config:e,totalMemBytes:gA.totalmem(),env:r}),o=[...t.warnings],s=[];if(!e.boxKind?.trim()&&!r.KYNVER_BOX_KIND?.trim()&&s.push("boxKind is not persisted in ~/.kynver/config.json and KYNVER_BOX_KIND is unset \u2014 run `kynver setup --box-kind forge|ghost` before starting the daemon so Command Center attributes snapshots to the correct pool"),t.slugInferenceBlocked){let c=r.KYNVER_DAEMON_STRICT_IDENTITY==="1"||r.KYNVER_DAEMON_STRICT_IDENTITY==="true",u="ambiguous box identity: KYNVER_AGENT_OS_SLUG is set without KYNVER_BOX_KIND or config.boxKind; treating this host as forge";c?s.push(u):o.push(u)}let i=n.configuredMaxWorkers??n.autoCap,a=cr(t.boxKind,i);$t(t.boxKind,i)&&o.push(`Forge box maxConcurrentWorkers=${i} exceeds pool cap \u2014 using ${a}; run kynver setup --box-kind forge --max-workers 4`);let l=s.length===0;for(let c of o)Yk("warn",c);for(let c of s)Yk("error",c);return{ok:l,box:t,workerCapSource:n.workerCapSource,maxConcurrentWorkers:a,autoCap:n.autoCap,warnings:o,errors:s}}import{mkdirSync as hA,readFileSync as kA,renameSync as yA,writeFileSync as RA}from"node:fs";import{homedir as bA}from"node:os";import qk from"node:path";function zk(e){let r=e.replace(/[^A-Za-z0-9_-]/g,"_");return qk.join(bA(),".kynver",`daemon-heartbeat-${r}.json`)}function Xk(e){try{let r=zk(e.agentOsId);hA(qk.dirname(r),{recursive:!0});let t={observedAt:(e.now??new Date).toISOString(),pid:process.pid,runId:e.runId,agentOsId:e.agentOsId,...e.instructionBundleVersion?{instructionBundleVersion:e.instructionBundleVersion}:{}},n=`${r}.tmp-${process.pid}`;RA(n,JSON.stringify(t),"utf8"),yA(n,r)}catch{}}function Qk(e){try{let r=kA(zk(e),"utf8"),t=JSON.parse(r);return typeof t?.observedAt!="string"?null:t}catch{return null}}function Zk(e,r,t=Date.now()){if(!e)return!1;let n=Date.parse(e.observedAt);return Number.isNaN(n)?!0:t-n>r}function vA(e){let r=process.env[e]?.trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"}function Pn(){process.platform==="win32"&&(vA("KYNVER_DAEMON_ALLOW_NATIVE_WINDOWS")||(console.error(JSON.stringify({event:"daemon_start_blocked",reason:"native_windows_console_flash",remedy:"Run the daemon inside WSL: .\\scripts\\start-tier2-wsl.ps1 \u2014 or set KYNVER_DAEMON_ALLOW_NATIVE_WINDOWS=1 to override (flashes visible consoles)."})),process.exit(1)))}N();import{existsSync as SA}from"node:fs";import{homedir as CA}from"node:os";import wA from"node:path";function ey(e,r){let t=process.env[e]?.trim().toLowerCase();return t?t==="0"||t==="false"||t==="no"||t==="off"?!1:t==="1"||t==="true"||t==="yes"||t==="on"?!0:r:r}function Xo(e,r,t=1){let n=Number(process.env[e]);return!Number.isFinite(n)||n<t?r:Math.floor(n)}function Hr(){let e=process.env.KYNVER_CRON_STORE_PATH?.trim()||process.env.OPENCLAW_CRON_STORE_PATH?.trim();return e||wA.join(CA(),".kynver","agent-os-cron.json")}function _A(e=Hr()){let r=process.env.KYNVER_CRON_TICK_STATE_PATH?.trim();return r||`${e.replace(/\.json$/i,"")}.tick-state.json`}function xA(){let e=R();return process.env.KYNVER_API_URL?.trim()||e.apiBaseUrl?.trim()||process.env.KYNVER_CRON_FIRE_BASE_URL?.trim()||process.env.OPENCLAW_CRON_FIRE_BASE_URL?.trim()||null}function cd(){return process.env.KYNVER_CRON_SECRET?.trim()||process.env.OPENCLAW_CRON_SECRET?.trim()||process.env.KYNVER_RUNTIME_SECRET?.trim()||null}function Sr(){let e=Hr(),r=_A(e),t=xA(),n=cd(),o=!!(t&&n),s=SA(e),i=o&&(s||ey("KYNVER_CRON_TICK_FORCE",!1));return{storePath:e,statePath:r,lockPath:`${r}.lock`,fireBaseUrl:t,secret:n,tickEnabled:ey("KYNVER_CRON_TICK_ENABLED",i),tickIntervalMs:Xo("KYNVER_CRON_TICK_INTERVAL_MS",6e4,5e3),missedRunPolicy:process.env.KYNVER_CRON_MISSED_RUN_POLICY?.trim().toLowerCase()==="skip"?"skip":"catch_up",maxCatchUpPerTick:Xo("KYNVER_CRON_MAX_CATCH_UP_PER_TICK",3,0),maxRetries:Xo("KYNVER_CRON_MAX_RETRIES",3,0),retryBackoffMs:Xo("KYNVER_CRON_RETRY_BACKOFF_MS",6e4,1e3),inflightLeaseMs:Xo("KYNVER_CRON_INFLIGHT_LEASE_MS",12e4,5e3)}}function Pa(e=Sr()){return e.tickEnabled&&!!(e.fireBaseUrl&&e.secret)}function EA(e){return e.replace(/\/+$/,"")}async function ry(e){let r=e.fetchFn??fetch,t=e.entry.spec.callbackPath.startsWith("/")?e.entry.spec.callbackPath:`/${e.entry.spec.callbackPath}`,n=`${EA(e.baseUrl)}${t}`,s={source:"kynver-cron",jobId:e.jobId??e.entry.spec.dedupeKey??null,agentOsId:e.entry.spec.target.agentOsId,kind:e.entry.spec.kind,target:e.entry.spec.target,...e.entry.spec.payload!==void 0&&{payload:e.entry.spec.payload}},i=await r(n,{method:"POST",headers:He(e.secret),body:JSON.stringify(s)}),a=null;try{a=await i.json()}catch{a=null}return{ok:i.ok,status:i.status,body:a}}C();import{closeSync as PA,existsSync as ud,openSync as AA,readFileSync as OA,unlinkSync as ty,writeFileSync as IA}from"node:fs";var NA=10*6e4;function ny(e){if(!ud(e))return null;try{let r=JSON.parse(OA(e,"utf8"));if(typeof r.pid=="number"&&typeof r.at=="string")return r}catch{return null}return null}function TA(e){let r=ny(e);if(!r||!H(r.pid))return!0;let t=Date.parse(r.at);return Number.isNaN(t)?!0:Date.now()-t>NA}function oy(e){if(ud(e)&&!TA(e)){let r=ny(e);return{acquired:!1,reason:r?`held by pid ${r.pid}`:"held by another process"}}if(ud(e))try{ty(e)}catch{}try{let r=AA(e,"wx");return IA(r,JSON.stringify({pid:process.pid,at:new Date().toISOString()}),"utf8"),PA(r),{acquired:!0}}catch(r){if(r.code==="EEXIST")return{acquired:!1,reason:"concurrent acquire"};throw r}}function sy(e){try{ty(e)}catch{}}var DA=/^[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+\s+[\d*/,\-?LW#]+$/;function MA(e){return DA.test(e.trim())}function UA(e,r,t){let n=new Set;for(let o of e.split(",")){let s=o.trim();if(!s)continue;if(s==="*"){for(let d=r;d<=t;d++)n.add(d);continue}let i=/^(.+)\/(\d+)$/.exec(s),a=i?i[1]:s,l=i?Math.max(1,Number(i[2])):1;if(a==="*"){for(let d=r;d<=t;d+=l)n.add(d);continue}let c=/^(\d+)-(\d+)$/.exec(a);if(c){let d=Math.max(r,Number(c[1])),f=Math.min(t,Number(c[2]));for(let p=d;p<=f;p+=l)n.add(p);continue}let u=Number(a);Number.isInteger(u)&&u>=r&&u<=t&&n.add(u)}return n}function Qo(e,r,t,n){let o=e.trim();return o==="*"?!0:UA(o,t,n).has(r)}function WA(e,r){let t=e.trim().split(/\s+/);if(t.length!==5)return!1;let[n,o,s,i,a]=t;return Qo(n,r.getUTCMinutes(),0,59)&&Qo(o,r.getUTCHours(),0,23)&&Qo(s,r.getUTCDate(),1,31)&&Qo(i,r.getUTCMonth()+1,1,12)&&Qo(a,r.getUTCDay(),0,6)}var LA=366*24*60;function BA(e){return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),0,0))}function iy(e,r){if(!MA(e))return null;let t=BA(r);t=new Date(t.getTime()+6e4);for(let n=0;n<LA;n++){if(WA(e,t))return t;t=new Date(t.getTime()+6e4)}return null}function ay(e,r){if(e.scheduleKind==="runAt"&&e.runAt){let t=Date.parse(e.runAt);return Number.isNaN(t)?null:new Date(t).toISOString()}if(e.scheduleKind==="cron"&&e.cron){let t=iy(e.cron.trim(),r);return t?t.toISOString():null}return null}function dd(e,r){if(e.scheduleKind!=="cron"||!e.cron?.trim())return null;let t=iy(e.cron.trim(),r);return t?t.toISOString():null}import{promises as HA}from"node:fs";async function ly(e){try{return await HA.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function FA(e){if(!e)return[];try{let r=JSON.parse(e);return Array.isArray(r.entries)?r.entries:[]}catch{return[]}}async function wt(e=Hr()){let r=await ly(e);return FA(r)}async function cy(e,r){let{mkdir:t,writeFile:n,rename:o}=await import("node:fs/promises"),{randomBytes:s}=await import("node:crypto"),{dirname:i}=await import("node:path");await t(i(e),{recursive:!0});let a=`${e}.${s(4).toString("hex")}.tmp`,l=JSON.stringify({entries:r},null,2);await n(a,l,"utf8"),await o(a,e)}async function uy(e,r=Hr()){let t=await wt(r),n=t.findIndex(o=>o.providerScheduleId===e.providerScheduleId);n>=0?t[n]=e:t.push(e),await cy(r,t)}async function dy(e=Hr()){return await ly(e)!==null?{created:!1}:(await cy(e,[]),{created:!0})}import{randomBytes as KA}from"node:crypto";import{promises as Zo}from"node:fs";import $A from"node:path";var Aa={version:1,jobs:{}};async function jA(e){try{return await Zo.readFile(e,"utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function VA(e){if(!e)return{...Aa,jobs:{...Aa.jobs}};try{let r=JSON.parse(e);return r?.version!==1||typeof r.jobs!="object"||!r.jobs?{...Aa,jobs:{}}:r}catch{return{...Aa,jobs:{}}}}async function Oa(e){let r=await jA(e);return VA(r)}async function GA(e,r){await Zo.mkdir($A.dirname(e),{recursive:!0});let t=KA(6).toString("hex"),n=`${e}.tmp-${process.pid}-${Date.now()}-${t}`;await Zo.writeFile(n,`${JSON.stringify(r,null,2)}
49
49
  `,"utf8");try{await Zo.rename(n,e)}catch(o){let s=o.code;if(s!=="EPERM"&&s!=="EEXIST"&&s!=="EACCES")throw o;await Zo.unlink(n).catch(()=>{})}}async function py(e,r){await GA(e,r)}function my(e,r){let t=e.jobs[r];if(t)return t;let n={providerScheduleId:r,nextFireAt:null,lastFiredAt:null,lastAttemptAt:null,consecutiveFailures:0,completedAt:null,inflightUntil:null};return e.jobs[r]=n,n}function YA(e,r){if(!e.inflightUntil)return!1;let t=Date.parse(e.inflightUntil);return!Number.isNaN(t)&&t>r}function JA(e){return!!e.completedAt}function qA(e,r,t,n){if(r.consecutiveFailures===0)return!0;if(e.spec.scheduleKind!=="cron"&&r.consecutiveFailures>t.maxRetries)return!1;if(!r.lastAttemptAt)return!0;let o=Date.parse(r.lastAttemptAt);return Number.isNaN(o)?!0:n-o>=t.retryBackoffMs}function zA(e,r,t){if(r.nextFireAt)return r.nextFireAt;let n=ay(e.spec,t);return r.nextFireAt=n,n}function XA(e,r,t,n){if(e.paused||JA(r)||YA(r,t)||!qA(e,r,n,t))return!1;let o=r.nextFireAt?Date.parse(r.nextFireAt):NaN;return Number.isNaN(o)?!1:t>=o}function QA(e,r,t){e.spec.scheduleKind==="cron"&&(r.nextFireAt=dd(e.spec,t))}async function An(e={}){let r=e.env??Sr(),t=e.now??new Date,n=t.getTime();if(!r.tickEnabled)return{enabled:!1,skipped:"tick_disabled",scanned:0,due:0,fired:0,skippedJobs:0,errors:0};if(!r.fireBaseUrl||!r.secret)return{enabled:!0,skipped:"missing_fire_credentials",scanned:0,due:0,fired:0,skippedJobs:0,errors:0};let o=oy(r.lockPath);if(!o.acquired)return{enabled:!0,skipped:o.reason??"lock_not_acquired",scanned:0,due:0,fired:0,skippedJobs:0,errors:0,lockHeld:!0};try{let s=await wt(r.storePath),i=e.agentOsIdFilter?s.filter(p=>p.spec.target.agentOsId===e.agentOsIdFilter):s,a=await Oa(r.statePath),l=[];for(let p of i){let m=my(a,p.providerScheduleId);zA(p,m,t),XA(p,m,n,r)&&l.push({entry:p,job:m})}l.sort((p,m)=>{let h=Date.parse(p.job.nextFireAt??"")||0,k=Date.parse(m.job.nextFireAt??"")||0;return h-k});let c=0,u=0,d=0,f=r.maxCatchUpPerTick;for(let{entry:p,job:m}of l){if(r.missedRunPolicy==="skip"&&p.spec.scheduleKind==="cron"){let h=Date.parse(m.nextFireAt??"");if(!Number.isNaN(h)&&h<n-r.tickIntervalMs*2){m.nextFireAt=dd(p.spec,t),d++;continue}}if(f<=0){d++;continue}m.inflightUntil=new Date(n+r.inflightLeaseMs).toISOString(),m.lastAttemptAt=t.toISOString(),QA(p,m,t);try{let h=await ry({entry:p,baseUrl:r.fireBaseUrl,secret:r.secret,fetchFn:e.fetchFn});m.inflightUntil=null,h.ok?(m.lastFiredAt=t.toISOString(),m.consecutiveFailures=0,p.spec.scheduleKind==="runAt"&&(m.completedAt=t.toISOString(),m.nextFireAt=null),c++,f--):(m.consecutiveFailures+=1,u++)}catch{m.inflightUntil=null,m.consecutiveFailures+=1,u++}}return await py(r.statePath,a),{enabled:!0,scanned:i.length,due:l.length,fired:c,skippedJobs:d,errors:u}}finally{sy(r.lockPath)}}C();D();import fy from"node:path";var gy="mesh-cron-lease.json";function Ia(e){return w(fy.join(P(e),gy),null)}function hy(e,r){ae(fy.join(P(e),gy),{...r,updatedAt:new Date().toISOString()})}function ky(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.response;if(!r||typeof r!="object"||Array.isArray(r))return null;let t=r.meshLiveness;if(!t||typeof t!="object"||Array.isArray(t))return null;let n=t.cronLease;if(!n||typeof n!="object"||Array.isArray(n))return null;let o=n;return{leaseToken:typeof o.leaseToken=="string"?o.leaseToken:null,holderBoxId:typeof o.holderBoxId=="string"?o.holderBoxId:null,authorized:o.authorized===!0,updatedAt:new Date().toISOString()}}C();import MO from"node:path";N();var ZA=1;function On(e){if(!e||typeof e!="object")return 0;let r=e.startedCount;if(typeof r=="number")return r;let t=e.outcomes;return Array.isArray(t)?t.filter(n=>n.started).length:0}function eO(e){let{maxStarts:r,...t}=e;return t}async function pd(e,r){if(r<=0)return{ok:!0,skipped:!0,reason:"no slots",maxStarts:0,startedCount:0};let t=eO(e);if(t.targetTaskId||t.targetTaskIds){let u=await Wr({...t,execute:!0,pipeline:!0,maxStarts:String(r)});return{...typeof u=="object"&&u!==null?u:{},passes:{target:u},startedCount:On(u)}}let n=Math.min(r,ZA),o=Math.max(0,r-n),s=await Wr({...t,execute:!0,pipeline:!0,lane:"review",maxStarts:String(n)}),i=On(s),a=o+(n-i);if(a<=0)return{...typeof s=="object"&&s!==null?s:{},passes:{review:s},startedCount:i};let l=await Wr({...t,execute:!0,pipeline:!0,maxStarts:String(a)}),c=On(l);return{passes:{review:s,work:l},startedCount:i+c,ok:!0}}function yy(e){if(!e||typeof e!="object")return[];let t=e.response?.dispatch?.exactTargetTaskIds;if(!Array.isArray(t))return[];let n=new Set,o=[];for(let s of t){if(typeof s!="string")continue;let i=s.trim();!i||n.has(i)||(n.add(i),o.push(i))}return o}function rO(e){let t=e.response?.dispatch;return t&&typeof t=="object"?t:null}function es(e){return typeof e!="number"||!Number.isFinite(e)?null:Math.max(0,Math.floor(e))}function tO(e){let r=Number(process.env[e]);return!Number.isFinite(r)||r<=0?null:Math.floor(r)}function Ry(e,r){let t=rO(r),n=es(t?.recommendedMaxStarts),o=es(t?.actionableReady),s=es(t?.queuedTasks),i=es(t?.boardAdvancedThisTick)??0,a=es(t?.leaseReapedThisTick)??0,l=i+a,c=o??s,u=e.slotsAvailable;c!==null?u=Math.min(u,c):n!==null&&(u=Math.min(u,n)),c===null&&n!==null&&(u=Math.max(u,Math.min(e.slotsAvailable,n)));let d=t?.underutilized===!0||(c??0)>0&&e.slotsAvailable>0&&e.maxConcurrentWorkers>0&&e.activeWorkers<e.maxConcurrentWorkers;if(e.slotsAvailable>0&&u===0&&(d||l>0)){let m=c??(l>0?l:1);u=Math.min(e.slotsAvailable,Math.max(1,m))}let f=tO("KYNVER_DAEMON_MAX_DISPATCH_STARTS");f!==null&&(u=Math.min(u,f));let p=s!==null&&o!==null?Math.max(0,s-o):null;return{maxStarts:Math.max(0,u),underutilized:d,advisedStarts:n,actionableReady:o,queuedTasks:s,nonDispatchableReady:p,boardAdvancedThisTick:i,leaseReapedThisTick:a}}rn();D();Zn();z();C();z();D();C();import nO from"node:path";N();async function by(e){let r=V(e.baseUrl),t=await J(e.secret,e.agentOsId,{baseUrl:r}),n=`${r}/api/agent-os/by-id/${encodeURIComponent(e.agentOsId)}/tasks/${encodeURIComponent(e.taskId)}/plan-progress-sync`,o=await re(n,t,{phase:e.phase,taskId:e.taskId,blocker:e.blocker,artifact:e.artifact},{agentOsId:e.agentOsId,baseUrl:r});return{ok:o.ok,status:o.status,response:o.response}}async function vy(e,r){let t=L(e),n=String(r.agentOsId||"");if(!n)return[];let o=[];for(let s of Object.keys(t.workers||{})){let i=w(nO.join(P(t.id),"workers",v(s),"worker.json"),void 0);if(!i?.dispatched||!i.taskId)continue;let a=M(i);if(!a.heartbeatBlocker)continue;if(i.lastSyncedHeartbeatBlocker===a.heartbeatBlocker){o.push({worker:s,phase:"heartbeat_blocker",ok:!0,skipped:!0});continue}let l=await by({agentOsId:n,taskId:i.taskId,phase:"heartbeat_blocker",blocker:a.heartbeatBlocker,baseUrl:r.baseUrl?String(r.baseUrl):void 0,secret:r.secret?String(r.secret):void 0});l.ok&&(i.lastSyncedHeartbeatBlocker=a.heartbeatBlocker,K(t.id,i)),o.push({worker:s,phase:"heartbeat_blocker",ok:l.ok})}return o}en();N();Ie();function oO(e=process.env){let r=R();return qe(r,e)!=="forge"}function Sy(e,r=process.env){if(oO(r))return e?.maxConcurrentWorkers??void 0}async function Cy(e,r){let t=V(r.baseUrl?String(r.baseUrl):void 0),n=await J(r.secret?String(r.secret):void 0,e,{baseUrl:t}),o=`${t}/api/agent-os/by-id/${encodeURIComponent(e)}/runtime`;try{let s=await si(o,n);if(!s.ok)return null;let a=s.response?.preferences?.maxConcurrentWorkers;if(a==null)return{maxConcurrentWorkers:null};let l=Number(a);return!Number.isFinite(l)||l<=0?{maxConcurrentWorkers:null}:{maxConcurrentWorkers:Math.floor(l)}}catch{return null}}N();Ie();import{spawnSync as sO}from"node:child_process";var iO=1e4,aO=4*1024*1024,wy=(e,r,t)=>{try{let n=sO(e,r,{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t?.timeoutMs??iO,maxBuffer:aO});return{ok:n.status===0,stdout:typeof n.stdout=="string"?n.stdout:"",stderr:typeof n.stderr=="string"?n.stderr:""}}catch(n){return{ok:!1,stdout:"",stderr:n instanceof Error?n.message:String(n)}}};function Na(e,r,t){return`${e} ${r} ${t}`}function rs(e){let r=e.lastIndexOf("@");if(r<=0||r===e.length-1)return null;let t=e.slice(0,r),n=e.slice(r+1);return!/^[^/\s]+\/[^/\s]+$/.test(t)||!/^[0-9a-f]{7,40}$/i.test(n)?null:{repo:t,sha:n}}function _y(e){let r=e.trim().match(/[/:]([^/]+\/[^/]+)\/(?:pull|pulls|merge_requests|pull-requests)\/(\d+)/i);if(!r)return null;let t=Number(r[2]);return!Number.isFinite(t)||t<=0?null:{repo:r[1],number:t}}var lO=8e3,cO=30,uO=100,dO=400,pO=3600*1e3,md=0;function gd(){return Date.now()<md}function mO(e){let r=`${e.stdout}
50
50
  ${e.stderr}`.toLowerCase();return r.includes("api rate limit exceeded")||r.includes("rate limit exceeded")||r.includes("secondary rate limit")}function xy(e){mO(e)&&(md=Math.max(md,Date.now()+pO))}function fd(e,r){if(gd())return null;let t=e("gh",["api",...r]);if(!t.ok||!t.stdout.trim())return xy(t),null;try{return JSON.parse(t.stdout)}catch{return null}}function fO(e,r,t,n){if(gd())return null;let o=e("gh",["pr","view",String(t),"--repo",r,"--json",n.join(",")]);if(!o.ok||!o.stdout.trim())return xy(o),null;try{return JSON.parse(o.stdout)}catch{return null}}function hd(e){return gd()?!1:process.env.GITHUB_TOKEN?.trim()||process.env.GH_TOKEN?.trim()?!0:e("gh",["auth","token"]).ok}function In(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function gO(e){return Array.isArray(e)?e.map(r=>In(r)).filter(r=>r!==null).slice(0,cO).map(r=>({context:r.context??null,state:r.state??null,target_url:r.target_url??null,description:r.description??null})):[]}function hO(e,r,t){let n=fd(e,[`repos/${r}/commits/${t}/status`]);return n?{state:n.state??null,statuses:gO(n.statuses)}:null}var Ey={provider:"github",kind:"pr_snapshot",version:"2",isAvailable:hd,collect(e,r){let t=_y(e);if(!t)return null;let n=fO(r,t.repo,t.number,["url","title","body","author","state","isDraft","mergedAt","mergeCommit","mergeable","headRefName","headRefOid","headRepositoryOwner","statusCheckRollup","files"]);if(!n)return null;let o=In(n.author),s=In(n.mergeCommit),i=In(n.headRepositoryOwner),a=typeof n.body=="string"?n.body.slice(0,lO):null,l=Array.isArray(n.statusCheckRollup)?n.statusCheckRollup.map(u=>In(u)).filter(u=>u!==null).slice(0,uO).map(u=>({name:u.name??u.context??null,status:u.status??u.state??null,conclusion:u.conclusion??null})):[],c=Array.isArray(n.files)?n.files.map(u=>In(u)).map(u=>typeof u?.path=="string"?u.path.trim():"").filter(Boolean).slice(0,dO):[];return{pull:{html_url:n.url??null,title:n.title??null,body:a,user:{login:o?.login??null},state:typeof n.state=="string"?n.state.toLowerCase():null,draft:n.isDraft??null,merged:!!n.mergedAt,merged_at:n.mergedAt??null,merge_commit_sha:s?.oid??null,mergeable:null,mergeable_state:n.mergeable??null,head:{sha:n.headRefOid??null,ref:n.headRefName??null,repo:{owner:{login:i?.login??null}}}},checkRuns:l,combinedStatus:{state:null,statuses:[]},changedFiles:c}}},Py={provider:"github",kind:"commit_status",version:"1",isAvailable:hd,collect(e,r){let t=rs(e);return t?hO(r,t.repo,t.sha):null}},Ay={provider:"github",kind:"branch_reachability",version:"1",isAvailable:hd,collect(e,r){let t=rs(e);if(!t)return null;let n=fd(r,[`repos/${t.repo}`]),o=typeof n?.default_branch=="string"&&n.default_branch.trim()?n.default_branch.trim():null;if(!o)return null;let s=fd(r,[`repos/${t.repo}/compare/${encodeURIComponent(o)}...${t.sha}`]);if(!s)return null;let i=typeof s.status=="string"?s.status:null;return{defaultBranch:o,compareStatus:i,reachable:i==="identical"||i==="behind"}}};var kO=5,yO=/\b(READY|ERROR|BUILDING|QUEUED|CANCELED|INITIALIZING)\b/i,RO=/https:\/\/[^\s]+/,Oy={provider:"vercel",kind:"deployment_status",version:"1",isAvailable(e){return e("vercel",["whoami"]).ok},collect(e,r){let t=rs(e);if(!t)return null;let n=r("vercel",["list","--prod","--meta",`githubCommitSha=${t.sha}`]);if(!n.ok)return null;let o=[];for(let s of n.stdout.split(`
51
51
  `)){let i=s.match(RO)?.[0];if(!i)continue;let a=s.match(yO)?.[1]?.toUpperCase()??null;if(o.push({url:i,state:a}),o.length>=kO)break}return{found:o.length>0,deployments:o}}};var kd=[];function Ta(e){kd.some(r=>r.provider===e.provider&&r.kind===e.kind)||kd.push(e)}function Iy(e,r){return kd.find(t=>t.provider===e&&t.kind===r)??null}function Ny(){Ta(Ey),Ta(Py),Ta(Ay),Ta(Oy)}var bO=1,vO=25e3;function Ty(e,r={}){Ny();let t=r.run??wy,n=r.now??(()=>new Date),o=r.maxSubjects??bO,s=Date.now()+(r.deadlineMs??vO),i=new Set,a=e.filter(p=>{let m=Na(p.provider,p.kind,p.subject);return i.has(m)?!1:(i.add(m),!0)}),l=a.length>0?Math.floor(n().getTime()/6e4)%a.length:0,u=a.map((p,m)=>a[(l+m)%a.length]).slice(0,o),d={attempted:0,collected:0,cached:0,items:[],skipped:[]},f=new Map;for(let p of u){let m=Na(p.provider,p.kind,p.subject),h=n(),k=r.cache?.get(m,h)??null;if(k){d.cached+=1,d.collected+=1,d.items.push(k);continue}if(Date.now()>s){d.skipped.push({...p,reason:"budget_exhausted"});continue}let g=Iy(p.provider,p.kind);if(!g){d.skipped.push({...p,reason:"no_recipe"});continue}let y=`${g.provider} ${g.kind}`,_=f.get(y);if(_===void 0&&(_=g.isAvailable(t),f.set(y,_)),!_){d.skipped.push({...p,reason:"provider_unavailable"});continue}if(r.cache?.reserve?.(p,m,n())===!1){d.skipped.push({...p,reason:"budget_exhausted"});continue}d.attempted+=1;let x=g.collect(p.subject,t);if(x==null){d.skipped.push({...p,reason:"collect_failed"});continue}d.collected+=1;let E={provider:p.provider,kind:p.kind,subject:p.subject,payload:x,observedAt:n().toISOString(),collectorVersion:g.version};d.items.push(E),r.cache?.set(m,E,n())}return d}D();C();import xO from"node:path";D();C();import Dy from"node:path";var SO="provider-evidence-wanted.json",CO="provider-evidence-cache.json",wO=600*1e3;function My(e){return Dy.join(P(e),SO)}function _O(e){return Dy.join(P(e),CO)}function Uy(e){if(!Array.isArray(e))return[];let r=[];for(let t of e){if(!t||typeof t!="object"||Array.isArray(t))continue;let n=t,o=typeof n.provider=="string"?n.provider.trim():"",s=typeof n.kind=="string"?n.kind.trim():"",i=typeof n.subject=="string"?n.subject.trim():"";!o||!s||!i||r.push({provider:o,kind:s,subject:i})}return r}function Wy(e){let r=w(My(e),null);return Uy(r?.wanted)}function Ly(e,r){ae(My(e),{savedAt:new Date().toISOString(),wanted:r})}function By(e,r={}){let t=r.ttlMs??wO,n=_O(e),s={...w(n,null)?.items??{}},i=!1;return{get(l,c){let u=s[l];if(!u)return null;let d=Date.parse(u.observedAt);return!Number.isFinite(d)||c.getTime()-d>t?(delete s[l],i=!0,null):u},set(l,c){s[l]=c,i=!0},flush(){i&&(ae(n,{savedAt:new Date().toISOString(),items:s}),i=!1)}}}function Hy(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e.providerEvidenceWanted;return Array.isArray(r)?Uy(r):null}var EO="provider-evidence-shared-cache.json",PO=6e4,AO=1,OO=1;function yd(e,r){let t=process.env[e];if(!t)return r;let n=Number.parseInt(t,10);return Number.isFinite(n)&&n>=0?n:r}function IO(){return xO.join(Z().harnessRoot,EO)}function NO(e){let r=e.toUpperCase().replace(/[^A-Z0-9]+/g,"_"),t=e==="github"?AO:OO;return yd(`KYNVER_PROVIDER_EVIDENCE_${r}_PER_MINUTE`,yd("KYNVER_PROVIDER_EVIDENCE_LIVE_COLLECTS_PER_MINUTE",t))}function Fy(){return yd("KYNVER_PROVIDER_EVIDENCE_SHARED_CACHE_TTL_MS",PO)}function TO(e){return Math.floor(e.getTime()/6e4)*6e4}function DO(e){return`${e.provider}:${e.kind}`}function Ky(e,r={}){let t=By(e,{ttlMs:r.ttlMs??Fy()}),n=r.file??IO(),o=w(n,null),s={...o?.items??{}},i={...o?.budget??{}},a=r.ttlMs??Fy(),l=!1;return{get(u,d){let f=t.get(u,d);if(f)return f;let p=s[u];if(!p)return null;let m=Date.parse(p.observedAt);return!Number.isFinite(m)||d.getTime()-m>a?(delete s[u],l=!0,null):(t.set(u,p,d),p)},set(u,d,f){t.set(u,d,f),s[u]=d,l=!0},reserve(u,d,f){let p=NO(u.provider);if(p===0)return!0;let m=DO(u),h=TO(f),k=i[m];return!k||k.windowStartMs!==h?(i[m]={windowStartMs:h,used:1},l=!0,!0):k.used>=p?!1:(k.used+=1,l=!0,!0)},flush(){t.flush(),l&&(ae(n,{savedAt:new Date().toISOString(),items:s,budget:i}),l=!1)}}}function UO(){let e=process.env.KYNVER_PIPELINE_SWEEP_ENABLED;return e?e==="1"||e.toLowerCase()==="true":!1}async function WO(e,r){let t=L(e),n=[],o=Math.max(0,Number.parseInt(process.env.KYNVER_PIPELINE_COMPLETION_REPLAY_MAX_DEEP_CHECKS_PER_TICK??"0",10)||0),s=0;for(let i of Object.keys(t.workers||{})){let a=w(MO.join(P(t.id),"workers",v(i),"worker.json"),void 0);if(!a?.taskId||a.localOnly||rt(a))continue;if(dt(a)){n.push({worker:i,ok:!0,taskId:a.taskId??null,skipped:!0});continue}if(s>=o)break;s++;let l=M(a);if(!oe(l))continue;let c=Xr({alive:l.alive,finalResult:l.finalResult,changedFiles:l.changedFiles,gitAncestry:l.gitAncestry});if(!a.dispatched&&!l.finalResult&&!c?.salvageable)continue;let u=await Ao({run:e,name:i,agentOsId:String(r.agentOsId||a.agentOsId||""),...r});n.push({worker:i,ok:u.ok,taskId:a.taskId??null})}return n}async function LO(e,r,t,n,o){let s=V(n.baseUrl?String(n.baseUrl):void 0),i=await J(n.secret?String(n.secret):void 0,e,{baseUrl:s}),a=`${s}/api/agent-os/by-id/${encodeURIComponent(e)}/operator/tick`,l=await xs(),c=Hi(r),u=null;try{let h=Wy(r);if(h.length>0){let k=Ky(r);u=Ty(h,{cache:k}),k.flush?.()}else u=null}catch{u=null}let d=Ia(r),f=await Ir(a,i,{agentOsId:e,runId:r,ingestHarness:!0,harnessBoardSnapshot:Io(r),resourceGate:t,boxResourceSnapshot:Wo(t,{harnessRunId:r,boxKind:qe(R())}),packageVersions:l,...o?{harnessCleanup:o}:{},runnerPresence:er({runId:r}),activeHarnessWorkers:c,...d?.leaseToken?{meshCronLeaseToken:d.leaseToken}:{},...u&&u.items.length>0?{providerEvidence:u.items}:{}}),p=Hy(f.response);if(p)try{Ly(r,p)}catch{}let m=ky(f);if(m)try{hy(r,m)}catch{}return{ok:f.ok,httpStatus:f.status,response:f.response,...u?{providerEvidence:{attempted:u.attempted,collected:u.collected,skipped:u.skipped.length}}:{}}}async function Rd(e){let r=String(T(String(e.run||""),"--run")),t=String(T(String(e.agentOsId||""),"--agent-os-id")),n=e.execute!==!1&&e.execute!=="false";Io(r);let o=await Cy(t,e),s=Sy(o),i=mr({runId:r,configuredMaxWorkersOverride:s}),a=ad()?id(r):void 0,l=await LO(t,r,i,e,a),c=yg(r,l),u=await Si(r,e),d=await WO(r,e),f=mr({runId:r,configuredMaxWorkersOverride:s}),p=Cn(),m=await vy(r,e),h=Ry(f,l),k=h.maxStarts,g=UO()?await _n({run:r,agentOsId:t,pipeline:!0,...e}):{ok:!0,skipped:!0,reason:"pipeline_sweep_disabled"},y=null,_=0,x=yy(l),E=k;if(n&&E>0&&x.length>0){let Y=Math.min(E,x.length),$=await pd({...e,run:r,agentOsId:t,targetTaskIds:x.join(",")},Y),F=On($);_+=F,E=Math.max(0,E-F),y={exactTargetTaskIds:x,exact:$,startedCount:_}}if(n&&E>0){let Y=await pd({...e,run:r,agentOsId:t},E),$=On(Y);_+=$,y=y&&typeof y=="object"?{...y,broad:Y,startedCount:_}:Y}else!n||k<=0?y||(y={ok:!0,skipped:!0,reason:n?f.reason??"no slots or queued work":"execute disabled",maxStarts:0,dispatchAdvice:h,...x.length?{exactTargetTaskIds:x,exactOnly:!0}:{}}):y&&typeof y=="object"&&(y={...y,broadSkipped:!0,startedCount:_});let A=!h.underutilized&&k===0&&d.length===0&&_===0;return{runId:r,agentOsId:t,execute:n,resourceGate:i,dispatchResourceGate:f,leaseRenewal:u,completedWorkers:d,staleReconcile:p,harnessCleanup:a,planProgressSync:m,completionAckSync:c,operatorTick:l,sweep:g,dispatchAdvice:h,dispatch:y,idle:A}}N();import nI from"node:os";import{readFileSync as BO}from"node:fs";import{homedir as HO,platform as FO}from"node:os";import KO from"node:path";import{execFileSync as $O}from"node:child_process";function $y(e,r=Date.now()){try{let t=JSON.parse(e),n=t.claudeAiOauth?.accessToken,o=t.claudeAiOauth?.expiresAt;return typeof n!="string"||!n||typeof o=="number"&&o-r<6e4?null:n}catch{return null}}function jO(){if(FO()==="darwin")try{let e=$O("security",["find-generic-password","-s","Claude Code-credentials","-w"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]});return $y(e.trim())}catch{return null}try{let e=BO(KO.join(HO(),".claude",".credentials.json"),"utf8");return $y(e)}catch{return null}}function jy(e=process.env,r={}){let t=e.ANTHROPIC_API_KEY?.trim();if(t)return{kind:"api_key",key:t};let n=e.KYNVER_CHAT_USE_CLAUDE_OAUTH;if(r.oauthOptIn===!0||n==="1"||n==="true"||n==="yes"){let s=jO();if(s)return{kind:"oauth",token:s}}return null}var VO="You are Claude Code, Anthropic's official CLI for Claude.";function GO(){return{blocks:[],stopReason:null,inputTokens:0,outputTokens:0}}function YO(e,r){let t=r;switch(t.type){case"message_start":return e.inputTokens=t.message?.usage?.input_tokens??0,"";case"content_block_start":{let n=t.index??e.blocks.length;return e.blocks[n]={type:t.content_block?.type==="tool_use"?"tool_use":"text",text:"",id:t.content_block?.id,name:t.content_block?.name,inputJson:""},""}case"content_block_delta":{let n=e.blocks[t.index??e.blocks.length-1];return n?t.delta?.type==="text_delta"&&t.delta.text?(n.text+=t.delta.text,t.delta.text):(t.delta?.type==="input_json_delta"&&t.delta.partial_json&&(n.inputJson+=t.delta.partial_json),""):""}case"message_delta":return t.delta?.stop_reason&&(e.stopReason=t.delta.stop_reason),typeof t.usage?.output_tokens=="number"&&(e.outputTokens=t.usage.output_tokens),"";default:return""}}function JO(e){let r=[];for(let t of e.blocks)if(t)if(t.type==="tool_use"){let n={};try{n=t.inputJson?JSON.parse(t.inputJson):{}}catch{n={}}r.push({type:"tool_use",id:t.id??"",name:t.name??"",input:n})}else t.text&&r.push({type:"text",text:t.text});return{content:r,stop_reason:e.stopReason??"end_turn",usage:{input_tokens:e.inputTokens,output_tokens:e.outputTokens}}}async function*qO(e){let r=e.getReader(),t=new TextDecoder,n="";try{for(;;){let{done:o,value:s}=await r.read();if(o)break;n+=t.decode(s,{stream:!0});let i;for(;(i=n.indexOf(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kynver-app/runtime",
3
- "version": "0.1.153",
3
+ "version": "0.1.154",
4
4
  "description": "Kynver AgentOS local execution runtime and CLI",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",