codymaster 4.4.5 → 4.5.2
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 +33 -0
- package/README.md +29 -14
- package/commands/demo.md +1 -1
- package/dist/context-bus.js +70 -0
- package/dist/context-db.js +265 -0
- package/dist/continuity.js +12 -0
- package/dist/file-watcher.js +79 -0
- package/dist/index.js +152 -1
- package/dist/l0-indexer.js +158 -0
- package/dist/mcp-context-server.js +400 -0
- package/dist/migrate-json-to-sqlite.js +126 -0
- package/dist/skill-chain.js +19 -3
- package/dist/token-budget.js +108 -0
- package/dist/uri-resolver.js +203 -0
- package/package.json +5 -1
- package/scripts/gate-0-secrets.js +63 -0
- package/scripts/gate-1-syntax.js +53 -0
- package/scripts/gate-5-dist-verify.js +55 -0
- package/scripts/gate-6-smoke-test.js +30 -0
- package/scripts/index-codebase.sh +552 -0
- package/scripts/mcp-bridge.js +284 -0
- package/scripts/postinstall.js +301 -0
- package/scripts/security-fixer.js +143 -0
- package/scripts/security-scan.js +55 -0
- package/scripts/test-gemini.js +13 -0
- package/scripts/todo-bridge.js +112 -0
- package/skills/_shared/helpers.md +50 -14
- package/skills/cm-autopilot/SKILL.md +29 -0
- package/skills/cm-autopilot/scripts/autopilot.py +190 -0
- package/skills/cm-continuity/SKILL.md +90 -28
- package/skills/cm-skill-chain/SKILL.md +47 -1
- package/skills/cm-start/SKILL.md +11 -2
- package/skills/boxme-git-config/SKILL.md +0 -56
- package/skills/boxme-local-dev/SKILL.md +0 -66
- package/skills/jobs-to-be-done/SKILL.md +0 -266
- package/skills/jobs-to-be-done/references/case-studies.md +0 -154
- package/skills/jobs-to-be-done/references/competitive-strategy.md +0 -280
- package/skills/jobs-to-be-done/references/diagnostics.md +0 -158
- package/skills/jobs-to-be-done/references/innovation-process.md +0 -392
- package/skills/jobs-to-be-done/references/organizational-change.md +0 -328
- package/skills/marketplace-report-crawler/SKILL.md +0 -176
- package/skills/marketplace-report-crawler/config/accounts.json +0 -41
- package/skills/marketplace-report-crawler/config/report-types.json +0 -422
- package/skills/marketplace-report-crawler/config/sessions.json +0 -3
- package/skills/marketplace-report-crawler/scripts/ab-wrapper.sh +0 -102
- package/skills/marketplace-report-crawler/scripts/browser-actions/lazada/lazada-actions.js +0 -114
- package/skills/marketplace-report-crawler/scripts/browser-actions/shopee/shopee-actions.js +0 -94
- package/skills/marketplace-report-crawler/scripts/browser-actions/tiktok/tiktok-actions.js +0 -272
- package/skills/marketplace-report-crawler/scripts/crawl-runner.js +0 -281
- package/skills/marketplace-report-crawler/scripts/session-check.sh +0 -72
- package/skills/marketplace-report-crawler/scripts/session-manager.sh +0 -349
- package/skills/marketplace-report-crawler/scripts/setup-folders.sh +0 -83
- package/skills/medical-research/SKILL.md +0 -194
- package/skills/medical-research/scripts/evidence_checker.py +0 -288
- package/skills/mom-test/SKILL.md +0 -267
- package/skills/mom-test/references/avoiding-bad-data.md +0 -221
- package/skills/mom-test/references/case-studies.md +0 -306
- package/skills/mom-test/references/commitment-advancement.md +0 -219
- package/skills/mom-test/references/finding-conversations.md +0 -251
- package/skills/mom-test/references/processing-learning.md +0 -256
- package/skills/mom-test/references/question-patterns.md +0 -198
- package/skills/pandasai-analytics/SKILL.md +0 -251
- package/skills/release-it/SKILL.md +0 -235
- package/skills/release-it/references/anti-patterns.md +0 -279
- package/skills/release-it/references/capacity-planning.md +0 -285
- package/skills/release-it/references/chaos-engineering.md +0 -325
- package/skills/release-it/references/deployment-strategies.md +0 -331
- package/skills/release-it/references/observability.md +0 -301
- package/skills/release-it/references/stability-patterns.md +0 -355
- package/skills/skill-creator-ultra/.agents/workflows/skill-audit.md +0 -37
- package/skills/skill-creator-ultra/.agents/workflows/skill-compare.md +0 -34
- package/skills/skill-creator-ultra/.agents/workflows/skill-export.md +0 -51
- package/skills/skill-creator-ultra/.agents/workflows/skill-generate.md +0 -39
- package/skills/skill-creator-ultra/.agents/workflows/skill-scaffold.md +0 -52
- package/skills/skill-creator-ultra/.agents/workflows/skill-simulate.md +0 -25
- package/skills/skill-creator-ultra/.agents/workflows/skill-stats.md +0 -31
- package/skills/skill-creator-ultra/.agents/workflows/skill-validate.md +0 -25
- package/skills/skill-creator-ultra/README.md +0 -1242
- package/skills/skill-creator-ultra/SKILL.md +0 -388
- package/skills/skill-creator-ultra/agents/analyzer.md +0 -274
- package/skills/skill-creator-ultra/agents/comparator.md +0 -202
- package/skills/skill-creator-ultra/agents/grader.md +0 -223
- package/skills/skill-creator-ultra/assets/eval_review.html +0 -146
- package/skills/skill-creator-ultra/eval-viewer/generate_review.py +0 -471
- package/skills/skill-creator-ultra/eval-viewer/viewer.html +0 -1325
- package/skills/skill-creator-ultra/examples/example_anthropic_frontend.md +0 -109
- package/skills/skill-creator-ultra/examples/example_anthropic_pdf.md +0 -116
- package/skills/skill-creator-ultra/examples/example_api_docs.md +0 -189
- package/skills/skill-creator-ultra/examples/example_db_migration.md +0 -253
- package/skills/skill-creator-ultra/examples/example_git_commit.md +0 -111
- package/skills/skill-creator-ultra/install.ps1 +0 -289
- package/skills/skill-creator-ultra/install.sh +0 -313
- package/skills/skill-creator-ultra/phases/phase1_interview.md +0 -202
- package/skills/skill-creator-ultra/phases/phase2_extract.md +0 -55
- package/skills/skill-creator-ultra/phases/phase3_detect.md +0 -57
- package/skills/skill-creator-ultra/phases/phase4_generate.md +0 -543
- package/skills/skill-creator-ultra/phases/phase5_test.md +0 -319
- package/skills/skill-creator-ultra/phases/phase6_eval.md +0 -301
- package/skills/skill-creator-ultra/phases/phase7_iterate.md +0 -103
- package/skills/skill-creator-ultra/phases/phase8_optimize.md +0 -113
- package/skills/skill-creator-ultra/resources/advanced_patterns.md +0 -499
- package/skills/skill-creator-ultra/resources/anti_patterns.md +0 -376
- package/skills/skill-creator-ultra/resources/blueprints.md +0 -498
- package/skills/skill-creator-ultra/resources/checklist.md +0 -243
- package/skills/skill-creator-ultra/resources/composition_cookbook.md +0 -291
- package/skills/skill-creator-ultra/resources/description_optimization.md +0 -90
- package/skills/skill-creator-ultra/resources/eval_guide.md +0 -133
- package/skills/skill-creator-ultra/resources/industry_questions.md +0 -189
- package/skills/skill-creator-ultra/resources/interview_questions.md +0 -200
- package/skills/skill-creator-ultra/resources/pattern_detection.md +0 -200
- package/skills/skill-creator-ultra/resources/prompt_engineering.md +0 -531
- package/skills/skill-creator-ultra/resources/schemas.md +0 -430
- package/skills/skill-creator-ultra/resources/script_integration.md +0 -593
- package/skills/skill-creator-ultra/resources/scripts_guide.md +0 -339
- package/skills/skill-creator-ultra/resources/skill_template.md +0 -124
- package/skills/skill-creator-ultra/resources/skill_writing_guide.md +0 -634
- package/skills/skill-creator-ultra/resources/versioning_guide.md +0 -193
- package/skills/skill-creator-ultra/scripts/ci_eval.py +0 -200
- package/skills/skill-creator-ultra/scripts/package_skill.py +0 -165
- package/skills/skill-creator-ultra/scripts/simulate_skill.py +0 -398
- package/skills/skill-creator-ultra/scripts/skill_audit.py +0 -611
- package/skills/skill-creator-ultra/scripts/skill_compare.py +0 -265
- package/skills/skill-creator-ultra/scripts/skill_export.py +0 -334
- package/skills/skill-creator-ultra/scripts/skill_scaffold.py +0 -403
- package/skills/skill-creator-ultra/scripts/skill_stats.py +0 -339
- package/skills/skill-creator-ultra/scripts/validate_skill.py +0 -411
- package/skills/tailwind-mastery/SKILL.md +0 -229
- package/skills/vercel-react-best-practices/AGENTS.md +0 -3373
- package/skills/vercel-react-best-practices/README.md +0 -123
- package/skills/vercel-react-best-practices/SKILL.md +0 -143
- package/skills/vercel-react-best-practices/rules/_sections.md +0 -46
- package/skills/vercel-react-best-practices/rules/_template.md +0 -28
- package/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -55
- package/skills/vercel-react-best-practices/rules/advanced-init-once.md +0 -42
- package/skills/vercel-react-best-practices/rules/advanced-use-latest.md +0 -39
- package/skills/vercel-react-best-practices/rules/async-api-routes.md +0 -38
- package/skills/vercel-react-best-practices/rules/async-defer-await.md +0 -80
- package/skills/vercel-react-best-practices/rules/async-dependencies.md +0 -51
- package/skills/vercel-react-best-practices/rules/async-parallel.md +0 -28
- package/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -99
- package/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -59
- package/skills/vercel-react-best-practices/rules/bundle-conditional.md +0 -31
- package/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -49
- package/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -35
- package/skills/vercel-react-best-practices/rules/bundle-preload.md +0 -50
- package/skills/vercel-react-best-practices/rules/client-event-listeners.md +0 -74
- package/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -71
- package/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -48
- package/skills/vercel-react-best-practices/rules/client-swr-dedup.md +0 -56
- package/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -107
- package/skills/vercel-react-best-practices/rules/js-cache-function-results.md +0 -80
- package/skills/vercel-react-best-practices/rules/js-cache-property-access.md +0 -28
- package/skills/vercel-react-best-practices/rules/js-cache-storage.md +0 -70
- package/skills/vercel-react-best-practices/rules/js-combine-iterations.md +0 -32
- package/skills/vercel-react-best-practices/rules/js-early-exit.md +0 -50
- package/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +0 -60
- package/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -45
- package/skills/vercel-react-best-practices/rules/js-index-maps.md +0 -37
- package/skills/vercel-react-best-practices/rules/js-length-check-first.md +0 -49
- package/skills/vercel-react-best-practices/rules/js-min-max-loop.md +0 -82
- package/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -24
- package/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -57
- package/skills/vercel-react-best-practices/rules/rendering-activity.md +0 -26
- package/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
- package/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -40
- package/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -38
- package/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -46
- package/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
- package/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
- package/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +0 -85
- package/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +0 -68
- package/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -28
- package/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +0 -75
- package/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -39
- package/skills/vercel-react-best-practices/rules/rerender-dependencies.md +0 -45
- package/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
- package/skills/vercel-react-best-practices/rules/rerender-derived-state.md +0 -29
- package/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -74
- package/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -58
- package/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
- package/skills/vercel-react-best-practices/rules/rerender-memo.md +0 -44
- package/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
- package/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +0 -82
- package/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
- package/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +0 -64
- package/skills/vercel-react-best-practices/rules/rerender-transitions.md +0 -40
- package/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +0 -59
- package/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
- package/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -73
- package/skills/vercel-react-best-practices/rules/server-auth-actions.md +0 -96
- package/skills/vercel-react-best-practices/rules/server-cache-lru.md +0 -41
- package/skills/vercel-react-best-practices/rules/server-cache-react.md +0 -76
- package/skills/vercel-react-best-practices/rules/server-dedup-props.md +0 -65
- package/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +0 -142
- package/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -83
- package/skills/vercel-react-best-practices/rules/server-serialization.md +0 -38
- package/skills/web-design-guidelines/SKILL.md +0 -39
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
# Example: frontend-design (🟢 Đơn giản nhưng MẠNH — Complexity 5)
|
|
2
|
-
|
|
3
|
-
> **Nguồn gốc:** Anthropic's official `frontend-design` skill — chỉ 43 dòng!
|
|
4
|
-
> **Điểm hay:** Chứng minh skill tốt không cần dài. Tone "explain the why" tuyệt vời.
|
|
5
|
-
> **Bài học:** Lean = AI follow tốt hơn. Viết ngắn nhưng truyền cảm hứng.
|
|
6
|
-
|
|
7
|
-
## 📂 Cấu trúc (Anthropic thật)
|
|
8
|
-
|
|
9
|
-
```
|
|
10
|
-
skills/frontend-design/
|
|
11
|
-
└── SKILL.md ← CHỈ 43 DÒNG. Không resources, không scripts.
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
## 📄 File 1: SKILL.md (NGUYÊN VĂN từ Anthropic)
|
|
17
|
-
|
|
18
|
-
```markdown
|
|
19
|
-
---
|
|
20
|
-
name: frontend-design
|
|
21
|
-
description: |
|
|
22
|
-
Create distinctive, production-grade frontend interfaces with high design
|
|
23
|
-
quality. Use this skill when the user asks to build web components, pages,
|
|
24
|
-
artifacts, posters, or applications (examples include websites, landing
|
|
25
|
-
pages, dashboards, React components, HTML/CSS layouts, or when styling/
|
|
26
|
-
beautifying any web UI). Generates creative, polished code and UI design
|
|
27
|
-
that avoids generic AI aesthetics.
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
This skill guides creation of distinctive, production-grade frontend
|
|
31
|
-
interfaces that avoid generic "AI slop" aesthetics. Implement real working
|
|
32
|
-
code with exceptional attention to aesthetic details and creative choices.
|
|
33
|
-
|
|
34
|
-
## Design Thinking
|
|
35
|
-
|
|
36
|
-
Before coding, understand the context and commit to a BOLD aesthetic direction:
|
|
37
|
-
- **Purpose**: What problem does this interface solve? Who uses it?
|
|
38
|
-
- **Tone**: Pick an extreme: brutally minimal, maximalist chaos,
|
|
39
|
-
retro-futuristic, organic/natural, luxury/refined, playful/toy-like...
|
|
40
|
-
- **Constraints**: Technical requirements (framework, performance).
|
|
41
|
-
- **Differentiation**: What makes this UNFORGETTABLE?
|
|
42
|
-
|
|
43
|
-
**CRITICAL**: Choose a clear conceptual direction and execute it with
|
|
44
|
-
precision. Bold maximalism and refined minimalism both work — the key
|
|
45
|
-
is intentionality, not intensity.
|
|
46
|
-
|
|
47
|
-
## Frontend Aesthetics Guidelines
|
|
48
|
-
|
|
49
|
-
Focus on:
|
|
50
|
-
- **Typography**: Avoid generic fonts (Arial, Inter). Choose distinctive,
|
|
51
|
-
characterful fonts. Pair display + body font.
|
|
52
|
-
- **Color & Theme**: Dominant colors with sharp accents outperform timid,
|
|
53
|
-
evenly-distributed palettes.
|
|
54
|
-
- **Motion**: One well-orchestrated page load with staggered reveals
|
|
55
|
-
creates more delight than scattered micro-interactions.
|
|
56
|
-
- **Backgrounds**: Create atmosphere — gradient meshes, noise textures,
|
|
57
|
-
layered transparencies, grain overlays.
|
|
58
|
-
|
|
59
|
-
NEVER use: overused fonts (Inter, Roboto), cliched purple gradients,
|
|
60
|
-
predictable layouts, cookie-cutter design.
|
|
61
|
-
|
|
62
|
-
Remember: Claude is capable of extraordinary creative work. Don't hold
|
|
63
|
-
back, show what can truly be created.
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
---
|
|
67
|
-
|
|
68
|
-
## 🔍 Phân tích: Tại sao 43 dòng mà mạnh?
|
|
69
|
-
|
|
70
|
-
### ✅ Kỹ thuật Anthropic dùng
|
|
71
|
-
|
|
72
|
-
| Kỹ thuật | Ví dụ cụ thể | Tại sao hiệu quả |
|
|
73
|
-
|---|---|---|
|
|
74
|
-
| **Role Priming qua tone** | "Don't hold back, show what can truly be created" | AI adopt persona sáng tạo, không generic |
|
|
75
|
-
| **Negative Constraints (NEVER)** | "NEVER use: Inter, Roboto, purple gradients" | AI biết RÕ cái cấm → tránh được |
|
|
76
|
-
| **Specificity thay vì rules** | "Pick an extreme: brutally minimal, maximalist chaos, retro-futuristic..." | Cho danh sách cụ thể > "hãy sáng tạo" |
|
|
77
|
-
| **Explain the Why** | "Dominant colors with sharp accents OUTPERFORM timid palettes" | AI hiểu lý do → áp dụng linh hoạt |
|
|
78
|
-
| **No formal sections** | Không có # Goal, # Instructions, # Examples, # Constraints rõ ràng | Skill creative không cần rigid structure |
|
|
79
|
-
|
|
80
|
-
### ⚠️ Điều THIẾU (nếu dùng style của chúng ta)
|
|
81
|
-
|
|
82
|
-
| Thiếu | Nên thêm? | Lý do |
|
|
83
|
-
|---|---|---|
|
|
84
|
-
| **Examples** | ✅ Nên | 2-3 screenshots/descriptions của UI tốt vs xấu |
|
|
85
|
-
| **Constraints** | ⚠️ Optional | Skill creative — quá nhiều constraints = giết creativity |
|
|
86
|
-
| **Verification** | ❌ Không cần | Output chủ quan, không grade được |
|
|
87
|
-
| **Scripts** | ❌ Không cần | Skill này sinh code, không cần scripts |
|
|
88
|
-
|
|
89
|
-
### 🎯 Key Insight
|
|
90
|
-
|
|
91
|
-
**Lean ≠ Yếu.** 43 dòng Anthropic > 200 dòng quy tắc generic.
|
|
92
|
-
|
|
93
|
-
Bí quyết:
|
|
94
|
-
1. **Mỗi câu phải pull its weight** — không câu nào thừa
|
|
95
|
-
2. **Inspire thay vì command** — "Don't hold back" > "MUST create beautiful UI"
|
|
96
|
-
3. **Negative examples > positive rules** — "NEVER use Inter" > "use beautiful fonts"
|
|
97
|
-
4. **Skill creative dùng tone khác skill technical** — ít structure hơn, nhiều inspiration hơn
|
|
98
|
-
|
|
99
|
-
### 📊 So sánh: 2 phong cách viết skill
|
|
100
|
-
|
|
101
|
-
| | Anthropic Style | Skill-Generator Style |
|
|
102
|
-
|---|---|---|
|
|
103
|
-
| **Tone** | Inspirational, creative | Structured, systematic |
|
|
104
|
-
| **Length** | 30-50 dòng | 50-200 dòng |
|
|
105
|
-
| **Sections** | Freeform | Goal + Instructions + Examples + Constraints |
|
|
106
|
-
| **Best for** | Creative skills (design, writing) | Technical skills (code, data, automation) |
|
|
107
|
-
| **Downside** | Ít guidance cho edge cases | Có thể over-structure |
|
|
108
|
-
|
|
109
|
-
**→ Skill Creator Ultra dùng cả 2:** technical skills → structured, creative skills → lean.
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
# Example: pdf-processor (🟠 Phức tạp — Complexity 18)
|
|
2
|
-
|
|
3
|
-
> **Nguồn gốc:** Dựa trên Anthropic's official `pdf` skill — 1 trong 16 skills chính thức.
|
|
4
|
-
> **Điểm hay:** Description cực "pushy", progressive disclosure 3 tầng, reference docs dày.
|
|
5
|
-
> **Bài học:** Skill phức tạp nhưng SKILL.md vẫn lean nhờ tách logic vào resources.
|
|
6
|
-
|
|
7
|
-
## 📂 Cấu trúc (Anthropic thật)
|
|
8
|
-
|
|
9
|
-
```
|
|
10
|
-
skills/pdf/
|
|
11
|
-
├── SKILL.md ← 315 dòng — Guide + code snippets
|
|
12
|
-
├── forms.md ← 11KB — Chi tiết riêng về PDF forms/fill
|
|
13
|
-
├── reference.md ← 16KB — Advanced: pypdfium2, JavaScript libs
|
|
14
|
-
└── scripts/
|
|
15
|
-
└── ... ← Helper scripts
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
## 📄 File 1: SKILL.md (trích — Anthropic style)
|
|
21
|
-
|
|
22
|
-
```markdown
|
|
23
|
-
---
|
|
24
|
-
name: pdf
|
|
25
|
-
description: |
|
|
26
|
-
Use this skill whenever the user wants to do anything with PDF files.
|
|
27
|
-
This includes reading or extracting text/tables from PDFs, combining or
|
|
28
|
-
merging multiple PDFs into one, splitting PDFs apart, rotating pages,
|
|
29
|
-
adding watermarks, creating new PDFs, filling PDF forms, encrypting/
|
|
30
|
-
decrypting PDFs, extracting images, and OCR on scanned PDFs to make
|
|
31
|
-
them searchable. If the user mentions a .pdf file or asks to produce
|
|
32
|
-
one, use this skill.
|
|
33
|
-
---
|
|
34
|
-
|
|
35
|
-
# PDF Processing Guide
|
|
36
|
-
|
|
37
|
-
## Overview
|
|
38
|
-
|
|
39
|
-
This guide covers essential PDF processing operations using Python
|
|
40
|
-
libraries and command-line tools. For advanced features, JavaScript
|
|
41
|
-
libraries, and detailed examples, see REFERENCE.md. If you need to
|
|
42
|
-
fill out a PDF form, read FORMS.md and follow its instructions.
|
|
43
|
-
|
|
44
|
-
## Quick Start
|
|
45
|
-
|
|
46
|
-
from pypdf import PdfReader, PdfWriter
|
|
47
|
-
|
|
48
|
-
reader = PdfReader("document.pdf")
|
|
49
|
-
print(f"Pages: {len(reader.pages)}")
|
|
50
|
-
|
|
51
|
-
text = ""
|
|
52
|
-
for page in reader.pages:
|
|
53
|
-
text += page.extract_text()
|
|
54
|
-
|
|
55
|
-
## Python Libraries
|
|
56
|
-
|
|
57
|
-
### pypdf - Basic Operations
|
|
58
|
-
|
|
59
|
-
#### Merge PDFs
|
|
60
|
-
[code snippets...]
|
|
61
|
-
|
|
62
|
-
#### Split PDF
|
|
63
|
-
[code snippets...]
|
|
64
|
-
|
|
65
|
-
### pdfplumber - Text and Table Extraction
|
|
66
|
-
[code snippets...]
|
|
67
|
-
|
|
68
|
-
### reportlab - Create PDFs
|
|
69
|
-
[code snippets...]
|
|
70
|
-
|
|
71
|
-
## Quick Reference
|
|
72
|
-
|
|
73
|
-
| Task | Best Tool | Command/Code |
|
|
74
|
-
|------------------|--------------|-----------------------------|
|
|
75
|
-
| Merge PDFs | pypdf | writer.add_page(page) |
|
|
76
|
-
| Split PDFs | pypdf | One page per file |
|
|
77
|
-
| Extract text | pdfplumber | page.extract_text() |
|
|
78
|
-
| Extract tables | pdfplumber | page.extract_tables() |
|
|
79
|
-
| Create PDFs | reportlab | Canvas or Platypus |
|
|
80
|
-
| Fill PDF forms | See FORMS.md | See FORMS.md |
|
|
81
|
-
|
|
82
|
-
## Next Steps
|
|
83
|
-
- For advanced pypdfium2 usage, see REFERENCE.md
|
|
84
|
-
- For JavaScript libraries (pdf-lib), see REFERENCE.md
|
|
85
|
-
- If you need to fill out a PDF form, follow FORMS.md
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
---
|
|
89
|
-
|
|
90
|
-
## 🔍 Phân tích: Bài học từ Anthropic
|
|
91
|
-
|
|
92
|
-
### ✅ Điểm hay — nên học
|
|
93
|
-
|
|
94
|
-
| Pattern | Chi tiết | Áp dụng |
|
|
95
|
-
|---|---|---|
|
|
96
|
-
| **Description cực "pushy"** | Liệt kê TOÀN BỘ use cases: "reading, extracting, combining, merging, splitting, rotating, watermarks, creating, filling forms, encrypting, decrypting, extracting images, OCR" | Viết description cover mọi cách user có thể hỏi |
|
|
97
|
-
| **Progressive Disclosure** | SKILL.md = quick reference, FORMS.md = deep dive, REFERENCE.md = advanced | Tách complexity ra resources/, SKILL.md giữ lean |
|
|
98
|
-
| **Code-as-documentation** | Thay vì giải thích cách merge PDF, cho luôn code snippet | Cho AI copy paste, nhanh hơn đọc text |
|
|
99
|
-
| **Quick Reference Table** | Bảng tổng hợp cuối: Task → Best Tool → Command | User scan nhanh, AI chọn đúng tool |
|
|
100
|
-
| **Routing to resources** | "If you need to fill out a PDF form, read FORMS.md" | Lazy loading — chỉ đọc khi cần |
|
|
101
|
-
|
|
102
|
-
### ⚠️ Điểm khác biệt với skill-generator
|
|
103
|
-
|
|
104
|
-
| Anthropic style | Skill-generator style | Nên dùng |
|
|
105
|
-
|---|---|---|
|
|
106
|
-
| Không có Examples section | Có 2-3 ví dụ Input → Output | ✅ Giữ Examples — AI hiểu pattern tốt hơn |
|
|
107
|
-
| Không có Constraints section | Có safety guardrails | ✅ Giữ Constraints — đặc biệt cho production |
|
|
108
|
-
| Viết bằng tiếng Anh | Viết bằng tiếng Việt | 🔀 Tùy user |
|
|
109
|
-
| Code snippets inline | Tách script riêng | 🔀 Tùy complexity |
|
|
110
|
-
|
|
111
|
-
### 🎯 Key Insight
|
|
112
|
-
|
|
113
|
-
Anthropic's description viết theo kiểu **"bắn phủ"** — liệt kê MỌI THỨ skill làm được.
|
|
114
|
-
Đây là cách tốt nhất để AI trigger đúng, vì AI agent chỉ đọc description để quyết định.
|
|
115
|
-
|
|
116
|
-
**Rule:** Description nên dài 50-200 ký tự và cover ≥ 80% use cases có thể xảy ra.
|
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
# Example: api-docs-writer (🟡 Trung bình — Complexity 9)
|
|
2
|
-
|
|
3
|
-
> **Nguồn cảm hứng:** Tổng hợp từ Stripe API docs style + OpenAPI spec.
|
|
4
|
-
> **Mức độ:** Trung bình — SKILL.md + resources/ + examples/ (không cần scripts).
|
|
5
|
-
> **Tham khảo:** Anthropic's `doc-coauthoring` skill — tách templates ra resources.
|
|
6
|
-
|
|
7
|
-
## 📂 Cấu trúc
|
|
8
|
-
|
|
9
|
-
```
|
|
10
|
-
skills/api-docs-writer/
|
|
11
|
-
├── SKILL.md
|
|
12
|
-
├── README.md
|
|
13
|
-
├── resources/
|
|
14
|
-
│ └── api_template.md ← Template cho output
|
|
15
|
-
└── examples/
|
|
16
|
-
└── example_rest_api.md ← Ví dụ chi tiết Input → Output
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## 📄 File 1: SKILL.md
|
|
22
|
-
|
|
23
|
-
```markdown
|
|
24
|
-
---
|
|
25
|
-
name: api-docs-writer
|
|
26
|
-
description: |
|
|
27
|
-
Sinh tài liệu API chuyên nghiệp từ source code hoặc mô tả endpoint.
|
|
28
|
-
Hỗ trợ REST, GraphQL, gRPC. Output theo format Stripe-style hoặc OpenAPI.
|
|
29
|
-
Dùng khi user nói "viết API docs", "document API", "tạo tài liệu endpoint",
|
|
30
|
-
"swagger docs", "describe API", hoặc khi thấy code có route/controller.
|
|
31
|
-
KHÔNG dùng cho: viết code API mới, testing API, deploy.
|
|
32
|
-
---
|
|
33
|
-
|
|
34
|
-
# Goal
|
|
35
|
-
|
|
36
|
-
Sinh API documentation chuyên nghiệp (Stripe-quality) từ source code hoặc
|
|
37
|
-
mô tả, giúp developer onboard nhanh hơn 80%.
|
|
38
|
-
|
|
39
|
-
# Instructions
|
|
40
|
-
|
|
41
|
-
1. Nhận input từ user — 1 trong 3 dạng:
|
|
42
|
-
- **Source code** (route file, controller) → parse endpoints
|
|
43
|
-
- **Mô tả text** ("API có 3 endpoint: GET /users, POST /users, ...")
|
|
44
|
-
- **OpenAPI/Swagger JSON** → parse và format lại
|
|
45
|
-
2. Với MỖI endpoint, trích xuất:
|
|
46
|
-
- Method (GET/POST/PUT/DELETE/PATCH)
|
|
47
|
-
- Path + Path params
|
|
48
|
-
- Query params + Body params (type, required, default)
|
|
49
|
-
- Response (success + error codes)
|
|
50
|
-
- Authentication (bearer, API key, none)
|
|
51
|
-
3. Hỏi bổ sung: "Có authentication không? Rate limit? Pagination?"
|
|
52
|
-
- Nếu user không biết → bỏ qua, ghi "TBD"
|
|
53
|
-
4. Sinh docs theo template `resources/api_template.md`
|
|
54
|
-
5. ✅ VERIFY: Mọi endpoint có ≥1 example request + response?
|
|
55
|
-
- Nếu thiếu → bổ sung example realistic
|
|
56
|
-
|
|
57
|
-
📚 **Template chi tiết:** `resources/api_template.md`
|
|
58
|
-
|
|
59
|
-
# Examples
|
|
60
|
-
|
|
61
|
-
## Ví dụ 1: REST API đơn giản
|
|
62
|
-
|
|
63
|
-
**Input:** "API quản lý user, có GET /users, POST /users, GET /users/:id"
|
|
64
|
-
|
|
65
|
-
**Output:** (xem chi tiết trong `examples/example_rest_api.md`)
|
|
66
|
-
|
|
67
|
-
```markdown
|
|
68
|
-
## GET /users
|
|
69
|
-
|
|
70
|
-
Lấy danh sách users.
|
|
71
|
-
|
|
72
|
-
### Parameters
|
|
73
|
-
|
|
74
|
-
| Param | Type | Required | Default | Description |
|
|
75
|
-
|--------|--------|----------|---------|----------------------|
|
|
76
|
-
| page | int | No | 1 | Trang hiện tại |
|
|
77
|
-
| limit | int | No | 20 | Số records mỗi trang |
|
|
78
|
-
|
|
79
|
-
### Example Request
|
|
80
|
-
|
|
81
|
-
GET /users?page=1&limit=10
|
|
82
|
-
|
|
83
|
-
### Example Response (200 OK)
|
|
84
|
-
|
|
85
|
-
{
|
|
86
|
-
"data": [{"id": 1, "name": "Nguyễn Văn A", "email": "a@example.com"}],
|
|
87
|
-
"pagination": {"page": 1, "limit": 10, "total": 42}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
### Error Responses
|
|
91
|
-
|
|
92
|
-
| Code | Description |
|
|
93
|
-
|------|------------------------|
|
|
94
|
-
| 401 | Unauthorized — missing token |
|
|
95
|
-
| 500 | Internal Server Error |
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
# Constraints
|
|
99
|
-
|
|
100
|
-
- Mọi endpoint PHẢI có example request + response — dev đọc example trước doc
|
|
101
|
-
- Ghi rõ field types (string, int, boolean) — tránh đoán sai
|
|
102
|
-
- Luôn có error responses (≥ 401, 404, 500) — dev cần biết lỗi gì có thể xảy ra
|
|
103
|
-
- Dùng realistic data trong examples — "John Doe" tốt hơn "string"
|
|
104
|
-
|
|
105
|
-
<!-- Generated by Skill Creator Ultra v1.0 -->
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
---
|
|
109
|
-
|
|
110
|
-
## 📄 File 2: resources/api_template.md
|
|
111
|
-
|
|
112
|
-
```markdown
|
|
113
|
-
# API Documentation Template
|
|
114
|
-
|
|
115
|
-
## {API Name} API
|
|
116
|
-
|
|
117
|
-
### Base URL
|
|
118
|
-
{base_url}
|
|
119
|
-
|
|
120
|
-
### Authentication
|
|
121
|
-
{auth_type}: {description}
|
|
122
|
-
|
|
123
|
-
---
|
|
124
|
-
|
|
125
|
-
### {METHOD} {path}
|
|
126
|
-
|
|
127
|
-
{description}
|
|
128
|
-
|
|
129
|
-
#### Parameters
|
|
130
|
-
|
|
131
|
-
| Param | Type | Required | Default | Description |
|
|
132
|
-
|-------|------|----------|---------|-------------|
|
|
133
|
-
|
|
134
|
-
#### Headers
|
|
135
|
-
|
|
136
|
-
| Header | Value | Required |
|
|
137
|
-
|---------------|-------------------|----------|
|
|
138
|
-
|
|
139
|
-
#### Example Request
|
|
140
|
-
{method} {path}
|
|
141
|
-
{headers}
|
|
142
|
-
{body}
|
|
143
|
-
|
|
144
|
-
#### Example Response ({status_code})
|
|
145
|
-
{response_json}
|
|
146
|
-
|
|
147
|
-
#### Error Responses
|
|
148
|
-
|
|
149
|
-
| Code | Message | Description |
|
|
150
|
-
|------|---------|-------------|
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
---
|
|
154
|
-
|
|
155
|
-
## 📄 File 3: examples/example_rest_api.md
|
|
156
|
-
|
|
157
|
-
```markdown
|
|
158
|
-
# Ví dụ: REST API quản lý Users
|
|
159
|
-
|
|
160
|
-
## Tình huống
|
|
161
|
-
Developer mới join team, cần document 3 endpoint user management.
|
|
162
|
-
|
|
163
|
-
## Input
|
|
164
|
-
"API có 3 endpoint: GET /users (list, có pagination), POST /users (tạo mới,
|
|
165
|
-
cần name + email), GET /users/:id (chi tiết 1 user)"
|
|
166
|
-
|
|
167
|
-
## Output
|
|
168
|
-
[Full API docs theo template — ~50 dòng cho 3 endpoints]
|
|
169
|
-
(Xem SKILL.md Examples section cho shortform)
|
|
170
|
-
|
|
171
|
-
## Tại sao output như vậy?
|
|
172
|
-
- Có pagination params cho GET /users — vì GET list luôn cần paginate
|
|
173
|
-
- POST body có validation rules — dev cần biết format
|
|
174
|
-
- Error 404 cho GET /users/:id — user có thể không tồn tại
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
---
|
|
178
|
-
|
|
179
|
-
## 🔍 Phân tích: Tại sao skill này tốt?
|
|
180
|
-
|
|
181
|
-
| Tiêu chí | Đánh giá | Ghi chú |
|
|
182
|
-
|---|---|---|
|
|
183
|
-
| **Progressive Disclosure** | ✅ | SKILL.md có tóm tắt, template tách ra resources/ |
|
|
184
|
-
| **Description "pushy"** | ✅ | 6 trigger + 3 anti-trigger + cover cả "swagger" |
|
|
185
|
-
| **Template-based output** | ✅ | Consistent format qua resources/api_template.md |
|
|
186
|
-
| **Explain The Why** | ✅ | "dev đọc example trước doc" |
|
|
187
|
-
| **Verification Step** | ✅ | Step 5: "mọi endpoint có ≥1 example?" |
|
|
188
|
-
| **Realistic examples** | ✅ | Vietnamese names, real pagination |
|
|
189
|
-
| **SKILL.md < 500 dòng** | ✅ | ~80 dòng, template tách riêng |
|
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
# Example: db-migration-checker (🟠 Phức tạp — Complexity 16)
|
|
2
|
-
|
|
3
|
-
> **Nguồn cảm hứng:** Real-world DB migration risks + Anthropic's pdf skill (scripts + resources).
|
|
4
|
-
> **Mức độ:** Phức tạp — SKILL.md + resources/ + examples/ + scripts/.
|
|
5
|
-
> **Tham khảo:** Anthropic's `pdf` skill có SKILL.md 315 dòng + reference.md + forms.md + scripts/.
|
|
6
|
-
|
|
7
|
-
## 📂 Cấu trúc
|
|
8
|
-
|
|
9
|
-
```
|
|
10
|
-
skills/db-migration-checker/
|
|
11
|
-
├── SKILL.md ← Logic chính (~100 dòng)
|
|
12
|
-
├── README.md
|
|
13
|
-
├── resources/
|
|
14
|
-
│ ├── dangerous_patterns.md ← Danh sách patterns nguy hiểm
|
|
15
|
-
│ └── rollback_strategies.md ← Chiến thuật rollback theo DB type
|
|
16
|
-
├── examples/
|
|
17
|
-
│ ├── example_safe_migration.md ← Case an toàn
|
|
18
|
-
│ └── example_risky_migration.md ← Case nguy hiểm
|
|
19
|
-
└── scripts/
|
|
20
|
-
└── analyze_migration.py ← Script parse SQL file
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
## 📄 File 1: SKILL.md
|
|
26
|
-
|
|
27
|
-
```markdown
|
|
28
|
-
---
|
|
29
|
-
name: db-migration-checker
|
|
30
|
-
description: |
|
|
31
|
-
Review và đánh giá độ an toàn của file migration SQL/ORM trước khi chạy
|
|
32
|
-
trên production. Phát hiện breaking changes, data loss risks, locking issues.
|
|
33
|
-
Dùng khi user nói "review migration", "check migration", "migration safe
|
|
34
|
-
không", "database migration", "alter table", "schema change", hoặc khi
|
|
35
|
-
thấy file migration (*.sql, *_migration.py, *.up.sql). KHÔNG dùng cho:
|
|
36
|
-
viết migration mới, backup database, schema design.
|
|
37
|
-
---
|
|
38
|
-
|
|
39
|
-
# Goal
|
|
40
|
-
|
|
41
|
-
Phát hiện 100% migration nguy hiểm TRƯỚC KHI deploy — tránh downtime
|
|
42
|
-
và data loss trên production.
|
|
43
|
-
|
|
44
|
-
# Mindset
|
|
45
|
-
|
|
46
|
-
Bạn là **DBA nghiêm khắc** với kinh nghiệm xử lý 50+ production incidents.
|
|
47
|
-
Mặc định mọi migration đều nguy hiểm cho đến khi chứng minh an toàn.
|
|
48
|
-
|
|
49
|
-
# Instructions
|
|
50
|
-
|
|
51
|
-
1. Nhận file migration (.sql, .py, .ts, hoặc paste text).
|
|
52
|
-
2. Xác định DB type: PostgreSQL / MySQL / SQLite / MongoDB.
|
|
53
|
-
- Nếu không rõ → hỏi user
|
|
54
|
-
3. Parse migration → liệt kê operations:
|
|
55
|
-
- CREATE TABLE, ALTER TABLE, DROP TABLE
|
|
56
|
-
- ADD COLUMN, DROP COLUMN, RENAME COLUMN
|
|
57
|
-
- CREATE INDEX, DROP INDEX
|
|
58
|
-
- INSERT, UPDATE, DELETE (data migration)
|
|
59
|
-
4. Với MỖI operation, check `resources/dangerous_patterns.md`:
|
|
60
|
-
- 🔴 **CRITICAL**: Data loss, table drop, column rename không backward-compatible
|
|
61
|
-
- 🟡 **WARNING**: Lock nguy hiểm (ALTER TABLE trên bảng >1M rows)
|
|
62
|
-
- 🟢 **SAFE**: Additive changes (thêm column nullable, thêm index)
|
|
63
|
-
5. Ước tính lock time:
|
|
64
|
-
- Table size nếu biết → lock time ≈ f(rows, operation type)
|
|
65
|
-
- Nếu không biết table size → hỏi user: "Bảng X có bao nhiêu rows?"
|
|
66
|
-
6. Sinh báo cáo theo format:
|
|
67
|
-
|
|
68
|
-
## Migration Review Report
|
|
69
|
-
|
|
70
|
-
| # | Operation | Risk | Lock? | Ghi chú |
|
|
71
|
-
|---|-----------|------|-------|---------|
|
|
72
|
-
|
|
73
|
-
**Overall Risk: 🔴/🟡/🟢**
|
|
74
|
-
|
|
75
|
-
### Đề xuất:
|
|
76
|
-
- [Rollback strategy]
|
|
77
|
-
- [Safe deployment order]
|
|
78
|
-
|
|
79
|
-
7. ✅ VERIFY: Mọi DROP/DELETE có rollback strategy?
|
|
80
|
-
- Nếu thiếu → thêm từ `resources/rollback_strategies.md`
|
|
81
|
-
|
|
82
|
-
📚 Tham khảo: `resources/dangerous_patterns.md`, `resources/rollback_strategies.md`
|
|
83
|
-
|
|
84
|
-
# Examples
|
|
85
|
-
|
|
86
|
-
## Ví dụ 1: Migration an toàn
|
|
87
|
-
**Input:**
|
|
88
|
-
ALTER TABLE users ADD COLUMN avatar_url VARCHAR(255) DEFAULT NULL;
|
|
89
|
-
CREATE INDEX idx_users_email ON users(email);
|
|
90
|
-
|
|
91
|
-
**Output:**
|
|
92
|
-
| # | Operation | Risk | Lock? | Ghi chú |
|
|
93
|
-
|---|-----------|------|-------|---------|
|
|
94
|
-
| 1 | ADD COLUMN nullable | 🟢 SAFE | ~0s | Additive, không lock |
|
|
95
|
-
| 2 | CREATE INDEX | 🟡 WARN | ~5s (1M rows) | Dùng CONCURRENTLY |
|
|
96
|
-
|
|
97
|
-
**Overall Risk: 🟢 SAFE** — Chạy được, nhưng nên dùng `CREATE INDEX CONCURRENTLY`.
|
|
98
|
-
|
|
99
|
-
## Ví dụ 2: Migration nguy hiểm
|
|
100
|
-
**Input:**
|
|
101
|
-
ALTER TABLE orders DROP COLUMN customer_email;
|
|
102
|
-
ALTER TABLE orders RENAME COLUMN total TO amount;
|
|
103
|
-
|
|
104
|
-
**Output:**
|
|
105
|
-
| # | Operation | Risk | Lock? | Ghi chú |
|
|
106
|
-
|---|-----------|------|-------|---------|
|
|
107
|
-
| 1 | DROP COLUMN | 🔴 CRITICAL | ~10s | DATA LOSS — không thể undo |
|
|
108
|
-
| 2 | RENAME COLUMN | 🔴 CRITICAL | ~10s | App code đang dùng "total" sẽ crash |
|
|
109
|
-
|
|
110
|
-
**Overall Risk: 🔴 CRITICAL** — KHÔNG CHẠY. Cần 3-phase deployment.
|
|
111
|
-
|
|
112
|
-
# Constraints
|
|
113
|
-
|
|
114
|
-
- Mặc định mọi migration = nguy hiểm — "innocent until proven safe" ngược lại
|
|
115
|
-
- DROP/DELETE PHẢI có rollback strategy — vì production không có undo
|
|
116
|
-
- Luôn hỏi table size khi ALTER TABLE — vì lock time phụ thuộc rows
|
|
117
|
-
- Không tự chạy migration — chỉ review, KHÔNG execute
|
|
118
|
-
|
|
119
|
-
<!-- Generated by Skill Creator Ultra v1.0 -->
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
---
|
|
123
|
-
|
|
124
|
-
## 📄 File 2: resources/dangerous_patterns.md
|
|
125
|
-
|
|
126
|
-
```markdown
|
|
127
|
-
# ⚠️ Dangerous Migration Patterns
|
|
128
|
-
|
|
129
|
-
## 🔴 CRITICAL — Ngừng ngay, cần redesign
|
|
130
|
-
|
|
131
|
-
| Pattern | Vì sao nguy hiểm | Giải pháp |
|
|
132
|
-
|---|---|---|
|
|
133
|
-
| `DROP TABLE` | Mất toàn bộ data | Rename → archive → drop sau 30 ngày |
|
|
134
|
-
| `DROP COLUMN` | Mất data column đó | Backup column data trước |
|
|
135
|
-
| `RENAME COLUMN` | App code đang reference tên cũ | 3-phase: add new → migrate → drop old |
|
|
136
|
-
| `ALTER COLUMN type` | Implicit cast có thể fail | Test trên staging trước |
|
|
137
|
-
| `TRUNCATE TABLE` | Mất toàn bộ data, không log | Dùng DELETE + WHERE nếu cần |
|
|
138
|
-
|
|
139
|
-
## 🟡 WARNING — Xem xét kỹ
|
|
140
|
-
|
|
141
|
-
| Pattern | Vì sao nguy hiểm | Giải pháp |
|
|
142
|
-
|---|---|---|
|
|
143
|
-
| `ALTER TABLE` on >1M rows | Table lock, downtime | Dùng pt-online-schema-change |
|
|
144
|
-
| `ADD COLUMN NOT NULL` without default | Lock + rewrite toàn bộ table | Thêm DEFAULT hoặc nullable first |
|
|
145
|
-
| `CREATE INDEX` | Lock table (MyISAM) hoặc slow (InnoDB) | Dùng CONCURRENTLY (PostgreSQL) |
|
|
146
|
-
| `UPDATE` toàn bộ table | Lock rows, slow | Batch update 1000 rows/lần |
|
|
147
|
-
|
|
148
|
-
## 🟢 SAFE — Thường an toàn
|
|
149
|
-
|
|
150
|
-
| Pattern | Ghi chú |
|
|
151
|
-
|---|---|
|
|
152
|
-
| `ADD COLUMN nullable` | Nhanh, không lock |
|
|
153
|
-
| `CREATE INDEX CONCURRENTLY` | Non-blocking (PostgreSQL only) |
|
|
154
|
-
| `CREATE TABLE` | Bảng mới, không ảnh hưởng existing |
|
|
155
|
-
| `INSERT` vào bảng trống | Không conflict |
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
---
|
|
159
|
-
|
|
160
|
-
## 📄 File 3: resources/rollback_strategies.md
|
|
161
|
-
|
|
162
|
-
```markdown
|
|
163
|
-
# 🔄 Rollback Strategies theo DB Type
|
|
164
|
-
|
|
165
|
-
## PostgreSQL
|
|
166
|
-
| Operation | Rollback | Command |
|
|
167
|
-
|---|---|---|
|
|
168
|
-
| ADD COLUMN | DROP COLUMN | `ALTER TABLE x DROP COLUMN y;` |
|
|
169
|
-
| CREATE INDEX | DROP INDEX | `DROP INDEX IF EXISTS idx;` |
|
|
170
|
-
| DROP TABLE | Restore from backup | `pg_restore -d db -t table backup.dump` |
|
|
171
|
-
|
|
172
|
-
## MySQL
|
|
173
|
-
| Operation | Rollback | Command |
|
|
174
|
-
|---|---|---|
|
|
175
|
-
| ADD COLUMN | DROP COLUMN | `ALTER TABLE x DROP COLUMN y;` |
|
|
176
|
-
| CREATE INDEX | DROP INDEX | `DROP INDEX idx ON table;` |
|
|
177
|
-
| DROP TABLE | Restore from backup | `mysqlimport` hoặc point-in-time recovery |
|
|
178
|
-
|
|
179
|
-
## Quy tắc chung
|
|
180
|
-
1. LUÔN backup trước migration
|
|
181
|
-
2. Chạy migration trong transaction (nếu DB hỗ trợ)
|
|
182
|
-
3. Test trên staging TRƯỚC production
|
|
183
|
-
4. Deploy off-peak hours
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
---
|
|
187
|
-
|
|
188
|
-
## 📄 File 4: scripts/analyze_migration.py
|
|
189
|
-
|
|
190
|
-
```python
|
|
191
|
-
#!/usr/bin/env python3
|
|
192
|
-
"""
|
|
193
|
-
analyze_migration.py — Parse SQL migration file và phát hiện patterns nguy hiểm.
|
|
194
|
-
|
|
195
|
-
Usage:
|
|
196
|
-
python analyze_migration.py migration.sql
|
|
197
|
-
python analyze_migration.py migration.sql --verbose
|
|
198
|
-
python analyze_migration.py --help
|
|
199
|
-
"""
|
|
200
|
-
|
|
201
|
-
import sys
|
|
202
|
-
import re
|
|
203
|
-
import argparse
|
|
204
|
-
|
|
205
|
-
CRITICAL = ["DROP TABLE", "DROP COLUMN", "RENAME COLUMN", "TRUNCATE"]
|
|
206
|
-
WARNING = ["ALTER TABLE", "CREATE INDEX", "UPDATE", "ADD COLUMN .* NOT NULL"]
|
|
207
|
-
SAFE = ["ADD COLUMN .* NULL", "CREATE TABLE", "CREATE INDEX CONCURRENTLY"]
|
|
208
|
-
|
|
209
|
-
def analyze(sql_content):
|
|
210
|
-
results = []
|
|
211
|
-
for line in sql_content.split(";"):
|
|
212
|
-
line = line.strip().upper()
|
|
213
|
-
if not line: continue
|
|
214
|
-
risk = "🟢 SAFE"
|
|
215
|
-
for p in CRITICAL:
|
|
216
|
-
if re.search(p, line): risk = "🔴 CRITICAL"; break
|
|
217
|
-
if risk == "🟢 SAFE":
|
|
218
|
-
for p in WARNING:
|
|
219
|
-
if re.search(p, line): risk = "🟡 WARNING"; break
|
|
220
|
-
results.append({"operation": line[:60], "risk": risk})
|
|
221
|
-
return results
|
|
222
|
-
|
|
223
|
-
def main():
|
|
224
|
-
parser = argparse.ArgumentParser(description="Analyze SQL migration safety")
|
|
225
|
-
parser.add_argument("file", help="SQL migration file")
|
|
226
|
-
parser.add_argument("--verbose", "-v", action="store_true")
|
|
227
|
-
args = parser.parse_args()
|
|
228
|
-
|
|
229
|
-
with open(args.file) as f:
|
|
230
|
-
results = analyze(f.read())
|
|
231
|
-
|
|
232
|
-
for r in results:
|
|
233
|
-
print(f"{r['risk']} | {r['operation']}")
|
|
234
|
-
|
|
235
|
-
if __name__ == '__main__':
|
|
236
|
-
main()
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
---
|
|
240
|
-
|
|
241
|
-
## 🔍 Phân tích: Tại sao skill này tốt?
|
|
242
|
-
|
|
243
|
-
| Tiêu chí | Đánh giá | Ghi chú |
|
|
244
|
-
|---|---|---|
|
|
245
|
-
| **Progressive Disclosure** | ✅ | SKILL.md ~100 dòng, details in resources/ |
|
|
246
|
-
| **Explain The Why** | ✅ | "vì production không có undo" |
|
|
247
|
-
| **Role Priming** | ✅ | "DBA nghiêm khắc, 50+ incidents" |
|
|
248
|
-
| **Domain resources** | ✅ | dangerous_patterns.md + rollback_strategies.md |
|
|
249
|
-
| **Script hỗ trợ** | ✅ | analyze_migration.py có --help + --verbose |
|
|
250
|
-
| **Black Box Script** | ✅ | AI dùng --help, không cần đọc source |
|
|
251
|
-
| **Verification Step** | ✅ | "Mọi DROP có rollback strategy?" |
|
|
252
|
-
| **Output Format Anchoring** | ✅ | Table format rõ ràng |
|
|
253
|
-
| **3 mức risk** | ✅ | 🔴 CRITICAL / 🟡 WARNING / 🟢 SAFE |
|