# Codex Token Monitor 自动安装与更新说明

你正在执行用户授权的 Codex Token Monitor 安装或更新任务。请读取最新版清单：

`https://codex-token-monitor.tokencode.cloud/downloads/manifest.json`

## 安全规则

- 只使用清单中与本机操作系统和 CPU 架构匹配的安装包。
- 下载后必须同时核对文件大小和 SHA-256；不一致时立即停止，不运行安装器。
- 下载文件只放在系统临时目录，不覆盖用户保存的安装包。
- 不读取、输出或上传设备密钥、Codex 登录凭据、聊天内容和项目文件。
- 不绕过 macOS Gatekeeper、Windows SmartScreen 或 UAC；出现系统确认时请用户亲自确认。
- 已安装设备必须保留原设备身份、密钥、配置和采集状态。安装器自带切换失败回滚，不要手工删除旧安装。

## 判断是否需要更新

- macOS 状态文件：`~/Library/Application Support/CodexTokenMonitor/collector-status.json`
- Windows 状态文件：`%LOCALAPPDATA%\CodexTokenMonitor\collector-status.json`
- 读取其中的 `collector_version`。版本等于清单 `version` 且 `ready=true` 时，不重复安装，只报告已经是最新版。
- 状态文件不存在时按首次安装处理；安装器会要求用户粘贴网站为该设备生成的永久设备密钥。

## macOS

1. 用 `uname -m` 检测架构：`arm64` 选择 `mac-arm64`，`x86_64` 选择 `mac-intel`。
2. 使用 `curl --fail --location` 下载匹配的 ZIP 到 `mktemp -d` 创建的临时目录。
3. 使用 `wc -c` 核对大小，使用 `shasum -a 256` 核对 SHA-256。
4. 使用 `ditto -x -k` 解压，并按照清单的 `installer_path` 找到安装器。
5. 使用 `open -W` 启动安装器并等待结束。首次安装由用户在安装器中粘贴设备密钥；覆盖升级直接复用现有身份。
6. 再次读取状态文件，确认 `collector_version` 等于清单版本、`ready=true`、PID 对应进程仍在运行。

## Windows

1. 仅支持 x64；确认 `$env:PROCESSOR_ARCHITECTURE` 为 `AMD64`。
2. 使用 `Invoke-WebRequest` 下载匹配的 ZIP 到 `$env:TEMP` 下新建的随机目录。
3. 使用文件长度核对大小，使用 `Get-FileHash -Algorithm SHA256` 核对 SHA-256。
4. 使用 `Expand-Archive` 解压，并按照清单的 `installer_path` 找到安装器。
5. 使用 `Start-Process -Wait` 启动安装器。首次安装由用户粘贴设备密钥；覆盖升级可留空并复用现有身份。
6. 再次读取状态文件，确认 `collector_version` 等于清单版本、`ready=true`，并确认对应进程和计划任务仍在运行。

## 完成验证

- 访问 `https://codex-token-monitor.tokencode.cloud/healthz`，确认服务器返回 `{"status":"ok"}`。
- 安装后等待最多两个上传周期，再确认设备恢复在线。
- 删除临时下载目录。
- 最终只报告：原版本、目标版本、安装或跳过结果、SHA-256 是否匹配、采集器是否就绪。不要在报告中显示设备密钥。
