@kienntpixon/dieu-phoi 0.6.0 → 0.7.0

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,74 @@
1
1
  # Changelog — @kienntpixon/dieu-phoi
2
2
 
3
+ ## 0.7.0 (2026-10-23)
4
+
5
+ `CORE_VERSION` 0.7.0; đi cùng skill 1.6.0. Chế độ `fast | normal | strict` theo yêu cầu (nhánh `fast-mode`, kế hoạch hzgqonzr; egm0w7mx, ue15wumm, d1m3rg7s). Sự kiện `mode` chỉ ở máy, không gửi sink. `sheet/Code.gs` ĐỔI ở phần dữ liệu học fast (d1m3rg7s): **deploy Apps Script trước khi phát hành CLI** (sink cũ đọc `by=auto` thành verdict agent).
6
+
7
+ - **Mode theo yêu cầu (root_task_id)**: `start --mode fast|normal|strict` và lệnh mới `dieu-phoi mode --root <id> [mode] [--reason R] [--session S]`
8
+ (không có giá trị = xem). Mỗi lần đổi ghi một sự kiện `kind=mode` cục bộ (`runSync` bỏ qua kind này); cùng mode thì không ghi. Bước đã giao giữ
9
+ mode lúc giao (`dispatch.mode`), bước chưa giao áp mode mới; thứ tự: lần giao exec đầu > `mode` của bước trong kế hoạch > mode root > normal.
10
+ Không có logic tự đổi mode. `start` (text) và khối hook khởi động luôn in dòng nhắc HỎI người dùng chọn mode (`--json`: `mode:null`).
11
+ - **`choose` trả `verify_plan`** (`independent-blocking | independent-nonblocking | self+batch | spot`) cùng `verify_reason`, `verify_floor`,
12
+ `test_scope` (`selective|full`), `mode`, `mode_source`; thêm `--mode`, `--publish`, `--dependents`. Sàn an toàn (reversible=n, publish,
13
+ verifiable=n, s>=9) xét trước và thắng ở mọi mode. fast: s<=6 → `self+batch` (test chọn lọc, không verifier riêng, một verify gộp);
14
+ s7-8 → `independent-nonblocking` (blocking nếu có bước phụ thuộc); strict: 1/3 `spot`, luôn chạy cả suite.
15
+ - **`verdict ... --verify self`** hợp lệ (exec tự kiểm).
16
+ - **`plan-table`**: file là mảng (như cũ) hoặc `{"mode":…,"steps":[…]}`, bước có thể ghi đè `mode`/`publish`; thêm cột **Kiểm** (cuối bảng),
17
+ dòng `**Mode:**` và "bỏ N verifier riêng, 1 verify gộp"; cờ `--mode`; `--approve` ghi sự kiện mode (source plan) khi mode hiệu lực khác
18
+ mode hiện tại của root.
19
+ - **`state`** dựng lại mode: `modes[]` + `task.mode` (--json), dòng "Mode (theo yêu cầu…)" (text).
20
+ - Test: `test/mode.test.cjs` (8 ca); cập nhật kỳ vọng cũ cho khối `start` và khoá `state --json`.
21
+ - **Gợi ý quay về normal, không tự đổi** (task ue15wumm): khi root đang fast, `choose` (exec) và `state` trả `mode_suggest:"normal"` +
22
+ `mode_suggest_reason` (bản chữ: dòng `GỢI Ý mode: … hỏi người dùng … KHÔNG tự đổi mode`) khi có verdict fail `batch-verify`, reject chất
23
+ lượng (từ sự kiện mode mới nhất của root), hoặc ≥ 15% fail trong 10 bước fast gần nhất (cần ≥ 5 bước). Không ghi sự kiện mode nào.
24
+ - **`complete.test_s`** (+ `test_runs`, `full_suite_runs`, `test_s_source`): hook SubagentStop đo thời gian lệnh test từ transcript subagent
25
+ (tool_use Bash/PowerShell → tool_result), không có thì đọc dòng `TEST_S:` trong dp-out; lệnh nền chỉ đếm.
26
+ - **`stats`/`retro` tách theo mode** (`modes` trong `--json`, bảng/dòng "Theo mode" ở bản chữ): catch rate, reject, phút verify, test_s,
27
+ số lần chạy cả suite. Hàm mới `aggregate.modeSummary` (ngoài parity CLI ↔ sink).
28
+ - Test: `test/mode-suggest.test.cjs` (7 ca).
29
+ - **Dữ liệu học của fast (task d1m3rg7s)**: verdict `--verify self` không vào `agent_pass_rate` / verdict agent đầu (`first_outcome`)
30
+ nhưng vẫn là kết quả leo thang; số phụ theo ô `n_self`, `self_pass`, `auto_accept`, `auto_overturned`, note "ít bằng chứng" khi
31
+ self chiếm > 50% verdict của ô. Verifier gộp ghi `verdict <exec_agent> fail|pass --verify tests --reason batch-verify`.
32
+ - **`verdict --task <id> accept --auto`**: nghiệm thu tự động (`by=auto`, `verify=tests`, round null) — chỉ accept, chỉ task mode fast,
33
+ chưa có verdict người dùng, score exec ≤ 6 nếu có; `reject --auto`, `--root … --auto`, `--round/--cause` kèm `--auto` bị từ chối.
34
+ Verdict người dùng sau đó thắng; reject sau auto accept đếm `auto_overturned`. `retro` totals thêm `self_verdicts`, `auto_accept`,
35
+ `auto_overturned` + dòng "Fast: …".
36
+ - **`sheet/Code.gs`** cùng logic (normalizeVerdict_ giữ `auto`, firstOutcome bỏ self, số phụ trên) — parity fixture +ptask201–205.
37
+ - Test: `test/fast-learning.test.cjs` (4 ca).
38
+
39
+ ## 0.6.1 (2026-10-22)
40
+
41
+ `CORE_VERSION` 0.6.1; đi cùng skill 1.5.1. codebase-memory-mcp là **khuyến nghị, không bắt buộc** (nhánh `cbm-support`, task 7s6mouxg). `sheet/` không đổi, không cần deploy lại `Code.gs`.
42
+
43
+ - **`doctor` kiểm codebase-memory-mcp** (module mới `lib/cbm.cjs`; mọi mục tối đa CẢNH BÁO, không bao giờ LỖI):
44
+ `codebase-memory` — binary (đăng ký MCP → PATH → `~/.local/bin`, `%LOCALAPPDATA%/Programs/codebase-memory-mcp`), `--version`,
45
+ đăng ký MCP trong Claude Code (user/local trong `.claude.json` — `$CLAUDE_CONFIG_DIR/.claude.json` hoặc `~/.claude.json` —
46
+ và project `.mcp.json`); thiếu → lệnh cài `dieu-phoi setup --with-codebase-memory`, chưa đăng ký → lệnh `claude mcp add --scope user`.
47
+ `cbm-version` (chỉ `--net`, GitHub API, timeout 6 s) so với bản mới nhất. `cbm-daemon` đọc `daemon status` (~3 s, timeout 5 s,
48
+ chạy song song với các kiểm khác): daemon khác version đang chạy → cảnh báo kèm pid các phiên giữ nó và cách xử lý.
49
+ `cbm-index` — repo cwd/`--repo` đã index chưa, đọc thư mục cache (`$CBM_CACHE_DIR` hoặc `~/.cache/codebase-memory-mcp/<project>.db`,
50
+ so tên lỏng), không spawn `cli list_projects` (~13 s, và lỗi khi daemon lệch version); worktree chưa index thì báo repo chính.
51
+ - **`setup --with-codebase-memory [--force] [--cbm-dir D]`** (tuỳ chọn, không mặc định): tải `checksums.txt` + asset của
52
+ `DeusData/codebase-memory-mcp` `releases/latest` (windows-amd64/arm64 `.zip`, darwin `.tar.gz`, linux `-portable.tar.gz`),
53
+ kiểm sha256 (lệch → không cài gì), giải nén bằng `tar` (Windows: `System32\tar.exe`), chạy thử `--version`, cài binary và đăng ký
54
+ MCP user scope bằng `claude mcp add --scope user codebase-memory-mcp -- <binary>` (không có `claude` → in lệnh để tự chạy).
55
+ Đã có binary/đăng ký → giữ nguyên trừ khi `--force`; bản cũ đổi tên `<binary>.bak-dieu-phoi-<thời gian>` (đổi tên được cả khi exe
56
+ đang chạy trên Windows), copy lỗi thì khôi phục. Cài lỗi → exit 1 nhưng phần setup dieu-phoi vẫn xong.
57
+ - Agent `dp-exec/dp-scout/dp-verify/dp-helper`: MCP lỗi kết nối/không phản hồi/daemon khác version → Grep/Glob ngay, ghi một dòng
58
+ `codebase-memory: unavailable (<lý do>)`, không thử lại (chạy lại `dieu-phoi setup` để cập nhật file agent).
59
+ - **Sửa theo review (task 0kgiz68m)**:
60
+ - `doctor` thường trở lại ~0,5 s: `daemon status` (~2,7 s) chỉ chạy với `--cbm` hoặc `--net`; không có cờ thì dùng kết quả nhớ
61
+ 10 phút (`data/cbm-daemon.json`, khoá theo đường dẫn + version binary, không lưu timeout) hoặc ghi "chưa kiểm — `doctor --cbm`".
62
+ - `DIEU_PHOI_CBM_BASE_URL` khác nguồn chính thức → từ chối kèm cảnh báo (sha256 lấy cùng nguồn nên không còn bảo đảm), trừ khi có
63
+ cờ mới `--allow-custom-source` (khi đó vẫn ghi CẢNH BÁO vào ghi chú).
64
+ - `--force`: nhớ đăng ký cũ (command/args/env) trước `claude mcp remove`; `mcp add` lỗi → đăng ký lại bản cũ (`mcp: restored`);
65
+ khôi phục cũng lỗi → ghi tên, command, tên biến env (không bao giờ in giá trị) để tự thêm lại.
66
+ - `doctor --net`: timeout kiểm sink 8 s → 20 s (Apps Script đo thực 8,3–14,6 s; có từ trước, không do nhánh này). Hết giờ = "chậm/không
67
+ xác định" (CẢNH BÁO, `sink-check.json` có `timeout: true`, không tính là lỗi cứng ở `doctor`/`start`/hook; `doctor` thường không đợi lại 20 s
68
+ trong 1 giờ). Lỗi kết nối/HTTP thật vẫn là lỗi cứng như cũ.
69
+ - Test mới `test/cbm.test.cjs` (21 ca, không gọi mạng: download/extract/`claude` mock, binary giả `.cjs`, server HTTP cục bộ cho
70
+ `--net`). `_fixtures.cjs` đặt `DIEU_PHOI_CBM_BIN=none` + `CBM_CACHE_DIR` tạm để doctor trong test không chạm binary/cache thật.
71
+
3
72
  ## 0.6.0 (2026-10-22)
4
73
 
5
74
  `CORE_VERSION` 0.6.0; đi cùng skill 1.5.0. Gộp nhánh `s5-parallel-safety` và `knowledge` (kế hoạch 464k2t30). `sheet/` không đổi, không cần deploy lại `Code.gs`.
package/README.md CHANGED
@@ -33,14 +33,23 @@ Không cài toàn cục được thì dùng `npx -y @kienntpixon/dieu-phoi <lệ
33
33
 
34
34
  Khởi động lại Claude Code sau khi cài. Kiểm tra bằng `dieu-phoi doctor` (chạy thử chính lệnh hook đã đăng ký).
35
35
 
36
+ **codebase-memory-mcp (khuyến nghị, không bắt buộc).** `setup --with-codebase-memory` (không mặc định) tải bản phát hành
37
+ chính thức từ GitHub `DeusData/codebase-memory-mcp` (`releases/latest`), kiểm sha256 với `checksums.txt`, chạy thử
38
+ `--version`, cài binary (Windows `%LOCALAPPDATA%\Programs\codebase-memory-mcp\`, macOS/Linux `~/.local/bin/`, hoặc
39
+ `--cbm-dir`) và đăng ký MCP ở user scope bằng `claude mcp add --scope user codebase-memory-mcp -- <binary>` (không có
40
+ lệnh `claude` thì in lệnh để tự chạy). Đã có binary/đăng ký → giữ nguyên; `--force` cài lại, bản cũ đổi tên
41
+ `<binary>.bak-dieu-phoi-<thời gian>`. `doctor` thêm các mục `codebase-memory`, `cbm-version` (chỉ với `--net`),
42
+ `cbm-daemon`, `cbm-index` — tất cả tối đa là CẢNH BÁO; `daemon status` mất ~3 s (timeout 5 s, chạy song song với kiểm
43
+ khác).
44
+
36
45
  `CLAUDE_CONFIG_DIR` được tôn trọng (thay cho `~/.claude`). Thử trên thư mục tạm: thêm `--claude-dir <thư mục>` vào mọi lệnh.
37
46
 
38
47
  ## Lệnh
39
48
 
40
49
  | Lệnh | Việc |
41
50
  |---|---|
42
- | `setup [--dept D] [--sink-url U --sink-token T] [--skill-dir P]` | cài hook, đăng ký `PostToolUse(Agent)` + `SubagentStop` + `SessionStart(compact)` + `UserPromptSubmit` trong settings, ghi config; tạo thư mục báo cáo `~/.dieu-phoi/runs` (env `DIEU_PHOI_RUNS_DIR` để đổi; ngoài `~/.claude` vì đó là protected path) và thêm quyền `Read`/`Edit(~/.dieu-phoi/runs/**)` + `additionalDirectories` để subagent nền ghi được báo cáo (không nhân đôi, có sao lưu); gỡ luật cũ của bản dev cho `~/.claude/dieu-phoi/runs` |
43
- | `doctor [--net] [--json]` | kiểm node, hook, settings (+ `prompt-hook`), config, profile, sink (từ bộ nhớ đệm 24 giờ; `--net` kiểm trực tiếp); context phiên điều phối hiện tại nếu đo được (`orch-ctx`); thư mục `~/.dieu-phoi/runs` + quyền của nó, không còn luật cũ (`run-permissions`); `--json` có `runs_dir` |
51
+ | `setup [--dept D] [--sink-url U --sink-token T] [--skill-dir P] [--with-codebase-memory [--force] [--cbm-dir D]]` | (`--with-codebase-memory`: cài + đăng ký codebase-memory-mcp, xem mục Cài đặt) cài hook, đăng ký `PostToolUse(Agent)` + `SubagentStop` + `SessionStart(compact)` + `UserPromptSubmit` trong settings, ghi config; tạo thư mục báo cáo `~/.dieu-phoi/runs` (env `DIEU_PHOI_RUNS_DIR` để đổi; ngoài `~/.claude` vì đó là protected path) và thêm quyền `Read`/`Edit(~/.dieu-phoi/runs/**)` + `additionalDirectories` để subagent nền ghi được báo cáo (không nhân đôi, có sao lưu); gỡ luật cũ của bản dev cho `~/.claude/dieu-phoi/runs` |
52
+ | `doctor [--net] [--repo P] [--json]` | kiểm codebase-memory-mcp (khuyến nghị: cài, MCP, daemon khác version, index của repo; `--net` so bản mới nhất), node, hook, settings (+ `prompt-hook`), config, profile, sink (từ bộ nhớ đệm 24 giờ; `--net` kiểm trực tiếp); context phiên điều phối hiện tại nếu đo được (`orch-ctx`); thư mục `~/.dieu-phoi/runs` + quyền của nó, không còn luật cũ (`run-permissions`); `--json` có `runs_dir` |
44
53
  | `verdict <agent_id\|last> <pass\|fail\|timeout\|aborted> [--verify tests\|lint\|review\|judgment\|none] [--reason short-kebab]` | nghiệm thu tầng agent (`by=agent`). `aborted` (0.4.0) = dừng vì usage limit/quota: không pass/fail, không leo thang; hook tự ghi khi bắt được. `last` = agent hoàn thành gần nhất; từ chối (liệt kê ứng viên) nếu trong 30 phút qua có > 1 agent xong mà chưa có verdict. Được viết tắt agent_id nếu không trùng |
45
54
  | `verdict --task <task_id> <accept\|reject> [--cause quality\|scope] [--round n] [--reason R]` | nghiệm thu của **người dùng** (`by=user`). `reject` bắt buộc `--cause`: `quality` = làm sai (tính là fail), `scope` = yêu cầu đổi/thiếu (không tính cho model). `--round` mặc định tự tăng |
46
55
  | `verdict --root <root_task_id> accept [--steps a,b]` | (0.4.0) người dùng nhận một lúc mọi bước đã giao exec của kế hoạch đã duyệt mà chưa có verdict người dùng. (0.6.0) `accept` tự gộp knowledge: `--task T` gộp `knowledge-delta-T*.md` của run gốc; `--root R` gộp delta của R + các bước vừa accept + file không mang task_id. Xung đột/từ chối không đổi verdict (exit 0): output in `XUNG ĐỘT` + lệnh `knowledge merge` để chạy lại. `--root` mà mọi bước đã có verdict người dùng: vẫn gộp delta của R + file không thẻ, exit theo kết quả gộp (không có delta nào → lỗi "không có bước nào cần nghiệm thu"). `reject` không gộp; `--no-knowledge` bỏ qua |
package/agents/dp-exec.md CHANGED
@@ -28,7 +28,7 @@ Bạn là agent thực thi (exec) của dieu-phoi. Brief ở tin nhắn đầu (
28
28
 
29
29
  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
30
 
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. 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`.
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`.
32
32
 
33
33
  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
34
 
@@ -17,6 +17,7 @@ Bạn là helper thế hệ 2 của dieu-phoi, do một agent exec giao (thẻ `
17
17
 
18
18
  Giữ ngữ cảnh nhỏ (mỗi lượt gửi lại toàn bộ ngữ cảnh — số lượt mới là thứ làm phình):
19
19
  - Grep/Glob trước, rồi Read đúng đoạn cần bằng offset/limit; không cat/sed -n cả file qua Bash.
20
+ - codebase-memory-mcp lỗi kết nối/không phản hồi → Grep/Glob ngay, ghi một dòng `codebase-memory: unavailable (<lý do>)` trong tóm tắt, không thử lại.
20
21
  - Không đọc lại file đã đọc — ghi chú điều cần nhớ ngay khi đọc.
21
22
  - Lọc output lệnh dài (`| tail -n 40`, `| grep ...`); không dump log/JSON thô.
22
23
  - Mỗi ảnh/screenshot xem một lần, ghi nhận xét thành chữ, không mở lại.
@@ -19,7 +19,7 @@ Bạn là scout/planner của dieu-phoi: khảo sát (code, tài liệu, dữ li
19
19
 
20
20
  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
21
 
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. 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.
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.
23
23
 
24
24
  Giữ ngữ cảnh nhỏ (mỗi lượt gửi lại toàn bộ ngữ cảnh — số lượt mới là thứ làm phình):
25
25
  - Grep/Glob trước, rồi Read đúng đoạn cần bằng offset/limit; không cat/sed -n cả file qua Bash.
@@ -23,6 +23,7 @@ Repo đích và knowledge: chạy lệnh trong `worktree:` của bước nếu b
23
23
 
24
24
  Giữ ngữ cảnh nhỏ (mỗi lượt gửi lại toàn bộ ngữ cảnh — số lượt mới là thứ làm phình):
25
25
  - Grep/Glob trước, rồi Read đúng đoạn cần bằng offset/limit; không cat/sed -n cả file qua Bash.
26
+ - codebase-memory-mcp lỗi kết nối/không phản hồi → Grep/Glob ngay, ghi một dòng `codebase-memory: unavailable (<lý do>)` trong dp-out, không thử lại.
26
27
  - Không đọc lại file đã đọc — ghi chú điều cần nhớ ngay khi đọc.
27
28
  - Lọc output lệnh dài (`| tail -n 40`, `| grep ...`); không dump log/JSON thô.
28
29
  - Mỗi ảnh/screenshot xem một lần, ghi nhận xét thành chữ, không mở lại.
package/bin/dieu-phoi.cjs CHANGED
@@ -10,13 +10,28 @@ Cách dùng: dieu-phoi <lệnh> [tuỳ chọn]
10
10
 
11
11
  setup [--dept D] [--sink-url U --sink-token T] [--skill-dir P]
12
12
  cài hook vào ~/.claude/dieu-phoi/bin, đăng ký trong settings.json
13
- doctor [--net] kiểm hook, node, config, sink (sink lấy từ bộ nhớ đệm 24 giờ; --net kiểm trực tiếp)
14
- start [--json] 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,
15
- tạo run dir, đường dẫn brief scout — dùng khi hook UserPromptSubmit không chạy
16
- verdict <agent_id|last> <pass|fail|timeout|aborted> [--verify tests|lint|review|judgment|none] [--reason short-kebab]
13
+ setup --with-codebase-memory [--force] [--cbm-dir D] [--allow-custom-source]
14
+ thêm: tải bản phát hành chính thức codebase-memory-mcp (kiểm sha256), cài binary, đăng ký
15
+ MCP user scope (\`claude mcp add\`); đã có thì giữ nguyên trừ khi --force (bản cũ đổi tên .bak-dieu-phoi-*;
16
+ đăng ký cũ được khôi phục nếu đăng ký mới lỗi). DIEU_PHOI_CBM_BASE_URL (nguồn tải khác) cần --allow-custom-source
17
+ doctor [--net] [--cbm] [--repo P]
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
+ 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
+ kết quả nhớ 10 phút; --net còn so bản mới nhất)
21
+ start [--mode fast|normal|strict] [--json]
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
+ tạo run dir, đường dẫn brief scout — dùng khi hook UserPromptSubmit không chạy;
24
+ không có --mode thì in dòng nhắc HỎI người dùng chọn mode (mặc định normal)
25
+ mode --root <root_task_id> [fast|normal|strict] [--reason R] [--session S] [--json]
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,
27
+ bước đã giao giữ mode lúc giao; không bao giờ tự đổi
28
+ verdict <agent_id|last> <pass|fail|timeout|aborted> [--verify tests|lint|review|judgment|self|none] [--reason short-kebab]
17
29
  nghiệm thu tầng agent (by=agent); aborted = dừng vì hết quota/usage limit (không phải fail)
18
30
  verdict --task <task_id> <accept|reject> [--cause quality|scope] [--round n] [--reason R]
19
31
  nghiệm thu của người dùng (by=user); reject bắt buộc --cause
32
+ verdict --task <task_id> accept --auto [--reason R]
33
+ tự nghiệm thu bước fast (score ≤ 6) sau verifier gộp (by=auto): không vào accept_rate;
34
+ người dùng vẫn duyệt cuối bằng --root, reject sau đó thắng auto
20
35
  verdict --root <root_task_id> accept [--steps a,b]
21
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
22
37
  accept (--task/--root) tự gộp knowledge-delta-<task_id>*.md của run vào kho (--no-knowledge: bỏ)
@@ -28,15 +43,19 @@ Cách dùng: dieu-phoi <lệnh> [tuỳ chọn]
28
43
  stats [--type T] [--json]
29
44
  bảng task_type × model/effort: n, accept%, agent_pass%, chi phí/thời gian (TB, p50, p75), steer
30
45
  choose --type T --score N [--urgency relaxed|normal|urgent] [--reversible y|n]
31
- [--verifiable y|n] [--role exec|verify|plan|helper] [--task ID]
46
+ [--verifiable y|n] [--publish y|n] [--dependents y|n] [--mode fast|normal|strict]
47
+ [--role exec|verify|plan|helper] [--task ID]
32
48
  [--override model/effort (cần --task) | --approved model/effort] [--skill-dir P] [--seed S] [--json]
33
- đề xuất model + effort, lý do, action (dispatch|ask_user), ước tính chi phí/thời gian
49
+ đề xuất model + effort, lý do, action (dispatch|ask_user), ước tính chi phí/thời gian,
50
+ verify_plan (independent-blocking|independent-nonblocking|self+batch|spot) theo mode
51
+ (--mode mặc định: mode của root của --task, rồi normal)
34
52
  ctx [--session <id>] [--json]
35
53
  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
36
54
  state [--session <id>] [--json]
37
55
  trạng thái điều phối của phiên dựng lại từ log (cũng được nạp tự động sau /compact)
38
- plan-table --file <steps.json> [--json] [--approve --root <root_task_id>]
39
- bảng phân công: Bước | Model/effort | Lý do | Ước tính + tổng + đường găng
56
+ plan-table --file <steps.json> [--mode M] [--json] [--approve --root <root_task_id>]
57
+ bảng phân công: Bước | Model/effort | Kiểm | Lý do | Ước tính + tổng + đường găng;
58
+ file là mảng bước hoặc { "mode": "fast", "steps": [...] } (bước có thể ghi đè "mode")
40
59
  new-id [--count n] [--json]
41
60
  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
42
61
  sync đẩy bản ghi chưa đồng bộ lên sink
@@ -89,6 +108,7 @@ async function main(argv) {
89
108
  setup: c.cmdSetup,
90
109
  doctor: c.cmdDoctor,
91
110
  start: c.cmdStart,
111
+ mode: c.cmdMode,
92
112
  verdict: c.cmdVerdict,
93
113
  steer: c.cmdSteer,
94
114
  discard: c.cmdDiscard,