/** * @file 西洋占星本命出生时间整秒区间 * @description 在固定 UTC+8 的机器时间范围内逐秒计算本命盘,按完整离散盘面事实切分分支。 */ import type { AstrolabeBirthInput, AstrolabeData } from '../types/divination'; export type AstrolabeBirthRangeInput = { startTimestamp: number; endTimestamp: number; }; export type AstrolabeBirthRangeOptions = { onProgress?: (completed: number, total: number) => void; signal?: AbortSignal; }; export type AstrolabeBirthRangeSource = { startTimestamp: number; endTimestamp: number; endExclusive: true; timezone: 'Asia/Shanghai'; offsetHours: 8; }; export type AstrolabeBirthRangeContinuousFact = { /** 机器读取路径;展示层应使用 label。 */ path: string; /** 面向提示词/UI 的中文事实名称。 */ label: string; unit: string; /** 起点样本的原始值;圆周量不在此处改写。 */ first: number; /** 终点前一秒样本的原始值;圆周量不在此处改写。 */ last: number; /** 整秒样本观察值的最小值;圆周量按相对首样本解卷绕后统计。 */ min: number; max: number; sampleCount: number; circular?: { period: number; mode: 'shortest-arc-from-first'; note: string; }; }; export type AstrolabeBirthRangeBranch = { startTimestamp: number; endTimestamp: number; endExclusive: true; sampleCount: number; /** 离散分支起点的完整本命盘。 */ representative: AstrolabeData; /** 离散分支终点前一秒的完整本命盘。 */ last: AstrolabeData; continuous: AstrolabeBirthRangeContinuousFact[]; }; export type AstrolabeBirthRange = { /** 仅覆盖出生本命,不包含行运、次限或其他目标时段。 */ coverage: 'natal'; status: 'stable' | 'conditional'; source: AstrolabeBirthRangeSource; resolutionSeconds: 1; sampleCount: number; branches: AstrolabeBirthRangeBranch[]; }; export type AstrolabeBirthRangeContinuousSample = { path: string; label: string; unit: string; value: number; circularPeriod?: number; }; export type AstrolabeRangeMetricAccumulator = { path: string; label: string; unit: string; first: number; last: number; min: number; max: number; sampleCount: number; circularPeriod?: number; circularReference: number; }; export declare function getAstrolabeRangeInputAtTimestamp(input: AstrolabeBirthInput, timestamp: number): AstrolabeBirthInput; /** 返回不含生成时刻、长文本和连续几何量的本命离散指纹。 */ export declare function getAstrolabeBirthRangeDiscreteFingerprint(result: AstrolabeData): string; /** 收集本命盘可复用的连续事实样本,不包含生成时间或证据长文本。 */ export declare function collectAstrolabeBirthRangeContinuousSamples(result: AstrolabeData): AstrolabeBirthRangeContinuousSample[]; export declare function updateAstrolabeRangeMetrics(metrics: Map, samples: AstrolabeBirthRangeContinuousSample[]): void; export declare function finalizeAstrolabeRangeMetrics(metrics: Map): AstrolabeBirthRangeContinuousFact[]; /** 判断值是否为完整固定 UTC+8 本命机器来源。 */ export declare function isAstrolabeBirthRangeSource(value: unknown): value is AstrolabeBirthRangeSource; /** 本命与动态扫描共用同一整秒范围和出生输入约束。 */ export declare function validateAstrolabeRangeInput(input: AstrolabeBirthInput, range: AstrolabeBirthRangeInput): number; export declare function generateAstrolabeBirthRange(input: AstrolabeBirthInput, range: AstrolabeBirthRangeInput, options?: AstrolabeBirthRangeOptions): AstrolabeBirthRange;