Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions external_plugins/argo-zcode/.zcode-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
{
"name": "argo-zcode",
"version": "2.9.8",
"displayName": "Argo 阿尔戈",
"displayName_i18n": {
"en": "Argo",
"zh-CN": "Argo 阿尔戈"
},
"description": "Unified search, web fetching, and evidence verification over 272 sources, powered by the argo CLI.",
"description_i18n": {
"en": "Unified search, web fetching, and evidence verification over 272 sources (235 keyless). Deep research, academic, social listening, WeChat articles, job aggregation, and local retrieval, powered by the argo CLI.",
"zh-CN": "统一搜索、网页抓取与证据核验:272 个源、235 个免密钥可用,覆盖深度研究、学术、舆情、公众号、招聘聚合与本地检索。不止搜到,还要核到。基于 argo CLI。"
},
"author": {
"name": "taxueseek",
"url": "https://github.com/taxueseek/argo"
},
"license": "Apache-2.0",
"keywords": [
"search",
"fetch",
"research",
"evidence",
"crawler",
"academic",
"social",
"argo"
],
"skills": "skills",
"commands": "commands",
"agents": "agents",
"mcpServers": {
"argo-panel": {
"type": "stdio",
"command": "node",
"args": ["${ZCODE_PLUGIN_ROOT}/server/panel_server.mjs"],
"cwd": "${ZCODE_PROJECT_DIR}"
}
},
"ui": {
"surfaces": [
{
"id": "argo-panel",
"title": {
"zh-CN": "Argo 面板",
"en-US": "Argo Panel"
},
"icon": "search",
"server": "argo-panel",
"resourceUri": "ui://argo/panel.html",
"availability": "session"
}
]
}
}
29 changes: 29 additions & 0 deletions external_plugins/argo-zcode/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Argo 阿尔戈 for ZCode

统一搜索、网页抓取与证据核验插件:272 个源、235 个免密钥可用,覆盖深度研究、学术、舆情、公众号、招聘聚合与本地检索。不止搜到,还要核到——高后果问题强制核验正文并回填证据分。

能力由 [argo CLI](https://github.com/taxueseek/argo) 提供,本插件是它在 ZCode 中的三层接入:

| 层 | 形态 | 说明 |
|---|---|---|
| 模型通道 | skills + commands + agents | `/argo` 日常一问、`/wide-research` 多轨编排取证;`argo-researcher` worker 用工具白名单机制化约束 |
| 控制通道 | ui.surfaces 面板 | 「Argo 面板」侧栏页:272 引擎开关、密钥写入(脱敏)、额度摘要;配置经页面直连服务,不占模型 token |
| 取证通道 | skill+CLI(主)/ MCP(可选) | 模型按 skill 纪律调 `argo search/fetch/research` 等 CLI 命令;面板 MCP 服务 `tools/list` 恒为空,零常驻 token |

## 前置依赖

- [argo CLI](https://github.com/taxueseek/argo)(插件能力全部经由它;未装时 skill 会给出安装指引)
- ZCode Desktop(面板需要支持 Plugin UI 的版本;Node.js 由宿主提供)
- 面板配置桥依赖 pyyaml(argo 唯一必需第三方依赖,装 argo 时已安装)

## 安装后验收

1. **模型通道**:新会话发送 `/wide-research 多轨研究一个争议问题`,观察是否按轨道拆分、派发 `argo-researcher` worker、产出带来源账本与质量门的报告(`passed=false` 时应降级表述)
2. **控制通道**:打开侧栏「Argo 面板」,切换任一引擎开关,下一次 `argo search` 应体现变更;密钥区保存一个测试 key 后 `argo search --list-engines --detail --engine <名>` 应显示已配置
3. **零 token 校验**:会话内模型工具列表不应出现 `mcp__argo-panel__*` 工具(面板工具仅页面可调)

## 隐私与安全

- 密钥写入 argo env 文件(chmod 600),面板只回显 key 名不回显值
- 引擎开关写入 argo 本机覆盖层 `config.local.yaml`(gitignore,不随 argo 发版)
- 使用日志留在本机(`ARGO_USAGE_LOG=0` 可整体关闭)
50 changes: 50 additions & 0 deletions external_plugins/argo-zcode/agents/argo-researcher.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
---
name: argo-researcher
description: Argo 取证 worker:单轨取证代理。只调 argo 原子命令(search/fetch/evidence 等)收集证据,返回 findings + sources + gaps 结构化结果。由 argo-wide-research 编排派发使用,不单独作为通用助手。
tools: Bash, Read
---

你是 Argo 取证 worker,负责一条研究轨道的证据收集。只取证,不下最终判断。

## 允许的命令(仅这些)

```bash
argo search "q" [--json --fields agent] [--engine <名>] [--verify N] [--since ...]
argo fetch "url" [--focus "关键词"] # 核验某条来源正文
argo evidence "q" --json # 可信度评估
argo extract "url" / argo article "url" / argo pdf "url" / argo paper "<id>"
argo preflight "url1 url2" # 来源可用性预检
```

参数细节见 `argo --help`;上下文紧张时用 `--json --fields agent`。

## 禁令

- **禁止**调用 `argo research` / `argo wide` 等研究编排命令(你已是编排的一环,递归调用必被拒绝)
- **禁止**派发子代理
- **禁止**把 SERP 跳转链(baidu/s、sogou/link)当来源——先 `argo fetch` 解析成正文 URL
- **禁止**编造 URL 或引用未抓取确认过的来源;没查到就如实写 gaps

## 工作方式

1. 按轨道描述拆 2-4 个检索式(同义词/不同语言各试),`argo search` 收结果
2. 对将入账本的来源抽 1-3 条 `argo fetch` 核正文(高后果问题全核)
3. 信源上限 ≤8 条,只收 `http(s)` URL
4. 冲突信息进 disagreements,不许静默取舍

## 返回格式(严格遵守)

```
trackId: <轨道 id>
summary: <一句话概括本轨发现>
findings:
- <发现 1,附证据强度:实证/多源/单源/传闻>
- ...
sources:
- url: <https://...>
note: <该来源用于支撑什么>
disagreements:
- <与其他来源/轨道冲突之处;没有写 none>
gaps:
- <没查到/没覆盖的;没有写 none>
```
16 changes: 16 additions & 0 deletions external_plugins/argo-zcode/commands/argo.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
description: 用 argo 搜索、抓取或核验,并按证据纪律作答
argument-hint: "[查询词或 URL]"
---

按 argo 技能的纪律处理:$ARGUMENTS

先判断输入类型再动手:

- 查询词 → `argo search`(Agent 消费档 `--json --fields agent`);高后果问题(金融/医疗/法律/事实核查)先 `--verify` 再下结论,`fetch_required=true` 禁止跳过核验
- URL → `argo fetch`(要正文)或 `argo extract`(要表格/结构化数据)
- 需要多视角对比或引用账本 → 不在本命令处理,改走 wide-research 命令

事实必须带 URL 出处;结果异常少时查 funnel 六格计数定位塌陷点。

载入 argo 技能获取完整命令表与执行纪律。
16 changes: 16 additions & 0 deletions external_plugins/argo-zcode/commands/wide-research.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
description: 多轨并行深度研究,产出带质量门与来源账本的综合报告
argument-hint: "[研究问题]"
---

按 argo-wide-research 技能的编排流程处理研究问题:$ARGUMENTS

固定流程:

1. 规划 3-4 条互补轨道(按证据类型/语言市场/利益相关方拆),需要先后依赖的标 `depends_on`
2. 用原生 Agent 工具派发 `argo-researcher` worker(并发 2-3),每轨给轨道描述、信源上限(≤8)与返回格式
3. 收齐各轨 findings/sources/disagreements/gaps,合并来源账本(仅 http(s) URL)
4. 按质量门封顶结论强度:账本失效 → low(只许陈述未能取证);有单源孤证或未消解矛盾 → medium(逐条声明不确定性);多轨交叉印证 → high
5. 输出:executiveSummary → report(按主题组织)→ tracks 附录 → sources 账本 → caveats → unansweredQuestions

`passed=false` 或 medium 以下必须降级表述。载入 argo-wide-research 技能获取完整编排规则。
125 changes: 125 additions & 0 deletions external_plugins/argo-zcode/references/engines.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
# Argo 路由速查与选源经验

> **全量引擎清单、费用、密钥、状态、域组合在 `docs/ENGINE_CATALOG.md`**(由
> `scripts/gen_engine_catalog.py` 从声明生成,有检查防漂移)——本页不重复清单,
> 只放「清单生成不出来」的东西:语义分工与选源判断。
>
> 声明来源:`config.yaml` + `engines/specs/*.yaml`(外置 spec 启动时合并、优先覆盖)。
> 本机此刻哪些源就绪:`argo search --list-engines --detail`。

## 一、选源第一原则:先看语义,再看名字

同一个「搜索」在不同意图下要的不是同一批源。选错源的典型症状是**结果同质化**
(十条来自同一家)或**答非所问**(要数据集却给论文)。

### 知乎四源(同一密钥,四种语义)

| 源 | 搜的是 | 什么时候用 |
|---|---|---|
| `zhihu` | 知乎站内 UGC | 观点 / 经验 / 评测(「怎么看待」「如何评价」「哪个好」) |
| `zhihu_global` | 全网索引(中文为主) | 中文时事、泛资讯;支持 `site:域名` / `host:域名` 限定;英文召回弱 |
| `zhihu_user` | 本人创作 / 收藏 / 关注 | 「我的回答」「我的收藏」「我关注的人」——个人运营与素材回溯,不是内容搜索 |
| `zhihu_hot` | 官方热榜快照 | 只看热榜时(100/天) |

### 内容类型先分清(2026-09-12 拆开的三组)

- **论文 ≠ 数据集**:`academic` 域(arXiv / OpenAlex / Crossref / EuropePMC / DBLP /
Semantic Scholar)管论文;`dataset_search` 域(DataCite / Zenodo)管数据集、开放数据。
一句话里出现「数据集 / 开放数据 / dataset」才走后者。
- **行情 ≠ 申报原文**:`us_stock` / `stock_query` 管报价与资金流;`sec_filings` 域
(SEC EDGAR)管 10-K / 10-Q / 8-K / 招股书这类申报文件原文。
- **推文关键词 ≠ 单条推文**:`fxtwitter`(在 `social` 域内)做 X 关键词搜索;
单条推文按 URL 取正文走 `twitter_syndication` 通道(见下「URL 类查询」)。

## 二、URL 类查询:不是搜索,是交接

输入是 URL 时,搜索层不会硬搜——`classify_input_kind` 判为 `known-url` 后返回
`handoff_required`,并给建议工具:

- 普通网页 → `argo_fetch` / `argo_pdf`;
- **单条推文 URL → 提示 `argo_search(engine=twitter_syndication)`**(免登录、零密钥)。

想强行当关键词搜(用 URL 找相关讨论),加 `--input-kind url-seed`。

## 三、通用保底链的层次(`engine_policy.GENERAL_FREE_FALLBACK`)

`anysearch` → `local_bing` → `uapi` → `local_baidu` → `firecrawl` → `parallel_free` → `wikipedia`。
顺序有讲究:通用检索优先,本地零成本引擎居中,百科殿后;
`firecrawl` 排在自由额度型源(1000 credits/月)**末位**,日常 fast/auto 的 combo 预算
(2 / 3 个)够不到它,只在 deep / research 无截断时参战,共享免费层不会被烧穿。
`parallel_free`(2026-09-14 收录)同为末位补位:官方免费 MCP 端点
(search.parallel.ai,无账号无 key),与按量计费的 `parallel`(REST + key)分立——
key 缺失/额度耗尽/REST 失败时由它接住,自带 excerpts 长摘录省一次 fetch。
`duckduckgo` 2026-09-07 移出保底链(实测 45% 错误率 + 11 秒 0 条);2026-09-26 两引擎(Instant Answer API + local_duckduckgo)随本机可达性门下线:出口对本域 TLS 层阻断,html/api 子域全灭,curl_cffi 三种指纹亦无法穿透,同类项目(ddgs 等)同样处于与该封锁的军备竞赛中,无客户端解法。

## 四、本地零成本引擎(`local_search` 聚合,29 个子引擎声明,27 个默认启用)

`local_bing` / `local_baidu` / `local_sogou` /
`local_github` / `local_gitlab` /


本地 SERP 直连引擎的可达性判决(2026-09-26 实测口径):`local_bing`(稳定)/`local_baidu`(BAIDUID={UUID} 随机身份 + 2s 间隔 + chrome131/safari184 TLS 指纹仿冒 + /link 跳转链解析后可用)/`local_sogou`(跳转链解析后可用);google(JS 壳)/startpage(Blocked)/mojeek(Captcha)/yandex(SmartCaptcha)四源为 IP 级反爬墙,curl_cffi 三种指纹均无法穿透,已下线——yandex 需求由 local-search 子技能的 ddgs cli 后端承接(实测可用)。
`local_npm` / `local_stackoverflow` / `local_arxiv` / `local_pubmed` /
`local_semantic_scholar` / `local_crossref` / `local_wikipedia` / `local_wikiquote` /
`local_wiktionary` / `local_imdb` / `local_openstreetmap` / `local_bing_news` /
`local_google_news` / `local_goodreads` / `local_search`(聚合入口)。

`--local-first` 强制本地聚合优先;fast / budget 模式自动前置 `local_search`。
零密钥、零额度,语言相关的查询由它兜(`setlang` 按查询语言下推)。

## 五、选源反模式(都是踩过的坑)

1. **窄意图域必须排在宽泛域之前**:多意图查询按 `config.yaml` 域的顺序取主域。
写新域时先看有没有更宽泛的域会先命中(`english_tech` / `chinese_general` 最容易抢)。
2. **抢词要收窄**:`dataset_search` 不写裸 `DOI`(论文也用 DOI),`sec_filings` 不写裸
`财报`(那是 `financial_news` 的)。触发词只留能区分意图的那几个。
3. **引擎有「能力标签」才有话题信号**:`coverage` 写在 spec 里(不是注册表文档里)——
互补回填要求主引擎带 coverage 才工作。
4. **付费档不进自动路由**:`paid` 档只有显式 `--engine` 才会用到;
`low` / `api` 档有若干在自动路径上(见 catalog 的表),想完全避开用 `--mode budget`
或显式指定免费源。`deepseek_search` 是默认开的 paid 引擎(需 `DEEPSEEK_API_KEY`,
无 key 时路由自动跳过):按次计费且只对成功请求收费,显式 `--engine` 调用;
结果逐条带 authority 权威分级(0-4,≥3 极权威)与发布时间,是通用源里少见的
全字段日期户——配 `--since` / `--until` 时间窗真正可滤(另两家通用源无日期字段,
滤不了)。按场景选引擎的口径见 SKILL.md。
5. **别用「关键词」调抽取型引擎**:`twitter_syndication` 没有搜索端点,
关键词查询诚实返回空——这是设计,不是故障。

## 六、常用调用

```bash
# 通用
python3 scripts/search.py "查询词" --json
python3 scripts/search.py "查询词" --engine anysearch # 指定引擎
python3 scripts/search.py "查询词" --engine zhihu # 知乎站内
python3 scripts/search.py "美联储 降息" --engine deepseek_search # 官方 DeepSeek 搜索(需 key;时事/实体优先)
python3 scripts/search.py "阿里 财报 研报" --engine eastmoney
python3 scripts/search.py "苹果 10-K" --json # 自动进 sec_filings 域
python3 scripts/search.py "climate dataset" --json # 自动进 dataset_search 域

# 抽取 / 抓取
python3 scripts/search.py "https://x.com/user/status/1585841080431321088" \
--engine twitter_syndication --json # 单条推文(免登录)
python3 scripts/fetch_v3.py "https://example.com" # 单页正文(四级降级)
python3 scripts/batch_probe.py "url1" "url2" --probe # 批量预检

# 深度研究 / 证据
python3 scripts/research.py "问题" --json
python3 scripts/search.py "查询词" --verify 3 # 核验 top-3 正文

# 小红书技能榜(redskill,本地缓存免认证)
python3 scripts/redskill/redskill_engine.py rank use -n 10 # use|new|today|author
```

## 七、招聘聚合(`argo job`,独立于搜索)

免 key 后端:`remotive` / `himalayas` / `jobicy` / `arbeitnow` / `greenhouse` / `ashby`;
平台白名单:BOSS / 猎聘 / 智联 / 前程无忧 / 597 / 今日招聘 + 卓博 / 鱼泡 / 中华英才 /
智通 / 58 / 国聘 / 24365 / 91job / yingjiesheng / JobsDB / JobStreet / 苏州人社局。

```bash
python3 scripts/job.py "岗位 城市" --engine free -n 5 \
--platforms zhipin,liepin,zhaopin,51job,597,jrzp --loose --json --fetch 5 --watch
```

`--watch` 增量监控,快照存 `data/jobs/`;`--engine free` 只走免 key 后端。
Loading