實現bear cli #2

Closed
opened 2026-08-30 13:48:40 +08:00 by chenyunda218 · 4 comments
Owner
No description provided.
alex was assigned by chenyunda218 2026-08-30 13:48:40 +08:00
Member

接手此 issue。開始前先盤點現況與需要確認的事,避免做到一半方向不對。

現況(我查到的)

  • 本倉庫仍在規劃階段:README.md 與 docs/commands.md(指令規格)已就緒,但尚未有任何程式碼。
  • docs/commands.md 定義的 P2 範圍:login(Device Flow 或 --token <PAT>)、whoami、token、logout、status。
  • 伺服器端(bear 倉庫)目前只有個人存取權杖(PAT)已實作(PR #21 已合併);P1 的 Device Flow(/device_authorization、/device 授權頁、device_code grant)尚未實作,且對應設計文件 docs/cli-feature-plan.md 在 PR #18(已關閉、未合併),未進 main。

需要先確認的事

  1. 範圍:這張 issue 是要一次做完 P2 全部五個指令,還是先做「最小可用版本」(例如先打通免瀏覽器的 login --token <PAT> + whoami + token)?
  2. 對 P1 的依賴:Device Flow 需伺服器端配合(尚未實作)。是否:
    • (a) 本 issue 先只做 PAT 免瀏覽器路徑(不依賴伺服器端變更),Device Flow 留待 P1 完成後再接上;或
    • (b) 本 issue 也一併包含「去 bear 倉庫補 P1 Device Flow」的實作?
  3. 技術決策(docs/commands.md §7 開放問題)需先拍板:
    • 發行格式:mix escript(目標機需 Erlang)還是 self-contained release(bakeware/burrito)?
    • OIDC client 採 method: "device"(client auth none)或沿用 PKCE+JWK?
    • 是否支援 offline_access,或沿用現行 refresh 輪轉即可?
  4. 語言:依 README 技術方向用 Elixir + Req(與 bear 主專案一致)——是否維持?

我的建議

先落地「PAT 登入 + whoami + token」的最小可用版本(Elixir + Req,完全免瀏覽器、不碰伺服器端),驗證終端登入取 token 的整條鏈路;Device Flow 待 P1 就緒後再接。若你同意此切法,我即可開工;若希望一口氣含 P1,也請告知,我改去 bear 倉庫先補 Device Flow。

以上 1–4 回覆後我立即開始實作。

接手此 issue。開始前先盤點現況與需要確認的事,避免做到一半方向不對。 **現況(我查到的)** - 本倉庫仍在規劃階段:`README.md` 與 `docs/commands.md`(指令規格)已就緒,但**尚未有任何程式碼**。 - `docs/commands.md` 定義的 P2 範圍:`login`(Device Flow 或 `--token <PAT>`)、`whoami`、`token`、`logout`、`status`。 - 伺服器端(bear 倉庫)目前**只有個人存取權杖(PAT)已實作**(PR #21 已合併);P1 的 Device Flow(`/device_authorization`、`/device` 授權頁、`device_code` grant)**尚未實作**,且對應設計文件 `docs/cli-feature-plan.md` 在 PR #18(已關閉、未合併),未進 main。 **需要先確認的事** 1. **範圍**:這張 issue 是要一次做完 P2 全部五個指令,還是先做「最小可用版本」(例如先打通免瀏覽器的 `login --token <PAT>` + `whoami` + `token`)? 2. **對 P1 的依賴**:Device Flow 需伺服器端配合(尚未實作)。是否: - (a) 本 issue 先只做 **PAT 免瀏覽器路徑**(不依賴伺服器端變更),Device Flow 留待 P1 完成後再接上;或 - (b) 本 issue 也一併包含「去 bear 倉庫補 P1 Device Flow」的實作? 3. **技術決策**(`docs/commands.md` §7 開放問題)需先拍板: - 發行格式:`mix escript`(目標機需 Erlang)還是 self-contained release(bakeware/burrito)? - OIDC client 採 `method: "device"`(client auth `none`)或沿用 PKCE+JWK? - 是否支援 `offline_access`,或沿用現行 refresh 輪轉即可? 4. **語言**:依 README 技術方向用 Elixir + Req(與 bear 主專案一致)——是否維持? **我的建議** 先落地「PAT 登入 + whoami + token」的最小可用版本(Elixir + Req,完全免瀏覽器、不碰伺服器端),驗證終端登入取 token 的整條鏈路;Device Flow 待 P1 就緒後再接。若你同意此切法,我即可開工;若希望一口氣含 P1,也請告知,我改去 bear 倉庫先補 Device Flow。 以上 1–4 回覆後我立即開始實作。
Author
Owner

按你的建議執行

按你的建議執行
Member

收到,我開始實作。範圍依我先前建議的最小可用版本:bear login --token <PAT>(PAT 模式,免瀏覽器)+ whoami + token,另含純本機的 status/logout(皆為 P2 指令、不依賴伺服器端)。Device Flow 待伺服器端 P1(bear 倉庫)完成後再接。實作完成會以 PR 回報。

收到,我開始實作。範圍依我先前建議的最小可用版本:`bear login --token <PAT>`(PAT 模式,免瀏覽器)+ `whoami` + `token`,另含純本機的 `status`/`logout`(皆為 P2 指令、不依賴伺服器端)。Device Flow 待伺服器端 P1(bear 倉庫)完成後再接。實作完成會以 PR 回報。
Member

已完成 PAT 模式 MVP,PR #3(#3)。

實作內容(分支 feat/pat-mode-mvp,commit 8cc8c414161af18ebbc1e933c13109793c3e5f65):

  • bear login --token :以 PAT 驗證 /userinfo 後寫入憑證檔(0600)
  • bear whoami:GET /userinfo 顯示身分 claims(支援 --json)
  • bear token:印出 access token 供 pipe(--refresh 在 PAT 模式無作用)
  • bear logout:清除本機憑證;bear status:純本機判定
  • 29 個單元測試通過(mix precommit 全綠),並以本機 mock /userinfo 完成端到端驗證

Device Flow(RFC 8628)登入待 bear 倉庫伺服器端 P1 完成後再接。issue 不關閉,留待人工 review/合併。

已完成 PAT 模式 MVP,PR #3(https://gitea.alterminal.com/alterminal/bear-cli/pulls/3)。 實作內容(分支 feat/pat-mode-mvp,commit 8cc8c414161af18ebbc1e933c13109793c3e5f65): - bear login --token <PAT>:以 PAT 驗證 /userinfo 後寫入憑證檔(0600) - bear whoami:GET /userinfo 顯示身分 claims(支援 --json) - bear token:印出 access token 供 pipe(--refresh 在 PAT 模式無作用) - bear logout:清除本機憑證;bear status:純本機判定 - 29 個單元測試通過(mix precommit 全綠),並以本機 mock /userinfo 完成端到端驗證 Device Flow(RFC 8628)登入待 bear 倉庫伺服器端 P1 完成後再接。issue 不關閉,留待人工 review/合併。
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: alterminal/bear-cli#2