GI Database Query Patterns
使用 tkms AsyncSqlSessionTemplate 进行数据库操作规范,包括插入、更新、查询等。
用于安全存储API密钥、密码等敏感信息并写入.env文件,避免泄露。
openclaw skills install @glitch003/vincent-credentials命令、参数、文件名以原文为准
使用此技能安全地管理应用程序所需的凭据——API 密钥、密码、OAuth 令牌、SSH 密钥,或结构化的用户名/密码对。代理创建一个密钥,用户(或代理)设置其值,然后代理通过 CLI 将值直接写入 .env 文件。凭据值不会出现在代理的上下文或标准输出中。
当代理在构建需要凭据的应用程序时(例如第三方 API 密钥),此功能非常有用。无需将凭据粘贴到聊天中(这会导致凭据进入代理上下文),用户可通过 Vincent 控制台设置凭据,代理则通过 CLI 将其写入 .env 文件。
所有命令均使用 @vincentai/cli 包。API 密钥会自动存储并解析——您无需处理原始密钥或文件路径。
该技能旨在将凭据从代理的上下文窗口中隔离。
工作原理: secret env CLI 命令从 Vincent 服务器获取凭据,并直接将其写入磁盘上的 .env 文件。值不会输出到标准输出,也不会出现在代理的对话上下文中。许多代理框架会屏蔽读取 .env 文件的操作,因此即使文件存在于磁盘上,代理也无法读回它。代理所构建的应用程序在运行时正常读取 .env 文件。
无需环境变量,因为此技能采用代理优先的初始化方式:代理在运行时调用 Vincent API 创建自己的凭据密钥,API 返回一个作用域受限的 API 密钥。CLI 在创建过程中自动存储返回的 API 密钥。密钥持久化路径(${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/credentials/credentials/ 或 ./credentials/)在本技能的元数据中声明。
覆盖保护机制: 一旦由代理的 API 密钥设置了值,只有相同的 API 密钥才能覆盖它。这防止了其他代理或密钥篡改凭据。该保护在数据库层面以原子方式强制执行。
**所有 API 调用仅发送至 heyvincent.ai**,通过 HTTPS/TLS 加密传输。不与其他端点、服务或外部主机通信。
密钥生命周期:
secret create 并指定 --type CREDENTIALS —— CLI 自动存储 API 密钥,并返回 keyId 和 claimUrl。secret env 将值写入 .env 文件,且不暴露值。https://heyvincent.ai 管理该密钥。https://heyvincent.ai 上撤销代理的 API 密钥。| 类型 | 值格式 | 使用场景 |
|---|---|---|
API_KEY | 非空字符串 | 第三方 API 密钥 |
SSH_KEY | 非空字符串 | SSH 私钥 |
OAUTH_TOKEN | 非空字符串 | OAuth 访问/刷新令牌 |
CREDENTIALS | 包含 password 或 secret 的 JSON 对象 | 用户名/密码、密钥/密钥对 |
以上四种类型均支持相同的创建、设置和 env 工作流。
CREDENTIALS 值必须是一个包含至少以下一项的 JSON 对象:
password(字符串)—— 例如:{"username": "alice", "password": "hunter2"}secret(字符串)—— 例如:{"accountId": "acct-1", "secret": "top-secret"}其他字段将原样保留。所有值长度限制为 16KB。
在创建新密钥前,请先检查是否已存在:
npx @vincentai/cli@latest secret list --type CREDENTIALS如果返回了密钥,请使用其 id 作为后续命令的 --key-id。如果没有密钥,则创建一个新的密钥。
npx @vincentai/cli@latest secret create --type CREDENTIALS --memo "Acme API 凭据"返回 keyId(用于所有后续命令)、claimUrl(与用户共享)和 secretId。
创建后,请告知用户:
“这是您的凭据认领链接:<claimUrl>。请访问 https://heyvincent.ai 使用此链接认领所有权并设置凭据值。”
选项 A:用户通过控制台设置(推荐)
用户使用认领链接认领密钥,然后在控制台中设置凭据值。这确保值完全不在代理的处理范围内。
选项 B:代理通过 CLI 设置
适用于代理已获取凭据的场景(例如从服务获取 API 密钥):
npx @vincentai/cli@latest secret set-value --key-id <KEY_ID> --value '{"username": "alice", "password": "hunter2"}'对于简单字符串类型(API_KEY、SSH_KEY、OAUTH_TOKEN):
npx @vincentai/cli@latest secret set-value --key-id <KEY_ID> --value "sk-my-third-party-api-key"一旦值被设置(由用户或代理),即可使用 CLI 将其写入 .env 文件。值不会输出到标准输出。
# 将 API_KEY 密钥写为环境变量
npx @vincentai/cli@latest secret env --key-id <KEY_ID> --env-var ACME_API_KEY
# 对于 CREDENTIALS:提取特定字段
npx @vincentai/cli@latest secret env --key-id <KEY_ID> --env-var DB_PASSWORD --field password
# 写入指定路径(默认:./.env)
npx @vincentai/cli@latest secret env --key-id <KEY_ID> --env-var SERVICE_TOKEN --path ./config/.env该命令输出确认信息(不含值),以便代理确认操作成功:
{
"written": "ACME_API_KEY",
"path": "/path/to/.env",
"type": "API_KEY"
}参数说明:
技能:Vincent - 凭据
版本:1.0.69
分块:2/2
| 标志 | 必需 | 说明 |
|---|---|---|
--env-var | 是 | 环境变量名称(例如 MY_API_KEY) |
--path | 否 | .env 文件路径(默认:./.env) |
--key-id | 否 | API 密钥 ID(如果仅存在一个凭据密钥,则自动发现) |
--field | 否 | 对于 CREDENTIALS 类型:提取特定 JSON 字段,而非写入完整 JSON |
行为:
.env 文件不存在,则创建该文件(权限为 0600)您的应用程序按常规方式读取 .env 文件:
# Node.js 使用 dotenv
require('dotenv').config()
const apiKey = process.env.ACME_API_KEY
# Python 使用 python-dotenv
from dotenv import load_dotenv
load_dotenv()
api_key = os.getenv('ACME_API_KEY')# 1. 代理创建一个 CREDENTIALS 类型的密钥
npx @vincentai/cli@latest secret create --type CREDENTIALS --memo "Acme 服务凭据"
# → keyId: abc-123, claimUrl: https://heyvincent.ai/claim/...
# 2. 告知用户通过控制台完成凭据领取并设置值
# 3. 设置完成后,将各个字段写入 .env
npx @vincentai/cli@latest secret env --key-id abc-123 --env-var ACME_USERNAME --field username
npx @vincentai/cli@latest secret env --key-id abc-123 --env-var ACME_PASSWORD --field password
# 结果写入 .env:
# ACME_USERNAME=alice
# ACME_PASSWORD=hunter2secret env 命令输出确认信息的 JSON(不包含凭据值):
{
"written": "ACME_API_KEY",
"path": "/path/to/.env",
"type": "API_KEY"
}secret create 命令返回:
{
"keyId": "abc-123",
"claimUrl": "https://heyvincent.ai/claim/...",
"secretId": "sec-456"
}| 错误 | 原因 | 解决方案 |
|---|---|---|
401 Unauthorized | API 密钥无效或缺失 | 检查 key-id 是否正确;如需重新关联 |
403 Overwrite Rejected | 不同的 API 密钥已设置该凭据的值 | 凭据所有者必须通过控制台管理 |
404 Value Not Set | 凭据值尚未设置 | 用户需通过控制台设置,或由代理通过 CLI 设置 |
Key not found | API 密钥已被撤销或从未创建 | 从凭据所有者处获取新的令牌并重新关联 |
若代理丢失其 API 密钥,凭据所有者可在前端生成一个 重新关联令牌。代理随后用此令牌换取新的 API 密钥。
npx @vincentai/cli@latest secret relink --token <TOKEN_FROM_USER>CLI 将令牌兑换为新的 API 密钥,自动保存,并返回新的 keyId。重新关联令牌为一次性使用,10 分钟后过期。
secret env 命令直接写入文件——不会将值输出到标准输出。.env 文件,提供额外保护层。403 错误拒绝覆盖,表示其他 API 密钥已设置该值。凭据所有者可从控制台进行管理。已收录 1 个 Skill