@kynver-app/runtime 0.1.3 → 0.1.4

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.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/cli.ts", "../src/config.ts", "../src/util.ts", "../src/callbacks.ts", "../src/disk-gate.ts", "../src/resource-gate.ts", "../src/run-store.ts", "../src/paths.ts", "../src/heartbeat.ts", "../src/stream.ts", "../src/git.ts", "../src/status.ts", "../src/supervisor.ts", "../src/prompt.ts", "../src/providers/claude.ts", "../src/providers/cursor.ts", "../src/providers/registry.ts", "../src/dispatch.ts", "../src/sweep.ts", "../src/worktree.ts", "../src/validate.ts", "../src/worker-ops.ts", "../src/pipeline-tick.ts", "../src/workspace-runtime-config.ts", "../src/daemon.ts"],
4
- "sourcesContent": ["#!/usr/bin/env node\r\nimport { mkdirSync } from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport { fileURLToPath } from \"node:url\";\r\nimport { parseArgs, runLogin, runSetup } from \"./config.js\";\r\nimport { dispatchRun } from \"./dispatch.js\";\r\nimport { getPaths } from \"./run-store.js\";\r\nimport { startWorker } from \"./supervisor.js\";\r\nimport { sweepRun } from \"./sweep.js\";\r\nimport { createRun, listRuns } from \"./worktree.js\";\r\nimport { completeWorker, runStatus, stopWorker, tailWorker, workerStatus } from \"./worker-ops.js\";\r\nimport { runDaemon } from \"./daemon.js\";\r\n\r\nfunction isHelpFlag(arg: string): boolean {\r\n return arg === \"help\" || arg === \"--help\" || arg === \"-h\";\r\n}\r\n\r\nfunction unknownCommand(scope?: string, action?: string): never {\r\n const cmd = [scope, action].filter(Boolean).join(\" \");\r\n console.error(`unknown command: ${cmd || \"(none)\"}`);\r\n usage(1);\r\n}\r\n\r\nexport function usage(code = 0): void {\r\n const out = code === 0 ? console.log : console.error;\r\n out(\r\n [\r\n \"Usage:\",\r\n \" kynver login --api-key KEY\",\r\n \" kynver setup [--api-base-url URL] [--agent-os-id ID] [--agent-os-slug SLUG] [--repo PATH] [--max-workers N] [--provider claude|cursor]\",\r\n \" kynver daemon --run RUN_ID --agent-os-id AOS_ID [--execute] [--interval-ms MS]\",\r\n \" kynver run create --repo /path/repo [--name name] [--base origin/main]\",\r\n \" kynver run list\",\r\n \" kynver run status --run RUN_ID\",\r\n \" kynver run dispatch --run RUN_ID --agent-os-id AOS_ID [--base-url URL] [--secret SECRET] [--execute] [--lane any|implementation|review|landing] [--max-starts 1] [--lease-ms MS] [--owned path[,path]] [--model claude-opus-4-7] [--disk-path /]\",\r\n \" kynver run sweep --run RUN_ID --agent-os-id AOS_ID [--base-url URL] [--secret SECRET] [--grace-ms MS]\",\r\n \" kynver worker start --run RUN_ID --name worker --task \\\"...\\\" [--owned path[,path]] [--model MODEL] [--provider claude|cursor] [--agent-os-id AOS_ID] [--task-id TASK_ID]\",\r\n \" kynver worker status --run RUN_ID --name worker\",\r\n \" kynver worker tail --run RUN_ID --name worker [--lines 40] [--raw]\",\r\n \" kynver worker stop --run RUN_ID --name worker\",\r\n \" kynver worker complete --run RUN_ID --name worker [--agent-os-id AOS_ID] [--task-id TASK_ID] [--base-url URL] [--secret SECRET]\",\r\n ].join(\"\\n\"),\r\n );\r\n process.exit(code);\r\n}\r\n\r\nexport async function main(argv = process.argv.slice(2)): Promise<void> {\r\n if (argv.length === 0 || isHelpFlag(argv[0]!)) return usage(0);\r\n\r\n const scope = argv.shift();\r\n let action: string | undefined;\r\n let rest: string[];\r\n\r\n if (scope === \"run\" || scope === \"worker\") {\r\n action = argv.shift();\r\n rest = argv;\r\n } else {\r\n rest = argv;\r\n }\r\n\r\n const args = parseArgs(rest);\r\n const { runsDir, worktreesDir } = getPaths();\r\n mkdirSync(runsDir, { recursive: true });\r\n mkdirSync(worktreesDir, { recursive: true });\r\n\r\n if (scope === \"login\") return void (await runLogin(args));\r\n if (scope === \"setup\") return void (await runSetup(args));\r\n if (scope === \"daemon\") return void (await runDaemon(args));\r\n\r\n if (scope === \"run\" && action === \"create\") return createRun(args);\r\n if (scope === \"run\" && action === \"list\") return listRuns();\r\n if (scope === \"run\" && action === \"status\") return runStatus(args);\r\n if (scope === \"run\" && action === \"dispatch\") return void (await dispatchRun(args));\r\n if (scope === \"run\" && action === \"sweep\") return void (await sweepRun(args));\r\n if (scope === \"worker\" && action === \"start\") return startWorker(args);\r\n if (scope === \"worker\" && action === \"status\") return workerStatus(args);\r\n if (scope === \"worker\" && action === \"tail\") return tailWorker(args);\r\n if (scope === \"worker\" && action === \"stop\") return stopWorker(args);\r\n if (scope === \"worker\" && action === \"complete\") return void (await completeWorker(args));\r\n\r\n unknownCommand(scope, action);\r\n}\r\n\r\nconst isCliEntry =\r\n process.argv[1] &&\r\n path.resolve(process.argv[1]) === path.resolve(fileURLToPath(import.meta.url));\r\n\r\nif (isCliEntry) {\r\n void main().catch((error) => {\r\n console.error(error);\r\n process.exit(1);\r\n });\r\n}\r\n", "import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\r\nimport { homedir } from \"node:os\";\r\nimport path from \"node:path\";\r\nimport { trimTrailingSlash } from \"./util.js\";\r\n\r\nexport interface KynverUserConfig {\r\n apiBaseUrl?: string;\r\n agentOsSlug?: string;\r\n agentOsId?: string;\r\n defaultRepo?: string;\r\n workerProvider?: string;\r\n harnessRoot?: string;\r\n /** Max concurrent workers on this machine. Omit to auto-size from RAM. */\r\n maxConcurrentWorkers?: number;\r\n /** @internal Advanced tuning \u2014 not required for setup. */\r\n perWorkerMemBytes?: number;\r\n /** @internal Advanced tuning \u2014 not required for setup. */\r\n memReserveBytes?: number;\r\n /** @internal Advanced tuning \u2014 not required for setup. */\r\n memUtilization?: number;\r\n}\r\n\r\nconst CONFIG_DIR = path.join(homedir(), \".kynver\");\r\nconst CONFIG_FILE = path.join(CONFIG_DIR, \"config.json\");\r\nconst CREDENTIALS_FILE = path.join(CONFIG_DIR, \"credentials\");\r\n\r\nexport function loadUserConfig(): KynverUserConfig {\r\n if (!existsSync(CONFIG_FILE)) return {};\r\n try {\r\n return JSON.parse(readFileSync(CONFIG_FILE, \"utf8\")) as KynverUserConfig;\r\n } catch {\r\n return {};\r\n }\r\n}\r\n\r\nexport function saveUserConfig(config: KynverUserConfig): void {\r\n mkdirSync(CONFIG_DIR, { recursive: true });\r\n writeFileSync(CONFIG_FILE, `${JSON.stringify(config, null, 2)}\\n`, { mode: 0o600 });\r\n}\r\n\r\nexport function loadApiKey(): string | undefined {\r\n if (process.env.KYNVER_API_KEY) return process.env.KYNVER_API_KEY;\r\n if (!existsSync(CREDENTIALS_FILE)) return undefined;\r\n try {\r\n const parsed = JSON.parse(readFileSync(CREDENTIALS_FILE, \"utf8\")) as { apiKey?: string };\r\n return parsed.apiKey;\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nexport function saveApiKey(apiKey: string): void {\r\n mkdirSync(CONFIG_DIR, { recursive: true });\r\n writeFileSync(CREDENTIALS_FILE, `${JSON.stringify({ apiKey }, null, 2)}\\n`, { mode: 0o600 });\r\n}\r\n\r\nexport function resolveBaseUrl(argsBaseUrl?: string): string {\r\n const baseUrl =\r\n argsBaseUrl ||\r\n process.env.KYNVER_API_URL ||\r\n process.env.OPENCLAW_CRON_FIRE_BASE_URL ||\r\n loadUserConfig().apiBaseUrl;\r\n if (!baseUrl) failConfig(\"requires --base-url, KYNVER_API_URL, OPENCLAW_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl\");\r\n return trimTrailingSlash(String(baseUrl));\r\n}\r\n\r\nexport function resolveCallbackSecret(argsSecret?: string): string {\r\n const secret =\r\n argsSecret ||\r\n process.env.KYNVER_RUNTIME_SECRET ||\r\n process.env.OPENCLAW_CRON_SECRET;\r\n if (!secret) failConfig(\"requires --secret, KYNVER_RUNTIME_SECRET, or OPENCLAW_CRON_SECRET\");\r\n return String(secret);\r\n}\r\n\r\nfunction failConfig(message: string): never {\r\n console.error(message);\r\n process.exit(1);\r\n}\r\n\r\nexport function parseArgs(argv: string[]): Record<string, string | boolean> {\r\n const args: Record<string, string | boolean> = {};\r\n for (let i = 0; i < argv.length; i++) {\r\n const item = argv[i];\r\n if (!item.startsWith(\"--\")) continue;\r\n const key = item.slice(2).replace(/-([a-z])/g, (_, c: string) => c.toUpperCase());\r\n const next = argv[i + 1];\r\n if (!next || next.startsWith(\"--\")) args[key] = true;\r\n else {\r\n args[key] = next;\r\n i++;\r\n }\r\n }\r\n return args;\r\n}\r\n\r\nexport async function runSetup(args: Record<string, string | boolean>): Promise<void> {\r\n const existing = loadUserConfig();\r\n const maxWorkersRaw =\r\n typeof args.maxWorkers === \"string\"\r\n ? args.maxWorkers\r\n : typeof args.maxConcurrentWorkers === \"string\"\r\n ? args.maxConcurrentWorkers\r\n : undefined;\r\n const config: KynverUserConfig = {\r\n ...existing,\r\n ...(typeof args.apiBaseUrl === \"string\" ? { apiBaseUrl: args.apiBaseUrl } : {}),\r\n ...(typeof args.agentOsSlug === \"string\" ? { agentOsSlug: args.agentOsSlug } : {}),\r\n ...(typeof args.agentOsId === \"string\" ? { agentOsId: args.agentOsId } : {}),\r\n ...(typeof args.repo === \"string\" ? { defaultRepo: args.repo } : {}),\r\n ...(typeof args.harnessRoot === \"string\" ? { harnessRoot: args.harnessRoot } : {}),\r\n ...(maxWorkersRaw ? { maxConcurrentWorkers: Math.max(1, Math.floor(Number(maxWorkersRaw))) } : {}),\r\n workerProvider: typeof args.provider === \"string\" ? args.provider : existing.workerProvider || \"claude\",\r\n };\r\n saveUserConfig(config);\r\n console.log(\r\n JSON.stringify(\r\n {\r\n ok: true,\r\n configPath: CONFIG_FILE,\r\n config,\r\n note:\r\n \"Set worker limit once with --max-workers N (or omit to auto-size from RAM). Advanced RAM tuning stays internal.\",\r\n },\r\n null,\r\n 2,\r\n ),\r\n );\r\n}\r\n\r\nexport async function runLogin(args: Record<string, string | boolean>): Promise<void> {\r\n const apiKey = typeof args.apiKey === \"string\" ? args.apiKey : process.env.KYNVER_API_KEY;\r\n if (!apiKey) failConfig(\"kynver login requires --api-key or KYNVER_API_KEY\");\r\n saveApiKey(apiKey);\r\n console.log(JSON.stringify({ ok: true, credentialsPath: CREDENTIALS_FILE }, null, 2));\r\n}\r\n", "import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from \"node:fs\";\r\nimport path from \"node:path\";\r\n\r\nexport function fail(message: string): never {\r\n console.error(message);\r\n process.exit(1);\r\n}\r\n\r\nexport function required(value: string | undefined, name: string): string {\r\n if (!value) fail(`missing ${name}`);\r\n return value;\r\n}\r\n\r\nexport function safeJson(line: string): unknown {\r\n try {\r\n return JSON.parse(line);\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nexport function readJson<T>(file: string, fallback?: T): T {\r\n try {\r\n return JSON.parse(readFileSync(file, \"utf8\")) as T;\r\n } catch (error) {\r\n if (arguments.length > 1) return fallback as T;\r\n fail(`failed to read ${file}: ${(error as Error).message}`);\r\n }\r\n}\r\n\r\nexport function writeJson(file: string, value: unknown): void {\r\n mkdirSync(path.dirname(file), { recursive: true });\r\n writeFileSync(file, `${JSON.stringify(value, null, 2)}\\n`);\r\n}\r\n\r\nexport function safeSlug(value: string | undefined): string {\r\n return (\r\n String(value || \"\")\r\n .toLowerCase()\r\n .replace(/[^a-z0-9._-]+/g, \"-\")\r\n .replace(/^-+|-+$/g, \"\") || \"worker\"\r\n );\r\n}\r\n\r\nexport function timestampSlug(name: string): string {\r\n return safeSlug(`${new Date().toISOString().replace(/[-:]/g, \"\").replace(/\\..+/, \"Z\")}-${name}`);\r\n}\r\n\r\nexport function splitCsv(value: string | undefined): string[] {\r\n return value ? String(value).split(\",\").map((item) => item.trim()).filter(Boolean) : [];\r\n}\r\n\r\nexport function trimTrailingSlash(url: string): string {\r\n return String(url).replace(/\\/+$/, \"\");\r\n}\r\n\r\nexport function oneLine(value: string): string {\r\n return String(value || \"\")\r\n .replace(/\\s+/g, \" \")\r\n .trim();\r\n}\r\n\r\nexport function fileSize(file: string): number {\r\n try {\r\n return statSync(file).size;\r\n } catch {\r\n return 0;\r\n }\r\n}\r\n\r\nexport function fileMtime(file: string): string | null {\r\n try {\r\n return statSync(file).mtime.toISOString();\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nexport function tailFile(file: string, lines: number): string {\r\n if (!existsSync(file)) return \"\";\r\n const data = readFileSync(file, \"utf8\");\r\n return data.split(\"\\n\").slice(-lines).join(\"\\n\");\r\n}\r\n\r\nexport function readMaybeFile(file: string | undefined): string {\r\n return file ? readFileSync(path.resolve(file), \"utf8\") : \"\";\r\n}\r\n\r\nexport function listRunIds(runsDir: string): string[] {\r\n if (!existsSync(runsDir)) return [];\r\n return readdirSync(runsDir, { withFileTypes: true })\r\n .filter((entry) => entry.isDirectory())\r\n .map((entry) => entry.name);\r\n}\r\n\r\nexport function sleepMs(ms: number): void {\r\n Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);\r\n}\r\n\r\nexport function isPidAlive(pid: number | undefined): boolean {\r\n if (!pid) return false;\r\n try {\r\n process.kill(pid, 0);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nexport function killWorkerProcess(pid: number, signal: NodeJS.Signals): void {\r\n try {\r\n process.kill(-pid, signal);\r\n } catch {\r\n process.kill(pid, signal);\r\n }\r\n}\r\n\r\nexport function latestIso(values: Array<string | null | undefined>): string | null {\r\n let best: string | null = null;\r\n let bestMs = -Infinity;\r\n for (const value of values) {\r\n if (!value) continue;\r\n const ms = Date.parse(value);\r\n if (Number.isFinite(ms) && ms > bestMs) {\r\n bestMs = ms;\r\n best = value;\r\n }\r\n }\r\n return best;\r\n}\r\n\r\nexport function secsAgo(ms: number): number {\r\n return Math.max(0, Math.round((Date.now() - ms) / 1000));\r\n}\r\n", "export interface DispatchNextDiskGateShape {\r\n ok: boolean;\r\n path: string;\r\n freeBytes: number;\r\n totalBytes: number;\r\n usedPercent: number;\r\n warnBelowBytes: number;\r\n criticalBelowBytes: number;\r\n maxUsedPercent: number;\r\n hardMaxUsedPercent: number;\r\n reason: string | null;\r\n}\r\n\r\nexport interface DispatchNextResourceGateShape {\r\n ok: boolean;\r\n totalMemBytes: number;\r\n freeMemBytes: number;\r\n memReserveBytes: number;\r\n perWorkerMemBytes: number;\r\n configuredMaxWorkers: number | null;\r\n capacityWorkers: number;\r\n maxConcurrentWorkers: number;\r\n activeWorkers: number;\r\n slotsAvailable: number;\r\n reason: string | null;\r\n}\r\n\r\nexport interface PostJsonResult {\r\n ok: boolean;\r\n status: number;\r\n response: unknown;\r\n}\r\n\r\nexport async function postJson(url: string, secret: string, body: unknown): Promise<PostJsonResult> {\r\n const res = await fetch(url, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"X-OpenClaw-Cron-Secret\": String(secret),\r\n \"X-Kynver-Runtime-Secret\": String(secret),\r\n },\r\n body: JSON.stringify(body),\r\n });\r\n let response: unknown = null;\r\n try {\r\n response = await res.json();\r\n } catch {\r\n response = null;\r\n }\r\n return { ok: res.ok, status: res.status, response };\r\n}\r\n\r\nexport async function getJson(url: string, secret: string): Promise<PostJsonResult> {\r\n const res = await fetch(url, {\r\n method: \"GET\",\r\n headers: {\r\n \"X-OpenClaw-Cron-Secret\": String(secret),\r\n \"X-Kynver-Runtime-Secret\": String(secret),\r\n },\r\n });\r\n let response: unknown = null;\r\n try {\r\n response = await res.json();\r\n } catch {\r\n response = null;\r\n }\r\n return { ok: res.ok, status: res.status, response };\r\n}\r\n", "import { statfsSync } from \"node:fs\";\r\nimport type { DispatchNextDiskGateShape } from \"./callbacks.js\";\r\n\r\nconst DEFAULT_WARN_FREE_BYTES = 30 * 1024 * 1024 * 1024;\r\nconst DEFAULT_CRITICAL_FREE_BYTES = 15 * 1024 * 1024 * 1024;\r\nconst DEFAULT_MAX_USED_PERCENT = 80;\r\nconst DEFAULT_HARD_MAX_USED_PERCENT = 90;\r\n\r\nexport interface ObserveDiskGateInput {\r\n diskPath?: string;\r\n diskFreeWarnBytes?: number;\r\n diskFreeCriticalBytes?: number;\r\n diskMaxUsedPercent?: number;\r\n diskHardMaxUsedPercent?: number;\r\n}\r\n\r\nexport function observeRunnerDiskGate(input: ObserveDiskGateInput = {}): DispatchNextDiskGateShape {\r\n const path = input.diskPath?.trim() || \"/\";\r\n const warnBelowBytes = input.diskFreeWarnBytes ?? DEFAULT_WARN_FREE_BYTES;\r\n const criticalBelowBytes = input.diskFreeCriticalBytes ?? DEFAULT_CRITICAL_FREE_BYTES;\r\n const maxUsedPercent = input.diskMaxUsedPercent ?? DEFAULT_MAX_USED_PERCENT;\r\n const hardMaxUsedPercent = input.diskHardMaxUsedPercent ?? DEFAULT_HARD_MAX_USED_PERCENT;\r\n\r\n const stats = statfsSync(path);\r\n const freeBytes = Number(stats.bavail) * Number(stats.bsize);\r\n const totalBytes = Number(stats.blocks) * Number(stats.bsize);\r\n const usedPercent = totalBytes > 0 ? ((totalBytes - freeBytes) / totalBytes) * 100 : 100;\r\n const lowFree = freeBytes < warnBelowBytes;\r\n const criticalFree = freeBytes < criticalBelowBytes;\r\n const highUse = usedPercent > maxUsedPercent;\r\n const hardHighUse = usedPercent > hardMaxUsedPercent;\r\n const ok = !lowFree && !criticalFree && !highUse && !hardHighUse;\r\n\r\n let reason: string | null = null;\r\n if (!ok) {\r\n reason = [\r\n criticalFree ? `free space below critical ${criticalBelowBytes} bytes` : null,\r\n lowFree ? `free space below warning ${warnBelowBytes} bytes` : null,\r\n hardHighUse ? `used percent above hard cap ${hardMaxUsedPercent}%` : null,\r\n highUse ? `used percent above cap ${maxUsedPercent}%` : null,\r\n ]\r\n .filter(Boolean)\r\n .join(\"; \");\r\n }\r\n\r\n return {\r\n ok,\r\n path,\r\n freeBytes,\r\n totalBytes,\r\n usedPercent,\r\n warnBelowBytes,\r\n criticalBelowBytes,\r\n maxUsedPercent,\r\n hardMaxUsedPercent,\r\n reason,\r\n };\r\n}\r\n", "import os from \"node:os\";\r\nimport path from \"node:path\";\r\nimport { loadUserConfig, type KynverUserConfig } from \"./config.js\";\r\nimport { loadRun, runDirectory } from \"./run-store.js\";\r\nimport { computeWorkerStatus } from \"./status.js\";\r\nimport { readJson, safeSlug } from \"./util.js\";\r\nimport type { HarnessWorkerRecord } from \"./status.js\";\r\n\r\n/** Default RAM budget per worker (~500 MiB, dogfood measured). Internal \u2014 not a setup knob. */\r\nexport const DEFAULT_PER_WORKER_MEM_BYTES = 500 * 1024 * 1024;\r\n\r\n/** Keep headroom for OS / IDE. Internal \u2014 not a setup knob. */\r\nexport const DEFAULT_MEM_RESERVE_BYTES = 4 * 1024 * 1024 * 1024;\r\n\r\n/** Fraction of total RAM used when auto-sizing worker cap. Internal. */\r\nexport const DEFAULT_MEM_UTILIZATION = 0.85;\r\n\r\n/** Auto cap when the user has not set maxConcurrentWorkers (safety on huge hosts). */\r\nexport const AUTO_MAX_WORKERS_CEILING = 64;\r\n\r\nexport interface RunnerResourceGateShape {\r\n ok: boolean;\r\n totalMemBytes: number;\r\n freeMemBytes: number;\r\n memReserveBytes: number;\r\n perWorkerMemBytes: number;\r\n configuredMaxWorkers: number | null;\r\n autoCap: number;\r\n capacityWorkers: number;\r\n maxConcurrentWorkers: number;\r\n activeWorkers: number;\r\n slotsAvailable: number;\r\n reason: string | null;\r\n}\r\n\r\nexport interface ObserveResourceGateInput {\r\n runId: string;\r\n config?: KynverUserConfig;\r\n /** Command Center / workspace override \u2014 wins over local config when set. */\r\n configuredMaxWorkersOverride?: number | null;\r\n /** Override active worker count (tests). */\r\n activeWorkers?: number;\r\n totalMemBytes?: number;\r\n freeMemBytes?: number;\r\n}\r\n\r\nfunction positiveInt(value: unknown, fallback: number): number {\r\n const n = Number(value);\r\n if (!Number.isFinite(n) || n <= 0) return fallback;\r\n return Math.floor(n);\r\n}\r\n\r\nfunction resolveResourceConfig(\r\n config: KynverUserConfig = loadUserConfig(),\r\n configuredMaxWorkersOverride?: number | null,\r\n) {\r\n const perWorkerMemBytes = positiveInt(config.perWorkerMemBytes, DEFAULT_PER_WORKER_MEM_BYTES);\r\n const memReserveBytes = positiveInt(config.memReserveBytes, DEFAULT_MEM_RESERVE_BYTES);\r\n const memUtilization = Math.min(\r\n 1,\r\n Math.max(0.1, Number(config.memUtilization) > 0 ? Number(config.memUtilization) : DEFAULT_MEM_UTILIZATION),\r\n );\r\n const envCap = process.env.KYNVER_MAX_WORKERS ? positiveInt(process.env.KYNVER_MAX_WORKERS, 0) || null : null;\r\n const configuredMaxWorkers =\r\n configuredMaxWorkersOverride !== undefined\r\n ? configuredMaxWorkersOverride\r\n : envCap ??\r\n (config.maxConcurrentWorkers !== undefined && config.maxConcurrentWorkers !== null\r\n ? positiveInt(config.maxConcurrentWorkers, 0) || null\r\n : null);\r\n return { perWorkerMemBytes, memReserveBytes, memUtilization, configuredMaxWorkers };\r\n}\r\n\r\n/** How many workers this host could run from RAM alone (before a user cap). */\r\nexport function computeAutoMaxWorkers(\r\n totalMemBytes: number,\r\n opts: { perWorkerMemBytes?: number; memReserveBytes?: number; memUtilization?: number } = {},\r\n): number {\r\n const perWorkerMemBytes = opts.perWorkerMemBytes ?? DEFAULT_PER_WORKER_MEM_BYTES;\r\n const memReserveBytes = opts.memReserveBytes ?? DEFAULT_MEM_RESERVE_BYTES;\r\n const memUtilization = opts.memUtilization ?? DEFAULT_MEM_UTILIZATION;\r\n const budgetBytes = Math.max(0, Math.floor(totalMemBytes * memUtilization) - memReserveBytes);\r\n const raw = Math.max(1, Math.floor(budgetBytes / perWorkerMemBytes));\r\n return Math.min(raw, AUTO_MAX_WORKERS_CEILING);\r\n}\r\n\r\n/** Count harness workers that are alive and still executing (not finished). */\r\nexport function countActiveWorkers(runId: string): number {\r\n const run = loadRun(runId);\r\n let active = 0;\r\n for (const name of Object.keys(run.workers || {})) {\r\n const worker = readJson<HarnessWorkerRecord>(\r\n path.join(runDirectory(run.id), \"workers\", safeSlug(name), \"worker.json\"),\r\n null,\r\n );\r\n if (!worker) continue;\r\n const status = computeWorkerStatus(worker);\r\n if (status.alive && !status.finalResult && status.attention.state !== \"done\") {\r\n active++;\r\n }\r\n }\r\n return active;\r\n}\r\n\r\n/**\r\n * Compute how many workers this host can run and how many dispatch slots remain.\r\n * Uses total RAM for steady-state capacity and free RAM as a hard safety gate.\r\n */\r\nexport function observeRunnerResourceGate(input: ObserveResourceGateInput): RunnerResourceGateShape {\r\n const { perWorkerMemBytes, memReserveBytes, memUtilization, configuredMaxWorkers } = resolveResourceConfig(\r\n input.config,\r\n input.configuredMaxWorkersOverride,\r\n );\r\n\r\n const totalMemBytes = input.totalMemBytes ?? os.totalmem();\r\n const freeMemBytes = input.freeMemBytes ?? os.freemem();\r\n const activeWorkers = input.activeWorkers ?? countActiveWorkers(input.runId);\r\n\r\n const budgetBytes = Math.max(0, Math.floor(totalMemBytes * memUtilization) - memReserveBytes);\r\n const capacityFromTotal = Math.max(0, Math.floor(budgetBytes / perWorkerMemBytes));\r\n const capacityFromFree = Math.max(0, Math.floor(Math.max(0, freeMemBytes - memReserveBytes) / perWorkerMemBytes));\r\n\r\n const autoCap = computeAutoMaxWorkers(totalMemBytes, { perWorkerMemBytes, memReserveBytes, memUtilization });\r\n const targetCap = configuredMaxWorkers ?? autoCap;\r\n const maxConcurrentWorkers = Math.max(0, Math.min(targetCap, capacityFromTotal));\r\n const slotsByCapacity = Math.max(0, maxConcurrentWorkers - activeWorkers);\r\n const slotsByFreeMem = Math.max(0, capacityFromFree - activeWorkers);\r\n const slotsAvailable = Math.min(slotsByCapacity, slotsByFreeMem);\r\n\r\n let reason: string | null = null;\r\n if (slotsAvailable <= 0) {\r\n if (activeWorkers >= maxConcurrentWorkers) {\r\n reason = `at worker limit (${activeWorkers}/${maxConcurrentWorkers} running)`;\r\n } else if (capacityFromFree <= activeWorkers) {\r\n reason = \"insufficient free memory \u2014 waiting for workers to finish\";\r\n } else {\r\n reason = \"no worker slots available\";\r\n }\r\n }\r\n\r\n return {\r\n ok: slotsAvailable > 0,\r\n totalMemBytes,\r\n freeMemBytes,\r\n memReserveBytes,\r\n perWorkerMemBytes,\r\n configuredMaxWorkers,\r\n autoCap,\r\n capacityWorkers: capacityFromTotal,\r\n maxConcurrentWorkers,\r\n activeWorkers,\r\n slotsAvailable,\r\n reason,\r\n };\r\n}\r\n", "import path from \"node:path\";\r\nimport { getHarnessPaths, runDir as runDirPath } from \"./paths.js\";\r\nimport { readJson, safeSlug, writeJson } from \"./util.js\";\r\nimport type { HarnessWorkerRecord } from \"./status.js\";\r\n\r\nexport interface HarnessRunRecord {\r\n id: string;\r\n name: string;\r\n repo: string;\r\n base: string;\r\n baseCommit: string;\r\n status: string;\r\n createdAt: string;\r\n workers: Record<string, { workerDir: string; statusPath: string }>;\r\n}\r\n\r\nexport function getPaths() {\r\n return getHarnessPaths();\r\n}\r\n\r\nexport function loadRun(id: string): HarnessRunRecord {\r\n const { runsDir } = getPaths();\r\n return readJson<HarnessRunRecord>(path.join(runDirPath(runsDir, safeSlug(id)), \"run.json\"));\r\n}\r\n\r\nexport function loadWorker(runId: string, name: string): HarnessWorkerRecord {\r\n const { runsDir } = getPaths();\r\n return readJson<HarnessWorkerRecord>(\r\n path.join(runDirPath(runsDir, safeSlug(runId)), \"workers\", safeSlug(name), \"worker.json\"),\r\n );\r\n}\r\n\r\nexport function saveRun(run: HarnessRunRecord): void {\r\n const { runsDir } = getPaths();\r\n writeJson(path.join(runDirPath(runsDir, run.id), \"run.json\"), run);\r\n}\r\n\r\nexport function saveWorker(runId: string, worker: HarnessWorkerRecord): void {\r\n const { runsDir } = getPaths();\r\n writeJson(path.join(runDirPath(runsDir, runId), \"workers\", worker.name, \"worker.json\"), worker);\r\n}\r\n\r\nexport function runDirectory(id: string): string {\r\n const { runsDir } = getPaths();\r\n return runDirPath(runsDir, safeSlug(id));\r\n}\r\n", "import { existsSync } from \"node:fs\";\r\nimport { homedir } from \"node:os\";\r\nimport path from \"node:path\";\r\nimport { safeSlug } from \"./util.js\";\r\n\r\nconst LEGACY_ROOT = path.join(homedir(), \".openclaw\", \"harness\");\r\n\r\nexport function resolveHarnessRoot(): string {\r\n const env = process.env.KYNVER_HARNESS_ROOT || process.env.OPUS_HARNESS_ROOT;\r\n if (env) return path.resolve(env);\r\n const kynverRoot = path.join(homedir(), \".kynver\", \"harness\");\r\n if (existsSync(kynverRoot)) return kynverRoot;\r\n if (existsSync(LEGACY_ROOT)) return LEGACY_ROOT;\r\n return kynverRoot;\r\n}\r\n\r\nexport function getHarnessPaths() {\r\n const harnessRoot = resolveHarnessRoot();\r\n return {\r\n harnessRoot,\r\n runsDir: path.join(harnessRoot, \"runs\"),\r\n worktreesDir: path.join(harnessRoot, \"worktrees\"),\r\n };\r\n}\r\n\r\nexport function runDir(runsDir: string, id: string): string {\r\n return path.join(runsDir, safeSlug(id));\r\n}\r\n", "import { existsSync, readFileSync } from \"node:fs\";\r\nimport { safeJson } from \"./util.js\";\r\n\r\nexport interface ParsedHeartbeat {\r\n heartbeatCount: number;\r\n lastHeartbeatAt: string | null;\r\n lastHeartbeatPhase: string | null;\r\n lastHeartbeatSummary: string | null;\r\n heartbeatBlocker: string | null;\r\n}\r\n\r\nexport function parseHeartbeat(file: string): ParsedHeartbeat {\r\n const result: ParsedHeartbeat = {\r\n heartbeatCount: 0,\r\n lastHeartbeatAt: null,\r\n lastHeartbeatPhase: null,\r\n lastHeartbeatSummary: null,\r\n heartbeatBlocker: null,\r\n };\r\n if (!existsSync(file)) return result;\r\n const lines = readFileSync(file, \"utf8\").split(\"\\n\").filter(Boolean);\r\n for (const line of lines) {\r\n const entry = safeJson(line);\r\n if (!entry || typeof entry !== \"object\" || Array.isArray(entry)) continue;\r\n const row = entry as Record<string, unknown>;\r\n result.heartbeatCount++;\r\n if (row.ts) result.lastHeartbeatAt = String(row.ts);\r\n if (row.phase !== undefined && row.phase !== null) result.lastHeartbeatPhase = String(row.phase);\r\n if (row.summary !== undefined && row.summary !== null) result.lastHeartbeatSummary = String(row.summary);\r\n result.heartbeatBlocker = row.blocker ? String(row.blocker) : null;\r\n }\r\n return result;\r\n}\r\n", "import { existsSync, readFileSync } from \"node:fs\";\r\nimport { oneLine, safeJson } from \"./util.js\";\r\n\r\nexport interface ParsedStream {\r\n firstEventAt: string | null;\r\n lastEventAt: string | null;\r\n currentTool: string | null;\r\n finalResult: unknown;\r\n error: string | null;\r\n}\r\n\r\nexport function parseClaudeStream(file: string): ParsedStream {\r\n const result: ParsedStream = {\r\n firstEventAt: null,\r\n lastEventAt: null,\r\n currentTool: null,\r\n finalResult: null,\r\n error: null,\r\n };\r\n if (!existsSync(file)) return result;\r\n const lines = readFileSync(file, \"utf8\").split(\"\\n\").filter(Boolean);\r\n for (const line of lines) {\r\n const event = safeJson(line) as Record<string, unknown> | null;\r\n if (!event) continue;\r\n const tsMs = event.timestamp_ms as number | undefined;\r\n const ts = (event.timestamp || event.ts || (tsMs ? new Date(tsMs).toISOString() : undefined)) as\r\n | string\r\n | undefined;\r\n if (ts) {\r\n result.firstEventAt ||= ts;\r\n result.lastEventAt = ts;\r\n }\r\n if (\r\n event.type === \"stream_event\" &&\r\n event.event &&\r\n typeof event.event === \"object\" &&\r\n (event.event as Record<string, unknown>).type === \"content_block_start\"\r\n ) {\r\n const block = (event.event as Record<string, unknown>).content_block as Record<string, unknown> | undefined;\r\n if (block?.type === \"tool_use\") result.currentTool = String(block.name || \"tool\");\r\n }\r\n if (event.type === \"assistant\" && event.message && typeof event.message === \"object\") {\r\n const content = (event.message as Record<string, unknown>).content;\r\n if (Array.isArray(content)) {\r\n const tool = content.find((item) => item?.type === \"tool_use\") as Record<string, unknown> | undefined;\r\n if (tool) result.currentTool = String(tool.name || result.currentTool);\r\n }\r\n }\r\n if (event.type === \"result\") {\r\n result.finalResult = event.result || event.subtype || event.terminal_reason || \"completed\";\r\n if (event.is_error) result.error = String(event.result || event.api_error_status || \"Claude result error\");\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nexport function summarizeEvent(event: Record<string, unknown>): string | undefined {\r\n if (event.type === \"system\" && event.subtype) {\r\n return `[system:${event.subtype}] ${String(event.status || event.cwd || \"\")}`.trim();\r\n }\r\n if (event.type === \"stream_event\" && event.event && typeof event.event === \"object\") {\r\n const type = (event.event as Record<string, unknown>).type;\r\n if (type === \"content_block_start\") {\r\n const block = (event.event as Record<string, unknown>).content_block as Record<string, unknown> | undefined;\r\n if (block?.type === \"tool_use\") return `[tool:start] ${block.name}`;\r\n }\r\n if (type === \"content_block_delta\") {\r\n const delta = (event.event as Record<string, unknown>).delta as Record<string, unknown> | undefined;\r\n if (delta?.partial_json) return `[tool:input] ${delta.partial_json}`;\r\n }\r\n if (type === \"message_stop\") return \"[message:stop]\";\r\n return type ? `[stream:${type}]` : undefined;\r\n }\r\n if (event.type === \"assistant\" && event.message && typeof event.message === \"object\") {\r\n const content = (event.message as Record<string, unknown>).content;\r\n if (Array.isArray(content)) {\r\n const text = content.find((item) => item?.type === \"text\") as Record<string, unknown> | undefined;\r\n if (text) return `[assistant] ${oneLine(String(text.text || \"\"))}`;\r\n const tool = content.find((item) => item?.type === \"tool_use\") as Record<string, unknown> | undefined;\r\n if (tool) return `[tool] ${tool.name} ${JSON.stringify(tool.input || {})}`;\r\n }\r\n }\r\n if (event.type === \"user\" && event.tool_use_result) {\r\n const result = event.tool_use_result as Record<string, unknown>;\r\n return `[tool:result] stdout=${JSON.stringify(result.stdout || \"\")} stderr=${JSON.stringify(result.stderr || \"\")}`;\r\n }\r\n if (event.type === \"result\") {\r\n return `[result] ${event.subtype || \"\"} ${oneLine(String(event.result || \"\"))}`.trim();\r\n }\r\n return undefined;\r\n}\r\n", "import { spawnSync } from \"node:child_process\";\r\nimport { fail } from \"./util.js\";\r\n\r\nexport interface GitOptions {\r\n allowFailure?: boolean;\r\n throwError?: boolean;\r\n}\r\n\r\nexport function git(cwd: string, args: string[], options: GitOptions = {}): string {\r\n const res = spawnSync(\"git\", args, { cwd, encoding: \"utf8\" });\r\n if (res.status !== 0 && !options.allowFailure) {\r\n const message = `git ${args.join(\" \")} failed: ${res.stderr || res.stdout}`;\r\n if (options.throwError) throw new Error(message);\r\n fail(message);\r\n }\r\n return res.stdout || \"\";\r\n}\r\n\r\nexport function ensureGitRepo(repo: string): void {\r\n git(repo, [\"rev-parse\", \"--show-toplevel\"]);\r\n}\r\n\r\nexport function gitStatusShort(worktreePath: string): string[] {\r\n return git(worktreePath, [\"status\", \"--short\"], { allowFailure: true })\r\n .split(\"\\n\")\r\n .map((line) => line.trim())\r\n .filter(Boolean);\r\n}\r\n\r\nexport function scrubClaudeEnv(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv {\r\n const next = { ...env };\r\n delete next.ANTHROPIC_API_KEY;\r\n return next;\r\n}\r\n", "import { parseHeartbeat } from \"./heartbeat.js\";\r\nimport { parseClaudeStream } from \"./stream.js\";\r\nimport { gitStatusShort } from \"./git.js\";\r\nimport {\r\n fileMtime,\r\n fileSize,\r\n isPidAlive,\r\n latestIso,\r\n secsAgo,\r\n tailFile,\r\n} from \"./util.js\";\r\n\r\nexport const NO_START_MS = 180_000;\r\nexport const STALE_MS = 600_000;\r\n\r\nexport interface WorkerAttention {\r\n state: \"done\" | \"needs_attention\" | \"blocked\" | \"stale\" | \"ok\";\r\n reason: string;\r\n}\r\n\r\nexport interface HarnessWorkerRecord {\r\n name: string;\r\n runId: string;\r\n status: string;\r\n pid?: number;\r\n model?: string;\r\n branch: string;\r\n worktreePath: string;\r\n workerDir: string;\r\n stdoutPath: string;\r\n stderrPath: string;\r\n heartbeatPath: string;\r\n ownedPaths?: string[];\r\n agentOsId?: string;\r\n taskId?: string;\r\n leaseOwner?: string;\r\n dispatched?: boolean;\r\n startedAt?: string;\r\n}\r\n\r\nexport interface RawHarnessWorkerStatus {\r\n runId: string;\r\n worker: string;\r\n pid?: number;\r\n alive: boolean;\r\n status: string;\r\n attention: WorkerAttention;\r\n branch: string;\r\n worktreePath: string;\r\n ownedPaths?: string[];\r\n stdoutBytes: number;\r\n stderrBytes: number;\r\n heartbeatBytes: number;\r\n firstEventAt: string | null;\r\n lastEventAt: string | null;\r\n lastActivityAt: string | null;\r\n currentTool: string | null;\r\n heartbeatCount: number;\r\n lastHeartbeatAt: string | null;\r\n lastHeartbeatPhase: string | null;\r\n lastHeartbeatSummary: string | null;\r\n heartbeatBlocker: string | null;\r\n finalResult: unknown;\r\n error?: string;\r\n changedFiles: string[];\r\n}\r\n\r\nexport function computeAttention(input: {\r\n alive: boolean;\r\n finalResult: unknown;\r\n firstEventAt: string | null;\r\n stdoutBytes: number;\r\n heartbeatBytes: number;\r\n lastActivityAt: string | null;\r\n heartbeatBlocker: string | null;\r\n startedAt?: string;\r\n}): WorkerAttention {\r\n const now = Date.now();\r\n if (input.finalResult) return { state: \"done\", reason: \"final result recorded\" };\r\n if (!input.alive) return { state: \"needs_attention\", reason: \"process exited without a final result\" };\r\n if (input.heartbeatBlocker) {\r\n return { state: \"blocked\", reason: `worker heartbeat reported blocker: ${input.heartbeatBlocker}` };\r\n }\r\n const startMs = input.startedAt ? Date.parse(input.startedAt) : NaN;\r\n if (\r\n !input.firstEventAt &&\r\n input.stdoutBytes === 0 &&\r\n input.heartbeatBytes === 0 &&\r\n Number.isFinite(startMs) &&\r\n now - startMs > NO_START_MS\r\n ) {\r\n return { state: \"needs_attention\", reason: `no first stream event ${secsAgo(startMs)}s after start` };\r\n }\r\n const actMs = input.lastActivityAt ? Date.parse(input.lastActivityAt) : NaN;\r\n if (Number.isFinite(actMs) && now - actMs > STALE_MS) {\r\n return { state: \"stale\", reason: `no log/event/heartbeat activity for ${secsAgo(actMs)}s` };\r\n }\r\n return { state: \"ok\", reason: \"recent activity\" };\r\n}\r\n\r\nexport function computeWorkerStatus(worker: HarnessWorkerRecord): RawHarnessWorkerStatus {\r\n const parsed = parseClaudeStream(worker.stdoutPath);\r\n const heartbeat = parseHeartbeat(worker.heartbeatPath);\r\n const alive = isPidAlive(worker.pid);\r\n const stdoutBytes = fileSize(worker.stdoutPath);\r\n const stderrBytes = fileSize(worker.stderrPath);\r\n const heartbeatBytes = fileSize(worker.heartbeatPath);\r\n const changedFiles = gitStatusShort(worker.worktreePath);\r\n const lastActivityAt = latestIso([\r\n parsed.lastEventAt,\r\n heartbeat.lastHeartbeatAt,\r\n fileMtime(worker.stdoutPath),\r\n fileMtime(worker.stderrPath),\r\n fileMtime(worker.heartbeatPath),\r\n ]);\r\n const attention = computeAttention({\r\n alive,\r\n finalResult: parsed.finalResult,\r\n firstEventAt: parsed.firstEventAt,\r\n stdoutBytes,\r\n heartbeatBytes,\r\n lastActivityAt,\r\n heartbeatBlocker: heartbeat.heartbeatBlocker,\r\n startedAt: worker.startedAt,\r\n });\r\n return {\r\n runId: worker.runId,\r\n worker: worker.name,\r\n pid: worker.pid,\r\n alive,\r\n status: parsed.finalResult ? \"done\" : alive ? \"running\" : \"exited\",\r\n attention,\r\n branch: worker.branch,\r\n worktreePath: worker.worktreePath,\r\n ownedPaths: worker.ownedPaths,\r\n stdoutBytes,\r\n stderrBytes,\r\n heartbeatBytes,\r\n firstEventAt: parsed.firstEventAt,\r\n lastEventAt: parsed.lastEventAt,\r\n lastActivityAt,\r\n currentTool: parsed.currentTool,\r\n heartbeatCount: heartbeat.heartbeatCount,\r\n lastHeartbeatAt: heartbeat.lastHeartbeatAt,\r\n lastHeartbeatPhase: heartbeat.lastHeartbeatPhase,\r\n lastHeartbeatSummary: heartbeat.lastHeartbeatSummary,\r\n heartbeatBlocker: heartbeat.heartbeatBlocker,\r\n finalResult: parsed.finalResult,\r\n error:\r\n parsed.error ||\r\n (!alive && !parsed.finalResult ? tailFile(worker.stderrPath, 10).trim() || undefined : undefined),\r\n changedFiles,\r\n };\r\n}\r\n\r\nexport function isFinishedWorkerStatus(status: RawHarnessWorkerStatus): boolean {\r\n if (status.finalResult) return true;\r\n if (status.alive === false) return true;\r\n if (status.status === \"exited\" || status.status === \"done\") return true;\r\n return false;\r\n}\r\n\r\nexport function deriveRunStatus(fallback: string, workers: Array<{ attention?: string; status?: string }>): string {\r\n if (workers.length === 0) return fallback;\r\n if (workers.some((w) => w.attention === \"needs_attention\" || w.attention === \"stale\" || w.attention === \"blocked\")) {\r\n return \"needs_attention\";\r\n }\r\n if (workers.every((w) => w.status === \"done\")) return \"done\";\r\n if (workers.some((w) => w.status === \"running\")) return \"running\";\r\n return fallback;\r\n}\r\n", "import { existsSync, mkdirSync } from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport { git } from \"./git.js\";\r\nimport { getPaths } from \"./run-store.js\";\r\nimport { loadRun, runDirectory, saveRun, saveWorker } from \"./run-store.js\";\r\nimport { buildPrompt } from \"./prompt.js\";\r\nimport { readMaybeFile, safeSlug } from \"./util.js\";\r\nimport { resolveWorkerProvider } from \"./providers/registry.js\";\r\nimport type { HarnessRunRecord } from \"./run-store.js\";\r\nimport type { HarnessWorkerRecord } from \"./status.js\";\r\n\r\nexport interface SpawnWorkerOptions {\r\n name: string;\r\n task: string;\r\n ownedPaths?: string[];\r\n model?: string;\r\n branch?: string;\r\n agentOsId?: string;\r\n taskId?: string;\r\n leaseOwner?: string;\r\n dispatched?: boolean;\r\n provider?: string;\r\n}\r\n\r\nexport function spawnWorkerProcess(run: HarnessRunRecord, opts: SpawnWorkerOptions): HarnessWorkerRecord {\r\n const name = safeSlug(opts.name);\r\n if (!opts.name) throw new Error(\"worker name is required\");\r\n if (run.workers?.[name]) throw new Error(`worker already exists in run ${run.id}: ${name}`);\r\n if (!opts.task) throw new Error(`missing task text for worker ${name}`);\r\n\r\n const { worktreesDir } = getPaths();\r\n const workerDir = path.join(runDirectory(run.id), \"workers\", name);\r\n mkdirSync(workerDir, { recursive: true });\r\n const worktreePath = path.join(worktreesDir, run.id, name);\r\n const branch = opts.branch || `agent/${run.id}/${name}`;\r\n if (existsSync(worktreePath)) throw new Error(`worktree path already exists: ${worktreePath}`);\r\n\r\n git(run.repo, [\"fetch\", \"origin\", \"--prune\"], { allowFailure: true });\r\n git(run.repo, [\"worktree\", \"add\", \"-b\", branch, worktreePath, run.baseCommit], { throwError: true });\r\n\r\n const stdoutPath = path.join(workerDir, \"stdout.jsonl\");\r\n const stderrPath = path.join(workerDir, \"stderr.log\");\r\n const heartbeatPath = path.join(workerDir, \"heartbeat.jsonl\");\r\n const prompt = buildPrompt({\r\n task: opts.task,\r\n ownedPaths: opts.ownedPaths || [],\r\n worktreePath,\r\n heartbeatPath,\r\n });\r\n\r\n const provider = resolveWorkerProvider(opts.provider);\r\n let started;\r\n try {\r\n started = provider.start({\r\n name,\r\n task: opts.task,\r\n ownedPaths: opts.ownedPaths,\r\n model: opts.model,\r\n branch,\r\n worktreePath,\r\n workerDir,\r\n stdoutPath,\r\n stderrPath,\r\n heartbeatPath,\r\n prompt,\r\n });\r\n } catch (error) {\r\n git(run.repo, [\"worktree\", \"remove\", \"--force\", worktreePath], { allowFailure: true });\r\n git(run.repo, [\"branch\", \"-D\", branch], { allowFailure: true });\r\n throw error;\r\n }\r\n\r\n const model = started.model || opts.model || \"claude-opus-4-7\";\r\n const worker: HarnessWorkerRecord = {\r\n name,\r\n runId: run.id,\r\n status: \"running\",\r\n pid: started.pid,\r\n model,\r\n branch,\r\n worktreePath,\r\n workerDir,\r\n stdoutPath,\r\n stderrPath,\r\n heartbeatPath,\r\n ownedPaths: opts.ownedPaths,\r\n ...(opts.agentOsId ? { agentOsId: String(opts.agentOsId) } : {}),\r\n ...(opts.taskId ? { taskId: String(opts.taskId) } : {}),\r\n ...(opts.leaseOwner ? { leaseOwner: String(opts.leaseOwner) } : {}),\r\n ...(opts.dispatched ? { dispatched: true } : {}),\r\n startedAt: new Date().toISOString(),\r\n };\r\n\r\n saveWorker(run.id, worker);\r\n run.workers = { ...(run.workers || {}), [name]: { workerDir, statusPath: path.join(workerDir, \"worker.json\") } };\r\n run.status = \"running\";\r\n saveRun(run);\r\n return worker;\r\n}\r\n\r\nexport function startWorker(args: Record<string, string | boolean>): void {\r\n const run = loadRun(String(args.run));\r\n const task = args.task ? String(args.task) : readMaybeFile(args.taskFile ? String(args.taskFile) : undefined);\r\n if (!task) {\r\n console.error(\"missing --task or --task-file\");\r\n process.exit(1);\r\n }\r\n try {\r\n const worker = spawnWorkerProcess(run, {\r\n name: String(args.name),\r\n task,\r\n ownedPaths: args.owned ? String(args.owned).split(\",\").map((s) => s.trim()).filter(Boolean) : [],\r\n model: args.model ? String(args.model) : undefined,\r\n branch: args.branch ? String(args.branch) : undefined,\r\n agentOsId: args.agentOsId ? String(args.agentOsId) : undefined,\r\n taskId: args.taskId ? String(args.taskId) : undefined,\r\n provider: args.provider ? String(args.provider) : undefined,\r\n });\r\n console.log(\r\n JSON.stringify(\r\n {\r\n runId: run.id,\r\n worker: worker.name,\r\n pid: worker.pid,\r\n branch: worker.branch,\r\n worktreePath: worker.worktreePath,\r\n workerDir: worker.workerDir,\r\n },\r\n null,\r\n 2,\r\n ),\r\n );\r\n } catch (error) {\r\n console.error(`worker start failed: ${(error as Error).message}`);\r\n process.exit(1);\r\n }\r\n}\r\n", "export function buildPrompt(input: {\r\n task: string;\r\n ownedPaths: string[];\r\n worktreePath: string;\r\n heartbeatPath: string;\r\n}): string {\r\n const ownership = input.ownedPaths.length\r\n ? `Owned paths: ${input.ownedPaths.join(\", \")}. Do not edit outside these paths without stopping and reporting why.`\r\n : \"Owned paths: unrestricted for this worker, but keep edits tightly scoped.\";\r\n return [\r\n \"You are running under the Kynver AgentOS runtime.\",\r\n \"Immediately state your plan before editing.\",\r\n ownership,\r\n `Worktree: ${input.worktreePath}`,\r\n `Progress heartbeat file: ${input.heartbeatPath}`,\r\n \"After each major step, append one JSON line to the heartbeat file with fields: ts, phase, summary, changedFiles, blocker.\",\r\n \"Final response must include files changed, verification commands, and unresolved risks.\",\r\n \"\",\r\n \"Task:\",\r\n input.task,\r\n ].join(\"\\n\");\r\n}\r\n", "import { closeSync, openSync } from \"node:fs\";\r\nimport { spawn } from \"node:child_process\";\r\nimport { scrubClaudeEnv } from \"../git.js\";\r\nimport type { WorkerProvider, WorkerProviderStartOptions } from \"./types.js\";\r\n\r\nexport const claudeProvider: WorkerProvider = {\r\n name: \"claude\",\r\n start(opts) {\r\n const model = opts.model || \"claude-opus-4-7\";\r\n const stdoutFd = openSync(opts.stdoutPath, \"a\");\r\n const stderrFd = openSync(opts.stderrPath, \"a\");\r\n const child = spawn(\r\n \"claude\",\r\n [\r\n \"--model\",\r\n model,\r\n \"-p\",\r\n \"--verbose\",\r\n \"--permission-mode\",\r\n \"bypassPermissions\",\r\n \"--output-format\",\r\n \"stream-json\",\r\n \"--include-partial-messages\",\r\n opts.prompt,\r\n ],\r\n {\r\n cwd: opts.worktreePath,\r\n detached: true,\r\n stdio: [\"ignore\", stdoutFd, stderrFd],\r\n env: scrubClaudeEnv(process.env),\r\n },\r\n );\r\n closeSync(stdoutFd);\r\n closeSync(stderrFd);\r\n\r\n if (!child.pid) {\r\n throw new Error(\"failed to spawn claude worker process (is the `claude` CLI on PATH?)\");\r\n }\r\n child.unref();\r\n return { pid: child.pid, model };\r\n },\r\n};\r\n", "import { closeSync, existsSync, openSync, readdirSync } from \"node:fs\";\r\nimport { spawn } from \"node:child_process\";\r\nimport path from \"node:path\";\r\nimport type { WorkerProvider, WorkerProviderStartOptions } from \"./types.js\";\r\n\r\nconst DEFAULT_CURSOR_MODEL = \"composer-2.5\";\r\n\r\ninterface CursorSpawnTarget {\r\n executable: string;\r\n prefixArgs: string[];\r\n shell: boolean;\r\n detached: boolean;\r\n}\r\n\r\nfunction latestVersionDir(versionsRoot: string): string | null {\r\n if (!existsSync(versionsRoot)) return null;\r\n const versions = readdirSync(versionsRoot, { withFileTypes: true })\r\n .filter((entry) => entry.isDirectory() && /^\\d{4}\\.\\d/.test(entry.name))\r\n .map((entry) => entry.name)\r\n .sort((a, b) => b.localeCompare(a));\r\n return versions[0] ? path.join(versionsRoot, versions[0]) : null;\r\n}\r\n\r\nfunction resolveBundledCursor(versionDir: string): CursorSpawnTarget | null {\r\n const nodeExe = path.join(versionDir, \"node.exe\");\r\n const indexJs = path.join(versionDir, \"index.js\");\r\n if (!existsSync(nodeExe) || !existsSync(indexJs)) return null;\r\n return { executable: nodeExe, prefixArgs: [indexJs], shell: false, detached: true };\r\n}\r\n\r\nfunction resolveWindowsCursorSpawn(agentBin: string): CursorSpawnTarget | null {\r\n const agentRoot = path.dirname(agentBin);\r\n const direct = resolveBundledCursor(agentRoot);\r\n if (direct) return direct;\r\n const versionDir = latestVersionDir(path.join(agentRoot, \"versions\"));\r\n return versionDir ? resolveBundledCursor(versionDir) : null;\r\n}\r\n\r\nexport function resolveCursorSpawn(agentBin: string): CursorSpawnTarget {\r\n if (process.platform === \"win32\" && /\\.(cmd|bat)$/i.test(agentBin)) {\r\n const bundled = resolveWindowsCursorSpawn(agentBin);\r\n if (bundled) return bundled;\r\n // shell + detached loses fd stdio on Windows; keep the worker attached instead.\r\n return { executable: agentBin, prefixArgs: [], shell: true, detached: false };\r\n }\r\n return { executable: agentBin, prefixArgs: [], shell: false, detached: true };\r\n}\r\n\r\nfunction resolveAgentBin(): string {\r\n const configured =\r\n process.env.KYNVER_CURSOR_AGENT_BIN?.trim() ||\r\n process.env.CURSOR_AGENT_BIN?.trim();\r\n if (configured) return configured;\r\n\r\n if (process.platform === \"win32\") {\r\n const localAgent = path.join(process.env.LOCALAPPDATA || \"\", \"cursor-agent\", \"agent.cmd\");\r\n if (existsSync(localAgent)) return localAgent;\r\n }\r\n\r\n return \"agent\";\r\n}\r\n\r\nexport const cursorProvider: WorkerProvider = {\r\n name: \"cursor\",\r\n start(opts) {\r\n const model = opts.model || DEFAULT_CURSOR_MODEL;\r\n const stdoutFd = openSync(opts.stdoutPath, \"a\");\r\n const stderrFd = openSync(opts.stderrPath, \"a\");\r\n const agentBin = resolveAgentBin();\r\n const spawnTarget = resolveCursorSpawn(agentBin);\r\n const child = spawn(\r\n spawnTarget.executable,\r\n [\r\n ...spawnTarget.prefixArgs,\r\n \"-p\",\r\n \"--force\",\r\n \"--trust\",\r\n \"--workspace\",\r\n opts.worktreePath,\r\n \"--output-format\",\r\n \"stream-json\",\r\n \"--stream-partial-output\",\r\n \"--model\",\r\n model,\r\n opts.prompt,\r\n ],\r\n {\r\n cwd: opts.worktreePath,\r\n detached: spawnTarget.detached,\r\n shell: spawnTarget.shell,\r\n stdio: [\"ignore\", stdoutFd, stderrFd],\r\n env: {\r\n ...process.env,\r\n ...(spawnTarget.prefixArgs.length > 0 ? { CURSOR_INVOKED_AS: path.basename(agentBin) } : {}),\r\n },\r\n },\r\n );\r\n closeSync(stdoutFd);\r\n closeSync(stderrFd);\r\n\r\n if (!child.pid) {\r\n throw new Error(\r\n `failed to spawn Cursor agent worker (is \\`${agentBin}\\` on PATH? run \\`agent login\\` or set CURSOR_API_KEY)`,\r\n );\r\n }\r\n child.unref();\r\n return { pid: child.pid, model };\r\n },\r\n};\r\n", "import { loadUserConfig } from \"../config.js\";\r\nimport { claudeProvider } from \"./claude.js\";\r\nimport { cursorProvider } from \"./cursor.js\";\r\nimport type { WorkerProvider } from \"./types.js\";\r\n\r\nconst BUILTIN: Record<string, WorkerProvider> = {\r\n claude: claudeProvider,\r\n cursor: cursorProvider,\r\n};\r\n\r\nlet overrideProvider: WorkerProvider | null = null;\r\n\r\n/** Test hook \u2014 inject a stub provider without spawning Claude. */\r\nexport function setWorkerProviderForTests(provider: WorkerProvider | null): void {\r\n overrideProvider = provider;\r\n}\r\n\r\nexport function resolveWorkerProvider(name?: string): WorkerProvider {\r\n if (overrideProvider) return overrideProvider;\r\n const configured = (name || loadUserConfig().workerProvider || \"claude\").trim();\r\n const provider = BUILTIN[configured];\r\n if (!provider) {\r\n throw new Error(`unknown worker provider \"${configured}\" \u2014 supported: ${Object.keys(BUILTIN).join(\", \")}`);\r\n }\r\n return provider;\r\n}\r\n", "import path from \"node:path\";\r\nimport { resolveBaseUrl, resolveCallbackSecret } from \"./config.js\";\r\nimport { postJson } from \"./callbacks.js\";\r\nimport { observeRunnerDiskGate } from \"./disk-gate.js\";\r\nimport { observeRunnerResourceGate } from \"./resource-gate.js\";\r\nimport { loadRun } from \"./run-store.js\";\r\nimport { runDirectory } from \"./run-store.js\";\r\nimport { spawnWorkerProcess } from \"./supervisor.js\";\r\nimport { required, safeSlug } from \"./util.js\";\r\n\r\nexport const DEFAULT_DISPATCH_LEASE_MS = 60 * 60 * 1000;\r\n\r\nexport function buildDispatchTaskText(task: Record<string, unknown>, agentOsId: string): string {\r\n return [\r\n `[AgentOS task ${task.id}] ${task.title}`,\r\n \"\",\r\n task.description ? String(task.description) : \"(no description on the board task)\",\r\n \"\",\r\n `Board linkage: agentOsId=${agentOsId}, taskId=${task.id}, attempt=${task.attempt}, executor=${task.executor}${\r\n task.executorRef ? `, executorRef=${task.executorRef}` : \"\"\r\n }.`,\r\n \"This worker was dispatched from the AgentOS board. The harness reports your completion back to the board when you finish.\",\r\n ].join(\"\\n\");\r\n}\r\n\r\nexport async function dispatchRun(args: Record<string, string | boolean>): Promise<Record<string, unknown> | void> {\r\n const pipeline = args.pipeline === true || args.pipeline === \"true\";\r\n try {\r\n const run = loadRun(String(required(String(args.run || \"\"), \"--run\")));\r\n const agentOsId = String(required(String(args.agentOsId || \"\"), \"--agent-os-id\"));\r\n const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : undefined);\r\n const secret = resolveCallbackSecret(args.secret ? String(args.secret) : undefined);\r\n const execute = args.execute === true || args.execute === \"true\";\r\n const dryRun = !execute;\r\n const leaseOwner = `openclaw-harness:${run.id}`;\r\n\r\n const runnerDiskGate = args.diskPath\r\n ? observeRunnerDiskGate({ diskPath: String(args.diskPath) })\r\n : observeRunnerDiskGate({ diskPath: run.repo });\r\n const runnerResourceGate = observeRunnerResourceGate({ runId: run.id });\r\n const requestedStarts = Number(args.maxStarts) > 0 ? Math.floor(Number(args.maxStarts)) : 1;\r\n const cappedStarts = dryRun\r\n ? requestedStarts\r\n : Math.min(requestedStarts, runnerResourceGate.slotsAvailable);\r\n\r\n const dispatchUrl = `${base}/api/agent-os/by-id/${encodeURIComponent(agentOsId)}/tasks/dispatch-next`;\r\n const body: Record<string, unknown> = {\r\n agentOsId,\r\n dryRun,\r\n maxStarts: cappedStarts,\r\n leaseOwner,\r\n leaseDurationMs:\r\n Number(args.leaseMs) > 0 ? Math.floor(Number(args.leaseMs)) : DEFAULT_DISPATCH_LEASE_MS,\r\n runnerDiskGate,\r\n runnerResourceGate,\r\n ...(args.lane ? { lane: String(args.lane) } : {}),\r\n ...(args.diskPath ? { diskPath: String(args.diskPath) } : {}),\r\n };\r\n\r\n const dispatch = await postJson(dispatchUrl, secret, body);\r\n const responseBody = dispatch.response as { ok?: boolean; result?: Record<string, unknown> } | null;\r\n if (!dispatch.ok || !responseBody?.result) {\r\n const failure = {\r\n runId: run.id,\r\n agentOsId,\r\n action: \"dispatch\",\r\n httpStatus: dispatch.status,\r\n response: dispatch.response,\r\n };\r\n if (pipeline) return { ok: false, ...failure };\r\n console.log(JSON.stringify(failure, null, 2));\r\n process.exit(1);\r\n }\r\n\r\n const result = responseBody.result;\r\n if (dryRun) {\r\n const summary = {\r\n runId: run.id,\r\n agentOsId,\r\n dryRun: true,\r\n wouldStart: (result.started as Array<{ task: Record<string, unknown>; reason: string }>).map((d) => ({\r\n taskId: d.task.id,\r\n title: d.task.title,\r\n reason: d.reason,\r\n })),\r\n skipped: (result.skipped as Array<{ task: Record<string, unknown>; skipReason: string; reason: string }>).map(\r\n (d) => ({ taskId: d.task.id, skipReason: d.skipReason, reason: d.reason }),\r\n ),\r\n diskGate: result.diskGate,\r\n resourceGate: result.resourceGate,\r\n inspected: result.inspected,\r\n };\r\n if (pipeline) return { ok: true, ...summary };\r\n console.log(JSON.stringify(summary, null, 2));\r\n return;\r\n }\r\n\r\n if (!dryRun && cappedStarts <= 0) {\r\n const summary = {\r\n runId: run.id,\r\n agentOsId,\r\n dryRun: false,\r\n skipped: true,\r\n reason: runnerResourceGate.reason ?? \"no resource slots\",\r\n resourceGate: runnerResourceGate,\r\n };\r\n if (pipeline) return { ok: true, ...summary };\r\n console.log(JSON.stringify(summary, null, 2));\r\n return;\r\n }\r\n\r\n const outcomes: Array<Record<string, unknown>> = [];\r\n for (const decision of result.started as Array<{ task: Record<string, unknown> }>) {\r\n const task = decision.task;\r\n const name = safeSlug(`t-${task.id}-a${task.attempt}`);\r\n try {\r\n const worker = spawnWorkerProcess(run, {\r\n name,\r\n task: buildDispatchTaskText(task, agentOsId),\r\n ownedPaths: args.owned ? String(args.owned).split(\",\").map((s) => s.trim()).filter(Boolean) : [],\r\n model: args.model ? String(args.model) : undefined,\r\n agentOsId,\r\n taskId: String(task.id),\r\n leaseOwner,\r\n dispatched: true,\r\n });\r\n outcomes.push({\r\n taskId: task.id,\r\n started: true,\r\n worker: worker.name,\r\n pid: worker.pid,\r\n branch: worker.branch,\r\n });\r\n } catch (error) {\r\n const releaseUrl = `${base}/api/agent-os/by-id/${encodeURIComponent(agentOsId)}/tasks/${encodeURIComponent(String(task.id))}/release`;\r\n let release;\r\n try {\r\n release = await postJson(releaseUrl, secret, { agentOsId, leaseOwner });\r\n } catch (relErr) {\r\n release = { ok: false, error: (relErr as Error).message };\r\n }\r\n outcomes.push({\r\n taskId: task.id,\r\n started: false,\r\n error: (error as Error).message,\r\n released: release.ok === true || (release.response as Record<string, unknown>)?.ok === true,\r\n releaseResponse: release.response ?? release,\r\n });\r\n }\r\n }\r\n\r\n const summary = {\r\n runId: run.id,\r\n agentOsId,\r\n dryRun: false,\r\n leaseOwner,\r\n startedCount: outcomes.filter((o) => o.started).length,\r\n outcomes,\r\n skipped: (result.skipped as Array<{ task: Record<string, unknown>; skipReason: string }>).map((d) => ({\r\n taskId: d.task.id,\r\n skipReason: d.skipReason,\r\n })),\r\n diskGate: result.diskGate,\r\n resourceGate: result.resourceGate,\r\n };\r\n if (pipeline) {\r\n return { ok: !outcomes.some((o) => !o.started), ...summary };\r\n }\r\n console.log(JSON.stringify(summary, null, 2));\r\n if (outcomes.some((o) => !o.started)) process.exit(1);\r\n } catch (error) {\r\n if (pipeline) return { ok: false, error: (error as Error).message };\r\n console.error(`run dispatch failed: ${(error as Error).message}`);\r\n process.exit(1);\r\n }\r\n}\r\n\r\nexport { runDirectory };\r\n", "import path from \"node:path\";\r\nimport { resolveBaseUrl, resolveCallbackSecret } from \"./config.js\";\r\nimport { postJson } from \"./callbacks.js\";\r\nimport { loadRun, runDirectory } from \"./run-store.js\";\r\nimport { computeWorkerStatus } from \"./status.js\";\r\nimport { required, readJson, safeSlug } from \"./util.js\";\r\n\r\nexport async function sweepRun(args: Record<string, string | boolean>): Promise<Record<string, unknown> | void> {\r\n const pipeline = args.pipeline === true || args.pipeline === \"true\";\r\n try {\r\n const run = loadRun(String(required(String(args.run || \"\"), \"--run\")));\r\n const agentOsId = String(required(String(args.agentOsId || \"\"), \"--agent-os-id\"));\r\n const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : undefined);\r\n const secret = resolveCallbackSecret(args.secret ? String(args.secret) : undefined);\r\n const leaseOwner = `openclaw-harness:${run.id}`;\r\n\r\n const releasedLocalOrphans: Array<Record<string, unknown>> = [];\r\n for (const name of Object.keys(run.workers || {})) {\r\n const worker = readJson<Record<string, unknown>>(\r\n path.join(runDirectory(run.id), \"workers\", safeSlug(name), \"worker.json\"),\r\n null,\r\n );\r\n if (!worker || !worker.dispatched || !worker.taskId) continue;\r\n const status = computeWorkerStatus(worker as never);\r\n if (status.alive) continue;\r\n if (status.finalResult) continue;\r\n\r\n const releaseUrl = `${base}/api/agent-os/by-id/${encodeURIComponent(agentOsId)}/tasks/${encodeURIComponent(String(worker.taskId))}/release`;\r\n let release;\r\n try {\r\n release = await postJson(releaseUrl, secret, { agentOsId, leaseOwner });\r\n } catch (relErr) {\r\n release = { ok: false, error: (relErr as Error).message };\r\n }\r\n releasedLocalOrphans.push({\r\n worker: name,\r\n taskId: worker.taskId,\r\n pid: worker.pid,\r\n released: release.ok === true || (release.response as Record<string, unknown>)?.ok === true,\r\n response: release.response ?? release,\r\n });\r\n }\r\n\r\n const reapUrl = `${base}/api/agent-os/by-id/${encodeURIComponent(agentOsId)}/tasks/reap`;\r\n let reap;\r\n try {\r\n reap = await postJson(reapUrl, secret, {\r\n agentOsId,\r\n ...(Number(args.graceMs) >= 0 && args.graceMs !== undefined && args.graceMs !== true\r\n ? { graceMs: Math.floor(Number(args.graceMs)) }\r\n : {}),\r\n });\r\n } catch (reapErr) {\r\n reap = { ok: false, error: (reapErr as Error).message };\r\n }\r\n\r\n const summary = { runId: run.id, agentOsId, leaseOwner, releasedLocalOrphans, reap: reap.response ?? reap };\r\n if (pipeline) return { ok: true, ...summary };\r\n console.log(JSON.stringify(summary, null, 2));\r\n } catch (error) {\r\n if (pipeline) return { ok: false, error: (error as Error).message };\r\n console.error(`run sweep failed: ${(error as Error).message}`);\r\n process.exit(1);\r\n }\r\n}\r\n", "import { existsSync, mkdirSync } from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport { ensureGitRepo, git } from \"./git.js\";\r\nimport { getPaths } from \"./run-store.js\";\r\nimport { loadRun, runDirectory, saveRun } from \"./run-store.js\";\r\nimport { listRunIds, readJson, required, safeSlug, timestampSlug, writeJson } from \"./util.js\";\r\nimport { validateRepo, validateRunId } from \"./validate.js\";\r\n\r\nexport function createRun(args: Record<string, string | boolean>): void {\r\n const repo = validateRepo(required(String(args.repo || \"\"), \"--repo\"));\r\n ensureGitRepo(repo);\r\n const id = args.id ? validateRunId(String(args.id)) : timestampSlug(String(args.name || \"run\"));\r\n const dir = runDirectory(id);\r\n if (existsSync(dir)) failExists(`run already exists: ${id}`);\r\n mkdirSync(dir, { recursive: true });\r\n const base = String(args.base || \"origin/main\");\r\n const baseCommit = git(repo, [\"rev-parse\", base]).trim();\r\n const run = {\r\n id,\r\n name: String(args.name || id),\r\n repo,\r\n base,\r\n baseCommit,\r\n status: \"created\",\r\n createdAt: new Date().toISOString(),\r\n workers: {},\r\n };\r\n writeJson(path.join(dir, \"run.json\"), run);\r\n console.log(JSON.stringify({ runId: id, runDir: dir, repo, base, baseCommit }, null, 2));\r\n}\r\n\r\nexport function listRuns(): void {\r\n const { runsDir } = getPaths();\r\n const rows = listRunIds(runsDir)\r\n .map((id) => readJson<Record<string, unknown>>(path.join(runDirectory(id), \"run.json\"), null))\r\n .filter(Boolean)\r\n .map((run) => ({\r\n id: run!.id,\r\n name: run!.name,\r\n status: run!.status,\r\n repo: run!.repo,\r\n createdAt: run!.createdAt,\r\n }));\r\n console.log(JSON.stringify(rows, null, 2));\r\n}\r\n\r\nfunction failExists(message: string): never {\r\n console.error(message);\r\n process.exit(1);\r\n}\r\n\r\nexport { loadRun, saveRun, runDirectory };\r\n", "import path from \"node:path\";\r\n\r\nconst RUN_ID_RE = /^[a-z0-9][a-z0-9._-]{0,127}$/i;\r\nconst WORKER_NAME_RE = /^[a-z0-9][a-z0-9._-]{0,63}$/i;\r\n\r\nexport function validateRunId(runId: string): string {\r\n const trimmed = runId.trim();\r\n if (!RUN_ID_RE.test(trimmed)) throw new Error(`invalid run id: ${runId}`);\r\n return trimmed;\r\n}\r\n\r\nexport function validateWorkerName(name: string): string {\r\n const trimmed = name.trim();\r\n if (!WORKER_NAME_RE.test(trimmed)) throw new Error(`invalid worker name: ${name}`);\r\n return trimmed;\r\n}\r\n\r\nexport function validateRepo(repo: string): string {\r\n const resolved = path.resolve(repo);\r\n if (resolved.includes(\"..\")) throw new Error(\"repo path must not contain .. segments\");\r\n return resolved;\r\n}\r\n\r\nexport function validateOwnedPaths(repoRoot: string, ownedPaths: string[]): string[] {\r\n return ownedPaths.map((owned) => {\r\n const resolved = path.resolve(repoRoot, owned);\r\n const rel = path.relative(repoRoot, resolved);\r\n if (rel.startsWith(\"..\") || path.isAbsolute(rel)) {\r\n throw new Error(`owned path escapes repo: ${owned}`);\r\n }\r\n return resolved;\r\n });\r\n}\r\n\r\nexport function validateTailLines(lines: number): number {\r\n if (!Number.isFinite(lines) || lines <= 0 || lines > 500) return 40;\r\n return Math.floor(lines);\r\n}\r\n", "import path from \"node:path\";\r\nimport { resolveBaseUrl, resolveCallbackSecret } from \"./config.js\";\r\nimport { loadRun, loadWorker, runDirectory } from \"./run-store.js\";\r\nimport { computeWorkerStatus, deriveRunStatus, isFinishedWorkerStatus } from \"./status.js\";\r\nimport { summarizeEvent } from \"./stream.js\";\r\nimport {\r\n isPidAlive,\r\n killWorkerProcess,\r\n readJson,\r\n required,\r\n safeJson,\r\n safeSlug,\r\n sleepMs,\r\n tailFile,\r\n writeJson,\r\n} from \"./util.js\";\r\n\r\nexport async function tryCompleteWorker(\r\n args: Record<string, string | boolean>,\r\n): Promise<{ ok: boolean; skipped?: boolean; reason?: string; httpStatus?: number; response?: unknown }> {\r\n const worker = loadWorker(String(args.run), String(args.name));\r\n const status = computeWorkerStatus(worker);\r\n const agentOsId = (args.agentOsId ? String(args.agentOsId) : worker.agentOsId) || \"\";\r\n const taskId = (args.taskId ? String(args.taskId) : worker.taskId) || null;\r\n if (!agentOsId) {\r\n return { ok: false, reason: \"missing agentOsId\" };\r\n }\r\n if (!isFinishedWorkerStatus(status)) {\r\n return { ok: true, skipped: true, reason: \"worker-not-finished\" };\r\n }\r\n\r\n const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : undefined);\r\n const secret = resolveCallbackSecret(args.secret ? String(args.secret) : undefined);\r\n const url = `${base}/api/agent-os/by-id/${encodeURIComponent(agentOsId)}/harness/completion`;\r\n const body = {\r\n source: \"openclaw-harness\",\r\n agentOsId,\r\n runId: worker.runId,\r\n workerName: worker.name,\r\n taskId,\r\n startedAt: worker.startedAt,\r\n finishedAt: status.lastActivityAt || new Date().toISOString(),\r\n status,\r\n };\r\n\r\n const res = await fetch(url, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"X-OpenClaw-Cron-Secret\": secret,\r\n \"X-Kynver-Runtime-Secret\": secret,\r\n },\r\n body: JSON.stringify(body),\r\n });\r\n let parsed: unknown = null;\r\n try {\r\n parsed = await res.json();\r\n } catch {\r\n parsed = null;\r\n }\r\n return { ok: res.ok, httpStatus: res.status, response: parsed };\r\n}\r\n\r\nexport async function completeWorker(args: Record<string, string | boolean>): Promise<void> {\r\n try {\r\n const worker = loadWorker(String(args.run), String(args.name));\r\n const status = computeWorkerStatus(worker);\r\n const agentOsId = (args.agentOsId ? String(args.agentOsId) : worker.agentOsId) || \"\";\r\n const taskId = (args.taskId ? String(args.taskId) : worker.taskId) || null;\r\n if (!agentOsId) {\r\n console.error(\"worker complete requires --agent-os-id (or an agentOsId persisted at worker start)\");\r\n process.exit(1);\r\n }\r\n if (!isFinishedWorkerStatus(status)) {\r\n console.log(\r\n JSON.stringify(\r\n {\r\n worker: worker.name,\r\n runId: worker.runId,\r\n status: \"skipped\",\r\n reason: \"worker-not-finished\",\r\n workerStatus: status.status,\r\n alive: status.alive,\r\n },\r\n null,\r\n 2,\r\n ),\r\n );\r\n return;\r\n }\r\n\r\n const result = await tryCompleteWorker(args);\r\n console.log(\r\n JSON.stringify(\r\n {\r\n worker: worker.name,\r\n runId: worker.runId,\r\n agentOsId,\r\n taskId,\r\n httpStatus: result.httpStatus,\r\n response: result.response,\r\n },\r\n null,\r\n 2,\r\n ),\r\n );\r\n if (!result.ok) process.exit(1);\r\n } catch (error) {\r\n console.error(`worker complete failed: ${(error as Error).message}`);\r\n process.exit(1);\r\n }\r\n}\r\n\r\nexport function workerStatus(args: Record<string, string | boolean>): void {\r\n const worker = loadWorker(String(args.run), String(args.name));\r\n const status = computeWorkerStatus(worker);\r\n writeJson(path.join(worker.workerDir, \"last-status.json\"), status);\r\n console.log(JSON.stringify(status, null, 2));\r\n}\r\n\r\nexport function runStatus(args: Record<string, string | boolean>): void {\r\n const run = loadRun(String(args.run));\r\n const names = Object.keys(run.workers || {});\r\n const workers = names.map((name) => {\r\n const worker = readJson<Record<string, unknown>>(\r\n path.join(runDirectory(run.id), \"workers\", safeSlug(name), \"worker.json\"),\r\n null,\r\n );\r\n if (!worker) {\r\n return { worker: name, status: \"missing\", attention: \"needs_attention\", attentionReason: \"worker.json not found\" };\r\n }\r\n const status = computeWorkerStatus(worker as never);\r\n return {\r\n worker: status.worker,\r\n status: status.status,\r\n attention: status.attention.state,\r\n attentionReason: status.attention.reason,\r\n pid: status.pid,\r\n alive: status.alive,\r\n currentTool: status.currentTool,\r\n lastActivityAt: status.lastActivityAt,\r\n lastHeartbeatPhase: status.lastHeartbeatPhase,\r\n lastHeartbeatSummary: status.lastHeartbeatSummary,\r\n heartbeatBlocker: status.heartbeatBlocker,\r\n changedFileCount: status.changedFiles.length,\r\n branch: status.branch,\r\n };\r\n });\r\n const board = {\r\n runId: run.id,\r\n name: run.name,\r\n status: deriveRunStatus(run.status, workers),\r\n repo: run.repo,\r\n workerCount: workers.length,\r\n needsAttention: workers.filter((w) => w.attention && w.attention !== \"ok\" && w.attention !== \"done\").map((w) => w.worker),\r\n workers,\r\n };\r\n writeJson(path.join(runDirectory(run.id), \"last-board.json\"), board);\r\n console.log(JSON.stringify(board, null, 2));\r\n}\r\n\r\nexport function tailWorker(args: Record<string, string | boolean>): void {\r\n const worker = loadWorker(String(args.run), String(args.name));\r\n const raw = tailFile(worker.stdoutPath, Number(args.lines || 40));\r\n if (args.raw === true || args.raw === \"true\") {\r\n process.stdout.write(raw);\r\n return;\r\n }\r\n for (const line of raw.split(\"\\n\").filter(Boolean)) {\r\n const event = safeJson(line) as Record<string, unknown> | null;\r\n const summary = event ? summarizeEvent(event) : line;\r\n if (summary) console.log(summary);\r\n }\r\n}\r\n\r\nexport function stopWorker(args: Record<string, string | boolean>): void {\r\n const worker = loadWorker(String(args.run), String(args.name));\r\n if (!isPidAlive(worker.pid)) {\r\n console.log(JSON.stringify({ worker: worker.name, pid: worker.pid, status: \"not_running\" }, null, 2));\r\n return;\r\n }\r\n killWorkerProcess(worker.pid!, \"SIGTERM\");\r\n sleepMs(1500);\r\n if (isPidAlive(worker.pid)) {\r\n killWorkerProcess(worker.pid!, \"SIGKILL\");\r\n console.log(JSON.stringify({ worker: worker.name, pid: worker.pid, status: \"sigkill_sent\" }, null, 2));\r\n return;\r\n }\r\n console.log(JSON.stringify({ worker: worker.name, pid: worker.pid, status: \"stopped\" }, null, 2));\r\n}\r\n", "import path from \"node:path\";\r\nimport { resolveBaseUrl, resolveCallbackSecret } from \"./config.js\";\r\nimport { postJson } from \"./callbacks.js\";\r\nimport { dispatchRun } from \"./dispatch.js\";\r\nimport { observeRunnerResourceGate, type RunnerResourceGateShape } from \"./resource-gate.js\";\r\nimport { loadRun, runDirectory } from \"./run-store.js\";\r\nimport { computeWorkerStatus, isFinishedWorkerStatus } from \"./status.js\";\r\nimport { sweepRun } from \"./sweep.js\";\r\nimport { required, readJson, safeSlug } from \"./util.js\";\r\nimport { runStatus, tryCompleteWorker } from \"./worker-ops.js\";\r\nimport type { HarnessWorkerRecord } from \"./status.js\";\r\nimport { fetchWorkspaceRuntimePreferences } from \"./workspace-runtime-config.js\";\r\n\r\nexport interface PipelineTickResult {\r\n runId: string;\r\n agentOsId: string;\r\n execute: boolean;\r\n resourceGate: RunnerResourceGateShape;\r\n completedWorkers: Array<{ worker: string; ok: boolean; taskId?: string | null }>;\r\n operatorTick: unknown;\r\n sweep: unknown;\r\n dispatch: unknown;\r\n idle: boolean;\r\n}\r\n\r\nasync function completeFinishedWorkers(\r\n runId: string,\r\n args: Record<string, string | boolean>,\r\n): Promise<Array<{ worker: string; ok: boolean; taskId?: string | null }>> {\r\n const run = loadRun(runId);\r\n const outcomes: Array<{ worker: string; ok: boolean; taskId?: string | null }> = [];\r\n for (const name of Object.keys(run.workers || {})) {\r\n const worker = readJson<HarnessWorkerRecord>(\r\n path.join(runDirectory(run.id), \"workers\", safeSlug(name), \"worker.json\"),\r\n null,\r\n );\r\n if (!worker?.dispatched || !worker.taskId) continue;\r\n const status = computeWorkerStatus(worker);\r\n if (!isFinishedWorkerStatus(status)) continue;\r\n if (!status.finalResult) continue;\r\n const result = await tryCompleteWorker({\r\n run: runId,\r\n name,\r\n agentOsId: String(args.agentOsId || worker.agentOsId || \"\"),\r\n ...args,\r\n });\r\n outcomes.push({ worker: name, ok: result.ok, taskId: worker.taskId ?? null });\r\n }\r\n return outcomes;\r\n}\r\n\r\nasync function postOperatorTick(\r\n agentOsId: string,\r\n runId: string,\r\n resourceGate: RunnerResourceGateShape,\r\n args: Record<string, string | boolean>,\r\n): Promise<unknown> {\r\n const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : undefined);\r\n const secret = resolveCallbackSecret(args.secret ? String(args.secret) : undefined);\r\n const url = `${base}/api/agent-os/by-id/${encodeURIComponent(agentOsId)}/operator/tick`;\r\n const res = await postJson(url, secret, {\r\n agentOsId,\r\n runId,\r\n ingestHarness: true,\r\n resourceGate,\r\n });\r\n return { ok: res.ok, httpStatus: res.status, response: res.response };\r\n}\r\n\r\n/**\r\n * One operator/dispatcher cycle (M10 / D7 pull-first):\r\n * refresh status \u2192 complete finished workers \u2192 ingest operator tick \u2192 sweep leases \u2192 dispatch up to slot cap.\r\n */\r\nexport async function runPipelineTick(args: Record<string, string | boolean>): Promise<PipelineTickResult> {\r\n const runId = String(required(String(args.run || \"\"), \"--run\"));\r\n const agentOsId = String(required(String(args.agentOsId || \"\"), \"--agent-os-id\"));\r\n const execute = args.execute !== false && args.execute !== \"false\";\r\n\r\n runStatus({ run: runId });\r\n\r\n const completedWorkers = await completeFinishedWorkers(runId, args);\r\n const workspacePrefs = await fetchWorkspaceRuntimePreferences(agentOsId, args);\r\n const resourceGate = observeRunnerResourceGate({\r\n runId,\r\n configuredMaxWorkersOverride: workspacePrefs?.maxConcurrentWorkers,\r\n });\r\n const operatorTick = await postOperatorTick(agentOsId, runId, resourceGate, args);\r\n\r\n let maxStarts = resourceGate.slotsAvailable;\r\n const tickBody = operatorTick as { response?: { dispatch?: { recommendedMaxStarts?: number } } };\r\n const advised = tickBody.response?.dispatch?.recommendedMaxStarts;\r\n if (typeof advised === \"number\") {\r\n maxStarts = Math.min(maxStarts, Math.max(0, advised));\r\n }\r\n\r\n const sweep = await sweepRun({ run: runId, agentOsId, pipeline: true, ...args });\r\n\r\n let dispatch: unknown = null;\r\n if (execute && maxStarts > 0) {\r\n dispatch = await dispatchRun({\r\n run: runId,\r\n agentOsId,\r\n execute: true,\r\n maxStarts: String(maxStarts),\r\n pipeline: true,\r\n ...args,\r\n });\r\n } else {\r\n dispatch = {\r\n ok: true,\r\n skipped: true,\r\n reason: execute ? resourceGate.reason ?? \"no slots or queued work\" : \"execute disabled\",\r\n maxStarts: 0,\r\n };\r\n }\r\n\r\n const startedCount = (dispatch as { startedCount?: number })?.startedCount ?? 0;\r\n const idle = maxStarts === 0 && completedWorkers.length === 0 && startedCount === 0;\r\n\r\n return {\r\n runId,\r\n agentOsId,\r\n execute,\r\n resourceGate,\r\n completedWorkers,\r\n operatorTick,\r\n sweep,\r\n dispatch,\r\n idle,\r\n };\r\n}\r\n", "import { getJson } from \"./callbacks.js\";\r\nimport { resolveBaseUrl, resolveCallbackSecret } from \"./config.js\";\r\n\r\nexport interface WorkspaceRuntimePreferences {\r\n maxConcurrentWorkers: number | null;\r\n}\r\n\r\n/**\r\n * Pull the Command Center worker cap each pipeline tick so the daemon honors\r\n * workspace settings without restarting or editing ~/.kynver/config.json.\r\n */\r\nexport async function fetchWorkspaceRuntimePreferences(\r\n agentOsId: string,\r\n args: Record<string, string | boolean>,\r\n): Promise<WorkspaceRuntimePreferences | null> {\r\n const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : undefined);\r\n const secret = resolveCallbackSecret(args.secret ? String(args.secret) : undefined);\r\n const url = `${base}/api/agent-os/by-id/${encodeURIComponent(agentOsId)}/runtime`;\r\n\r\n try {\r\n const res = await getJson(url, secret);\r\n if (!res.ok) return null;\r\n const body = res.response as { preferences?: { maxConcurrentWorkers?: unknown } } | null;\r\n const raw = body?.preferences?.maxConcurrentWorkers;\r\n if (raw === null || raw === undefined) {\r\n return { maxConcurrentWorkers: null };\r\n }\r\n const n = Number(raw);\r\n if (!Number.isFinite(n) || n <= 0) return { maxConcurrentWorkers: null };\r\n return { maxConcurrentWorkers: Math.floor(n) };\r\n } catch {\r\n return null;\r\n }\r\n}\r\n", "import { loadUserConfig } from \"./config.js\";\r\nimport { required, sleepMs } from \"./util.js\";\r\nimport { runPipelineTick } from \"./pipeline-tick.js\";\r\n\r\nconst DEFAULT_INTERVAL_MS = 60_000;\r\nconst IDLE_INTERVAL_MS = 5 * 60_000;\r\nconst MAX_IDLE_STREAK = 10;\r\n\r\nexport async function runDaemon(args: Record<string, string | boolean>): Promise<void> {\r\n const runId = String(required(String(args.run || \"\"), \"--run\"));\r\n const agentOsId = String(required(String(args.agentOsId || loadUserConfig().agentOsId || \"\"), \"--agent-os-id\"));\r\n const execute = args.execute !== false && args.execute !== \"false\";\r\n const intervalMs = Number(args.intervalMs) > 0 ? Math.floor(Number(args.intervalMs)) : DEFAULT_INTERVAL_MS;\r\n let stopping = false;\r\n let idleStreak = 0;\r\n\r\n process.on(\"SIGINT\", () => {\r\n stopping = true;\r\n });\r\n process.on(\"SIGTERM\", () => {\r\n stopping = true;\r\n });\r\n\r\n console.error(JSON.stringify({ event: \"daemon_start\", runId, agentOsId, execute, intervalMs }));\r\n\r\n while (!stopping) {\r\n try {\r\n const tick = await runPipelineTick({ run: runId, agentOsId, execute, ...args });\r\n console.error(JSON.stringify({ event: \"daemon_tick\", ...tick }));\r\n\r\n if (tick.idle) {\r\n idleStreak++;\r\n } else {\r\n idleStreak = 0;\r\n }\r\n\r\n const backoff = idleStreak >= MAX_IDLE_STREAK ? IDLE_INTERVAL_MS : intervalMs;\r\n sleepMs(backoff);\r\n } catch (error) {\r\n console.error(JSON.stringify({ event: \"daemon_tick_error\", error: (error as Error).message }));\r\n sleepMs(intervalMs);\r\n }\r\n }\r\n\r\n console.error(JSON.stringify({ event: \"daemon_stop\", runId, agentOsId }));\r\n}\r\n\r\nexport { runPipelineTick } from \"./pipeline-tick.js\";\r\nexport { dispatchRun } from \"./dispatch.js\";\r\nexport { sweepRun } from \"./sweep.js\";\r\nexport { completeWorker } from \"./worker-ops.js\";\r\n"],
5
- "mappings": "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",
3
+ "sources": ["../src/cli.ts", "../src/config.ts", "../src/util.ts", "../src/callbacks.ts", "../src/disk-gate.ts", "../src/resource-gate.ts", "../src/run-store.ts", "../src/paths.ts", "../src/heartbeat.ts", "../src/stream.ts", "../src/git.ts", "../src/status.ts", "../src/supervisor.ts", "../src/prompt.ts", "../src/providers/claude.ts", "../src/providers/cursor.ts", "../src/providers/registry.ts", "../src/dispatch.ts", "../src/sweep.ts", "../src/worktree.ts", "../src/validate.ts", "../src/worker-ops.ts", "../src/pipeline-tick.ts", "../src/workspace-runtime-config.ts", "../src/daemon.ts", "../src/plan-progress.ts"],
4
+ "sourcesContent": ["#!/usr/bin/env node\r\nimport { mkdirSync } from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport { fileURLToPath } from \"node:url\";\r\nimport { parseArgs, runLogin, runSetup } from \"./config.js\";\r\nimport { dispatchRun } from \"./dispatch.js\";\r\nimport { getPaths } from \"./run-store.js\";\r\nimport { startWorker } from \"./supervisor.js\";\r\nimport { sweepRun } from \"./sweep.js\";\r\nimport { createRun, listRuns } from \"./worktree.js\";\r\nimport { completeWorker, runStatus, stopWorker, tailWorker, workerStatus } from \"./worker-ops.js\";\r\nimport { runDaemon } from \"./daemon.js\";\r\nimport { emitPlanProgress, verifyPlan } from \"./plan-progress.js\";\r\n\r\nfunction isHelpFlag(arg: string): boolean {\r\n return arg === \"help\" || arg === \"--help\" || arg === \"-h\";\r\n}\r\n\r\nfunction unknownCommand(scope?: string, action?: string): never {\r\n const cmd = [scope, action].filter(Boolean).join(\" \");\r\n console.error(`unknown command: ${cmd || \"(none)\"}`);\r\n usage(1);\r\n}\r\n\r\nexport function usage(code = 0): void {\r\n const out = code === 0 ? console.log : console.error;\r\n out(\r\n [\r\n \"Usage:\",\r\n \" kynver login --api-key KEY\",\r\n \" kynver setup [--api-base-url URL] [--agent-os-id ID] [--agent-os-slug SLUG] [--repo PATH] [--max-workers N] [--provider claude|cursor]\",\r\n \" kynver daemon --run RUN_ID --agent-os-id AOS_ID [--execute] [--interval-ms MS]\",\r\n \" kynver run create --repo /path/repo [--name name] [--base origin/main]\",\r\n \" kynver run list\",\r\n \" kynver run status --run RUN_ID\",\r\n \" kynver run dispatch --run RUN_ID --agent-os-id AOS_ID [--base-url URL] [--secret SECRET] [--execute] [--lane any|implementation|review|landing] [--max-starts 1] [--lease-ms MS] [--owned path[,path]] [--model claude-opus-4-7] [--disk-path /]\",\r\n \" kynver run sweep --run RUN_ID --agent-os-id AOS_ID [--base-url URL] [--secret SECRET] [--grace-ms MS]\",\r\n \" kynver worker start --run RUN_ID --name worker --task \\\"...\\\" [--owned path[,path]] [--model MODEL] [--provider claude|cursor] [--agent-os-id AOS_ID] [--task-id TASK_ID]\",\r\n \" kynver worker status --run RUN_ID --name worker\",\r\n \" kynver worker tail --run RUN_ID --name worker [--lines 40] [--raw]\",\r\n \" kynver worker stop --run RUN_ID --name worker\",\r\n \" kynver worker complete --run RUN_ID --name worker [--agent-os-id AOS_ID] [--task-id TASK_ID] [--base-url URL] [--secret SECRET]\",\r\n \" kynver plan progress --plan PLAN_ID --row ROW_KEY --role ROLE --status STATUS [--task TASK_ID] [--note NOTE] [--evidence type:value] [--agent-os-id AOS_ID]\",\r\n \" kynver plan verify --plan PLAN_ID [--worktree PATH] [--task TASK_ID] [--human-override]\",\r\n ].join(\"\\n\"),\r\n );\r\n process.exit(code);\r\n}\r\n\r\nexport async function main(argv = process.argv.slice(2)): Promise<void> {\r\n if (argv.length === 0 || isHelpFlag(argv[0]!)) return usage(0);\r\n\r\n const scope = argv.shift();\r\n let action: string | undefined;\r\n let rest: string[];\r\n\r\n if (scope === \"run\" || scope === \"worker\" || scope === \"plan\") {\r\n action = argv.shift();\r\n rest = argv;\r\n } else {\r\n rest = argv;\r\n }\r\n\r\n const args = parseArgs(rest);\r\n const { runsDir, worktreesDir } = getPaths();\r\n mkdirSync(runsDir, { recursive: true });\r\n mkdirSync(worktreesDir, { recursive: true });\r\n\r\n if (scope === \"login\") return void (await runLogin(args));\r\n if (scope === \"setup\") return void (await runSetup(args));\r\n if (scope === \"daemon\") return void (await runDaemon(args));\r\n if (scope === \"plan\" && action === \"progress\") return void (await emitPlanProgress(args));\r\n if (scope === \"plan\" && action === \"verify\") return void (await verifyPlan(args));\r\n\r\n if (scope === \"run\" && action === \"create\") return createRun(args);\r\n if (scope === \"run\" && action === \"list\") return listRuns();\r\n if (scope === \"run\" && action === \"status\") return runStatus(args);\r\n if (scope === \"run\" && action === \"dispatch\") return void (await dispatchRun(args));\r\n if (scope === \"run\" && action === \"sweep\") return void (await sweepRun(args));\r\n if (scope === \"worker\" && action === \"start\") return startWorker(args);\r\n if (scope === \"worker\" && action === \"status\") return workerStatus(args);\r\n if (scope === \"worker\" && action === \"tail\") return tailWorker(args);\r\n if (scope === \"worker\" && action === \"stop\") return stopWorker(args);\r\n if (scope === \"worker\" && action === \"complete\") return void (await completeWorker(args));\r\n\r\n unknownCommand(scope, action);\r\n}\r\n\r\nconst isCliEntry =\r\n process.argv[1] &&\r\n path.resolve(process.argv[1]) === path.resolve(fileURLToPath(import.meta.url));\r\n\r\nif (isCliEntry) {\r\n void main().catch((error) => {\r\n console.error(error);\r\n process.exit(1);\r\n });\r\n}\r\n", "import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\r\nimport { homedir } from \"node:os\";\r\nimport path from \"node:path\";\r\nimport { trimTrailingSlash } from \"./util.js\";\r\n\r\nexport interface KynverUserConfig {\r\n apiBaseUrl?: string;\r\n agentOsSlug?: string;\r\n agentOsId?: string;\r\n defaultRepo?: string;\r\n workerProvider?: string;\r\n harnessRoot?: string;\r\n /** Max concurrent workers on this machine. Omit to auto-size from RAM. */\r\n maxConcurrentWorkers?: number;\r\n /** @internal Advanced tuning \u2014 not required for setup. */\r\n perWorkerMemBytes?: number;\r\n /** @internal Advanced tuning \u2014 not required for setup. */\r\n memReserveBytes?: number;\r\n /** @internal Advanced tuning \u2014 not required for setup. */\r\n memUtilization?: number;\r\n}\r\n\r\nconst CONFIG_DIR = path.join(homedir(), \".kynver\");\r\nconst CONFIG_FILE = path.join(CONFIG_DIR, \"config.json\");\r\nconst CREDENTIALS_FILE = path.join(CONFIG_DIR, \"credentials\");\r\n\r\nexport function loadUserConfig(): KynverUserConfig {\r\n if (!existsSync(CONFIG_FILE)) return {};\r\n try {\r\n return JSON.parse(readFileSync(CONFIG_FILE, \"utf8\")) as KynverUserConfig;\r\n } catch {\r\n return {};\r\n }\r\n}\r\n\r\nexport function saveUserConfig(config: KynverUserConfig): void {\r\n mkdirSync(CONFIG_DIR, { recursive: true });\r\n writeFileSync(CONFIG_FILE, `${JSON.stringify(config, null, 2)}\\n`, { mode: 0o600 });\r\n}\r\n\r\nexport function loadApiKey(): string | undefined {\r\n if (process.env.KYNVER_API_KEY) return process.env.KYNVER_API_KEY;\r\n if (!existsSync(CREDENTIALS_FILE)) return undefined;\r\n try {\r\n const parsed = JSON.parse(readFileSync(CREDENTIALS_FILE, \"utf8\")) as { apiKey?: string };\r\n return parsed.apiKey;\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nexport function saveApiKey(apiKey: string): void {\r\n mkdirSync(CONFIG_DIR, { recursive: true });\r\n writeFileSync(CREDENTIALS_FILE, `${JSON.stringify({ apiKey }, null, 2)}\\n`, { mode: 0o600 });\r\n}\r\n\r\nexport function resolveBaseUrl(argsBaseUrl?: string): string {\r\n const baseUrl =\r\n argsBaseUrl ||\r\n process.env.KYNVER_API_URL ||\r\n process.env.OPENCLAW_CRON_FIRE_BASE_URL ||\r\n loadUserConfig().apiBaseUrl;\r\n if (!baseUrl) failConfig(\"requires --base-url, KYNVER_API_URL, OPENCLAW_CRON_FIRE_BASE_URL, or ~/.kynver/config.json apiBaseUrl\");\r\n return trimTrailingSlash(String(baseUrl));\r\n}\r\n\r\nexport function resolveCallbackSecret(argsSecret?: string): string {\r\n const secret =\r\n argsSecret ||\r\n process.env.KYNVER_RUNTIME_SECRET ||\r\n process.env.OPENCLAW_CRON_SECRET;\r\n if (!secret) failConfig(\"requires --secret, KYNVER_RUNTIME_SECRET, or OPENCLAW_CRON_SECRET\");\r\n return String(secret);\r\n}\r\n\r\nfunction failConfig(message: string): never {\r\n console.error(message);\r\n process.exit(1);\r\n}\r\n\r\nexport function parseArgs(argv: string[]): Record<string, string | boolean> {\r\n const args: Record<string, string | boolean> = {};\r\n for (let i = 0; i < argv.length; i++) {\r\n const item = argv[i];\r\n if (!item.startsWith(\"--\")) continue;\r\n const key = item.slice(2).replace(/-([a-z])/g, (_, c: string) => c.toUpperCase());\r\n const next = argv[i + 1];\r\n if (!next || next.startsWith(\"--\")) args[key] = true;\r\n else {\r\n args[key] = next;\r\n i++;\r\n }\r\n }\r\n return args;\r\n}\r\n\r\nexport async function runSetup(args: Record<string, string | boolean>): Promise<void> {\r\n const existing = loadUserConfig();\r\n const maxWorkersRaw =\r\n typeof args.maxWorkers === \"string\"\r\n ? args.maxWorkers\r\n : typeof args.maxConcurrentWorkers === \"string\"\r\n ? args.maxConcurrentWorkers\r\n : undefined;\r\n const config: KynverUserConfig = {\r\n ...existing,\r\n ...(typeof args.apiBaseUrl === \"string\" ? { apiBaseUrl: args.apiBaseUrl } : {}),\r\n ...(typeof args.agentOsSlug === \"string\" ? { agentOsSlug: args.agentOsSlug } : {}),\r\n ...(typeof args.agentOsId === \"string\" ? { agentOsId: args.agentOsId } : {}),\r\n ...(typeof args.repo === \"string\" ? { defaultRepo: args.repo } : {}),\r\n ...(typeof args.harnessRoot === \"string\" ? { harnessRoot: args.harnessRoot } : {}),\r\n ...(maxWorkersRaw ? { maxConcurrentWorkers: Math.max(1, Math.floor(Number(maxWorkersRaw))) } : {}),\r\n workerProvider: typeof args.provider === \"string\" ? args.provider : existing.workerProvider || \"claude\",\r\n };\r\n saveUserConfig(config);\r\n console.log(\r\n JSON.stringify(\r\n {\r\n ok: true,\r\n configPath: CONFIG_FILE,\r\n config,\r\n note:\r\n \"Set worker limit once with --max-workers N (or omit to auto-size from RAM). Advanced RAM tuning stays internal.\",\r\n },\r\n null,\r\n 2,\r\n ),\r\n );\r\n}\r\n\r\nexport async function runLogin(args: Record<string, string | boolean>): Promise<void> {\r\n const apiKey = typeof args.apiKey === \"string\" ? args.apiKey : process.env.KYNVER_API_KEY;\r\n if (!apiKey) failConfig(\"kynver login requires --api-key or KYNVER_API_KEY\");\r\n saveApiKey(apiKey);\r\n console.log(JSON.stringify({ ok: true, credentialsPath: CREDENTIALS_FILE }, null, 2));\r\n}\r\n", "import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from \"node:fs\";\r\nimport path from \"node:path\";\r\n\r\nexport function fail(message: string): never {\r\n console.error(message);\r\n process.exit(1);\r\n}\r\n\r\nexport function required(value: string | undefined, name: string): string {\r\n if (!value) fail(`missing ${name}`);\r\n return value;\r\n}\r\n\r\nexport function safeJson(line: string): unknown {\r\n try {\r\n return JSON.parse(line);\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nexport function readJson<T>(file: string, fallback?: T): T {\r\n try {\r\n return JSON.parse(readFileSync(file, \"utf8\")) as T;\r\n } catch (error) {\r\n if (arguments.length > 1) return fallback as T;\r\n fail(`failed to read ${file}: ${(error as Error).message}`);\r\n }\r\n}\r\n\r\nexport function writeJson(file: string, value: unknown): void {\r\n mkdirSync(path.dirname(file), { recursive: true });\r\n writeFileSync(file, `${JSON.stringify(value, null, 2)}\\n`);\r\n}\r\n\r\nexport function safeSlug(value: string | undefined): string {\r\n return (\r\n String(value || \"\")\r\n .toLowerCase()\r\n .replace(/[^a-z0-9._-]+/g, \"-\")\r\n .replace(/^-+|-+$/g, \"\") || \"worker\"\r\n );\r\n}\r\n\r\nexport function timestampSlug(name: string): string {\r\n return safeSlug(`${new Date().toISOString().replace(/[-:]/g, \"\").replace(/\\..+/, \"Z\")}-${name}`);\r\n}\r\n\r\nexport function splitCsv(value: string | undefined): string[] {\r\n return value ? String(value).split(\",\").map((item) => item.trim()).filter(Boolean) : [];\r\n}\r\n\r\nexport function trimTrailingSlash(url: string): string {\r\n return String(url).replace(/\\/+$/, \"\");\r\n}\r\n\r\nexport function oneLine(value: string): string {\r\n return String(value || \"\")\r\n .replace(/\\s+/g, \" \")\r\n .trim();\r\n}\r\n\r\nexport function fileSize(file: string): number {\r\n try {\r\n return statSync(file).size;\r\n } catch {\r\n return 0;\r\n }\r\n}\r\n\r\nexport function fileMtime(file: string): string | null {\r\n try {\r\n return statSync(file).mtime.toISOString();\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nexport function tailFile(file: string, lines: number): string {\r\n if (!existsSync(file)) return \"\";\r\n const data = readFileSync(file, \"utf8\");\r\n return data.split(\"\\n\").slice(-lines).join(\"\\n\");\r\n}\r\n\r\nexport function readMaybeFile(file: string | undefined): string {\r\n return file ? readFileSync(path.resolve(file), \"utf8\") : \"\";\r\n}\r\n\r\nexport function listRunIds(runsDir: string): string[] {\r\n if (!existsSync(runsDir)) return [];\r\n return readdirSync(runsDir, { withFileTypes: true })\r\n .filter((entry) => entry.isDirectory())\r\n .map((entry) => entry.name);\r\n}\r\n\r\nexport function sleepMs(ms: number): void {\r\n Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);\r\n}\r\n\r\nexport function isPidAlive(pid: number | undefined): boolean {\r\n if (!pid) return false;\r\n try {\r\n process.kill(pid, 0);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nexport function killWorkerProcess(pid: number, signal: NodeJS.Signals): void {\r\n try {\r\n process.kill(-pid, signal);\r\n } catch {\r\n process.kill(pid, signal);\r\n }\r\n}\r\n\r\nexport function latestIso(values: Array<string | null | undefined>): string | null {\r\n let best: string | null = null;\r\n let bestMs = -Infinity;\r\n for (const value of values) {\r\n if (!value) continue;\r\n const ms = Date.parse(value);\r\n if (Number.isFinite(ms) && ms > bestMs) {\r\n bestMs = ms;\r\n best = value;\r\n }\r\n }\r\n return best;\r\n}\r\n\r\nexport function secsAgo(ms: number): number {\r\n return Math.max(0, Math.round((Date.now() - ms) / 1000));\r\n}\r\n", "export interface DispatchNextDiskGateShape {\r\n ok: boolean;\r\n path: string;\r\n freeBytes: number;\r\n totalBytes: number;\r\n usedPercent: number;\r\n warnBelowBytes: number;\r\n criticalBelowBytes: number;\r\n maxUsedPercent: number;\r\n hardMaxUsedPercent: number;\r\n reason: string | null;\r\n}\r\n\r\nexport interface DispatchNextResourceGateShape {\r\n ok: boolean;\r\n totalMemBytes: number;\r\n freeMemBytes: number;\r\n memReserveBytes: number;\r\n perWorkerMemBytes: number;\r\n configuredMaxWorkers: number | null;\r\n capacityWorkers: number;\r\n maxConcurrentWorkers: number;\r\n activeWorkers: number;\r\n slotsAvailable: number;\r\n reason: string | null;\r\n}\r\n\r\nexport interface PostJsonResult {\r\n ok: boolean;\r\n status: number;\r\n response: unknown;\r\n}\r\n\r\nexport async function postJson(url: string, secret: string, body: unknown): Promise<PostJsonResult> {\r\n const res = await fetch(url, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"X-OpenClaw-Cron-Secret\": String(secret),\r\n \"X-Kynver-Runtime-Secret\": String(secret),\r\n },\r\n body: JSON.stringify(body),\r\n });\r\n let response: unknown = null;\r\n try {\r\n response = await res.json();\r\n } catch {\r\n response = null;\r\n }\r\n return { ok: res.ok, status: res.status, response };\r\n}\r\n\r\nexport async function getJson(url: string, secret: string): Promise<PostJsonResult> {\r\n const res = await fetch(url, {\r\n method: \"GET\",\r\n headers: {\r\n \"X-OpenClaw-Cron-Secret\": String(secret),\r\n \"X-Kynver-Runtime-Secret\": String(secret),\r\n },\r\n });\r\n let response: unknown = null;\r\n try {\r\n response = await res.json();\r\n } catch {\r\n response = null;\r\n }\r\n return { ok: res.ok, status: res.status, response };\r\n}\r\n", "import { statfsSync } from \"node:fs\";\r\nimport type { DispatchNextDiskGateShape } from \"./callbacks.js\";\r\n\r\nconst DEFAULT_WARN_FREE_BYTES = 30 * 1024 * 1024 * 1024;\r\nconst DEFAULT_CRITICAL_FREE_BYTES = 15 * 1024 * 1024 * 1024;\r\nconst DEFAULT_MAX_USED_PERCENT = 80;\r\nconst DEFAULT_HARD_MAX_USED_PERCENT = 90;\r\n\r\nexport interface ObserveDiskGateInput {\r\n diskPath?: string;\r\n diskFreeWarnBytes?: number;\r\n diskFreeCriticalBytes?: number;\r\n diskMaxUsedPercent?: number;\r\n diskHardMaxUsedPercent?: number;\r\n}\r\n\r\nexport function observeRunnerDiskGate(input: ObserveDiskGateInput = {}): DispatchNextDiskGateShape {\r\n const path = input.diskPath?.trim() || \"/\";\r\n const warnBelowBytes = input.diskFreeWarnBytes ?? DEFAULT_WARN_FREE_BYTES;\r\n const criticalBelowBytes = input.diskFreeCriticalBytes ?? DEFAULT_CRITICAL_FREE_BYTES;\r\n const maxUsedPercent = input.diskMaxUsedPercent ?? DEFAULT_MAX_USED_PERCENT;\r\n const hardMaxUsedPercent = input.diskHardMaxUsedPercent ?? DEFAULT_HARD_MAX_USED_PERCENT;\r\n\r\n const stats = statfsSync(path);\r\n const freeBytes = Number(stats.bavail) * Number(stats.bsize);\r\n const totalBytes = Number(stats.blocks) * Number(stats.bsize);\r\n const usedPercent = totalBytes > 0 ? ((totalBytes - freeBytes) / totalBytes) * 100 : 100;\r\n const lowFree = freeBytes < warnBelowBytes;\r\n const criticalFree = freeBytes < criticalBelowBytes;\r\n const highUse = usedPercent > maxUsedPercent;\r\n const hardHighUse = usedPercent > hardMaxUsedPercent;\r\n const ok = !lowFree && !criticalFree && !highUse && !hardHighUse;\r\n\r\n let reason: string | null = null;\r\n if (!ok) {\r\n reason = [\r\n criticalFree ? `free space below critical ${criticalBelowBytes} bytes` : null,\r\n lowFree ? `free space below warning ${warnBelowBytes} bytes` : null,\r\n hardHighUse ? `used percent above hard cap ${hardMaxUsedPercent}%` : null,\r\n highUse ? `used percent above cap ${maxUsedPercent}%` : null,\r\n ]\r\n .filter(Boolean)\r\n .join(\"; \");\r\n }\r\n\r\n return {\r\n ok,\r\n path,\r\n freeBytes,\r\n totalBytes,\r\n usedPercent,\r\n warnBelowBytes,\r\n criticalBelowBytes,\r\n maxUsedPercent,\r\n hardMaxUsedPercent,\r\n reason,\r\n };\r\n}\r\n", "import os from \"node:os\";\r\nimport path from \"node:path\";\r\nimport { loadUserConfig, type KynverUserConfig } from \"./config.js\";\r\nimport { loadRun, runDirectory } from \"./run-store.js\";\r\nimport { computeWorkerStatus } from \"./status.js\";\r\nimport { readJson, safeSlug } from \"./util.js\";\r\nimport type { HarnessWorkerRecord } from \"./status.js\";\r\n\r\n/** Default RAM budget per worker (~500 MiB, dogfood measured). Internal \u2014 not a setup knob. */\r\nexport const DEFAULT_PER_WORKER_MEM_BYTES = 500 * 1024 * 1024;\r\n\r\n/** Keep headroom for OS / IDE. Internal \u2014 not a setup knob. */\r\nexport const DEFAULT_MEM_RESERVE_BYTES = 4 * 1024 * 1024 * 1024;\r\n\r\n/** Fraction of total RAM used when auto-sizing worker cap. Internal. */\r\nexport const DEFAULT_MEM_UTILIZATION = 0.85;\r\n\r\n/** Auto cap when the user has not set maxConcurrentWorkers (safety on huge hosts). */\r\nexport const AUTO_MAX_WORKERS_CEILING = 64;\r\n\r\nexport interface RunnerResourceGateShape {\r\n ok: boolean;\r\n totalMemBytes: number;\r\n freeMemBytes: number;\r\n memReserveBytes: number;\r\n perWorkerMemBytes: number;\r\n configuredMaxWorkers: number | null;\r\n autoCap: number;\r\n capacityWorkers: number;\r\n maxConcurrentWorkers: number;\r\n activeWorkers: number;\r\n slotsAvailable: number;\r\n reason: string | null;\r\n}\r\n\r\nexport interface ObserveResourceGateInput {\r\n runId: string;\r\n config?: KynverUserConfig;\r\n /** Command Center / workspace override \u2014 wins over local config when set. */\r\n configuredMaxWorkersOverride?: number | null;\r\n /** Override active worker count (tests). */\r\n activeWorkers?: number;\r\n totalMemBytes?: number;\r\n freeMemBytes?: number;\r\n}\r\n\r\nfunction positiveInt(value: unknown, fallback: number): number {\r\n const n = Number(value);\r\n if (!Number.isFinite(n) || n <= 0) return fallback;\r\n return Math.floor(n);\r\n}\r\n\r\nfunction resolveResourceConfig(\r\n config: KynverUserConfig = loadUserConfig(),\r\n configuredMaxWorkersOverride?: number | null,\r\n) {\r\n const perWorkerMemBytes = positiveInt(config.perWorkerMemBytes, DEFAULT_PER_WORKER_MEM_BYTES);\r\n const memReserveBytes = positiveInt(config.memReserveBytes, DEFAULT_MEM_RESERVE_BYTES);\r\n const memUtilization = Math.min(\r\n 1,\r\n Math.max(0.1, Number(config.memUtilization) > 0 ? Number(config.memUtilization) : DEFAULT_MEM_UTILIZATION),\r\n );\r\n const envCap = process.env.KYNVER_MAX_WORKERS ? positiveInt(process.env.KYNVER_MAX_WORKERS, 0) || null : null;\r\n const configuredMaxWorkers =\r\n configuredMaxWorkersOverride !== undefined\r\n ? configuredMaxWorkersOverride\r\n : envCap ??\r\n (config.maxConcurrentWorkers !== undefined && config.maxConcurrentWorkers !== null\r\n ? positiveInt(config.maxConcurrentWorkers, 0) || null\r\n : null);\r\n return { perWorkerMemBytes, memReserveBytes, memUtilization, configuredMaxWorkers };\r\n}\r\n\r\n/** How many workers this host could run from RAM alone (before a user cap). */\r\nexport function computeAutoMaxWorkers(\r\n totalMemBytes: number,\r\n opts: { perWorkerMemBytes?: number; memReserveBytes?: number; memUtilization?: number } = {},\r\n): number {\r\n const perWorkerMemBytes = opts.perWorkerMemBytes ?? DEFAULT_PER_WORKER_MEM_BYTES;\r\n const memReserveBytes = opts.memReserveBytes ?? DEFAULT_MEM_RESERVE_BYTES;\r\n const memUtilization = opts.memUtilization ?? DEFAULT_MEM_UTILIZATION;\r\n const budgetBytes = Math.max(0, Math.floor(totalMemBytes * memUtilization) - memReserveBytes);\r\n const raw = Math.max(1, Math.floor(budgetBytes / perWorkerMemBytes));\r\n return Math.min(raw, AUTO_MAX_WORKERS_CEILING);\r\n}\r\n\r\n/** Count harness workers that are alive and still executing (not finished). */\r\nexport function countActiveWorkers(runId: string): number {\r\n const run = loadRun(runId);\r\n let active = 0;\r\n for (const name of Object.keys(run.workers || {})) {\r\n const worker = readJson<HarnessWorkerRecord>(\r\n path.join(runDirectory(run.id), \"workers\", safeSlug(name), \"worker.json\"),\r\n null,\r\n );\r\n if (!worker) continue;\r\n const status = computeWorkerStatus(worker);\r\n if (status.alive && !status.finalResult && status.attention.state !== \"done\") {\r\n active++;\r\n }\r\n }\r\n return active;\r\n}\r\n\r\n/**\r\n * Compute how many workers this host can run and how many dispatch slots remain.\r\n * Uses total RAM for steady-state capacity and free RAM as a hard safety gate.\r\n */\r\nexport function observeRunnerResourceGate(input: ObserveResourceGateInput): RunnerResourceGateShape {\r\n const { perWorkerMemBytes, memReserveBytes, memUtilization, configuredMaxWorkers } = resolveResourceConfig(\r\n input.config,\r\n input.configuredMaxWorkersOverride,\r\n );\r\n\r\n const totalMemBytes = input.totalMemBytes ?? os.totalmem();\r\n const freeMemBytes = input.freeMemBytes ?? os.freemem();\r\n const activeWorkers = input.activeWorkers ?? countActiveWorkers(input.runId);\r\n\r\n const budgetBytes = Math.max(0, Math.floor(totalMemBytes * memUtilization) - memReserveBytes);\r\n const capacityFromTotal = Math.max(0, Math.floor(budgetBytes / perWorkerMemBytes));\r\n const capacityFromFree = Math.max(0, Math.floor(Math.max(0, freeMemBytes - memReserveBytes) / perWorkerMemBytes));\r\n\r\n const autoCap = computeAutoMaxWorkers(totalMemBytes, { perWorkerMemBytes, memReserveBytes, memUtilization });\r\n const targetCap = configuredMaxWorkers ?? autoCap;\r\n const maxConcurrentWorkers = Math.max(0, Math.min(targetCap, capacityFromTotal));\r\n const slotsByCapacity = Math.max(0, maxConcurrentWorkers - activeWorkers);\r\n const slotsByFreeMem = Math.max(0, capacityFromFree - activeWorkers);\r\n const slotsAvailable = Math.min(slotsByCapacity, slotsByFreeMem);\r\n\r\n let reason: string | null = null;\r\n if (slotsAvailable <= 0) {\r\n if (activeWorkers >= maxConcurrentWorkers) {\r\n reason = `at worker limit (${activeWorkers}/${maxConcurrentWorkers} running)`;\r\n } else if (capacityFromFree <= activeWorkers) {\r\n reason = \"insufficient free memory \u2014 waiting for workers to finish\";\r\n } else {\r\n reason = \"no worker slots available\";\r\n }\r\n }\r\n\r\n return {\r\n ok: slotsAvailable > 0,\r\n totalMemBytes,\r\n freeMemBytes,\r\n memReserveBytes,\r\n perWorkerMemBytes,\r\n configuredMaxWorkers,\r\n autoCap,\r\n capacityWorkers: capacityFromTotal,\r\n maxConcurrentWorkers,\r\n activeWorkers,\r\n slotsAvailable,\r\n reason,\r\n };\r\n}\r\n", "import path from \"node:path\";\r\nimport { getHarnessPaths, runDir as runDirPath } from \"./paths.js\";\r\nimport { readJson, safeSlug, writeJson } from \"./util.js\";\r\nimport type { HarnessWorkerRecord } from \"./status.js\";\r\n\r\nexport interface HarnessRunRecord {\r\n id: string;\r\n name: string;\r\n repo: string;\r\n base: string;\r\n baseCommit: string;\r\n status: string;\r\n createdAt: string;\r\n workers: Record<string, { workerDir: string; statusPath: string }>;\r\n}\r\n\r\nexport function getPaths() {\r\n return getHarnessPaths();\r\n}\r\n\r\nexport function loadRun(id: string): HarnessRunRecord {\r\n const { runsDir } = getPaths();\r\n return readJson<HarnessRunRecord>(path.join(runDirPath(runsDir, safeSlug(id)), \"run.json\"));\r\n}\r\n\r\nexport function loadWorker(runId: string, name: string): HarnessWorkerRecord {\r\n const { runsDir } = getPaths();\r\n return readJson<HarnessWorkerRecord>(\r\n path.join(runDirPath(runsDir, safeSlug(runId)), \"workers\", safeSlug(name), \"worker.json\"),\r\n );\r\n}\r\n\r\nexport function saveRun(run: HarnessRunRecord): void {\r\n const { runsDir } = getPaths();\r\n writeJson(path.join(runDirPath(runsDir, run.id), \"run.json\"), run);\r\n}\r\n\r\nexport function saveWorker(runId: string, worker: HarnessWorkerRecord): void {\r\n const { runsDir } = getPaths();\r\n writeJson(path.join(runDirPath(runsDir, runId), \"workers\", worker.name, \"worker.json\"), worker);\r\n}\r\n\r\nexport function runDirectory(id: string): string {\r\n const { runsDir } = getPaths();\r\n return runDirPath(runsDir, safeSlug(id));\r\n}\r\n", "import { existsSync } from \"node:fs\";\r\nimport { homedir } from \"node:os\";\r\nimport path from \"node:path\";\r\nimport { safeSlug } from \"./util.js\";\r\n\r\nconst LEGACY_ROOT = path.join(homedir(), \".openclaw\", \"harness\");\r\n\r\nexport function resolveHarnessRoot(): string {\r\n const env = process.env.KYNVER_HARNESS_ROOT || process.env.OPUS_HARNESS_ROOT;\r\n if (env) return path.resolve(env);\r\n const kynverRoot = path.join(homedir(), \".kynver\", \"harness\");\r\n if (existsSync(kynverRoot)) return kynverRoot;\r\n if (existsSync(LEGACY_ROOT)) return LEGACY_ROOT;\r\n return kynverRoot;\r\n}\r\n\r\nexport function getHarnessPaths() {\r\n const harnessRoot = resolveHarnessRoot();\r\n return {\r\n harnessRoot,\r\n runsDir: path.join(harnessRoot, \"runs\"),\r\n worktreesDir: path.join(harnessRoot, \"worktrees\"),\r\n };\r\n}\r\n\r\nexport function runDir(runsDir: string, id: string): string {\r\n return path.join(runsDir, safeSlug(id));\r\n}\r\n", "import { existsSync, readFileSync } from \"node:fs\";\r\nimport { safeJson } from \"./util.js\";\r\n\r\nexport interface ParsedHeartbeat {\r\n heartbeatCount: number;\r\n lastHeartbeatAt: string | null;\r\n lastHeartbeatPhase: string | null;\r\n lastHeartbeatSummary: string | null;\r\n heartbeatBlocker: string | null;\r\n}\r\n\r\nexport function parseHeartbeat(file: string): ParsedHeartbeat {\r\n const result: ParsedHeartbeat = {\r\n heartbeatCount: 0,\r\n lastHeartbeatAt: null,\r\n lastHeartbeatPhase: null,\r\n lastHeartbeatSummary: null,\r\n heartbeatBlocker: null,\r\n };\r\n if (!existsSync(file)) return result;\r\n const lines = readFileSync(file, \"utf8\").split(\"\\n\").filter(Boolean);\r\n for (const line of lines) {\r\n const entry = safeJson(line);\r\n if (!entry || typeof entry !== \"object\" || Array.isArray(entry)) continue;\r\n const row = entry as Record<string, unknown>;\r\n result.heartbeatCount++;\r\n if (row.ts) result.lastHeartbeatAt = String(row.ts);\r\n if (row.phase !== undefined && row.phase !== null) result.lastHeartbeatPhase = String(row.phase);\r\n if (row.summary !== undefined && row.summary !== null) result.lastHeartbeatSummary = String(row.summary);\r\n result.heartbeatBlocker = row.blocker ? String(row.blocker) : null;\r\n }\r\n return result;\r\n}\r\n", "import { existsSync, readFileSync } from \"node:fs\";\r\nimport { oneLine, safeJson } from \"./util.js\";\r\n\r\nexport interface ParsedStream {\r\n firstEventAt: string | null;\r\n lastEventAt: string | null;\r\n currentTool: string | null;\r\n finalResult: unknown;\r\n error: string | null;\r\n}\r\n\r\nexport function parseClaudeStream(file: string): ParsedStream {\r\n const result: ParsedStream = {\r\n firstEventAt: null,\r\n lastEventAt: null,\r\n currentTool: null,\r\n finalResult: null,\r\n error: null,\r\n };\r\n if (!existsSync(file)) return result;\r\n const lines = readFileSync(file, \"utf8\").split(\"\\n\").filter(Boolean);\r\n for (const line of lines) {\r\n const event = safeJson(line) as Record<string, unknown> | null;\r\n if (!event) continue;\r\n const tsMs = event.timestamp_ms as number | undefined;\r\n const ts = (event.timestamp || event.ts || (tsMs ? new Date(tsMs).toISOString() : undefined)) as\r\n | string\r\n | undefined;\r\n if (ts) {\r\n result.firstEventAt ||= ts;\r\n result.lastEventAt = ts;\r\n }\r\n if (\r\n event.type === \"stream_event\" &&\r\n event.event &&\r\n typeof event.event === \"object\" &&\r\n (event.event as Record<string, unknown>).type === \"content_block_start\"\r\n ) {\r\n const block = (event.event as Record<string, unknown>).content_block as Record<string, unknown> | undefined;\r\n if (block?.type === \"tool_use\") result.currentTool = String(block.name || \"tool\");\r\n }\r\n if (event.type === \"assistant\" && event.message && typeof event.message === \"object\") {\r\n const content = (event.message as Record<string, unknown>).content;\r\n if (Array.isArray(content)) {\r\n const tool = content.find((item) => item?.type === \"tool_use\") as Record<string, unknown> | undefined;\r\n if (tool) result.currentTool = String(tool.name || result.currentTool);\r\n }\r\n }\r\n if (event.type === \"result\") {\r\n result.finalResult = event.result || event.subtype || event.terminal_reason || \"completed\";\r\n if (event.is_error) result.error = String(event.result || event.api_error_status || \"Claude result error\");\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nexport function summarizeEvent(event: Record<string, unknown>): string | undefined {\r\n if (event.type === \"system\" && event.subtype) {\r\n return `[system:${event.subtype}] ${String(event.status || event.cwd || \"\")}`.trim();\r\n }\r\n if (event.type === \"stream_event\" && event.event && typeof event.event === \"object\") {\r\n const type = (event.event as Record<string, unknown>).type;\r\n if (type === \"content_block_start\") {\r\n const block = (event.event as Record<string, unknown>).content_block as Record<string, unknown> | undefined;\r\n if (block?.type === \"tool_use\") return `[tool:start] ${block.name}`;\r\n }\r\n if (type === \"content_block_delta\") {\r\n const delta = (event.event as Record<string, unknown>).delta as Record<string, unknown> | undefined;\r\n if (delta?.partial_json) return `[tool:input] ${delta.partial_json}`;\r\n }\r\n if (type === \"message_stop\") return \"[message:stop]\";\r\n return type ? `[stream:${type}]` : undefined;\r\n }\r\n if (event.type === \"assistant\" && event.message && typeof event.message === \"object\") {\r\n const content = (event.message as Record<string, unknown>).content;\r\n if (Array.isArray(content)) {\r\n const text = content.find((item) => item?.type === \"text\") as Record<string, unknown> | undefined;\r\n if (text) return `[assistant] ${oneLine(String(text.text || \"\"))}`;\r\n const tool = content.find((item) => item?.type === \"tool_use\") as Record<string, unknown> | undefined;\r\n if (tool) return `[tool] ${tool.name} ${JSON.stringify(tool.input || {})}`;\r\n }\r\n }\r\n if (event.type === \"user\" && event.tool_use_result) {\r\n const result = event.tool_use_result as Record<string, unknown>;\r\n return `[tool:result] stdout=${JSON.stringify(result.stdout || \"\")} stderr=${JSON.stringify(result.stderr || \"\")}`;\r\n }\r\n if (event.type === \"result\") {\r\n return `[result] ${event.subtype || \"\"} ${oneLine(String(event.result || \"\"))}`.trim();\r\n }\r\n return undefined;\r\n}\r\n", "import { spawnSync } from \"node:child_process\";\r\nimport { fail } from \"./util.js\";\r\n\r\nexport interface GitOptions {\r\n allowFailure?: boolean;\r\n throwError?: boolean;\r\n}\r\n\r\nexport function git(cwd: string, args: string[], options: GitOptions = {}): string {\r\n const res = spawnSync(\"git\", args, { cwd, encoding: \"utf8\" });\r\n if (res.status !== 0 && !options.allowFailure) {\r\n const message = `git ${args.join(\" \")} failed: ${res.stderr || res.stdout}`;\r\n if (options.throwError) throw new Error(message);\r\n fail(message);\r\n }\r\n return res.stdout || \"\";\r\n}\r\n\r\nexport function ensureGitRepo(repo: string): void {\r\n git(repo, [\"rev-parse\", \"--show-toplevel\"]);\r\n}\r\n\r\nexport function gitStatusShort(worktreePath: string): string[] {\r\n return git(worktreePath, [\"status\", \"--short\"], { allowFailure: true })\r\n .split(\"\\n\")\r\n .map((line) => line.trim())\r\n .filter(Boolean);\r\n}\r\n\r\nexport function scrubClaudeEnv(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv {\r\n const next = { ...env };\r\n delete next.ANTHROPIC_API_KEY;\r\n return next;\r\n}\r\n", "import { parseHeartbeat } from \"./heartbeat.js\";\r\nimport { parseClaudeStream } from \"./stream.js\";\r\nimport { gitStatusShort } from \"./git.js\";\r\nimport {\r\n fileMtime,\r\n fileSize,\r\n isPidAlive,\r\n latestIso,\r\n secsAgo,\r\n tailFile,\r\n} from \"./util.js\";\r\n\r\nexport const NO_START_MS = 180_000;\r\nexport const STALE_MS = 600_000;\r\n\r\nexport interface WorkerAttention {\r\n state: \"done\" | \"needs_attention\" | \"blocked\" | \"stale\" | \"ok\";\r\n reason: string;\r\n}\r\n\r\nexport interface HarnessWorkerRecord {\r\n name: string;\r\n runId: string;\r\n status: string;\r\n pid?: number;\r\n model?: string;\r\n branch: string;\r\n worktreePath: string;\r\n workerDir: string;\r\n stdoutPath: string;\r\n stderrPath: string;\r\n heartbeatPath: string;\r\n ownedPaths?: string[];\r\n agentOsId?: string;\r\n taskId?: string;\r\n leaseOwner?: string;\r\n dispatched?: boolean;\r\n startedAt?: string;\r\n}\r\n\r\nexport interface RawHarnessWorkerStatus {\r\n runId: string;\r\n worker: string;\r\n pid?: number;\r\n alive: boolean;\r\n status: string;\r\n attention: WorkerAttention;\r\n branch: string;\r\n worktreePath: string;\r\n ownedPaths?: string[];\r\n stdoutBytes: number;\r\n stderrBytes: number;\r\n heartbeatBytes: number;\r\n firstEventAt: string | null;\r\n lastEventAt: string | null;\r\n lastActivityAt: string | null;\r\n currentTool: string | null;\r\n heartbeatCount: number;\r\n lastHeartbeatAt: string | null;\r\n lastHeartbeatPhase: string | null;\r\n lastHeartbeatSummary: string | null;\r\n heartbeatBlocker: string | null;\r\n finalResult: unknown;\r\n error?: string;\r\n changedFiles: string[];\r\n}\r\n\r\nexport function computeAttention(input: {\r\n alive: boolean;\r\n finalResult: unknown;\r\n firstEventAt: string | null;\r\n stdoutBytes: number;\r\n heartbeatBytes: number;\r\n lastActivityAt: string | null;\r\n heartbeatBlocker: string | null;\r\n startedAt?: string;\r\n}): WorkerAttention {\r\n const now = Date.now();\r\n if (input.finalResult) return { state: \"done\", reason: \"final result recorded\" };\r\n if (!input.alive) return { state: \"needs_attention\", reason: \"process exited without a final result\" };\r\n if (input.heartbeatBlocker) {\r\n return { state: \"blocked\", reason: `worker heartbeat reported blocker: ${input.heartbeatBlocker}` };\r\n }\r\n const startMs = input.startedAt ? Date.parse(input.startedAt) : NaN;\r\n if (\r\n !input.firstEventAt &&\r\n input.stdoutBytes === 0 &&\r\n input.heartbeatBytes === 0 &&\r\n Number.isFinite(startMs) &&\r\n now - startMs > NO_START_MS\r\n ) {\r\n return { state: \"needs_attention\", reason: `no first stream event ${secsAgo(startMs)}s after start` };\r\n }\r\n const actMs = input.lastActivityAt ? Date.parse(input.lastActivityAt) : NaN;\r\n if (Number.isFinite(actMs) && now - actMs > STALE_MS) {\r\n return { state: \"stale\", reason: `no log/event/heartbeat activity for ${secsAgo(actMs)}s` };\r\n }\r\n return { state: \"ok\", reason: \"recent activity\" };\r\n}\r\n\r\nexport function computeWorkerStatus(worker: HarnessWorkerRecord): RawHarnessWorkerStatus {\r\n const parsed = parseClaudeStream(worker.stdoutPath);\r\n const heartbeat = parseHeartbeat(worker.heartbeatPath);\r\n const alive = isPidAlive(worker.pid);\r\n const stdoutBytes = fileSize(worker.stdoutPath);\r\n const stderrBytes = fileSize(worker.stderrPath);\r\n const heartbeatBytes = fileSize(worker.heartbeatPath);\r\n const changedFiles = gitStatusShort(worker.worktreePath);\r\n const lastActivityAt = latestIso([\r\n parsed.lastEventAt,\r\n heartbeat.lastHeartbeatAt,\r\n fileMtime(worker.stdoutPath),\r\n fileMtime(worker.stderrPath),\r\n fileMtime(worker.heartbeatPath),\r\n ]);\r\n const attention = computeAttention({\r\n alive,\r\n finalResult: parsed.finalResult,\r\n firstEventAt: parsed.firstEventAt,\r\n stdoutBytes,\r\n heartbeatBytes,\r\n lastActivityAt,\r\n heartbeatBlocker: heartbeat.heartbeatBlocker,\r\n startedAt: worker.startedAt,\r\n });\r\n return {\r\n runId: worker.runId,\r\n worker: worker.name,\r\n pid: worker.pid,\r\n alive,\r\n status: parsed.finalResult ? \"done\" : alive ? \"running\" : \"exited\",\r\n attention,\r\n branch: worker.branch,\r\n worktreePath: worker.worktreePath,\r\n ownedPaths: worker.ownedPaths,\r\n stdoutBytes,\r\n stderrBytes,\r\n heartbeatBytes,\r\n firstEventAt: parsed.firstEventAt,\r\n lastEventAt: parsed.lastEventAt,\r\n lastActivityAt,\r\n currentTool: parsed.currentTool,\r\n heartbeatCount: heartbeat.heartbeatCount,\r\n lastHeartbeatAt: heartbeat.lastHeartbeatAt,\r\n lastHeartbeatPhase: heartbeat.lastHeartbeatPhase,\r\n lastHeartbeatSummary: heartbeat.lastHeartbeatSummary,\r\n heartbeatBlocker: heartbeat.heartbeatBlocker,\r\n finalResult: parsed.finalResult,\r\n error:\r\n parsed.error ||\r\n (!alive && !parsed.finalResult ? tailFile(worker.stderrPath, 10).trim() || undefined : undefined),\r\n changedFiles,\r\n };\r\n}\r\n\r\nexport function isFinishedWorkerStatus(status: RawHarnessWorkerStatus): boolean {\r\n if (status.finalResult) return true;\r\n if (status.alive === false) return true;\r\n if (status.status === \"exited\" || status.status === \"done\") return true;\r\n return false;\r\n}\r\n\r\nexport function deriveRunStatus(fallback: string, workers: Array<{ attention?: string; status?: string }>): string {\r\n if (workers.length === 0) return fallback;\r\n if (workers.some((w) => w.attention === \"needs_attention\" || w.attention === \"stale\" || w.attention === \"blocked\")) {\r\n return \"needs_attention\";\r\n }\r\n if (workers.every((w) => w.status === \"done\")) return \"done\";\r\n if (workers.some((w) => w.status === \"running\")) return \"running\";\r\n return fallback;\r\n}\r\n", "import { existsSync, mkdirSync } from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport { git } from \"./git.js\";\r\nimport { getPaths } from \"./run-store.js\";\r\nimport { loadRun, runDirectory, saveRun, saveWorker } from \"./run-store.js\";\r\nimport { buildPrompt } from \"./prompt.js\";\r\nimport { readMaybeFile, safeSlug } from \"./util.js\";\r\nimport { resolveWorkerProvider } from \"./providers/registry.js\";\r\nimport type { HarnessRunRecord } from \"./run-store.js\";\r\nimport type { HarnessWorkerRecord } from \"./status.js\";\r\n\r\nexport interface SpawnWorkerOptions {\r\n name: string;\r\n task: string;\r\n ownedPaths?: string[];\r\n model?: string;\r\n branch?: string;\r\n agentOsId?: string;\r\n taskId?: string;\r\n leaseOwner?: string;\r\n dispatched?: boolean;\r\n provider?: string;\r\n}\r\n\r\nexport function spawnWorkerProcess(run: HarnessRunRecord, opts: SpawnWorkerOptions): HarnessWorkerRecord {\r\n const name = safeSlug(opts.name);\r\n if (!opts.name) throw new Error(\"worker name is required\");\r\n if (run.workers?.[name]) throw new Error(`worker already exists in run ${run.id}: ${name}`);\r\n if (!opts.task) throw new Error(`missing task text for worker ${name}`);\r\n\r\n const { worktreesDir } = getPaths();\r\n const workerDir = path.join(runDirectory(run.id), \"workers\", name);\r\n mkdirSync(workerDir, { recursive: true });\r\n const worktreePath = path.join(worktreesDir, run.id, name);\r\n const branch = opts.branch || `agent/${run.id}/${name}`;\r\n if (existsSync(worktreePath)) throw new Error(`worktree path already exists: ${worktreePath}`);\r\n\r\n git(run.repo, [\"fetch\", \"origin\", \"--prune\"], { allowFailure: true });\r\n git(run.repo, [\"worktree\", \"add\", \"-b\", branch, worktreePath, run.baseCommit], { throwError: true });\r\n\r\n const stdoutPath = path.join(workerDir, \"stdout.jsonl\");\r\n const stderrPath = path.join(workerDir, \"stderr.log\");\r\n const heartbeatPath = path.join(workerDir, \"heartbeat.jsonl\");\r\n const prompt = buildPrompt({\r\n task: opts.task,\r\n ownedPaths: opts.ownedPaths || [],\r\n worktreePath,\r\n heartbeatPath,\r\n });\r\n\r\n const provider = resolveWorkerProvider(opts.provider);\r\n let started;\r\n try {\r\n started = provider.start({\r\n name,\r\n task: opts.task,\r\n ownedPaths: opts.ownedPaths,\r\n model: opts.model,\r\n branch,\r\n worktreePath,\r\n workerDir,\r\n stdoutPath,\r\n stderrPath,\r\n heartbeatPath,\r\n prompt,\r\n });\r\n } catch (error) {\r\n git(run.repo, [\"worktree\", \"remove\", \"--force\", worktreePath], { allowFailure: true });\r\n git(run.repo, [\"branch\", \"-D\", branch], { allowFailure: true });\r\n throw error;\r\n }\r\n\r\n const model = started.model || opts.model || \"claude-opus-4-7\";\r\n const worker: HarnessWorkerRecord = {\r\n name,\r\n runId: run.id,\r\n status: \"running\",\r\n pid: started.pid,\r\n model,\r\n branch,\r\n worktreePath,\r\n workerDir,\r\n stdoutPath,\r\n stderrPath,\r\n heartbeatPath,\r\n ownedPaths: opts.ownedPaths,\r\n ...(opts.agentOsId ? { agentOsId: String(opts.agentOsId) } : {}),\r\n ...(opts.taskId ? { taskId: String(opts.taskId) } : {}),\r\n ...(opts.leaseOwner ? { leaseOwner: String(opts.leaseOwner) } : {}),\r\n ...(opts.dispatched ? { dispatched: true } : {}),\r\n startedAt: new Date().toISOString(),\r\n };\r\n\r\n saveWorker(run.id, worker);\r\n run.workers = { ...(run.workers || {}), [name]: { workerDir, statusPath: path.join(workerDir, \"worker.json\") } };\r\n run.status = \"running\";\r\n saveRun(run);\r\n return worker;\r\n}\r\n\r\nexport function startWorker(args: Record<string, string | boolean>): void {\r\n const run = loadRun(String(args.run));\r\n const task = args.task ? String(args.task) : readMaybeFile(args.taskFile ? String(args.taskFile) : undefined);\r\n if (!task) {\r\n console.error(\"missing --task or --task-file\");\r\n process.exit(1);\r\n }\r\n try {\r\n const worker = spawnWorkerProcess(run, {\r\n name: String(args.name),\r\n task,\r\n ownedPaths: args.owned ? String(args.owned).split(\",\").map((s) => s.trim()).filter(Boolean) : [],\r\n model: args.model ? String(args.model) : undefined,\r\n branch: args.branch ? String(args.branch) : undefined,\r\n agentOsId: args.agentOsId ? String(args.agentOsId) : undefined,\r\n taskId: args.taskId ? String(args.taskId) : undefined,\r\n provider: args.provider ? String(args.provider) : undefined,\r\n });\r\n console.log(\r\n JSON.stringify(\r\n {\r\n runId: run.id,\r\n worker: worker.name,\r\n pid: worker.pid,\r\n branch: worker.branch,\r\n worktreePath: worker.worktreePath,\r\n workerDir: worker.workerDir,\r\n },\r\n null,\r\n 2,\r\n ),\r\n );\r\n } catch (error) {\r\n console.error(`worker start failed: ${(error as Error).message}`);\r\n process.exit(1);\r\n }\r\n}\r\n", "export function buildPrompt(input: {\r\n task: string;\r\n ownedPaths: string[];\r\n worktreePath: string;\r\n heartbeatPath: string;\r\n}): string {\r\n const ownership = input.ownedPaths.length\r\n ? `Owned paths: ${input.ownedPaths.join(\", \")}. Do not edit outside these paths without stopping and reporting why.`\r\n : \"Owned paths: unrestricted for this worker, but keep edits tightly scoped.\";\r\n return [\r\n \"You are running under the Kynver AgentOS runtime.\",\r\n \"Immediately state your plan before editing.\",\r\n ownership,\r\n `Worktree: ${input.worktreePath}`,\r\n `Progress heartbeat file: ${input.heartbeatPath}`,\r\n \"After each major step, append one JSON line to the heartbeat file with fields: ts, phase, summary, changedFiles, blocker.\",\r\n \"Final response must include files changed, verification commands, and unresolved risks.\",\r\n \"\",\r\n \"Task:\",\r\n input.task,\r\n ].join(\"\\n\");\r\n}\r\n", "import { closeSync, openSync } from \"node:fs\";\r\nimport { spawn } from \"node:child_process\";\r\nimport { scrubClaudeEnv } from \"../git.js\";\r\nimport type { WorkerProvider, WorkerProviderStartOptions } from \"./types.js\";\r\n\r\nexport const claudeProvider: WorkerProvider = {\r\n name: \"claude\",\r\n start(opts) {\r\n const model = opts.model || \"claude-opus-4-7\";\r\n const stdoutFd = openSync(opts.stdoutPath, \"a\");\r\n const stderrFd = openSync(opts.stderrPath, \"a\");\r\n const child = spawn(\r\n \"claude\",\r\n [\r\n \"--model\",\r\n model,\r\n \"-p\",\r\n \"--verbose\",\r\n \"--permission-mode\",\r\n \"bypassPermissions\",\r\n \"--output-format\",\r\n \"stream-json\",\r\n \"--include-partial-messages\",\r\n opts.prompt,\r\n ],\r\n {\r\n cwd: opts.worktreePath,\r\n detached: true,\r\n stdio: [\"ignore\", stdoutFd, stderrFd],\r\n env: scrubClaudeEnv(process.env),\r\n },\r\n );\r\n closeSync(stdoutFd);\r\n closeSync(stderrFd);\r\n\r\n if (!child.pid) {\r\n throw new Error(\"failed to spawn claude worker process (is the `claude` CLI on PATH?)\");\r\n }\r\n child.unref();\r\n return { pid: child.pid, model };\r\n },\r\n};\r\n", "import { closeSync, existsSync, openSync, readdirSync } from \"node:fs\";\r\nimport { spawn } from \"node:child_process\";\r\nimport path from \"node:path\";\r\nimport type { WorkerProvider, WorkerProviderStartOptions } from \"./types.js\";\r\n\r\nconst DEFAULT_CURSOR_MODEL = \"composer-2.5\";\r\n\r\ninterface CursorSpawnTarget {\r\n executable: string;\r\n prefixArgs: string[];\r\n shell: boolean;\r\n detached: boolean;\r\n}\r\n\r\nfunction latestVersionDir(versionsRoot: string): string | null {\r\n if (!existsSync(versionsRoot)) return null;\r\n const versions = readdirSync(versionsRoot, { withFileTypes: true })\r\n .filter((entry) => entry.isDirectory() && /^\\d{4}\\.\\d/.test(entry.name))\r\n .map((entry) => entry.name)\r\n .sort((a, b) => b.localeCompare(a));\r\n return versions[0] ? path.join(versionsRoot, versions[0]) : null;\r\n}\r\n\r\nfunction resolveBundledCursor(versionDir: string): CursorSpawnTarget | null {\r\n const nodeExe = path.join(versionDir, \"node.exe\");\r\n const indexJs = path.join(versionDir, \"index.js\");\r\n if (!existsSync(nodeExe) || !existsSync(indexJs)) return null;\r\n return { executable: nodeExe, prefixArgs: [indexJs], shell: false, detached: true };\r\n}\r\n\r\nfunction resolveWindowsCursorSpawn(agentBin: string): CursorSpawnTarget | null {\r\n const agentRoot = path.dirname(agentBin);\r\n const direct = resolveBundledCursor(agentRoot);\r\n if (direct) return direct;\r\n const versionDir = latestVersionDir(path.join(agentRoot, \"versions\"));\r\n return versionDir ? resolveBundledCursor(versionDir) : null;\r\n}\r\n\r\nexport function resolveCursorSpawn(agentBin: string): CursorSpawnTarget {\r\n if (process.platform === \"win32\" && /\\.(cmd|bat)$/i.test(agentBin)) {\r\n const bundled = resolveWindowsCursorSpawn(agentBin);\r\n if (bundled) return bundled;\r\n // shell + detached loses fd stdio on Windows; keep the worker attached instead.\r\n return { executable: agentBin, prefixArgs: [], shell: true, detached: false };\r\n }\r\n return { executable: agentBin, prefixArgs: [], shell: false, detached: true };\r\n}\r\n\r\nfunction resolveAgentBin(): string {\r\n const configured =\r\n process.env.KYNVER_CURSOR_AGENT_BIN?.trim() ||\r\n process.env.CURSOR_AGENT_BIN?.trim();\r\n if (configured) return configured;\r\n\r\n if (process.platform === \"win32\") {\r\n const localAgent = path.join(process.env.LOCALAPPDATA || \"\", \"cursor-agent\", \"agent.cmd\");\r\n if (existsSync(localAgent)) return localAgent;\r\n }\r\n\r\n return \"agent\";\r\n}\r\n\r\nexport const cursorProvider: WorkerProvider = {\r\n name: \"cursor\",\r\n start(opts) {\r\n const model = opts.model || DEFAULT_CURSOR_MODEL;\r\n const stdoutFd = openSync(opts.stdoutPath, \"a\");\r\n const stderrFd = openSync(opts.stderrPath, \"a\");\r\n const agentBin = resolveAgentBin();\r\n const spawnTarget = resolveCursorSpawn(agentBin);\r\n const child = spawn(\r\n spawnTarget.executable,\r\n [\r\n ...spawnTarget.prefixArgs,\r\n \"-p\",\r\n \"--force\",\r\n \"--trust\",\r\n \"--workspace\",\r\n opts.worktreePath,\r\n \"--output-format\",\r\n \"stream-json\",\r\n \"--stream-partial-output\",\r\n \"--model\",\r\n model,\r\n opts.prompt,\r\n ],\r\n {\r\n cwd: opts.worktreePath,\r\n detached: spawnTarget.detached,\r\n shell: spawnTarget.shell,\r\n stdio: [\"ignore\", stdoutFd, stderrFd],\r\n env: {\r\n ...process.env,\r\n ...(spawnTarget.prefixArgs.length > 0 ? { CURSOR_INVOKED_AS: path.basename(agentBin) } : {}),\r\n },\r\n },\r\n );\r\n closeSync(stdoutFd);\r\n closeSync(stderrFd);\r\n\r\n if (!child.pid) {\r\n throw new Error(\r\n `failed to spawn Cursor agent worker (is \\`${agentBin}\\` on PATH? run \\`agent login\\` or set CURSOR_API_KEY)`,\r\n );\r\n }\r\n child.unref();\r\n return { pid: child.pid, model };\r\n },\r\n};\r\n", "import { loadUserConfig } from \"../config.js\";\r\nimport { claudeProvider } from \"./claude.js\";\r\nimport { cursorProvider } from \"./cursor.js\";\r\nimport type { WorkerProvider } from \"./types.js\";\r\n\r\nconst BUILTIN: Record<string, WorkerProvider> = {\r\n claude: claudeProvider,\r\n cursor: cursorProvider,\r\n};\r\n\r\nlet overrideProvider: WorkerProvider | null = null;\r\n\r\n/** Test hook \u2014 inject a stub provider without spawning Claude. */\r\nexport function setWorkerProviderForTests(provider: WorkerProvider | null): void {\r\n overrideProvider = provider;\r\n}\r\n\r\nexport function resolveWorkerProvider(name?: string): WorkerProvider {\r\n if (overrideProvider) return overrideProvider;\r\n const configured = (name || loadUserConfig().workerProvider || \"claude\").trim();\r\n const provider = BUILTIN[configured];\r\n if (!provider) {\r\n throw new Error(`unknown worker provider \"${configured}\" \u2014 supported: ${Object.keys(BUILTIN).join(\", \")}`);\r\n }\r\n return provider;\r\n}\r\n", "import path from \"node:path\";\r\nimport { resolveBaseUrl, resolveCallbackSecret } from \"./config.js\";\r\nimport { postJson } from \"./callbacks.js\";\r\nimport { observeRunnerDiskGate } from \"./disk-gate.js\";\r\nimport { observeRunnerResourceGate } from \"./resource-gate.js\";\r\nimport { loadRun } from \"./run-store.js\";\r\nimport { runDirectory } from \"./run-store.js\";\r\nimport { spawnWorkerProcess } from \"./supervisor.js\";\r\nimport { required, safeSlug } from \"./util.js\";\r\n\r\nexport const DEFAULT_DISPATCH_LEASE_MS = 60 * 60 * 1000;\r\n\r\nexport function buildDispatchTaskText(task: Record<string, unknown>, agentOsId: string): string {\r\n return [\r\n `[AgentOS task ${task.id}] ${task.title}`,\r\n \"\",\r\n task.description ? String(task.description) : \"(no description on the board task)\",\r\n \"\",\r\n `Board linkage: agentOsId=${agentOsId}, taskId=${task.id}, attempt=${task.attempt}, executor=${task.executor}${\r\n task.executorRef ? `, executorRef=${task.executorRef}` : \"\"\r\n }.`,\r\n \"This worker was dispatched from the AgentOS board. The harness reports your completion back to the board when you finish.\",\r\n ].join(\"\\n\");\r\n}\r\n\r\nexport async function dispatchRun(args: Record<string, string | boolean>): Promise<Record<string, unknown> | void> {\r\n const pipeline = args.pipeline === true || args.pipeline === \"true\";\r\n try {\r\n const run = loadRun(String(required(String(args.run || \"\"), \"--run\")));\r\n const agentOsId = String(required(String(args.agentOsId || \"\"), \"--agent-os-id\"));\r\n const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : undefined);\r\n const secret = resolveCallbackSecret(args.secret ? String(args.secret) : undefined);\r\n const execute = args.execute === true || args.execute === \"true\";\r\n const dryRun = !execute;\r\n const leaseOwner = `openclaw-harness:${run.id}`;\r\n\r\n const runnerDiskGate = args.diskPath\r\n ? observeRunnerDiskGate({ diskPath: String(args.diskPath) })\r\n : observeRunnerDiskGate({ diskPath: run.repo });\r\n const runnerResourceGate = observeRunnerResourceGate({ runId: run.id });\r\n const requestedStarts = Number(args.maxStarts) > 0 ? Math.floor(Number(args.maxStarts)) : 1;\r\n const cappedStarts = dryRun\r\n ? requestedStarts\r\n : Math.min(requestedStarts, runnerResourceGate.slotsAvailable);\r\n\r\n const dispatchUrl = `${base}/api/agent-os/by-id/${encodeURIComponent(agentOsId)}/tasks/dispatch-next`;\r\n const body: Record<string, unknown> = {\r\n agentOsId,\r\n dryRun,\r\n maxStarts: cappedStarts,\r\n leaseOwner,\r\n leaseDurationMs:\r\n Number(args.leaseMs) > 0 ? Math.floor(Number(args.leaseMs)) : DEFAULT_DISPATCH_LEASE_MS,\r\n runnerDiskGate,\r\n runnerResourceGate,\r\n ...(args.lane ? { lane: String(args.lane) } : {}),\r\n ...(args.diskPath ? { diskPath: String(args.diskPath) } : {}),\r\n };\r\n\r\n const dispatch = await postJson(dispatchUrl, secret, body);\r\n const responseBody = dispatch.response as { ok?: boolean; result?: Record<string, unknown> } | null;\r\n if (!dispatch.ok || !responseBody?.result) {\r\n const failure = {\r\n runId: run.id,\r\n agentOsId,\r\n action: \"dispatch\",\r\n httpStatus: dispatch.status,\r\n response: dispatch.response,\r\n };\r\n if (pipeline) return { ok: false, ...failure };\r\n console.log(JSON.stringify(failure, null, 2));\r\n process.exit(1);\r\n }\r\n\r\n const result = responseBody.result;\r\n if (dryRun) {\r\n const summary = {\r\n runId: run.id,\r\n agentOsId,\r\n dryRun: true,\r\n wouldStart: (result.started as Array<{ task: Record<string, unknown>; reason: string }>).map((d) => ({\r\n taskId: d.task.id,\r\n title: d.task.title,\r\n reason: d.reason,\r\n })),\r\n skipped: (result.skipped as Array<{ task: Record<string, unknown>; skipReason: string; reason: string }>).map(\r\n (d) => ({ taskId: d.task.id, skipReason: d.skipReason, reason: d.reason }),\r\n ),\r\n diskGate: result.diskGate,\r\n resourceGate: result.resourceGate,\r\n inspected: result.inspected,\r\n };\r\n if (pipeline) return { ok: true, ...summary };\r\n console.log(JSON.stringify(summary, null, 2));\r\n return;\r\n }\r\n\r\n if (!dryRun && cappedStarts <= 0) {\r\n const summary = {\r\n runId: run.id,\r\n agentOsId,\r\n dryRun: false,\r\n skipped: true,\r\n reason: runnerResourceGate.reason ?? \"no resource slots\",\r\n resourceGate: runnerResourceGate,\r\n };\r\n if (pipeline) return { ok: true, ...summary };\r\n console.log(JSON.stringify(summary, null, 2));\r\n return;\r\n }\r\n\r\n const outcomes: Array<Record<string, unknown>> = [];\r\n for (const decision of result.started as Array<{ task: Record<string, unknown> }>) {\r\n const task = decision.task;\r\n const name = safeSlug(`t-${task.id}-a${task.attempt}`);\r\n try {\r\n const worker = spawnWorkerProcess(run, {\r\n name,\r\n task: buildDispatchTaskText(task, agentOsId),\r\n ownedPaths: args.owned ? String(args.owned).split(\",\").map((s) => s.trim()).filter(Boolean) : [],\r\n model: args.model ? String(args.model) : undefined,\r\n agentOsId,\r\n taskId: String(task.id),\r\n leaseOwner,\r\n dispatched: true,\r\n });\r\n outcomes.push({\r\n taskId: task.id,\r\n started: true,\r\n worker: worker.name,\r\n pid: worker.pid,\r\n branch: worker.branch,\r\n });\r\n } catch (error) {\r\n const releaseUrl = `${base}/api/agent-os/by-id/${encodeURIComponent(agentOsId)}/tasks/${encodeURIComponent(String(task.id))}/release`;\r\n let release;\r\n try {\r\n release = await postJson(releaseUrl, secret, { agentOsId, leaseOwner });\r\n } catch (relErr) {\r\n release = { ok: false, error: (relErr as Error).message };\r\n }\r\n outcomes.push({\r\n taskId: task.id,\r\n started: false,\r\n error: (error as Error).message,\r\n released: release.ok === true || (release.response as Record<string, unknown>)?.ok === true,\r\n releaseResponse: release.response ?? release,\r\n });\r\n }\r\n }\r\n\r\n const summary = {\r\n runId: run.id,\r\n agentOsId,\r\n dryRun: false,\r\n leaseOwner,\r\n startedCount: outcomes.filter((o) => o.started).length,\r\n outcomes,\r\n skipped: (result.skipped as Array<{ task: Record<string, unknown>; skipReason: string }>).map((d) => ({\r\n taskId: d.task.id,\r\n skipReason: d.skipReason,\r\n })),\r\n diskGate: result.diskGate,\r\n resourceGate: result.resourceGate,\r\n };\r\n if (pipeline) {\r\n return { ok: !outcomes.some((o) => !o.started), ...summary };\r\n }\r\n console.log(JSON.stringify(summary, null, 2));\r\n if (outcomes.some((o) => !o.started)) process.exit(1);\r\n } catch (error) {\r\n if (pipeline) return { ok: false, error: (error as Error).message };\r\n console.error(`run dispatch failed: ${(error as Error).message}`);\r\n process.exit(1);\r\n }\r\n}\r\n\r\nexport { runDirectory };\r\n", "import path from \"node:path\";\r\nimport { resolveBaseUrl, resolveCallbackSecret } from \"./config.js\";\r\nimport { postJson } from \"./callbacks.js\";\r\nimport { loadRun, runDirectory } from \"./run-store.js\";\r\nimport { computeWorkerStatus } from \"./status.js\";\r\nimport { required, readJson, safeSlug } from \"./util.js\";\r\n\r\nexport async function sweepRun(args: Record<string, string | boolean>): Promise<Record<string, unknown> | void> {\r\n const pipeline = args.pipeline === true || args.pipeline === \"true\";\r\n try {\r\n const run = loadRun(String(required(String(args.run || \"\"), \"--run\")));\r\n const agentOsId = String(required(String(args.agentOsId || \"\"), \"--agent-os-id\"));\r\n const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : undefined);\r\n const secret = resolveCallbackSecret(args.secret ? String(args.secret) : undefined);\r\n const leaseOwner = `openclaw-harness:${run.id}`;\r\n\r\n const releasedLocalOrphans: Array<Record<string, unknown>> = [];\r\n for (const name of Object.keys(run.workers || {})) {\r\n const worker = readJson<Record<string, unknown>>(\r\n path.join(runDirectory(run.id), \"workers\", safeSlug(name), \"worker.json\"),\r\n null,\r\n );\r\n if (!worker || !worker.dispatched || !worker.taskId) continue;\r\n const status = computeWorkerStatus(worker as never);\r\n if (status.alive) continue;\r\n if (status.finalResult) continue;\r\n\r\n const releaseUrl = `${base}/api/agent-os/by-id/${encodeURIComponent(agentOsId)}/tasks/${encodeURIComponent(String(worker.taskId))}/release`;\r\n let release;\r\n try {\r\n release = await postJson(releaseUrl, secret, { agentOsId, leaseOwner });\r\n } catch (relErr) {\r\n release = { ok: false, error: (relErr as Error).message };\r\n }\r\n releasedLocalOrphans.push({\r\n worker: name,\r\n taskId: worker.taskId,\r\n pid: worker.pid,\r\n released: release.ok === true || (release.response as Record<string, unknown>)?.ok === true,\r\n response: release.response ?? release,\r\n });\r\n }\r\n\r\n const reapUrl = `${base}/api/agent-os/by-id/${encodeURIComponent(agentOsId)}/tasks/reap`;\r\n let reap;\r\n try {\r\n reap = await postJson(reapUrl, secret, {\r\n agentOsId,\r\n ...(Number(args.graceMs) >= 0 && args.graceMs !== undefined && args.graceMs !== true\r\n ? { graceMs: Math.floor(Number(args.graceMs)) }\r\n : {}),\r\n });\r\n } catch (reapErr) {\r\n reap = { ok: false, error: (reapErr as Error).message };\r\n }\r\n\r\n const summary = { runId: run.id, agentOsId, leaseOwner, releasedLocalOrphans, reap: reap.response ?? reap };\r\n if (pipeline) return { ok: true, ...summary };\r\n console.log(JSON.stringify(summary, null, 2));\r\n } catch (error) {\r\n if (pipeline) return { ok: false, error: (error as Error).message };\r\n console.error(`run sweep failed: ${(error as Error).message}`);\r\n process.exit(1);\r\n }\r\n}\r\n", "import { existsSync, mkdirSync } from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport { ensureGitRepo, git } from \"./git.js\";\r\nimport { getPaths } from \"./run-store.js\";\r\nimport { loadRun, runDirectory, saveRun } from \"./run-store.js\";\r\nimport { listRunIds, readJson, required, safeSlug, timestampSlug, writeJson } from \"./util.js\";\r\nimport { validateRepo, validateRunId } from \"./validate.js\";\r\n\r\nexport function createRun(args: Record<string, string | boolean>): void {\r\n const repo = validateRepo(required(String(args.repo || \"\"), \"--repo\"));\r\n ensureGitRepo(repo);\r\n const id = args.id ? validateRunId(String(args.id)) : timestampSlug(String(args.name || \"run\"));\r\n const dir = runDirectory(id);\r\n if (existsSync(dir)) failExists(`run already exists: ${id}`);\r\n mkdirSync(dir, { recursive: true });\r\n const base = String(args.base || \"origin/main\");\r\n const baseCommit = git(repo, [\"rev-parse\", base]).trim();\r\n const run = {\r\n id,\r\n name: String(args.name || id),\r\n repo,\r\n base,\r\n baseCommit,\r\n status: \"created\",\r\n createdAt: new Date().toISOString(),\r\n workers: {},\r\n };\r\n writeJson(path.join(dir, \"run.json\"), run);\r\n console.log(JSON.stringify({ runId: id, runDir: dir, repo, base, baseCommit }, null, 2));\r\n}\r\n\r\nexport function listRuns(): void {\r\n const { runsDir } = getPaths();\r\n const rows = listRunIds(runsDir)\r\n .map((id) => readJson<Record<string, unknown>>(path.join(runDirectory(id), \"run.json\"), null))\r\n .filter(Boolean)\r\n .map((run) => ({\r\n id: run!.id,\r\n name: run!.name,\r\n status: run!.status,\r\n repo: run!.repo,\r\n createdAt: run!.createdAt,\r\n }));\r\n console.log(JSON.stringify(rows, null, 2));\r\n}\r\n\r\nfunction failExists(message: string): never {\r\n console.error(message);\r\n process.exit(1);\r\n}\r\n\r\nexport { loadRun, saveRun, runDirectory };\r\n", "import path from \"node:path\";\r\n\r\nconst RUN_ID_RE = /^[a-z0-9][a-z0-9._-]{0,127}$/i;\r\nconst WORKER_NAME_RE = /^[a-z0-9][a-z0-9._-]{0,63}$/i;\r\n\r\nexport function validateRunId(runId: string): string {\r\n const trimmed = runId.trim();\r\n if (!RUN_ID_RE.test(trimmed)) throw new Error(`invalid run id: ${runId}`);\r\n return trimmed;\r\n}\r\n\r\nexport function validateWorkerName(name: string): string {\r\n const trimmed = name.trim();\r\n if (!WORKER_NAME_RE.test(trimmed)) throw new Error(`invalid worker name: ${name}`);\r\n return trimmed;\r\n}\r\n\r\nexport function validateRepo(repo: string): string {\r\n const resolved = path.resolve(repo);\r\n if (resolved.includes(\"..\")) throw new Error(\"repo path must not contain .. segments\");\r\n return resolved;\r\n}\r\n\r\nexport function validateOwnedPaths(repoRoot: string, ownedPaths: string[]): string[] {\r\n return ownedPaths.map((owned) => {\r\n const resolved = path.resolve(repoRoot, owned);\r\n const rel = path.relative(repoRoot, resolved);\r\n if (rel.startsWith(\"..\") || path.isAbsolute(rel)) {\r\n throw new Error(`owned path escapes repo: ${owned}`);\r\n }\r\n return resolved;\r\n });\r\n}\r\n\r\nexport function validateTailLines(lines: number): number {\r\n if (!Number.isFinite(lines) || lines <= 0 || lines > 500) return 40;\r\n return Math.floor(lines);\r\n}\r\n", "import path from \"node:path\";\r\nimport { resolveBaseUrl, resolveCallbackSecret } from \"./config.js\";\r\nimport { loadRun, loadWorker, runDirectory } from \"./run-store.js\";\r\nimport { computeWorkerStatus, deriveRunStatus, isFinishedWorkerStatus } from \"./status.js\";\r\nimport { summarizeEvent } from \"./stream.js\";\r\nimport {\r\n isPidAlive,\r\n killWorkerProcess,\r\n readJson,\r\n required,\r\n safeJson,\r\n safeSlug,\r\n sleepMs,\r\n tailFile,\r\n writeJson,\r\n} from \"./util.js\";\r\n\r\nexport async function tryCompleteWorker(\r\n args: Record<string, string | boolean>,\r\n): Promise<{ ok: boolean; skipped?: boolean; reason?: string; httpStatus?: number; response?: unknown }> {\r\n const worker = loadWorker(String(args.run), String(args.name));\r\n const status = computeWorkerStatus(worker);\r\n const agentOsId = (args.agentOsId ? String(args.agentOsId) : worker.agentOsId) || \"\";\r\n const taskId = (args.taskId ? String(args.taskId) : worker.taskId) || null;\r\n if (!agentOsId) {\r\n return { ok: false, reason: \"missing agentOsId\" };\r\n }\r\n if (!isFinishedWorkerStatus(status)) {\r\n return { ok: true, skipped: true, reason: \"worker-not-finished\" };\r\n }\r\n\r\n const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : undefined);\r\n const secret = resolveCallbackSecret(args.secret ? String(args.secret) : undefined);\r\n const url = `${base}/api/agent-os/by-id/${encodeURIComponent(agentOsId)}/harness/completion`;\r\n const body = {\r\n source: \"openclaw-harness\",\r\n agentOsId,\r\n runId: worker.runId,\r\n workerName: worker.name,\r\n taskId,\r\n startedAt: worker.startedAt,\r\n finishedAt: status.lastActivityAt || new Date().toISOString(),\r\n status,\r\n };\r\n\r\n const res = await fetch(url, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"X-OpenClaw-Cron-Secret\": secret,\r\n \"X-Kynver-Runtime-Secret\": secret,\r\n },\r\n body: JSON.stringify(body),\r\n });\r\n let parsed: unknown = null;\r\n try {\r\n parsed = await res.json();\r\n } catch {\r\n parsed = null;\r\n }\r\n return { ok: res.ok, httpStatus: res.status, response: parsed };\r\n}\r\n\r\nexport async function completeWorker(args: Record<string, string | boolean>): Promise<void> {\r\n try {\r\n const worker = loadWorker(String(args.run), String(args.name));\r\n const status = computeWorkerStatus(worker);\r\n const agentOsId = (args.agentOsId ? String(args.agentOsId) : worker.agentOsId) || \"\";\r\n const taskId = (args.taskId ? String(args.taskId) : worker.taskId) || null;\r\n if (!agentOsId) {\r\n console.error(\"worker complete requires --agent-os-id (or an agentOsId persisted at worker start)\");\r\n process.exit(1);\r\n }\r\n if (!isFinishedWorkerStatus(status)) {\r\n console.log(\r\n JSON.stringify(\r\n {\r\n worker: worker.name,\r\n runId: worker.runId,\r\n status: \"skipped\",\r\n reason: \"worker-not-finished\",\r\n workerStatus: status.status,\r\n alive: status.alive,\r\n },\r\n null,\r\n 2,\r\n ),\r\n );\r\n return;\r\n }\r\n\r\n const result = await tryCompleteWorker(args);\r\n console.log(\r\n JSON.stringify(\r\n {\r\n worker: worker.name,\r\n runId: worker.runId,\r\n agentOsId,\r\n taskId,\r\n httpStatus: result.httpStatus,\r\n response: result.response,\r\n },\r\n null,\r\n 2,\r\n ),\r\n );\r\n if (!result.ok) process.exit(1);\r\n } catch (error) {\r\n console.error(`worker complete failed: ${(error as Error).message}`);\r\n process.exit(1);\r\n }\r\n}\r\n\r\nexport function workerStatus(args: Record<string, string | boolean>): void {\r\n const worker = loadWorker(String(args.run), String(args.name));\r\n const status = computeWorkerStatus(worker);\r\n writeJson(path.join(worker.workerDir, \"last-status.json\"), status);\r\n console.log(JSON.stringify(status, null, 2));\r\n}\r\n\r\nexport function runStatus(args: Record<string, string | boolean>): void {\r\n const run = loadRun(String(args.run));\r\n const names = Object.keys(run.workers || {});\r\n const workers = names.map((name) => {\r\n const worker = readJson<Record<string, unknown>>(\r\n path.join(runDirectory(run.id), \"workers\", safeSlug(name), \"worker.json\"),\r\n null,\r\n );\r\n if (!worker) {\r\n return { worker: name, status: \"missing\", attention: \"needs_attention\", attentionReason: \"worker.json not found\" };\r\n }\r\n const status = computeWorkerStatus(worker as never);\r\n return {\r\n worker: status.worker,\r\n status: status.status,\r\n attention: status.attention.state,\r\n attentionReason: status.attention.reason,\r\n pid: status.pid,\r\n alive: status.alive,\r\n currentTool: status.currentTool,\r\n lastActivityAt: status.lastActivityAt,\r\n lastHeartbeatPhase: status.lastHeartbeatPhase,\r\n lastHeartbeatSummary: status.lastHeartbeatSummary,\r\n heartbeatBlocker: status.heartbeatBlocker,\r\n changedFileCount: status.changedFiles.length,\r\n branch: status.branch,\r\n };\r\n });\r\n const board = {\r\n runId: run.id,\r\n name: run.name,\r\n status: deriveRunStatus(run.status, workers),\r\n repo: run.repo,\r\n workerCount: workers.length,\r\n needsAttention: workers.filter((w) => w.attention && w.attention !== \"ok\" && w.attention !== \"done\").map((w) => w.worker),\r\n workers,\r\n };\r\n writeJson(path.join(runDirectory(run.id), \"last-board.json\"), board);\r\n console.log(JSON.stringify(board, null, 2));\r\n}\r\n\r\nexport function tailWorker(args: Record<string, string | boolean>): void {\r\n const worker = loadWorker(String(args.run), String(args.name));\r\n const raw = tailFile(worker.stdoutPath, Number(args.lines || 40));\r\n if (args.raw === true || args.raw === \"true\") {\r\n process.stdout.write(raw);\r\n return;\r\n }\r\n for (const line of raw.split(\"\\n\").filter(Boolean)) {\r\n const event = safeJson(line) as Record<string, unknown> | null;\r\n const summary = event ? summarizeEvent(event) : line;\r\n if (summary) console.log(summary);\r\n }\r\n}\r\n\r\nexport function stopWorker(args: Record<string, string | boolean>): void {\r\n const worker = loadWorker(String(args.run), String(args.name));\r\n if (!isPidAlive(worker.pid)) {\r\n console.log(JSON.stringify({ worker: worker.name, pid: worker.pid, status: \"not_running\" }, null, 2));\r\n return;\r\n }\r\n killWorkerProcess(worker.pid!, \"SIGTERM\");\r\n sleepMs(1500);\r\n if (isPidAlive(worker.pid)) {\r\n killWorkerProcess(worker.pid!, \"SIGKILL\");\r\n console.log(JSON.stringify({ worker: worker.name, pid: worker.pid, status: \"sigkill_sent\" }, null, 2));\r\n return;\r\n }\r\n console.log(JSON.stringify({ worker: worker.name, pid: worker.pid, status: \"stopped\" }, null, 2));\r\n}\r\n", "import path from \"node:path\";\r\nimport { resolveBaseUrl, resolveCallbackSecret } from \"./config.js\";\r\nimport { postJson } from \"./callbacks.js\";\r\nimport { dispatchRun } from \"./dispatch.js\";\r\nimport { observeRunnerResourceGate, type RunnerResourceGateShape } from \"./resource-gate.js\";\r\nimport { loadRun, runDirectory } from \"./run-store.js\";\r\nimport { computeWorkerStatus, isFinishedWorkerStatus } from \"./status.js\";\r\nimport { sweepRun } from \"./sweep.js\";\r\nimport { required, readJson, safeSlug } from \"./util.js\";\r\nimport { runStatus, tryCompleteWorker } from \"./worker-ops.js\";\r\nimport type { HarnessWorkerRecord } from \"./status.js\";\r\nimport { fetchWorkspaceRuntimePreferences } from \"./workspace-runtime-config.js\";\r\n\r\nexport interface PipelineTickResult {\r\n runId: string;\r\n agentOsId: string;\r\n execute: boolean;\r\n resourceGate: RunnerResourceGateShape;\r\n completedWorkers: Array<{ worker: string; ok: boolean; taskId?: string | null }>;\r\n operatorTick: unknown;\r\n sweep: unknown;\r\n dispatch: unknown;\r\n idle: boolean;\r\n}\r\n\r\nasync function completeFinishedWorkers(\r\n runId: string,\r\n args: Record<string, string | boolean>,\r\n): Promise<Array<{ worker: string; ok: boolean; taskId?: string | null }>> {\r\n const run = loadRun(runId);\r\n const outcomes: Array<{ worker: string; ok: boolean; taskId?: string | null }> = [];\r\n for (const name of Object.keys(run.workers || {})) {\r\n const worker = readJson<HarnessWorkerRecord>(\r\n path.join(runDirectory(run.id), \"workers\", safeSlug(name), \"worker.json\"),\r\n null,\r\n );\r\n if (!worker?.dispatched || !worker.taskId) continue;\r\n const status = computeWorkerStatus(worker);\r\n if (!isFinishedWorkerStatus(status)) continue;\r\n if (!status.finalResult) continue;\r\n const result = await tryCompleteWorker({\r\n run: runId,\r\n name,\r\n agentOsId: String(args.agentOsId || worker.agentOsId || \"\"),\r\n ...args,\r\n });\r\n outcomes.push({ worker: name, ok: result.ok, taskId: worker.taskId ?? null });\r\n }\r\n return outcomes;\r\n}\r\n\r\nasync function postOperatorTick(\r\n agentOsId: string,\r\n runId: string,\r\n resourceGate: RunnerResourceGateShape,\r\n args: Record<string, string | boolean>,\r\n): Promise<unknown> {\r\n const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : undefined);\r\n const secret = resolveCallbackSecret(args.secret ? String(args.secret) : undefined);\r\n const url = `${base}/api/agent-os/by-id/${encodeURIComponent(agentOsId)}/operator/tick`;\r\n const res = await postJson(url, secret, {\r\n agentOsId,\r\n runId,\r\n ingestHarness: true,\r\n resourceGate,\r\n });\r\n return { ok: res.ok, httpStatus: res.status, response: res.response };\r\n}\r\n\r\n/**\r\n * One operator/dispatcher cycle (M10 / D7 pull-first):\r\n * refresh status \u2192 complete finished workers \u2192 ingest operator tick \u2192 sweep leases \u2192 dispatch up to slot cap.\r\n */\r\nexport async function runPipelineTick(args: Record<string, string | boolean>): Promise<PipelineTickResult> {\r\n const runId = String(required(String(args.run || \"\"), \"--run\"));\r\n const agentOsId = String(required(String(args.agentOsId || \"\"), \"--agent-os-id\"));\r\n const execute = args.execute !== false && args.execute !== \"false\";\r\n\r\n runStatus({ run: runId });\r\n\r\n const completedWorkers = await completeFinishedWorkers(runId, args);\r\n const workspacePrefs = await fetchWorkspaceRuntimePreferences(agentOsId, args);\r\n const resourceGate = observeRunnerResourceGate({\r\n runId,\r\n configuredMaxWorkersOverride: workspacePrefs?.maxConcurrentWorkers,\r\n });\r\n const operatorTick = await postOperatorTick(agentOsId, runId, resourceGate, args);\r\n\r\n let maxStarts = resourceGate.slotsAvailable;\r\n const tickBody = operatorTick as { response?: { dispatch?: { recommendedMaxStarts?: number } } };\r\n const advised = tickBody.response?.dispatch?.recommendedMaxStarts;\r\n if (typeof advised === \"number\") {\r\n maxStarts = Math.min(maxStarts, Math.max(0, advised));\r\n }\r\n\r\n const sweep = await sweepRun({ run: runId, agentOsId, pipeline: true, ...args });\r\n\r\n let dispatch: unknown = null;\r\n if (execute && maxStarts > 0) {\r\n dispatch = await dispatchRun({\r\n run: runId,\r\n agentOsId,\r\n execute: true,\r\n maxStarts: String(maxStarts),\r\n pipeline: true,\r\n ...args,\r\n });\r\n } else {\r\n dispatch = {\r\n ok: true,\r\n skipped: true,\r\n reason: execute ? resourceGate.reason ?? \"no slots or queued work\" : \"execute disabled\",\r\n maxStarts: 0,\r\n };\r\n }\r\n\r\n const startedCount = (dispatch as { startedCount?: number })?.startedCount ?? 0;\r\n const idle = maxStarts === 0 && completedWorkers.length === 0 && startedCount === 0;\r\n\r\n return {\r\n runId,\r\n agentOsId,\r\n execute,\r\n resourceGate,\r\n completedWorkers,\r\n operatorTick,\r\n sweep,\r\n dispatch,\r\n idle,\r\n };\r\n}\r\n", "import { getJson } from \"./callbacks.js\";\r\nimport { resolveBaseUrl, resolveCallbackSecret } from \"./config.js\";\r\n\r\nexport interface WorkspaceRuntimePreferences {\r\n maxConcurrentWorkers: number | null;\r\n}\r\n\r\n/**\r\n * Pull the Command Center worker cap each pipeline tick so the daemon honors\r\n * workspace settings without restarting or editing ~/.kynver/config.json.\r\n */\r\nexport async function fetchWorkspaceRuntimePreferences(\r\n agentOsId: string,\r\n args: Record<string, string | boolean>,\r\n): Promise<WorkspaceRuntimePreferences | null> {\r\n const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : undefined);\r\n const secret = resolveCallbackSecret(args.secret ? String(args.secret) : undefined);\r\n const url = `${base}/api/agent-os/by-id/${encodeURIComponent(agentOsId)}/runtime`;\r\n\r\n try {\r\n const res = await getJson(url, secret);\r\n if (!res.ok) return null;\r\n const body = res.response as { preferences?: { maxConcurrentWorkers?: unknown } } | null;\r\n const raw = body?.preferences?.maxConcurrentWorkers;\r\n if (raw === null || raw === undefined) {\r\n return { maxConcurrentWorkers: null };\r\n }\r\n const n = Number(raw);\r\n if (!Number.isFinite(n) || n <= 0) return { maxConcurrentWorkers: null };\r\n return { maxConcurrentWorkers: Math.floor(n) };\r\n } catch {\r\n return null;\r\n }\r\n}\r\n", "import { loadUserConfig } from \"./config.js\";\r\nimport { required, sleepMs } from \"./util.js\";\r\nimport { runPipelineTick } from \"./pipeline-tick.js\";\r\n\r\nconst DEFAULT_INTERVAL_MS = 60_000;\r\nconst IDLE_INTERVAL_MS = 5 * 60_000;\r\nconst MAX_IDLE_STREAK = 10;\r\n\r\nexport async function runDaemon(args: Record<string, string | boolean>): Promise<void> {\r\n const runId = String(required(String(args.run || \"\"), \"--run\"));\r\n const agentOsId = String(required(String(args.agentOsId || loadUserConfig().agentOsId || \"\"), \"--agent-os-id\"));\r\n const execute = args.execute !== false && args.execute !== \"false\";\r\n const intervalMs = Number(args.intervalMs) > 0 ? Math.floor(Number(args.intervalMs)) : DEFAULT_INTERVAL_MS;\r\n let stopping = false;\r\n let idleStreak = 0;\r\n\r\n process.on(\"SIGINT\", () => {\r\n stopping = true;\r\n });\r\n process.on(\"SIGTERM\", () => {\r\n stopping = true;\r\n });\r\n\r\n console.error(JSON.stringify({ event: \"daemon_start\", runId, agentOsId, execute, intervalMs }));\r\n\r\n while (!stopping) {\r\n try {\r\n const tick = await runPipelineTick({ run: runId, agentOsId, execute, ...args });\r\n console.error(JSON.stringify({ event: \"daemon_tick\", ...tick }));\r\n\r\n if (tick.idle) {\r\n idleStreak++;\r\n } else {\r\n idleStreak = 0;\r\n }\r\n\r\n const backoff = idleStreak >= MAX_IDLE_STREAK ? IDLE_INTERVAL_MS : intervalMs;\r\n sleepMs(backoff);\r\n } catch (error) {\r\n console.error(JSON.stringify({ event: \"daemon_tick_error\", error: (error as Error).message }));\r\n sleepMs(intervalMs);\r\n }\r\n }\r\n\r\n console.error(JSON.stringify({ event: \"daemon_stop\", runId, agentOsId }));\r\n}\r\n\r\nexport { runPipelineTick } from \"./pipeline-tick.js\";\r\nexport { dispatchRun } from \"./dispatch.js\";\r\nexport { sweepRun } from \"./sweep.js\";\r\nexport { completeWorker } from \"./worker-ops.js\";\r\n", "import { resolveBaseUrl, resolveCallbackSecret, loadUserConfig } from \"./config.js\";\r\nimport { required } from \"./util.js\";\r\n\r\nexport interface PlanProgressCliEvidence {\r\n type: string;\r\n value: string;\r\n exitCode?: number;\r\n stdoutTail?: string;\r\n}\r\n\r\nfunction parseEvidenceArg(raw: string): PlanProgressCliEvidence {\r\n const idx = raw.indexOf(\":\");\r\n if (idx <= 0) throw new Error(`invalid --evidence ${raw} (expected type:value)`);\r\n return { type: raw.slice(0, idx), value: raw.slice(idx + 1) };\r\n}\r\n\r\nexport async function emitPlanProgress(args: Record<string, string | boolean>): Promise<void> {\r\n const planId = required(args, \"plan\");\r\n const agentOsId =\r\n (args.agentOsId ? String(args.agentOsId) : loadUserConfig().agentOsId) || \"\";\r\n if (!agentOsId) {\r\n console.error(\"requires --agent-os-id or agentOsId in ~/.kynver/config.json\");\r\n process.exit(1);\r\n }\r\n\r\n const roleLane = required(args, \"role\");\r\n const status = required(args, \"status\");\r\n const evidence: PlanProgressCliEvidence[] = [];\r\n const rawEvidence = args.evidence;\r\n if (Array.isArray(rawEvidence)) {\r\n for (const item of rawEvidence) evidence.push(parseEvidenceArg(String(item)));\r\n } else if (typeof rawEvidence === \"string\") {\r\n evidence.push(parseEvidenceArg(rawEvidence));\r\n }\r\n\r\n const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : undefined);\r\n const secret = resolveCallbackSecret(args.secret ? String(args.secret) : undefined);\r\n const url = `${base}/api/agent-os/by-id/${encodeURIComponent(agentOsId)}/plans/${encodeURIComponent(planId)}/progress-events`;\r\n\r\n const body = {\r\n rowKey: args.row ? String(args.row) : undefined,\r\n rowId: args.rowId ? String(args.rowId) : undefined,\r\n taskId: args.task ? String(args.task) : undefined,\r\n reviewTaskId: args.reviewTask ? String(args.reviewTask) : undefined,\r\n roleLane,\r\n status,\r\n note: args.note ? String(args.note) : undefined,\r\n remainingWork: args.remaining ? String(args.remaining) : undefined,\r\n evidence: evidence.length ? evidence : undefined,\r\n proposed: args.proposed === true || args.proposed === \"true\",\r\n executorRef: args.executorRef ? String(args.executorRef) : undefined,\r\n };\r\n\r\n const res = await fetch(url, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"X-OpenClaw-Cron-Secret\": secret,\r\n \"X-Kynver-Runtime-Secret\": secret,\r\n },\r\n body: JSON.stringify(body),\r\n });\r\n\r\n const text = await res.text();\r\n let parsed: unknown = null;\r\n try {\r\n parsed = JSON.parse(text);\r\n } catch {\r\n parsed = text;\r\n }\r\n if (!res.ok) {\r\n console.error(JSON.stringify({ httpStatus: res.status, response: parsed }, null, 2));\r\n process.exit(1);\r\n }\r\n console.log(JSON.stringify(parsed, null, 2));\r\n}\r\n\r\nexport async function verifyPlan(args: Record<string, string | boolean>): Promise<void> {\r\n const planId = required(args, \"plan\");\r\n const slug = loadUserConfig().agentOsSlug;\r\n if (!slug) {\r\n console.error(\"requires agentOsSlug in ~/.kynver/config.json for verify (session route)\");\r\n process.exit(1);\r\n }\r\n\r\n const base = resolveBaseUrl(args.baseUrl ? String(args.baseUrl) : undefined);\r\n const apiKey = process.env.KYNVER_API_KEY;\r\n const headers: Record<string, string> = { \"Content-Type\": \"application/json\" };\r\n if (apiKey) headers.Authorization = `Bearer ${apiKey}`;\r\n\r\n const url = `${base}/api/agent-os/${encodeURIComponent(slug)}/plans/${encodeURIComponent(planId)}/verify`;\r\n const res = await fetch(url, {\r\n method: \"POST\",\r\n headers,\r\n body: JSON.stringify({\r\n worktreePath: args.worktree ? String(args.worktree) : undefined,\r\n taskId: args.task ? String(args.task) : undefined,\r\n humanOverride: args.humanOverride === true || args.humanOverride === \"true\",\r\n }),\r\n });\r\n\r\n const text = await res.text();\r\n let parsed: unknown = null;\r\n try {\r\n parsed = JSON.parse(text);\r\n } catch {\r\n parsed = text;\r\n }\r\n if (!res.ok) {\r\n console.error(JSON.stringify({ httpStatus: res.status, response: parsed }, null, 2));\r\n process.exit(1);\r\n }\r\n console.log(JSON.stringify(parsed, null, 2));\r\n}\r\n"],
5
+ "mappings": "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",
6
6
  "names": ["mkdirSync", "path", "existsSync", "mkdirSync", "readFileSync", "writeFileSync", "path", "path", "existsSync", "readFileSync", "mkdirSync", "writeFileSync", "mkdirSync", "writeFileSync", "path", "path", "path", "existsSync", "homedir", "path", "path", "homedir", "existsSync", "path", "existsSync", "readFileSync", "existsSync", "readFileSync", "existsSync", "readFileSync", "existsSync", "readFileSync", "path", "existsSync", "mkdirSync", "path", "closeSync", "existsSync", "openSync", "readdirSync", "spawn", "path", "path", "mkdirSync", "existsSync", "summary", "path", "path", "existsSync", "mkdirSync", "path", "path", "path", "existsSync", "mkdirSync", "path", "path", "path", "path", "path", "mkdirSync", "path"]
7
7
  }