/** * Whether a question lifted out of an agent's reply earns its own decision * card, or is only tracked. * * The question is already in the agent's message in the owner's thread; a * card repeats it with buttons. Over 3.5 days (2026-10-13 → 10-16) the owner * got 142 cards, ~40 a day, most of them lifted: cut-off fragments * ("md、sending — 可以发吗?"), questions meant for another agent ("你们能在 * 周五 9 点前回一句结论吗?"), a second card in a thread that already had one, * and two cards for one question in the same minute. A card is only worth it * when it is a clean question to the owner that he has not been carded on * already, and an agent gets only a few a day. * * Questions that fail the gate stay tracked (the owner answers in the * thread, as he does anyway); they just do not get a card. * * @module services/open-items/question-card-gate */ import type { OwnerDecision } from '../../types/decision.types.js'; /** Why a lifted question gets no card. */ export type CardSkipReason = 'one_card_per_message' | 'fragment' | 'for_someone_else' | 'thread_has_card' | 'same_as_recent' | 'daily_cap'; /** Input to {@link questionCardSkipReason}. */ export interface CardGateInput { /** The question as extracted from the reply */ question: string; /** The question as the card would show it (may add its subject) */ cardQuestion?: string; /** Asking agent's session */ agent: string; /** Where the card would go (null/undefined: no Slack place) */ place?: { slackChannelId: string; threadTs?: string; } | null; /** Decisions this agent asked in the last day (any kind, any status) */ recent: readonly OwnerDecision[]; /** Names of the agent's colleagues (to spot a question addressed to one of them) */ colleagueNames?: readonly string[]; /** Now */ now: Date; } /** * Why this lifted question should not get a card, or null when it should. * * @param input - The question and what the agent asked recently * @returns The reason to skip the card, or null to post it */ export declare function questionCardSkipReason(input: CardGateInput): CardSkipReason | null; //# sourceMappingURL=question-card-gate.d.ts.map