/** * opencode-chat-channel — SessionManager * * 管理"渠道用户 ID → opencode session"的映射。 * 与具体渠道无关,所有 channel 实现共享同一套逻辑。 */ import type { PluginClient } from "./types.js"; /** * 复现 opencode 使用的 xdg-basedir 路径逻辑,无需额外依赖。 * - Windows : %APPDATA%\opencode (xdgConfig = APPDATA) * - macOS/Linux: $XDG_CONFIG_HOME/opencode 或 ~/.config/opencode * * 与 opencode 源码 packages/opencode/src/global/index.ts 保持一致。 */ export declare function getOpencodeConfigDir(): string; /** * 复现 opencode 使用的 xdg-basedir 数据目录逻辑。 * - Windows : %LOCALAPPDATA%\opencode (xdgData = LOCALAPPDATA) * - macOS/Linux: $XDG_DATA_HOME/opencode 或 ~/.local/share/opencode */ export declare function getOpencodeDataDir(): string; /** * 写日志到文件(同步追加),同时调用 client.app.log()。 * 用于替代纯依赖 client.app.log() 的场景,确保日志落盘可查。 */ export declare function fileLog(level: "info" | "warn" | "error", message: string): void; export declare class SessionManager { private readonly client; private readonly channel; private readonly titleFn; /** * @param client opencode plugin 客户端(用于创建 session 和日志) * @param channel 渠道名称(用于日志标识) * @param titleFn 生成 session 标题的函数(可选,默认使用 userId) */ constructor(client: PluginClient, channel: string, titleFn?: (userId: string) => string); private readonly sessions; /** 获取已有的有效 session,或为该用户创建新 session。 */ getOrCreate(userId: string): Promise; /** 清理所有已过期的 session 记录。 */ cleanup(): void; /** 启动定时清理(默认每 30 分钟)。返回 timer,供外部 clearInterval。 */ startAutoCleanup(intervalMs?: number): ReturnType; } /** * 从 AI 响应 parts 中提取纯文本。 * 与渠道无关,各 channel 实现均可复用。 */ export declare function extractResponseText(parts: unknown[]): string; /** * 从 opencode 配置目录下的 .env 文件读取环境变量并注入 process.env。 * opencode 不会自动加载该文件,需插件自行调用。 * 使用 getOpencodeConfigDir() 获取正确路径(跨平台)。 */ export declare function loadDotEnv(envPath: string): void; //# sourceMappingURL=session-manager.d.ts.map