xparse-cli 2.6.0 → 2.6.1-beta.2
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 +711 -13
- package/package.json +12 -8
package/README.md
CHANGED
|
@@ -1,25 +1,723 @@
|
|
|
1
|
-
#
|
|
1
|
+
# TextIn xParse CLI
|
|
2
2
|
|
|
3
|
-
TextIn xParse
|
|
3
|
+
TextIn xParse 文档解析命令行工具,基于 [TextIn xParse API](https://docs.textin.com/api-reference/endpoint/xparse/v1/parse-sync) 实现。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
支持将 PDF、图片、Office 文档等 20+ 格式转换为 Markdown 及结构化数据。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## 安装
|
|
8
|
+
|
|
9
|
+
需要 Node.js 18 或更高版本:
|
|
10
|
+
|
|
11
|
+
### 安装正式版
|
|
12
|
+
|
|
13
|
+
```bash
|
|
8
14
|
npm install --global xparse-cli
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
国内网络可以显式使用 npmmirror:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install --global --registry=https://registry.npmmirror.com xparse-cli
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
安装后运行以下命令检查版本:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
9
26
|
xparse-cli version
|
|
10
27
|
```
|
|
11
28
|
|
|
12
|
-
|
|
29
|
+
### 安装 beta 或精确版本
|
|
30
|
+
|
|
31
|
+
跟随当前 beta:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npm install --global xparse-cli@beta
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
为了获得可复现的测试环境,应安装精确版本:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
npm install --global xparse-cli@2.6.0
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 升级
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npm install --global xparse-cli@latest
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
beta、精确版本以及国内镜像同样通过 `npm install --global` 管理。CLI 不再单独下载或替换二进制文件。
|
|
50
|
+
|
|
51
|
+
WorkBuddy 集成、国内/海外 Connector 区别、beta 命名规则及完整发版步骤见
|
|
52
|
+
[WorkBuddy Connector 概念与发版流程](docs/workbuddy_connector_release.md)。
|
|
53
|
+
|
|
54
|
+
## Remote MCP 服务
|
|
55
|
+
|
|
56
|
+
同一 Go module 还提供 `cmd/xparse-mcp`。它与 CLI 复用 `internal/client` 和
|
|
57
|
+
`internal/parseflow`,因此解析参数、额度路由、顺序执行、一次重试和多段结果合并使用
|
|
58
|
+
同一份实现。MCP 只接受服务端可访问的 `file_url` 或已上传的 `file_id`;本地文件由
|
|
59
|
+
MCP Host 先调用 `prepare_file_upload`,按返回的通用上传会话直接上传到 TextIn。
|
|
60
|
+
|
|
61
|
+
国内 MCP 新增 `detect_manipulation`,接受 `file_url` 或 `file_id`,支持可选的
|
|
62
|
+
`tamper_threshold`、`aigc_threshold`。本地文件先调用
|
|
63
|
+
`prepare_file_upload`,设置 `operation=detect_manipulation`,上传后逐个检测。
|
|
64
|
+
`get_quota` 可指定 `service=manipulation_detection`。额度不足或未知时,须取得
|
|
65
|
+
用户对本次可能付费调用的同意后设置 `approve_paid=true`,不自动重试计费请求。
|
|
66
|
+
结果包含风险元数据和可选 JPEG 热力图内容块;`image_index` 按图片内容块从零编号。
|
|
67
|
+
图片展示与保存取决于 Host 能力;服务端不缩图,不通过普通文本返回 Base64。
|
|
68
|
+
|
|
69
|
+
国内切边增强矫正通过 CLI `crop-enhance`、MCP `crop_enhance` 调用。
|
|
70
|
+
MCP 同样接受 `file_url` 或 `file_id`;本地上传指定 `operation=crop_enhance`。
|
|
71
|
+
查询独立额度使用 `quota --service crop_enhance_image` 或
|
|
72
|
+
`get_quota` 的同名 `service`。未传参数时保持服务默认值:开启切边、形变矫正,
|
|
73
|
+
关闭增强和方向校正。CLI 保存结果 JSON 和全部 JPEG;MCP 按顺序返回原始图片内容块。
|
|
74
|
+
仅坐标模式 `only_position=1` 无图片属于正常结果。
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
xparse-cli crop-enhance scan.jpg --enhance-mode 5 --view json
|
|
78
|
+
xparse-cli crop-enhance scan.jpg --crop-image 0 --dewarp-image 0 --enhance-mode 2
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
两类图像服务共用请求、鉴权头、额度判断和结果拆图;CLI 负责落盘,MCP 负责
|
|
82
|
+
协议输出。接口及改造边界见 [图像工具实现说明](docs/image-tools.md)。
|
|
83
|
+
|
|
84
|
+
MCP 是独立容器产物,不进入 npm CLI 包:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
make mcp-build
|
|
88
|
+
make mcp-image MCP_IMAGE=registry.example/xparse-mcp:tag
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
服务通过 OAuth 验证 audience 绑定的 MCP Token,再使用通用 OAuth Token Exchange
|
|
92
|
+
取得短时委托 Token 调用公开 xParse API;不会调用 workflow-backend 内部 MCP 路由,
|
|
93
|
+
也不识别平台或维护 T币确认状态。
|
|
94
|
+
|
|
95
|
+
MCP 服务使用 `gopkg/tlog` 输出 JSON 日志,通过 `gopkg/ttrace` 将请求 trace
|
|
96
|
+
发送到 OTLP HTTP 采集器。部署时配置 `OTEL_PROVIDER_ENDPOINT`,值为 `host:port`
|
|
97
|
+
(不带协议和路径);国内 TEST/PRE 与现有后端一致,使用 `jaeger-collector:4318`。
|
|
98
|
+
本地调试可指向本机采集器,例如 `OTEL_PROVIDER_ENDPOINT=localhost:4318`。
|
|
99
|
+
trace 服务名为 `xparse-mcp`;请求日志和后台遥测发送日志保留同一 `trace_id`,
|
|
100
|
+
请求取消不影响后台发送原有的超时和关闭逻辑。退出时先等待遥测发送,再刷新 trace。
|
|
101
|
+
|
|
102
|
+
构建依赖私有模块 `gitlab.intsig.net/ke_wang/gopkg`。本地 Go 开发需配置
|
|
103
|
+
`GOPRIVATE=gitlab.intsig.net` 和 GitLab 读取权限;镜像构建通过 BuildKit secret
|
|
104
|
+
`gitlab_token` 传入可读取该模块的 `CI_JOB_TOKEN`,令牌不写入镜像或源码。
|
|
105
|
+
`make mcp-image` 同样读取该环境变量;GitLab 的 `gopkg` 项目需允许此项目的 Job Token
|
|
106
|
+
读取仓库。
|
|
107
|
+
|
|
108
|
+
## 开发与发布 Make 命令
|
|
109
|
+
|
|
110
|
+
仓库根目录的 `Makefile` 统一管理 WorkBuddy Connector 组包和 npm 发布。
|
|
111
|
+
`REGION` 未设置或为空时默认生成国内包。
|
|
112
|
+
|
|
113
|
+
生成国内、海外或双区域的 Connector 正式审核包:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
make connector-review
|
|
117
|
+
make connector-review REGION=global
|
|
118
|
+
make connector-review-all
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
生成指定环境的 Connector 测试安装包。`VERSION` 为需要测试的精确 CLI 版本,
|
|
122
|
+
`ENVIRONMENT` 支持 `test`、`pre` 和 `prod`:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
make connector-test VERSION=2.3.1-beta.1 ENVIRONMENT=test
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
如需使用其他通用 xParse Skill 目录,可显式传入:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
make connector-test \
|
|
132
|
+
VERSION=2.3.1-beta.1 \
|
|
133
|
+
ENVIRONMENT=test \
|
|
134
|
+
SKILL_DIR=/path/to/xparse-skills/skills/xparse-parse
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
同步 npm 持久版本。该命令会更新主包版本、六个平台依赖版本、npm tag 和
|
|
138
|
+
`release-lock.json` 的基础版本:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
make set-version VERSION=2.3.1-beta.1
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
执行七个 npm 包的完整打包与发布 dry-run,不会上传包:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
make npm-publish-dry-run VERSION=2.3.1-beta.1
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
正式发布七个 npm 包必须同时指定精确版本和确认开关:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
make npm-publish VERSION=2.3.1-beta.1 CONFIRM_PUBLISH=1
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
`npm-publish` 和 `npm-publish-dry-run` 都会先同步版本,并校验命令版本、源码
|
|
157
|
+
manifest、staging 目录和七个待发布包完全一致。stable 版本发布到 `latest`,
|
|
158
|
+
`-beta.*` 版本发布到 `beta`。
|
|
159
|
+
|
|
160
|
+
## 快速开始
|
|
161
|
+
|
|
162
|
+
### 1. 零配置解析(自动使用免费额度)
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
# 输出 Markdown 到终端
|
|
166
|
+
xparse-cli parse report.pdf
|
|
167
|
+
|
|
168
|
+
# JSON 视图
|
|
169
|
+
xparse-cli parse report.pdf --view json
|
|
170
|
+
|
|
171
|
+
# 保存到目录
|
|
172
|
+
xparse-cli parse report.pdf --output ./output/
|
|
173
|
+
|
|
174
|
+
# 指定页码范围
|
|
175
|
+
xparse-cli parse report.pdf --page-range "1-5"
|
|
176
|
+
|
|
177
|
+
# 加密 PDF
|
|
178
|
+
xparse-cli parse secret.pdf --password mypassword
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### 2. 付费 API(可选)
|
|
182
|
+
|
|
183
|
+
前往 [TextIn 控制台](https://www.textin.com/user/login?redirect=%252Fconsole%252Fdashboard%252Fsetting&from=xparse-parse-skill) 获取凭证(`x-ti-app-id` 和 `x-ti-secret-code`),然后运行:
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
xparse-cli auth
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
按提示输入 App ID 和 Secret Code,凭证将保存至 `~/.xparse-cli/config.yaml`。
|
|
190
|
+
|
|
191
|
+
也可通过环境变量配置(适合 CI/CD):
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
export XPARSE_APP_ID=your_app_id
|
|
195
|
+
export XPARSE_SECRET_CODE=your_secret_code
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
# 显式使用付费 API
|
|
200
|
+
xparse-cli parse report.pdf --api paid
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### 3. 多文件 Task Runtime(Agent 推荐)
|
|
204
|
+
|
|
205
|
+
解析与抽取统一使用 `task run`:省略 `--task-type` 时仍为解析,原有参数兼容。
|
|
206
|
+
|
|
207
|
+
独立上传可先取得原始 File Asset ID,不会启动解析或抽取;同一操作重试请保留 `--operation-id`:
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
xparse-cli upload contract.pdf --operation-id <OPERATION_ID>
|
|
211
|
+
xparse-cli task run --task-type extract --instruction '抽取甲乙方' --file-id <UPLOADED_FILE_ID>
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
创建抽取任务时,服务端复用已有解析结果;尚未解析的文件进入现有付费托管解析。解析费与抽取费分别按现有规则结算。创建响应的 `document_count` 仅计已接入抽取的文件,未解析文件可能尚未计入;CLI 的 `submitted_file_count` 是本次提交的 ID 数。
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
xparse-cli task run --task-type parse a.pdf
|
|
218
|
+
xparse-cli task run --task-type extract --instruction '抽取编号与金额' --file-id <FILE_ID>
|
|
219
|
+
xparse-cli task add <PARSE_TASK_ID> b.pdf
|
|
220
|
+
xparse-cli task add <EXTRACTION_TASK_ID> --file-id <FILE_ID>
|
|
221
|
+
xparse-cli task status <TASK_ID>
|
|
222
|
+
xparse-cli task result <TASK_ID> --limit 50
|
|
223
|
+
xparse-cli task export <EXTRACTION_TASK_ID> --format json --output ./results
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
顶层 `extract` 已移除。创建抽取接受刚上传或已解析的 File Asset,解析专用参数不能用于抽取;追加文件的 `task add --file-id` 仍只接受已解析文件。
|
|
227
|
+
追加根据服务端类型分发;解析会追加输入并请求新一轮处理,抽取沿用既有任务要求。
|
|
228
|
+
解析追加若绑定后启动失败,应保留 `operation_id`、`task_id` 并按错误提示恢复。
|
|
229
|
+
|
|
230
|
+
抽取分页返回 `snapshot`,后续页使用 `--offset` 和同一个 `--snapshot`;快照变化应重取。
|
|
231
|
+
抽取 JSON/CSV 导出分别写入目录内 `results.json` / `results.csv`,只含就绪文档的业务结果;
|
|
232
|
+
命令响应单独返回完整性、未完成/失败文件和需复核字段,不能将部分导出视为全量成功。
|
|
233
|
+
标量保留字符串(不把编号转换为数字),对象/数组保持结构,未找到的值为 null。
|
|
234
|
+
旧解析 `--view markdown|json`、`--output` 目录及 `task read/rerun` 保持兼容。
|
|
235
|
+
新服务端提供抽取类型及结果投影后才能使用新查询与导出命令。
|
|
236
|
+
|
|
237
|
+
Task Runtime 把上传、执行状态和结果交给服务端持久化。`task run` 默认在提交 Run
|
|
238
|
+
成功后立即返回 `operation_id`、`task_id` 和 `run_id`;Agent 后续锁定该 Run 查看进度,完成后再按需读取或导出结果,不需要把全部结果放进上下文。WorkBuddy 下 stderr 输出 `xparse_event.v1` JSONL:服务端接受 Run 后立即输出 `run_accepted`,后续状态变化输出 `run_status`;stdout 始终只输出一份最终提交 JSON。
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
xparse-cli task run --files 'contracts/*.pdf'
|
|
242
|
+
xparse-cli task status <task-id> --run-id <run-id>
|
|
243
|
+
xparse-cli task export <task-id> --run-id <run-id> --output ./task-output
|
|
244
|
+
xparse-cli task export <task-id> --run-id <run-id> --view json --output ./task-json
|
|
245
|
+
xparse-cli task read <task-id> contract-a.pdf --run-id <run-id>
|
|
246
|
+
xparse-cli task debug <task-id> --run-id <run-id>
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
`task export` 默认导出 Markdown;需要消费完整 xParse 结构化结果时显式使用
|
|
250
|
+
`--view json`。两种视图都会生成 `task-manifest.json`,其中包含
|
|
251
|
+
`total_count`、`completed_count`、`failed_count`、`exported_count` 以及每个文件的
|
|
252
|
+
状态、输出文件名和失败恢复信息,调用方不得把部分成功静默当作全量完成。
|
|
253
|
+
|
|
254
|
+
需要在同一个 Task 下创建新 Run 时,显式选择重跑范围:
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
# 重跑 Task 已绑定的全部 Resource
|
|
258
|
+
xparse-cli task rerun <task-id> --mode all
|
|
259
|
+
|
|
260
|
+
# 上传新文件、绑定到现有 Task,并仅处理新 Resource
|
|
261
|
+
xparse-cli task rerun <task-id> --mode new-files --files 'new-docs/*.pdf'
|
|
262
|
+
|
|
263
|
+
# 只重跑指定的已有 Resource;--resource-id 可重复
|
|
264
|
+
xparse-cli task rerun <task-id> --mode selected-files \
|
|
265
|
+
--resource-id <resource-id> --resource-id <resource-id>
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
`new-files` 不创建替代 Task;返回结果沿用原 `task_id` 并生成新的 `run_id`。
|
|
269
|
+
若新文件受密码保护,使用可重复的 `--password`,多文件时按
|
|
270
|
+
`selector=password` 绑定。
|
|
271
|
+
|
|
272
|
+
若提交响应丢失,使用进度事件或错误详情中的同一 `operation_id` 重试:
|
|
273
|
+
|
|
274
|
+
```bash
|
|
275
|
+
xparse-cli task run --files 'contracts/*.pdf' --operation-id <operation-id>
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
同一操作 ID 会生成 Task 与 Run 两层幂等键;改了文件、模式或配置后必须使用新的操作 ID。
|
|
279
|
+
|
|
280
|
+
需要在一个终端命令中等待完成并导出时,显式使用 `--wait`:
|
|
281
|
+
|
|
282
|
+
```bash
|
|
283
|
+
xparse-cli task run --files 'contracts/*.pdf' --wait --output ./task-output
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
`--wait` 只是在客户端持续轮询同一个 `run_id`,不会把服务端 Task 变成同步任务。达到
|
|
287
|
+
`--timeout` 时 CLI 正常退出并返回当前状态、原 `task_id` / `run_id`、
|
|
288
|
+
`wait_timed_out: true` 和 `next_action: "POLL_STATUS"`;它不会取消或重建 Run。之后使用
|
|
289
|
+
`task status` 继续查询同一个 Run。Agent 流程默认不使用 `--wait`,也不要自动附加较短的固定超时。
|
|
290
|
+
|
|
291
|
+
单个文件的密码与 `parse` 一样直接使用 `--password`,CLI 会在第一次上传时携带密码:
|
|
292
|
+
|
|
293
|
+
```bash
|
|
294
|
+
xparse-cli task run secret.pdf --password open-password
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
多个输入中只有部分文件有密码时,只为受保护文件重复传入 `selector=password` 绑定。selector
|
|
298
|
+
可使用精确路径、唯一文件名,或 `PASSWORD_INPUT_REQUIRED` 返回的稳定 selector:
|
|
299
|
+
|
|
300
|
+
```bash
|
|
301
|
+
xparse-cli task run a.pdf b.jpg c.pdf \
|
|
302
|
+
--password a.pdf=open-a \
|
|
303
|
+
--password c.pdf=open-c
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
如果上传阶段返回 `PASSWORD_INPUT_REQUIRED`,CLI 会扫描完本批次并一次性返回所有缺失或错误
|
|
307
|
+
密码文件。使用返回的 selector 和同一 `operation_id` 补充 `--password selector=password`,然后
|
|
308
|
+
重放原始命令:首次提交重放 `task run`,`task rerun --mode new-files` 增加文件时则重放原 rerun。
|
|
309
|
+
显式复用同一 `operation_id` 时,CLI 会复用已 ready 的上传资产。此时即使错误中已有 `task_id`,
|
|
310
|
+
尚未成功上传的新文件也不是 Task Resource,不能使用 `task continue`。
|
|
311
|
+
|
|
312
|
+
只有 Task Run 已经接受、`task debug` 确认现有 Resource 在执行阶段返回密码错误时,才更新该
|
|
313
|
+
Resource 的访问密码并创建 selected-files Run:
|
|
314
|
+
|
|
315
|
+
```bash
|
|
316
|
+
xparse-cli task continue <task-id> \
|
|
317
|
+
--password <resource-id>=open-password
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
`continue` 同样默认提交即返回;保存新的 `run_id`,完成后再单独执行 `task export`。只有显式添加 `--wait` 时才能同时使用 `--output`。
|
|
321
|
+
|
|
322
|
+
等待人工付费授权或充值后,必须恢复精确 Run:
|
|
323
|
+
|
|
324
|
+
```bash
|
|
325
|
+
xparse-cli task resume <task-id> --run-id <run-id> --approve-paid
|
|
326
|
+
xparse-cli task resume <task-id> --run-id <run-id> --after-funding
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
文件资源只保存加密的文件访问密码;`force_engine`、页范围和 capabilities 属于具体 Run。Runtime 的 MinerU 恢复只覆盖当前失败 RunItem,不会写回可复用资源。`--api auto/free` 不会自动授权付费;需要付费时会停在可见状态并要求人工批准。
|
|
330
|
+
|
|
331
|
+
也可以使用 OAuth。正式二进制默认使用无 Secret 的 public client
|
|
332
|
+
`cli_textin_xparse`;私有部署可以通过 flag、环境变量或配置文件覆盖:
|
|
333
|
+
|
|
334
|
+
```bash
|
|
335
|
+
# 终端中进入 AppKey / OAuth / 状态 / 登出选单
|
|
336
|
+
xparse-cli auth
|
|
337
|
+
|
|
338
|
+
export XPARSE_OAUTH_CLIENT_ID=cli_your_registered_client
|
|
339
|
+
|
|
340
|
+
# Device Flow(SSH、服务器、Agent 推荐)
|
|
341
|
+
xparse-cli auth device --open-browser=never
|
|
342
|
+
|
|
343
|
+
# 本地桌面 Authorization Code + PKCE;默认使用系统分配的可用回调端口
|
|
344
|
+
xparse-cli auth browser
|
|
345
|
+
|
|
346
|
+
# 强制重新展示授权确认页
|
|
347
|
+
xparse-cli auth browser --prompt=consent
|
|
348
|
+
|
|
349
|
+
# 显式使用 OAuth 调用 paid API
|
|
350
|
+
xparse-cli parse report.pdf --api paid --auth-method oauth
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
认证选单使用方向键或 `j`/`k` 移动,`Enter` 确认,`Esc` 或 `Ctrl+C` 取消。
|
|
354
|
+
菜单会显示当前环境、OAuth/AppKey 配置状态和当前生效的认证方式。需要屏幕阅读器兼容的
|
|
355
|
+
线性提示时,可设置 `XPARSE_TUI_ACCESSIBLE=1`。
|
|
356
|
+
|
|
357
|
+
WorkBuddy Connector 使用显式 Profile,避免依赖任务进程是否继承 Connector 环境变量:
|
|
358
|
+
|
|
359
|
+
```bash
|
|
360
|
+
xparse-cli --profile workbuddy auth device --open-browser=always
|
|
361
|
+
xparse-cli --profile workbuddy parse report.pdf --api paid --auth-method oauth
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
该 Profile 的凭证保存在 `~/.xparse-cli/profiles/workbuddy/`,其登录和登出不会影响
|
|
365
|
+
终端中默认的 `~/.xparse-cli` 凭证;请求会自动携带 `X-From: workbuddy`。
|
|
366
|
+
|
|
367
|
+
Larkoffice 使用相同的认证和 Task 命令行为,凭证保存在独立的
|
|
368
|
+
`~/.xparse-cli/profiles/larkoffice/`。OAuth 默认使用国内公开客户端
|
|
369
|
+
`cli_textin_xparse_larkoffice`,仍遵循 `--client-id`、环境变量和配置文件的覆盖顺序;
|
|
370
|
+
AppKey 回退与 WorkBuddy 相同。请求自动携带 `X-From: larkoffice`。
|
|
371
|
+
|
|
372
|
+
```bash
|
|
373
|
+
xparse-cli --profile larkoffice auth device --open-browser=always --output=jsonl
|
|
374
|
+
xparse-cli --profile larkoffice auth status --output=json
|
|
375
|
+
xparse-cli --profile larkoffice parse report.pdf
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
EasyClaw 使用独立的 OAuth-only Profile:
|
|
379
|
+
|
|
380
|
+
```bash
|
|
381
|
+
xparse-cli --profile easyclaw auth device --output jsonl
|
|
382
|
+
xparse-cli --profile easyclaw auth status --output json
|
|
383
|
+
xparse-cli --profile easyclaw parse report.pdf
|
|
384
|
+
xparse-cli --profile easyclaw parse report.pdf --api paid --auth-method oauth
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
该 Profile 固定使用 OAuth Client `cli_textin_xparse_easyclaw`,凭证保存在
|
|
388
|
+
`~/.xparse-cli/profiles/easyclaw/`,不读取 AppKey 或其他 Profile 的 token。普通解析使用
|
|
389
|
+
`auto` 路由:符合每日免费接口能力时优先使用每日额度,否则使用已有免费套餐;只有两类
|
|
390
|
+
额度都不足时才要求切换付费。请求自动携带 `X-From: easyclaw`。
|
|
391
|
+
|
|
392
|
+
## 命令一览
|
|
393
|
+
|
|
394
|
+
| 命令 | 说明 |
|
|
395
|
+
|------|------|
|
|
396
|
+
| `xparse-cli parse` | 解析文档,输出 Markdown / JSON |
|
|
397
|
+
| `xparse-cli upload` | 单文件上传,返回原始 File Asset ID,不启动解析 |
|
|
398
|
+
| `xparse-cli task run` | 上传并执行多文件持久化 Task |
|
|
399
|
+
| `xparse-cli task rerun` | 在现有 Task 下按 all/new-files/selected-files 创建新 Run |
|
|
400
|
+
| `xparse-cli task status` | 查询 Task 和最新 Run 状态 |
|
|
401
|
+
| `xparse-cli task export` | 按 Markdown/JSON 视图批量导出成功结果和带汇总计数的 manifest |
|
|
402
|
+
| `xparse-cli task read` | 读取单个文件结果 |
|
|
403
|
+
| `xparse-cli task debug` | 查看逐文件错误与恢复证据 |
|
|
404
|
+
| `xparse-cli task continue` | 补充逐文件密码并选择性续跑 |
|
|
405
|
+
| `xparse-cli task resume` | 在付费授权或充值确认后恢复精确 Run |
|
|
406
|
+
| `xparse-cli auth` | TTY 中进入认证选单;非 TTY 保持旧版 AppKey 输入流程 |
|
|
407
|
+
| `xparse-cli auth app-key` | 配置 AppKey 凭证 |
|
|
408
|
+
| `xparse-cli auth device` | OAuth Device Flow 登录 |
|
|
409
|
+
| `xparse-cli auth browser` | OAuth Authorization Code + PKCE 登录 |
|
|
410
|
+
| `xparse-cli auth status` | 只读查看登录状态 |
|
|
411
|
+
| `xparse-cli auth logout` | 删除指定认证方式的本地凭证 |
|
|
412
|
+
| `xparse-cli config` | 管理配置(show / set / reset / path) |
|
|
413
|
+
| `xparse-cli quota` | 查看解析与抽取免费额度 |
|
|
414
|
+
| `xparse-cli quota --service manipulation_detection --output json` | 查看国内篡改检测免费套餐次数;不会发起检测 |
|
|
415
|
+
| `xparse-cli download` | 下载解析结果中 elements 的图片 |
|
|
416
|
+
| `xparse-cli cache` | 查看或清理本地文档缓存 |
|
|
417
|
+
| `xparse-cli get_doc_info` | 读取本地 PDF 基础信息 |
|
|
418
|
+
| `xparse-cli get_outline` | 读取缓存文档的目录结构 |
|
|
419
|
+
| `xparse-cli read_content` | 按元素 ID 读取缓存内容 |
|
|
420
|
+
| `xparse-cli read_pages` | 按页码范围读取缓存内容 |
|
|
421
|
+
| `xparse-cli search_text` | 搜索缓存文档文本 |
|
|
422
|
+
| `xparse-cli get_confidence` | 查询元素或页面的 OCR 置信度 |
|
|
423
|
+
| `xparse-cli completion` | 生成 shell 自动补全脚本 |
|
|
424
|
+
| `xparse-cli version` | 显示版本信息 |
|
|
425
|
+
|
|
426
|
+
全局参数 `--profile workbuddy` 或 `--profile easyclaw` 可放在子命令前后,用于选择隔离凭证。
|
|
427
|
+
|
|
428
|
+
文档解析缓存和 `doc_id` 元数据默认保存在 `~/.xparse-cli/cache` 与
|
|
429
|
+
`~/.xparse-cli/docinfo`。Harness 或其他受沙箱管理的宿主可以为每个 session 设置绝对路径
|
|
430
|
+
`XPARSE_STATE_DIR`,此时两类状态分别写入该目录下的 `cache/` 与 `docinfo/`。
|
|
431
|
+
该变量只改变文档状态目录,不改变 AppKey、OAuth 或 CLI 配置位置;相对路径会被拒绝。
|
|
432
|
+
|
|
433
|
+
## parse 命令参数
|
|
434
|
+
|
|
435
|
+
| 参数 | 默认值 | 说明 |
|
|
436
|
+
|------|--------|------|
|
|
437
|
+
| `--view` | `markdown` | 输出视图:`markdown`、`json` |
|
|
438
|
+
| `--api` | `auto` | API 模式:`auto`、`free`、`paid`;`auto` 根据服务端额度快照路由 |
|
|
439
|
+
| `--auth-method` | _(自动)_ | 请求认证:`app-key`、`oauth` |
|
|
440
|
+
| `--page-range` | | 页码范围:`"1-5"` 或 `"1-2,5-10"` |
|
|
441
|
+
| `--password` | | 加密文档密码 |
|
|
442
|
+
| `--include-hierarchy` | `true` | 元素层级关系与父子关联,默认开启。为 `false` 时关闭 |
|
|
443
|
+
| `--include-inline-objects` | `true` | 内嵌对象:公式、手写、复选框、嵌入图片,默认开启。为 `false` 时关闭 |
|
|
444
|
+
| `--include-image-data` | `true` | 图片 URL 及 Base64 数据,默认开启。为 `false` 时关闭 |
|
|
445
|
+
| `--include-table-structure` | `true` | 表格单元格结构与坐标,默认开启。为 `false` 时关闭 |
|
|
446
|
+
| `--include-pages` | `true` | 分页元数据与预览图 |
|
|
447
|
+
| `--include-title-tree` | `true` | 文档标题层级目录树 |
|
|
448
|
+
| `--include-char-details` | `false` | 返回字符级坐标和置信度 |
|
|
449
|
+
| `--table-view` | `html` | 表格视图:`html`、`markdown` |
|
|
450
|
+
| `--export` | | 额外导出格式:`docx`、`pdf`、`xlsx`,支持逗号分隔或重复传递;需配合 `--api paid --output <目录>` |
|
|
451
|
+
| `--list` | | 从文件读取输入列表(需配合 `--output`) |
|
|
452
|
+
| `--output` | _(stdout)_ | 输出文件路径或目录(目录不存在时自动创建) |
|
|
453
|
+
| `--error-format` | `json` | 错误输出格式:`json`、`text` |
|
|
454
|
+
|
|
455
|
+
**全局参数(所有命令均支持):**
|
|
456
|
+
|
|
457
|
+
| 参数 | 说明 |
|
|
458
|
+
|------|------|
|
|
459
|
+
| `--app-id` | TextIn App ID(覆盖环境变量和配置文件) |
|
|
460
|
+
| `--secret-code` | TextIn Secret Code(覆盖环境变量和配置文件) |
|
|
461
|
+
| `--base-url` | API 地址(私有化部署时使用) |
|
|
462
|
+
| `--profile` | 凭证 Profile:`workbuddy`、`easyclaw` |
|
|
463
|
+
| `--task-context` | Agent 任务上下文 JSON 文件路径 |
|
|
464
|
+
| `--verbose` | 调试模式,打印 HTTP 请求详情 |
|
|
465
|
+
|
|
466
|
+
### API capabilities 默认值
|
|
467
|
+
|
|
468
|
+
CLI 默认开启以下能力,Agent 无需额外配置:
|
|
469
|
+
|
|
470
|
+
| 能力 | 默认 |
|
|
471
|
+
|------|------|
|
|
472
|
+
| 标题层级 | 开启 |
|
|
473
|
+
| 内嵌对象(图片) | 开启 |
|
|
474
|
+
| 图片数据 | 开启 |
|
|
475
|
+
| 表格视图 | `html` |
|
|
476
|
+
| 表格结构 | 开启 |
|
|
477
|
+
| 分页结果 | 开启 |
|
|
478
|
+
| 目录树 | 开启 |
|
|
479
|
+
| 字符级详情 | **关闭**(`--include-char-details` 开启) |
|
|
480
|
+
|
|
481
|
+
## 使用示例
|
|
482
|
+
|
|
483
|
+
### 导出其他格式
|
|
484
|
+
|
|
485
|
+
```bash
|
|
486
|
+
# 自动下载 DOCX、PDF 和 XLSX 到输出目录
|
|
487
|
+
xparse-cli parse report.pdf --api paid --export docx,pdf,xlsx --output ./results/
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
`xlsx` 会自动使用 `config.scope=table`。CLI 使用付费解析的 AppKey 或 OAuth 身份
|
|
491
|
+
下载导出文件,输出为 `<basename>.docx`、`<basename>.pdf` 和 `<basename>.xlsx`。
|
|
492
|
+
若目标文件会覆盖输入原文,则改用 `<basename>.export.<format>`。
|
|
493
|
+
|
|
494
|
+
### 管道组合
|
|
495
|
+
|
|
496
|
+
```bash
|
|
497
|
+
# 解析并搜索
|
|
498
|
+
xparse-cli parse report.pdf | grep "revenue"
|
|
499
|
+
|
|
500
|
+
# 解析并喂给 LLM
|
|
501
|
+
xparse-cli parse paper.pdf | llm "summarize this paper"
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
### 批量处理
|
|
505
|
+
|
|
506
|
+
```bash
|
|
507
|
+
# 从文件列表读取
|
|
508
|
+
xparse-cli parse --list files.txt --output ./results/
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
### 下载图片
|
|
512
|
+
|
|
513
|
+
```bash
|
|
514
|
+
# 从解析结果 JSON 中提取 elements 图片并下载
|
|
515
|
+
xparse-cli download --from result.json --output ./images/
|
|
516
|
+
|
|
517
|
+
# 直接下载图片 URL
|
|
518
|
+
xparse-cli download https://web-api.textin.com/ocr_image/external/abc123.jpg --output ./images/
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
### 配置管理
|
|
522
|
+
|
|
523
|
+
```bash
|
|
524
|
+
xparse-cli config show
|
|
525
|
+
xparse-cli config set base_url https://your-server.com
|
|
526
|
+
xparse-cli config reset
|
|
527
|
+
xparse-cli config path
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
### 升级 CLI
|
|
531
|
+
|
|
532
|
+
```bash
|
|
533
|
+
npm install --global xparse-cli@latest
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
### 调试模式
|
|
537
|
+
|
|
538
|
+
```bash
|
|
539
|
+
xparse-cli parse report.pdf --verbose
|
|
540
|
+
```
|
|
541
|
+
|
|
542
|
+
## 凭证管理
|
|
543
|
+
|
|
544
|
+
| 优先级 | 方式 | 说明 |
|
|
545
|
+
|--------|------|------|
|
|
546
|
+
| 1 | 命令行参数 | `--app-id` 和 `--secret-code` |
|
|
547
|
+
| 2 | 环境变量 | `XPARSE_APP_ID` 和 `XPARSE_SECRET_CODE` |
|
|
548
|
+
| 3 | 配置文件 | `~/.xparse-cli/config.yaml` |
|
|
549
|
+
|
|
550
|
+
AppKey 与 OAuth Token 分开保存:
|
|
551
|
+
|
|
552
|
+
```text
|
|
553
|
+
~/.xparse-cli/config.yaml # AppKey 和非敏感 OAuth 偏好
|
|
554
|
+
~/.xparse-cli/oauth-token.json # OAuth Access/Refresh Token
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
目录权限固定为 `0700`,凭证文件固定为 `0600`,更新通过 fsync + rename 原子替换。
|
|
558
|
+
`xparse-cli config reset` 只重置 YAML,不会删除 OAuth Token;请使用
|
|
559
|
+
`xparse-cli auth logout --method oauth|app-key|all` 精确登出。
|
|
560
|
+
OAuth 登出会先尝试通过 `/oauth21/revoke` 撤销 Refresh Token(没有时撤销 Access
|
|
561
|
+
Token),随后始终删除本地 Token。远端暂时不可用只会产生警告,不会阻止本地登出;
|
|
562
|
+
登出不会删除服务端记住的 consent。
|
|
563
|
+
|
|
564
|
+
OAuth 参数优先级:
|
|
565
|
+
|
|
566
|
+
| 参数 | 优先级 |
|
|
567
|
+
|------|--------|
|
|
568
|
+
| Client ID | `--client-id` > `XPARSE_OAUTH_CLIENT_ID` > `oauth.client_id` > public default `cli_textin_xparse` |
|
|
569
|
+
| Scope | `--scope` > `XPARSE_OAUTH_SCOPE` > `oauth.scope` > `ocr:*` |
|
|
570
|
+
| Browser redirect | `--redirect-uri` > `XPARSE_OAUTH_REDIRECT_URI` > `oauth.redirect_uri` > `http://127.0.0.1:0/callback` |
|
|
571
|
+
| Base URL | `--base-url` > `XPARSE_BASE_URL` > `base_url` > `https://api.textin.com` |
|
|
572
|
+
|
|
573
|
+
不传 `--api` 时使用 `auto`:CLI 先读取现有 quota 接口,在匿名每日免费额度与登录
|
|
574
|
+
用户的免费套餐额度之间制定执行计划。显式 `--api free` 固定调用免费 Agent 接口,
|
|
575
|
+
显式 `--api paid` 固定调用现有付费接口,不参与自动额度路由,但仍会读取 quota 中的
|
|
576
|
+
`standard_max_file_size_mb`,在上传本地文件前执行标准接口大小预检。旧服务端未下发
|
|
577
|
+
该字段时使用 500MB 兼容值;URL 输入仍由服务端检查。
|
|
578
|
+
|
|
579
|
+
认证选择顺序为:显式 `--auth-method` / 环境或配置选择 > OAuth > 完整 AppKey >
|
|
580
|
+
匿名(仅可选认证接口)。自动选择 OAuth 时若刷新失败,会先回退完整 AppKey;两者都
|
|
581
|
+
不可用时,quota、免费解析与 telemetry 才匿名继续。显式选择 OAuth 失败不会切换身份。
|
|
582
|
+
篡改检测的命名 quota 查询需要认证,返回的 `free_package.free_remain_count`
|
|
583
|
+
与默认 quota 中的解析套餐和抽取每日额度无关;未返回套餐时额度为未知。
|
|
584
|
+
|
|
585
|
+
本地 PDF 会使用服务端返回的 `max_pages_per_request` 和 `max_file_size_mb` 预检。
|
|
586
|
+
仅页数超限且原文件体积合规时使用页范围分段;文件体积超限时生成真实临时 PDF
|
|
587
|
+
片段,按可重试错误最多重试一次,并按原始页码顺序合并结果。临时片段执行后删除。
|
|
588
|
+
|
|
589
|
+
## 退出码与错误处理
|
|
590
|
+
|
|
591
|
+
`xparse-cli parse` 默认向 stderr 输出一行 JSON;stdout 仍只承载解析结果。退出码保持兼容:
|
|
592
|
+
|
|
593
|
+
| 码 | 含义 |
|
|
594
|
+
|----|------|
|
|
595
|
+
| 0 | 成功 |
|
|
596
|
+
| 1 | 一般错误 / 网络异常 |
|
|
597
|
+
| 2 | 参数错误 |
|
|
598
|
+
| 3 | API 返回错误 |
|
|
599
|
+
|
|
600
|
+
基础字段为 `schema_version`、`error_code`、`message`、`actual_value`、`limit`、
|
|
601
|
+
`retryable` 和 `next_action`;需要时还会包含 `upgrade_url`、`request_id`、`task_id`
|
|
602
|
+
和 `details`。`actual_value` 与 `limit` 不可确认时为 `null`,不会使用过期的本地固定值。
|
|
603
|
+
|
|
604
|
+
```json
|
|
605
|
+
{"schema_version":"xparse_error.v1","error_code":"FILE_TOO_LARGE","message":"file exceeds the current service limit","actual_value":{"file_size_mb":12.5},"limit":{"source":"service","max_file_size_mb":8},"retryable":false,"next_action":"REDUCE_FILE","request_id":"644e2efdb..."}
|
|
606
|
+
```
|
|
607
|
+
|
|
608
|
+
稳定错误码至少包括:`FILE_NOT_FOUND`、`EMPTY_FILE`、`UNSUPPORTED_FILE_TYPE`、
|
|
609
|
+
`FILE_TOO_LARGE`、`PAGE_LIMIT_EXCEEDED`、`PAID_QUOTA_REQUIRED`、
|
|
610
|
+
`AUTHENTICATION_FAILED`、`CAPABILITY_QUERY_FAILED`、`OUTPUT_FAILED`、`SPLIT_FAILED`、
|
|
611
|
+
`MERGE_FAILED` 和 `RETRY_EXHAUSTED`。服务端返回 `40422` 时仍包装为
|
|
612
|
+
`SERVICE_ERROR`,`message` 保留服务端给出的直接原因;程序判断使用 `next_action`,
|
|
613
|
+
诊断时可读取 `details.api_code` 和 `request_id`。
|
|
614
|
+
|
|
615
|
+
人工调试或兼容旧脚本时可使用 `--error-format=text`,恢复原有的多行文本与建议格式。
|
|
616
|
+
其他子命令继续使用原有文本错误格式。
|
|
617
|
+
|
|
618
|
+
> stdout 仅输出文档内容,stderr 仅输出错误信息,exit code 严格为 0/1/2/3。
|
|
619
|
+
> 完整的错误和建议枚举见 [suggestion.txt](suggestion.txt)。
|
|
620
|
+
|
|
621
|
+
## 支持的文件格式
|
|
622
|
+
|
|
623
|
+
| 类型 | 格式 |
|
|
624
|
+
|------|------|
|
|
625
|
+
| 文档 | PDF, DOC, DOCX, TXT, RTF, OFD |
|
|
626
|
+
| 图片 | PNG, JPG, JPEG, BMP, TIFF, WebP |
|
|
627
|
+
| 表格 | XLS, XLSX, CSV |
|
|
628
|
+
| 演示 | PPT, PPTX |
|
|
629
|
+
| 网页 | HTML, MHTML |
|
|
630
|
+
|
|
631
|
+
限制:
|
|
632
|
+
|
|
633
|
+
| 限制项 | 免费 API | 付费 API |
|
|
634
|
+
|--------|----------|----------|
|
|
635
|
+
| 文件大小 | 由 quota 的 `max_file_size_mb` 下发,PDF 可自动分片 | 由 quota 的 `standard_max_file_size_mb` 下发,旧服务端回退 500MB |
|
|
636
|
+
| PDF 页数 | 由 quota 的 `max_pages_per_request` 下发,支持自动分段 | 1000 页 |
|
|
637
|
+
| XLS/XLSX/CSV | — | 每 sheet ≤ 2000 行 × 100 列 |
|
|
638
|
+
| TXT | — | ≤ 100KB |
|
|
639
|
+
| 图片尺寸 | 20~20000 像素 | 20~20000 像素 |
|
|
640
|
+
|
|
641
|
+
### Extraction recovery
|
|
642
|
+
|
|
643
|
+
`task status <task-id> --details` shows failed resources and private-result settlement status.
|
|
644
|
+
For `pending_settlement`, retain the candidate identity and run:
|
|
645
|
+
|
|
646
|
+
```bash
|
|
647
|
+
xparse-cli task retry <task-id> --resource-id <resource-id> --pending-result-id <pending-result-id>
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
This settles the saved result without another model call. Replaying the same candidate is safe.
|
|
651
|
+
The Task stays suspended; use `task result` or `task export` for delivered files. Explicit
|
|
652
|
+
`task resume <task-id>` continues remaining Agent work and adds execution budget. Preserve its
|
|
653
|
+
`command_id` and `checkpoint_version` for exact replay. Without a saved candidate, `task retry --resource-id RESOURCE_ID`
|
|
654
|
+
re-extracts the one resource; do not blindly replay an ambiguous response.
|
|
655
|
+
|
|
656
|
+
## Extraction workspace commands
|
|
657
|
+
|
|
658
|
+
The workspace commands below require a matching CLI build and backend. They do
|
|
659
|
+
not create a replacement Task. Request JSON is read from `--input FILE` or stdin
|
|
660
|
+
with `--input -`; values and version tokens are transmitted without reinterpretation.
|
|
661
|
+
|
|
662
|
+
```bash
|
|
663
|
+
xparse-cli task retry TASK_ID
|
|
664
|
+
xparse-cli task retry TASK_ID --scope selected --resource-id RESOURCE_ID --field-id FIELD_ID
|
|
665
|
+
xparse-cli task retry TASK_ID --only-outdated
|
|
666
|
+
xparse-cli task spec get TASK_ID
|
|
667
|
+
xparse-cli task spec set TASK_ID --input fields.json
|
|
668
|
+
xparse-cli task spec clarify TASK_ID --input clarification.json
|
|
669
|
+
xparse-cli task field set TASK_ID RESOURCE_ID FIELD_ID --input correction.json
|
|
670
|
+
xparse-cli task field confirm TASK_ID RESOURCE_ID FIELD_ID --input confirmation.json
|
|
671
|
+
xparse-cli task history TASK_ID RESOURCE_ID
|
|
672
|
+
xparse-cli task preview TASK_ID RESOURCE_ID
|
|
673
|
+
xparse-cli task copilot show TASK_ID
|
|
674
|
+
xparse-cli task copilot steps TASK_ID --after 0
|
|
675
|
+
xparse-cli task copilot send TASK_ID --text 'Recheck the contract amount'
|
|
676
|
+
xparse-cli task copilot send TASK_ID --input reply.json
|
|
677
|
+
xparse-cli task memory list TASK_ID
|
|
678
|
+
xparse-cli task memory revoke TASK_ID MEMORY_ID
|
|
679
|
+
xparse-cli task list --search contract --limit 20
|
|
680
|
+
xparse-cli task page TASK_ID
|
|
681
|
+
xparse-cli task add TASK_ID new.pdf
|
|
682
|
+
xparse-cli task add TASK_ID --history-id 123
|
|
683
|
+
xparse-cli task add TASK_ID --uploaded-file-id FILE_ID
|
|
684
|
+
xparse-cli task add TASK_ID --reconcile
|
|
685
|
+
```
|
|
686
|
+
|
|
687
|
+
`retry TASK_ID` re-extracts every file using the current definition. File and field
|
|
688
|
+
selectors intersect; with a field definition, only active fields are used. A Task
|
|
689
|
+
without a field definition reruns its original instruction and cannot use field
|
|
690
|
+
selectors or `--only-outdated`. Old results remain until replaced by new results.
|
|
691
|
+
Legacy `retry TASK_ID --resource-id RESOURCE_ID` still recovers one failed file or
|
|
692
|
+
settles its saved result; use `--scope selected` to force re-extraction of that file.
|
|
693
|
+
`resume` continues suspended work and remains separate from re-extraction.
|
|
694
|
+
|
|
695
|
+
`fields.json` is the complete active field list, not a partial patch. Omitting an
|
|
696
|
+
existing field deletes it; use `restore_field_ids` to restore deleted fields:
|
|
697
|
+
|
|
698
|
+
```json
|
|
699
|
+
{"expected_version":7,"task_rules":"Extract contract data","fields":[{"field_id":"amount","name":"Amount","description":"Total including tax"}],"restore_field_ids":[],"apply_to_existing":false}
|
|
700
|
+
```
|
|
701
|
+
|
|
702
|
+
For clarification, send `expected_version`, `name`, and `description`.
|
|
703
|
+
For field correction/confirmation, preserve the reviewed result and spec versions:
|
|
704
|
+
|
|
705
|
+
```json
|
|
706
|
+
{"base_result_version":3,"expected_spec_version":7,"request_id":"review-unique-id","value":{"value":"100.00"},"review":{"apply_to_future":false}}
|
|
707
|
+
```
|
|
13
708
|
|
|
14
|
-
|
|
709
|
+
Copilot supports all page interaction kinds, including edited definitions,
|
|
710
|
+
confirm-only, confirm-and-rerun, answers and dismissals. Preserve the original
|
|
711
|
+
identities and reviewed draft values. Example (replace all identifiers/versions):
|
|
15
712
|
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
xparse-cli auth --help
|
|
19
|
-
xparse-cli crop-enhance --help
|
|
20
|
-
xparse-cli detect-manipulation --help
|
|
713
|
+
```json
|
|
714
|
+
{"client_message_id":"reply-unique-id","kind":"confirm_and_rerun","text":"","expected_version":7,"draft_id":"draft-id","draft_revision":2}
|
|
21
715
|
```
|
|
22
716
|
|
|
23
|
-
|
|
717
|
+
A conflict is not retried with a silently refreshed version. After an ambiguous
|
|
718
|
+
mutation response, query the same Task before any repeat. Managed local additions
|
|
719
|
+
return upload identities for recovery and use the page's managed import pipeline.
|
|
720
|
+
`task page` requires the backend's `page-session?result_page_url=true` support and
|
|
721
|
+
returns the exact server-issued URL; never build grants in the client.
|
|
24
722
|
|
|
25
|
-
|
|
723
|
+
Regional availability follows the page: task list, spec set/clarify, whole-task or scoped retry, preview and version history are domestic-only. Other operations retain their existing regional rules. These additions require a matching CLI/Connector build; check the installed CLI's command help before using them.
|
package/package.json
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xparse-cli",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.1-beta.2",
|
|
4
4
|
"description": "TextIn xParse command-line client for document parsing",
|
|
5
5
|
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://gitlab.intsig.net/xparse1/xparse-client.git"
|
|
9
|
+
},
|
|
6
10
|
"homepage": "https://www.textin.com/",
|
|
7
11
|
"bin": {
|
|
8
12
|
"xparse-cli": "bin/xparse-cli.js"
|
|
@@ -15,15 +19,15 @@
|
|
|
15
19
|
"node": ">=18"
|
|
16
20
|
},
|
|
17
21
|
"optionalDependencies": {
|
|
18
|
-
"xparse-cli-darwin-amd64": "2.6.
|
|
19
|
-
"xparse-cli-darwin-arm64": "2.6.
|
|
20
|
-
"xparse-cli-linux-amd64": "2.6.
|
|
21
|
-
"xparse-cli-linux-arm64": "2.6.
|
|
22
|
-
"xparse-cli-windows-amd64": "2.6.
|
|
23
|
-
"xparse-cli-windows-arm64": "2.6.
|
|
22
|
+
"xparse-cli-darwin-amd64": "2.6.1-beta.2",
|
|
23
|
+
"xparse-cli-darwin-arm64": "2.6.1-beta.2",
|
|
24
|
+
"xparse-cli-linux-amd64": "2.6.1-beta.2",
|
|
25
|
+
"xparse-cli-linux-arm64": "2.6.1-beta.2",
|
|
26
|
+
"xparse-cli-windows-amd64": "2.6.1-beta.2",
|
|
27
|
+
"xparse-cli-windows-arm64": "2.6.1-beta.2"
|
|
24
28
|
},
|
|
25
29
|
"publishConfig": {
|
|
26
30
|
"access": "public",
|
|
27
|
-
"tag": "
|
|
31
|
+
"tag": "beta"
|
|
28
32
|
}
|
|
29
33
|
}
|