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,73 @@
|
|
|
1
|
+
# Tìm tài liệu cả thư viện
|
|
2
|
+
|
|
3
|
+
**Dùng khi:** câu hỏi rộng về cả một thư viện/framework, hoặc khi tìm theo chủ đề trả 404.
|
|
4
|
+
|
|
5
|
+
Chậm hơn và tốn context hơn `topic-search.md`. **Thử đường chủ đề trước.**
|
|
6
|
+
|
|
7
|
+
## Nhận dạng
|
|
8
|
+
|
|
9
|
+
- "tài liệu {thư viện}"
|
|
10
|
+
- "bắt đầu với {thư viện}"
|
|
11
|
+
- "{thư viện} dùng thế nào"
|
|
12
|
+
- "API reference của {thư viện}"
|
|
13
|
+
|
|
14
|
+
## Quy trình
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# 1. Phân loại
|
|
18
|
+
node .claude/skills/docs-seeker/scripts/detect-topic.js "<câu hỏi>"
|
|
19
|
+
# → {"isTopicSpecific": false}
|
|
20
|
+
|
|
21
|
+
# 2. Lấy llms.txt
|
|
22
|
+
node .claude/skills/docs-seeker/scripts/fetch-docs.js "<câu hỏi>"
|
|
23
|
+
# → nội dung llms.txt, thường 5–20+ URL
|
|
24
|
+
|
|
25
|
+
# 3. Xếp hạng URL — BƯỚC KHÔNG ĐƯỢC BỎ
|
|
26
|
+
cat llms.txt | node .claude/skills/docs-seeker/scripts/analyze-llms-txt.js -
|
|
27
|
+
# → {totalUrls, grouped: {critical, important, supplementary}, distribution}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Bước 3 là bước quyết định. 20 URL mà đọc hết thì phá ngân sách context của cả phiên. Script
|
|
31
|
+
xếp chúng thành ba nhóm — đọc `critical` trước, `important` nếu còn ngân sách, bỏ qua
|
|
32
|
+
`supplementary` trừ khi câu hỏi cần đúng phần đó.
|
|
33
|
+
|
|
34
|
+
## Đọc bao nhiêu
|
|
35
|
+
|
|
36
|
+
Script có trường `distribution` gợi ý chia việc cho nhiều agent song song. **Bỏ qua trường
|
|
37
|
+
đó** nếu loadout không cho giao việc.
|
|
38
|
+
|
|
39
|
+
Dùng thứ tự đọc thay cho chia agent:
|
|
40
|
+
|
|
41
|
+
| Số URL | Cách làm |
|
|
42
|
+
|---|---|
|
|
43
|
+
| 1–3 | đọc hết bằng `WebFetch` |
|
|
44
|
+
| 4–10 | đọc nhóm `critical`, rồi `important` nếu còn ngân sách |
|
|
45
|
+
| 11+ | **chỉ** nhóm `critical`; nói rõ là đã cắt và cắt theo tiêu chí nào |
|
|
46
|
+
|
|
47
|
+
Cắt bớt thì phải nói rõ đã cắt gì. Im lặng cắt rồi trình bày như đã đọc hết là báo cáo sai.
|
|
48
|
+
|
|
49
|
+
## Ví dụ — Astro
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
node .claude/skills/docs-seeker/scripts/detect-topic.js "tài liệu Astro"
|
|
53
|
+
# {"isTopicSpecific": false}
|
|
54
|
+
|
|
55
|
+
node .claude/skills/docs-seeker/scripts/fetch-docs.js "tài liệu Astro"
|
|
56
|
+
# script gọi: context7.com/withastro/astro/llms.txt → 8 URL
|
|
57
|
+
|
|
58
|
+
node .claude/skills/docs-seeker/scripts/analyze-llms-txt.js < llms.txt
|
|
59
|
+
# {totalUrls: 8, grouped: {critical: [...], important: [...], ...}}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Đọc `critical` (bắt đầu, cài đặt), rồi `important` (khái niệm lõi, component) nếu ngân
|
|
63
|
+
sách còn.
|
|
64
|
+
|
|
65
|
+
## Khi không ra
|
|
66
|
+
|
|
67
|
+
Script tự fallback theo thứ tự:
|
|
68
|
+
|
|
69
|
+
1. `fetch-docs.js` thử context7.com.
|
|
70
|
+
2. 404 → gợi ý dùng `WebSearch` tìm `llms.txt` của dự án.
|
|
71
|
+
3. Vẫn không có → `repo-analysis.md` (đọc thẳng repo GitHub).
|
|
72
|
+
|
|
73
|
+
Script lỗi thì **sửa rồi chạy lại cho tới khi được**, đừng bỏ script rồi tự đoán URL.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Đọc thẳng repo — khi không có llms.txt
|
|
2
|
+
|
|
3
|
+
**Đường cuối cùng.** Chậm (5–10 phút), tốn context nhất. Chỉ dùng khi
|
|
4
|
+
`topic-search.md` và `library-search.md` đều không ra.
|
|
5
|
+
|
|
6
|
+
## Khi nào
|
|
7
|
+
|
|
8
|
+
- Thư viện không có trên context7.com.
|
|
9
|
+
- Site chính thức không có `llms.txt`.
|
|
10
|
+
- Tài liệu tồn tại nhưng thiếu, phải đọc code mới rõ.
|
|
11
|
+
|
|
12
|
+
## Quy trình
|
|
13
|
+
|
|
14
|
+
### 1. Tìm repo
|
|
15
|
+
|
|
16
|
+
`WebSearch`: `"{thư viện} github repository"`
|
|
17
|
+
|
|
18
|
+
**Xác minh trước khi clone:** đúng repo chính thức chưa (không phải fork), còn hoạt động
|
|
19
|
+
không (commit gần đây), có `docs/` không. Clone nhầm một fork bỏ hoang rồi kết luận theo nó
|
|
20
|
+
là sai nguồn.
|
|
21
|
+
|
|
22
|
+
### 2. Clone
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
git clone <repo-url> /tmp/docs-analysis
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Cần đúng một phiên bản thì `git checkout <tag>`. **Luôn ghi lại tag/commit đã đọc** —
|
|
29
|
+
`research` yêu cầu ghi phiên bản kèm ngày cho mọi nguồn.
|
|
30
|
+
|
|
31
|
+
Clone về máy là tải mã nguồn lạ. Repo lớn hoặc không rõ nguồn gốc → **báo lại trước**.
|
|
32
|
+
|
|
33
|
+
### 3. Đóng gói
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
repomix --version || echo "chưa cài"
|
|
37
|
+
cd /tmp/docs-analysis
|
|
38
|
+
repomix --token-count-tree # XEM TRƯỚC token nằm ở đâu
|
|
39
|
+
repomix --include "README.md,docs/**,examples/**" -o repomix-output.xml
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Chưa cài `repomix` thì báo lại, đừng tự `npm install -g` (HOUSE-RULES §1.2).
|
|
43
|
+
|
|
44
|
+
**Chạy `--token-count-tree` trước và lọc bằng `--include`.** Gói cả repo rồi mới phát hiện
|
|
45
|
+
nó 200k token là hỏng cả phiên. Thứ bạn cần gần như luôn nằm ở `README.md`, `docs/`,
|
|
46
|
+
`examples/` — không phải toàn bộ `src/`.
|
|
47
|
+
|
|
48
|
+
### 4. Đọc và rút
|
|
49
|
+
|
|
50
|
+
Đọc file đã gói, rút theo thứ tự:
|
|
51
|
+
|
|
52
|
+
| Nguồn trong repo | Cho biết |
|
|
53
|
+
|---|---|
|
|
54
|
+
| `README.md` | cài đặt, tổng quan, ví dụ tối thiểu |
|
|
55
|
+
| `docs/` | hướng dẫn dùng, API reference |
|
|
56
|
+
| `examples/` | mẫu code thật |
|
|
57
|
+
| `CHANGELOG.md` | breaking change, phiên bản |
|
|
58
|
+
| `src/` | chỉ khi tài liệu không trả lời được |
|
|
59
|
+
|
|
60
|
+
`CHANGELOG.md` hay bị bỏ qua mà nó là nguồn tốt nhất cho câu hỏi "bản này có gì đổi".
|
|
61
|
+
|
|
62
|
+
### 5. Dọn
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
rm -rf /tmp/docs-analysis
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Bỏ bước này thì lần sau clone đè lên bản cũ và bạn đọc nhầm phiên bản.
|
|
69
|
+
|
|
70
|
+
## Ghi rõ khi báo cáo
|
|
71
|
+
|
|
72
|
+
Kết quả từ đường này **không phải tài liệu chính thức**. Bắt buộc ghi:
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
Nguồn: đọc repo <org/repo> tại <tag hoặc commit>, ngày <…>
|
|
76
|
+
Lưu ý: rút từ code và README, không phải tài liệu chính thức
|
|
77
|
+
Sức khoẻ repo: <số sao, commit gần nhất>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Dòng "sức khoẻ repo" quan trọng cho việc đánh giá của `research`: một thư viện không có
|
|
81
|
+
commit nào 18 tháng là thông tin, kể cả khi code của nó tốt.
|
|
82
|
+
|
|
83
|
+
## Không có repo nào
|
|
84
|
+
|
|
85
|
+
Không tìm được repo thì nói thẳng: không có nguồn sơ cấp. Những gì gom được từ
|
|
86
|
+
blog, tutorial, Stack Overflow là **nguồn thứ cấp** — chất lượng không đều, phải đối chiếu
|
|
87
|
+
ít nhất hai nguồn độc lập, và phải ghi rõ là thứ cấp trong báo cáo.
|
|
88
|
+
|
|
89
|
+
Bản gốc của workflow này gợi ý "chia cho nhiều Researcher agent" — bỏ qua nếu loadout
|
|
90
|
+
không cho giao việc.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Tìm tài liệu theo chủ đề cụ thể
|
|
2
|
+
|
|
3
|
+
**Dùng khi:** cần tài liệu về một tính năng / component / khái niệm cụ thể.
|
|
4
|
+
|
|
5
|
+
Nhanh nhất (10–15s), tốn ít token nhất, kết quả trúng đích nhất. **Đây là đường mặc định** —
|
|
6
|
+
chỉ chuyển sang tìm cả thư viện khi đường này không ra.
|
|
7
|
+
|
|
8
|
+
## Nhận dạng
|
|
9
|
+
|
|
10
|
+
- "dùng {tính năng} trong {thư viện} thế nào?"
|
|
11
|
+
- "tài liệu {component} của {thư viện}"
|
|
12
|
+
- "triển khai {tính năng} bằng {thư viện}"
|
|
13
|
+
|
|
14
|
+
## Quy trình
|
|
15
|
+
|
|
16
|
+
Đường dẫn tính từ CWD của phiên (`active workspace`), qua symlink skill.
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# 1. Phân loại truy vấn
|
|
20
|
+
node .claude/skills/docs-seeker/scripts/detect-topic.js "<câu hỏi>"
|
|
21
|
+
# → {"topic": "X", "library": "Y", "isTopicSpecific": true}
|
|
22
|
+
|
|
23
|
+
# 2. Lấy tài liệu — script tự dựng URL và tự fallback
|
|
24
|
+
node .claude/skills/docs-seeker/scripts/fetch-docs.js "<câu hỏi>"
|
|
25
|
+
# script gọi: context7.com/{library}/llms.txt?topic={topic}
|
|
26
|
+
# → nội dung llms.txt, thường 1–5 URL
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Rồi đọc URL bằng `WebFetch`.
|
|
30
|
+
|
|
31
|
+
**1–5 URL thì đọc thẳng.** Bản gốc của workflow này có bước "chia cho 2–3 Explorer agent
|
|
32
|
+
song song" — bỏ qua nếu loadout không cho giao việc. Đọc tuần tự, trong ngân sách 5 lượt
|
|
33
|
+
của `research`.
|
|
34
|
+
|
|
35
|
+
## Ví dụ
|
|
36
|
+
|
|
37
|
+
**Date picker của shadcn**
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
node .claude/skills/docs-seeker/scripts/detect-topic.js "dùng date picker trong shadcn thế nào?"
|
|
41
|
+
# {"topic": "date", "library": "shadcn/ui", "isTopicSpecific": true}
|
|
42
|
+
|
|
43
|
+
node .claude/skills/docs-seeker/scripts/fetch-docs.js "dùng date picker trong shadcn thế nào?"
|
|
44
|
+
# script gọi: context7.com/shadcn-ui/ui/llms.txt?topic=date
|
|
45
|
+
# → 2–3 URL về date
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Cache của Next.js**
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
node .claude/skills/docs-seeker/scripts/detect-topic.js "Next.js caching strategies"
|
|
52
|
+
# {"topic": "cache", "library": "next.js", "isTopicSpecific": true}
|
|
53
|
+
# script gọi: context7.com/vercel/next.js/llms.txt?topic=cache
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Vì sao đường này đáng ưu tiên
|
|
57
|
+
|
|
58
|
+
Trả về **chỉ tài liệu liên quan**, không phải toàn bộ thư viện. Nhanh hơn nhiều lần và
|
|
59
|
+
không phải lọc — quan trọng vì lý do một lượt tra cứu tồn tại là giữ context của bên giao
|
|
60
|
+
việc sạch.
|
|
61
|
+
|
|
62
|
+
## Khi không ra
|
|
63
|
+
|
|
64
|
+
URL theo chủ đề trả 404 → chuyển sang `library-search.md` (tìm cả thư viện).
|
|
65
|
+
|
|
66
|
+
context7 không có thư viện đó → `repo-analysis.md` (đọc thẳng repo GitHub).
|
|
67
|
+
|
|
68
|
+
Cả ba đều không ra → nói thẳng là không tìm được tài liệu sơ cấp, và những gì tìm
|
|
69
|
+
được là nguồn thứ cấp. Đừng lấp bằng blog rồi trình bày như tài liệu chính thức.
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: git
|
|
3
|
+
description: Thao tác git với conventional commit — stage, quét secret, tách commit theo type/scope, push, PR, merge. Kích hoạt khi principal yêu cầu commit/push/mở PR, hoặc khi cần đọc trạng thái repo trước lúc bàn giao.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# git — commit có kỷ luật
|
|
7
|
+
|
|
8
|
+
Skill này cần `Write`/`Edit` và `Bash`. Execution policy không cấp đủ thì chỉ đọc được trạng thái
|
|
9
|
+
repo, không commit được.
|
|
10
|
+
|
|
11
|
+
## Cổng chặn — đọc trước mọi thứ khác
|
|
12
|
+
|
|
13
|
+
**Không commit, không push, trừ khi principal yêu cầu** (HOUSE-RULES §1.3).
|
|
14
|
+
|
|
15
|
+
Không có ngoại lệ nào kiểu "làm xong rồi commit luôn cho gọn". Viết code xong thì báo cáo
|
|
16
|
+
và dừng; principal quyết định có commit không.
|
|
17
|
+
|
|
18
|
+
Bốn hành động **luôn phải hỏi lại từng lần**, kể cả khi lần trước đã được duyệt
|
|
19
|
+
(HOUSE-RULES §1.2):
|
|
20
|
+
|
|
21
|
+
| Hành động | Vì sao |
|
|
22
|
+
|---|---|
|
|
23
|
+
| `git push` | ra ngoài máy, người khác thấy ngay |
|
|
24
|
+
| `--force`, `--force-with-lease` | ghi đè lịch sử của người khác |
|
|
25
|
+
| `merge` vào nhánh chính | khó đảo ngược, ảnh hưởng mọi người |
|
|
26
|
+
| `git reset --hard`, xoá nhánh | mất việc chưa lưu |
|
|
27
|
+
|
|
28
|
+
## Quy trình commit
|
|
29
|
+
|
|
30
|
+
### 1. Stage và nhìn
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
git add -A && git diff --cached --stat && git diff --cached --name-only
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Đọc `--stat` trước khi viết message. Commit mà không biết mình đang commit gì là cách
|
|
37
|
+
nhanh nhất để kéo nhầm file sinh ra vào lịch sử.
|
|
38
|
+
|
|
39
|
+
### 2. Quét secret — bắt buộc, không bỏ
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
git diff --cached | grep -iE '(api[_-]?key|token|password|secret|credential)'
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Có khớp → **DỪNG**, báo principal, đề xuất `.gitignore`. Không tự quyết định là "chắc chỉ
|
|
46
|
+
là tên biến".
|
|
47
|
+
|
|
48
|
+
Với alp-code còn hai thứ **không bao giờ được vào commit**:
|
|
49
|
+
|
|
50
|
+
- `memory/` — trí nhớ là dữ liệu cục bộ từng máy, đã có trong `.gitignore`.
|
|
51
|
+
- `dist/` và `~/.alp/executions/` — compiled output và machine-local execution state.
|
|
52
|
+
|
|
53
|
+
Thấy chúng trong `--cached` nghĩa là `.gitignore` hỏng. Báo principal, đừng tự `git rm`.
|
|
54
|
+
|
|
55
|
+
### 3. Quyết định tách commit
|
|
56
|
+
|
|
57
|
+
**Tách khi:** trộn nhiều type (`feat` + `fix`, code + docs) · nhiều scope (`agents` +
|
|
58
|
+
`runtime`) · trộn config/deps với code · trên 10 file không liên quan nhau.
|
|
59
|
+
|
|
60
|
+
**Một commit khi:** cùng type và scope, ≤ 3 file, ≤ 50 dòng.
|
|
61
|
+
|
|
62
|
+
### 4. Viết message
|
|
63
|
+
|
|
64
|
+
Conventional commit, **tiếng Việt** cho phần mô tả — khớp lịch sử repo:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
fix: repoRoot của phiên + workspaces không còn path tuyệt đối
|
|
68
|
+
feat(acl): register alp-plugin workspace
|
|
69
|
+
docs: báo cáo chẩn đoán repoRoot
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Thân commit trả lời **vì sao**, không phải **làm gì** — `git diff` đã nói làm gì rồi.
|
|
73
|
+
Có issue liên quan thì dẫn số.
|
|
74
|
+
|
|
75
|
+
Chuẩn đầy đủ: `references/commit-standards.md`.
|
|
76
|
+
|
|
77
|
+
## Mẫu báo cáo về principal
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
✓ staged: N file (+X/−Y dòng)
|
|
81
|
+
✓ secret: sạch
|
|
82
|
+
✓ commit: <hash> type(scope): mô tả
|
|
83
|
+
✗ push: CHƯA — chờ principal duyệt
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Chưa push thì ghi rõ chưa push. Không viết mập mờ để principal tự hiểu là xong.
|
|
87
|
+
|
|
88
|
+
## Xử lý lỗi
|
|
89
|
+
|
|
90
|
+
| Lỗi | Làm gì |
|
|
91
|
+
|---|---|
|
|
92
|
+
| phát hiện secret | chặn commit, liệt kê file, báo principal |
|
|
93
|
+
| không có thay đổi | dừng, nói rõ, không tạo commit rỗng |
|
|
94
|
+
| push bị từ chối | đề xuất `git pull --rebase`, **hỏi trước khi chạy** |
|
|
95
|
+
| xung đột merge | báo principal, không tự chọn bên |
|
|
96
|
+
|
|
97
|
+
## Worktree
|
|
98
|
+
|
|
99
|
+
alp-code dùng worktree cho nhánh triển khai cô lập (`.worktrees/` đã trong `.gitignore`).
|
|
100
|
+
Stash stack **dùng chung** giữa mọi worktree — `git stash pop` trần có thể lấy nhầm việc
|
|
101
|
+
của phiên khác. Cần cất việc tạm thì tạo commit WIP, đừng stash.
|
|
102
|
+
|
|
103
|
+
## Tham chiếu
|
|
104
|
+
|
|
105
|
+
| File | Nội dung |
|
|
106
|
+
|---|---|
|
|
107
|
+
| `references/workflow-commit.md` | quy trình commit, logic tách |
|
|
108
|
+
| `references/workflow-push.md` | push và xử lý lỗi |
|
|
109
|
+
| `references/workflow-pr.md` | tạo PR, phân tích diff với remote |
|
|
110
|
+
| `references/workflow-merge.md` | merge nhánh |
|
|
111
|
+
| `references/commit-standards.md` | chuẩn conventional commit |
|
|
112
|
+
| `references/safety-protocols.md` | phát hiện secret, bảo vệ nhánh |
|
|
113
|
+
| `references/branch-management.md` | đặt tên, vòng đời nhánh |
|
|
114
|
+
| `references/gh-cli-guide.md` | lệnh `gh` |
|
|
115
|
+
|
|
116
|
+
## Ranh giới
|
|
117
|
+
|
|
118
|
+
- Không có subagent nào để đẩy output dài sang. Output git dài thì lọc bằng `--stat`,
|
|
119
|
+
`--oneline`, `-n`, đừng đổ nguyên vào context.
|
|
120
|
+
- Không push lên `main`/`master`, không force-push, không merge — trừ khi principal nói
|
|
121
|
+
thẳng, trong phiên này.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Quản lý nhánh
|
|
2
|
+
|
|
3
|
+
## Đặt tên
|
|
4
|
+
|
|
5
|
+
**Dạng:** `<type>/<mô-tả-kebab>`
|
|
6
|
+
|
|
7
|
+
| Type | Dùng cho | Ví dụ |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| `feature/` | tính năng mới | `feature/oauth-login` |
|
|
10
|
+
| `fix/` | sửa lỗi | `fix/session-repo-root` |
|
|
11
|
+
| `refactor/` | đổi cấu trúc | `refactor/api-cleanup` |
|
|
12
|
+
| `docs/` | tài liệu | `docs/api-reference` |
|
|
13
|
+
| `test/` | test | `test/integration-suite` |
|
|
14
|
+
| `chore/` | bảo trì | `chore/deps-update` |
|
|
15
|
+
| `hotfix/` | sửa gấp trên production | `hotfix/payment-crash` |
|
|
16
|
+
|
|
17
|
+
Xem `git branch -a` trước khi đặt tên mới — theo mẫu đang có, đừng tự nghĩ dạng mới.
|
|
18
|
+
|
|
19
|
+
## Vòng đời
|
|
20
|
+
|
|
21
|
+
### Tạo
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
git checkout main
|
|
25
|
+
git pull origin main
|
|
26
|
+
git checkout -b feature/ten-nhanh
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Luôn tạo từ `main` **đã pull mới**. Tạo từ một nhánh cũ thì diff sẽ dính cả thay đổi của
|
|
30
|
+
người khác, và PR sau đó không đọc được.
|
|
31
|
+
|
|
32
|
+
### Trong lúc làm
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
git add <file> && git commit -m "type(scope): mô tả"
|
|
36
|
+
|
|
37
|
+
git fetch origin
|
|
38
|
+
git rebase origin/main # HỎI TRƯỚC — rebase viết lại commit của bạn
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Trước khi merge
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
git push origin feature/ten-nhanh
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Sau rebase thì phải force — **chỉ trên nhánh feature của mình**, và dùng
|
|
48
|
+
`--force-with-lease`:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
git push --force-with-lease origin feature/ten-nhanh
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Sau khi merge
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
git branch -d feature/ten-nhanh # xoá local (an toàn: -d từ chối nếu chưa merge)
|
|
58
|
+
git push origin --delete feature/ten-nhanh # xoá remote — HỎI TRƯỚC
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Dùng `-d`, **không** dùng `-D`. `-d` từ chối xoá nhánh chưa merge; `-D` xoá bất chấp và đó
|
|
62
|
+
là cách mất việc.
|
|
63
|
+
|
|
64
|
+
## Worktree trong alp-code
|
|
65
|
+
|
|
66
|
+
Repo này dùng worktree cho nhánh triển khai cô lập (`.worktrees/` đã trong `.gitignore`).
|
|
67
|
+
|
|
68
|
+
Điều dễ nhầm: **nhánh là dùng chung giữa mọi worktree, chỉ working tree là riêng.** Một
|
|
69
|
+
nhánh đang được checkout ở worktree khác thì không checkout lại được ở đây — đó là tính
|
|
70
|
+
năng, không phải lỗi.
|
|
71
|
+
|
|
72
|
+
Stash stack cũng dùng chung. Xem phần cuối `safety-protocols.md`.
|
|
73
|
+
|
|
74
|
+
## Nhánh trong alp-code
|
|
75
|
+
|
|
76
|
+
`main` là nhánh chính. **Không push thẳng lên `main`** — làm trên nhánh, mở PR, principal
|
|
77
|
+
quyết định merge.
|
|
78
|
+
|
|
79
|
+
## Lệnh nhanh
|
|
80
|
+
|
|
81
|
+
| Việc | Lệnh |
|
|
82
|
+
|---|---|
|
|
83
|
+
| liệt kê nhánh | `git branch -a` |
|
|
84
|
+
| nhánh hiện tại | `git rev-parse --abbrev-ref HEAD` |
|
|
85
|
+
| chuyển nhánh | `git checkout <nhánh>` |
|
|
86
|
+
| tạo và chuyển | `git checkout -b <nhánh>` |
|
|
87
|
+
| xoá local | `git branch -d <nhánh>` |
|
|
88
|
+
| xoá remote | `git push origin --delete <nhánh>` |
|
|
89
|
+
| đổi tên | `git branch -m <cũ> <mới>` |
|
|
90
|
+
| liệt kê worktree | `git worktree list` |
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Chuẩn commit message
|
|
2
|
+
|
|
3
|
+
## Dạng
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
type(scope): mô tả
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Mô tả viết **tiếng Việt** — khớp lịch sử repo. Xem `git log --oneline -20` trước khi viết
|
|
10
|
+
cái đầu tiên.
|
|
11
|
+
|
|
12
|
+
## Type
|
|
13
|
+
|
|
14
|
+
| Type | Dùng khi |
|
|
15
|
+
|---|---|
|
|
16
|
+
| `feat` | tính năng mới |
|
|
17
|
+
| `fix` | sửa lỗi |
|
|
18
|
+
| `refactor` | đổi cấu trúc, không đổi hành vi |
|
|
19
|
+
| `docs` | chỉ tài liệu |
|
|
20
|
+
| `test` | test |
|
|
21
|
+
| `chore` | bảo trì, deps, config |
|
|
22
|
+
| `perf` | hiệu năng |
|
|
23
|
+
| `style` | định dạng, không đổi logic |
|
|
24
|
+
| `ci` | CI/CD |
|
|
25
|
+
|
|
26
|
+
## Scope trong alp-code
|
|
27
|
+
|
|
28
|
+
Lấy theo vùng thật của repo, không tự đặt mới:
|
|
29
|
+
|
|
30
|
+
`agents` · `delegation` · `runtime` · `hooks` · `installer` · `skills` · `scripts` · `memory`
|
|
31
|
+
|
|
32
|
+
Scope là tuỳ chọn. Thay đổi trải rộng nhiều vùng thì bỏ scope, đừng liệt kê ba scope một lúc.
|
|
33
|
+
|
|
34
|
+
## Luật
|
|
35
|
+
|
|
36
|
+
- **Dòng đầu ≈72 ký tự.** Rõ quan trọng hơn ngắn — thà 76 ký tự mà đọc hiểu ngay.
|
|
37
|
+
- Không có dấu chấm cuối dòng đầu.
|
|
38
|
+
- Dòng đầu nói **cái gì**. Thân commit nói **vì sao**.
|
|
39
|
+
- `git diff` đã kể *làm gì*, nên thân commit đừng kể lại. Nó tồn tại để trả lời câu hỏi
|
|
40
|
+
người đọc `git log` sáu tháng sau sẽ hỏi: *tại sao lại làm thế này?*
|
|
41
|
+
- Có issue liên quan thì dẫn số.
|
|
42
|
+
|
|
43
|
+
## Thân commit
|
|
44
|
+
|
|
45
|
+
Thay đổi không hiển nhiên thì **phải** có thân. Mẫu theo repo:
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
fix: repoRoot của phiên + workspaces không còn path tuyệt đối
|
|
49
|
+
|
|
50
|
+
<vì sao cách cũ hỏng — mô tả triệu chứng thật, không mô tả code>
|
|
51
|
+
|
|
52
|
+
- <thay đổi 1 — và vì sao chọn cách này>
|
|
53
|
+
- <thay đổi 2>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Attribution
|
|
57
|
+
|
|
58
|
+
Repo này **có** dùng trailer attribution — 5/8 commit gần nhất có. Giữ nguyên thói quen đó:
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
Co-Authored-By: <model> <noreply@anthropic.com>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Đây là khác biệt so với bản gốc của skill (cấm attribution). alp-code làm ngược lại, và
|
|
65
|
+
lịch sử repo là nguồn sự thật, không phải tài liệu skill.
|
|
66
|
+
|
|
67
|
+
## Ví dụ đúng
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
feat(agents): register alp-plugin workspace
|
|
71
|
+
fix(runtime): resolve claude/codex command via PATHEXT
|
|
72
|
+
docs: báo cáo chẩn đoán repoRoot + gitignore session-state ở gốc repo
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Ví dụ sai
|
|
76
|
+
|
|
77
|
+
| Sai | Vì sao |
|
|
78
|
+
|---|---|
|
|
79
|
+
| `Updated files` | không nói gì |
|
|
80
|
+
| `Fix bug` | bug nào? |
|
|
81
|
+
| `feat(auth): thêm login dùng bcrypt với salt 12 vòng` | kể *làm thế nào*, thuộc về thân commit |
|
|
82
|
+
| `feat(acl,hooks,skills): …` | ba scope một lúc — tách commit ra |
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# Hướng dẫn `gh`
|
|
2
|
+
|
|
3
|
+
Lệnh `gh` chia làm hai loại. Đọc bảng này trước khi chạy bất cứ lệnh nào bên dưới.
|
|
4
|
+
|
|
5
|
+
| Loại | Lệnh | Quy tắc |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| **Đọc** | `list`, `view`, `diff`, `status`, `browse` | chạy tự do |
|
|
8
|
+
| **Tác động ra ngoài** | `create`, `merge`, `comment`, `close`, `rerun`, `auth` | **hỏi principal từng lần** (HOUSE-RULES §1.2) |
|
|
9
|
+
|
|
10
|
+
## Xác thực
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
gh auth status # kiểm trạng thái — đọc, chạy được
|
|
14
|
+
gh auth login # tương tác — KHÔNG tự chạy, báo principal
|
|
15
|
+
gh auth logout # KHÔNG tự chạy
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Chưa đăng nhập thì báo principal chạy `gh auth login` — nó cần tương tác, agent chạy sẽ treo.
|
|
19
|
+
|
|
20
|
+
## Pull Request
|
|
21
|
+
|
|
22
|
+
### Tạo — cần duyệt
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
gh pr create --base main --head <nhánh> --title "feat: …" --body "…"
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Thân dài dùng heredoc:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
gh pr create --base main --title "feat(acl): …" --body "$(cat <<'EOF'
|
|
32
|
+
## Tóm tắt
|
|
33
|
+
- …
|
|
34
|
+
|
|
35
|
+
## Kiểm chứng
|
|
36
|
+
- [ ] …
|
|
37
|
+
EOF
|
|
38
|
+
)"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
gh pr create --draft --title "WIP: …" # nháp — rẻ hơn mở PR thật rồi phải đóng
|
|
43
|
+
gh pr create --reviewer @user1,@user2
|
|
44
|
+
gh pr create --label "bug,priority:high"
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Việc chưa xong hẳn thì mở **draft**. Xem `workflow-pr.md`.
|
|
48
|
+
|
|
49
|
+
### Đọc — chạy tự do
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
gh pr list
|
|
53
|
+
gh pr view 123
|
|
54
|
+
gh pr view 123 --web
|
|
55
|
+
gh pr checkout 123 # đổi nhánh làm việc — báo principal trước
|
|
56
|
+
gh pr diff 123
|
|
57
|
+
gh pr status
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Merge — cần duyệt
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
gh pr merge 123 # merge commit
|
|
64
|
+
gh pr merge 123 --squash
|
|
65
|
+
gh pr merge 123 --rebase
|
|
66
|
+
gh pr merge 123 --auto # tự merge khi check xanh
|
|
67
|
+
gh pr merge 123 --delete-branch
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**`--auto` đặc biệt nguy hiểm với agent:** nó merge *sau này*, không phải bây giờ. Chạy
|
|
71
|
+
xong rồi mà principal đổi ý thì merge vẫn xảy ra. Không dùng trừ khi principal nói thẳng.
|
|
72
|
+
|
|
73
|
+
### Bình luận — cần duyệt
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
gh pr comment 123 --body "…" # ra ngoài, người khác thấy
|
|
77
|
+
gh api repos/{owner}/{repo}/pulls/123/comments # đọc, tự do
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Issue
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
gh issue list # đọc
|
|
84
|
+
gh issue view 42 # đọc
|
|
85
|
+
gh issue create --title "…" --body "…" # cần duyệt
|
|
86
|
+
gh issue develop 42 -c # tạo nhánh từ issue — cần duyệt
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Repo
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
gh repo view
|
|
93
|
+
gh browse
|
|
94
|
+
gh browse path/to/file:42 # mở file đúng dòng
|
|
95
|
+
gh repo clone owner/repo # tải về máy — báo principal
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Workflow
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
gh run list # đọc
|
|
102
|
+
gh run view <run-id> # đọc
|
|
103
|
+
gh run watch # đọc, nhưng CHẶN cho tới khi workflow xong — cân nhắc
|
|
104
|
+
gh run rerun <run-id> # tốn tài nguyên CI — cần duyệt
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Đọc log CI hỏng: xem `alp-debug` nếu vai đó được giao, hoặc `gh run view <id> --log-failed`.
|
|
108
|
+
|
|
109
|
+
## Xuất JSON — để lọc, không để đọc
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
gh pr list --json number,title,author
|
|
113
|
+
gh pr view 123 --json commits,reviews
|
|
114
|
+
gh issue list --json number,title --jq '.[].title'
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Dùng `--json` + `--jq` để **cắt output trước khi nó vào context**. Không có subagent để
|
|
118
|
+
đẩy output dài sang, nên lọc là việc của bạn.
|
|
119
|
+
|
|
120
|
+
## Mẫu KHÔNG dùng
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# ❌ tạo PR rồi tự merge — hai thao tác cần duyệt, gộp thành một dòng
|
|
124
|
+
gh pr create --fill && gh pr merge --auto --squash
|
|
125
|
+
|
|
126
|
+
# ❌ đóng hàng loạt PR
|
|
127
|
+
gh pr list --state open --json number -q '.[].number' | xargs -I {} gh pr close {}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Hai mẫu này có trong bản gốc của skill. Chúng vi phạm HOUSE-RULES §1.2 — thao tác khó đảo
|
|
131
|
+
ngược, hàng loạt, không có bước dừng để principal xem. Cần làm thì làm từng cái, mỗi cái
|
|
132
|
+
một lần duyệt.
|