标准工作流
拆书、目录、整理、复习卡组
标准工作流
参数见交互式 API。这里记录跨端点的顺序。
拆书
选集与文档
只读。
curl -s "$BASE/library/study-sets?query=高数" -H "$AUTH"
curl -s "$BASE/study-sets/{topicid}/documents" -H "$AUTH"
curl -s "$BASE/documents/{bookmd5}/outline" -H "$AUTH"outline 的目录字段为 segments。hasToc 为 false 或目录不准时,先判断是否需要写目录。
准备任务包
超过约 10 页时 async 设为 true。同一时间只跑一个 prepare。
curl -s -X POST "$BASE/bundles/prepare" -H "$AUTH" -H 'Content-Type: application/json' -d '{
"topicid":"…","bookmd5":"…",
"segments":[{"startPage":96,"endPage":132,"title":"第三章"}],
"preset":"book-breakdown","anchorMode":"page_text",
"title":"拆第三章,术语保留英文",
"cardStyle":{"defaultFillIndex":2},"async":true}'202 返回 jobId、bundleId、bundlePath,state 为 preparing。参数错误同步返回 404 或 422。
curl -s "$BASE/bundles?origin=bridge" -H "$AUTH"每 15 秒轮询一次。prepared 进入下一步,failed 读 error,放弃时 discard。
包内拆书
在 bundlePath 内按 CLAUDE.md、TASK.md、OUTPUT-CONTRACT.md 拆,结果写 result.md。标题不超过 6 级。跨设备时经 GET /bundles/{id}/files 读包,submit 时内联 resultMarkdown 交回。
交回导入
submit 是唯一的写入操作,等价于 commit。
curl -s -X POST "$BASE/bundles/{bundleId}/submit" -H "$AUTH" \
-H 'Content-Type: application/json' -d '{"targetParentNoteId":"<可选>"}'返回 rootNoteId、version、preImportSnapshotId、receipt、parsed、warnings。
submit 没有 confirm,直接执行。提交前核对章节、卡片数、目标学习集。校验 bundle 用 GET /bundles。
聚焦结果
curl -s -X POST "$BASE/bundles/{bundleId}/focus" -H "$AUTH",之后用 GET /context 确认。
每次 prepare 不超过 60 页,按实际页数计算。整书按章多轮。修订时修改 result.md 后重新 submit,整树替换。导错时用 preImportSnapshotId 经 POST /snapshots/{id}/restore 回退。
preset 与 anchorMode
组合错误时静默退化,不报错。
- 叙述体:
book-breakdown配page_text - 条文或手册:
source-structure配任意 anchorMode - 试卷或习题:
exam-general配block。题答配对依赖块的 role,配page_text等于没选 preset - 词典:
dictionary配page_text
startPage、endPage 与 /pages 的 start、end、outline 的 startPage 同为 PDF 页序,从 1 开始计数,与印刷页码无关。segments 可非连续。
submit 回执
parsed.headings与parsed.importedCards不等表示丢卡,用 receipt 与 result.md 做差集parsed.excerptsTotal与excerptsAnchored不等表示有[excerpt:]未定位,看failedExcerpts。no_match与below_threshold多为改写原文,no_coordinates多为扫描页无文本层excerptStatsTruncated为 true 时统计不作完整性依据exam-general配block时答案卡标题与正文会被改写。submit 后核对 receipt 的 title,需要保留的使用POST /notes/{id}/title补回
目录
- 只拆一两章时不写目录。读印刷目录页计算偏移,回读正文确定章界。
- 需要目录或整书多轮需要稳定骨架时走生成或升级。写入前说明改文档且多集可见,确认后带
confirm:true写入。 toc-candidates单次不超过 60 页,约 3 秒每页,45 秒预算。超限按nextStart续扫。并发上限 2,与 pages 共享,超限返回 429SCAN_BUSY。- 写
POST /documents/{md5}/toc时页码递增,level取 0 到 7。越级会被静默钳制,看adjustedLevels。写入落到 AI 目录位,原目录无损。 - 回退方式:
{"useOriginal":true,"confirm":true}切回原始,{"useAI":true,"confirm":true}切回 AI。快照不覆盖目录。 - 写入后用
GET /outline验证,hasToc为 true。
整理与修订
- 读取已有脑图:
tree加batch-get。texts稀疏,parts为全量视觉顺序。texts为空时先看parts。 - 整理时生成新图,prepare 加 submit,原图不动。引用旧卡时写
marginnote4app://note/{noteid}链接文本。 - 移动:
POST /notes/move。单次不超过 50 个,整批一个撤销组。确认逐卡方案后执行。只改父子关系,不调兄弟顺序与坐标。 - 复制:
POST /notes/copy。reference同步内容,clone独立。整棵分支快照,不超过 50 个根。 - 合并:
POST /notes/{id}/merge-branch。默认合并直接子卡,recursive:true合并整棵子树。先 dry-run 查看 willMerge。合并后对方消失,与链接不同。 - 子脑图:
sub-maps列出,tree?root=读取,fold-into-sub-map折叠或展回。折叠需要子节点。 - 折叠:
POST /notes/fold。单次不超过 200 个,开销最小的写入。叶子节点跳过。 - 删除卡:
POST /notes/delete。单次不超过 50 个,同集。只删点名卡,子卡接到祖父或升为顶层。先打快照,确认子卡去向。outcome为 deleted 表示删除,为 hidden 表示隐藏。 - 删集:
POST /study-sets/{id}/delete。expectedTitle与库中值完全一致。默认隐藏卡片、保留划线、自动打快照。preDeleteSnapshotId用于回退。 - 评论、标题、正文:
comments追加,整条 note URL 形成双向链接。comments/{index}改写或删除,index 取 1 到 N,附 expectedPrefix。title与text改写附 expectedPrefix。摘录卡改文会导致文字与原文脱钩,提前说明。 - hashtag:读
batch-get.hashtags或集的study-sets/{id}/hashtags。写POST /notes/hashtags,使用完整叶路径。remove 默认精确匹配,replace 空数组表示清空,确认后执行。写完回读。 - 样式:
POST /notes/metadata。colorIndex取 0 到 15,fillIndex取 -1 到 2。先读 note-palette。 - 复习卡组:
decks新建与列出,decks/{id}/cards新增与列出。sourceNoteId必填。question与questionContentId互斥。挖空写在 question。重复新增为更新。删单卡用/notes/delete。删整组用/study-sets/{deckId}/delete,keepHighlights为 false 时删干净。 - 快照:批量写前打快照。复用时返回
created:false,仍可作基线。回退前确认版本。目标集打开时返回STUDY_SET_IN_USE,关闭后再试。 - 文档进出:
upload以字节加 query 方式上传,confirm=1,看addedToStudySet与warnings。study-sets/{id}/documents新增看becameMainDocument。study-sets/{id}/documents/{id}/delete移除前先 dry-run 查看 notesLosingSource,并保存 preRemoveSnapshotId。library/documents/{id}/delete仅干净撤销,否则返回 409。 - 导航:
notes/{id}/focus、study-sets/{id}/open、decks/{id}/open。没有 confirm。跳转抢占屏幕,异步执行,之后用GET /context确认。读取当前状态用GET /context。 - 界面:
GET /ui-state读取,POST /ui-state/apply写入差量补丁。异步执行,queued 为 true 表示已提交,约 2 秒后用GET /ui-state确认。