Files
chendelian 4fe1351e1e
All checks were successful
技能自动化发布 / release (push) Successful in 9s
test(compat): add v1 compatibility suite; docs: add V1_COMPATIBILITY.md
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-11 18:52:22 +08:00

11 KiB
Raw Permalink Blame History

account-manager CLI 速查

{baseDir} 替换为技能根目录。所有命令通过 python {baseDir}/scripts/main.py 调用(工作目录可为技能根或 scripts/,与命令中的路径一致即可)。下文示例简写为 python main.py,表示在 {baseDir}/scripts/ 下执行。

说明:内置 _USAGE(无参数启动 CLI已列出加密三类子命令更完整的 JSON 约定仍以本文与源码为准。

stdout / JSON 约定(集成必读)

  • 若干命令输出 单层 JSON 对象(例如 account pick-webaccount getaccount get-credential 成功时),没有统一的 {"success":true} 外层包裹。
  • account add-webaccount add-secret(等多数字命令)成功时为 {"success": true, "data": {...}}
  • credential pick / credential resolve 成功时为 {"success": true, ...字段}
  • platform list / platform get 成功时为 {"success": true, "data": ...}
  • 失败行多为 {"success": false, "error": {"code": "...", "message": "..."}}(个别老旧路径仍可能打印 ERROR: 前缀文本,首行解析逻辑见 INTEGRATION.md)。

子命令速查(按业务流程)

A. 平台管理

CLI 说明
platform list [--domain logistics|llm|content] 列出平台注册(--domain 仅接受这三种;dev/sim 等平台请省略 --domain 查全量或在 JSON 里筛选)
platform get <platform> 获取数据库中的平台详情

B. 加密初始化v2

CLI 说明
account init-master-key 生成 master.key写入 {数据根}/{用户}/account-manager/master.key
account init-master-key --print 生成密钥并 单行 JSON 打印完整 key备份用不落盘
account init-master-key --from-env ACCOUNT_MANAGER_MASTER_KEY 读取合法 Fernet key 并写入文件
account init-master-key --rotate 覆盖现有 master.keystderr 会先打印警告;应先有 export 备份)

C. 账号管理v2 扩展)

CLI 说明
account add-web --platform <p> [--login-id <id>] [--login-id-type <type>] [...] 创建网页/RPA 账号;可选 --auth-strategy / --session-persistent 0|1 / --device-fingerprint <fp>
account add-secret --platform <p> --credential-type <t> --secret-storage env|windows_credential|none|local_encrypted 创建凭据;local_encrypted 必须 --secret-stdin
account get <id> [--with-credentials] 输出账号 JSON若带 --with-credentials 则附加关联凭据摘要)
account get-credential <account_id> [--reveal --lease-token <token>] v2按账号 id 取活跃凭据;--reveal 必须配合合法 lease
account list [--platform <p>] [--environment <env>] [--tenant-id <t>] [--role <role>] [--limit N] 输出账号 JSON 数组
account pick-web --platform <p> [--environment <env>] [--tenant-id <t>] [--role <role>] [--lease] [--ttl-sec 900] [--holder <h>] [--purpose <purpose>] 挑选网页自动化候选;返回 JSON 含 auth_strategy / session_persistent / device_fingerprint
account mark-session <id> --session-status <status> 标记会话状态
account mark-error <id> --code <code> --message <msg> 标记错误
account mark-used <id> 标记已使用
account open <id> 打开持久化浏览器 profile仅查看

D. 加密备份与迁移v2

CLI 说明
account export-credentials --plaintext 将所有凭据行导出为 JSON 数组 打到 stdoutstderr 有人类可读警告);必须显式 --plaintext
account import-credentials [--replace-all] 从 stdin 读 JSON 数组,仅对带 plaintext 的行调用加密插入;结果摘要打到 stderr

E. 凭据 / 租约 / 浏览器v1 兼容入口保留)

以下命令仍推荐使用,行为与 v1 时期一致,适合「只拿 API Key」或脚本兼容

CLI 说明
credential pick --platform <p> [--type <type>] [--environment <env>] [--role <role>] [--reveal] v1 兼容:挑选凭据
credential resolve --id <credential_id> [--reveal] v1 兼容:按凭据 id 解析
lease release <lease_token> 释放租约
lease list [--active] 列出租约
lease cleanup 清理过期租约
account open <id> / open <id> 浏览器查看

兼容入口(旧版别名)

CLI 等价 / 说明
get <id> account get <id>
list-json <platform|all> [--limit N] JSON 数组输出
pick-web <platform> account pick-web --platform <platform>(无 lease 参数)
list [platform|all] 人类可读列表
add <platform> <phone> 映射到 account add-weblogin_id_type=phone),不传 v2 扩展参数
delete id|platform <...> 删除账号

account add-web扩参示例

# 扫码登录的抖音账号
python main.py account add-web \
  --platform douyin \
  --label "douyin-creator-1" \
  --auth-strategy qr_code_manual \
  --session-persistent 1
  • --auth-strategypassword_auto / password_with_captcha / password_plus_2fa / qr_code_manual / per_session_manual / device_bound / client_certificate / api_token / sso_redirect;省略时按平台默认(seed_platforms + platforms.default_auth_strategy,回填规则见 db/platform_defaults.py);非法值返回 ERR_AUTH_STRATEGY_NOT_SUPPORTED
  • --session-persistent01;省略时由代码推导:qr_code_manualpassword_plus_2fadevice_boundsso_redirect1per_session_manualclient_certificate0;其余默认 1
  • --device-fingerprint仅当 --auth-strategy=device_bound 时允许设置;否则 ERR_DEVICE_FINGERPRINT_NOT_APPLICABLE
  • 成功 stdout{"success": true, "data": { ... }}data 内含 idplatform_keyprofile_dirauth_strategysession_persistentdevice_fingerprint 等。

account add-secretlocal_encrypted 示例)

echo "my-icbc-password" | python main.py account add-secret \
  --platform icbc_sim \
  --credential-type password \
  --secret-storage local_encrypted \
  --secret-stdin \
  --label "工行仿真主账号"
  • local_encrypted 必须 --secret-stdin(否则 ERR_LOCAL_ENCRYPTED_REQUIRES_STDIN)。
  • 允许的 credential_typepasswordapi_keyapi_tokenbearer_tokenrefresh_tokenoauth_clientbrowser_profile / note 会被 ERR_LOCAL_ENCRYPTED_TYPE_NOT_ALLOWED 拒绝)。
  • stdin 为空:ERR_LOCAL_ENCRYPTED_EMPTY_STDIN
  • master key 未就绪:ERR_MASTER_KEY_MISSING
  • 成功:{"success": true, "data": {"credential_id", "account_id", "platform_key", "credential_type", "secret_storage", "secret_mask"}}

account get-credential示例

# 不 reveal仅返回 metadata + mask
python main.py account get-credential 42

# reveal必须带合法 lease-token通常来自 pick-web --lease
LEASE=$(python main.py account pick-web --platform icbc_sim --lease --holder my-rpa | jq -r .lease_token)
python main.py account get-credential 42 --reveal --lease-token "$LEASE"
  • --reveal:单行 JSONsuccess/account_id/credential_id/secret_storage/secret_mask 等。
  • --revealsecret_storage=local_encrypted 等在 lease 校验通过后追加 plaintext;若底层存储为 none,返回 plaintext: null 及说明字段(并非抛错)。
  • 常见错误:ERR_LEASE_INVALIDERR_CREDENTIAL_MISSINGERR_MASTER_KEY_MISSINGERR_CREDENTIAL_DECRYPT_FAILED(见 ERRORS.md)。

account export-credentials / import-credentials示例

# 备份stdout 为 JSON 数组,含解密后的 plaintext务必妥善销毁
python main.py account export-credentials --plaintext > backup-2026-05-11.json

# 在新机器恢复(需先 init-master-key使 master key 可用)
python main.py account import-credentials --replace-all < backup-2026-05-11.json
  • 未带 --plaintextERR_EXPORT_REQUIRES_PLAINTEXT_FLAG(单行 JSON
  • import-credentials 成功时 stdout 通常为空,进度与计数在 stderr

account init-master-key示例

# 首次初始化(写入 master.key
python main.py account init-master-key

# 打印 key 备份到密码管理器(不落盘)
python main.py account init-master-key --print

# 从环境变量恢复写入文件
ACCOUNT_MANAGER_MASTER_KEY="<base64-44-chars>" python main.py account init-master-key --from-env
  • 文件已存在且未 --rotateERR_MASTER_KEY_EXISTSJSON
  • --from-env 字符串非法:ERR_MASTER_KEY_INVALID

account pick-web字段

成功时为 单行 JSON 对象(非 _ok_json 包裹)。核心字段:

  • id, platform_key, account_label, login_id, profile_dir, url, tenant_id, environment, role, provider_code, session_status
  • v2auth_strategy, session_persistent, device_fingerprint
  • --leaselease_token, lease_expires_atISO8601 本地时间字符串,由内部 Unix 秒字段转换而来)

9 种 auth_strategy 简表(参考)

策略键 适用场景 是否要 plaintext典型 是否要人介入
password_auto 标准账密表单
password_with_captcha 带图形验证码 是(填码阶段)
password_plus_2fa 短信/邮件/OTP 2FA OTP 阶段)
qr_code_manual 扫码登录 是(扫码阶段)
per_session_manual 银行/政务等每次手动
device_bound 绑机器 / U-Key 等 可选(有密码则自动填) 视情况
client_certificate 客户端证书 + PIN 不可自动化rpa_helpers 抛错)
api_token 无浏览器登录
sso_redirect OAuth / SSO 跳转 SSO 页阶段)

业务 skill 同进程调用详见 RPA_HELPERS.md


通用说明

  • 平台参数:可为 scripts/util/platforms.py 中的英文键、display_name、任一 alias不区分大小写。详见 PLATFORMS.md
  • 数据与路径库文件、profile、master.key 布局见 RUNTIME.md
  • 机器可读集成:见 INTEGRATION.md
  • 错误码:见 ERRORS.md

内置 _USAGE(阶段 F

无参数运行 CLI例如 python scripts/main.py / python -m cli.appcwd=scripts/)打印的内置 _USAGE 已与 main() 路由对齐,包含 account init-master-key / account export-credentials / account import-credentials。面向外部仓库的契约摘要见 V1_COMPATIBILITY.md