@getnote/cli 1.7.1 → 1.8.1
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/README.md +66 -21
- package/package.json +1 -1
- package/prebuilt/darwin-amd64/getnote +0 -0
- package/prebuilt/darwin-arm64/getnote +0 -0
- package/prebuilt/linux-amd64/getnote +0 -0
- package/prebuilt/linux-arm64/getnote +0 -0
- package/prebuilt/windows-amd64/getnote.exe +0 -0
- package/prebuilt/windows-arm64/getnote.exe +0 -0
- package/skills/getnote-kb/SKILL.md +2 -0
- package/skills/getnote-note/SKILL.md +44 -3
- package/skills/getnote-search/SKILL.md +34 -20
package/README.md
CHANGED
|
@@ -1,23 +1,5 @@
|
|
|
1
1
|
# 得到大脑(Get笔记) CLI
|
|
2
2
|
|
|
3
|
-
## 1.7.1 查找修复
|
|
4
|
-
|
|
5
|
-
修复订阅书库查询因布尔筛选字段而解析失败的问题,保留作者、书名和分页校验。随包 Skill 明确作者与书名的不同查法,补充课程、文稿、评论的来源补查,并区分全部笔记与划线。
|
|
6
|
-
|
|
7
|
-
## 1.7.0 查找与引用
|
|
8
|
-
|
|
9
|
-
支持书库身份与书名查找、引用来源筛选及完整分页。列表用于定位,完整内容由 `getnote note <id>` 读取;引用原文与个人评论分别返回。搜索保留部分结果与资源身份,Top-K 不代表全量。随包五个领域 Skill 已同步这些调用规则。
|
|
10
|
-
|
|
11
|
-
## v1.6:文件上传与独立报告
|
|
12
|
-
|
|
13
|
-
- `getnote note chapters <id> -o json` 读取章节;`note timeline` 保留录音 moments,`marks <note_id>` 独立读取标记。
|
|
14
|
-
- `sprouts <YYYY-MM>` 列表从 `data.tasks[].sprouts[]` 取真实报告 id,再运行 `sprout <id>`;不要将 task_id 当报告 id。
|
|
15
|
-
- `file-capabilities` 查询当前格式、大小及页数限制,不在 Agent 中写死限制。
|
|
16
|
-
|
|
17
|
-
云 MCP 已授权时,无需再登录 CLI:MCP 获取临时上传 token,将 JSON 经受控文件或 stdin 交给 `getnote upload <file> --max-size-bytes <能力接口上限>`。此命令不读取 CLI 身份凭证,只向 OSS 上传,返回 `stage=oss_uploaded` 和文件元数据。随后由同一个已授权 MCP 提交知识库入库并查询最终 `SUCCESS`;上传成功不等于入库完成。不要将 token 放入命令参数、聊天或日志。
|
|
18
|
-
|
|
19
|
-
CLI 已登录时也可使用 `file-token <extension>` 获取 token、`upload` 直传,再用 `file-add <topic_id> <directory_id> --metadata-file <上传结果文件>` 提交。临时 token 不提供通用 OpenAPI 权限。
|
|
20
|
-
|
|
21
3
|
得到大脑(Get笔记)的命令行工具,让你在终端和 AI Agent 里直接管理笔记和知识库。
|
|
22
4
|
|
|
23
5
|
存链接、记文字、搜笔记、管知识库——一条命令搞定,支持脚本和 AI Agent 调用。
|
|
@@ -164,6 +146,27 @@ getnote search "LLM 推荐阅读"
|
|
|
164
146
|
getnote search "产品设计" --kb vnrOAaGY
|
|
165
147
|
```
|
|
166
148
|
|
|
149
|
+
**按书名、作者或课程查找**
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
# 按书名查书库;query 不匹配作者
|
|
153
|
+
getnote kbs --scope BOOKSPACE --query '沙之书' --all -o json
|
|
154
|
+
|
|
155
|
+
# 只有作者线索时用 author
|
|
156
|
+
getnote kbs --scope BOOKSPACE --author '博尔赫斯' --all -o json
|
|
157
|
+
|
|
158
|
+
# 使用返回的 topic_id 读取全部笔记;只要划线时再加 --note-type ref
|
|
159
|
+
getnote kb '<topic_id>' --page-size 20 --all -o json
|
|
160
|
+
|
|
161
|
+
# 得到课程文稿:先列出引用定位信息,再核对课程名和文稿标题
|
|
162
|
+
getnote notes --source dedao --note-type ref --reference-type course_article --page-size 20 -o json
|
|
163
|
+
|
|
164
|
+
# 定位后读取完整内容
|
|
165
|
+
getnote note '<note_id>' -o json
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
书名和作者同时传入时须同时匹配。课程列表没有课程名筛选参数,AI 根据返回的来源元数据匹配,并按 `pagination.next_cursor` 继续查询。语义搜索 Top-K 不是全部笔记;搜索为空也不能证明没有相关内容。
|
|
169
|
+
|
|
167
170
|
**场景 3:管理知识库**
|
|
168
171
|
```bash
|
|
169
172
|
# 列出默认知识库;特殊类型使用 --scope
|
|
@@ -215,6 +218,23 @@ npx skills add iswalle/getnote-cli -y -g
|
|
|
215
218
|
|
|
216
219
|
## 完整命令参考
|
|
217
220
|
|
|
221
|
+
### 课程定位与按需正文
|
|
222
|
+
|
|
223
|
+
以下为本分支的增量能力,需当前服务端声明对应 capability;安装 CLI 不代表服务已发布。旧命令与默认正文行为保留。
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
getnote references list --source dedao --resource-type course --query '课程名' --author '准确老师姓名' --all -o json
|
|
227
|
+
getnote notes --source dedao --course-type '66' --course-id '<返回的course_id>' --note-type ref --all -o json
|
|
228
|
+
getnote notes batch '<note_id_1>' '<note_id_2>' --fields original --max-total-chars 32000 -o json
|
|
229
|
+
getnote search '主题' --response-mode snippet --max-snippet-chars 400 -o json
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
课程名可 exact/prefix,老师精确匹配;query/author 至少一个。ID 全程用字符串,课程 ID 与课节 ID 不互换。查课程需沿空页的有效游标继续;课程与知识库交集、课程内语义搜索尚未开放。批量只读个人笔记,最多20个去重ID、默认32000/上限64000个Unicode码点及1MiB;保留 status/pending_ids,整条超预算可改用旧单条详情读取。snippet full 表示完整命中片段,不能冒充全文。新选项要求当前接口 capability 与筛选回显,不接受旧服务忽略筛选的成功结果。
|
|
233
|
+
|
|
234
|
+
课程响应的 `coverage` 说明实际覆盖范围,省略类型也不表示包含未关联课程身份的心得或录音。JSON 输出及 `--all` 保留该对象中的未知类型和新增字段;任一页的 `partial` 或警告都会保留,存在未解决问题时 `traversal.completed=false`,不能因分页结束便声称结果完整。
|
|
235
|
+
|
|
236
|
+
错误保留合法值和等待建议;已知只读瞬时429最多额外重试2次,累计等待不超过5秒。配额耗尽、写操作和凭证签发不自动重试。
|
|
237
|
+
|
|
218
238
|
### 认证
|
|
219
239
|
|
|
220
240
|
```
|
|
@@ -279,11 +299,12 @@ getnote note share <id> 生成公开分享链接
|
|
|
279
299
|
|
|
280
300
|
### 字段语义说明(适合 AI Agent 参考)
|
|
281
301
|
|
|
282
|
-
|
|
302
|
+
不同笔记类型的原文字段不同;`content` 可能是正文、AI 总结或个人评论:
|
|
283
303
|
|
|
284
|
-
| 笔记类型 | 原文字段 |
|
|
304
|
+
| 笔记类型 | 原文字段 | 正文 / 总结 / 评论字段 |
|
|
285
305
|
|---------|---------|------------|
|
|
286
|
-
| 普通文字笔记 | `content` | `content
|
|
306
|
+
| 普通文字笔记 | `content` | `content`(正文) |
|
|
307
|
+
| 引用 / 划线笔记 | `ref_content` | `content`(个人评论) |
|
|
287
308
|
| 链接/网页笔记 | `web_content` | `content` |
|
|
288
309
|
| 录音笔记 | `audio_original` | `content` |
|
|
289
310
|
| 知识库博主内容 | `post_media_text`(via `kb blogger-content`)| `content` |
|
|
@@ -312,6 +333,11 @@ getnote tag list <note_id> 查看笔记的所有标签
|
|
|
312
333
|
```
|
|
313
334
|
getnote kbs 列出 DEFAULT 知识库
|
|
314
335
|
--scope <scope> 指定 DEFAULT / BOOKSPACE / CUSTOMER / TEAMSPACE
|
|
336
|
+
--query <名称> 按知识库名 / 书名查找
|
|
337
|
+
--author <作者> 按书籍作者查找(仅 BOOKSPACE)
|
|
338
|
+
--book-id <book_id> 按书籍 ID 查找(仅 BOOKSPACE)
|
|
339
|
+
--page-size <n> 每页数量;新查询默认 20
|
|
340
|
+
--all 按返回分页遍历;kbs-sub 同样支持上述查找参数
|
|
315
341
|
|
|
316
342
|
getnote kb <topic_id> 知识库内的笔记
|
|
317
343
|
--limit <n>
|
|
@@ -348,6 +374,18 @@ gnote note quick <note_id>
|
|
|
348
374
|
|
|
349
375
|
---
|
|
350
376
|
|
|
377
|
+
### 文件上传与独立报告
|
|
378
|
+
|
|
379
|
+
- `getnote note chapters <id> -o json` 读取章节;`note timeline` 保留录音 moments,`marks <note_id>` 独立读取标记。
|
|
380
|
+
- `sprouts <YYYY-MM>` 列表从 `data.tasks[].sprouts[]` 取真实报告 id,再运行 `sprout <id>`;不要将 task_id 当报告 id。
|
|
381
|
+
- `file-capabilities` 查询当前格式、大小及页数限制,不在 Agent 中写死限制。
|
|
382
|
+
|
|
383
|
+
云 MCP 已授权时,无需再登录 CLI:MCP 获取临时上传 token,将 JSON 经受控文件或 stdin 交给 `getnote upload <file> --max-size-bytes <能力接口上限>`。此命令不读取 CLI 身份凭证,只向 OSS 上传,返回 `stage=oss_uploaded` 和文件元数据。随后由同一个已授权 MCP 提交知识库入库并查询最终 `SUCCESS`;上传成功不等于入库完成。不要将 token 放入命令参数、聊天或日志。
|
|
384
|
+
|
|
385
|
+
CLI 已登录时也可使用 `file-token <extension>` 获取 token、`upload` 直传,再用 `file-add <topic_id> <directory_id> --metadata-file <上传结果文件>` 提交。临时 token 不提供通用 OpenAPI 权限。
|
|
386
|
+
|
|
387
|
+
---
|
|
388
|
+
|
|
351
389
|
## 全局参数
|
|
352
390
|
|
|
353
391
|
| 参数 | 说明 |
|
|
@@ -425,6 +463,9 @@ $ getnote search "工作日志" --limit 7 -o json
|
|
|
425
463
|
|
|
426
464
|
| 日期 | 版本 | 新能力 | 适合怎么用 |
|
|
427
465
|
|------|------|--------|------------|
|
|
466
|
+
| 2026-10-13 | **v1.7.1** | 修复订阅书库布尔筛选字段解析错误;完善随包 Skill 的作者、课程、文稿和评论查找规则 | 按作者查书籍;搜索未命中时在同一来源范围补查,区分全部笔记与划线 |
|
|
467
|
+
| 2026-10-13 | **v1.7.0** | 支持书名、作者、书籍 ID 定位;引用来源与时间筛选;保留分页和来源元数据 | 列表定位后通过 detail 读取完整笔记,分别核对原文与评论;Top-K 不代表全量 |
|
|
468
|
+
| 2026-09-24 | **v1.6.0** | 支持文件上传、临时 OSS 上传凭据,以及独立标记、发芽和章节时间线 | 云 MCP 已授权时可用 CLI 直传文件,提交入库后确认解析状态 |
|
|
428
469
|
| 2026-09-02 | **v1.5.8** | 1. `kbs` 与 `kbs-sub` 默认只返回 `DEFAULT` 知识库<br>2. 新增 `--scope`,可按 `CUSTOMER`、`BOOKSPACE`、`TEAMSPACE` 精确读取<br>3. 订阅列表不再混入自己创建的知识库 | 避免书籍库和自有库挤占订阅列表分页;需要特殊知识库时显式选择 scope |
|
|
429
470
|
| 2026-08-19 | **v1.5.6** | 1. `getnote update` 默认升级 CLI、同步五个领域 Skill 并运行诊断<br>2. capabilities 2.2 提供机器可读的安装、更新、验证与平台托管边界<br>3. 移除失效的 `install.sh` 引导 | 用户只说“安装”或“更新”即可,AI Agent 无需让用户选择内部组件,并能按统一成功条件完成验收 |
|
|
430
471
|
| 2026-08-19 | **v1.5.5** | 1. 一键安装自动识别本机 AI Agent,并按平台显示安装结果<br>2. 新增 GitHub Copilot、Gemini CLI、Windsurf、OpenCode 和 Cline 自动安装<br>3. OpenClaw(小龙虾)和 QClaw 仅在检测到时提供 ClawHub 确认入口<br>4. 保留 `SKILLS` 品牌开场,隐藏底层安装术语<br>5. `doctor` 按平台真实目录检查 Skill 状态 | 用户只需运行一次安装命令;AI 能根据结构化结果判断安装状态并给出明确修复动作 |
|
|
@@ -448,3 +489,7 @@ $ getnote search "工作日志" --limit 7 -o json
|
|
|
448
489
|
## License
|
|
449
490
|
|
|
450
491
|
[MIT](https://opensource.org/licenses/MIT)
|
|
492
|
+
|
|
493
|
+
## 录音台与录音卡笔记
|
|
494
|
+
|
|
495
|
+
录音台(AI录音台/MOAN)按 `getnote notes --source vendor_moan --all -o json` 查找,录音卡(GetSeed)使用 `--source getseed`。来源和 note_type 独立:查设备全部笔记不额外限制 audio/meeting,录音卡长录音和闪念均保留。可叠加创建/编辑时间与知识库条件;完整性以真实分页、partial/warnings 和授权范围为准,不包含设备端未同步的会议记录。转写用 `getnote note transcript <note_id>` 读取。
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -79,6 +79,8 @@ getnote note original '<返回的 note_id>' -o json
|
|
|
79
79
|
- `--all` 只有退出码为 0、`success=true`、`data.traversal.completed=true` 且 `pagination_verified=true` 才能确认完成了当前授权范围的遍历。按字符串笔记 ID 去重;`traversal.returned_count` 是本次实际取回数,`traversal.total_count=null` 仍表示服务端精确总数未知。旧 `total` 保留兼容语义,不能当新的筛选总数。
|
|
80
80
|
- 手动翻页或 MCP:保持 scope、全部筛选和 page_size 不变;按 `pagination.next_page` / `next_cursor` 原样继续,直到 `has_more=false`。记录已经访问的页码/游标和笔记 ID;循环、空页仍声称有下一页、重复结果无进展或中途失败都不能声称“全部找到”。
|
|
81
81
|
- 书库不存在、无匹配、或库内无划线,不等于账号没有该书来源的引用。用户已明确得到电子书时,可用 `getnote notes --source dedao --note-type ref --reference-type ebook --page-size 20 -o json` 按来源补查,在 `reference.title/author/book_id` 匹配;按搜索参考的预算和分页规则继续,必要时用真实 `reference.resource_id` 精确筛选。只对当前授权范围下结论,不新建库、不修改归属。
|
|
82
|
+
- 平台未限定且书库路线无匹配时,可用 `getnote notes --note-type ref --page-size 20 -o json` 读取个人引用定位信息,再按真实 `reference.resource_type/book_id/title/author` 核对书籍候选;保留已知时间、平台及知识库约束,不自加 dedao。一次发现最多5页,未翻完说明范围未查完;只按需读取匹配候选正文。用户限定只查某库时就在该库补查,不扩大到个人笔记。
|
|
83
|
+
- `book_info.author` 是书籍目录作者,`reference.author` 是同步引用保存的来源作者。两者冲突时分别标注来源,把引用保留为待核验候选,不把空书库查询说成账号没有笔记,也不直接认定该候选就是所问作者的著作;不会自动改写作者或笔记归属。
|
|
82
84
|
|
|
83
85
|
## 文件夹和归档流程
|
|
84
86
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: getnote-note
|
|
3
|
-
description:
|
|
3
|
+
description: 使用得到大脑保存文字、链接、图片和长笔记,按录音台或录音卡来源查找笔记,查看笔记详情、原文、录音转写、附件、时间线、标记、发芽报告、快捷笔记和会议待办,并安全更新、删除或分享笔记。标记、发芽与时间线分别读取。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# 得到大脑笔记
|
|
@@ -28,6 +28,7 @@ description: 使用得到大脑保存文字、链接、图片和长笔记,查
|
|
|
28
28
|
| 保存文字、链接或本地图片 | `getnote save` |
|
|
29
29
|
| 查询异步保存任务 | `getnote task` |
|
|
30
30
|
| 查看最近笔记 | `getnote notes` |
|
|
31
|
+
| 按预算读取少量个人笔记正文/原文 | `getnote notes batch` |
|
|
31
32
|
| 查看详情或字段 | `getnote note` |
|
|
32
33
|
| 引用/链接/文字原文 | `getnote note original` |
|
|
33
34
|
| 录音、会议或课堂转写 | `getnote note transcript` |
|
|
@@ -45,6 +46,21 @@ description: 使用得到大脑保存文字、链接、图片和长笔记,查
|
|
|
45
46
|
|
|
46
47
|
不确定参数时先运行目标命令 `--help`。
|
|
47
48
|
|
|
49
|
+
## 录音台与录音卡来源定位
|
|
50
|
+
|
|
51
|
+
设备来源与笔记类型是两个独立条件。用户明确说“录音台”“AI录音台”“墨案/MOAN录音台”时使用 `--source vendor_moan`;“录音卡”“GetSeed录音卡”使用 `--source getseed`。查设备全部笔记时只限定来源,不额外加 `--note-type audio` 或 `meeting`,避免漏掉其他实际类型;录音卡长录音和闪念也由同一个 getseed 来源覆盖。用户明确只要长录音/闪念时,才分别叠加 `recorder_audio` / `recorder_flash_audio`。
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
getnote notes --source vendor_moan --page-size 20 --all -o json
|
|
55
|
+
getnote notes --source getseed --page-size 20 --all -o json
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
“昨天/上周的录音台笔记”同时保留对应 `--created-from/to`,按用户时区换算为 RFC3339,from 包含、to 不包含;明确修改时间才改用 edited 或 record-updated。翻页始终保留 source、时间、知识库等原条件,核对 `applied_filters.source` 和每条笔记的 `source`,按真实游标继续并按字符串 note_id 去重。仅在遍历结束、没有未解决的 partial/warnings 或错误时,才能说当前授权范围已遍历;旧 total 不是设备范围的总条数。
|
|
59
|
+
|
|
60
|
+
结果只涵盖已经同步成笔记且当前账号有权读取的主笔记,不代表设备端未同步、尚未形成笔记的全部会议记录。空结果不能改查其他来源后声称完成,不能用“AI录音台”标签或标题猜来源。只说“录音笔记”而未限定设备时不加 vendor_moan/getseed;按已知录音模式核对真实类型,模式不明时保留不同类型候选并说明范围。
|
|
61
|
+
|
|
62
|
+
来源内有正文主题时,先在该来源和时间范围列出候选,再按需读取目标正文核实;`search` 不提供设备来源筛选,不能把全局 Top-K 后过滤当作该设备完整搜索。录音台/录音卡转写使用 `getnote note transcript '<note_id>' -o json`,不把 AI 总结、preview 或缺失转写当作原文。
|
|
63
|
+
|
|
48
64
|
## 来源筛选、轻量定位与原文
|
|
49
65
|
|
|
50
66
|
列表接口只返回定位信息,再用详情接口读取完整笔记。`display_title` 是展示标题,不覆盖原始 `title`;引用笔记空标题很正常。`preview` 是带来源和截断标记的定位片段,不是全文。
|
|
@@ -62,9 +78,24 @@ getnote note original '<note_id>' -o json
|
|
|
62
78
|
| link | web_page.content | 通常是摘要 |
|
|
63
79
|
| audio / local_audio | audio.original | 通常是摘要 |
|
|
64
80
|
|
|
81
|
+
录音按真实类型选择:即时录音/普通录音用 `--note-type audio`,上传的音频文件用 `local_audio`,自己录制的课堂笔记用 `class_audio`,会议录音用 `meeting`,系统内录用 `internal_record`,录音卡长录音/闪念分别用 `recorder_audio` / `recorder_flash_audio`。这些类型与得到课程引用不同;用户未限定平台时不加 `--source dedao` 或课程筛选。只说“录音”且模式不明时保留候选并说明类型,不能把上传音频当即时录音。
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
getnote notes --note-type audio --all -o json
|
|
85
|
+
getnote notes --note-type local_audio --all -o json
|
|
86
|
+
```
|
|
87
|
+
|
|
65
88
|
`original` 只按真实类型读取上述字段,并返回 `original_source`;原文缺失或类型不支持会报错,不能把评论或定位片段补成原文。列表中的 `content_state` 会标明正文被省略;详情接口返回完整正文和元数据。用 `metadata_state.reference/topics` 区分完整、部分、不可用的元数据;缺失的作者、书 ID、来源 URL 不猜测补写。
|
|
66
89
|
|
|
67
|
-
|
|
90
|
+
得到课程无需知识库:已知课程名/老师时先按搜索 Skill 执行 `getnote references list --source dedao --resource-type course --query '<课程名>' --all -o json`,再用真实课程容器身份筛选;author 精确匹配老师,query 可显式 prefix。同名版本先消歧,topics=[] 不阻断;不要求用户提供内部 ID。
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
getnote notes --source dedao --course-type '<course_type>' --course-id '<course_id>' --note-type ref --all -o json
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
课程容器身份是 course_type+course_id;当前66,不能用课节65的 resource_id 代替。课程筛选包含课程直接引用和所属课节,增量 reference.course 不改旧 resource_id。首版 course+topic_id 不支持,不用个人笔记冒充知识库交集。新能力缺失时报告不支持,不删除筛选继续查询。
|
|
97
|
+
|
|
98
|
+
单篇文稿已有真实 reference ID 或文章 URL 时继续使用旧精确筛选:
|
|
68
99
|
|
|
69
100
|
```bash
|
|
70
101
|
getnote notes --source dedao --note-type ref --reference-type course_article --reference-id '<reference.resource_id>' --all -o json
|
|
@@ -72,12 +103,22 @@ getnote notes --source dedao --note-type ref --reference-type course_article --r
|
|
|
72
103
|
getnote notes --source dedao --note-type ref --article-url '<reference.article.url>' --all -o json
|
|
73
104
|
```
|
|
74
105
|
|
|
75
|
-
平台值取 `reference.source`;资源类型取 `reference.resource_type`,不要用标签或内部 ptype 猜枚举。`--reference-id` 必须同时传 `--source` 和 `--reference-type`。课程文稿的
|
|
106
|
+
平台值取 `reference.source`;资源类型取 `reference.resource_type`,不要用标签或内部 ptype 猜枚举。`--reference-id` 必须同时传 `--source` 和 `--reference-type`。课程文稿的 resource_id 指向单篇文稿,课程筛选再加 reference-id 时取交集。resource_id、course_id、original_note_id、书 ID 与笔记 ID 是不同身份;全程用返回的字符串。课程主页不传到 --article-url,也不解析编码 ID;文章 URL 保留 query/fragment。同篇文稿的不同笔记 ID 仍是不同划线。
|
|
76
107
|
|
|
77
108
|
创建、正文编辑、记录更新是三个独立时间轴。按需使用 `--created-from/to`、`--edited-from/to`、`--record-updated-from/to`,值必须为带时区 RFC3339;区间 from 包含、to 不包含。不得把 `updated_at` 当正文编辑时间。“今天/上周”按用户当前日期和时区换算边界;保存时间不是文章发布日期,不把“最近”擅自解释成固定一个月。用户同时限定课程/知识库时保留这些条件。
|
|
78
109
|
|
|
79
110
|
新参数需要服务端对应 `meta.capabilities` 且 `applied_filters` 与请求一致;不支持时停止该查询并说明升级服务/客户端的需要,不自动移除筛选。全量按知识库参考中的分页规则验收;只拿一页或一次语义搜索,不能说“全部找到”。
|
|
80
111
|
|
|
112
|
+
分页结束与来源完整性分别判断:`partial=true`、`warnings`、候选 `metadata_state=partial` 仍须说明。特别是 `course_directory_no_lessons` 表示课程目录缺少课节,即使 `has_more=false` 或 `traversal.completed=true` 也不能保证找全老师的所有课程;保留已找到的真实结果和缺口,不通过删除筛选或重复同一请求消除警告。
|
|
113
|
+
|
|
114
|
+
## 有预算的批量正文读取
|
|
115
|
+
|
|
116
|
+
不超过20个已定位个人笔记用 `getnote notes batch '<note_id_1>' '<note_id_2>' --fields original -o json`。默认 fields=content,ref_content,reference;original 显式选择,引用原文来自 ref_content,个人评论来自 content。默认32000个Unicode码点,--max-total-chars 可设1..64000,服务端另有1MiB上限;不是给旧单条详情加截断。
|
|
117
|
+
|
|
118
|
+
退出码0和 success=true 只代表批量调用成功:逐条检查 status=ok/unavailable/failed/deferred_budget、content_state、partial、pending_ids。成功项正文完整,deferred_budget 整条待读,不能把 omitted 当空正文;未知未来状态原样保留并说明未确认。用户确需全文时再用旧 `getnote note original '<真实note_id>' -o json` 补读,不自动并发20次单条请求。不存在与无权统一 unavailable,不判断对象是否存在;首版不批量读知识库共享笔记,不绕过原单条权限。
|
|
119
|
+
|
|
120
|
+
参数错误读取 field/supported_values;限流保留 retry_after_seconds。CLI 已对已知只读瞬时429做最多额外2次、累计等待5秒重试;Agent 不叠加重试,日/月配额、写操作与上传凭证不自动重试。
|
|
121
|
+
|
|
81
122
|
## 保存流程
|
|
82
123
|
|
|
83
124
|
### 文字与长文
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: getnote-search
|
|
3
|
-
description:
|
|
3
|
+
description: 在得到大脑查找笔记:按录音台、录音卡来源,以及书名、课程名、文稿标题、作者、评论或模糊记忆选择来源定位与语义搜索,返回真实笔记和链接。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# 得到大脑搜索
|
|
@@ -15,6 +15,7 @@ description: 在得到大脑查找笔记:按书名、课程名、文稿标题
|
|
|
15
15
|
|
|
16
16
|
## 先选查找路径
|
|
17
17
|
|
|
18
|
+
- 明确录音台或录音卡:先读笔记 Skill 的“录音台与录音卡来源定位”,分别用 `notes --source vendor_moan` / `notes --source getseed`,保留时间与知识库条件。设备全部笔记不默认加 note-type,也不先全局语义搜索。
|
|
18
19
|
- 明确书籍(书名或书籍作者),尤其要“全部划线”:先读知识库参考。书名用 `kbs --scope BOOKSPACE --query`;只有作者名时用 `kbs --scope BOOKSPACE --author` 并省略 `--query`,不能把作者塞进只匹配名称的 query。书名和作者都已知时才同时传,两者为 AND 条件。必要时用真实 `--book-id` 消歧,再按用户要“全部笔记”还是“划线”选择是否加 `--note-type ref`,需要全文时按 ID 调用 `note`。
|
|
19
20
|
- 明确文章/课程(包括“某老师的课”):按下方“课程、文稿与评论定位”执行。已有真实来源 ID/文章链接时直接精确筛选;没有候选也能按来源列定位信息。`topics=[]` 不阻断这条路线。
|
|
20
21
|
- 只有主题或模糊记忆:语义搜索 → 按字符串笔记 ID 去重 → 对选中候选读详情/原文。Top-K(最大 10)不是完整清单;零命中也不能证明全库没有相关笔记。
|
|
@@ -26,9 +27,10 @@ description: 在得到大脑查找笔记:按书名、课程名、文稿标题
|
|
|
26
27
|
| “找博尔赫斯的书籍笔记” / “找提到博尔赫斯的笔记” | 前者按书籍 author 定位;后者是内容主题搜索,不把所有提到一个人的笔记都限制为其著作。 |
|
|
27
28
|
| “某课程共读《某本书》那篇文稿” | 明确课程/文稿时优先课程引用路径,书名在这里是文稿线索,不跳去 BOOKSPACE。 |
|
|
28
29
|
| “课程笔记” | 先区分得到课程引用与自己录制的课堂笔记;只有用户明确来源时才设 dedao/course_article,不能把课堂录音排除掉。 |
|
|
30
|
+
| “即时录音” / “上传的音频” | 前者用 notes --note-type audio,后者用 local_audio;课堂录音为 class_audio,会议为 meeting。平台未限定时不加 dedao 或课程条件。 |
|
|
29
31
|
| “某库/某书里关于某主题” | 先定位真实 topic_id,再 search --kb;未命中按知识库参考在该库列表补查,不把空搜索当作库内没有,不得遗漏库范围。 |
|
|
30
32
|
| “上周保存/昨天修改的某课程笔记” | 列表用对应时间筛选;search 没有时间/来源筛选参数,语义候选需核对 timestamps/reference。不能把时间词拼进 query 就宣称完成了时间筛选。 |
|
|
31
|
-
| “某课程链接下的笔记” / “这篇文稿链接的划线” |
|
|
33
|
+
| “某课程链接下的笔记” / “这篇文稿链接的划线” | 已知课程名/老师时查课程容器;只有主页 URL 时核对真实 reference.url,不猜课程 ID。文稿 URL 才传 --article-url。 |
|
|
32
34
|
| “全部笔记” / “全部划线” | 前者不默认加 note-type ref;书籍库可能有心得等非引用笔记。得到课程引用路径只能证明该来源下的划线集合,不能涵盖用户另写的课程心得或录音。 |
|
|
33
35
|
|
|
34
36
|
多条件查询要保留用户全部约束;从候选转入精确文稿列表时也保留已指定的 topic/time/source。条件冲突或作者、版本不符时说明实际候选,不静默删除条件。有正文主题限制时,来源匹配只证明“来自这里”,还需核对正文;截断 preview 未出现某词不能当作全文不包含。多个库/多本书合并结果时按字符串 note_id 去重,不能合并不同 ID 的不同划线。
|
|
@@ -37,37 +39,48 @@ description: 在得到大脑查找笔记:按书名、课程名、文稿标题
|
|
|
37
39
|
|
|
38
40
|
## 课程、文稿与评论定位
|
|
39
41
|
|
|
40
|
-
|
|
42
|
+
先区分课程容器和单篇文稿;`search` 是 Top-K 语义召回,来源元数据出现在结果中不能证明课程范围参与召回。课程名、老师、主题、评论、时间和真实知识库范围均需保留。
|
|
41
43
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
44
|
+
### 已知课程名或老师:先查课程容器
|
|
45
|
+
|
|
46
|
+
使用 `getnote references list`,无需用户提供内部 ID,也不需要先建知识库:
|
|
45
47
|
|
|
46
48
|
```bash
|
|
47
|
-
getnote
|
|
48
|
-
|
|
49
|
-
getnote notes --source dedao --note-type ref --reference-type course_article --page-size 20 --cursor '<pagination.next_cursor>' -o json
|
|
49
|
+
getnote references list --source dedao --resource-type course --query '<课程名>' --author '<准确老师姓名>' --match-mode exact --all -o json
|
|
50
|
+
getnote notes --source dedao --course-type '<course_type>' --course-id '<course_id>' --note-type ref --all -o json
|
|
50
51
|
```
|
|
51
52
|
|
|
52
|
-
|
|
53
|
+
只传已知的 query/author,至少一个;二者为 AND 条件,query 只匹配课程名,author 精确匹配老师。课程名不完整时显式用 `--match-mode prefix`;不把“讲概率”这样的正文主题塞进课程名。结果同名或版本不明时列候选消歧;用返回的 `course_type`+`course_id`,当前支持66,不解析标题、URL或课节 ID 生成课程 ID。空结果页若 `pagination.has_more=true` 仍按真实 `next_cursor` 继续,保持所有条件;循环或失败表示遍历未完成。`--all` 成功的 `traversal.completed=true` 只证明当前同步、授权范围内的遍历,不是得到 App 的全部划线。
|
|
53
54
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
55
|
+
课程筛选同时包含课程直接引用和所属课节;显式增加 `--reference-type course_article` 会再限制为课节引用,`--reference-id` 仍是原课节 ID,组合按交集。需要时间条件时保留对应创建/编辑/记录更新时间参数。首版只支持个人笔记,course+topic_id 明确不支持;用户同时指定真实知识库时说明当前交集尚不可用,不能改查个人笔记后声称满足库范围。课程内语义搜索尚未开放,不能在全局 Top-K 后过滤冒充;可先精确列出课程笔记,再按需读正文核实主题。
|
|
56
|
+
|
|
57
|
+
新请求需当前服务端声明 `reference.resources.v1` / `note.course_filter.v1`,并核对 applied_filters。服务未支持时报告能力缺失,不自动删除课程条件继续,不把 CLI 安装成功当作服务已发布。旧参数和默认调用继续可用。
|
|
58
|
+
|
|
59
|
+
每页的 `partial`、`warnings` 和候选 `metadata_state` 都要保留。`course_directory_no_lessons` 表示目录缺少课节;翻到末页或 `traversal.completed=true` 不会消除这个缺口,回复“已找到这些,部分课程目录不完整,无法保证全部”。`candidate_work_budget` 且有下一游标时按原条件继续;游标结束后仍有目录警告,就保留部分完成结论,不改用账号全量扫描来宣称目录已经补齐。
|
|
60
|
+
|
|
61
|
+
### 已知单篇文稿或文章 URL
|
|
62
|
+
|
|
63
|
+
直接使用已验证的 `reference.resource_id`+`reference.resource_type` 或 `reference.article.url` 精确筛选:
|
|
61
64
|
|
|
62
|
-
|
|
63
|
-
|
|
65
|
+
```bash
|
|
66
|
+
getnote notes --source dedao --note-type ref --reference-type course_article --reference-id '<真实课节ID>' --all -o json
|
|
67
|
+
getnote notes --source dedao --note-type ref --article-url '<真实文章URL>' --all -o json
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
仅有文稿标题时可语义查候选并核对真实 reference.article.title;找到了课程线索就进入课程容器流程缩小范围。课程主页 URL 与文稿 URL 不互换,不从编码链接猜 ID。没有名称线索的课程主页可沿用既有来源列表核对 reference.url,但不得假称服务端按课程名筛选;定位前5页的预算到达时说明未完成,用户要全部时继续合法分页。metadata_state.reference 为 partial/unavailable 时保留为待核验候选,不能凭缺失字段排除。
|
|
64
71
|
|
|
65
|
-
|
|
72
|
+
### 读取原文与评论
|
|
73
|
+
|
|
74
|
+
对不超过20个已定位的个人笔记,使用 `getnote notes batch '<note_id_1>' '<note_id_2>' --fields original -o json`;引用原文来自 ref_content,查个人评论改用 fields=content。保留每条 status、content_state、pending_ids、partial;deferred_budget 表示整条待读,不能说完整,也不自动并发20次单条读取。用户确需未读全文时使用旧 `getnote note original '<note_id>' -o json`。知识库共享详情继续原单条权限路径,不用个人批量绕过权限。
|
|
75
|
+
|
|
76
|
+
只记得评论时先语义搜索实质文本并读 content 核对;已指定课程就先按课程缩小,不因 preview 没出现评论而排除。定位候选多于20条时保留用户线索继续缩小或分页按需读取,不下载整个账号正文。同一篇文稿的不同笔记 ID 是不同划线,不按文章 ID 合并。
|
|
66
77
|
|
|
67
78
|
## 语义搜索执行步骤
|
|
68
79
|
|
|
69
80
|
仅当上面的路径选择需要语义搜索时执行;没有指定知识库不等于必须先语义搜索。
|
|
70
81
|
|
|
82
|
+
定位时可显式使用 `getnote search '<主题>' --response-mode snippet --max-snippet-chars 400 -o json`,需当前接口声明 search.snippet.v1。旧调用不加参数仍返回原契约。摘要 full 只表示本次命中的完整片段,不是全文;保留 snippet_source、truncated、content_state 和资源身份,未知来源/类型原样保留。需要全文时读真实笔记详情。
|
|
83
|
+
|
|
71
84
|
1. 用户没有指定知识库时,执行 `getnote search <query> --limit <1-10> -o json`。默认上限是 10,不能自行放大。
|
|
72
85
|
2. 用户指定知识库名称时,先按其类型执行 `getnote kbs --scope <scope> -o json`;默认查 `DEFAULT`,书籍、客户档案和团队知识库分别使用 `BOOKSPACE`、`CUSTOMER`、`TEAMSPACE`。用返回的真实 `topic_id` 和 `scope` 匹配;同名或意图不明确时必须让用户选择。
|
|
73
86
|
3. 已确认知识库后执行 `getnote search <query> --kb <topic_id> --limit <1-10> -o json`。
|
|
@@ -111,6 +124,7 @@ getnote search "客户反馈" --kb <topic_id> --limit 5 -o json
|
|
|
111
124
|
## 失败、隐私与后续动作
|
|
112
125
|
|
|
113
126
|
- `success=false` 或退出码非 0:回复失败步骤、`error.message` / `error.reason`、是否 `retryable` 和可选 `request_id`;不要将 HTTP 成功或空输出说成搜索成功。
|
|
127
|
+
- 参数错误先读取 field/supported_values;限流保留 retry_after_seconds。CLI 已对已知只读瞬时429做最多额外2次、累计等待5秒的重试,Agent 不再叠加无界重试;日/月配额和写操作不自动重试。
|
|
114
128
|
- 若 CLI 提示“搜索服务响应超时”,这是检索未完成,不是“没有结果”。建议稍后重试,或缩小关键词、指定知识库后再试;不要伪造空列表。
|
|
115
129
|
- 检索结果可能包含私密正文。群聊或共享会话默认只展示标题、必要摘要和真实链接;用户明确要求后再展开全文。
|
|
116
130
|
- 用户选中结果后,复用返回的字符串 `note_id`,再读取 `getnote note <note_id> -o json`;不要从 URL 截取或转换为数字。
|