用途:指导在本仓库中使用 contract-cli 的登录与身份切换能力,覆盖首次初始化、user OAuth 登录、bot 凭据录入、查看或清理身份状态、切换默认业务身份,以及排查 config.json 与 secrets.json 的持久化问题。
配置初始化:首次使用前执行 contract-cli config add --env dev。当前实现只内置 dev 环境,默认 profile 名为 contract-group;该命令会发现 well-known 元数据、保存 MCP server/resource/OAuth server 配置,并将 default_identity 初始化为 user。
身份模型:同一 profile 下维护 user 与 bot 两种身份。user 通过 contract-cli auth login --as user 走 OAuth 授权码 + PKCE 登录,会注册 client_id、启动本地回调服务(地址取自 profile 的 redirect_url),默认自动打开浏览器,用 --no-open-browser 仅打印链接,成功后写入 identities.user.token。bot 通过 contract-cli auth login --as bot --app-id "<app_id>" --app-secret "<app_secret>" 录入凭据,也可用环境变量 CONTRACT_CLI_BOT_APP_ID/CONTRACT_CLI_BOT_APP_SECRET;凭据优先级为命令行参数、环境变量、本地已保存凭据。bot 登录先保存凭据再调用 tenant_access_token/internal 兑换 token,成功后写入 identities.bot.token 并切换 default_identity=bot;兑换失败会保留新凭据但不切换身份。
状态、退出与切换:auth status 不传 --as 时默认查看 user,user 显示 authorized 或 unauthorized,bot 显示 authorized、expired、configured 或 unconfigured,并展示 Token Endpoint、Token Protocol 与过期时间。auth logout --as user 只清 user.token,--as bot 只清 bot.token 并保留 app_id/app_secret;不传 --as 默认处理 user。auth use --as user|bot 只修改 default_identity,不重新登录、不校验 token。
本地文件:默认 ~/.contract-cli/config.json 与 ~/.contract-cli/secrets.json,可用 CONTRACT_CLI_CONFIG_DIR 更改;兼容 DEMOCLI_CONFIG_DIR 与 ~/.democli。config.json 保存 profile、identity 元数据和 token,secrets.json 只保存 bot 的 app_secret,两种 token 分离存储。
限制与安全:禁止明文输出 app_secret、access_token、refresh_token;bot 登出并非删除凭据。故障排查包括 user identity is not configured 需先初始化、浏览器未打开时用 --no-open-browser、回调超时检查 redirect_url 端口或调大 --timeout、凭据不完整需补齐、bot_token_endpoint 缺失需重跑 config add、expired 需重新登录。