检查点
Agent 检查点时间轴:时钟 icon + 相对时间 + label / reason 的时间轴按钮;initKbCheckpoint 点击弹出恢复菜单(挂 body、fixed 定位、视口夹取),scope 三选默认预选「仅内容(保留对话)」——Cursor 语义,回滚产物、保留讨论过程,审计友好。scopeOptions 未提供的恢复范围禁用;Esc / 外点 / 滚动关闭;选择 → icen:kb-checkpoint-restore { checkpointId, scope }。
点击检查点弹恢复菜单(默认预选「仅内容 · 保留对话」)·「补引用后」scopeOptions 受限:仅 content 可选,其余两项禁用
<div id="kb-checkpoint-demo"></div><p class="demo-label" id="kb-checkpoint-log" style="margin-top:8px">点击检查点弹恢复菜单(默认预选「仅内容 · 保留对话」)·「补引用后」scopeOptions 受限:仅 content 可选,其余两项禁用</p> 安装
bun add @icen.ai/ui pnpm add @icen.ai/ui npm install @icen.ai/ui yarn add @icen.ai/ui 一行引入该组件(CSS 与 behavior 自动带上,无需关心内部 CSS 文件名):
import { initKbCheckpoint } from '@icen.ai/ui/kit/kb-checkpoint';initKbCheckpoint(); 也可以用脚手架直接打印引入行:
bunx --bun @icen.ai/ui add kb-checkpoint
Astro 项目注意:kit 入口里的 CSS import 在页面 <script> 里会被 Astro 的 client bundle 摇掉——请改在布局 frontmatter 里引 CSS(import '@icen.ai/ui/components/kb-agent.css';),JS 行为仍可走 kit。Vite SPA / webpack 项目无此问题。
用法
import { renderKbCheckpoints, initKbCheckpoint } from '@icen.ai/ui/kit/kb-checkpoint'; initKbCheckpoint(); // 委托点击弹恢复菜单(幂等 + 销毁函数)renderKbCheckpoints(el, [ { id: 'cp-3', label: '批量改写前', reason: '每页重切前自动保存', at: Date.now() - 14 * 60000 }, { id: 'cp-2', label: '补引用后', at: Date.now() - 52 * 60000, scopeOptions: ['content'] }, // scopeOptions 缺省 = 内容 / 对话 / 两者三项全开;提供则未列项禁用(该检查点未包含此范围)]);// 恢复菜单默认预选「仅内容(保留对话)」:回滚产物、保留讨论(审计与复盘友好)el.addEventListener('icen:kb-checkpoint-restore', (e) => restore(e.detail.checkpointId, e.detail.scope));