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.
- package/README.md +109 -16
- package/assets/data/flutter-performance.csv +36 -0
- package/assets/data/mobile-accessibility.csv +36 -0
- package/assets/data/ui-reasoning.csv +36 -0
- package/assets/scripts/__pycache__/core.cpython-312.pyc +0 -0
- package/assets/scripts/__pycache__/design_system.cpython-312.pyc +0 -0
- package/assets/{.claude/skills/flutter-pro-max/scripts → scripts}/core.py +72 -48
- package/assets/scripts/design_system.py +1074 -0
- package/assets/{.codebuddy/commands/scripts → scripts}/search.py +73 -2
- package/assets/templates/base/quick-reference.md +41 -0
- package/assets/templates/base/skill-content.md +179 -0
- package/assets/templates/platforms/agent.json +21 -0
- package/assets/templates/platforms/claude.json +21 -0
- package/assets/templates/platforms/codebuddy.json +21 -0
- package/assets/templates/platforms/codex.json +21 -0
- package/assets/templates/platforms/continue.json +21 -0
- package/assets/templates/platforms/copilot.json +18 -0
- package/assets/templates/platforms/cursor.json +18 -0
- package/assets/templates/platforms/gemini.json +21 -0
- package/assets/templates/platforms/kiro.json +18 -0
- package/assets/templates/platforms/opencode.json +21 -0
- package/assets/templates/platforms/qoder.json +21 -0
- package/assets/templates/platforms/roocode.json +18 -0
- package/assets/templates/platforms/trae.json +21 -0
- package/assets/templates/platforms/windsurf.json +18 -0
- package/dist/commands/init.js +13 -13
- package/dist/commands/update.d.ts +6 -0
- package/dist/commands/update.js +27 -0
- package/dist/commands/versions.d.ts +1 -0
- package/dist/commands/versions.js +36 -0
- package/dist/index.js +27 -1
- package/dist/types/index.d.ts +20 -1
- package/dist/types/index.js +4 -1
- package/dist/utils/detect.js +11 -1
- package/dist/utils/extract.d.ts +5 -0
- package/dist/utils/github.d.ts +11 -0
- package/dist/utils/github.js +81 -0
- package/dist/utils/template.d.ts +25 -0
- package/dist/utils/template.js +194 -0
- package/package.json +8 -4
- package/assets/.agent/workflows/flutter-pro-max.md +0 -221
- package/assets/.agent/workflows/scripts/core.py +0 -345
- package/assets/.agent/workflows/scripts/search.py +0 -106
- package/assets/.claude/skills/flutter-pro-max/SKILL.md +0 -339
- package/assets/.claude/skills/flutter-pro-max/scripts/search.py +0 -106
- package/assets/.codebuddy/commands/flutter-pro-max.md +0 -221
- package/assets/.codebuddy/commands/scripts/core.py +0 -345
- package/assets/.codex/skills/flutter-pro-max/SKILL.md +0 -221
- package/assets/.codex/skills/flutter-pro-max/scripts/core.py +0 -345
- package/assets/.codex/skills/flutter-pro-max/scripts/search.py +0 -106
- package/assets/.cursor/commands/flutter-pro-max.md +0 -221
- package/assets/.cursor/commands/scripts/core.py +0 -345
- package/assets/.cursor/commands/scripts/search.py +0 -106
- package/assets/.gemini/skills/flutter-pro-max/SKILL.md +0 -221
- package/assets/.gemini/skills/flutter-pro-max/scripts/core.py +0 -345
- package/assets/.gemini/skills/flutter-pro-max/scripts/search.py +0 -106
- package/assets/.github/prompts/flutter-pro-max.prompt.md +0 -221
- package/assets/.github/prompts/scripts/core.py +0 -345
- package/assets/.github/prompts/scripts/search.py +0 -106
- package/assets/.kiro/steering/flutter-pro-max.md +0 -220
- package/assets/.kiro/steering/scripts/core.py +0 -345
- package/assets/.kiro/steering/scripts/search.py +0 -106
- package/assets/.qoder/rules/flutter-pro-max.md +0 -220
- package/assets/.qoder/rules/scripts/core.py +0 -345
- package/assets/.qoder/rules/scripts/search.py +0 -106
- package/assets/.roo/commands/flutter-pro-max.md +0 -220
- package/assets/.roo/commands/scripts/core.py +0 -345
- package/assets/.roo/commands/scripts/search.py +0 -106
- package/assets/.shared/flutter-pro-max/SKILL.md +0 -221
- package/assets/.shared/flutter-pro-max/scripts/core.py +0 -341
- package/assets/.shared/flutter-pro-max/scripts/search.py +0 -106
- package/assets/.trae/skills/flutter-pro-max/SKILL.md +0 -221
- package/assets/.trae/skills/flutter-pro-max/scripts/core.py +0 -345
- package/assets/.trae/skills/flutter-pro-max/scripts/search.py +0 -106
- package/assets/.windsurf/workflows/flutter-pro-max.md +0 -221
- package/assets/.windsurf/workflows/scripts/core.py +0 -345
- package/assets/.windsurf/workflows/scripts/search.py +0 -106
- package/dist/utils/extract.js +0 -83
- /package/assets/{.shared/data → data}/architect.csv +0 -0
- /package/assets/{.shared/data → data}/charts.csv +0 -0
- /package/assets/{.shared/data → data}/colors.csv +0 -0
- /package/assets/{.shared/data → data}/icons.csv +0 -0
- /package/assets/{.shared/data → data}/landing.csv +0 -0
- /package/assets/{.shared/data → data}/name_convention.csv +0 -0
- /package/assets/{.shared/data → data}/package.csv +0 -0
- /package/assets/{.shared/data → data}/patterns.csv +0 -0
- /package/assets/{.shared/data → data}/products.csv +0 -0
- /package/assets/{.shared/data → data}/prompts.csv +0 -0
- /package/assets/{.shared/data → data}/styles.csv +0 -0
- /package/assets/{.shared/data → data}/typography.csv +0 -0
- /package/assets/{.shared/data → data}/ux-guidelines.csv +0 -0
- /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
|
+
}
|
package/dist/commands/init.js
CHANGED
|
@@ -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 {
|
|
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('
|
|
34
|
+
const spinner = ora('Generating skill files from templates...').start();
|
|
35
|
+
const cwd = process.cwd();
|
|
40
36
|
try {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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.
|
|
56
|
-
console.log(chalk.dim(' 2.
|
|
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) {
|