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
|
+
# 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.
|