# shb-cli auth login

## 常用命令

```bash
# 交互终端（CLI 提示选择环境）
shb-cli auth login

# agent / 非交互执行，显式传 --env
shb-cli auth login --env dingtalk
shb-cli auth login --env lark
shb-cli auth login --env standalone
shb-cli auth login --env wecom

# 不自动打开浏览器（agent 场景推荐）
shb-cli auth login --env dingtalk --no-browser

# 自定义等待超时（默认 3 分钟）
shb-cli auth login --env dingtalk --timeout 5m
```

## 响应

授权链接输出在 **stderr**：
```
Open the authorization page below in your browser and approve access for shb-cli.
https://shb3144.eapps.dingtalkcloud.com/login/auth/authorize?requestId=xxx
```

登录成功后 **stdout** 输出 JSON：
```json
{
  "profile": "default",
  "mode": "oauth2",
  "environment": "dingtalk",
  "user_id": "u123",
  "tenant_id": "t456",
  "tenant_name": "我的企业",
  "token_masked": "tok***abc",
  "language": "zh",
  "last_login_at": "2026-04-28T10:00:00Z"
}
```

## Agent 执行步骤

1. `shb-cli version --json` 确认构建环境
2. `shb-cli auth login --env <env> --no-browser`，读取 stderr 中的授权 URL 发给用户
3. 等待用户在浏览器完成授权（CLI 自动轮询）
4. 命令退出后执行 `shb-cli config`，确认 `authenticated: true` 且 `valid: true`

## 环境选择

- agent 执行时**必须**传 `--env`，否则 CLI 会交互 prompt（会阻塞）
- `build_env=test` 时，无论传哪种 `--env`，域名统一走 `pubapp.shb.ltd`

## 调试/兼容路径（隐藏 flag，普通用户不使用）

```bash
shb-cli auth login --authorize-url '<url>' --manual
# --manual 模式不再起本地回调服务,授权完成后把浏览器跳转的 callback URL(或 code)
# 粘贴回等待中的 login 命令即可,不存在独立的 exchange-code 子命令。
```

## 注意

- 不要要求普通用户提供 `--org-code`、`--domain`、`--authorize-url`
- 用户已持有 token 时，优先走 `auth token-import`
