aura-argus 0.1.1 → 0.1.3

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/CHANGELOG.md CHANGED
@@ -1,12 +1,19 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.1 — 2026-10-21
3
+ ## 0.1.3 — 2026-10-22
4
+
5
+ ### Fixed
6
+
7
+ - Export `./adapters/dsh/index.mjs` so the published package can be resolved by package subpath from DSH.
8
+
9
+ ## 0.1.2 — 2026-10-21
4
10
 
5
11
  ### Changed
6
12
 
7
13
  - Repository metadata now points at the Aura monorepo (`Ck-epsilon/Aura`, directory `aura-argus`).
8
14
  - ZCode integration docs corrected: first-party MCP via `~/.zcode/cli/config.json` `mcp.servers`.
9
15
  - No runtime behavior changes.
16
+ - 0.1.1 was staged by npm's publish flow but never became public; 0.1.2 supersedes it.
10
17
 
11
18
  ## 0.1.0 — 2026-10-21
12
19
 
package/README.md CHANGED
@@ -1,101 +1,135 @@
1
1
  # AuraArgus
2
2
 
3
- 给 agent 的检索层。两个能力,替代传统的 search 与 fetch:
3
+ **把技术问题路由到官方文档,返回可引用的原文段落。**
4
4
 
5
- - **search**:把问题路由到注册的官方源,抓回页面,返回**可引用的逐字段落**。
6
- - **fetch**:取回一个 URL,转成干净的 Markdown 文本。
5
+ AuraArgus 是一个本地运行的检索工具,给 agent、脚本或你自己用。它不卖搜索 API,不需要 key,也不按次计费:你给一个问题,它找到对应的官方页面,抓回正文,挑出相关段落,连同出处 URL 一起返回。
7
6
 
8
- 零 API key、零按次计费、默认只连官方页;Windows / macOS / Linux 同一份代码。
7
+ 它解决的不是“搜不到”,而是“搜到的是一堆二手摘要”。官方文档里本来就有答案,缺的是从问题到那页纸的路由。
9
8
 
10
- ## 为什么不是搜索引擎聚合器
9
+ ---
11
10
 
12
- 在大陆无代理的实测里,keyless SERP 的召回已经坏了:Bing 对无 cookie 请求返回首词/词典/导航式结果,百度约 30 次请求后跳验证码,DDG / Google 不可达。而**官方页本身可达,正文里就有答案**——失败的是 URL 发现,不是网络。
11
+ ## 它是什么
13
12
 
14
- 所以 AuraArgus 不聚合 SERP。它维护一份「实体 → 官方源」注册表,把问题路由到正确的官方页,再抽段、给出处。先看一组 6 题的对照实验:
13
+ - **search**:问题 → 实体 → 注册的官方源 → 正文 → 选段 → 证据包
14
+ - **fetch**:一个 URL → 干净 Markdown(标题、长度、截断标记)
15
+ - 证据包里每条都带 `url`、`title`、`passages[].text`、`score`
16
+ - 零依赖,Node.js ≥ 20,Windows / macOS / Linux
17
+ - 不内置 key、不按次计费、无账号、无遥测
15
18
 
16
- | 方案 | 命中 |
17
- |---|---|
18
- | keyless 链接列表 | 3 / 12 |
19
- | keyless + 本地选段 | 4 / 12 |
20
- | 官方 Search API(付费) | 11 / 12 |
21
- | **AuraArgus** | **13 / 13** |
19
+ ## 它不是什么
20
+
21
+ - 不是通用搜索引擎,也不是问答机器人;它返回**证据**,答案由调用方的模型写
22
+ - 不追求“全网覆盖”:覆盖率 = 注册表(目前 18 个实体 / 34 个官方源)
23
+ - 不做 JS 渲染、不登登录墙、不绕验证码、不做代理池
24
+ - 默认 **registry-only**:未注册的实体返回 `mode: "none"`,不会硬编一个答案
25
+ - 360/搜狗兜底是 opt-in(`--fallback`),可能被反爬,默认关闭
26
+
27
+ ---
22
28
 
23
- 覆盖评测(18 个实体、中英文、别名、未知实体)是 **31 题 / 141 项硬检查全部通过**;2 项 soft 兜底默认关闭(fallback 改为 opt-in),见 [RESULTS.md](RESULTS.md)。
29
+ ## 30 秒上手
30
+
31
+ ### 从 zip 直接运行(不需要 npm install)
32
+
33
+ ```bash
34
+ unzip aura-argus-0.1.2.zip
35
+ cd aura-argus-0.1.2
24
36
 
25
- 细节见 [RESULTS.md](RESULTS.md) 与 [POSITIONING.md](POSITIONING.md)。
37
+ node src/cli.mjs search "SearXNG 对 429 的冷却时间是多少秒?" --json
38
+ ```
26
39
 
27
- ## 要求
40
+ 零依赖,不需要 `npm install`。先确认 Node 版本:
28
41
 
29
- - Node.js **≥ 20**(用到内置 `fetch` / `AbortSignal.timeout`)
30
- - 零依赖,不需要 `npm install`
31
- - Windows / macOS / Linux
42
+ ```bash
43
+ node -v # 需要 >= 20
44
+ ```
32
45
 
33
- ## 安装
46
+ ### 安装成全局命令
34
47
 
35
48
  ```bash
36
49
  npm i -g aura-argus
37
50
  aura-argus version
51
+ aura-argus search "Node.js 怎么用 http 模块创建服务器?" --text
38
52
  ```
39
53
 
40
- 或者直接从源码跑:
54
+ 如果你的 npm 默认走镜像(比如 `registry.npmmirror.com`),刚发布的版本可能还没同步;可以显式指定:
41
55
 
42
56
  ```bash
43
- git clone <repo> && cd aura-argus
44
- node src/cli.mjs search "SearXNG 对 429 的冷却时间是多少秒?"
57
+ npm i -g aura-argus --registry=https://registry.npmjs.org/
45
58
  ```
46
59
 
47
- ## 四种入口
48
-
49
- ### 1. CLI
60
+ ### 一个最小例子
50
61
 
51
62
  ```bash
52
- # 检索:返回证据(JSON)
53
- aura-argus search "SearXNG 对 429 的冷却时间是多少秒?"
63
+ aura-argus search "Tavily 一个 credit 多少钱?" --json
64
+ ```
65
+
66
+ 返回(截断):
67
+
68
+ ```json
69
+ {
70
+ "schemaVersion": 1,
71
+ "question": "Tavily 一个 credit 多少钱?",
72
+ "entity": "tavily",
73
+ "mode": "registry",
74
+ "evidence": [
75
+ {
76
+ "url": "https://www.tavily.com/pricing",
77
+ "title": "Pricing - Tavily",
78
+ "passages": [{ "text": "… 1,000 credits … $0.008 per credit …", "score": 12 }]
79
+ }
80
+ ],
81
+ "attempts": [{ "url": "…", "ok": true, "ms": 397, "passages": 4 }],
82
+ "tookMs": 512,
83
+ "cached": false
84
+ }
85
+ ```
86
+
87
+ `mode` 三种值:
54
88
 
55
- # 人眼可读
56
- aura-argus search "Tavily 一个 credit 多少钱?" --text
89
+ | mode | 含义 |
90
+ |---|---|
91
+ | `registry` | 命中注册表,抓的是官方源 |
92
+ | `web-fallback` | 只有显式 `--fallback` 才出现;360/搜狗兜底,较弱 |
93
+ | `none` | 注册表没有覆盖,或所有源都失败 |
57
94
 
58
- # 取回一页:干净 Markdown
59
- aura-argus fetch https://docs.searxng.org/dev/search_api.html --max-chars 4000
95
+ 失败时还会带 `error`:
60
96
 
61
- # 注册表与健康检查
62
- aura-argus sources
63
- aura-argus doctor
97
+ ```json
98
+ { "error": { "code": "ALL_SOURCES_FAILED", "message": "all 2 sources failed", "attempts": 2 } }
64
99
  ```
65
100
 
66
- 退出码:`0` 成功、`2` 无证据、`3` 参数错误、`4` 抓取失败、`130` 中断。
101
+ CLI 退出码:`0` 有证据、`2` 无证据、`3` 参数/URL 错误、`4` 抓取失败、`130` 中断。
102
+
103
+ ---
67
104
 
68
- ### 2. 本地 HTTP(任何语言 / agent)
105
+ ## 四种接法
106
+
107
+ ### 1. CLI
69
108
 
70
109
  ```bash
71
- aura-argus serve --port 8787
72
- # {"ok":true,"url":"http://127.0.0.1:8787"}
110
+ aura-argus search "问题" --json # 证据包(机器读)
111
+ aura-argus search "问题" --text # 人眼可读
112
+ aura-argus search "问题" --max-sources 3
113
+ aura-argus fetch <url> --max-chars 4000 # 干净 Markdown
114
+ aura-argus sources # 注册表
115
+ aura-argus doctor # 源健康检查
73
116
  ```
74
117
 
75
- | 方法 | 路径 | 说明 |
76
- |---|---|---|
77
- | GET | `/health` | 版本、源数量、uptime |
78
- | GET | `/sources` | 注册表 |
79
- | GET | `/search?q=&maxSources=` | 证据包 |
80
- | POST | `/search` | `{ "question": "...", "maxSources": 3 }` |
81
- | POST | `/search/batch` | `{ "questions": ["..."], "concurrency": 3 }` |
82
- | GET | `/fetch?url=&maxChars=` | 页面文本 |
83
- | POST | `/fetch` | `{ "url": "...", "maxChars": 20000 }` |
118
+ 批量(最多 50 题,逐题归属):
84
119
 
85
120
  ```bash
86
- curl -s 'http://127.0.0.1:8787/search?q=SearXNG+429' | head -c 400
87
- curl -s 'http://127.0.0.1:8787/fetch?url=https%3A%2F%2Fdocs.searxng.org%2Fdev%2Fsearch_api.html'
121
+ echo '["q1","q2","q3"]' | aura-argus search --batch --concurrency 3 --json
88
122
  ```
89
123
 
90
- 默认只绑 `127.0.0.1`;`--token <t>` 后要求 `Authorization: Bearer <t>`。
124
+ 默认 registry-only;要开网页兜底加 `--fallback`。默认拒绝本机/私网地址;确实要抓本地页面时加 `--allow-private`。
91
125
 
92
- ### 3. MCP stdio(任何 MCP 客户端)
126
+ ### 2. MCP(给 Claude Desktop / Cursor / Cline / Codex / Hermes / ZCode 等)
93
127
 
94
128
  ```bash
95
129
  aura-argus mcp
96
130
  ```
97
131
 
98
- 客户端配置(以 Claude Desktop / 任意 MCP host 为例):
132
+ 客户端配置(以标准 stdio 为例):
99
133
 
100
134
  ```json
101
135
  {
@@ -108,109 +142,81 @@ aura-argus mcp
108
142
  }
109
143
  ```
110
144
 
111
- 工具:`search(question, maxSources?)`、`search_batch(questions, concurrency?)`、`fetch(url, maxChars?)`、`sources()`。stdout 只写 JSON-RPC,不混日志。
145
+ Windows 上如果客户端无法直接拉起 `npx`:
146
+
147
+ ```json
148
+ {
149
+ "mcpServers": {
150
+ "aura-argus": {
151
+ "command": "cmd",
152
+ "args": ["/c", "npx", "-y", "aura-argus", "mcp"]
153
+ }
154
+ }
155
+ }
156
+ ```
112
157
 
113
- ### 4. DSH(DeepSeek Harness)
158
+ MCP 工具:
114
159
 
115
- 仓库自带 `adapters/dsh/index.mjs`。在 `~/.dsh/profiles/web/cordis.patch.yml` 里插入适配器,并把 web 的 provider 指过去:
160
+ | 工具 | 作用 |
161
+ |---|---|
162
+ | `search` | 单题 → 证据包 |
163
+ | `search_batch` | 多题(≤20)→ 逐题结果 |
164
+ | `fetch` | URL → Markdown |
165
+ | `sources` | 注册表覆盖 |
116
166
 
117
- ```yaml
118
- - insert:
119
- - id: web-argus
120
- name: 'E:/workspaces/aura-argus/adapters/dsh/index.mjs' # 换成你的 checkout 路径
121
- config:
122
- maxSources: 3
123
- maxChars: 20000
124
- # marker: true # 验证期打开:snippet 会以 [aura-argus] 开头
167
+ ### 3. 本地 HTTP
125
168
 
126
- - id: web
127
- name: '@deepseek-ai/dsh-web'
128
- config:
129
- searchProvider: aura-argus
130
- fetchProvider: aura-argus-http
169
+ ```bash
170
+ aura-argus serve --port 8787
131
171
  ```
132
172
 
133
- 重启 dsh web 后生效(运行中的进程不会热加载 patch)。验证:
173
+ 默认只绑 `127.0.0.1`。对外暴露时加 token:
134
174
 
135
175
  ```bash
136
- dsh --profile web --dump-config | Select-String searchProvider # 应显示 aura-argus
137
- node eval/verify-dsh.mjs --live # 9/9
138
- aura-argus search "SearXNG 429" --json # 终端侧对照
176
+ aura-argus serve --port 8787 --token my-secret
139
177
  ```
140
178
 
141
- 服务端没有 `aura-argus` 时 DSH 会报 `WEB_PROVIDER_CONFIGURED_MISSING`,不会静默回落到计费路径。回滚:删掉 `web-argus` 段,把 `searchProvider` / `fetchProvider` 改回原值(如 `aura-keyless` / `http`),重启。
142
-
143
- **这替换的是 provider,不是工具。** `web_search` / `web_fetch` 仍是 `tool-web`,受它的契约限制:最多 4 个 query、合并成一个 sources 列表(丢失逐 query 归属)、只给 snippet(我们的 passages 被压成一条)、没有 `search_batch`、fetch 有它的 SSRF/重定向/大小规则。
179
+ 常用接口:
144
180
 
145
- 要拿回完整契约,把 AuraArgus 的 MCP server 挂进 DSH(profile patch 里已写入 `mcp-aura-argus`):
181
+ | 方法 | 路径 | 说明 |
182
+ |---|---|---|
183
+ | GET | `/health` | 版本、源数量、uptime |
184
+ | GET | `/sources` | 注册表 |
185
+ | GET | `/search?q=&maxSources=` | 证据包 |
186
+ | POST | `/search` | `{"question":"...","maxSources":3}` |
187
+ | POST | `/search/batch` | `{"questions":["..."],"concurrency":3}` |
188
+ | GET | `/fetch?url=&maxChars=` | 页面 Markdown |
189
+ | POST | `/fetch` | `{"url":"...","maxChars":20000}` |
146
190
 
147
- - 工具:`mcp__aura-argus__search` / `search_batch` / `fetch` / `sources`
148
- - 想强制走原生工具:给 `tool-web` 加 `disable: true`(先跑一轮确认 MCP 可用,再禁)
149
- - 内置工具已并发处理 1–4 个 query;MCP 的增量是逐 query 结果、批量上限 20、passages 与出处完整保留
150
- - MCP 的 `initialize.instructions` 会被 DSH 的 mcp-client 自动注入 systemPrompt(`mcp:aura-argus` 段),工具描述也会作为元数据进入模型——不需要再手写 AGENTS.md 规则
191
+ ```bash
192
+ curl -s 'http://127.0.0.1:8787/search?q=SearXNG+429' | head -c 400
193
+ ```
151
194
 
152
- ### 5. Node 库
195
+ ### 4. Node 库
153
196
 
154
197
  ```js
155
198
  import { search, searchBatch, fetchDocument } from 'aura-argus';
156
199
 
157
200
  const evidence = await search('SearXNG 对 429 的冷却时间是多少秒?');
158
- const batch = await searchBatch(['q1', 'q2', 'q3'], { concurrency: 3 });
201
+ const batch = await searchBatch(['q1', 'q2'], { concurrency: 3 });
159
202
  const page = await fetchDocument('https://docs.searxng.org/dev/search_api.html', { maxChars: 4000 });
160
203
  ```
161
204
 
162
- ## 契约
163
-
164
- ### search
165
-
166
- ```json
167
- {
168
- "schemaVersion": 1,
169
- "question": "SearXNG 对 429 的冷却时间是多少秒?",
170
- "entity": "searxng",
171
- "mode": "registry",
172
- "evidence": [
173
- {
174
- "url": "https://docs.searxng.org/admin/settings/settings_search.html",
175
- "title": "search: - SearXNG Documentation",
176
- "site": "docs.searxng.org",
177
- "passages": [{ "text": "… suspended_times: … SearxEngineTooManyRequests: 3600 …", "score": 15 }]
178
- }
179
- ],
180
- "attempts": [{ "url": "…", "ok": true, "ms": 855, "passages": 6 }],
181
- "tookMs": 1011,
182
- "cached": false
183
- }
184
- ```
185
-
186
- `mode` 取值:`registry`(注册表命中)、`web-fallback`(仅 `--fallback` 时出现的 360/搜狗兜底)、`none`(无证据)。
187
-
188
- ### fetch
189
-
190
- ```json
191
- {
192
- "schemaVersion": 1,
193
- "url": "https://docs.searxng.org/dev/search_api.html",
194
- "finalUrl": "https://docs.searxng.org/dev/search_api.html",
195
- "status": 200,
196
- "title": "Search API - SearXNG Documentation",
197
- "text": "# Search API\n\nSearXNG supports querying…",
198
- "chars": 4000,
199
- "truncated": true,
200
- "contentType": "text/html; charset=utf-8",
201
- "tookMs": 312
202
- }
203
- ```
204
-
205
- ### 错误码
205
+ ---
206
206
 
207
- `BAD_URL`、`BAD_REQUEST`、`PRIVATE_ADDRESS`、`TOO_MANY_REDIRECTS`、`TIMEOUT`、`FETCH_FAILED`、`HTTP_ERROR`、`UNSUPPORTED_CONTENT_TYPE`、`TOO_LARGE`、`NO_ENTITY`、`NO_EVIDENCE`、`ALL_SOURCES_FAILED`。
207
+ ## 覆盖范围
208
208
 
209
- ## 源注册表
209
+ 目前注册表:**18 个实体 / 34 个官方源**。
210
210
 
211
- `src/registry.json`:**18 个实体 / 34 个源**,全部在 CN 直连下实测可达(`aura-argus doctor`)。
211
+ | 类别 | 实体 |
212
+ |---|---|
213
+ | LLM / 搜索 API | DeepSeek、Tavily、SearXNG、Google CSE、Bing |
214
+ | 语言与运行时 | Python、Node.js、Go、Rust、MDN(JavaScript) |
215
+ | 框架 | React、Vue |
216
+ | 基础设施 / 数据 | Docker、Kubernetes、nginx、PostgreSQL、Redis |
217
+ | 代码托管 | GitHub(REST / Actions) |
212
218
 
213
- 加一个实体:
219
+ 加一个源(`src/registry.json`):
214
220
 
215
221
  ```json
216
222
  "实体": {
@@ -220,106 +226,82 @@ const page = await fetchDocument('https://docs.searxng.org/dev/search_api.html',
220
226
  }
221
227
  ```
222
228
 
223
- - `covers` 只用于排序;命中实体后默认抓该实体的全部源(上限 `--max-sources`)。
224
- - 所有源都失败时,若有 `discovery`(`sitemap` 或站点索引),再走一跳发现。
225
- - 默认 **registry-only**:未注册实体返回 `mode: "none"`;显式 `--fallback`(CLI)/`fallback: true`(HTTP/库)才走 360/搜狗,只返回链接 + 摘要,标 `mode: "web-fallback"`。
226
-
227
- ## 跨平台
229
+ `covers` 只用于排序;命中实体后默认抓该实体的全部源(上限 `--max-sources`)。加完跑:
228
230
 
229
- - 无原生依赖、无 shell 调用、无平台路径写死;只用 `node:` 内置模块。
230
- - 缓存目录:Windows `%LOCALAPPDATA%\aura-argus\cache`,macOS/Linux `$XDG_CACHE_HOME/aura-argus` 或 `~/.cache/aura-argus`;可用 `AURA_ARGUS_CACHE_DIR` 覆盖。
231
- - CI 矩阵:`ubuntu / macos / windows × node 20 / 22 / 24`,只跑离线测试与 `npm pack --dry-run`。
231
+ ```bash
232
+ npm test
233
+ node eval/verify-registry.mjs # 联网检查源是否可达
234
+ ```
232
235
 
233
- ## 跨 agent
236
+ ---
234
237
 
235
- MCP stdio 与 CLI 都在本地跑,不绑定 DSH:
238
+ ## 边界与安全
236
239
 
237
- | agent | 接法 | 实测(2026-10-21) |
238
- |---|---|---|
239
- | Codex CLI 0.163 | `codex mcp add aura-argus -- node <abs>/cli.mjs mcp` | `mcp_tool_call` server=`aura-argus` tool=`search`,返回 3600 s + 官方 URL |
240
- | Hermes 0.21.3 | `hermes mcp add aura-argus --command node --args <abs>/cli.mjs mcp` | 4 tools discovered(1937 ms);`-z` 明确走 MCP,返回 3600 s + URL |
241
- | ZCode(Electron) | `~/.zcode/cli/config.json` → `mcp.servers`(stdio) | 配置已加;当前 ZCode 进程早于配置,重启后才会拉起 MCP;CLI/skill 仍作兜底 |
242
- | Claude Desktop / Cursor / Cline | 标准 stdio:`npx -y aura-argus mcp` | 发布后用 MCP Inspector + 各客户端补测 |
240
+ - **覆盖率 = 注册表**。没收录的实体默认没有证据;不要把它当通用搜索。
241
+ - **单实体路由**。一个问题命中一个实体;跨实体问题拆成多问。
242
+ - **不绕访问控制**:不登录、不绕付费墙、不破验证码、不做代理池。
243
+ - **默认拒绝私网**:loopback、RFC1918、link-local、metadata 地址、`::1`、`fc00::/7`、`fe80::/10` 等都会被拦;DNS 解析后复查,重定向逐跳复检。
244
+ - 确实要抓本机/内网页面时显式开:CLI `--allow-private`,库 `allowPrivate: true`,MCP 启动时 `AURA_ARGUS_ALLOW_PRIVATE=1`,HTTP `serve --allow-private`。
245
+ - **无 key、无遥测、无账号**。缓存只在本机(Windows `%LOCALAPPDATA%\aura-argus\cache`,macOS/Linux 在 XDG cache)。
246
+ - `serve` 默认绑 `127.0.0.1`;暴露到其他主机时务必设 `--token`。
243
247
 
244
- - Windows 下部分客户端要写 `cmd /c npx ...`;配置路径随客户端不同。
245
- - 任何能跑 shell 的 agent:`aura-argus search "<q>" --json`。
248
+ ---
246
249
 
247
- ## 失败与重试
250
+ ## 常见问题
248
251
 
249
- - `fetchRaw`:每个源最多 3 次尝试(`retries=2`),只重试网络错误、超时、408/425/429/5xx;其余 4xx 立即失败。
250
- - 退避:300 ms 起、指数 + 抖动,单次最多 3 s;尊重 `Retry-After`(上限 3 s);总预算 `max(20 s, 2×timeout)`,到点即停。
251
- - 一次检索里所有源都失败 → 结果带 `error.code = ALL_SOURCES_FAILED` 和逐源 `attempts`(含 `tries`、`status`):
252
- - CLI 退出码 `4`;HTTP `/search` 返回 `502`;MCP `isError: true`;DSH provider 抛 `WEB_PROVIDER_ERROR`。
253
- - 批量有 budget:MCP 35 s、HTTP 45 s(CLI `--budget`),超时项标 `BATCH_BUDGET_EXCEEDED`,避免重试把一次工具调用拖过客户端 60 s 超时。
254
- - 不做跨源的二次重试、不做失败缓存/冷却;失败的下一次调用会重新尝试。
252
+ **为什么没有直接给我答案?**
253
+ 它给的是证据:原文段落 + 出处。答案由你的模型/脚本基于这些段落写,这样可核对、可引用。
255
254
 
256
- ## 安全边界
255
+ **为什么某个网页 fetch 返回 403?**
256
+ 目标站点(比如 npmjs.com)有 Cloudflare/反爬,会拦非浏览器请求。这是站点的策略,不是工具坏了。读 npm 元数据请用 `https://registry.npmjs.org/<pkg>`,读页面请用浏览器。
257
257
 
258
- - 默认拒绝 loopback / 私有网段 / link-local / 组播 / metadata:`127/8`、`10/8`、`172.16/12`、`192.168/16`、`169.254/16`、`::1`、`fc00::/7`、`fe80::/10` 等;DNS 解析后复查,重定向逐跳复检。
259
- - 显式 opt-in:CLI `--allow-private`,库 `allowPrivate: true`,HTTP `serve --allow-private`,MCP 启动时 `AURA_ARGUS_ALLOW_PRIVATE=1`。
260
- - 不绕登录/付费墙/验证码;无内置 key、无代理池、无遥测。
261
- - `serve` 默认绑 `127.0.0.1`;对外暴露时加 `--token`。
258
+ **为什么 `npm i -g aura-argus` 装到旧版本?**
259
+ 你的 npm 可能默认走 `registry.npmmirror.com`,镜像同步有延迟。用 `--registry=https://registry.npmjs.org/`,或等几分钟再装。
262
260
 
263
- ## 边界
261
+ **Windows 上 MCP 客户端拉不起 npx?**
262
+ 配置写成 `{"command":"cmd","args":["/c","npx","-y","aura-argus","mcp"]}`。
264
263
 
265
- - **覆盖率 = 注册表**。没收录的实体默认返回无证据;显式开启 fallback 才走网页兜底。
266
- - 不做 JS 渲染、不登登录墙、不绕验证码、不做代理池。
267
- - 低频、单机、只读抓取;对目标站点友好是最低要求。
268
- - 返回证据,不生成答案;答案由调用方的模型写。
269
- - `web-fallback` 是 opt-in,依赖 360/搜狗,可能被反爬;失败时明确报 `mode: "none"`。
264
+ **公司网络/代理下抓不到?**
265
+ Node 内置 fetch 默认不读 `HTTP_PROXY` / `HTTPS_PROXY`。需要的话设置 `NODE_EXTRA_CA_CERTS`,或让网络层走系统代理;这不是 AuraArgus 自己的代理池。
270
266
 
271
- ## 性能
267
+ **`--fallback` 为什么经常没结果?**
268
+ 360/搜狗对自动请求会跳验证码/返回 403,兜底本来就不稳定,且默认关闭。优先用注册表;未覆盖的实体建议直接加源。
272
269
 
273
- `npm run bench`(30 题,无缓存冷启动):
270
+ ---
274
271
 
275
- | 模式 | 总耗时 | 平均 |
276
- |---|---|---|
277
- | 串行 | 21.6 s | 721 ms/题 |
278
- | 批量(concurrency=3,冷) | 6.9 s | 230 ms/题 |
279
- | 批量(缓存填充) | 6.1 s | 202 ms/题 |
280
- | 批量(缓存命中) | ~1 ms | — |
272
+ ## zip 里有什么
281
273
 
282
- - **并发可调**:同一批 30 题,c=6 / c=8 实测约 3.5 s / 2.0 s(无空结果);默认 3 是为了对官方站点礼貌,不是性能上限。
283
- - **同题多源并行**:一个问题的 2–3 个官方源同时抓,不再串行等待。
284
- - **页面缓存 + in-flight 去重**:批内同一 URL 只抓一次;TTL 10 min。
285
- - **结果缓存**:同一 query 15 min 内直接命中(`--no-cache` 关闭)。
274
+ ```
275
+ aura-argus-0.1.2/
276
+ README.md ← 你正在看的这份
277
+ LICENSE MIT
278
+ src/ 运行时代码 + registry.json
279
+ adapters/dsh/ 可选:DSH provider 适配器
280
+ docs/integrations/ Codex / Hermes / ZCode / Claude / Cursor / CLI / HTTP 接法
281
+ schema/tools.json OpenAI / Anthropic function-calling schema
282
+ openapi.json HTTP API 的 OpenAPI 3.1
283
+ test/ 离线测试
284
+ eval/ 金标准问题与评测脚本(可选)
285
+ CHANGELOG.md
286
+ SECURITY.md
287
+ package.json
288
+ ```
286
289
 
287
- 批量入口:
290
+ 不需要 `node_modules`。验证:
288
291
 
289
292
  ```bash
290
- echo '["q1","q2"]' | aura-argus search --batch [--concurrency 3] [--budget 45000]
291
- curl -X POST localhost:8787/search/batch -d '{"questions":["q1","q2"]}'
293
+ npm test # 51 个离线测试
294
+ npm run verify # 联网检查 34 个源(可选)
295
+ npm run eval # 联网跑 31 题 / 141 项硬检查(可选,需要网络)
292
296
  ```
293
297
 
294
- ## 测试与评测
298
+ ---
295
299
 
296
- ```bash
297
- npm test # 离线:51 个测试(解析 / 选段 / 注册表 / 缓存 / 批量 / 重试 / 私网拦截 / HTTP / MCP / DSH 适配器)
298
- npm run eval # 联网:31 题 / 141 项硬检查(+2 项 soft 兜底默认关闭)
299
- npm run verify # 联网:34 个源的可用性
300
- ```
300
+ ## 设计一句话
301
301
 
302
- ## 文件
302
+ > 不做 SERP 聚合,做「实体 → 官方源 → 正文 → 选段 → 出处」的路由与证据编译。
303
303
 
304
- | 路径 | 作用 |
305
- |---|---|
306
- | `src/cli.mjs` | CLI 入口 |
307
- | `src/core.mjs` | 公共 API |
308
- | `src/registry.json` | 实体 → 官方源(产品资产) |
309
- | `src/lib/router.mjs` | 实体匹配 → 抓取 → 选段 → 兜底 |
310
- | `src/lib/fetch.mjs` | URL 校验 / 限时 / 限大小 / 文档转换 |
311
- | `src/lib/extract.mjs` | 打分 + 邻行窗口 + 表格/列表块合并 |
312
- | `src/lib/server.mjs` | HTTP 服务 |
313
- | `src/lib/mcp.mjs` | MCP stdio |
314
- | `src/lib/cache.mjs` | 内存 + 磁盘缓存 |
315
- | `eval/` | 金标准问题、评测脚本、注册表检查 |
316
- | `test/` | 离线测试 |
317
- | `docs/integrations/` | Codex / Hermes / ZCode / Claude / Cursor / CLI / HTTP 接法 |
318
- | `schema/tools.json` | OpenAI / Anthropic function-calling 工具 schema |
319
- | `openapi.json` | HTTP API 的 OpenAPI 3.1 |
320
- | `SECURITY.md` | 安全模型、私网拦截、漏洞上报 |
321
- | `adapters/dsh/` | DSH provider 适配器 |
322
- | `POSITIONING.md` | 定位、市场对比、实验记录 |
304
+ 如果某个问题没有覆盖,最有价值的动作不是换个搜索引擎,而是**给注册表加一个官方源**。
323
305
 
324
306
  ## License
325
307
 
package/RESULTS.md CHANGED
@@ -90,7 +90,7 @@
90
90
 
91
91
  ## 发布(2026-10-21)
92
92
 
93
- - npm:`aura-argus@0.1.0` 已发布;`0.1.1` 修复 repository 元数据并指向 Aura monorepo。registry `latest` 以 npm 为准;tarball `https://registry.npmjs.org/aura-argus/-/aura-argus-0.1.1.tgz`。安装后 `aura-argus version` / MCP initialize/tools-list 已验证。
93
+ - npm:`aura-argus@0.1.0` 已发布;`0.1.2` 修复 repository 元数据并指向 Aura monorepo(0.1.1 被 npm staged 流程挂起,未公开)。registry `latest` 以 npm 为准;tarball `https://registry.npmjs.org/aura-argus/-/aura-argus-0.1.2.tgz`。
94
94
  - GitHub:`Ck-epsilon/Aura` 已创建(public,main,"Aura source monorepo");源码在 `aura-argus/` 子目录(commit `aba2f5f` 起)。
95
95
  - 发布用 7 天 granular token(bypass 2FA);发布后应吊销,后续改用 trusted publishing。
96
96
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aura-argus",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Agent-native retrieval layer: route questions to primary sources, return citable passages. No API key, no per-call billing.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -9,7 +9,8 @@
9
9
  },
10
10
  "exports": {
11
11
  ".": "./src/core.mjs",
12
- "./registry": "./src/registry.json"
12
+ "./registry": "./src/registry.json",
13
+ "./adapters/dsh/index.mjs": "./adapters/dsh/index.mjs"
13
14
  },
14
15
  "files": [
15
16
  "src",