Indiana CLI
在终端配置作用域、完成浏览器授权、查询 App,并校验 Funnel / Paywall 文档。
CLI 0.1.0更新于
当前能力
Indiana CLI 使用控制台成员身份,通过浏览器审批取得指定 App 和环境的管理授权。当前版本为 0.1.0,要求 Node.js >=22。
已实现命令与边界| 命令 | 用途 |
|---|
config / profiles / context | 本地服务地址、profile 与 Org/App/环境选择 |
doctor / capabilities | 服务就绪检查与命令覆盖清单 |
login / auth status / logout | 浏览器登录、本设备授权状态与撤销 |
projects list | 读取已授权 App 的名称与环境,权限为 project.read |
funnels validate / funnels diff | 本地 Funnel 文档校验与比较 |
paywalls validate / paywalls diff | 本地 Paywall 文档校验与比较 |
已实现命令与边界
config / profiles / context
- 用途
- 本地服务地址、profile 与 Org/App/环境选择
doctor / capabilities
- 用途
- 服务就绪检查与命令覆盖清单
login / auth status / logout
- 用途
- 浏览器登录、本设备授权状态与撤销
projects list
- 用途
- 读取已授权 App 的名称与环境,权限为 project.read
funnels validate / funnels diff
- 用途
- 本地 Funnel 文档校验与比较
paywalls validate / paywalls diff
- 用途
- 本地 Paywall 文档校验与比较
客户、商品、权益、优惠券、财务、Funnel/Paywall 的远端读写及发布命令尚未接入。capabilities 是当前程序的能力清单,不证明账号权限。
构建与配置
CLI 暂为私有工作区包,尚未发布 npm。从 Indiana 仓库根目录构建并运行;下面所有命令均使用仓库入口 pnpm --silent grow。
将占位 UUID 替换成你已有组织和 App 的真实 ID。登录前必须明确选择 Org、App 和环境;context use 只保存选择,服务端仍会检查归属、当前成员资格和审批范围。
config init 在当前目录创建 grow.config.json,已有文件不会被覆盖。作用域优先级为显式参数、项目配置、所选 profile;context use 优先写入已有项目配置,否则写入所选 profile。配置可提交,但不要写令牌或 SDK Key。
1pnpm task cli:build2pnpm --silent grow --help3pnpm --silent grow capabilities --only-supported --json4pnpm --silent grow config init --server https://groove-grow.vercel.app5pnpm --silent grow profiles add work --server https://groove-grow.vercel.app6pnpm --silent grow profiles use work7pnpm --silent grow context use --org <org-uuid> --app <app-uuid> --env sandbox8pnpm --silent grow doctor --json
登录与 App 授权
- CLI 打开系统浏览器,以现有控制台账号登录并确认 OAuth 身份授权。
- 浏览器再显示本设备请求的 App、环境和 project.read。核对设备说明与终端配对码后确认。
- CLI 等待审批通过,随后保存凭据。待审批请求有效期为 10 分钟,管理授权有效期为 30 天;刷新令牌不延长授权期限。
登录采用 Authorization Code + PKCE S256。回调固定为 http://127.0.0.1:43187/callback,只供本机 CLI 接收 OAuth 回调;管理服务和审批页面仍使用线上地址。端口占用时登录失败,不会更换回调或放宽匹配。
CLI 使用用户 OAuth 凭据,不接收浏览器 Cookie、client secret 或 SDK Key。每次远端查询都重新检查账号、Auth 会话、客户端、授权及成员资格。当前不支持无浏览器的新登录或 CI 服务账号。
1pnpm --silent grow login --profile work2pnpm --silent grow auth status --profile work --json3pnpm --silent grow projects list --profile work --json
凭据与设备撤销
凭据默认写入系统凭据库,并绑定管理 origin、profile、issuer、客户端、用户和会话。系统凭据库不可用时明确失败,不会自动回退到文件。仅 POSIX 系统可显式选择 --credential-store file,目录权限为 0700、文件权限为 0600;Windows 不支持此文件模式。
logout 先撤销服务端的本设备授权,再删除本地凭据。网络失败时保留凭据并报告撤销未完成。logout --local 仅清理本地,服务端授权仍可能有效。浏览器打开 https://groove-grow.vercel.app/cli/sessions 可逐设备查看和撤销;撤销一台设备不影响其他设备。
1pnpm --silent grow logout --profile work
校验与比较设计文档
使用当前 schemaVersion 1 的 FunnelDocument / PaywallDocument,严格校验 UTF-8 和 JSON,最大 1,000,000 字节。draft 允许未完成草稿,publish 检查发布结构;validate 的 --file - 可从 stdin 读取。旧格式被明确拒绝。
校验结果标注 validation=local 和 serverChecks=not_run。结构通过不代表可以发布;租户权限、固定引用、提供商和当前状态仍需服务端校验。diff 输出 JSON Pointer、改动种类和稳定 SHA-256,不输出文档值;最多显示 100 项,并提供 total / truncated。
1pnpm --silent grow funnels validate --file funnel.json --mode publish --json2pnpm --silent grow paywalls validate --file paywall.json --mode draft --json3pnpm --silent grow funnels diff --against before.json --file after.json --json4pnpm --silent grow paywalls diff --against before.json --file after.json --json
脚本输出与故障处理
--json 的 stdout 只有一个 JSON 结果,登录进度写 stderr。错误包含 error.code、message 和 retryable;输出不包含 access/refresh token、PKCE verifier 或 OAuth code。--non-interactive 不会启动新的浏览器登录;--timeout 指定每次请求期限,单位毫秒,范围 1–60000,默认 10000。
退出码| 值 | 含义 |
|---|
| 0 | 命令成功 |
| 2 | 参数、配置、文件或文档非法 |
| 3 | 未登录、授权拒绝、刷新或会话失效 |
| 4 | origin 绑定或重定向约束失败 |
| 5 | 配置冲突或写锁占用 |
| 6 | 服务、网络或响应协议错误 |
| 7 | 运行时、管理 API 或授权未就绪 |
退出码
0
- 含义
- 命令成功
2
- 含义
- 参数、配置、文件或文档非法
3
- 含义
- 未登录、授权拒绝、刷新或会话失效
4
- 含义
- origin 绑定或重定向约束失败
5
- 含义
- 配置冲突或写锁占用
6
- 含义
- 服务、网络或响应协议错误
7
- 含义
- 运行时、管理 API 或授权未就绪
- doctor 返回 ready=false:先根据输出检查服务 origin 和 OAuth 配置,服务就绪后再登录。
- 授权过期、被撤销或成员资格改变:查看 auth status,按当前权限重新登录并审批。
- 切换服务器:建立对应 origin 的独立 profile;不能把已保存的令牌带到另一个服务。