codex-threadripper 0.1.6

Human-first CLI that keeps Codex thread history aligned to one provider bucket.
# codex-threadripper

`codex-threadripper` 是一个面向人的小型 CLI,用来让 `CODEX_HOME/state_5.sqlite` 持续对齐当前 `model_provider`。

它的目标很直接:让 Codex 线程列表和 `resume` 流程始终落在同一个 provider 桶里,这样线程历史会更完整、更连续。

## 适合谁

- 经常在同一个 `CODEX_HOME` 下切换 provider 的人
- 想让 `codex resume` 和基于 `app-server` 的线程列表看到同一批历史线程的人
- 想把这件事做成后台常驻服务的人

## 功能

- `status`
  - 查看当前 config provider、SQLite 分布和后台服务状态
- `sync`
  - 立刻执行一次 SQLite 收敛
- `watch`
  - 持续监听 `config.toml`,并定时收敛新增线程
- `print-plist`
  - 打印 `launchd` plist
- `install-launchd`
  - 安装并加载后台服务
- `uninstall-launchd`
  - 卸载后台服务

## 安装

```bash
cargo install codex-threadripper
```

也可以通过 Homebrew 安装:

```bash
brew tap wangnov/tap
brew install codex-threadripper
```

也可以从源码目录直接运行:

```bash
cargo run -- --help
```

## 示例

```bash
codex-threadripper status
codex-threadripper sync
codex-threadripper watch
codex-threadripper install-launchd
```

## 本地化

当前支持两种语言:

- 简体中文
- 英文

语言选择顺序:

1. `CODEX_THREADRIPPER_LANG`
2. `LC_ALL`
3. `LC_MESSAGES`
4. `LANG`
5. macOS 系统语言

## 平台

`launchd` 相关命令面向 macOS。  
`status`、`sync` 和 `watch` 这类核心命令适合任何能访问 `CODEX_HOME/state_5.sqlite` 的环境。

## English

`codex-threadripper` is a human-first CLI that keeps `CODEX_HOME/state_5.sqlite` aligned with the current `model_provider`.

It helps Codex thread lists and resume flows stay in one provider bucket, so thread history remains complete and continuous.

### Install

```bash
cargo install codex-threadripper
```

### Install with Homebrew

```bash
brew tap wangnov/tap
brew install codex-threadripper
```

### Commands

- `status` shows the current provider, SQLite distribution, and background service state
- `sync` reconciles SQLite once right now
- `watch` keeps listening for provider changes and new thread rows
- `print-plist` prints the generated `launchd` plist
- `install-launchd` installs the background service
- `uninstall-launchd` removes the background service

## Release flow

This project uses a tag-driven `cargo-release` + `cargo-dist` flow.

Preview the next release:

```bash
cargo release patch --dry-run
```

Publish a real release:

```bash
cargo release patch --execute
```

The release tag format is:

```text
vX.Y.Z
```

After the tag is pushed, GitHub Actions runs `cargo-dist` and builds release artifacts for:

- macOS Intel
- macOS Apple Silicon
- Linux x64
- Linux ARM64
- Windows x64

Generated installers and package outputs include:

- shell installer
- PowerShell installer
- Homebrew formula artifact
- Windows MSI

GitHub Release keeps the native archives and installers. npm uses a matrix package layout:

- `codex-threadripper`
- `@wangnov/codex-threadripper-macos-arm64`
- `@wangnov/codex-threadripper-macos-x64`
- `@wangnov/codex-threadripper-linux-arm64`
- `@wangnov/codex-threadripper-linux-x64`
- `@wangnov/codex-threadripper-windows-x64`

The root package stays human-friendly. The platform packages carry the native binaries.

`.github/workflows/npm-publish.yml` runs on version tags, waits for the GitHub Release artifacts to appear, assembles the npm matrix locally in CI, and publishes both the platform packages and the root package with npm trusted publishing.

`.github/workflows/homebrew-tap-sync.yml` runs on version tags, waits for the published `codex-threadripper.rb` formula artifact, and updates `Wangnov/homebrew-tap` so `brew tap wangnov/tap && brew install codex-threadripper` keeps working.

The Homebrew sync workflow needs a repository secret named `HOMEBREW_TAP_GITHUB_TOKEN` with write access to `Wangnov/homebrew-tap`.

Whenever you change `dist-workspace.toml`, rerun:

```bash
cargo dist init --yes
```