@kynver-app/runtime 0.1.128 → 0.1.129

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,6 @@
1
+ import { type SignedInstructionBundle } from "./types.js";
2
+ export declare function instructionBundleCachePath(agentOsId: string): string;
3
+ /** Best-effort atomic write (temp + rename). Never throws. */
4
+ export declare function saveInstructionBundleCache(agentOsId: string, signed: SignedInstructionBundle): void;
5
+ /** Load the cached signed payload. Caller MUST verify the signature before use. */
6
+ export declare function loadInstructionBundleCache(agentOsId: string): SignedInstructionBundle | null;
@@ -0,0 +1,25 @@
1
+ export declare const INSTRUCTION_BUNDLE_REFRESH_TTL_MS: number;
2
+ export declare function __resetInstructionBundleClientForTest(): void;
3
+ export interface EnsureInstructionBundleOptions {
4
+ agentOsId: string;
5
+ /** Kynver API base URL (e.g. from `resolveBaseUrl`). No fetch when absent. */
6
+ baseUrl?: string | null;
7
+ /** Runner credential / callback secret for the by-id route. */
8
+ secret?: string | null;
9
+ /** Bypass the TTL gate (startup / tests). */
10
+ force?: boolean;
11
+ fetchImpl?: typeof fetch;
12
+ nowMs?: number;
13
+ }
14
+ export interface EnsureInstructionBundleResult {
15
+ source: "server" | "disk" | "embedded" | "primed";
16
+ version: string;
17
+ /** True when this call changed the active bundle. */
18
+ updated: boolean;
19
+ }
20
+ /**
21
+ * Ensure the active instruction bundle is fresh. TTL-gated (15 min) so the
22
+ * daemon can call it every tick; the first call performs the startup fetch.
23
+ * Never throws.
24
+ */
25
+ export declare function ensureInstructionBundle(opts: EnsureInstructionBundleOptions): Promise<EnsureInstructionBundleResult>;
@@ -0,0 +1,4 @@
1
+ export * from "./types.js";
2
+ export { PINNED_INSTRUCTION_BUNDLE_PUBLIC_KEYS, resolveInstructionBundlePublicKey, } from "./keys.js";
3
+ export { verifyInstructionBundleSignatureWithKey, verifySignedInstructionBundle, type InstructionBundleVerifyResult, } from "./verify.js";
4
+ export { EMBEDDED_INSTRUCTION_BUNDLE, EMBEDDED_INSTRUCTION_BUNDLE_VERSION, } from "./embedded-bundle.js";
@@ -0,0 +1,5 @@
1
+ import{createHash as u}from"node:crypto";function o(e){return JSON.stringify(i(e))}function i(e){if(Array.isArray(e))return e.map(i);if(e&&typeof e=="object"){let t={};for(let n of Object.keys(e).sort())t[n]=i(e[n]);return t}return e}function L(e){return`ib1-${u("sha256").update(o(e),"utf8").digest("hex").slice(0,16)}`}function N(e){return`ib-${u("sha256").update(Buffer.from(e)).digest("hex").slice(0,12)}`}function a(e){if(!e)return null;let t=e.trim();if(!t)return null;if(/^[0-9a-fA-F]{64}$/.test(t))return new Uint8Array(t.match(/.{2}/g).map(n=>parseInt(n,16)));try{let n=Buffer.from(t,"base64");if(n.length===32)return new Uint8Array(n)}catch{}return null}function s(e){if(!e||typeof e!="object")return!1;let t=e;if(typeof t.signature!="string"||!t.signature||typeof t.publicKeyId!="string"||!t.publicKeyId)return!1;let n=t.bundle;return!(!n||typeof n!="object"||typeof n.version!="string"||!n.version||typeof n.generatedAt!="string"||!Array.isArray(n.personas)||!n.instructions||typeof n.instructions!="object"||!n.policyThresholds||typeof n.policyThresholds!="object")}var p={"ib-3bab6314f0ba":"53a2040646cd479e1f5f1aea9abf7848ce8b62e32001efb8044dfd90e8ab87ed"};function l(e,t=process.env){let n=a(t.KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY);if(n)return n;let r=p[e];return r?a(r):null}import{createPublicKey as f,verify as m}from"node:crypto";var g=Buffer.from("302a300506032b6570032100","hex");function y(e){return f({key:Buffer.concat([g,Buffer.from(e)]),format:"der",type:"spki"})}function d(e,t){if(!s(e))return{ok:!1,reason:"malformed signed bundle payload"};let n;try{n=Buffer.from(e.signature,"base64url")}catch{return{ok:!1,reason:"signature is not base64url"}}if(n.length!==64)return{ok:!1,reason:"signature is not a 64-byte Ed25519 signature"};try{let r=Buffer.from(o(e.bundle),"utf8");return m(null,r,y(t),n)?{ok:!0,bundle:e.bundle}:{ok:!1,reason:"Ed25519 signature mismatch"}}catch(r){return{ok:!1,reason:`signature verification failed: ${r.message}`}}}function h(e,t=process.env){if(!s(e))return{ok:!1,reason:"malformed signed bundle payload"};let n=l(e.publicKeyId,t);return n?d(e,n):{ok:!1,reason:`no verification key for publicKeyId "${e.publicKeyId}" (not pinned; set KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY)`}}var c="embedded-1",I=[{slug:"ghost",displayName:"Ghost",description:"Orchestration persona.",dispatchLane:null,defaultRoleLane:"system"},{slug:"astra",displayName:"Astra",description:"Planning persona.",dispatchLane:"implementation",defaultRoleLane:"plan_author"},{slug:"rhea",displayName:"Rhea",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"mnemo",displayName:"Mnemo",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"sentinel",displayName:"Sentinel",description:"Review persona.",dispatchLane:"review",defaultRoleLane:"deep_reviewer"},{slug:"pixel",displayName:"Pixel",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"schema",displayName:"Schema",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"atlas",displayName:"Atlas",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"runtime_verifier"},{slug:"bridge",displayName:"Bridge",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"catalyst",displayName:"Catalyst",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"lorentz",displayName:"Lorentz",description:"Review persona.",dispatchLane:"review",defaultRoleLane:"report_reviewer"},{slug:"dalton",displayName:"Dalton",description:"Landing persona.",dispatchLane:"landing",defaultRoleLane:"implementer"}],b={"worker.prompt.core_rules":["Structured final result (recommended): record completion as JSON with summary, files, PR URLs, verification, risks, and blockers.","Completion handoff (required): before you stop, summarize the outcome in your last message and append a heartbeat line with phase `complete`. Commit your work cleanly and open a GitHub PR (draft OK) for substantial changes \u2014 never leave uncommitted changes behind without reporting them.","Review-only workers must not open new implementation PRs \u2014 review the existing PR and record a verdict in the final result.","Keep verification targeted to touched paths; avoid full-monorepo verification unless explicitly requested.","Do not run `npm publish`.","If verification fails, append a heartbeat line immediately with the failing command, reason, and next action."].join(`
2
+ `),"worker.prompt.progress.compact":"Plan progress: when planId is set, report progress with `kynver plan progress --plan <planId> --row <rowKey> --role implementer --status in_progress|running|partial|blocked`. Do not mark rows done from the worker CLI.","worker.prompt.progress.full":["Structured plan progress (required when planId is set):","- Report checkpoints with `kynver plan progress --plan <planId> --row <rowKey> --role implementer --status in_progress|running|partial|blocked`.","- When a slice is finished, emit `partial` with evidence (`--evidence pr:<url>`, `--evidence path:<file>`, or `--evidence command:<cmd>`).","- Do not propose or confirm row `done` from the worker CLI."].join(`
3
+ `),"worker.prompt.merge_gate.compact":"Verification cost control: prefer local verification before requesting CI runs; do not push empty commits to re-trigger CI; record verification evidence on the PR.","worker.prompt.merge_gate.full":["Verification cost control:","- Prefer local verification of touched paths before requesting any CI run.","- Do not push empty commits to re-trigger CI.","- Record verification evidence on the PR before requesting review."].join(`
4
+ `),"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(`
5
+ `)},R={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},B={version:c,generatedAt:"1970-01-01T00:00:00.000Z",personas:I,instructions:b,policyThresholds:R};export{B as EMBEDDED_INSTRUCTION_BUNDLE,c as EMBEDDED_INSTRUCTION_BUNDLE_VERSION,p as PINNED_INSTRUCTION_BUNDLE_PUBLIC_KEYS,o as canonicalJsonStringify,L as computeInstructionBundleVersion,N as deriveInstructionBundleKeyId,s as isSignedInstructionBundleShape,a as parseRawEd25519Key,l as resolveInstructionBundlePublicKey,d as verifyInstructionBundleSignatureWithKey,h as verifySignedInstructionBundle};
@@ -0,0 +1,3 @@
1
+ import type { InstructionBundle } from "./types.js";
2
+ export declare const EMBEDDED_INSTRUCTION_BUNDLE_VERSION = "embedded-1";
3
+ export declare const EMBEDDED_INSTRUCTION_BUNDLE: InstructionBundle;
@@ -0,0 +1,7 @@
1
+ export * from "./types.js";
2
+ export * from "./keys.js";
3
+ export * from "./verify.js";
4
+ export * from "./embedded-bundle.js";
5
+ export * from "./state.js";
6
+ export * from "./cache.js";
7
+ export * from "./client.js";
@@ -0,0 +1,14 @@
1
+ /**
2
+ * keyId → raw Ed25519 public key (hex). `ib-3bab6314f0ba` is the committed
3
+ * DEV fallback pair the server uses when `KYNVER_INSTRUCTION_BUNDLE_KEY` is
4
+ * unset — fine for dev/first-boot, NOT a production trust root (its private
5
+ * half is committed server-side). Production deployments set a real private
6
+ * key on the server and `KYNVER_INSTRUCTION_BUNDLE_PUBLIC_KEY` on daemon
7
+ * hosts until the prod public key is pinned here in a republish.
8
+ */
9
+ export declare const PINNED_INSTRUCTION_BUNDLE_PUBLIC_KEYS: Readonly<Record<string, string>>;
10
+ /**
11
+ * Resolve the raw public key for a `publicKeyId`. The env override wins (key
12
+ * rotation without a package republish); otherwise the pinned set by id.
13
+ */
14
+ export declare function resolveInstructionBundlePublicKey(publicKeyId: string, env?: Record<string, string | undefined>): Uint8Array | null;
@@ -0,0 +1,24 @@
1
+ import type { InstructionBundle, InstructionBundlePersona } from "./types.js";
2
+ export type InstructionBundleSource = "embedded" | "disk" | "server" | "primed";
3
+ export declare function getActiveInstructionBundle(): InstructionBundle;
4
+ export declare function getActiveInstructionBundleVersion(): string;
5
+ export declare function getActiveInstructionBundleSource(): InstructionBundleSource;
6
+ /**
7
+ * Install a bundle as the active one. The fetch client calls this ONLY after
8
+ * signature verification; `primed` is for in-process callers that already
9
+ * hold canonical content (e.g. the Kynver server seeding its own runtime
10
+ * imports) and for tests.
11
+ */
12
+ export declare function setActiveInstructionBundle(bundle: InstructionBundle, source: InstructionBundleSource): void;
13
+ /** Reset to the embedded fallback (tests). */
14
+ export declare function __resetActiveInstructionBundleForTest(): void;
15
+ /**
16
+ * Resolve a keyed instruction literal: active bundle first, then the embedded
17
+ * fallback for that key, then empty string (never throws — a missing key must
18
+ * never take a worker down).
19
+ */
20
+ export declare function resolveInstructionText(key: string): string;
21
+ /** Resolve a numeric policy threshold: active bundle → embedded → fallback. */
22
+ export declare function resolvePolicyThreshold(key: string, fallback: number): number;
23
+ /** Persona entry from the active bundle (null when the slug is not present). */
24
+ export declare function resolveBundlePersona(slug: string | null | undefined): InstructionBundlePersona | null;
@@ -0,0 +1,42 @@
1
+ export type InstructionBundleDispatchLane = "implementation" | "review" | "landing";
2
+ export type InstructionBundleRoleLane = "plan_author" | "implementer" | "report_reviewer" | "deep_reviewer" | "runtime_verifier" | "system";
3
+ export interface InstructionBundlePersona {
4
+ slug: string;
5
+ displayName: string;
6
+ description: string;
7
+ dispatchLane: InstructionBundleDispatchLane | null;
8
+ defaultRoleLane: InstructionBundleRoleLane;
9
+ }
10
+ /** Content payload — everything the version hash covers. */
11
+ export interface InstructionBundleContent {
12
+ personas: InstructionBundlePersona[];
13
+ /** Keyed instruction literals (e.g. `worker.prompt.core_rules`). */
14
+ instructions: Record<string, string>;
15
+ /** Keyed numeric policy thresholds (e.g. `harness.maxTaskAttempts`). */
16
+ policyThresholds: Record<string, number>;
17
+ }
18
+ export interface InstructionBundle extends InstructionBundleContent {
19
+ /** Content hash (`ib1-<sha256 prefix>`) — stable per content, used as ETag. */
20
+ version: string;
21
+ generatedAt: string;
22
+ }
23
+ export interface SignedInstructionBundle {
24
+ bundle: InstructionBundle;
25
+ /** base64url Ed25519 signature over `canonicalJsonStringify(bundle)`. */
26
+ signature: string;
27
+ /** Identifies the signing key (`ib-<sha256(publicKey) prefix>`). */
28
+ publicKeyId: string;
29
+ }
30
+ /**
31
+ * Deterministic JSON: recursively sorted object keys so signer and verifier
32
+ * agree on the signed bytes regardless of construction/parse order.
33
+ */
34
+ export declare function canonicalJsonStringify(value: unknown): string;
35
+ /** Stable content-hash version: `ib1-` + first 16 hex of sha256(canonical content). */
36
+ export declare function computeInstructionBundleVersion(content: InstructionBundleContent): string;
37
+ /** Derive the key id used as `publicKeyId` from a raw 32-byte Ed25519 public key. */
38
+ export declare function deriveInstructionBundleKeyId(rawPublicKey: Uint8Array): string;
39
+ /** Parse a raw 32-byte key from hex (64 chars) or base64. Returns null when malformed. */
40
+ export declare function parseRawEd25519Key(raw: string | null | undefined): Uint8Array | null;
41
+ /** Structural validation of a parsed wire payload. */
42
+ export declare function isSignedInstructionBundleShape(value: unknown): value is SignedInstructionBundle;
@@ -0,0 +1,15 @@
1
+ import { type InstructionBundle } from "./types.js";
2
+ export type InstructionBundleVerifyResult = {
3
+ ok: true;
4
+ bundle: InstructionBundle;
5
+ } | {
6
+ ok: false;
7
+ reason: string;
8
+ };
9
+ /** Verify a signed bundle against an explicit raw 32-byte public key. */
10
+ export declare function verifyInstructionBundleSignatureWithKey(signed: unknown, rawPublicKey: Uint8Array): InstructionBundleVerifyResult;
11
+ /**
12
+ * Verify a signed bundle resolving the key from the env override / pinned set.
13
+ * This is the daemon's trust gate — a bundle that fails here is never used.
14
+ */
15
+ export declare function verifySignedInstructionBundle(signed: unknown, env?: Record<string, string | undefined>): InstructionBundleVerifyResult;
@@ -5,4 +5,8 @@ export interface HarnessRetryLimits {
5
5
  /** Minimum ms between dispatch starts for the same run (default 5s). */
6
6
  dispatchCooldownMs: number;
7
7
  }
8
+ /**
9
+ * Precedence: env override → server-delivered instruction bundle threshold →
10
+ * embedded default (M6 — policy values iterate via bundle push, no republish).
11
+ */
8
12
  export declare function readHarnessRetryLimits(): HarnessRetryLimits;
@@ -1,8 +1,8 @@
1
1
  var c=(e,r)=>()=>(e&&(r=e(e=0)),r);function U(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let t=JSON.parse(r);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{return null}return null}function X(e){let r=e.trim();if(!r)return null;let t=U(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let l=U(s[1]??"");l&&n.push(l)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let l=U(r.slice(i,a+1));l&&n.push(l)}return n.length>0?n[n.length-1]:null}function Q(e){let r=e.finalResult??e.final_result;if(r!=null)return typeof r=="string"?X(r)??(r.trim()||null):r;let t=typeof e.summary=="string"?e.summary.trim():"";if(!t)return null;let n=X(t);return n||t}var Z=c(()=>{"use strict"});import{existsSync as Qe,mkdirSync as dt,readFileSync as Ze,readdirSync as mt,statSync as ee,writeFileSync as ft}from"node:fs";function re(e){console.error(e),process.exit(1)}function I(e){return process.platform!=="win32"?e:{windowsHide:!0,...e}}function E(e){try{return JSON.parse(e)}catch{return null}}function A(e){try{return ee(e).size}catch{return 0}}function v(e){try{return ee(e).mtime.toISOString()}catch{return null}}function te(e,r){return Qe(e)?Ze(e,"utf8").split(`
2
2
  `).slice(-r).join(`
3
3
  `):""}function C(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function ne(e){let r=null,t=-1/0;for(let n of e){if(!n)continue;let o=Date.parse(n);Number.isFinite(o)&&o>t&&(t=o,r=n)}return r}function K(e){return Math.max(0,Math.round((Date.now()-e)/1e3))}var p=c(()=>{"use strict"});import{existsSync as er,readFileSync as rr}from"node:fs";function oe(e){return e==="complete"}function se(e){return oe(e.lastHeartbeatPhase)?e.terminalFinalResult!==void 0&&e.terminalFinalResult!==null?e.terminalFinalResult:e.lastHeartbeatSummary?.trim()||"completed":null}function ie(e){let r={heartbeatCount:0,lastHeartbeatAt:null,lastHeartbeatPhase:null,lastHeartbeatSummary:null,terminalFinalResult:null,heartbeatBlocker:null,timestampAnomalies:[],lastBoxResourceSnapshot:null,lastPrEvidence:[]};if(!er(e))return r;let t=Date.now()+tr,n=new Date(t).toISOString(),o=rr(e,"utf8").split(`
4
- `).filter(Boolean);for(let s of o){let i=E(s);if(!i||typeof i!="object"||Array.isArray(i))continue;let a=i;if(r.heartbeatCount++,a.ts){let l=String(a.ts),m=Date.parse(l);Number.isFinite(m)&&m>t?r.timestampAnomalies.push({kind:"future_heartbeat_timestamp",observedAt:l,clampedTo:n}):r.lastHeartbeatAt=l}a.phase!==void 0&&a.phase!==null&&(r.lastHeartbeatPhase=String(a.phase)),a.summary!==void 0&&a.summary!==null&&(r.lastHeartbeatSummary=String(a.summary)),oe(r.lastHeartbeatPhase)&&(r.terminalFinalResult=Q(a)),r.heartbeatBlocker=a.blocker?String(a.blocker):null,a.boxResourceSnapshot&&typeof a.boxResourceSnapshot=="object"&&!Array.isArray(a.boxResourceSnapshot)&&(r.lastBoxResourceSnapshot=a.boxResourceSnapshot),Array.isArray(a.prEvidence)&&(r.lastPrEvidence=a.prEvidence.filter(l=>!!l&&typeof l=="object"&&typeof l.prUrl=="string"))}return r}var tr,ae=c(()=>{"use strict";Z();p();tr=6e4});function sr(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function ir(e){if(!e)return[];let r=[],t="",n,o=!1;for(let s of e){if(o){t+=s,o=!1;continue}if(s==="\\"){o=!0;continue}if(n){s===n?n=void 0:t+=s;continue}if(s==='"'||s==="'"){n=s;continue}if(/\s/.test(s)){t&&(r.push(t),t="");continue}t+=s}return t&&r.push(t),r}function ar(e){let r=sr(e[0]);return!!(r&&nr.has(r))}function H(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function le(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function lr(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function cr(e){let r=[];for(let t=1;t<e.length;t+=1){let n=e[t];if(n){if(n==="--"){r.push(...e.slice(t+1));break}if(n.startsWith("-")){if(n.includes("="))continue;or.has(n)&&(t+=1);continue}r.push(n)}}return r}function ur(e){let r=!1,t=e.map(o=>{let s=lr(o);return s!==o&&(r=!0),s}),n=cr(t);if(n.length===2){let[o,s]=n;if(H(s))return{argv:[t[0]??"rg","-g",s,o,"."],changed:!0}}return{argv:t,changed:r}}function M(e){let r=e.trim();if(!r)return{command:r,changed:!1};let t=r.includes("&&")?" && ":r.includes("||")?" || ":"; ",n=r.split(/\s*(?:&&|\|\||;)\s*/u),o=!1,s=n.map(i=>{let a=ir(i.trim());if(!a.length||!ar(a))return i;let l=ur(a);return l.changed?(o=!0,l.argv.join(" ")):i});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function ce(e){if(!e)return{};let r=e.match(/search\s+"(.+)"\s+in\s+([^()]+?)(?:\s*\(|$)/iu);if(r)return{pattern:r[1],target:r[2]?.trim()};let t=e.match(/^search\s+"(.+)"\s+in\s+(.+)$/iu);return t?{pattern:t[1],target:t[2]?.trim()}:{}}function dr(e){let{pattern:r,target:t}=ce(e);return r?le(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:H(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function mr(e){let{pattern:r,target:t}=ce(e);if(!r)return null;if(le(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&H(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function fr(e){if(e.kind==="bad_scope"&&e.pattern?.includes("agent-os-land-pr")&&e.target==="package.json")return"Search package.json with a glob from the repo root: `rg -g package.json agent-os-land-pr .` \u2014 or run `node scripts/agent-os-land-pr.mjs <pr-url>` directly.";if(e.kind==="bad_scope"&&e.pattern&&e.target)return`Use \`rg -g '${e.target}' ${e.pattern} .\` from the repo root instead of treating ${e.target} as a folder.`;if(e.kind==="rg_exclude_syntax"&&e.pattern){let r=e.target?`${e.target.trim()}/**`:"!node_modules/**";return`Repo search scope \`${e.target??"!node_modules"}\` is not a valid ripgrep path. Use \`rg "${e.pattern}" -g '${r}' .\` from the repo root (exclude globs need a \`/**\` suffix).`}return e.kind==="no_matches"&&e.pattern?`No matches for "${e.pattern}". Try a broader pattern, drop overly short tokens, or search from the repo root with \`rg "${e.pattern}" .\`.`:null}function pr(e){let r=e.match(/search\s+"(.+)"\s+in\s+([^()]+?)(?:\s*\(agent\)|\s*failed|$)/iu);return r?`search "${r[1]}" in ${r[2]?.trim()}`:null}function F(e){let r=e.meta?.trim()||(e.command?pr(e.command):null)||null;if(r){let t=dr(r),n=fr(t);if(n)return n;let o=mr(r);if(o?.changed)return`Repo search used an invalid scope. Retry with: \`${o.command}\`.`}if(e.command&&/\b(rg|ripgrep)\b/i.test(e.command)){let t=M(e.command);if(t.changed)return`Ripgrep scope may be invalid. Retry with: \`${t.command}\`.`;if(e.exitCode===1)return"Ripgrep returned no matches (exit 1). Try a broader pattern or search from the repo root."}return null}var nr,or,ue=c(()=>{"use strict";nr=new Set(["rg","ripgrep","grep"]),or=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function R(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function br(e){let r=e.trim();if(!r)return null;if(r.startsWith("{"))try{return JSON.parse(r)}catch{}let t=r.indexOf("{"),n=r.lastIndexOf("}");if(t>=0&&n>t)try{return JSON.parse(r.slice(t,n+1))}catch{return null}return null}function x(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function yr(e){let r=e.metadata;if(!x(r))return null;let t=r.vulnerabilities;if(!x(t))return null;let n=s=>typeof t[s]=="number"?t[s]:0,o={info:n("info"),low:n("low"),moderate:n("moderate"),high:n("high"),critical:n("critical"),total:n("total")};return typeof t.total!="number"&&!o.critical&&!o.high&&!o.moderate&&!o.low&&!o.info?null:o}function Rr(e){let r=[];e.critical&&r.push(`${e.critical} critical`),e.high&&r.push(`${e.high} high`),e.moderate&&r.push(`${e.moderate} moderate`),e.low&&r.push(`${e.low} low`),e.info&&r.push(`${e.info} info`);let t=r.length?r.join(", "):"see report";return`npm audit: ${e.total} vulnerabilit${e.total===1?"y":"ies"} (${t}) \u2014 remediation required`}function xr(e,r){let t=e.error;if(x(t)){let s=typeof t.summary=="string"?t.summary.trim():"",i=typeof t.code=="string"?t.code.trim():"";if(s)return i?`${i}: ${s}`:s;if(i)return i}let n=typeof e.message=="string"?e.message.trim():"";if(n)return n;let o=r.trim();return o?R(o.split(`
4
+ `).filter(Boolean);for(let s of o){let i=E(s);if(!i||typeof i!="object"||Array.isArray(i))continue;let a=i;if(r.heartbeatCount++,a.ts){let l=String(a.ts),m=Date.parse(l);Number.isFinite(m)&&m>t?r.timestampAnomalies.push({kind:"future_heartbeat_timestamp",observedAt:l,clampedTo:n}):r.lastHeartbeatAt=l}a.phase!==void 0&&a.phase!==null&&(r.lastHeartbeatPhase=String(a.phase)),a.summary!==void 0&&a.summary!==null&&(r.lastHeartbeatSummary=String(a.summary)),oe(r.lastHeartbeatPhase)&&(r.terminalFinalResult=Q(a)),r.heartbeatBlocker=a.blocker?String(a.blocker):null,a.boxResourceSnapshot&&typeof a.boxResourceSnapshot=="object"&&!Array.isArray(a.boxResourceSnapshot)&&(r.lastBoxResourceSnapshot=a.boxResourceSnapshot),Array.isArray(a.prEvidence)&&(r.lastPrEvidence=a.prEvidence.filter(l=>!!l&&typeof l=="object"&&typeof l.prUrl=="string"))}return r}var tr,ae=c(()=>{"use strict";Z();p();tr=6e4});function sr(e){return e?(e.split("/").pop()??e).replace(/\.exe$/i,"").toLowerCase():null}function ir(e){if(!e)return[];let r=[],t="",n,o=!1;for(let s of e){if(o){t+=s,o=!1;continue}if(s==="\\"){o=!0;continue}if(n){s===n?n=void 0:t+=s;continue}if(s==='"'||s==="'"){n=s;continue}if(/\s/.test(s)){t&&(r.push(t),t="");continue}t+=s}return t&&r.push(t),r}function ar(e){let r=sr(e[0]);return!!(r&&nr.has(r))}function H(e){return!e||e.includes("/")||e.includes("*")?!1:/\.(?:json|md|mjs|cjs|js|ts|tsx|yaml|yml)$/iu.test(e)}function le(e){if(!e)return!1;let r=e.trim();return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")}function lr(e){if(!e.startsWith("--glob="))return e;let r=e.slice(7);return r.startsWith("!")&&!r.includes("/")&&!r.endsWith("/**")?`--glob=${r}/**`:e}function cr(e){let r=[];for(let t=1;t<e.length;t+=1){let n=e[t];if(n){if(n==="--"){r.push(...e.slice(t+1));break}if(n.startsWith("-")){if(n.includes("="))continue;or.has(n)&&(t+=1);continue}r.push(n)}}return r}function ur(e){let r=!1,t=e.map(o=>{let s=lr(o);return s!==o&&(r=!0),s}),n=cr(t);if(n.length===2){let[o,s]=n;if(H(s))return{argv:[t[0]??"rg","-g",s,o,"."],changed:!0}}return{argv:t,changed:r}}function M(e){let r=e.trim();if(!r)return{command:r,changed:!1};let t=r.includes("&&")?" && ":r.includes("||")?" || ":"; ",n=r.split(/\s*(?:&&|\|\||;)\s*/u),o=!1,s=n.map(i=>{let a=ir(i.trim());if(!a.length||!ar(a))return i;let l=ur(a);return l.changed?(o=!0,l.argv.join(" ")):i});return o?{command:s.join(t),changed:!0}:{command:r,changed:!1}}function ce(e){if(!e)return{};let r=e.match(/search\s+"(.+)"\s+in\s+([^()]+?)(?:\s*\(|$)/iu);if(r)return{pattern:r[1],target:r[2]?.trim()};let t=e.match(/^search\s+"(.+)"\s+in\s+(.+)$/iu);return t?{pattern:t[1],target:t[2]?.trim()}:{}}function dr(e){let{pattern:r,target:t}=ce(e);return r?le(t)?{kind:"rg_exclude_syntax",pattern:r,target:t}:H(t)?{kind:"bad_scope",pattern:r,target:t}:{kind:"not_repo_search",pattern:r,target:t}:{kind:"not_repo_search"}}function mr(e){let{pattern:r,target:t}=ce(e);if(!r)return null;if(le(t)){let n=`${t.trim()}/**`;return{command:`rg "${r}" -g '${n}' .`,changed:!0}}return t&&H(t)?{command:`rg -g ${t} "${r}" .`,changed:!0}:null}function fr(e){if(e.kind==="bad_scope"&&e.pattern?.includes("agent-os-land-pr")&&e.target==="package.json")return"Search package.json with a glob from the repo root: `rg -g package.json agent-os-land-pr .` \u2014 or run `node scripts/agent-os-land-pr.mjs <pr-url>` directly.";if(e.kind==="bad_scope"&&e.pattern&&e.target)return`Use \`rg -g '${e.target}' ${e.pattern} .\` from the repo root instead of treating ${e.target} as a folder.`;if(e.kind==="rg_exclude_syntax"&&e.pattern){let r=e.target?`${e.target.trim()}/**`:"!node_modules/**";return`Repo search scope \`${e.target??"!node_modules"}\` is not a valid ripgrep path. Use \`rg "${e.pattern}" -g '${r}' .\` from the repo root (exclude globs need a \`/**\` suffix).`}return e.kind==="no_matches"&&e.pattern?`No matches for "${e.pattern}". Try a broader pattern, drop overly short tokens, or search from the repo root with \`rg "${e.pattern}" .\`.`:null}function pr(e){let r=e.match(/search\s+"(.+)"\s+in\s+([^()]+?)(?:\s*\(agent\)|\s*failed|$)/iu);return r?`search "${r[1]}" in ${r[2]?.trim()}`:null}function F(e){let r=e.meta?.trim()||(e.command?pr(e.command):null)||null;if(r){let t=dr(r),n=fr(t);if(n)return n;let o=mr(r);if(o?.changed)return`Repo search used an invalid scope. Retry with: \`${o.command}\`.`}if(e.command&&/\b(rg|ripgrep)\b/i.test(e.command)){let t=M(e.command);if(t.changed)return`Ripgrep scope may be invalid. Retry with: \`${t.command}\`.`;if(e.exitCode===1)return"Ripgrep returned no matches (exit 1). Try a broader pattern or search from the repo root."}return null}var nr,or,ue=c(()=>{"use strict";nr=new Set(["rg","ripgrep","grep"]),or=new Set(["-e","--regexp","-f","--file","-m","--max-count","-A","--after-context","-B","--before-context","-C","--context","-g","--glob","--iglob"])});function R(e,r=200){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function yr(e){let r=e.trim();if(!r)return null;if(r.startsWith("{"))try{return JSON.parse(r)}catch{}let t=r.indexOf("{"),n=r.lastIndexOf("}");if(t>=0&&n>t)try{return JSON.parse(r.slice(t,n+1))}catch{return null}return null}function x(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function br(e){let r=e.metadata;if(!x(r))return null;let t=r.vulnerabilities;if(!x(t))return null;let n=s=>typeof t[s]=="number"?t[s]:0,o={info:n("info"),low:n("low"),moderate:n("moderate"),high:n("high"),critical:n("critical"),total:n("total")};return typeof t.total!="number"&&!o.critical&&!o.high&&!o.moderate&&!o.low&&!o.info?null:o}function Rr(e){let r=[];e.critical&&r.push(`${e.critical} critical`),e.high&&r.push(`${e.high} high`),e.moderate&&r.push(`${e.moderate} moderate`),e.low&&r.push(`${e.low} low`),e.info&&r.push(`${e.info} info`);let t=r.length?r.join(", "):"see report";return`npm audit: ${e.total} vulnerabilit${e.total===1?"y":"ies"} (${t}) \u2014 remediation required`}function xr(e,r){let t=e.error;if(x(t)){let s=typeof t.summary=="string"?t.summary.trim():"",i=typeof t.code=="string"?t.code.trim():"";if(s)return i?`${i}: ${s}`:s;if(i)return i}let n=typeof e.message=="string"?e.message.trim():"";if(n)return n;let o=r.trim();return o?R(o.split(`
5
5
  `).find(Boolean)??o,160):"npm audit failed"}function Sr(e){let r=`${e.stdout}
6
- ${e.stderr}`.trim(),t=br(r);if(!t||!x(t)){let o=R(r||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit failed (invalid or missing JSON): ${o}`,parseError:"invalid_json"}}if(x(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${xr(t,e.stderr)}`};let n=yr(t);return n?e.exitCode===0&&n.total===0?{kind:"success",exitCode:0,summary:"npm audit: no vulnerabilities reported",audit:n}:{kind:"audit_findings",exitCode:e.exitCode,summary:Rr(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function _r(e){return gr.test(e)}function Er(e){return hr.test(e)}function Ar(e){let r=F({command:e.command,exitCode:e.exitCode});if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"ripgrep finished (exit 0)"};if(e.exitCode===1){let n=(e.stderr||e.interleaved).trim();if(n&&kr.test(n)){let i=R(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=M(e.command),s=o.changed&&!r?` Retry with: \`${o.command}\`.`:"";return{kind:"search_no_matches",exitCode:1,summary:r??`ripgrep: no matches (exit 1).${s} Try a broader pattern or search from the repo root.`}}let t=R(e.interleaved||e.stdout||e.stderr||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:r??`ripgrep failed (exit ${e.exitCode}): ${t}`}}function de(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(_r(e.command)){let i=r.trim()||n.trim()||t.trim();return Sr({exitCode:e.exitCode,stdout:i,stderr:t})}if(Er(e.command))return Ar({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=F({command:e.command,exitCode:e.exitCode});if(o&&e.exitCode!==0)return{kind:"command_failure",exitCode:e.exitCode,summary:o};if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"command succeeded (exit 0)"};let s=R(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var gr,hr,kr,me=c(()=>{"use strict";ue();gr=/\bnpm\s+audit\b/i,hr=/\b(rg|ripgrep)\b/i,kr=/\b(error|invalid|unknown|panic|not found)\b/i});import{existsSync as vr,readFileSync as Cr}from"node:fs";function wr(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function Pr(e){if(!e)return null;for(let r of Object.keys(e))if(r.endsWith("ToolCall")){let t=r.slice(0,-8);return t.length?t:r}return null}function Or(e,r){e.finalResult=r.result||r.subtype||r.terminal_reason||"completed",r.is_error&&(e.error=String(r.result||r.api_error_status||"stream result error"))}function Wr(e){if(e.type!=="tool_call"||e.subtype!=="completed")return null;let t=(e.tool_call&&typeof e.tool_call=="object"&&!Array.isArray(e.tool_call)?e.tool_call:null)?.shellToolCall;if(!t||typeof t!="object"||Array.isArray(t))return null;let n=t,o=n.args,s=o&&typeof o=="object"&&!Array.isArray(o)&&typeof o.command=="string"?String(o.command):"",i=n.result;if(!i||typeof i!="object"||Array.isArray(i))return null;let a=i.success??i.failure;if(!a||typeof a!="object"||Array.isArray(a))return null;let l=a,m=typeof l.exitCode=="number"?l.exitCode:0;return{command:s,exitCode:m,stdout:typeof l.stdout=="string"?l.stdout:"",stderr:typeof l.stderr=="string"?l.stderr:"",interleaved:typeof l.interleavedOutput=="string"?l.interleavedOutput:""}}function Br(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function fe(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null};if(!vr(e))return r;let t=Cr(e,"utf8").split(`
7
- `).filter(Boolean);for(let n of t){let o=E(n);if(!o)continue;let s=wr(o);if(s&&(r.firstEventAt||=s,r.lastEventAt=s),o.type==="stream_event"&&o.event&&typeof o.event=="object"&&o.event.type==="content_block_start"){let a=o.event.content_block;a?.type==="tool_use"&&(r.currentTool=String(a.name||"tool"))}if(o.type==="assistant"&&o.message&&typeof o.message=="object"){let a=o.message.content;if(Array.isArray(a)){let l=a.find(m=>m?.type==="tool_use");l&&(r.currentTool=String(l.name||r.currentTool))}}if(o.type==="tool_call"&&o.subtype==="started"){let a=o.tool_call&&typeof o.tool_call=="object"&&!Array.isArray(o.tool_call)?o.tool_call:void 0,l=Pr(a);l&&(r.currentTool=l)}let i=Wr(o);i&&Br(r,de({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&Or(r,o)}return r}var pe=c(()=>{"use strict";me();p()});function Nr(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function ge(e){let r=(e??"").trim();if(!r)return null;for(let t of Tr)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${Nr(r)}`};return null}var Tr,he=c(()=>{"use strict";Tr=[{test:/\b(?:invalid|unknown|unsupported|unrecognized)\b[^.\n]*\bmodel\b/i,label:"provider rejected the requested model"},{test:/\bmodel\b[^.\n]*\b(?:not\s+(?:found|supported|available|recognized|valid)|is\s+not\s+valid|does\s+not\s+exist)/i,label:"provider rejected the requested model"},{test:/\b(?:did you mean|available models|choose (?:a|one of)|supported models)\b/i,label:"provider rejected the requested model"},{test:/model preflight failed/i,label:"model/provider preflight failed"},{test:/\b(?:command not found|ENOENT|is the .*CLI on PATH|executable not found|no such file or directory)\b/i,label:"provider CLI is missing or not on PATH"},{test:/\bfailed to spawn\b/i,label:"provider failed to spawn the worker process"},{test:/\b(?:not logged in|unauthorized|authentication (?:failed|required)|invalid api key|missing api key|401)\b/i,label:"provider authentication failed"}]});function ke(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Ur(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function Ir(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:ke(e.head)}function Kr(e,r,t){let n=["exited_with_changes_salvage"];if((e==="uncommitted"||e==="both")&&n.push(`${r} uncommitted change${r===1?"":"s"} with no final result`),(e==="committed_ahead"||e==="both")&&t){let o=t.length>12?t.slice(0,12):t;n.push(`commit ${o} ahead of base with no final result`)}return n.push("review worktree \u2014 commit, open a PR, or run a salvage worker before discarding"),n.join(": ")}function be(e){if(e.alive||Ur(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=ke(e.headCommit)??Ir(e.gitAncestry),n=r>0,o=!!t;if(!n&&!o)return{kind:"none",salvageable:!1,uncommittedCount:0,headCommit:null,attentionReason:"process exited without a final result"};let s=n&&o?"both":n?"uncommitted":"committed_ahead";return{kind:s,salvageable:!0,uncommittedCount:r,headCommit:t,attentionReason:Kr(s,r,t)}}var ye=c(()=>{"use strict"});var Hr,Pt,Re=c(()=>{"use strict";Hr=["ANTHROPIC_API_KEY","ANALYST_API_KEY","RECRUITER_API_KEY","AUTH_SECRET","NEXTAUTH_SECRET","DATABASE_URL","PRODUCTION_DATABASE_URL","KYNVER_PRODUCTION_DATABASE_URL","REDIS_URL","GOOGLE_CLIENT_SECRET","GITHUB_CLIENT_SECRET","KYNVER_API_KEY","KYNVER_SERVICE_SECRET","KYNVER_RUNTIME_SECRET","KYNVER_CRON_SECRET","OPENCLAW_CRON_SECRET","QSTASH_TOKEN","QSTASH_CURRENT_SIGNING_KEY","QSTASH_NEXT_SIGNING_KEY","TOOL_SECRETS_KEK","TOOL_EXECUTOR_DISPATCH_SECRET","CLOUDFLARE_API_TOKEN","STRIPE_SECRET_KEY","STRIPE_WEBHOOK_SECRET","STRIPE_IDENTITY_WEBHOOK_SECRET","VOYAGE_API_KEY","PERPLEXITY_API_KEY","FRED_API_KEY","FMP_API_KEY","CURSOR_API_KEY"],Pt=new Set(Hr)});import{spawnSync as Se}from"node:child_process";function Mr(e,r,t={}){let n=Se("git",r,I({cwd:e,encoding:"utf8"}));if(n.status!==0&&!t.allowFailure){let o=`git ${r.join(" ")} failed: ${n.stderr||n.stdout}`;if(t.throwError)throw new Error(o);re(o)}return n.stdout||""}function _e(e){return Mr(e,["status","--short"],{allowFailure:!0}).split(`
8
- `).map(r=>r.trim()).filter(Boolean)}function w(e,r){try{let t=Se("git",r,I({cwd:e,encoding:"utf8"}));return{status:t.status,stdout:t.stdout||"",stderr:t.stderr||"",error:t.error?t.error.message:null}}catch(t){return{status:null,stdout:"",stderr:"",error:t.message}}}function xe(e,r,t){let n=w(e,["merge-base","--is-ancestor",r,t]);return n.status===0?{isAncestor:!0,error:null}:n.status===1?{isAncestor:!1,error:null}:{isAncestor:null,error:n.error||n.stderr||n.stdout||`git exited ${n.status}`}}function Ee(e,r="origin/main"){let t=typeof r=="string"?{base:r}:r,n=t.baseCommit?.trim()||t.base?.trim()||"origin/main",o=t.baseCommit?.trim()||null;if(!e)return $(n,"missing worktree path");let s=w(e,["rev-parse","HEAD"]);if(s.status!==0)return $(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let f=w(e,["rev-parse",n]);if(f.status!==0)return $(n,f.error||f.stderr||f.stdout||`failed to resolve ${n}`,s.stdout.trim());i=f.stdout.trim()}let a=s.stdout.trim();if(a===i)return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:!0,headIsAncestorOfBase:!0,relation:"synced"};let l=xe(e,i,a),m=xe(e,a,i),d=l.error||m.error||void 0;if(l.isAncestor==null||m.isAncestor==null)return{checked:!1,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:m.isAncestor,relation:"unknown",...d?{error:d}:{}};let u=l.isAncestor?"ahead":m.isAncestor?"merged":"diverged";return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:m.isAncestor,relation:u,...d?{error:d}:{}}}function $(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var D=c(()=>{"use strict";p();Re()});function S(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Fr(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function $r(e){if(S(e.headCommit)||S(e.prUrl)||S(e.artifactBundlePath)||S(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&S(r.head))}function Ae(e){return Fr(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:$r(e)?{blocked:!0,detail:`Worktree has ${e.changedFiles.length} uncommitted change(s); commit or discard before landing`}:{blocked:!0,reason:"dirty_worktree_no_pr",detail:`Worktree has ${e.changedFiles.length} uncommitted change(s) with no commit or PR; commit, open a PR, or discard before landing`}:{blocked:!1}}function ve(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var Ce=c(()=>{"use strict"});function L(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let t=JSON.parse(r);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{return null}return null}function we(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function P(e){let r=e.trim();if(!r)return null;let t=L(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let d=L(s[1]??"");d&&n.push(d)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let d=L(r.slice(i,a+1));d&&n.push(d)}if(n.length===0)return null;let l=n[n.length-1],m=we(l);for(let d of n){let u=we(d);u>m&&(l=d,m=u)}return l}var j=c(()=>{"use strict"});function y(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Dr(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function b(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:y(e)}function O(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Pe(e){let r=null;if(typeof e=="string"){let o=P(e);o&&(r=o)}else e&&typeof e=="object"&&!Array.isArray(e)&&(r=e);if(!r)return[];let t=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(t))return[];let n=[];for(let o of t){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=b(String(s.prUrl??s.pr_url??"")),a=y(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:y(s.mergeCommit??s.merge_commit),reason:y(s.reason)})}return n}function Oe(e,r){let t=[],n=b(y(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=b(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function We(e){let{contract:r,snapshot:t}=e,n=e.finalResult??t.finalResult;if(!r.landingOnly&&r.targetPrUrls.length===0&&!r.repairEnforceOriginalPr)return{blocked:!1};if(!Dr(n))return(r.requiresTargetPrReconciliation??(r.landingOnly||!!r.repairEnforceOriginalPr||r.targetPrUrls.length>0))&&r.targetPrUrls.length>0?{blocked:!0,reason:"missing_target_pr_reconciliation",detail:`Final result required to reconcile target PR(s): ${r.targetPrUrls.join(", ")}`}:{blocked:!1};if(!(r.requiresTargetPrReconciliation??(r.landingOnly||!!r.repairEnforceOriginalPr||r.targetPrUrls.length>0))&&!r.repairEnforceOriginalPr)return{blocked:!1};let s=r.repairEnforceOriginalPr?b(y(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?b(r.targetPrUrls[0]):null):null;if(s){let u=Oe(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let k of u)if(k!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${k} instead of canonical target ${s}`}}let g=Pe(n).find(k=>k.prUrl===s);if(!g||g.outcome!=="merged"&&!(g.reason?.trim()&&(g.outcome==="skipped"||g.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=Pe(n),a=new Map(i.map(u=>[O(u.prUrl),u])),l=new Set(r.targetPrUrls.map(u=>O(b(u)??u)).filter(Boolean)),m=Oe(t,n);if(r.landingOnly)for(let u of m){if(l.size>0&&!l.has(O(u)))return{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${u}`};if(l.size===0)return{blocked:!0,reason:"unrelated_implementation_pr",detail:"Landing-only worker must not open new implementation PRs"}}if(r.targetPrUrls.length===0)return{blocked:!1};let d=[];for(let u of r.targetPrUrls){let f=O(b(u)??u),h=a.get(f);if(!h){d.push(f);continue}h.outcome!=="merged"&&!h.reason?.trim()&&d.push(f)}return d.length>0?{blocked:!0,reason:d.every(u=>a.has(u))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${d.join(", ")}`}:{blocked:!1}}function Be(e){if(e.blocked)return e.detail??e.reason}var Te=c(()=>{"use strict";j()});function jr(e){let r=Date.now();if(e.completionBlocker&&!Ne(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&Yr(e.finalResult))return{state:"done",reason:"local-only worker superseded by merged PR"};let o={finalResult:e.finalResult,changedFiles:e.changedFiles??[],gitAncestry:e.gitAncestry??null,prUrl:e.prUrl??null},s=Ae(o);if(s.blocked){let i=ve(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=We({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Be(i);if(a)return{state:"needs_attention",reason:i.reason?`landing contract (${i.reason}): ${a}`:`landing contract: ${a}`}}return{state:"done",reason:"final result recorded"}}if(!e.alive){if(Gr(e))return{state:"done",reason:"empty abandoned worker record"};let o=ge(e.error);if(o)return{state:"blocked",reason:o.reason};let s=be({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let a=e.error?.trim();return{state:"needs_attention",reason:a?`${s.attentionReason} (${a})`:s.attentionReason}}let i=e.error?.trim();return{state:"needs_attention",reason:i?`process exited without a final result: ${i}`:s?.attentionReason??"process exited without a final result"}}if(e.heartbeatBlocker)return{state:"blocked",reason:`worker heartbeat reported blocker: ${e.heartbeatBlocker}`};let t=e.startedAt?Date.parse(e.startedAt):NaN;if(!e.firstEventAt&&e.stdoutBytes===0&&e.heartbeatBytes===0&&Number.isFinite(t)&&r-t>Lr)return{state:"needs_attention",reason:`no first stream event ${K(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>W?{state:"stale",reason:`no log/event/heartbeat activity for ${K(n)}s`}:{state:"ok",reason:"recent activity"}}function Ne(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function Gr(e){return e.finalResult||e.taskId||e.agentOsId||e.stdoutBytes>0||(e.stderrBytes??0)>0||e.heartbeatBytes>0||e.error?.trim()||(e.changedFiles??[]).some(r=>r.trim())?!1:/empty worker dir|marked abandoned/i.test(e.reconcileReason??"")}function Yr(e){let r=null;if(typeof e=="string"?r=P(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return!1;let t=r.targetPrReconciliation??r.target_pr_reconciliation;return Array.isArray(t)?t.some(n=>!n||typeof n!="object"||Array.isArray(n)?!1:String(n.outcome??"").trim()==="merged"):!1}function Vr(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??se(t))}function Ue(e,r={}){let t=fe(e.stdoutPath),n=ie(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Vr(e,t.finalResult,n),i=o?!1:C(e.pid),a=A(e.stdoutPath),l=A(e.stderrPath),m=A(e.heartbeatPath),d=_e(e.worktreePath),u=Ee(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),f=ne([t.lastEventAt,n.lastHeartbeatAt,v(e.stdoutPath),v(e.stderrPath),v(e.heartbeatPath)]),h=t.error||!i&&!s&&te(e.stderrPath,10).trim()||void 0,g=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,k=Ne(g)?null:g,qe=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,N=jr({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:l,heartbeatBytes:m,lastActivityAt:f,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:h,changedFiles:d,gitAncestry:u,completionBlocker:k,landingContract:qe,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),Xe=k||N.state==="blocked"?"blocked":o||N.state==="done"?"done":s?"exited":i?"running":"exited";return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:Xe,attention:N,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:l,heartbeatBytes:m,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:f,currentTool:o?null:t.currentTool,heartbeatCount:n.heartbeatCount,lastHeartbeatAt:n.lastHeartbeatAt,lastHeartbeatPhase:n.lastHeartbeatPhase,lastHeartbeatSummary:n.lastHeartbeatSummary,heartbeatBlocker:n.heartbeatBlocker,timestampAnomalies:n.timestampAnomalies,finalResult:s,error:h,changedFiles:d,gitAncestry:u,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.orchestrationAudit?.provider??null,boxKind:e.boxKind??null,boxId:e.boxId??null,runtimeId:e.runtimeId??null,personaSlug:e.personaSlug??null,dispatched:e.dispatched??null,localOnly:e.localOnly??null}}function Ie(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function Ke(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}var Lr,W,_=c(()=>{"use strict";ae();pe();he();ye();D();Ce();Te();j();p();Lr=18e4,W=6e5});var B=c(()=>{"use strict"});var $e=c(()=>{"use strict";D();B()});var G=c(()=>{"use strict"});var De=c(()=>{"use strict"});var cn,un,Le=c(()=>{"use strict";cn=25*1024*1024*1024,un=12*1024*1024*1024});var pn,gn,Y=c(()=>{"use strict";Le();pn=30*1024*1024*1024,gn=15*1024*1024*1024});var je=c(()=>{"use strict";T();p()});var Ge=c(()=>{"use strict";_()});var rt,tt,Ye=c(()=>{"use strict";De();J();G();z();Y();T();je();Ge();p();rt=500*1024*1024,tt=4*1024*1024*1024});var z=c(()=>{"use strict";Ye()});import{homedir as ot,totalmem as Zn}from"node:os";import q from"node:path";var Ve,ao,lo,co,uo,J=c(()=>{"use strict";$e();B();p();G();z();Y();Ve=q.join(ot(),".kynver"),ao=q.join(Ve,"config.json"),lo=q.join(Ve,"credentials"),co=500*1024*1024,uo=4*1024*1024*1024});import{homedir as st}from"node:os";import it from"node:path";var bo,ze=c(()=>{"use strict";J();B();p();bo=it.join(st(),".openclaw","harness")});var T=c(()=>{"use strict";ze();p()});_();var He="kynver-harness:",zr="@runner:";function Me(e){return e?.trim()?e.trim():null}function Jr(e){let r=Me(e);if(!r?.startsWith(He))return null;let t=r.slice(He.length),n=t.indexOf(zr);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function Fe(e,r){let t=Me(r);return t?Jr(e)===t:!1}_();p();function qr(e){let{worker:r,status:t,taskLease:n}=e,o=n?.leaseOwner??null;if(r.dispatched&&n){if(n.status==="running"&&o&&!Fe(o,r.runId))return{health:"orphaned",reason:`task lease held by ${o}, expected harness run ${r.runId}`};if(n.status==="running"&&!t.alive&&!t.finalResult)return{health:"orphaned",reason:"board task running but worker process is not alive"}}if(r.status==="running"&&!t.alive&&!t.finalResult)return{health:"orphaned",reason:"worker.json still running but process is dead"};if(t.attention.state==="stale")return{health:"stale",reason:t.attention.reason};let s=t.lastHeartbeatAt?Date.parse(t.lastHeartbeatAt):NaN;return t.alive&&Number.isFinite(s)&&Date.now()-s>W?{health:"stale",reason:`heartbeat older than ${Math.floor(W/1e3)}s`}:t.alive&&r.pid&&!C(r.pid)?{health:"orphaned",reason:"pid recorded but process is not alive"}:n?.status==="running"&&!t.alive&&t.finalResult?{health:"healthy",reason:"finished worker awaiting completion replay"}:{health:"healthy",reason:t.attention.reason||"worker within expected lifecycle bounds"}}T();function Je(e){return!!e.completionReportedAt?.trim()}_();function at(e){let{worker:r,status:t}=e,n=[];r.localOnly&&n.push("local-only worker (no board linkage)"),(!r.agentOsId||!r.taskId)&&n.push("missing agentOsId/taskId linkage"),Je(r)&&n.push("completion already acknowledged"),r.completionBlocker&&n.push(r.completionBlocker),t.heartbeatBlocker&&t.alive&&n.push(`worker heartbeat blocker: ${t.heartbeatBlocker}`),t.attention.state==="blocked"&&n.push(t.attention.reason||"worker attention blocked"),Ke(t)&&n.push(t.attention.reason||"landing gate blocked");let o=Ie(t),s;return o?t.finalResult?s="final_result":t.alive?s="terminal_status":s="process_exited":n.push("worker has not reached a terminal condition"),{eligible:o&&n.length===0,terminalVerified:o,terminalReason:s,blockers:n}}export{at as assessAutoCompleteEligibility,qr as classifyWorkerHealth,Ue as computeWorkerStatus};
6
+ ${e.stderr}`.trim(),t=yr(r);if(!t||!x(t)){let o=R(r||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit failed (invalid or missing JSON): ${o}`,parseError:"invalid_json"}}if(x(t.error))return{kind:"command_failure",exitCode:e.exitCode,summary:`npm audit command failed: ${xr(t,e.stderr)}`};let n=br(t);return n?e.exitCode===0&&n.total===0?{kind:"success",exitCode:0,summary:"npm audit: no vulnerabilities reported",audit:n}:{kind:"audit_findings",exitCode:e.exitCode,summary:Rr(n),audit:n}:{kind:"command_failure",exitCode:e.exitCode,summary:"npm audit failed: JSON response missing vulnerability metadata",parseError:"missing_metadata"}}function _r(e){return gr.test(e)}function Er(e){return hr.test(e)}function Ar(e){let r=F({command:e.command,exitCode:e.exitCode});if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"ripgrep finished (exit 0)"};if(e.exitCode===1){let n=(e.stderr||e.interleaved).trim();if(n&&kr.test(n)){let i=R(n,160);return{kind:"command_failure",exitCode:1,summary:r??`ripgrep failed (exit 1): ${i}`}}let o=M(e.command),s=o.changed&&!r?` Retry with: \`${o.command}\`.`:"";return{kind:"search_no_matches",exitCode:1,summary:r??`ripgrep: no matches (exit 1).${s} Try a broader pattern or search from the repo root.`}}let t=R(e.interleaved||e.stdout||e.stderr||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:r??`ripgrep failed (exit ${e.exitCode}): ${t}`}}function de(e){let r=e.stdout??"",t=e.stderr??"",n=e.interleavedOutput??"";if(_r(e.command)){let i=r.trim()||n.trim()||t.trim();return Sr({exitCode:e.exitCode,stdout:i,stderr:t})}if(Er(e.command))return Ar({command:e.command,exitCode:e.exitCode,stdout:r,stderr:t,interleaved:n});let o=F({command:e.command,exitCode:e.exitCode});if(o&&e.exitCode!==0)return{kind:"command_failure",exitCode:e.exitCode,summary:o};if(e.exitCode===0)return{kind:"success",exitCode:0,summary:"command succeeded (exit 0)"};let s=R(n||r||t||`exit ${e.exitCode}`,180);return{kind:"command_failure",exitCode:e.exitCode,summary:`command failed (exit ${e.exitCode}): ${s}`}}var gr,hr,kr,me=c(()=>{"use strict";ue();gr=/\bnpm\s+audit\b/i,hr=/\b(rg|ripgrep)\b/i,kr=/\b(error|invalid|unknown|panic|not found)\b/i});import{existsSync as vr,readFileSync as Cr}from"node:fs";function wr(e){let r=e.timestamp_ms;return e.timestamp||e.ts||(r?new Date(r).toISOString():void 0)}function Pr(e){if(!e)return null;for(let r of Object.keys(e))if(r.endsWith("ToolCall")){let t=r.slice(0,-8);return t.length?t:r}return null}function Or(e,r){e.finalResult=r.result||r.subtype||r.terminal_reason||"completed",r.is_error&&(e.error=String(r.result||r.api_error_status||"stream result error"))}function Wr(e){if(e.type!=="tool_call"||e.subtype!=="completed")return null;let t=(e.tool_call&&typeof e.tool_call=="object"&&!Array.isArray(e.tool_call)?e.tool_call:null)?.shellToolCall;if(!t||typeof t!="object"||Array.isArray(t))return null;let n=t,o=n.args,s=o&&typeof o=="object"&&!Array.isArray(o)&&typeof o.command=="string"?String(o.command):"",i=n.result;if(!i||typeof i!="object"||Array.isArray(i))return null;let a=i.success??i.failure;if(!a||typeof a!="object"||Array.isArray(a))return null;let l=a,m=typeof l.exitCode=="number"?l.exitCode:0;return{command:s,exitCode:m,stdout:typeof l.stdout=="string"?l.stdout:"",stderr:typeof l.stderr=="string"?l.stderr:"",interleaved:typeof l.interleavedOutput=="string"?l.interleavedOutput:""}}function Br(e,r){r.kind==="success"||r.kind==="search_no_matches"||(e.lastShellOutcome=r)}function fe(e){let r={firstEventAt:null,lastEventAt:null,currentTool:null,finalResult:null,error:null,lastShellOutcome:null};if(!vr(e))return r;let t=Cr(e,"utf8").split(`
7
+ `).filter(Boolean);for(let n of t){let o=E(n);if(!o)continue;let s=wr(o);if(s&&(r.firstEventAt||=s,r.lastEventAt=s),o.type==="stream_event"&&o.event&&typeof o.event=="object"&&o.event.type==="content_block_start"){let a=o.event.content_block;a?.type==="tool_use"&&(r.currentTool=String(a.name||"tool"))}if(o.type==="assistant"&&o.message&&typeof o.message=="object"){let a=o.message.content;if(Array.isArray(a)){let l=a.find(m=>m?.type==="tool_use");l&&(r.currentTool=String(l.name||r.currentTool))}}if(o.type==="tool_call"&&o.subtype==="started"){let a=o.tool_call&&typeof o.tool_call=="object"&&!Array.isArray(o.tool_call)?o.tool_call:void 0,l=Pr(a);l&&(r.currentTool=l)}let i=Wr(o);i&&Br(r,de({command:i.command,exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr,interleavedOutput:i.interleaved})),o.type==="result"&&Or(r,o)}return r}var pe=c(()=>{"use strict";me();p()});function Nr(e,r=240){let t=e.replace(/\s+/g," ").trim();return t.length>r?`${t.slice(0,r-1)}\u2026`:t}function ge(e){let r=(e??"").trim();if(!r)return null;for(let t of Tr)if(t.test.test(r))return{blocked:!0,reason:`${t.label}: ${Nr(r)}`};return null}var Tr,he=c(()=>{"use strict";Tr=[{test:/\b(?:invalid|unknown|unsupported|unrecognized)\b[^.\n]*\bmodel\b/i,label:"provider rejected the requested model"},{test:/\bmodel\b[^.\n]*\b(?:not\s+(?:found|supported|available|recognized|valid)|is\s+not\s+valid|does\s+not\s+exist)/i,label:"provider rejected the requested model"},{test:/\b(?:did you mean|available models|choose (?:a|one of)|supported models)\b/i,label:"provider rejected the requested model"},{test:/model preflight failed/i,label:"model/provider preflight failed"},{test:/\b(?:command not found|ENOENT|is the .*CLI on PATH|executable not found|no such file or directory)\b/i,label:"provider CLI is missing or not on PATH"},{test:/\bfailed to spawn\b/i,label:"provider failed to spawn the worker process"},{test:/\b(?:not logged in|unauthorized|authentication (?:failed|required)|invalid api key|missing api key|401)\b/i,label:"provider authentication failed"}]});function ke(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Ur(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function Ir(e){return!e?.checked||e.headIsAncestorOfBase!==!1?null:ke(e.head)}function Kr(e,r,t){let n=["exited_with_changes_salvage"];if((e==="uncommitted"||e==="both")&&n.push(`${r} uncommitted change${r===1?"":"s"} with no final result`),(e==="committed_ahead"||e==="both")&&t){let o=t.length>12?t.slice(0,12):t;n.push(`commit ${o} ahead of base with no final result`)}return n.push("review worktree \u2014 commit, open a PR, or run a salvage worker before discarding"),n.join(": ")}function ye(e){if(e.alive||Ur(e.finalResult))return null;let r=(e.changedFiles??[]).filter(i=>i.trim()).length,t=ke(e.headCommit)??Ir(e.gitAncestry),n=r>0,o=!!t;if(!n&&!o)return{kind:"none",salvageable:!1,uncommittedCount:0,headCommit:null,attentionReason:"process exited without a final result"};let s=n&&o?"both":n?"uncommitted":"committed_ahead";return{kind:s,salvageable:!0,uncommittedCount:r,headCommit:t,attentionReason:Kr(s,r,t)}}var be=c(()=>{"use strict"});var Hr,Pt,Re=c(()=>{"use strict";Hr=["ANTHROPIC_API_KEY","ANALYST_API_KEY","RECRUITER_API_KEY","AUTH_SECRET","NEXTAUTH_SECRET","DATABASE_URL","PRODUCTION_DATABASE_URL","KYNVER_PRODUCTION_DATABASE_URL","REDIS_URL","GOOGLE_CLIENT_SECRET","GITHUB_CLIENT_SECRET","KYNVER_API_KEY","KYNVER_SERVICE_SECRET","KYNVER_RUNTIME_SECRET","KYNVER_CRON_SECRET","OPENCLAW_CRON_SECRET","QSTASH_TOKEN","QSTASH_CURRENT_SIGNING_KEY","QSTASH_NEXT_SIGNING_KEY","TOOL_SECRETS_KEK","TOOL_EXECUTOR_DISPATCH_SECRET","CLOUDFLARE_API_TOKEN","STRIPE_SECRET_KEY","STRIPE_WEBHOOK_SECRET","STRIPE_IDENTITY_WEBHOOK_SECRET","VOYAGE_API_KEY","PERPLEXITY_API_KEY","FRED_API_KEY","FMP_API_KEY","CURSOR_API_KEY"],Pt=new Set(Hr)});import{spawnSync as Se}from"node:child_process";function Mr(e,r,t={}){let n=Se("git",r,I({cwd:e,encoding:"utf8"}));if(n.status!==0&&!t.allowFailure){let o=`git ${r.join(" ")} failed: ${n.stderr||n.stdout}`;if(t.throwError)throw new Error(o);re(o)}return n.stdout||""}function _e(e){return Mr(e,["status","--short"],{allowFailure:!0}).split(`
8
+ `).map(r=>r.trim()).filter(Boolean)}function w(e,r){try{let t=Se("git",r,I({cwd:e,encoding:"utf8"}));return{status:t.status,stdout:t.stdout||"",stderr:t.stderr||"",error:t.error?t.error.message:null}}catch(t){return{status:null,stdout:"",stderr:"",error:t.message}}}function xe(e,r,t){let n=w(e,["merge-base","--is-ancestor",r,t]);return n.status===0?{isAncestor:!0,error:null}:n.status===1?{isAncestor:!1,error:null}:{isAncestor:null,error:n.error||n.stderr||n.stdout||`git exited ${n.status}`}}function Ee(e,r="origin/main"){let t=typeof r=="string"?{base:r}:r,n=t.baseCommit?.trim()||t.base?.trim()||"origin/main",o=t.baseCommit?.trim()||null;if(!e)return $(n,"missing worktree path");let s=w(e,["rev-parse","HEAD"]);if(s.status!==0)return $(n,s.error||s.stderr||s.stdout||"failed to resolve HEAD");let i;if(o)i=o;else{let f=w(e,["rev-parse",n]);if(f.status!==0)return $(n,f.error||f.stderr||f.stdout||`failed to resolve ${n}`,s.stdout.trim());i=f.stdout.trim()}let a=s.stdout.trim();if(a===i)return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:!0,headIsAncestorOfBase:!0,relation:"synced"};let l=xe(e,i,a),m=xe(e,a,i),d=l.error||m.error||void 0;if(l.isAncestor==null||m.isAncestor==null)return{checked:!1,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:m.isAncestor,relation:"unknown",...d?{error:d}:{}};let u=l.isAncestor?"ahead":m.isAncestor?"merged":"diverged";return{checked:!0,base:n,head:a,baseHead:i,baseIsAncestorOfHead:l.isAncestor,headIsAncestorOfBase:m.isAncestor,relation:u,...d?{error:d}:{}}}function $(e,r,t=null){return{checked:!1,base:e,head:t,baseHead:null,baseIsAncestorOfHead:null,headIsAncestorOfBase:null,relation:"unknown",error:r}}var D=c(()=>{"use strict";p();Re()});function S(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Fr(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="boolean"?e:Array.isArray(e)?e.length>0:typeof e=="object"?Object.keys(e).length>0:!0}function $r(e){if(S(e.headCommit)||S(e.prUrl)||S(e.artifactBundlePath)||S(e.patchPath))return!0;let r=e.gitAncestry;return!!(r?.checked&&r.headIsAncestorOfBase===!1&&S(r.head))}function Ae(e){return Fr(e.finalResult)?e.changedFiles.length===0?{blocked:!1}:$r(e)?{blocked:!0,detail:`Worktree has ${e.changedFiles.length} uncommitted change(s); commit or discard before landing`}:{blocked:!0,reason:"dirty_worktree_no_pr",detail:`Worktree has ${e.changedFiles.length} uncommitted change(s) with no commit or PR; commit, open a PR, or discard before landing`}:{blocked:!1}}function ve(e){if(e.blocked)return e.detail??e.reason??"dirty_worktree_no_pr"}var Ce=c(()=>{"use strict"});function L(e){let r=e.trim();if(!r.startsWith("{"))return null;try{let t=JSON.parse(r);if(t&&typeof t=="object"&&!Array.isArray(t))return t}catch{return null}return null}function we(e){let r=e.targetPrReconciliation??e.target_pr_reconciliation??e.targetPrs??e.target_prs;return Array.isArray(r)?r.length:0}function P(e){let r=e.trim();if(!r)return null;let t=L(r);if(t)return t;let n=[],o=/```(?:json)?\s*([\s\S]*?)```/gi,s;for(;(s=o.exec(r))!==null;){let d=L(s[1]??"");d&&n.push(d)}let i=r.indexOf("{"),a=r.lastIndexOf("}");if(i>=0&&a>i){let d=L(r.slice(i,a+1));d&&n.push(d)}if(n.length===0)return null;let l=n[n.length-1],m=we(l);for(let d of n){let u=we(d);u>m&&(l=d,m=u)}return l}var j=c(()=>{"use strict"});function b(e){if(typeof e!="string")return null;let r=e.trim();return r.length?r:null}function Dr(e){return e==null?!1:typeof e=="string"?e.trim().length>0:typeof e=="object"?Object.keys(e).length>0:!0}function y(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`https://github.com/${r[1]}/pull/${r[2]}`:b(e)}function O(e){let r=e.trim().match(/github\.com\/([^/]+\/[^/]+)\/(?:pull|pulls)\/(\d+)/i);return r?`${r[1].toLowerCase()}/pull/${r[2]}`:e.trim().toLowerCase()}function Pe(e){let r=null;if(typeof e=="string"){let o=P(e);o&&(r=o)}else e&&typeof e=="object"&&!Array.isArray(e)&&(r=e);if(!r)return[];let t=r.targetPrReconciliation??r.target_pr_reconciliation;if(!Array.isArray(t))return[];let n=[];for(let o of t){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,i=y(String(s.prUrl??s.pr_url??"")),a=b(s.outcome);!i||a!=="merged"&&a!=="skipped"&&a!=="blocked"||n.push({prUrl:i,outcome:a,mergeCommit:b(s.mergeCommit??s.merge_commit),reason:b(s.reason)})}return n}function Oe(e,r){let t=[],n=y(b(e.prUrl)??"");if(n&&t.push(n),r&&typeof r=="object"&&!Array.isArray(r)){let o=r,s=y(String(o.prUrl??o.pr_url??""));s&&t.push(s)}return[...new Set(t)]}function We(e){let{contract:r,snapshot:t}=e,n=e.finalResult??t.finalResult;if(!r.landingOnly&&r.targetPrUrls.length===0&&!r.repairEnforceOriginalPr)return{blocked:!1};if(!Dr(n))return(r.requiresTargetPrReconciliation??(r.landingOnly||!!r.repairEnforceOriginalPr||r.targetPrUrls.length>0))&&r.targetPrUrls.length>0?{blocked:!0,reason:"missing_target_pr_reconciliation",detail:`Final result required to reconcile target PR(s): ${r.targetPrUrls.join(", ")}`}:{blocked:!1};if(!(r.requiresTargetPrReconciliation??(r.landingOnly||!!r.repairEnforceOriginalPr||r.targetPrUrls.length>0))&&!r.repairEnforceOriginalPr)return{blocked:!1};let s=r.repairEnforceOriginalPr?y(b(r.targetPrUrl)??"")??(r.targetPrUrls.length===1?y(r.targetPrUrls[0]):null):null;if(s){let u=Oe(t,n);if(!(n&&typeof n=="object"&&!Array.isArray(n)&&n.supersedesOriginalTargetPr===!0)){for(let k of u)if(k!==s)return{blocked:!0,reason:"duplicate_repair_pr",detail:`Repair worker opened or attached PR ${k} instead of canonical target ${s}`}}let g=Pe(n).find(k=>k.prUrl===s);if(!g||g.outcome!=="merged"&&!(g.reason?.trim()&&(g.outcome==="skipped"||g.outcome==="blocked")))return{blocked:!0,reason:"missing_repair_target_reconciliation",detail:`Repair worker must reconcile target PR ${s}`}}let i=Pe(n),a=new Map(i.map(u=>[O(u.prUrl),u])),l=new Set(r.targetPrUrls.map(u=>O(y(u)??u)).filter(Boolean)),m=Oe(t,n);if(r.landingOnly)for(let u of m){if(l.size>0&&!l.has(O(u)))return{blocked:!0,reason:"unrelated_implementation_pr",detail:`Landing-only worker attached unrelated PR ${u}`};if(l.size===0)return{blocked:!0,reason:"unrelated_implementation_pr",detail:"Landing-only worker must not open new implementation PRs"}}if(r.targetPrUrls.length===0)return{blocked:!1};let d=[];for(let u of r.targetPrUrls){let f=O(y(u)??u),h=a.get(f);if(!h){d.push(f);continue}h.outcome!=="merged"&&!h.reason?.trim()&&d.push(f)}return d.length>0?{blocked:!0,reason:d.every(u=>a.has(u))?"incomplete_target_pr_landing":"missing_target_pr_reconciliation",detail:`Target PR reconciliation incomplete: ${d.join(", ")}`}:{blocked:!1}}function Be(e){if(e.blocked)return e.detail??e.reason}var Te=c(()=>{"use strict";j()});function jr(e){let r=Date.now();if(e.completionBlocker&&!Ne(e.completionBlocker))return{state:"blocked",reason:e.completionBlocker};if(e.finalResult){if(e.localOnly&&Yr(e.finalResult))return{state:"done",reason:"local-only worker superseded by merged PR"};let o={finalResult:e.finalResult,changedFiles:e.changedFiles??[],gitAncestry:e.gitAncestry??null,prUrl:e.prUrl??null},s=Ae(o);if(s.blocked){let i=ve(s);return{state:"needs_attention",reason:s.reason?`landing blocked (${s.reason}): ${i}`:`landing blocked: ${i}`}}if(e.landingContract){let i=We({contract:e.landingContract,snapshot:o,finalResult:e.finalResult}),a=Be(i);if(a)return{state:"needs_attention",reason:i.reason?`landing contract (${i.reason}): ${a}`:`landing contract: ${a}`}}return{state:"done",reason:"final result recorded"}}if(!e.alive){if(Gr(e))return{state:"done",reason:"empty abandoned worker record"};let o=ge(e.error);if(o)return{state:"blocked",reason:o.reason};let s=ye({alive:!1,finalResult:null,changedFiles:e.changedFiles,gitAncestry:e.gitAncestry});if(s?.salvageable){let a=e.error?.trim();return{state:"needs_attention",reason:a?`${s.attentionReason} (${a})`:s.attentionReason}}let i=e.error?.trim();return{state:"needs_attention",reason:i?`process exited without a final result: ${i}`:s?.attentionReason??"process exited without a final result"}}if(e.heartbeatBlocker)return{state:"blocked",reason:`worker heartbeat reported blocker: ${e.heartbeatBlocker}`};let t=e.startedAt?Date.parse(e.startedAt):NaN;if(!e.firstEventAt&&e.stdoutBytes===0&&e.heartbeatBytes===0&&Number.isFinite(t)&&r-t>Lr)return{state:"needs_attention",reason:`no first stream event ${K(t)}s after start`};let n=e.lastActivityAt?Date.parse(e.lastActivityAt):NaN;return Number.isFinite(n)&&r-n>W?{state:"stale",reason:`no log/event/heartbeat activity for ${K(n)}s`}:{state:"ok",reason:"recent activity"}}function Ne(e){let r=e?.trim();return r?/completion acknowledged but board not advanced/i.test(r)&&/task already terminal/i.test(r):!1}function Gr(e){return e.finalResult||e.taskId||e.agentOsId||e.stdoutBytes>0||(e.stderrBytes??0)>0||e.heartbeatBytes>0||e.error?.trim()||(e.changedFiles??[]).some(r=>r.trim())?!1:/empty worker dir|marked abandoned/i.test(e.reconcileReason??"")}function Yr(e){let r=null;if(typeof e=="string"?r=P(e):e&&typeof e=="object"&&!Array.isArray(e)&&(r=e),!r)return!1;let t=r.targetPrReconciliation??r.target_pr_reconciliation;return Array.isArray(t)?t.some(n=>!n||typeof n!="object"||Array.isArray(n)?!1:String(n.outcome??"").trim()==="merged"):!1}function Vr(e,r,t){let n=e.completionSnapshot?.finalResult;return e.completionAckSource==="local-pr-merged-reconcile"&&n!==void 0&&n!==null?n:r||(n??se(t))}function Ue(e,r={}){let t=fe(e.stdoutPath),n=ie(e.heartbeatPath),o=typeof e.completionReportedAt=="string"&&e.completionReportedAt.trim().length>0,s=Vr(e,t.finalResult,n),i=o?!1:C(e.pid),a=A(e.stdoutPath),l=A(e.stderrPath),m=A(e.heartbeatPath),d=_e(e.worktreePath),u=Ee(e.worktreePath,{base:r.base,baseCommit:r.baseCommit}),f=ne([t.lastEventAt,n.lastHeartbeatAt,v(e.stdoutPath),v(e.stderrPath),v(e.heartbeatPath)]),h=t.error||!i&&!s&&te(e.stderrPath,10).trim()||void 0,g=typeof e.completionBlocker=="string"&&e.completionBlocker.trim()?e.completionBlocker.trim():null,k=Ne(g)?null:g,qe=e.repairTargetPrUrl?{landingOnly:!1,targetPrUrls:[e.repairTargetPrUrl],targetPrUrl:e.repairTargetPrUrl,repairEnforceOriginalPr:!0}:null,N=jr({alive:i,finalResult:s,firstEventAt:t.firstEventAt,stdoutBytes:a,stderrBytes:l,heartbeatBytes:m,lastActivityAt:f,heartbeatBlocker:n.heartbeatBlocker,startedAt:e.startedAt,error:h,changedFiles:d,gitAncestry:u,completionBlocker:k,landingContract:qe,prUrl:e.repairTargetPrUrl??e.taskPrUrl??null,localOnly:e.localOnly===!0,taskId:e.taskId??null,agentOsId:e.agentOsId??null,reconcileReason:e.reconcileReason??null}),Xe=k||N.state==="blocked"?"blocked":o||N.state==="done"?"done":s?"exited":i?"running":"exited";return{runId:e.runId,worker:e.name,pid:e.pid,alive:i,status:Xe,attention:N,branch:e.branch,worktreePath:e.worktreePath,ownedPaths:e.ownedPaths,stdoutBytes:a,stderrBytes:l,heartbeatBytes:m,firstEventAt:t.firstEventAt,lastEventAt:t.lastEventAt,lastActivityAt:f,currentTool:o?null:t.currentTool,heartbeatCount:n.heartbeatCount,lastHeartbeatAt:n.lastHeartbeatAt,lastHeartbeatPhase:n.lastHeartbeatPhase,lastHeartbeatSummary:n.lastHeartbeatSummary,heartbeatBlocker:n.heartbeatBlocker,timestampAnomalies:n.timestampAnomalies,finalResult:s,error:h,changedFiles:d,gitAncestry:u,instructionPolicyFingerprint:e.instructionPolicyFingerprint??null,instructionPolicyEvidence:e.instructionPolicyEvidence??null,model:e.model??e.orchestrationAudit?.model??null,provider:e.orchestrationAudit?.provider??null,boxKind:e.boxKind??null,boxId:e.boxId??null,runtimeId:e.runtimeId??null,personaSlug:e.personaSlug??null,dispatched:e.dispatched??null,localOnly:e.localOnly??null}}function Ie(e){return!!(e.finalResult||e.alive===!1||e.status==="exited"||e.status==="done")}function Ke(e){return e.finalResult?e.attention.state==="needs_attention"||e.attention.state==="blocked":!1}var Lr,W,_=c(()=>{"use strict";ae();pe();he();be();D();Ce();Te();j();p();Lr=18e4,W=6e5});var B=c(()=>{"use strict"});var $e=c(()=>{"use strict";D();B()});var G=c(()=>{"use strict"});var De=c(()=>{"use strict"});var cn,un,Le=c(()=>{"use strict";cn=25*1024*1024*1024,un=12*1024*1024*1024});var pn,gn,Y=c(()=>{"use strict";Le();pn=30*1024*1024*1024,gn=15*1024*1024*1024});var je=c(()=>{"use strict";T();p()});var Ge=c(()=>{"use strict";_()});var rt,tt,Ye=c(()=>{"use strict";De();J();G();z();Y();T();je();Ge();p();rt=500*1024*1024,tt=4*1024*1024*1024});var z=c(()=>{"use strict";Ye()});import{homedir as ot,totalmem as Zn}from"node:os";import q from"node:path";var Ve,ao,lo,co,uo,J=c(()=>{"use strict";$e();B();p();G();z();Y();Ve=q.join(ot(),".kynver"),ao=q.join(Ve,"config.json"),lo=q.join(Ve,"credentials"),co=500*1024*1024,uo=4*1024*1024*1024});import{homedir as st}from"node:os";import it from"node:path";var yo,ze=c(()=>{"use strict";J();B();p();yo=it.join(st(),".openclaw","harness")});var T=c(()=>{"use strict";ze();p()});_();var He="kynver-harness:",zr="@runner:";function Me(e){return e?.trim()?e.trim():null}function Jr(e){let r=Me(e);if(!r?.startsWith(He))return null;let t=r.slice(He.length),n=t.indexOf(zr);return n>=0?t.slice(0,n).trim()||null:t.trim()||null}function Fe(e,r){let t=Me(r);return t?Jr(e)===t:!1}_();p();function qr(e){let{worker:r,status:t,taskLease:n}=e,o=n?.leaseOwner??null;if(r.dispatched&&n){if(n.status==="running"&&o&&!Fe(o,r.runId))return{health:"orphaned",reason:`task lease held by ${o}, expected harness run ${r.runId}`};if(n.status==="running"&&!t.alive&&!t.finalResult)return{health:"orphaned",reason:"board task running but worker process is not alive"}}if(r.status==="running"&&!t.alive&&!t.finalResult)return{health:"orphaned",reason:"worker.json still running but process is dead"};if(t.attention.state==="stale")return{health:"stale",reason:t.attention.reason};let s=t.lastHeartbeatAt?Date.parse(t.lastHeartbeatAt):NaN;return t.alive&&Number.isFinite(s)&&Date.now()-s>W?{health:"stale",reason:`heartbeat older than ${Math.floor(W/1e3)}s`}:t.alive&&r.pid&&!C(r.pid)?{health:"orphaned",reason:"pid recorded but process is not alive"}:n?.status==="running"&&!t.alive&&t.finalResult?{health:"healthy",reason:"finished worker awaiting completion replay"}:{health:"healthy",reason:t.attention.reason||"worker within expected lifecycle bounds"}}T();function Je(e){return!!e.completionReportedAt?.trim()}_();function at(e){let{worker:r,status:t}=e,n=[];r.localOnly&&n.push("local-only worker (no board linkage)"),(!r.agentOsId||!r.taskId)&&n.push("missing agentOsId/taskId linkage"),Je(r)&&n.push("completion already acknowledged"),r.completionBlocker&&n.push(r.completionBlocker),t.heartbeatBlocker&&t.alive&&n.push(`worker heartbeat blocker: ${t.heartbeatBlocker}`),t.attention.state==="blocked"&&n.push(t.attention.reason||"worker attention blocked"),Ke(t)&&n.push(t.attention.reason||"landing gate blocked");let o=Ie(t),s;return o?t.finalResult?s="final_result":t.alive?s="terminal_status":s="process_exited":n.push("worker has not reached a terminal condition"),{eligible:o&&n.length===0,terminalVerified:o,terminalReason:s,blockers:n}}export{at as assessAutoCompleteEligibility,qr as classifyWorkerHealth,Ue as computeWorkerStatus};
@@ -11,6 +11,11 @@ export interface WorkerPersonaCatalogEntry {
11
11
  /** Default plan progress role when enriching harness tasks. */
12
12
  defaultRoleLane: WorkerPersonaDefaultRoleLane;
13
13
  }
14
+ /**
15
+ * Embedded structural catalog (slugs, display names, lanes; generic
16
+ * descriptions). Lane-derivation helpers use this so dispatch semantics are
17
+ * stable regardless of bundle state.
18
+ */
14
19
  export declare const WORKER_PERSONA_CATALOG: readonly WorkerPersonaCatalogEntry[];
15
20
  export type WorkerPersonaCatalogSlug = (typeof WORKER_PERSONA_CATALOG)[number]["slug"];
16
21
  export declare function getWorkerPersonaCatalogEntry(slug: string | null | undefined): WorkerPersonaCatalogEntry | null;
@@ -1 +1,5 @@
1
- var i=["implementation","review","landing"],o=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"],n=[{slug:"ghost",displayName:"Ghost",description:"Orchestration \u2014 coordinates lanes, handoffs, and operator decisions.",dispatchLane:null,defaultRoleLane:"system"},{slug:"astra",displayName:"Astra",description:"Planning \u2014 plan authoring, milestones, and operational flow design.",dispatchLane:"implementation",defaultRoleLane:"plan_author"},{slug:"rhea",displayName:"Rhea",description:"Runtime / control-plane implementation \u2014 harness, dispatch, and AgentOS plumbing.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"mnemo",displayName:"Mnemo",description:"Memory-quality implementation \u2014 MARM lanes, retrieval hygiene, and consolidation.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"sentinel",displayName:"Sentinel",description:"Security / privacy implementation and security verification gates.",dispatchLane:"review",defaultRoleLane:"deep_reviewer"},{slug:"pixel",displayName:"Pixel",description:"Frontend \u2014 Command Center UI, dashboards, and client surfaces.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"schema",displayName:"Schema",description:"Data / migrations \u2014 Prisma schema, seeds, and persistence contracts.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"atlas",displayName:"Atlas",description:"Infra / reliability \u2014 deploy pipelines, observability, and runtime health.",dispatchLane:"implementation",defaultRoleLane:"runtime_verifier"},{slug:"bridge",displayName:"Bridge",description:"Integrations / MCP \u2014 tool manifests, OpenClaw bridges, and cross-service wiring.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"catalyst",displayName:"Catalyst",description:"Product / domain \u2014 business rules, domain packs, and feature semantics.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"lorentz",displayName:"Lorentz",description:"Deep/adversarial review lane expert for risk, correctness, and safety gates. Run adversarial review and validation gating.",dispatchLane:"review",defaultRoleLane:"report_reviewer"},{slug:"dalton",displayName:"Dalton",description:"Landing-only \u2014 merge-ready handoff and final verification evidence; no implementation ownership.",dispatchLane:"landing",defaultRoleLane:"implementer"}],a=new Map(n.map(e=>[e.slug,e]));function t(e){if(!e)return null;let r=e.trim().toLowerCase();return a.get(r)??null}function l(e){return t(e)?.dispatchLane??null}function s(e){return t(e)?.defaultRoleLane??null}function p(e){return e?a.has(e.trim().toLowerCase()):!1}function d(){return n.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function u(){return n.filter(e=>e.dispatchLane==="landing").map(e=>e.slug)}export{n as WORKER_PERSONA_CATALOG,o as WORKER_PERSONA_DEFAULT_ROLE_LANES,i as WORKER_PERSONA_DISPATCH_LANES,s as getPersonaDefaultRoleLane,l as getPersonaDispatchLane,t as getWorkerPersonaCatalogEntry,p as isKnownWorkerPersonaSlug,u as workerPersonaLandingSlugs,d as workerPersonaReviewSlugs};
1
+ var d="embedded-1",c=[{slug:"ghost",displayName:"Ghost",description:"Orchestration persona.",dispatchLane:null,defaultRoleLane:"system"},{slug:"astra",displayName:"Astra",description:"Planning persona.",dispatchLane:"implementation",defaultRoleLane:"plan_author"},{slug:"rhea",displayName:"Rhea",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"mnemo",displayName:"Mnemo",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"sentinel",displayName:"Sentinel",description:"Review persona.",dispatchLane:"review",defaultRoleLane:"deep_reviewer"},{slug:"pixel",displayName:"Pixel",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"schema",displayName:"Schema",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"atlas",displayName:"Atlas",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"runtime_verifier"},{slug:"bridge",displayName:"Bridge",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"catalyst",displayName:"Catalyst",description:"Implementation persona.",dispatchLane:"implementation",defaultRoleLane:"implementer"},{slug:"lorentz",displayName:"Lorentz",description:"Review persona.",dispatchLane:"review",defaultRoleLane:"report_reviewer"},{slug:"dalton",displayName:"Dalton",description:"Landing persona.",dispatchLane:"landing",defaultRoleLane:"implementer"}],m={"worker.prompt.core_rules":["Structured final result (recommended): record completion as JSON with summary, files, PR URLs, verification, risks, and blockers.","Completion handoff (required): before you stop, summarize the outcome in your last message and append a heartbeat line with phase `complete`. Commit your work cleanly and open a GitHub PR (draft OK) for substantial changes \u2014 never leave uncommitted changes behind without reporting them.","Review-only workers must not open new implementation PRs \u2014 review the existing PR and record a verdict in the final result.","Keep verification targeted to touched paths; avoid full-monorepo verification unless explicitly requested.","Do not run `npm publish`.","If verification fails, append a heartbeat line immediately with the failing command, reason, and next action."].join(`
2
+ `),"worker.prompt.progress.compact":"Plan progress: when planId is set, report progress with `kynver plan progress --plan <planId> --row <rowKey> --role implementer --status in_progress|running|partial|blocked`. Do not mark rows done from the worker CLI.","worker.prompt.progress.full":["Structured plan progress (required when planId is set):","- Report checkpoints with `kynver plan progress --plan <planId> --row <rowKey> --role implementer --status in_progress|running|partial|blocked`.","- When a slice is finished, emit `partial` with evidence (`--evidence pr:<url>`, `--evidence path:<file>`, or `--evidence command:<cmd>`).","- Do not propose or confirm row `done` from the worker CLI."].join(`
3
+ `),"worker.prompt.merge_gate.compact":"Verification cost control: prefer local verification before requesting CI runs; do not push empty commits to re-trigger CI; record verification evidence on the PR.","worker.prompt.merge_gate.full":["Verification cost control:","- Prefer local verification of touched paths before requesting any CI run.","- Do not push empty commits to re-trigger CI.","- Record verification evidence on the PR before requesting review."].join(`
4
+ `),"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(`
5
+ `)},f={"harness.maxTaskAttempts":4,"harness.dispatchCooldownMs":5e3,"daemon.idleIntervalMs":5*6e4,"daemon.maxIdleStreak":10},r={version:d,generatedAt:"1970-01-01T00:00:00.000Z",personas:c,instructions:m,policyThresholds:f};var g=r;function o(e){if(!e)return null;let n=e.trim().toLowerCase();return g.personas.find(t=>t.slug===n)??null}var h=["implementation","review","landing"],L=["plan_author","implementer","report_reviewer","deep_reviewer","runtime_verifier","system"];function R(e){return h.includes(e)}function y(e){return L.includes(e)}function l(e){return{slug:e.slug,displayName:e.displayName,description:e.description,dispatchLane:e.dispatchLane===null||R(e.dispatchLane)?e.dispatchLane:null,defaultRoleLane:y(e.defaultRoleLane)?e.defaultRoleLane:"implementer"}}var a=r.personas.map(l),u=new Map(a.map(e=>[e.slug,e]));function p(e){if(!e)return null;let n=e.trim().toLowerCase(),t=u.get(n)??null,i=o(n);if(!i)return t;let s=l(i);return t?{...s,dispatchLane:t.dispatchLane,defaultRoleLane:t.defaultRoleLane}:s}function _(e){return p(e)?.dispatchLane??null}function k(e){return p(e)?.defaultRoleLane??null}function D(e){if(!e)return!1;let n=e.trim().toLowerCase();return u.has(n)||o(n)!==null}function N(){return a.filter(e=>e.dispatchLane==="review").map(e=>e.slug)}function S(){return a.filter(e=>e.dispatchLane==="landing").map(e=>e.slug)}export{a as WORKER_PERSONA_CATALOG,L as WORKER_PERSONA_DEFAULT_ROLE_LANES,h as WORKER_PERSONA_DISPATCH_LANES,k as getPersonaDefaultRoleLane,_ as getPersonaDispatchLane,p as getWorkerPersonaCatalogEntry,D as isKnownWorkerPersonaSlug,S as workerPersonaLandingSlugs,N as workerPersonaReviewSlugs};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kynver-app/runtime",
3
- "version": "0.1.128",
3
+ "version": "0.1.129",
4
4
  "description": "Kynver AgentOS local execution runtime and CLI",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -19,6 +19,11 @@
19
19
  "import": "./dist/worker-persona-catalog.js",
20
20
  "default": "./dist/worker-persona-catalog.js"
21
21
  },
22
+ "./instruction-bundle": {
23
+ "types": "./dist/instruction-bundle/contract.d.ts",
24
+ "import": "./dist/instruction-bundle/contract.js",
25
+ "default": "./dist/instruction-bundle/contract.js"
26
+ },
22
27
  "./server/monitor": {
23
28
  "types": "./dist/server/monitor.d.ts",
24
29
  "import": "./dist/server/monitor.js",
@@ -87,7 +92,7 @@
87
92
  "README.md"
88
93
  ],
89
94
  "scripts": {
90
- "build": "esbuild src/cli.ts src/index.ts src/worker-persona-catalog.ts src/server/monitor.ts src/server/landing.ts src/server/worker-policy.ts src/server/orchestration.ts src/server/heavy-verification.ts src/server/memory-cost.ts src/server/pr-evidence.ts src/server/default-repo.ts src/server/cleanup.ts src/server/repo-search.ts src/server/harness-notice.ts src/server/memory-cost-enforce.ts --bundle --platform=node --format=esm --packages=external --outbase=src --outdir=dist --minify && tsc -p tsconfig.json --emitDeclarationOnly && node scripts/chmod-cli-bin.mjs",
95
+ "build": "esbuild src/cli.ts src/index.ts src/worker-persona-catalog.ts src/instruction-bundle/contract.ts src/server/monitor.ts src/server/landing.ts src/server/worker-policy.ts src/server/orchestration.ts src/server/heavy-verification.ts src/server/memory-cost.ts src/server/pr-evidence.ts src/server/default-repo.ts src/server/cleanup.ts src/server/repo-search.ts src/server/harness-notice.ts src/server/memory-cost-enforce.ts --bundle --platform=node --format=esm --packages=external --outbase=src --outdir=dist --minify && tsc -p tsconfig.json --emitDeclarationOnly && node scripts/chmod-cli-bin.mjs",
91
96
  "typecheck": "tsc -p tsconfig.json --noEmit",
92
97
  "test": "vitest run --config vitest.config.ts",
93
98
  "prepublishOnly": "node ../../scripts/npm-publish-guard.mjs && npm run build"