piyushdhoka/Capgent

GitHub: piyushdhoka/Capgent

一个面向代理的协议优先验证平台,通过挑战-响应与短效令牌解决自动化客户端的合规访问问题。

Stars: 3 | Forks: 0

Capgent # Capgent **验证自动化客户端是否能遵循你的协议** —— 不是“点击交通灯”,而是**字节级挑战**、**加密校验**和**短效证明令牌**,你可以在它们访问真实 API 前要求这些验证。 [网站](https://capgent.vercel.app) · [GitHub](https://github.com/piyushdhoka/Capgent) · [文档(应用内)](https://capgent.vercel.app/docs) · [X](https://x.com/piyush_dhoka27) · [LinkedIn](https://www.linkedin.com/in/piyushdhoka27) [![Bun](https://img.shields.io/badge/Bun-000000?style=flat&logo=bun&logoColor=white)](https://bun.sh/) [![Next.js](https://img.shields.io/badge/Next.js-16-000000?style=flat&logo=next.js&logoColor=white)](https://nextjs.org/) [![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=flat&logo=typescript&logoColor=white)](https://www.typescriptlang.org/) [![Cloudflare Workers](https://img.shields.io/badge/Cloudflare_Workers-F38020?style=flat&logo=cloudflare&logoColor=white)](https://workers.cloudflare.com/)
Capgent — Agent Verification Infrastructure ## 这是什么? **Capgent** 是一个面向代理的访问控制小平台: 1. 客户端(脚本、服务或“代理”)调用你的 API 以 **开始挑战**。 2. 它接收 **指令** 和不透明的 **数据**;它必须应用一组定义的 **字节操作**(切片、XOR、哈希、HMAC 等)并返回正确的 **答案 + HMAC**。 3. 如果正确,API 返回一个 **证明 JWT**(短时效)。你也可以注册 **身份令牌** 并将使用与 **项目和 API 密钥** 关联到仪表板。 因此在实践中:**不实现你的流程的通用爬虫和客户端会失败**;**运行该协议已注册的集成会成功**。它**不是**证明调用者“不是人类”——任何运行你的客户端或 SDK 的人都可以通过。它是一个**结构化协议 + 密钥 + 令牌**门控,类似于“机器的 OAuth”,带有显式的挑战步骤。 ## 它面向谁? | 你想…… | Capgent 的帮助方式 | |--------------|-------------------| | 限制访问你 API 的 **自动化** | 要求挑战 → 验证 → 承载证明(或身份)在受保护路由上 | | **按项目发放 API 密钥** | 仪表板 + Worker 支持的项目/密钥 API | | **在浏览器中演示流程** | [游乐场](https://capgent.vercel.app/playground) 和应用内 `/docs` | | **让代理证明已完成运行** | 证明 JWT + 可选的问答录 / 基准报告 | | **从 TypeScript 集成** | 已发布的 npm 包 **`capgent-sdk`** | ## 各部分如何协同工作 ``` ┌─────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ Next.js │ │ Cloudflare Worker │ │ Neon + Upstash │ │ (apps/web) │────▶│ (apps/api, Hono) │────▶│ DB, Redis, etc. │ │ UI, auth │ │ challenges, JWT │ │ │ └─────────────┘ └──────────────────┘ └─────────────────┘ │ └── capgent-sdk (npm) — same HTTP API from Node, Bun, Workers, etc. ``` **典型集成流程** 1. `POST /api/challenge` — 获取 `challenge_id`、`nonce`、`data_b64`、`instructions`。 2. 解析指令 → 计算 **答案**(变换字节的 SHA-256)和 **HMAC**(使用 `nonce` 的 HMAC-SHA256)。 3. `POST /api/verify/{challenge_id}` — 接收 **证明 JWT**。 4. 调用 **`GET /api/protected/ping`**(或你自己的网关)并带上 `Authorization: Bearer `。 可选:通过头部 `X-Capgent-Api-Key` 提供 **项目 API 密钥**(如果 API 需要)。发现:`GET /.well-known/capgent.json`(旧版 `capagent.json` 仍有效并返回相同负载)。 ## 单体仓库布局 | 路径 | 角色 | |------|------| | [`apps/api`](apps/api) | 基于 **Cloudflare Workers** 的 Hono 应用 — 挑战、验证、受保护 ping、代理、问答、基准测试、项目密钥 | | [`apps/web`](apps/web) | **Next.js 16** — 营销、**仪表板**、**文档**、**游乐场**、邮箱认证(Neon) | | [`packages/sdk`](packages/sdk) | **`capgent-sdk`** — TypeScript 客户端,发布到 npm | | [`agents`](agents) | 示例运行器(OpenRouter / Grok / Gemini)和基准脚本 | **路由说明:** 仪表板认证可通过 [`apps/web/proxy.ts`](apps/web/proxy.ts)(Next.js 代理)对受保护段进行 Cookie/会话检查。 ## 本地快速启动 需要 **[Bun](https://bun.sh/)** 在仓库根目录。 ``` bun install ``` **终端 1 — API**(默认 `http://127.0.0.1:8787`): ``` bun run dev:api ``` **终端 2 — Web**(`http://localhost:3000`): ``` bun run dev:web ``` **Wrangler / 本地 Worker 密钥:** 使用 **`apps/api/.dev.vars`**(.gitignore 忽略)。至少设置 **`UPSTASH_REDIS_REST_URL`** 和 **`UPSTASH_REDIS_REST_TOKEN`**(如需让问答录和基准测试在内存开发后仍持久化)。镜像 **`CAPAGENT_*`** 变量来自 [`apps/api/wrangler.toml`](apps/api/wrangler.toml) `[vars]` 并按需添加密钥(例如 `DATABASE_URL`、`CAPAGENT_JWT_SECRET`)。 **Web 环境:** 从 [`apps/web/.env.example`](apps/web/.env.example) 复制到 `apps/web/.env` 或 `.env.local` 并设置 `NEXT_PUBLIC_CAPAGENT_API_BASE_URL`(例如 `http://127.0.0.1:8787`)、`SESSION_SECRET`、`DATABASE_URL` 以及可选的邮箱/OpenRouter 密钥。 | 本地 URL | 用途 | |-----------|------| | http://localhost:3000 | 着陆页 | | http://localhost:3000/docs | 集成指南 + 示例 | | http://localhost:3000/playground | 浏览器中的挑战 → 验证 | | http://localhost:3000/dashboard | 项目与 API 密钥(登录后) | | http://127.0.0.1:8787 | Worker API 基路径 | **示例代理** ``` cd agents # 查看 package.json — grok/gemini 示例,基准测试 ``` 复制 [`agents/.env.example`](agents/.env.example) → `agents/.env.local` 并设置 `CAPAGENT_API_BASE_URL`、`OPENROUTER_API_KEY` 等。 ### 根脚本 | 命令 | 用途 | |---------|---------| | `bun run dev:api` | Worker 开发服务器 | | `bun run dev:web` | Next.js 开发 | | `bun run build` | 构建 SDK + API(干运行)+ 构建 Web | | `bun run build:sdk` | 编译 `packages/sdk` → `dist/` | | `bun run typecheck` | 类型检查 API、Web、SDK | ## 环境变量(速查表) ### Worker — [`apps/api`](apps/api) 通过 **`wrangler.toml`** `[vars]`、**`wrangler secret put`** 和/或 **`.dev.vars`** 本地配置。 **生产通常需要** - `UPSTASH_REDIS_REST_URL`、`UPSTASH_REDIS_REST_TOKEN` - `CAPAGENT_JWT_SECRET` - `DATABASE_URL`(Neon)— 项目/API 密钥与 Web 用户绑定 - `CAPAGENT_PUBLIC_BASE_URL`、`CAPAGENT_CORS_ORIGINS` **常调优** - `CAPAGENT_CHALLENGE_TTL_SECONDS`、`CAPAGENT_PROOF_TTL_SECONDS`、`CAPAGENT_IDENTITY_TTL_SECONDS` - `CAPAGENT_ALLOW_PUBLIC_REGISTRATION`、`CAPAGENT_ADMIN_API_KEY` - `CAPAGENT_RATE_LIMIT_*`、`CAPAGENT_GUESTBOOK_COOLDOWN_SECONDS` - `CAPAGENT_FORCE_INMEMORY` — 仅 `1` 用于无 Redis 持久化的快速本地测试 ### Web — [`apps/webapps/web) - `NEXT_PUBLIC_CAPAGENT_API_BASE_URL` — 浏览器面向的 API URL(Worker 或同源代理) - `SESSION_SECRET` — Cookie 会话(≥ 32 字符) - `DATABASE_URL` — Neon 用于用户、项目、密钥 - 如需注册和邮箱验证,请配置 SMTP / OAuth 密钥(参考应用环境模式) ## 部署 **API(Cloudflare)** ``` cd apps/api bun run deploy ``` 将 Cloudflare **密钥**和**变量**设置为匹配 Worker `Env` 类型(参考 [`apps/api/src/config.ts`](apps/api/src/config.ts))。**不要**在生产中使用 `CAPAGENT_FORCE_INMEMORY=1`,如果依赖 Redis 支撑的功能。 **Web(例如 Vercel)** - 根目录:**`apps/web`**(或你的单体构建命令) - 设置 `NEXT_PUBLIC_CAPAGENT_API_BASE_URL` 为你的 **生产 Worker URL** - 设置 `SESSION_SECRET`、`DATABASE_URL` 等以匹配 Neon 和邮箱 从仓库根目录构建: ``` bun run build:web ``` ## npm:发布 `capgent-sdk` npm 上的包名为 **`capgent-sdk`**([`packages/sdk`](packages/sdk))。发布时更新 `packages/sdk/package.json` 中的 **`version`**。 **一次性操作:** [创建 npm 账户](https://www.npmjs.com/signup) 并登录: ``` npm login ``` **每次发布** ``` cd packages/sdk bun run build npm publish --access public ``` 干运行(不上传): ``` cd packages/sdk bun run build npm publish --access public --dry-run ``` 发布后,消费者可通过以下方式安装: ``` npm install capgent-sdk ``` **破坏性变更** 在 [`packages/sdk/README.md`](packages/sdk/README.md) 中说明(例如 v2 类型/帮助器重命名)。使用 `createClient` 从 `capgent-sdk` 传入 `CAPAGENT_API_BASE_URL` / API 密钥环境变量,如文档所述。 ## SDK 示例 ``` import { createClient } from "capgent-sdk" import { solveChallengeFromSteps } from "capgent-sdk/solver" import { parseCanonicalStepsFromInstructions } from "capgent-sdk/parser/heuristic" const client = createClient({ baseUrl: process.env.CAPAGENT_API_BASE_URL!, apiKey: process.env.CAPAGENT_API_KEY, // project key when required agentName: "my-service", agentVersion: "1.0.0", }) const ch = await client.getChallenge() const steps = parseCanonicalStepsFromInstructions(ch.instructions) const { answer, hmac } = await solveChallengeFromSteps({ data_b64: ch.data_b64, nonce: ch.nonce, steps, }) const proof = await client.verifyChallenge(ch.challenge_id, answer, hmac) await client.protectedPing(proof.token) ``` 完整表格、curl 和中间件模式:**https://capgent.vercel.app/docs**(或本地 `/docs`)。 ## 进一步阅读 - [`Context.md`](Context.md) — 产品与架构说明 - [`packages/sdk/README.md`](packages/sdk/README.md) — SDK 安装、错误处理、OpenRouter 解析器
Capgent — 面向自动客户端的协议优先验证与 API 密钥。
标签:API安全, API密钥管理, Bun, HMAC, JSON输出, JWT, SEO: 代理控制, SEO: 协议验证, SEO: 字节级挑战, SEO: 安全API, SEO: 短时证明, Streamlit, TypeScript, XOR, 云端工作流, 代理访问控制, 使用追踪, 切片操作, 加密校验, 协议验证, 哈希, 字节级挑战, 安全基础设施, 安全插件, 客户端验证, 开发者平台, 文档即服务, 智能代码审计, 暗色界面, 短时证明令牌, 程序员工具, 自动化客户端, 自动化攻击, 访问控制, 身份令牌, 集成平台, 项目仪表盘