/**
 * `check_chat_connection` primitive (T-HANDOFF-HARDENING HH6.2; re-keyed to
 * UMBRELLA in T-CHAT-AS-TERMINAL CAT.1c).
 *
 * The first consumer of the SessionStart hook mechanism (HH6.1). On a
 * `session_start` event it reports the session's chat-connection state as a
 * `RuleResult.inject_context` payload (the SessionStart hook bin surfaces it
 * via `hookSpecificOutput.additionalContext`):
 *
 *   - the cwd resolves to an umbrella with a telegram binding (+ bot token) →
 *     report the topic + whether a `chat watch` live-session lease is held;
 *   - else another configured platform (slack/discord) → report that;
 *   - else → nudge to run `opensquid setup` (or set the opt-out).
 *
 * CAT.1c collapsed the legacy per-project drift check: the umbrella is now
 * STRUCTURAL (one row in `channels.json` owns every member cwd + the single
 * `(chat_id, topic_id)`), so routing drift between members is impossible by
 * construction — `detectUmbrellaDrift` is DELETED. Routing is read from the
 * single authoritative `channels.json` via `loadChannelsConfig`, never from
 * per-project `chat-routing.json` (which CAT.1d retires).
 *
 * REPORT-ONLY, per [[project_opensquid_no_agent_loop]]: this primitive reads
 * state and composes a message; it never starts `chat watch`, spawns a daemon,
 * or repairs routing. The agent reads the surfaced report and acts.
 *
 * Opt-out (HH6.2 L7): `chat.session_start_check: "off"` in
 * `~/.opensquid/config.json` → returns `ok(null)` (no injection).
 *
 * v1 deliberately does NOT make a live Telegram `getChat` reachability call:
 * a network hang must never delay session start, so "configured" is read from
 * routing + token presence (fail-fast, config-only).
 *
 * Fail-quiet: every fs read is ENOENT-tolerant and any unexpected error
 * returns `ok(null)` — a connection check must never break session start.
 * `channels.json` may not exist yet (synthesized at the CAT.1d cutover); an
 * absent config / unresolved umbrella degrades to the "no chat wired" nudge.
 *
 * Special evaluator integration (same as `recall_pre_inject`): returning
 * `{ kind: 'inject_context', content }` makes the evaluator treat it as a
 * TERMINAL RuleResult; `null` is the empty/no-verdict branch.
 *
 * Imports from: zod, node:fs/promises, node:path, ../channels/routing.js,
 *   ../runtime/result.js, ../runtime/paths.js,
 *   ../runtime/chat/live_session_lease.js.
 * Imported by: src/runtime/bootstrap.ts (registry wiring).
 */
import type { FunctionRegistry } from './registry.js';
export declare function registerCheckChatConnectionFunction(registry: FunctionRegistry): void;
//# sourceMappingURL=check_chat_connection.d.ts.map