@kienntpixon/dieu-phoi 0.7.3 → 0.7.5

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/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # Changelog — @kienntpixon/dieu-phoi
2
2
 
3
+ ## 0.7.5 (2026-11-06)
4
+
5
+ Đi cùng skill 1.6.5. `CORE_VERSION` 0.7.5. Không đổi sink (`sheet/Code.gs`, `fixtures/` giữ nguyên).
6
+ **Sau khi cài:** `npm i -g @kienntpixon/dieu-phoi` + `dieu-phoi setup` + `dieu-phoi doctor`.
7
+
8
+ - **`wt clean --merged [--repo R] [--yes]`:** gỡ worktree có dấu và nhánh local khi nhánh đã vào HEAD checkout chính. Điều kiện: tuổi ≥ 1 giờ (worktree mới chưa commit luôn "đã merge"), verdict gần nhất của task không thuộc reject/fail/timeout/aborted, sạch, không agent sống. Dry-run mặc định; `git branch -d` (không force).
9
+ - **Nhắc sau nghiệm thu:** `verdict --root … accept` / `verdict --task … accept` của người dùng in một dòng số worktree đã merge của repo; `--clean-merged` gỡ luôn (như `wt clean --merged --yes`).
10
+ - **`wt add --base <ref>`:** tạo nhánh từ commit chọn được, sửa known issue 0.7.4 (trước đây luôn từ HEAD checkout chính). Ở mức cảnh báo 75% hoặc khi bị chặn trần, `wt add` gợi ý worktree của bước đã xong có thể tái dùng (sạch, không agent sống, verdict pass/accept); không tự dùng lại.
11
+ - **Knowledge delta, header `repo:`:** nhận cả dạng hiển thị `repo: <tên> (<tag>) — <dir>` (chép từ `knowledge get`) lẫn đường dẫn thô, LF/CRLF. Lỗi nay nói đúng nguyên nhân: tên ngắn không khớp kho nào / thư mục trong header không còn (worktree đã gỡ hoặc header sai) / đường dẫn không tồn tại.
12
+
13
+ ## 0.7.4 (2026-11-06)
14
+
15
+ Đi cùng skill 1.6.4. `CORE_VERSION` 0.7.4. Không đổi sink (`sheet/Code.gs` giữ nguyên).
16
+ **Sau khi cài:** `npm i -g @kienntpixon/dieu-phoi` + `dieu-phoi setup` (chép lại hook và agent `dp-*`) + `dieu-phoi doctor`.
17
+
18
+ - **Bỏ mode strict, `mode_suggest` và câu hỏi mode:** mode chỉ còn `fast|normal`. `strict` ở `--mode`, `mode --root … strict` hoặc `steps.json` → cảnh báo stderr, dùng normal, exit 0. Sự kiện, kế hoạch, dispatch cũ mang `strict` đọc là normal. `start`/`plan-table` không còn hỏi mode; `choose`/`state` không trả `mode_suggest*`; `spot` bỏ khỏi `verify_plan`.
19
+ - **Normal gộp verifier (quyết định Q1):** normal, score ≤ 4, không bước nào `depends_on` vào nó → `self+batch`: exec chạy test chọn lọc, một verifier gộp cuối nhóm chạy cả suite một lần, bước qua **không** `accept --auto`. Công tắc rollback: `profile.json` `"batch_verify_normal": false`. Dòng Mode của `plan-table` ghi `Kiểm (self+batch)` cho cả hai mode.
20
+ - **`plan-table` cảnh báo (không chặn `--approve`):** `TÁCH?` cho bước score ≥ 6 mà nhóm `task_type × tier` có tỉ lệ handoff ≥ 20% trên ≥ 10 task (JSON `split_warn`); `TIER↑` cho loại mechanical (`mechanical-edit`, `extract`, `search`, `test-write`) có override cao hơn tier `choose` sẽ chọn (JSON `tier_warn`). Thêm cột `$p50` đọc cùng ô thống kê với `stats`.
21
+ - **Tiến độ sớm:** brief A yêu cầu exec ghi mục `## Tiến độ` vào dp-out sau mỗi hạng mục, để bước bị handoff làm tiếp từ đúng chỗ.
22
+ - **Phạm vi test:** exec và verifier chỉ chạy file test đã đụng; full suite đúng một lần ở cổng phát hành. `knowledge-fresh`, `review2`, `fast-start` được làm cứng khỏi chập chờn dưới tải (timeout nới bằng env chỉ dành cho test).
23
+ - **Knowledge:** stale theo file cụ thể: file nhỏ có dòng đổi thật → STALE; glob, dòng version, CHANGELOG, dòng không nêu tên mục → drift (không tính stale). `knowledge review <id>` ghi `reviewed_sha` = HEAD; mục mới ghi chưa có dấu, nên không được coi là đã xem.
24
+ - **Delta:** brief chỉ yêu cầu delta khi điều học được không suy ra từ code, và bỏ qua knowledge STALE. `prune --delta-days N` (mặc định 30, 0 = tắt) xoá delta **bị reject**, chưa gộp, của run nhàn rỗi > N ngày; delta đã accept không bao giờ bị xoá. Dry-run mặc định, `--yes` mới xoá.
25
+ - **Sửa help:** mục `start` trong `dieu-phoi --help` không còn nói "mode: chưa chọn" hay hỏi mode.
26
+ - **Known issue (chưa sửa):** `wt add` bỏ qua commit gốc. Nhánh `dp/<task_id>` luôn được tạo bằng `git worktree add -b` từ HEAD của checkout chính, không có cờ chọn base; brief yêu cầu base khác thì exec phải tự chuyển sang commit đó trong worktree.
27
+
3
28
  ## 0.7.3 (2026-11-06)
4
29
 
5
30
  Tài nguyên máy (run jiptvo5g, theo hợp đồng 0.7.3): trần song song, trần worktree, thu dọn subagent. `CORE_VERSION` 0.7.3; đi cùng skill 1.6.3.
package/agents/dp-exec.md CHANGED
@@ -17,6 +17,11 @@ hooks:
17
17
  - type: command
18
18
  command: '__DP_HOOK__ --gate'
19
19
  timeout: 5
20
+ - matcher: "Bash|PowerShell"
21
+ hooks:
22
+ - type: command
23
+ command: '__DP_HOOK__ --gate-bash'
24
+ timeout: 5
20
25
  PostToolUseFailure:
21
26
  - matcher: "Agent|Task"
22
27
  hooks:
@@ -28,7 +33,7 @@ Bạn là agent thực thi (exec) của dieu-phoi. Brief ở tin nhắn đầu (
28
33
 
29
34
  Bàn giao qua file: ghi TOÀN BỘ kết quả vào `dp-out-<task_id>-exec-try<n>.md` trong run dir (đường dẫn brief chỉ định), rồi chỉ trả: đường dẫn file đó, dòng `STATUS:`, và ≤ 3 dòng ý chính. Không đặt tên file `report*` / `summary*` / `findings*` / `analysis*.md` — Claude Code chặn cứng Write các tên đó trong subagent. File dp-out/handoff mà brief trỏ tới là báo cáo chính thức: đọc thẳng, không cần xin thêm quyền.
30
35
 
31
- Repo đích và knowledge: dòng `repo:` của brief là repo ĐÍCH (có thể là repo con, khác cwd). Trước khi đọc code: `dieu-phoi knowledge list --repo <repo>` rồi `knowledge get <id|từ khoá> --repo <repo>` (ít nhất `build-test ports-resources` nếu có); mục STALE chỉ là gợi ý. Cấu trúc code: dùng codebase-memory-mcp khi repo đã có index (`list_projects`), không thì Grep/Glob — không tự index. MCP lỗi kết nối/không phản hồi/báo daemon khác version → Grep/Glob ngay, ghi một dòng `codebase-memory: unavailable (<lý do>)` trong dp-out, không thử lại. Brief có `worktree:` → chỉ sửa và chạy lệnh trong worktree đó, dùng cổng/tài nguyên riêng brief ghi, chỉ kill tiến trình do chính mình mở. Học được điều không suy ra từ code (lệnh test thật, cổng, bẫy) → ghi `<run>/knowledge-delta-<task_id>.md` (header `repo:`; `## +id` + `paths:` cho mục mới; sửa mục cũ `## id` + dòng `base:` chép từ `get`; ≤ 40 dòng/mục; không ghi giá trị secret); không tự `knowledge merge`.
36
+ Repo đích và knowledge: dòng `repo:` của brief là repo ĐÍCH (có thể là repo con, khác cwd). Trước khi đọc code: `dieu-phoi knowledge list --repo <repo>` rồi `knowledge get <id|từ khoá> --repo <repo>` (ít nhất `build-test ports-resources` nếu có); chỉ `get` mục không STALE, mục STALE chỉ là gợi ý. Cấu trúc code: dùng codebase-memory-mcp khi repo đã có index (`list_projects`), không thì Grep/Glob — không tự index. MCP lỗi kết nối/không phản hồi/báo daemon khác version → Grep/Glob ngay, ghi một dòng `codebase-memory: unavailable (<lý do>)` trong dp-out, không thử lại. Brief có `worktree:` → chỉ sửa và chạy lệnh trong worktree đó, dùng cổng/tài nguyên riêng brief ghi, chỉ kill tiến trình do chính mình mở. Chỉ khi học được điều không suy ra từ code (lệnh test thật, cổng, bẫy) → ghi `<run>/knowledge-delta-<task_id>.md` (header `repo:`; `## +id` + `paths:` cho mục mới; sửa mục cũ `## id` + dòng `base:` chép từ `get`; ≤ 40 dòng/mục; không ghi giá trị secret); không tự `knowledge merge`.
32
37
 
33
38
  Helper thế hệ 2 (tuỳ chọn, chỉ khi giúp giữ ngữ cảnh nhỏ): tối đa 4 agent `subagent_type: dp-helper`, `model` đặt rõ `haiku` hoặc `sonnet`, cho đúng hai loại việc — (a) đọc/quét code hoặc tài liệu rồi trả tóm tắt ≤ 15 dòng, (b) chạy test / Unity smoke rồi tóm tắt log. Dòng đầu prompt helper: `[dp:<type>|s<n>|<urgency>|try1|task=<id mới từ dieu-phoi new-id>|role=helper|parent=<task của bạn>]`. Hook từ chối mọi lần giao sai luật. Không giao helper sửa code.
34
39
 
@@ -12,6 +12,12 @@ hooks:
12
12
  - type: command
13
13
  command: '__DP_HOOK__ --watch'
14
14
  timeout: 5
15
+ PreToolUse:
16
+ - matcher: "Bash|PowerShell"
17
+ hooks:
18
+ - type: command
19
+ command: '__DP_HOOK__ --gate-bash'
20
+ timeout: 5
15
21
  ---
16
22
  Bạn là helper thế hệ 2 của dieu-phoi, do một agent exec giao (thẻ `[dp:...|role=helper|parent=...]`). Chỉ làm một trong hai việc: (a) đọc/quét code hoặc tài liệu được chỉ định rồi trả tóm tắt ≤ 15 dòng (đường dẫn + dòng + kết luận, không dán nguyên văn dài); (b) chạy test / Unity smoke được chỉ định rồi tóm tắt log (pass/fail, lỗi đầu tiên, đường dẫn log). Không sửa file, không giao việc tiếp. Câu trả lời cuối ≤ 15 dòng, trả bằng chữ cho dp-exec cha (helper không ghi file).
17
23
 
@@ -12,6 +12,12 @@ hooks:
12
12
  - type: command
13
13
  command: '__DP_HOOK__ --watch'
14
14
  timeout: 5
15
+ PreToolUse:
16
+ - matcher: "Bash|PowerShell"
17
+ hooks:
18
+ - type: command
19
+ command: '__DP_HOOK__ --gate-bash'
20
+ timeout: 5
15
21
  ---
16
22
  Bạn là scout/planner của dieu-phoi: khảo sát (code, tài liệu, dữ liệu) theo brief ở tin nhắn đầu (thẻ `[dp:...|role=plan]`) và trả về kế hoạch/câu hỏi đúng định dạng brief. Không sửa file của dự án; Write chỉ dùng để ghi báo cáo/kế hoạch vào run dir.
17
23
 
@@ -19,7 +25,7 @@ Bạn là scout/planner của dieu-phoi: khảo sát (code, tài liệu, dữ li
19
25
 
20
26
  Bàn giao qua file: ghi TOÀN BỘ kết quả vào `dp-out-<task_id>-plan-try<n>.md` trong run dir (đường dẫn brief chỉ định), rồi chỉ trả: đường dẫn file đó, dòng `STATUS:`, và ≤ 3 dòng ý chính. Không đặt tên file `report*` / `summary*` / `findings*` / `analysis*.md` — Claude Code chặn cứng Write các tên đó trong subagent. File dp-out/handoff mà brief trỏ tới là báo cáo chính thức: đọc thẳng, không cần xin thêm quyền.
21
27
 
22
- Repo đích và knowledge: `repo:` trong prompt là repo ĐÍCH (phiên ở repo cha làm việc trên repo con → repo con). Bắt đầu bằng `dieu-phoi knowledge list --repo <repo>` + `knowledge get <id|từ khoá> --repo <repo>` (`--follow` cho phần chép từ repo cha); chưa có kho → ghi vào NOTES. Cấu trúc code: codebase-memory-mcp khi repo đã có index (`list_projects`), không thì Grep/Glob — không tự index. MCP lỗi kết nối/không phản hồi/báo daemon khác version → Grep/Glob ngay, ghi một dòng `codebase-memory: unavailable (<lý do>)` trong dp-out, không thử lại. Bước sửa code chạy song song cùng repo → ghi cần worktree + cổng riêng. Điều không suy ra từ code → `<run>/knowledge-delta-<task_id>.md` (header `repo:`, `## +id` + `paths:`), không tự merge.
28
+ Repo đích và knowledge: `repo:` trong prompt là repo ĐÍCH (phiên ở repo cha làm việc trên repo con → repo con). Bắt đầu bằng `dieu-phoi knowledge list --repo <repo>` + `knowledge get <id|từ khoá> --repo <repo>` (`--follow` cho phần chép từ repo cha); chưa có kho → ghi vào NOTES. Cấu trúc code: codebase-memory-mcp khi repo đã có index (`list_projects`), không thì Grep/Glob — không tự index. MCP lỗi kết nối/không phản hồi/báo daemon khác version → Grep/Glob ngay, ghi một dòng `codebase-memory: unavailable (<lý do>)` trong dp-out, không thử lại. Bước sửa code chạy song song cùng repo → ghi cần worktree + cổng riêng. Chỉ khi có điều không suy ra từ code → `<run>/knowledge-delta-<task_id>.md` (header `repo:`, `## +id` + `paths:`), không tự merge.
23
29
 
24
30
  Trước STATUS/VERDICT: dừng mọi Bash/PowerShell `run_in_background` và Monitor bạn đã mở (TaskStop), chờ helper đã giao trả xong; không dừng được → ghi `LEFTOVER: <id/lệnh>` trong dp-out.
25
31
 
@@ -12,6 +12,12 @@ hooks:
12
12
  - type: command
13
13
  command: '__DP_HOOK__ --watch'
14
14
  timeout: 5
15
+ PreToolUse:
16
+ - matcher: "Bash|PowerShell"
17
+ hooks:
18
+ - type: command
19
+ command: '__DP_HOOK__ --gate-bash'
20
+ timeout: 5
15
21
  ---
16
22
  Bạn là agent kiểm chứng (verify) của dieu-phoi: kiểm tra độc lập kết quả của bước exec theo brief ở tin nhắn đầu (thẻ `[dp:...|role=verify]`). Chỉ đọc và chạy lệnh kiểm tra (test, lint, build); không sửa code của dự án. Ghi báo cáo vào run dir (Write chỉ dùng cho báo cáo) và trả về verdict ngắn đúng định dạng brief.
17
23
 
package/bin/dieu-phoi.cjs CHANGED
@@ -18,12 +18,11 @@ Cách dùng: dieu-phoi <lệnh> [tuỳ chọn]
18
18
  kiểm hook, node, config, sink (sink lấy từ bộ nhớ đệm 24 giờ; --net kiểm trực tiếp) và
19
19
  codebase-memory-mcp (khuyến nghị: cài/MCP/index của repo; --cbm hoặc --net mới chạy \`daemon status\` ~3 s,
20
20
  kết quả nhớ 10 phút; --net còn so bản mới nhất)
21
- start [--mode fast|normal|strict] [--json]
21
+ start [--mode fast|normal] [--json]
22
22
  khởi động cổng 1 trong một lệnh (~150 ms, không gọi mạng): kiểm cục bộ, task_id gốc,
23
23
  tạo run dir, đường dẫn brief scout — dùng khi hook UserPromptSubmit không chạy;
24
- không có --mode thì ghi "mode: chưa chọn" (mặc định normal); chỉ hỏi người dùng ở cổng 1
25
- khi plan-table báo ≥ 4 bước s≤6
26
- mode --root <root_task_id> [fast|normal|strict] [--reason R] [--session S] [--json]
24
+ không có --mode thì mặc định normal (0.7.4: không hỏi mode ở cổng 1)
25
+ mode --root <root_task_id> [fast|normal] [--reason R] [--session S] [--json]
27
26
  xem/đổi mode của một yêu cầu (một sự kiện mỗi lần đổi, cục bộ); bước chưa giao áp mode mới,
28
27
  bước đã giao giữ mode lúc giao; không bao giờ tự đổi
29
28
  verdict <agent_id|last> <pass|fail|timeout|aborted> [--verify tests|lint|review|judgment|self|none] [--reason short-kebab]
@@ -36,10 +35,11 @@ Cách dùng: dieu-phoi <lệnh> [tuỳ chọn]
36
35
  verdict --root <root_task_id> accept [--steps a,b]
37
36
  người dùng nhận mọi bước đã giao exec của kế hoạch đã duyệt chưa có verdict người dùng
38
37
  accept (--task/--root) tự gộp knowledge-delta-<task_id>*.md của run vào kho (--no-knowledge: bỏ)
38
+ accept của người dùng nhắc số worktree đã merge của repo (một dòng); --clean-merged: gỡ luôn (wt clean --merged --yes)
39
39
  discard --task <task_id> [--reason R]
40
40
  loại một task nhầm khỏi thống kê/choose/state (ghi sự kiện discard, không sửa log);
41
41
  gỡ worktree có dấu của task nếu sạch (còn thay đổi thì giữ và báo)
42
- wt add --task <task_id> [--repo R] [--path D] [--branch B] [--force] [--deps auto|link|install|none] [--deps-path D]
42
+ wt add --task <task_id> [--repo R] [--path D] [--branch B] [--base REF] [--force] [--deps auto|link|install|none] [--deps-path D]
43
43
  tạo worktree cho một bước: <cha repo>/<tên repo>-wt-<task_id> trên nhánh dp/<task_id>,
44
44
  có dấu dieu-phoi (điều phối viên dùng lệnh này, không git worktree add tay).
45
45
  Repo đủ max_worktrees_repo (8; đếm cả checkout chính) thì từ chối kèm ứng viên dọn; --force vượt trần.
@@ -49,6 +49,9 @@ Cách dùng: dieu-phoi <lệnh> [tuỳ chọn]
49
49
  wt clean [--repo R] [--stale-days N] [--yes]
50
50
  liệt kê worktree có dấu mà task đã nghiệm thu / bị loại, thư mục đã mất, hoặc sạch + nhánh đã merge
51
51
  + cũ ≥ N ngày (mặc định wt_stale_days 7); mặc định dry-run, --yes mới gỡ (còn thay đổi luôn giữ; nhánh giữ nguyên)
52
+ wt clean --merged [--repo R] [--yes]
53
+ gỡ worktree có dấu mà nhánh đã vào HEAD checkout chính, có verdict (không reject/fail), tuổi ≥ 1 giờ,
54
+ không agent sống, sạch; rồi git branch -d nhánh. Dry-run mặc định; không đụng checkout chính / worktree không dấu
52
55
  wt list [--repo R] [--all] [--json]
53
56
  bảng worktree có dấu: task, tuổi, sạch/bẩn, node_modules (link|dir|none), deps của dấu; --all thêm worktree không dấu (chỉ báo)
54
57
  steer <agent_id> --kind minor|plan|redirect [--reason R]
@@ -57,11 +60,11 @@ Cách dùng: dieu-phoi <lệnh> [tuỳ chọn]
57
60
  stats [--type T] [--json]
58
61
  bảng task_type × model/effort: n, accept%, agent_pass%, chi phí/thời gian (TB, p50, p75), steer
59
62
  choose --type T --score N [--urgency relaxed|normal|urgent] [--reversible y|n]
60
- [--verifiable y|n] [--publish y|n] [--dependents y|n] [--mode fast|normal|strict]
63
+ [--verifiable y|n] [--publish y|n] [--dependents y|n] [--mode fast|normal]
61
64
  [--role exec|verify|plan|helper] [--task ID]
62
65
  [--override model/effort (cần --task) | --approved model/effort] [--skill-dir P] [--seed S] [--json]
63
66
  đề xuất model + effort, lý do, action (dispatch|ask_user), ước tính chi phí/thời gian,
64
- verify_plan (independent-blocking|independent-nonblocking|self+batch|spot) theo mode
67
+ verify_plan (independent-blocking|independent-nonblocking|self+batch) theo mode
65
68
  (--mode mặc định: mode của root của --task, rồi normal)
66
69
  ctx [--session <id>] [--json]
67
70
  context + chi phí của phiên điều phối (mặc định $CLAUDE_CODE_SESSION_ID) so với trần mềm
@@ -82,11 +85,12 @@ Cách dùng: dieu-phoi <lệnh> [tuỳ chọn]
82
85
  in task_id mới hợp lệ (8 ký tự a-z0-9), mỗi dòng một id — không tự bịa id
83
86
  sync đẩy bản ghi chưa đồng bộ lên sink
84
87
  retro [--json] tóm tắt cho vòng retro (không chứa nội dung)
85
- prune --after-retro <file retro> [--yes] [--session <id>] [--force]
88
+ prune --after-retro <file retro> [--yes] [--delta-days N] [--session <id>] [--force]
89
+ prune --delta-days N [--yes] [--json] (chỉ dọn delta đã reject của run nhàn rỗi)
86
90
  dọn sau retro: run dir đã nghiệm thu (giữ retro-*.md + dp-out exec/verify cuối), plan hỏng,
87
91
  events cũ → data/archive/*.jsonl.gz (không xoá event). Mặc định dry-run; --yes mới thực hiện
88
92
  (từ chối nếu phiên khác có event trong 15 phút gần nhất, trừ khi --force)
89
- knowledge path|rekey|list|get|merge|link|status|bootstrap
93
+ knowledge path|rekey|list|get|merge|link|status|review|bootstrap
90
94
  kho knowledge theo project (mọi worktree/clone của một repo dùng chung): tra mục bằng get/list,
91
95
  ghi chỉ qua merge --run <id> (delta của agent); knowledge --help
92
96
  profile base --save <dir> | apply --base <dir> [--lessons F] [--profile F] [--dry-run]