@dylanl1/dsh-plugin-pdf 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NATIVE_V1.md +3 -1
- package/README.md +54 -114
- package/README.zh.md +61 -121
- package/SPEC.md +46 -51
- package/dist/THIRD_PARTY_NOTICES.md +1 -56
- package/dist/client.js +5045 -2779
- package/dist/embedding.js +34 -9
- package/dist/engines.js +49 -4
- package/dist/image-host.js +837 -505
- package/dist/index.js +6790 -4126
- package/dist/ocr-host.js +1036 -175
- package/dist/ocr.js +4 -1
- package/dist/translation.js +43 -14
- package/dist/types/adapters/host/dsh/agent-tools.d.ts +1 -1
- package/dist/types/adapters/host/dsh/document-status.d.ts +0 -1
- package/dist/types/adapters/host/dsh/form-guidance.d.ts +2 -2
- package/dist/types/adapters/host/dsh/image-backends.d.ts +19 -3
- package/dist/types/adapters/host/dsh/image-tools.d.ts +15 -0
- package/dist/types/adapters/host/dsh/image-transport.d.ts +8 -7
- package/dist/types/adapters/host/dsh/index.d.ts +3 -2
- package/dist/types/adapters/host/dsh/model-cache-identity.d.ts +26 -0
- package/dist/types/adapters/host/dsh/ocr-session-llm.d.ts +2 -3
- package/dist/types/adapters/host/dsh/ocr-tool.d.ts +4 -2
- package/dist/types/adapters/host/dsh/page-content.d.ts +27 -0
- package/dist/types/adapters/host/dsh/pdf-evidence-meta.d.ts +13 -148
- package/dist/types/adapters/host/dsh/retrieval-prefetch.d.ts +49 -0
- package/dist/types/adapters/host/dsh/retrieval.d.ts +132 -25
- package/dist/types/adapters/host/dsh/translation-model.d.ts +3 -5
- package/dist/types/adapters/host/ocr/local-backend.d.ts +4 -0
- package/dist/types/contracts/indexing.d.ts +156 -0
- package/dist/types/embedding/registry.d.ts +2 -1
- package/dist/types/embedding/types.d.ts +10 -2
- package/dist/types/entrypoints/image-understanding-host.d.ts +2 -8
- package/dist/types/host/image-understanding-plugin.d.ts +1 -1
- package/dist/types/modules/document/index.d.ts +7 -0
- package/dist/types/modules/document/page-content-error.d.ts +3 -0
- package/dist/types/modules/document/page-content-native.d.ts +10 -0
- package/dist/types/modules/document/page-content-ocr.d.ts +5 -0
- package/dist/types/modules/document/page-content-text.d.ts +12 -0
- package/dist/types/modules/document/page-content.d.ts +158 -0
- package/dist/types/modules/engines/cache-identity.d.ts +16 -0
- package/dist/types/modules/engines/catalog.d.ts +20 -0
- package/dist/types/modules/engines/directory.d.ts +1 -0
- package/dist/types/modules/engines/index.d.ts +3 -0
- package/dist/types/modules/engines/serialization.d.ts +3 -0
- package/dist/types/modules/engines/types.d.ts +13 -0
- package/dist/types/modules/evidence/agent-page-image.d.ts +9 -112
- package/dist/types/modules/evidence/agent-page-read.d.ts +36 -2
- package/dist/types/modules/evidence/image-capture.d.ts +1 -6
- package/dist/types/modules/evidence/index.d.ts +9 -136
- package/dist/types/modules/evidence/provenance.d.ts +8 -0
- package/dist/types/modules/evidence/reference-store.d.ts +91 -1
- package/dist/types/modules/evidence/status.d.ts +17 -0
- package/dist/types/modules/evidence/text-range.d.ts +28 -0
- package/dist/types/modules/evidence/text-target.d.ts +7 -1
- package/dist/types/modules/forms/index.d.ts +4 -4
- package/dist/types/modules/forms/inspection-references.d.ts +1 -1
- package/dist/types/modules/forms/validation.d.ts +4 -8
- package/dist/types/modules/image-understanding/service.d.ts +24 -42
- package/dist/types/modules/model-write/index.d.ts +1 -2
- package/dist/types/modules/ocr/service.d.ts +51 -3
- package/dist/types/modules/retrieval/cache.d.ts +44 -2
- package/dist/types/modules/retrieval/document-policy.d.ts +83 -0
- package/dist/types/modules/retrieval/index.d.ts +4 -1
- package/dist/types/modules/retrieval/page-content.d.ts +4 -0
- package/dist/types/modules/retrieval/paragraphs.d.ts +1 -12
- package/dist/types/modules/retrieval/shared-source.d.ts +25 -0
- package/dist/types/modules/retrieval/text.d.ts +19 -1
- package/dist/types/modules/retrieval/types.d.ts +83 -9
- package/dist/types/modules/retrieval/vector.d.ts +3 -0
- package/dist/types/modules/working-copy/index.d.ts +1 -1
- package/dist/types/modules/working-copy/ports.d.ts +11 -0
- package/dist/types/modules/working-copy/service.d.ts +13 -1
- package/dist/types/ocr/types.d.ts +2 -1
- package/dist/types/shared/contracts.d.ts +4 -0
- package/dist/types/shared/geometry/native-viewport.d.ts +0 -18
- package/dist/types/shared/geometry/text-target.d.ts +2 -6
- package/dist/types/shared/native.d.ts +2 -1
- package/dist/types/shared/passive-poll.d.ts +4 -0
- package/dist/types/translation/locales.d.ts +4 -3
- package/dist/types/translation/schema.d.ts +14 -0
- package/dist/types/translation/types.d.ts +12 -2
- package/docs/AI_READER_TOOLS.md +87 -210
- package/docs/ARCHITECTURE_V2.md +64 -18
- package/docs/ENGINE_EXTENSIONS.md +295 -25
- package/docs/RETRIEVAL_EXPERIMENT.md +169 -47
- package/docs/UX_TYPOGRAPHY.md +3 -3
- package/package.json +13 -13
- package/dist/types/adapters/host/dsh/image-auxiliary.d.ts +0 -20
package/docs/AI_READER_TOOLS.md
CHANGED
|
@@ -1,261 +1,138 @@
|
|
|
1
|
-
#
|
|
1
|
+
# PDF 模型工具契约
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
本文描述当前源码的工具入口。工具提供可验证的材料和确定性动作;如何搜索、阅读、解释和编辑,由会话模型组合。UI 与模型调用同一 Host 领域服务和共享工作副本。只在 UI 中提供的区域 OCR 不注册模型工具。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 工具列表
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
|
31
|
-
| --- | --- | --- |
|
|
32
|
-
| 现有 | `pdf_current`、`pdf_open`、`pdf_close` | 前者只列**本会话 UI 正在显示**的 PDF;后两者管理 Host 后台工作副本,不打开/关闭侧栏标签。模型必须使用明确的 `documentId`。 |
|
|
33
|
-
| 现有 | `pdf_read_page`、`pdf_search`、`pdf_bookmarks`、`pdf_page_annotations` | 有界读页和检索、列 PDF 内置目录、列包含草稿的页标注。搜索大小写敏感;编码异常页面可使用本地修复文字,普通扫描页不会自动 OCR。标注覆盖文字是几何推断,不能当精确原文。 |
|
|
34
|
-
| 现有 | `pdf_render_page`、`pdf_ocr_page` | 有界整页图像或文字;图片能否直达当前模型由视觉能力决定。OCR 和辅助视觉结果是派生文字,不能宣称当前模型看过原图。现有页图不合成未保存的草稿覆盖层。 |
|
|
35
|
-
| 已接入 | `pdf_form_inspect_page`、`pdf_fill_form` | 在可填写组件内标记编号,返回精简的类型、选项与可选当前值;一次检查/填写一页,凭单个 inspection ID 与编号直接原子写入共享可撤销草稿。支持先检查多页、再填写独立页;保存仍单独批准。仅填写已有 AcroForm。 |
|
|
36
|
-
| 第一阶段已实现 | `pdf_status`、`pdf_locate`、`pdf_context` | 查询**已打开**工作副本状态、在有界页窗内定位引文、打包有界文字上下文;版本化游标和会话限定的持久文字引用。能力布尔值代表观察时可用性,`capabilityDetails` 区分支持、可用与不可用原因;不是实时文件检查或执行预约。 |
|
|
37
|
-
| 实验功能已接入,待真实阅读验收 | `pdf_find_related` | 默认检索整份文档,可显式限制页范围;分步建立有界、可复用的文字索引。支持 `auto/lexical/semantic/hybrid`,仅在所请求范围完成索引后返回候选与精确原文引用;返回覆盖情况、`searchId` 和 `hasMore`,未完成时仅凭该 ID 续调同一工具。embedding 默认关闭,自动模式明确报告词法回退。扫描页及图片需另走 OCR/视觉工具。 |
|
|
38
|
-
| 第一阶段已接入 | `pdf_image_context`、读工具来源元数据与工具卡 | `pdf_render_page`、`pdf_ocr_page` 返回 `refId`;新工具在同一 Agent 会话和已授权工作副本中重验源字节、版本及附件,直送图像仍要求当前模型支持图像。`pdf_read_page`、`pdf_render_page`、`pdf_ocr_page` 写入有界 `tool/result.meta`;Client 为 `pdf_read_page`、`pdf_locate`、`pdf_context` 注册可回放卡。尚无图像工具卡或答案正文引用。 |
|
|
39
|
-
| 第一阶段已接入,待真实 Desktop 验收 | `pdf.region`、`pdf.selection`、`pdf.image` `prepare-reference`(Client↔Host RPC) | 解释模式的单页框选区域由 Host 根据已授权工作副本绘制 PNG、核对附件字节并生成 `pdf-region` 引用;文字选段由 Host 按 PDFium 字形位置重新提取、核对整页文字并签发引用。发送区域图像时,Client 用 `prepare-reference` 让 Host 再核对会话、文档、源文件、附件和摘要,直送图片只使用 Host 返回的字节,不使用 Client 暂存 Blob。它们都不是模型导航工具。 |
|
|
40
|
-
| 第二阶段已实现 | `pdf_annotate`、`pdf_annotation_update`、`pdf_annotation_delete`、`pdf_save` | 新增、修改颜色/评论、删除可编辑标注均直接进入 Reader 共用的可撤销草稿;修改/删除须使用 `pdf_page_annotations` 的精确 ID 与当前修订。只有覆盖保存原 PDF 时才要求交互批准。 |
|
|
41
|
-
| 已接入,待真实 Desktop 与外部阅读器验收 | `pdf_outline_edit` | 使用 `pdf_bookmarks` 返回的精确 `outlineId`,经与 UI 相同的目录领域新增、改名、删除子树、修改目标页、排序或调整父子层级。修改进入同一份可撤销草稿,保存后由 pdf-lib 写回内置目录。 |
|
|
42
|
-
| 已接入,待真实 Desktop 验收 | `pdf_navigate`、`pdf.navigation` | 用户要求“带我看”时,优先用 `documentId + refId`。Host 重验新鲜源文件、整页文字、精确区间及 native 字形,Client 核对快照后定位到页内原文;也保留 `page + contentVersion` 跳页形式。成功导航复用多级回退,含同页不同位置;不打开侧栏,同一 PDF 多个 Reader 须指定 `tabId`。 |
|
|
43
|
-
|
|
44
|
-
先不暴露 `pdf_read_section`、`pdf_structure`、`pdf_tables`、`pdf_sign`、`pdf_redact` 等模型工具名字。当前没有可靠的结构/表格元素模型;XFA 与加密 PDF 仍不支持,签名文件保持只读。为这些名字返回排版猜测或伪造 `element_id`,会破坏阅读器最有价值的可信度。未来确有可靠提取器与评测数据时再引入,不把创建、脱敏、签名、格式转换视为 AI 阅读器上线门槛。
|
|
45
|
-
|
|
46
|
-
### 文档引用与资源回收
|
|
47
|
-
|
|
48
|
-
`working-copy` 是唯一的打开文档表:同一资源会话和规范路径,无论先由 `pdf_open` 还是侧栏打开,均获得同一 `documentId`、修订、草稿及撤销历史;不同资源会话不共享授权或草稿。UI 每个标签实例持有独立引用,模型持有后台引用,每次工具和文档 RPC 在完整异步操作期间持有 pin,包括等待保存批准。关闭标签/切换会话不再丢弃共享草稿;`pdf_close` 只释放模型引用,不关闭 UI,也不删除持久草稿。
|
|
49
|
-
|
|
50
|
-
后台资源空闲十分钟,或超过每会话四份/128 MiB、全局 256 MiB 驻留预算时,回收无 UI 引用且未被操作使用的字节/解析快照及 native 句柄,不删除逻辑 ID。暂时全部被使用时允许超预算,操作结束后重试回收。下次工具调用或 UI 打开按需恢复同一 ID 与历史;干净副本的临时恢复基线仍走现有存储缓存,不代表整个进程的内存上限。Host 重启/插件重载后的新 ID 不能假定不变,仍须重新打开;源文件外部变化保留原有冲突和保存校验。
|
|
51
|
-
|
|
52
|
-
UI 打开、释放与无副作用刷新采用同一 RPC 契约。视图关闭按资源会话与引用令牌清理,即使打开响应丢失也能释放;Host 拒绝已结束令牌的迟到重试。`pdf.watch` 只通知修订,随后 `refresh` 获取完整最新草稿,不重新获取已关闭的视图引用。会话 detach 或插件卸载会取消并排空操作,再回收资源,不将退出理解为丢弃草稿。
|
|
53
|
-
|
|
54
|
-
### 表单:框内编号与直接草稿填写
|
|
55
|
-
|
|
56
|
-
印刷选项、方括号或空白线不等于可填写控件。模型只填写本次检查明确返回可写 `F` 编号的项;无控件的印刷项不进入填写批次,其他独立可填项继续处理。用户要求填写该项时,须以物理页码及原标签说明“当前未暴露可编辑控件,无法通过表单工具填写”,不能标为“不适用”或声称已完成。不能借用无关控件、替换答案或擅自添加标注和新字段;检查失败或映射不明确时重新检查或询问。
|
|
57
|
-
|
|
58
|
-
**单页检查/写入不等于只理解单页。** 填写前先理解相关的表单级填写说明与当前完整分节,确认字段的主体、题目、列标题、单位、日期格式、适用条件和续页规则,再将这些含义对应到本页编号。不能只检查一页就立即填写;当前页为续页、标题/规则缺失或适用范围不清时,使用 `pdf_read_page` 阅读前面的页及说明引用的页面,直到找到并关联当前字段所需的标题和规则。文字提取缺失或依赖版面才能判断时补看页图;仍不确定则继续阅读或询问,不猜测。已建立且仍适用的上下文可以复用,不要求每次从第一页通读整份 PDF。
|
|
59
|
-
|
|
60
|
-
`pdf_form_inspect_page(documentId, page, includeValues?)` 只接受已打开文档 ID、从 1 开始的物理页码及可选的读值开关,读取当前 Agent 会话可访问的工作副本,要求当前模型支持图片。PDFium 分块绘制正文,在真实可写控件内放入透明底 `F01` 等完整编号,隐藏 widget 外观、填写值、勾选和批注。一次返回两个内容块:带 JSON 数据的文本块,以及单独的编号页图附件;图片引用不混入 JSON 文本。
|
|
61
|
-
|
|
62
|
-
JSON 顶层只包含 `documentId`、`page`、`revision`、`inspectionId`、`readOnly`、可选的 `readOnlyReason` 和 `fields`。`readOnly` 表示文档层面是否只读,不等于字段必定可填或允许覆盖保存。每个字段只返回:
|
|
63
|
-
|
|
64
|
-
- `sharedFieldKey`、`type`、`valueType`、`required`;适用时附 `options`、`maxLength`、`multiline`、`multiple`。
|
|
65
|
-
- `controls: [{label, option?}]`,其中只有原生单选控件附精确 `option` 值。同一文档版本内,相同 `sharedFieldKey` 表示同一原生字段,可能在一页或多页出现多个控件;填写只提交一次。原生单选组共用一个字段值;独立复选框保持独立,不按外观或名称擅自合并。
|
|
66
|
-
- 可选 `value`:只有输入 `includeValues: true` 才返回当前草稿值;默认 `false` 时整个属性省略,不回传重复的开关状态。
|
|
67
|
-
|
|
68
|
-
`type` 描述控件形式,`valueType` 描述接受的数据;读取与填写格式一致:
|
|
69
|
-
|
|
70
|
-
| `type` | `valueType` | 空值/未选择 |
|
|
71
|
-
| --- | --- | --- |
|
|
72
|
-
| `text` | `string` | `""` |
|
|
73
|
-
| `checkbox` | `boolean` | `false` |
|
|
74
|
-
| `radio` | `string` | `""` |
|
|
75
|
-
| `dropdown` | `string` | `""` |
|
|
76
|
-
| `option-list` | `string[]` | `[]` |
|
|
77
|
-
|
|
78
|
-
radio/dropdown 须使用 `options` 中的精确值,列表按 `multiple` 约束选择。模型输出不含原生字段 ID、名称、示例、提示词、坐标、关联 widget 清单或固定渲染状态;位置及编号几何仅保留在插件内部,用于绘图和安全定位。不提取辅助全文、不调用 OCR 或表单理解模型,不返回题目/选项语义关联或候选标签;模型结合页图理解题意与适用条件。
|
|
79
|
-
|
|
80
|
-
只读、不支持、隐藏或页外控件不编号。图像长边由 Host 内部固定为 2048 像素,调用方无需指定尺寸;最多 100 个可见控件、64,000 字符原始映射,控件过小、编号重叠或输出超限时明确拒绝,不静默省略。编号无实心底色,按控件尺寸缩放,周围打印内容不受色块遮挡。空白外观不表示字段值为空,须按需读取 JSON 中的 `value`。读取不改变 Reader 基线、修订、历史或原文件。页图仍可能包含平铺个人信息;文档内容始终是数据而非指令。
|
|
81
|
-
|
|
82
|
-
`inspectionId` 不授予文件权限。Host 将单页编号映射绑定会话、文档、原始检查修订、内容版本和源摘要,十分钟过期,内存最多 128 份;不保存图片或填写值,释放会话/插件时清理。过期、驱逐、跨会话或文档不一致时拒绝写入;不能只更新 `expectedRevision` 重放凭据。只读检查和校验失败不推进修订。
|
|
83
|
-
|
|
84
|
-
`pdf_fill_form` 一次只填写一页,接受 `documentId`、**原始检查返回的** `expectedRevision`、单个 `inspectionId` 和 `fields: [{label: "F01", value: "Example"}]`(1–100 项)。不接收 `page` 或 `inspectionIds` 数组;页号与实际字段由该 inspection 的 Host 映射恢复,不能通过条件引用扩大写入范围。值类型与上表中的读取格式一致;同一 `sharedFieldKey` 只能提交一次。单个文本最多 8,000 字符,整批最多 64,000 字符。Reader、模型和 pdf-lib 保存共用字段身份、类型、选项和长度校验,模型最终转换为同一套 `set-field` 操作。
|
|
85
|
-
|
|
86
|
-
可选 `conditions` 与 `choiceGroups` 中的引用二选一:`{label: "F01"}` 指向本检查页,`{sharedFieldKey: "G7"}` 指向**同一会话、文档、原始快照版本中已经检查过的**原生字段,不能猜键或按名称关联。`conditions` 包含依赖字段引用、`when: {...引用, equals: 类型化值}`、`evidence: {quote: "印刷条件原文"}` 及可选 `onInactive: require-empty | preserve`;`choiceGroups` 包含字段引用列表与相同格式的证据。Host 从条件控制项或互斥组首个成员的检查记录恢复证据页号,这不证明引文确实出现在该页。跨页引用只声明读取依赖,不允许修改其他页。Host 仅检查调用方提供的条件和互斥组,按整批最终状态(包括已有值)校验,不自动推断题目含义、缺失规则或业务一致性。冲突整批零修改,不自行清空旧值;`preserve` 仅保留未提交的已有数据并报告待处理。类型失败为 `validation_failed`,条件/互斥失败为 `condition_failed / choice_failed`,均附恢复指引。
|
|
87
|
-
|
|
88
|
-
模型可以先在同一修订检查多页,先完成上述上下文理解、统一确定各页如何填写,再生成多个单页填写调用,各自携带原来的 `inspectionId` 和 `expectedRevision`。Host 按文档排队执行完整的映射解析、冲突检查、工作副本 CAS 写入与 inspection 状态推进;已知 `pdf_fill_form` 只修改独立页时,无关页的检查仍可安全应用到最新草稿。目标页、共享字段或声明的跨页依赖被修改时拒绝旧检查结果;同页不相干字段也不绕过整页失效规则。UI 编辑、撤销/重做等未知修改,以及源文件、结构或内容版本变化,均保守要求重新检查,不承诺任意并发编辑都能合并。并行调用不意味着跨页条件自动排序或自动规划;涉及控制项更新时应先填写并重新检查,再处理依赖页。
|
|
89
|
-
|
|
90
|
-
填写直接原子写入共享、可撤销的未保存草稿,不增加预览、dry-run 或人工确认步骤;无实际变化返回 `no_changes`。修改过的页须重新检查后才能再次填写,无关独立页可继续使用原检查记录。工具不自动采集填后图片或宣称语义正确;修改后用 `includeValues:true` 重新检查值。普通 `pdf_render_page` 不合成未保存草稿覆盖层,不能用它证明尚未保存的填写或标注外观已经正确。用户要求清空后重填时,先清空获准字段、重新检查,再用新凭据填写。真正覆盖原 PDF 仍用 `pdf_save` 的独立批准流程。
|
|
91
|
-
|
|
92
|
-
## 共同契约:证据与能力边界
|
|
93
|
-
|
|
94
|
-
PDFium 若报告真实字形缺少有效字符映射,Host 会按需用随包分发的本地 Tesseract、英文及简中数据恢复带坐标的单词层,替换整页异常层,而非叠加重复选区。该路径不联网、不收费、不写 PDF,识别图不含注释和表单外观;普通原生页和没有文字的扫描页不会自动触发。识别一次只处理一页,图像长边上限 2048、超时 60 秒、可取消,修复文字缓存上限 8 MiB 并绑定文档基线。Reader 与模型读取使用同一结果;读页和文本证据用 `extraction: local-ocr` 及局限说明标记派生文本,搜索报告 `ocrRepairedPages`。OCR 可能误识别,位置为单词级近似,不承诺精确字形或支持所有语言;无法恢复时明确报错,不把乱码当作成功结果。
|
|
95
|
-
|
|
96
|
-
以下是覆盖文字和图像的**目标统一结构**,不是当前单一、完整导出的 TypeScript 类型。现有 `src/modules/evidence/reference-store.ts` 分别持久化 `pdf-text`、`direct-image`、`ocr-text`、`auxiliary-vision` 引用:图像记录只存附件句柄、来源和尺寸/摘要等元数据,不在证据域复制 PNG;OCR/辅助视觉记录只存有界派生文字及其来源。解释模式区域图像可产生 `pdf-region` 定位的 `direct-image` 引用,文字选区经 `pdf.selection` 生成 `text-window` 引用;两者都绑定会话、工作副本、源文件/内容版本与修订。缺失几何时降级说明,绝不编造:
|
|
97
|
-
|
|
98
|
-
```ts
|
|
99
|
-
type PdfEvidence = {
|
|
100
|
-
refId: string // 本会话内引用句柄;有快照,不能仅指向易变缓存
|
|
101
|
-
documentId: string // 当前工作副本句柄,不作为跨重启的永久 ID
|
|
102
|
-
sourcePath: string // 重新获得访问权限后用于重开;文件可能已移动
|
|
103
|
-
sourceDigest: string // 源 PDF 字节 SHA-256;现有内部 sourceHash 可复用
|
|
104
|
-
sourceVersion: string // 文件系统版本,不是内容摘要
|
|
105
|
-
contentVersion: string // 当前工作副本的页面内容身份,不是永久哈希
|
|
106
|
-
revision: number // 工作副本修订;写入并发检查另行使用
|
|
107
|
-
page: number // 物理页,从 1 开始,不是 PDF 显示页标签
|
|
108
|
-
source: 'pdf-text' | 'ocr-text' | 'auxiliary-vision' | 'direct-image' | 'annotation'
|
|
109
|
-
snapshot: { text?: string; imageRef?: string; sha256: string }
|
|
110
|
-
locator:
|
|
111
|
-
| { kind: 'text-window'; startUtf16: number; endUtf16: number; rectsPdf?: number[][] }
|
|
112
|
-
| { kind: 'pdf-region'; rectPdf: [number, number, number, number] }
|
|
113
|
-
| { kind: 'page-only' }
|
|
114
|
-
precision: 'exact-text' | 'approximate-geometry' | 'page-only'
|
|
115
|
-
limitations?: string[]
|
|
116
|
-
}
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
`sha256` 只校验已发送快照,不代表 PDF 中有永久元素 ID。字符偏移对应插件拼接后的页文本,按 UTF-16 计;不能直接当作 PDFium 字符索引,因为拼接过程可能插入空格。消费文字引用时,Host 重新读取完整页文,再由共享的文字/字形映射生成多行四边形,不信任引用内缓存的近似 bbox。PDF 坐标为未旋转页面的 user space,必须核对 crop/rotation;OCR 派生文字与不可靠字形不作为精确标注或导航的替代坐标。
|
|
120
|
-
|
|
121
|
-
`refId` 只在所属会话有效。文字与图像来源共用独立证据域,写入时按最多 256 条、最长 30 天清理;`session/disposed` 也是运行时 detach/HMR 信号,不据此删除持久引用。Host 重启后须重新取得该会话的文件权限,临时 `documentId/contentVersion` 不能当永久身份。消费文字引用时核对路径、源文件新鲜度、整页摘要及精确范围,再重建当前字形;仅草稿标注或保存导致修订/字节改变,不自动证明引用失效或有效,须完整重验。历史工具卡也使用该解析器,失败只保留旧摘录,不盲跳。
|
|
122
|
-
|
|
123
|
-
图像引用另重验来源字节、页码、附件或派生文字摘要;源改变或附件丢失即失败。解释选段来自 `pdf.selection`,区域来自 `pdf.region`;发送图像前 `prepare-reference` 在异步处理前后重验。图像工具卡与答案正文内联引用仍待实现,不能把文字引用的精确导航等同于这些功能已交付。
|
|
124
|
-
|
|
125
|
-
有文字层不等于读懂整页视觉内容;`no_text` 也不等于空白页。直接图像、OCR、辅助视觉的 `source` 和局限必须在工具结果及 UI 上一致。使用第二个视觉模型可能另计费用,且其描述不等于当前会话模型亲眼看过原图。
|
|
126
|
-
|
|
127
|
-
### 结果与错误
|
|
128
|
-
|
|
129
|
-
工具按其契约返回判别式 `status`(如 `ok`、`partial`、`no_text`、`ambiguous`、`not_found`)及覆盖/截断信息。预期的“找不到/多个候选”是数据结果;越权、无效参数、版本冲突和后端故障用稳定的 `error.code`,并给出可否重试。
|
|
130
|
-
|
|
131
|
-
`pdf_search` 和 `pdf_find_related` 首调使用 `documentId`、`query` 及该工具的初始查询选项,输出短 `searchId` 和布尔值 `hasMore`,**不公开 `nextCursor`**。`hasMore: true` 时,仅以 `{searchId: "txt_…"}` 或 `{searchId: "rel_…"}` 续调产生该 ID 的同一工具,不能附带 `documentId`、查询或其他初始参数。Host 保存原查询、范围、版本约束及进度;ID 是会话和工具限定的不透明句柄,不是文档访问权限。重置、TTL 到期或预算驱逐会令 ID 失效;未知/过期 ID 必须用完整初始参数重新开始。更改查询、范围或选项也应发起新搜索,源/版本不匹配时不能拼接结果。
|
|
132
|
-
|
|
133
|
-
`pdf_bookmarks`、`pdf_locate`、`pdf_context` 等工具继续使用各自的 `nextCursor`/`cursor` 契约,不能改用搜索 ID。书签游标绑定工具、会话、文档、内容版本、修订、源字节摘要及列表摘要;续调允许改变 `limit`,树增删或移动后必须重新列举。游标不是文件访问权限;非法格式报 `pdf/invalid-window`,身份/查询/版本不匹配报 `pdf/stale-reader`。
|
|
134
|
-
|
|
135
|
-
所有工具继续由 `exec.agent.session.id` 限定资源访问。不要因为 UI 当前聚焦某个标签就对它隐式写入;读工具也不自动改变阅读位置。大型输出先设页数、字符数、图片像素和候选数量的硬上限,并报告实际覆盖范围;`tokenBudget` 至多是估算,不能代替字节/字符硬上限。长任务支持取消;未做异步作业底座前不要承诺 `pdf_job_status`。
|
|
136
|
-
|
|
137
|
-
## 第一阶段:可信读取与引用(已实现的文字范围)
|
|
138
|
-
|
|
139
|
-
### `pdf_status`
|
|
140
|
-
|
|
141
|
-
已实现:输入仅 `documentId`,返回路径、物理页数、源摘要、`sourceVersion/contentVersion/revision`、`dirty/conflict`、可见性、能力及 `observedAt`。`capabilities` 布尔值代表**观察时可用性**,`capabilityDetails` 为每项给出 `supported/available/reason?`:只读、签名或冲突文档不会报告可写;表单、目录及可见 Reader 依据文档/当前状态判断;OCR/图像理解以及实验性的 `semanticSearch` 实际探测已选择后端,缺失、禁用、未知或探测失败不当成可用。`findRelatedText` 可用不等于已启用 embedding,仍可进行词法检索。取消不转成普通不可用结果,探测期间文档变化会拒绝过期状态。能力不是资源预约,各工具执行时仍重新检查;`conflict: false` 也不保证外部文件此刻未变化。`pdf_current` 只代表正在显示的 PDF;Host 后台打开不创建侧栏标签。
|
|
142
|
-
|
|
143
|
-
### `pdf_locate`
|
|
144
|
-
|
|
145
|
-
输入 `documentId`、**单页**原文 `quote`,可选物理页/页范围。既有 `refId` 应传给 `pdf_context`,不属于 `pdf_locate` 的输入。每次最多扫描十页,返回实际扫描范围、无文字页和版本绑定的 `nextCursor`;不给页范围时也从第一页分窗扫描,而不是暗中通读整本书。先精确匹配插件读到的页文本;将大小写、空白归一化作为明确的第二种匹配模式,而不是暗中改写引文。输出最多五个候选,每个带版本、原文快照、页/UTF-16 范围,以及可用时的 PDF 坐标与 `precision`。扫描未完成时返回 `partial`,不能把当前窗口的唯一命中说成全文唯一,也不能提前报 `not_found`;完整覆盖指定范围后才返回 `ok`、`ambiguous` 或 `not_found`。不伪造 0.98 之类未校准概率;多处同文不得擅自选一个。跨页选区由各页的独立片段组成,首版不拿跨页整句做单次匹配。
|
|
146
|
-
|
|
147
|
-
已实现精确的**拼接文字**偏移与至多五个候选、十页扫描窗口、版本化续读游标;读取结果内可用的估算矩形仍标 `approximate-geometry`,不是可直接写入的坐标。后续标注、精确导航和历史文字卡消费 `refId` 时,统一在 Host 重验整页摘要及保存的起止文字范围,再用当前 native 字形重建精确几何。缺字、OCR 派生文字、跨栏回跳或不能验证的布局明确失败,不把近似框升级成事实。
|
|
148
|
-
|
|
149
|
-
### `pdf_search`
|
|
150
|
-
|
|
151
|
-
用于精确、大小写敏感的提取文字搜索。首调接受 `documentId`、`query`(2–128 个字符),可选 `fromPage`(默认第一页)及该页内的 UTF-16 `offset`(默认 0)。每次最多扫描十页、返回 20 个命中;结果是按扫描位置分页的匹配项,不是相关度排名或页面列表。每次返回 `searchId: "txt_…"` 和 `hasMore`;`hasMore: true` 时只用 `{searchId: "txt_…"}` 续调 `pdf_search`,`hasMore: false` 表示本次搜索已完成。Host 保留首个尚未返回命中的位置;不能因一批没有命中就提前断言全文不存在该文字。
|
|
7
|
+
| 工具 | 职责 |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| `pdf_current` | 列出本会话可见 Reader 的文档 ID、标签 ID 和当前页提示 |
|
|
10
|
+
| `pdf_open` | 为模型取得 PDF 工作副本引用,不打开 Reader 标签 |
|
|
11
|
+
| `pdf_close` | 释放模型引用,不关闭 UI、不删除草稿 |
|
|
12
|
+
| `pdf_info` | 读取文件元信息,不创建持久工作副本或模型引用 |
|
|
13
|
+
| `pdf_status` | 查询已打开文档的修订、未保存状态、冲突及实际可用能力 |
|
|
14
|
+
| `pdf_page_read` | 读取有界页面文字,并签发可复用证据引用 |
|
|
15
|
+
| `pdf_page_render` | 生成页面图像和可信图像句柄,不执行 OCR 或识图 |
|
|
16
|
+
| `pdf_keyword_search` | 精确或显式归一化字符串搜索,返回具体出现位置的引用 |
|
|
17
|
+
| `pdf_semantic_search` | 使用已配置且可用的 embedding 引擎检索原生文字、OCR 及可选图像描述 |
|
|
18
|
+
| `pdf_evidence_read` | 重读/缩小已有证据,或解析单页、跨页连续文字范围 |
|
|
19
|
+
| `pdf_page_jump` | 在已可见的 Reader 中跳转到页或精确引用,并记录多级回退 |
|
|
20
|
+
| `pdf_form_inspect` | 返回同一快照的编号页图、字段类型、选项及 inspection ID |
|
|
21
|
+
| `pdf_form_fill` | 原子填写一个已检查页面的草稿 |
|
|
22
|
+
| `pdf_annotation_list` | 列出当前草稿中的标注、评论及精确 ID |
|
|
23
|
+
| `pdf_annotation_create` | 根据已解析文字引用或便签区域创建标注 |
|
|
24
|
+
| `pdf_annotation_update` | 修改已有标注颜色或评论文本,保留其身份与回复关系 |
|
|
25
|
+
| `pdf_annotation_delete` | 删除指定可编辑标注或评论 |
|
|
26
|
+
| `pdf_bookmark_list` | 读取 PDF 内置书签树和精确 outline ID |
|
|
27
|
+
| `pdf_bookmark_edit` | 在一个草稿事务中新增、修改、删除或移动书签 |
|
|
28
|
+
| `pdf_save` | 经受信用户确认后,将当前草稿覆盖保存到原 PDF |
|
|
29
|
+
| `ocr_recognize` | 使用配置的 OCR 引擎识别一个可信图像句柄 |
|
|
30
|
+
| `image_understand` | 使用配置的图像理解后端处理一个可信图像句柄 |
|
|
152
31
|
|
|
153
|
-
|
|
32
|
+
旧的 `pdf_locate`、`pdf_context`、`pdf_ocr_page` 和 `pdf_image_context` 模型入口已移除;其必要能力收敛到搜索、基础读取、证据读取及通用图像工具。不提供总结、问答、翻译等复合 PDF 工具。
|
|
154
33
|
|
|
155
|
-
|
|
34
|
+
## 文档身份与生命周期
|
|
156
35
|
|
|
157
|
-
|
|
36
|
+
所有资源以执行中的 Agent 会话鉴权;`documentId`、`refId`、`searchId` 和 `inspectionId` 都不能代替文件访问权限。
|
|
158
37
|
|
|
159
|
-
|
|
160
|
-
| --- | --- |
|
|
161
|
-
| `documentId` | 已在本会话打开并获授权的工作副本文档 |
|
|
162
|
-
| `query` | 4–512 个字符的问题或概念 |
|
|
163
|
-
| `terms?` | 最多 12 个同义词/译名,每项 2–80 字符;用于词法召回,不改写原文 |
|
|
164
|
-
| `mode?` | 默认 `auto`;`lexical` 使用 BM25;`semantic` 使用向量;`hybrid` 合并两路候选 |
|
|
165
|
-
| `topK?` | 1–20,默认 6 |
|
|
166
|
-
| `fromPage?` | 检索范围首个物理页,从 1 开始,默认 1 |
|
|
167
|
-
| `maxPages?` | 检索范围最多包含的页数,1–100000;省略表示到文档末页 |
|
|
38
|
+
`working-copy` 是唯一的打开文档表。同一会话、同一规范路径,无论先通过模型还是 UI 打开,都获得同一份文档、草稿、修订和撤销历史。重复的模型打开取得同一个模型持有者,不因工具重试无限增加引用。UI 标签、模型持有者和执行中的操作分别持有引用。
|
|
168
39
|
|
|
169
|
-
|
|
40
|
+
`pdf_close` 仅释放模型持有者。引用归零后可以回收常驻字节和 native 资源,持久草稿仍保留;空闲回收不授权模型关闭用户视图或删除未保存修改。Host 重启后重新打开以获取有效 ID。
|
|
170
41
|
|
|
171
|
-
|
|
42
|
+
`pdf_info` 检查文件本身的元信息,不登记长期模型所有权;`pdf_status` 检查工作副本当前状态,不能用重复打开来替代状态查询。能力报告中的 `supported/available/reason` 是观察结果,执行时仍重新验证。
|
|
172
43
|
|
|
173
|
-
|
|
44
|
+
## 搜索、读取与证据
|
|
174
45
|
|
|
175
|
-
|
|
176
|
-
- `incomplete`:范围内存在尚未成功读取的页。返回失败页及尝试信息,不把其他页的排名冒充全范围结果;根据错误指引处理,`hasMore: true` 时仅凭 `searchId` 续调。
|
|
177
|
-
- `complete`:所请求范围的文字与该模式所需向量已处理完成,`hasMore: false`,可以返回排名候选。该状态不表示图像、公式、表格结构或扫描文字已被理解。
|
|
46
|
+
`pdf_keyword_search` 搜索字面原文,归一化匹配须显式选择。`pdf_semantic_search` 用于概念、问题或不同表述;没有可用 embedding 引擎时报告不可用,不把关键词结果伪装成语义检索。语义索引复用统一 `PageContent` 的原生文字、OCR 文字及可选图像描述,并保留来源位置。图像首版为整页 `visual-region`,不声称检测出独立图表、表格或公式区域;`pdf_page_read` 与关键词搜索保留各自的读取和精度策略。
|
|
178
47
|
|
|
179
|
-
`
|
|
48
|
+
开始语义搜索前,先用该 `documentId` 调用 `pdf_status`,仅在 `capabilities.semanticSearch` 为 `true` 时调用 `pdf_semantic_search`。为 `false` 时读取 `capabilityDetails.semanticSearch.reason`;引擎关闭、缺失或不可用时,组合 `pdf_keyword_search` 的相关词搜索与 `pdf_page_read` 的上下文阅读,并明确这是关键词检索和阅读判断,不能称为语义搜索结果。未经用户明确要求,不启用、切换或修改 embedding 引擎及其配置。`pdf_current` 的文档和页提示不代表语义搜索可用。
|
|
180
49
|
|
|
181
|
-
|
|
50
|
+
语义检索已启用且引擎可用时,阅读器或 `pdf_open` 打开文档会触发 Host 后台预建;源字节、页范围、预处理身份和 embedding 配置匹配时,可与搜索及其他已授权会话共享可复用索引、缓存及在途构建。权限、工作副本草稿、查询/续读句柄、结果和证据引用仍按会话隔离,每次访问独立授权;索引不能充当文件访问凭据。`indexScanPages`(文字识别索引)默认开启,在扫描页或损坏原生编码页上调用 `ocrEngine`;`indexImageDescriptions`(视觉描述索引)默认关闭,可与文字识别同时开启。视觉描述复用 `imageEngine` 与 `engineConfigurations.image`,通过索引提示词生成整页描述文字再索引,并非直接嵌入原图;没有独立的视觉描述引擎选择。缺失或不可用的引擎明确报错,不自动切换提供方。描述增加模型调用、耗时和可能的费用。两项本身不启用 embedding。预建不生成查询向量,模型无需占位搜索预热;远程服务可能在预建时收到页图或抽取/派生文字。OCR 成功但空输出表示未识别出文字,不算失败。若预建尚未完成,搜索仍可能等待剩余进度并返回 `hasMore`。一会话关闭最后引用或取消预建,不影响仍有其他订阅者的构建;全部订阅取消后才终止共享构建。普通标注修改不会重复建立未变化的内容索引,常驻索引及持久缓存仍可按预算淘汰。
|
|
182
51
|
|
|
183
|
-
|
|
52
|
+
OCR/图像后端未提供稳定 `cacheIdentity` 时,派生缓存按会话和注册期隔离;提供稳定身份后才允许跨重启复用,实际图像输入及模型/配置变化仍分离缓存。表示 ID 和块 ID 只是内容身份,不授予文件访问,也不替代会话证据 `refId`。
|
|
184
53
|
|
|
185
|
-
|
|
54
|
+
用户可从工具栏手动启动或重试当前文档索引,在任务入口查看当前资源会话内已打开 PDF 的文件名、页面读取及向量分段进度,并取消任务。绿色“索引已就绪”持续显示,直到 Host 移除已关闭文档的任务;其他短暂保存通知仍会消退。取消后,本会话相同来源和配置在本次打开期间不会自动恢复;手动启动、来源或配置变化、关闭后重新打开可恢复预建。该入口使用会话隔离的 `pdf.indexing` RPC,不增加模型工具。
|
|
186
55
|
|
|
187
|
-
|
|
56
|
+
两种搜索首调传 `documentId`、`query` 和范围等初始参数。返回 `searchId` 与 `hasMore`;续调只传同一工具返回的 `{searchId}`。Host 保留查询、范围、版本和进度。未知/过期/错误工具的 ID 必须重新搜索。未完成覆盖不能据此断言无结果或唯一结果;相关检索处理完请求范围后对可用内容统一排名,局部失败时仍可能有候选。
|
|
188
57
|
|
|
189
|
-
|
|
58
|
+
若可选 OCR/图像描述失败但已有有效原生或 OCR 文字,索引保留可用内容,返回 `status: incomplete` 和 `coverage.failedPages`,可以带排名候选。此时 `hasMore: false` 只表示没有后续构建步骤,不表示覆盖完整,也没有可继续的游标;不要重复续调,须显式重建该文档以重试失败步骤。不能宣称索引整体就绪。没有任何有效文字的失败页仍走原有自动重试;成功但空白的 OCR 输出不算失败。
|
|
190
59
|
|
|
191
|
-
|
|
60
|
+
语义结果的 `coverage.qualityWarnings` 按相同问题聚合:`message` 仅出现一次,`affectedPageCount` 是受影响页数,`candidatePages` 精确列出本次命中中受影响的页,`sampleOtherPages` 最多列出 8 个其他页,`omittedPageCount` 明确报告未列出的页数。最多返回 8 类警告,优先呈现影响当前候选的类型;更多类型以 `qualityWarningsOmitted` 汇总,不能把省略当作无问题。`complete` 表示请求范围的索引已完成且无失败页,不表示每个字符都已准确解码;字符缺失与 `failedPages` 的读取/预处理失败分别报告。质量信号按页统计,是否影响具体引文仍需结合原文核对。对相关页的关键文字或符号有疑问时用 `pdf_page_read` 补读,必要时用 `pdf_page_render` 视觉核对。
|
|
192
61
|
|
|
193
|
-
|
|
62
|
+
读取与搜索返回统一的 `refId`。原生文字引用指向某个版本中的具体 UTF-16 文字范围,不能把相同文字的其他出现位置当成该引用。OCR 与图像描述引用保留派生文字快照及近似页/区域位置,不能冒充原生精确文字,也不能直接用于精确文字标注。引用的范围可能大于用户想标记的段落,必须先阅读确认;派生来源需要精确标注时,先重新读取可验证的原生文字,或使用适合该页的区域/页级材料。
|
|
194
63
|
|
|
195
|
-
|
|
64
|
+
`pdf_evidence_read` 有两种输入:
|
|
196
65
|
|
|
197
66
|
```json
|
|
198
|
-
{"documentId":"
|
|
67
|
+
{"documentId":"doc-id","refId":"ref-id","quote":"可选:引用内部唯一的精确子段"}
|
|
199
68
|
```
|
|
200
69
|
|
|
201
70
|
```json
|
|
202
|
-
{
|
|
71
|
+
{
|
|
72
|
+
"documentId":"doc-id",
|
|
73
|
+
"range":{
|
|
74
|
+
"start":{"page":3,"quote":"唯一的起点原文"},
|
|
75
|
+
"end":{"page":5,"quote":"唯一的终点原文"}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
203
78
|
```
|
|
204
79
|
|
|
205
|
-
|
|
80
|
+
连续范围包含起止之间的全部页和文字,最多十页、8,000 UTF-16 字符。Host 验证来源、页文字和原生几何;阅读顺序不明确、引文歧义、文字映射不可靠或范围过大时拒绝,不猜坐标。缩小或解析成功后用返回的最终 `refId` 创建标注和跳转。
|
|
206
81
|
|
|
207
|
-
|
|
82
|
+
证据读取也用于重放保存的图像或派生文字,不能用重新 OCR/识图代替同一次结果。Host 重验会话、文档版本、源文件和附件摘要;已失效的来源应重新读取。OCR 或辅助视觉产生的是派生文字,不冒充精确原生文字,不可直接用于文本标注。
|
|
208
83
|
|
|
209
|
-
|
|
84
|
+
列表工具沿用各自的 `nextCursor/cursor`,游标必须原样传回;文档变化后重新列举。搜索会话与列表游标不可混用。
|
|
210
85
|
|
|
211
|
-
|
|
86
|
+
## 图像、OCR 与区域交互
|
|
212
87
|
|
|
213
|
-
|
|
88
|
+
模型调用链:
|
|
214
89
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
90
|
+
```text
|
|
91
|
+
pdf_page_render → imageHandle → ocr_recognize / image_understand
|
|
92
|
+
```
|
|
218
93
|
|
|
219
|
-
|
|
94
|
+
页图生成仅生产图像和句柄。当前模型支持视觉时可接收图片自行理解;文本模型也可取得句柄交给后端,但不能声称看过图片。OCR 只提取文字;图像理解通过所选引擎实际执行“图片 + 提示词 → 文字”,均报告来源、限制和有界结果。内置 `dsh-vision` 可跟随会话或指定视觉模型;直接把图片交给视觉会话属于会话编排,不是另一种引擎,也不自动回退到 OCR。
|
|
220
95
|
|
|
221
|
-
|
|
96
|
+
`ocr_recognize` 首调传 `imageHandle`;`image_understand` 首调还需 `question`。两者都可设 `maxChars`。结果返回 `resultId`、`offset/nextOffset`、文字、来源及可用的证据;截断时用同一个工具的 `{resultId,offset:nextOffset}` 继续,不再传图像句柄或问题,也不重新发起识别。结果句柄有会话、工具、期限和来源约束;缺失或过期时重新生成图像/结果。OCR 几何若存在,坐标属于输入图像像素,不是可直接写入 PDF 的位置。
|
|
222
97
|
|
|
223
|
-
|
|
98
|
+
UI 区域 OCR 使用同一个识别服务:框选、裁剪和页面坐标映射由 Reader 链路处理,识别、取消、错误、限额及引擎选择共用 Host 服务。模型工具没有区域 OCR、`region` 或 `bbox` 参数。
|
|
224
99
|
|
|
225
|
-
|
|
100
|
+
普通页图不合成未保存的 Reader 草稿覆盖层,不能用它证明未保存表单值或标注外观已正确。图像生产与派生结果始终携带实际输入的来源约束。
|
|
226
101
|
|
|
227
|
-
|
|
102
|
+
## 标注、书签与导航
|
|
228
103
|
|
|
229
|
-
|
|
104
|
+
模型新增文本标注只接受已解析引用:
|
|
230
105
|
|
|
231
|
-
|
|
106
|
+
```json
|
|
107
|
+
{
|
|
108
|
+
"documentId":"doc-id",
|
|
109
|
+
"expectedRevision":4,
|
|
110
|
+
"subtype":"Highlight",
|
|
111
|
+
"target":{"kind":"reference","refId":"resolved-ref"},
|
|
112
|
+
"comment":"可选评论"
|
|
113
|
+
}
|
|
114
|
+
```
|
|
232
115
|
|
|
233
|
-
|
|
116
|
+
独立便签仍使用 `subtype: "Text"` 和 `target: {kind:"pdf-region",page,rectPdf:[left,bottom,right,top]}`。标注工具不再接受单页引文、起止引文或引用内子引文;这些先交给证据工具。一次连续范围的所有页标注仍属于同一个可撤销事务,失败不部分提交。写入时重新验证来源、修订和原生字形,不能把“已解析”当成永久有效。
|
|
234
117
|
|
|
235
|
-
|
|
236
|
-
- `outline-update`:指定已有 `id` 和非空 `patch`(`title` 和/或 `page`)。改名保留原目标;显式设置页码会替换成该页的适合页面目标,即使页码未变也不会恢复旧的页内视图。
|
|
237
|
-
- `outline-delete`:指定已有 `id`,删除该项及其整棵子树;删除可由草稿撤销。
|
|
238
|
-
- `outline-move`:指定已有 `id`、可选 `parentId` 和必填 `index`;索引以移除被移动子树后的目标同级列表计算。不能移动到自身或后代。
|
|
118
|
+
完全相同的已有标注可以复用;不同颜色/评论或部分重叠会报告已有 ID,供列表检查或更新。修改、删除使用 `pdf_annotation_list` 返回的完整 ID 和当前修订;更新不通过删后重建实现。评论回复先于父标注删除。
|
|
239
119
|
|
|
240
|
-
|
|
120
|
+
`pdf_bookmark_list` 仅列内置目录。`pdf_bookmark_edit` 接受结构化 `operations` 数组,一次 1–100 项 `outline-add/update/delete/move`。新增可指定父节点与插入位置;删除包括子树;移动位置按移出原子树后计算。仅改名或移动保留既有目的地、外链、样式和折叠状态,显式修改 `page` 才重设目的地。
|
|
241
121
|
|
|
242
|
-
|
|
122
|
+
`pdf_page_jump` 消费最终引用,或物理页码与当前 `contentVersion`;不隐式打开标签。同一文档多个 Reader 时用 `pdf_current` 的 `tabId` 明确目标。成功跳转进入相同的多级阅读回退历史;读取、检索和编辑不自动导航。
|
|
243
123
|
|
|
244
|
-
|
|
124
|
+
## 表单与保存
|
|
245
125
|
|
|
246
|
-
`
|
|
126
|
+
`pdf_form_inspect(documentId,page,includeValues?)` 返回两种内容块:精简结构化文本和编号页图。小型透明底 F 编号位于真实可写控件内;图像隐藏 widget 外观、填写值与标注。文本包含字段的原生共享键、类型、`valueType`、约束、选项和编号;`includeValues:true` 才返回实际草稿值。编号和映射来自同一快照,不由模型自己拼接。
|
|
247
127
|
|
|
248
|
-
`
|
|
128
|
+
`pdf_form_fill` 只接收一个 `inspectionId`、原始 `expectedRevision` 和 `fields:[{label,value}]`,不传页号。文本/单选/下拉为字符串,复选框为布尔,选项列表为字符串数组;清空分别用 `""`、`false`、`[]`。只能填写已暴露的真实可写控件;打印文字不代表控件。共享字段只提交一次。
|
|
249
129
|
|
|
250
|
-
|
|
130
|
+
单页写入是事务边界,不是理解边界。填写前理解相关说明、标题、主体、单位、日期格式及适用条件,必要时补读前页。模型可声明条件与互斥组,Host 只校验所提供规则和类型,不推断业务语义或伪造缺失信息。语义不明时阅读或询问。
|
|
251
131
|
|
|
252
|
-
|
|
253
|
-
2. **引用闭环**:首步在可回放工具卡里点击回到正确页/区域;重复引文给候选;源文件外部改变后只显示旧快照或重新定位;会话重开后卡片仍可解释。答案正文中的内联引用单独验收。测页码准确率、精确文本匹配率、可视定位误差及错误跳转率。
|
|
254
|
-
3. **可控写入**:模型批注立即进入未保存草稿,已打开的 Reader 自动同步;并发修订与源版本冲突都拒绝;批注可整批撤销,只有用户单独确认保存才改变文件。覆盖 UI 未保存草稿、Host 后台工作副本和文件外部变更。
|
|
255
|
-
4. **使用时性能**:用长论文、千页书、扫描版、双栏和含图表 PDF,记录 `pdf_context`、定位、区域渲染的 p50/p95、CPU/内存峰值及返回字符/图片量。未测量前不写固定时延承诺。
|
|
132
|
+
可先检查多页再独立填写。Host 排队验证映射和修订;已知独立页填写可以保留无关检查,目标页、共享字段、依赖、UI 编辑、撤销重做或来源变化要求重新检查。每个单页批次一起成功或失败。填写后重新检查实际值;成功写入不代表语义正确。
|
|
256
133
|
|
|
257
|
-
|
|
134
|
+
所有修改直接进入人和模型共用的未保存草稿,不增加预演或人工确认。`pdf_save(documentId,expectedRevision)` 才通过受信交互渠道请求覆盖原文件的批准,再次核对修订、差异和源摘要后原子保存。模型不能以 `approved:true` 授权自己。另存为仍由 UI 路径选择器处理。
|
|
258
135
|
|
|
259
|
-
##
|
|
136
|
+
## 验证边界
|
|
260
137
|
|
|
261
|
-
|
|
138
|
+
每次修改应覆盖:工具注册与严格参数、跨会话拒绝、旧引用与源变更、取消/卸载、输出限额、跨页范围完整性、批量失败零修改,以及 Reader 与模型共享草稿。领域测试、DSH 集成、真实 PDFium 和浏览器交互分别验证其边界;代码中的能力声明不等于真实模型或外部阅读器已验收。
|