@coze/cli 0.1.8 → 0.2.0-alpha.9f6611

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.
Files changed (43) hide show
  1. package/README.md +344 -25
  2. package/lib/cli.js +3 -3
  3. package/lib/fetch-client-DC0c3ox3.js +1 -0
  4. package/lib/index-CkTEdvpA.js +1 -0
  5. package/lib/send-message.worker.js +1 -1
  6. package/lib/session-task-refresh.worker.js +1 -1
  7. package/lib/{task-worker-DhR5dnFi.js → task-worker-C2ZfSQY6.js} +1 -1
  8. package/package.json +4 -1
  9. package/skills/manifest.json +29 -0
  10. package/skills/using-coze-cli/SKILL.md +450 -0
  11. package/skills/using-coze-cli/coze-claw/MODULE.md +189 -0
  12. package/skills/using-coze-cli/coze-claw/references/coze-claw-agent-routing.md +45 -0
  13. package/skills/using-coze-cli/coze-claw/references/coze-claw-artifacts.md +52 -0
  14. package/skills/using-coze-cli/coze-claw/references/coze-claw-async-followup.md +266 -0
  15. package/skills/using-coze-cli/coze-claw/references/coze-claw-message.md +176 -0
  16. package/skills/using-coze-cli/coze-claw/references/coze-claw-podcast.md +73 -0
  17. package/skills/using-coze-cli/coze-claw/references/coze-claw-ppt.md +78 -0
  18. package/skills/using-coze-cli/coze-claw/references/coze-claw-progress.md +112 -0
  19. package/skills/using-coze-cli/coze-claw/references/coze-claw-session.md +144 -0
  20. package/skills/using-coze-cli/coze-code/MODULE.md +252 -0
  21. package/skills/using-coze-cli/coze-code/references/coze-code-db.md +537 -0
  22. package/skills/using-coze-cli/coze-code/references/coze-code-deploy.md +258 -0
  23. package/skills/using-coze-cli/coze-code/references/coze-code-domain.md +73 -0
  24. package/skills/using-coze-cli/coze-code/references/coze-code-env.md +82 -0
  25. package/skills/using-coze-cli/coze-code/references/coze-code-git.md +181 -0
  26. package/skills/using-coze-cli/coze-code/references/coze-code-message.md +240 -0
  27. package/skills/using-coze-cli/coze-code/references/coze-code-model.md +51 -0
  28. package/skills/using-coze-cli/coze-code/references/coze-code-preview.md +33 -0
  29. package/skills/using-coze-cli/coze-code/references/coze-code-project.md +176 -0
  30. package/skills/using-coze-cli/coze-code/references/coze-code-repo.md +285 -0
  31. package/skills/using-coze-cli/coze-code/references/coze-code-skill.md +117 -0
  32. package/skills/using-coze-cli/coze-code/references/coze-code-tools.md +47 -0
  33. package/skills/using-coze-cli/coze-file/MODULE.md +46 -0
  34. package/skills/using-coze-cli/coze-file/references/coze-file-upload.md +59 -0
  35. package/skills/using-coze-cli/coze-generate/MODULE.md +84 -0
  36. package/skills/using-coze-cli/coze-generate/references/coze-generate-audio.md +105 -0
  37. package/skills/using-coze-cli/coze-generate/references/coze-generate-image.md +80 -0
  38. package/skills/using-coze-cli/coze-generate/references/coze-generate-video.md +125 -0
  39. package/skills/using-coze-cli/coze-project/MODULE.md +125 -0
  40. package/skills/using-coze-cli/coze-project/references/coze-project-files.md +284 -0
  41. package/skills/using-coze-cli/coze-project/references/coze-project-query.md +177 -0
  42. package/lib/fetch-client-Qn1wyhrf.js +0 -1
  43. package/lib/index-Bl0Pqb9j.js +0 -1
@@ -0,0 +1,284 @@
1
+ # coze-project-files: 群文件操作参考
2
+
3
+ **这是 coze-project 模块的群文件操作参考。** 触发条件 / 协作流程 / 跨技能衔接见 [`../MODULE.md`](../MODULE.md); 群信息查询 (info / member / message) 见 [`coze-project-query.md`](coze-project-query.md)。本文件讲**群文件 CRUD 的详细语法 + shell 引用细节**。
4
+
5
+ 需要敲 `coze agent file ...` 时 Read 本文件。
6
+
7
+ ## CLI 调用约束 (所有 `coze agent` 命令通用)
8
+
9
+ **前提**:
10
+ - `coze` 在 PATH (平台保证), 已登录, 不要配 auth
11
+ - 每个命令必带 `--json` (省略 → `E1000 INVALID_ARGUMENT`)
12
+ - 每个命令必带 `--org-id "$account_id" --project-id "$group_id"` (从 `<coze-context>` 抄, 见 [`../MODULE.md`](../MODULE.md))
13
+
14
+ **输出信封** (stdout 成功):
15
+ ```json
16
+ { "code": 0, "msg": "...", "data": { ... } }
17
+ ```
18
+
19
+ **校验两层才用结果**: shell 退出码 == 0 **且** `.code == 0` (可能 0 退出但软失败)。
20
+
21
+ `jq` 模板 (注意 stderr 必须捕到文件, 否则失败时错误原因丢失):
22
+ ```bash
23
+ err=$(mktemp)
24
+ out=$(coze agent file read --org-id "$account_id" --project-id "$group_id" \
25
+ --file-path "$path" --json 2>"$err") \
26
+ || { cat "$err" >&2; rm -f "$err"; exit 1; }
27
+ rm -f "$err"
28
+ [ "$(echo "$out" | jq -r '.code')" = "0" ] \
29
+ || { echo "API error: $out" >&2; exit 1; }
30
+ echo "$out" | jq '.data'
31
+ ```
32
+
33
+ > ⚠️ **`$(...)` 只捕 stdout**——CLI 错误 JSON 走 stderr, 不重定向 (`2>"$err"`) 的话失败时 `$out` 是空的, 你完全看不到原因。这个 pattern 必须用, 不能省。
34
+
35
+ **错误码** (JSON 错误写 stderr, 非零退出):
36
+
37
+ | 代码 | 含义 | 怎么办 |
38
+ |---|---|---|
39
+ | `E1000` | 参数错 (缺 `--json` / 缺 ID / `--size`/`--limit` 非法) | 修命令重试 |
40
+ | `E5002` | 后端 / 服务端错 (`.code != 0`) | 把消息转给用户; **不要盲目重试** |
41
+
42
+ ## 群文件路径语义 (⚠️ 必读)
43
+
44
+ **所有 `--file-path` 参数都是绝对路径**, **必须 `/` 开头**, 相对的是**群文件目录根** (`/` 即群文件根)。不带 `/` 开头的路径会被后端拒绝。
45
+
46
+ - 列群文件根: `--file-path /` 或者不传 `--file-path`
47
+ - 根下的文件: `/example.md` (✅) / `example.md` (❌)
48
+ - 子目录: `/notes` (✅) / `notes` (❌)
49
+ - 子目录下的文件: `/notes/example.md` (✅) / `notes/example.md` (❌)
50
+
51
+ `file list` 返回的 `file_path` 字段也是 `/` 开头的绝对路径——后续 read / write / edit / download **直接拿来用**, 不要自己去掉 `/`。
52
+
53
+ ## 子命令一览
54
+
55
+ | 子命令 | 用途 |
56
+ |---|---|
57
+ | `agent file list` | 列群文件 / 目录树 |
58
+ | `agent file read` | 读群文件内容 |
59
+ | `agent file write` | 创建 / 整文件覆盖 (从字符串内容) |
60
+ | `agent file edit` | 外科手术式修改 (replace / append) |
61
+ | `agent file upload` | **本地文件** → 群文件 (适合二进制 / 大文件 / 已有本地产物) |
62
+ | `agent file download` | 群文件 → **本地文件** (适合二进制 / 想拿到本地处理) |
63
+
64
+ 下文 `$account_id` / `$group_id` 都指你从 `<coze-context>` 抄来的值。
65
+
66
+ ## `agent file list` — 群文件目录列表
67
+
68
+ ```bash
69
+ # 群文件工作区根目录
70
+ coze agent file list --org-id "$account_id" --project-id "$group_id" --json
71
+
72
+ # 特定子目录, 递归 10 层
73
+ coze agent file list \
74
+ --org-id "$account_id" --project-id "$group_id" \
75
+ --file-path "/notes" \
76
+ --depth 10 --json
77
+ ```
78
+
79
+ 参数:
80
+ - `--file-path`: 起始目录 (绝对路径, `/` 开头, e.g. `/notes`; 不带或传 `/` 都是列群文件根)
81
+ - `--depth`: 递归深度 (不带则浅列表, 只列直接子项)
82
+
83
+ 返回 `.data.files`, 每项含:
84
+ - `name`: 文件名 / 目录名
85
+ - `file_path`: 绝对路径 (`/` 开头, 相对群文件根)
86
+ - `is_dir`: `true` 为目录, `false` 为文件
87
+
88
+ > **路径规范化坑**: 后端有时返回看着被规范化过的路径 (加了额外前缀 / 多了层级 / 跟你输入的形状不同)。**后续读 / 写继续用你最初的用户面向路径**, 不要替换成后端规范化版本——否则后续 read / edit 会找不到文件。
89
+
90
+ ## `agent file read` — 读群文件
91
+
92
+ ```bash
93
+ # 整文件
94
+ coze agent file read \
95
+ --org-id "$account_id" --project-id "$group_id" \
96
+ --file-path "/example.md" --json
97
+
98
+ # 仅第 1–20 行
99
+ coze agent file read \
100
+ --org-id "$account_id" --project-id "$group_id" \
101
+ --file-path "/example.md" \
102
+ --offset 1 --limit 20 --json
103
+ ```
104
+
105
+ 参数:
106
+ - `--file-path`: **必填**, 群文件**绝对路径** (`/` 开头, 相对群文件根)
107
+ - `--offset`: 起始行号 (从 1 开始)
108
+ - `--limit`: 读多少行
109
+
110
+ 返回 `.data`:
111
+ - `.content`: 文件正文 (字符串)
112
+ - `.start_line` / `.end_line`: 实际拿到的行范围
113
+ - `.size`: 文件总大小 (字节)
114
+
115
+ > 大文件探索时**先读窗口** (`--offset` / `--limit`), 不要一次读整文件——既费 token 又可能撑爆。
116
+
117
+ ## `agent file write` — 创建或整文件覆盖
118
+
119
+ ```bash
120
+ coze agent file write \
121
+ --org-id "$account_id" --project-id "$group_id" \
122
+ --file-path "/example.md" \
123
+ --content "# title" --json
124
+ ```
125
+
126
+ 参数:
127
+ - `--file-path`: **必填**, 群文件**绝对路径** (`/` 开头, 相对群文件根); 不存在的中间目录后端会**自动创建**
128
+ - `--content`: **必填**, 整文件内容 (字符串, 不是 diff)
129
+
130
+ ⚠️ `file write` **覆盖整个文件**, 没有 merge。**只改一部分用 `file edit`**, 既不会误截断, 又避开 shell 引用长内容的问题。
131
+
132
+ 适用场景:
133
+ - 新建文件 (e.g. 第一次沉淀本周周报)
134
+ - 文件结构整体重写 (确认要全覆盖)
135
+
136
+ ## `agent file edit` — 外科手术式修改
137
+
138
+ 任务是"编辑"或"更新"群文件时, 通常这个比 write 合适。按意图选模式:
139
+
140
+ | 模式 | 用途 | 必需参数 |
141
+ |---|---|---|
142
+ | `replace_one` | 替换唯一字符串第一次出现。先读文件、有明确锚点的外科手术编辑首选。 | `--old-string`, `--new-string` |
143
+ | `replace_all` | 全局重命名 / 全局替换。 | `--old-string`, `--new-string` |
144
+ | `append` | 文件末尾追加, 无前导换行。 | `--append-content` |
145
+ | `append_newline` | 文件末尾新起一行追加。**"追加新条目"几乎都该选这个**, 不是 `append`。 | `--append-content` |
146
+
147
+ ```bash
148
+ # 全局重命名 config
149
+ coze agent file edit \
150
+ --org-id "$account_id" --project-id "$group_id" \
151
+ --file-path "/config.md" \
152
+ --mode replace_all \
153
+ --old-string "model: gpt-4" --new-string "model: claude-sonnet-4-5" --json
154
+
155
+ # 追加新 todo 条目
156
+ coze agent file edit \
157
+ --org-id "$account_id" --project-id "$group_id" \
158
+ --file-path "/todo.md" \
159
+ --mode append_newline \
160
+ --append-content "- review PR #42" --json
161
+ ```
162
+
163
+ **`replace_one` 用法关键点**:
164
+ - **先 `file read` 看一下**, 找出在文件里明显唯一的 `--old-string` 锚点
165
+ - 锚点太短或重复出现, 会改错位置或失败
166
+ - 把锚点选得比要替换的核心多带一两行上下文是常见做法
167
+
168
+ **`append` vs `append_newline`**:
169
+ - 想在已有最后一行尾巴继续接 → `append`
170
+ - 想起新一行 (新 todo、新章节) → `append_newline` (默认偏好这个)
171
+
172
+ ## `agent file upload` — 本地文件上传到群
173
+
174
+ 把**本地已有文件**塞进群文件 (跟 `file write` 区别: write 是从字符串内容创建; upload 是把本地文件**整个传上去**, 不解析内容)。
175
+
176
+ ```bash
177
+ coze agent file upload \
178
+ --org-id "$account_id" --project-id "$group_id" \
179
+ --local-file-path ./report.md \
180
+ --project-dir /reports \
181
+ --json
182
+ ```
183
+
184
+ 参数:
185
+ - `--local-file-path`: **必填**, 本地文件路径 (相对当前目录或绝对路径; 这是 OS 本地 fs 路径, 跟群文件路径不同)
186
+ - `--project-dir`: **必填**, 目标群目录 (群文件下的哪个子目录; 上传后文件名沿用本地 basename)
187
+
188
+ **适用场景**:
189
+ - 你刚生成的本地文件 (e.g. `coze generate image` 出图后想存到群) 沉淀到群文件
190
+ - 用户给你本地路径让你把文件放到群里
191
+ - 二进制 / 大文件——`file write` 走 shell `--content` 走不动 (`E2BIG`), upload 直接传文件流
192
+
193
+ **典型用法**:
194
+
195
+ ```bash
196
+ # 上传报告到群的 /reports/ 子目录
197
+ coze agent file upload \
198
+ --org-id "$account_id" --project-id "$group_id" \
199
+ --local-file-path ./Q4-report.pdf --project-dir /reports --json
200
+
201
+ # 上传截图到群文件根目录
202
+ coze agent file upload \
203
+ --org-id "$account_id" --project-id "$group_id" \
204
+ --local-file-path /tmp/screenshot.png --project-dir / --json
205
+ ```
206
+
207
+ ## `agent file download` — 从群下载到本地
208
+
209
+ 把**群文件**拉到本地 (跟 `file read` 区别: read 返回 JSON 里的 `.content` 字符串, 适合小文本; download 把文件**整个落到本地 fs**, 适合二进制 / 大文件 / 需要本地工具加工的产物)。
210
+
211
+ ```bash
212
+ coze agent file download \
213
+ --org-id "$account_id" --project-id "$group_id" \
214
+ --project-file-path /reports/report.md \
215
+ --local-dir ./downloads \
216
+ --json
217
+ ```
218
+
219
+ 参数:
220
+ - `--project-file-path`: **必填**, 群文件路径 (要下载哪个文件; **注意 flag 名是 `--project-file-path`, 不是 `--file-path`**)
221
+ - `--local-dir`: **必填**, 本地保存目录 (文件名沿用群文件 basename)
222
+
223
+ **适用场景**:
224
+ - 用户在群里上传了 PDF / 图片, 你想本地处理 (OCR / 提取 / 转格式)
225
+ - 群里的二进制文件——`file read` 拿不到原始字节, 必须 download
226
+ - 处理完想再传回去——download + 本地处理 + upload 回去
227
+
228
+ **典型用法**:
229
+
230
+ ```bash
231
+ # 下载群里的 PDF 到本地 ./downloads/
232
+ coze agent file download \
233
+ --org-id "$account_id" --project-id "$group_id" \
234
+ --project-file-path /reports/Q4-report.pdf \
235
+ --local-dir ./downloads --json
236
+ # 文件落到 ./downloads/Q4-report.pdf
237
+ ```
238
+
239
+ **download + 本地处理 + upload 回流**:
240
+
241
+ ```bash
242
+ # 1. 下载
243
+ coze agent file download --org-id "$O" --project-id "$P" \
244
+ --project-file-path /raw/scan.pdf --local-dir /tmp --json
245
+
246
+ # 2. 本地处理 (e.g. OCR)
247
+ ocrmypdf /tmp/scan.pdf /tmp/scan-ocr.pdf
248
+
249
+ # 3. 上传回群
250
+ coze agent file upload --org-id "$O" --project-id "$P" \
251
+ --local-file-path /tmp/scan-ocr.pdf --project-dir /processed --json
252
+ ```
253
+
254
+ ## Shell 引用提示 (主要踩坑点在 file write/edit)
255
+
256
+ `--content` / `--old-string` / `--new-string` / `--append-content` 都是普通 shell 参数, 引用要小心:
257
+
258
+ - **纯 ASCII 无引号无 `$`**: 双引号即可 — `--content "hello world"`
259
+ - **含双引号或 shell 元字符 (`$`、` ` `、`!`)**: 单引号整段, 或用 `$'...'` C 风格字面量
260
+ - **多行内容**: heredoc 灌变量最稳:
261
+ ```bash
262
+ content=$(cat <<'EOF'
263
+ line 1
264
+ line 2 with "quotes" and $vars not expanded
265
+ EOF
266
+ )
267
+ coze agent file write --org-id "$account_id" --project-id "$group_id" \
268
+ --file-path /a.md --content "$content" --json
269
+ ```
270
+ (注意 `<<'EOF'` 加引号——防止变量在 heredoc 里被展开)
271
+ - **超长内容 (几百 KB 起)**: 命令行参数长度可能爆 (`E2BIG`)。先 `file write` 写个骨架, 后续 `file edit append_newline` 增量补
272
+ - **内容里有反引号 / `$(...)`**: 一定走单引号或 heredoc, 否则 shell 会执行命令替换
273
+
274
+ ## 不要做的事 (文件操作层面)
275
+
276
+ - ❌ 不要省 `--json` 或忽略信封 `.code` 校验 (见顶部"CLI 调用约束")
277
+ - ❌ 不要用 `file write` 做小编辑 — 用 `file edit replace_one`, 既安全又不烦引用
278
+ - ❌ 不要 `replace_one` 不先 `read` — 锚点可能不唯一, 改错位置
279
+ - ❌ 不要 `replace_all` 用模糊锚点 — 全局替换出错就遍布全文
280
+ - ❌ 不要把后端规范化路径替换回去 — 后续调用继续用用户面向路径
281
+ - ❌ 不要把超大内容直接喂 `--content` — `E2BIG`; 先骨架后追加
282
+ - ❌ 不要 `append` 当 `append_newline` 用 — `append` 不加换行, 新条目会粘到上一行尾巴
283
+ - ❌ 不要相信 "`file write` 也能 merge" — 它就是整覆盖, 没有 merge 语义
284
+ - ❌ 不要忽略 heredoc 引号 — `<<EOF` 会展开 `$var`, `<<'EOF'` 才是字面量
@@ -0,0 +1,177 @@
1
+ # coze-project-query: 群信息查询参考
2
+
3
+ **这是 coze-project 模块的群信息查询参考。** 触发条件 / 协作流程 / 跨技能衔接见 [`../MODULE.md`](../MODULE.md); 群文件 CRUD 操作见 [`coze-project-files.md`](coze-project-files.md)。本文件讲**项目元数据 / 群成员 / 群消息历史查询的详细语法**。
4
+
5
+ 需要敲 `coze agent info` / `member` / `message` 时 Read 本文件。
6
+
7
+ ## CLI 调用约束 (所有 `coze agent` 命令通用)
8
+
9
+ **前提**:
10
+ - `coze` 在 PATH (平台保证), 已登录, 不要配 auth
11
+ - 每个命令必带 `--json` (省略 → `E1000 INVALID_ARGUMENT`)
12
+ - 每个命令必带 `--org-id "$account_id" --project-id "$group_id"` (从 `<coze-context>` 抄, 见 [`../MODULE.md`](../MODULE.md))
13
+
14
+ **输出信封** (stdout 成功):
15
+ ```json
16
+ { "code": 0, "msg": "...", "data": { ... } }
17
+ ```
18
+
19
+ **校验两层才用结果**: shell 退出码 == 0 **且** `.code == 0` (可能 0 退出但软失败)。
20
+
21
+ `jq` 模板 (注意 stderr 必须捕到文件, 否则失败时错误原因丢失):
22
+ ```bash
23
+ err=$(mktemp)
24
+ out=$(coze agent info --org-id "$account_id" --project-id "$group_id" --json 2>"$err") \
25
+ || { cat "$err" >&2; rm -f "$err"; exit 1; }
26
+ rm -f "$err"
27
+ [ "$(echo "$out" | jq -r '.code')" = "0" ] \
28
+ || { echo "API error: $out" >&2; exit 1; }
29
+ echo "$out" | jq '.data'
30
+ ```
31
+
32
+ > ⚠️ **`$(...)` 只捕 stdout**——CLI 错误 JSON 走 stderr, 不重定向 (`2>"$err"`) 的话失败时 `$out` 是空的, 你完全看不到原因。这个 pattern 必须用, 不能省。
33
+
34
+ **错误码** (JSON 错误写 stderr, 非零退出):
35
+
36
+ | 代码 | 含义 | 怎么办 |
37
+ |---|---|---|
38
+ | `E1000` | 参数错 (缺 `--json` / 缺 ID / `--size`/`--limit` 非法) | 修命令重试 |
39
+ | `E5002` | 后端 / 服务端错 (`.code != 0`) | 把消息转给用户; **不要盲目重试** |
40
+
41
+ ## 子命令一览
42
+
43
+ | 子命令 | 用途 | 用户提问示例 |
44
+ |---|---|---|
45
+ | `agent info` | 项目元数据 | "这个项目是啥", "项目设置" |
46
+ | `agent member list` | 群成员 | "谁在群里", "有谁的权限" |
47
+ | `agent message list` | 群聊历史 | "上次说啥", "之前讨论过的结论" |
48
+
49
+ 下文 `$account_id` / `$group_id` 都指你从 `<coze-context>` 抄来的值。
50
+
51
+ ## `agent info` — 项目元数据
52
+
53
+ ```bash
54
+ coze agent info --org-id "$account_id" --project-id "$group_id" --json
55
+ ```
56
+
57
+ 返回项目完整记录在 `.data` 下:
58
+ - `name`: 项目 / 群名
59
+ - `description`: 项目描述
60
+ - `owner_id` / `owner_name`: 所有者
61
+ - `created_at` / `updated_at`: 时间戳
62
+ - 其他设置字段
63
+
64
+ **典型用法**:
65
+
66
+ ```bash
67
+ # 拿项目名
68
+ name=$(coze agent info --org-id "$account_id" --project-id "$group_id" --json \
69
+ | jq -r '.data.name')
70
+
71
+ # 整个元数据展示给用户
72
+ coze agent info --org-id "$account_id" --project-id "$group_id" --json | jq '.data'
73
+ ```
74
+
75
+ ## `agent member list` — 群成员
76
+
77
+ ```bash
78
+ coze agent member list --org-id "$account_id" --project-id "$group_id" --json
79
+ ```
80
+
81
+ 返回成员列表在 `.data` 下, 每项含:
82
+ - `user_id`: 用户 ID
83
+ - `name` / `username`: 名字
84
+ - `role`: 权限角色 (owner / admin / member 等)
85
+ - 加入时间等
86
+
87
+ **典型用法**:
88
+
89
+ ```bash
90
+ # 列出所有成员名 + 角色
91
+ coze agent member list --org-id "$account_id" --project-id "$group_id" --json \
92
+ | jq -r '.data[] | "\(.role): \(.name)"'
93
+
94
+ # 找 owner
95
+ coze agent member list --org-id "$account_id" --project-id "$group_id" --json \
96
+ | jq -r '.data[] | select(.role == "owner") | .name'
97
+ ```
98
+
99
+ ## `agent message list` — 群聊历史
100
+
101
+ ```bash
102
+ # 最近 5 条
103
+ coze agent message list --org-id "$account_id" --project-id "$group_id" --size 5 --json
104
+
105
+ # 最旧的在前, 包含被引用的消息
106
+ coze agent message list --org-id "$account_id" --project-id "$group_id" \
107
+ --asc-mode --need-reference --json
108
+
109
+ # 下一页
110
+ coze agent message list --org-id "$account_id" --project-id "$group_id" \
111
+ --cursor "$next_cursor" --json
112
+ ```
113
+
114
+ 参数:
115
+ - `--size`: 每次最大 **10** (硬上限, 多了 CLI 拒绝)。要拿超过 10 条**必须**用 `--cursor` 翻页
116
+ - `--asc-mode`: 翻为最旧在前 (默认最新在前)
117
+ - `--need-reference`: 内联包含被引用 / 被回复的消息
118
+ - `--conversation-id`: 项目里有多个会话时过滤到单个
119
+
120
+ 返回 `.data` 含消息数组 + 翻页游标, 但**具体字段名 (e.g. `messages` / `items` / `list`, `next_cursor` / `cursor` / `nextToken`) 以 CLI 实际返回为准**——不要凭印象猜。
121
+
122
+ **翻页累积 pattern** (用户要"最近 30 条"):
123
+
124
+ ```bash
125
+ # === 第一步必做: 探字段名 (不要跳过这步直接用下面的模板) ===
126
+ first=$(coze agent message list --org-id "$account_id" --project-id "$group_id" \
127
+ --size 1 --json)
128
+ echo "$first" | jq '.data | keys'
129
+ # 看输出, 找出消息数组字段名和游标字段名,
130
+ # 在下面把 <MSG_FIELD> 和 <CURSOR_FIELD> 替换成实际字段名
131
+
132
+ # === 第二步: 翻页累积 (替换 <MSG_FIELD> / <CURSOR_FIELD> 后再运行) ===
133
+ A="$account_id"; P="$group_id"
134
+ all_msgs="[]"
135
+ cursor=""
136
+ remaining=30
137
+
138
+ while [ "$remaining" -gt 0 ]; do
139
+ size=$([ "$remaining" -gt 10 ] && echo 10 || echo "$remaining")
140
+ if [ -z "$cursor" ]; then
141
+ page=$(coze agent message list --org-id "$A" --project-id "$P" --size "$size" --json)
142
+ else
143
+ page=$(coze agent message list --org-id "$A" --project-id "$P" --size "$size" --cursor "$cursor" --json)
144
+ fi
145
+ # 信封校验 (见顶部"CLI 调用约束")
146
+ [ "$(echo "$page" | jq -r '.code')" = "0" ] || break
147
+
148
+ # ↓↓↓ 这两行的 <MSG_FIELD> / <CURSOR_FIELD> 必须替换, 否则 jq 报 syntax error ↓↓↓
149
+ all_msgs=$(echo "$all_msgs $page" | jq -s '.[0] + .[1].data.<MSG_FIELD>')
150
+ cursor=$(echo "$page" | jq -r '.data.<CURSOR_FIELD> // ""')
151
+ [ -z "$cursor" ] || [ "$cursor" = "null" ] && break
152
+
153
+ remaining=$((remaining - size))
154
+ done
155
+
156
+ echo "$all_msgs" | jq '.'
157
+ ```
158
+
159
+ > 占位符 `<MSG_FIELD>` / `<CURSOR_FIELD>` 是**故意**写成非法语法的——jq 会立刻报错, 强迫你先跑第一步探字段名再来填。不要照抄 `data.messages` / `data.next_cursor`, 那只是常见命名, 不一定是这个 CLI 的实际字段。
160
+
161
+ > ⚠️ **不要假装 10 条上限不存在**。用户要"最近 30 条"就老老实实翻 3 页。直接传 `--size 30` 会被 CLI 拒绝。
162
+
163
+ **追溯讨论结论的常见姿势** (用户问"上次怎么决定的"):
164
+
165
+ 1. `--asc-mode` 从最旧拉, 保留时间顺序
166
+ 2. `--need-reference` 让"A 引用 B 然后说 ..."的上下文不断链
167
+ 3. 翻页累积到一个合理深度 (e.g. 30-50 条)
168
+ 4. 把关键节点 (决策、结论、行动项) 摘要给用户, 别原样倒出所有消息
169
+
170
+ ## 不要做的事 (查询层面)
171
+
172
+ - ❌ 不要省 `--json` 或忽略信封 `.code` 校验 (见顶部"CLI 调用约束")
173
+ - ❌ 不要传 `--size > 10` — CLI 直接拒绝, 老实翻页
174
+ - ❌ 不要不带 `--need-reference` 就追溯有引用链的讨论 — 引用断了上下文丢, 误导用户
175
+ - ❌ 不要首次调用就假定游标字段名 — 先看一次 `.data` 实际形状, 字段名以 CLI 实际返回为准
176
+ - ❌ 不要把所有消息原样倒给用户 — 摘要 + 关键节点引用更有用
177
+ - ❌ 不要无差别拉全部消息再筛 — 项目消息量大时浪费 API, 先想清楚需要什么时间范围 / 关键词