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.
Files changed (204) hide show
  1. package/CHANGELOG.md +770 -0
  2. package/LICENSE +21 -0
  3. package/README.md +295 -0
  4. package/alp.config.yaml +5 -0
  5. package/dist/src/agents/agent-definition.js +28 -0
  6. package/dist/src/agents/capability-catalog.js +33 -0
  7. package/dist/src/agents/compaction.js +36 -0
  8. package/dist/src/agents/errors.js +12 -0
  9. package/dist/src/agents/librarian.js +38 -0
  10. package/dist/src/agents/main.js +37 -0
  11. package/dist/src/agents/memory-grant.js +29 -0
  12. package/dist/src/agents/model-context.js +70 -0
  13. package/dist/src/agents/modes.js +134 -0
  14. package/dist/src/agents/oracle.js +36 -0
  15. package/dist/src/agents/read-thread.js +38 -0
  16. package/dist/src/agents/registry.js +238 -0
  17. package/dist/src/agents/render-identity.js +38 -0
  18. package/dist/src/agents/review.js +37 -0
  19. package/dist/src/agents/search.js +37 -0
  20. package/dist/src/agents/shared/house-rules.js +33 -0
  21. package/dist/src/agents/shared/principal.js +18 -0
  22. package/dist/src/agents/shared/voice.js +29 -0
  23. package/dist/src/agents/titling.js +32 -0
  24. package/dist/src/agents/types.js +15 -0
  25. package/dist/src/backend/execution-backend.js +2 -0
  26. package/dist/src/backend/local-execution-store.js +144 -0
  27. package/dist/src/backend/local-process-backend.js +533 -0
  28. package/dist/src/backend/local-supervisor.js +104 -0
  29. package/dist/src/cli/alp.js +380 -0
  30. package/dist/src/cli/commands/context.js +203 -0
  31. package/dist/src/cli/commands/delegate.js +136 -0
  32. package/dist/src/cli/commands/identity-sync.js +31 -0
  33. package/dist/src/cli/commands/init.js +184 -0
  34. package/dist/src/cli/commands/mode.js +22 -0
  35. package/dist/src/cli/commands/principal.js +114 -0
  36. package/dist/src/cli/commands/run-main.js +90 -0
  37. package/dist/src/cli/commands/runtime.js +21 -0
  38. package/dist/src/cli/mode-preference-store.js +62 -0
  39. package/dist/src/cli/mode-selector.js +178 -0
  40. package/dist/src/cli/update-check.js +77 -0
  41. package/dist/src/context/checkpoint.js +134 -0
  42. package/dist/src/context/compact-journal.js +153 -0
  43. package/dist/src/context/compact-payload.js +121 -0
  44. package/dist/src/context/continuity.js +70 -0
  45. package/dist/src/context/types.js +2 -0
  46. package/dist/src/delegation/backend-registry.js +40 -0
  47. package/dist/src/delegation/delegation-service.js +300 -0
  48. package/dist/src/delegation/types.js +12 -0
  49. package/dist/src/execution/execution-policy.js +96 -0
  50. package/dist/src/execution/execution-service.js +115 -0
  51. package/dist/src/execution/execution-store.js +78 -0
  52. package/dist/src/execution/identity-capsule.js +65 -0
  53. package/dist/src/execution/types.js +12 -0
  54. package/dist/src/hooks/execution-bridge.js +84 -0
  55. package/dist/src/index.js +4 -0
  56. package/dist/src/memory/adapters/markdown-file-store.js +257 -0
  57. package/dist/src/memory/adapters/memory-api-client.js +2 -0
  58. package/dist/src/memory/adapters/memory-path-mapper.js +76 -0
  59. package/dist/src/memory/adapters/remote-api-store.js +25 -0
  60. package/dist/src/memory/context-ranker.js +21 -0
  61. package/dist/src/memory/errors.js +58 -0
  62. package/dist/src/memory/memory-service.js +149 -0
  63. package/dist/src/memory/memory-store.js +2 -0
  64. package/dist/src/memory/types.js +2 -0
  65. package/dist/src/policy/capability-policy.js +29 -0
  66. package/dist/src/policy/delegation-policy.js +25 -0
  67. package/dist/src/policy/errors.js +10 -0
  68. package/dist/src/policy/invariants.js +31 -0
  69. package/dist/src/policy/memory-policy.js +22 -0
  70. package/dist/src/policy/policy-engine.js +85 -0
  71. package/dist/src/policy/types.js +8 -0
  72. package/dist/src/policy/workspace-policy.js +77 -0
  73. package/dist/src/principal/principal-profile-store.js +89 -0
  74. package/dist/src/runtime/adapter-files.js +147 -0
  75. package/dist/src/runtime/claude-adapter.js +177 -0
  76. package/dist/src/runtime/codex-adapter.js +169 -0
  77. package/dist/src/runtime/permission-rules.js +156 -0
  78. package/dist/src/runtime/render-session-context.js +124 -0
  79. package/dist/src/runtime/render-task-input.js +33 -0
  80. package/dist/src/runtime/runtime-adapter.js +2 -0
  81. package/dist/src/runtime/runtime-preference-store.js +66 -0
  82. package/dist/src/runtime/runtime-selector.js +178 -0
  83. package/dist/src/runtime/types.js +2 -0
  84. package/dist/src/runtime/windows-shim.js +57 -0
  85. package/dist/src/state-paths.js +49 -0
  86. package/dist/src/workflow/output-validator.js +27 -0
  87. package/dist/src/workflow/repair-policy.js +8 -0
  88. package/dist/src/workflow/types.js +22 -0
  89. package/dist/src/workflow/workflow-runner.js +81 -0
  90. package/hooks/compact-record.cjs +109 -0
  91. package/hooks/session-boot.cjs +112 -0
  92. package/hooks/session-end.cjs +34 -0
  93. package/package.json +48 -0
  94. package/scaffold/memory/INDEX.md +27 -0
  95. package/scaffold/memory/README.md +76 -0
  96. package/scaffold/memory/projects/INDEX.md +22 -0
  97. package/scaffold/memory/projects/PROTOCOL.md +128 -0
  98. package/scaffold/memory/projects/_template/PROJECT.md +45 -0
  99. package/scripts/alp.cjs +126 -0
  100. package/scripts/alp.ps1 +4 -0
  101. package/scripts/alp.sh +3 -0
  102. package/scripts/bootstrap.cjs +144 -0
  103. package/scripts/checkout-release.cjs +30 -0
  104. package/scripts/delegate.cjs +19 -0
  105. package/scripts/doctor.cjs +158 -0
  106. package/scripts/doctor.sh +3 -0
  107. package/scripts/ensure-state.cjs +22 -0
  108. package/scripts/lib/cli-link.cjs +375 -0
  109. package/scripts/lib/codex-role.cjs +18 -0
  110. package/scripts/lib/delegation/command-runner.cjs +108 -0
  111. package/scripts/lib/delegation/config.cjs +81 -0
  112. package/scripts/lib/install-paths.cjs +154 -0
  113. package/scripts/lib/release-manifest.cjs +42 -0
  114. package/scripts/lib/semver-lite.cjs +20 -0
  115. package/scripts/lib/state.cjs +274 -0
  116. package/scripts/lib/uninstall.cjs +252 -0
  117. package/scripts/lib/update-check-worker.cjs +21 -0
  118. package/scripts/lib/update.cjs +395 -0
  119. package/scripts/run-role.cjs +42 -0
  120. package/scripts/run-role.ps1 +4 -0
  121. package/scripts/run-role.sh +3 -0
  122. package/scripts/sync-project-index.sh +167 -0
  123. package/skills/agent-memory/SKILL.md +109 -0
  124. package/skills/alp-debug/SKILL.md +90 -0
  125. package/skills/alp-debug/references/defense-in-depth.md +118 -0
  126. package/skills/alp-debug/references/investigation-methodology.md +106 -0
  127. package/skills/alp-debug/references/log-and-ci-analysis.md +96 -0
  128. package/skills/alp-debug/references/performance-diagnostics.md +112 -0
  129. package/skills/alp-debug/references/reporting-standards.md +120 -0
  130. package/skills/alp-debug/references/root-cause-tracing.md +134 -0
  131. package/skills/alp-debug/references/systematic-debugging.md +93 -0
  132. package/skills/alp-debug/references/verification.md +86 -0
  133. package/skills/alp-debug/scripts/find-polluter.sh +63 -0
  134. package/skills/alp-debug/scripts/find-polluter.test.md +102 -0
  135. package/skills/alp-plan/SKILL.md +128 -0
  136. package/skills/alp-plan/references/archive-workflow.md +77 -0
  137. package/skills/alp-plan/references/codebase-understanding.md +55 -0
  138. package/skills/alp-plan/references/output-standards.md +96 -0
  139. package/skills/alp-plan/references/plan-organization.md +129 -0
  140. package/skills/alp-plan/references/red-team-personas.md +76 -0
  141. package/skills/alp-plan/references/red-team-workflow.md +81 -0
  142. package/skills/alp-plan/references/research-phase.md +57 -0
  143. package/skills/alp-plan/references/scope-challenge.md +82 -0
  144. package/skills/alp-plan/references/solution-design.md +76 -0
  145. package/skills/alp-plan/references/validate-question-framework.md +89 -0
  146. package/skills/alp-plan/references/validate-workflow.md +83 -0
  147. package/skills/alp-predict/SKILL.md +98 -0
  148. package/skills/alp-scenario/SKILL.md +86 -0
  149. package/skills/code-review/SKILL.md +111 -0
  150. package/skills/code-review/references/code-review-reception.md +114 -0
  151. package/skills/code-review/references/edge-case-scouting.md +78 -0
  152. package/skills/code-review/references/verification-before-completion.md +117 -0
  153. package/skills/delegation/SKILL.md +46 -0
  154. package/skills/docs-seeker/.env.example +15 -0
  155. package/skills/docs-seeker/SKILL.md +87 -0
  156. package/skills/docs-seeker/package.json +25 -0
  157. package/skills/docs-seeker/references/advanced.md +82 -0
  158. package/skills/docs-seeker/references/context7-patterns.md +68 -0
  159. package/skills/docs-seeker/references/errors.md +72 -0
  160. package/skills/docs-seeker/scripts/analyze-llms-txt.js +211 -0
  161. package/skills/docs-seeker/scripts/detect-topic.js +172 -0
  162. package/skills/docs-seeker/scripts/fetch-docs.js +213 -0
  163. package/skills/docs-seeker/scripts/tests/run-tests.js +72 -0
  164. package/skills/docs-seeker/scripts/tests/test-analyze-llms.js +119 -0
  165. package/skills/docs-seeker/scripts/tests/test-detect-topic.js +112 -0
  166. package/skills/docs-seeker/scripts/tests/test-fetch-docs.js +84 -0
  167. package/skills/docs-seeker/scripts/utils/env-loader.js +94 -0
  168. package/skills/docs-seeker/workflows/library-search.md +73 -0
  169. package/skills/docs-seeker/workflows/repo-analysis.md +90 -0
  170. package/skills/docs-seeker/workflows/topic-search.md +69 -0
  171. package/skills/git/SKILL.md +121 -0
  172. package/skills/git/references/branch-management.md +90 -0
  173. package/skills/git/references/commit-standards.md +82 -0
  174. package/skills/git/references/gh-cli-guide.md +132 -0
  175. package/skills/git/references/safety-protocols.md +86 -0
  176. package/skills/git/references/workflow-commit.md +89 -0
  177. package/skills/git/references/workflow-merge.md +63 -0
  178. package/skills/git/references/workflow-pr.md +70 -0
  179. package/skills/git/references/workflow-push.md +62 -0
  180. package/skills/gkg/SKILL.md +87 -0
  181. package/skills/gkg/references/cli-commands.md +92 -0
  182. package/skills/gkg/references/http-api.md +99 -0
  183. package/skills/gkg/references/language-support.md +54 -0
  184. package/skills/problem-solving/SKILL.md +86 -0
  185. package/skills/problem-solving/references/attribution.md +48 -0
  186. package/skills/problem-solving/references/collision-zone-thinking.md +71 -0
  187. package/skills/problem-solving/references/inversion-exercise.md +88 -0
  188. package/skills/problem-solving/references/meta-pattern-recognition.md +80 -0
  189. package/skills/problem-solving/references/scale-game.md +82 -0
  190. package/skills/problem-solving/references/simplification-cascades.md +83 -0
  191. package/skills/problem-solving/references/when-stuck.md +76 -0
  192. package/skills/repomix/SKILL.md +94 -0
  193. package/skills/repomix/references/configuration.md +134 -0
  194. package/skills/repomix/references/usage-patterns.md +106 -0
  195. package/skills/repomix/scripts/.coverage +0 -0
  196. package/skills/repomix/scripts/README.md +179 -0
  197. package/skills/repomix/scripts/repomix_batch.py +455 -0
  198. package/skills/repomix/scripts/repos.example.json +15 -0
  199. package/skills/repomix/scripts/requirements.txt +15 -0
  200. package/skills/repomix/scripts/tests/test_repomix_batch.py +531 -0
  201. package/skills/research/SKILL.md +107 -0
  202. package/skills/security-scan/SKILL.md +101 -0
  203. package/skills/security-scan/references/secret-patterns.md +75 -0
  204. package/skills/security-scan/references/vulnerability-patterns.md +136 -0
@@ -0,0 +1,86 @@
1
+ # Luật an toàn git
2
+
3
+ ## Quét secret
4
+
5
+ ```bash
6
+ git diff --cached | grep -iE '(AKIA|api[_-]?key|token|password|secret|credential|private[_-]?key|mongodb://|postgres://|mysql://|redis://|-----BEGIN)'
7
+ ```
8
+
9
+ | Nhóm | Mẫu | Ví dụ |
10
+ |---|---|---|
11
+ | API key | `api[_-]?key`, `apiKey` | `API_KEY=abc123` |
12
+ | AWS | `AKIA[0-9A-Z]{16}` | `AKIAIOSFODNN7EXAMPLE` |
13
+ | Token | `token`, `auth_token`, `jwt` | `AUTH_TOKEN=xyz` |
14
+ | Mật khẩu | `password`, `passwd`, `pwd` | `DB_PASSWORD=…` |
15
+ | Private key | `-----BEGIN PRIVATE KEY-----` | file PEM |
16
+ | Chuỗi kết nối DB | `mongodb://`, `postgres://`, `mysql://` | có kèm credential |
17
+ | OAuth | `client_secret`, `oauth_token` | `CLIENT_SECRET=…` |
18
+
19
+ **File luôn phải cảnh báo:** `.env`, `.env.*` (trừ `.env.example`) · `*.key`, `*.pem`,
20
+ `*.p12` · `credentials.json`, `secrets.json` · `config/private.*`
21
+
22
+ ### Khi phát hiện
23
+
24
+ 1. **Chặn commit ngay.**
25
+ 2. In dòng khớp: `git diff --cached | grep -B2 -A2 <mẫu>`
26
+ 3. Báo principal: thêm vào `.gitignore` hay chuyển sang biến môi trường.
27
+ 4. Đề xuất bỏ stage: `git reset HEAD <file>` — **hỏi trước khi chạy**.
28
+ 5. Nếu secret **đã từng được commit** thì xoá file là chưa đủ: nó nằm trong lịch sử. Nói
29
+ thẳng điều đó và khuyến nghị xoay khoá.
30
+
31
+ ## Hai đường dẫn không bao giờ được commit — riêng của alp-code
32
+
33
+ | Đường dẫn | Vì sao |
34
+ |---|---|
35
+ | `memory/**` | trí nhớ là dữ liệu cục bộ từng máy. Đẩy lên remote là rò dữ liệu của principal |
36
+ | `~/.alp/executions/**` | `settings.json`, `.acl-stamp`, `skills/` đều do `npm run build` sinh, chứa path tuyệt đối của máy này |
37
+
38
+ Thấy chúng trong `git diff --cached` nghĩa là `.gitignore` hỏng. Báo principal, không tự
39
+ `git rm` — xoá nhầm `memory/` là mất thật, không khôi phục từ remote được.
40
+
41
+ ## Bảo vệ nhánh
42
+
43
+ **Không bao giờ force push lên:** `main`, `master`, `production`, `prod`, `release/*`.
44
+
45
+ Force push trên nhánh feature: chỉ khi principal nói thẳng, và dùng `--force-with-lease`
46
+ chứ không phải `-f`. `--force-with-lease` từ chối ghi đè khi remote có commit bạn chưa thấy.
47
+
48
+ ## So bằng remote, không so bằng local
49
+
50
+ ```
51
+ ✅ git diff origin/main...origin/feature
52
+ ❌ git diff main...HEAD # dính cả thay đổi local chưa push
53
+ ```
54
+
55
+ Trước khi merge, thử khô:
56
+
57
+ ```bash
58
+ git merge --no-commit --no-ff origin/<nhánh> && git merge --abort
59
+ ```
60
+
61
+ ## Khôi phục
62
+
63
+ | Việc | Lệnh | Mức nguy hiểm |
64
+ |---|---|---|
65
+ | bỏ commit cuối, giữ thay đổi đã stage | `git reset --soft HEAD~1` | an toàn |
66
+ | bỏ commit cuối, giữ thay đổi chưa stage | `git reset HEAD~1` | an toàn |
67
+ | huỷ merge đang dở | `git merge --abort` | an toàn |
68
+ | bỏ thay đổi một file | `git checkout -- <file>` | **mất việc chưa lưu** |
69
+ | bỏ toàn bộ thay đổi | `git reset --hard HEAD` | **mất việc chưa lưu** |
70
+
71
+ Hai dòng cuối là **khó đảo ngược**: phải hỏi principal từng lần (HOUSE-RULES §1.2).
72
+ `git reset --soft HEAD~1` chỉ áp dụng cho commit **chưa push** — đã push rồi thì việc sửa
73
+ lịch sử ảnh hưởng người khác, hỏi trước.
74
+
75
+ ## Stash trong worktree
76
+
77
+ alp-code dùng worktree, và **stash stack là dùng chung giữa mọi worktree**. `git stash pop`
78
+ trần có thể lấy nhầm việc của phiên khác đang chạy song song.
79
+
80
+ Cần cất việc tạm → tạo commit WIP. Buộc phải stash thì đặt tên và lấy lại theo SHA:
81
+
82
+ ```bash
83
+ git stash push -u -m "<nhãn riêng>"
84
+ git stash list --format='%H %gs' # lấy SHA của đúng entry mình vừa tạo
85
+ git stash apply <sha> # apply, KHÔNG pop
86
+ ```
@@ -0,0 +1,89 @@
1
+ # Quy trình commit
2
+
3
+ Tự chạy. Không có subagent nào để đẩy output sang.
4
+
5
+ ## 1. Stage và phân nhóm
6
+
7
+ ```bash
8
+ git add -A && \
9
+ echo "=== ĐÃ STAGE ===" && git diff --cached --stat && \
10
+ echo "=== SECRET ===" && \
11
+ git diff --cached | grep -c -iE '(api[_-]?key|token|password|secret|credential)' | awk '{print "SECRET:"$1}' && \
12
+ echo "=== NHÓM ===" && \
13
+ git diff --cached --name-only | awk -F'/' '{
14
+ if ($0 ~ /^memory\//) print "CẤM:"$0
15
+ else if ($0 ~ /^identity\/[^\/]+\/\.claude\//) print "CẤM:"$0
16
+ else if ($0 ~ /\.(md|txt)$/) print "docs:"$0
17
+ else if ($0 ~ /test|spec/) print "test:"$0
18
+ else if ($0 ~ /^(scripts|hooks)\//) print "code:"$0
19
+ else if ($0 ~ /package\.json|lock/) print "deps:"$0
20
+ else print "code:"$0
21
+ }'
22
+ ```
23
+
24
+ **SECRET > 0** → DỪNG, in các dòng khớp, chặn commit, báo principal.
25
+
26
+ **Có dòng `CẤM:`** → `.gitignore` đang hỏng. Hai thứ này không bao giờ được vào commit:
27
+
28
+ | Đường dẫn | Vì sao |
29
+ |---|---|
30
+ | `memory/**` | trí nhớ là dữ liệu cục bộ từng máy, không đi theo git |
31
+ | `~/.alp/executions/**` | sản phẩm của `npm run build`, chứa path tuyệt đối của máy này |
32
+
33
+ Báo principal. **Không tự `git rm`** — xoá nhầm trí nhớ là mất thật.
34
+
35
+ ## 2. Quyết định tách
36
+
37
+ **Một commit:** cùng type và scope, ≤ 3 file, ≤ 50 dòng.
38
+
39
+ **Nhiều commit:** trộn type/scope → tách theo nhóm, commit theo thứ tự này:
40
+
41
+ | Thứ tự | Nhóm | Prefix |
42
+ |---|---|---|
43
+ | 1 | deps | `chore(deps): …` |
44
+ | 2 | code | `feat|fix|refactor(scope): …` |
45
+ | 3 | test | `test: …` |
46
+ | 4 | docs | `docs: …` |
47
+
48
+ Deps trước code vì code có thể phụ thuộc deps mới — commit ngược thứ tự thì có một commit
49
+ ở giữa không build được.
50
+
51
+ Scope trong alp-code lấy theo vùng thật: `agents`, `delegation`, `runtime`, `installer`,
52
+ `hooks`, `skills`. Xem `git log --oneline -20` để theo scope đã dùng, đừng tự đặt scope mới.
53
+
54
+ ## 3. Commit
55
+
56
+ Một commit:
57
+
58
+ ```bash
59
+ git commit -m "type(scope): mô tả"
60
+ ```
61
+
62
+ Nhiều commit — làm tuần tự, mỗi nhóm một lần:
63
+
64
+ ```bash
65
+ git reset && git add <file…> && git commit -m "type(scope): mô tả"
66
+ ```
67
+
68
+ `git reset` ở đây chỉ bỏ stage, **không** đụng working tree. Đừng nhầm với
69
+ `git reset --hard`.
70
+
71
+ ## 4. Push
72
+
73
+ ```bash
74
+ git push
75
+ ```
76
+
77
+ **Chỉ push khi principal nói thẳng trong phiên này** — "push", "commit rồi push".
78
+ Được duyệt lần trước không tính cho lần này (HOUSE-RULES §1.2).
79
+
80
+ Không push lên `main`/`master`. Không `--force`.
81
+
82
+ ## Báo cáo
83
+
84
+ ```
85
+ ✓ staged: N file (+X/−Y dòng)
86
+ ✓ secret: sạch
87
+ ✓ commit: <hash> type(scope): mô tả
88
+ ✗ push: CHƯA — chờ principal duyệt
89
+ ```
@@ -0,0 +1,63 @@
1
+ # Quy trình merge
2
+
3
+ **Merge vào nhánh chính là hành động khó đảo ngược.** Phải được principal nói thẳng trong
4
+ phiên này. Không tự merge, kể cả khi thấy "rõ ràng là xong rồi".
5
+
6
+ Biến: `TO` = nhánh đích (mặc định `main`) · `FROM` = nhánh nguồn (mặc định nhánh hiện tại).
7
+
8
+ ## 1. Đồng bộ với remote
9
+
10
+ ```bash
11
+ git fetch origin
12
+ git checkout {TO}
13
+ git pull origin {TO}
14
+ ```
15
+
16
+ ## 2. Thử khô trước
17
+
18
+ ```bash
19
+ git merge --no-commit --no-ff origin/{FROM}
20
+ git merge --abort
21
+ ```
22
+
23
+ Biết trước có xung đột hay không **trước khi** bắt đầu merge thật. Đây là bước rẻ nhất
24
+ trong cả quy trình và là bước hay bị bỏ nhất.
25
+
26
+ ## 3. Merge
27
+
28
+ ```bash
29
+ git merge origin/{FROM} --no-ff -m "merge: {FROM} vào {TO}"
30
+ ```
31
+
32
+ **Vì sao `origin/{FROM}` chứ không phải `{FROM}`:** để chắc chỉ merge thứ đã commit *và* đã
33
+ push. Merge nhánh local có thể kéo theo WIP chưa ai thấy.
34
+
35
+ ## 4. Xung đột
36
+
37
+ Có xung đột → **báo principal, không tự chọn bên**. Chọn sai bên trong một merge là mất
38
+ code mà `git diff` sau đó không cho thấy.
39
+
40
+ Principal quyết rồi thì:
41
+
42
+ ```bash
43
+ git add <file đã giải quyết> && git commit
44
+ ```
45
+
46
+ Không dùng `git add .` sau khi giải quyết xung đột — nó nuốt luôn file khác đang dở.
47
+
48
+ ## 5. Push
49
+
50
+ Xem `workflow-push.md`. Vẫn cần duyệt riêng — duyệt merge không phải duyệt push.
51
+
52
+ ## Xử lý lỗi
53
+
54
+ | Lỗi | Làm gì |
55
+ |---|---|
56
+ | xung đột | báo principal, không tự chọn bên |
57
+ | không tìm thấy nhánh | kiểm tên, chắc là đã push lên remote chưa |
58
+ | push bị từ chối | `git pull --rebase` — hỏi trước |
59
+
60
+ ## Worktree
61
+
62
+ alp-code dùng worktree. Merge trong một worktree vẫn ảnh hưởng repo chung — nhánh là dùng
63
+ chung, chỉ có working tree là riêng. Đừng nghĩ mình đang ở chỗ cô lập nên merge nào cũng an toàn.
@@ -0,0 +1,70 @@
1
+ # Quy trình mở Pull Request
2
+
3
+ Mở PR là **đưa việc ra ngoài** — cần principal duyệt như push (HOUSE-RULES §1.2).
4
+
5
+ Biến: `BASE` = nhánh đích (mặc định `main`) · `HEAD` = nhánh nguồn (mặc định nhánh hiện tại).
6
+
7
+ ## Luật lõi: so bằng diff REMOTE
8
+
9
+ PR dựng trên nhánh **trên remote**. Diff local có cả thứ chưa push, nên mô tả PR viết theo
10
+ diff local sẽ kể những thay đổi mà người review không nhìn thấy.
11
+
12
+ **Không dùng để soạn nội dung PR:** `git diff main...HEAD` · `git diff --cached` ·
13
+ `git status`. Ba lệnh này đều so với working tree local.
14
+
15
+ ## 1. Đồng bộ và phân tích
16
+
17
+ ```bash
18
+ git fetch origin && \
19
+ BASE=${BASE:-main} && \
20
+ HEAD=$(git rev-parse --abbrev-ref HEAD) && \
21
+ echo "=== PR: $HEAD → $BASE ===" && \
22
+ echo "=== COMMIT ===" && \
23
+ git log origin/$BASE...origin/$HEAD --oneline && \
24
+ echo "=== FILE ===" && \
25
+ git diff origin/$BASE...origin/$HEAD --stat
26
+ ```
27
+
28
+ Báo "nhánh chưa có trên remote" → push trước (cần duyệt), rồi chạy lại.
29
+
30
+ Diff rỗng → dừng, báo principal "không có thay đổi nào để mở PR". Đừng mở PR rỗng.
31
+
32
+ ## 2. Soạn nội dung
33
+
34
+ **Tiêu đề:** conventional commit, dưới 72 ký tự, tiếng Việt cho phần mô tả, **không** kèm
35
+ số phiên bản.
36
+
37
+ **Thân:** tóm tắt gạch đầu dòng + checklist kiểm chứng. Trả lời *vì sao*, không phải *làm
38
+ gì* — diff đã nói làm gì.
39
+
40
+ ## 3. Tạo PR
41
+
42
+ ```bash
43
+ gh pr create --base "$BASE" --head "$HEAD" --title "…" --body "$(cat <<'EOF'
44
+ ## Tóm tắt
45
+ - …
46
+
47
+ ## Kiểm chứng
48
+ - [ ] …
49
+
50
+ ## Câu hỏi còn mở
51
+ - …
52
+ EOF
53
+ )"
54
+ ```
55
+
56
+ Mở **draft PR** (`--draft`) khi việc chưa xong hẳn — rẻ hơn nhiều so với mở PR thật rồi
57
+ phải đóng.
58
+
59
+ ## Xử lý lỗi
60
+
61
+ | Lỗi | Làm gì |
62
+ |---|---|
63
+ | nhánh chưa có trên remote | push trước (xin duyệt), rồi chạy lại |
64
+ | diff rỗng | dừng, báo principal |
65
+ | push bị từ chối | `git pull --rebase` — hỏi trước |
66
+ | `gh` chưa đăng nhập | `gh auth status`; báo principal, đừng tự đăng nhập |
67
+
68
+ ## Sau khi tạo
69
+
70
+ Báo principal **URL của PR**. Không tự merge PR vừa mở — xem `workflow-merge.md`.
@@ -0,0 +1,62 @@
1
+ # Quy trình push
2
+
3
+ **Push là hành động khó đảo ngược** — ra khỏi máy, người khác thấy ngay. Phải được
4
+ principal duyệt **trong phiên này** (HOUSE-RULES §1.2). Không có "lần trước đã duyệt rồi".
5
+
6
+ ## 1. Kiểm tra trạng thái
7
+
8
+ ```bash
9
+ git status && \
10
+ git log origin/$(git rev-parse --abbrev-ref HEAD)..HEAD --oneline 2>/dev/null || echo "CHƯA_CÓ_UPSTREAM"
11
+ ```
12
+
13
+ - Còn thay đổi chưa commit → báo principal, đề xuất commit trước.
14
+ - `CHƯA_CÓ_UPSTREAM` → dùng `git push -u origin HEAD`.
15
+
16
+ Đọc danh sách commit sắp push **trước khi push**. Push nhầm một commit chứa `memory/` là
17
+ đẩy dữ liệu cục bộ của principal lên remote.
18
+
19
+ ## 2. Push
20
+
21
+ ```bash
22
+ git push origin HEAD
23
+ ```
24
+
25
+ **Không push lên `main`/`master`.** Nhánh chính chỉ principal đụng.
26
+
27
+ ## Xử lý lỗi
28
+
29
+ | Lỗi | Nguyên nhân | Làm gì |
30
+ |---|---|---|
31
+ | `rejected - non-fast-forward` | remote có commit mới hơn | đề xuất `git pull --rebase` — **hỏi trước khi chạy**, rebase viết lại commit của bạn |
32
+ | `no upstream branch` | nhánh chưa track | `git push -u origin HEAD` |
33
+ | `Authentication failed` | sai credential | kiểm `gh auth status` hoặc SSH key — báo principal, đừng tự đổi cấu hình auth |
34
+ | `Repository not found` | sai remote | kiểm `git remote -v` |
35
+ | `Permission denied` | không có quyền ghi | báo principal |
36
+
37
+ ## Force push
38
+
39
+ **Không bao giờ force push lên `main`/`master`/nhánh production.** Không có ngoại lệ.
40
+
41
+ Trên nhánh feature, chỉ khi principal nói thẳng:
42
+
43
+ ```bash
44
+ git push --force-with-lease origin HEAD
45
+ ```
46
+
47
+ Dùng `--force-with-lease`, **không** dùng `-f` trần: `--force-with-lease` từ chối ghi đè
48
+ nếu remote có commit bạn chưa thấy. `-f` thì ghi đè bất chấp — đó là cách xoá việc của
49
+ người khác mà không ai biết.
50
+
51
+ Cảnh báo principal trước: force push viết lại lịch sử, ai đang làm trên nhánh đó có thể mất
52
+ việc.
53
+
54
+ ## Báo cáo
55
+
56
+ ```
57
+ ✓ pushed: N commit → origin/<nhánh>
58
+ - abc123 feat(acl): …
59
+ - def456 fix(hooks): …
60
+ ```
61
+
62
+ Không push thì nói rõ chưa push và vì sao.
@@ -0,0 +1,87 @@
1
+ ---
2
+ name: gkg
3
+ description: Điều hướng code theo ngữ nghĩa bằng GitLab Knowledge Graph — tìm định nghĩa, tìm mọi chỗ gọi, phân tích ảnh hưởng trước khi refactor. Kích hoạt khi ripgrep trả quá nhiều kết quả trùng tên hoặc khi cần chắc đã tìm hết call-site.
4
+ ---
5
+
6
+ # gkg — tìm theo ngữ nghĩa, không theo chuỗi
7
+
8
+ Công cụ **bổ sung** cho `rg`/`Grep`, không thay thế.
9
+
10
+ Khi nào nó hơn `rg`: tên symbol trùng với từ thông thường, cùng tên ở nhiều module, hoặc
11
+ câu hỏi là "sửa chỗ này thì vỡ những đâu" — `rg` trả chuỗi khớp, `gkg` trả quan hệ thật
12
+ trong AST.
13
+
14
+ Khi nào `rg` đủ và nhanh hơn: tên đủ hiếm, tìm trong một thư mục, tìm chuỗi trong config
15
+ hay tài liệu. **Mặc định vẫn là `rg`** — `gkg` phải index trước, và index tốn thời gian.
16
+
17
+ ## Kiểm tra trước khi dùng
18
+
19
+ ```bash
20
+ gkg --version
21
+ ```
22
+
23
+ Chưa cài thì **báo lại, đừng tự cài**. Cài phần mềm là hành động khó đảo ngược
24
+ (HOUSE-RULES §1.2). Cứ trả lời bằng `rg` và nói rõ trong báo cáo là chưa có `gkg`.
25
+
26
+ Cài (chỉ khi đã được duyệt):
27
+
28
+ ```bash
29
+ curl -fsSL https://gitlab.com/gitlab-org/rust/knowledge-graph/-/raw/main/install.sh | bash
30
+ ```
31
+
32
+ ## Quy trình
33
+
34
+ ```bash
35
+ gkg index <đường dẫn workspace> --stats # index — chỉ workspace trong loadout
36
+ gkg server start # bật server để query
37
+ # query qua HTTP API: http://localhost:27495
38
+ gkg server stop # PHẢI dừng trước khi index lại
39
+ ```
40
+
41
+ **Chỉ index workspace có trong `workspaces.read` của `compiled AgentDefinition`.** Index một repo ngoài
42
+ danh sách là đọc thứ mình không được đọc, kể cả khi filesystem không chặn.
43
+
44
+ Dữ liệu index nằm ở `~/.gkg/` — ngoài repo, nên nó sống qua nhiều phiên. Index lại khi code
45
+ đã đổi nhiều, đừng index mỗi phiên.
46
+
47
+ ## Ba việc chính
48
+
49
+ | Việc | Cách |
50
+ |---|---|
51
+ | Tìm định nghĩa | index → `server start` → query symbol |
52
+ | Tìm mọi chỗ gọi | query `get_references` cho symbol đó |
53
+ | Phân tích ảnh hưởng | `get_references` cho từng symbol sắp đổi, đọc hết call-site trước khi kết luận |
54
+
55
+ Phân tích ảnh hưởng là chỗ skill này đáng giá nhất: ai đó sắp refactor và cần biết vỡ
56
+ những đâu. Trả lời "tôi grep thấy 3 chỗ" khi thật ra có 11 chỗ gọi gián tiếp là kiểu sai
57
+ đắt nhất mà một lượt truy xuất có thể gây ra.
58
+
59
+ ## Hỗ trợ ngôn ngữ — đọc kỹ trước khi tin kết quả
60
+
61
+ | Ngôn ngữ | Tham chiếu chéo file |
62
+ |---|---|
63
+ | Ruby, Java, Kotlin | đầy đủ |
64
+ | Python, TypeScript, JavaScript | **chưa xong** |
65
+
66
+ Với TS/JS/Python, `gkg` **có thể bỏ sót** call-site chéo file. Dùng thì phải đối chiếu thêm
67
+ bằng `rg`, và trong báo cáo phải ghi rõ là kết quả chưa chắc đầy đủ. Đây là beta công khai,
68
+ không phải công cụ đã chín.
69
+
70
+ ## Ràng buộc
71
+
72
+ - Phải `server stop` trước khi index lại.
73
+ - Cần repo đã `git init`.
74
+ - Chưa nối tham chiếu **giữa các repo**.
75
+ - Loadout không cấp MCP thì dùng HTTP API qua `Bash`, không dùng MCP tool.
76
+
77
+ ## Tham chiếu
78
+
79
+ | File | Nội dung |
80
+ |---|---|
81
+ | `references/cli-commands.md` | `gkg index`, `gkg server`, `gkg remove`, `gkg clean` |
82
+ | `references/http-api.md` | REST endpoint để query |
83
+ | `references/language-support.md` | chi tiết từng ngôn ngữ |
84
+
85
+ ## Báo cáo
86
+
87
+ Kết luận ngắn, bằng chứng `path:line`, và **nói rõ phần chưa chắc**. Thêm một dòng: tìm bằng `gkg` hay bằng `rg`, vì độ tin cậy hai đường khác nhau.
@@ -0,0 +1,92 @@
1
+ # Lệnh CLI của gkg
2
+
3
+ ## `gkg index`
4
+
5
+ Đưa repo vào knowledge graph.
6
+
7
+ ```bash
8
+ gkg index # thư mục hiện tại
9
+ gkg index /đường/dẫn # đường dẫn cụ thể
10
+ gkg index --stats # kèm thống kê
11
+ gkg index --stats stats.json # ghi thống kê ra JSON
12
+ gkg index -v # log chi tiết
13
+ gkg index --threads 4 # số luồng (mặc định = số nhân CPU)
14
+ ```
15
+
16
+ **Chỉ index workspace có trong `workspaces.read` của `compiled AgentDefinition`.** Index repo ngoài
17
+ danh sách là đọc thứ mình không được đọc, kể cả khi filesystem không chặn.
18
+
19
+ Tự nhận diện: đường dẫn là workspace (nhiều repo) hay một repo đơn.
20
+
21
+ Dữ liệu ra: `~/.gkg/{workspace_hash}/{project_hash}/` — **ngoài repo**, nên nó sống qua
22
+ nhiều phiên. Index lại khi code đã đổi nhiều, đừng index mỗi phiên.
23
+
24
+ ## `gkg server`
25
+
26
+ ```bash
27
+ gkg server start # mặc định http://localhost:27495
28
+ gkg server start --register-mcp
29
+ gkg server stop
30
+ gkg server status
31
+ ```
32
+
33
+ Cổng 27495 (`0x6b67` = "kg"). Bận thì tự rơi sang cổng khác — nên **luôn chạy
34
+ `gkg server status`** để biết cổng thật trước khi gọi API.
35
+
36
+ **Phải `gkg server stop` trước khi index lại.**
37
+
38
+ `--register-mcp` chỉ có nghĩa khi loadout cấp MCP. Không có thì gọi HTTP API qua `Bash`.
39
+
40
+ ## `gkg remove`
41
+
42
+ ```bash
43
+ gkg remove --workspace /đường/dẫn
44
+ gkg remove --project /đường/dẫn --workspace-folder /workspace
45
+ ```
46
+
47
+ Xoá dữ liệu đã index. **Khó đảo ngược** (index lại tốn thời gian) — báo lại trước, đừng
48
+ tự dọn.
49
+
50
+ ## `gkg clean`
51
+
52
+ ```bash
53
+ gkg clean --dry-run # xem trước — CHẠY CÁI NÀY TRƯỚC
54
+ gkg clean # dọn thật
55
+ ```
56
+
57
+ Luôn `--dry-run` trước. Xem nó định xoá gì rồi mới chạy thật.
58
+
59
+ ## Quy trình thường dùng
60
+
61
+ **Lần đầu**
62
+
63
+ ```bash
64
+ gkg index --stats
65
+ gkg server start
66
+ ```
67
+
68
+ **Index lại sau khi code đổi**
69
+
70
+ ```bash
71
+ gkg server stop
72
+ gkg index
73
+ gkg server start
74
+ ```
75
+
76
+ **Workspace nhiều repo** — index thư mục cha:
77
+
78
+ ```bash
79
+ gkg index /đường/tới/workspace
80
+ ```
81
+
82
+ ## Xử lý sự cố
83
+
84
+ | Vấn đề | Cách |
85
+ |---|---|
86
+ | tốn nhiều bộ nhớ | giảm `--threads` |
87
+ | index chậm | tăng `--threads`, hoặc `-v` để xem nó đang làm gì |
88
+ | xung đột cổng | `gkg server stop` trước |
89
+ | dữ liệu cũ, kết quả lạ | `gkg clean --dry-run` rồi `gkg clean` |
90
+
91
+ Chạy lâu bất thường hoặc lỗi lặp lại → **báo lại**, đừng ngồi thử đi thử lại. Giá trị của
92
+ một lượt truy xuất nằm ở tốc độ; kẹt thì trả lời bằng `rg` và nói rõ `gkg` không dùng được.
@@ -0,0 +1,99 @@
1
+ # HTTP API của gkg
2
+
3
+ Base URL: `http://localhost:27495` — nhưng **kiểm cổng thật trước** bằng
4
+ `gkg server status`, vì cổng bận thì server tự rơi sang cổng khác.
5
+
6
+ Loadout không cấp MCP thì gọi API bằng `curl` qua `Bash`.
7
+
8
+ ## Chỉ dùng endpoint ĐỌC
9
+
10
+ | Loại | Endpoint | Dùng |
11
+ |---|---|---|
12
+ | **Đọc** | `GET /api/info`, `/api/workspace/list`, `/api/graph/*`, `/api/events` | tự do |
13
+ | **Ghi / xoá** | `POST /api/workspace/index`, mọi `DELETE` | **không tự gọi** — báo lại |
14
+
15
+ Đây là việc truy xuất, không phải quản trị dữ liệu index. Cần index lại thì dùng
16
+ `gkg index` ở CLI (xem `cli-commands.md`), và chỉ với workspace có trong loadout.
17
+
18
+ ## Thông tin server
19
+
20
+ ```
21
+ GET /api/info
22
+ ```
23
+
24
+ Trả về cổng và phiên bản.
25
+
26
+ ## Workspace
27
+
28
+ ```
29
+ GET /api/workspace/list
30
+ ```
31
+
32
+ Liệt kê mọi workspace và project đã index. Chạy cái này trước khi query — nếu thứ bạn cần
33
+ chưa được index thì mọi truy vấn sau đều trả rỗng, và rỗng dễ bị đọc nhầm thành "không có
34
+ chỗ nào gọi".
35
+
36
+ ## Truy vấn đồ thị — phần dùng nhiều nhất
37
+
38
+ **Tìm định nghĩa theo mẫu**
39
+
40
+ ```
41
+ GET /api/graph/search?pattern=MyClass&project=/đường/dẫn
42
+ ```
43
+
44
+ **Lấy node lân cận** — đi từ một định nghĩa ra các chỗ liên quan:
45
+
46
+ ```
47
+ GET /api/graph/neighbors?node_id=xxx&project=/đường/dẫn
48
+ ```
49
+
50
+ Đây là cặp dùng cho **phân tích ảnh hưởng**: `search` tìm symbol, `neighbors` cho biết
51
+ những gì nối vào nó.
52
+
53
+ **Dữ liệu đồ thị ban đầu**
54
+
55
+ ```
56
+ GET /api/graph/initial?project=/đường/dẫn
57
+ ```
58
+
59
+ **Thống kê**
60
+
61
+ ```
62
+ GET /api/graph/stats?project=/đường/dẫn
63
+ ```
64
+
65
+ Trả số file, số định nghĩa, số quan hệ. Dùng để kiểm nhanh xem index có đầy đủ không —
66
+ số file lệch hẳn so với `git ls-files | wc -l` nghĩa là index thiếu.
67
+
68
+ ## Sự kiện thời gian thực
69
+
70
+ ```
71
+ GET /api/events
72
+ ```
73
+
74
+ Luồng Server-Sent Events: `gkg-connection` (trạng thái kết nối) · `gkg-event` (tiến độ
75
+ index).
76
+
77
+ Đây là luồng **không tự đóng**. Gọi bằng `curl` trong `Bash` sẽ treo phiên — thêm
78
+ `--max-time` nếu buộc phải dùng.
79
+
80
+ ## Lỗi
81
+
82
+ | Mã | Nghĩa |
83
+ |---|---|
84
+ | 200 | thành công |
85
+ | 400 | request sai |
86
+ | 404 | không tìm thấy |
87
+ | 500 | lỗi server |
88
+
89
+ ```json
90
+ { "error": "…", "code": "ERROR_CODE" }
91
+ ```
92
+
93
+ 404 thường nghĩa là **project chưa được index**, không phải symbol không tồn tại. Kiểm
94
+ `/api/workspace/list` trước khi kết luận.
95
+
96
+ ## CORS và xác thực
97
+
98
+ Chấp nhận origin localhost, không cần xác thực khi chạy cục bộ. Server này **không có lớp
99
+ bảo vệ nào** — đừng mở nó ra ngoài localhost.