@jentrix/runner 0.5.11 → 0.5.13
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/chunk-QBB7WO4L.js +7 -0
- package/dist/{chunk-EZMRE63D.js.map → chunk-QBB7WO4L.js.map} +1 -1
- package/dist/{local-probes-24XPDSVY.js → local-probes-373TWNQP.js} +5 -2
- package/dist/local-probes-373TWNQP.js.map +7 -0
- package/dist/runner-cli.js +15 -7
- package/dist/runner-cli.js.map +2 -2
- package/dist/{session-host-EOS67U2J.js → session-host-X4B43PJJ.js} +8 -3
- package/dist/{session-host-EOS67U2J.js.map → session-host-X4B43PJJ.js.map} +2 -2
- package/dist/workflow-runner.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-EZMRE63D.js +0 -7
- package/dist/local-probes-24XPDSVY.js.map +0 -7
package/dist/workflow-runner.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
RUNNER_VERSION
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-QBB7WO4L.js";
|
|
4
4
|
|
|
5
5
|
// workflow-runner.ts
|
|
6
6
|
import { createHmac, timingSafeEqual } from "node:crypto";
|
|
@@ -6351,7 +6351,7 @@ function stampSchemaRevision() {
|
|
|
6351
6351
|
process.env.STACKS_SCHEMA_REVISION = "20260906000000_session_review_taxonomy_gap_issue";
|
|
6352
6352
|
}
|
|
6353
6353
|
if (!process.env.STACKS_APP_REVISION && true) {
|
|
6354
|
-
process.env.STACKS_APP_REVISION = "
|
|
6354
|
+
process.env.STACKS_APP_REVISION = "6425e6b45b981e0a150424b7dd606b56979f0243";
|
|
6355
6355
|
}
|
|
6356
6356
|
const resolved = resolveSchemaRevision(process.env, (p) => readdirSync(p));
|
|
6357
6357
|
if (resolved.source === "migrations" && resolved.revision) {
|
package/package.json
CHANGED
package/dist/chunk-EZMRE63D.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../lib/local-probes.ts"],
|
|
4
|
-
"sourcesContent": ["import { execFile, spawn } from \"node:child_process\";\nimport { constants, promises as fs } from \"node:fs\";\nimport { delimiter, extname, isAbsolute, resolve } from \"node:path\";\n\nimport { query, type SDKUserMessage } from \"@anthropic-ai/claude-agent-sdk\";\n\nconst PROBE_TIMEOUT_MS = 25_000;\nconst OUTPUT_CAP_BYTES = 1024 * 1024;\nconst PROBE_SCRUBBED_ENV_KEYS = new Set([\n \"STACKS_TOKEN\",\n \"STACKS_RUNNER_TOKEN\",\n \"STACKS_PLANNER_TOKEN\",\n \"STACKS_REVIEWER_TOKEN\",\n \"STACKS_WEBHOOK_SECRET\",\n \"STACKS_BOOTSTRAP_TOKEN\",\n \"STACKS_CLAIM_URL\",\n \"STACKS_RUNNER_AUTH_STATE\",\n \"STACKS_WORKER_HEARTBEAT_TOKEN\",\n \"STACKS_RUNNER_ROLE_BINDINGS\",\n]);\n\nexport function providerProbeEnv(\n env: NodeJS.ProcessEnv,\n adapter?: \"claude\" | \"codex\",\n): NodeJS.ProcessEnv {\n return Object.fromEntries(\n Object.entries(env).filter(\n ([key, value]) =>\n value !== undefined &&\n !PROBE_SCRUBBED_ENV_KEYS.has(key) &&\n !(adapter === \"codex\" && key === \"ANTHROPIC_API_KEY\"),\n ),\n );\n}\n\nexport type LocalRuntimeStatus =\n | \"ready\"\n | \"missing\"\n | \"auth_required\"\n | \"installed_unverified\"\n | \"incompatible\"\n | \"timeout\"\n | \"failed\";\n\nexport interface LocalRuntimeProbe {\n adapterKey: \"claude\" | \"codex\";\n status: LocalRuntimeStatus;\n binaryPath: string | null;\n version: string | null;\n authMethod: \"subscription\" | \"api_key\" | \"unknown\";\n availableModels: Array<{ id: string; displayName?: string }>;\n selectedModel: string | null;\n capabilitySource: \"local_rpc\" | \"sdk_init\" | \"cli_status\" | \"none\";\n checkedAt: string;\n blocker: { code: string; message: string; nextCommand?: string } | null;\n}\n\nexport interface ReadOnlyCapabilityResult {\n authenticated: boolean;\n authMethod: LocalRuntimeProbe[\"authMethod\"];\n availableModels: LocalRuntimeProbe[\"availableModels\"];\n selectedModel: string | null;\n compatible?: boolean;\n}\n\nexport interface RunFileResult {\n code: number;\n stdout: string;\n stderr: string;\n}\n\nexport interface LocalProbeDeps {\n env: NodeJS.ProcessEnv;\n now(): Date;\n resolveExecutable(\n name: \"claude\" | \"codex\",\n override?: string,\n ): Promise<string | null>;\n runFile(file: string, args: string[]): Promise<RunFileResult>;\n probeClaudeInit(file: string): Promise<ReadOnlyCapabilityResult>;\n probeCodexRpc(file: string): Promise<ReadOnlyCapabilityResult>;\n}\n\nexport interface LocalProbeOptions {\n claudePath?: string;\n codexPath?: string;\n}\n\nfunction probeError(code: string, message: string): Error {\n return Object.assign(new Error(message), { code });\n}\n\nfunction errorCode(error: unknown): string | null {\n return typeof error === \"object\" && error !== null && \"code\" in error\n ? String((error as { code: unknown }).code)\n : null;\n}\n\nasync function executableAt(path: string): Promise<string | null> {\n try {\n await fs.access(path, constants.X_OK);\n return await fs.realpath(path);\n } catch {\n return null;\n }\n}\n\nexport async function resolveExecutable(\n name: \"claude\" | \"codex\",\n override: string | undefined,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<string | null> {\n if (override) {\n if (!isAbsolute(override)) return null;\n return executableAt(override);\n }\n const extensions =\n process.platform === \"win32\"\n ? (env.PATHEXT ?? \".EXE;.CMD;.BAT\").split(\";\")\n : [\"\"];\n for (const dir of (env.PATH ?? \"\").split(delimiter)) {\n if (!dir) continue;\n for (const extension of extensions) {\n const candidate = resolve(\n dir,\n process.platform === \"win32\" && !extname(name)\n ? `${name}${extension.toLowerCase()}`\n : name,\n );\n const found = await executableAt(candidate);\n if (found) return found;\n }\n }\n return null;\n}\n\nexport function runFileBounded(\n file: string,\n args: string[],\n env: NodeJS.ProcessEnv = process.env,\n): Promise<RunFileResult> {\n if (!isAbsolute(file)) {\n return Promise.reject(new Error(\"probe executable path must be absolute\"));\n }\n return new Promise((resolveResult, reject) => {\n execFile(\n file,\n args,\n {\n env,\n timeout: PROBE_TIMEOUT_MS,\n maxBuffer: OUTPUT_CAP_BYTES,\n windowsHide: true,\n },\n (error, stdout, stderr) => {\n if (error && (error.killed || errorCode(error) === \"ETIMEDOUT\")) {\n reject(probeError(\"PROBE_TIMEOUT\", \"local runtime probe timed out\"));\n return;\n }\n if (error && errorCode(error) === \"ERR_CHILD_PROCESS_STDIO_MAXBUFFER\") {\n reject(new Error(\"local runtime probe exceeded its output limit\"));\n return;\n }\n resolveResult({\n code:\n typeof (error as { code?: unknown } | null)?.code === \"number\"\n ? Number((error as { code: number }).code)\n : 0,\n stdout: String(stdout).slice(0, OUTPUT_CAP_BYTES),\n stderr: String(stderr).slice(0, OUTPUT_CAP_BYTES),\n });\n },\n );\n });\n}\n\nfunction cleanModels(value: unknown): LocalRuntimeProbe[\"availableModels\"] {\n if (!Array.isArray(value)) return [];\n const out: LocalRuntimeProbe[\"availableModels\"] = [];\n const seen = new Set<string>();\n for (const item of value) {\n if (!item || typeof item !== \"object\") continue;\n const row = item as Record<string, unknown>;\n const id = [row.id, row.model, row.slug, row.value]\n .find((v): v is string => typeof v === \"string\" && v.trim().length > 0)\n ?.trim();\n if (!id || seen.has(id)) continue;\n seen.add(id);\n const displayName = [row.displayName, row.display_name, row.name].find(\n (v): v is string => typeof v === \"string\" && v.trim().length > 0,\n );\n out.push({\n id,\n ...(displayName ? { displayName: displayName.trim() } : {}),\n });\n }\n return out;\n}\n\nfunction record(value: unknown): Record<string, unknown> | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nasync function waitForAbort(signal: AbortSignal): Promise<void> {\n if (signal.aborted) return;\n await new Promise<void>((resolveAbort) =>\n signal.addEventListener(\"abort\", () => resolveAbort(), { once: true }),\n );\n}\n\nexport async function probeClaudeInit(\n executablePath: string,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<ReadOnlyCapabilityResult> {\n const abort = new AbortController();\n const session = query({\n // A never-yielding prompt lets the SDK finish local initialization without\n // ever writing a user message or starting a provider request.\n prompt: (async function* (): AsyncGenerator<SDKUserMessage> {\n await waitForAbort(abort.signal);\n })(),\n options: {\n persistSession: false,\n pathToClaudeCodeExecutable: executablePath,\n abortController: abort,\n settingSources: [],\n allowedTools: [],\n mcpServers: {},\n strictMcpConfig: true,\n env: { ...env, ENABLE_CLAUDEAI_MCP_SERVERS: \"false\" },\n stderr: () => {},\n },\n });\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n const init = await Promise.race([\n session.initializationResult(),\n new Promise<never>((_, reject) => {\n timer = setTimeout(\n () => reject(probeError(\"PROBE_TIMEOUT\", \"Claude probe timed out\")),\n PROBE_TIMEOUT_MS,\n );\n }),\n ]);\n const account = init.account;\n const authMethod = account?.apiKeySource\n ? \"api_key\"\n : account?.subscriptionType ||\n account?.tokenSource ||\n account?.apiProvider\n ? \"subscription\"\n : \"unknown\";\n const models = cleanModels(init.models);\n return {\n authenticated: authMethod !== \"unknown\",\n authMethod,\n availableModels: models,\n selectedModel: models[0]?.id ?? null,\n };\n } finally {\n clearTimeout(timer);\n abort.abort();\n session.close();\n }\n}\n\nexport function probeCodexRpc(\n executablePath: string,\n env: NodeJS.ProcessEnv = process.env,\n): Promise<ReadOnlyCapabilityResult> {\n if (!isAbsolute(executablePath)) {\n return Promise.reject(new Error(\"probe executable path must be absolute\"));\n }\n return new Promise((resolveProbe, rejectProbe) => {\n const child = spawn(executablePath, [\"app-server\"], {\n env,\n shell: false,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n windowsHide: true,\n });\n let outputBytes = 0;\n let buffer = \"\";\n let nextId = 1;\n let settled = false;\n const pending = new Map<\n number,\n { resolve(value: unknown): void; reject(error: Error): void }\n >();\n const finish = (error?: Error, value?: ReadOnlyCapabilityResult) => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n for (const waiter of pending.values()) {\n waiter.reject(error ?? new Error(\"Codex app server stopped\"));\n }\n pending.clear();\n child.stdin.end();\n if (!child.killed) child.kill(\"SIGTERM\");\n if (error) rejectProbe(error);\n else resolveProbe(value!);\n };\n const timer = setTimeout(\n () => finish(probeError(\"PROBE_TIMEOUT\", \"Codex probe timed out\")),\n PROBE_TIMEOUT_MS,\n );\n const request = (method: string, params: unknown): Promise<unknown> => {\n const id = nextId++;\n return new Promise((resolveRequest, rejectRequest) => {\n pending.set(id, { resolve: resolveRequest, reject: rejectRequest });\n child.stdin.write(\n `${JSON.stringify({ jsonrpc: \"2.0\", id, method, params })}\\n`,\n );\n });\n };\n const onBytes = (chunk: Buffer, protocol: boolean) => {\n outputBytes += chunk.byteLength;\n if (outputBytes > OUTPUT_CAP_BYTES) {\n finish(new Error(\"Codex probe exceeded its output limit\"));\n return;\n }\n if (!protocol) return;\n buffer += chunk.toString(\"utf8\");\n for (;;) {\n const newline = buffer.indexOf(\"\\n\");\n if (newline < 0) break;\n const line = buffer.slice(0, newline).trim();\n buffer = buffer.slice(newline + 1);\n if (!line) continue;\n try {\n const message = JSON.parse(line) as Record<string, unknown>;\n if (typeof message.id !== \"number\") continue;\n const waiter = pending.get(message.id);\n if (!waiter) continue;\n pending.delete(message.id);\n if (message.error)\n waiter.reject(new Error(\"Codex RPC method failed\"));\n else waiter.resolve(message.result);\n } catch {\n finish(new Error(\"Codex app server returned malformed JSON\"));\n }\n }\n };\n child.stdout.on(\"data\", (chunk: Buffer) => onBytes(chunk, true));\n child.stderr.on(\"data\", (chunk: Buffer) => onBytes(chunk, false));\n child.once(\"error\", (error) => finish(error));\n child.once(\"exit\", () => {\n if (!settled) finish(new Error(\"Codex app server exited during probe\"));\n });\n\n void (async () => {\n await request(\"initialize\", {\n clientInfo: {\n name: \"stacks_runner_probe\",\n title: \"Jentrix Runner\",\n version: \"1\",\n },\n capabilities: { experimentalApi: true },\n });\n child.stdin.write(\n `${JSON.stringify({ jsonrpc: \"2.0\", method: \"initialized\" })}\\n`,\n );\n const accountResult = record(await request(\"account/read\", {}));\n const account = record(accountResult?.account);\n if (!account && accountResult?.requiresOpenaiAuth === true) {\n finish(undefined, {\n authenticated: false,\n authMethod: \"unknown\",\n availableModels: [],\n selectedModel: null,\n });\n return;\n }\n const modelResult = record(await request(\"model/list\", {}));\n const models = cleanModels(modelResult?.data ?? modelResult?.models);\n const authType = String(account?.type ?? \"\").toLowerCase();\n finish(undefined, {\n authenticated: Boolean(account),\n authMethod: /api/.test(authType)\n ? \"api_key\"\n : account\n ? \"subscription\"\n : \"unknown\",\n availableModels: models,\n selectedModel:\n models.find((model) => {\n const source = Array.isArray(modelResult?.data)\n ? (modelResult!.data as Array<Record<string, unknown>>)\n : [];\n return source.some(\n (row) =>\n (row.id === model.id || row.model === model.id) &&\n (row.isDefault === true || row.is_default === true),\n );\n })?.id ?? null,\n });\n })().catch((error) =>\n finish(error instanceof Error ? error : new Error(String(error))),\n );\n });\n}\n\nfunction versionOf(output: string): string | null {\n return output.match(/\\b\\d+\\.\\d+(?:\\.\\d+)?(?:[-+][\\w.-]+)?\\b/)?.[0] ?? null;\n}\n\nfunction blocker(\n code: string,\n message: string,\n nextCommand?: string,\n): LocalRuntimeProbe[\"blocker\"] {\n return { code, message, ...(nextCommand ? { nextCommand } : {}) };\n}\n\nasync function cliAuthFallback(\n adapter: \"claude\" | \"codex\",\n file: string,\n runFile: LocalProbeDeps[\"runFile\"],\n): Promise<\"authenticated\" | \"required\" | \"unknown\"> {\n const args =\n adapter === \"claude\" ? [\"auth\", \"status\", \"--json\"] : [\"login\", \"status\"];\n try {\n const result = await runFile(file, args);\n const text = `${result.stdout}\\n${result.stderr}`.toLowerCase();\n if (\n /not logged|login required|authentication required|\"loggedin\"\\s*:\\s*false/.test(\n text,\n )\n ) {\n return \"required\";\n }\n if (\n result.code === 0 &&\n /logged in|authenticated|\"loggedin\"\\s*:\\s*true/.test(text)\n ) {\n return \"authenticated\";\n }\n return \"unknown\";\n } catch {\n return \"unknown\";\n }\n}\n\nasync function probeRuntime(\n adapterKey: \"claude\" | \"codex\",\n override: string | undefined,\n deps: LocalProbeDeps,\n): Promise<LocalRuntimeProbe> {\n const checkedAt = deps.now().toISOString();\n const nextCommand =\n adapterKey === \"claude\" ? \"claude auth login\" : \"codex login\";\n const binaryPath = await deps.resolveExecutable(adapterKey, override);\n const base = {\n adapterKey,\n binaryPath,\n version: null,\n authMethod: \"unknown\" as const,\n availableModels: [],\n selectedModel: null,\n capabilitySource: \"none\" as const,\n checkedAt,\n };\n if (!binaryPath) {\n return {\n ...base,\n status: \"missing\",\n blocker: blocker(\n \"BINARY_NOT_FOUND\",\n `${adapterKey === \"claude\" ? \"Claude Code\" : \"Codex\"} is not installed or the configured path is not executable.`,\n `Install ${adapterKey === \"claude\" ? \"Claude Code\" : \"Codex\"} manually, then run jentrix runner doctor`,\n ),\n };\n }\n let version: string | null = null;\n try {\n const result = await deps.runFile(binaryPath, [\"--version\"]);\n version = versionOf(`${result.stdout}\\n${result.stderr}`);\n if (result.code !== 0 || !version) {\n return {\n ...base,\n binaryPath,\n status: \"failed\",\n blocker: blocker(\n \"VERSION_PROBE_FAILED\",\n `The ${adapterKey} executable ran but did not report a usable version.`,\n `Update ${adapterKey} manually, then run jentrix runner doctor`,\n ),\n };\n }\n } catch (error) {\n return {\n ...base,\n binaryPath,\n status: errorCode(error) === \"PROBE_TIMEOUT\" ? \"timeout\" : \"failed\",\n blocker: blocker(\n errorCode(error) === \"PROBE_TIMEOUT\"\n ? \"VERSION_PROBE_FAILED\"\n : \"VERSION_PROBE_FAILED\",\n `The ${adapterKey} version probe ${errorCode(error) === \"PROBE_TIMEOUT\" ? \"timed out\" : \"failed\"}.`,\n \"jentrix runner doctor\",\n ),\n };\n }\n\n try {\n const evidence = await (adapterKey === \"claude\"\n ? deps.probeClaudeInit(binaryPath)\n : deps.probeCodexRpc(binaryPath));\n if (evidence.compatible === false) {\n return {\n ...base,\n binaryPath,\n version,\n status: \"incompatible\",\n blocker: blocker(\n \"RUNTIME_INCOMPATIBLE\",\n `The installed ${adapterKey} runtime lacks the required read-only capability protocol.`,\n `Update ${adapterKey} manually, then run jentrix runner doctor`,\n ),\n };\n }\n if (!evidence.authenticated) {\n return {\n ...base,\n binaryPath,\n version,\n status: \"auth_required\",\n capabilitySource: adapterKey === \"claude\" ? \"sdk_init\" : \"local_rpc\",\n blocker: blocker(\n \"AUTH_REQUIRED\",\n `The local ${adapterKey} login is absent or expired.`,\n nextCommand,\n ),\n };\n }\n if (evidence.availableModels.length === 0) {\n return {\n ...base,\n binaryPath,\n version,\n authMethod: evidence.authMethod,\n status: \"installed_unverified\",\n capabilitySource: adapterKey === \"claude\" ? \"sdk_init\" : \"local_rpc\",\n blocker: blocker(\n \"AUTH_UNVERIFIED\",\n `The local ${adapterKey} probe could not prove a usable model without making a model request.`,\n nextCommand,\n ),\n };\n }\n return {\n ...base,\n binaryPath,\n version,\n authMethod: evidence.authMethod,\n availableModels: evidence.availableModels,\n selectedModel: evidence.selectedModel,\n status: \"ready\",\n capabilitySource: adapterKey === \"claude\" ? \"sdk_init\" : \"local_rpc\",\n blocker: null,\n };\n } catch (error) {\n if (errorCode(error) === \"PROBE_TIMEOUT\") {\n return {\n ...base,\n binaryPath,\n version,\n status: \"timeout\",\n blocker: blocker(\n \"RUNTIME_INCOMPATIBLE\",\n `The ${adapterKey} read-only capability probe timed out.`,\n \"jentrix runner doctor\",\n ),\n };\n }\n const fallback = await cliAuthFallback(\n adapterKey,\n binaryPath,\n deps.runFile,\n );\n if (fallback === \"required\") {\n return {\n ...base,\n binaryPath,\n version,\n status: \"auth_required\",\n capabilitySource: \"cli_status\",\n blocker: blocker(\n \"AUTH_REQUIRED\",\n `The local ${adapterKey} login is absent or expired.`,\n nextCommand,\n ),\n };\n }\n return {\n ...base,\n binaryPath,\n version,\n status: \"installed_unverified\",\n capabilitySource: fallback === \"authenticated\" ? \"cli_status\" : \"none\",\n blocker: blocker(\n \"AUTH_UNVERIFIED\",\n `The installed ${adapterKey} version cannot prove readiness without a model request.`,\n nextCommand,\n ),\n };\n }\n}\n\nexport function defaultLocalProbeDeps(\n env: NodeJS.ProcessEnv = process.env,\n): LocalProbeDeps {\n const safeEnv = providerProbeEnv(env);\n return {\n env,\n now: () => new Date(),\n resolveExecutable: (name, override) =>\n resolveExecutable(name, override, env),\n runFile: (file, args) => runFileBounded(file, args, safeEnv),\n probeClaudeInit: (file) =>\n probeClaudeInit(file, providerProbeEnv(env, \"claude\")),\n probeCodexRpc: (file) =>\n probeCodexRpc(file, providerProbeEnv(env, \"codex\")),\n };\n}\n\nexport async function probeLocalRuntimes(\n options: LocalProbeOptions = {},\n deps: LocalProbeDeps = defaultLocalProbeDeps(),\n): Promise<LocalRuntimeProbe[]> {\n return Promise.all([\n probeRuntime(\"claude\", options.claudePath, deps),\n probeRuntime(\"codex\", options.codexPath, deps),\n ]);\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|