跳到正文
Indiana
控制台
文档
章节目录 / Indiana CLI

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。

terminal.shShell
pnpm task cli:buildpnpm --silent grow --helppnpm --silent grow capabilities --only-supported --jsonpnpm --silent grow config init --server https://groove-grow.vercel.apppnpm --silent grow profiles add work --server https://groove-grow.vercel.apppnpm --silent grow profiles use workpnpm --silent grow context use --org <org-uuid> --app <app-uuid> --env sandboxpnpm --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 服务账号。

terminal.shShell
pnpm --silent grow login --profile workpnpm --silent grow auth status --profile work --jsonpnpm --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 可逐设备查看和撤销;撤销一台设备不影响其他设备。

terminal.shShell
pnpm --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。

terminal.shShell
pnpm --silent grow funnels validate --file funnel.json --mode publish --jsonpnpm --silent grow paywalls validate --file paywall.json --mode draft --jsonpnpm --silent grow funnels diff --against before.json --file after.json --jsonpnpm --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未登录、授权拒绝、刷新或会话失效
4origin 绑定或重定向约束失败
5配置冲突或写锁占用
6服务、网络或响应协议错误
7运行时、管理 API 或授权未就绪

退出码

  • 0

    含义
    命令成功
  • 2

    含义
    参数、配置、文件或文档非法
  • 3

    含义
    未登录、授权拒绝、刷新或会话失效
  • 4

    含义
    origin 绑定或重定向约束失败
  • 5

    含义
    配置冲突或写锁占用
  • 6

    含义
    服务、网络或响应协议错误
  • 7

    含义
    运行时、管理 API 或授权未就绪
  • doctor 返回 ready=false:先根据输出检查服务 origin 和 OAuth 配置,服务就绪后再登录。
  • 授权过期、被撤销或成员资格改变:查看 auth status,按当前权限重新登录并审批。
  • 切换服务器:建立对应 origin 的独立 profile;不能把已保存的令牌带到另一个服务。