import { type AddChannelsDeps } from "../boxes/add-channels.js"; import { inspectExistingChannelRegistrations } from "../channel-add-conflicts.js"; import { detectDeployment } from "../project-resolution.js"; import type { Prompter } from "../prompter.js"; import { getVercelAuthStatus } from "../vercel-project.js"; /** Injected for tests; defaults to the real detection and box effects. */ export interface ChannelsFlowDeps { detectDeployment: typeof detectDeployment; inspectExistingChannelRegistrations: typeof inspectExistingChannelRegistrations; getVercelAuthStatus: typeof getVercelAuthStatus; addChannels?: AddChannelsDeps; } export type ChannelsFlowResult = { kind: "done"; addedChannels: readonly string[]; } | { /** * The user chose "Deploy and chat" on the post-Slack "See it live" * prompt. The caller deploys, then points them at this workspace. */ kind: "deploy-and-chat"; addedChannels: readonly string[]; chat: { chatUrl?: string; workspaceName?: string; }; } | { kind: "cancelled"; } | { kind: "failed"; addedChannels: readonly string[]; message: string; }; /** The post-Slack "see it live" chooser's title. */ export declare const SEE_IT_LIVE_MESSAGE = "See it live"; /** * THE CHANNELS FLOW for the dev TUI's `/channels`: a task list that loops. * Pick an unregistered channel, run its add sub-flow (Slack provisioning * included), and land back on the repainted list with that channel checked; * "Done" or Esc leaves. Filesystem effects can land before the runner applies * their in-memory payload, so every cancelled or failed sub-flow re-inspects * authored registrations and preserves a channel that became durable. Esc on * the list after something was added reports the additions exactly like Done; * only an empty exit folds to cancelled. * * Each pick reuses the `eve channels add` composition — the same conflict * validation, Vercel services config pinned on, and the default empty agent * name (the Slack connector slug falls back to the package.json name) — with * two TUI-specific differences: no trailing deploy box (the TUI exposes * `/deploy` as its own command), and no inline link pickers — channels that * provision against the Vercel project render disabled with a warning * pointing at /model while the directory is unlinked, so a pick can never * reach provisioning without a link. */ export declare function runChannelsFlow(input: { appRoot: string; prompter: Prompter; signal?: AbortSignal; deps?: Partial; }): Promise;