> ## Documentation Index
> Fetch the complete documentation index at: https://ophel.app/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 会话管理 — 整理与导出 AI 对话

> 使用文件夹、标签、置顶和批量操作来整理当前 AI 平台的对话，支持 Markdown / JSON / 纯文本导出与 WebDAV 同步。

export const ShortcutLegend = ({lang = "en"}) => {
  const isZh = lang === "zh";
  return <div className="ophel-shortcut-legend" role="note">
      <div className="ophel-shortcut-legend-title">
        {isZh ? "跨平台按键说明" : "Cross-platform key mapping"}
      </div>
      <div className="ophel-shortcut-legend-body">
        {isZh ? <>
            文档中的快捷键会同时显示 Windows/Linux 与 Mac 写法：
            <code>Ctrl</code> 对应 <code>Command</code>，
            <code>Alt</code> 对应 <code>Option</code>。唯一例外是提示词发送，
            <code>Ctrl+Enter</code> 在 Mac 上也使用 <code>Ctrl+Enter</code>。
          </> : <>
            Shortcuts show both Windows/Linux and Mac keys: <code>Ctrl</code> maps
            to <code>Command</code>, and <code>Alt</code> maps to
            <code>Option</code>. Prompt submit is the only exception:
            <code>Ctrl+Enter</code> remains <code>Ctrl+Enter</code> on Mac.
          </>}
      </div>
    </div>;
};

export const Shortcut = ({combo, mac, sameOnMac = false}) => {
  const keyLabels = {
    arrowup: {
      win: "Up",
      mac: "↑"
    },
    arrowdown: {
      win: "Down",
      mac: "↓"
    },
    arrowleft: {
      win: "Left",
      mac: "←"
    },
    arrowright: {
      win: "Right",
      mac: "→"
    },
    up: {
      win: "Up",
      mac: "↑"
    },
    down: {
      win: "Down",
      mac: "↓"
    },
    left: {
      win: "Left",
      mac: "←"
    },
    right: {
      win: "Right",
      mac: "→"
    },
    esc: {
      win: "Esc",
      mac: "Esc"
    },
    escape: {
      win: "Esc",
      mac: "Esc"
    },
    enter: {
      win: "Enter",
      mac: "Enter"
    },
    shift: {
      win: "Shift",
      mac: "⇧"
    },
    backslash: {
      win: "\\",
      mac: "\\"
    }
  };
  const modifierLabels = {
    ctrl: {
      win: "Ctrl",
      mac: "⌘"
    },
    control: {
      win: "Ctrl",
      mac: "⌘"
    },
    cmd: {
      win: "Ctrl",
      mac: "⌘"
    },
    command: {
      win: "Ctrl",
      mac: "⌘"
    },
    alt: {
      win: "Alt",
      mac: "⌥"
    },
    option: {
      win: "Alt",
      mac: "⌥"
    },
    shift: {
      win: "Shift",
      mac: "⇧"
    }
  };
  const normalizeToken = token => String(token || "").trim();
  const formatKey = (token, platform) => {
    const normalized = normalizeToken(token);
    const key = normalized.toLowerCase();
    const mapped = keyLabels[key];
    if (mapped) return mapped[platform];
    if (normalized.length === 1) return normalized.toUpperCase();
    return normalized;
  };
  const formatCombo = (value, platform) => String(value || "").split("+").map(normalizeToken).filter(Boolean).map(token => {
    const mapped = modifierLabels[token.toLowerCase()];
    return mapped ? mapped[platform] : formatKey(token, platform);
  }).join(platform === "mac" ? "" : "+");
  const windowsLabel = formatCombo(combo, "win");
  const macLabel = sameOnMac ? windowsLabel : mac || formatCombo(combo, "mac");
  const title = windowsLabel === macLabel ? windowsLabel : `Windows/Linux: ${windowsLabel}; Mac: ${macLabel}`;
  return <span className="ophel-shortcut" title={title}>
      <code>{windowsLabel}</code>
      {windowsLabel !== macLabel && <>
          <span className="ophel-shortcut-separator"> / </span>
          <code>{macLabel}</code>
        </>}
    </span>;
};

export const Icon = ({src, alt}) => <img src={typeof window !== "undefined" && typeof src === "string" && src.startsWith("/images/icons/") && (window.location.pathname === "/docs" || window.location.pathname.startsWith("/docs/")) ? `/docs${src}` : src} alt={alt} width="18" height="18" style={{
  display: "inline-block",
  verticalAlign: "-0.2em",
  margin: "0 0.15em"
}} />;

<img src="https://mintcdn.com/urzeye/9I8m8P8gSndxcYtq/images/features/conversation-zh.png?fit=max&auto=format&n=9I8m8P8gSndxcYtq&q=85&s=c2bc6bf0070b1b12f5af62180e5cda2e" alt="会话标签页 — 文件夹与标签列表" width="1280" height="800" data-path="images/features/conversation-zh.png" />

会话标签页会读取当前 AI 平台的历史对话，提供统一的文件夹分类、标签系统、导出功能和云同步，让你更快找到上次那个对话。

## 会话同步原理

Ophel 实时监听 AI 平台的原生侧边栏，当你在平台上新建、重命名或删除对话时，Ophel 的会话列表会自动同步更新。你在 Ophel 中添加的元数据（文件夹归属、标签、置顶）存储在本地，叠加显示在平台数据之上。

左上角工具栏里的文件夹下拉框是**同步目标文件夹**。选中某个文件夹后，后续新同步到的会话会默认加入这个文件夹；无论是你手动点击同步发现的新会话，还是之后从平台侧边栏检测到的新会话，都会使用这个默认归属。已有会话不会因此自动移动，除非你手动移动它们。

<Note>Ophel **不会**上传或修改你的实际对话内容，仅读取平台已显示的信息。</Note>

## 会话列表

Ophel 从当前 AI 平台的原生侧边栏读取会话列表，将其展示在统一列表中。你可以：

* 点击任意会话跳转到该对话页面
* 在搜索框输入关键词快速过滤（搜索范围包括标题、标签）
* 查看每个对话的 Ophel 元数据：所属文件夹、标签、置顶状态
* 按修改时间、创建时间或标题排序

## 文件夹

将相关对话归入同一文件夹，实现按项目、主题或时间段的分类管理。

你可以通过三种入口移动会话：

* **快捷按钮组**：点击浮动快捷按钮组里的 <Icon src="/docs/images/icons/tools.svg" alt="工具箱图标" /> **工具箱**图标，在弹出的工具箱里点击 <Icon src="/docs/images/icons/folder-move.svg" alt="移动会话图标" /> **移动会话**图标。
* **会话行菜单**：在会话标签页中，点击目标会话右侧的 <Icon src="/docs/images/icons/more-horizontal.svg" alt="三个点菜单图标" /> 三个点菜单，然后选择 <Icon src="/docs/images/icons/folder-move.svg" alt="移动会话图标" /> **移动会话**。
* **批量操作**：点击会话标签页顶部的 <Icon src="/docs/images/icons/batch.svg" alt="批量操作图标" /> **批量操作**按钮，选择一个或多个会话后，在底部批量操作栏点击 <Icon src="/docs/images/icons/folder-move.svg" alt="移动会话图标" /> **移动**按钮。

选择目标文件夹后，会话会立即归入该文件夹。这个操作只更新 Ophel 本地元数据，不会修改 AI 平台上的实际对话内容。

* 在会话列表侧边的文件夹栏中点击文件夹名称，过滤只显示该文件夹内的对话
* 文件夹支持 8 种颜色，方便视觉区分不同项目
* 一个会话同一时间属于一个文件夹；移动文件夹只更新 Ophel 本地元数据，不修改 AI 平台上的实际对话内容

### 拖拽移动会话

拖拽任意会话整行到目标文件夹，即可把该会话移入该文件夹。拖拽悬停时目标文件夹会高亮，松手后列表立即更新。

### 拖拽排序文件夹

拖拽任意非默认文件夹整行，可以调整文件夹顺序。默认收件箱保持固定；文件夹行内的按钮、输入框等交互控件仍可正常点击，不会触发拖拽。

## 标签（Tag）

标签是跨文件夹的多维分类方式，特别适合"一个对话属于多个维度"的场景（如既属于"工作项目"文件夹，也带有"调研"和"Python"标签）。

* 点击 <Icon src="/docs/images/icons/tools.svg" alt="工具箱图标" /> **工具箱** → <Icon src="/docs/images/icons/tag.svg" alt="设置标签图标" /> **设置标签**，为当前对话添加或修改标签
* 在会话列表顶部的标签栏中点击标签名称快速过滤
* 标签名称完全自定义，无数量限制
* 多个标签之间可以组合过滤

## 置顶

将重要对话置顶后，它会固定显示在列表最顶部，不受排序规则影响。右键点击会话，或点击会话行右侧的 <Icon src="/docs/images/icons/more-horizontal.svg" alt="三个点菜单图标" /> 三个点菜单，然后选择 <Icon src="/docs/images/icons/pin.svg" alt="置顶图标" /> **置顶**。已置顶的会话在同一菜单中显示填充状态的图钉；再次选择 <Icon src="/docs/images/icons/pin.svg" alt="取消置顶图标" /> **取消置顶**即可恢复普通排序。

## 批量操作

点击会话标签页顶部的 <Icon src="/docs/images/icons/batch.svg" alt="批量操作图标" /> **批量操作**按钮进入多选模式，勾选会话后可以：

* <Icon src="/docs/images/icons/folder-move.svg" alt="移动会话图标" /> 移动选中会话
* <Icon src="/docs/images/icons/copy.svg" alt="复制 Markdown 图标" /> 复制选中会话的 Markdown
* <Icon src="/docs/images/icons/export.svg" alt="导出图标" /> 导出选中会话
* <Icon src="/docs/images/icons/delete.svg" alt="删除图标" /> 删除选中会话
* <Icon src="/docs/images/icons/clear.svg" alt="退出批量操作图标" /> 退出批量操作并清空当前选择

## 导出对话

你可以通过三种入口导出对话：

* **快捷按钮组**：点击浮动快捷按钮组里的 <Icon src="/docs/images/icons/tools.svg" alt="工具箱图标" /> **工具箱**图标，然后点击 <Icon src="/docs/images/icons/export.svg" alt="导出图标" /> **导出**按钮导出 <Icon src="/docs/images/icons/markdown.svg" alt="Markdown 文件图标" /> Markdown。
* **快捷键**：按 <Shortcut combo="ctrl+shift+e" />，将当前对话导出为 <Icon src="/docs/images/icons/markdown.svg" alt="Markdown 文件图标" /> Markdown。
* **会话行菜单**：在会话标签页中，点击目标会话右侧的 <Icon src="/docs/images/icons/more-horizontal.svg" alt="三个点菜单图标" /> 三个点菜单，选择 <Icon src="/docs/images/icons/export.svg" alt="导出图标" /> **导出**，再选择 <Icon src="/docs/images/icons/markdown.svg" alt="Markdown 文件图标" /> Markdown、<Icon src="/docs/images/icons/json-file.svg" alt="JSON 文件图标" /> JSON 或 <Icon src="/docs/images/icons/txt-file.svg" alt="TXT 文件图标" /> TXT 格式。

Markdown 导出可以选择打包为 zip，包含对话中引用的图片、附件和其他资源文件。

<Tip>
  点击 <Icon src="/docs/images/icons/tools.svg" alt="工具箱图标" /> **工具箱** → <Icon src="/docs/images/icons/copy.svg" alt="复制 Markdown 图标" /> **复制 Markdown**，可以直接将当前对话以 Markdown
  格式复制到剪贴板，无需保存文件。
</Tip>

关于导出格式、打包模式、资源处理和各平台支持能力的完整说明，请参阅 [导出与打包](/docs/features/export) 页面。

## WebDAV 同步

在 **设置 → 备份与同步 → WebDAV** 中配置 WebDAV 服务器，将 Ophel 的**会话元数据**同步到你自己的私有服务器。

<Note>
  WebDAV 同步的是 Ophel
  在本地存储的元数据——文件夹归属、标签、置顶状态等你在 Ophel
  中添加的信息。**不包含 AI 对话的实际消息内容**，那些内容属于各 AI 平台，Ophel
  无法导出。
</Note>

支持手动同步（点击按钮）和按设定间隔自动同步两种模式。详见 [WebDAV 同步](/docs/data/webdav)。

## 常用快捷键

<ShortcutLegend lang="zh" />

| 操作         | 快捷键                               |
| ---------- | --------------------------------- |
| 新建对话       | <Shortcut combo="ctrl+shift+o" /> |
| 刷新会话列表     | <Shortcut combo="alt+shift+r" />  |
| 定位当前会话     | <Shortcut combo="alt+shift+l" />  |
| 上一个会话      | <Shortcut combo="alt+[" />        |
| 下一个会话      | <Shortcut combo="alt+]" />        |
| 导出当前对话     | <Shortcut combo="ctrl+shift+e" /> |
| 复制最新 AI 回复 | <Shortcut combo="ctrl+shift+c" /> |

## 相关设置

**设置 → 功能 → 会话**：

| 设置项     | 说明                    |
| ------- | --------------------- |
| 文件夹彩虹色  | 为不同文件夹的会话显示不同色调背景     |
| 同步时取消置顶 | 从远端拉取同步数据时自动取消本地置顶状态  |
| 同步删除到云端 | 在本地删除会话元数据时同步删除远端对应记录 |
