/** * Chronicle sinks — where a beat goes once it's recorded. * * The durable log (memory.ts) is always written; sinks are optional, additive * push targets. Discord is the first sink, ported in behavior from Koru's * scripts/post-dev-note.js (the battle-tested emitter we're generalizing). * * Each sink type is a standalone function so adding the next one (CORDIAL, * Slack, …) is a new function, not a fork of the CLI action. The CLI never * gates posting — it dumbly records and emits whatever it's handed; the bar * for "excited enough" lives in the skill/agent reading the charter. */ export type Enthusiasm = 'reserved' | 'balanced' | 'high' | 'unhinged'; export interface DiscordSink { webhook: string; channel?: string; username?: string; } export interface ChronicleConfig { /** Freeform charter — read by the skill to set voice + the bar for posting. */ about?: string; /** How low the bar is to post. Prompt-level dial, not enforced in code. */ enthusiasm?: Enthusiasm; sinks?: { discord?: DiscordSink; }; } /** Path to the per-repo chronicle config (gitignored — it carries the secret webhook). */ export declare function getChronicleConfigPath(cwd: string): string; /** * Load the per-repo chronicle config. Returns null when there's no config file * — chronicling works locally before any sink is wired, so "no config" is not * an error. The Discord webhook can also come from the environment (CI / * headless), which takes precedence over the file. */ export declare function loadChronicleConfig(cwd: string): ChronicleConfig | null; /** * Render a beat into Discord message content. Ported verbatim in behavior from * post-dev-note.js:72-77 — `** **`, then the trimmed body on the * next line (header alone if there's no body). */ export declare function buildContent(emoji: string | undefined, title: string, body?: string): string; /** * Emit content to a Discord webhook. * * Refuses to truncate: Discord's 2000-char ceiling is the enforced design * constraint, not a thing to silently cut around — over-limit throws and tells * you to shorten. Fails loudly on non-2xx with the actual status + body. No * silent swallow. (post-dev-note.js:98-124) */ export declare function emitToDiscord(sink: DiscordSink, content: string): Promise<void>; //# sourceMappingURL=sinks.d.ts.map