mobile-ai-agents 1.0.23
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/AGENTS.md +228 -0
- package/CLAUDE.md +236 -0
- package/LICENSE +21 -0
- package/README.md +652 -0
- package/agents/android/android-crash-analyzer/README.md +134 -0
- package/agents/android/android-crash-analyzer/agent.md +206 -0
- package/agents/android/android-crash-analyzer/example-input.md +138 -0
- package/agents/android/android-crash-analyzer/example-output.md +225 -0
- package/agents/android/anr-investigation/README.md +78 -0
- package/agents/android/anr-investigation/agent.md +117 -0
- package/agents/android/anr-investigation/example-input.md +62 -0
- package/agents/android/anr-investigation/example-output.md +103 -0
- package/agents/android/axiom/agent.md +197 -0
- package/agents/android/code-reviewer/README.md +108 -0
- package/agents/android/code-reviewer/agent.md +210 -0
- package/agents/android/code-reviewer/example-input.md +116 -0
- package/agents/android/code-reviewer/example-output.md +115 -0
- package/agents/android/compose-navigation/README.md +76 -0
- package/agents/android/compose-navigation/agent.md +121 -0
- package/agents/android/compose-navigation/example-input.md +49 -0
- package/agents/android/compose-navigation/example-output.md +325 -0
- package/agents/android/compose-screen-builder/README.md +95 -0
- package/agents/android/compose-screen-builder/agent.md +170 -0
- package/agents/android/compose-screen-builder/example-input.md +40 -0
- package/agents/android/compose-screen-builder/example-output.md +568 -0
- package/agents/android/compose-ui-reviewer/README.md +73 -0
- package/agents/android/compose-ui-reviewer/agent.md +253 -0
- package/agents/android/compose-ui-reviewer/example-input.md +84 -0
- package/agents/android/compose-ui-reviewer/example-output.md +102 -0
- package/agents/android/crash-analyzer/README.md +53 -0
- package/agents/android/crash-analyzer/agent.md +295 -0
- package/agents/android/memory-leak-analyzer/README.md +79 -0
- package/agents/android/memory-leak-analyzer/agent.md +116 -0
- package/agents/android/memory-leak-analyzer/example-input.md +78 -0
- package/agents/android/memory-leak-analyzer/example-output.md +128 -0
- package/agents/cross-platform/accessibility-auditor/README.md +47 -0
- package/agents/cross-platform/accessibility-auditor/agent.md +268 -0
- package/agents/cross-platform/accessibility-auditor/example-input.md +84 -0
- package/agents/cross-platform/accessibility-auditor/example-output.md +132 -0
- package/agents/cross-platform/appforge/agent.md +303 -0
- package/agents/cross-platform/ci-cd-generator/README.md +65 -0
- package/agents/cross-platform/ci-cd-generator/agent.md +422 -0
- package/agents/cross-platform/ci-cd-generator/example-input.md +69 -0
- package/agents/cross-platform/ci-cd-generator/example-output.md +261 -0
- package/agents/cross-platform/crasher/agent.md +221 -0
- package/agents/cross-platform/figma/agent.md +247 -0
- package/agents/cross-platform/launchpad/agent.md +330 -0
- package/agents/cross-platform/mobile-harness/agent.md +422 -0
- package/agents/cross-platform/mobile-memory/agent.md +429 -0
- package/agents/cross-platform/perf/agent.md +261 -0
- package/agents/cross-platform/pipeline/agent.md +288 -0
- package/agents/cross-platform/release-notes-generator/README.md +63 -0
- package/agents/cross-platform/release-notes-generator/agent.md +218 -0
- package/agents/cross-platform/release-notes-generator/example-input.md +71 -0
- package/agents/cross-platform/release-notes-generator/example-output.md +96 -0
- package/agents/cross-platform/scribe/agent.md +180 -0
- package/agents/cross-platform/security-scanner/README.md +61 -0
- package/agents/cross-platform/security-scanner/agent.md +287 -0
- package/agents/cross-platform/security-scanner/example-input.md +77 -0
- package/agents/cross-platform/security-scanner/example-output.md +141 -0
- package/agents/cross-platform/sentinel/agent.md +217 -0
- package/agents/cross-platform/store-listing-writer/README.md +58 -0
- package/agents/cross-platform/store-listing-writer/agent.md +380 -0
- package/agents/cross-platform/store-listing-writer/example-input.md +67 -0
- package/agents/cross-platform/store-listing-writer/example-output.md +131 -0
- package/agents/flutter/bloc-feature-builder/README.md +101 -0
- package/agents/flutter/bloc-feature-builder/agent.md +225 -0
- package/agents/flutter/bloc-feature-builder/example-input.md +47 -0
- package/agents/flutter/bloc-feature-builder/example-output.md +838 -0
- package/agents/flutter/dart/agent.md +223 -0
- package/agents/flutter/widget-generator/README.md +66 -0
- package/agents/flutter/widget-generator/agent.md +264 -0
- package/agents/flutter/widget-generator/example-input.md +71 -0
- package/agents/flutter/widget-generator/example-output.md +163 -0
- package/agents/gaming/forge/agent.md +197 -0
- package/agents/gaming/unreal/agent.md +200 -0
- package/agents/ios/crash-analyzer/README.md +69 -0
- package/agents/ios/crash-analyzer/agent.md +300 -0
- package/agents/ios/crash-analyzer/example-input.md +83 -0
- package/agents/ios/crash-analyzer/example-output.md +126 -0
- package/agents/ios/swift/agent.md +206 -0
- package/agents/ios/swift-reviewer/README.md +68 -0
- package/agents/ios/swift-reviewer/agent.md +231 -0
- package/agents/ios/swift-reviewer/example-input.md +100 -0
- package/agents/ios/swift-reviewer/example-output.md +127 -0
- package/agents/react-native/bridge/agent.md +212 -0
- package/agents/react-native/performance-optimizer/README.md +81 -0
- package/agents/react-native/performance-optimizer/agent.md +284 -0
- package/agents/react-native/performance-optimizer/example-input.md +104 -0
- package/agents/react-native/performance-optimizer/example-output.md +132 -0
- package/agents/unity/shader-generator/README.md +77 -0
- package/agents/unity/shader-generator/agent.md +270 -0
- package/agents/unity/shader-generator/example-input.md +70 -0
- package/agents/unity/shader-generator/example-output.md +160 -0
- package/agents/unreal/blueprint-advisor/README.md +71 -0
- package/agents/unreal/blueprint-advisor/agent.md +311 -0
- package/agents/unreal/blueprint-advisor/example-input.md +73 -0
- package/agents/unreal/blueprint-advisor/example-output.md +217 -0
- package/cli/index.js +1091 -0
- package/docs/agent-guide.md +138 -0
- package/docs/chatgpt-integration.md +219 -0
- package/docs/core-loops.md +143 -0
- package/docs/cursor-integration.md +143 -0
- package/docs/getting-started.md +132 -0
- package/docs/index.html +711 -0
- package/docs/installation.md +271 -0
- package/docs/mobile-harness.md +160 -0
- package/docs/mobile-mcp.md +172 -0
- package/docs/mobile-memory.md +349 -0
- package/docs/release-process.md +85 -0
- package/docs/releases/release-v1.0.0.md +165 -0
- package/docs/roadmap/github-issues.md +239 -0
- package/docs/skill-categories.md +125 -0
- package/docs/vscode-copilot-integration.md +104 -0
- package/docs/wiki.md +615 -0
- package/install.sh +507 -0
- package/mobile-karpathy.md +79 -0
- package/package.json +57 -0
- package/skills/android/README.md +31 -0
- package/skills/android/android-tdd.md +89 -0
- package/skills/android/anr-investigation.md +251 -0
- package/skills/android/code-review.md +98 -0
- package/skills/android/compose-migration.md +48 -0
- package/skills/android/compose-review.md +78 -0
- package/skills/android/kotlin-modernize.md +51 -0
- package/skills/android/memory-leak-investigation.md +256 -0
- package/skills/android/proguard-rules.md +48 -0
- package/skills/cross-platform/accessibility-audit.md +63 -0
- package/skills/cross-platform/api-versioning.md +59 -0
- package/skills/cross-platform/clean-code-audit.md +239 -0
- package/skills/cross-platform/crash-triage.md +53 -0
- package/skills/cross-platform/deeplink-debug.md +57 -0
- package/skills/cross-platform/feature-slice.md +48 -0
- package/skills/cross-platform/grill-mobile.md +64 -0
- package/skills/cross-platform/mobile-mcp-qa.md +193 -0
- package/skills/cross-platform/mobile-memory-graph.md +179 -0
- package/skills/cross-platform/mobile-memory-save.md +210 -0
- package/skills/cross-platform/mobile-memory-search.md +154 -0
- package/skills/cross-platform/perf-audit.md +61 -0
- package/skills/cross-platform/prd-verification.md +324 -0
- package/skills/cross-platform/release-prep.md +64 -0
- package/skills/cross-platform/security-audit.md +281 -0
- package/skills/cross-platform/store-listing.md +75 -0
- package/skills/flutter/README.md +32 -0
- package/skills/flutter/dart-modernize.md +47 -0
- package/skills/flutter/flutter-review.md +59 -0
- package/skills/flutter/flutter-tdd.md +73 -0
- package/skills/flutter/widget-extract.md +41 -0
- package/skills/flutter/widget-gen.md +131 -0
- package/skills/gaming/blueprint-to-cpp.md +51 -0
- package/skills/gaming/game-perf.md +54 -0
- package/skills/gaming/shader-gen.md +44 -0
- package/skills/gaming/unity-tdd.md +85 -0
- package/skills/ios/README.md +45 -0
- package/skills/ios/data-persistence.md +151 -0
- package/skills/ios/ios-tdd.md +90 -0
- package/skills/ios/networking.md +139 -0
- package/skills/ios/performance.md +122 -0
- package/skills/ios/swift-concurrency.md +57 -0
- package/skills/ios/swift-review.md +124 -0
- package/skills/ios/swiftui-review.md +49 -0
- package/skills/ios/swiftui-state.md +122 -0
- package/skills/ios/unit-testing.md +144 -0
- package/skills/ios/xcode-warnings.md +37 -0
- package/skills/react-native/README.md +42 -0
- package/skills/react-native/bridge-audit.md +104 -0
- package/skills/react-native/expo-optimize.md +55 -0
- package/skills/react-native/new-arch-migrate.md +53 -0
- package/skills/react-native/performance.md +124 -0
- package/skills/react-native/rn-review.md +53 -0
- package/skills/react-native/rn-tdd.md +76 -0
- package/skills/shared/README.md +46 -0
- package/skills/shared/accessibility-audit.md +132 -0
- package/skills/shared/crash-analysis.md +110 -0
- package/skills/shared/security-scan.md +149 -0
- package/skills/unity/README.md +31 -0
- package/skills/unity/shader-review.md +110 -0
- package/templates/agent-template.md +88 -0
- package/templates/prompt-template.md +50 -0
- package/templates/skill-template.md +64 -0
- package/templates/workflow-template.md +48 -0
- package/workflows/app-launch.md +66 -0
- package/workflows/appforge-workflow.md +232 -0
- package/workflows/ci-setup.md +77 -0
- package/workflows/crash-to-fix.md +71 -0
- package/workflows/feature-ship.md +61 -0
- package/workflows/game-level.md +72 -0
- package/workflows/mobile-harness.md +319 -0
- package/workflows/mobile-mcp-qa.md +228 -0
- package/workflows/mobile-memory-workflow.md +243 -0
- package/workflows/new-project-setup.md +93 -0
- package/workflows/new-screen.md +68 -0
- package/workflows/perf-sprint.md +78 -0
- package/workflows/release-cycle.md +71 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Skill — /store-listing
|
|
2
|
+
|
|
3
|
+
**Platform:** Cross-Platform
|
|
4
|
+
**Slash Command:** `/store-listing`
|
|
5
|
+
**Composable With:** agents/cross-platform/launchpad/agent.md
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Conversational ASO and growth listing writer. It audits the app baseline, then generates App Store and Play Store metadata, keyword strategy, screenshot/video briefs, and launch-growth recommendations without duplicating platform keywords incorrectly.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Skill Prompt
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
Generate ASO-optimized store listing copy through a short diagnostic conversation:
|
|
19
|
+
|
|
20
|
+
ASK THESE QUESTIONS FIRST (wait for answers before generating unless the user already provided them):
|
|
21
|
+
1. App Store / Play Store URL if live, or app name and category if not live.
|
|
22
|
+
2. Target market/region and language. Example: US English, UK English, Brazil Portuguese, Japan Japanese.
|
|
23
|
+
3. Core value proposition in one sentence.
|
|
24
|
+
4. Target user and pain point. Include audience, use case, and purchase intent.
|
|
25
|
+
5. Top 3 features that make users stay.
|
|
26
|
+
6. Top 2-3 competitors or alternatives.
|
|
27
|
+
7. Current stage: idea, pre-launch, newly launched, scaling, or optimization.
|
|
28
|
+
8. Platform(s): Android, iOS, or both.
|
|
29
|
+
9. Monetization: free, ads, subscription, one-time purchase, IAP, or mixed.
|
|
30
|
+
10. Brand tone: professional, friendly, playful, premium, utility, or minimal.
|
|
31
|
+
|
|
32
|
+
AFTER RECEIVING ANSWERS, GENERATE:
|
|
33
|
+
|
|
34
|
+
PLAY STORE:
|
|
35
|
+
- Title (30 chars): Brand + primary keyword. Keep it natural and policy-safe.
|
|
36
|
+
- Short Description (80 chars): Primary conversion hook with 1-2 important keywords.
|
|
37
|
+
- Long Description (4000 chars max): Semantic description for Google Play NLP.
|
|
38
|
+
Primary keyword in the first 167 chars. Maintain roughly 2-3% primary keyword density.
|
|
39
|
+
Use benefit headers, short paragraphs, bullets, social-proof placeholders, and a CTA.
|
|
40
|
+
- Store Listing Experiments: 2-3 A/B test ideas for title, short description, screenshots, or feature graphic.
|
|
41
|
+
- Promotional Content: event/update/banner idea if relevant.
|
|
42
|
+
|
|
43
|
+
APP STORE:
|
|
44
|
+
- Name (30 chars): Brand + highest-value keyword if it fits naturally.
|
|
45
|
+
- Subtitle (30 chars): Secondary keyword phrase that complements the name and does not repeat words.
|
|
46
|
+
- Keyword field (100 chars): Comma-separated, no spaces, no repeats from name/subtitle.
|
|
47
|
+
Break phrases into individual words. Prefer singular form unless plural has distinct intent.
|
|
48
|
+
- Promotional Text (170 chars): Timely update, offer, social proof, or launch hook.
|
|
49
|
+
- Description (4000 chars max): Benefit-first, structured, conversion-focused.
|
|
50
|
+
- Product Page Optimization: 2-3 PPO test ideas for icon, screenshots, preview video, or subtitle.
|
|
51
|
+
- Custom Product Page: one CPP angle mapped to a keyword or campaign.
|
|
52
|
+
- In-App Event: one IAE idea if relevant.
|
|
53
|
+
|
|
54
|
+
VISUAL + VIDEO BRIEF:
|
|
55
|
+
- Screenshot 1 hero caption and visual.
|
|
56
|
+
- Screenshots 2-5 feature captions and visuals.
|
|
57
|
+
- App preview/promo video concept with the first 3 seconds scripted.
|
|
58
|
+
- YouTube/short-form video distribution ideas if useful for the category.
|
|
59
|
+
|
|
60
|
+
GROWTH + OFF-STORE SEO:
|
|
61
|
+
- Google Play backlink/PR plan with safe contextual anchor examples.
|
|
62
|
+
- Landing page SEO angle and smart app banner/deep-link recommendation.
|
|
63
|
+
- Directory/community placements such as Product Hunt, AlternativeTo, G2, Capterra, or niche forums where appropriate.
|
|
64
|
+
|
|
65
|
+
RULES:
|
|
66
|
+
- Character limits are hard limits. Report character counts for every metadata field.
|
|
67
|
+
- Never use competitor names in keyword fields (App Store policy violation)
|
|
68
|
+
- Never use misleading superlatives like "best", "#1", or "world's leading" unless independently verifiable and policy-safe.
|
|
69
|
+
- Singular OR plural in keywords — not both (algorithm handles it)
|
|
70
|
+
- No emoji in Play Store title (against guidelines)
|
|
71
|
+
- Do not keyword-stuff. If density is too high, flag it before submission.
|
|
72
|
+
- Localize separately per market. Do not mix languages in one keyword field unless the market behavior supports it.
|
|
73
|
+
|
|
74
|
+
Flag any constraint violation before the developer submits.
|
|
75
|
+
```
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Flutter Skills
|
|
2
|
+
|
|
3
|
+
Reusable skill prompt modules for Flutter (Dart 3.x) widget generation and code review.
|
|
4
|
+
|
|
5
|
+
## Index
|
|
6
|
+
|
|
7
|
+
| Skill | File | When to Use |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| Flutter Widget Generation Rules | [widget-gen.md](widget-gen.md) | Before generating any widget — ensures null-safety, const constructors, theming, accessibility |
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
# Prime any LLM session before widget generation
|
|
15
|
+
[paste skill prompt from widget-gen.md]
|
|
16
|
+
|
|
17
|
+
Generate a widget for: [describe the widget]
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Composable With
|
|
21
|
+
|
|
22
|
+
- [`agents/flutter/widget-generator`](../../agents/flutter/widget-generator/) — full structured widget generation
|
|
23
|
+
- [`agents/flutter/bloc-feature-builder`](../../agents/flutter/bloc-feature-builder/) — generate full feature layer
|
|
24
|
+
|
|
25
|
+
## Contributing
|
|
26
|
+
|
|
27
|
+
High-value skills to add:
|
|
28
|
+
- `state-management-review.md` — review BLoC, Cubit, Riverpod, Provider patterns
|
|
29
|
+
- `navigation-review.md` — GoRouter, Navigator 2.0 patterns
|
|
30
|
+
- `performance-review.md` — `const` constructors, `ListView.builder`, `RepaintBoundary`
|
|
31
|
+
|
|
32
|
+
Copy `templates/skill-template.md` and open a PR.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Skill — /dart-modernize
|
|
2
|
+
|
|
3
|
+
**Platform:** Flutter (Dart 3.x)
|
|
4
|
+
**Slash Command:** `/dart-modernize`
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
Upgrades pre-null-safety or Dart 2.x code to modern Dart 3.x patterns. Introduces records, patterns, sealed classes, and null safety best practices.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Skill Prompt
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
Modernize the provided Dart code to Dart 3.x idioms:
|
|
18
|
+
|
|
19
|
+
NULL SAFETY UPGRADES:
|
|
20
|
+
- Remove null assertions (!) where safe alternatives exist.
|
|
21
|
+
- Replace nullable + null check pattern with if-null operator ??.
|
|
22
|
+
- Replace nullable return types with Result<T> pattern or sealed class for error states.
|
|
23
|
+
- late variables: confirm they are always initialized before use; otherwise use nullable.
|
|
24
|
+
|
|
25
|
+
DART 3.x FEATURES:
|
|
26
|
+
1. Records: replace multi-value tuples, Map<String, dynamic> returns, or pair classes.
|
|
27
|
+
Before: Map<String, dynamic> getCoords() => {'lat': 1.3, 'lng': 103.8}
|
|
28
|
+
After: (double lat, double lng) getCoords() => (1.3, 103.8)
|
|
29
|
+
|
|
30
|
+
2. Patterns + switch expressions:
|
|
31
|
+
Before: String label(Shape s) { if (s is Circle) return 'circle'; ... }
|
|
32
|
+
After: String label(Shape s) => switch (s) {
|
|
33
|
+
Circle() => 'circle', Rectangle() => 'rectangle', _ => 'unknown'
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
3. Sealed classes (Dart 3): replace abstract classes used for exhaustive matching.
|
|
37
|
+
sealed class ApiResult<T> { }
|
|
38
|
+
final class Success<T> extends ApiResult<T> { final T data; ... }
|
|
39
|
+
final class Failure<T> extends ApiResult<T> { final Exception error; ... }
|
|
40
|
+
|
|
41
|
+
4. Class modifiers: add final, base, or interface where appropriate.
|
|
42
|
+
|
|
43
|
+
5. Extension types: replace thin wrapper classes (value objects) with extension types
|
|
44
|
+
for zero-cost abstraction.
|
|
45
|
+
|
|
46
|
+
Show before and after for each transformation.
|
|
47
|
+
```
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Skill — /flutter-review
|
|
2
|
+
|
|
3
|
+
**Platform:** Flutter (Dart 3.x)
|
|
4
|
+
**Slash Command:** `/flutter-review`
|
|
5
|
+
**Composable With:** agents/flutter/dart/agent.md
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Widget tree audit covering const constructors, state management correctness, rebuild scope, and accessibility. Use before PR merge on any Flutter screen or widget.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Skill Prompt
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
Review the provided Flutter/Dart code for these issues:
|
|
19
|
+
|
|
20
|
+
CONST CONSTRUCTORS
|
|
21
|
+
- Every widget whose properties are all compile-time constants should be const.
|
|
22
|
+
- Flag every Text('literal'), Icon(Icons.x), SizedBox(height: N) that is missing const.
|
|
23
|
+
- Cost of missing const: unnecessary widget instantiation on every rebuild.
|
|
24
|
+
|
|
25
|
+
REBUILD SCOPE
|
|
26
|
+
- setState() in a large StatefulWidget that should be scoped to a smaller widget.
|
|
27
|
+
- Consumer/BlocBuilder/Selector wrapping the entire screen body.
|
|
28
|
+
Fix: wrap only the smallest subtree that actually depends on the changing state.
|
|
29
|
+
- AnimatedBuilder wrapping non-animated children.
|
|
30
|
+
|
|
31
|
+
STATE MANAGEMENT
|
|
32
|
+
- Business logic in build() method — flag and suggest moving to Bloc/Cubit/Notifier.
|
|
33
|
+
- BuildContext used after async gap without mounted check.
|
|
34
|
+
- StreamBuilder with no initialData and no error handler.
|
|
35
|
+
|
|
36
|
+
NULL SAFETY
|
|
37
|
+
- Late variables without clear initialization guarantee.
|
|
38
|
+
- ! operator on values that could realistically be null.
|
|
39
|
+
- Dynamic type used where a concrete type is known.
|
|
40
|
+
|
|
41
|
+
ACCESSIBILITY
|
|
42
|
+
- Images without semanticLabel.
|
|
43
|
+
- Tappable widgets without Semantics(button: true) or semanticsLabel.
|
|
44
|
+
- Touch targets smaller than 48×48dp.
|
|
45
|
+
- Text contrast — flag hardcoded colors that may fail WCAG AA.
|
|
46
|
+
|
|
47
|
+
DART 3.x PATTERNS
|
|
48
|
+
- switch expressions where applicable (replaces verbose if/else chains).
|
|
49
|
+
- Records for lightweight multi-value returns.
|
|
50
|
+
- Sealed classes for exhaustive state modeling.
|
|
51
|
+
|
|
52
|
+
For each issue: widget name, line if given, what causes the problem, and the fix.
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Demo
|
|
58
|
+
|
|
59
|
+
<img width="400" height="261" alt="flutter-review demo" src="https://github.com/user-attachments/assets/e0c1d9d8-f66e-4983-a60b-b3b515fa0de0" />
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Skill — /flutter-tdd
|
|
2
|
+
|
|
3
|
+
**Platform:** Flutter (Dart 3.x)
|
|
4
|
+
**Slash Command:** `/flutter-tdd`
|
|
5
|
+
**Composable With:** agents/flutter/dart/agent.md
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Runs the red-green-refactor TDD loop for Flutter — widget tests, unit tests, and Bloc/Riverpod tests. Generates failing tests first, then the minimal implementation.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Skill Prompt
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
Run the Flutter TDD loop for the described feature or widget:
|
|
19
|
+
|
|
20
|
+
STEP 1 — RED: Write a failing test first.
|
|
21
|
+
- For Dart logic: flutter_test unit test using test(), setUp(), expect().
|
|
22
|
+
- For Widgets: WidgetTester with pumpWidget(), find.*, tap(), enterText().
|
|
23
|
+
- For Bloc: bloc_test package with blocTest<>() — seed state, act, expect.
|
|
24
|
+
- For Riverpod: ProviderContainer with overrides to test providers in isolation.
|
|
25
|
+
|
|
26
|
+
STEP 2 — GREEN: Write the minimal Dart/Flutter implementation to pass.
|
|
27
|
+
- Smallest possible code. No architecture yet.
|
|
28
|
+
|
|
29
|
+
STEP 3 — REFACTOR: Apply correct patterns.
|
|
30
|
+
- Extract StatelessWidget, add const, apply BLoC/Riverpod pattern properly.
|
|
31
|
+
|
|
32
|
+
Format:
|
|
33
|
+
--- RED ---
|
|
34
|
+
<test code>
|
|
35
|
+
|
|
36
|
+
--- GREEN ---
|
|
37
|
+
<minimal implementation>
|
|
38
|
+
|
|
39
|
+
--- REFACTOR ---
|
|
40
|
+
<final implementation>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Example
|
|
46
|
+
|
|
47
|
+
**Input:** "TDD a CartBloc that adds items and tracks total price"
|
|
48
|
+
|
|
49
|
+
**Output:**
|
|
50
|
+
```dart
|
|
51
|
+
--- RED ---
|
|
52
|
+
blocTest<CartBloc, CartState>(
|
|
53
|
+
'adding an item increases total price',
|
|
54
|
+
build: () => CartBloc(),
|
|
55
|
+
act: (bloc) => bloc.add(AddItem(Item(name: 'Book', price: 15.0))),
|
|
56
|
+
expect: () => [
|
|
57
|
+
CartState(items: [Item(name: 'Book', price: 15.0)], total: 15.0),
|
|
58
|
+
],
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
--- GREEN ---
|
|
62
|
+
class CartBloc extends Bloc<CartEvent, CartState> {
|
|
63
|
+
CartBloc() : super(CartState(items: [], total: 0)) {
|
|
64
|
+
on<AddItem>((event, emit) {
|
|
65
|
+
final items = [...state.items, event.item];
|
|
66
|
+
emit(CartState(items: items, total: items.fold(0, (s, i) => s + i.price)));
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
--- REFACTOR ---
|
|
72
|
+
// Extract total calculation, add @freezed state, equatable events
|
|
73
|
+
```
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Skill — /widget-extract
|
|
2
|
+
|
|
3
|
+
**Platform:** Flutter (Dart)
|
|
4
|
+
**Slash Command:** `/widget-extract`
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
Identifies oversized build() methods and extracts them into reusable, testable widget components. Applies the Flutter "extract widget" refactoring pattern correctly.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Skill Prompt
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
Analyze the provided Flutter widget and extract oversized build() methods into smaller components:
|
|
18
|
+
|
|
19
|
+
EXTRACTION CRITERIA:
|
|
20
|
+
- build() longer than 60 lines: candidate for extraction.
|
|
21
|
+
- Repeated patterns (2+ similar widget subtrees): candidate for a reusable component.
|
|
22
|
+
- Conditionally rendered subtrees: extract into separate named widgets.
|
|
23
|
+
- List item builder: extract into a dedicated ItemWidget.
|
|
24
|
+
|
|
25
|
+
EXTRACTION RULES:
|
|
26
|
+
1. Prefer StatelessWidget over methods (extracting into a private _buildX() method is worse
|
|
27
|
+
than a separate widget — methods don't benefit from widget diffing and add noise).
|
|
28
|
+
2. Pass only the data the child widget needs — not the parent's entire state/model.
|
|
29
|
+
3. Add const constructor to the extracted widget if all fields are final.
|
|
30
|
+
4. Name extracted widgets after their semantic role (not _MyWidgetHeader, but UserProfileHeader).
|
|
31
|
+
|
|
32
|
+
WHAT NOT TO EXTRACT:
|
|
33
|
+
- Modifier chains (Padding, SizedBox wrappers) — keep inline.
|
|
34
|
+
- Single-child wrappers with no reuse value.
|
|
35
|
+
- Subtrees under 5 lines with no reuse potential.
|
|
36
|
+
|
|
37
|
+
Output:
|
|
38
|
+
1. List of extraction candidates with justification.
|
|
39
|
+
2. Refactored parent widget.
|
|
40
|
+
3. Each extracted widget as a separate, complete class.
|
|
41
|
+
```
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# Skill — Flutter Widget Generation Rules
|
|
2
|
+
|
|
3
|
+
**Platform:** Flutter (Dart)
|
|
4
|
+
**Category:** UI & Design
|
|
5
|
+
**Composable With:** agents/flutter/widget-generator/agent.md
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Gives an LLM the rules needed to generate production-quality Flutter widget code. Use as a standalone primer or as a module inside the Widget Generator agent.
|
|
12
|
+
|
|
13
|
+
## When to Use
|
|
14
|
+
|
|
15
|
+
- Before asking any LLM to write Flutter widget code
|
|
16
|
+
- When you want quick widget snippets without running the full agent
|
|
17
|
+
- As a quality gate when reviewing AI-generated Flutter code
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Skill Prompt
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
When generating Flutter/Dart widget code, follow these rules:
|
|
25
|
+
|
|
26
|
+
CORRECTNESS
|
|
27
|
+
- All code must be null-safe (Dart 3.x). Never use the legacy ? suffix on non-nullable types.
|
|
28
|
+
- Prefer `const` constructors wherever possible — this is a Flutter performance requirement,
|
|
29
|
+
not a style preference. Mark widgets const when all fields are compile-time constants.
|
|
30
|
+
- Call `super.dispose()` in every dispose() override. Failure to do so is a memory leak.
|
|
31
|
+
- Use `super.key` parameter forwarding in constructors: MyWidget({super.key, ...}).
|
|
32
|
+
|
|
33
|
+
THEMING
|
|
34
|
+
- Never hardcode colors as hex literals (#FF5733) or RGB values (Colors.red). Always use:
|
|
35
|
+
Theme.of(context).colorScheme.primary (Material 3)
|
|
36
|
+
Theme.of(context).cardColor
|
|
37
|
+
Theme.of(context).textTheme.bodyMedium
|
|
38
|
+
- Never hardcode font sizes. Use Theme.of(context).textTheme styles.
|
|
39
|
+
- For spacing, prefer a consistent spacing system (e.g., multiples of 8) using const values.
|
|
40
|
+
|
|
41
|
+
RESPONSIVE LAYOUT
|
|
42
|
+
- Never hardcode pixel widths for layout. Use:
|
|
43
|
+
Flexible / Expanded for flex layouts
|
|
44
|
+
LayoutBuilder for container-relative sizing
|
|
45
|
+
MediaQuery.of(context).size for screen-relative sizing
|
|
46
|
+
- For text, let it wrap with softWrap: true (default) rather than fixed-width Text containers.
|
|
47
|
+
|
|
48
|
+
ANIMATIONS
|
|
49
|
+
- For simple show/hide or size changes: AnimatedContainer, AnimatedOpacity, AnimatedSize.
|
|
50
|
+
- For custom animations: AnimationController + SingleTickerProviderStateMixin.
|
|
51
|
+
Always cancel the controller in dispose(): _controller.dispose().
|
|
52
|
+
- Always check if mounted before calling setState() in async callbacks:
|
|
53
|
+
if (mounted) setState(() { ... });
|
|
54
|
+
|
|
55
|
+
ACCESSIBILITY
|
|
56
|
+
- Use Semantics widget to label non-text interactive elements.
|
|
57
|
+
- Ensure all tap targets are at least 48×48 dp (GestureDetector / InkWell padding).
|
|
58
|
+
- Use Tooltip for icon-only buttons.
|
|
59
|
+
|
|
60
|
+
STATE MANAGEMENT
|
|
61
|
+
- For local UI state: StatefulWidget + setState.
|
|
62
|
+
- For shared state across widgets: use the project's specified state management (Riverpod,
|
|
63
|
+
Bloc, Provider) — do not mix approaches.
|
|
64
|
+
- Do not put business logic in build(). Business logic belongs in a ViewModel/controller/notifier.
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Example
|
|
70
|
+
|
|
71
|
+
**Input (after applying skill):**
|
|
72
|
+
```
|
|
73
|
+
Write a Flutter button that shows a loading spinner while its async action runs.
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Output:**
|
|
77
|
+
```dart
|
|
78
|
+
class AsyncButton extends StatefulWidget {
|
|
79
|
+
const AsyncButton({super.key, required this.label, required this.onPressed});
|
|
80
|
+
final String label;
|
|
81
|
+
final Future<void> Function() onPressed;
|
|
82
|
+
|
|
83
|
+
@override
|
|
84
|
+
State<AsyncButton> createState() => _AsyncButtonState();
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
class _AsyncButtonState extends State<AsyncButton> {
|
|
88
|
+
bool _loading = false;
|
|
89
|
+
|
|
90
|
+
Future<void> _handlePress() async {
|
|
91
|
+
setState(() => _loading = true);
|
|
92
|
+
try {
|
|
93
|
+
await widget.onPressed();
|
|
94
|
+
} finally {
|
|
95
|
+
if (mounted) setState(() => _loading = false);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
@override
|
|
100
|
+
Widget build(BuildContext context) {
|
|
101
|
+
return FilledButton(
|
|
102
|
+
onPressed: _loading ? null : _handlePress,
|
|
103
|
+
child: _loading
|
|
104
|
+
? const SizedBox(
|
|
105
|
+
width: 18, height: 18,
|
|
106
|
+
child: CircularProgressIndicator(strokeWidth: 2),
|
|
107
|
+
)
|
|
108
|
+
: Text(widget.label),
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Composition Example
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
Prepend this skill to any Flutter code generation request. Example:
|
|
120
|
+
|
|
121
|
+
"[paste skill prompt]
|
|
122
|
+
|
|
123
|
+
Now write a widget that shows a paginated list of products with pull-to-refresh."
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Notes
|
|
129
|
+
|
|
130
|
+
- Material 3 is the default from Flutter 3.16. Use `colorScheme` properties, not deprecated `primaryColor`, `backgroundColor`, etc.
|
|
131
|
+
- `withOpacity()` is deprecated in Dart 3.3+ — use `withValues(alpha: ...)` or the `Color.fromRGBO` constructor for new code.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Skill — /blueprint-to-cpp
|
|
2
|
+
|
|
3
|
+
**Platform:** Unreal Engine
|
|
4
|
+
**Slash Command:** `/blueprint-to-cpp`
|
|
5
|
+
**Composable With:** agents/gaming/unreal/agent.md
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Converts Unreal Engine Blueprint logic to performant, idiomatic C++ with full explanation of why each node maps to each C++ construct.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Skill Prompt
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
Migrate the provided Unreal Blueprint logic to C++:
|
|
19
|
+
|
|
20
|
+
MIGRATION RULES:
|
|
21
|
+
1. Identify Blueprint patterns that must move to C++ first:
|
|
22
|
+
- Logic called in Tick (every frame) → C++ mandatory.
|
|
23
|
+
- Math-heavy calculations (vector ops, lerps in loops) → C++ mandatory.
|
|
24
|
+
- Logic called > 10 times per second → strong candidate for C++.
|
|
25
|
+
- Event dispatchers with many subscribers → C++ delegates.
|
|
26
|
+
- Pure functions used in many places → static C++ utility function.
|
|
27
|
+
|
|
28
|
+
2. Blueprint node → C++ mapping:
|
|
29
|
+
- Get Player Character → APlayerController::GetPawn() or Cast<>
|
|
30
|
+
- Branch → if/else or ternary
|
|
31
|
+
- For Each Loop → for (const auto& Item : Collection)
|
|
32
|
+
- Cast To → Cast<TargetType>(Object) with null check
|
|
33
|
+
- Delay → FTimerHandle + GetWorldTimerManager().SetTimer()
|
|
34
|
+
- Timeline → UCurveFloat + FTimeline
|
|
35
|
+
- Print String → UE_LOG(LogTemp, Log, TEXT("...")) — remove before ship
|
|
36
|
+
- Get All Actors Of Class → GetWorld()->GetAllActorsOfClass() — cache in BeginPlay
|
|
37
|
+
- Spawn Actor → GetWorld()->SpawnActor<AMyActor>(Class, Transform)
|
|
38
|
+
- Set Timer by Event → GetWorldTimerManager().SetTimer()
|
|
39
|
+
|
|
40
|
+
3. UPROPERTY annotations for Blueprint exposure:
|
|
41
|
+
- BlueprintReadWrite → editable in BP and C++
|
|
42
|
+
- BlueprintReadOnly → read in BP, set in C++
|
|
43
|
+
- EditAnywhere, Category = "Config" → exposed in Details panel
|
|
44
|
+
|
|
45
|
+
4. Output format per migrated function:
|
|
46
|
+
- Header declaration (.h)
|
|
47
|
+
- Implementation (.cpp)
|
|
48
|
+
- Explanation of why this moved to C++
|
|
49
|
+
|
|
50
|
+
Show the Blueprint pseudocode description alongside the C++ implementation.
|
|
51
|
+
```
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Skill — /game-perf
|
|
2
|
+
|
|
3
|
+
**Platform:** Unity / Unreal
|
|
4
|
+
**Slash Command:** `/game-perf`
|
|
5
|
+
**Composable With:** agents/gaming/forge/agent.md, agents/gaming/unreal/agent.md
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Frame budget audit for game scenes. Identifies draw call sources, GC allocation hotspots, physics overhead, and shader complexity. Produces a prioritized optimization plan.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Skill Prompt
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
Audit the provided game code or scene description for frame budget issues:
|
|
19
|
+
|
|
20
|
+
FRAME BUDGET REFERENCE:
|
|
21
|
+
- Mobile 60fps: 16.67ms total per frame
|
|
22
|
+
- CPU budget: ~8ms for game logic + physics
|
|
23
|
+
- GPU budget: ~6ms for rendering
|
|
24
|
+
- Rendering budget per call: 0.01–0.1ms on mobile
|
|
25
|
+
|
|
26
|
+
DRAW CALL ANALYSIS:
|
|
27
|
+
- Count unique materials (each unique material = potential draw call break).
|
|
28
|
+
- Dynamic vs static batching eligibility:
|
|
29
|
+
Static: non-moving objects with same material → enable static batching.
|
|
30
|
+
Dynamic: moving objects < 900 vertices, same material → Unity handles automatically.
|
|
31
|
+
- GPU Instancing: many identical meshes (trees, grass, enemies) → enable GPU Instancing on material.
|
|
32
|
+
- Atlas textures: multiple small textures → combine into texture atlas to reduce draw calls.
|
|
33
|
+
|
|
34
|
+
GC ALLOCATION AUDIT (Unity C#):
|
|
35
|
+
- foreach on List<T>: use for loop (foreach boxes the enumerator on older Unity versions).
|
|
36
|
+
- String operations in Update: build strings in Start or cache with StringBuilder.
|
|
37
|
+
- new MyStruct() in hot path: use object pools (ObjectPool<T> in Unity 2021+).
|
|
38
|
+
- LINQ in Update: pre-compute and cache results.
|
|
39
|
+
- GetComponent in Update: cache in Awake.
|
|
40
|
+
|
|
41
|
+
PHYSICS OPTIMIZATION:
|
|
42
|
+
- Layer collision matrix: disable collision between layers that never interact.
|
|
43
|
+
- Rigidbody Sleep: set rigidbodies to sleep when idle (Rigidbody.IsSleeping()).
|
|
44
|
+
- Collider complexity: use primitive colliders (Box, Sphere, Capsule) over MeshCollider.
|
|
45
|
+
- FixedUpdate rate: default 0.02 (50fps). Increase for smoother physics; decrease for performance.
|
|
46
|
+
|
|
47
|
+
RENDERING OPTIMIZATION:
|
|
48
|
+
- Shadow casters: disable shadows on small/distant objects.
|
|
49
|
+
- LOD groups: add LODGroup to complex meshes.
|
|
50
|
+
- Occlusion culling: bake occlusion for enclosed spaces.
|
|
51
|
+
- Shader complexity: mobile shaders should be < 30 instructions per pixel.
|
|
52
|
+
|
|
53
|
+
Output a prioritized list with estimated frame time saved per optimization.
|
|
54
|
+
```
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Skill — /shader-gen
|
|
2
|
+
|
|
3
|
+
**Platform:** Unity (HLSL / ShaderLab) / Unreal (HLSL)
|
|
4
|
+
**Slash Command:** `/shader-gen`
|
|
5
|
+
**Composable With:** agents/gaming/forge/agent.md, agents/gaming/unreal/agent.md
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Generates HLSL/ShaderLab shader code from a plain English visual description. Covers URP, HDRP, and Built-in pipeline for Unity; material expressions for Unreal.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Skill Prompt
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
Generate shader code for the described visual effect:
|
|
19
|
+
|
|
20
|
+
INPUT FORMAT:
|
|
21
|
+
PLATFORM: <Unity-URP | Unity-HDRP | Unity-BuiltIn | Unreal>
|
|
22
|
+
EFFECT: <plain English description of the visual effect>
|
|
23
|
+
PERFORMANCE_TARGET: <Mobile | PC | Console>
|
|
24
|
+
PROPERTIES_NEEDED: <list any tweakable properties — colors, speeds, intensities>
|
|
25
|
+
|
|
26
|
+
GENERATION RULES:
|
|
27
|
+
1. Minimize instruction count for mobile targets.
|
|
28
|
+
2. Avoid dynamic branching (if/else in shader) on mobile — use step(), lerp(), saturate().
|
|
29
|
+
3. Include fallback for mobile limitations (no geometry shaders on OpenGL ES 2.0).
|
|
30
|
+
4. Expose meaningful properties to the Material Inspector via Properties block.
|
|
31
|
+
5. Add ShaderLab properties with [HDR] for emissive colors, [Toggle] for booleans.
|
|
32
|
+
|
|
33
|
+
EFFECT PATTERNS:
|
|
34
|
+
- Dissolve effect: use noise texture + cutoff threshold + clip().
|
|
35
|
+
- Hologram: scanline UV offset + rim lighting + fresnel term.
|
|
36
|
+
- Water ripple: sin-based UV distortion + normal map.
|
|
37
|
+
- Outline: render back faces scaled along normal in separate pass.
|
|
38
|
+
- Glow/bloom: emissive color with HDR intensity > 1.
|
|
39
|
+
- Toon/cel shading: step() on diffuse lighting term.
|
|
40
|
+
- Fresnel rim light: pow(1 - dot(viewDir, normal), power) * rimColor.
|
|
41
|
+
|
|
42
|
+
Output complete ShaderLab (.shader) file or HLSL material function.
|
|
43
|
+
Note instruction count estimate and mobile compatibility.
|
|
44
|
+
```
|