devlog-tracker 0.33.1 → 0.33.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  *English | [繁體中文](README.zh-TW.md)*
4
4
 
5
- **Version** 0.33.1
5
+ **Version** 0.33.3
6
6
 
7
7
  Maintains a `.devlog/devlog.md` in your project, turning each conversation round's requests, decisions, and outcomes into a permanent record. A conversation disappears the moment you `/clear` or switch sessions; this file fills that gap so work can pause and resume. Nothing is touched until you explicitly run `/devlog-tracker:start` — installing the plugin alone doesn't create or modify any files.
8
8
 
package/README.zh-TW.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  *[English](README.md) | 繁體中文*
4
4
 
5
- **版本** 0.33.1
5
+ **版本** 0.33.3
6
6
 
7
7
  在專案中維護一份 `.devlog/devlog.md`,把每一輪對話的請求、決策與結果寫成永久紀錄。對話一 `/clear` 或換 session 就沒了;這份檔案取代那個缺口,讓工作可以中斷再接。沒下過 `/devlog-tracker:start` 時,裝著也不會動任何檔案。
8
8
 
@@ -7,7 +7,7 @@ description: 調整 Checkpoint Mode 的沉默門檻——累積多少輪沒寫 #
7
7
 
8
8
  ```bash
9
9
  PLUGIN_ROOT="${DEVLOG_TRACKER_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
10
- DEVLOG_PROJECT_DIR="$(pwd)" bash "${PLUGIN_ROOT}/core/scripts/checkpoint-set.sh" <rounds>
10
+ DEVLOG_PROJECT_DIR="<專案根目錄絕對路徑,不要用 $(pwd) 重新推>" bash "${PLUGIN_ROOT}/core/scripts/checkpoint-set.sh" <rounds>
11
11
  ```
12
12
 
13
13
  不要自己手改 `.devlog/.checkpoint-state`。
package/commands/clean.md CHANGED
@@ -34,7 +34,7 @@ description: 無條件清空 .devlog/devlog.md(含專案摘要與所有 Round
34
34
 
35
35
  ```bash
36
36
  PLUGIN_ROOT="${DEVLOG_TRACKER_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
37
- DEVLOG_PROJECT_DIR="$(pwd)" bash "${PLUGIN_ROOT}/core/scripts/clean-devlog.sh" --confirmed
37
+ DEVLOG_PROJECT_DIR="<專案根目錄絕對路徑,不要用 $(pwd) 重新推>" bash "${PLUGIN_ROOT}/core/scripts/clean-devlog.sh" --confirmed
38
38
  ```
39
39
  ```
40
40
 
@@ -16,7 +16,7 @@ description: 把 .devlog/devlog.md 裡已完成且較舊的紀錄搬到 devlog.a
16
16
  先決定 plugin 根目錄(有 `DEVLOG_TRACKER_ROOT` 用它;否則用 `CLAUDE_PLUGIN_ROOT`;兩者都空就用含 `.claude-plugin/plugin.json` 的本 plugin 根目錄):
17
17
  ```bash
18
18
  PLUGIN_ROOT="${DEVLOG_TRACKER_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
19
- DEVLOG_PROJECT_DIR="$(pwd)" bash "${PLUGIN_ROOT}/core/scripts/compact-devlog.sh"
19
+ DEVLOG_PROJECT_DIR="<專案根目錄絕對路徑,不要用 $(pwd) 重新推>" bash "${PLUGIN_ROOT}/core/scripts/compact-devlog.sh"
20
20
  ```
21
21
  檔案不存在時腳本 exit 1:告知沒有東西可壓縮。
22
22
  5. 用 stdout 的 `MOVED` / `REMAINING` / `ARCHIVE` 回報一句話。
package/commands/keep.md CHANGED
@@ -84,7 +84,7 @@ description: 掃描整份 devlog.md,把值得留名的主題段落一次分別
84
84
 
85
85
  ```bash
86
86
  PLUGIN_ROOT="${DEVLOG_TRACKER_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
87
- DEVLOG_PROJECT_DIR="$(pwd)" bash "${PLUGIN_ROOT}/core/scripts/keep-move.sh" \
87
+ DEVLOG_PROJECT_DIR="<專案根目錄絕對路徑,不要用 $(pwd) 重新推>" bash "${PLUGIN_ROOT}/core/scripts/keep-move.sh" \
88
88
  --from <from> --to <to> --name "<name>" --desc "<這段在做什麼的一句話>"
89
89
  ```
90
90
 
@@ -6,7 +6,7 @@ description: 調整 Lessons Mode 機制性提醒的共用門檻——工作區
6
6
 
7
7
  ```bash
8
8
  PLUGIN_ROOT="${DEVLOG_TRACKER_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
9
- DEVLOG_PROJECT_DIR="$(pwd)" bash "${PLUGIN_ROOT}/core/scripts/lessons-drift-set.sh" <次數>
9
+ DEVLOG_PROJECT_DIR="<專案根目錄絕對路徑,不要用 $(pwd) 重新推>" bash "${PLUGIN_ROOT}/core/scripts/lessons-drift-set.sh" <次數>
10
10
  ```
11
11
 
12
12
  不要自己手改 `.devlog/.lessons-advisory-state`。
@@ -7,7 +7,7 @@ description: 關閉 Lessons Mode。不會刪除任何已寫的 devlog.lessons.*.
7
7
  1. 先決定 plugin 根目錄(有 `DEVLOG_TRACKER_ROOT` 用它;否則用 `CLAUDE_PLUGIN_ROOT`;兩者都空就用含 `.claude-plugin/plugin.json` 的本 plugin 根目錄):
8
8
  ```bash
9
9
  PLUGIN_ROOT="${DEVLOG_TRACKER_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
10
- DEVLOG_PROJECT_DIR="$(pwd)" bash "${PLUGIN_ROOT}/core/scripts/lessons-off.sh"
10
+ DEVLOG_PROJECT_DIR="<專案根目錄絕對路徑,不要用 $(pwd) 重新推>" bash "${PLUGIN_ROOT}/core/scripts/lessons-off.sh"
11
11
  ```
12
12
  不要自己刪 `.lessons-enabled`。
13
13
  2. stdout 是 `NOT_ENABLED`:告知 Lessons Mode 本來就沒開,結束。
@@ -7,7 +7,7 @@ description: 開啟 Lessons Mode(開發歷程教訓,預設關閉)。隸屬
7
7
  1. 先決定 plugin 根目錄(有 `DEVLOG_TRACKER_ROOT` 用它;否則用 `CLAUDE_PLUGIN_ROOT`;兩者都空就用含 `.claude-plugin/plugin.json` 的本 plugin 根目錄):
8
8
  ```bash
9
9
  PLUGIN_ROOT="${DEVLOG_TRACKER_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
10
- DEVLOG_PROJECT_DIR="$(pwd)" bash "${PLUGIN_ROOT}/core/scripts/lessons-on.sh"
10
+ DEVLOG_PROJECT_DIR="<專案根目錄絕對路徑,不要用 $(pwd) 重新推>" bash "${PLUGIN_ROOT}/core/scripts/lessons-on.sh"
11
11
  ```
12
12
  不要自己用手建 `.lessons-enabled`。
13
13
  2. stdout 是 `NOT_ENABLED`:告知這個專案還沒下過 `/devlog-tracker:start`,Lessons Mode 隸屬主開關,沒有 Round/Status 紀錄可判斷「BLOCKED→解開」,請先 `/devlog-tracker:start` 再開這個。
package/commands/pause.md CHANGED
@@ -10,7 +10,7 @@ description: 暫停這個專案的 devlog 強制記錄機制。不會刪除任
10
10
 
11
11
  ```bash
12
12
  PLUGIN_ROOT="${DEVLOG_TRACKER_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
13
- DEVLOG_PROJECT_DIR="$(pwd)" bash "${PLUGIN_ROOT}/core/scripts/pause-devlog.sh"
13
+ DEVLOG_PROJECT_DIR="<專案根目錄絕對路徑,不要用 $(pwd) 重新推>" bash "${PLUGIN_ROOT}/core/scripts/pause-devlog.sh"
14
14
  ```
15
15
  ```
16
16
  不要自己刪 `.enabled`。
@@ -6,7 +6,7 @@ description: 查看 devlog 統計:Round 數、各 Status、BLOCKED 比例、Ch
6
6
 
7
7
  ```bash
8
8
  PLUGIN_ROOT="${DEVLOG_TRACKER_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
9
- DEVLOG_PROJECT_DIR="$(pwd)" bash "${PLUGIN_ROOT}/core/scripts/report-devlog.sh"
9
+ DEVLOG_PROJECT_DIR="<專案根目錄絕對路徑,不要用 $(pwd) 重新推>" bash "${PLUGIN_ROOT}/core/scripts/report-devlog.sh"
10
10
  ```
11
11
 
12
12
  使用者要看所有 branch 的合計時加 `--all-branches`。
@@ -10,7 +10,7 @@ description: 調整 Segment Watch 的沉默門檻——同一輪連續多久沒
10
10
 
11
11
  ```bash
12
12
  PLUGIN_ROOT="${DEVLOG_TRACKER_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
13
- DEVLOG_PROJECT_DIR="$(pwd)" bash "${PLUGIN_ROOT}/core/scripts/segment-watch-set.sh" <seconds>
13
+ DEVLOG_PROJECT_DIR="<專案根目錄絕對路徑,不要用 $(pwd) 重新推>" bash "${PLUGIN_ROOT}/core/scripts/segment-watch-set.sh" <seconds>
14
14
  ```
15
15
  ```
16
16
 
package/commands/span.md CHANGED
@@ -5,9 +5,9 @@ description: 開啟或關閉 Span Mode,讓自動續接的長任務定期記錄
5
5
  先判斷使用者要開啟或關閉:
6
6
 
7
7
  - 使用者明確要求關閉,或 `.devlog/.span-open` 已存在且沒有明確要求重新開啟:
8
- 先決定 plugin 根目錄(有 `DEVLOG_TRACKER_ROOT` 用它;否則用 `CLAUDE_PLUGIN_ROOT`;兩者都空就用含 `.claude-plugin/plugin.json` 的本 plugin 根目錄),設 `PLUGIN_ROOT="${DEVLOG_TRACKER_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"`,再跑 `DEVLOG_PROJECT_DIR="$(pwd)" bash "${PLUGIN_ROOT}/core/scripts/span-close.sh"`,
8
+ 先決定 plugin 根目錄(有 `DEVLOG_TRACKER_ROOT` 用它;否則用 `CLAUDE_PLUGIN_ROOT`;兩者都空就用含 `.claude-plugin/plugin.json` 的本 plugin 根目錄),設 `PLUGIN_ROOT="${DEVLOG_TRACKER_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"`,再跑 `DEVLOG_PROJECT_DIR="<專案根目錄絕對路徑,不要用 $(pwd) 重新推>" bash "${PLUGIN_ROOT}/core/scripts/span-close.sh"`,
9
9
  再依 SKILL 的 span 收尾規則寫一個**新的 Round**,總結整段 span。
10
10
  - 使用者要求開啟:先把目前 Round 正常寫完,`Status` 設為 `IN_PROGRESS`,再跑
11
- `DEVLOG_PROJECT_DIR="$(pwd)" bash "${PLUGIN_ROOT}/core/scripts/span-open.sh"`。
11
+ `DEVLOG_PROJECT_DIR="<專案根目錄絕對路徑,不要用 $(pwd) 重新推>" bash "${PLUGIN_ROOT}/core/scripts/span-open.sh"`。
12
12
 
13
13
  不要手寫 `.span-open` JSON。腳本 exit 1 時顯示 stderr,停止操作。
package/commands/start.md CHANGED
@@ -7,7 +7,7 @@ description: 啟動這個專案的 devlog 強制記錄機制。之後每一輪
7
7
  1. 先決定 plugin 根目錄(有 `DEVLOG_TRACKER_ROOT` 用它;否則用 `CLAUDE_PLUGIN_ROOT`;兩者都空就用含 `.claude-plugin/plugin.json` 的本 plugin 根目錄):
8
8
  ```bash
9
9
  PLUGIN_ROOT="${DEVLOG_TRACKER_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
10
- DEVLOG_PROJECT_DIR="$(pwd)" bash "${PLUGIN_ROOT}/core/scripts/start-devlog.sh"
10
+ DEVLOG_PROJECT_DIR="<專案根目錄絕對路徑,不要用 $(pwd) 重新推>" bash "${PLUGIN_ROOT}/core/scripts/start-devlog.sh"
11
11
  ```
12
12
  不要自己用手建 `.enabled` / `.checkpoint-state` / `.segment-state`。
13
13
  2. 若 stdout 有 `GITIGNORE_DEVLOG=no`:鄭重提醒——`.devlog/` 會寫入使用者原文(遮罩只覆蓋常見 token 前綴,不是通用掃密)。**強烈建議**把 `.devlog/` 加進專案 `.gitignore`。問要不要現在加。只有使用者明確說要,才在 `.gitignore` 末尾追加一行 `.devlog/`(檔案不存在就建立)。不要改其他行。若使用者拒絕,再警告一次「之後若不小心 commit,prompt/殘留密鑰可能進版控」,然後繼續步驟 3。
@@ -8,7 +8,7 @@ description: 查看這個專案 devlog 強制記錄是否開著、span / checkpo
8
8
 
9
9
  ```bash
10
10
  PLUGIN_ROOT="${DEVLOG_TRACKER_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
11
- DEVLOG_PROJECT_DIR="$(pwd)" bash "${PLUGIN_ROOT}/core/scripts/status-devlog.sh"
11
+ DEVLOG_PROJECT_DIR="<專案根目錄絕對路徑,不要用 $(pwd) 重新推>" bash "${PLUGIN_ROOT}/core/scripts/status-devlog.sh"
12
12
  ```
13
13
  ```
14
14
  把 stdout 翻譯成給人看的幾行(含 `LESSONS=yes/no`:Lessons Mode 開關狀態;`LESSONS_ADVISORY=<count>/<threshold>`:Lessons Mode 開著時,機制性訊號(工作區漂移不符、或
@@ -6,7 +6,7 @@ description: 把 devlog 產生成一份離線可開的 HTML 時間軸(.devlog/
6
6
 
7
7
  ```bash
8
8
  PLUGIN_ROOT="${DEVLOG_TRACKER_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
9
- DEVLOG_PROJECT_DIR="$(pwd)" bash "${PLUGIN_ROOT}/core/scripts/timeline-devlog.sh"
9
+ DEVLOG_PROJECT_DIR="<專案根目錄絕對路徑,不要用 $(pwd) 重新推>" bash "${PLUGIN_ROOT}/core/scripts/timeline-devlog.sh"
10
10
  ```
11
11
 
12
12
  使用者要看所有 branch 時加 `--all-branches`;要寫到別的位置時加 `--out <路徑>`。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devlog-tracker",
3
- "version": "0.33.1",
3
+ "version": "0.33.3",
4
4
  "description": "npx installer for devlog-tracker's Claude Code, Cursor and Codex adapters.",
5
5
  "bin": {
6
6
  "devlog-tracker": "bin/devlog-tracker.js"
@@ -139,14 +139,6 @@ Claude Code 目前沒有正式、穩定的方式讓 hook 知道「這一輪有
139
139
  算不出來)都明確接住、失敗就直接放行。這些腳本的職責是「檢查」,不該因為自己的臭蟲
140
140
  就意外把使用者的 session 卡死。
141
141
 
142
- 更新(Span Mode 之後):agentflow 的 Stop hook 會依「這一輪是不是還在進行中」
143
- 放寬檢查強度,這裡原本認為 Claude Code 原生的「一個使用者訊息 = 一輪」架構沒有
144
- 對應的地方可以搬這個設計過來。後來為了支援 `/loop`/`Workflow` 這類會被自動
145
- 排程反覆喚醒的長任務,加了上面的 Span Mode,算是這個設計的一個窄化版本——只在
146
- Claude 主動宣告「接下來會有一串自動續接」時才放寬,且用 tick 計數做安全閥,
147
- 不是像 agentflow 那樣泛用地判斷「這輪是否還在進行中」。一般互動式對話仍然是
148
- 完整的「一個訊息 = 一輪」強制模式,沒有變。
149
-
150
142
  ## 自動接續與 `/clear`
151
143
 
152
144
  這個 plugin 內建一個 SessionStart hook(`claude/hooks.json` + `core/scripts/session-start-devlog.sh`),
@@ -408,7 +400,7 @@ hook 會要求補一段。
408
400
 
409
401
  ## 壓縮歸檔:`/devlog-tracker:compact`
410
402
 
411
- 歸檔不再是自動觸發,而是使用者主動下 `/devlog-tracker:compact` 指令時才做(見 `commands/compact.md`)。
403
+ 歸檔只在使用者下 `/devlog-tracker:compact` 時做,不會自動觸發(見 `commands/compact.md`)。
412
404
  規則:
413
405
 
414
406
  - 保留:專案摘要(如果有)、最近 5 輪、所有還沒 `DONE`(`IN_PROGRESS`/`BLOCKED`/`INTERRUPTED`)的輪次
@@ -24,7 +24,7 @@
24
24
  **寫法**:跑(`PLUGIN_ROOT` 同其他指令):
25
25
 
26
26
  ```bash
27
- DEVLOG_PROJECT_DIR="$(pwd)" bash "${PLUGIN_ROOT}/core/scripts/lessons-append.sh" \
27
+ DEVLOG_PROJECT_DIR="<專案根目錄絕對路徑,不要用 $(pwd)>" bash "${PLUGIN_ROOT}/core/scripts/lessons-append.sh" \
28
28
  --topic "<主題 kebab-case slug,跟 keep 的 <name> 同一套正規化規則>" \
29
29
  --text "<自由散文,一段就好:卡在哪、怎麼解開、下次怎麼避免>"
30
30
  ```
@@ -52,7 +52,7 @@
52
52
  3. 用 Bash 執行:
53
53
 
54
54
  ```bash
55
- DEVLOG_PROJECT_DIR="$(pwd)" bash "${DEVLOG_TRACKER_ROOT:-${CLAUDE_PLUGIN_ROOT}}/core/scripts/await-open.sh"
55
+ DEVLOG_PROJECT_DIR="<專案根目錄絕對路徑,不要用 $(pwd)>" bash "${DEVLOG_TRACKER_ROOT:-${CLAUDE_PLUGIN_ROOT}}/core/scripts/await-open.sh"
56
56
  ```
57
57
 
58
58
  這會寫入 `.devlog/.awaiting-reply`,記住「下一則訊息大概是在回答這個
@@ -23,11 +23,19 @@
23
23
  ### Summary
24
24
  把 XXX 模組拆成 A/B 兩個檔案,測試全過。
25
25
 
26
+ ### Reply
27
+ 告訴使用者拆分完成、測試全過,還沒 commit。
28
+
26
29
  ### Handoff
27
30
  #### 決策
28
31
  拆成 A/B,理由是三處耦合都集中在同一個檔。
29
32
  #### 檔案
30
- 新增 a.ts、b.ts;刪除 xxx.ts。尚未 commit。
33
+ 尚未 commit:
34
+ 新增:a.ts, b.ts
35
+ 刪除:xxx.ts
36
+ #### 工作區
37
+ main @ a1b2c3d
38
+ 未提交:xxx.ts, a.ts, b.ts
31
39
  #### 現況
32
40
  拆分完成,測試全過。
33
41
 
@@ -35,7 +43,7 @@
35
43
  DONE
36
44
  `````
37
45
 
38
- 這個範例是 DONE 且沒有後續,所以沒有 `#### 工作區` 與 `#### 下一步`;這兩節只有 IN_PROGRESS/BLOCKED 才寫。
46
+ 這個範例是 DONE 且沒有後續,所以沒有 `#### 完成條件` 與 `#### 下一步`;「檔案」有內容,所以 `#### 工作區` 仍要寫(Stop 會核對)。
39
47
 
40
48
  **什麼時候該寫一個段落**:跟判斷 `Status: IN_PROGRESS` 用的同一套標準——「有意義的
41
49
  階段性結果」,不是照時間或工具呼叫次數機械觸發。短的、沒什麼階段可言的一輪,
@@ -52,4 +60,4 @@ dynamic workflow/subagent 的 PreToolUse 若帶非空 `agent_id`,此閥門
52
60
  `/devlog-tracker:segment-watch <時間長度>`(例如 `/devlog-tracker:segment-watch 5 分鐘`)
53
61
  調整,不用手改 `.devlog/.segment-state` 的 `max_silent_seconds`。
54
62
 
55
- 收尾時 Stop hook 仍會要求最後一個 Round 上看得到 `### Summary` 與 `### Handoff`。
63
+ 收尾時 Stop hook 仍會要求最後一個 Round 上看得到 `### Summary`、`### Reply` 與 `### Handoff`。
@@ -41,14 +41,14 @@
41
41
  devlog.md 完全不用動。一旦累積到門檻,Stop hook 會退回正常模式,**這一輪就
42
42
  會被要求寫東西才能結束**——看到這種擋下來的訊息,代表這個 span 的「安靜額度」
43
43
  用完了,寫點輕量的進度(不用完整 Round,一行都可以)就能讓它繼續運作。
44
- 前提是最後一個 Round 裡已經有 `### Summary` 與 `### Handoff`——一行是追加到那個 Round,不是新開一個缺標題的 Round。若這輪是新開的 Round,兩個標題都要有。
44
+ 前提是最後一個 Round 裡已經有 `### Summary`、`### Reply` 與 `### Handoff`——一行是追加到那個 Round,不是新開一個缺標題的 Round。若這輪是新開的 Round,三個標題都要有。
45
45
 
46
46
  ## 怎麼關掉一個 span
47
47
 
48
48
  整個 Ask 真的做完時:**開一個新的 Round**(不要回頭改寫當初開 span 那個
49
- Round),User Input 可以寫「(自動續接收尾,接續 Round 12)」;Summary 用 2–4 句
50
- 給人看這段自動化的結論;Handoff 依小節總結整段期間做了什麼(決策/檔案/工作區/現況/
51
- 下一步;`DONE` 省略工作區與下一步);Status 正常寫 `DONE`/`IN_PROGRESS`/`BLOCKED`;然後刪掉 `.devlog/.span-open`。
49
+ Round),User Input 可以寫「(自動續接收尾,接續 Round 12)」,其餘照 SKILL.md
50
+ 「每一輪的紀錄格式」完整收尾(Summary/Reply/Handoff/Status,Handoff 小節的
51
+ 必寫與省略規則相同),內容總結整段 span 做了什麼;然後刪掉 `.devlog/.span-open`。
52
52
 
53
53
  ## 已知限制:分辨不出「這是自動續接還是真人插話」
54
54