关于 voyager
voyager 是面向编码 Agent 的网络资料检索与软件包核验 MCP 服务,将查询整理为带引用和置信度的简报。它以 OSV 漏洞门禁、来源信息及注入内容过滤来处理检索结果。
主要功能
- 01核验 npm 与 PyPI 软件包
- 02通过 OSV 漏洞门禁
- 03生成带引用和置信度的简报
- 04检索 GitHub、官方文档与网页
- 05过滤提示注入内容并标注证据
- 06可在隔离容器中复现安装
适用场景
- 01在 CI 中拦截有漏洞的依赖
- 02为编码 Agent 汇总网络资料
- 03发现 GitHub 项目并查阅官方文档
- 04隔离测试软件包能否安装和加载
MCP 相关
提供 MCP 服务,向客户端开放 check_package、retrieve、discover_repos 和 fetch_docs 工具,用于软件包核验与资料检索。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
4收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | |
| version | string | 否 | 可选的固定版本(默认:latest)。 |
| ecosystem | enum | 否 | npm | pypi |
| projectDeps | object | 否 | name → range:针对你的技术栈进行 peer 兼容性检查。 |
| proveInTwin | boolean | 否 | 在隔离容器中安装并进行 smoke-import,以将信念提升为已复现(仅限可信机器)。 |
详细介绍
voyager
面向编码 Agent 的可信简报生成器。
能够访问开放互联网的 AI 编码 Agent 会获取未经处理、未经签名且可能被投毒的信息块,并将其直接输入自己的提示词。voyager 则位于信息流前端:它将查询转化为带引用、经置信度评分、通过 OSV 门控并强化了注入防护的简报——这是模型唯一能看到的内容。
每条声明都附带来源信息和置信度信号。软件包推荐须通过失败关闭的 OSV 漏洞门控,在有相关信息时展示构建来源信息(npm SLSA 证明),并可在一次性隔离环境中复现——在经过强化、无根且网络隔离的容器内安装并运行冒烟导入测试(绝不在主机上运行)。这能证明软件包可以安装且其入口点可以加载;但不能证明其安全。所有抓取的文本都会被剥除指令形态的载荷(多语言、base64 以及 Markdown / HTML 向量),并被标记为不可信证据,模型必须分析,绝不可遵从。
- check — 此软件包是否可以安全使用?注册表事实 + OSV 门控(失败关闭)+ 来源信息/许可证/发布时间等供应链信号 + 可选的隔离环境复现。 退出码:0 正常 · 1 已拒绝(不安全)· 2 工具/用法错误(无判定结果)。
- brief / retrieve — 带引用的简报,整合软件包验证、GitHub 发现、权威文档和开放网络搜索,并对各项信息进行交叉引用。
- 由设计保障安全 — 单一出站允许列表、仅限 https、流式大小上限、注入剥除 + 证据标记。除非发起查询,否则不产生网络流量。
CLI、库和 MCP 服务。
安装
npm i @dir-ai/voyager
npx -y @dir-ai/voyager check express
CLI
voyager check <name> [--ecosystem npm|pypi] [--version V] [--twin] # exit 1 if unsafe
voyager brief "<query>" [--package name] [--discover "<intent>"] [--search "<q>"] [--docs <lib>]
voyager discover "<intent>" # GitHub repo discovery (Tier-A)
voyager search "<query>" # open-web search (Tier-C, needs a key)
voyager docs <library> # canonical docs (Tier-B)
voyager doctor # which source keys are configured
check 可用作自然的 CI 门控:如果 Agent 选择了易受攻击、已弃用或不存在的依赖项,就让构建失败。
库
import { checkPackage, voyagerRetrieve, setKeyResolver } from '@dir-ai/voyager'
const v = await checkPackage({ name: 'express', ecosystem: 'npm' })
// → { verdict: 'belief' | 'fact' | 'rejected', claim, steps } (adversarial trace)
const brief = await voyagerRetrieve('a safe date library', {
packages: [{ name: 'date-fns', ecosystem: 'npm' }],
discover: 'date library',
})
brief.rendered // the injection-hardened, framed text to feed a model
brief.claims // structured, cited, confidence-scored
// Bring your own key store (default is env vars):
setKeyResolver((provider) => mySecrets.get(provider))
MCP 服务
// .mcp.json
{
"mcpServers": {
"voyager": { "command": "npx", "args": ["-y", "@dir-ai/voyager", "mcp"] }
}
}
工具:check_package、retrieve、discover_repos、fetch_docs。
Docker
docker run --rm ghcr.io/dir-ai/voyager check express
docker run -i --rm ghcr.io/dir-ai/voyager mcp # stdio MCP
层级与信任
| 层级 | 来源 | 基础信任度 |
|---|---|---|
| A | GitHub · npm · PyPI · OSV(结构化事实) | 高 |
| B | 权威文档(仅官方主机) | 高 |
| C | 开放网络搜索(Tavily / Exa / Apify) | 低——信任前需交叉引用 |
| D | 隔离环境复现(在容器中安装并运行冒烟测试) | 用于复现,不是安全证明 |
密钥为可选项:Tier-A 核心(npm/PyPI/OSV,以及未经身份验证的 GitHub)无需密钥。没有密钥时,各 Tier-C 提供方都会直接跳过。设置 GITHUB_TOKEN、TAVILY_API_KEY 等,或注入一个解析器。
安全状况
使用单一出站允许列表(固定的一组公共 API 主机)、仅限 https、redirect: error、会在超大响应体下载过程中中止的流式字节上限,以及注入剥除机制。该机制会移除角色劫持内容 / 聊天模板令牌 / 零宽字符和双向文本控制字符,对 base64 解码后重新扫描,消除 Markdown 图片和 HTML 注释,并匹配多种语言中的指令载荷。真正的防护来自标记机制——剥除机制可防止其被轻易绕过。复现环境仅在经过强化、网络隔离、只读、非 root 的容器内运行软件包代码;如果没有容器运行时,它会拒绝运行(返回 unsupported),而不是在主机上执行。请参阅 SECURITY.md。
缓存
幂等的 Tier-A 事实(npm / PyPI / OSV)会在进程内以及磁盘上的 ~/.voyager/cache 中缓存(基于内容寻址,带 TTL),使重复检查更快、缓存可跨运行保留,并减少网络依赖。任何密钥都不会被写入(身份验证标头绝不会成为缓存键或缓存值)。VOYAGER_NO_CACHE=1 可禁用缓存;VOYAGER_CACHE_DIR 可更改缓存目录。
路线图
基于 deps.dev 的多生态系统事实(crates / Go / RubyGems / Packagist)、拼写相似包检测、PyPI/cargo 复现环境。欢迎贡献。
许可证
MIT © dir-ai
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。