/** * lark-cli(飞书官方 CLI)集成(身份与安装)。 * * - 注册/校验 Bot 身份 profile(非交互;appSecret 只走 stdin,不落日志、不进会话环境); * - 检测 lark-cli,缺失时用官方安装器安装(带节流)。 * * 使用入口是 `nbt feishu `(../cli/feishu.ts):由它准备身份并以该身份执行; * 身份环境变量只在那个子进程里生效,不进入会话环境。 */ export type LarkBrand = "feishu" | "lark"; /** 注册 profile 所需的最小 Bot 身份信息(来自 BotConfig)。 */ export interface LarkCliBotIdentity { /** Bot 配置 id;同时作为 lark-cli profile 名,与 NIUBOT_BOT_NAME 一致 */ id: string; appId: string; appSecret: string; brand?: LarkBrand; } export interface LarkCliRunResult { status: number | null; stdout: string; stderr: string; error?: NodeJS.ErrnoException; } export type LarkCliRunner = (file: string, args: string[], options: { input?: string; timeoutMs: number; }) => LarkCliRunResult | Promise; export interface LarkCliOptions { homeDir?: string; runner?: LarkCliRunner; } export declare const DEFAULT_LARK_BRAND: LarkBrand; /** 官方安装命令:二进制 + 官方 skills 一并安装。 */ export declare const LARK_CLI_INSTALL_COMMAND = "npx -y @larksuite/cli@latest install"; export declare function larkCliConfigPath(homeDir?: string): string; /** 距上次安装尝试不足重试窗口时跳过(成功安装后这里不会被读到)。 */ export declare function shouldAttemptLarkInstall(homeDir: string, now?: number): boolean; export declare function recordLarkInstallAttempt(homeDir: string, now?: number): void; export interface LarkCliProfileEntry { name?: string; appId?: string; brand?: string; defaultAs?: string; } /** 容错解析 lark-cli 配置文件(结构:{ apps: [{ name, appId, appSecret, brand, defaultAs, users }] })。 */ export declare function parseLarkCliProfiles(raw: string): LarkCliProfileEntry[]; export declare function readLarkCliProfiles(homeDir?: string): LarkCliProfileEntry[]; /** profile 缺失或 appId 变化才需要重建;已存在的 profile 保留操作方选择的 brand。 */ export declare function needsLarkProfileInit(profiles: LarkCliProfileEntry[], bot: LarkCliBotIdentity): boolean; export declare function buildLarkProfileInitArgs(bot: LarkCliBotIdentity): string[]; /** * 把 profile 的默认身份固定为 bot。 * 即使机器上有人执行过 auth login,Bot 的调用也不应该悄悄换成用户身份。 */ export declare function needsLarkDefaultAs(profiles: LarkCliProfileEntry[], bot: LarkCliBotIdentity): boolean; export declare function buildLarkDefaultAsArgs(bot: LarkCliBotIdentity): string[]; /** 读取 lark-cli 版本;未安装返回 undefined。 */ export declare function readLarkCliVersion(deps?: LarkCliOptions): Promise; /** 注册单个 Bot 的 profile 并把默认身份钉为 bot。appSecret 只经 stdin 传递,不进入日志。 */ export declare function ensureLarkProfile(bot: LarkCliBotIdentity, deps?: LarkCliOptions): Promise<"present" | "created" | "failed">; /** 安装 lark-cli(官方安装命令,同时安装官方 skills)。 */ export declare function installLarkCli(deps?: LarkCliOptions): Promise; /** 是否允许自动安装(默认允许;NIUBOT_LARK_CLI_AUTO_INSTALL=0/false/off 关闭)。 */ export declare function larkAutoInstallEnabled(env?: NodeJS.ProcessEnv): boolean; /** * 清掉从父进程继承下来的 lark-cli 身份变量。 * * 历史版本会向会话注入 LARKSUITE_CLI_*,而会话 → restart worker → 新引擎的进程继承 * 会让它们跨重启一直传给后续所有会话:直连 lark-cli 的调用会因此落到别的 Bot 身份上。 * 身份现在只由 `nbt feishu` 在单次调用的子进程里设置,引擎环境不应保留这些变量。 */ export declare function stripInheritedLarkIdentityEnv(env: NodeJS.ProcessEnv): string[];