devendra-skill-package 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/skills/boiler-project-generator/SKILL.md +103 -0
- package/.github/skills/boiler-project-generator/assets/templates/android/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/angular/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/flutter/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/ios/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/react/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/api-setup.ts +76 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/component-primary-button.tsx +29 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/env-config.env +4 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/feature-auth-screen.tsx +45 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/feature-dashboard-screen.tsx +45 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/feature-profile-screen.tsx +45 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/hook-use-app-boot.ts +11 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/navigation-setup.tsx +25 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/project-structure.md +24 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/redux-hooks.ts +5 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/redux-session-slice.ts +29 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/redux-store.ts +15 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/theme-index.ts +23 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/utils-helpers.ts +7 -0
- package/.github/skills/boiler-project-generator/metadata.yaml +29 -0
- package/.github/skills/boiler-project-generator/references/android.md +19 -0
- package/.github/skills/boiler-project-generator/references/angular.md +14 -0
- package/.github/skills/boiler-project-generator/references/flutter.md +17 -0
- package/.github/skills/boiler-project-generator/references/ios.md +17 -0
- package/.github/skills/boiler-project-generator/references/react-native.md +103 -0
- package/.github/skills/boiler-project-generator/references/react.md +17 -0
- package/.github/skills/boiler-project-generator/scripts/angular.js +43 -0
- package/.github/skills/boiler-project-generator/scripts/generate-project.mjs +107 -0
- package/.github/skills/boiler-project-generator/scripts/init.js +105 -0
- package/.github/skills/boiler-project-generator/scripts/react-native.js +1041 -0
- package/.github/skills/boiler-project-generator/scripts/react.js +32 -0
- package/.github/skills/clean-architecture-generator/SKILL.md +235 -0
- package/.github/skills/clean-architecture-generator/references/architecture-core.md +126 -0
- package/.github/skills/clean-architecture-generator/references/platform-angular.md +374 -0
- package/.github/skills/clean-architecture-generator/references/platform-flutter.md +366 -0
- package/.github/skills/clean-architecture-generator/references/platform-react-native.md +590 -0
- package/.github/skills/clean-architecture-generator/references/platform-react.md +261 -0
- package/.github/skills/code-test-coverage-analyzer/SKILL.md +1358 -0
- package/.github/skills/code-test-coverage-analyzer/assets/config-questionnaire.md +118 -0
- package/.github/skills/code-test-coverage-analyzer/assets/conflict-resolution-protocol.md +99 -0
- package/.github/skills/code-test-coverage-analyzer/assets/coverage-calculation-rules.md +294 -0
- package/.github/skills/code-test-coverage-analyzer/assets/multi-strategy-search.md +145 -0
- package/.github/skills/code-test-coverage-analyzer/assets/output-file-contracts.md +651 -0
- package/.github/skills/code-test-coverage-analyzer/assets/status-definitions.md +273 -0
- package/.github/skills/code-test-coverage-analyzer/examples/example-invocation.md +208 -0
- package/.github/skills/code-test-coverage-analyzer/references/android-patterns.md +229 -0
- package/.github/skills/code-test-coverage-analyzer/references/angular-patterns.md +177 -0
- package/.github/skills/code-test-coverage-analyzer/references/backend-patterns.md +383 -0
- package/.github/skills/code-test-coverage-analyzer/references/flutter-patterns.md +254 -0
- package/.github/skills/code-test-coverage-analyzer/references/ios-patterns.md +228 -0
- package/.github/skills/code-test-coverage-analyzer/references/react-native-patterns.md +431 -0
- package/.github/skills/code-test-coverage-analyzer/references/react-patterns.md +206 -0
- package/.github/skills/code-test-coverage-analyzer/scripts/detect-platform.ps1 +261 -0
- package/.github/skills/code-test-coverage-analyzer/scripts/scan-repository.ps1 +242 -0
- package/.github/skills/code-test-coverage-analyzer/templates/brd-compliance-row.md +107 -0
- package/.github/skills/code-test-coverage-analyzer/templates/test-case-row.md +130 -0
- package/.github/skills/code-test-coverage-analyzer/templates/user-story-compliance-row.md +170 -0
- package/.github/skills/custom-font-integrator/SKILL.md +373 -0
- package/.github/skills/custom-font-integrator/assets/FontTestScreen.js +150 -0
- package/.github/skills/custom-font-integrator/references/example-info-plist.xml +21 -0
- package/.github/skills/custom-font-integrator/scripts/setup-fonts.sh +99 -0
- package/.github/skills/encryption-decryption-utility/Instructions.md +282 -0
- package/.github/skills/encryption-decryption-utility/README.md +222 -0
- package/.github/skills/encryption-decryption-utility/SKILL.md +645 -0
- package/.github/skills/encryption-decryption-utility/assets/encryption-config-template.json +13 -0
- package/.github/skills/encryption-decryption-utility/assets/platform-matrix.json +180 -0
- package/.github/skills/encryption-decryption-utility/metadata.yaml +51 -0
- package/.github/skills/encryption-decryption-utility/references/android-crypto.md +157 -0
- package/.github/skills/encryption-decryption-utility/references/angular-crypto.md +130 -0
- package/.github/skills/encryption-decryption-utility/references/approach-1-webcrypto.md +95 -0
- package/.github/skills/encryption-decryption-utility/references/approach-2-rsa-aes-cbc.md +111 -0
- package/.github/skills/encryption-decryption-utility/references/approach-3-aes-sharedkey.md +114 -0
- package/.github/skills/encryption-decryption-utility/references/architecture.md +233 -0
- package/.github/skills/encryption-decryption-utility/references/backend-alignment.md +506 -0
- package/.github/skills/encryption-decryption-utility/references/dependency-guidance.md +234 -0
- package/.github/skills/encryption-decryption-utility/references/ec-implementation.md +832 -0
- package/.github/skills/encryption-decryption-utility/references/error-handling-playbook.md +234 -0
- package/.github/skills/encryption-decryption-utility/references/flutter-crypto.md +105 -0
- package/.github/skills/encryption-decryption-utility/references/ios-crypto.md +338 -0
- package/.github/skills/encryption-decryption-utility/references/native-rsa-implementation.md +373 -0
- package/.github/skills/encryption-decryption-utility/references/node-crypto.md +86 -0
- package/.github/skills/encryption-decryption-utility/references/react-crypto.md +105 -0
- package/.github/skills/encryption-decryption-utility/references/react-native-crypto.md +1001 -0
- package/.github/skills/encryption-decryption-utility/references/react-web-crypto.md +668 -0
- package/.github/skills/encryption-decryption-utility/references/security-checklist.md +176 -0
- package/.github/skills/encryption-decryption-utility/references/web-crypto.md +74 -0
- package/.github/skills/encryption-decryption-utility/scripts/detect.js +128 -0
- package/.github/skills/encryption-decryption-utility/scripts/install.js +1713 -0
- package/.github/skills/encryption-decryption-utility/scripts/setup.js +800 -0
- package/.github/skills/encryption-decryption-utility/template.md +241 -0
- package/.github/skills/encryption-decryption-utility/templates/config-questionnaire.md +467 -0
- package/.github/skills/encryption-decryption-utility/templates/delivery-checklist.md +206 -0
- package/.github/skills/encryption-decryption-utility/templates/implementation-plan.md +304 -0
- package/.github/skills/feature-generator/SKILL.MD +2741 -0
- package/.github/skills/feature-generator/assets/fingerprint-schema.json +385 -0
- package/.github/skills/feature-generator/assets/spec-template.md +172 -0
- package/.github/skills/feature-generator/assets/transform-rules.json +82 -0
- package/.github/skills/feature-generator/references/api-envelope-patterns.md +327 -0
- package/.github/skills/feature-generator/references/screen-logic-patterns.md +399 -0
- package/.github/skills/feature-generator/references/state-library-patterns.md +464 -0
- package/.github/skills/figma-ui-mapper/README.md +34 -0
- package/.github/skills/figma-ui-mapper/SKILL.md +101 -0
- package/.github/skills/figma-ui-mapper/assets/templates/component-map-template.md +30 -0
- package/.github/skills/figma-ui-mapper/assets/templates/generation-report-template.md +49 -0
- package/.github/skills/figma-ui-mapper/metadata.yaml +22 -0
- package/.github/skills/figma-ui-mapper/references/android.md +11 -0
- package/.github/skills/figma-ui-mapper/references/angular.md +18 -0
- package/.github/skills/figma-ui-mapper/references/capacitor.md +18 -0
- package/.github/skills/figma-ui-mapper/references/common.md +23 -0
- package/.github/skills/figma-ui-mapper/references/expo.md +18 -0
- package/.github/skills/figma-ui-mapper/references/flutter.md +18 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/angular/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/capacitor/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/expo/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/flutter/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/ionic/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/kotlin-multiplatform/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/native-android/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/native-ios/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/next/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/nuxt/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/react/rules.md +19 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/react-native/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/svelte/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/vue/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/ionic.md +18 -0
- package/.github/skills/figma-ui-mapper/references/ios.md +11 -0
- package/.github/skills/figma-ui-mapper/references/kotlin-multiplatform.md +18 -0
- package/.github/skills/figma-ui-mapper/references/native-android.md +18 -0
- package/.github/skills/figma-ui-mapper/references/native-ios.md +18 -0
- package/.github/skills/figma-ui-mapper/references/next.md +18 -0
- package/.github/skills/figma-ui-mapper/references/nuxt.md +18 -0
- package/.github/skills/figma-ui-mapper/references/react-figma-guideline.md +21 -0
- package/.github/skills/figma-ui-mapper/references/react-native.md +18 -0
- package/.github/skills/figma-ui-mapper/references/react.md +18 -0
- package/.github/skills/figma-ui-mapper/references/script-usage.md +46 -0
- package/.github/skills/figma-ui-mapper/references/svelte.md +18 -0
- package/.github/skills/figma-ui-mapper/references/vue.md +18 -0
- package/.github/skills/figma-ui-mapper/references/workflow.md +74 -0
- package/.github/skills/figma-ui-mapper/scripts/generate-page-through-figma.js +635 -0
- package/.github/skills/figma-ui-mapper/scripts/generate-react-page-through-figma.js +4 -0
- package/.github/skills/frontend-task-breakdown/SKILL.md +734 -0
- package/.github/skills/md-file-converter/SKILL.md +291 -0
- package/.github/skills/md-file-converter/config/formats.json +114 -0
- package/.github/skills/md-file-converter/extractors/extract-docx.sh +120 -0
- package/.github/skills/md-file-converter/extractors/extract-eml.py +108 -0
- package/.github/skills/md-file-converter/extractors/extract-pdf.sh +97 -0
- package/.github/skills/md-file-converter/extractors/extract-pptx.py +143 -0
- package/.github/skills/md-file-converter/extractors/extract-xlsx.py +175 -0
- package/.github/skills/md-file-converter/scripts/check-tools.sh +47 -0
- package/.github/skills/md-file-converter/scripts/extract-archive.sh +83 -0
- package/.github/skills/md-file-converter/scripts/extract-ocr.sh +77 -0
- package/.github/skills/md-file-converter/scripts/get-metadata.sh +57 -0
- package/.github/skills/md-file-converter/templates/output.md +73 -0
- package/.github/skills/md-file-converter/templates/unsupported-object.md +6 -0
- package/.github/skills/mockAPI-contract-generator/SKILL.md +607 -0
- package/.github/skills/test-case-validator/CHANGELOG.md +155 -0
- package/.github/skills/test-case-validator/CONFIGURATION.md +130 -0
- package/.github/skills/test-case-validator/EXAMPLES.md +50 -0
- package/.github/skills/test-case-validator/QUALITY_SCORING.md +98 -0
- package/.github/skills/test-case-validator/README.md +111 -0
- package/.github/skills/test-case-validator/REPORT_TEMPLATE.md +116 -0
- package/.github/skills/test-case-validator/SKILL.md +209 -0
- package/.github/skills/test-case-validator/SYSTEM_PROMPT.md +127 -0
- package/.github/skills/test-case-validator/TRACEABILITY_ENGINE.md +152 -0
- package/.github/skills/test-case-validator/VALIDATION_RULES.md +411 -0
- package/.github/skills/test-case-validator/config/default.config.yaml +62 -0
- package/.github/skills/test-case-validator/docs/ARCHITECTURE.md +66 -0
- package/.github/skills/test-case-validator/docs/EXTENDING.md +85 -0
- package/.github/skills/test-case-validator/docs/FAQ.md +88 -0
- package/.github/skills/test-case-validator/docs/VERSIONING.md +55 -0
- package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/input-brd.md +43 -0
- package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/input-test-cases.csv +9 -0
- package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/input-user-story.md +29 -0
- package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/output-report.md +303 -0
- package/.github/skills/test-case-validator/examples/example-2-automated-frontend-suite/input-spec.md +43 -0
- package/.github/skills/test-case-validator/examples/example-2-automated-frontend-suite/input-test-files-index.md +56 -0
- package/.github/skills/test-case-validator/examples/example-2-automated-frontend-suite/output-report.md +274 -0
- package/.github/skills/test-case-validator/prompts/00-applicability-resolution.md +61 -0
- package/.github/skills/test-case-validator/prompts/01-extraction-user-story.md +58 -0
- package/.github/skills/test-case-validator/prompts/02-extraction-brd.md +64 -0
- package/.github/skills/test-case-validator/prompts/03-extraction-test-cases.md +92 -0
- package/.github/skills/test-case-validator/prompts/04-traceability-matrix.md +41 -0
- package/.github/skills/test-case-validator/prompts/05-coverage-analysis.md +46 -0
- package/.github/skills/test-case-validator/prompts/06-missing-scenario-detection.md +32 -0
- package/.github/skills/test-case-validator/prompts/07-duplicate-detection.md +36 -0
- package/.github/skills/test-case-validator/prompts/08-risk-analysis.md +39 -0
- package/.github/skills/test-case-validator/prompts/09-gated-wiring-validation.md +53 -0
- package/.github/skills/test-case-validator/prompts/10-observation-report.md +56 -0
- package/.github/skills/test-case-validator/prompts/11-final-report-assembly.md +57 -0
- package/.github/skills/test-case-validator/templates/coverage-table.md +25 -0
- package/.github/skills/test-case-validator/templates/executive-summary.md +38 -0
- package/.github/skills/test-case-validator/templates/final-summary-block.md +87 -0
- package/.github/skills/test-case-validator/templates/observation-entry.md +41 -0
- package/.github/skills/test-case-validator/templates/rtm-row.md +25 -0
- package/.github/skills/validation-engine-builder/README.md +50 -0
- package/.github/skills/validation-engine-builder/SKILL.md +241 -0
- package/.github/skills/validation-engine-builder/references/core.md +158 -0
- package/.github/skills/validation-engine-builder/references/platform-angular.md +166 -0
- package/.github/skills/validation-engine-builder/references/platform-flutter.md +118 -0
- package/.github/skills/validation-engine-builder/references/platform-react-native.md +170 -0
- package/.github/skills/validation-engine-builder/references/platform-react.md +94 -0
- package/.github/skills/validation-engine-builder/scripts/apply-to-project.js +80 -0
- package/.github/skills/validation-engine-builder/scripts/generate-angular.js +271 -0
- package/.github/skills/validation-engine-builder/scripts/generate-flutter.js +298 -0
- package/.github/skills/validation-engine-builder/scripts/generate-react-native.js +217 -0
- package/.github/skills/validation-engine-builder/scripts/generate-react.js +163 -0
- package/.github/skills/validation-engine-builder/scripts/install-deps.js +53 -0
- package/.github/skills/validation-engine-builder/scripts/shared/detect-platform.js +68 -0
- package/.github/skills/validation-engine-builder/scripts/shared/npm-deps.js +103 -0
- package/.github/skills/validation-engine-builder/scripts/shared/rhf-hook.js +43 -0
- package/.github/skills/validation-engine-builder/scripts/shared/ts-messages-regex.js +62 -0
- package/.github/skills/validation-engine-builder/scripts/shared/util.js +44 -0
- package/.github/skills/validation-engine-builder/scripts/shared/yup-schemas.js +80 -0
- package/.github/skills/validation-engine-builder/template.md +73 -0
- package/.github/skills/validation-engine-builder/templates/messages.json +22 -0
- package/.github/skills/validation-engine-builder/templates/regex.json +16 -0
- package/.github/skills/validation-engine-builder/templates/schemas.json +48 -0
- package/bin/index.js +145 -0
- package/package.json +22 -0
- package/readme.md +0 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: boiler-project-generator
|
|
3
|
+
description: 'MUST be used to create a boiler project, boiler plate project, or boilerplate project for a chosen framework (Angular, React, React Native, Flutter, etc.). Use when the user asks to create, generate, scaffold, or bootstrap a starter app and you need to ask for framework, language, template, and project name.'
|
|
4
|
+
argument-hint: 'Describe the boilerplate project to scaffold'
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Boiler Project Generator
|
|
9
|
+
|
|
10
|
+
## Purpose
|
|
11
|
+
|
|
12
|
+
Generate a reproducible starter project (boilerplate) for a chosen framework and language. The skill is execution-focused and delegates framework-specific steps to scripts and reference guides.
|
|
13
|
+
|
|
14
|
+
## Trigger Conditions
|
|
15
|
+
|
|
16
|
+
Use this skill when the user requests to:
|
|
17
|
+
- Create or scaffold a new project (starter app)
|
|
18
|
+
- Generate boilerplate for a framework (Angular, React, React Native, etc.)
|
|
19
|
+
- Bootstrap a minimal app with specified language and project name
|
|
20
|
+
|
|
21
|
+
## Inputs
|
|
22
|
+
|
|
23
|
+
- `framework` (optional): `angular | react | react-native | other` — preferred framework
|
|
24
|
+
- `language` (optional): `javascript | typescript` — preferred language
|
|
25
|
+
- `projectName` (optional): desired project folder name
|
|
26
|
+
- `options` (optional): additional flags passed to generator scripts
|
|
27
|
+
|
|
28
|
+
## References
|
|
29
|
+
|
|
30
|
+
- `references/angular.md` — Angular-specific guidance and validation notes
|
|
31
|
+
- `references/react.md` — React-specific notes (if present)
|
|
32
|
+
- `references/react-native.md` — React Native notes (if present)
|
|
33
|
+
- `references/ios.md` — iOS build & CI guidance
|
|
34
|
+
- `references/android.md` — Android build & CI guidance
|
|
35
|
+
- `references/flutter.md` — Flutter post-generation guidance
|
|
36
|
+
|
|
37
|
+
## Assets
|
|
38
|
+
|
|
39
|
+
- `assets/templates/react-native/` — React Native source templates (screens, components, navigation, redux, api, env, theme, hooks, utils) applied by `scripts/react-native.js`
|
|
40
|
+
- Other framework templates and defaults may be stored under `assets/` as needed.
|
|
41
|
+
|
|
42
|
+
## Scripts
|
|
43
|
+
|
|
44
|
+
- `scripts/generate-project.mjs` — canonical CLI entrypoint; supports `--framework`, `--language`, `--project`, `--template`, `--dry-run`, `--force`, and produces deterministic JSON reports in `artifacts/boiler-generator/`.
|
|
45
|
+
- `scripts/init.js` — interactive orchestrator (platform-agnostic driver)
|
|
46
|
+
- `scripts/angular.js` — Angular-specific generator script (framework implementation)
|
|
47
|
+
- `scripts/react.js` — React-specific generator script
|
|
48
|
+
- `scripts/react-native.js` — React Native production-ready generator with interactive prompts for navigation, redux, env config, and platform verification; uses templates from `assets/templates/react-native/`
|
|
49
|
+
|
|
50
|
+
## Execution Steps
|
|
51
|
+
|
|
52
|
+
1. Collect missing inputs: `framework`, `language`, `projectName` via prompts if not provided.
|
|
53
|
+
2. Validate inputs for allowed values and sanitize `projectName`.
|
|
54
|
+
3. Invoke `scripts/init.js` to dispatch to the framework-specific generator. All additional CLI flags (e.g. `--enableNavigation`, `--enableRedux`) are forwarded to the child script.
|
|
55
|
+
4. After generation, run framework-specific validation from inside the generated project directory (see `references/*` for each framework's post-generation steps).
|
|
56
|
+
5. Print a summary of created files, installed packages, and verification results. When using `scripts/generate-project.mjs`, a deterministic JSON report is also emitted.
|
|
57
|
+
|
|
58
|
+
## Agent Behavior
|
|
59
|
+
|
|
60
|
+
- Always pass ALL flags in a single non-interactive command. Do not rely on interactive prompts.
|
|
61
|
+
- For React Native, call `scripts/react-native.js` directly with all flags for the most reliable flow.
|
|
62
|
+
- Do NOT interrupt the script while packages are installing. The script prints numbered progress steps `[1/6]` through `[6/6]` — wait for the full sequence to complete.
|
|
63
|
+
- If the terminal appears idle during `react-native init` or `npm install`, the script is still running. Wait for it.
|
|
64
|
+
- The script verifies dependency compatibility after all installs. Do not start manual fixes before the script finishes.
|
|
65
|
+
|
|
66
|
+
## Rules
|
|
67
|
+
|
|
68
|
+
- SKILL.md MUST NOT contain platform-specific implementation details; those belong in `references/` and `scripts/`.
|
|
69
|
+
- Do not hardcode absolute paths — use relative references and the workspace root.
|
|
70
|
+
- Scripts MUST be idempotent and support a `--help` flag.
|
|
71
|
+
- Generated output must be deterministic given the same inputs and script versions.
|
|
72
|
+
|
|
73
|
+
## Output Format
|
|
74
|
+
|
|
75
|
+
The skill produces a machine-readable JSON summary with fields:
|
|
76
|
+
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"projectName": "<name>",
|
|
80
|
+
"framework": "<framework>",
|
|
81
|
+
"language": "<lang>",
|
|
82
|
+
"status": "success|failed",
|
|
83
|
+
"steps": [ { "step": "init", "ok": true, "details": "..." } ]
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Human-readable HTML report generation is optional and performed by scripts if requested.
|
|
88
|
+
|
|
89
|
+
## Examples
|
|
90
|
+
|
|
91
|
+
User request: "Create a React TypeScript starter named MyApp"
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
node ./.github/skills/boiler-project-generator/scripts/init.js --framework react --language typescript --project MyApp
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
User request: "Create a React Native app named TradeDesk with navigation and Redux"
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
node ./.github/skills/boiler-project-generator/scripts/react-native.js --project TradeDesk --language typescript --enableNavigation yes --enableRedux yes --enableEnv yes --verificationTarget none
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
See `references/angular.md` for Angular-specific and `references/react-native.md` for React Native-specific guidance.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import axios, {
|
|
2
|
+
AxiosError,
|
|
3
|
+
AxiosInstance,
|
|
4
|
+
AxiosResponse,
|
|
5
|
+
InternalAxiosRequestConfig,
|
|
6
|
+
} from 'axios';
|
|
7
|
+
import Config from 'react-native-config';
|
|
8
|
+
|
|
9
|
+
const API_BASE_URL = Config.API_BASE_URL || 'https://api.example.com';
|
|
10
|
+
const API_TIMEOUT_MS = 30000;
|
|
11
|
+
|
|
12
|
+
type ErrorPayload = {
|
|
13
|
+
message?: string;
|
|
14
|
+
code?: string;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export class ApiError extends Error {
|
|
18
|
+
status?: number;
|
|
19
|
+
code?: string;
|
|
20
|
+
|
|
21
|
+
constructor(message: string, status?: number, code?: string) {
|
|
22
|
+
super(message);
|
|
23
|
+
this.name = 'ApiError';
|
|
24
|
+
this.status = status;
|
|
25
|
+
this.code = code;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
class ApiService {
|
|
30
|
+
private instance: AxiosInstance;
|
|
31
|
+
private token: string | null = null;
|
|
32
|
+
|
|
33
|
+
constructor() {
|
|
34
|
+
this.instance = axios.create({
|
|
35
|
+
baseURL: API_BASE_URL,
|
|
36
|
+
timeout: API_TIMEOUT_MS,
|
|
37
|
+
headers: {
|
|
38
|
+
'Content-Type': 'application/json',
|
|
39
|
+
Accept: 'application/json',
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
this.setupInterceptors();
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
setAuthToken(token: string | null): void {
|
|
47
|
+
this.token = token;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
private setupInterceptors(): void {
|
|
51
|
+
this.instance.interceptors.request.use((config: InternalAxiosRequestConfig) => {
|
|
52
|
+
const nextConfig = {...config};
|
|
53
|
+
if (this.token) {
|
|
54
|
+
nextConfig.headers.set('Authorization', `Bearer ${this.token}`);
|
|
55
|
+
}
|
|
56
|
+
return nextConfig;
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
this.instance.interceptors.response.use(
|
|
60
|
+
(response: AxiosResponse) => response,
|
|
61
|
+
(error: AxiosError<ErrorPayload>) => {
|
|
62
|
+
const status = error.response?.status;
|
|
63
|
+
const code = error.response?.data?.code;
|
|
64
|
+
const message =
|
|
65
|
+
error.response?.data?.message || error.message || 'Unexpected API error';
|
|
66
|
+
return Promise.reject(new ApiError(message, status, code));
|
|
67
|
+
},
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
get client(): AxiosInstance {
|
|
72
|
+
return this.instance;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export const apiService = new ApiService();
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import {Pressable, StyleSheet, Text} from 'react-native';
|
|
3
|
+
|
|
4
|
+
type Props = {
|
|
5
|
+
title: string;
|
|
6
|
+
onPress: () => void;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export default function PrimaryButton({title, onPress}: Props): React.JSX.Element {
|
|
10
|
+
return (
|
|
11
|
+
<Pressable style={styles.button} onPress={onPress}>
|
|
12
|
+
<Text style={styles.label}>{title}</Text>
|
|
13
|
+
</Pressable>
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const styles = StyleSheet.create({
|
|
18
|
+
button: {
|
|
19
|
+
backgroundColor: '#0F172A',
|
|
20
|
+
paddingVertical: 12,
|
|
21
|
+
paddingHorizontal: 16,
|
|
22
|
+
borderRadius: 8,
|
|
23
|
+
},
|
|
24
|
+
label: {
|
|
25
|
+
color: '#FFFFFF',
|
|
26
|
+
fontSize: 16,
|
|
27
|
+
fontWeight: '600',
|
|
28
|
+
},
|
|
29
|
+
});
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import {NativeStackScreenProps} from '@react-navigation/native-stack';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import {Pressable, StyleSheet, Text, View} from 'react-native';
|
|
4
|
+
|
|
5
|
+
import {RootStackParamList} from '../../navigation/RootNavigator';
|
|
6
|
+
|
|
7
|
+
type Props = NativeStackScreenProps<RootStackParamList, 'Auth'>;
|
|
8
|
+
|
|
9
|
+
export default function AuthScreen({navigation}: Props): React.JSX.Element {
|
|
10
|
+
return (
|
|
11
|
+
<View style={styles.container}>
|
|
12
|
+
<Text style={styles.title}>Auth</Text>
|
|
13
|
+
<Text>Implement login and session bootstrap here.</Text>
|
|
14
|
+
<Pressable style={styles.button} onPress={() => navigation.navigate('Dashboard')}>
|
|
15
|
+
<Text style={styles.buttonText}>Continue to Dashboard</Text>
|
|
16
|
+
</Pressable>
|
|
17
|
+
</View>
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const styles = StyleSheet.create({
|
|
22
|
+
container: {
|
|
23
|
+
flex: 1,
|
|
24
|
+
justifyContent: 'center',
|
|
25
|
+
alignItems: 'center',
|
|
26
|
+
paddingHorizontal: 24,
|
|
27
|
+
},
|
|
28
|
+
title: {
|
|
29
|
+
fontSize: 24,
|
|
30
|
+
fontWeight: '700',
|
|
31
|
+
marginBottom: 12,
|
|
32
|
+
},
|
|
33
|
+
button: {
|
|
34
|
+
marginTop: 24,
|
|
35
|
+
backgroundColor: '#111E58',
|
|
36
|
+
paddingVertical: 12,
|
|
37
|
+
paddingHorizontal: 32,
|
|
38
|
+
borderRadius: 5,
|
|
39
|
+
},
|
|
40
|
+
buttonText: {
|
|
41
|
+
color: '#FFFFFF',
|
|
42
|
+
fontSize: 14,
|
|
43
|
+
fontWeight: '700',
|
|
44
|
+
},
|
|
45
|
+
});
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import {NativeStackScreenProps} from '@react-navigation/native-stack';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import {Pressable, StyleSheet, Text, View} from 'react-native';
|
|
4
|
+
|
|
5
|
+
import {RootStackParamList} from '../../navigation/RootNavigator';
|
|
6
|
+
|
|
7
|
+
type Props = NativeStackScreenProps<RootStackParamList, 'Dashboard'>;
|
|
8
|
+
|
|
9
|
+
export default function DashboardScreen({navigation}: Props): React.JSX.Element {
|
|
10
|
+
return (
|
|
11
|
+
<View style={styles.container}>
|
|
12
|
+
<Text style={styles.title}>Dashboard</Text>
|
|
13
|
+
<Text>Business widgets and summary cards go here.</Text>
|
|
14
|
+
<Pressable style={styles.button} onPress={() => navigation.navigate('Profile')}>
|
|
15
|
+
<Text style={styles.buttonText}>Go to Profile</Text>
|
|
16
|
+
</Pressable>
|
|
17
|
+
</View>
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const styles = StyleSheet.create({
|
|
22
|
+
container: {
|
|
23
|
+
flex: 1,
|
|
24
|
+
justifyContent: 'center',
|
|
25
|
+
alignItems: 'center',
|
|
26
|
+
paddingHorizontal: 24,
|
|
27
|
+
},
|
|
28
|
+
title: {
|
|
29
|
+
fontSize: 24,
|
|
30
|
+
fontWeight: '700',
|
|
31
|
+
marginBottom: 12,
|
|
32
|
+
},
|
|
33
|
+
button: {
|
|
34
|
+
marginTop: 24,
|
|
35
|
+
backgroundColor: '#111E58',
|
|
36
|
+
paddingVertical: 12,
|
|
37
|
+
paddingHorizontal: 32,
|
|
38
|
+
borderRadius: 5,
|
|
39
|
+
},
|
|
40
|
+
buttonText: {
|
|
41
|
+
color: '#FFFFFF',
|
|
42
|
+
fontSize: 14,
|
|
43
|
+
fontWeight: '700',
|
|
44
|
+
},
|
|
45
|
+
});
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import {NativeStackScreenProps} from '@react-navigation/native-stack';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import {Pressable, StyleSheet, Text, View} from 'react-native';
|
|
4
|
+
|
|
5
|
+
import {RootStackParamList} from '../../navigation/RootNavigator';
|
|
6
|
+
|
|
7
|
+
type Props = NativeStackScreenProps<RootStackParamList, 'Profile'>;
|
|
8
|
+
|
|
9
|
+
export default function ProfileScreen({navigation}: Props): React.JSX.Element {
|
|
10
|
+
return (
|
|
11
|
+
<View style={styles.container}>
|
|
12
|
+
<Text style={styles.title}>Profile</Text>
|
|
13
|
+
<Text>User details and preferences screen.</Text>
|
|
14
|
+
<Pressable style={styles.button} onPress={() => navigation.goBack()}>
|
|
15
|
+
<Text style={styles.buttonText}>Go Back</Text>
|
|
16
|
+
</Pressable>
|
|
17
|
+
</View>
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const styles = StyleSheet.create({
|
|
22
|
+
container: {
|
|
23
|
+
flex: 1,
|
|
24
|
+
justifyContent: 'center',
|
|
25
|
+
alignItems: 'center',
|
|
26
|
+
paddingHorizontal: 24,
|
|
27
|
+
},
|
|
28
|
+
title: {
|
|
29
|
+
fontSize: 24,
|
|
30
|
+
fontWeight: '700',
|
|
31
|
+
marginBottom: 12,
|
|
32
|
+
},
|
|
33
|
+
button: {
|
|
34
|
+
marginTop: 24,
|
|
35
|
+
backgroundColor: '#111E58',
|
|
36
|
+
paddingVertical: 12,
|
|
37
|
+
paddingHorizontal: 32,
|
|
38
|
+
borderRadius: 5,
|
|
39
|
+
},
|
|
40
|
+
buttonText: {
|
|
41
|
+
color: '#FFFFFF',
|
|
42
|
+
fontSize: 14,
|
|
43
|
+
fontWeight: '700',
|
|
44
|
+
},
|
|
45
|
+
});
|
package/.github/skills/boiler-project-generator/assets/templates/react-native/navigation-setup.tsx
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import {
|
|
3
|
+
createNativeStackNavigator,
|
|
4
|
+
} from '@react-navigation/native-stack';
|
|
5
|
+
import AuthScreen from '../features/auth/AuthScreen';
|
|
6
|
+
import DashboardScreen from '../features/dashboard/DashboardScreen';
|
|
7
|
+
import ProfileScreen from '../features/profile/ProfileScreen';
|
|
8
|
+
|
|
9
|
+
export type RootStackParamList = {
|
|
10
|
+
Auth: undefined;
|
|
11
|
+
Dashboard: undefined;
|
|
12
|
+
Profile: undefined;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const Stack = createNativeStackNavigator<RootStackParamList>();
|
|
16
|
+
|
|
17
|
+
export default function RootNavigator(): React.JSX.Element {
|
|
18
|
+
return (
|
|
19
|
+
<Stack.Navigator screenOptions={{headerBackTitle: 'Back'}}>
|
|
20
|
+
<Stack.Screen name="Auth" component={AuthScreen} />
|
|
21
|
+
<Stack.Screen name="Dashboard" component={DashboardScreen} />
|
|
22
|
+
<Stack.Screen name="Profile" component={ProfileScreen} />
|
|
23
|
+
</Stack.Navigator>
|
|
24
|
+
);
|
|
25
|
+
}
|
package/.github/skills/boiler-project-generator/assets/templates/react-native/project-structure.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
src/
|
|
2
|
+
features/
|
|
3
|
+
auth/
|
|
4
|
+
AuthScreen.tsx
|
|
5
|
+
sessionSlice.ts
|
|
6
|
+
dashboard/
|
|
7
|
+
DashboardScreen.tsx
|
|
8
|
+
profile/
|
|
9
|
+
ProfileScreen.tsx
|
|
10
|
+
components/
|
|
11
|
+
PrimaryButton.tsx
|
|
12
|
+
services/
|
|
13
|
+
api.ts
|
|
14
|
+
navigation/
|
|
15
|
+
RootNavigator.tsx
|
|
16
|
+
hooks/
|
|
17
|
+
useAppBoot.ts
|
|
18
|
+
utils/
|
|
19
|
+
helpers.ts
|
|
20
|
+
theme/
|
|
21
|
+
index.ts
|
|
22
|
+
store/
|
|
23
|
+
store.ts
|
|
24
|
+
hooks.ts
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import {TypedUseSelectorHook, useDispatch, useSelector} from 'react-redux';
|
|
2
|
+
import type {AppDispatch, RootState} from './store';
|
|
3
|
+
|
|
4
|
+
export const useAppDispatch = (): AppDispatch => useDispatch<AppDispatch>();
|
|
5
|
+
export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;
|
package/.github/skills/boiler-project-generator/assets/templates/react-native/redux-session-slice.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import {createSlice, PayloadAction} from '@reduxjs/toolkit';
|
|
2
|
+
|
|
3
|
+
type SessionState = {
|
|
4
|
+
isAuthenticated: boolean;
|
|
5
|
+
token: string | null;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
const initialState: SessionState = {
|
|
9
|
+
isAuthenticated: false,
|
|
10
|
+
token: null,
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const sessionSlice = createSlice({
|
|
14
|
+
name: 'session',
|
|
15
|
+
initialState,
|
|
16
|
+
reducers: {
|
|
17
|
+
setSession(state, action: PayloadAction<{token: string}>) {
|
|
18
|
+
state.isAuthenticated = true;
|
|
19
|
+
state.token = action.payload.token;
|
|
20
|
+
},
|
|
21
|
+
clearSession(state) {
|
|
22
|
+
state.isAuthenticated = false;
|
|
23
|
+
state.token = null;
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
export const {setSession, clearSession} = sessionSlice.actions;
|
|
29
|
+
export default sessionSlice.reducer;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import {configureStore} from '@reduxjs/toolkit';
|
|
2
|
+
import sessionReducer from '../features/auth/sessionSlice';
|
|
3
|
+
|
|
4
|
+
export const store = configureStore({
|
|
5
|
+
reducer: {
|
|
6
|
+
session: sessionReducer,
|
|
7
|
+
},
|
|
8
|
+
middleware: getDefaultMiddleware =>
|
|
9
|
+
getDefaultMiddleware({
|
|
10
|
+
serializableCheck: true,
|
|
11
|
+
}),
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
export type RootState = ReturnType<typeof store.getState>;
|
|
15
|
+
export type AppDispatch = typeof store.dispatch;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export const colors = {
|
|
2
|
+
background: '#FFFFFF',
|
|
3
|
+
surface: '#F8FAFC',
|
|
4
|
+
textPrimary: '#0F172A',
|
|
5
|
+
textSecondary: '#475569',
|
|
6
|
+
primary: '#0EA5E9',
|
|
7
|
+
danger: '#DC2626',
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export const typography = {
|
|
11
|
+
h1: 28,
|
|
12
|
+
h2: 22,
|
|
13
|
+
body: 16,
|
|
14
|
+
caption: 13,
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export const spacing = {
|
|
18
|
+
xs: 4,
|
|
19
|
+
sm: 8,
|
|
20
|
+
md: 16,
|
|
21
|
+
lg: 24,
|
|
22
|
+
xl: 32,
|
|
23
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: boiler-project-generator
|
|
2
|
+
version: 1.0.0
|
|
3
|
+
status: active
|
|
4
|
+
category: generator
|
|
5
|
+
platforms:
|
|
6
|
+
- angular
|
|
7
|
+
- react
|
|
8
|
+
- react-native
|
|
9
|
+
- ios
|
|
10
|
+
- android
|
|
11
|
+
- flutter
|
|
12
|
+
|
|
13
|
+
tags:
|
|
14
|
+
- boilerplate
|
|
15
|
+
- generator
|
|
16
|
+
- templates
|
|
17
|
+
- scaffold
|
|
18
|
+
- cli
|
|
19
|
+
|
|
20
|
+
owner: Himanshu-skill-development-team
|
|
21
|
+
|
|
22
|
+
changelog:
|
|
23
|
+
- version: 1.0.0
|
|
24
|
+
date: 2026-04-28
|
|
25
|
+
changes:
|
|
26
|
+
- Refactored angular-only skill into cross-platform boiler-project-generator
|
|
27
|
+
- Added CLI flags, template support, and assets/templates placeholders
|
|
28
|
+
- Created framework references for platform-specific validation guidance
|
|
29
|
+
- Added deterministic JSON report output and CI smoke workflow
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Android Reference: Post-generation Validation and Notes
|
|
2
|
+
|
|
3
|
+
This reference contains Android-specific guidance for the `boiler-project-generator` skill. Use these steps only when `framework=android` or when generating native Android projects.
|
|
4
|
+
|
|
5
|
+
1. After the generator finishes, change directory into the generated project: `cd <projectName>`.
|
|
6
|
+
2. Ensure the correct Java/JDK version is installed (check `build.gradle` `java`/`jdk` compatibility). Install via SDK manager or system package manager.
|
|
7
|
+
3. Install Android SDK tools and set `ANDROID_HOME` / `ANDROID_SDK_ROOT` environment variables.
|
|
8
|
+
4. Install platform dependencies: run `./gradlew dependencies` or `gradlew.bat dependencies` on Windows.
|
|
9
|
+
5. Build the project locally: `./gradlew assembleDebug` (or use `gradlew.bat` on Windows).
|
|
10
|
+
6. Run unit tests: `./gradlew test` and instrumented tests via an emulator or connected device: `./gradlew connectedAndroidTest`.
|
|
11
|
+
|
|
12
|
+
Validation notes
|
|
13
|
+
- Confirm `gradle` wrapper is present and executable (`gradlew` / `gradlew.bat`).
|
|
14
|
+
- Use `--stacktrace` for verbose failure diagnostics when troubleshooting builds.
|
|
15
|
+
- Capture build and test logs and include them in the skill JSON report.
|
|
16
|
+
|
|
17
|
+
CI guidance
|
|
18
|
+
- In CI, ensure the build image includes required JDK and Android SDK components, or use an Android CI image (e.g., `reactnativecommunity/android` or custom image).
|
|
19
|
+
- Use `./gradlew assembleRelease` with proper signing configuration only in controlled CI environments.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Angular Reference: Post-generation Validation and Notes
|
|
2
|
+
|
|
3
|
+
This file contains Angular-specific guidance for the `boiler-project-generator` skill. The generic `SKILL.md` intentionally avoids platform specifics — follow the steps in this reference when `framework=angular`.
|
|
4
|
+
|
|
5
|
+
1. After the generator finishes, change directory into the generated project: `cd <projectName>`.
|
|
6
|
+
2. Disable Angular CLI analytics in CI: `export NG_CLI_ANALYTICS=false` (or set `NG_CLI_ANALYTICS=false` in the environment).
|
|
7
|
+
3. Run a local build to validate the generated app: `npm run build` (or `ng build` inside the project directory).
|
|
8
|
+
4. If TypeScript is required, note that Angular CLI generates TypeScript projects by default.
|
|
9
|
+
5. For CI, ensure `node` and `npm` versions match the project requirements and `npm ci` is used to install reproducible dependencies.
|
|
10
|
+
|
|
11
|
+
Validation notes
|
|
12
|
+
- Run `npm run build` from within the generated project folder — not from the skill repository root.
|
|
13
|
+
- Check `package.json` scripts and `engines` to determine required runtimes.
|
|
14
|
+
- Capture build logs and return them as part of the skill's JSON report.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Flutter Reference: Post-generation Validation and Notes
|
|
2
|
+
|
|
3
|
+
This reference contains Flutter-specific guidance for the `boiler-project-generator` skill. Use these steps only when `framework=flutter` or generating Flutter projects.
|
|
4
|
+
|
|
5
|
+
1. After the generator finishes, change directory into the generated project: `cd <projectName>`.
|
|
6
|
+
2. Ensure the correct Flutter SDK is installed and on `PATH`: `flutter --version`.
|
|
7
|
+
3. Run `flutter pub get` to install dependencies.
|
|
8
|
+
4. Validate the project with `flutter analyze` and run tests with `flutter test`.
|
|
9
|
+
5. Build the app for target platforms: `flutter build apk` (Android) or `flutter build ios` (iOS, macOS required).
|
|
10
|
+
|
|
11
|
+
Validation notes
|
|
12
|
+
- Use `flutter doctor` to detect common environment problems and include its output in the skill report.
|
|
13
|
+
- Capture analyzer warnings and test results for inclusion in the JSON report.
|
|
14
|
+
|
|
15
|
+
CI guidance
|
|
16
|
+
- Use official Flutter CI images or configure runners with Flutter SDK installed.
|
|
17
|
+
- For iOS builds, CI must run on macOS machines with Xcode installed.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# iOS Reference: Post-generation Validation and Notes
|
|
2
|
+
|
|
3
|
+
This reference contains iOS-specific guidance for the `boiler-project-generator` skill. Use these steps only when `framework=ios` or generating iOS projects.
|
|
4
|
+
|
|
5
|
+
1. After the generator finishes, change directory into the generated project: `cd <projectName>`.
|
|
6
|
+
2. Ensure Xcode is installed (macOS only) and command line tools are available.
|
|
7
|
+
3. Install CocoaPods dependencies (if present): `cd ios && pod install`.
|
|
8
|
+
4. Build the project locally via Xcode or CLI: `xcodebuild -workspace <Workspace>.xcworkspace -scheme <Scheme> -sdk iphonesimulator -configuration Debug`.
|
|
9
|
+
5. Run unit tests via Xcode or `xcodebuild test` with an appropriate simulator.
|
|
10
|
+
|
|
11
|
+
Validation notes
|
|
12
|
+
- Confirm `Podfile` and `Podfile.lock` are present when CocoaPods are used.
|
|
13
|
+
- Capture build logs and simulator test output and include them in the skill JSON report.
|
|
14
|
+
|
|
15
|
+
CI guidance
|
|
16
|
+
- CI for iOS must run on macOS runners or dedicated macOS build machines.
|
|
17
|
+
- Use `xcodebuild -list` to discover schemes and use `xcodebuild test` with `-destination` to target simulators.
|