@rosetears/aili-pi 0.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/LICENSE +21 -0
- package/README.md +109 -0
- package/THIRD_PARTY_NOTICES.md +64 -0
- package/extensions/index.ts +6 -0
- package/install.sh +5 -0
- package/manifests/adapter-evidence.json +45 -0
- package/manifests/capabilities.json +124 -0
- package/manifests/live-verification.json +26 -0
- package/manifests/provenance.json +71 -0
- package/manifests/roles.json +474 -0
- package/manifests/sbom.json +7797 -0
- package/manifests/skill-compatibility.json +8100 -0
- package/manifests/subagent-provenance.json +37 -0
- package/package.json +91 -0
- package/prompts/build.md +8 -0
- package/prompts/define.md +8 -0
- package/prompts/ideate.md +8 -0
- package/prompts/local-review.md +8 -0
- package/prompts/ship.md +8 -0
- package/roles/agent-evaluator.md +47 -0
- package/roles/ai-regression-scout.md +47 -0
- package/roles/browser-qa-runner.md +47 -0
- package/roles/code-reviewer.md +47 -0
- package/roles/code-scout.md +47 -0
- package/roles/convergence-reviewer.md +55 -0
- package/roles/doc-researcher.md +47 -0
- package/roles/e2e-artifact-runner.md +47 -0
- package/roles/implementer.md +47 -0
- package/roles/opensource-sanitizer.md +47 -0
- package/roles/plan-auditor.md +47 -0
- package/roles/pr-test-analyzer.md +47 -0
- package/roles/security-auditor.md +47 -0
- package/roles/silent-failure-reviewer.md +47 -0
- package/roles/spec-miner.md +47 -0
- package/roles/test-coverage-reviewer.md +47 -0
- package/roles/test-engineer.md +48 -0
- package/roles/web-performance-auditor.md +47 -0
- package/roles/web-researcher.md +47 -0
- package/scripts/apply-adapter-evidence.ts +73 -0
- package/scripts/bootstrap.sh +180 -0
- package/scripts/generate-provenance.ts +143 -0
- package/scripts/local-package-e2e.ts +51 -0
- package/scripts/sync-roles.ts +213 -0
- package/scripts/sync-skills.ts +356 -0
- package/scripts/validate-runtime.ts +11 -0
- package/skills/academic-paper-review/SKILL.md +81 -0
- package/skills/agents-md-initialization/SKILL.md +121 -0
- package/skills/agents-md-initialization/references/agents-template.md +83 -0
- package/skills/agents-md-initialization/references/agents_md.py +215 -0
- package/skills/ai-regression-scout/SKILL.md +24 -0
- package/skills/aili-delivery-flow/SKILL.md +125 -0
- package/skills/aili-delivery-flow/references/artifact-contracts.md +138 -0
- package/skills/aili-delivery-flow/references/backend-routing.md +40 -0
- package/skills/aili-delivery-flow/references/build-execution-loop.md +113 -0
- package/skills/aili-delivery-flow/references/build-goal-mode.md +3 -0
- package/skills/aili-delivery-flow/references/direct-vs-delegated-work.md +38 -0
- package/skills/aili-delivery-flow/references/implementation-packages.md +54 -0
- package/skills/aili-delivery-flow/references/lifecycle.md +127 -0
- package/skills/aili-delivery-flow/references/protocols/acceptance-test-plan.md +18 -0
- package/skills/aili-delivery-flow/references/protocols/alignment-questionnaire.md +10 -0
- package/skills/aili-delivery-flow/references/protocols/closeout-report.md +101 -0
- package/skills/aili-delivery-flow/references/protocols/compact-evidence-pack.md +46 -0
- package/skills/aili-delivery-flow/references/protocols/idea-brief.md +10 -0
- package/skills/aili-delivery-flow/references/protocols/implementation-package.md +53 -0
- package/skills/aili-delivery-flow/references/protocols/research-evidence-pack.md +19 -0
- package/skills/aili-delivery-flow/references/protocols/review-report.md +7 -0
- package/skills/aili-delivery-flow/references/protocols/spec-draft.md +12 -0
- package/skills/aili-delivery-flow/references/protocols/subagent-result.md +60 -0
- package/skills/aili-delivery-flow/references/protocols/subagent-task-packet.md +29 -0
- package/skills/aili-delivery-flow/references/protocols/worktree-context.md +109 -0
- package/skills/aili-delivery-flow/references/questionnaire-policy.md +62 -0
- package/skills/aili-delivery-flow/references/review-repair-loop.md +16 -0
- package/skills/aili-delivery-flow/references/test-document-policy.md +35 -0
- package/skills/android-native-dev/SKILL.md +722 -0
- package/skills/android-native-dev/references/accessibility.md +209 -0
- package/skills/android-native-dev/references/adaptive-screens.md +231 -0
- package/skills/android-native-dev/references/design-style-guide.md +365 -0
- package/skills/android-native-dev/references/functional-requirements.md +229 -0
- package/skills/android-native-dev/references/motion-system.md +203 -0
- package/skills/android-native-dev/references/performance-stability.md +223 -0
- package/skills/android-native-dev/references/privacy-security.md +244 -0
- package/skills/android-native-dev/references/testing.md +554 -0
- package/skills/android-native-dev/references/visual-design.md +246 -0
- package/skills/api-and-interface-design/SKILL.md +318 -0
- package/skills/browser-qa/SKILL.md +32 -0
- package/skills/browser-testing-with-devtools/SKILL.md +323 -0
- package/skills/build-failure-repair/SKILL.md +49 -0
- package/skills/chart-visualization/SKILL.md +73 -0
- package/skills/ci-cd-and-automation/SKILL.md +353 -0
- package/skills/code-review-and-quality/SKILL.md +375 -0
- package/skills/code-review-quality-gates/SKILL.md +132 -0
- package/skills/code-simplification/SKILL.md +371 -0
- package/skills/comment-accuracy-review/SKILL.md +37 -0
- package/skills/consulting-analysis/SKILL.md +69 -0
- package/skills/context-engineering/SKILL.md +375 -0
- package/skills/coverage-review/SKILL.md +24 -0
- package/skills/data-analysis/SKILL.md +74 -0
- package/skills/deprecation-and-migration/SKILL.md +222 -0
- package/skills/documentation-and-adrs/SKILL.md +330 -0
- package/skills/e2e-artifact-handling/SKILL.md +30 -0
- package/skills/evidence-scoped-retrospective/SKILL.md +156 -0
- package/skills/explain-by-allegory/SKILL.md +99 -0
- package/skills/flutter-dev/SKILL.md +162 -0
- package/skills/flutter-dev/references/animations.md +497 -0
- package/skills/flutter-dev/references/bloc-state.md +281 -0
- package/skills/flutter-dev/references/forms.md +656 -0
- package/skills/flutter-dev/references/gorouter-navigation.md +257 -0
- package/skills/flutter-dev/references/localization.md +510 -0
- package/skills/flutter-dev/references/networking.md +566 -0
- package/skills/flutter-dev/references/performance.md +305 -0
- package/skills/flutter-dev/references/platform-specific.md +417 -0
- package/skills/flutter-dev/references/project-structure.md +273 -0
- package/skills/flutter-dev/references/riverpod-state.md +232 -0
- package/skills/flutter-dev/references/testing.md +364 -0
- package/skills/flutter-dev/references/widget-patterns.md +233 -0
- package/skills/frontend-dev/SKILL.md +468 -0
- package/skills/frontend-dev/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/DMMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/skills/frontend-dev/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Gloock-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Italiana-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Jura-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Outfit-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Tektur-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/skills/frontend-dev/references/asset-prompt-guide.md +43 -0
- package/skills/frontend-dev/references/env-setup.md +33 -0
- package/skills/frontend-dev/references/minimax-cli-reference.md +133 -0
- package/skills/frontend-dev/references/minimax-image-guide.md +65 -0
- package/skills/frontend-dev/references/minimax-music-guide.md +216 -0
- package/skills/frontend-dev/references/minimax-tts-guide.md +78 -0
- package/skills/frontend-dev/references/minimax-video-guide.md +82 -0
- package/skills/frontend-dev/references/minimax-voice-catalog.md +685 -0
- package/skills/frontend-dev/references/motion-recipes.md +407 -0
- package/skills/frontend-dev/references/troubleshooting.md +85 -0
- package/skills/frontend-dev/scripts/minimax_image.py +137 -0
- package/skills/frontend-dev/scripts/minimax_music.py +157 -0
- package/skills/frontend-dev/scripts/minimax_tts.py +127 -0
- package/skills/frontend-dev/scripts/minimax_video.py +187 -0
- package/skills/frontend-dev/templates/generator_template.js +223 -0
- package/skills/frontend-dev/templates/viewer.html +599 -0
- package/skills/frontend-ui-engineering/SKILL.md +367 -0
- package/skills/fullstack-dev/SKILL.md +819 -0
- package/skills/fullstack-dev/references/api-design.md +444 -0
- package/skills/fullstack-dev/references/auth-flow.md +165 -0
- package/skills/fullstack-dev/references/db-schema.md +706 -0
- package/skills/fullstack-dev/references/django-best-practices.md +466 -0
- package/skills/fullstack-dev/references/environment-management.md +78 -0
- package/skills/fullstack-dev/references/release-checklist.md +278 -0
- package/skills/fullstack-dev/references/technology-selection.md +254 -0
- package/skills/fullstack-dev/references/testing-strategy.md +404 -0
- package/skills/git-workflow-and-versioning/SKILL.md +446 -0
- package/skills/github-evidence-triage/SKILL.md +115 -0
- package/skills/harness-evolution/SKILL.md +59 -0
- package/skills/harness-evolution/references/activation-matrix.md +13 -0
- package/skills/harness-evolution/references/approval-policy.md +20 -0
- package/skills/harness-evolution/references/change-report-template.md +33 -0
- package/skills/harness-evolution/references/component-taxonomy.md +19 -0
- package/skills/harness-evolution/references/verdict-policy.md +13 -0
- package/skills/harness-issue-triage/SKILL.md +72 -0
- package/skills/harness-issue-triage/references/component-diagnosis.md +25 -0
- package/skills/harness-issue-triage/references/triage-report-template.md +34 -0
- package/skills/harness-optimization-audit/SKILL.md +125 -0
- package/skills/idea-refine/SKILL.md +191 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/LICENSE +21 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/NOTICE.md +9 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/SKILL.upstream.md +178 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/examples.md +238 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/frameworks.md +99 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/refinement-criteria.md +113 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/scripts/idea-refine.upstream.sh +15 -0
- package/skills/incremental-implementation/SKILL.md +252 -0
- package/skills/ios-application-dev/SKILL.md +212 -0
- package/skills/ios-application-dev/references/accessibility.md +259 -0
- package/skills/ios-application-dev/references/graphics-animation.md +350 -0
- package/skills/ios-application-dev/references/layout-system.md +199 -0
- package/skills/ios-application-dev/references/metal-shader.md +178 -0
- package/skills/ios-application-dev/references/navigation-patterns.md +175 -0
- package/skills/ios-application-dev/references/swift-coding-standards.md +757 -0
- package/skills/ios-application-dev/references/swiftui-design-guidelines.md +1167 -0
- package/skills/ios-application-dev/references/system-integration.md +401 -0
- package/skills/ios-application-dev/references/uikit-components.md +297 -0
- package/skills/local-review-gate/SKILL.md +207 -0
- package/skills/local-review-gate/references/addyosmani-code-review-rubric.md +33 -0
- package/skills/local-review-gate/references/codex-github-compatibility.md +26 -0
- package/skills/local-review-gate/references/ecc-code-review-adaptation.md +40 -0
- package/skills/local-review-gate/references/graphify-local-review.md +33 -0
- package/skills/local-review-gate/references/orchestration-adaptation.md +51 -0
- package/skills/local-review-gate/references/review-repair-lane-adaptation.md +46 -0
- package/skills/local-review-gate/references/upstream-provenance.md +61 -0
- package/skills/mature-project-pattern-research/SKILL.md +155 -0
- package/skills/mature-project-pattern-research/references/research-rubric.md +45 -0
- package/skills/minimax-docx/LICENSE +21 -0
- package/skills/minimax-docx/SKILL.md +273 -0
- package/skills/minimax-docx/assets/styles/academic_styles.xml +250 -0
- package/skills/minimax-docx/assets/styles/corporate_styles.xml +284 -0
- package/skills/minimax-docx/assets/styles/default_styles.xml +449 -0
- package/skills/minimax-docx/assets/xsd/aesthetic-rules.xsd +470 -0
- package/skills/minimax-docx/assets/xsd/business-rules.xsd +130 -0
- package/skills/minimax-docx/assets/xsd/common-types.xsd +159 -0
- package/skills/minimax-docx/assets/xsd/wml-subset.xsd +589 -0
- package/skills/minimax-docx/references/cjk_typography.md +357 -0
- package/skills/minimax-docx/references/cjk_university_template_guide.md +184 -0
- package/skills/minimax-docx/references/comments_guide.md +191 -0
- package/skills/minimax-docx/references/design_good_bad_examples.md +829 -0
- package/skills/minimax-docx/references/design_principles.md +819 -0
- package/skills/minimax-docx/references/openxml_element_order.md +308 -0
- package/skills/minimax-docx/references/openxml_encyclopedia_part1.md +4061 -0
- package/skills/minimax-docx/references/openxml_encyclopedia_part2.md +2820 -0
- package/skills/minimax-docx/references/openxml_encyclopedia_part3.md +3381 -0
- package/skills/minimax-docx/references/openxml_namespaces.md +82 -0
- package/skills/minimax-docx/references/openxml_units.md +72 -0
- package/skills/minimax-docx/references/scenario_a_create.md +284 -0
- package/skills/minimax-docx/references/scenario_b_edit_content.md +295 -0
- package/skills/minimax-docx/references/scenario_c_apply_template.md +456 -0
- package/skills/minimax-docx/references/track_changes_guide.md +200 -0
- package/skills/minimax-docx/references/troubleshooting.md +506 -0
- package/skills/minimax-docx/references/typography_guide.md +294 -0
- package/skills/minimax-docx/references/xsd_validation_guide.md +158 -0
- package/skills/minimax-docx/scripts/doc_to_docx.sh +40 -0
- package/skills/minimax-docx/scripts/docx_preview.sh +37 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Cli/MiniMaxAIDocx.Cli.csproj +19 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Cli/Program.cs +18 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/AnalyzeCommand.cs +147 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ApplyTemplateCommand.cs +322 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/CreateCommand.cs +324 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/DiffCommand.cs +155 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/EditContentCommand.cs +487 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/FixOrderCommand.cs +108 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/MergeRunsCommand.cs +122 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ValidateCommand.cs +107 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/MiniMaxAIDocx.Core.csproj +15 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/CommentSynchronizer.cs +169 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/ElementOrder.cs +80 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/NamespaceConstants.cs +42 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/RunMerger.cs +81 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/StyleAnalyzer.cs +81 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/TrackChangesHelper.cs +99 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/UnitConverter.cs +23 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples.cs +1832 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch1.cs +910 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch2.cs +999 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch3.cs +1048 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch4.cs +1038 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/CharacterFormattingSamples.cs +1020 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/DocumentCreationSamples.cs +1121 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FieldAndTocSamples.cs +624 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FootnoteAndCommentSamples.cs +675 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/HeaderFooterSamples.cs +838 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ImageSamples.cs +917 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ListAndNumberingSamples.cs +826 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ParagraphFormattingSamples.cs +1199 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/StyleSystemSamples.cs +1487 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TableSamples.cs +1163 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TrackChangesSamples.cs +595 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/CjkHelper.cs +39 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/FontDefaults.cs +24 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/PageSizes.cs +20 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/BusinessRuleValidator.cs +224 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/GateCheckValidator.cs +148 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/ValidationResult.cs +23 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/XsdValidator.cs +69 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.slnx +4 -0
- package/skills/minimax-docx/scripts/env_check.sh +196 -0
- package/skills/minimax-docx/scripts/setup.ps1 +274 -0
- package/skills/minimax-docx/scripts/setup.sh +504 -0
- package/skills/minimax-pdf/README.md +222 -0
- package/skills/minimax-pdf/SKILL.md +218 -0
- package/skills/minimax-pdf/design/design.md +381 -0
- package/skills/minimax-pdf/scripts/cover.py +1579 -0
- package/skills/minimax-pdf/scripts/fill_inspect.py +200 -0
- package/skills/minimax-pdf/scripts/fill_write.py +242 -0
- package/skills/minimax-pdf/scripts/make.sh +491 -0
- package/skills/minimax-pdf/scripts/merge.py +112 -0
- package/skills/minimax-pdf/scripts/palette.py +521 -0
- package/skills/minimax-pdf/scripts/reformat_parse.py +374 -0
- package/skills/minimax-pdf/scripts/render_body.py +1052 -0
- package/skills/minimax-pdf/scripts/render_cover.js +111 -0
- package/skills/minimax-xlsx/SKILL.md +156 -0
- package/skills/minimax-xlsx/references/create.md +691 -0
- package/skills/minimax-xlsx/references/edit.md +684 -0
- package/skills/minimax-xlsx/references/fix.md +37 -0
- package/skills/minimax-xlsx/references/format.md +768 -0
- package/skills/minimax-xlsx/references/ooxml-cheatsheet.md +231 -0
- package/skills/minimax-xlsx/references/read-analyze.md +97 -0
- package/skills/minimax-xlsx/references/validate.md +772 -0
- package/skills/minimax-xlsx/scripts/formula_check.py +422 -0
- package/skills/minimax-xlsx/scripts/libreoffice_recalc.py +248 -0
- package/skills/minimax-xlsx/scripts/shared_strings_builder.py +163 -0
- package/skills/minimax-xlsx/scripts/style_audit.py +575 -0
- package/skills/minimax-xlsx/scripts/xlsx_add_column.py +395 -0
- package/skills/minimax-xlsx/scripts/xlsx_insert_row.py +274 -0
- package/skills/minimax-xlsx/scripts/xlsx_pack.py +87 -0
- package/skills/minimax-xlsx/scripts/xlsx_reader.py +362 -0
- package/skills/minimax-xlsx/scripts/xlsx_shift_rows.py +396 -0
- package/skills/minimax-xlsx/scripts/xlsx_unpack.py +130 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/[Content_Types].xml +9 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/_rels/.rels +6 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/_rels/workbook.xml.rels +19 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/sharedStrings.xml +33 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/styles.xml +160 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/workbook.xml +30 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/worksheets/sheet1.xml +70 -0
- package/skills/newsletter-generation/SKILL.md +71 -0
- package/skills/oss-release-readiness/SKILL.md +47 -0
- package/skills/parallel-subagent-dispatch/SKILL.md +58 -0
- package/skills/performance-optimization/SKILL.md +364 -0
- package/skills/planning-and-task-breakdown/SKILL.md +290 -0
- package/skills/pptx-generator/SKILL.md +275 -0
- package/skills/pptx-generator/references/design-system.md +392 -0
- package/skills/pptx-generator/references/editing.md +162 -0
- package/skills/pptx-generator/references/pitfalls.md +112 -0
- package/skills/pptx-generator/references/pptxgenjs.md +420 -0
- package/skills/pptx-generator/references/slide-types.md +413 -0
- package/skills/pr-test-analysis/SKILL.md +24 -0
- package/skills/react-native-dev/SKILL.md +180 -0
- package/skills/react-native-dev/references/animations.md +254 -0
- package/skills/react-native-dev/references/components.md +124 -0
- package/skills/react-native-dev/references/engineering.md +527 -0
- package/skills/react-native-dev/references/forms.md +300 -0
- package/skills/react-native-dev/references/native-capabilities.md +163 -0
- package/skills/react-native-dev/references/navigation.md +271 -0
- package/skills/react-native-dev/references/networking.md +346 -0
- package/skills/react-native-dev/references/performance.md +215 -0
- package/skills/react-native-dev/references/state-management.md +230 -0
- package/skills/react-native-dev/references/styling.md +117 -0
- package/skills/react-native-dev/references/testing.md +341 -0
- package/skills/requirements-grilling/SKILL.md +447 -0
- package/skills/requirements-grilling/references/ADR-FORMAT.md +46 -0
- package/skills/requirements-grilling/references/CONTEXT-FORMAT.md +41 -0
- package/skills/requirements-grilling/references/INTERVIEW-PACKET-FORMAT.md +62 -0
- package/skills/requirements-grilling/references/MIT-LICENSE-MATT-POCOCK.md +25 -0
- package/skills/requirements-grilling/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/LICENSE +21 -0
- package/skills/requirements-grilling/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/NOTICE.md +9 -0
- package/skills/requirements-grilling/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/interview-me/SKILL.upstream.md +225 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/LICENSE +21 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/NOTICE.md +12 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/batch-grill-me/SKILL.upstream.md +15 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/grill-me/SKILL.upstream.md +7 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/grilling/SKILL.upstream.md +12 -0
- package/skills/review-pipeline/SKILL.md +38 -0
- package/skills/rose-memory/SKILL.md +210 -0
- package/skills/rose-memory/references/README.md +48 -0
- package/skills/rose-memory/references/memory_cli.py +2384 -0
- package/skills/rose-memory/references/schema.sql +315 -0
- package/skills/security-and-hardening/SKILL.md +369 -0
- package/skills/session-handoff/SKILL.md +88 -0
- package/skills/session-handoff/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/LICENSE +21 -0
- package/skills/session-handoff/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/NOTICE.md +9 -0
- package/skills/session-handoff/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/productivity/handoff/SKILL.upstream.md +16 -0
- package/skills/session-handoff/scripts/session_handoff.py +764 -0
- package/skills/shader-dev/SKILL.md +316 -0
- package/skills/shader-dev/reference/ambient-occlusion.md +382 -0
- package/skills/shader-dev/reference/analytic-ray-tracing.md +651 -0
- package/skills/shader-dev/reference/anti-aliasing.md +71 -0
- package/skills/shader-dev/reference/atmospheric-scattering.md +571 -0
- package/skills/shader-dev/reference/camera-effects.md +80 -0
- package/skills/shader-dev/reference/cellular-automata.md +635 -0
- package/skills/shader-dev/reference/color-palette.md +481 -0
- package/skills/shader-dev/reference/csg-boolean-operations.md +466 -0
- package/skills/shader-dev/reference/domain-repetition.md +436 -0
- package/skills/shader-dev/reference/domain-warping.md +419 -0
- package/skills/shader-dev/reference/fluid-simulation.md +425 -0
- package/skills/shader-dev/reference/fractal-rendering.md +525 -0
- package/skills/shader-dev/reference/lighting-model.md +639 -0
- package/skills/shader-dev/reference/matrix-transform.md +535 -0
- package/skills/shader-dev/reference/multipass-buffer.md +571 -0
- package/skills/shader-dev/reference/normal-estimation.md +418 -0
- package/skills/shader-dev/reference/particle-system.md +589 -0
- package/skills/shader-dev/reference/path-tracing-gi.md +602 -0
- package/skills/shader-dev/reference/polar-uv-manipulation.md +521 -0
- package/skills/shader-dev/reference/post-processing.md +375 -0
- package/skills/shader-dev/reference/procedural-2d-pattern.md +439 -0
- package/skills/shader-dev/reference/procedural-noise.md +551 -0
- package/skills/shader-dev/reference/ray-marching.md +396 -0
- package/skills/shader-dev/reference/sdf-2d.md +724 -0
- package/skills/shader-dev/reference/sdf-3d.md +805 -0
- package/skills/shader-dev/reference/sdf-tricks.md +63 -0
- package/skills/shader-dev/reference/shadow-techniques.md +476 -0
- package/skills/shader-dev/reference/simulation-physics.md +644 -0
- package/skills/shader-dev/reference/sound-synthesis.md +578 -0
- package/skills/shader-dev/reference/terrain-rendering.md +839 -0
- package/skills/shader-dev/reference/texture-mapping-advanced.md +87 -0
- package/skills/shader-dev/reference/texture-sampling.md +553 -0
- package/skills/shader-dev/reference/volumetric-rendering.md +608 -0
- package/skills/shader-dev/reference/voronoi-cellular-noise.md +486 -0
- package/skills/shader-dev/reference/voxel-rendering.md +701 -0
- package/skills/shader-dev/reference/water-ocean.md +445 -0
- package/skills/shader-dev/reference/webgl-pitfalls.md +41 -0
- package/skills/shader-dev/techniques/ambient-occlusion.md +364 -0
- package/skills/shader-dev/techniques/analytic-ray-tracing.md +542 -0
- package/skills/shader-dev/techniques/anti-aliasing.md +124 -0
- package/skills/shader-dev/techniques/atmospheric-scattering.md +522 -0
- package/skills/shader-dev/techniques/camera-effects.md +115 -0
- package/skills/shader-dev/techniques/cellular-automata.md +531 -0
- package/skills/shader-dev/techniques/color-palette.md +380 -0
- package/skills/shader-dev/techniques/csg-boolean-operations.md +491 -0
- package/skills/shader-dev/techniques/domain-repetition.md +333 -0
- package/skills/shader-dev/techniques/domain-warping.md +414 -0
- package/skills/shader-dev/techniques/fluid-simulation.md +1175 -0
- package/skills/shader-dev/techniques/fractal-rendering.md +436 -0
- package/skills/shader-dev/techniques/lighting-model.md +527 -0
- package/skills/shader-dev/techniques/matrix-transform.md +455 -0
- package/skills/shader-dev/techniques/multipass-buffer.md +922 -0
- package/skills/shader-dev/techniques/normal-estimation.md +318 -0
- package/skills/shader-dev/techniques/particle-system.md +1203 -0
- package/skills/shader-dev/techniques/path-tracing-gi.md +623 -0
- package/skills/shader-dev/techniques/polar-uv-manipulation.md +373 -0
- package/skills/shader-dev/techniques/post-processing.md +788 -0
- package/skills/shader-dev/techniques/procedural-2d-pattern.md +346 -0
- package/skills/shader-dev/techniques/procedural-noise.md +554 -0
- package/skills/shader-dev/techniques/ray-marching.md +467 -0
- package/skills/shader-dev/techniques/sdf-2d.md +631 -0
- package/skills/shader-dev/techniques/sdf-3d.md +589 -0
- package/skills/shader-dev/techniques/sdf-tricks.md +100 -0
- package/skills/shader-dev/techniques/shadow-techniques.md +776 -0
- package/skills/shader-dev/techniques/simulation-physics.md +1542 -0
- package/skills/shader-dev/techniques/sound-synthesis.md +490 -0
- package/skills/shader-dev/techniques/terrain-rendering.md +408 -0
- package/skills/shader-dev/techniques/texture-mapping-advanced.md +121 -0
- package/skills/shader-dev/techniques/texture-sampling.md +382 -0
- package/skills/shader-dev/techniques/volumetric-rendering.md +375 -0
- package/skills/shader-dev/techniques/voronoi-cellular-noise.md +458 -0
- package/skills/shader-dev/techniques/voxel-rendering.md +985 -0
- package/skills/shader-dev/techniques/water-ocean.md +490 -0
- package/skills/shader-dev/techniques/webgl-pitfalls.md +170 -0
- package/skills/shipping-and-launch/SKILL.md +334 -0
- package/skills/silent-failure-hunting/SKILL.md +24 -0
- package/skills/source-driven-development/SKILL.md +223 -0
- package/skills/spec-driven-development/SKILL.md +235 -0
- package/skills/spec-driven-development/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/LICENSE +21 -0
- package/skills/spec-driven-development/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/NOTICE.md +9 -0
- package/skills/spec-driven-development/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/spec-driven-development/SKILL.upstream.md +206 -0
- package/skills/strategy-stress-test/SKILL.md +185 -0
- package/skills/systematic-literature-review/SKILL.md +77 -0
- package/skills/test-document-generator/SKILL.md +152 -0
- package/skills/test-document-generator/references/test-document-template.md +45 -0
- package/skills/test-driven-development/SKILL.md +399 -0
- package/skills/write-skills/GLOSSARY.md +113 -0
- package/skills/write-skills/SKILL.md +133 -0
- package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/LICENSE +21 -0
- package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/NOTICE.md +9 -0
- package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/productivity/writing-great-skills/GLOSSARY.md +201 -0
- package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/productivity/writing-great-skills/SKILL.upstream.md +83 -0
- package/src/runtime/child-guard.ts +70 -0
- package/src/runtime/conflicts.ts +25 -0
- package/src/runtime/contracts.ts +9 -0
- package/src/runtime/doctor.ts +134 -0
- package/src/runtime/global-resources.ts +152 -0
- package/src/runtime/index.ts +23 -0
- package/src/runtime/lifecycle.ts +19 -0
- package/src/runtime/native-integrations.ts +44 -0
- package/src/runtime/path-boundaries.ts +69 -0
- package/src/runtime/registry.ts +213 -0
- package/src/runtime/roles.ts +64 -0
- package/src/runtime/rose-context.ts +24 -0
- package/src/runtime/subagents.ts +426 -0
- package/templates/APPEND_SYSTEM.md +12 -0
- package/upstream/aili-workflows.lock.json +3226 -0
|
@@ -0,0 +1,722 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: android-native-dev
|
|
3
|
+
description: Android native Kotlin/Compose app development, Material 3 UI, accessibility, and Gradle builds.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## 1. Project Scenario Assessment
|
|
7
|
+
|
|
8
|
+
## Routing Boundary
|
|
9
|
+
|
|
10
|
+
Use this skill for native Android apps, Kotlin, Jetpack Compose, Android Views, Gradle/Android Studio, Material 3, Android permissions, and Google Play quality. Use `ios-application-dev` for native iOS, `flutter-dev` for Flutter/Dart, `react-native-dev` for React Native/Expo, and `frontend-ui-engineering` or `frontend-dev` for browser React/web UI.
|
|
11
|
+
|
|
12
|
+
Before starting development, assess the current project state:
|
|
13
|
+
|
|
14
|
+
| Scenario | Characteristics | Approach |
|
|
15
|
+
|----------|-----------------|----------|
|
|
16
|
+
| **Empty Directory** | No files present | Full initialization required, including Gradle Wrapper |
|
|
17
|
+
| **Has Gradle Wrapper** | `gradlew` and `gradle/wrapper/` exist | Use `./gradlew` directly for builds |
|
|
18
|
+
| **Android Studio Project** | Complete project structure, may lack wrapper | Check wrapper, run `gradle wrapper` if needed |
|
|
19
|
+
| **Incomplete Project** | Partial files present | Check missing files, complete configuration |
|
|
20
|
+
|
|
21
|
+
**Key Principles**:
|
|
22
|
+
- Before writing business logic, ensure `./gradlew assembleDebug` succeeds
|
|
23
|
+
- If `gradle.properties` is missing, create it first and configure AndroidX
|
|
24
|
+
|
|
25
|
+
🔴 **CHECKPOINT — Visual and platform decisions before UI code:** confirm app category, target devices/API, Compose vs Views, Material 3 style, dark theme, accessibility target, and required permissions. If the user has not specified these and the choice affects navigation, data model, permissions, or visual identity, stop and ask instead of guessing.
|
|
26
|
+
|
|
27
|
+
### 1.1 Required Files Checklist
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
MyApp/
|
|
31
|
+
├── gradle.properties # Configure AndroidX and other settings
|
|
32
|
+
├── settings.gradle.kts
|
|
33
|
+
├── build.gradle.kts # Root level
|
|
34
|
+
├── gradle/wrapper/
|
|
35
|
+
│ └── gradle-wrapper.properties
|
|
36
|
+
├── app/
|
|
37
|
+
│ ├── build.gradle.kts # Module level
|
|
38
|
+
│ └── src/main/
|
|
39
|
+
│ ├── AndroidManifest.xml
|
|
40
|
+
│ ├── java/com/example/myapp/
|
|
41
|
+
│ │ └── MainActivity.kt
|
|
42
|
+
│ └── res/
|
|
43
|
+
│ ├── values/
|
|
44
|
+
│ │ ├── strings.xml
|
|
45
|
+
│ │ ├── colors.xml
|
|
46
|
+
│ │ └── themes.xml
|
|
47
|
+
│ └── mipmap-*/ # App icons
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## 2. Project Configuration
|
|
53
|
+
|
|
54
|
+
### 2.1 gradle.properties
|
|
55
|
+
|
|
56
|
+
```properties
|
|
57
|
+
# Required configuration
|
|
58
|
+
android.useAndroidX=true
|
|
59
|
+
android.enableJetifier=true
|
|
60
|
+
|
|
61
|
+
# Build optimization
|
|
62
|
+
org.gradle.parallel=true
|
|
63
|
+
kotlin.code.style=official
|
|
64
|
+
|
|
65
|
+
# JVM memory settings (adjust based on project size)
|
|
66
|
+
# Small projects: 2048m, Medium: 4096m, Large: 8192m+
|
|
67
|
+
# org.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
> **Note**: If you encounter `OutOfMemoryError` during build, increase `-Xmx` value. Large projects with many dependencies may require 8GB or more.
|
|
71
|
+
|
|
72
|
+
### 2.2 Dependency Declaration Standards
|
|
73
|
+
|
|
74
|
+
```kotlin
|
|
75
|
+
dependencies {
|
|
76
|
+
// Use BOM to manage Compose versions
|
|
77
|
+
implementation(platform("androidx.compose:compose-bom:2024.02.00"))
|
|
78
|
+
implementation("androidx.compose.ui:ui")
|
|
79
|
+
implementation("androidx.compose.material3:material3")
|
|
80
|
+
|
|
81
|
+
// Activity & ViewModel
|
|
82
|
+
implementation("androidx.activity:activity-compose:1.8.2")
|
|
83
|
+
implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.7.0")
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### 2.3 Build Variants & Product Flavors
|
|
88
|
+
|
|
89
|
+
Use product flavors for distinct app variants such as dev/staging/prod or free/paid. Keep variant-specific application IDs, app names, API URLs, logging flags, and resources in `app/build.gradle.kts` / source sets instead of runtime conditionals.
|
|
90
|
+
|
|
91
|
+
- Variant name format: `{flavor}{BuildType}` such as `devDebug` or `prodRelease`.
|
|
92
|
+
- Useful commands: `./gradlew tasks --group="build"`, `./gradlew assembleDevDebug`, `./gradlew assembleRelease`, `./gradlew installDevDebug`.
|
|
93
|
+
- For multiple dimensions, declare each dimension explicitly and assign every flavor to one dimension.
|
|
94
|
+
|
|
95
|
+
**Access BuildConfig in Code**:
|
|
96
|
+
|
|
97
|
+
> **Note**: Starting from AGP 8.0, `BuildConfig` is no longer generated by default. You must explicitly enable it in your `build.gradle.kts`:
|
|
98
|
+
> ```kotlin
|
|
99
|
+
> android {
|
|
100
|
+
> buildFeatures {
|
|
101
|
+
> buildConfig = true
|
|
102
|
+
> }
|
|
103
|
+
> }
|
|
104
|
+
> ```
|
|
105
|
+
|
|
106
|
+
```kotlin
|
|
107
|
+
// Use build config values in your code
|
|
108
|
+
val apiUrl = BuildConfig.API_BASE_URL
|
|
109
|
+
val isLoggingEnabled = BuildConfig.ENABLE_LOGGING
|
|
110
|
+
|
|
111
|
+
if (BuildConfig.DEBUG) {
|
|
112
|
+
// Debug-only code
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
**Flavor-Specific Source Sets**:
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
app/src/
|
|
120
|
+
├── main/ # Shared code for all flavors
|
|
121
|
+
├── dev/ # Dev-only code and resources
|
|
122
|
+
│ ├── java/
|
|
123
|
+
│ └── res/
|
|
124
|
+
├── staging/ # Staging-only code and resources
|
|
125
|
+
├── prod/ # Prod-only code and resources
|
|
126
|
+
├── debug/ # Debug build type code
|
|
127
|
+
└── release/ # Release build type code
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## 3. Kotlin Development Standards
|
|
133
|
+
|
|
134
|
+
### 3.1 Naming Conventions
|
|
135
|
+
|
|
136
|
+
| Type | Convention | Example |
|
|
137
|
+
|------|------------|---------|
|
|
138
|
+
| Class/Interface | PascalCase | `UserRepository`, `MainActivity` |
|
|
139
|
+
| Function/Variable | camelCase | `getUserName()`, `isLoading` |
|
|
140
|
+
| Constant | SCREAMING_SNAKE | `MAX_RETRY_COUNT` |
|
|
141
|
+
| Package | lowercase | `com.example.myapp` |
|
|
142
|
+
| Composable | PascalCase | `@Composable fun UserCard()` |
|
|
143
|
+
|
|
144
|
+
### 3.2 Code Standards (Important)
|
|
145
|
+
|
|
146
|
+
**Null Safety**:
|
|
147
|
+
```kotlin
|
|
148
|
+
// ❌ Avoid: Non-null assertion !! (may crash)
|
|
149
|
+
val name = user!!.name
|
|
150
|
+
|
|
151
|
+
// ✅ Recommended: Safe call + default value
|
|
152
|
+
val name = user?.name ?: "Unknown"
|
|
153
|
+
|
|
154
|
+
// ✅ Recommended: let handling
|
|
155
|
+
user?.let { processUser(it) }
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
**Exception Handling**:
|
|
159
|
+
```kotlin
|
|
160
|
+
// ❌ Avoid: Random try-catch in business layer swallowing exceptions
|
|
161
|
+
fun loadData() {
|
|
162
|
+
try {
|
|
163
|
+
val data = api.fetch()
|
|
164
|
+
} catch (e: Exception) {
|
|
165
|
+
// Swallowing exception, hard to debug
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// ✅ Recommended: Let exceptions propagate, handle at appropriate layer
|
|
170
|
+
suspend fun loadData(): Result<Data> {
|
|
171
|
+
return try {
|
|
172
|
+
Result.success(api.fetch())
|
|
173
|
+
} catch (e: Exception) {
|
|
174
|
+
Result.failure(e) // Wrap and return, let caller decide handling
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// ✅ Recommended: Unified handling in ViewModel
|
|
179
|
+
viewModelScope.launch {
|
|
180
|
+
runCatching { repository.loadData() }
|
|
181
|
+
.onSuccess { _uiState.value = UiState.Success(it) }
|
|
182
|
+
.onFailure { _uiState.value = UiState.Error(it.message) }
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### 3.3 Threading & Coroutines (Critical)
|
|
187
|
+
|
|
188
|
+
**Thread Selection Principles**:
|
|
189
|
+
|
|
190
|
+
| Operation Type | Thread | Description |
|
|
191
|
+
|----------------|--------|-------------|
|
|
192
|
+
| UI Updates | `Dispatchers.Main` | Update View, State, LiveData |
|
|
193
|
+
| Network Requests | `Dispatchers.IO` | HTTP calls, API requests |
|
|
194
|
+
| File I/O | `Dispatchers.IO` | Local storage, database operations |
|
|
195
|
+
| Compute Intensive | `Dispatchers.Default` | JSON parsing, sorting, encryption |
|
|
196
|
+
|
|
197
|
+
**Correct Usage**:
|
|
198
|
+
```kotlin
|
|
199
|
+
// In ViewModel
|
|
200
|
+
viewModelScope.launch {
|
|
201
|
+
// Default Main thread, can update UI State
|
|
202
|
+
_uiState.value = UiState.Loading
|
|
203
|
+
|
|
204
|
+
// Switch to IO thread for network request
|
|
205
|
+
val result = withContext(Dispatchers.IO) {
|
|
206
|
+
repository.fetchData()
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// Automatically returns to Main thread, update UI
|
|
210
|
+
_uiState.value = UiState.Success(result)
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// In Repository (suspend functions should be main-safe)
|
|
214
|
+
suspend fun fetchData(): Data = withContext(Dispatchers.IO) {
|
|
215
|
+
api.getData()
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
**Common Mistakes**:
|
|
220
|
+
```kotlin
|
|
221
|
+
// ❌ Wrong: Updating UI on IO thread
|
|
222
|
+
viewModelScope.launch(Dispatchers.IO) {
|
|
223
|
+
val data = api.fetch()
|
|
224
|
+
_uiState.value = data // Crash or warning!
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// ❌ Wrong: Executing time-consuming operation on Main thread
|
|
228
|
+
viewModelScope.launch {
|
|
229
|
+
val data = api.fetch() // Blocking main thread! ANR
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// ✅ Correct: Fetch on IO, update on Main
|
|
233
|
+
viewModelScope.launch {
|
|
234
|
+
val data = withContext(Dispatchers.IO) { api.fetch() }
|
|
235
|
+
_uiState.value = data
|
|
236
|
+
}
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### 3.4 Visibility Rules
|
|
240
|
+
|
|
241
|
+
```kotlin
|
|
242
|
+
// Default is public, declare explicitly when needed
|
|
243
|
+
class UserRepository { // public
|
|
244
|
+
private val cache = mutableMapOf<String, User>() // Visible only within class
|
|
245
|
+
internal fun clearCache() {} // Visible only within module
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// data class properties are public by default, be careful when used across modules
|
|
249
|
+
data class User(
|
|
250
|
+
val id: String, // public
|
|
251
|
+
val name: String
|
|
252
|
+
)
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### 3.5 Common Syntax Pitfalls
|
|
256
|
+
|
|
257
|
+
- Avoid `lateinit` for data that may not be initialized before use; prefer nullable state or explicit defaults.
|
|
258
|
+
- Use labeled returns such as `return@forEach` inside lambdas when you do not intend to return from the outer function.
|
|
259
|
+
- Keep public data class fields deliberate; mark implementation details `private` or `internal`.
|
|
260
|
+
|
|
261
|
+
### 3.6 Server Response Data Class Fields Must Be Nullable
|
|
262
|
+
|
|
263
|
+
```kotlin
|
|
264
|
+
// ❌ Wrong: Fields declared as non-null (server may not return them)
|
|
265
|
+
data class UserResponse(
|
|
266
|
+
val id: String = "",
|
|
267
|
+
val name: String = "",
|
|
268
|
+
val avatar: String = ""
|
|
269
|
+
)
|
|
270
|
+
|
|
271
|
+
// ✅ Correct: All fields declared as nullable
|
|
272
|
+
data class UserResponse(
|
|
273
|
+
@SerializedName("id")
|
|
274
|
+
val id: String? = null,
|
|
275
|
+
@SerializedName("name")
|
|
276
|
+
val name: String? = null,
|
|
277
|
+
@SerializedName("avatar")
|
|
278
|
+
val avatar: String? = null
|
|
279
|
+
)
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### 3.7 Lifecycle Resource Management
|
|
283
|
+
|
|
284
|
+
```kotlin
|
|
285
|
+
// ❌ Wrong: Only adding Observer, not removing
|
|
286
|
+
class MyView : View {
|
|
287
|
+
override fun onAttachedToWindow() {
|
|
288
|
+
super.onAttachedToWindow()
|
|
289
|
+
activity?.lifecycle?.addObserver(this)
|
|
290
|
+
}
|
|
291
|
+
// Memory leak!
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
// ✅ Correct: Paired add and remove
|
|
295
|
+
class MyView : View {
|
|
296
|
+
override fun onAttachedToWindow() {
|
|
297
|
+
super.onAttachedToWindow()
|
|
298
|
+
activity?.lifecycle?.addObserver(this)
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
override fun onDetachedFromWindow() {
|
|
302
|
+
activity?.lifecycle?.removeObserver(this)
|
|
303
|
+
super.onDetachedFromWindow()
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### 3.8 Logging Level Usage
|
|
309
|
+
|
|
310
|
+
```kotlin
|
|
311
|
+
import android.util.Log
|
|
312
|
+
|
|
313
|
+
// Info: Key checkpoints in normal flow
|
|
314
|
+
Log.i(TAG, "loadData: started, userId = $userId")
|
|
315
|
+
|
|
316
|
+
// Warning: Abnormal but recoverable situations
|
|
317
|
+
Log.w(TAG, "loadData: cache miss, fallback to network")
|
|
318
|
+
|
|
319
|
+
// Error: Failure/error situations
|
|
320
|
+
Log.e(TAG, "loadData failed: ${error.message}")
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
| Level | Use Case |
|
|
324
|
+
|-------|----------|
|
|
325
|
+
| `i` (Info) | Normal flow, method entry, key parameters |
|
|
326
|
+
| `w` (Warning) | Recoverable exceptions, fallback handling, null returns |
|
|
327
|
+
| `e` (Error) | Request failures, caught exceptions, unrecoverable errors |
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
## 4. Jetpack Compose Standards
|
|
332
|
+
|
|
333
|
+
### 4.1 @Composable Context Rules
|
|
334
|
+
|
|
335
|
+
```kotlin
|
|
336
|
+
// ❌ Wrong: Calling Composable from non-Composable function
|
|
337
|
+
fun showError(message: String) {
|
|
338
|
+
Text(message) // Compile error!
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
// ✅ Correct: Mark as @Composable
|
|
342
|
+
@Composable
|
|
343
|
+
fun ErrorMessage(message: String) {
|
|
344
|
+
Text(message)
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
// ❌ Wrong: Using suspend outside LaunchedEffect
|
|
348
|
+
@Composable
|
|
349
|
+
fun MyScreen() {
|
|
350
|
+
val data = fetchData() // Error!
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
// ✅ Correct: Use LaunchedEffect
|
|
354
|
+
@Composable
|
|
355
|
+
fun MyScreen() {
|
|
356
|
+
var data by remember { mutableStateOf<Data?>(null) }
|
|
357
|
+
LaunchedEffect(Unit) {
|
|
358
|
+
data = fetchData()
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
### 4.2 State Management
|
|
364
|
+
|
|
365
|
+
```kotlin
|
|
366
|
+
// Basic State
|
|
367
|
+
var count by remember { mutableStateOf(0) }
|
|
368
|
+
|
|
369
|
+
// Derived State (avoid redundant computation)
|
|
370
|
+
val isEven by remember { derivedStateOf { count % 2 == 0 } }
|
|
371
|
+
|
|
372
|
+
// Persist across recomposition (e.g., scroll position)
|
|
373
|
+
val scrollState = rememberScrollState()
|
|
374
|
+
|
|
375
|
+
// State in ViewModel
|
|
376
|
+
class MyViewModel : ViewModel() {
|
|
377
|
+
private val _uiState = MutableStateFlow(UiState())
|
|
378
|
+
val uiState: StateFlow<UiState> = _uiState.asStateFlow()
|
|
379
|
+
}
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
### 4.3 Common Compose Mistakes
|
|
383
|
+
|
|
384
|
+
```kotlin
|
|
385
|
+
// ❌ Wrong: Creating objects in Composable (created on every recomposition)
|
|
386
|
+
@Composable
|
|
387
|
+
fun MyScreen() {
|
|
388
|
+
val viewModel = MyViewModel() // Wrong!
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
// ✅ Correct: Use viewModel() or remember
|
|
392
|
+
@Composable
|
|
393
|
+
fun MyScreen(viewModel: MyViewModel = viewModel()) {
|
|
394
|
+
// ...
|
|
395
|
+
}
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
---
|
|
399
|
+
|
|
400
|
+
## 5. Resources & Icons
|
|
401
|
+
|
|
402
|
+
### 5.1 App Icon Requirements
|
|
403
|
+
|
|
404
|
+
Must provide multi-resolution icons:
|
|
405
|
+
|
|
406
|
+
| Directory | Size | Purpose |
|
|
407
|
+
|-----------|------|---------|
|
|
408
|
+
| mipmap-mdpi | 48x48 | Baseline |
|
|
409
|
+
| mipmap-hdpi | 72x72 | 1.5x |
|
|
410
|
+
| mipmap-xhdpi | 96x96 | 2x |
|
|
411
|
+
| mipmap-xxhdpi | 144x144 | 3x |
|
|
412
|
+
| mipmap-xxxhdpi | 192x192 | 4x |
|
|
413
|
+
|
|
414
|
+
Recommended: Use Adaptive Icon (Android 8+):
|
|
415
|
+
|
|
416
|
+
```xml
|
|
417
|
+
<!-- res/mipmap-anydpi-v26/ic_launcher.xml -->
|
|
418
|
+
<adaptive-icon>
|
|
419
|
+
<background android:drawable="@color/ic_launcher_background"/>
|
|
420
|
+
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
|
421
|
+
</adaptive-icon>
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
### 5.2 Resource Naming Conventions
|
|
425
|
+
|
|
426
|
+
| Type | Prefix | Example |
|
|
427
|
+
|------|--------|---------|
|
|
428
|
+
| Layout | layout_ | `layout_main.xml` |
|
|
429
|
+
| Image | ic_, img_, bg_ | `ic_user.png` |
|
|
430
|
+
| Color | color_ | `color_primary` |
|
|
431
|
+
| String | - | `app_name`, `btn_submit` |
|
|
432
|
+
|
|
433
|
+
### 5.3 Avoid Android Reserved Names (Important)
|
|
434
|
+
|
|
435
|
+
Variable names, resource IDs, colors, icons, and XML elements **must not** use Android reserved words or system resource names. Using reserved names causes build errors or resource conflicts.
|
|
436
|
+
|
|
437
|
+
**Common Reserved Names to Avoid**:
|
|
438
|
+
|
|
439
|
+
| Category | Reserved Names (Do NOT Use) |
|
|
440
|
+
|----------|----------------------------|
|
|
441
|
+
| Colors | `background`, `foreground`, `transparent`, `white`, `black` |
|
|
442
|
+
| Icons/Drawables | `icon`, `logo`, `image`, `drawable` |
|
|
443
|
+
| Views | `view`, `text`, `button`, `layout`, `container` |
|
|
444
|
+
| Attributes | `id`, `name`, `type`, `style`, `theme`, `color` |
|
|
445
|
+
| System | `app`, `android`, `content`, `data`, `action` |
|
|
446
|
+
|
|
447
|
+
Use descriptive prefixes, e.g. `app_background`, `icon_primary`, `screenBackground`, and `ic_home`, rather than generic system-like names such as `background`, `icon`, or `view`.
|
|
448
|
+
|
|
449
|
+
---
|
|
450
|
+
|
|
451
|
+
## 6. Build Error Diagnosis & Fixes
|
|
452
|
+
|
|
453
|
+
### 6.1 Common Error Quick Reference
|
|
454
|
+
|
|
455
|
+
| Error Keyword | Cause | Fix |
|
|
456
|
+
|---------------|-------|-----|
|
|
457
|
+
| `Unresolved reference` | Missing import or undefined | Check imports, verify dependencies |
|
|
458
|
+
| `Type mismatch` | Type incompatibility | Check parameter types, add conversion |
|
|
459
|
+
| `Cannot access` | Visibility issue | Check public/private/internal |
|
|
460
|
+
| `@Composable invocations` | Composable context error | Ensure caller is also @Composable |
|
|
461
|
+
| `Duplicate class` | Dependency conflict | Use `./gradlew dependencies` to investigate |
|
|
462
|
+
| `AAPT: error` | Resource file error | Check XML syntax and resource references |
|
|
463
|
+
|
|
464
|
+
### 6.2 Fix Best Practices
|
|
465
|
+
|
|
466
|
+
1. **Read the complete error message first**: Locate file and line number
|
|
467
|
+
2. **Check recent changes**: Problems usually in latest modifications
|
|
468
|
+
3. **Clean Build**: `./gradlew clean assembleDebug`
|
|
469
|
+
4. **Check dependency versions**: Version conflicts are common causes
|
|
470
|
+
5. **Refresh dependencies if needed**: Clear cache and rebuild
|
|
471
|
+
|
|
472
|
+
### 6.2.1 Safe Build-Error Recovery
|
|
473
|
+
|
|
474
|
+
| Trigger | First action | If still failing |
|
|
475
|
+
|---|---|---|
|
|
476
|
+
| Gradle/AGP/Kotlin version conflict | Inspect wrapper, root Gradle, module Gradle, and version catalog before edits | Ask before changing plugin or dependency versions; do not broad-upgrade blindly |
|
|
477
|
+
| Compose compiler/BOM mismatch | Align with existing project version source | If no source exists, ask before pinning versions |
|
|
478
|
+
| AAPT/resource error | Fix the named XML/resource only | Do not rename resources broadly; verify references first |
|
|
479
|
+
| Cache/dependency corruption suspected | Run `./gradlew assembleDebug --stacktrace` before cache refresh | Use `--refresh-dependencies` only after evidence points to cache/dependency state |
|
|
480
|
+
|
|
481
|
+
🛑 **STOP:** never delete Gradle caches, change SDK/AGP/Kotlin major versions, or rewrite build files as a generic fix without user approval and a specific error trace.
|
|
482
|
+
|
|
483
|
+
### 6.3 Debugging Commands
|
|
484
|
+
|
|
485
|
+
```bash
|
|
486
|
+
# Clean and build
|
|
487
|
+
./gradlew clean assembleDebug
|
|
488
|
+
|
|
489
|
+
# View dependency tree (investigate conflicts)
|
|
490
|
+
./gradlew :app:dependencies
|
|
491
|
+
|
|
492
|
+
# View detailed errors
|
|
493
|
+
./gradlew assembleDebug --stacktrace
|
|
494
|
+
|
|
495
|
+
# Refresh dependencies
|
|
496
|
+
./gradlew --refresh-dependencies
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
---
|
|
500
|
+
|
|
501
|
+
## 7. Material Design 3 Guidelines
|
|
502
|
+
|
|
503
|
+
Review Android UI files for compliance with Material Design 3 Guidelines and Android best practices.
|
|
504
|
+
|
|
505
|
+
### Design Philosophy
|
|
506
|
+
|
|
507
|
+
#### M3 Core Principles
|
|
508
|
+
|
|
509
|
+
| Principle | Description |
|
|
510
|
+
|-----------|-------------|
|
|
511
|
+
| **Personal** | Dynamic color based on user preferences and wallpaper |
|
|
512
|
+
| **Adaptive** | Responsive across all screen sizes and form factors |
|
|
513
|
+
| **Expressive** | Bold colors and typography with personality |
|
|
514
|
+
| **Accessible** | Inclusive design for all users |
|
|
515
|
+
|
|
516
|
+
#### M3 Expressive (Latest)
|
|
517
|
+
|
|
518
|
+
The latest evolution adds emotion-driven UX through:
|
|
519
|
+
- Vibrant, dynamic colors
|
|
520
|
+
- Intuitive motion physics
|
|
521
|
+
- Adaptive components
|
|
522
|
+
- Flexible typography
|
|
523
|
+
- Contrasting shapes (35 new shape options)
|
|
524
|
+
|
|
525
|
+
### App Style Selection
|
|
526
|
+
|
|
527
|
+
**Critical Decision**: Match visual style to app category and target audience.
|
|
528
|
+
|
|
529
|
+
| App Category | Visual Style | Key Characteristics |
|
|
530
|
+
|--------------|--------------|---------------------|
|
|
531
|
+
| Utility/Tool | Minimalist | Clean, efficient, neutral colors |
|
|
532
|
+
| Finance/Banking | Professional Trust | Conservative colors, security-focused |
|
|
533
|
+
| Health/Wellness | Calm & Natural | Soft colors, organic shapes |
|
|
534
|
+
| Kids (3-5) | Playful Simple | Bright colors, large targets (56dp+) |
|
|
535
|
+
| Kids (6-12) | Fun & Engaging | Vibrant, gamified feedback |
|
|
536
|
+
| Social/Entertainment | Expressive | Brand-driven, gesture-rich |
|
|
537
|
+
| Productivity | Clean & Focused | Minimal, high contrast |
|
|
538
|
+
| E-commerce | Conversion-focused | Clear CTAs, scannable |
|
|
539
|
+
|
|
540
|
+
See [Design Style Guide](references/design-style-guide.md) for detailed style profiles.
|
|
541
|
+
|
|
542
|
+
### Quick Reference: Key Specifications
|
|
543
|
+
|
|
544
|
+
#### Color Contrast Requirements
|
|
545
|
+
|
|
546
|
+
| Element | Minimum Ratio |
|
|
547
|
+
|---------|---------------|
|
|
548
|
+
| Body text | **4.5:1** |
|
|
549
|
+
| Large text (18sp+) | **3:1** |
|
|
550
|
+
| UI components | **3:1** |
|
|
551
|
+
|
|
552
|
+
#### Touch Targets
|
|
553
|
+
|
|
554
|
+
| Type | Size |
|
|
555
|
+
|------|------|
|
|
556
|
+
| Minimum | 48 × 48dp |
|
|
557
|
+
| Recommended (primary actions) | 56 × 56dp |
|
|
558
|
+
| Kids apps | 56dp+ |
|
|
559
|
+
| Spacing between targets | 8dp minimum |
|
|
560
|
+
|
|
561
|
+
#### 8dp Grid System
|
|
562
|
+
|
|
563
|
+
| Token | Value | Usage |
|
|
564
|
+
|-------|-------|-------|
|
|
565
|
+
| xs | 4dp | Icon padding |
|
|
566
|
+
| sm | 8dp | Tight spacing |
|
|
567
|
+
| md | 16dp | Default padding |
|
|
568
|
+
| lg | 24dp | Section spacing |
|
|
569
|
+
| xl | 32dp | Large gaps |
|
|
570
|
+
| xxl | 48dp | Screen margins |
|
|
571
|
+
|
|
572
|
+
#### Typography Scale (Summary)
|
|
573
|
+
|
|
574
|
+
| Category | Sizes |
|
|
575
|
+
|----------|-------|
|
|
576
|
+
| Display | 57sp, 45sp, 36sp |
|
|
577
|
+
| Headline | 32sp, 28sp, 24sp |
|
|
578
|
+
| Title | 22sp, 16sp, 14sp |
|
|
579
|
+
| Body | 16sp, 14sp, 12sp |
|
|
580
|
+
| Label | 14sp, 12sp, 11sp |
|
|
581
|
+
|
|
582
|
+
#### Animation Duration
|
|
583
|
+
|
|
584
|
+
| Type | Duration |
|
|
585
|
+
|------|----------|
|
|
586
|
+
| Micro (ripples) | 50-100ms |
|
|
587
|
+
| Short (simple) | 100-200ms |
|
|
588
|
+
| Medium (expand/collapse) | 200-300ms |
|
|
589
|
+
| Long (complex) | 300-500ms |
|
|
590
|
+
|
|
591
|
+
#### Component Dimensions
|
|
592
|
+
|
|
593
|
+
| Component | Height | Min Width |
|
|
594
|
+
|-----------|--------|-----------|
|
|
595
|
+
| Button | 40dp | 64dp |
|
|
596
|
+
| FAB | 56dp | 56dp |
|
|
597
|
+
| Text Field | 56dp | 280dp |
|
|
598
|
+
| App Bar | 64dp | - |
|
|
599
|
+
| Bottom Nav | 80dp | - |
|
|
600
|
+
|
|
601
|
+
### Anti-Patterns (Must Avoid)
|
|
602
|
+
|
|
603
|
+
#### UI Anti-Patterns
|
|
604
|
+
- More than 5 bottom navigation items
|
|
605
|
+
- Multiple FABs on same screen
|
|
606
|
+
- Touch targets smaller than 48dp
|
|
607
|
+
- Inconsistent spacing (non-8dp multiples)
|
|
608
|
+
- Missing dark theme support
|
|
609
|
+
- Text on colored backgrounds without contrast check
|
|
610
|
+
|
|
611
|
+
#### Performance Anti-Patterns
|
|
612
|
+
- Startup time > 2 seconds without progress indicator
|
|
613
|
+
- Frame rate < 60 FPS (> 16ms per frame)
|
|
614
|
+
- Crash rate > 1.09% (Google Play threshold)
|
|
615
|
+
- ANR rate > 0.47% (Google Play threshold)
|
|
616
|
+
|
|
617
|
+
#### Accessibility Anti-Patterns
|
|
618
|
+
- Missing contentDescription on interactive elements
|
|
619
|
+
- Element type in labels (e.g., "Save button" instead of "Save")
|
|
620
|
+
- Complex gestures in kids apps
|
|
621
|
+
- Text-only buttons for non-readers
|
|
622
|
+
|
|
623
|
+
### Review Checklist
|
|
624
|
+
|
|
625
|
+
- [ ] 8dp spacing grid compliance
|
|
626
|
+
- [ ] 48dp minimum touch targets
|
|
627
|
+
- [ ] Proper typography scale usage
|
|
628
|
+
- [ ] Color contrast compliance (4.5:1+ for text)
|
|
629
|
+
- [ ] Dark theme support
|
|
630
|
+
- [ ] contentDescription on all interactive elements
|
|
631
|
+
- [ ] Startup < 2 seconds or shows progress
|
|
632
|
+
- [ ] Visual style matches app category
|
|
633
|
+
|
|
634
|
+
🔴 **CHECKPOINT — Visual validation before delivery:** run or inspect the changed screen in light/dark mode and at least one compact and one expanded size when UI changed. If no emulator/device/browser-preview equivalent is available, report the missing visual evidence and do not claim full UI verification.
|
|
635
|
+
|
|
636
|
+
### Design References
|
|
637
|
+
|
|
638
|
+
| Topic | Reference |
|
|
639
|
+
|-------|-----------|
|
|
640
|
+
| Colors, Typography, Spacing, Shapes | [Visual Design](references/visual-design.md) |
|
|
641
|
+
| Animation & Transitions | [Motion System](references/motion-system.md) |
|
|
642
|
+
| Accessibility Guidelines | [Accessibility](references/accessibility.md) |
|
|
643
|
+
| Large Screens & Foldables | [Adaptive Screens](references/adaptive-screens.md) |
|
|
644
|
+
| Android Vitals & Performance | [Performance & Stability](references/performance-stability.md) |
|
|
645
|
+
| Privacy & Security | [Privacy & Security](references/privacy-security.md) |
|
|
646
|
+
| Audio, Video, Notifications | [Functional Requirements](references/functional-requirements.md) |
|
|
647
|
+
| App Style by Category | [Design Style Guide](references/design-style-guide.md) |
|
|
648
|
+
|
|
649
|
+
---
|
|
650
|
+
|
|
651
|
+
## 8. Testing
|
|
652
|
+
|
|
653
|
+
> **Note**: Only add test dependencies when the user explicitly asks for testing.
|
|
654
|
+
|
|
655
|
+
A well-tested Android app uses layered testing: fast local unit tests for logic, instrumentation tests for UI and integration, and Gradle Managed Devices to run emulators reproducibly on any machine — including CI.
|
|
656
|
+
|
|
657
|
+
### 8.1 Test Dependencies
|
|
658
|
+
|
|
659
|
+
Before adding test dependencies, inspect the project's existing versions to avoid conflicts:
|
|
660
|
+
|
|
661
|
+
1. Check `gradle/libs.versions.toml` — if present, add test deps using the project's version catalog style
|
|
662
|
+
2. Check existing `build.gradle.kts` for already-pinned dependency versions
|
|
663
|
+
3. Match version families using the table below
|
|
664
|
+
|
|
665
|
+
**Version Alignment Rules**:
|
|
666
|
+
|
|
667
|
+
| Test Dependency | Must Align With | How to Check |
|
|
668
|
+
|----------------------------------------------|--------------------------------------------------|-----------------------------------------------------------------------|
|
|
669
|
+
| `kotlinx-coroutines-test` | Project's `kotlinx-coroutines-core` version | Search for `kotlinx-coroutines` in build files or version catalog |
|
|
670
|
+
| `compose-ui-test-junit4` | Project's Compose BOM or `compose-compiler` | Search for `compose-bom` or `compose.compiler` in build files |
|
|
671
|
+
| `espresso-*` | All Espresso artifacts must use the same version | Search for `espresso` in build files |
|
|
672
|
+
| `androidx.test:runner`, `rules`, `ext:junit` | Should use compatible AndroidX Test versions | Search for `androidx.test` in build files |
|
|
673
|
+
| `mockk` | Must support the project's Kotlin version | Check `kotlin` version in root `build.gradle.kts` or version catalog |
|
|
674
|
+
|
|
675
|
+
**Dependencies Reference** — add only the groups you need: JUnit/Robolectric/MockK/coroutines-test for local unit tests, AndroidX Test/Espresso/UI Automator for instrumentation, and `compose-ui-test-junit4` plus `ui-test-manifest` for Compose UI tests.
|
|
676
|
+
|
|
677
|
+
> **Note**: If the project uses a Compose BOM, `ui-test-junit4` and `ui-test-manifest` don't need explicit versions — the BOM manages them.
|
|
678
|
+
|
|
679
|
+
Enable Robolectric resource support in the `android` block:
|
|
680
|
+
|
|
681
|
+
```kotlin
|
|
682
|
+
android {
|
|
683
|
+
testOptions {
|
|
684
|
+
unitTests.isIncludeAndroidResources = true // required for Robolectric
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
```
|
|
688
|
+
|
|
689
|
+
### 8.2 Testing by Layer
|
|
690
|
+
|
|
691
|
+
| Layer | Location | Runs On | Speed | Use For |
|
|
692
|
+
|--------------------|--------------------|-------------------------|----------------------|--------------------------------------------------|
|
|
693
|
+
| Unit (JUnit) | `src/test/` | JVM | ~ms | ViewModels, repos, mappers, validators |
|
|
694
|
+
| Unit + Robolectric | `src/test/` | JVM + simulated Android | ~100ms | Code needing Context, resources, SharedPrefs |
|
|
695
|
+
| Compose UI (local) | `src/test/` | JVM + Robolectric | ~100ms | Composable rendering & interaction |
|
|
696
|
+
| Espresso | `src/androidTest/` | Device/Emulator | ~seconds | View-based UI flows, Intents, DB integration |
|
|
697
|
+
| Compose UI (device)| `src/androidTest/` | Device/Emulator | ~seconds | Full Compose UI flows with real rendering |
|
|
698
|
+
| UI Automator | `src/androidTest/` | Device/Emulator | ~seconds | System dialogs, notifications, multi-app |
|
|
699
|
+
| Managed Device | `src/androidTest/` | Gradle-managed AVD | ~minutes (first run) | CI, matrix testing across API levels |
|
|
700
|
+
|
|
701
|
+
See [Testing](references/testing.md) for detailed examples, code patterns, and Gradle Managed Device configuration.
|
|
702
|
+
|
|
703
|
+
### 8.3 Testing Commands
|
|
704
|
+
|
|
705
|
+
```bash
|
|
706
|
+
# Local unit tests (fast, no emulator)
|
|
707
|
+
./gradlew test # all modules
|
|
708
|
+
./gradlew :app:testDebugUnitTest # app module, debug variant
|
|
709
|
+
|
|
710
|
+
# Single test class
|
|
711
|
+
./gradlew :app:testDebugUnitTest --tests "com.example.myapp.CounterViewModelTest"
|
|
712
|
+
|
|
713
|
+
# Instrumentation tests (requires device or managed device)
|
|
714
|
+
./gradlew connectedDebugAndroidTest # on connected device
|
|
715
|
+
./gradlew pixel6Api34DebugAndroidTest # on managed device
|
|
716
|
+
|
|
717
|
+
# Both together
|
|
718
|
+
./gradlew test connectedDebugAndroidTest
|
|
719
|
+
|
|
720
|
+
# Test with coverage report (JaCoCo)
|
|
721
|
+
./gradlew testDebugUnitTest jacocoTestReport
|
|
722
|
+
```
|