15 Commits
Author SHA1 Message Date
chenyunda218 9e699f3b4e docs+test:空輸出判決 #37——維持 []/null、補 stalled 空輸出測試 2026-09-12 23:43:29 +08:00
chenyunda218 744e7ad809 milestones:新增跨倉庫里程碑總覽命令(#31)
- teai milestones(不帶 --repo)輸出跨所屬組織各倉庫 open 里程碑概況,
  對應 gitea.py milestones(管理者巡邏,agents AGENTS.md 10.1):
  欄位 repo/id/title/url/open_issues/closed_issues/due_on/due_hours/
  overdue/unassigned/updated_at,排序期限近者在前、無期限最後。
- internal/workflow.MilestoneOverview:判定核心(Source 注入、離線可測);
  MilestoneEntry 自訂 MarshalJSON,鍵集鍵序與 gitea.py 全等
  (null 表示、due_hours 定點一位、unassigned PR 條目帶 author)。
- internal/workflow.APIClient 增 OpenMilestones/MilestoneOpenIssues
  (issues 端點刻意不帶 type=issues,PR 條目保留供覆蓋檢查,同 gitea.py)。
- milestones --repo a/b 維持現行單倉庫 list 語義不變。
- 空清單輸出 [](gitea.py 無輸出;#26 慣例差異,README 已文件化)。
- 交叉驗證:同帳號同時跑 gitea.py milestones 與 teai milestones,
  含逾期/未到期/無期限里程碑與未分派 issue/PR 條目,輸出位元組全等。
2026-09-10 21:20:19 +08:00
ceo 3d555e38d9 docs:已知輸出差異補 mine/pulls 欄位集差異(#26)
gitea.py 的 mine/pulls 輸出完整 API 物件是 _dump 直接傾倒的副作用,
欄位集隨 Gitea 版本浮動;teai 維持策展摘要欄位(機器可讀優先),
交叉驗證比對項目集合與判定語義,不逐欄位比對。判定 #26。
2026-09-10 15:24:09 +08:00
ceo ab94cdce9f internal/cli:stalled 與 xrefs 命令接線,完成 #7 CLI 層(堆疊於 #23)
- workflow 新增 StalledSource 介面(Source+CurrentUser+GetIssue)與
  高階入口 RunStalled/ResolveIssueXrefs(xrefs 輸出附 source 出處)
- APIClient 補上 StalledSource 面向(GetIssue/TryGetIssue 等)
- CLI 新增 teai stalled [--hours N](JSON 與 gitea.py 位元組相容:
  停用 HTML 轉義、縮排 2)與 teai xrefs <owner>/<repo> <number>
  (404 → exit 3);table 模式 stalled_hours 定點一位小數
- 接線層與 workflow 層單元測試(注入假資料源、固定時刻)
- README 狀態行更新

驗證:go build/vet/test 全綠;對真實 API 並行掃描,stalled 輸出
與 gitea.py 位元組一致(2169 bytes);xrefs 邊界案例(PR#50/
issue#49 略過、CJK 緊鄰、跨倉庫 owner/repo#N)與 Python 版一致。
2026-09-10 12:20:39 +08:00
ceo 9948357f52 docs:README 補上完整安裝指南(#15) 2026-09-10 10:48:12 +08:00
ceo 15c2d35935 合併 main(#16/#17)並解 cli.go 衝突
衝突原因:#13(本分支 927855d)與 #16(main 7badd9e)各自實作了
同一問題(帶旗標命令被全域剖析攔下)的抽取式修正。採 main 現行
架構(dispatch 內 extractGlobals)為準,並保留本分支的:

- runVersion 參數檢查(version 不接受參數,TestWiringVersionRejectsArgs)
- workflow 命令與接線層測試(workflow_commands_test.go)

go build/vet/gofmt 綠;單元測試僅餘 main 既有回歸
(3 個 login 測試,#16 合併後即失敗,與本 PR 無關)。
2026-09-10 10:22:42 +08:00
ceo c5d5c37eae Merge pull request '日常操作命令:issues/pulls/labels/milestones/releases/repos/api(#8)' (#16) from feature/issue8-dailyops into main 2026-09-10 09:54:23 +08:00
chenyunda218 927855d3ca cli:修正帶旗標命令被全域剖析攔下的阻斷問題(#13 審核)
- parseGlobals 改為抽取式 extractGlobals:只取走已知全域選項,非全域
  選項(--has-work/--mine/--reviewer/--repo)原樣交回子命令 flagset,
  任何順序(含與全域選項交錯)皆可解析;-- 之後停止抽取。
- runVersion 補參數檢查:version --wat 仍回 exit 2。
- workflow:commentsFor 對 number<=0 視為無留言,不打 API(對齊 gitea.py
  在 number 缺漏時跳過留言檢查,避免 issues/0/comments 404 中斷掃描)。
- 新增 internal/cli/workflow_commands_test.go:以注入假 client 的接線層
  測試補上 workflow 單元測試覆蓋不到的分派路徑(members --has-work、
  pulls --mine/--reviewer/--repo、全域選項交錯、next null/table)。
- README:註明與 gitea.py 的已知輸出差異(空清單 [] vs 無輸出;
  全域選項可出現在命令前後)。

實機交叉驗證(alex):members --has-work、pulls --mine/--reviewer、
pulls --repo、next、mine 兩者輸出一致;go vet/test 全綠。
2026-09-10 09:41:53 +08:00
ceo f8fc16ae49 實現 login 指令(#14):tea 相容組態管理
- internal/gitea/config.go:tea 組態的行級編輯引擎(新增/更新/
  設預設/移除),未知欄位與 preferences 區段逐字保留;原子寫入
  (暫存檔 + rename,0600)。
- internal/cli/login.go:teai login list/add/default/remove。add 先以
  token 呼叫 GET /user 驗證,成功才寫入並記下帳號;未給 --token 時
  自 stdin 讀一行;401 結束碼 3。未給 --name 時同站既有項目就地更新。
- 輸出欄位 name/url/user/default,永不輸出 token。
- 測試:編輯引擎 12 項、指令層 11 項(httptest 假 API),並以真 tea
  驗證 teai 寫出的組態可互通(tea whoami 讀出同帳號)。

Closes #14
2026-09-10 09:32:53 +08:00
alex c311f02e0f 合併 main(#4 藍圖修訂)並整合 README:日常操作段落以 #8 實作內容為準 2026-09-10 09:20:44 +08:00
alex 7badd9e46d internal/dailyops + cli:日常操作命令 issues/pulls/labels/milestones/releases/repos/api(#8)
- internal/gitea:用戶端支援寫入動詞(DoJSON/DoRaw,共用 do 核心)
- internal/dailyops:七組日常操作的 API 層(issues/pulls/labels/milestones/releases/repos/api)
- internal/cli:子命令接線;寫入類一律 --yes 閘門(未確認不發請求、exit 2)
- teai pulls 相容 #6 工作流用法(無子命令);有子命令走日常操作
- 修正 dispatch:命令旗標(如 --has-work、--comments)不再被誤判為未知全域選項
- teai api 支援 path 內含查詢字串
- 單元測試(httptest 假伺服器)+真實站點交叉驗證(讀取命令輸出對照 Gitea API;寫入回路 create→comment→close 於 alex/.profile 驗證後清理)
2026-09-10 09:19:03 +08:00
chenyunda218 5583a00bb5 internal/workflow + cli:gitea.py 工作流命令 Go 化(#6)
- internal/workflow:Client 介面+判定語義(最後留言、作者/審核者跟進、
  assignee 交集、最久未更新優先),含假 client 單元測試
- internal/workflow/giteaapi.go:以 internal/gitea(#5)實作 Client
- internal/cli:註冊 whoami/orgs/members/mine/pulls/next;全域選項允許
  出現在命令之後;結束碼 0/2/3
- 與 gitea.py 交叉驗證:next/mine/pulls/members(--has-work) 拾取一致
- 依 #5 分支 feature/issue5-gitea-client 為基底
2026-09-10 08:39:35 +08:00
ceo 9e46d233fb 藍圖修訂:不再避開 tea 已有的功能(#3)
- 原則一改為「功能自主完整」:teai 自行實作完整功能集,不因 tea 已有而略過
- 新增「日常操作(tea 對等指令)」指令表:issues/pulls/labels/milestones/releases/repos/api
- README 頂部與狀態區補範圍說明(#3)
2026-09-10 08:13:10 +08:00
ceo 2c851186d8 README:加入指令集設計(gitea.py 工作流的 Go 化藍圖) 2026-09-10 08:02:26 +08:00
ceoandchenyunda218 bc46620d04 初始化專案:Go 模組骨架、CLI 進入點、README、測試
- go.mod(module gitea.alterminal.com/alterminal/teai,Go 1.26)
- cmd/teai/main.go:程式進入點,結束碼交由 internal/cli.Run 處理
- internal/cli:命令列架構(引數剖析、子命令分派、version 命令)
- internal/cli/cli_test.go:用法輸出、version、未知命令等基本測試
- README.md:專案說明、建置與開發慣例(繁體中文)
- .gitignore:建置產物、測試輸出、環境檔
- 僅使用標準庫,可離線建置;授權待維護者選定

Refs #1
2026-09-09 23:06:39 +08:00