内容
# 否决
[](https://www.npmjs.com/package/@jigyasudham/veto)
[](https://www.npmjs.com/package/@jigyasudham/veto)
[](https://github.com/jigyasudham/veto/blob/main/LICENSE)
> **93 个智能工具。 49 名专家。 每种主要 AI CLI。 自我学习。 零额外订阅费用。**
一个 MCP 服务器,本地运行在您的机器上,与 Claude Code、Codex CLI、Gemini CLI、Antigravity CLI、Cursor、Windsurf、Zed 和 JetBrains 连接,使用您现有的订阅 — 给每个 AI 一个专家代理委员会,本地 LLM 支持,SDD 代理,playwright 自动化,持久的跨平台内存,一个自我学习的路由器,每 20 个记录的任务结果自动重新调整其层阈值(审查记录结果为您;可通过 `auto_apply_learning` 配置) ,CI/CD 门控,工作区发现和双向 IDE 通信。
> **计费说明:** “零成本”适用于订阅计划(Claude Max,Gemini Advanced 等)。 如果您使用 API/按令牌计费,为 Veto 代理(通过代理循环或 MCP 采样)执行的 LLM 推理计入您的令牌使用量,就像其他回合一样。 `veto init` 检测 API 密钥环境变量并自动警告您。
---
## 快速入门
```bash
# 1. 安装 CLI — 将纯粹的 `veto` 命令添加到您的 PATH 中
npm i -g @jigyasudham/veto
# 2. 将 Veto 注册到您使用的所有 AI 客户端(Claude Code、Gemini、Codex、Cursor、...)
veto init
```
您不想安装任何东西吗?所有命令也可以通过 npx 使用:
```bash
npx -y @jigyasudham/veto@latest init
```
这两个是独立的。 `veto init` 编写 MCP 配置文件,通过 `npx -y --package @jigyasudham/veto@latest veto-server` 启动服务器 — npx 每次客户端重启时都会针对注册表重新解析 `@latest`,因此 **MCP 服务器自动更新**,而全局副本永远不会固定在旧版本上。 **全局安装仅提供 CLI** (`veto doctor`、`veto sessions`、状态栏等);使用 `npm i -g @jigyasudham/veto@latest` 保持更新,当 `veto doctor` 说它落后时。
---
## 代理的工作原理
**无需 API 密钥,零额外成本。** 每个工作代理的核心都是一个确定性专家模块,有两个可选的 LLM 推理层 — 所有这些都委托给您已经付费的 AI。
### 默认 — 确定性专家模块
开箱即用,每个 42 个工作代理作为一个手写的专家模块运行(`plan()` / `analyze()` 在 `src/agents/` 中) — **不是** LLM。它们始终运行,离线工作,成本为零令牌。它们的深度因设计而异:分析代理(安全扫描器,机密,依赖项审计,克隆检测器)应用真实的算法 — 正则表达式/AST 检测,OWASP/CWE 规则,基于哈希的克隆匹配 — 而规划代理(编码器,调试器,测试人员,...)是结构化的专家操作手册:策划的步骤,检查清单和陷阱,用于任务类别,构建为可被您已经付费的 AI 推理,而不是自我推理。
### 路径 A — 代理循环(大多数客户端:Claude Code,Cursor,Windsurf)
Veto 返回专家的角色,评分标准和输出合同作为 `llm_upgrade` 提示。主机 AI 将专家推理为推理,并将结构化的 JSON 返回以完成操作。 这是主要路径 — 它除了您现有的订阅之外不需要任何费用,并且在每个客户端上都有效。
### 路径 B — MCP 采样(支持 `server.createMessage` 的客户端)
在采样可用的情况下,相同的升级在服务器端进行,无需额外的往返。 注意:2026 年 7 月的 MCP 规范修订版在整个协议中废除了采样协议(12 个月的 sunset),因此代理循环(路径 A)是 Veto 的长期默认值;采样仍然存在时的透明优化。
7 代理 **委员会** 是首选 LLM — 其价值是多代理辩论 — 但它在没有可用 LLM 路径时也会回落到确定性裁决。 当运行多个代理时,它们并行执行。
---
## 专家角色
**49 名专家:42 名确定性工作代理,跨 6 个领域 + 7 代理委员会。** 委员会在您构建之前辩论权衡;工作代理进行实际分析和规划。 每个都是一个确定性专家模块,可以升级到 LLM 推理 — 请参阅 [代理的工作原理](#代理的工作原理)。 随时使用 `veto agents` 列出它们。
**委员会(7)**
`首席开发人员` · `项目经理` · `架构师` · `用户体验` · `魔鬼的拥护者` · `法律` · `安全`
**开发(12)**
`编码员` · `代码审查员` · `测试人员` · `调试器` · `重构` · `数据库` · `API` · `前端` · `后端` · `DevOps` · `性能` · `迁移`
**安全(6)**
`安全扫描器` · `身份验证代理` · `数据隐私` · `机密代理` · `依赖项审计` · `渗透测试人员`
**内存(5)**
`上下文管理器` · `决策记录器` · `项目映射器` · `模式学习器` · `知识库`
**研究(7)**
`研究人员` · `技术顾问` · `成本分析师` · `竞争对手分析师` · `风险评估师` · `估计器` · `伦理和偏见`
**质量(5)**
`代码质量` · `文档` · `可访问性` · `兼容性` · `错误处理`
**工作流(7)**
`任务规划器` · `任务协调器` · `文件管理器` · `Git 代理` · `搜索代理` · `报告器` · `自动化`
---
## MCP 工具(92)
| 类别 | 工具 |
|---|---|
| **会话** | `veto_status` · `veto_session_save` · `veto_session_restore` · `veto_sessions_list` · `veto_autosave_status` · `veto_session_replay` |
| **路由器** | `veto_route_task` · `veto_rate_status` |
| **委员会** | `veto_council_debate` · `veto_benchmark` · `veto_adr` |
| **代理** | `veto_agent_plan` · `veto_execute_parallel` · `veto_explain` · `veto_compose_agents` · `veto_delegate` |
| **审查** | `veto_code_review` · `veto_security_scan` · `veto_secrets_scan` · `veto_diff_review` · `veto_full_review` · `veto_pr_review` |
| **管道** | `veto_ci_gate` · `veto_pre_commit` · `veto_new_feature` · `veto_workflow` · `veto_task_parse` |
| **高级** | `veto_local_llm` · `veto_semantic_search` · `veto_sdd_agent` · `veto_playwright` · `veto_notify_ide` |
| **质量** | `veto_clone_detector` · `veto_lint_rules` · `veto_api_contract` · `veto_a11y_advisor` · `veto_type_coverage` · `veto_test_gaps` |
| **顾问** | `veto_dep_advisor` · `veto_dep_verify` · `veto_query_advisor` · `veto_bundle_advisor` · `veto_dead_code` · `veto_hitl_checkpoint` · `veto_drift_check` |
| **监视** | `veto_watch` · `veto_watch_poll` · `veto_watch_stop` |
| **内存** | `veto_memory_store` · `veto_memory_search` · `veto_memory_delete` · `veto_project_map_update` · `veto_project_map_get` · `veto_pattern_store` · `veto_patterns_list` · `veto_memory_export` · `veto_memory_import` |
| **学习** | `veto_record_outcome` · `veto_learning_stats` · `veto_learning_apply` |
| **交接** | `veto_handoff` · `veto_continue` · `veto_platform_setup` |
| **可观察性** | `veto_usage_status` · `veto_audit_log` · `veto_health` · `veto_metrics` · `veto_snapshot` |
| **发现** | `veto_discover` · `veto_summarize` · `veto_git_blame` · `veto_changelog` · `veto_onboard` · `veto_debt_register` |
| **开发工具** | `veto_docs_fetch` · `veto_context_status` · `veto_openapi_gen` · `veto_flag_auditor` · `veto_env_setup` · `veto_commit_message` · `veto_pr_description` · `veto_pr_post` · `veto_prompt_optimizer` · `veto_sre_advisor` · `veto_diagram` · `veto_rca` · `veto_doc_gen` · `veto_postmortem` · `veto_release_notes` · `veto_translate` · `veto_merge_conflict` |
| **插件** | `veto_plugins` |
## 紧凑模式 — 93 种工具,无上下文税
92 种工具模式会为客户端带来约 16K 上下文令牌的成本,在用户输入一个字之前。 紧凑模式提供一个 **5-6 倍更小的** 界面:七种核心工具(`veto_status`、`veto_session_save`、`veto_session_restore`、`veto_route_task`、`veto_council_debate`、`veto_memory_search`、`veto_record_outcome`)加上两个元工具 — `veto_find_tools` 按关键字搜索完整目录并按需返回匹配的模式;`veto_call` 通过名称调用任何目录工具。 每个工具在两种模式下都直接可调用;紧凑模式仅更改预先公开的内容。
使用 `VETO_COMPACT=1` 在您的 MCP 服务器配置环境中启用它,或在 `~/.veto/config.json` 中使用 `"compact_tools": true`:
```jsonc
{
"mcpServers": {
"veto": {
"command": "npx",
"args": ["-y", "--package", "@jigyasudham/veto@latest", "veto-server"],
"env": { "VETO_COMPACT": "1" }
}
}
}
```
## 依赖幻觉防护
LLM 提出看似合理但不存在的包名,对手在公共注册表中注册这些名称(slopsquatting)— 大多数 AI 工作流中没有预安装检查的供应链攻击类。 `veto_dep_verify` 在您安装之前检查每个提出的包 **之前** 与实时注册表:
```
veto_dep_verify { packages: ["axios", "axois", "left-padd"], ecosystem: "npm" }
→ axios verified (14 years old, 40M downloads/month)
→ axois HIGH_RISK (1 edit from "axios" — possible typosquat)
→ left-padd NOT_FOUND (likely hallucinated — do NOT retry the install later:
nonexistent AI-suggested names are prime slopsquat targets)
```
每个包的信号:注册表存在,年龄,每月下载量,版本历史,弃用和与流行包的错字距离。 支持 npm,PyPI 和 crates.io。 网络故障返回 `unverifiable` — 从不默默地安全。
## 决策漂移强制执行
AI 助手忘记架构决策并重新审议决策 — 这是关于长期 AI 项目的最常见投诉。 Veto 的内存不仅存储决策;它 **强制执行** 决策。 将决策一次记录为机器可检查的约束:
```
veto_decisions {
action: "add",
rule: "We use Postgres — no Mongo",
why: "Decided 2026-05: relational data, team expertise",
forbidden_patterns: ["mongoose", "mongodb"],
severity: "block"
}
```
从那时起,`veto_diff_review` 和 `veto_ci_gate` 自动失败任何 diff,其 **添加的行** 与禁止模式匹配 — 当 AI 静默地在导入中添加 `mongoose` 到导入中时,审查失败并附带规则和理由。 模式是大小写不敏感的正则表达式(带有子字符串回退),可选范围限定为文件通配符(`src/**/*.ts`),每个项目或全局,严重程度为 `block` 或 `warn`。 使用 `action: list / check / disable / enable` 进行管理。
## 复合成错误电路中断器
代理在循环中默默失败 — 重试相同的调用,击中相同的错误,在任何人注意到之前烧掉整个会话。 `veto_drift_check` 在飞行中扫描最近的工具调用跟踪该模式并触发断路器:```
veto_drift_check
→ DRIFT DETECTED
• 4 consecutive failed calls (veto_diff_review)
• same error repeated 3× ("no diff provided")
• tool veto_route_task called 6× in a row
→ remediation (debugger agent): stop retrying; the diff is empty —
point at a project_dir with uncommitted changes or pass `diff` explicitly.
```
它查找三个漂移信号 — 连续失败,重复错误消息和单个工具重复 — 并且当任何一个触发时,它运行 `debugger` 代理在跟踪上获取具体的恢复步骤,而不是让循环继续运行。 在长时间的代理运行中将其作为周期性检查点调用。
## 我使用哪个工具?
几种工具的设计有所重叠(不同的粒度或入口点)。 快速指南:
**审查代码**
| 您有… | 使用 | 注意 |
|---|---|---|
| 一个代码片段或单个文件 | `veto_code_review` | 不是 `veto_diff_review`,它读取 git diff |
| 未提交/更改的文件(git diff) | `veto_diff_review` | 代码 + 安全 + 机密扫描并行 |
| 门控提交(硬阻止机密) | `veto_pre_commit` | 调整为提交时间 |
| 门控 CI(退出代码 + pass/warn/fail) | `veto_ci_gate` | 用于 GitHub Actions / GitLab CI |
| 更深的预合并/发货通行证(+ 质量) | `veto_full_review` | 比 `veto_diff_review` 更丰富 |
| GitHub PR 按编号/URL | `veto_pr_review` | 获取 diff,返回可发布评论 |
**记住事情**
| 想要… | 使用 |
|---|---|
| 保存/召回解决方案,决策或引用 | `veto_memory_store` / `veto_memory_search` |
| 跟踪循环代码约定 | `veto_pattern_store` / `veto_patterns_list` |
| 导航代码库而扫描文件系统 | `veto_project_map_get` (通过 `veto_project_map_update` 刷新) |
**运行多步骤工作流| 使用 |
|---|---|
| 同时运行多个代理在一个任务上 | `veto_execute_parallel` |
| 运行具有通过/失败门的顺序管道 | `veto_workflow` |
| 将 PRD / 普通英语转换为任务 DAG | `veto_task_parse` (馈送 `veto_workflow`) |
| 计划新功能端到端(委员会 → 计划 → 任务) | `veto_new_feature` **会话**
| 想要… | 使用 |
|---|---|
| 带有完整保存上下文的恢复工作 | `veto_session_restore` (或 `veto_continue` 最新) |
| 查看会话的事件 / 工具调用时间线 | `veto_session_replay` |
| 将工作转移到另一个 AI 工具 | `veto_handoff` → `veto_continue` |
## MCP 资源
| URI | 返回什么 |
|---|---|
| `veto://sessions` | 所有已保存的会话跨平台 |
| `veto://project-map?dir=<path>` | 存储的项目结构图 |
| `veto://memory?<query>` | 知识库搜索结果 |
| `veto://memory?q=<query>` | 知识库搜索结果 |
| `veto://patterns` | 学习到的编码模式 |
## MCP 提示
| 提示 | 它做什么 |
|---|---|
| `code-review` | 完整的代码审查 — 粘贴代码,获得评分结果 |
| `security-audit` | OWASP Top 10 扫描,附 CWE 引用 |
| `deploy-checklist` | 委员会审查部署计划,然后再部署 |
| `explain-file` | 任何文件的专家解释,根据类型自动路由 |
## CLI 命令
这些命令在任何终端中独立运行 — 无需 AI 客户端。 裸 `veto` 命令来自全局安装(`npm i -g @jigyasudham/veto`,请参阅 [快速入门](#快速入门));否则,请在每个命令前加上 `npx -y @jigyasudham/veto@latest`。
```bash
veto init # 配置所有 AI 工具 + 扫描项目
veto doctor # 检查 MCP 注册 + 系统健康状况
veto status # 版本,数据库路径,会话/内存/结果计数
veto version # 别名 veto status
veto sessions # 列出最近 20 个保存的会话(自动保存的会话带有 [auto] 徽章)
veto sessions --clean # 删除 7 天以上的自动保存会话
veto memory [查询] # 搜索知识库(空白 = 所有条目)
veto patterns [前缀] # 列出学习的代理/路由模式
veto tools [筛选器] # 列出所有 93 个 MCP 工具(--json 适用于机器输出)
veto agents [筛选器] # 列出所有 49 名专家 — 工作人员 + 委员会 (--json)
veto routing [status|log|reset] # 检查可选的路由反馈循环
veto hook install # 安装 pre-commit 机密扫描钩子
veto hook remove # 删除 veto pre-commit 钩子
veto check # 扫描暂存更改以获取机密(由钩子使用)
veto help # 命令 + MCP 工具参考
veto help --troubleshoot # 完整的故障排除指南
```
### `veto doctor`
```
veto doctor
否决医生 — 系统健康检查
─────────────────────────────────────────────────────
✓ Node.js v22.5.0
✓ ~/.veto exists
✓ 数据库 ~/.veto/veto.db
17 会话 · 12 记忆 · 3 模式
MCP 注册
─────────────────────────────────────────────────────
✓ Claude Code — 已注册
✓ Gemini CLI — 已注册
✓ Antigravity CLI — 已注册
· Codex CLI — 未安装
· Zed — 未安装
✓ 所有检查均通过 — 否决是健康的!
```
## 委员会辩论
两阶段流程 — 在 Claude Code、Gemini CLI、Antigravity CLI 和 Codex CLI 上运行,无需 API 密钥:
```bash
# 阶段 1 — 调用任务,获取即时确定性结果 + LLM 升级提示
veto_council_debate {
task: "将身份验证从会话迁移到 JWT",
project_dir: "/your/project",
strictness: "standard"
}
→ {
llm_backed: false,
final_verdict: "YELLOW",
votes: { lead_dev: {...}, architect: {...}, security: {...}, ... },
llm_upgrade: {
available: true,
instruction: "Read debate_prompt, reason as all 7 agents, call again with agent_responses",
debate_prompt: "You are running a Veto Council debate. Analyze the task as each specialist..."
}
}
```
# 第二阶段 — 原因分析所有7个代理,传递响应并获得基于LLM的裁决
veto_council_debate {
task: "将身份验证从会话迁移到JWT",
agent_responses: {
lead_dev: { verdict: "警告", reason: "无状态JWT会使注销复杂化 — 需要封禁列表", concerns: ["刷新令牌旋转必须是原子的"], recommendation: "使用短时访问令牌(15分钟)+ httpOnly刷新令牌" },
pm: { verdict: "批准", reason: "JWT迁移解锁了移动客户端", concerns: [], recommendation: "在功能标志后发布,出现注销问题则回滚" },
architect: { verdict: "批准", reason: "适合无状态微服务边界", concerns: ["时钟偏差可能导致跨服务过期"], recommendation: "添加NTP同步检查;使用相对过期而不是绝对时间戳" },
ux: { verdict: "批准", reason: "如果迁移无感知,用户无可见变化", concerns: [], recommendation: "无感知迁移 — 不需要现有会话注销" },
devil: { verdict: "警告", reason: "如果刷新令牌存储在凌晨2点宕机怎么办?", concerns: ["Redis宕机 = 所有用户注销"], recommendation: "如果Redis宕机,则回退到会话身份验证;使用短旋转窗口" },
legal: { verdict: "批准", reason: "JWT是行业标准,无新的合规风险", concerns: [], recommendation: "在隐私政策中记录令牌存储" },
security: { verdict: "警告", reason: "刷新令牌旋转必须是原子的 — TOCTOU风险", concerns: ["本地存储访问令牌容易受到XSS攻击"], recommendation: "仅在内存中存储访问令牌;刷新令牌存储在httpOnly Secure SameSite=Strict cookie中" }
}
}
→ {
llm_backed: true,
final_verdict: "黄色",
warnings: ["刷新令牌旋转必须是原子的...", "如果刷新令牌存储在凌晨2点宕机怎么办..."],
recommended: "继续使用JWT. 使用httpOnly cookie存储刷新令牌,内存存储访问令牌..."
}
### 委员会的`严格程度`
```
veto_council_debate { task: "...", strictness: "fast" } # 3个代理,立即
veto_council_debate { task: "...", strictness: "standard" } # 7个代理,默认
veto_council_debate { task: "...", strictness: "strict" } # 7 + 反驳恶魔
```
---
## 会话标签和搜索
```
veto_session_save {
auto_summarize: true,
tags: ["身份验证", "jwt", "中间件"]
}
veto_sessions_list { query: "身份验证" }
→ 匹配"身份验证"的会话,包含摘要、上下文、标签或项目目录
```
令牌使用情况需手动报告 — 将`token_count`传递给`veto_status`或`veto_session_save`,Veto会按平台和日期存储。`veto_rate_status`显示已报告的内容;不会自动统计任何内容。
---
## 工作空间发现
```
veto_discover { "project_dir": "/your/project" }
→ {
git: { branch: "main", commit: "a3f2b1", dirty_files: [], recent_commits: [...] },
ecosystems: { node: "my-app v2.1.0" },
tech_stack: ["TypeScript", "React", "Prisma"],
key_files: ["tsconfig.json", "prisma/schema.prisma", ".env.example"],
total_files: 142
}
```
---
## 差异审查
```
veto_diff_review { project_dir: "/your/project" }
→ {
verdict: "警告",
files_changed: 4,
code_review: { score: 78, critical: 0, high: 2, findings: [...] },
security: { score: 91, critical: 0, high: 0, findings: [...] },
secrets: { findings: [] },
summary: "⚠️ 警告 — 4个文件更改..."
}
```
---
## 顺序流水线
```
veto_workflow {
steps: [
{ id: "代码", agent: "coder", task: "实现身份验证中间件", gate: 70 },
{ id: "审查", agent: "reviewer", task: "审查实现", gate: 75 },
{ id: "安全", agent: "security-scanner", task: "扫描漏洞", gate: 80 },
{ id: "测试", agent: "tester", task: "编写测试用例" }
],
project_dir: "/your/project"
}
→ { verdict: "passed", steps_passed: 4, steps_failed: 0, results: [...] }
```
---
## 自我学习路由器
每个代理工具在完成时都会自动记录质量信号。任何工作会话后,`veto_learning_stats`都会显示实时数据,而`veto_learning_apply`会在大约20次调用后自动调整层级阈值。
该循环也会**隐含地**自我反馈:`veto_learning_stats`会从工具调用跟踪中挖掘信号,这些信号不是手动记录的 — 由代理支持的工具返回错误,或在一次会话中在几分钟内重新运行相同的分析工具(通常意味着第一个答案不令人满意) — 并自动记录为低质量结果。
```bash
veto_route_task { task: "调试身份验证问题", file_ext: ".ts" }
→ { ..., recommended_agent: "debugger" } # ← 根据历史记录预测
```
---
## 插件系统
```javascript
// ~/.veto/agents/my-agent.js
export function plan(task, context) {
return {
agent: 'my-agent', task, tier: 2,
approach: '您的自定义方法...',
steps: ['步骤 1', '步骤 2'],
checklist: ['[ ] 检查 1'],
pitfalls: ['陷阱 1'],
patterns: ['模式 1'],
duration_estimate: '1-2 小时',
};
}
```
---
## 跨平台交接
```
Claude at 90% → veto_handoff { summary, context }
Open Gemini → veto_continue { resuming_as: "gemini" }
完全恢复上下文。继续操作,恰好在您停止的地方。
```
平台切换是手动的 — Veto通过`veto_rate_status`显示哪个平台有剩余预算,您可以决定何时切换。
| 平台 | 支持 |
|---|---|
| Claude Code | ✅ 原生MCP |
| Gemini CLI | ✅ MCP支持 |
| Antigravity CLI | ✅ MCP支持 |
| Codex CLI | ✅ MCP支持 |
| Cursor | ✅ MCP支持 |
| Windsurf | ✅ MCP支持 |
| Zed | ✅ MCP支持(`context_servers`) |
---
## 版本说明
### 2.7.4
- **服务器在没有`node:sqlite`的情况下存活。** SQLite内置模块(Node ≥ 22.5)现在在首次数据库使用时延迟加载,而不是在导入时加载。在缺乏该模块的运行时环境中 — 较旧的Node、注册能力扫描器 — 服务器现在启动,回答`initialize`,并列出所有93种工具;只有持久性工具(内存、会话、学习)返回清晰的"升级Node"错误,而不是在MCP握手之前整个进程崩溃。支持的Node上没有行为变化:相同的数据库、相同的模式、相同的查询。
- 防崩溃状态栏`print`得到了相同的处理:其只读DB打开现在需要在现有永不抛出的保护下进行。
### 2.7.3
- **全局CLI安装已恢复为文档路径。** 2.7.1删除了所有`npm i -g`建议,因为全局副本可能会遮蔽npx并将MCP服务器固定到旧版本 — 但2.7.1的`@latest`固定使其无法遮蔽,留下README文档中15个裸`veto`命令,而没有办法将`veto`放到PATH中。`npm i -g @jigyasudham/veto`现在是文档化的CLI安装方式(新的[入门](#getting-started)部分);MCP服务器通过固定的npx配置继续自动更新。
- **`veto doctor`不再谴责全局安装。** 它现在将全局CLI安装报告为健康状态,仅在它落后注册表时发出警告(使用`npm i -g @latest`修复),并在不存在全局安装时显示信息提示。故障排除文本和启动更新提示已更新以匹配 — "更新全局"而不是"删除全局"。
- **`veto statusline install`检查PATH。** 状态栏热路径调用裸`veto`(npx对于每次提示渲染太慢),因此安装现在在`veto`不在PATH时发出警告,而不是静默渲染。
### 2.7.2
- **`veto init`自我修复损坏的Claude Code注册。** 如果用户范围的`veto` MCP条目启动`node <script>`,而该脚本不再存在 — 经典情况是一个旧条目固定到全局安装的`dist/server.js`,在`npm rm -g`删除后 — `init`现在使用规范的固定npx命令重新注册,而不是跳过它作为"已经注册"。它只会触及一个可证明死亡的`node`路径条目,从不工作或自定义配置。
- **Windows:Claude注册使用`npx.cmd`.** `veto init`现在在Windows上使用`npx.cmd`注册Claude Code(Claude Code无法解析裸`npx`),匹配可靠连接的表单。
### 2.7.1
- **修复:`npx`可能静默运行过时版本。** 生成的MCP配置使用未固定的 `--package @jigyasudham/veto`,因此npx会重用缓存或全局安装的副本,而不是获取最新版本 — 重新安装和重启从未升级。每个生成的配置和文档化的注册命令现在都固定了 **`@latest`** ,npx必须每次启动时都针对注册表重新解析,确保客户端重启时自动更新。所有`npm i -g @jigyasudham/veto`建议都被删除(全局安装正是npx被遮蔽的原因)。
- **启动更新提示。** 当发布新版本的Veto时,正在运行的服务器通过MCP的`instructions`字段向代理显示一行"更新可用 — 重启以获取更新"的提示。非阻塞且离线安全:它读取缓存的最新版本,并在后台最多一天刷新一次;一旦您更新完成,它就会自行解决。
- **`veto --version` / `-v`.** 以前返回"未知命令"。 `veto doctor`现在还报告是否可用更新,并使用`npm rm -g`修复标记全局安装遮蔽。
### 2.7.0
- **状态栏显示实时会话仪表盘,而不是冻结的计数。** 旧令牌段读取Veto自己的`rate_usage`表,只有Veto的工具会增加 — 因此在正常使用期间它会冻结。 `veto statusline print`现在读取JSON Claude Code通过stdin管道到`statusLine`命令,并呈现三个实时仪表盘:`ctx N%`(使用上下文窗口)、`5h N%`(5小时速率限制)和`7d N%`(每周速率限制)。每个仪表盘在 ≥70 时变为黄色,≥90 时变为红色,并在其值不可用时下降(早期会话 / 后 `/compact`)。它呈现例如 `⬡ veto GREEN · router 94% · ctx 37% · 5h 74% · 7d 8% · mem 15`,并降级为中性 `⬡ veto`,保持防崩溃和非阻塞(TTY保护,200毫秒超时)。 Veto自己的每个平台每日会计继续通过`veto_rate_status` / `veto_snapshot`提供。
### 2.6.0
- **`veto statusline` — 任何AI CLI提示下的紧凑Veto行。** `veto statusline install`将`statusLine`命令连接到Claude Code的settings.json(备份;`uninstall`恢复原样)。 `print`热路径是只读、快速和防崩溃的 — 例如呈现 `⬡ veto GREEN · router 94% · claude 42% · mem 15`,如果数据库丢失或锁定,则降级为中性 `⬡ veto`。它存在于CLI中,因此每个Veto用户在任何终端中都可以获得它,而不仅仅是VS Code HUD。
### 2.5.0
- **`veto_drift_check` — 复利错误断路器。** 扫描最近的工具调用跟踪是否有连续失败、重复错误消息和单个工具故障,并运行`debugger`代理进行具体恢复步骤。参见[复利错误断路器](#compounding-error-circuit-breaker)。
### 2.4.0
- **`veto_decisions` — 决策漂移强制执行。** 将架构决策一次性记录为机器可检查的约束;`veto_diff_review`和`veto_ci_gate`然后自动拒绝任何差异,其添加的行重新引入禁止模式。参见[决策漂移强制执行](#decision-drift-enforcement)。
### 2.3.0
- **`veto_dep_verify` — 依赖项幻觉防护。** 在安装前,根据实时npm/PyPI/crates.io注册表验证每个提议的包,标记幻觉名称和拼写错误(slopsquatting防御)。参见[依赖项幻觉防护](#dependency-hallucination-guard)。
### 2.2.0
- **紧凑模式**(`VETO_COMPACT=1`)— 广告包括`veto_find_tools` / `veto_call`元工具在内的9种工具,架构减少约5-6倍。参见[紧凑模式 — 92种工具,无上下文负担](#compact-mode--92-tools-without-the-context-tax)。
- **隐含结果挖掘** — `veto_learning_stats`现在自动从工具调用跟踪中挖掘结果(错误调用、快速重新运行),无需手动`veto_record_outcome`。
## HTTP传输(实验性)
`veto-server --http [port]`在`http://127.0.0.1:<port>/mcp`处提供MCP流式HTTP服务(默认端口3939),而不是stdio — 用于网关、远程客户端或无法生成子进程的任何情况。它运行**无状态**(无会话ID — 2026年7月MCP规范的方向),仅绑定回环;设置`VETO_HTTP_HOST`以故意公开。
## 项目结构
Veto是一个单一的MCP服务器(`src/server.ts`),它注册了93种工具、MCP资源和提示,然后通过每个域的**处理程序注册表**调度每个工具调用 — 没有整体开关。每个域拥有`src/server/handlers/`下的`HandlerMap`模块:
| 模块 | 工具 | 领域 |
|---|---|---|
| `workers.ts` | 15 | 单代理工作委托(code_review, security_scan, explain, …) |
| `generators.ts` | 11 | 单代理工件生成器(adr, diagram, rca, doc_gen, onboard, …) |
| `memory.ts` | 9 | 知识库、模式、项目地图 |
| `observability.ts` | 7 | 健康状况、指标、使用情况、审计、上下文/速率状态 |
| `advisors.ts` | 8 | 项目扫描器(dep, query, bundle, dead-code, flag, openapi, HITL, drift-check) |
| `session.ts` | 6 | 保存 · 恢复 · 列表 · 交接 · 继续 · 重放 |
| `review.ts` | 5 | 差异 · CI · PR · 完整审查 + 预提交管道 |
| `git.ts` | 5 | 归责 · 变更日志 · 提交消息 · PR描述/帖子 |
| `core.ts` | 5 | 状态 · 路由 · 平台设置 · 文档获取 · 发现 |
| `agents.ts` | 5 | 代理计划 · 并行执行 · 委托 · 工作流 · 任务解析 |
| `devtools.ts` | 5 | 插件 · 本地LLM · 克隆检测器 · 组合 · 通知IDE |
| `council.ts` | 3 | council_debate · benchmark · new_feature |
| `learning.ts` | 3 | record_outcome · learning_stats · learning_apply |
| `watch.ts` | 3 | 监视 · 轮询 · 停止 |
共享的、可独立测试的内部实现位于`src/server/`:
- `registry.ts` — `ToolContext`(`{ request, args, server }`)和`HandlerMap`类型
- `runtime.ts` — 共享可变状态(活动项目目录、自动保存、服务器健康状况、`VERSION`)
- `scan-core.ts` — git-diff读取器、三重扫描和代理工作循环(单元测试)
每个处理程序模块都可以独立导入,因此行为被`tests/server/dispatch.test.ts`(`callTool`行为网络)`tests/tools/definitions.test.ts`(89种工具注册覆盖检查)所覆盖。
## 技术栈
- **语言:** TypeScript(严格模式)
- **运行时:** Node.js 22.5+(内置`node:sqlite` — 无需本机编译)
- **依赖项:** 仅`@modelcontextprotocol/sdk` — 一个包,零本机插件
- **内存:** 本地SQLite — 零配置,离线工作,可通过JSON导出
- **平台:** Claude Code · Gemini CLI · Antigravity CLI · Codex CLI · Cursor · Windsurf · Zed
## 许可
MIT © 2026 Jigyasu Dham
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器