import type { ASIData, NumericMetricMap } from "@oh-my-pi/pi-tui/tools/autoresearch"; export declare const METRIC_LINE_PREFIX = "METRIC"; export declare const ASI_LINE_PREFIX = "ASI"; export declare const EXPERIMENT_MAX_LINES = 10; export declare const EXPERIMENT_MAX_BYTES: number; /** * Streaming equivalent of {@link parseMetricLines} + {@link parseAsiLines}: feed output * chunks with {@link append}, then {@link finish}. Only the unfinished trailing line (or a * prefix line still awaiting its `name=value` continuation) is buffered, so memory stays * O(line) instead of O(output) while yielding the same results as parsing the full text. */ export declare class ExperimentOutputScanner { #private; append(chunk: string): void; finish(): { metrics: Map; asi: ASIData | null; }; } export declare function parseMetricLines(output: string): Map; export declare function parseAsiLines(output: string): ASIData | null; export declare function mergeAsi(base: ASIData | null, override: ASIData | undefined): ASIData | undefined; export declare function killTree(pid: number, signal?: NodeJS.Signals | number): void; export declare function inferMetricUnitFromName(name: string): string; export declare function normalizePathSpec(value: string): string; export declare function pathMatchesSpec(pathValue: string, specValue: string): boolean; export declare function dedupeStrings(values: readonly string[]): string[]; export declare function ensureNumericMetricMap(value: NumericMetricMap | undefined): NumericMetricMap; export declare function sanitizeAsi(value: { [key: string]: unknown; } | undefined): ASIData | undefined; export declare function tryGitStatus(cwd: string): Promise; export declare function tryGitPrefix(cwd: string): Promise;