import type { InstalledRuntimeEntry } from "./strategy-registry.js"; export interface RuntimeDslLadder { /** Negative ROE % floor (`-max_loss_pct`), or null when phase1 is disabled — never 0-as-absent. */ hard_stop_roe_pct: number | null; arm_at_roe_pct: number | null; /** Rows come from the engine's own `parseTier`, which rejects a non-finite value — never null. */ tiers: Array<{ trigger_pct: number; lock_hw_pct: number; }>; has_phase2: boolean; } export interface RuntimeDescriptor { name: string | null; group: string | null; version: string | number | null; description: string | null; /** * CONFIGURED, not monitored. This is `instanceHasDslExit` — the predicate `senpi deploy` funds * against (`../deploy/package.ts:331`) — and it is deliberately the funding gate's answer rather * than the exit monitor's, so that what deploy funds and what this reports can never disagree. * * The two are not the same question. `exit: { engine: dsl }` with no `dsl_preset` is `hasExit: * true` with `dsl: null`, and the engine runs no ladder for it at all: the DSL monitor needs an * OBJECT preset (`parseDslPluginConfig` throws otherwise, `../dsl/config/parse-plugin-config.ts`), * so that strategy trades with no hard stop and no trailing floor. Read `hasExit` alone as "the * author asked for a DSL exit"; only a non-null `dsl` carrying a ladder proves one is enforced. */ hasExit: boolean; dslPreset: string | boolean | null; dsl: RuntimeDslLadder | { preset_name: string; note: string; } | null; } export declare function describeRuntimeEntry(entry: InstalledRuntimeEntry): RuntimeDescriptor | null; //# sourceMappingURL=runtime-descriptor.d.ts.map