你复制一段文字。你复制一段代码。你从设计工具复制一个 SVG。你复制一张截图。
你复制一个 PDF 文件。使用的快捷键相同。数据并不相同。下一步应该能做什么,取决于这份差异。
Syzygy 把剪贴板历史当作一组有类型的内容条目。每个条目都保存一份内容计划,记录内容家族,以及是否存在可读的文字表现。
计划描述合适的预览方式,并列出这份数据可以支持的能力,桌面端再根据计划生成操作菜单。历史因此成为可复用的工作区,而不是一堆没有区别的字符串。
从一个具体复制动作开始
想象设计师复制一个 SVG 图标。剪贴板可能同时包含 HTML 包装层。它可能包含渲染后的位图预览。它也可能包含 SVG 源文本。
只看文件名的剪贴板管理器会把它识别成图片。它提供图片预览。它丢掉源文本。Syzygy 会问另一个问题。
这份数据载荷能否被证明是 SVG 源内容?如果可以,条目会保留两种有用视图。图形可以在视觉预览中打开。 源文本仍然可以复制、搜索、翻译或编辑,预览不会抹掉生成它的数据。
内容计划保存什么
系统会为每条内容保存一份内容计划。计划包含文档描述、展示描述和能力计划。
计划可以保存预览资源。多文件剪贴板条目还可以保存集合计划。计划会随历史记录的元数据头传输,内容块(blob)可以晚一些到达。
设备因此可以先显示标题,再下载大文件。界面也可以说明某个操作为什么在等待。
文档家族
普通文字、Markdown 文本、源代码和配置文件会分别标记为对应的内容类型。独立 SVG 文档会保留图形语义。
Excalidraw 表示 Excalidraw JSON 和画布视图。Figma 表示 Figma 剪贴板数据载荷或二进制 Figma 文件。
Bitmap 表示栅格图片。Pdf 表示 PDF 文档。
Office 表示文档、表格或演示文件。Archive 表示 ZIP、TAR、GZip、BZip2、XZ、7z 或
RAR 容器。RichHtml 表示没有更强语义家族的完整 HTML 页面。Mixed
表示同时包含可见文字和视觉媒体的 HTML。
集合 表示多文件剪贴板条目。二进制 表示识别器无法继续分类的内容。家族是领域事实,渲染器负责展示选择;两者一起工作,但互相不能替代。
文本表现
普通文本、Markdown 文本和源代码都可以成为条目的文字表现。文字表现可以为空。
二进制 .fig 文件没有文字表现。Figma 剪贴板源内容可以拥有源代码表现。这个区分可以防止二进制文件错误打开编辑器,
也让带源内容的图形进入文本工作流,同时保留画布预览。
识别器如何选择家族
Syzygy 会组合多种信号。它检查魔数、字节、声明的 MIME、文件名和扩展名。
它检查可读取的文本和 HTML 结构,并保留用于决策的证据。权威容器的字节优先。
真正的 PDF 文件头会胜过误导性的文件名。图片魔数会胜过文本标签。 然后识别器检查可读文本的结构。它检查 Excalidraw JSON。
它检查完整 HTML、独立 SVG、Figma 剪贴板标记和源代码特征。
它检查 Markdown 信号,最后才回退到普通文本。文件名和 MIME 仍然有用,但只在正文不完整时提供提示。
它们不能覆盖更强的正文证据。
HTML 为什么需要特殊处理
浏览器复制会在内容外面加标记。代码编辑器会为语法颜色加入范围。设计工具会加入元数据属性。 富文本会加入隐藏节点和样式。
包装层属于传输层,用户内容才是数据载荷。Syzygy 会在可见文本提取时移除 头部、脚本、样式、模板和注释,同时保留块边界和有意义的换行。
它在 pre、textarea 和保留源内容的样式中保留空白。它可以使用图片替代文本作为文字后备路径。
它不会因为 SVG 里有 <text> 节点,就把图片 SVG 误判为普通文本,而会保留 SVG 图形源内容。
它会在普通 HTML 判断前识别 Figma 标记。这套顺序让语义内容不被通用 HTML 后备路径覆盖。
能力回答“我能做什么”
领域能力列表是显式的。“预览”允许使用语义渲染器或安全占位符;“OCR”允许使用图片或渲染图片识别。 “搜索”允许进入索引器(indexer)。
“导出”允许提取或导出文件。“人工智能”允许在配置和额度允许时进入辅助工作流。 “缩略图”允许生成或复用缩略图。“复制”允许输出到系统剪贴板。
“语法高亮”允许使用代码渲染器。“外部打开”允许把本地文件交给其他应用。 “翻译”允许进入翻译工作流。“编辑”允许进入编辑器或文本工作台(TextWorkbench)。
能力计划来自 Syzygy 的统一内容规则。桌面端不会再造一份列表,按钮集合只是运行时投影。投影会检查本地内容。
它会检查服务提供方配置、功能开关和平台动作。因此能力存在时,动作仍然可能处于等待中。
条目支持 OCR,不代表图片内容块(blob)已经下载;条目支持编辑,不代表源内容已经完整; 条目支持外部打开,不代表本地文件已经存在。界面需要说清楚缺少什么。
它不能删除领域事实。它不能在本地前置条件失败时显示成功。
等待中条目仍然有用
P2P 同步可以先送达元数据头,再送达内容块(blob)。元数据头可以包含标题、内容家族和标签。
它可以包含预览摘要。界面可以马上显示这些事实,内容操作则等待本地化。大项目需要这条规则。
移动流量和短暂在线的对端设备都需要这条规则。标签属于元数据头中的元数据,给等待中条目加标签不会下载内容块(blob)。
元数据搜索可以早于 OCR 文本到达。索引器(indexer)可以稍后补充正文字段,历史列表在这段时间保持稳定。
源内容和渲染是同一个条目的两种视图
用户经常先检查视觉内容,再决定是否编辑。预览界面可以显示渲染图形,源内容界面可以显示语义文本。用户可以复制源内容,而不是复制截图。
渲染器提供图片源内容时,用户也可以复制渲染图。这两种操作有不同前置条件。模型不会把它们当成同一种数据。 SVG 源内容不等于 PNG。
HTML 包装层不等于 Figma 标记。二进制 Figma 文件不等于可编辑源内容。 这条区分保护了常见复制复用流程里的数据。
Markdown 图片和远程资源
网页内容平台支持标准 Markdown 图片链接。


图片链接负责展示资源。它不会把资源写入系统剪贴板,也不会自动把远程图片变成本地内容。剪贴板 HTML 图片物化走独立的后端路径。
这条路径会规范化网址、校验协议、应用请求和响应限制,并在安全边界内处理重定向。
它会在错误时避免注入半成品剪贴板条目。这样 Blog 可以展示稳定图片,剪贴板仍保持独立的安全约束。
试一遍格式安全的工作流
复制一段 Markdown,打开命令面板,搜索这个条目并打开预览。
把源内容复制到文档,再复制一个 SVG,在图形视图和源内容视图之间切换,然后对源内容执行一次文本操作。
保持图形本身不变。最后复制一张截图。把截图送入 OCR。搜索图片中的一个词。
同一个历史列表可以承载这三条流程。操作会随数据改变。
排查问题
条目显示了错误家族
检查识别器收到的数据载荷、魔数字节、声明的 MIME,以及 HTML 包装层是否隐藏了源内容标记。
检查元数据头是否还保存旧计划。当前计划可以由内容计划迁移归一化,界面不应根据文件名修改家族。
源内容视图显示 HTML 范围
渲染器应该提取语义源内容。语法高亮范围属于传输层。普通文字需要去掉传输层标记,再提取可见内容。 SVG 源内容需要保留完整的 SVG 元素。
Figma 标记需要归一化成稳定的源内容形式。原始 HTML 只能作为最后的后备路径。
OCR 有能力但按钮不可用
确认图片内容块(blob)已经在本地,确认源内容图形有渲染 PNG,并确认 OCR 服务提供方已配置。 确认图片大小在服务提供方预算内。
能力仍然是领域事实。已禁用状态需要显示缺少的运行时前置条件。
.fig 文件无法编辑
文件可能是二进制。二进制 Figma 内容没有源文本,可以打开视觉预览或使用外部编辑器。 需要文本工作台(TextWorkbench)时,应复制 Figma 源内容。
集合操作太少
检查每个成员的计划。父集合聚合成员能力,空集合使用集合基线。父项不会创造任何成员都不支持的操作。
选择具体文件条目查看它自己的渲染器和操作;父集合只负责提供成员级入口。
常见问题
Syzygy 会把每次复制都转换成 Markdown 吗?
不会。识别器保留它能证明的源内容家族。普通文字仍然是普通文字,代码仍然是源代码。
图片仍然保留为图片,不会被强行转换成 Markdown。
出现图片预览就代表完整图片在本地吗?
不代表。预览设置可能只是元数据头中的小字段,完整内容块(blob)仍然可能处于等待中。
可以搜索截图吗?
可以,前提是 OCR 已完成。OCR 结果会进入本地搜索索引。原始截图保持不变。
可以直接编辑 PDF 吗?
文字提取和编辑是两项操作。PDF 可以得到可搜索文字或 OCR 文字。文本工作台(TextWorkbench)编辑文字源内容并创建新的快照, 它不会重写 PDF 二进制。
Figma 为什么需要区分两种情况?
剪贴板源内容携带语义标记。二进制 .fig 文件携带文件格式,只有前者有文本工作流需要的源文本。
能力列表来自前端吗?
不是。能力计划由统一的内容规则产生,界面只读取这份规则的结果。
等待中条目可以加标签吗?
可以。标签是元数据头中的元数据,加标签不会强制下载内容块(blob)。
远程图片链接可以写入剪贴板吗?
只有显式执行物化和剪贴板动作才可以。Markdown 渲染器只负责显示图片。
计划过期后怎么办?
数据升级和归一化流程会恢复派生字段。界面使用归一化后的内容计划。
插件应该从哪里读取内容类型?
读取历史记录条目的内容计划。不要在插件里重建媒体类型和文件名规则。
新增一种格式前要验证什么
为新格式定义文档家族、合法签名、文字表现和展示方式。
在核心规则中定义能力,补充识别和计划归一化测试。
增加预览测试,测试等待中的元数据头、完整数据载荷和集合成员。
测试格式错误的输入、能力判断和运行时前置条件错误。这份清单避免新格式变成只有按钮的功能。
给内容选择正确的出口
复制动作完成后,先看条目的内容家族,再决定出口。纯文本适合直接粘贴到终端或编辑器;Markdown 适合保留标题、列表和代码块; SVG 适合在设计工具中继续调整;图片适合视觉参考;PDF 适合保留页面排版。出口不同,所需能力也不同,系统剪贴板只接收已经在本地准备好的数据。
复制与导出的差别
复制把内容写入当前系统剪贴板,目标应用可以立即读取。导出则创建一个用户指定位置的文件,适合交付或归档。对等待中的远程条目, 两者都要先完成本地化;只有元数据头时,用户仍可以改名、加标签和查看摘要,但不能声称已经复制了正文。
预览失败不等于内容损坏
渲染器可能缺少字体、无法处理一个新的 SVG 特性,或遇到超过预算的 PDF。此时条目本身仍然可能完整。界面应把“内容完整”和“预览失败” 分成两个状态,并提供复制源内容、重新渲染或使用外部应用打开的路径。用户不需要为了查看原始数据而重复采集。
一份可执行的验收表
| 输入 | 首次检查 | 可见结果 | 失败时的安全动作 |
|---|---|---|---|
| 纯文本 | 编码与换行 | 文字预览、复制 | 保留原字节并提示编码 |
| Markdown | 标题与代码块 | 排版预览、源内容 | 回退到源文本 |
| SVG | XML 根节点与图形元素 | 图形预览、源内容 | 显示原文或下载文件 |
| 图片 | 图像魔数与尺寸 | 缩略图、OCR | 保留图片,不写入半成品 |
| 文件头与大小 | 页面预览、文字层 | 显示页数限制和重试 | |
| 多文件集合 | 成员数量与路径 | 集合摘要、成员列表 | 逐成员报告错误 |
验证时不要只测试“能不能显示”。还要检查重启后条目是否存在、等待中的条目是否没有被误标为就绪、复制动作是否写入完整内容, 以及索引任务失败后是否仍能从历史记录打开原始条目。
内容扩展的边界
增加一种格式时,先确定它的原始表示、可选的文字表示和最小安全预览,再定义复制、导出、搜索、OCR 和编辑各自的前置条件。不要因为某个格式 可以被某个渲染器打开,就把所有操作都标记为可用。一个清晰的能力表比一组偶尔失效的按钮更能帮助用户完成工作。
如果格式包含远程引用,展示链接与下载资源要分开。Markdown 图片可以从网页加载并显示,但只有经过协议、大小和重定向检查后,才可以物化为系统剪贴板图片。 如果格式包含敏感元数据,导出前应提供检查机会。用户需要知道文件名、作者、来源地址和嵌入内容是否会随文件一起离开设备。
这套规则把剪贴板从“最后一次复制的字符串”变成一份有来源、有状态、有出口的工作材料。你可以从预览开始,也可以从源内容开始;无论选择哪条路, 原始条目都保持可回到、可验证,后续的同步和搜索也不会改变它的含义。
处理混合内容
浏览器复制经常同时提供纯文本、富文本和图片。Syzygy 会保留这些表示,并依据证据选择主家族。用户可以先查看网页排版,再复制可读文字, 也可以保留图片作为视觉证据。混合条目不会把某一种表示静默丢弃,能力菜单会告诉你当前选择的是哪一种出口。
当你把条目发送到另一台设备时,元数据头先说明它拥有哪些表示。接收端没有完整内容块时,界面仍然可以显示可用的摘要;下载完成并通过校验后, 同一个条目才会开放完整复制和导出。这样,格式识别、同步进度和用户动作始终使用同一份事实。
表示变化时保持同一条历史
同一条目可能在不同时间拥有不同的可用表示。浏览器复制时,纯文字通常最先到达,富文本和图片随后补齐;从另一台设备同步时,元数据头先到达,内容块(blob)再按策略传输。界面不应把这些阶段显示成多条历史,而应在同一条记录上更新可用状态。
当表示补齐时,系统重新计算预览和能力,但不会改变用户已经添加的标签、来源和创建时间。一次渲染失败只影响渲染器,不会把已经保存的源内容改成未知二进制。用户可以等待资源、复制已有表示,或打开原始文件继续工作。
复制动作
├─ 先保存:来源、时间、文件名、内容家族
├─ 再补齐:纯文字、富文本、图像或文件内容
├─ 重新计算:预览、搜索、OCR 与导出能力
└─ 保持不变:条目标识、标签关系和用户选择
从可用能力推断下一步
看到“可以预览”时,先确认预览使用的是哪一种表示;看到“可以复制”时,再确认完整内容是否已经在本地;看到“可以编辑”时,检查它是否拥有语义源内容。三个问题可以避免把视觉缩略图、远程链接或元数据摘要误当成完整正文。
在支持反馈中,描述“PDF 已出现但正文仍等待下载”“SVG 可以看图但源文本尚未到达”比描述“按钮不可用”更准确。产品把能力与前提一起显示,用户就能用同一套语言说明问题,也能在修复后复跑相同的验证。
一次复制如何变成可复用的材料
剪贴板接收动作只负责取得平台提供的表示,内容计划随后负责解释这些表示。这个顺序让采集不依赖某个预览组件是否已经打开,也让后台同步能够先传送轻量的元数据头。下图把一条混合内容从采集到可用动作的路径放在一起,任何一步失败,系统都保留前一步已经确认的数据。
flowchart LR
A[平台剪贴板表示] --> B[保存历史条目]
B --> C[识别内容家族]
C --> D[生成内容计划]
D --> E{内容块是否完整}
E -- 否 --> F[显示等待中并保留元数据]
E -- 是 --> G[计算预览与能力]
F --> H[后台下载并校验]
H --> G
G --> I[复制、导出、搜索或编辑]识别阶段只决定“这是什么”,能力阶段才决定“现在能做什么”。例如,系统可以先确认一个条目是 PDF,并在历史记录中显示文件名和页数;当内容块尚未到达时,预览动作可以显示等待状态,复制和导出仍然保持禁用。完整字节通过长度和指纹校验后,系统再开启页面预览、文字提取或外部打开。这样,界面不会把“已经知道类型”误写成“已经拥有内容”。
| 阶段 | 用户能看到的事实 | 允许的动作 | 不应发生的事 |
|---|---|---|---|
| 已采集 | 来源、时间、内容家族候选 | 改名、加标签、查看摘要 | 伪装成完整文件 |
| 等待中 | 元数据头、大小、下载状态 | 请求下载、取消任务 | 把摘要当正文复制 |
| 已校验 | 本地内容、指纹、预览 | 复制、导出、搜索、编辑 | 静默替换源内容 |
| 预览失败 | 原始内容仍在、失败原因 | 重新渲染、外部打开 | 把渲染错误当数据损坏 |
这个生命周期也解释了为什么同一条历史记录可以支持多个入口。搜索读取索引投影,预览读取内容计划,复制读取已经校验的本地表示,标签和回收站读取元数据状态。它们不各自猜测 MIME 类型,也不各自维护一份“是否完整”的布尔值;用户在任何入口看到的状态都应该来自同一条记录。
继续这条工作流
下一步阅读预览、弹出窗口和命令面板(Command + K)。视觉内容搜索见OCR 和索引搜索。元数据头与内容块(blob)传输见P2P 剪贴板同步。格式安全的剪贴板工作流从一条规则开始:让数据类型、内容状态和可用动作始终保持可见。