Cursor智能体开发:Webhooks概述
当你创建带有 webhook URL 的代理(agent)时,Cursor 会发送 HTTP POST 请求来通知状态变更。目前仅支持statusChange事件,即当代理进入ERROR或FINISHED状态时。
Webhook 验证
为确保 webhook 请求确实来自 Cursor,请验证每个请求所附的签名:
标头
每个 webhook 请求都包含以下标头:
X-Webhook-Signature– 以sha256=<hex_digest>格式提供的 HMAC-SHA256 签名X-Webhook-ID– 此次投递的唯一标识符(便于日志记录)X-Webhook-Event– 事件类型(目前仅statusChange)User-Agent– 固定为Cursor-Agent-Webhook/1.0
签名验证
要验证 webhook 签名,请先计算期望的签名,然后与收到的签名进行比对:
const crypto = require("crypto");function verifyWebhook(secret, rawBody, signature) { const expectedSignature = "sha256=" + crypto.createHmac("sha256", secret).update(rawBody).digest("hex"); return signature === expectedSignature;}import hmacimport hashlibdef verify_webhook(secret, raw_body, signature): expected_signature = 'sha256=' + hmac.new( secret.encode(), raw_body, hashlib.sha256 ).hexdigest() return signature == expected_signature计算签名时应始终使用原始请求体(在任何解析之前)。
载荷格式
Webhook 载荷以 JSON 形式发送,结构如下:
{ "event": "statusChange", "timestamp": "2024-01-15T10:30:00Z", "id": "bc_abc123", "status": "FINISHED", "source": { "repository": "https://github.com/your-org/your-repo", "ref": "main" }, "target": { "url": "https://cursor.com/agents?id=bc_abc123", "branchName": "cursor/add-readme-1234", "prUrl": "https://github.com/your-org/your-repo/pull/1234" }, "summary": "添加了包含安装说明的 README.md"}请注意,部分字段为可选项,仅在可用时才会显示。
最佳实践
- 验证签名– 始终验证 webhook 签名,确保请求来自 Cursor
- 处理重试– 若你的端点返回错误状态码,webhook 可能会重试
- 快速响应– 尽快返回 2xx 状态码
- 使用 HTTPS– 在生产环境中始终为 webhook 端点使用 HTTPS URL
- 存储原始负载– 存储原始 webhook 负载以便调试和后续验证
《动手学PyTorch建模与应用:从深度学习到大模型》是一本从零基础上手深度学习和大模型的PyTorch实战指南。全书共11章,前6章涵盖深度学习基础,包括张量运算、神经网络原理、数据预处理及卷积神经网络等;后5章进阶探讨图像、文本、音频建模技术,并结合Transformer架构解析大语言模型的开发实践。书中通过房价预测、图像分类等案例讲解模型构建方法,每章附有动手练习题,帮助读者巩固实战能力。内容兼顾数学原理与工程实现,适配PyTorch框架最新技术发展趋势。
