From 2e36931f83a728946a111bcde48e6ae333b247cd Mon Sep 17 00:00:00 2001 From: Jeffery Date: Mon, 29 Jun 2026 09:48:29 +0000 Subject: [PATCH] =?UTF-8?q?docs(README):=20=E6=9B=B4=E6=96=B0=20shell=20he?= =?UTF-8?q?lper=20=E8=88=87=20Docker=20=E4=BD=BF=E7=94=A8=E6=96=B9?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 47 ++++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 43b6816..55a8ef9 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Codex CLI Composite Action -提供一個 Gitea/GitHub Actions composite action,用於安裝 Codex CLI、寫入 OAuth token、執行指定提示詞,並將 CLI 輸出寫入 action output;另提供透過 `codex app-server` 取得目前登入帳號 email 的工具函式。 +提供一個 Gitea/GitHub Actions composite action,用於安裝 Codex CLI、寫入 OAuth token、執行指定提示詞,並將 CLI 輸出寫入 action output;另提供透過 `codex app-server` 取得目前登入帳號 email 的 shell helper。 > 更新時間:2026/06/29 14:18:26 @@ -10,7 +10,7 @@ | 專案名稱 | 專案描述 | | --- | --- | -| [codex](https://gitea.jsc.idv.tw/composite-actions/codex/src/branch/develop/) | 提供 Codex CLI composite action(安裝 `@openai/codex`、寫入 OAuth token、執行提示詞並輸出文字),並提供透過 `codex app-server` JSON-RPC `account/read` 取得目前登入帳號 email 的工具函式。 | +| [codex](https://gitea.jsc.idv.tw/composite-actions/codex/src/branch/develop/) | 提供 Codex CLI composite action(安裝 `@openai/codex`、寫入 OAuth token、執行提示詞並輸出文字),並提供透過 `codex app-server` JSON-RPC `account/read` 取得目前登入帳號 email 的 shell helper。 | ### 參考專案 @@ -30,46 +30,47 @@ | 功能名稱 | 功能描述 | | --- | --- | -| [codex_account.read_account_email](https://gitea.jsc.idv.tw/composite-actions/codex/src/branch/develop/app/codex_account.py#L12) | [透過 codex app-server 的 JSON-RPC `account/read` 取得目前登入帳號的 email,取不到或逾時回傳空字串。](#codex_accountread_account_email) | +| [app/codex_account.py](https://gitea.jsc.idv.tw/composite-actions/codex/src/branch/develop/app/codex_account.py#L1) | [透過 codex app-server 的 JSON-RPC `account/read` 取得目前登入帳號的 email,取不到或逾時輸出空字串。](#appcodex_accountpy) | ## 使用範例 - -### codex_account.read_account_email + +### app/codex_account.py -透過 `codex app-server` 的 JSON-RPC `account/read` 取得目前登入帳號的 email。函式會啟動 `codex app-server` 子行程,依序送出 `initialize` / `initialized` / `account/read` 三筆 JSON-RPC 訊息,讀取回應中 `result.account.email` 作為回傳值;讀到 EOF、JSON 解析失敗或超過 `timeout_seconds` 逾時都會停止,取不到時回傳空字串 `""`,且不論成功或失敗都會在 `finally` 終止子行程。 - -簽名: - -```python -def read_account_email(timeout_seconds: float = 25.0) -> str -``` +透過 `codex app-server` 的 JSON-RPC `account/read` 取得目前登入帳號的 email。腳本會啟動 `codex app-server` 子行程,依序送出 `initialize` / `initialized` / `account/read` 三筆 JSON-RPC 訊息,使用 `jq` 讀取回應中 `result.account.email` 並輸出到 stdout;讀到 EOF、JSON 解析失敗或超過逾時都會停止,取不到時輸出空字串。 前置條件: - `codex` CLI 已安裝(例如本 action 的安裝步驟已執行)。 +- `jq` 已安裝。 - `$HOME/.codex/auth.json` 已寫入有效的 OAuth token。 典型呼叫方式: -```python -from app.codex_account import read_account_email +```bash +# 取得目前登入帳號 email;預設等待 25 秒 +bash app/codex_account.py -# 取得目前登入帳號 email;可自訂等待 app-server 回應的逾時秒數 -email = read_account_email(timeout_seconds=25.0) -if email: - print(f"目前登入帳號:{email}") -else: - print("取不到登入帳號(未登入或逾時)") +# 自訂等待 app-server 回應的逾時秒數 +bash app/codex_account.py 10 ``` 預期結果: -- 成功時回傳登入帳號的 email 字串。 -- 未登入、回應缺漏或逾時時回傳空字串 `""`。 +- 成功時輸出登入帳號的 email 字串。 +- 未登入、回應缺漏或逾時時輸出空字串。 此模組亦可直接以指令執行,會將 email 印到 stdout(取不到時印空字串): ```bash -python3 app/codex_account.py +bash app/codex_account.py +``` + +## Docker + +此專案提供以 `ubuntu:latest` 為基底的 Dockerfile,會安裝 `bash`、`jq`、Node.js/npm 與 `@openai/codex`: + +```bash +docker build -t codex-account . +docker run --rm -v "$HOME/.codex:/root/.codex:ro" codex-account ```