SDK 参考 原生端与工具 Indiana CLI 在终端配置作用域、完成浏览器授权、查询 App,并校验 Funnel / Paywall 文档。
CLI 0.3.5 更新于 2026年10月16日
当前能力 Indiana CLI 使用控制台成员身份,通过浏览器审批取得指定 App 和环境的管理授权。当前公开下载版本为 0.3.5,要求 Node.js >=22。
已实现命令与边界 命令 用途 config / profiles / context本地服务地址、profile 与 Org/App/环境选择 doctor / capabilities服务就绪检查与命令覆盖清单 update --check / update检查公开新版本并升级当前 CLI login / whoami / auth status / logout浏览器登录、本设备授权状态与撤销 projects list读取已授权 App 的名称与环境,权限为 project.read funnels validate / funnels diff本地 Funnel 文档校验与比较 offerings validate / offerings diff本地 Offering 层级、发布结构与比较 coupons / rewards / referral-programs已授权的目录、代码和生命周期管理;不包含订阅优惠执行 operations list / operations describe有限操作目录、所需权限与开放状态 customers / features / productsCustomer 与目录的读取和当前操作 offerings apply / paywalls apply / funnels apply复用控制台的远端编辑、发布与修订检查 paywalls validate / paywalls diff本地 Paywall 文档校验与比较
已实现命令与边界
config / profiles / context
用途 本地服务地址、profile 与 Org/App/环境选择 doctor / capabilities
用途 服务就绪检查与命令覆盖清单 update --check / update
用途 检查公开新版本并升级当前 CLI login / whoami / auth status / logout
用途 浏览器登录、本设备授权状态与撤销 projects list
用途 读取已授权 App 的名称与环境,权限为 project.read funnels validate / funnels diff
用途 本地 Funnel 文档校验与比较 offerings validate / offerings diff
用途 本地 Offering 层级、发布结构与比较 coupons / rewards / referral-programs
用途 已授权的目录、代码和生命周期管理;不包含订阅优惠执行 operations list / operations describe
用途 有限操作目录、所需权限与开放状态 customers / features / products
用途 Customer 与目录的读取和当前操作 offerings apply / paywalls apply / funnels apply
用途 复用控制台的远端编辑、发布与修订检查 paywalls validate / paywalls diff
用途 本地 Paywall 文档校验与比较 运行 operations list --available 查看当前服务开放的操作,用 operations describe 查看权限与输入。未开放操作返回 CAPABILITY_UNAVAILABLE(退出码 7);操作可用时仍需账号授权。
安装与配置 安装包由 Indiana 官网公开提供。macOS/Linux 推荐 curl 安装:依赖已包含在下载中,安装过程不调用 npm、不需要 npm 账号或 sudo。请先安装 Node.js 22 或更高版本;当前安装包不包含 Node.js 运行环境。
curl 支持 macOS arm64/x64,以及 Linux arm64/x64 的 glibc/musl 环境。脚本自动选择系统与架构并校验 SHA-256,默认安装到 ~/.local/bin/indiana,版本文件放在 ~/.local/share/indiana/releases;请按上例将 ~/.local/bin 加入 PATH。可用绝对路径 INDIANA_BIN_DIR、INDIANA_INSTALL_ROOT 修改位置。重复执行 curl 命令即可升级,脚本不会覆盖非本安装器管理的已有命令。安装包及校验记录见 https://tinker.cash/downloads/cli/portable.json。
也可以使用 npm,Windows 请使用这一方式。以下命令从官网下载 CLI,再从 npm 公共仓库安装依赖;不需要代码仓库权限或 npm 账号。
0.3.3 起支持更新检测和 indiana update。交互终端中的成功命令每天最多查询一次官网版本,有新版时提示升级;检查最长 1.5 秒,离线不影响命令结果。JSON、CI、非交互、help 和 version 不触发提示。INDIANA_NO_UPDATE_CHECK=1 可关闭自动检测,update --check --json 可主动检查。升级校验下载文件和安装后的版本,保留 curl 自定义目录或 npm 全局安装位置,以及配置和登录凭据。更新源固定为官网,不受 --server 影响。
已安装 0.3.2 或更早版本的用户,请先执行一次本页 curl 或 npm 安装命令升级到 0.3.3;之后即可收到新版本提示并直接运行 indiana update。源码或无法识别的安装方式会给出安装指引。
curl 默认安装的卸载:删除 ~/.local/bin/indiana 和 ~/.local/share/indiana;配置和登录凭据仍会保留。npm 安装的卸载:npm uninstall -g @indiana/cli;也可重新执行本页当前版本安装命令升级。npm 包元数据见 https://tinker.cash/downloads/cli/latest.json。公开安装不扩大账号权限,管理操作仍需登录并审批授权。
设置目标服务地址和已有 Organization/App 的 ID,运行 doctor 检查连接与登录配置。登录时选择所需的 Account、Organization、App 或 Environment 授权;context use 保存当前选择,访问范围由账号与审批结果决定。
config init 创建 indiana.config.json,不覆盖已有文件。作用域优先级为显式参数、项目配置、所选 profile;context use 更新已有项目配置,否则更新 profile。配置可提交,但不要写令牌或 SDK Key。用 INDIANA_CLI_CONFIG_DIR 更改用户配置目录。
1 curl -fsSL https://tinker.cash/install.sh | sh 2 export PATH="$HOME/.local/bin:$PATH" 3 indiana --version 4 indiana --help 5 indiana capabilities --only-supported --json 6 indiana config init --server https://tinker.cash7 indiana profiles add work --server https://tinker.cash8 indiana profiles use work9 indiana context use --org <org-uuid> --app <app-uuid> --env sandbox10 indiana doctor --json 1 npm install -g https://tinker.cash/downloads/cli/0.3.5/indiana-cli-0.3.5.tgz1 indiana update --check 2 indiana update3 indiana --version 登录与 App 授权 CLI 打开系统浏览器,以现有控制台账号登录并确认 OAuth 身份授权。 浏览器再显示本设备请求的 App、环境和权限。核对设备说明与请求范围后确认。 CLI 等待审批通过,随后保存凭据。待审批请求有效期为 10 分钟,管理授权有效期为 30 天;刷新令牌不延长授权期限。 默认登录只请求 project.read。需要资源读取时,在登录命令中显式加入 --permissions project.read,coupons.read,rewards.read;写入另需对应的 customers.write、features.write、plans.write、platform.write 等资源权限。只请求本次工作所需权限,现有授权不会自动扩大。
登录需要浏览器,并临时监听本机 http://127.0.0.1:43187/callback。端口被占用时先释放端口再重试。
CLI 使用控制台账号登录,自动刷新已保存的登录凭据。账号、成员资格或设备授权失效后需重新登录。不支持用浏览器 Cookie、SDK Key 或 CI 服务账号登录。
1 indiana login --profile work2 indiana whoami --profile work --json 3 indiana auth status --profile work --json 4 indiana projects list --profile work --json 凭据与设备撤销 凭据默认写入系统凭据库,并绑定管理 origin、profile、issuer、客户端、用户和会话。系统凭据库不可用时明确失败,不会自动回退到文件。仅 POSIX 系统可显式选择 --credential-store file,目录权限为 0700、文件权限为 0600;Windows 不支持此文件模式。
whoami 返回服务端核验过的身份与授权范围,不显示 token。没有本地凭据时 logout 直接成功;有凭据时先确认服务端已撤销本设备的准确授权,再删除本地凭据。网络失败时保留凭据并报告撤销未完成。logout --local 仅清理本地,服务端授权仍可能有效。在所选管理服务的 /cli/sessions 页面可逐设备查看和撤销;撤销一台设备不影响其他设备。
1 indiana logout --profile work调用业务操作 operations describe 的 requiredPermissions 列出完整权限依赖。Customer 创建还需要 plans.read、features.read;Feature 修改需要 plans.write、balances.read;Product 写入还需要 features.read、customers.read、balances.read、rewards.read。缺少依赖时在写入前明确拒绝,避免遗漏默认 Product 或既有引用。
customer-create.json 内容为 { "input": { "externalUserId": "user-42", "name": "Alex" } };更新文件为 { "requestId": "<新 UUID>", "patch": { "name": "Alex Updated" } }。App/环境从已审批选择解析,冲突值会被拒绝。设计操作继续使用控制台当前 DTO,并保留 revision、requestId 和发布校验。
查询参数使用可重复的 --query key=value,例如 features list --query id=<feature-uuid>。--file - 从 stdin 读取。call <operationId> --input envelope.json 接收 {params,query,body},只能选择目录内操作,不能指定任意 URL 或 RPC。--input 不与其他输入参数混用。
需要扩大权限时先 logout,再按本次操作所需资源重新 login --permissions;已有设备授权不会自动扩大。--out <新文件> 以 0600 权限保存 JSON,不覆盖已有文件;失败时删除本次未完成输出。写入失败不会自动重试。
1 indiana operations list --available --json 2 indiana operations describe console.customers.post --json 3 indiana customers list --json 4 indiana customers create --file customer-create.json --json 5 indiana customers get <customer-uuid> --json 6 indiana customers update <customer-uuid> --file customer-update.json --json 7 indiana features list --json 8 indiana products list --timeout 30000 --json 9 indiana offerings list --json 10 indiana paywalls apply --file paywall-operation.json --json 11 indiana funnels apply --file funnel-operation.json --json 查询配置、分析与财务明细 1 indiana growth features list --query limit=25 --json 2 indiana growth features get checkout_enabled --json 3 indiana growth features revisions list --query parentId=checkout_enabled --json 4 indiana growth experiments list --json 5 indiana growth metrics fact-metrics list --json 6 indiana growth insights reports get <report-uuid> --json 7 indiana snapshots list --query parentId=<experiment-uuid> --json 8 indiana snapshots get <snapshot-uuid> --json 9 indiana snapshots status <snapshot-uuid> --json 10 indiana snapshots run --file snapshot.json --json 11 indiana snapshots cancel <snapshot-uuid> --json 12 indiana operations describe console.growth.read.get --query resource=reports --json 13 indiana customers invoices get <customer-uuid> <invoice-uuid> --json 14 indiana customers invoices refunds get <customer-uuid> <invoice-uuid> --json 15 indiana customers credit-statement get <customer-uuid> --query from=2026-10-01T00:00:00Z --query to=2026-10-02T00:00:00Z --json 16 indiana customers entities get <customer-uuid> --json 17 indiana customers seats get <customer-uuid> --json 18 indiana overview list --query from=2026-10-01 --query to=2026-10-02 --json 19 indiana events list --query name=payment.failed --json Snapshot 使用独立的 snapshots 命令组:list/get 查询记录,status <id> 查询一次计算及其查询任务的进度,run --file snapshot.json 发起计算,cancel <id> 取消计算。snapshot.json 包含 { "experimentId": "<experiment-uuid>" },可按原接口添加 phase、endDate 或 dimension。status 可用 --query sql=1 显示授权范围内的查询详情;所有操作保留原有 App、环境和权限校验。
GrowthBook 配置读取需要 App 级 platform.read;Snapshot、Dashboard、Report、Saved Query 和 Safe Rollout 结果还需要所选环境的 platform.read 与 analytics.read。用 operations describe --query resource=... 查询具体要求。私有对象仍受其可见范围限制。
GrowthBook 查询返回 {resource,rows,ids,nextCursor},默认 25 条、最多 100 条。续页与筛选参数见下表。
筛选与分页 查询 参数 GrowthBook 将非空 nextCursor 原样传入 --query after=...。ids[n] 对应 rows[n],可原样用于 get,包括复合标识。 parentId 筛选 Feature 修订/历史/引用、Experiment Snapshot/Dashboard/Report 或 Safe Rollout Snapshot。 Invoice 使用 after 续页。 积分对账单 续页时一起传回 snapshotAt、afterAt、afterId、afterPosition。 Overview / events 日期使用 UTC,范围最多 90 天;事件续页同时传 before 和 after。
筛选与分页
GrowthBook
参数 将非空 nextCursor 原样传入 --query after=...。ids[n] 对应 rows[n],可原样用于 get,包括复合标识。 parentId
参数 筛选 Feature 修订/历史/引用、Experiment Snapshot/Dashboard/Report 或 Safe Rollout Snapshot。 Invoice
参数 使用 after 续页。 积分对账单
参数 续页时一起传回 snapshotAt、afterAt、afterId、afterPosition。 Overview / events
参数 日期使用 UTC,范围最多 90 天;事件续页同时传 before 和 after。 校验与比较设计文档 校验当前 Funnel 可编辑文档、Paywall 文档和 Offering(lookupKey / displayName / items / metadata),严格校验 UTF-8 和 JSON,最大 1,000,000 字节。draft 允许未完成草稿,publish 检查发布结构;validate 的 --file - 可从 stdin 读取。旧格式被明确拒绝。
校验结果标注 validation=local 和 serverChecks=not_run。结构通过不代表可以发布;租户权限、固定引用、提供商和当前状态仍需服务端校验。diff 输出 JSON Pointer、改动种类和稳定 SHA-256,不输出文档值;最多显示 100 项,并提供 total / truncated。
1 indiana funnels validate --file funnel.json --mode publish --json 2 indiana paywalls validate --file paywall.json --mode draft --json 3 indiana offerings validate --file offering.json --mode publish --json 4 indiana funnels diff --against before.json --file after.json --json 5 indiana paywalls diff --against before.json --file after.json --json 通过代码编辑模板 以下 Paywall、Popup 和 Page 源码编辑命令尚未包含在公开下载中,需要支持这些命令的 CLI 与服务版本。
使用新的输出目录。screen.json 保存结构、文案和动作;HTML/CSS 在 html/<node-id>/ 下按语言编辑。indiana.source.json 保留目标、App/环境及拉取基线。可以使用本地编辑器或 AI 工具修改,然后校验、审阅并提交草稿;也可导入网页代码编辑器审阅。
pull 使用 platform.read,push 使用 platform.write 并保留原有作者角色检查。check/diff 离线运行;push 保留原始修订检查,冲突不覆盖本地文件,模板库目标另存私有模板。命令不发布、不监听文件,也不启动本地预览服务器。
1 indiana code pull paywall/<uuid> --out ./template2 indiana code pull funnel/<uuid>/screen/<screen-id> --out ./popup3 indiana code pull template/<uuid> --out ./private-template4 indiana code check ./template --json 5 indiana code diff ./template --json 6 indiana code push ./template --json 脚本输出与故障处理 --json 向 stdout 输出一个 JSON 结果,登录进度写入 stderr。按 error.code 与 message 处理错误,记录可用的 status/requestId。retryable、recovery 和 retryAfterSeconds 等扩展字段尚未包含在公开下载中。--non-interactive 不发起新的浏览器登录;--timeout 为每次请求期限,1–60000 毫秒,默认 10000。
管理 API 专用错误码 code 含义与处理 INVALID_SERVER_RESPONSE 服务端响应不符合当前契约;保留诊断信息,写操作先恢复原结果。 RESPONSE_TOO_LARGE 服务端结果超出管理响应预算;缩小查询或使用分页。 AMBIGUOUS_AUTHENTICATION 请求混用了 Bearer 与浏览器登录 Cookie;使用该入口要求的一种身份。 BROWSER_REQUIRED 该审批操作需要浏览器成员会话。 INVALID_REDIRECT_URI OAuth 回调地址未被允许;核对客户端注册。 AUTHORIZATION_UNAVAILABLE 授权请求当前不可用;核对请求、审批状态和有效期。 UNREGISTERED_CLIENT OAuth 客户端未注册或不可用;由管理员检查配置。 MANAGEMENT_OPERATION_FAILED 管理操作失败;保留 requestId,写操作先读取原结果。
连接失败时运行 doctor --json,检查错误的 host、stage 和排查建议(扩展诊断字段需配套 CLI 版本)。TIMEOUT/NETWORK_ERROR 表示请求结果可能未知:写入先恢复原操作,登录失败先检查 auth status。CLI 不自动重发写请求。通用错误与 recovery 规则见「请求与错误」。
如果网络要求代理,检查 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY。在 Node.js 22.21+(22.x)或 24+ 上,NODE_USE_ENV_PROXY=1 indiana doctor --json 可让本次进程使用环境变量代理;它不会创建代理或设置代理地址。HTTP 407 表示代理需要认证,无法明确识别的代理隧道失败仍可能报告 unknown。CLI 不自动修改 shell 配置。
相关:通用错误码与恢复规则
退出码 值 含义 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;不能把已保存的令牌带到另一个服务。