flutter-pro-max-cli 1.0.2 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/README.md +109 -16
  2. package/assets/data/flutter-performance.csv +36 -0
  3. package/assets/data/mobile-accessibility.csv +36 -0
  4. package/assets/data/ui-reasoning.csv +36 -0
  5. package/assets/scripts/__pycache__/core.cpython-312.pyc +0 -0
  6. package/assets/scripts/__pycache__/design_system.cpython-312.pyc +0 -0
  7. package/assets/{.claude/skills/flutter-pro-max/scripts → scripts}/core.py +72 -48
  8. package/assets/scripts/design_system.py +1074 -0
  9. package/assets/{.codebuddy/commands/scripts → scripts}/search.py +73 -2
  10. package/assets/templates/base/quick-reference.md +41 -0
  11. package/assets/templates/base/skill-content.md +179 -0
  12. package/assets/templates/platforms/agent.json +21 -0
  13. package/assets/templates/platforms/claude.json +21 -0
  14. package/assets/templates/platforms/codebuddy.json +21 -0
  15. package/assets/templates/platforms/codex.json +21 -0
  16. package/assets/templates/platforms/continue.json +21 -0
  17. package/assets/templates/platforms/copilot.json +18 -0
  18. package/assets/templates/platforms/cursor.json +18 -0
  19. package/assets/templates/platforms/gemini.json +21 -0
  20. package/assets/templates/platforms/kiro.json +18 -0
  21. package/assets/templates/platforms/opencode.json +21 -0
  22. package/assets/templates/platforms/qoder.json +21 -0
  23. package/assets/templates/platforms/roocode.json +18 -0
  24. package/assets/templates/platforms/trae.json +21 -0
  25. package/assets/templates/platforms/windsurf.json +18 -0
  26. package/dist/commands/init.js +13 -13
  27. package/dist/commands/update.d.ts +6 -0
  28. package/dist/commands/update.js +27 -0
  29. package/dist/commands/versions.d.ts +1 -0
  30. package/dist/commands/versions.js +36 -0
  31. package/dist/index.js +27 -1
  32. package/dist/types/index.d.ts +20 -1
  33. package/dist/types/index.js +4 -1
  34. package/dist/utils/detect.js +11 -1
  35. package/dist/utils/extract.d.ts +5 -0
  36. package/dist/utils/github.d.ts +11 -0
  37. package/dist/utils/github.js +81 -0
  38. package/dist/utils/template.d.ts +25 -0
  39. package/dist/utils/template.js +194 -0
  40. package/package.json +8 -4
  41. package/assets/.agent/workflows/flutter-pro-max.md +0 -221
  42. package/assets/.agent/workflows/scripts/core.py +0 -345
  43. package/assets/.agent/workflows/scripts/search.py +0 -106
  44. package/assets/.claude/skills/flutter-pro-max/SKILL.md +0 -339
  45. package/assets/.claude/skills/flutter-pro-max/scripts/search.py +0 -106
  46. package/assets/.codebuddy/commands/flutter-pro-max.md +0 -221
  47. package/assets/.codebuddy/commands/scripts/core.py +0 -345
  48. package/assets/.codex/skills/flutter-pro-max/SKILL.md +0 -221
  49. package/assets/.codex/skills/flutter-pro-max/scripts/core.py +0 -345
  50. package/assets/.codex/skills/flutter-pro-max/scripts/search.py +0 -106
  51. package/assets/.cursor/commands/flutter-pro-max.md +0 -221
  52. package/assets/.cursor/commands/scripts/core.py +0 -345
  53. package/assets/.cursor/commands/scripts/search.py +0 -106
  54. package/assets/.gemini/skills/flutter-pro-max/SKILL.md +0 -221
  55. package/assets/.gemini/skills/flutter-pro-max/scripts/core.py +0 -345
  56. package/assets/.gemini/skills/flutter-pro-max/scripts/search.py +0 -106
  57. package/assets/.github/prompts/flutter-pro-max.prompt.md +0 -221
  58. package/assets/.github/prompts/scripts/core.py +0 -345
  59. package/assets/.github/prompts/scripts/search.py +0 -106
  60. package/assets/.kiro/steering/flutter-pro-max.md +0 -220
  61. package/assets/.kiro/steering/scripts/core.py +0 -345
  62. package/assets/.kiro/steering/scripts/search.py +0 -106
  63. package/assets/.qoder/rules/flutter-pro-max.md +0 -220
  64. package/assets/.qoder/rules/scripts/core.py +0 -345
  65. package/assets/.qoder/rules/scripts/search.py +0 -106
  66. package/assets/.roo/commands/flutter-pro-max.md +0 -220
  67. package/assets/.roo/commands/scripts/core.py +0 -345
  68. package/assets/.roo/commands/scripts/search.py +0 -106
  69. package/assets/.shared/flutter-pro-max/SKILL.md +0 -221
  70. package/assets/.shared/flutter-pro-max/scripts/core.py +0 -341
  71. package/assets/.shared/flutter-pro-max/scripts/search.py +0 -106
  72. package/assets/.trae/skills/flutter-pro-max/SKILL.md +0 -221
  73. package/assets/.trae/skills/flutter-pro-max/scripts/core.py +0 -345
  74. package/assets/.trae/skills/flutter-pro-max/scripts/search.py +0 -106
  75. package/assets/.windsurf/workflows/flutter-pro-max.md +0 -221
  76. package/assets/.windsurf/workflows/scripts/core.py +0 -345
  77. package/assets/.windsurf/workflows/scripts/search.py +0 -106
  78. package/dist/utils/extract.js +0 -83
  79. /package/assets/{.shared/data → data}/architect.csv +0 -0
  80. /package/assets/{.shared/data → data}/charts.csv +0 -0
  81. /package/assets/{.shared/data → data}/colors.csv +0 -0
  82. /package/assets/{.shared/data → data}/icons.csv +0 -0
  83. /package/assets/{.shared/data → data}/landing.csv +0 -0
  84. /package/assets/{.shared/data → data}/name_convention.csv +0 -0
  85. /package/assets/{.shared/data → data}/package.csv +0 -0
  86. /package/assets/{.shared/data → data}/patterns.csv +0 -0
  87. /package/assets/{.shared/data → data}/products.csv +0 -0
  88. /package/assets/{.shared/data → data}/prompts.csv +0 -0
  89. /package/assets/{.shared/data → data}/styles.csv +0 -0
  90. /package/assets/{.shared/data → data}/typography.csv +0 -0
  91. /package/assets/{.shared/data → data}/ux-guidelines.csv +0 -0
  92. /package/assets/{.shared/data → data}/widget.csv +0 -0
@@ -3,9 +3,15 @@
3
3
  """
4
4
  Flutter Pro Max Search - CLI for Flutter knowledge base search
5
5
  Usage: python search.py "<query>" [--domain <domain>] [--stack <stack>] [--top 5]
6
+ python search.py "<query>" --design-system [-p "Project Name"]
7
+ python search.py "<query>" --design-system --persist [-p "Project Name"] [--page "dashboard"]
6
8
 
7
- Domains: widget, package, pattern, architect, chart, color, typography, style, ux, icon, landing, naming, product, prompt
9
+ Domains: widget, package, pattern, architect, chart, color, typography, style, ux, icon, landing, naming, product, prompt, performance, ui-reasoning, accessibility
8
10
  Stacks: riverpod, bloc, provider
11
+
12
+ Persistence (Master + Overrides pattern):
13
+ --persist Save design system to design-system/MASTER.md
14
+ --page Also create a page-specific override file in design-system/pages/
9
15
  """
10
16
 
11
17
  import argparse
@@ -18,9 +24,11 @@ from core import (
18
24
  search,
19
25
  search_with_stack
20
26
  )
27
+ from design_system import generate_design_system, persist_design_system
28
+ from typing import Any
21
29
 
22
30
 
23
- def format_output(result):
31
+ def format_output(result: dict[str, Any]) -> str:
24
32
  """Format results for human-readable output (token-optimized for AI)"""
25
33
  if "error" in result:
26
34
  return f"❌ Error: {result['error']}"
@@ -86,9 +94,72 @@ Examples:
86
94
  action="store_true",
87
95
  help="Output as JSON"
88
96
  )
97
+ # Design system generation
98
+ parser.add_argument(
99
+ "--design-system", "-ds",
100
+ action="store_true",
101
+ help="Generate complete design system recommendation"
102
+ )
103
+ parser.add_argument(
104
+ "--project-name", "-p",
105
+ type=str,
106
+ default=None,
107
+ help="Project name for design system output"
108
+ )
109
+ parser.add_argument(
110
+ "--format", "-f",
111
+ choices=["ascii", "markdown"],
112
+ default="ascii",
113
+ help="Output format for design system"
114
+ )
115
+ # Persistence (Master + Overrides pattern)
116
+ parser.add_argument(
117
+ "--persist",
118
+ action="store_true",
119
+ help="Save design system to design-system/MASTER.md (creates hierarchical structure)"
120
+ )
121
+ parser.add_argument(
122
+ "--page",
123
+ type=str,
124
+ default=None,
125
+ help="Create page-specific override file in design-system/pages/"
126
+ )
127
+ parser.add_argument(
128
+ "--output-dir", "-o",
129
+ type=str,
130
+ default=None,
131
+ help="Output directory for persisted files (default: current directory)"
132
+ )
89
133
 
90
134
  args = parser.parse_args()
91
135
 
136
+ # Design system takes priority
137
+ if args.design_system:
138
+ result = generate_design_system(
139
+ args.query,
140
+ args.project_name,
141
+ args.format,
142
+ persist=args.persist,
143
+ page=args.page,
144
+ output_dir=args.output_dir
145
+ )
146
+ print(result)
147
+
148
+ # Print persistence confirmation
149
+ if args.persist:
150
+ project_slug = args.project_name.lower().replace(' ', '-') if args.project_name else "default"
151
+ print("\n" + "=" * 60)
152
+ print(f"✅ Design system persisted to design-system/{project_slug}/")
153
+ print(f" 📄 design-system/{project_slug}/MASTER.md (Global Source of Truth)")
154
+ if args.page:
155
+ page_filename = args.page.lower().replace(' ', '-')
156
+ print(f" 📄 design-system/{project_slug}/pages/{page_filename}.md (Screen Overrides)")
157
+ print("")
158
+ print(f"📖 Usage: When building a screen, check design-system/{project_slug}/pages/[screen].md first.")
159
+ print(f" If exists, its rules override MASTER.md. Otherwise, use MASTER.md.")
160
+ print("=" * 60)
161
+ return
162
+
92
163
  # Perform search
93
164
  if args.stack:
94
165
  result = search_with_stack(args.query, args.stack, args.domain, args.top)
@@ -0,0 +1,41 @@
1
+
2
+ ---
3
+
4
+ ## Quick Reference
5
+
6
+ ### Search Commands
7
+
8
+ ```bash
9
+ # Auto-detect domain
10
+ python3 {{SCRIPT_PATH}}/search.py "ListView" --top 5
11
+
12
+ # Specific domain
13
+ python3 {{SCRIPT_PATH}}/search.py "network http" --domain package --top 5
14
+
15
+ # Stack filter
16
+ python3 {{SCRIPT_PATH}}/search.py "state" --stack riverpod --top 5
17
+
18
+ # JSON output
19
+ python3 {{SCRIPT_PATH}}/search.py "login" --json --top 3
20
+ ```
21
+
22
+ ### Example Workflow
23
+
24
+ **User Request:** "Tạo màn hình đăng nhập với Riverpod"
25
+
26
+ 1. **Search widgets:**
27
+ ```bash
28
+ python3 {{SCRIPT_PATH}}/search.py "form input" --domain widget --top 5
29
+ ```
30
+
31
+ 2. **Search patterns:**
32
+ ```bash
33
+ python3 {{SCRIPT_PATH}}/search.py "authentication login" --domain pattern --top 5
34
+ ```
35
+
36
+ 3. **Search packages:**
37
+ ```bash
38
+ python3 {{SCRIPT_PATH}}/search.py "validation" --domain package --stack riverpod --top 5
39
+ ```
40
+
41
+ 4. **Apply results** to generate code với Riverpod state management
@@ -0,0 +1,179 @@
1
+ # {{TITLE}}
2
+
3
+ {{DESCRIPTION}}
4
+
5
+ ---
6
+
7
+ ## 🏛️ ROLE & IDENTITY: The Pragmatic Architect
8
+
9
+ Bạn là **"The Pragmatic Architect"** (Kiến trúc sư Thực dụng), một Senior Principal Software Engineer.
10
+
11
+ Sứ mệnh của bạn không chỉ là viết code chạy được, mà là kiến tạo phần mềm:
12
+ - **Bền vững (Sustainable)** - Code sống được qua nhiều đời dev
13
+ - **Dễ đọc (Readable)** - Code tự giải thích, không cần comment thừa
14
+ - **Tách biệt (Decoupled)** - Modules độc lập, dễ test và thay thế
15
+
16
+ > 🚫 **Zero Tolerance Policy:** Không khoan nhượng với code rác, đặc biệt là **God Objects** và **God Files**.
17
+
18
+ ---
19
+
20
+ ## 📐 CORE PHILOSOPHIES (Triết lý Bất biến)
21
+
22
+ ### A. SOLID Principles (Bắt buộc)
23
+
24
+ | Principle | Rule | Flutter Example |
25
+ |-----------|------|----------------|
26
+ | **S - Single Responsibility** | Một class/hàm chỉ làm 1 việc duy nhất | `LoginUseCase` chỉ xử lý login, không validate form |
27
+ | **O - Open/Closed** | Mở để mở rộng, đóng để sửa đổi | Dùng `abstract class AuthProvider` thay vì `if-else` |
28
+ | **L - Liskov Substitution** | Class con thay thế hoàn hảo class cha | `GoogleAuth extends AuthProvider` hoạt động như AuthProvider |
29
+ | **I - Interface Segregation** | Không ép client dùng hàm không cần | Tách `Readable` và `Writable` thay vì `FileHandler` |
30
+ | **D - Dependency Inversion** | Phụ thuộc Abstraction, không Implementation | Inject `AuthRepository` interface, không phải `FirebaseAuthRepository` |
31
+
32
+ ### B. Pragmatic Rules
33
+
34
+ | Rule | Guideline | Action |
35
+ |------|-----------|--------|
36
+ | **DRY** | Logic lặp lại > 2 lần | ➜ Tách hàm/Class ngay |
37
+ | **KISS** | Đơn giản là đỉnh cao | ➜ Ưu tiên giải pháp dễ hiểu nhất |
38
+ | **YAGNI** | Không code cho tương lai viển vông | ➜ Chỉ build những gì cần ngay |
39
+ | **Boy Scout Rule** | Dọn dẹp code rác khi nhìn thấy | ➜ Refactor ngay, không để nợ |
40
+
41
+ ---
42
+
43
+ ## ⛔ HARD CONSTRAINTS (Vùng Cấm)
44
+
45
+ ### 🚫 NO GOD CLASSES
46
+
47
+ | Indicator | Threshold | Action |
48
+ |-----------|-----------|--------|
49
+ | Public methods | > 10 methods | 🔴 **REFACTOR** |
50
+ | Lines of logic | > 200 lines | 🔴 **REFACTOR** |
51
+ | Mixed concerns | Logic + UI + DB | 🔴 **TÁCH NGAY** |
52
+
53
+ ### 🚫 NO GOD FILES
54
+
55
+ | Rule | Limit |
56
+ |------|-------|
57
+ | **File size** | ≤ 300 dòng (tối đa 500) |
58
+ | **Classes per file** | 1 Class chính duy nhất |
59
+
60
+ ### 🚫 NO LOGIC LEAKAGE
61
+
62
+ | Violation | Correct Layer |
63
+ |-----------|---------------|
64
+ | Business Logic trong Widget | ➜ Move to `UseCase` / `Service` |
65
+ | SQL/Query trong Controller | ➜ Move to `Repository` |
66
+ | API calls trong UI | ➜ Move to `DataSource` |
67
+
68
+ ---
69
+
70
+ ## 🔄 INTERACTION FLOW (ABCR)
71
+
72
+ 1. **AUDIT** - Quét code smells, kiểm tra God Class/File
73
+ 2. **BLOCK** - Cảnh báo nếu vi phạm, giải thích Technical Debt
74
+ 3. **REFACTOR** - Sửa kiến trúc trước khi fix bug
75
+ 4. **EXPLAIN** - Giải thích lý do tách/refactor
76
+
77
+ ---
78
+
79
+ ## Prerequisites
80
+
81
+ ```bash
82
+ python3 --version || python --version
83
+ ```
84
+
85
+ ---
86
+
87
+ ## How to Use This {{SKILL_OR_WORKFLOW}}
88
+
89
+ ### Step 1: Analyze User Requirements
90
+
91
+ Trích xuất thông tin từ request:
92
+ - **Architecture**: Clean Architecture, Feature-First, DDD
93
+ - **State Management**: Riverpod (default), Bloc, Provider
94
+ - **UI Components**: Widgets, Layouts, Animations
95
+
96
+ ### Step 2: Search Relevant Data
97
+
98
+ ```bash
99
+ python3 {{SCRIPT_PATH}}/search.py "<keyword>" --top 5
100
+ ```
101
+
102
+ **Với domain cụ thể:**
103
+ ```bash
104
+ python3 {{SCRIPT_PATH}}/search.py "<keyword>" --domain widget --top 5
105
+ python3 {{SCRIPT_PATH}}/search.py "<keyword>" --domain package --top 5
106
+ ```
107
+
108
+ **Với stack filter:**
109
+ ```bash
110
+ python3 {{SCRIPT_PATH}}/search.py "<keyword>" --stack riverpod --top 5
111
+ ```
112
+
113
+ **Available domains:** `widget`, `package`, `pattern`, `architect`, `chart`, `color`, `typography`, `style`, `ux`, `icon`, `landing`, `naming`, `product`, `prompt`
114
+
115
+ **Available stacks:** `riverpod`, `bloc`, `provider`
116
+
117
+ ---
118
+
119
+ ## Search Reference
120
+
121
+ | Domain | File | Content |
122
+ |--------|------|---------|
123
+ | Widgets | `widget.csv` | 65+ Flutter widgets |
124
+ | Packages | `package.csv` | 100+ packages |
125
+ | Patterns | `patterns.csv` | 100+ design patterns |
126
+ | Architecture | `architect.csv` | Clean Architecture layers |
127
+ | Charts | `charts.csv` | Chart recommendations |
128
+ | Colors | `colors.csv` | Color palettes |
129
+ | Typography | `typography.csv` | Font pairings |
130
+ | Styles | `styles.csv` | UI style guidelines |
131
+ | UX Guidelines | `ux-guidelines.csv` | UX best practices |
132
+ | Icons | `icons.csv` | Icon recommendations |
133
+ | Landing | `landing.csv` | Landing page patterns |
134
+ | Naming | `name_convention.csv` | Naming conventions |
135
+ | Products | `products.csv` | Product type styling |
136
+ | Prompts | `prompts.csv` | AI prompt templates |
137
+
138
+ ---
139
+
140
+ ## Technical Standards
141
+
142
+ ### Dart 3 Modern Syntax
143
+ ```dart
144
+ // ✅ Records
145
+ (String name, int age) getUserInfo() => ('John', 25);
146
+
147
+ // ✅ Pattern Matching
148
+ String getMessage(UIState state) => switch (state) {
149
+ LoadingState() => 'Loading...',
150
+ DataState(data: var d) => 'Data: $d',
151
+ ErrorState(message: var m) => 'Error: $m',
152
+ };
153
+ ```
154
+
155
+ ### Performance Rules
156
+ - Luôn dùng `const` constructor khi có thể
157
+ - Ưu tiên `SizedBox` hơn `Container` cho spacing
158
+ - Dùng `ListView.builder` thay vì `ListView` + `children`
159
+
160
+ ### State Management
161
+ - **Default**: Riverpod với `riverpod_generator`
162
+ - **Alternative**: Bloc (khi user yêu cầu)
163
+
164
+ ---
165
+
166
+ ## Pre-Delivery Checklist
167
+
168
+ ### 🏛️ Pragmatic Architect
169
+ - [ ] No God Class (≤ 10 methods, ≤ 200 lines)
170
+ - [ ] No God File (≤ 300 lines)
171
+ - [ ] No Logic Leakage
172
+ - [ ] SOLID Compliance
173
+
174
+ ### Code Quality
175
+ - [ ] `const` constructors
176
+ - [ ] Sound Null Safety
177
+ - [ ] Dart 3 syntax
178
+ - [ ] Clear naming
179
+ {{QUICK_REFERENCE}}
@@ -0,0 +1,21 @@
1
+ {
2
+ "platform": "antigravity",
3
+ "displayName": "Antigravity / Generic Agent",
4
+ "installType": "full",
5
+ "folderStructure": {
6
+ "root": ".agent",
7
+ "skillPath": "skills/flutter-pro-max",
8
+ "filename": "SKILL.md"
9
+ },
10
+ "scriptPath": "skills/flutter-pro-max/scripts/search.py",
11
+ "frontmatter": {
12
+ "name": "flutter-pro-max",
13
+ "description": "Flutter design intelligence. Widgets, packages, patterns, architecture, UI/UX best practices."
14
+ },
15
+ "sections": {
16
+ "quickReference": false
17
+ },
18
+ "title": "flutter-pro-max",
19
+ "description": "Comprehensive Flutter development guide with searchable database of widgets, packages, design patterns, architecture guidelines, performance optimization, accessibility, and UI/UX best practices.",
20
+ "skillOrWorkflow": "Skill"
21
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "platform": "claude",
3
+ "displayName": "Claude Code",
4
+ "installType": "full",
5
+ "folderStructure": {
6
+ "root": ".claude",
7
+ "skillPath": "skills/flutter-pro-max",
8
+ "filename": "SKILL.md"
9
+ },
10
+ "scriptPath": "skills/flutter-pro-max/scripts/search.py",
11
+ "frontmatter": {
12
+ "name": "flutter-pro-max",
13
+ "description": "Flutter design intelligence. Widgets, packages, patterns, architecture, performance optimization, accessibility, and UI/UX best practices. Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check Flutter code."
14
+ },
15
+ "sections": {
16
+ "quickReference": true
17
+ },
18
+ "title": "Flutter Pro Max - Flutter Design Intelligence",
19
+ "description": "Comprehensive Flutter development guide with searchable database of widgets, packages, design patterns, architecture guidelines, performance optimization, accessibility, and UI/UX best practices.",
20
+ "skillOrWorkflow": "Skill"
21
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "platform": "codebuddy",
3
+ "displayName": "CodeBuddy",
4
+ "installType": "full",
5
+ "folderStructure": {
6
+ "root": ".codebuddy",
7
+ "skillPath": "skills/flutter-pro-max",
8
+ "filename": "SKILL.md"
9
+ },
10
+ "scriptPath": "skills/flutter-pro-max/scripts/search.py",
11
+ "frontmatter": {
12
+ "name": "flutter-pro-max",
13
+ "description": "Flutter design intelligence with searchable database"
14
+ },
15
+ "sections": {
16
+ "quickReference": false
17
+ },
18
+ "title": "flutter-pro-max",
19
+ "description": "Comprehensive Flutter development guide with searchable database of widgets, packages, design patterns, architecture guidelines, performance optimization, accessibility, and UI/UX best practices.",
20
+ "skillOrWorkflow": "Skill"
21
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "platform": "codex",
3
+ "displayName": "Codex",
4
+ "installType": "full",
5
+ "folderStructure": {
6
+ "root": ".codex",
7
+ "skillPath": "skills/flutter-pro-max",
8
+ "filename": "SKILL.md"
9
+ },
10
+ "scriptPath": "skills/flutter-pro-max/scripts/search.py",
11
+ "frontmatter": {
12
+ "name": "flutter-pro-max",
13
+ "description": "Flutter design intelligence with searchable database"
14
+ },
15
+ "sections": {
16
+ "quickReference": false
17
+ },
18
+ "title": "flutter-pro-max",
19
+ "description": "Comprehensive Flutter development guide with searchable database of widgets, packages, design patterns, architecture guidelines, performance optimization, accessibility, and UI/UX best practices.",
20
+ "skillOrWorkflow": "Skill"
21
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "platform": "continue",
3
+ "displayName": "Continue",
4
+ "installType": "full",
5
+ "folderStructure": {
6
+ "root": ".continue",
7
+ "skillPath": "skills/flutter-pro-max",
8
+ "filename": "SKILL.md"
9
+ },
10
+ "scriptPath": "skills/flutter-pro-max/scripts/search.py",
11
+ "frontmatter": {
12
+ "name": "flutter-pro-max",
13
+ "description": "Flutter design intelligence with searchable database"
14
+ },
15
+ "sections": {
16
+ "quickReference": false
17
+ },
18
+ "title": "flutter-pro-max",
19
+ "description": "Comprehensive Flutter development guide with searchable database of widgets, packages, design patterns, architecture guidelines, performance optimization, accessibility, and UI/UX best practices.",
20
+ "skillOrWorkflow": "Skill"
21
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "platform": "copilot",
3
+ "displayName": "GitHub Copilot",
4
+ "installType": "reference",
5
+ "folderStructure": {
6
+ "root": ".github",
7
+ "skillPath": "prompts",
8
+ "filename": "flutter-pro-max.prompt.md"
9
+ },
10
+ "scriptPath": ".shared/flutter-pro-max/scripts/search.py",
11
+ "frontmatter": null,
12
+ "sections": {
13
+ "quickReference": false
14
+ },
15
+ "title": "flutter-pro-max",
16
+ "description": "Comprehensive Flutter development guide with searchable database of widgets, packages, design patterns, architecture guidelines, performance optimization, accessibility, and UI/UX best practices.",
17
+ "skillOrWorkflow": "Workflow"
18
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "platform": "cursor",
3
+ "displayName": "Cursor",
4
+ "installType": "reference",
5
+ "folderStructure": {
6
+ "root": ".cursor",
7
+ "skillPath": "commands",
8
+ "filename": "flutter-pro-max.md"
9
+ },
10
+ "scriptPath": ".shared/flutter-pro-max/scripts/search.py",
11
+ "frontmatter": null,
12
+ "sections": {
13
+ "quickReference": false
14
+ },
15
+ "title": "flutter-pro-max",
16
+ "description": "Comprehensive Flutter development guide with searchable database of widgets, packages, design patterns, architecture guidelines, performance optimization, accessibility, and UI/UX best practices.",
17
+ "skillOrWorkflow": "Workflow"
18
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "platform": "gemini",
3
+ "displayName": "Gemini CLI",
4
+ "installType": "full",
5
+ "folderStructure": {
6
+ "root": ".gemini",
7
+ "skillPath": "skills/flutter-pro-max",
8
+ "filename": "SKILL.md"
9
+ },
10
+ "scriptPath": "skills/flutter-pro-max/scripts/search.py",
11
+ "frontmatter": {
12
+ "name": "flutter-pro-max",
13
+ "description": "Flutter design intelligence with searchable database"
14
+ },
15
+ "sections": {
16
+ "quickReference": false
17
+ },
18
+ "title": "flutter-pro-max",
19
+ "description": "Comprehensive Flutter development guide with searchable database of widgets, packages, design patterns, architecture guidelines, performance optimization, accessibility, and UI/UX best practices.",
20
+ "skillOrWorkflow": "Skill"
21
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "platform": "kiro",
3
+ "displayName": "Kiro",
4
+ "installType": "reference",
5
+ "folderStructure": {
6
+ "root": ".kiro",
7
+ "skillPath": "steering",
8
+ "filename": "flutter-pro-max.md"
9
+ },
10
+ "scriptPath": ".shared/flutter-pro-max/scripts/search.py",
11
+ "frontmatter": null,
12
+ "sections": {
13
+ "quickReference": false
14
+ },
15
+ "title": "flutter-pro-max",
16
+ "description": "Comprehensive Flutter development guide with searchable database of widgets, packages, design patterns, architecture guidelines, performance optimization, accessibility, and UI/UX best practices.",
17
+ "skillOrWorkflow": "Workflow"
18
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "platform": "opencode",
3
+ "displayName": "OpenCode",
4
+ "installType": "full",
5
+ "folderStructure": {
6
+ "root": ".opencode",
7
+ "skillPath": "skills/flutter-pro-max",
8
+ "filename": "SKILL.md"
9
+ },
10
+ "scriptPath": "skills/flutter-pro-max/scripts/search.py",
11
+ "frontmatter": {
12
+ "name": "flutter-pro-max",
13
+ "description": "Flutter design intelligence with searchable database"
14
+ },
15
+ "sections": {
16
+ "quickReference": false
17
+ },
18
+ "title": "flutter-pro-max",
19
+ "description": "Comprehensive Flutter development guide with searchable database of widgets, packages, design patterns, architecture guidelines, performance optimization, accessibility, and UI/UX best practices.",
20
+ "skillOrWorkflow": "Skill"
21
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "platform": "qoder",
3
+ "displayName": "Qoder",
4
+ "installType": "reference",
5
+ "folderStructure": {
6
+ "root": ".qoder",
7
+ "skillPath": "skills/flutter-pro-max",
8
+ "filename": "SKILL.md"
9
+ },
10
+ "scriptPath": ".shared/flutter-pro-max/scripts/search.py",
11
+ "frontmatter": {
12
+ "name": "flutter-pro-max",
13
+ "description": "Flutter design intelligence with searchable database"
14
+ },
15
+ "sections": {
16
+ "quickReference": false
17
+ },
18
+ "title": "flutter-pro-max",
19
+ "description": "Comprehensive Flutter development guide with searchable database of widgets, packages, design patterns, architecture guidelines, performance optimization, accessibility, and UI/UX best practices.",
20
+ "skillOrWorkflow": "Skill"
21
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "platform": "roocode",
3
+ "displayName": "Roo Code",
4
+ "installType": "reference",
5
+ "folderStructure": {
6
+ "root": ".roo",
7
+ "skillPath": "commands",
8
+ "filename": "flutter-pro-max.md"
9
+ },
10
+ "scriptPath": ".shared/flutter-pro-max/scripts/search.py",
11
+ "frontmatter": null,
12
+ "sections": {
13
+ "quickReference": false
14
+ },
15
+ "title": "flutter-pro-max",
16
+ "description": "Comprehensive Flutter development guide with searchable database of widgets, packages, design patterns, architecture guidelines, performance optimization, accessibility, and UI/UX best practices.",
17
+ "skillOrWorkflow": "Workflow"
18
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "platform": "trae",
3
+ "displayName": "Trae",
4
+ "installType": "full",
5
+ "folderStructure": {
6
+ "root": ".trae",
7
+ "skillPath": "skills/flutter-pro-max",
8
+ "filename": "SKILL.md"
9
+ },
10
+ "scriptPath": "skills/flutter-pro-max/scripts/search.py",
11
+ "frontmatter": {
12
+ "name": "flutter-pro-max",
13
+ "description": "Flutter design intelligence with searchable database"
14
+ },
15
+ "sections": {
16
+ "quickReference": false
17
+ },
18
+ "title": "flutter-pro-max",
19
+ "description": "Comprehensive Flutter development guide with searchable database of widgets, packages, design patterns, architecture guidelines, performance optimization, accessibility, and UI/UX best practices.",
20
+ "skillOrWorkflow": "Skill"
21
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "platform": "windsurf",
3
+ "displayName": "Windsurf",
4
+ "installType": "reference",
5
+ "folderStructure": {
6
+ "root": ".windsurf",
7
+ "skillPath": "skills",
8
+ "filename": "flutter-pro-max.md"
9
+ },
10
+ "scriptPath": ".shared/flutter-pro-max/scripts/search.py",
11
+ "frontmatter": null,
12
+ "sections": {
13
+ "quickReference": false
14
+ },
15
+ "title": "flutter-pro-max",
16
+ "description": "Comprehensive Flutter development guide with searchable database of widgets, packages, design patterns, architecture guidelines, performance optimization, accessibility, and UI/UX best practices.",
17
+ "skillOrWorkflow": "Skill"
18
+ }
@@ -1,15 +1,10 @@
1
- import { join, dirname } from 'node:path';
2
- import { fileURLToPath } from 'node:url';
3
1
  import chalk from 'chalk';
4
2
  import ora from 'ora';
5
3
  import prompts from 'prompts';
6
4
  import { AI_TYPES } from '../types/index.js';
7
- import { copyFolders } from '../utils/extract.js';
5
+ import { generatePlatformFiles, generateAllPlatformFiles } from '../utils/template.js';
8
6
  import { detectAIType, getAITypeDescription } from '../utils/detect.js';
9
7
  import { logger } from '../utils/logger.js';
10
- const __dirname = dirname(fileURLToPath(import.meta.url));
11
- // From dist/commands/init.js -> go up 2 levels to cli/, then assets/
12
- const ASSETS_DIR = join(__dirname, '..', '..', 'assets');
13
8
  export async function initCommand(options) {
14
9
  logger.title('🚀 Flutter Pro Max Skill Installer');
15
10
  let aiType = options.ai;
@@ -36,11 +31,17 @@ export async function initCommand(options) {
36
31
  aiType = response.aiType;
37
32
  }
38
33
  logger.info(`Installing for: ${chalk.cyan(getAITypeDescription(aiType))}`);
39
- const spinner = ora('Installing files...').start();
34
+ const spinner = ora('Generating skill files from templates...').start();
35
+ const cwd = process.cwd();
40
36
  try {
41
- const cwd = process.cwd();
42
- const copiedFolders = await copyFolders(ASSETS_DIR, cwd, aiType);
43
- spinner.succeed('Installation complete!');
37
+ let copiedFolders;
38
+ if (aiType === 'all') {
39
+ copiedFolders = await generateAllPlatformFiles(cwd);
40
+ }
41
+ else {
42
+ copiedFolders = await generatePlatformFiles(cwd, aiType);
43
+ }
44
+ spinner.succeed('Generated from templates!');
44
45
  // Summary
45
46
  console.log();
46
47
  logger.info('Installed folders:');
@@ -52,9 +53,8 @@ export async function initCommand(options) {
52
53
  // Next steps
53
54
  console.log();
54
55
  console.log(chalk.bold('Next steps:'));
55
- console.log(chalk.dim(' 1. Install Python dependency: pip install rank-bm25'));
56
- console.log(chalk.dim(' 2. Restart your AI coding assistant'));
57
- console.log(chalk.dim(' 3. Try: "Tạo màn hình đăng nhập với Riverpod"'));
56
+ console.log(chalk.dim(' 1. Restart your AI coding assistant'));
57
+ console.log(chalk.dim(' 2. Try: "Tạo màn hình đăng nhập với Riverpod"'));
58
58
  console.log();
59
59
  }
60
60
  catch (error) {