# pi-opencode-go-usage

在会话中实时追踪 OpenCode Go 的用量限额 —— **滚动 5 小时、每周、每月**，
通过实时状态栏和 `/opencode-go` 报告组件展示。

![显示 OpenCode Go 用量的状态栏](assets/pi-opencode-go-usage.png)

```
状态栏：  Go 5h 62% · wk 31% · mo 44%

报告组件：
  OpenCode Go Usage
  Workspace: wrk_xxxxxxxxxxxxxxxxxxxxxxxx
  Rolling 5h ██████░░░░  62% · 1h 12m
  Weekly     ███░░░░░░░  31% · 3d 4h
  Monthly    ████░░░░░░  44% · 12d 0h
  Updated 2:32:05 PM  （时间格式随你的区域设置而定）
```

## 为什么需要它

OpenCode Go 提供了一个接受 API key 的用量接口：

```
GET https://opencode.ai/zen/go/v1/usage     (Authorization: Bearer <api-key>)
-> { usage: {
      rolling:  { status, percent, resetsAt },
      weekly:   { status, percent, resetsAt },
      monthly:  { status, percent, resetsAt } } }
```

本扩展用你的 OpenCode API key 调用该接口，推导出三个百分比与重置倒计时。
它**只报告百分比和倒计时** —— 不占用界面展示金额。

旧的控制台 cookie 机制（`/console/api/go/status`）仍然保留，作为没有 API key
时的回退方案。

## 安装

```bash
pi install npm:pi-opencode-go-usage   # Pi（推荐）
# 或
omp plugin install github:Dakai/pi-opencode-go-usage
# 或用于本地开发：
omp plugin link /path/to/pi-opencode-go-usage
```

然后重启会话（或 `/reload`）。

## 连接

推荐：使用 OpenCode API key。按以下顺序取第一个非空值：

1. `OPENCODE_GO_API_KEY`
2. `OPENCODE_API_KEY`
3. `OPENCODE_ZEN_API_KEY`
4. `~/.local/share/opencode/auth.json` → `opencode-go.key` / `opencode.key`

如果你使用 OpenCode CLI，key 已经在里面了 —— 无需配置。

也可以显式保存：

```
/opencode-go --connect <api-key>
/opencode-go --api-key <api-key>
```

旧版（控制台 cookie）回退方案，仅在没有 API key 时使用：

1. **工作区 ID（Workspace ID）** —— 地址栏中的 `wrk_…` 片段：
   `opencode.ai/console/`**`wrk_…`**`/go`
2. **会话 cookie** —— 在该页面按 F12 → Application → Cookies →
   `https://opencode.ai` → `__Host-console_session` 行 → 复制其 Value
   （它是 `HttpOnly`，`document.cookie` 取不到）。

可以设置环境变量：

```bash
export OPENCODE_GO_WORKSPACE_ID=wrk_…
export OPENCODE_GO_AUTH_COOKIE='…'
```

或使用：

```
/opencode-go --connect wrk_… <会话-cookie-值>
```

只给值时会按 `__Host-console_session=<值>` 发送。若要指定其他 cookie 名，
或一次发送多个，可直接传入完整的 cookie 对：`name=value; name2=value2`。

环境变量**优先于**保存的文件：只要它们已设置，`--connect` / `--cookie` 会保存但不生效
（命令检测到这种情况时会给出警告）。请取消设置，或导出新的值。
`OPENCODE_GO_CONFIG_PATH` 可覆盖配置文件位置（默认 `~/.omp/agent/opencode-go-usage.json`）。

## 命令

| 命令                                    | 作用                                                        |
| --------------------------------------- | ------------------------------------------------------------- |
| `/opencode-go`                          | 抓取并显示报告组件                              |
| `/opencode-go --connect <api-key>`       | 保存 API key，抓取，显示                          |
| `/opencode-go --api-key <api-key>`       | 仅保存 API key                                    |
| `/opencode-go --connect <wrk> <cookie>`  | 保存工作区 + cookie（旧版），抓取，显示           |
| `/opencode-go --workspace <id>`         | 仅保存工作区 ID（旧版）                              |
| `/opencode-go --cookie <value>`         | 仅保存 cookie（旧版）                                |
| `/opencode-go --disconnect`             | 清除所有凭据                                        |
| `/opencode-go --refresh`                | 立即重新抓取                                               |
| `/opencode-go --compact [on\|off]`      | 切换精简状态栏（`Go: 5h 0% · wk 2% · mo 2%`）               |
| `/opencode-go --json`                   | 导出报告到 `~/.omp/agent/opencode-go-usage-report.json` |

用量每 5 分钟自动刷新一次。

## 失败模式

| 状态文本                                | 含义                    | 修复                           |
| ------------------------------------- | -------------------------- | ----------------------------- |
| `Session expired`                     | API key/控制台会话已过期  | 用新 key/cookie 重新连接 |
| `No Go subscription on this workspace`| 该工作区没有 Go 订阅 | 检查工作区 |
| `Console API response unrecognised`   | 接口结构已变更 | 更新解析器             |
| `Network error` / `Request timed out` | 瞬时错误                  | 重试                         |

## 安全性

这是对你本人用量数据的认证读取，API key 或 cookie 存储在 `0600` 权限文件中（或环境变量）。
它只报告接口已经展示的信息；接口变更会导致其失效，届时它会明确报错，
而不是自信地显示一个零值。

## 许可证

MIT
