feat(worklog): worklog.sh 改寫為 worklog.mjs(node 全面模組化) #3

Merged
admin merged 3 commits from develop into master 2026-08-17 07:33:51 +00:00
Member

摘要

  • 新增 scripts/worklog/worklog.mjs,把 worklog.sh(294 行 bash)逐段等價改寫成 Node ESM:直接 import transcript.mjs/wiki_api.mjs 已 export 的函式(extractTurn/turnDuration/turnTokens/redact/nowStr/log/appendEntry/resolveToken/weekPageName/weekPageHeader),不再開子行程呼叫。
  • 遞迴防護、WORKLOG_ENABLED/WORKLOG_HOST/WORKLOG_REPO 啟用檢查、stdin JSON 解析(同時接 snake_case/camelCase)、stop_hook_active 檢查、Codex transcript fallback、WORKLOG_SCOPE 範圍過濾、專案判定(git remote 優先)、模型決定與 30 天快取過期、濃縮 prompt 九條規則,全部逐字保留;退出碼一律 0。
  • hooks/hooks.json 的 Stop hook command 改用 node 執行 worklog.mjs,跨 plugin 腳本定位邏輯與 timeout: 60 不變。
  • README.md/worklog/SKILL.md/wiki_api.mjs 檔頭註解四處引用同步改為 worklog.mjs。

舊 worklog.sh 暫未刪除:計畫是先在 WORKLOG_ENABLED=1 的環境實測 hook 真的會觸發並成功寫入週頁後才刪除,這個環境目前本機沒有設定,需要使用者提供或另行安排測試。

Test plan

  • node --check worklog.mjs 語法通過。
  • WORKLOG_CHILD=1 → 靜默 exit 0;未設 WORKLOG_ENABLED → 靜默 exit 0;transcript 路徑不存在 → 正確 [worklog][WRN] 訊息並 exit 0。
  • 抽出 hooks.json 的 Stop command 字串單獨執行,確認能正確定位並用 node 執行 worklog.mjs。
  • 未測:真的呼叫 headless CLI 濃縮並成功寫入 Gitea wiki 週頁的完整成功路徑(需要使用者提供 WORKLOG_HOST/WORKLOG_REPO 並明確授權對外寫入)。

🤖 Generated with Claude Code

## 摘要 - 新增 `scripts/worklog/worklog.mjs`,把 `worklog.sh`(294 行 bash)逐段等價改寫成 Node ESM:直接 `import` `transcript.mjs`/`wiki_api.mjs` 已 export 的函式(`extractTurn`/`turnDuration`/`turnTokens`/`redact`/`nowStr`/`log`/`appendEntry`/`resolveToken`/`weekPageName`/`weekPageHeader`),不再開子行程呼叫。 - 遞迴防護、`WORKLOG_ENABLED`/`WORKLOG_HOST`/`WORKLOG_REPO` 啟用檢查、stdin JSON 解析(同時接 snake_case/camelCase)、`stop_hook_active` 檢查、Codex transcript fallback、`WORKLOG_SCOPE` 範圍過濾、專案判定(git remote 優先)、模型決定與 30 天快取過期、濃縮 prompt 九條規則,全部逐字保留;退出碼一律 0。 - `hooks/hooks.json` 的 `Stop` hook command 改用 `node` 執行 `worklog.mjs`,跨 plugin 腳本定位邏輯與 `timeout: 60` 不變。 - `README.md`/`worklog/SKILL.md`/`wiki_api.mjs` 檔頭註解四處引用同步改為 `worklog.mjs`。 **舊 `worklog.sh` 暫未刪除**:計畫是先在 `WORKLOG_ENABLED=1` 的環境實測 hook 真的會觸發並成功寫入週頁後才刪除,這個環境目前本機沒有設定,需要使用者提供或另行安排測試。 ## Test plan - [x] `node --check worklog.mjs` 語法通過。 - [x] `WORKLOG_CHILD=1` → 靜默 exit 0;未設 `WORKLOG_ENABLED` → 靜默 exit 0;transcript 路徑不存在 → 正確 `[worklog][WRN]` 訊息並 exit 0。 - [x] 抽出 `hooks.json` 的 `Stop` command 字串單獨執行,確認能正確定位並用 node 執行 `worklog.mjs`。 - [ ] **未測**:真的呼叫 headless CLI 濃縮並成功寫入 Gitea wiki 週頁的完整成功路徑(需要使用者提供 `WORKLOG_HOST`/`WORKLOG_REPO` 並明確授權對外寫入)。 🤖 Generated with [Claude Code](https://claude.com/claude-code)
jiantw83 added 1 commit 2026-08-17 07:13:13 +00:00
新增 scripts/worklog/worklog.mjs,逐段對應改寫 worklog.sh:log/nowStr 改
import 自 wiki_api.mjs,extractTurn/turnDuration/turnTokens/redact 改
import 自 transcript.mjs,appendEntry/resolveToken/weekPageName/
weekPageHeader 改 import 自 wiki_api.mjs,取代原本各自開子行程呼叫;
stdin JSON 解析、遞迴防護、啟用檢查、Codex transcript fallback、
WORKLOG_SCOPE 過濾、專案判定、模型決定與快取過期、濃縮 prompt 九條規則
逐字保留,退出碼一律 0。hooks/hooks.json 的 Stop hook 改用 node 執行;
README/worklog SKILL.md/wiki_api.mjs 檔頭註解同步更新指向 worklog.mjs。

舊 worklog.sh 暫未刪除:依規劃需先在 WORKLOG_ENABLED=1 的環境實測 hook
真的會觸發並成功寫入週頁,這個環境目前未設定,留待後續驗證後再處理。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
jiantw83 added 1 commit 2026-08-17 07:22:37 +00:00
實測 worklog.mjs 全流程(含真的呼叫 claude -p 濃縮並寫入 Gitea wiki 週頁)
時發現 hooks.json 的 Stop command 漏加 --use-system-ca:本環境的 TLS
攔截代理會讓 Node fetch 預設信任鏈驗證失敗(HTTP 0),造成 wiki_api.mjs
誤判兩個 token 來源都失效而寫入失敗;shared/code/persona 的
version-guard hook 都有這個旗標,只有 doc 的 worklog Stop hook 漏掉。
加上後於既有 knowledges/Plan wiki 建立測試週頁重測通過(七欄格式正確、
兩次呼叫的 marker 各自附加不互相覆蓋),驗證後已刪除該測試頁。

worklog.sh 已確認可被 worklog.mjs 完全取代,直接刪除、不保留 bash
fallback;grep -rn 'worklog.sh' doc/ 回傳零筆。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
jiantw83 added 1 commit 2026-08-17 07:24:44 +00:00
worklog.sh 改寫為 worklog.mjs、Stop hook 補 --use-system-ca、目錄頁 check
欄改用 ●/○,對照 master 現行版本 0.1.2 升版。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
admin approved these changes 2026-08-17 07:33:49 +00:00
admin merged commit 4d4c60d1b0 into master 2026-08-17 07:33:51 +00:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: plugins/doc#3