interface AttentionLike { id?: string; /** 어느 트윈(렌즈)에서 온 신호인가 — 공간에서 모을 때 붙는다. */ instanceId?: string; severity?: string; state?: string; anchor?: { locationId?: string; }; } export interface AttentionDigestResult { /** 상위 N — 레일이 그리는 것. */ attentions: AttentionLike[]; /** 전체 개수 — 레일의 "N건 더" 가 이 값에서 나온다(자른 사실을 밝힌다). */ attentionTotal: number; /** * 자리별 최고 심각도 — **전량을 근거로** 계산한다. * * 상위 N 만으로 계산하면 20위 밖의 신호를 가진 자리가 색을 잃는다. 그것이 이 요약의 핵심 이유다: * 레일은 잘라도 되지만 **지도 색은 잘라선 안 된다.** */ severityByLocation: Record; } /** 화면 정렬과 같은 순서 — 확인된 것은 아래로, 그다음 심각도 내림차순. */ export declare const compareAttentions: (a: AttentionLike, b: AttentionLike) => number; /** * 신호를 요약한다. * * `limit` 이 없거나 0 이하면 **자르지 않는다** — 자르는 쪽이 기본이면 이 값을 모르는 소비처가 * 알리지 않고 일부만 받는다(요약을 도입하다 만드는 전형적인 사고다). */ export declare function digestAttentions(attentions: readonly AttentionLike[] | undefined | null, limit?: number): AttentionDigestResult; /** 렌즈 하나가 낸 신호 — 어느 트윈에서 왔는지와 함께. */ export interface LensAttentions { instanceId: string; attentions: readonly AttentionLike[] | undefined | null; } /** * 여러 렌즈의 신호를 **한 현장의 목록으로** 모은다. * * 한 공장에 WMS·MES·YMS 가 함께 있으므로 "이 현장에서 봐야 할 것" 은 렌즈 하나로 답할 수 없다. * 모으면서 지키는 것 셋: * * ① **어느 트윈에서 왔는지 붙인다**(`instanceId`) — 조치는 결국 그 트윈에 보내야 하고, 공간에서 보면 * 같은 자리 id 가 렌즈마다 다른 것을 가리킬 수 있다. * ② **순서는 렌즈 순서가 아니라 급한 순서다** — 앞 렌즈의 낮은 신호가 뒤 렌즈의 심각한 신호를 * 밀어내면, 상위 N 만 보는 화면에서 정작 급한 것이 안 보인다. * ③ **자리 색은 렌즈를 가로질러 가장 급한 것으로** 계산한다 — 두 렌즈가 같은 자리를 가리키면 그 자리는 * 하나의 현실이므로 더 급한 쪽이 이긴다(둘 중 하나를 임의로 고르면 색이 렌즈 순서에 따라 달라진다). */ export declare function mergeLensAttentions(lenses: readonly LensAttentions[], limit?: number): AttentionDigestResult; export {};