alp-code 0.9.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 +770 -0
- package/LICENSE +21 -0
- package/README.md +295 -0
- package/alp.config.yaml +5 -0
- package/dist/src/agents/agent-definition.js +28 -0
- package/dist/src/agents/capability-catalog.js +33 -0
- package/dist/src/agents/compaction.js +36 -0
- package/dist/src/agents/errors.js +12 -0
- package/dist/src/agents/librarian.js +38 -0
- package/dist/src/agents/main.js +37 -0
- package/dist/src/agents/memory-grant.js +29 -0
- package/dist/src/agents/model-context.js +70 -0
- package/dist/src/agents/modes.js +134 -0
- package/dist/src/agents/oracle.js +36 -0
- package/dist/src/agents/read-thread.js +38 -0
- package/dist/src/agents/registry.js +238 -0
- package/dist/src/agents/render-identity.js +38 -0
- package/dist/src/agents/review.js +37 -0
- package/dist/src/agents/search.js +37 -0
- package/dist/src/agents/shared/house-rules.js +33 -0
- package/dist/src/agents/shared/principal.js +18 -0
- package/dist/src/agents/shared/voice.js +29 -0
- package/dist/src/agents/titling.js +32 -0
- package/dist/src/agents/types.js +15 -0
- package/dist/src/backend/execution-backend.js +2 -0
- package/dist/src/backend/local-execution-store.js +144 -0
- package/dist/src/backend/local-process-backend.js +533 -0
- package/dist/src/backend/local-supervisor.js +104 -0
- package/dist/src/cli/alp.js +380 -0
- package/dist/src/cli/commands/context.js +203 -0
- package/dist/src/cli/commands/delegate.js +136 -0
- package/dist/src/cli/commands/identity-sync.js +31 -0
- package/dist/src/cli/commands/init.js +184 -0
- package/dist/src/cli/commands/mode.js +22 -0
- package/dist/src/cli/commands/principal.js +114 -0
- package/dist/src/cli/commands/run-main.js +90 -0
- package/dist/src/cli/commands/runtime.js +21 -0
- package/dist/src/cli/mode-preference-store.js +62 -0
- package/dist/src/cli/mode-selector.js +178 -0
- package/dist/src/cli/update-check.js +77 -0
- package/dist/src/context/checkpoint.js +134 -0
- package/dist/src/context/compact-journal.js +153 -0
- package/dist/src/context/compact-payload.js +121 -0
- package/dist/src/context/continuity.js +70 -0
- package/dist/src/context/types.js +2 -0
- package/dist/src/delegation/backend-registry.js +40 -0
- package/dist/src/delegation/delegation-service.js +300 -0
- package/dist/src/delegation/types.js +12 -0
- package/dist/src/execution/execution-policy.js +96 -0
- package/dist/src/execution/execution-service.js +115 -0
- package/dist/src/execution/execution-store.js +78 -0
- package/dist/src/execution/identity-capsule.js +65 -0
- package/dist/src/execution/types.js +12 -0
- package/dist/src/hooks/execution-bridge.js +84 -0
- package/dist/src/index.js +4 -0
- package/dist/src/memory/adapters/markdown-file-store.js +257 -0
- package/dist/src/memory/adapters/memory-api-client.js +2 -0
- package/dist/src/memory/adapters/memory-path-mapper.js +76 -0
- package/dist/src/memory/adapters/remote-api-store.js +25 -0
- package/dist/src/memory/context-ranker.js +21 -0
- package/dist/src/memory/errors.js +58 -0
- package/dist/src/memory/memory-service.js +149 -0
- package/dist/src/memory/memory-store.js +2 -0
- package/dist/src/memory/types.js +2 -0
- package/dist/src/policy/capability-policy.js +29 -0
- package/dist/src/policy/delegation-policy.js +25 -0
- package/dist/src/policy/errors.js +10 -0
- package/dist/src/policy/invariants.js +31 -0
- package/dist/src/policy/memory-policy.js +22 -0
- package/dist/src/policy/policy-engine.js +85 -0
- package/dist/src/policy/types.js +8 -0
- package/dist/src/policy/workspace-policy.js +77 -0
- package/dist/src/principal/principal-profile-store.js +89 -0
- package/dist/src/runtime/adapter-files.js +147 -0
- package/dist/src/runtime/claude-adapter.js +177 -0
- package/dist/src/runtime/codex-adapter.js +169 -0
- package/dist/src/runtime/permission-rules.js +156 -0
- package/dist/src/runtime/render-session-context.js +124 -0
- package/dist/src/runtime/render-task-input.js +33 -0
- package/dist/src/runtime/runtime-adapter.js +2 -0
- package/dist/src/runtime/runtime-preference-store.js +66 -0
- package/dist/src/runtime/runtime-selector.js +178 -0
- package/dist/src/runtime/types.js +2 -0
- package/dist/src/runtime/windows-shim.js +57 -0
- package/dist/src/state-paths.js +49 -0
- package/dist/src/workflow/output-validator.js +27 -0
- package/dist/src/workflow/repair-policy.js +8 -0
- package/dist/src/workflow/types.js +22 -0
- package/dist/src/workflow/workflow-runner.js +81 -0
- package/hooks/compact-record.cjs +109 -0
- package/hooks/session-boot.cjs +112 -0
- package/hooks/session-end.cjs +34 -0
- package/package.json +48 -0
- package/scaffold/memory/INDEX.md +27 -0
- package/scaffold/memory/README.md +76 -0
- package/scaffold/memory/projects/INDEX.md +22 -0
- package/scaffold/memory/projects/PROTOCOL.md +128 -0
- package/scaffold/memory/projects/_template/PROJECT.md +45 -0
- package/scripts/alp.cjs +126 -0
- package/scripts/alp.ps1 +4 -0
- package/scripts/alp.sh +3 -0
- package/scripts/bootstrap.cjs +144 -0
- package/scripts/checkout-release.cjs +30 -0
- package/scripts/delegate.cjs +19 -0
- package/scripts/doctor.cjs +158 -0
- package/scripts/doctor.sh +3 -0
- package/scripts/ensure-state.cjs +22 -0
- package/scripts/lib/cli-link.cjs +375 -0
- package/scripts/lib/codex-role.cjs +18 -0
- package/scripts/lib/delegation/command-runner.cjs +108 -0
- package/scripts/lib/delegation/config.cjs +81 -0
- package/scripts/lib/install-paths.cjs +154 -0
- package/scripts/lib/release-manifest.cjs +42 -0
- package/scripts/lib/semver-lite.cjs +20 -0
- package/scripts/lib/state.cjs +274 -0
- package/scripts/lib/uninstall.cjs +252 -0
- package/scripts/lib/update-check-worker.cjs +21 -0
- package/scripts/lib/update.cjs +395 -0
- package/scripts/run-role.cjs +42 -0
- package/scripts/run-role.ps1 +4 -0
- package/scripts/run-role.sh +3 -0
- package/scripts/sync-project-index.sh +167 -0
- package/skills/agent-memory/SKILL.md +109 -0
- package/skills/alp-debug/SKILL.md +90 -0
- package/skills/alp-debug/references/defense-in-depth.md +118 -0
- package/skills/alp-debug/references/investigation-methodology.md +106 -0
- package/skills/alp-debug/references/log-and-ci-analysis.md +96 -0
- package/skills/alp-debug/references/performance-diagnostics.md +112 -0
- package/skills/alp-debug/references/reporting-standards.md +120 -0
- package/skills/alp-debug/references/root-cause-tracing.md +134 -0
- package/skills/alp-debug/references/systematic-debugging.md +93 -0
- package/skills/alp-debug/references/verification.md +86 -0
- package/skills/alp-debug/scripts/find-polluter.sh +63 -0
- package/skills/alp-debug/scripts/find-polluter.test.md +102 -0
- package/skills/alp-plan/SKILL.md +128 -0
- package/skills/alp-plan/references/archive-workflow.md +77 -0
- package/skills/alp-plan/references/codebase-understanding.md +55 -0
- package/skills/alp-plan/references/output-standards.md +96 -0
- package/skills/alp-plan/references/plan-organization.md +129 -0
- package/skills/alp-plan/references/red-team-personas.md +76 -0
- package/skills/alp-plan/references/red-team-workflow.md +81 -0
- package/skills/alp-plan/references/research-phase.md +57 -0
- package/skills/alp-plan/references/scope-challenge.md +82 -0
- package/skills/alp-plan/references/solution-design.md +76 -0
- package/skills/alp-plan/references/validate-question-framework.md +89 -0
- package/skills/alp-plan/references/validate-workflow.md +83 -0
- package/skills/alp-predict/SKILL.md +98 -0
- package/skills/alp-scenario/SKILL.md +86 -0
- package/skills/code-review/SKILL.md +111 -0
- package/skills/code-review/references/code-review-reception.md +114 -0
- package/skills/code-review/references/edge-case-scouting.md +78 -0
- package/skills/code-review/references/verification-before-completion.md +117 -0
- package/skills/delegation/SKILL.md +46 -0
- package/skills/docs-seeker/.env.example +15 -0
- package/skills/docs-seeker/SKILL.md +87 -0
- package/skills/docs-seeker/package.json +25 -0
- package/skills/docs-seeker/references/advanced.md +82 -0
- package/skills/docs-seeker/references/context7-patterns.md +68 -0
- package/skills/docs-seeker/references/errors.md +72 -0
- package/skills/docs-seeker/scripts/analyze-llms-txt.js +211 -0
- package/skills/docs-seeker/scripts/detect-topic.js +172 -0
- package/skills/docs-seeker/scripts/fetch-docs.js +213 -0
- package/skills/docs-seeker/scripts/tests/run-tests.js +72 -0
- package/skills/docs-seeker/scripts/tests/test-analyze-llms.js +119 -0
- package/skills/docs-seeker/scripts/tests/test-detect-topic.js +112 -0
- package/skills/docs-seeker/scripts/tests/test-fetch-docs.js +84 -0
- package/skills/docs-seeker/scripts/utils/env-loader.js +94 -0
- package/skills/docs-seeker/workflows/library-search.md +73 -0
- package/skills/docs-seeker/workflows/repo-analysis.md +90 -0
- package/skills/docs-seeker/workflows/topic-search.md +69 -0
- package/skills/git/SKILL.md +121 -0
- package/skills/git/references/branch-management.md +90 -0
- package/skills/git/references/commit-standards.md +82 -0
- package/skills/git/references/gh-cli-guide.md +132 -0
- package/skills/git/references/safety-protocols.md +86 -0
- package/skills/git/references/workflow-commit.md +89 -0
- package/skills/git/references/workflow-merge.md +63 -0
- package/skills/git/references/workflow-pr.md +70 -0
- package/skills/git/references/workflow-push.md +62 -0
- package/skills/gkg/SKILL.md +87 -0
- package/skills/gkg/references/cli-commands.md +92 -0
- package/skills/gkg/references/http-api.md +99 -0
- package/skills/gkg/references/language-support.md +54 -0
- package/skills/problem-solving/SKILL.md +86 -0
- package/skills/problem-solving/references/attribution.md +48 -0
- package/skills/problem-solving/references/collision-zone-thinking.md +71 -0
- package/skills/problem-solving/references/inversion-exercise.md +88 -0
- package/skills/problem-solving/references/meta-pattern-recognition.md +80 -0
- package/skills/problem-solving/references/scale-game.md +82 -0
- package/skills/problem-solving/references/simplification-cascades.md +83 -0
- package/skills/problem-solving/references/when-stuck.md +76 -0
- package/skills/repomix/SKILL.md +94 -0
- package/skills/repomix/references/configuration.md +134 -0
- package/skills/repomix/references/usage-patterns.md +106 -0
- package/skills/repomix/scripts/.coverage +0 -0
- package/skills/repomix/scripts/README.md +179 -0
- package/skills/repomix/scripts/repomix_batch.py +455 -0
- package/skills/repomix/scripts/repos.example.json +15 -0
- package/skills/repomix/scripts/requirements.txt +15 -0
- package/skills/repomix/scripts/tests/test_repomix_batch.py +531 -0
- package/skills/research/SKILL.md +107 -0
- package/skills/security-scan/SKILL.md +101 -0
- package/skills/security-scan/references/secret-patterns.md +75 -0
- package/skills/security-scan/references/vulnerability-patterns.md +136 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: alp-scenario
|
|
3
|
+
description: Sinh edge case có hệ thống bằng cách bổ một tính năng hoặc đường code theo 12 chiều. Kích hoạt khi review một thay đổi ở khía cạnh correctness, khi cần liệt kê rủi ro trước lúc chốt một thay đổi, hoặc khi phải trả lời "còn thiếu trường hợp nào".
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# alp-scenario — bổ theo 12 chiều
|
|
7
|
+
|
|
8
|
+
Dùng khi cần chắc rằng mình đã quét **hết**, không phải khi cần nghĩ **sâu**. Hai việc
|
|
9
|
+
khác nhau: cái này cho độ phủ, không cho chiều sâu.
|
|
10
|
+
|
|
11
|
+
Giá trị của skill này nằm ở chỗ nó **cưỡng bức tính đầy đủ**. Người review giỏi vẫn quên
|
|
12
|
+
chiều mình không quen. Danh sách dưới không cho quên.
|
|
13
|
+
|
|
14
|
+
## Khi nào dùng
|
|
15
|
+
|
|
16
|
+
- Concern `correctness` — sinh sẵn edge case rồi mới đọc diff.
|
|
17
|
+
- Trước khi chốt một thay đổi có trạng thái, có đồng thời, hoặc chạm dữ liệu.
|
|
18
|
+
- Khi được hỏi "còn thiếu trường hợp nào" và cần câu trả lời có cấu trúc.
|
|
19
|
+
|
|
20
|
+
**Không dùng cho:** đổi một dòng, sửa chính tả, đổi config không có nhánh logic. Bổ 12
|
|
21
|
+
chiều cho một `const` là lãng phí ngân sách phiên.
|
|
22
|
+
|
|
23
|
+
## 12 chiều
|
|
24
|
+
|
|
25
|
+
Không phải chiều nào cũng áp dụng. **Lọc trước, sinh sau** — và nói rõ chiều nào bỏ, vì sao.
|
|
26
|
+
Liệt kê 12 chiều rồi sinh bừa cho đủ là cách nhanh nhất biến báo cáo thành rác.
|
|
27
|
+
|
|
28
|
+
| # | Chiều | Tìm gì |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| 1 | Loại người dùng | admin, khách, bị khoá, mới, power user, bot |
|
|
31
|
+
| 2 | Input cực đoan | rỗng, null, dài tối đa, unicode, ký tự đặc biệt, chuỗi injection |
|
|
32
|
+
| 3 | Thời gian | truy cập đồng thời, race, timeout, mạng chậm, retry dồn |
|
|
33
|
+
| 4 | Quy mô | 0 phần tử, 1, 1 triệu, biên phân trang, cursor quay vòng |
|
|
34
|
+
| 5 | Chuyển trạng thái | lần đầu, bỏ dở giữa chừng, chạy lại sau crash, hoàn thành một phần |
|
|
35
|
+
| 6 | Môi trường | máy yếu, không JS, screen reader, proxy/VPN, timezone/locale khác |
|
|
36
|
+
| 7 | Lỗi dây chuyền | DB chết, API timeout, đầy đĩa, OOM, đứt mạng, ghi dở |
|
|
37
|
+
| 8 | Phân quyền | token hết hạn, sai role, link public, CORS, CSRF, leo thang quyền |
|
|
38
|
+
| 9 | Toàn vẹn dữ liệu | bản ghi trùng, tham chiếu mồ côi, lệch encoding, migration đang chạy |
|
|
39
|
+
| 10 | Tích hợp | webhook phát lại, lệch version API, bên thứ ba chết, contract trôi |
|
|
40
|
+
| 11 | Tuân thủ | yêu cầu xoá dữ liệu, thiếu audit log, thời hạn lưu trữ, lộ PII |
|
|
41
|
+
| 12 | Nghiệp vụ | giá 0 hoặc âm, chồng khuyến mãi, hoàn tiền khi giao một phần, hạn mức gói free |
|
|
42
|
+
|
|
43
|
+
## Quy trình
|
|
44
|
+
|
|
45
|
+
1. **Đọc** file đích, hoặc phân tích mô tả tính năng được đưa.
|
|
46
|
+
2. **Lọc chiều** — đánh dấu chiều nào áp dụng, chiều nào không và vì sao.
|
|
47
|
+
3. **Sinh 3–5 kịch bản** cho mỗi chiều còn lại.
|
|
48
|
+
4. **Xếp mức** theo bảng dưới.
|
|
49
|
+
5. **Xuất bảng**, kèm tổng theo mức.
|
|
50
|
+
|
|
51
|
+
### Mức
|
|
52
|
+
|
|
53
|
+
| Mức | Nghĩa |
|
|
54
|
+
|---|---|
|
|
55
|
+
| **CHẶN** | mất dữ liệu, thủng bảo mật, vượt xác thực, hỏng âm thầm |
|
|
56
|
+
| **NÊN SỬA** | hỏng với một nhóm người dùng, dữ liệu không nhất quán |
|
|
57
|
+
| **GHI NHẬN** | UX xuống cấp, lỗi có thể phục hồi nhưng không báo cho người dùng |
|
|
58
|
+
|
|
59
|
+
Ba mức này khớp với `code-review` — cùng một thang, để bên đọc không phải quy đổi.
|
|
60
|
+
|
|
61
|
+
## Mẫu xuất
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
## Kịch bản: <đích>
|
|
65
|
+
|
|
66
|
+
Chiều đã bổ: <danh sách>
|
|
67
|
+
Chiều bỏ: <danh sách + lý do>
|
|
68
|
+
|
|
69
|
+
| # | Chiều | Kịch bản | Mức | Hành vi mong đợi |
|
|
70
|
+
|---|---|---|---|---|
|
|
71
|
+
| 1 | Input cực đoan | tên rỗng ở field bắt buộc | NÊN SỬA | trả 400 kèm lỗi field |
|
|
72
|
+
| 2 | Phân quyền | JWT hết hạn gọi route được bảo vệ | CHẶN | về login, huỷ session |
|
|
73
|
+
| 3 | Thời gian | hai người submit cùng form cùng lúc | NÊN SỬA | idempotency key hoặc báo xung đột |
|
|
74
|
+
|
|
75
|
+
Tổng: CHẶN n · NÊN SỬA n · GHI NHẬN n — trên x chiều
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Sau đó
|
|
79
|
+
|
|
80
|
+
Kịch bản là **đầu vào cho người khác**, không phải kết luận cuối:
|
|
81
|
+
|
|
82
|
+
- Mức CHẶN → đưa vào phần CHẶN của báo cáo `code-review`, kèm bằng chứng nếu tái hiện được.
|
|
83
|
+
- Rủi ro kiến trúc, đánh đổi khó đảo ngược → báo bên giao việc; việc có mở một lượt phản
|
|
84
|
+
biện sâu hay không là quyết định của họ.
|
|
85
|
+
- Kịch bản chỉ là giả thuyết cho tới khi tái hiện được. Chưa tái hiện thì ghi ở mục
|
|
86
|
+
"Chưa chắc", **không** ghi ở mục CHẶN.
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: code-review
|
|
3
|
+
description: Review code có bằng chứng — một concern mỗi phiên, dẫn path:line, phân loại theo mức chặn. Kích hoạt khi được giao review một diff/commit/PR, khi cần thẩm định một tuyên bố "đã xong", hoặc khi phải quyết định chặn hay cho qua.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# code-review — review có bằng chứng
|
|
7
|
+
|
|
8
|
+
Bạn đọc code, **không sửa code** — dù `compiled AgentDefinition` có cấp `Edit` thì review vẫn là việc
|
|
9
|
+
đọc. Kết quả đi về bên giao việc, không đi đâu khác.
|
|
10
|
+
|
|
11
|
+
## Nguyên tắc
|
|
12
|
+
|
|
13
|
+
Đúng kỹ thuật quan trọng hơn dễ chịu về mặt xã giao. Thẳng, phũ, ngắn.
|
|
14
|
+
**Không có bằng chứng thì không có kết luận.** Mọi khẳng định phải chỉ được `path:line`.
|
|
15
|
+
|
|
16
|
+
Ba câu cấm nói: "có vẻ như", "chắc là", "nhìn thì ổn". Ba câu đó nghĩa là bạn chưa đọc đủ.
|
|
17
|
+
|
|
18
|
+
## Hợp đồng phiên
|
|
19
|
+
|
|
20
|
+
Mỗi phiên nhận **đúng một concern**. Không tự mở rộng sang concern khác — thấy
|
|
21
|
+
vấn đề ngoài concern thì ghi vào mục "Ngoài phạm vi" của báo cáo, không đi điều tra tiếp.
|
|
22
|
+
|
|
23
|
+
| Concern | Tìm gì |
|
|
24
|
+
|---|---|
|
|
25
|
+
| security | trust boundary, authn/authz, injection, secret lộ, deserialization, rò dữ liệu |
|
|
26
|
+
| correctness | invariant, edge case, đường lỗi, concurrency, tương thích ngược |
|
|
27
|
+
| performance | chỉ báo bottleneck có số đo — không đoán, không "tối ưu cho đẹp" |
|
|
28
|
+
| architecture | ranh giới module, chiều phụ thuộc, chi phí đảo ngược quyết định |
|
|
29
|
+
|
|
30
|
+
## Quy trình
|
|
31
|
+
|
|
32
|
+
`XÁC ĐỊNH SCOPE → ĐỌC DIFF → TRUY VẾT HÀNH VI → KIỂM CHỨNG → BÁO CÁO`
|
|
33
|
+
|
|
34
|
+
1. **Scope.** `git diff --stat`, `git log --oneline -5`. Không rõ so với đâu thì hỏi lại bên
|
|
35
|
+
giao việc, đừng tự đoán base.
|
|
36
|
+
2. **Đọc diff.** Đọc cả file quanh chỗ sửa, không chỉ dòng đổi. Bug thường nằm ở chỗ
|
|
37
|
+
*không* đổi mà lẽ ra phải đổi.
|
|
38
|
+
3. **Truy vết.** Với mỗi thay đổi: ai gọi, gọi lúc nào, hỏng thì lan tới đâu. `Grep` tìm
|
|
39
|
+
call-site. Skill `alp-scenario` sinh sẵn edge case theo 12 chiều nếu concern là
|
|
40
|
+
correctness.
|
|
41
|
+
4. **Kiểm chứng.** Chạy được thì chạy (`Bash` có sẵn): test, build, lint, reproduce. Không
|
|
42
|
+
chạy được thì nói rõ là chưa chạy — **không** suy ra kết quả.
|
|
43
|
+
5. **Báo cáo.** Mẫu dưới.
|
|
44
|
+
|
|
45
|
+
## Phân loại — theo mức chặn, không theo cảm tính
|
|
46
|
+
|
|
47
|
+
| Mức | Nghĩa | Bên giao việc phải làm gì |
|
|
48
|
+
|---|---|---|
|
|
49
|
+
| **CHẶN** | mất dữ liệu, lỗ bảo mật, sai kết quả, phá tương thích | sửa trước khi đi tiếp |
|
|
50
|
+
| **NÊN SỬA** | thiếu xử lý lỗi, race chưa chứng minh được là an toàn, thiếu test cho nhánh mới | sửa trong lần này |
|
|
51
|
+
| **GHI NHẬN** | code smell, đặt tên, tài liệu lệch | tuỳ bên giao việc, không chặn |
|
|
52
|
+
|
|
53
|
+
Không có mức thứ tư. Không gộp "nit" vào báo cáo — nếu nó không thuộc ba mức trên thì bỏ.
|
|
54
|
+
|
|
55
|
+
## Mẫu báo cáo
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
## Review: <concern> — <scope>
|
|
59
|
+
|
|
60
|
+
Đã chạy: <lệnh + kết quả thật, hoặc "chưa chạy được vì …">
|
|
61
|
+
|
|
62
|
+
### CHẶN
|
|
63
|
+
- `path/file.ts:42` — <hỏng thế nào, với input/tình huống nào>
|
|
64
|
+
Bằng chứng: <output, đoạn code, hoặc bước tái hiện>
|
|
65
|
+
|
|
66
|
+
### NÊN SỬA
|
|
67
|
+
- `path/other.ts:88` — …
|
|
68
|
+
|
|
69
|
+
### GHI NHẬN
|
|
70
|
+
- …
|
|
71
|
+
|
|
72
|
+
### Ngoài phạm vi
|
|
73
|
+
<vấn đề thấy được nhưng không thuộc concern này — bên giao việc quyết có mở phiên khác không>
|
|
74
|
+
|
|
75
|
+
### Chưa chắc
|
|
76
|
+
<phần không kiểm chứng được và vì sao>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Không có mục nào thì bỏ hẳn mục đó. Không viết "Không có vấn đề CHẶN nào" cho đủ khung.
|
|
80
|
+
|
|
81
|
+
## Cổng "đã xong"
|
|
82
|
+
|
|
83
|
+
Khi được hỏi một tuyên bố hoàn thành có đứng vững không, luật là:
|
|
84
|
+
|
|
85
|
+
**KHÔNG CÓ BẰNG CHỨNG MỚI THÌ KHÔNG XÁC NHẬN.**
|
|
86
|
+
|
|
87
|
+
Xác định lệnh kiểm chứng → chạy đủ → đọc output → output xác nhận → mới nói xong.
|
|
88
|
+
Báo cáo của agent khác **không phải** bằng chứng. Test xanh từ lần chạy trước cũng không.
|
|
89
|
+
|
|
90
|
+
| Tuyên bố | Bằng chứng bắt buộc |
|
|
91
|
+
|---|---|
|
|
92
|
+
| test pass | output có 0 failure, chạy trong phiên này |
|
|
93
|
+
| build được | exit code 0 |
|
|
94
|
+
| đã fix bug | triệu chứng gốc tái hiện lại và không còn |
|
|
95
|
+
| đủ yêu cầu | đối chiếu từng gạch đầu dòng của yêu cầu |
|
|
96
|
+
|
|
97
|
+
## Tham chiếu
|
|
98
|
+
|
|
99
|
+
| File | Khi nào đọc |
|
|
100
|
+
|---|---|
|
|
101
|
+
| `references/edge-case-scouting.md` | concern correctness, cần quét có hệ thống |
|
|
102
|
+
| `references/verification-before-completion.md` | thẩm định tuyên bố "đã xong" |
|
|
103
|
+
| `references/code-review-reception.md` | nhận lại phản hồi từ người/công cụ ngoài |
|
|
104
|
+
|
|
105
|
+
## Ranh giới
|
|
106
|
+
|
|
107
|
+
- **Không sửa code.** Đề xuất cách sửa thì viết trong báo cáo, đừng tự áp dụng.
|
|
108
|
+
- **Không commit, không push.** HOUSE-RULES §1.3.
|
|
109
|
+
- **Không giao việc cho ai** nếu `delegates_to` rỗng. Cần thêm thông tin → hỏi bên giao việc.
|
|
110
|
+
- Nháp, giả thuyết chưa kiểm chứng → kho riêng của bạn trong `memory/private/`. Kết luận
|
|
111
|
+
đã kiểm chứng đi vào báo cáo; bên giao việc quyết có ghi vào `memory/` chung không.
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Nhận phản hồi review
|
|
2
|
+
|
|
3
|
+
Dùng khi được đưa lại phản hồi từ người hoặc công cụ **bên ngoài** để thẩm định.
|
|
4
|
+
|
|
5
|
+
Nguyên tắc: kiểm chứng trước khi tin. Hỏi trước khi đoán. Đúng kỹ thuật hơn là dễ chịu.
|
|
6
|
+
|
|
7
|
+
## Trình tự
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
1. ĐỌC HẾT — đọc trọn phản hồi, chưa phản ứng
|
|
11
|
+
2. HIỂU — nói lại yêu cầu bằng lời mình, hoặc hỏi
|
|
12
|
+
3. KIỂM CHỨNG — đối chiếu với code thật
|
|
13
|
+
4. ĐÁNH GIÁ — có đúng với CODEBASE NÀY không?
|
|
14
|
+
5. TRẢ LỜI — xác nhận kỹ thuật, hoặc phản bác có lý do
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Câu cấm
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
❌ "Đúng rồi!" · "Ý hay!" · "Cảm ơn góp ý"
|
|
21
|
+
❌ "Để tôi làm ngay" — khi chưa kiểm chứng
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
✅ nói lại yêu cầu bằng ngôn ngữ kỹ thuật
|
|
26
|
+
✅ hỏi cho rõ
|
|
27
|
+
✅ phản bác kèm lý do kỹ thuật
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Đồng ý cho có là loại phản hồi tệ nhất: nó tốn một lượt và không mang thêm thông tin nào.
|
|
31
|
+
|
|
32
|
+
## Phản hồi không rõ
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
NẾU có bất kỳ mục nào không rõ:
|
|
36
|
+
DỪNG — chưa kết luận gì cả
|
|
37
|
+
HỎI cho rõ TẤT CẢ mục không rõ
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Vì sao hỏi hết một lượt: các mục thường liên quan nhau. Hiểu một nửa dẫn tới kết luận sai
|
|
41
|
+
về nửa còn lại.
|
|
42
|
+
|
|
43
|
+
## Theo nguồn
|
|
44
|
+
|
|
45
|
+
**Principal:** tin. Hiểu rồi làm, không cần khách sáo.
|
|
46
|
+
|
|
47
|
+
**Người/công cụ ngoài** — kiểm bốn câu trước khi tin:
|
|
48
|
+
|
|
49
|
+
1. Có đúng với **codebase này** không, hay chỉ đúng nói chung?
|
|
50
|
+
2. Làm theo thì có phá chức năng đang chạy không?
|
|
51
|
+
3. Cách hiện tại có lý do nào không — legacy, tương thích, ràng buộc đã ghi?
|
|
52
|
+
4. Có đúng trên mọi nền tảng/phiên bản đang hỗ trợ không?
|
|
53
|
+
|
|
54
|
+
| Kết quả | Làm gì |
|
|
55
|
+
|---|---|
|
|
56
|
+
| phản hồi sai | phản bác, kèm lý do kỹ thuật và `path:line` |
|
|
57
|
+
| không kiểm chứng được | nói rõ giới hạn, hỏi bên giao việc |
|
|
58
|
+
| trái với quyết định principal đã chốt | dừng, báo lại trước |
|
|
59
|
+
|
|
60
|
+
## Kiểm YAGNI
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
NẾU người review đề nghị "làm cho tử tế/đầy đủ":
|
|
64
|
+
rg tìm chỗ dùng thật
|
|
65
|
+
KHÔNG ai gọi → "chỗ này không được gọi. Xoá đi (YAGNI)?"
|
|
66
|
+
CÓ dùng → làm đầy đủ
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Thêm tính năng cho một hàm chết là làm hai lần công việc vô ích.
|
|
70
|
+
|
|
71
|
+
## Khi nào phản bác
|
|
72
|
+
|
|
73
|
+
- Phá chức năng đang chạy.
|
|
74
|
+
- Người review thiếu bối cảnh.
|
|
75
|
+
- Vi phạm YAGNI — thêm cho thứ không ai dùng.
|
|
76
|
+
- Sai về mặt kỹ thuật với stack này.
|
|
77
|
+
- Có lý do legacy/tương thích.
|
|
78
|
+
- Trái quyết định kiến trúc đã chốt.
|
|
79
|
+
|
|
80
|
+
**Phản bác thế nào:** lý do kỹ thuật, câu hỏi cụ thể, dẫn test đang chạy làm bằng chứng.
|
|
81
|
+
Không phản bác bằng cảm nhận.
|
|
82
|
+
|
|
83
|
+
## Phản hồi đúng
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
✅ "Đúng — <vấn đề>. Nằm ở <path:line>."
|
|
87
|
+
✅ ghi thẳng vào báo cáo, không bình luận thêm
|
|
88
|
+
❌ mọi kiểu cảm ơn hay khen xã giao
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Khi mình phản bác sai
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
✅ "Bạn đúng — đã kiểm <X>, đúng là <Y>."
|
|
95
|
+
❌ xin lỗi dài, biện minh, giải thích quá mức
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Sửa rồi đi tiếp. Không kể lể.
|
|
99
|
+
|
|
100
|
+
## Bảng nhanh
|
|
101
|
+
|
|
102
|
+
| Sai | Sửa |
|
|
103
|
+
|---|---|
|
|
104
|
+
| đồng ý cho có | nói lại yêu cầu, hoặc làm |
|
|
105
|
+
| tin ngay không kiểm | đối chiếu với code |
|
|
106
|
+
| mặc định người review đúng | kiểm xem có phá gì không |
|
|
107
|
+
| né phản bác | đúng kỹ thuật hơn dễ chịu |
|
|
108
|
+
|
|
109
|
+
## Chốt
|
|
110
|
+
|
|
111
|
+
Phản hồi từ ngoài là **đề xuất để thẩm định, không phải mệnh lệnh**.
|
|
112
|
+
|
|
113
|
+
Kiểm chứng. Chất vấn. Rồi mới kết luận. Và review không sửa code — kết luận đi về
|
|
114
|
+
bên giao việc dưới dạng báo cáo.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Quét vùng ảnh hưởng
|
|
2
|
+
|
|
3
|
+
Tìm file bị ảnh hưởng mà diff **không** cho thấy. Chạy trước khi đọc chi tiết từng dòng.
|
|
4
|
+
|
|
5
|
+
## Vì sao cần
|
|
6
|
+
|
|
7
|
+
Đọc diff cho biết cái gì đổi. Nó **không** cho biết cái gì lẽ ra phải đổi mà không đổi —
|
|
8
|
+
và đó mới là chỗ bug sống sót qua review.
|
|
9
|
+
|
|
10
|
+
Ví dụ điển hình: đổi chữ ký một hàm dùng chung, sửa hết chỗ gọi trực tiếp, bỏ sót chỗ gọi
|
|
11
|
+
qua một lớp wrapper. Diff sạch, test cũ vẫn xanh, hỏng lúc chạy thật.
|
|
12
|
+
|
|
13
|
+
## Khi nào bắt buộc
|
|
14
|
+
|
|
15
|
+
Tính năng nhiều file · refactor tiện ích dùng chung · sửa bug phức tạp · đổi chữ ký hàm
|
|
16
|
+
hoặc hình dạng dữ liệu.
|
|
17
|
+
|
|
18
|
+
Bỏ qua được: sửa một file, tài liệu, config không có nhánh logic.
|
|
19
|
+
|
|
20
|
+
## Quy trình
|
|
21
|
+
|
|
22
|
+
### 1. Lấy danh sách file đổi
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
git diff --name-only HEAD~1 # hoặc so với base được giao
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### 2. Tìm ngược ra ngoài diff
|
|
29
|
+
|
|
30
|
+
Tự làm bằng `Grep`/`Glob`/`Bash`, không giao đi.
|
|
31
|
+
|
|
32
|
+
Với mỗi symbol công khai bị đổi trong diff:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
rg -n '<tên hàm|tên hằng|tên type>' --glob '!node_modules'
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Sáu thứ phải trả lời được:
|
|
39
|
+
|
|
40
|
+
1. **File nào import/phụ thuộc module đã đổi** — kể cả gọi gián tiếp qua wrapper.
|
|
41
|
+
2. **Dữ liệu chảy qua hàm đã sửa đi tới đâu**, và ai đọc kết quả đó.
|
|
42
|
+
3. **Đường lỗi nào chưa được test** — nhánh `catch`, `else`, giá trị trả về khi thất bại.
|
|
43
|
+
4. **Biên:** null, rỗng, 0, một phần tử, độ dài tối đa.
|
|
44
|
+
5. **Bất đồng bộ:** có race không, có thứ tự nào bị giả định ngầm không.
|
|
45
|
+
6. **Trạng thái dùng chung:** biến module, cache, singleton bị sửa ở đâu.
|
|
46
|
+
|
|
47
|
+
Cần đầy đủ tuyệt đối (trước một refactor lớn) → báo bên giao việc để nhờ một lượt phân
|
|
48
|
+
tích ảnh hưởng bằng `gkg`. `rg` khớp chuỗi, `gkg` đi theo quan hệ AST.
|
|
49
|
+
|
|
50
|
+
Bổ có hệ thống hơn nữa: skill `alp-scenario` (12 chiều).
|
|
51
|
+
|
|
52
|
+
### 3. Xử lý
|
|
53
|
+
|
|
54
|
+
| Phát hiện | Làm gì |
|
|
55
|
+
|---|---|
|
|
56
|
+
| file bị ảnh hưởng nằm ngoài diff | đưa vào phạm vi đọc, ghi rõ trong báo cáo |
|
|
57
|
+
| đường dữ liệu có rủi ro | truy tiếp tới nơi tiêu thụ, đừng dừng ở hàm bị sửa |
|
|
58
|
+
| edge case chưa có test | ghi vào NÊN SỬA |
|
|
59
|
+
| thay đổi im lặng phá hành vi cũ | CHẶN |
|
|
60
|
+
|
|
61
|
+
### 4. Đưa vào báo cáo
|
|
62
|
+
|
|
63
|
+
Kết quả quét **không** phải một mục riêng. Nó nhập vào báo cáo `code-review` theo đúng ba
|
|
64
|
+
mức CHẶN / NÊN SỬA / GHI NHẬN.
|
|
65
|
+
|
|
66
|
+
Riêng phần đã kiểm mà **không** thấy vấn đề thì vẫn nói — nó cho bên giao việc biết phạm vi bạn đã
|
|
67
|
+
phủ, và biết chỗ nào bạn chưa đụng tới:
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
Đã quét ngoài diff: <n> file gọi tới <symbol>
|
|
71
|
+
Không thấy vấn đề ở: <danh sách>
|
|
72
|
+
Chưa quét được: <chỗ nào, vì sao>
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Luật
|
|
76
|
+
|
|
77
|
+
Quét trước, đọc sau. Và **đừng tin "thay đổi này đơn giản"** — thay đổi đơn giản là loại
|
|
78
|
+
hay được cho qua nhất, nên cũng là loại sống sót qua review nhiều nhất.
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Cổng kiểm chứng trước khi nói "xong"
|
|
2
|
+
|
|
3
|
+
Nói xong mà chưa kiểm chứng là **nói dối**, không phải làm nhanh.
|
|
4
|
+
|
|
5
|
+
Nguyên tắc: bằng chứng trước, khẳng định sau. Luôn luôn.
|
|
6
|
+
|
|
7
|
+
**Lách câu chữ của luật này là vi phạm luật này.**
|
|
8
|
+
|
|
9
|
+
## Luật sắt
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
KHÔNG TUYÊN BỐ HOÀN THÀNH KHI CHƯA CÓ BẰNG CHỨNG MỚI
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Chưa chạy lệnh kiểm chứng **trong phiên này** thì không được nói nó pass.
|
|
16
|
+
|
|
17
|
+
## Hàm cổng
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
TRƯỚC khi nói bất cứ trạng thái nào, hoặc tỏ ra hài lòng:
|
|
21
|
+
|
|
22
|
+
1. XÁC ĐỊNH: lệnh nào chứng minh được khẳng định này?
|
|
23
|
+
2. CHẠY: chạy ĐỦ lệnh đó, mới, không cắt
|
|
24
|
+
3. ĐỌC: đọc hết output, xem exit code, đếm số fail
|
|
25
|
+
4. ĐỐI CHIẾU: output có xác nhận khẳng định không?
|
|
26
|
+
- KHÔNG → nói trạng thái thật, kèm bằng chứng
|
|
27
|
+
- CÓ → nói khẳng định, KÈM bằng chứng
|
|
28
|
+
5. RỒI MỚI: phát biểu
|
|
29
|
+
|
|
30
|
+
Bỏ bước nào = nói dối, không phải kiểm chứng
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Bảng đối chiếu
|
|
34
|
+
|
|
35
|
+
| Khẳng định | Bằng chứng bắt buộc | KHÔNG đủ |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| test pass | output test: 0 fail | lần chạy trước, "chắc pass" |
|
|
38
|
+
| linter sạch | output linter: 0 lỗi | kiểm một phần rồi suy ra |
|
|
39
|
+
| build được | lệnh build: exit 0 | linter xanh, log nhìn ổn |
|
|
40
|
+
| đã fix bug | test triệu chứng gốc: pass | đã sửa code, cho là xong |
|
|
41
|
+
| test hồi quy chạy đúng | đã làm chu trình đỏ-xanh | test pass một lần |
|
|
42
|
+
| yêu cầu đã đủ | đối chiếu từng gạch đầu dòng | test xanh |
|
|
43
|
+
| agent khác đã làm xong | `git diff` cho thấy thay đổi | nó báo "xong" |
|
|
44
|
+
|
|
45
|
+
Dòng cuối quan trọng riêng với alp-code: **báo cáo của một agent khác không phải bằng
|
|
46
|
+
chứng.** Nó chạy trong phiên riêng, bạn không thấy nó đã chạy gì. Kiểm độc lập.
|
|
47
|
+
|
|
48
|
+
## Cờ đỏ — dừng lại
|
|
49
|
+
|
|
50
|
+
- Dùng "chắc là", "nhiều khả năng", "có vẻ".
|
|
51
|
+
- Tỏ ra hài lòng trước khi kiểm chứng ("ngon rồi!", "xong!").
|
|
52
|
+
- Sắp commit/push/PR mà chưa kiểm chứng.
|
|
53
|
+
- Tin báo cáo thành công của agent khác.
|
|
54
|
+
- Dựa vào kiểm chứng một phần.
|
|
55
|
+
- Nghĩ "lần này thôi".
|
|
56
|
+
- Mệt và muốn xong cho rồi.
|
|
57
|
+
- **Bất kỳ cách diễn đạt nào ngụ ý thành công mà chưa chạy kiểm chứng.**
|
|
58
|
+
|
|
59
|
+
## Chặn lý do biện minh
|
|
60
|
+
|
|
61
|
+
| Lý do | Thực tế |
|
|
62
|
+
|---|---|
|
|
63
|
+
| "chắc chạy được rồi" | thì CHẠY đi |
|
|
64
|
+
| "tôi tự tin mà" | tự tin ≠ bằng chứng |
|
|
65
|
+
| "lần này thôi" | không có ngoại lệ |
|
|
66
|
+
| "linter xanh rồi" | linter ≠ compiler |
|
|
67
|
+
| "bên kia bảo xong rồi" | kiểm độc lập |
|
|
68
|
+
| "mệt quá" | mệt ≠ lý do |
|
|
69
|
+
| "kiểm một phần là đủ" | một phần chứng minh không gì cả |
|
|
70
|
+
| "tôi nói khác đi nên luật không áp dụng" | tinh thần, không phải câu chữ |
|
|
71
|
+
|
|
72
|
+
## Mẫu
|
|
73
|
+
|
|
74
|
+
**Test**
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
✅ [chạy lệnh test] [thấy: 34/34 pass] → "toàn bộ test pass"
|
|
78
|
+
❌ "chắc pass rồi" / "nhìn thì đúng"
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**Test hồi quy — chu trình đỏ-xanh**
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
✅ viết test → chạy (pass) → gỡ bản sửa → chạy (PHẢI FAIL) → khôi phục → chạy (pass)
|
|
85
|
+
❌ "tôi đã viết test hồi quy" (chưa qua đỏ-xanh)
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Test hồi quy chưa từng đỏ thì không chứng minh được gì — nó có thể pass ngay cả khi bug
|
|
89
|
+
còn nguyên.
|
|
90
|
+
|
|
91
|
+
**Build**
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
✅ [chạy build] [thấy: exit 0] → "build được"
|
|
95
|
+
❌ "linter xanh" (linter không kiểm biên dịch)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**Yêu cầu**
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
✅ đọc lại yêu cầu → lập checklist → đối chiếu từng mục → báo chỗ thiếu hoặc báo đủ
|
|
102
|
+
❌ "test xanh, coi như xong"
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Áp dụng khi nào
|
|
106
|
+
|
|
107
|
+
**LUÔN LUÔN, trước:** mọi biến thể của câu nói xong · mọi biểu hiện hài lòng · mọi phát
|
|
108
|
+
biểu tích cực về trạng thái công việc · commit, PR · chuyển sang việc kế tiếp.
|
|
109
|
+
|
|
110
|
+
Luật áp dụng cho: câu nguyên văn, câu diễn đạt lại, câu đồng nghĩa, và **mọi cách nói ngụ ý
|
|
111
|
+
đã xong hoặc đã đúng**.
|
|
112
|
+
|
|
113
|
+
## Chốt
|
|
114
|
+
|
|
115
|
+
Chạy lệnh. Đọc output. **Rồi mới** nói kết quả.
|
|
116
|
+
|
|
117
|
+
Không thương lượng. Đây là lý do một phiên review tồn tại: để có người không cho qua.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: delegation
|
|
3
|
+
description: "Delegate work through ALP's runtime-neutral Delegation API with role policy, prepared context, execution lifecycle, and backend selection enforced by ALP."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# ALP Delegation
|
|
7
|
+
|
|
8
|
+
When work should be delegated, use ALP's delegation mechanism:
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
alp delegate <role> --project <path> -- "<task>"
|
|
12
|
+
alp delegate <role> --background -- "<task>"
|
|
13
|
+
alp delegation status <execution-id>
|
|
14
|
+
alp delegation wait <execution-id>
|
|
15
|
+
alp delegation cancel <execution-id>
|
|
16
|
+
alp delegation cleanup <execution-id>
|
|
17
|
+
alp delegation list
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
`scripts/run-role.*` remains a compatibility facade and calls the same service.
|
|
21
|
+
|
|
22
|
+
Do not invoke runtime-specific delegation tools directly. In particular, do not call
|
|
23
|
+
`paseo`, `create_agent`, or `spawn_agent` to delegate ALP work.
|
|
24
|
+
|
|
25
|
+
ALP policy determines:
|
|
26
|
+
|
|
27
|
+
- which role may delegate;
|
|
28
|
+
- which role can be targeted (`delegates_to`);
|
|
29
|
+
- what identity and task context is passed;
|
|
30
|
+
- what project/shared/private memory is visible;
|
|
31
|
+
- which workspace and write policy apply.
|
|
32
|
+
|
|
33
|
+
The backend only runs the prepared execution: it spawns the runtime as a child process and
|
|
34
|
+
owns nothing about role, ACL, memory, or task ownership. There is one backend and no way to
|
|
35
|
+
select another — `--backend` and `alp delegation switch` were removed on 2026-09-03.
|
|
36
|
+
|
|
37
|
+
If `--project` is omitted, the execution workspace is the caller's current directory. ALP
|
|
38
|
+
pins that canonical path into context and blocks access to other registered source workspaces
|
|
39
|
+
for the duration of the execution. Prefer an explicit absolute `--project` for important work.
|
|
40
|
+
|
|
41
|
+
The principal may talk to a role directly. In direct sessions, answer the principal. In a
|
|
42
|
+
delegated execution, return lifecycle/results to the delegation parent; direct interaction
|
|
43
|
+
still does not expand ACL or `delegates_to`.
|
|
44
|
+
|
|
45
|
+
Use `alp delegation health` for generic diagnosis. Runtime-specific tools are reserved for
|
|
46
|
+
principal/admin maintenance outside delegated role sessions.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Context7 API Configuration (optional)
|
|
2
|
+
# Get your API key from https://context7.com/dashboard/api-keys
|
|
3
|
+
CONTEXT7_API_KEY=
|
|
4
|
+
|
|
5
|
+
# Gemini API Configuration (optional, for ai-multimodal integration)
|
|
6
|
+
# Get your API key from https://aistudio.google.com/app/apikey
|
|
7
|
+
GEMINI_API_KEY=
|
|
8
|
+
|
|
9
|
+
# GitHub Token (optional, for higher rate limits on repository analysis)
|
|
10
|
+
# Create at https://github.com/settings/tokens
|
|
11
|
+
GITHUB_TOKEN=
|
|
12
|
+
|
|
13
|
+
# Output settings
|
|
14
|
+
OUTPUT_FORMAT=json
|
|
15
|
+
DEBUG=false
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: docs-seeker
|
|
3
|
+
description: Tìm tài liệu thư viện/framework qua chuẩn llms.txt (context7.com) và phân tích repo GitHub. Kích hoạt khi cần API doc chính xác của một thư viện, khi phải đọc tài liệu bản mới nhất, hoặc khi gặp URL repo GitHub cần hiểu nội dung.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# docs-seeker — lấy tài liệu bằng script
|
|
7
|
+
|
|
8
|
+
Dùng khi cần **nguồn sơ cấp** của một thư viện cụ thể — tài liệu chính thức, không phải
|
|
9
|
+
blog viết lại.
|
|
10
|
+
|
|
11
|
+
Ba script làm hết phần dựng URL, chuỗi fallback và bắt lỗi. **Chạy script, đừng tự đoán
|
|
12
|
+
URL context7** — đoán sai thì `WebFetch` trả 404 và bạn tốn một lượt trong ngân sách 5 lượt
|
|
13
|
+
của `research`.
|
|
14
|
+
|
|
15
|
+
## Đường dẫn
|
|
16
|
+
|
|
17
|
+
CWD của phiên là active workspace; gọi script qua repo path hoặc skill path runtime cung cấp:
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
<alp-repo>/skills/docs-seeker/scripts/<tên>.js
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Không dùng `node scripts/…` — đường dẫn đó tính từ CWD và sẽ không tìm thấy file.
|
|
24
|
+
|
|
25
|
+
## Quy trình
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# 1. Phân loại truy vấn: hỏi một chủ đề cụ thể hay hỏi cả thư viện?
|
|
29
|
+
node .claude/skills/docs-seeker/scripts/detect-topic.js "<câu hỏi>"
|
|
30
|
+
|
|
31
|
+
# 2. Lấy tài liệu theo kết quả bước 1
|
|
32
|
+
node .claude/skills/docs-seeker/scripts/fetch-docs.js "<câu hỏi>"
|
|
33
|
+
|
|
34
|
+
# 3. Chỉ khi bước 2 trả về nhiều URL — phân loại theo mức quan trọng
|
|
35
|
+
cat llms.txt | node .claude/skills/docs-seeker/scripts/analyze-llms-txt.js -
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Rồi đọc URL bằng `WebFetch`.
|
|
39
|
+
|
|
40
|
+
| Script | Làm gì | Trả về |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| `detect-topic.js` | tách tên thư viện + từ khoá chủ đề | `{topic, library, isTopicSpecific}` |
|
|
43
|
+
| `fetch-docs.js` | dựng URL context7, tự fallback chủ đề → tổng quát → lỗi | nội dung llms.txt hoặc thông báo lỗi |
|
|
44
|
+
| `analyze-llms-txt.js` | xếp URL theo critical/important/supplementary | JSON |
|
|
45
|
+
|
|
46
|
+
Script chạy trong `Bash`, không nạp gì vào context — đó là lý do phải dùng script thay vì
|
|
47
|
+
tự làm bằng tay.
|
|
48
|
+
|
|
49
|
+
## Hai kiểu truy vấn
|
|
50
|
+
|
|
51
|
+
**Hỏi chủ đề cụ thể** — "dùng date picker trong shadcn thế nào?" → `isTopicSpecific: true`,
|
|
52
|
+
`fetch-docs.js` trả 2–3 URL. Nhanh, đọc hết được.
|
|
53
|
+
|
|
54
|
+
**Hỏi cả thư viện** — "tài liệu Next.js" → `isTopicSpecific: false`, trả 8+ URL. Chạy
|
|
55
|
+
`analyze-llms-txt.js` để biết đọc cái nào trước.
|
|
56
|
+
|
|
57
|
+
Với truy vấn tổng quát, `analyze-llms-txt.js` có gợi ý chia việc cho nhiều agent song song.
|
|
58
|
+
**Bỏ qua gợi ý đó** nếu execution policy không cho giao việc. Dùng phần
|
|
59
|
+
xếp hạng critical/important/supplementary để tự chọn thứ tự đọc, và đọc trong ngân sách.
|
|
60
|
+
|
|
61
|
+
## Khoá API
|
|
62
|
+
|
|
63
|
+
Ba khoá đều **tuỳ chọn**, không có vẫn chạy: `CONTEXT7_API_KEY` (rate limit cao hơn),
|
|
64
|
+
`GITHUB_TOKEN` (phân tích repo), `GEMINI_API_KEY`.
|
|
65
|
+
|
|
66
|
+
Script đọc theo thứ tự: `process.env` → `.env` trong thư mục skill → `.claude/.env`.
|
|
67
|
+
|
|
68
|
+
**Không tự tạo file `.env` trong `skills/`** — `skills/` là hạ tầng đóng băng, chỉ principal
|
|
69
|
+
sửa. Cần khoá thì báo lại; principal sẽ đặt vào biến môi trường.
|
|
70
|
+
|
|
71
|
+
## Tham chiếu
|
|
72
|
+
|
|
73
|
+
| File | Khi nào đọc |
|
|
74
|
+
|---|---|
|
|
75
|
+
| `workflows/topic-search.md` | hỏi chủ đề cụ thể — đường nhanh nhất |
|
|
76
|
+
| `workflows/library-search.md` | hỏi cả thư viện — quét rộng |
|
|
77
|
+
| `workflows/repo-analysis.md` | context7 không có, phải đọc thẳng repo GitHub |
|
|
78
|
+
| `references/context7-patterns.md` | mẫu URL, repo đã biết |
|
|
79
|
+
| `references/errors.md` | script lỗi, chuỗi fallback |
|
|
80
|
+
| `references/advanced.md` | phiên bản, đa ngôn ngữ, ca biên |
|
|
81
|
+
|
|
82
|
+
## Sau khi lấy được
|
|
83
|
+
|
|
84
|
+
Tài liệu lấy về là **bằng chứng cho `research`**, không phải báo cáo. Ghi lại phiên bản và
|
|
85
|
+
ngày của tài liệu — tài liệu không có phiên bản thì gần như vô dụng cho việc đánh giá.
|
|
86
|
+
|
|
87
|
+
Script lỗi thì sửa rồi chạy lại cho tới khi được. Không bỏ qua script rồi tự đoán URL.
|