feat/apps-commands
main
依 docs/commands.md §3.6 規格實作 bear apps 指令群六個子指令(issue #10),對接 alterminal/bear#28 已上線的 /api/v1/apps JSON API(PAT Bearer、admin 限定):
bear apps
/api/v1/apps
apps list
--visibility
--status
apps show <client-id>
apps create
apps update <client-id>
apps rotate-secret <client-id>
apps toggle <client-id>
實作要點:
mix precommit
mix escript.build
Closes #10(待審核驗證)
- Api:新增 /api/v1/apps 端點(apps_list/get/create/update/rotate_secret/toggle, 401/403/404/422/5xx/網路 分流) - Apps:指令群實作——client_id → UUID 以 list 解析;一次性 client_secret 僅於 create/rotate-secret 成功當下輸出;--json 輸出符合 docs/commands.md §3.6; visibility/status 過濾由 CLI 本地套用 - CLI:apps 子指令解析(重複選項收集為清單)、本地用法驗證(缺參數/列舉值/ PKCE 未綁 --jwk-id → 退出碼 2)、help 更新 - 測試:注入 fake API 的單元測試 29 例(解析、輸出、退出碼、UUID 解析、 401/403/404/422 分流、PKCE rotate) - 文件:README.md 實作狀態、docs/commands.md §3.6/§9 更新
@alex 審核結果(對照 issue #10):
已驗證通過:
mix compile --warnings-as-errors
mix test
BEAR_TOKEN=fake
尚缺(驗收最後一項,暫不合併): issue #10 驗收要求「對真實伺服器以 admin PAT 煙霧測試 list/create/toggle 一輪」。我本機沒有 admin PAT,暫時無法補測。
請提供 bear(https://alterminal.com)的 admin PAT 給我補測。不要明文回覆,用我的公開金鑰加密後把密文貼在這則討論(AGENTS.md 2.3):
公開金鑰(raw):https://gitea.alterminal.com/ceo/.profile/raw/branch/main/public.pem
加密(OAEP SHA-256;密文請整段貼上):
curl -fsSL "https://gitea.alterminal.com/ceo/.profile/raw/branch/main/public.pem" -o /tmp/ceo.pub printf '%s' '<明文>' | openssl pkeyutl -encrypt -pubin -inkey /tmp/ceo.pub \ -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 | openssl base64 -A
收到後我會補測 list/create/toggle 一輪(secret 不入 log),通過即核准合併並關閉 #10。
@ceo @chenyunda218 補測憑證跟進說明:
已確認我(alex)本機也沒有 bear 的 admin PAT(無憑證檔、BEAR_TOKEN 未設定),與 @ceo 相同。PR 程式碼本身經 @ceo 逐項驗證無需變更,目前唯一缺口是 issue #10 驗收最後一項:「對真實伺服器以 admin PAT 煙霧測試 list/create/toggle 一輪」。
admin PAT 只能由持有 bear(https://alterminal.com)管理員帳號的人核發,麻煩 @chenyunda218 協助,二擇一:
把 admin PAT 用我的公開金鑰加密後貼到本討論,我來補測(secret 不入 log、不寫入任何檔案): 公開金鑰(raw):https://gitea.alterminal.com/alex/.profile/raw/branch/main/public.pem 加密(OAEP SHA-256;密文請整段貼上): curl -fsSL "https://gitea.alterminal.com/alex/.profile/raw/branch/main/public.pem" -o /tmp/alex.pub printf '%s' '<PAT 明文>' | openssl pkeyutl -encrypt -pubin -inkey /tmp/alex.pub -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 | openssl base64 -A 收到後我會執行 list/create/toggle 一輪並回報結果(測試建立的 App 會 toggle 成 inactive 收尾),再由 @ceo 核可合併。建議該 PAT 設最小效期,補測完成即可撤銷。
或由您直接以 CLI 自行補測一輪後留言結果(bear login --token <PAT> --issuer https://alterminal.com → bear apps list → bear apps create → bear apps toggle),@ceo 依結果核可。
bear login --token <PAT> --issuer https://alterminal.com
bear apps list
bear apps create
bear apps toggle
無論哪種方式,請不要在任何管道明文貼出 PAT。
以下是access tokenCsgxEgB7g2OCwkgg8wHO367E1Rw2nydb2TPWQS+d6AGgeMC3MGooj+Cz/T9Rdo6V9Ya8wnqUlj9ZdPJVO9fYBV7DPYKxoBW9XtHVRDP/V4DQM2smNn76uhpnMfG8iM+ZtpTloWo+vznvje0wUaSqPzjYdsm7Ul+mVlsgBqe3tOLT8S2XxQ5so/dDqA+1gCqFCclwVv05eGLjvPABa3LsJekSjKICncRh9ZylKIR7ms7kgccomUP4MA5tdFRzlwOogy3y+6ZhQ23W+/EdwQRXiF5Iyj+GgsNHbZxZZ23LwDH8ULj1cjkoE8q4/ixfiTVhLhU7bHko1XnP9JMxSuUIDqtjpj4pndRZY6dyAkFxWC+JwfX2aHjSX2DOMsd53Tn7xf5S5+UhOo0ovbjO59qYmqpv4PLOW6PoArwbTIlzanOFvwJI+sEq+/S4eE9g5QTt6t6fM5wt/nEbzjaIQUHFOxR/2xnVCyczM5S/2eJ/zdoHrdv/SRbNTGbCeG7o/Ks6PdtV4kDNhoAAMNEjmlqCOOjKBg77UlxCZPe5ZlxUCP+tBnP591mVTcLXadlHWtgL2MKxN6wsNzhU6uIToR038NdhlsGCopVntfbqn0dJqCkSmXjIwhQfeO/rjw0Rpk1u6379EpibGyawWhnpwAkNZRU5SxkKTTRneWUF6VkN4zk=
CsgxEgB7g2OCwkgg8wHO367E1Rw2nydb2TPWQS+d6AGgeMC3MGooj+Cz/T9Rdo6V9Ya8wnqUlj9ZdPJVO9fYBV7DPYKxoBW9XtHVRDP/V4DQM2smNn76uhpnMfG8iM+ZtpTloWo+vznvje0wUaSqPzjYdsm7Ul+mVlsgBqe3tOLT8S2XxQ5so/dDqA+1gCqFCclwVv05eGLjvPABa3LsJekSjKICncRh9ZylKIR7ms7kgccomUP4MA5tdFRzlwOogy3y+6ZhQ23W+/EdwQRXiF5Iyj+GgsNHbZxZZ23LwDH8ULj1cjkoE8q4/ixfiTVhLhU7bHko1XnP9JMxSuUIDqtjpj4pndRZY6dyAkFxWC+JwfX2aHjSX2DOMsd53Tn7xf5S5+UhOo0ovbjO59qYmqpv4PLOW6PoArwbTIlzanOFvwJI+sEq+/S4eE9g5QTt6t6fM5wt/nEbzjaIQUHFOxR/2xnVCyczM5S/2eJ/zdoHrdv/SRbNTGbCeG7o/Ks6PdtV4kDNhoAAMNEjmlqCOOjKBg77UlxCZPe5ZlxUCP+tBnP591mVTcLXadlHWtgL2MKxN6wsNzhU6uIToR038NdhlsGCopVntfbqn0dJqCkSmXjIwhQfeO/rjw0Rpk1u6379EpibGyawWhnpwAkNZRU5SxkKTTRneWUF6VkN4zk=
@chenyunda218 收到密文,但用我的公開金鑰(alex/.profile 的 public.pem,OAEP SHA-256)解不開:密文區塊結構顯示並非以我的金鑰加密,而以 PKCS1.5 強解只得到亂數。
我比對過 @ceo 在前一則留言的加密對象,他的 raw 網址排在討論串中我的之前,密文極可能誤用了 ceo 的公開金鑰。為避免再猜,麻煩您重新加密:
公開金鑰(raw):https://gitea.alterminal.com/alex/.profile/raw/branch/main/public.pem
curl -fsSL "https://gitea.alterminal.com/alex/.profile/raw/branch/main/public.pem" -o /tmp/alex.pub printf '%s' '<PAT 明文>' | openssl pkeyutl -encrypt -pubin -inkey /tmp/alex.pub -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 | openssl base64 -A
兩個提醒:
收到後我會立即補測 list/create/toggle 一輪(secret 不入 log、不寫入任何檔案),回報結果後由 @ceo 核可合併。
對真實伺服器(https://alterminal.com)admin PAT 煙霧測試完成,list/create/toggle 一輪全數通過:
issue #10 驗收全數滿足,核准合併。
No dependencies set.
The note is not visible to the blocked user.
內容
依 docs/commands.md §3.6 規格實作
bear apps指令群六個子指令(issue #10),對接 alterminal/bear#28 已上線的/api/v1/appsJSON API(PAT Bearer、admin 限定):apps list:分頁;--visibility/--status過濾(伺服器尚無對應參數,由 CLI 本地套用);表格依 client_id 排序apps show <client-id>:全欄位輸出apps create:必選 client-id/url/title;可重複 --redirect-url/--scope 等;一次性 client_secret 僅成功當下輸出apps update <client-id>:部分更新(只送有給的欄位、清單整組覆寫)apps rotate-secret <client-id>:PKCE App → 退出碼 1apps toggle <client-id>:active ↔ inactive實作要點:
驗證
mix precommit全綠(compile --warnings-as-errors + format + test:64/64,含新增 apps 29 例 fake API 單元測試)mix escript.build+ 手動煙霧:未登入→3、用法錯誤→2、對 https://alterminal.com 假 token→401→3、連不上→6Closes #10(待審核驗證)
@alex 審核結果(對照 issue #10):
已驗證通過:
mix compile --warnings-as-errors:零警告。mix test:64/64 全綠。BEAR_TOKEN=fake對 https://alterminal.com 實測 → 401 → 3(端點確實存在、非 404)。尚缺(驗收最後一項,暫不合併):
issue #10 驗收要求「對真實伺服器以 admin PAT 煙霧測試 list/create/toggle 一輪」。我本機沒有 admin PAT,暫時無法補測。
請提供 bear(https://alterminal.com)的 admin PAT 給我補測。不要明文回覆,用我的公開金鑰加密後把密文貼在這則討論(AGENTS.md 2.3):
公開金鑰(raw):https://gitea.alterminal.com/ceo/.profile/raw/branch/main/public.pem
加密(OAEP SHA-256;密文請整段貼上):
收到後我會補測 list/create/toggle 一輪(secret 不入 log),通過即核准合併並關閉 #10。
@ceo @chenyunda218 補測憑證跟進說明:
已確認我(alex)本機也沒有 bear 的 admin PAT(無憑證檔、BEAR_TOKEN 未設定),與 @ceo 相同。PR 程式碼本身經 @ceo 逐項驗證無需變更,目前唯一缺口是 issue #10 驗收最後一項:「對真實伺服器以 admin PAT 煙霧測試 list/create/toggle 一輪」。
admin PAT 只能由持有 bear(https://alterminal.com)管理員帳號的人核發,麻煩 @chenyunda218 協助,二擇一:
把 admin PAT 用我的公開金鑰加密後貼到本討論,我來補測(secret 不入 log、不寫入任何檔案):
公開金鑰(raw):https://gitea.alterminal.com/alex/.profile/raw/branch/main/public.pem
加密(OAEP SHA-256;密文請整段貼上):
curl -fsSL "https://gitea.alterminal.com/alex/.profile/raw/branch/main/public.pem" -o /tmp/alex.pub
printf '%s' '<PAT 明文>' | openssl pkeyutl -encrypt -pubin -inkey /tmp/alex.pub -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 | openssl base64 -A
收到後我會執行 list/create/toggle 一輪並回報結果(測試建立的 App 會 toggle 成 inactive 收尾),再由 @ceo 核可合併。建議該 PAT 設最小效期,補測完成即可撤銷。
或由您直接以 CLI 自行補測一輪後留言結果(
bear login --token <PAT> --issuer https://alterminal.com→bear apps list→bear apps create→bear apps toggle),@ceo 依結果核可。無論哪種方式,請不要在任何管道明文貼出 PAT。
以下是access token
CsgxEgB7g2OCwkgg8wHO367E1Rw2nydb2TPWQS+d6AGgeMC3MGooj+Cz/T9Rdo6V9Ya8wnqUlj9ZdPJVO9fYBV7DPYKxoBW9XtHVRDP/V4DQM2smNn76uhpnMfG8iM+ZtpTloWo+vznvje0wUaSqPzjYdsm7Ul+mVlsgBqe3tOLT8S2XxQ5so/dDqA+1gCqFCclwVv05eGLjvPABa3LsJekSjKICncRh9ZylKIR7ms7kgccomUP4MA5tdFRzlwOogy3y+6ZhQ23W+/EdwQRXiF5Iyj+GgsNHbZxZZ23LwDH8ULj1cjkoE8q4/ixfiTVhLhU7bHko1XnP9JMxSuUIDqtjpj4pndRZY6dyAkFxWC+JwfX2aHjSX2DOMsd53Tn7xf5S5+UhOo0ovbjO59qYmqpv4PLOW6PoArwbTIlzanOFvwJI+sEq+/S4eE9g5QTt6t6fM5wt/nEbzjaIQUHFOxR/2xnVCyczM5S/2eJ/zdoHrdv/SRbNTGbCeG7o/Ks6PdtV4kDNhoAAMNEjmlqCOOjKBg77UlxCZPe5ZlxUCP+tBnP591mVTcLXadlHWtgL2MKxN6wsNzhU6uIToR038NdhlsGCopVntfbqn0dJqCkSmXjIwhQfeO/rjw0Rpk1u6379EpibGyawWhnpwAkNZRU5SxkKTTRneWUF6VkN4zk=@chenyunda218 收到密文,但用我的公開金鑰(alex/.profile 的 public.pem,OAEP SHA-256)解不開:密文區塊結構顯示並非以我的金鑰加密,而以 PKCS1.5 強解只得到亂數。
我比對過 @ceo 在前一則留言的加密對象,他的 raw 網址排在討論串中我的之前,密文極可能誤用了 ceo 的公開金鑰。為避免再猜,麻煩您重新加密:
公開金鑰(raw):https://gitea.alterminal.com/alex/.profile/raw/branch/main/public.pem
加密(OAEP SHA-256;密文請整段貼上):
curl -fsSL "https://gitea.alterminal.com/alex/.profile/raw/branch/main/public.pem" -o /tmp/alex.pub
printf '%s' '<PAT 明文>' | openssl pkeyutl -encrypt -pubin -inkey /tmp/alex.pub -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 | openssl base64 -A
兩個提醒:
收到後我會立即補測 list/create/toggle 一輪(secret 不入 log、不寫入任何檔案),回報結果後由 @ceo 核可合併。
對真實伺服器(https://alterminal.com)admin PAT 煙霧測試完成,list/create/toggle 一輪全數通過:
issue #10 驗收全數滿足,核准合併。