codymaster 4.4.4 → 4.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +29 -14
  3. package/commands/demo.md +1 -1
  4. package/dist/context-bus.js +70 -0
  5. package/dist/context-db.js +265 -0
  6. package/dist/continuity.js +12 -0
  7. package/dist/file-watcher.js +79 -0
  8. package/dist/index.js +152 -1
  9. package/dist/l0-indexer.js +158 -0
  10. package/dist/mcp-context-server.js +400 -0
  11. package/dist/migrate-json-to-sqlite.js +126 -0
  12. package/dist/skill-chain.js +19 -3
  13. package/dist/token-budget.js +108 -0
  14. package/dist/uri-resolver.js +203 -0
  15. package/package.json +7 -1
  16. package/skills/_shared/helpers.md +50 -14
  17. package/skills/cm-autopilot/SKILL.md +29 -0
  18. package/skills/cm-autopilot/scripts/autopilot.py +190 -0
  19. package/skills/cm-continuity/SKILL.md +90 -28
  20. package/skills/cm-quality-gate/SKILL.md +11 -1
  21. package/skills/cm-safe-deploy/SKILL.md +38 -2
  22. package/skills/cm-security-gate/SKILL.md +158 -34
  23. package/skills/cm-skill-chain/SKILL.md +47 -1
  24. package/skills/cm-start/SKILL.md +11 -2
  25. package/skills/cm-test-gate/SKILL.md +3 -0
  26. package/skills/boxme-git-config/SKILL.md +0 -56
  27. package/skills/boxme-local-dev/SKILL.md +0 -66
  28. package/skills/jobs-to-be-done/SKILL.md +0 -266
  29. package/skills/jobs-to-be-done/references/case-studies.md +0 -154
  30. package/skills/jobs-to-be-done/references/competitive-strategy.md +0 -280
  31. package/skills/jobs-to-be-done/references/diagnostics.md +0 -158
  32. package/skills/jobs-to-be-done/references/innovation-process.md +0 -392
  33. package/skills/jobs-to-be-done/references/organizational-change.md +0 -328
  34. package/skills/marketplace-report-crawler/SKILL.md +0 -176
  35. package/skills/marketplace-report-crawler/config/accounts.json +0 -41
  36. package/skills/marketplace-report-crawler/config/report-types.json +0 -422
  37. package/skills/marketplace-report-crawler/config/sessions.json +0 -3
  38. package/skills/marketplace-report-crawler/scripts/ab-wrapper.sh +0 -102
  39. package/skills/marketplace-report-crawler/scripts/browser-actions/lazada/lazada-actions.js +0 -114
  40. package/skills/marketplace-report-crawler/scripts/browser-actions/shopee/shopee-actions.js +0 -94
  41. package/skills/marketplace-report-crawler/scripts/browser-actions/tiktok/tiktok-actions.js +0 -272
  42. package/skills/marketplace-report-crawler/scripts/crawl-runner.js +0 -281
  43. package/skills/marketplace-report-crawler/scripts/session-check.sh +0 -72
  44. package/skills/marketplace-report-crawler/scripts/session-manager.sh +0 -349
  45. package/skills/marketplace-report-crawler/scripts/setup-folders.sh +0 -83
  46. package/skills/medical-research/SKILL.md +0 -194
  47. package/skills/medical-research/scripts/evidence_checker.py +0 -288
  48. package/skills/mom-test/SKILL.md +0 -267
  49. package/skills/mom-test/references/avoiding-bad-data.md +0 -221
  50. package/skills/mom-test/references/case-studies.md +0 -306
  51. package/skills/mom-test/references/commitment-advancement.md +0 -219
  52. package/skills/mom-test/references/finding-conversations.md +0 -251
  53. package/skills/mom-test/references/processing-learning.md +0 -256
  54. package/skills/mom-test/references/question-patterns.md +0 -198
  55. package/skills/pandasai-analytics/SKILL.md +0 -251
  56. package/skills/release-it/SKILL.md +0 -235
  57. package/skills/release-it/references/anti-patterns.md +0 -279
  58. package/skills/release-it/references/capacity-planning.md +0 -285
  59. package/skills/release-it/references/chaos-engineering.md +0 -325
  60. package/skills/release-it/references/deployment-strategies.md +0 -331
  61. package/skills/release-it/references/observability.md +0 -301
  62. package/skills/release-it/references/stability-patterns.md +0 -355
  63. package/skills/skill-creator-ultra/.agents/workflows/skill-audit.md +0 -37
  64. package/skills/skill-creator-ultra/.agents/workflows/skill-compare.md +0 -34
  65. package/skills/skill-creator-ultra/.agents/workflows/skill-export.md +0 -51
  66. package/skills/skill-creator-ultra/.agents/workflows/skill-generate.md +0 -39
  67. package/skills/skill-creator-ultra/.agents/workflows/skill-scaffold.md +0 -52
  68. package/skills/skill-creator-ultra/.agents/workflows/skill-simulate.md +0 -25
  69. package/skills/skill-creator-ultra/.agents/workflows/skill-stats.md +0 -31
  70. package/skills/skill-creator-ultra/.agents/workflows/skill-validate.md +0 -25
  71. package/skills/skill-creator-ultra/README.md +0 -1242
  72. package/skills/skill-creator-ultra/SKILL.md +0 -388
  73. package/skills/skill-creator-ultra/agents/analyzer.md +0 -274
  74. package/skills/skill-creator-ultra/agents/comparator.md +0 -202
  75. package/skills/skill-creator-ultra/agents/grader.md +0 -223
  76. package/skills/skill-creator-ultra/assets/eval_review.html +0 -146
  77. package/skills/skill-creator-ultra/eval-viewer/generate_review.py +0 -471
  78. package/skills/skill-creator-ultra/eval-viewer/viewer.html +0 -1325
  79. package/skills/skill-creator-ultra/examples/example_anthropic_frontend.md +0 -109
  80. package/skills/skill-creator-ultra/examples/example_anthropic_pdf.md +0 -116
  81. package/skills/skill-creator-ultra/examples/example_api_docs.md +0 -189
  82. package/skills/skill-creator-ultra/examples/example_db_migration.md +0 -253
  83. package/skills/skill-creator-ultra/examples/example_git_commit.md +0 -111
  84. package/skills/skill-creator-ultra/install.ps1 +0 -289
  85. package/skills/skill-creator-ultra/install.sh +0 -313
  86. package/skills/skill-creator-ultra/phases/phase1_interview.md +0 -202
  87. package/skills/skill-creator-ultra/phases/phase2_extract.md +0 -55
  88. package/skills/skill-creator-ultra/phases/phase3_detect.md +0 -57
  89. package/skills/skill-creator-ultra/phases/phase4_generate.md +0 -543
  90. package/skills/skill-creator-ultra/phases/phase5_test.md +0 -319
  91. package/skills/skill-creator-ultra/phases/phase6_eval.md +0 -301
  92. package/skills/skill-creator-ultra/phases/phase7_iterate.md +0 -103
  93. package/skills/skill-creator-ultra/phases/phase8_optimize.md +0 -113
  94. package/skills/skill-creator-ultra/resources/advanced_patterns.md +0 -499
  95. package/skills/skill-creator-ultra/resources/anti_patterns.md +0 -376
  96. package/skills/skill-creator-ultra/resources/blueprints.md +0 -498
  97. package/skills/skill-creator-ultra/resources/checklist.md +0 -243
  98. package/skills/skill-creator-ultra/resources/composition_cookbook.md +0 -291
  99. package/skills/skill-creator-ultra/resources/description_optimization.md +0 -90
  100. package/skills/skill-creator-ultra/resources/eval_guide.md +0 -133
  101. package/skills/skill-creator-ultra/resources/industry_questions.md +0 -189
  102. package/skills/skill-creator-ultra/resources/interview_questions.md +0 -200
  103. package/skills/skill-creator-ultra/resources/pattern_detection.md +0 -200
  104. package/skills/skill-creator-ultra/resources/prompt_engineering.md +0 -531
  105. package/skills/skill-creator-ultra/resources/schemas.md +0 -430
  106. package/skills/skill-creator-ultra/resources/script_integration.md +0 -593
  107. package/skills/skill-creator-ultra/resources/scripts_guide.md +0 -339
  108. package/skills/skill-creator-ultra/resources/skill_template.md +0 -124
  109. package/skills/skill-creator-ultra/resources/skill_writing_guide.md +0 -634
  110. package/skills/skill-creator-ultra/resources/versioning_guide.md +0 -193
  111. package/skills/skill-creator-ultra/scripts/ci_eval.py +0 -200
  112. package/skills/skill-creator-ultra/scripts/package_skill.py +0 -165
  113. package/skills/skill-creator-ultra/scripts/simulate_skill.py +0 -398
  114. package/skills/skill-creator-ultra/scripts/skill_audit.py +0 -611
  115. package/skills/skill-creator-ultra/scripts/skill_compare.py +0 -265
  116. package/skills/skill-creator-ultra/scripts/skill_export.py +0 -334
  117. package/skills/skill-creator-ultra/scripts/skill_scaffold.py +0 -403
  118. package/skills/skill-creator-ultra/scripts/skill_stats.py +0 -339
  119. package/skills/skill-creator-ultra/scripts/validate_skill.py +0 -411
  120. package/skills/tailwind-mastery/SKILL.md +0 -229
  121. package/skills/vercel-react-best-practices/AGENTS.md +0 -3373
  122. package/skills/vercel-react-best-practices/README.md +0 -123
  123. package/skills/vercel-react-best-practices/SKILL.md +0 -143
  124. package/skills/vercel-react-best-practices/rules/_sections.md +0 -46
  125. package/skills/vercel-react-best-practices/rules/_template.md +0 -28
  126. package/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -55
  127. package/skills/vercel-react-best-practices/rules/advanced-init-once.md +0 -42
  128. package/skills/vercel-react-best-practices/rules/advanced-use-latest.md +0 -39
  129. package/skills/vercel-react-best-practices/rules/async-api-routes.md +0 -38
  130. package/skills/vercel-react-best-practices/rules/async-defer-await.md +0 -80
  131. package/skills/vercel-react-best-practices/rules/async-dependencies.md +0 -51
  132. package/skills/vercel-react-best-practices/rules/async-parallel.md +0 -28
  133. package/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -99
  134. package/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -59
  135. package/skills/vercel-react-best-practices/rules/bundle-conditional.md +0 -31
  136. package/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -49
  137. package/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -35
  138. package/skills/vercel-react-best-practices/rules/bundle-preload.md +0 -50
  139. package/skills/vercel-react-best-practices/rules/client-event-listeners.md +0 -74
  140. package/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -71
  141. package/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -48
  142. package/skills/vercel-react-best-practices/rules/client-swr-dedup.md +0 -56
  143. package/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -107
  144. package/skills/vercel-react-best-practices/rules/js-cache-function-results.md +0 -80
  145. package/skills/vercel-react-best-practices/rules/js-cache-property-access.md +0 -28
  146. package/skills/vercel-react-best-practices/rules/js-cache-storage.md +0 -70
  147. package/skills/vercel-react-best-practices/rules/js-combine-iterations.md +0 -32
  148. package/skills/vercel-react-best-practices/rules/js-early-exit.md +0 -50
  149. package/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +0 -60
  150. package/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -45
  151. package/skills/vercel-react-best-practices/rules/js-index-maps.md +0 -37
  152. package/skills/vercel-react-best-practices/rules/js-length-check-first.md +0 -49
  153. package/skills/vercel-react-best-practices/rules/js-min-max-loop.md +0 -82
  154. package/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -24
  155. package/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -57
  156. package/skills/vercel-react-best-practices/rules/rendering-activity.md +0 -26
  157. package/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
  158. package/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -40
  159. package/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -38
  160. package/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -46
  161. package/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
  162. package/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
  163. package/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +0 -85
  164. package/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +0 -68
  165. package/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -28
  166. package/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +0 -75
  167. package/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -39
  168. package/skills/vercel-react-best-practices/rules/rerender-dependencies.md +0 -45
  169. package/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
  170. package/skills/vercel-react-best-practices/rules/rerender-derived-state.md +0 -29
  171. package/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -74
  172. package/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -58
  173. package/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
  174. package/skills/vercel-react-best-practices/rules/rerender-memo.md +0 -44
  175. package/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
  176. package/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +0 -82
  177. package/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
  178. package/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +0 -64
  179. package/skills/vercel-react-best-practices/rules/rerender-transitions.md +0 -40
  180. package/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +0 -59
  181. package/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
  182. package/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -73
  183. package/skills/vercel-react-best-practices/rules/server-auth-actions.md +0 -96
  184. package/skills/vercel-react-best-practices/rules/server-cache-lru.md +0 -41
  185. package/skills/vercel-react-best-practices/rules/server-cache-react.md +0 -76
  186. package/skills/vercel-react-best-practices/rules/server-dedup-props.md +0 -65
  187. package/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +0 -142
  188. package/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -83
  189. package/skills/vercel-react-best-practices/rules/server-serialization.md +0 -38
  190. package/skills/web-design-guidelines/SKILL.md +0 -39
@@ -1,593 +0,0 @@
1
- # 🔧 Script Integration Guide — Tích Hợp Scripts Vào Skill
2
-
3
- > **Biến AI Agent từ "chỉ biết nói" thành "biết LÀM" — chạy lệnh, thao tác hệ thống,
4
- > xử lý dữ liệu phức tạp.**
5
-
6
- Tài liệu này hướng dẫn chi tiết cách tích hợp scripts (Python, Bash, Node.js, Go...)
7
- vào SKILL.md để AI Agent thực thi các tác vụ vượt qua giới hạn tạo văn bản thông thường.
8
-
9
- ---
10
-
11
- ## Tại sao cần Script?
12
-
13
- | Không có Script | Có Script |
14
- | --- | --- |
15
- | AI chỉ sinh text/markdown | AI chạy lệnh, đọc file, gọi API, tính toán |
16
- | Giới hạn ở "tư vấn" | Thực sự **LÀM** việc trên hệ thống |
17
- | Phụ thuộc AI tự tính | Tính toán chính xác 100% (Python > AI math) |
18
- | Không tương tác hệ thống | Đọc/ghi file, kết nối database, deploy |
19
-
20
- ---
21
-
22
- ## 1. Cấu trúc thư mục chuẩn
23
-
24
- ```
25
- skills/<tên-skill>/
26
- ├── SKILL.md
27
- └── scripts/
28
- ├── main.py ← Script chính
29
- ├── helper.sh ← Script phụ (Bash)
30
- └── data_processor.py ← Script xử lý dữ liệu
31
- ```
32
-
33
- **Quy tắc:**
34
-
35
- - Scripts PHẢI nằm trong thư mục `scripts/` bên trong skill
36
- - Đường dẫn gọi script PHẢI dùng **relative path** (đường dẫn tương đối)
37
- - Mỗi script NÊN có 1 chức năng rõ ràng (single responsibility)
38
-
39
- ---
40
-
41
- ## 2. Chuẩn bị Script — 3 tiêu chuẩn
42
-
43
- ### 2.1. Script phải nhận tham số qua Command-line Arguments
44
-
45
- ```python
46
- # scripts/deploy.py
47
- import argparse
48
-
49
- parser = argparse.ArgumentParser(description="Deploy ứng dụng lên server.")
50
- parser.add_argument('--env', required=True,
51
- choices=['dev', 'staging', 'prod'],
52
- help='Môi trường deploy (dev/staging/prod)')
53
- parser.add_argument('--branch', default='main',
54
- help='Branch để deploy (mặc định: main)')
55
- parser.add_argument('--dry-run', action='store_true',
56
- help='Chỉ mô phỏng, không deploy thật')
57
- args = parser.parse_args()
58
-
59
- print(f"🚀 Deploying branch '{args.branch}' to '{args.env}'...")
60
- if args.dry_run:
61
- print("⚠️ DRY RUN — Không có gì thực sự được deploy.")
62
- ```
63
-
64
- ```bash
65
- # scripts/check_staging.sh
66
- #!/bin/bash
67
- # Kiểm tra health của staging server
68
-
69
- URL=${1:-"https://staging.example.com"}
70
- STATUS=$(curl -s -o /dev/null -w "%{http_code}" "$URL/health")
71
-
72
- if [ "$STATUS" -eq 200 ]; then
73
- echo "✅ Staging is healthy (HTTP $STATUS)"
74
- exit 0
75
- else
76
- echo "❌ Staging is DOWN (HTTP $STATUS)"
77
- exit 1
78
- fi
79
- ```
80
-
81
- ### 2.2. Script phải hỗ trợ cờ `--help`
82
-
83
- **BẮT BUỘC** cho mọi Python script dùng `argparse` (tự động có).
84
-
85
- Khi AI chạy `python scripts/deploy.py --help`, output sẽ là:
86
-
87
- ```
88
- usage: deploy.py [-h] --env {dev,staging,prod} [--branch BRANCH] [--dry-run]
89
-
90
- Deploy ứng dụng lên server.
91
-
92
- options:
93
- -h, --help show this help message and exit
94
- --env {dev,staging,prod}
95
- Môi trường deploy (dev/staging/prod)
96
- --branch BRANCH Branch để deploy (mặc định: main)
97
- --dry-run Chỉ mô phỏng, không deploy thật
98
- ```
99
-
100
- → AI đọc output này là BIẾT cách dùng script, không cần đọc source code.
101
-
102
- ### 2.3. Script phải có quyền thực thi (macOS/Linux)
103
-
104
- ```bash
105
- # Cấp quyền thực thi cho bash script
106
- chmod +x scripts/check_staging.sh
107
- ```
108
-
109
- > **Windows:** Không cần `chmod`. Python scripts chạy bằng `python scripts/file.py`.
110
-
111
- ---
112
-
113
- ## 3. Gọi Script Trong SKILL.md — 3 Phương pháp
114
-
115
- ### Phương pháp A: Direct Call (Gọi trực tiếp)
116
-
117
- Phù hợp khi script đơn giản, ít tham số.
118
-
119
- ```markdown
120
- # Instructions
121
- 1. Kiểm tra health của staging server:
122
- - Chạy lệnh: `./scripts/check_staging.sh`
123
- - Nếu output chứa "✅" → Staging OK, tiếp bước 2
124
- - Nếu output chứa "❌" → Dừng, báo user staging bị lỗi
125
- ```
126
-
127
- ### Phương pháp B: Argument Mapping (Ánh xạ tham số)
128
-
129
- Phù hợp khi cần truyền thông tin từ user vào script. **Đây là phương pháp HAY NHẤT.**
130
-
131
- ```markdown
132
- # Instructions
133
- 1. Phân tích yêu cầu của người dùng để xác định:
134
- - **Môi trường** mục tiêu → Truyền vào cờ `--env`
135
- - **Branch** (nếu user chỉ định) → Truyền vào cờ `--branch`
136
- 2. Thực thi script: `python scripts/deploy.py --env <env> --branch <branch>`
137
-
138
- ## Bảng ánh xạ tham số:
139
-
140
- | User nói | Cờ `--env` | Ví dụ lệnh |
141
- | --- | --- | --- |
142
- | "deploy lên dev" | `dev` | `python scripts/deploy.py --env dev` |
143
- | "đẩy lên production" | `prod` | `python scripts/deploy.py --env prod` |
144
- | "deploy branch feature/login" | + `--branch` | `python scripts/deploy.py --env dev --branch feature/login` |
145
- | "thử deploy nhưng chưa chạy thật" | + `--dry-run` | `python scripts/deploy.py --env dev --dry-run` |
146
- ```
147
-
148
- **Kỹ thuật Argument Mapping:**
149
-
150
- 1. Liệt kê rõ từng **từ khóa user** → **cờ script** tương ứng
151
- 2. Cho AI thấy **ví dụ lệnh hoàn chỉnh** để nó hiểu pattern
152
- 3. AI sẽ tự trích xuất từ câu nói user và ghép vào lệnh chính xác
153
-
154
- ### Phương pháp C: Black Box (Hộp đen)
155
-
156
- Phù hợp khi script phức tạp, nhiều tham số. **AI tự học cách dùng.**
157
-
158
- ```markdown
159
- # Instructions
160
- 1. Tool xử lý dữ liệu (`scripts/data_processor.py`) là một **hộp đen**.
161
- Bạn **KHÔNG ĐƯỢC** đọc mã nguồn của nó.
162
- 2. Chạy lệnh: `python scripts/data_processor.py --help` để tìm hiểu:
163
- - Các cờ (flags) được hỗ trợ
164
- - Tham số bắt buộc vs tùy chọn
165
- - Format input/output
166
- 3. Phân tích yêu cầu của user → Trích xuất thông tin cần thiết.
167
- 4. Dựa trên output của `--help`, tự cấu trúc lệnh chính xác và thực thi.
168
- ```
169
-
170
- **Lợi ích Black Box:**
171
-
172
- | Lợi ích | Giải thích |
173
- | --- | --- |
174
- | 💾 Tiết kiệm context window | AI không nạp hàng trăm dòng source code |
175
- | 🎯 Giảm lỗi suy luận | AI tập trung "cách dùng" thay vì "cách hoạt động" |
176
- | 🔄 Tự động thích ứng | Cập nhật script (thêm cờ mới) → AI tự phát hiện qua `--help` |
177
- | 🔒 Bảo mật | AI không thấy logic nội bộ, credentials trong code |
178
-
179
- ### Phương pháp D: Wrapper Script (Signal Relay)
180
-
181
- Dùng khi hệ thống gốc **quá phức tạp** — tạo script "lớp vỏ" đơn giản hóa output:
182
-
183
- ```python
184
- # scripts/check_system.py — Wrapper script
185
- # Đóng gói DevOps toolchain phức tạp → Output đơn giản
186
- import subprocess, sys, json
187
-
188
- def check_all():
189
- checks = {}
190
-
191
- # Check 1: Database
192
- result = subprocess.run(['pg_isready'], capture_output=True)
193
- checks['database'] = '🟢' if result.returncode == 0 else '🔴'
194
-
195
- # Check 2: Redis
196
- result = subprocess.run(['redis-cli', 'ping'], capture_output=True)
197
- checks['redis'] = '🟢' if b'PONG' in result.stdout else '🔴'
198
-
199
- # Check 3: Disk space
200
- # ... (logic phức tạp bên trong)
201
- checks['disk'] = '🟢' # hoặc '🔴'
202
-
203
- return checks
204
-
205
- if __name__ == '__main__':
206
- results = check_all()
207
- all_green = all(v == '🟢' for v in results.values())
208
- print(json.dumps({
209
- 'status': 'GREEN' if all_green else 'RED',
210
- 'checks': results
211
- }, indent=2))
212
- sys.exit(0 if all_green else 1)
213
- ```
214
-
215
- Trong SKILL.md:
216
-
217
- ```markdown
218
- # Instructions
219
- 1. Chạy `python scripts/check_system.py` — KHÔNG đọc source code.
220
- 2. Đọc output JSON:
221
- - Nếu `status: "GREEN"` → Mọi thứ OK, tiếp tục
222
- - Nếu `status: "RED"` → Xem `checks` để biết service nào lỗi → Báo user
223
- ```
224
-
225
- **Khi nào dùng Wrapper Script:**
226
-
227
- - Hệ thống gốc quá phức tạp (DevOps, monitoring, CI/CD pipelines)
228
- - Cần che giấu complexity — AI chỉ cần biết GREEN/RED
229
- - Script gốc không có `--help` hoặc output quá "ồn ào"
230
-
231
- ---
232
-
233
- ## 4. Bảo Mật — 7 Lớp Rào Chắn Cho Script
234
-
235
- > **Nguyên tắc Defense in Depth:** Không dựa vào 1 rào chắn duy nhất.
236
- > Xếp chồng nhiều lớp → 1 lớp bị vượt, lớp tiếp theo vẫn chặn.
237
-
238
- ### 4.1. Chế độ Auto-Execute (Tầng 1 — Platform Level)
239
-
240
- Thiết lập trong **Settings → Terminal Command Auto Execution**:
241
-
242
- | Chế độ | Mô tả | Khi nào dùng |
243
- | --- | --- | --- |
244
- | **Off** | AI KHÔNG BAO GIỜ tự chạy lệnh — luôn hỏi bạn | 🥇 An toàn nhất, khuyến khích cho production |
245
- | **Auto** | AI tự đánh giá rủi ro — dừng hỏi nếu nghi ngờ | Cân bằng tốc độ vs an toàn |
246
- | **Turbo** | AI tự chạy MỌI lệnh không hỏi | ⚠️ CHỈ cho sandbox cách ly hoàn toàn |
247
-
248
- ### 4.2. Allow List (Tầng 2 — Positive Security)
249
-
250
- Mô hình "Mọi thứ CẤM trừ khi ĐƯỢC PHÉP" — **an toàn nhất khi dùng với chế độ Off**.
251
-
252
- **Cách thiết lập:**
253
-
254
- 1. Mở Settings → Terminal → Allow List Terminal Commands
255
- 2. Thêm các lệnh an toàn (chỉ đọc, không thay đổi hệ thống):
256
-
257
- ```text
258
- # Lệnh an toàn — được tự động chạy
259
- ls -al
260
- python --version
261
- python scripts/*.py --help
262
- cat *.md
263
- git status
264
- git log -n 10
265
- git diff --stat
266
-
267
- # Mọi lệnh khác → AI PHẢI xin phép → Bạn phê duyệt thủ công
268
- ```
269
-
270
- 1. **Restart Antigravity** sau khi thay đổi (Allow List cần restart để có hiệu lực)
271
-
272
- ### 4.3. Deny List (Tầng 3 — Negative Security)
273
-
274
- Mô hình "Mọi thứ ĐƯỢC PHÉP trừ khi BỊ CẤM" — chốt chặn cho chế độ Auto/Turbo.
275
-
276
- ```text
277
- # Lệnh nguy hiểm — TUYỆT ĐỐI CẤM tự động chạy
278
- rm -rf
279
- sudo
280
- curl | bash
281
- wget | sh
282
- DROP TABLE
283
- DELETE FROM
284
- TRUNCATE
285
- shutdown
286
- reboot
287
- chmod 777
288
- ```
289
-
290
- ### 4.4. Secure Mode + Directory Permissions (Tầng 4 — File System Level)
291
-
292
- Cấp quyền chính xác **ở cấp thư mục** — AI chỉ truy cập được phạm vi cho phép:
293
-
294
- | Quyền | Thiết lập | Ví dụ |
295
- | --- | --- | --- |
296
- | **Đọc** | Cho phép đọc file trong thư mục dự án | `~/projects/my-app/` |
297
- | **Ghi** | Chỉ cho phép ghi vào thư mục output | `~/projects/my-app/output/` |
298
- | **Cấm** | Cấm truy cập thư mục hệ thống | `/etc/`, `/usr/`, `C:\Windows\` |
299
-
300
- **Best Practice: Review-driven Development**
301
-
302
- - Bật Secure Mode → AI PHẢI tạo **kế hoạch** trước
303
- - AI trình bày: "Em sẽ làm 3 bước: [1]... [2]... [3]..."
304
- - Bạn review → Phê duyệt → AI mới được thực thi
305
- - Mỗi lệnh đều được log → Bạn biết chính xác AI đã làm gì
306
-
307
- ### 4.5. Browser Security (Tầng 5 — Network Level)
308
-
309
- Nếu skill có script truy cập web → Rủi ro **Prompt Injection** (trang web độc hại tiêm lệnh vào AI):
310
-
311
- **Phòng ngừa:**
312
-
313
- | Biện pháp | Cách thiết lập | Rủi ro ngăn chặn |
314
- | --- | --- | --- |
315
- | **JavaScript Policy** | Settings → Browser → JS: "Request review" hoặc "Disabled" | Malicious JS khai thác AI |
316
- | **Browser URL Allowlist** | Thêm domains tin cậy vào `~/.gemini/antigravity/browserAllowlist.txt` | AI truy cập trang lạ |
317
- | **Không chạy `curl \| bash`** | Deny List (mục 4.3) | Remote code execution |
318
-
319
- ```text
320
- # Ví dụ browserAllowlist.txt
321
- github.com
322
- stackoverflow.com
323
- docs.python.org
324
- your-internal-wiki.company.com
325
- ```
326
-
327
- → AI chỉ được duyệt web trên các domain đã liệt kê. Mọi domain khác bị chặn.
328
-
329
- ### 4.6. Viết Safety Check trong SKILL.md (Tầng 6 — Skill Level)
330
-
331
- ```markdown
332
- # Instructions
333
-
334
- ## Bước 0: 🛡️ Safety Check (BẮT BUỘC trước mọi thao tác)
335
- 1. Kiểm tra môi trường:
336
- - **Nếu** production → BẮT BUỘC confirm từ user trước khi chạy script
337
- - **Nếu** script chứa lệnh `rm`, `delete`, `drop` → Cảnh báo + confirm
338
- 2. Kiểm tra script tồn tại:
339
- - Chạy: `ls scripts/` → Script có trong danh sách không?
340
- - Nếu KHÔNG → Báo user: "Script không tồn tại"
341
- 3. Nếu lần đầu chạy script → Chạy `--dry-run` (nếu hỗ trợ) trước
342
- 4. Nếu script cần truy cập web → Kiểm tra URL có trong Browser Allowlist không
343
- ```
344
-
345
- ### 4.7. Constraints trong SKILL.md (Tầng 7 — Hard Rules)
346
-
347
- ```markdown
348
- # Constraints
349
-
350
- ## Bảo mật (ưu tiên #1 — TUYỆT ĐỐI):
351
- - 🚫 TUYỆT ĐỐI KHÔNG chạy script trên production mà không confirm
352
- - 🚫 TUYỆT ĐỐI KHÔNG đọc mã nguồn script (dùng `--help`)
353
- - 🚫 TUYỆT ĐỐI KHÔNG truy cập URL ngoài Allowlist
354
-
355
- ## Vận hành (ưu tiên #2):
356
- - ✅ LUÔN LUÔN kiểm tra exit code sau khi chạy script
357
- - ✅ LUÔN LUÔN chạy `--dry-run` trước nếu hỗ trợ
358
- - ✅ LUÔN LUÔN báo user kết quả (thành công LẪN thất bại)
359
- ```
360
-
361
- ### 📊 Tổng quan 7 Lớp Bảo Mật
362
-
363
- ```text
364
- ┌─────────────────────────────────────────┐
365
- │ Tầng 7: Constraints (SKILL.md) │ ← Quy tắc cứng trong skill
366
- │ Tầng 6: Safety Check (SKILL.md) │ ← Logic kiểm tra trước khi chạy
367
- │ Tầng 5: Browser Security │ ← URL Allowlist + JS Policy
368
- │ Tầng 4: Secure Mode + Dir Permissions │ ← Quyền file system
369
- │ Tầng 3: Deny List │ ← Lệnh bị cấm
370
- │ Tầng 2: Allow List │ ← Lệnh được phép
371
- │ Tầng 1: Auto-Execute Mode │ ← Off/Auto/Turbo
372
- └─────────────────────────────────────────┘
373
- ```
374
-
375
- ---
376
-
377
- ## 5. Template SKILL.md Với Script
378
-
379
- ```markdown
380
- ---
381
- name: <tên-skill>
382
- description: |
383
- <Mô tả skill>. Sử dụng script `scripts/<tên>.py` để <hành động>.
384
- Kích hoạt khi user nói "...", "...", "...".
385
- ---
386
-
387
- # Goal
388
- <Mục tiêu>
389
-
390
- # Instructions
391
-
392
- ## Bước 0: 🛡️ Safety Check (nếu cần)
393
- 1. Xác định môi trường (dev/staging/prod)
394
- 2. Nếu production → Confirm từ user
395
-
396
- ## Bước 1: Thu thập tham số
397
- 1. Phân tích yêu cầu user
398
- 2. Trích xuất: <tham số 1>, <tham số 2>
399
-
400
- ## Bước 2: Thực thi Script
401
- 1. Chạy: `python scripts/<tên>.py --param1 <giá trị> --param2 <giá trị>`
402
- 2. Đọc output từ stdout
403
-
404
- ## Bước 3: Xử lý kết quả
405
- 1. Nếu exit code = 0 → Thành công → Hiển thị output cho user
406
- 2. Nếu exit code ≠ 0 → Lỗi → Phân tích stderr → Báo user
407
-
408
- ## Bảng ánh xạ tham số
409
-
410
- | User nói | Cờ script | Giá trị |
411
- | --- | --- | --- |
412
- | "<phrase A>" | `--param1` | `<value A>` |
413
- | "<phrase B>" | `--param2` | `<value B>` |
414
-
415
- # Examples
416
-
417
- ## Ví dụ 1: Chạy thành công
418
- **Input:** "<user request>"
419
- **Lệnh được sinh:** `python scripts/<tên>.py --param1 X --param2 Y`
420
- **Output:**
421
- <Kết quả thành công>
422
-
423
- ## Ví dụ 2: Lỗi xảy ra
424
- **Input:** "<user request có vấn đề>"
425
- **Output:**
426
- ⚠️ Script báo lỗi: <mô tả lỗi>
427
- 💡 Gợi ý: <cách fix>
428
-
429
- # Constraints
430
- - 🚫 KHÔNG ĐƯỢC đọc mã nguồn script (dùng `--help`)
431
- - 🚫 KHÔNG ĐƯỢC chạy script trên production mà không confirm
432
- - ✅ LUÔN LUÔN kiểm tra exit code sau khi chạy script
433
- - ✅ LUÔN LUÔN chạy `--dry-run` trước nếu có hỗ trợ
434
- ```
435
-
436
- ---
437
-
438
- ## 6. Viết Script Chuẩn Cho Skill
439
-
440
- ### Checklist script tốt
441
-
442
- - [ ] Dùng `argparse` (Python) hoặc flags tương đương
443
- - [ ] Có `--help` mô tả rõ ràng từng cờ
444
- - [ ] Có `--dry-run` cho thao tác destructive
445
- - [ ] Output qua stdout (khuyến khích JSON cho dữ liệu có cấu trúc)
446
- - [ ] Error output qua stderr
447
- - [ ] Exit code: `0` = thành công, `≠0` = lỗi
448
- - [ ] Không hardcode credentials (dùng env vars hoặc config file)
449
- - [ ] Có error handling (try/except, ||, set -e)
450
- - [ ] Đọc input từ file hoặc stdin (không interactive prompts)
451
- - [ ] Cross-platform compatible (hoặc ghi rõ OS requirement)
452
-
453
- ### Template Python Script
454
-
455
- ```python
456
- #!/usr/bin/env python3
457
- """
458
- <tên_script>.py — <mô tả ngắn>
459
-
460
- Sử dụng:
461
- python scripts/<tên_script>.py --help
462
- python scripts/<tên_script>.py --param1 value1 --param2 value2
463
- """
464
-
465
- import argparse
466
- import sys
467
- import json
468
-
469
-
470
- def main():
471
- parser = argparse.ArgumentParser(
472
- description="<Mô tả script chi tiết>"
473
- )
474
- parser.add_argument('--input', required=True,
475
- help='Đường dẫn file đầu vào')
476
- parser.add_argument('--format', choices=['json', 'csv', 'text'],
477
- default='json',
478
- help='Định dạng output (mặc định: json)')
479
- parser.add_argument('--dry-run', action='store_true',
480
- help='Chỉ mô phỏng, không thay đổi gì')
481
- parser.add_argument('--verbose', action='store_true',
482
- help='Hiển thị thông tin chi tiết')
483
-
484
- args = parser.parse_args()
485
-
486
- try:
487
- # === Logic chính ===
488
- if args.verbose:
489
- print(f"📌 Input: {args.input}", file=sys.stderr)
490
- print(f"📌 Format: {args.format}", file=sys.stderr)
491
-
492
- if args.dry_run:
493
- print("⚠️ DRY RUN — Không có gì thực sự thay đổi.")
494
- sys.exit(0)
495
-
496
- # Xử lý...
497
- result = {"status": "success", "message": "Hoàn thành!"}
498
-
499
- # Output
500
- if args.format == 'json':
501
- print(json.dumps(result, ensure_ascii=False, indent=2))
502
- else:
503
- print(result['message'])
504
-
505
- sys.exit(0)
506
-
507
- except FileNotFoundError:
508
- print(f"❌ Không tìm thấy file: {args.input}", file=sys.stderr)
509
- sys.exit(1)
510
- except Exception as e:
511
- print(f"❌ Lỗi: {e}", file=sys.stderr)
512
- sys.exit(2)
513
-
514
-
515
- if __name__ == '__main__':
516
- main()
517
- ```
518
-
519
- ### Template Bash Script
520
-
521
- ```bash
522
- #!/bin/bash
523
- # <tên_script>.sh — <mô tả ngắn>
524
- #
525
- # Sử dụng:
526
- # ./scripts/<tên_script>.sh [options]
527
- #
528
- # Options:
529
- # -e, --env Môi trường (dev/staging/prod)
530
- # -d, --dry-run Chỉ mô phỏng
531
- # -h, --help Hiển thị hướng dẫn
532
-
533
- set -euo pipefail
534
-
535
- # === Defaults ===
536
- ENV="dev"
537
- DRY_RUN=false
538
-
539
- # === Parse Arguments ===
540
- while [[ $# -gt 0 ]]; do
541
- case $1 in
542
- -e|--env)
543
- ENV="$2"
544
- shift 2
545
- ;;
546
- -d|--dry-run)
547
- DRY_RUN=true
548
- shift
549
- ;;
550
- -h|--help)
551
- echo "Usage: $0 [--env dev|staging|prod] [--dry-run]"
552
- echo ""
553
- echo "Options:"
554
- echo " -e, --env Môi trường deploy (default: dev)"
555
- echo " -d, --dry-run Chỉ mô phỏng"
556
- echo " -h, --help Hiển thị help"
557
- exit 0
558
- ;;
559
- *)
560
- echo "❌ Unknown option: $1" >&2
561
- exit 1
562
- ;;
563
- esac
564
- done
565
-
566
- # === Main ===
567
- echo "🚀 Environment: $ENV"
568
-
569
- if [ "$DRY_RUN" = true ]; then
570
- echo "⚠️ DRY RUN — Không thay đổi gì."
571
- exit 0
572
- fi
573
-
574
- # Xử lý chính...
575
- echo "✅ Done!"
576
- exit 0
577
- ```
578
-
579
- ---
580
-
581
- ## 7. Quyết Định: Khi Nào CẦN Script, Khi Nào KHÔNG?
582
-
583
- | Tình huống | Cần Script? | Lý do |
584
- | --- | --- | --- |
585
- | Tính toán phức tạp (tài chính, thống kê) | ✅ CẦN | AI hay tính sai số lớn |
586
- | Đọc/ghi file hệ thống | ✅ CẦN | AI không trực tiếp truy cập filesystem |
587
- | Gọi API bên ngoài | ✅ CẦN | Script xử lý auth, retry, error |
588
- | Validate dữ liệu phức tạp (regex, schema) | ✅ CẦN | Script chính xác hơn AI |
589
- | Deploy / CI/CD | ✅ CẦN | Script chạy npm, docker, etc. |
590
- | Sinh text/markdown | ❌ KHÔNG | AI giỏi việc này rồi |
591
- | Tư vấn / phân tích logic | ❌ KHÔNG | Đây là thế mạnh AI |
592
- | Format / restructure text | ❌ KHÔNG | AI xử lý tốt |
593
- | Q&A / hỏi đáp | ❌ KHÔNG | AI sinh ra để làm việc này |