@kienntpixon/dieu-phoi 0.6.1 → 0.7.1

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,77 @@
1
1
  # Changelog — @kienntpixon/dieu-phoi
2
2
 
3
+ ## 0.7.1 (2026-10-26)
4
+
5
+ Đề xuất core C1–C6 của retro 2026-10-26 (run 4b3mohix, task fgcq8dl9). `CORE_VERSION` 0.7.1; đi cùng skill 1.6.1.
6
+ **Thứ tự phát hành:** deploy Code.gs bản mới (cột `batch`, C5) TRƯỚC, rồi `npm i -g` + `dieu-phoi setup`.
7
+
8
+ - **`setup`: matcher `Agent|Task`** (task y5lcc5vx): hook PostToolUse/PreToolUse đăng ký cho cả tên công cụ `Agent` (Claude Code hiện tại) lẫn `Task`
9
+ (bản cũ). Đăng ký cũ chỉ `Agent` không còn tính là "đã đăng ký" → `setup` viết lại (không nhân đôi); `doctor` nhận cả hai.
10
+
11
+ - **C5 — verifier gộp là ô riêng** (task meq4adm7): agent `role=verify` có `batch:true` (thẻ `|batch`) không còn cộng chi phí/thời gian
12
+ vào task mang `task_id` của nó (tức ô `task_type × tier` của bước fast cuối) — ở cả `aggregate` lẫn `sheet/Code.gs` (cột mới `batch`).
13
+ `stats --json`/`retro --json` thêm `batch_verify: [{model, effort, n, tasks, cost_total_usd, cost_mean_usd, cost_p50_usd,
14
+ time_mean_min, time_p50_min}]` (CLI-only, ngoài parity); `stats` in bảng "verifier gộp", `retro` thêm một dòng. Thống kê theo mode
15
+ (`verify_min`…), `sub_usd_total`, `totals.cost_usd` vẫn tính nó. Dữ liệu cũ (không `batch`) không đổi số. **Sink: dán lại Code.gs**
16
+ (≈ 39 KB → minify khi deploy qua gws); Code.gs cũ làm rơi `batch` nên ô sink còn lệch CLI tới khi deploy.
17
+ - **C6 — delta knowledge chưa gộp + `repo:` tên ngắn** (task 1l9as0f3): `start` (khối hook, bản chữ, `--json` `unmerged_deltas`) và `state` (dòng cuối, `--json`)
18
+ cảnh báo `knowledge_delta: N file delta chưa gộp quá 24h …` khi có `knowledge-delta*.md` tuổi 24 h–30 ngày mà hash không nằm trong sổ `applied` của kho nào
19
+ (quét ~20 ms, chỉ đọc file). `knowledge merge`: header `repo:` nhận tên ngắn/basename (`pff-tailor`) nếu khớp đúng một kho đã biết (`name`, tên thư mục kho hoặc
20
+ basename của `roots`); HEAD từ `head:`, `roots` (mới: `meta.json` ghi checkout chính sau mỗi lần gộp có đổi) hoặc `--repo`; khớp ≥ 2 kho hoặc không khớp → lỗi rõ ràng.
21
+ File delta mà mọi mục đều "không đổi" nay cũng được ghi vào `applied` (để hết cảnh báo; test `knowledge-idem` cập nhật: meta.json chỉ thêm sổ `applied`).
22
+ Delta cũ gộp trước khi có sổ sẽ còn bị cảnh báo đến khi chạy `knowledge merge` một lần (idempotent, thành "không đổi").
23
+ - **C4 — sàn tier theo sở thích (`tier_floor`)**: profile.json có thể ghi `tier_floor {task_type: "model/effort"}`; `choose` lấy
24
+ max(sàn này, sàn an toàn, leo thang), không thăm dò xuống dưới, Thompson không chọn ô thấp hơn dù dữ liệu nghiêng về ô rẻ hơn.
25
+ Chỉ siết (trên trần → kẹp opus/medium; ngoài thang → bỏ). `--override`/`--approved` thấp hơn sàn vẫn giữ, có ghi chú.
26
+ - **C3 — telemetry của `choose`**: kết quả có thêm `score`, `reason_code` (`thompson | floor | escalation | prior | user-prior | explore |
27
+ plan | override | ask | unknown-type`), `thompson_score`; bản ghi `data/suggest/*.json` lưu `choose_task_type`, `choose_score`, `explored`,
28
+ `reason_code`, `thompson_score`, dispatch chép thành `choose_*` (chỉ ở máy). Thẻ ghi loại khác loại đã hỏi `choose` → `choose_type_mismatch:true`
29
+ + PostToolUse nhắc điều phối viên.
30
+ - **C2 — bí danh task_type trong hook**: bảng bí danh dời sang hook.cjs (`TYPE_ALIASES`, `choose` dùng chung) và thêm
31
+ `scan`/`read`/`code-read`/`explore`/`scout`/`lookup` → `search`. Thẻ dispatch mang nhãn có bí danh (vd. `architecture`, `shell`, `config`,
32
+ `deploy`) được ghi `task_type` = loại đích, `tag_issue=aliased` + `type_alias_from` thay cho `bad-type` (số liệu gộp vào ô đúng).
33
+ - **C1 — trần phiên/chuỗi handoff**: cảnh báo PostToolUse dời về handoff **thứ 2** (`HANDOFF_CHAIN_WARN=2`); hook PreToolUse(Agent) mới
34
+ (setup đăng ký thêm, `doctor` mục `chain-gate`) **từ chối** lượt exec tiếp nối của task đã handoff ≥ 3 lần (sự kiện `gate` `deny`,
35
+ `reason_code=handoff-chain`, `agent_id=task:<id>`) trừ khi thẻ có `|chain_ok` (dispatch ghi `chain_ok:true`); trong subagent không áp.
36
+ `ctx`/`choose`: context > 400k hoặc ≥ 5 lần nén → `new_session:true` (`choose`: `orch_new_session`), `over:true`, advice "mở phiên mới
37
+ + `state`" thay cho `/compact`. Thẻ cũng nhận cờ `|batch` (C5). **Cần chạy lại `dieu-phoi setup`.**
38
+
39
+ ## 0.7.0 (2026-10-23)
40
+
41
+ `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).
42
+
43
+ - **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]`
44
+ (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ữ
45
+ 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.
46
+ 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`).
47
+ - **`choose` trả `verify_plan`** (`independent-blocking | independent-nonblocking | self+batch | spot`) cùng `verify_reason`, `verify_floor`,
48
+ `test_scope` (`selective|full`), `mode`, `mode_source`; thêm `--mode`, `--publish`, `--dependents`. Sàn an toàn (reversible=n, publish,
49
+ 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);
50
+ s7-8 → `independent-nonblocking` (blocking nếu có bước phụ thuộc); strict: 1/3 `spot`, luôn chạy cả suite.
51
+ - **`verdict ... --verify self`** hợp lệ (exec tự kiểm).
52
+ - **`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),
53
+ 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
54
+ mode hiện tại của root.
55
+ - **`state`** dựng lại mode: `modes[]` + `task.mode` (--json), dòng "Mode (theo yêu cầu…)" (text).
56
+ - Test: `test/mode.test.cjs` (8 ca); cập nhật kỳ vọng cũ cho khối `start` và khoá `state --json`.
57
+ - **Gợi ý quay về normal, không tự đổi** (task ue15wumm): khi root đang fast, `choose` (exec) và `state` trả `mode_suggest:"normal"` +
58
+ `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
59
+ 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.
60
+ - **`complete.test_s`** (+ `test_runs`, `full_suite_runs`, `test_s_source`): hook SubagentStop đo thời gian lệnh test từ transcript subagent
61
+ (tool_use Bash/PowerShell → tool_result), không có thì đọc dòng `TEST_S:` trong dp-out; lệnh nền chỉ đếm.
62
+ - **`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,
63
+ số lần chạy cả suite. Hàm mới `aggregate.modeSummary` (ngoài parity CLI ↔ sink).
64
+ - Test: `test/mode-suggest.test.cjs` (7 ca).
65
+ - **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`)
66
+ 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
67
+ self chiếm > 50% verdict của ô. Verifier gộp ghi `verdict <exec_agent> fail|pass --verify tests --reason batch-verify`.
68
+ - **`verdict --task <id> accept --auto`**: nghiệm thu tự động (`by=auto`, `verify=tests`, round null) — chỉ accept, chỉ task mode fast,
69
+ 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.
70
+ Verdict người dùng sau đó thắng; reject sau auto accept đếm `auto_overturned`. `retro` totals thêm `self_verdicts`, `auto_accept`,
71
+ `auto_overturned` + dòng "Fast: …".
72
+ - **`sheet/Code.gs`** cùng logic (normalizeVerdict_ giữ `auto`, firstOutcome bỏ self, số phụ trên) — parity fixture +ptask201–205.
73
+ - Test: `test/fast-learning.test.cjs` (4 ca).
74
+
3
75
  ## 0.6.1 (2026-10-22)
4
76
 
5
77
  `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`.
package/bin/dieu-phoi.cjs CHANGED
@@ -18,12 +18,20 @@ 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 [--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,
22
- tạo run dir, đường dẫn brief scout — dùng khi hook UserPromptSubmit không chạy
23
- verdict <agent_id|last> <pass|fail|timeout|aborted> [--verify tests|lint|review|judgment|none] [--reason short-kebab]
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]
24
29
  nghiệm thu tầng agent (by=agent); aborted = dừng vì hết quota/usage limit (không phải fail)
25
30
  verdict --task <task_id> <accept|reject> [--cause quality|scope] [--round n] [--reason R]
26
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
27
35
  verdict --root <root_task_id> accept [--steps a,b]
28
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
29
37
  accept (--task/--root) tự gộp knowledge-delta-<task_id>*.md của run vào kho (--no-knowledge: bỏ)
@@ -35,15 +43,19 @@ Cách dùng: dieu-phoi <lệnh> [tuỳ chọn]
35
43
  stats [--type T] [--json]
36
44
  bảng task_type × model/effort: n, accept%, agent_pass%, chi phí/thời gian (TB, p50, p75), steer
37
45
  choose --type T --score N [--urgency relaxed|normal|urgent] [--reversible y|n]
38
- [--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]
39
48
  [--override model/effort (cần --task) | --approved model/effort] [--skill-dir P] [--seed S] [--json]
40
- đề 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)
41
52
  ctx [--session <id>] [--json]
42
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
43
54
  state [--session <id>] [--json]
44
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)
45
- plan-table --file <steps.json> [--json] [--approve --root <root_task_id>]
46
- 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")
47
59
  new-id [--count n] [--json]
48
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
49
61
  sync đẩy bản ghi chưa đồng bộ lên sink
@@ -96,6 +108,7 @@ async function main(argv) {
96
108
  setup: c.cmdSetup,
97
109
  doctor: c.cmdDoctor,
98
110
  start: c.cmdStart,
111
+ mode: c.cmdMode,
99
112
  verdict: c.cmdVerdict,
100
113
  steer: c.cmdSteer,
101
114
  discard: c.cmdDiscard,