Skip to content
FunCoding

Search

Search docs, Skills and MCP

会话恢复、断开与删除

创建可恢复会话,补齐恢复配置,并按业务保留策略清理状态。

This page has not been translated into English yet. The original Chinese version is shown below.

需要跨客户端重启恢复工作时,为会话指定应用管理的 sessionId,保存其归属和状态位置,随后用 resumeSession 恢复。

const session = await client.createSession({
    sessionId: "user-123-task-456",
    model: "auto",
});
await session.sendAndWait({ prompt: "Analyze my codebase" });
await session.disconnect();

const resumed = await client.resumeSession("user-123-task-456");
await resumed.sendAndWait({ prompt: "What did we discuss earlier?" });

持久化教程把显式 ID 作为其可恢复流程前提,未指定时使用随机 ID 并按临时会话描述;这里不据此推断所有 runtime 版本的随机 ID 都不会产生磁盘文件。

保存什么

默认目录为 ~/.copilot/session-state/{sessionId}/,配置 COPILOT_HOME 或 sessionFs 时按实际存储定位。保存内容包括会话历史、工具结果、规划状态和会话资料;内存中的工具状态不会自动持久化,工具需无状态设计或维护自己的存储。

BYOK provider/API key 不写入会话磁盘,恢复时必须重新提供 provider 配置。该教程中的旧 Azure 示例使用 endpoint、deploymentId,而当前 ProviderConfig 参考使用 baseUrl 与会话 model;应按BYOK 参考配置,不混用旧字段。

恢复时可调整的设置

resumeSession 可调整模型、系统消息、工具允许/拒绝列表、provider、reasoning effort、streaming、工作目录、配置目录、MCP、自定义角色、预选 agent、Skill 目录和 infiniteSessions。

恢复多用户会话时也要重新提供适用的会话身份并校验归属。Auto tier 与 Responses transport 的特殊规则见恢复模型配置。

生命周期操作

操作结果
client.listSessions()列出会话,可传 { repository: "owner/repo" } 筛选
session.disconnect()释放内存资源,保留磁盘数据供恢复
client.deleteSession(sessionId)永久删除历史、规划与资料,不可恢复

旧 destroy() 已弃用,官方建议迁移到 disconnect。TypeScript 可使用 await using,Python 使用 async context manager,.NET 使用 IAsyncDisposable,Go 使用 defer,具体写法按语言 API。

空闲与长会话

默认没有 idle timeout;sessionIdleTimeoutSeconds 省略或设 0 表示关闭。该 client 选项仅控制 SDK 启动的 runtime,外部服务使用其自身 timeout。正在执行命令或后台 agent 的会话受保护,不因空闲清理设置而直接删除活动工作。

教程的 idle 示例访问 event.idleDurationMs,当前事件参考仅给出 data.aborted,未列出该字段。本页不以它实现计时,应按当前 SDK 类型和应用自己的活动记录处理。

infiniteSessions 的 backgroundCompactionThreshold: 0.80 与 bufferExhaustionThreshold: 0.95 是官方长会话示例的上下文比例,不是 token 数,也不是存储持久性保证。其作用是压缩和必要时等待,不替代持久卷。

部署边界

容器迁移需要保留对应会话存储;同一 session 的并发写入需要应用锁或队列。结构化 ID 有助审计,但应在服务端保存 owner 元数据并验证,不能仅解析用户传入 ID 作为授权。参见扩展与存储。