web-access-cli 0.3.0 → 0.4.0

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 CHANGED
@@ -13,7 +13,7 @@ The CLI is the primary product interface. It is not tied to Pi, Claude Code, Cod
13
13
 
14
14
  | Capability | Provider types | Normalized output |
15
15
  | --- | --- | --- |
16
- | `search` | Tavily, Exa, Bocha, Brave, SearXNG, AnySearch, XCrawl, DeepSeek | `rank`, `title`, `url`, `snippet` |
16
+ | `search` | Tavily, Exa, Bocha, Brave, SearXNG, AnySearch, XCrawl, DeepSeek, xAI x_search, xAI web_search | `rank`, `title`, `url`, `snippet` |
17
17
  | `extract` | Firecrawl v2, Jina Reader, Exa Contents, AnySearch, XCrawl, HTTP | Markdown `Document` |
18
18
 
19
19
  A provider type describes an implementation, while a provider instance is a configurable instance of that type. One type can have multiple instances, such as `exa_team` and `exa_personal`. A `providers` route is an ordered array of instance IDs that determines which instances are enabled and the initial `auto` order. The CLI stores the learned effective order in the sibling `_providers` field.
@@ -84,8 +84,8 @@ web-access extract https://example.com/article
84
84
  web-access extract https://example.com/article --provider http --timeout 30000
85
85
  web-access extract https://example.com/article --json
86
86
 
87
- web-access providers --pretty
88
- web-access doctor --pretty
87
+ web-access providers
88
+ web-access doctor
89
89
 
90
90
  web-access config edit
91
91
  web-access --config "/path/to/config.json" config edit
@@ -96,10 +96,10 @@ The CLI provides the `search` and `extract` capability commands, the `providers`
96
96
  ### Global options
97
97
 
98
98
  - `--config <path>`: Explicitly select a configuration file.
99
- - `--pretty`: Pretty-print JSON. By default, JSON is written on a single line.
99
+ - `--json`: Output a compact schema v2 JSON envelope. Without it, successful commands write human-readable Markdown; all failures always write JSON.
100
100
  - `--help`, `--version`: Print standard CLI help or version text.
101
101
 
102
- Extract succeeds with Markdown by default. Its YAML front matter contains only the final Instance ID (`provider`), the returned document URL (`url`), and a non-empty trimmed title (`title`). Add `extract --json` when a schema v2 envelope is required; `--pretty` and `--debug` also select JSON. Extract failures, including `partial` results, always remain JSON envelopes. Search, diagnostics, and `config edit` continue to output JSON. Diagnostic messages are never mixed into stdout.
102
+ Successful commands default to Markdown for human readers. `search` writes a YAML front matter block followed by a numbered result list; `extract` writes YAML front matter followed by the normalized Markdown body; `providers`, `doctor`, and `config edit` write a heading followed by pretty-printed JSON data. Add `--json` when a schema v2 envelope is required. Extract `partial` results and all failures, including invalid input and runtime errors, always remain JSON envelopes. Diagnostic messages are never mixed into stdout.
103
103
 
104
104
  ## Configuration
105
105
 
@@ -107,7 +107,7 @@ Configuration files use strict JSON; unknown fields are rejected. The CLI reads
107
107
 
108
108
  The default path on every platform is `~/.config/web-access-cli/config.json`, where `~` is the current user's home directory. The `WEB_ACCESS_CONFIG` environment variable can select another path. The `--config` command-line option takes precedence.
109
109
 
110
- `web-access config edit` creates parent directories and a complete default configuration when the file is missing, then opens it with the operating system's default application for JSON files. An existing file is opened byte-for-byte as-is, even when it is temporarily invalid JSON; it is never overwritten or reformatted. The command waits only for the operating system to accept the open request, not for the editor to close. On success, envelope `data` contains the absolute `path`, `created`, and `opened: true`. A default-application launch failure returns `open_failed`; a configuration file that was created successfully remains available for manual editing.
110
+ `web-access config edit` creates parent directories and a complete default configuration when the file is missing, then opens it with the command in `VISUAL`, or `EDITOR` when `VISUAL` is empty. The value may contain a quoted executable path and arguments; it is parsed without shell evaluation and the configuration path is appended as a separate argument. An existing file is opened byte-for-byte as-is, even when it is temporarily invalid JSON; it is never overwritten or reformatted. The command waits only for the editor process to start, not for it to close. When neither variable is set, the command returns `open_failed`; a configuration file that was created successfully remains available for manual editing.
111
111
 
112
112
  `config edit` itself never rewrites existing content. After an `auto` capability call succeeds or encounters fallback-eligible failures, the CLI atomically updates `search._providers` or `extract._providers`. If the default configuration does not exist, the first `auto` call that produces a learning result creates the complete default configuration. `_providers` is CLI-managed and cannot enable an instance outside `providers`. Missing, malformed, duplicate, unknown, or membership-mismatched internal entries reset the whole capability to the declared route. Delete `_providers` to restore the user-declared initial order manually.
113
113
 
@@ -115,7 +115,7 @@ The complete JSON Schema is available at [schemas/config.schema.json](schemas/co
115
115
 
116
116
  ```json
117
117
  {
118
- "$schema": "https://unpkg.com/web-access-cli@0.3.0/schemas/config.schema.json",
118
+ "$schema": "https://unpkg.com/web-access-cli@0.4.0/schemas/config.schema.json",
119
119
  "providers": [
120
120
  {
121
121
  "id": "exa_team",
@@ -139,8 +139,8 @@ The complete JSON Schema is available at [schemas/config.schema.json](schemas/co
139
139
  "search": {
140
140
  "providers": ["searx_local", "exa_team", "brave"],
141
141
  "limit": 5,
142
- "timeoutMs": 60000,
143
- "attemptTimeoutMs": 20000,
142
+ "timeoutMs": 120000,
143
+ "attemptTimeoutMs": 60000,
144
144
  "maxResponseBytes": 5242880
145
145
  },
146
146
  "extract": {
@@ -153,17 +153,19 @@ The complete JSON Schema is available at [schemas/config.schema.json](schemas/co
153
153
  }
154
154
  ```
155
155
 
156
- The built-in instances are `tavily`, `exa`, `bocha`, `brave`, `searxng`, `firecrawl`, `jina`, `http`, `anysearch`, `xcrawl`, and `deepseek`. A configuration entry with the same ID overrides fields on the built-in instance. A custom ID creates another instance of the selected type. An instance is enabled only when it appears in the corresponding `providers` route. Bocha defaults to `https://api.bocha.cn` and requires an API key; AnySearch defaults to `https://api.anysearch.com` and supports anonymous calls; XCrawl defaults to `https://run.xcrawl.com` and requires an API key; DeepSeek defaults to `https://api.deepseek.com/anthropic/v1` and requires an API key.
156
+ The built-in instances are `tavily`, `exa`, `bocha`, `brave`, `searxng`, `firecrawl`, `jina`, `http`, `anysearch`, `xcrawl`, `deepseek`, `xai_x_search`, and `xai_web_search`. A configuration entry with the same ID overrides fields on the built-in instance. A custom ID creates another instance of the selected type. An instance is enabled only when it appears in the corresponding `providers` route. Bocha defaults to `https://api.bocha.cn` and requires an API key; AnySearch defaults to `https://api.anysearch.com` and supports anonymous calls; XCrawl defaults to `https://run.xcrawl.com` and requires an API key; DeepSeek defaults to `https://api.deepseek.com/anthropic/v1` and requires an API key.
157
157
 
158
158
  Default routes:
159
159
 
160
- - Search: `tavily -> exa -> bocha -> brave -> searxng -> anysearch -> xcrawl -> deepseek`
160
+ - Search: `tavily -> exa -> bocha -> brave -> searxng -> anysearch -> xcrawl -> deepseek -> xai_web_search`
161
161
  - Extract: `firecrawl -> jina -> exa -> anysearch -> xcrawl -> http`
162
162
 
163
163
  The default routes include every built-in instance that supports the corresponding capability. Custom instance IDs are merged into the instance list but must still be added to routes explicitly. An omitted route uses the defaults above, while an explicit empty array disables that capability. In `auto` mode, incompletely configured instances are skipped; AnySearch can be called anonymously with its default base URL, while XCrawl and DeepSeek are skipped until their API keys are configured. AnySearch and XCrawl accept `searchFilterMode`: `strict` (default; freshness skips the provider) or `best_effort` (rewrites freshness into a query fragment). Domain constraints are rewritten into the query and strictly re-applied locally. XCrawl Extract always uses synchronous Scrape with Markdown output; Map, Crawl, and asynchronous jobs are outside the current CLI capabilities.
164
164
 
165
165
  DeepSeek Search performs a full Anthropic-compatible Messages model turn with the native `web_search_20250305` server tool, so it can have higher latency and cost than a dedicated search endpoint. It is last in the default route and is reached only after earlier providers are unavailable, return a final non-2xx HTTP response, or otherwise fail recoverably. The adapter accepts URLs only from structured `web_search_tool_result` blocks, joins citation excerpts by URL, and never extracts URLs from model prose. Domain constraints are rewritten into the query and strictly re-applied locally; `freshness` is unsupported and skips DeepSeek with a recoverable error. Redirects are rejected without contacting the `Location` target. Provider-private `encrypted_content` payloads are omitted from `raw` because they are opaque, cannot be displayed or decoded by the CLI, and add no diagnostic value.
166
166
 
167
+ XAI hosted Search reads an external OAuth JSON file from `XAI_AUTH_JSON` on every call and uses only its `access_token`; an external CLIProxyAPI process owns refresh and write-back. Instance fields `authJson`/`authJsonEnv` and `model`/`modelEnv` override the path and model. `xai_web_search` accepts at most five allow or exclude domains (mutually exclusive); `xai_x_search` rejects `freshness`. Model-backed search can take longer than ordinary API searches; Search defaults allow up to 60 seconds per attempt and 120 seconds total.
168
+
167
169
  ### Credentials and URLs
168
170
 
169
171
  Environment variables take precedence over plaintext keys in JSON. Built-in instances support these standard variables:
@@ -181,6 +183,7 @@ Environment variables take precedence over plaintext keys in JSON. Built-in inst
181
183
  | AnySearch | `ANYSEARCH_API_KEY`, optional | `ANYSEARCH_BASE_URL`, default `https://api.anysearch.com` |
182
184
  | XCrawl | `XCRAWL_API_KEY` | `XCRAWL_BASE_URL`, default `https://run.xcrawl.com` |
183
185
  | DeepSeek | `DEEPSEEK_API_KEY` | No standard environment variable; default `https://api.deepseek.com/anthropic/v1` |
186
+ | xAI Search | `XAI_AUTH_JSON` | No standard API-key variable; default `https://cli-chat-proxy.grok.com/v1`, model `grok-4.6` |
184
187
 
185
188
  Custom instances use `apiKeyEnv` and `baseUrlEnv` to name their environment variables. Every remote provider can define a `baseUrl` and additional `headers`. The public `api.firecrawl.dev` service requires a key; a self-hosted Firecrawl v2 instance can run without one.
186
189
 
@@ -200,7 +203,7 @@ An attempt keeps the provider's original error code, HTTP status, and `retryable
200
203
 
201
204
  Selecting an instance explicitly executes it strictly without fallback. If the instance is not in the route, the command returns `provider_disabled`.
202
205
 
203
- Default limits are a 60-second total timeout and a 20-second per-attempt timeout for Search, and 120 seconds and 45 seconds respectively for Extract. Each response has a hard limit of 5 MiB. `--timeout` overrides only the total timeout for the current command.
206
+ Default limits are a 120-second total timeout and a 60-second per-attempt timeout for Search, and 120 seconds and 45 seconds respectively for Extract. Each response has a hard limit of 5 MiB. `--timeout` overrides only the total timeout for the current command.
204
207
 
205
208
  ## Output contract
206
209
 
@@ -224,9 +227,9 @@ Capability commands use output schema version 2. Their default envelope is inten
224
227
  }
225
228
  ```
226
229
 
227
- Default capability output contains only `schemaVersion`, `ok`, the final Instance ID and normalized `data`. Failures contain a compact `error` and, when providers were attempted, `attempts` entries with only Instance ID, error code and optional HTTP status. Extract quality failures may include a `partial` document without raw provider data. If the learned order cannot be written, either a success or failure envelope additionally contains `warnings: [{ "code": "provider_order_update_failed", "message": "..." }]` without replacing the primary result. Search and extract input errors use the same compact failure shape.
230
+ With `--json`, capability output contains only `schemaVersion`, `ok`, the final Instance ID and normalized `data`. Failures contain a compact `error` and, when providers were attempted, `attempts` entries with only Instance ID, error code and optional HTTP status. Extract quality failures may include a `partial` document without raw provider data. If the learned order cannot be written, either a success or failure envelope additionally contains `warnings: [{ "code": "provider_order_update_failed", "message": "..." }]` without replacing the primary result. Search and extract input errors use the same compact failure shape.
228
231
 
229
- For human-readable extraction, the default Markdown output starts with YAML front matter and then the provider-normalized Markdown body. Metadata values use JSON double-quoted scalar encoding and the body is not modified. Existing scripts and other machine consumers should append `--json` explicitly.
232
+ For human-readable output, extraction starts with YAML front matter and then the provider-normalized Markdown body. Search results use a numbered Markdown list; diagnostics and config edit use a heading plus pretty-printed JSON data. Metadata values use JSON double-quoted scalar encoding and the body is not modified. Existing scripts and other machine consumers should append `--json` explicitly.
230
233
 
231
234
  Example default extract output:
232
235
 
@@ -240,13 +243,13 @@ title: "Example title"
240
243
  # Article content
241
244
  ```
242
245
 
243
- Use `--debug` on `search` or `extract` only for protocol troubleshooting. It adds a nested `debug` object containing the request, durations, complete attempts and the final or best-failure raw response. Raw data remains recursively redacted and is not part of normal Agent calls. `providers`, `doctor`, and `config edit` retain their detailed diagnostic envelopes; all envelopes use schema version 2. Stable schemas are available in [schemas](schemas).
246
+ All success and failure envelopes use schema version 2. Stable schemas are available in [schemas](schemas).
244
247
 
245
248
  Exit codes:
246
249
 
247
250
  - `0`: Success
248
251
  - `2`: Invalid input or configuration, or an unknown or disabled provider
249
- - `1`: Runtime, provider, doctor, or default-application launch failure
252
+ - `1`: Runtime, provider, doctor, or editor launch failure
250
253
  - `130`: User cancellation
251
254
 
252
255
  `providers` lists each instance's type, capabilities, route status, credential source, and base URL source. Its `searchRoute` and `extractRoute` fields show the effective order for the next `auto` call. `doctor` performs local configuration checks only and does not call remote APIs. If an enabled route contains an unconfigured instance, the command returns `doctor_failed` with exit code `1`.
package/README_CN.md CHANGED
@@ -13,7 +13,7 @@ CLI 是主要产品形态,不绑定 Pi、Claude Code、Codex、Cursor、OpenCo
13
13
 
14
14
  | 能力 | Provider Type | 统一输出 |
15
15
  | --- | --- | --- |
16
- | `search` | Tavily、Exa、Bocha、Brave、SearXNG、AnySearch、XCrawl、DeepSeek | `rank`、`title`、`url`、`snippet` |
16
+ | `search` | Tavily、Exa、Bocha、Brave、SearXNG、AnySearch、XCrawl、DeepSeek、xAI x_search、xAI web_search | `rank`、`title`、`url`、`snippet` |
17
17
  | `extract` | Firecrawl v2、Jina Reader、Exa Contents、AnySearch、XCrawl、HTTP | Markdown `Document` |
18
18
 
19
19
  Provider Type 描述实现类型;Provider Instance 是一份可配置实例。一个 Type 可以有多个 Instance,例如 `exa_team` 和 `exa_personal`。`providers` Route 是有序 Instance ID 数组,决定启用状态和 `auto` 的初始顺序;CLI 会把学习后的实际顺序保存在同级 `_providers`。
@@ -84,8 +84,8 @@ web-access extract https://example.com/article
84
84
  web-access extract https://example.com/article --provider http --timeout 30000
85
85
  web-access extract https://example.com/article --json
86
86
 
87
- web-access providers --pretty
88
- web-access doctor --pretty
87
+ web-access providers
88
+ web-access doctor
89
89
 
90
90
  web-access config edit
91
91
  web-access --config "/path/to/config.json" config edit
@@ -96,10 +96,10 @@ CLI 提供 `search`、`extract` 两个能力命令,`providers`、`doctor` 两
96
96
  ### 通用选项
97
97
 
98
98
  - `--config <path>`:显式指定配置文件。
99
- - `--pretty`:格式化 JSON;默认输出单行 JSON。
99
+ - `--json`:输出紧凑 schema v2 JSON envelope;不指定时,成功命令输出面向人的 Markdown,失败始终输出 JSON。
100
100
  - `--help`、`--version`:输出常规 CLI 帮助或版本文本。
101
101
 
102
- `extract` 成功时默认输出 Markdown,文首 YAML front matter 只包含最终 Instance ID(`provider`)、Provider 返回的文档 URL(`url`)和非空的去除首尾空白标题(`title`)。需要 schema v2 envelope 时显式追加 `extract --json`;`--pretty` 和 `--debug` 也会选择 JSON。提取失败(包括 `partial`)始终输出 JSON envelope。`search`、诊断命令和 `config edit` 继续输出 JSON。诊断信息不会混入 stdout。
102
+ 成功命令默认输出面向人的 Markdown。`search` 输出 YAML front matter 和编号结果列表;`extract` 输出 YAML front matter 和规范化后的 Markdown 正文;`providers`、`doctor` 和 `config edit` 输出标题和格式化 JSON 数据。需要 schema v2 envelope 时显式追加 `--json`。提取失败(包括 `partial`)以及所有失败路径始终输出 JSON envelope。诊断信息不会混入 stdout。
103
103
 
104
104
  ## 配置
105
105
 
@@ -107,7 +107,7 @@ CLI 提供 `search`、`extract` 两个能力命令,`providers`、`doctor` 两
107
107
 
108
108
  所有平台的默认路径均为 `~/.config/web-access-cli/config.json`,其中 `~` 表示当前用户的主目录。环境变量 `WEB_ACCESS_CONFIG` 可以指定其他路径;命令行 `--config` 优先级更高。
109
109
 
110
- `web-access config edit` 会在配置文件缺失时创建父目录和完整默认配置,再用系统为 JSON 文件关联的默认应用打开;已有文件会原样打开,即使内容暂时不是有效 JSON 也不会被覆盖或格式化。命令只等待系统接受打开请求,不等待编辑器关闭。成功 envelope 的 `data` 包含绝对 `path`、是否新建的 `created` 和 `opened: true`。无法启动默认应用时返回 `open_failed`;如果配置刚刚创建成功,文件仍会保留以便手动打开。
110
+ `web-access config edit` 会在配置文件缺失时创建父目录和完整默认配置,再优先使用 `VISUAL`、其次使用 `EDITOR` 打开;变量值可以包含带引号的可执行文件路径和参数,解析时不会执行 shell,并将配置路径作为独立的最后一个参数传入。已有文件会原样打开,即使内容暂时不是有效 JSON 也不会被覆盖或格式化。命令只等待编辑器进程启动,不等待编辑器关闭。两个变量都未设置、格式无效或启动失败时返回 `open_failed`;如果配置刚刚创建成功,文件仍会保留以便手动编辑。
111
111
 
112
112
  `config edit` 本身不会改写已有内容;能力命令使用 `auto` 成功或发生可回退失败后,会原子更新 `search._providers` 或 `extract._providers`。默认配置尚不存在时,首次产生学习结果的 `auto` 调用会创建完整默认配置。`_providers` 由 CLI 管理,不会启用 `providers` 之外的 Instance;其内容缺失、格式错误、重复、引用未知 ID 或与 `providers` 成员集合不一致时会整组重置。删除 `_providers` 可以手动恢复用户声明的初始顺序。
113
113
 
@@ -115,7 +115,7 @@ CLI 提供 `search`、`extract` 两个能力命令,`providers`、`doctor` 两
115
115
 
116
116
  ```json
117
117
  {
118
- "$schema": "https://unpkg.com/web-access-cli@0.3.0/schemas/config.schema.json",
118
+ "$schema": "https://unpkg.com/web-access-cli@0.4.0/schemas/config.schema.json",
119
119
  "providers": [
120
120
  {
121
121
  "id": "exa_team",
@@ -139,8 +139,8 @@ CLI 提供 `search`、`extract` 两个能力命令,`providers`、`doctor` 两
139
139
  "search": {
140
140
  "providers": ["searx_local", "exa_team", "brave"],
141
141
  "limit": 5,
142
- "timeoutMs": 60000,
143
- "attemptTimeoutMs": 20000,
142
+ "timeoutMs": 120000,
143
+ "attemptTimeoutMs": 60000,
144
144
  "maxResponseBytes": 5242880
145
145
  },
146
146
  "extract": {
@@ -153,17 +153,19 @@ CLI 提供 `search`、`extract` 两个能力命令,`providers`、`doctor` 两
153
153
  }
154
154
  ```
155
155
 
156
- 内置 Instance 为 `tavily`、`exa`、`bocha`、`brave`、`searxng`、`firecrawl`、`jina`、`http`、`anysearch`、`xcrawl`、`deepseek`。配置同 ID 时会覆盖内置实例的字段;自定义 ID 可以创建同 Type 的额外实例。只有出现在对应 `providers` Route 中的实例才启用。Bocha 默认 base URL 为 `https://api.bocha.cn`,必须配置 API key;AnySearch 默认 base URL 为 `https://api.anysearch.com`,支持匿名调用;XCrawl 默认 base URL 为 `https://run.xcrawl.com`,必须配置 API key;DeepSeek 默认 base URL 为 `https://api.deepseek.com/anthropic/v1`,必须配置 API key。
156
+ 内置 Instance 为 `tavily`、`exa`、`bocha`、`brave`、`searxng`、`firecrawl`、`jina`、`http`、`anysearch`、`xcrawl`、`deepseek`、`xai_x_search`、`xai_web_search`。配置同 ID 时会覆盖内置实例的字段;自定义 ID 可以创建同 Type 的额外实例。只有出现在对应 `providers` Route 中的实例才启用。Bocha 默认 base URL 为 `https://api.bocha.cn`,必须配置 API key;AnySearch 默认 base URL 为 `https://api.anysearch.com`,支持匿名调用;XCrawl 默认 base URL 为 `https://run.xcrawl.com`,必须配置 API key;DeepSeek 默认 base URL 为 `https://api.deepseek.com/anthropic/v1`,必须配置 API key。
157
157
 
158
158
  默认 Route:
159
159
 
160
- - Search:`tavily -> exa -> bocha -> brave -> searxng -> anysearch -> xcrawl -> deepseek`
160
+ - Search:`tavily -> exa -> bocha -> brave -> searxng -> anysearch -> xcrawl -> deepseek -> xai_web_search`
161
161
  - Extract:`firecrawl -> jina -> exa -> anysearch -> xcrawl -> http`
162
162
 
163
163
  默认 Route 包含支持对应 Capability 的全部内置 Instance。自定义 ID 会合并到 Instance 列表,但仍需显式加入 Route;省略 Route 时使用上述默认值,显式空数组则禁用对应能力。`auto` 会跳过未完成配置的 Instance;AnySearch 使用默认 base URL 时可匿名调用,XCrawl 和 DeepSeek 则在配置 API key 前被跳过。AnySearch 与 XCrawl 可设置 `searchFilterMode`:`strict`(默认,遇到 freshness 时跳过)或 `best_effort`(将日期改写为查询片段)。域名条件会改写查询并在本地再次严格过滤。XCrawl Extract 固定使用同步 Scrape 的 Markdown 输出;Map、Crawl 和异步任务不属于当前 CLI 能力。
164
164
 
165
165
  DeepSeek Search 通过 Anthropic-compatible Messages API 调用原生 `web_search_20250305` server tool,一次搜索是完整模型轮次,因此延迟和成本可能高于专用搜索 endpoint。它位于默认 Route 末尾,仅在前序 Provider 未配置、返回最终非 2xx HTTP 响应或发生其他可恢复失败后触发。Adapter 只接受 `web_search_tool_result` 中的结构化 URL,按 URL 合并 citation 摘要,绝不从模型 prose 中猜测 URL。域名条件会改写查询并在本地再次严格过滤;DeepSeek 不支持 `freshness`,遇到该参数时以可恢复错误跳过;重定向会被严格拒绝,且不会访问 `Location` 目标。Provider 私有的 `encrypted_content` 是 CLI 无法展示或解码的 opaque payload,不具备诊断价值,因此会从 `raw` 中移除。
166
166
 
167
+ XAI hosted Search 使用 `XAI_AUTH_JSON` 指向外部 OAuth JSON 文件,每次调用只读取 `access_token`,由外部 CLIProxyAPI 负责刷新和回写。可用 `authJson`/`authJsonEnv` 与 `model`/`modelEnv` 为实例覆盖路径和模型。`xai_web_search` 支持最多 5 个 allow 或 exclude 域名(两者不能同时使用);`xai_x_search` 不接受 `freshness`。模型搜索可能需要更长时间;Search 默认单次超时 60 秒、总超时 120 秒。
168
+
167
169
  ### 凭据和 URL
168
170
 
169
171
  环境变量优先于 JSON 中的明文 key。内置 Instance 支持这些标准变量:
@@ -181,6 +183,7 @@ DeepSeek Search 通过 Anthropic-compatible Messages API 调用原生 `web_searc
181
183
  | AnySearch | `ANYSEARCH_API_KEY`,可选 | `ANYSEARCH_BASE_URL`,默认 `https://api.anysearch.com` |
182
184
  | XCrawl | `XCRAWL_API_KEY` | `XCRAWL_BASE_URL`,默认 `https://run.xcrawl.com` |
183
185
  | DeepSeek | `DEEPSEEK_API_KEY` | 无标准环境变量;默认 `https://api.deepseek.com/anthropic/v1` |
186
+ | xAI Search | `XAI_AUTH_JSON` | 无标准环境变量;默认 `https://cli-chat-proxy.grok.com/v1`,模型 `grok-4.6` |
184
187
 
185
188
  自定义 Instance 使用 `apiKeyEnv` 和 `baseUrlEnv` 指定自己的环境变量。所有远端 Provider 都可以设置 `baseUrl` 和附加 `headers`。公共 `api.firecrawl.dev` 需要 key;自托管 Firecrawl v2 可以不设置 key。
186
189
 
@@ -200,7 +203,7 @@ Attempt 会保留 Provider 的原始错误码、HTTP status 和 `retryable` 值
200
203
 
201
204
  显式指定 Instance 时严格执行,不触发 fallback。若实例不在 Route 中,返回 `provider_disabled`。
202
205
 
203
- 默认上限:Search 总超时/单次超时为 60s/20s,Extract 为 120s/45s;单个响应硬上限为 5 MiB。`--timeout` 只覆盖本次命令的总超时。
206
+ 默认上限:Search 总超时/单次超时为 120s/60s,Extract 为 120s/45s;单个响应硬上限为 5 MiB。`--timeout` 只覆盖本次命令的总超时。
204
207
 
205
208
  ## 输出契约
206
209
 
@@ -224,9 +227,9 @@ Attempt 会保留 Provider 的原始错误码、HTTP status 和 `retryable` 值
224
227
  }
225
228
  ```
226
229
 
227
- 能力命令成功时默认只有 `schemaVersion`、`ok`、最终 Instance ID 和规范化 `data`。失败时包含精简 `error`;实际尝试过 Provider 时,`attempts` 只保留 Instance ID、错误码和可选 HTTP status。提取质量失败可包含不含 raw 的 `partial` 文档。排序无法写回时,成功或失败 envelope 会额外包含 `warnings: [{ "code": "provider_order_update_failed", "message": "..." }]`,但不会覆盖主要结果。搜索和提取输入错误也使用相同的精简失败结构。
230
+ 使用 `--json` 时,能力命令成功只包含 `schemaVersion`、`ok`、最终 Instance ID 和规范化 `data`。失败时包含精简 `error`;实际尝试过 Provider 时,`attempts` 只保留 Instance ID、错误码和可选 HTTP status。提取质量失败可包含不含 raw 的 `partial` 文档。排序无法写回时,成功或失败 envelope 会额外包含 `warnings: [{ "code": "provider_order_update_failed", "message": "..." }]`,但不会覆盖主要结果。搜索和提取输入错误也使用相同的精简失败结构。
228
231
 
229
- 面向人的提取默认输出以 YAML front matter 开头、随后是 Provider 规范化的 Markdown 正文。元数据值统一使用 JSON 双引号标量编码,正文内容不改写。已有脚本和其他机器消费者应显式追加 `--json`。
232
+ 面向人的输出中,提取以 YAML front matter 开头、随后是 Provider 规范化的 Markdown 正文;搜索使用编号 Markdown 列表;诊断和配置编辑使用标题加格式化 JSON 数据。元数据值统一使用 JSON 双引号标量编码,正文内容不改写。已有脚本和其他机器消费者应显式追加 `--json`。
230
233
 
231
234
  默认提取输出示例:
232
235
 
@@ -240,13 +243,13 @@ title: "Example title"
240
243
  # Article content
241
244
  ```
242
245
 
243
- 只有协议排障时才在 `search` 或 `extract` 上使用 `--debug`。该选项会增加嵌套 `debug`,其中包含 request、耗时、完整 attempts 以及最终成功或最佳失败的 raw 响应;raw 仍会递归脱敏,常规 Agent 调用不应使用此选项。`providers`、`doctor` 和 `config edit` 保留详细诊断 envelope;所有 envelope 使用 schema version 2。稳定 schema 位于 [schemas](schemas)。
246
+ 所有成功和失败 envelope 使用 schema version 2。稳定 schema 位于 [schemas](schemas)。
244
247
 
245
248
  退出码:
246
249
 
247
250
  - `0`:成功
248
251
  - `2`:输入、配置、未知或未启用 provider
249
- - `1`:运行时/provider/doctor/默认应用启动失败
252
+ - `1`:运行时/provider/doctor/编辑器启动失败
250
253
  - `130`:用户取消
251
254
 
252
255
  `providers` 会列出每个 Instance 的 Type、能力、Route 启用状态、凭据来源和 base URL 来源;`searchRoute` 与 `extractRoute` 是下一次 `auto` 使用的有效顺序。`doctor` 只做本地配置检查,不主动调用远端 API;当已启用 Route 中存在未配置 Instance 时,命令返回 `doctor_failed` 和退出码 `1`。
@@ -46,6 +46,17 @@ DeepSeek Search Provider 的 Anthropic-compatible Messages wire shape、结构
46
46
 
47
47
  动态 Settings、Credential Service、Session event、LLM seam 和 Agent 集成代码没有进入本项目。
48
48
 
49
+ ## Grok Build xAI Search
50
+
51
+ The xAI hosted search request and response mapping is derived from the `grok-build` project:
52
+
53
+ - Repository: `https://github.com/xai-org/grok-build`
54
+ - Source revision: `a549186d9d39311f2d3ee4208db62af8c65aa476`
55
+ - Copyright 2023-2026 SpaceXAI
56
+ - License: Apache-2.0
57
+
58
+ The adapted code is limited to the Responses tool wire shape and citation mapping. The full Apache-2.0 license is retained in the upstream repository.
59
+
49
60
  ## npm 依赖
50
61
 
51
62
  发行包直接使用以下开源组件:
@@ -15,4 +15,20 @@ export function formatExtractMarkdown(envelope) {
15
15
  const content = document.content;
16
16
  return `${lines.join("\n")}${content.endsWith("\n") ? content : `${content}\n`}`;
17
17
  }
18
+ export function formatMarkdown(envelope) {
19
+ if ("provider" in envelope && "document" in envelope.data)
20
+ return formatExtractMarkdown(envelope);
21
+ if ("provider" in envelope && "results" in envelope.data) {
22
+ const e = envelope;
23
+ const body = e.data.results
24
+ .map((result, index) => `${index + 1}. [${result.title}](${result.url})${result.snippet ? `\n ${result.snippet}` : ""}`)
25
+ .join("\n");
26
+ return `---\nprovider: ${JSON.stringify(e.provider)}\n---\n\n${body || "无搜索结果"}\n`;
27
+ }
28
+ if ("command" in envelope && envelope.ok) {
29
+ const e = envelope;
30
+ return `# ${e.command}\n\n${JSON.stringify(e.data, null, 2)}\n`;
31
+ }
32
+ return "";
33
+ }
18
34
  //# sourceMappingURL=cli-output.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli-output.js","sourceRoot":"","sources":["../src/cli-output.ts"],"names":[],"mappings":"AAIA,SAAS,UAAU,CAAC,KAAa;IAChC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,qBAAqB,CACpC,QAAgC;IAEhC,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC;IACnC,MAAM,KAAK,GAAG;QACb,KAAK;QACL,aAAa,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAC5C,QAAQ,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;KACxC,CAAC;IACF,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACpC,IAAI,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IACjC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,EAAE,CAAC;AAClF,CAAC"}
1
+ {"version":3,"file":"cli-output.js","sourceRoot":"","sources":["../src/cli-output.ts"],"names":[],"mappings":"AAUA,SAAS,UAAU,CAAC,KAAa;IAChC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,qBAAqB,CACpC,QAAgC;IAEhC,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC;IACnC,MAAM,KAAK,GAAG;QACb,KAAK;QACL,aAAa,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAC5C,QAAQ,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;KACxC,CAAC;IACF,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACpC,IAAI,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IACjC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,EAAE,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAwB;IACtD,IAAI,UAAU,IAAI,QAAQ,IAAI,UAAU,IAAI,QAAQ,CAAC,IAAI;QACxD,OAAO,qBAAqB,CAAC,QAAkC,CAAC,CAAC;IAClE,IAAI,UAAU,IAAI,QAAQ,IAAI,SAAS,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC1D,MAAM,CAAC,GAAG,QAAiC,CAAC;QAC5C,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO;aACzB,GAAG,CACH,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CACjB,GAAG,KAAK,GAAG,CAAC,MAAM,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAClG;aACA,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,OAAO,kBAAkB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,IAAI,IAAI,OAAO,IAAI,CAAC;IACpF,CAAC;IACD,IAAI,SAAS,IAAI,QAAQ,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,QAAiE,CAAC;QAC5E,OAAO,KAAK,CAAC,CAAC,OAAO,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IACjE,CAAC;IACD,OAAO,EAAE,CAAC;AACX,CAAC"}
package/dist/cli.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import { realpathSync } from "node:fs";
3
3
  import { pathToFileURL } from "node:url";
4
4
  import { Command, CommanderError, InvalidArgumentError, Option, } from "commander";
5
- import { formatExtractMarkdown } from "./cli-output.js";
5
+ import { formatMarkdown } from "./cli-output.js";
6
6
  import { loadConfig } from "./config/config.js";
7
7
  import { executeConfigEdit } from "./config/edit.js";
8
8
  import { createProviderOrderWriter } from "./config/provider-order.js";
@@ -47,34 +47,15 @@ function exitCode(envelope) {
47
47
  return 2;
48
48
  return 1;
49
49
  }
50
- function writeEnvelope(envelope, pretty) {
51
- process.stdout.write(`${JSON.stringify(envelope, null, pretty ? 2 : undefined)}\n`);
50
+ function writeEnvelope(envelope) {
51
+ process.stdout.write(`${JSON.stringify(envelope)}\n`);
52
52
  }
53
- function writeOutput(envelope, mode, pretty) {
54
- if (mode === "markdown" && isExtractSuccessEnvelope(envelope)) {
55
- process.stdout.write(formatExtractMarkdown(envelope));
53
+ function writeOutput(envelope, mode) {
54
+ if (mode === "markdown" && envelope.ok) {
55
+ process.stdout.write(formatMarkdown(envelope));
56
56
  return;
57
57
  }
58
- writeEnvelope(envelope, pretty);
59
- }
60
- function isExtractSuccessEnvelope(envelope) {
61
- return (envelope.ok &&
62
- "provider" in envelope &&
63
- typeof envelope.provider === "string" &&
64
- "data" in envelope &&
65
- typeof envelope.data === "object" &&
66
- envelope.data !== null &&
67
- "document" in envelope.data &&
68
- typeof envelope.data.document === "object" &&
69
- envelope.data.document !== null &&
70
- "sourceUrl" in envelope.data.document &&
71
- typeof envelope.data.document.sourceUrl === "string" &&
72
- "title" in envelope.data.document &&
73
- typeof envelope.data.document.title === "string" &&
74
- "content" in envelope.data.document &&
75
- typeof envelope.data.document.content === "string" &&
76
- "contentType" in envelope.data.document &&
77
- envelope.data.document.contentType === "text/markdown");
58
+ writeEnvelope(envelope);
78
59
  }
79
60
  export function createProgram(run, dependencies = {}) {
80
61
  const program = new Command();
@@ -84,7 +65,7 @@ export function createProgram(run, dependencies = {}) {
84
65
  .description("Agent-neutral 的网页搜索与内容提取 CLI")
85
66
  .version(VERSION)
86
67
  .option("--config <path>", "指定 JSON 配置文件")
87
- .option("--pretty", "格式化 JSON 输出;extract 同时选择 JSON 模式", false)
68
+ .option("--json", "输出 JSON envelope", false)
88
69
  .showSuggestionAfterError();
89
70
  program.configureOutput({ writeErr: () => { }, outputError: () => { } });
90
71
  program.exitOverride();
@@ -102,7 +83,7 @@ export function createProgram(run, dependencies = {}) {
102
83
  .option("--include-domain <domain>", "仅包含域名,可重复", collect, [])
103
84
  .option("--exclude-domain <domain>", "排除域名,可重复", collect, [])
104
85
  .option("--timeout <milliseconds>", "总超时毫秒数", integer)
105
- .option("--debug", "输出完整路由和脱敏原始响应", false)
86
+ .option("--json", "输出 JSON envelope", false)
106
87
  .action((query, options) => {
107
88
  run(async () => {
108
89
  const globals = program.opts();
@@ -123,22 +104,22 @@ export function createProgram(run, dependencies = {}) {
123
104
  return executeSearch(request, {
124
105
  loaded,
125
106
  signal: processSignal.signal,
126
- debug: options.debug,
127
107
  persistProviderOrder: createProviderOrderWriter(loaded),
128
108
  });
129
- });
109
+ }, options.json || program.opts().json
110
+ ? "json"
111
+ : "markdown");
130
112
  });
131
113
  program
132
114
  .command("extract")
133
- .description("提取网页正文并转换为 Markdown(--json/--pretty/--debug 输出 JSON)")
115
+ .description("提取网页正文并转换为 Markdown(使用 --json 输出 JSON)")
134
116
  .argument("<url>", "HTTP(S) URL")
135
117
  .option("-p, --provider <id>", "provider instance id,或 auto", "auto")
136
118
  .option("--timeout <milliseconds>", "总超时毫秒数", integer)
137
119
  .option("--json", "输出 JSON envelope", false)
138
- .option("--debug", "输出完整路由和脱敏原始响应", false)
139
120
  .action((url, options) => {
140
121
  const globals = program.opts();
141
- const outputMode = options.json || options.debug || globals.pretty ? "json" : "markdown";
122
+ const outputMode = options.json || globals.json ? "json" : "markdown";
142
123
  run(async () => {
143
124
  const loaded = loadConfig(globals.config);
144
125
  const request = {
@@ -149,7 +130,6 @@ export function createProgram(run, dependencies = {}) {
149
130
  return executeExtract(request, {
150
131
  loaded,
151
132
  signal: processSignal.signal,
152
- debug: options.debug,
153
133
  persistProviderOrder: createProviderOrderWriter(loaded),
154
134
  });
155
135
  }, outputMode);
@@ -157,18 +137,27 @@ export function createProgram(run, dependencies = {}) {
157
137
  program
158
138
  .command("providers")
159
139
  .description("列出 provider instance、route 与配置状态")
160
- .action(() => run(() => executeProviders(loadConfig(program.opts().config))));
140
+ .option("--json", "输出 JSON envelope", false)
141
+ .action((options) => run(() => executeProviders(loadConfig(program.opts().config)), options.json || program.opts().json
142
+ ? "json"
143
+ : "markdown"));
161
144
  program
162
145
  .command("doctor")
163
146
  .description("检查本地配置与已启用 provider 的可用性")
164
- .action(() => run(() => executeDoctor(loadConfig(program.opts().config))));
147
+ .option("--json", "输出 JSON envelope", false)
148
+ .action((options) => run(() => executeDoctor(loadConfig(program.opts().config)), options.json || program.opts().json
149
+ ? "json"
150
+ : "markdown"));
165
151
  const config = program.command("config").description("管理配置文件");
166
152
  config
167
153
  .command("edit")
168
- .description("创建默认配置文件并用系统默认应用打开")
169
- .action(() => run(() => runConfigEdit({
154
+ .description("创建默认配置文件并用 VISUAL 或 EDITOR 打开")
155
+ .option("--json", "输出 JSON envelope", false)
156
+ .action((options) => run(() => runConfigEdit({
170
157
  explicitPath: program.opts().config,
171
- })));
158
+ }), options.json || program.opts().json
159
+ ? "json"
160
+ : "markdown"));
172
161
  return program;
173
162
  }
174
163
  function envelopeCommand(args) {
@@ -191,7 +180,7 @@ async function main() {
191
180
  });
192
181
  if (process.argv.length <= 2) {
193
182
  const envelope = errorEnvelope(new WebAccessError("invalid_input", "必须指定命令"));
194
- writeEnvelope(envelope, false);
183
+ writeEnvelope(envelope);
195
184
  process.exitCode = 2;
196
185
  return;
197
186
  }
@@ -200,7 +189,7 @@ async function main() {
200
189
  if (!pending)
201
190
  throw new WebAccessError("invalid_input", "必须指定命令");
202
191
  const envelope = await pending;
203
- writeOutput(envelope, pendingOutputMode, !!program.opts().pretty);
192
+ writeOutput(envelope, pendingOutputMode);
204
193
  process.exitCode = exitCode(envelope);
205
194
  }
206
195
  catch (caught) {
@@ -215,7 +204,7 @@ async function main() {
215
204
  : caught.message)
216
205
  : asWebAccessError(caught);
217
206
  const envelope = errorEnvelope(normalized, envelopeCommand(program.args));
218
- writeEnvelope(envelope, !!program.opts().pretty);
207
+ writeEnvelope(envelope);
219
208
  process.exitCode = exitCode(envelope);
220
209
  }
221
210
  }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}