export declare const MAX_SESSION_GROUP_TITLE_ROUNDS = 3; /** * Child env for the one-shot title call — the SAME security boundary as every * other CLI child the daemon spawns (PR review P2): `redactChildEnv` strips * daemon-only secrets (LARK_APP_SECRET, GITHUB_TOKEN, tmux client vars, Claude * session markers) and `sanitizePerBotEnv(cfg.env)` layers the bot's own * provider environment (base URL / auth token) on top so multi-provider bots * title through their own account instead of the daemon's. Exported for the * env-boundary regression tests. */ /** * Resolve the one-shot launch with the SAME launcher semantics as the formal * CLI spawn path (PR review): `wrapperCli` goes through buildWrappedLaunch — * the shared builder that knows the gateway specifics (ttadk needs * `-m --skip-check` or it opens an interactive model selector / * preflight and a non-TTY execFile hangs to timeout; aiden strips args it * rejects; cjadk rewrites codex config args) — plus wrapperLaunchEnv for the * wrapper's non-interactive env knobs (CJADK_INTERACTIVE=0). Without a * wrapper, `cliPathOverride` (registerBot enforces it as an exact shadow of * cliRuntime.executable, so runtime configs are covered transitively) * replaces the template bin; otherwise the template runs verbatim. Exported * for tests. */ export declare function resolveOneShotCommand(cfg: { wrapperCli?: string; cliPathOverride?: string; model?: string; }, template: readonly string[]): { argv: string[]; env?: Record; }; export declare function buildOneShotEnv(botEnv: unknown): NodeJS.ProcessEnv; export declare function buildTitlePrompt(text: string, maxLen: number, locale: string): string; /** Extract a plausible title from one-shot CLI stdout: last non-empty line * (codex/opencode prepend progress logs; claude/gemini print the bare * answer), stripped of quotes/markdown and length-capped. Two passes: a * strict pass drops known log-line shapes; if that filters EVERYTHING (an * output shape we didn't predict), a lenient pass takes the last line that * still looks like prose — never let over-filtering blank a real answer. */ export declare function sanitizeTitleOutput(stdout: string, maxLen: number): string | null; /** Fire-and-forget: generate an AI title for a freshly-born session group and * rename the chat (+ session record) when it lands. */ export declare function scheduleSessionGroupTitle(opts: { larkAppId: string; chatId: string; userText: string; }): void; //# sourceMappingURL=session-group-title.d.ts.map