@codyswann/lisa 1.48.0 → 1.50.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/.claude-plugin/marketplace.json +48 -0
- package/all/deletions.json +5 -1
- package/all/merge/.claude/settings.json +28 -0
- package/cdk/copy-overwrite/eslint.config.ts +11 -21
- package/cdk/copy-overwrite/eslint.slow.config.ts +4 -73
- package/cdk/copy-overwrite/jest.config.ts +14 -12
- package/cdk/copy-overwrite/tsconfig.json +1 -1
- package/cdk/merge/.claude/settings.json +29 -0
- package/cdk/package-lisa/package.lisa.json +1 -0
- package/dist/configs/eslint/base.d.ts +1491 -0
- package/dist/configs/eslint/base.d.ts.map +1 -0
- package/dist/configs/eslint/base.js +386 -0
- package/dist/configs/eslint/base.js.map +1 -0
- package/dist/configs/eslint/cdk.d.ts +32 -0
- package/dist/configs/eslint/cdk.d.ts.map +1 -0
- package/dist/configs/eslint/cdk.js +127 -0
- package/dist/configs/eslint/cdk.js.map +1 -0
- package/dist/configs/eslint/expo.d.ts +16 -0
- package/dist/configs/eslint/expo.d.ts.map +1 -0
- package/dist/configs/eslint/expo.js +264 -0
- package/dist/configs/eslint/expo.js.map +1 -0
- package/dist/configs/eslint/index.d.ts +18 -0
- package/dist/configs/eslint/index.d.ts.map +1 -0
- package/dist/configs/eslint/index.js +18 -0
- package/dist/configs/eslint/index.js.map +1 -0
- package/dist/configs/eslint/nestjs.d.ts +32 -0
- package/dist/configs/eslint/nestjs.d.ts.map +1 -0
- package/dist/configs/eslint/nestjs.js +128 -0
- package/dist/configs/eslint/nestjs.js.map +1 -0
- package/dist/configs/eslint/slow.d.ts +80 -0
- package/dist/configs/eslint/slow.d.ts.map +1 -0
- package/dist/configs/eslint/slow.js +83 -0
- package/dist/configs/eslint/slow.js.map +1 -0
- package/dist/configs/eslint/typescript.d.ts +19 -0
- package/dist/configs/eslint/typescript.d.ts.map +1 -0
- package/dist/configs/eslint/typescript.js +81 -0
- package/dist/configs/eslint/typescript.js.map +1 -0
- package/{typescript/copy-overwrite/jest.base.ts → dist/configs/jest/base.d.ts} +9 -69
- package/dist/configs/jest/base.d.ts.map +1 -0
- package/dist/configs/jest/base.js +83 -0
- package/dist/configs/jest/base.js.map +1 -0
- package/dist/configs/jest/cdk.d.ts +35 -0
- package/dist/configs/jest/cdk.d.ts.map +1 -0
- package/dist/configs/jest/cdk.js +30 -0
- package/dist/configs/jest/cdk.js.map +1 -0
- package/dist/configs/jest/expo.d.ts +56 -0
- package/dist/configs/jest/expo.d.ts.map +1 -0
- package/dist/configs/jest/expo.js +60 -0
- package/dist/configs/jest/expo.js.map +1 -0
- package/dist/configs/jest/index.d.ts +14 -0
- package/dist/configs/jest/index.d.ts.map +1 -0
- package/dist/configs/jest/index.js +14 -0
- package/dist/configs/jest/index.js.map +1 -0
- package/dist/configs/jest/nestjs.d.ts +35 -0
- package/dist/configs/jest/nestjs.d.ts.map +1 -0
- package/dist/configs/jest/nestjs.js +47 -0
- package/dist/configs/jest/nestjs.js.map +1 -0
- package/dist/configs/jest/typescript.d.ts +31 -0
- package/dist/configs/jest/typescript.d.ts.map +1 -0
- package/dist/configs/jest/typescript.js +34 -0
- package/dist/configs/jest/typescript.js.map +1 -0
- package/expo/copy-overwrite/eslint.config.ts +5 -20
- package/expo/copy-overwrite/eslint.slow.config.ts +4 -90
- package/expo/copy-overwrite/jest.config.ts +14 -12
- package/expo/copy-overwrite/tsconfig.json +1 -1
- package/expo/merge/.claude/settings.json +29 -0
- package/expo/package-lisa/package.lisa.json +1 -10
- package/nestjs/copy-overwrite/eslint.config.ts +5 -20
- package/nestjs/copy-overwrite/eslint.slow.config.ts +4 -89
- package/nestjs/copy-overwrite/jest.config.ts +14 -12
- package/nestjs/copy-overwrite/tsconfig.json +1 -1
- package/nestjs/merge/.claude/settings.json +29 -0
- package/nestjs/package-lisa/package.lisa.json +1 -0
- package/package.json +82 -43
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +86 -0
- package/plugins/lisa-cdk/agents/agent-architect.md +310 -0
- package/plugins/lisa-cdk/agents/architecture-specialist.md +53 -0
- package/plugins/lisa-cdk/agents/debug-specialist.md +204 -0
- package/plugins/lisa-cdk/agents/git-history-analyzer.md +183 -0
- package/plugins/lisa-cdk/agents/hooks-expert.md +74 -0
- package/plugins/lisa-cdk/agents/implementer.md +54 -0
- package/plugins/lisa-cdk/agents/learner.md +44 -0
- package/plugins/lisa-cdk/agents/performance-specialist.md +95 -0
- package/plugins/lisa-cdk/agents/product-specialist.md +72 -0
- package/plugins/lisa-cdk/agents/quality-specialist.md +55 -0
- package/plugins/lisa-cdk/agents/security-specialist.md +58 -0
- package/plugins/lisa-cdk/agents/skill-evaluator.md +246 -0
- package/plugins/lisa-cdk/agents/slash-command-architect.md +87 -0
- package/plugins/lisa-cdk/agents/test-specialist.md +64 -0
- package/plugins/lisa-cdk/agents/verification-specialist.md +189 -0
- package/plugins/lisa-cdk/agents/web-search-researcher.md +112 -0
- package/plugins/lisa-cdk/commands/git-commit-and-submit-pr.md +7 -0
- package/plugins/lisa-cdk/commands/git-commit-submit-pr-and-verify.md +7 -0
- package/plugins/lisa-cdk/commands/git-commit-submit-pr-deploy-and-verify.md +7 -0
- package/plugins/lisa-cdk/commands/git-commit.md +7 -0
- package/plugins/lisa-cdk/commands/git-prune.md +6 -0
- package/plugins/lisa-cdk/commands/git-submit-pr.md +7 -0
- package/plugins/lisa-cdk/commands/jira-add-journey.md +7 -0
- package/plugins/lisa-cdk/commands/jira-create.md +7 -0
- package/plugins/lisa-cdk/commands/jira-evidence.md +7 -0
- package/plugins/lisa-cdk/commands/jira-fix.md +7 -0
- package/plugins/lisa-cdk/commands/jira-implement.md +7 -0
- package/plugins/lisa-cdk/commands/jira-journey.md +7 -0
- package/plugins/lisa-cdk/commands/jira-sync.md +7 -0
- package/plugins/lisa-cdk/commands/jira-verify.md +7 -0
- package/plugins/lisa-cdk/commands/lisa-review-implementation.md +7 -0
- package/plugins/lisa-cdk/commands/plan-add-test-coverage.md +7 -0
- package/plugins/lisa-cdk/commands/plan-create.md +6 -0
- package/plugins/lisa-cdk/commands/plan-execute.md +7 -0
- package/plugins/lisa-cdk/commands/plan-fix-linter-error.md +7 -0
- package/plugins/lisa-cdk/commands/plan-local-code-review.md +6 -0
- package/plugins/lisa-cdk/commands/plan-lower-code-complexity.md +6 -0
- package/plugins/lisa-cdk/commands/plan-reduce-max-lines-per-function.md +7 -0
- package/plugins/lisa-cdk/commands/plan-reduce-max-lines.md +7 -0
- package/plugins/lisa-cdk/commands/pull-request-review.md +7 -0
- package/plugins/lisa-cdk/commands/security-zap-scan.md +6 -0
- package/plugins/lisa-cdk/commands/sonarqube-check.md +6 -0
- package/plugins/lisa-cdk/commands/sonarqube-fix.md +6 -0
- package/plugins/lisa-cdk/commands/tasks-load.md +7 -0
- package/plugins/lisa-cdk/commands/tasks-sync.md +7 -0
- package/plugins/lisa-cdk/hooks/debug-hook.sh +47 -0
- package/plugins/lisa-cdk/hooks/enforce-plan-rules.sh +15 -0
- package/plugins/lisa-cdk/hooks/format-on-edit.sh +76 -0
- package/plugins/lisa-cdk/hooks/install-pkgs.sh +64 -0
- package/plugins/lisa-cdk/hooks/lint-on-edit.sh +81 -0
- package/plugins/lisa-cdk/hooks/notify-ntfy.sh +183 -0
- package/plugins/lisa-cdk/hooks/setup-jira-cli.sh +52 -0
- package/plugins/lisa-cdk/hooks/sg-scan-on-edit.sh +68 -0
- package/plugins/lisa-cdk/hooks/sync-tasks.sh +107 -0
- package/plugins/lisa-cdk/hooks/ticket-sync-reminder.sh +23 -0
- package/plugins/lisa-cdk/hooks/track-plan-sessions.sh +164 -0
- package/plugins/lisa-cdk/hooks/verify-completion.sh +77 -0
- package/plugins/lisa-cdk/rules/coding-philosophy.md +428 -0
- package/plugins/lisa-cdk/rules/lisa.md +37 -0
- package/plugins/lisa-cdk/rules/verfication.md +596 -0
- package/plugins/lisa-cdk/skills/agent-design-best-practices/SKILL.md +219 -0
- package/plugins/lisa-cdk/skills/git-commit/SKILL.md +48 -0
- package/plugins/lisa-cdk/skills/git-commit-and-submit-pr/SKILL.md +8 -0
- package/plugins/lisa-cdk/skills/git-commit-submit-pr-and-verify/SKILL.md +7 -0
- package/plugins/lisa-cdk/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +7 -0
- package/plugins/lisa-cdk/skills/git-prune/SKILL.md +35 -0
- package/plugins/lisa-cdk/skills/git-submit-pr/SKILL.md +44 -0
- package/plugins/lisa-cdk/skills/jira-add-journey/SKILL.md +120 -0
- package/plugins/lisa-cdk/skills/jira-create/SKILL.md +95 -0
- package/plugins/lisa-cdk/skills/jira-evidence/SKILL.md +73 -0
- package/plugins/lisa-cdk/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/lisa-cdk/skills/jira-fix/SKILL.md +16 -0
- package/plugins/lisa-cdk/skills/jira-implement/SKILL.md +18 -0
- package/plugins/lisa-cdk/skills/jira-journey/SKILL.md +125 -0
- package/plugins/lisa-cdk/skills/jira-journey/scripts/generate-templates.py +233 -0
- package/plugins/lisa-cdk/skills/jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/lisa-cdk/skills/jira-sync/SKILL.md +63 -0
- package/plugins/lisa-cdk/skills/jira-verify/SKILL.md +48 -0
- package/plugins/lisa-cdk/skills/jsdoc-best-practices/SKILL.md +432 -0
- package/plugins/lisa-cdk/skills/lisa-review-implementation/SKILL.md +209 -0
- package/plugins/lisa-cdk/skills/plan-add-test-coverage/SKILL.md +44 -0
- package/plugins/lisa-cdk/skills/plan-execute/SKILL.md +89 -0
- package/plugins/lisa-cdk/skills/plan-fix-linter-error/SKILL.md +45 -0
- package/plugins/lisa-cdk/skills/plan-local-code-review/SKILL.md +88 -0
- package/plugins/lisa-cdk/skills/plan-lower-code-complexity/SKILL.md +44 -0
- package/plugins/lisa-cdk/skills/plan-reduce-max-lines/SKILL.md +45 -0
- package/plugins/lisa-cdk/skills/plan-reduce-max-lines-per-function/SKILL.md +46 -0
- package/plugins/lisa-cdk/skills/pull-request-review/SKILL.md +68 -0
- package/plugins/lisa-cdk/skills/security-zap-scan/SKILL.md +33 -0
- package/plugins/lisa-cdk/skills/skill-creator/LICENSE.txt +202 -0
- package/plugins/lisa-cdk/skills/skill-creator/SKILL.md +210 -0
- package/plugins/lisa-cdk/skills/skill-creator/scripts/init_skill.py +305 -0
- package/plugins/lisa-cdk/skills/skill-creator/scripts/package_skill.py +112 -0
- package/plugins/lisa-cdk/skills/skill-creator/scripts/quick_validate.py +67 -0
- package/plugins/lisa-cdk/skills/sonarqube-check/SKILL.md +11 -0
- package/plugins/lisa-cdk/skills/sonarqube-fix/SKILL.md +8 -0
- package/plugins/lisa-cdk/skills/tasks-load/SKILL.md +88 -0
- package/plugins/lisa-cdk/skills/tasks-sync/SKILL.md +108 -0
- package/plugins/lisa-expo/.claude-plugin/plugin.json +86 -0
- package/plugins/lisa-expo/agents/agent-architect.md +310 -0
- package/plugins/lisa-expo/agents/architecture-specialist.md +53 -0
- package/plugins/lisa-expo/agents/debug-specialist.md +204 -0
- package/plugins/lisa-expo/agents/git-history-analyzer.md +183 -0
- package/plugins/lisa-expo/agents/hooks-expert.md +74 -0
- package/plugins/lisa-expo/agents/implementer.md +54 -0
- package/plugins/lisa-expo/agents/learner.md +44 -0
- package/plugins/lisa-expo/agents/ops-specialist.md +124 -0
- package/plugins/lisa-expo/agents/performance-specialist.md +95 -0
- package/plugins/lisa-expo/agents/product-specialist.md +72 -0
- package/plugins/lisa-expo/agents/quality-specialist.md +55 -0
- package/plugins/lisa-expo/agents/security-specialist.md +58 -0
- package/plugins/lisa-expo/agents/skill-evaluator.md +246 -0
- package/plugins/lisa-expo/agents/slash-command-architect.md +87 -0
- package/plugins/lisa-expo/agents/test-specialist.md +64 -0
- package/plugins/lisa-expo/agents/verification-specialist.md +189 -0
- package/plugins/lisa-expo/agents/web-search-researcher.md +112 -0
- package/plugins/lisa-expo/commands/git-commit-and-submit-pr.md +7 -0
- package/plugins/lisa-expo/commands/git-commit-submit-pr-and-verify.md +7 -0
- package/plugins/lisa-expo/commands/git-commit-submit-pr-deploy-and-verify.md +7 -0
- package/plugins/lisa-expo/commands/git-commit.md +7 -0
- package/plugins/lisa-expo/commands/git-prune.md +6 -0
- package/plugins/lisa-expo/commands/git-submit-pr.md +7 -0
- package/plugins/lisa-expo/commands/jira-add-journey.md +7 -0
- package/plugins/lisa-expo/commands/jira-create.md +7 -0
- package/plugins/lisa-expo/commands/jira-evidence.md +7 -0
- package/plugins/lisa-expo/commands/jira-fix.md +7 -0
- package/plugins/lisa-expo/commands/jira-implement.md +7 -0
- package/plugins/lisa-expo/commands/jira-journey.md +7 -0
- package/plugins/lisa-expo/commands/jira-sync.md +7 -0
- package/plugins/lisa-expo/commands/jira-verify.md +7 -0
- package/plugins/lisa-expo/commands/lisa-review-implementation.md +7 -0
- package/plugins/lisa-expo/commands/plan-add-test-coverage.md +7 -0
- package/plugins/lisa-expo/commands/plan-create.md +6 -0
- package/plugins/lisa-expo/commands/plan-execute.md +7 -0
- package/plugins/lisa-expo/commands/plan-fix-linter-error.md +7 -0
- package/plugins/lisa-expo/commands/plan-local-code-review.md +6 -0
- package/plugins/lisa-expo/commands/plan-lower-code-complexity.md +6 -0
- package/plugins/lisa-expo/commands/plan-reduce-max-lines-per-function.md +7 -0
- package/plugins/lisa-expo/commands/plan-reduce-max-lines.md +7 -0
- package/plugins/lisa-expo/commands/pull-request-review.md +7 -0
- package/plugins/lisa-expo/commands/security-zap-scan.md +6 -0
- package/plugins/lisa-expo/commands/sonarqube-check.md +6 -0
- package/plugins/lisa-expo/commands/sonarqube-fix.md +6 -0
- package/plugins/lisa-expo/commands/tasks-load.md +7 -0
- package/plugins/lisa-expo/commands/tasks-sync.md +7 -0
- package/plugins/lisa-expo/hooks/debug-hook.sh +47 -0
- package/plugins/lisa-expo/hooks/enforce-plan-rules.sh +15 -0
- package/plugins/lisa-expo/hooks/format-on-edit.sh +76 -0
- package/plugins/lisa-expo/hooks/install-pkgs.sh +64 -0
- package/plugins/lisa-expo/hooks/lint-on-edit.sh +81 -0
- package/plugins/lisa-expo/hooks/notify-ntfy.sh +183 -0
- package/plugins/lisa-expo/hooks/setup-jira-cli.sh +52 -0
- package/plugins/lisa-expo/hooks/sg-scan-on-edit.sh +68 -0
- package/plugins/lisa-expo/hooks/sync-tasks.sh +107 -0
- package/plugins/lisa-expo/hooks/ticket-sync-reminder.sh +23 -0
- package/plugins/lisa-expo/hooks/track-plan-sessions.sh +164 -0
- package/plugins/lisa-expo/hooks/verify-completion.sh +77 -0
- package/plugins/lisa-expo/rules/README.md +240 -0
- package/plugins/lisa-expo/rules/coding-philosophy.md +428 -0
- package/plugins/lisa-expo/rules/expo-verification.md +261 -0
- package/plugins/lisa-expo/rules/lisa.md +37 -0
- package/plugins/lisa-expo/rules/verfication.md +596 -0
- package/plugins/lisa-expo/skills/agent-design-best-practices/SKILL.md +219 -0
- package/plugins/lisa-expo/skills/apollo-client/SKILL.md +238 -0
- package/plugins/lisa-expo/skills/apollo-client/references/mutation-patterns.md +360 -0
- package/plugins/lisa-expo/skills/atomic-design-gluestack/SKILL.md +360 -0
- package/plugins/lisa-expo/skills/atomic-design-gluestack/references/atomic-levels.md +417 -0
- package/plugins/lisa-expo/skills/atomic-design-gluestack/references/folder-structure.md +257 -0
- package/plugins/lisa-expo/skills/atomic-design-gluestack/references/gluestack-mapping.md +233 -0
- package/plugins/lisa-expo/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +329 -0
- package/plugins/lisa-expo/skills/container-view-pattern/SKILL.md +299 -0
- package/plugins/lisa-expo/skills/container-view-pattern/references/examples.md +749 -0
- package/plugins/lisa-expo/skills/container-view-pattern/references/patterns.md +318 -0
- package/plugins/lisa-expo/skills/container-view-pattern/scripts/create_component.py +200 -0
- package/plugins/lisa-expo/skills/container-view-pattern/scripts/validate_component.py +209 -0
- package/plugins/lisa-expo/skills/cross-platform-compatibility/SKILL.md +268 -0
- package/plugins/lisa-expo/skills/cross-platform-compatibility/references/common-issues.md +619 -0
- package/plugins/lisa-expo/skills/cross-platform-compatibility/references/file-extensions.md +340 -0
- package/plugins/lisa-expo/skills/cross-platform-compatibility/references/platform-api.md +276 -0
- package/plugins/lisa-expo/skills/cross-platform-compatibility/scripts/validate_cross_platform.py +416 -0
- package/plugins/lisa-expo/skills/directory-structure/SKILL.md +202 -0
- package/plugins/lisa-expo/skills/directory-structure/scripts/validate_structure.py +445 -0
- package/plugins/lisa-expo/skills/expo-env-config/SKILL.md +309 -0
- package/plugins/lisa-expo/skills/expo-env-config/references/validation-patterns.md +417 -0
- package/plugins/lisa-expo/skills/expo-router-best-practices/SKILL.md +431 -0
- package/plugins/lisa-expo/skills/expo-router-best-practices/references/official-docs.md +290 -0
- package/plugins/lisa-expo/skills/expo-router-best-practices/scripts/generate-route.py +171 -0
- package/plugins/lisa-expo/skills/git-commit/SKILL.md +48 -0
- package/plugins/lisa-expo/skills/git-commit-and-submit-pr/SKILL.md +8 -0
- package/plugins/lisa-expo/skills/git-commit-submit-pr-and-verify/SKILL.md +7 -0
- package/plugins/lisa-expo/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +7 -0
- package/plugins/lisa-expo/skills/git-prune/SKILL.md +35 -0
- package/plugins/lisa-expo/skills/git-submit-pr/SKILL.md +44 -0
- package/plugins/lisa-expo/skills/gluestack-nativewind/SKILL.md +411 -0
- package/plugins/lisa-expo/skills/gluestack-nativewind/references/color-tokens.md +343 -0
- package/plugins/lisa-expo/skills/gluestack-nativewind/references/component-mapping.md +307 -0
- package/plugins/lisa-expo/skills/gluestack-nativewind/references/spacing-scale.md +300 -0
- package/plugins/lisa-expo/skills/gluestack-nativewind/scripts/validate_styling.py +315 -0
- package/plugins/lisa-expo/skills/jira-add-journey/SKILL.md +126 -0
- package/plugins/lisa-expo/skills/jira-create/SKILL.md +101 -0
- package/plugins/lisa-expo/skills/jira-evidence/SKILL.md +78 -0
- package/plugins/lisa-expo/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/lisa-expo/skills/jira-fix/SKILL.md +16 -0
- package/plugins/lisa-expo/skills/jira-implement/SKILL.md +18 -0
- package/plugins/lisa-expo/skills/jira-journey/SKILL.md +190 -0
- package/plugins/lisa-expo/skills/jira-journey/scripts/generate-templates.py +281 -0
- package/plugins/lisa-expo/skills/jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/lisa-expo/skills/jira-sync/SKILL.md +63 -0
- package/plugins/lisa-expo/skills/jira-verify/SKILL.md +47 -0
- package/plugins/lisa-expo/skills/jsdoc-best-practices/SKILL.md +432 -0
- package/plugins/lisa-expo/skills/lisa-review-implementation/SKILL.md +209 -0
- package/plugins/lisa-expo/skills/local-state/SKILL.md +362 -0
- package/plugins/lisa-expo/skills/local-state/references/async-storage.md +505 -0
- package/plugins/lisa-expo/skills/local-state/references/persistence-patterns.md +711 -0
- package/plugins/lisa-expo/skills/local-state/references/reactive-variables.md +446 -0
- package/plugins/lisa-expo/skills/ops-browser-uat/SKILL.md +124 -0
- package/plugins/lisa-expo/skills/ops-check-logs/SKILL.md +211 -0
- package/plugins/lisa-expo/skills/ops-db-ops/SKILL.md +119 -0
- package/plugins/lisa-expo/skills/ops-deploy/SKILL.md +119 -0
- package/plugins/lisa-expo/skills/ops-monitor-errors/SKILL.md +99 -0
- package/plugins/lisa-expo/skills/ops-performance/SKILL.md +165 -0
- package/plugins/lisa-expo/skills/ops-run-local/SKILL.md +166 -0
- package/plugins/lisa-expo/skills/ops-verify-health/SKILL.md +101 -0
- package/plugins/lisa-expo/skills/owasp-zap/SKILL.md +56 -0
- package/plugins/lisa-expo/skills/plan-add-test-coverage/SKILL.md +44 -0
- package/plugins/lisa-expo/skills/plan-execute/SKILL.md +89 -0
- package/plugins/lisa-expo/skills/plan-fix-linter-error/SKILL.md +45 -0
- package/plugins/lisa-expo/skills/plan-local-code-review/SKILL.md +88 -0
- package/plugins/lisa-expo/skills/plan-lower-code-complexity/SKILL.md +44 -0
- package/plugins/lisa-expo/skills/plan-reduce-max-lines/SKILL.md +45 -0
- package/plugins/lisa-expo/skills/plan-reduce-max-lines-per-function/SKILL.md +46 -0
- package/plugins/lisa-expo/skills/playwright-selectors/SKILL.md +223 -0
- package/plugins/lisa-expo/skills/pull-request-review/SKILL.md +68 -0
- package/plugins/lisa-expo/skills/security-zap-scan/SKILL.md +33 -0
- package/plugins/lisa-expo/skills/skill-creator/LICENSE.txt +202 -0
- package/plugins/lisa-expo/skills/skill-creator/SKILL.md +210 -0
- package/plugins/lisa-expo/skills/skill-creator/scripts/init_skill.py +305 -0
- package/plugins/lisa-expo/skills/skill-creator/scripts/package_skill.py +112 -0
- package/plugins/lisa-expo/skills/skill-creator/scripts/quick_validate.py +67 -0
- package/plugins/lisa-expo/skills/sonarqube-check/SKILL.md +11 -0
- package/plugins/lisa-expo/skills/sonarqube-fix/SKILL.md +8 -0
- package/plugins/lisa-expo/skills/tasks-load/SKILL.md +88 -0
- package/plugins/lisa-expo/skills/tasks-sync/SKILL.md +108 -0
- package/plugins/lisa-expo/skills/testing-library/SKILL.md +314 -0
- package/plugins/lisa-expo/skills/testing-library/references/async-patterns.md +420 -0
- package/plugins/lisa-expo/skills/testing-library/references/expo-router-testing.md +556 -0
- package/plugins/lisa-expo/skills/testing-library/references/mocking-patterns.md +590 -0
- package/plugins/lisa-expo/skills/testing-library/references/query-priority.md +291 -0
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +86 -0
- package/plugins/lisa-nestjs/agents/agent-architect.md +310 -0
- package/plugins/lisa-nestjs/agents/architecture-specialist.md +53 -0
- package/plugins/lisa-nestjs/agents/debug-specialist.md +204 -0
- package/plugins/lisa-nestjs/agents/git-history-analyzer.md +183 -0
- package/plugins/lisa-nestjs/agents/hooks-expert.md +74 -0
- package/plugins/lisa-nestjs/agents/implementer.md +54 -0
- package/plugins/lisa-nestjs/agents/learner.md +44 -0
- package/plugins/lisa-nestjs/agents/performance-specialist.md +95 -0
- package/plugins/lisa-nestjs/agents/product-specialist.md +72 -0
- package/plugins/lisa-nestjs/agents/quality-specialist.md +55 -0
- package/plugins/lisa-nestjs/agents/security-specialist.md +58 -0
- package/plugins/lisa-nestjs/agents/skill-evaluator.md +246 -0
- package/plugins/lisa-nestjs/agents/slash-command-architect.md +87 -0
- package/plugins/lisa-nestjs/agents/test-specialist.md +64 -0
- package/plugins/lisa-nestjs/agents/verification-specialist.md +189 -0
- package/plugins/lisa-nestjs/agents/web-search-researcher.md +112 -0
- package/plugins/lisa-nestjs/commands/git-commit-and-submit-pr.md +7 -0
- package/plugins/lisa-nestjs/commands/git-commit-submit-pr-and-verify.md +7 -0
- package/plugins/lisa-nestjs/commands/git-commit-submit-pr-deploy-and-verify.md +7 -0
- package/plugins/lisa-nestjs/commands/git-commit.md +7 -0
- package/plugins/lisa-nestjs/commands/git-prune.md +6 -0
- package/plugins/lisa-nestjs/commands/git-submit-pr.md +7 -0
- package/plugins/lisa-nestjs/commands/jira-add-journey.md +7 -0
- package/plugins/lisa-nestjs/commands/jira-create.md +7 -0
- package/plugins/lisa-nestjs/commands/jira-evidence.md +7 -0
- package/plugins/lisa-nestjs/commands/jira-fix.md +7 -0
- package/plugins/lisa-nestjs/commands/jira-implement.md +7 -0
- package/plugins/lisa-nestjs/commands/jira-journey.md +7 -0
- package/plugins/lisa-nestjs/commands/jira-sync.md +7 -0
- package/plugins/lisa-nestjs/commands/jira-verify.md +7 -0
- package/plugins/lisa-nestjs/commands/lisa-review-implementation.md +7 -0
- package/plugins/lisa-nestjs/commands/plan-add-test-coverage.md +7 -0
- package/plugins/lisa-nestjs/commands/plan-create.md +6 -0
- package/plugins/lisa-nestjs/commands/plan-execute.md +7 -0
- package/plugins/lisa-nestjs/commands/plan-fix-linter-error.md +7 -0
- package/plugins/lisa-nestjs/commands/plan-local-code-review.md +6 -0
- package/plugins/lisa-nestjs/commands/plan-lower-code-complexity.md +6 -0
- package/plugins/lisa-nestjs/commands/plan-reduce-max-lines-per-function.md +7 -0
- package/plugins/lisa-nestjs/commands/plan-reduce-max-lines.md +7 -0
- package/plugins/lisa-nestjs/commands/pull-request-review.md +7 -0
- package/plugins/lisa-nestjs/commands/security-zap-scan.md +6 -0
- package/plugins/lisa-nestjs/commands/sonarqube-check.md +6 -0
- package/plugins/lisa-nestjs/commands/sonarqube-fix.md +6 -0
- package/plugins/lisa-nestjs/commands/tasks-load.md +7 -0
- package/plugins/lisa-nestjs/commands/tasks-sync.md +7 -0
- package/plugins/lisa-nestjs/hooks/debug-hook.sh +47 -0
- package/plugins/lisa-nestjs/hooks/enforce-plan-rules.sh +15 -0
- package/plugins/lisa-nestjs/hooks/format-on-edit.sh +76 -0
- package/plugins/lisa-nestjs/hooks/install-pkgs.sh +64 -0
- package/plugins/lisa-nestjs/hooks/lint-on-edit.sh +81 -0
- package/plugins/lisa-nestjs/hooks/notify-ntfy.sh +183 -0
- package/plugins/lisa-nestjs/hooks/setup-jira-cli.sh +52 -0
- package/plugins/lisa-nestjs/hooks/sg-scan-on-edit.sh +68 -0
- package/plugins/lisa-nestjs/hooks/sync-tasks.sh +107 -0
- package/plugins/lisa-nestjs/hooks/ticket-sync-reminder.sh +23 -0
- package/plugins/lisa-nestjs/hooks/track-plan-sessions.sh +164 -0
- package/plugins/lisa-nestjs/hooks/verify-completion.sh +77 -0
- package/plugins/lisa-nestjs/rules/README.md +240 -0
- package/plugins/lisa-nestjs/rules/coding-philosophy.md +428 -0
- package/plugins/lisa-nestjs/rules/lisa.md +37 -0
- package/plugins/lisa-nestjs/rules/verfication.md +596 -0
- package/plugins/lisa-nestjs/skills/agent-design-best-practices/SKILL.md +219 -0
- package/plugins/lisa-nestjs/skills/git-commit/SKILL.md +48 -0
- package/plugins/lisa-nestjs/skills/git-commit-and-submit-pr/SKILL.md +8 -0
- package/plugins/lisa-nestjs/skills/git-commit-submit-pr-and-verify/SKILL.md +7 -0
- package/plugins/lisa-nestjs/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +7 -0
- package/plugins/lisa-nestjs/skills/git-prune/SKILL.md +35 -0
- package/plugins/lisa-nestjs/skills/git-submit-pr/SKILL.md +44 -0
- package/plugins/lisa-nestjs/skills/jira-add-journey/SKILL.md +120 -0
- package/plugins/lisa-nestjs/skills/jira-create/SKILL.md +95 -0
- package/plugins/lisa-nestjs/skills/jira-evidence/SKILL.md +73 -0
- package/plugins/lisa-nestjs/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/lisa-nestjs/skills/jira-fix/SKILL.md +16 -0
- package/plugins/lisa-nestjs/skills/jira-implement/SKILL.md +18 -0
- package/plugins/lisa-nestjs/skills/jira-journey/SKILL.md +125 -0
- package/plugins/lisa-nestjs/skills/jira-journey/scripts/generate-templates.py +233 -0
- package/plugins/lisa-nestjs/skills/jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/lisa-nestjs/skills/jira-sync/SKILL.md +63 -0
- package/plugins/lisa-nestjs/skills/jira-verify/SKILL.md +48 -0
- package/plugins/lisa-nestjs/skills/jsdoc-best-practices/SKILL.md +432 -0
- package/plugins/lisa-nestjs/skills/lisa-review-implementation/SKILL.md +209 -0
- package/plugins/lisa-nestjs/skills/nestjs-graphql/SKILL.md +176 -0
- package/plugins/lisa-nestjs/skills/nestjs-graphql/references/advanced-features.md +527 -0
- package/plugins/lisa-nestjs/skills/nestjs-graphql/references/project-patterns.md +483 -0
- package/plugins/lisa-nestjs/skills/nestjs-graphql/references/quick-start.md +257 -0
- package/plugins/lisa-nestjs/skills/nestjs-graphql/references/resolvers-mutations.md +413 -0
- package/plugins/lisa-nestjs/skills/nestjs-graphql/references/types-scalars.md +513 -0
- package/plugins/lisa-nestjs/skills/nestjs-rules/SKILL.md +536 -0
- package/plugins/lisa-nestjs/skills/plan-add-test-coverage/SKILL.md +44 -0
- package/plugins/lisa-nestjs/skills/plan-execute/SKILL.md +89 -0
- package/plugins/lisa-nestjs/skills/plan-fix-linter-error/SKILL.md +45 -0
- package/plugins/lisa-nestjs/skills/plan-local-code-review/SKILL.md +88 -0
- package/plugins/lisa-nestjs/skills/plan-lower-code-complexity/SKILL.md +44 -0
- package/plugins/lisa-nestjs/skills/plan-reduce-max-lines/SKILL.md +45 -0
- package/plugins/lisa-nestjs/skills/plan-reduce-max-lines-per-function/SKILL.md +46 -0
- package/plugins/lisa-nestjs/skills/pull-request-review/SKILL.md +68 -0
- package/plugins/lisa-nestjs/skills/security-zap-scan/SKILL.md +33 -0
- package/plugins/lisa-nestjs/skills/skill-creator/LICENSE.txt +202 -0
- package/plugins/lisa-nestjs/skills/skill-creator/SKILL.md +210 -0
- package/plugins/lisa-nestjs/skills/skill-creator/scripts/init_skill.py +305 -0
- package/plugins/lisa-nestjs/skills/skill-creator/scripts/package_skill.py +112 -0
- package/plugins/lisa-nestjs/skills/skill-creator/scripts/quick_validate.py +67 -0
- package/plugins/lisa-nestjs/skills/sonarqube-check/SKILL.md +11 -0
- package/plugins/lisa-nestjs/skills/sonarqube-fix/SKILL.md +8 -0
- package/plugins/lisa-nestjs/skills/tasks-load/SKILL.md +88 -0
- package/plugins/lisa-nestjs/skills/tasks-sync/SKILL.md +108 -0
- package/plugins/lisa-nestjs/skills/typeorm-patterns/SKILL.md +275 -0
- package/plugins/lisa-nestjs/skills/typeorm-patterns/references/configuration-patterns.md +487 -0
- package/plugins/lisa-nestjs/skills/typeorm-patterns/references/entity-patterns.md +450 -0
- package/plugins/lisa-nestjs/skills/typeorm-patterns/references/observability-patterns.md +536 -0
- package/plugins/lisa-rails/.claude-plugin/plugin.json +77 -0
- package/plugins/lisa-rails/agents/agent-architect.md +310 -0
- package/plugins/lisa-rails/agents/architecture-specialist.md +53 -0
- package/plugins/lisa-rails/agents/debug-specialist.md +204 -0
- package/plugins/lisa-rails/agents/git-history-analyzer.md +183 -0
- package/plugins/lisa-rails/agents/hooks-expert.md +74 -0
- package/plugins/lisa-rails/agents/implementer.md +54 -0
- package/plugins/lisa-rails/agents/learner.md +44 -0
- package/plugins/lisa-rails/agents/performance-specialist.md +95 -0
- package/plugins/lisa-rails/agents/product-specialist.md +72 -0
- package/plugins/lisa-rails/agents/quality-specialist.md +55 -0
- package/plugins/lisa-rails/agents/security-specialist.md +58 -0
- package/plugins/lisa-rails/agents/skill-evaluator.md +246 -0
- package/plugins/lisa-rails/agents/slash-command-architect.md +87 -0
- package/plugins/lisa-rails/agents/test-specialist.md +64 -0
- package/plugins/lisa-rails/agents/verification-specialist.md +189 -0
- package/plugins/lisa-rails/agents/web-search-researcher.md +112 -0
- package/plugins/lisa-rails/commands/git-commit-and-submit-pr.md +7 -0
- package/plugins/lisa-rails/commands/git-commit-submit-pr-and-verify.md +7 -0
- package/plugins/lisa-rails/commands/git-commit-submit-pr-deploy-and-verify.md +7 -0
- package/plugins/lisa-rails/commands/git-commit.md +7 -0
- package/plugins/lisa-rails/commands/git-prune.md +6 -0
- package/plugins/lisa-rails/commands/git-submit-pr.md +7 -0
- package/plugins/lisa-rails/commands/jira-add-journey.md +7 -0
- package/plugins/lisa-rails/commands/jira-create.md +7 -0
- package/plugins/lisa-rails/commands/jira-evidence.md +7 -0
- package/plugins/lisa-rails/commands/jira-fix.md +7 -0
- package/plugins/lisa-rails/commands/jira-implement.md +7 -0
- package/plugins/lisa-rails/commands/jira-journey.md +7 -0
- package/plugins/lisa-rails/commands/jira-sync.md +7 -0
- package/plugins/lisa-rails/commands/jira-verify.md +7 -0
- package/plugins/lisa-rails/commands/lisa-review-implementation.md +7 -0
- package/plugins/lisa-rails/commands/plan-add-test-coverage.md +7 -0
- package/plugins/lisa-rails/commands/plan-create.md +6 -0
- package/plugins/lisa-rails/commands/plan-execute.md +7 -0
- package/plugins/lisa-rails/commands/plan-fix-linter-error.md +7 -0
- package/plugins/lisa-rails/commands/plan-local-code-review.md +6 -0
- package/plugins/lisa-rails/commands/plan-lower-code-complexity.md +6 -0
- package/plugins/lisa-rails/commands/plan-reduce-max-lines-per-function.md +7 -0
- package/plugins/lisa-rails/commands/plan-reduce-max-lines.md +7 -0
- package/plugins/lisa-rails/commands/pull-request-review.md +7 -0
- package/plugins/lisa-rails/commands/security-zap-scan.md +6 -0
- package/plugins/lisa-rails/commands/sonarqube-check.md +6 -0
- package/plugins/lisa-rails/commands/sonarqube-fix.md +6 -0
- package/plugins/lisa-rails/commands/tasks-load.md +7 -0
- package/plugins/lisa-rails/commands/tasks-sync.md +7 -0
- package/plugins/lisa-rails/hooks/debug-hook.sh +47 -0
- package/plugins/lisa-rails/hooks/enforce-plan-rules.sh +15 -0
- package/plugins/lisa-rails/hooks/format-on-edit.sh +76 -0
- package/plugins/lisa-rails/hooks/install-pkgs.sh +64 -0
- package/plugins/lisa-rails/hooks/lint-on-edit.sh +81 -0
- package/plugins/lisa-rails/hooks/notify-ntfy.sh +183 -0
- package/plugins/lisa-rails/hooks/setup-jira-cli.sh +52 -0
- package/plugins/lisa-rails/hooks/sg-scan-on-edit.sh +68 -0
- package/plugins/lisa-rails/hooks/sync-tasks.sh +107 -0
- package/plugins/lisa-rails/hooks/ticket-sync-reminder.sh +23 -0
- package/plugins/lisa-rails/hooks/track-plan-sessions.sh +164 -0
- package/plugins/lisa-rails/hooks/verify-completion.sh +77 -0
- package/plugins/lisa-rails/rules/README.md +240 -0
- package/plugins/lisa-rails/rules/coding-philosophy.md +428 -0
- package/plugins/lisa-rails/rules/lisa.md +37 -0
- package/plugins/lisa-rails/rules/rails-conventions.md +176 -0
- package/plugins/lisa-rails/rules/verfication.md +596 -0
- package/plugins/lisa-rails/skills/action-controller-best-practices/SKILL.md +374 -0
- package/plugins/lisa-rails/skills/action-view-best-practices/SKILL.md +335 -0
- package/plugins/lisa-rails/skills/active-record-model-best-practices/SKILL.md +166 -0
- package/plugins/lisa-rails/skills/agent-design-best-practices/SKILL.md +219 -0
- package/plugins/lisa-rails/skills/git-commit/SKILL.md +48 -0
- package/plugins/lisa-rails/skills/git-commit-and-submit-pr/SKILL.md +8 -0
- package/plugins/lisa-rails/skills/git-commit-submit-pr-and-verify/SKILL.md +7 -0
- package/plugins/lisa-rails/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +7 -0
- package/plugins/lisa-rails/skills/git-prune/SKILL.md +35 -0
- package/plugins/lisa-rails/skills/git-submit-pr/SKILL.md +44 -0
- package/plugins/lisa-rails/skills/jira-add-journey/SKILL.md +65 -0
- package/plugins/lisa-rails/skills/jira-create/SKILL.md +41 -0
- package/plugins/lisa-rails/skills/jira-evidence/SKILL.md +70 -0
- package/plugins/lisa-rails/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/lisa-rails/skills/jira-fix/SKILL.md +16 -0
- package/plugins/lisa-rails/skills/jira-implement/SKILL.md +18 -0
- package/plugins/lisa-rails/skills/jira-journey/SKILL.md +64 -0
- package/plugins/lisa-rails/skills/jira-journey/scripts/generate-templates.py +233 -0
- package/plugins/lisa-rails/skills/jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/lisa-rails/skills/jira-sync/SKILL.md +63 -0
- package/plugins/lisa-rails/skills/jira-verify/SKILL.md +29 -0
- package/plugins/lisa-rails/skills/jsdoc-best-practices/SKILL.md +432 -0
- package/plugins/lisa-rails/skills/lisa-review-implementation/SKILL.md +209 -0
- package/plugins/lisa-rails/skills/plan-add-test-coverage/SKILL.md +45 -0
- package/plugins/lisa-rails/skills/plan-execute/SKILL.md +89 -0
- package/plugins/lisa-rails/skills/plan-fix-linter-error/SKILL.md +45 -0
- package/plugins/lisa-rails/skills/plan-local-code-review/SKILL.md +88 -0
- package/plugins/lisa-rails/skills/plan-lower-code-complexity/SKILL.md +48 -0
- package/plugins/lisa-rails/skills/plan-reduce-max-lines/SKILL.md +46 -0
- package/plugins/lisa-rails/skills/plan-reduce-max-lines-per-function/SKILL.md +46 -0
- package/plugins/lisa-rails/skills/pull-request-review/SKILL.md +68 -0
- package/plugins/lisa-rails/skills/security-zap-scan/SKILL.md +33 -0
- package/plugins/lisa-rails/skills/skill-creator/LICENSE.txt +202 -0
- package/plugins/lisa-rails/skills/skill-creator/SKILL.md +210 -0
- package/plugins/lisa-rails/skills/skill-creator/scripts/init_skill.py +305 -0
- package/plugins/lisa-rails/skills/skill-creator/scripts/package_skill.py +112 -0
- package/plugins/lisa-rails/skills/skill-creator/scripts/quick_validate.py +67 -0
- package/plugins/lisa-rails/skills/sonarqube-check/SKILL.md +11 -0
- package/plugins/lisa-rails/skills/sonarqube-fix/SKILL.md +8 -0
- package/plugins/lisa-rails/skills/tasks-load/SKILL.md +88 -0
- package/plugins/lisa-rails/skills/tasks-sync/SKILL.md +108 -0
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +86 -0
- package/plugins/lisa-typescript/agents/agent-architect.md +310 -0
- package/plugins/lisa-typescript/agents/architecture-specialist.md +53 -0
- package/plugins/lisa-typescript/agents/debug-specialist.md +204 -0
- package/plugins/lisa-typescript/agents/git-history-analyzer.md +183 -0
- package/plugins/lisa-typescript/agents/hooks-expert.md +74 -0
- package/plugins/lisa-typescript/agents/implementer.md +54 -0
- package/plugins/lisa-typescript/agents/learner.md +44 -0
- package/plugins/lisa-typescript/agents/performance-specialist.md +95 -0
- package/plugins/lisa-typescript/agents/product-specialist.md +72 -0
- package/plugins/lisa-typescript/agents/quality-specialist.md +55 -0
- package/plugins/lisa-typescript/agents/security-specialist.md +58 -0
- package/plugins/lisa-typescript/agents/skill-evaluator.md +246 -0
- package/plugins/lisa-typescript/agents/slash-command-architect.md +87 -0
- package/plugins/lisa-typescript/agents/test-specialist.md +64 -0
- package/plugins/lisa-typescript/agents/verification-specialist.md +189 -0
- package/plugins/lisa-typescript/agents/web-search-researcher.md +112 -0
- package/plugins/lisa-typescript/commands/git-commit-and-submit-pr.md +7 -0
- package/plugins/lisa-typescript/commands/git-commit-submit-pr-and-verify.md +7 -0
- package/plugins/lisa-typescript/commands/git-commit-submit-pr-deploy-and-verify.md +7 -0
- package/plugins/lisa-typescript/commands/git-commit.md +7 -0
- package/plugins/lisa-typescript/commands/git-prune.md +6 -0
- package/plugins/lisa-typescript/commands/git-submit-pr.md +7 -0
- package/plugins/lisa-typescript/commands/jira-add-journey.md +7 -0
- package/plugins/lisa-typescript/commands/jira-create.md +7 -0
- package/plugins/lisa-typescript/commands/jira-evidence.md +7 -0
- package/plugins/lisa-typescript/commands/jira-fix.md +7 -0
- package/plugins/lisa-typescript/commands/jira-implement.md +7 -0
- package/plugins/lisa-typescript/commands/jira-journey.md +7 -0
- package/plugins/lisa-typescript/commands/jira-sync.md +7 -0
- package/plugins/lisa-typescript/commands/jira-verify.md +7 -0
- package/plugins/lisa-typescript/commands/lisa-review-implementation.md +7 -0
- package/plugins/lisa-typescript/commands/plan-add-test-coverage.md +7 -0
- package/plugins/lisa-typescript/commands/plan-create.md +6 -0
- package/plugins/lisa-typescript/commands/plan-execute.md +7 -0
- package/plugins/lisa-typescript/commands/plan-fix-linter-error.md +7 -0
- package/plugins/lisa-typescript/commands/plan-local-code-review.md +6 -0
- package/plugins/lisa-typescript/commands/plan-lower-code-complexity.md +6 -0
- package/plugins/lisa-typescript/commands/plan-reduce-max-lines-per-function.md +7 -0
- package/plugins/lisa-typescript/commands/plan-reduce-max-lines.md +7 -0
- package/plugins/lisa-typescript/commands/pull-request-review.md +7 -0
- package/plugins/lisa-typescript/commands/security-zap-scan.md +6 -0
- package/plugins/lisa-typescript/commands/sonarqube-check.md +6 -0
- package/plugins/lisa-typescript/commands/sonarqube-fix.md +6 -0
- package/plugins/lisa-typescript/commands/tasks-load.md +7 -0
- package/plugins/lisa-typescript/commands/tasks-sync.md +7 -0
- package/plugins/lisa-typescript/hooks/debug-hook.sh +47 -0
- package/plugins/lisa-typescript/hooks/enforce-plan-rules.sh +15 -0
- package/plugins/lisa-typescript/hooks/format-on-edit.sh +76 -0
- package/plugins/lisa-typescript/hooks/install-pkgs.sh +64 -0
- package/plugins/lisa-typescript/hooks/lint-on-edit.sh +81 -0
- package/plugins/lisa-typescript/hooks/notify-ntfy.sh +183 -0
- package/plugins/lisa-typescript/hooks/setup-jira-cli.sh +52 -0
- package/plugins/lisa-typescript/hooks/sg-scan-on-edit.sh +68 -0
- package/plugins/lisa-typescript/hooks/sync-tasks.sh +107 -0
- package/plugins/lisa-typescript/hooks/ticket-sync-reminder.sh +23 -0
- package/plugins/lisa-typescript/hooks/track-plan-sessions.sh +164 -0
- package/plugins/lisa-typescript/hooks/verify-completion.sh +77 -0
- package/plugins/lisa-typescript/rules/README.md +240 -0
- package/plugins/lisa-typescript/rules/coding-philosophy.md +428 -0
- package/plugins/lisa-typescript/rules/lisa.md +37 -0
- package/plugins/lisa-typescript/rules/verfication.md +596 -0
- package/plugins/lisa-typescript/skills/agent-design-best-practices/SKILL.md +219 -0
- package/plugins/lisa-typescript/skills/git-commit/SKILL.md +48 -0
- package/plugins/lisa-typescript/skills/git-commit-and-submit-pr/SKILL.md +8 -0
- package/plugins/lisa-typescript/skills/git-commit-submit-pr-and-verify/SKILL.md +7 -0
- package/plugins/lisa-typescript/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +7 -0
- package/plugins/lisa-typescript/skills/git-prune/SKILL.md +35 -0
- package/plugins/lisa-typescript/skills/git-submit-pr/SKILL.md +44 -0
- package/plugins/lisa-typescript/skills/jira-add-journey/SKILL.md +120 -0
- package/plugins/lisa-typescript/skills/jira-create/SKILL.md +95 -0
- package/plugins/lisa-typescript/skills/jira-evidence/SKILL.md +73 -0
- package/plugins/lisa-typescript/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/lisa-typescript/skills/jira-fix/SKILL.md +16 -0
- package/plugins/lisa-typescript/skills/jira-implement/SKILL.md +18 -0
- package/plugins/lisa-typescript/skills/jira-journey/SKILL.md +125 -0
- package/plugins/lisa-typescript/skills/jira-journey/scripts/generate-templates.py +233 -0
- package/plugins/lisa-typescript/skills/jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/lisa-typescript/skills/jira-sync/SKILL.md +63 -0
- package/plugins/lisa-typescript/skills/jira-verify/SKILL.md +48 -0
- package/plugins/lisa-typescript/skills/jsdoc-best-practices/SKILL.md +432 -0
- package/plugins/lisa-typescript/skills/lisa-review-implementation/SKILL.md +209 -0
- package/plugins/lisa-typescript/skills/plan-add-test-coverage/SKILL.md +44 -0
- package/plugins/lisa-typescript/skills/plan-execute/SKILL.md +89 -0
- package/plugins/lisa-typescript/skills/plan-fix-linter-error/SKILL.md +45 -0
- package/plugins/lisa-typescript/skills/plan-local-code-review/SKILL.md +88 -0
- package/plugins/lisa-typescript/skills/plan-lower-code-complexity/SKILL.md +44 -0
- package/plugins/lisa-typescript/skills/plan-reduce-max-lines/SKILL.md +45 -0
- package/plugins/lisa-typescript/skills/plan-reduce-max-lines-per-function/SKILL.md +46 -0
- package/plugins/lisa-typescript/skills/pull-request-review/SKILL.md +68 -0
- package/plugins/lisa-typescript/skills/security-zap-scan/SKILL.md +33 -0
- package/plugins/lisa-typescript/skills/skill-creator/LICENSE.txt +202 -0
- package/plugins/lisa-typescript/skills/skill-creator/SKILL.md +210 -0
- package/plugins/lisa-typescript/skills/skill-creator/scripts/init_skill.py +305 -0
- package/plugins/lisa-typescript/skills/skill-creator/scripts/package_skill.py +112 -0
- package/plugins/lisa-typescript/skills/skill-creator/scripts/quick_validate.py +67 -0
- package/plugins/lisa-typescript/skills/sonarqube-check/SKILL.md +11 -0
- package/plugins/lisa-typescript/skills/sonarqube-fix/SKILL.md +8 -0
- package/plugins/lisa-typescript/skills/tasks-load/SKILL.md +88 -0
- package/plugins/lisa-typescript/skills/tasks-sync/SKILL.md +108 -0
- package/plugins/src/base/agents/agent-architect.md +310 -0
- package/plugins/src/base/agents/architecture-specialist.md +53 -0
- package/plugins/src/base/agents/debug-specialist.md +204 -0
- package/plugins/src/base/agents/git-history-analyzer.md +183 -0
- package/plugins/src/base/agents/hooks-expert.md +74 -0
- package/plugins/src/base/agents/implementer.md +54 -0
- package/plugins/src/base/agents/learner.md +44 -0
- package/plugins/src/base/agents/performance-specialist.md +95 -0
- package/plugins/src/base/agents/product-specialist.md +72 -0
- package/plugins/src/base/agents/quality-specialist.md +55 -0
- package/plugins/src/base/agents/security-specialist.md +58 -0
- package/plugins/src/base/agents/skill-evaluator.md +246 -0
- package/plugins/src/base/agents/slash-command-architect.md +87 -0
- package/plugins/src/base/agents/test-specialist.md +64 -0
- package/plugins/src/base/agents/verification-specialist.md +189 -0
- package/plugins/src/base/agents/web-search-researcher.md +112 -0
- package/plugins/src/base/commands/git-commit-and-submit-pr.md +7 -0
- package/plugins/src/base/commands/git-commit-submit-pr-and-verify.md +7 -0
- package/plugins/src/base/commands/git-commit-submit-pr-deploy-and-verify.md +7 -0
- package/plugins/src/base/commands/git-commit.md +7 -0
- package/plugins/src/base/commands/git-prune.md +6 -0
- package/plugins/src/base/commands/git-submit-pr.md +7 -0
- package/plugins/src/base/commands/jira-add-journey.md +7 -0
- package/plugins/src/base/commands/jira-create.md +7 -0
- package/plugins/src/base/commands/jira-evidence.md +7 -0
- package/plugins/src/base/commands/jira-fix.md +7 -0
- package/plugins/src/base/commands/jira-implement.md +7 -0
- package/plugins/src/base/commands/jira-journey.md +7 -0
- package/plugins/src/base/commands/jira-sync.md +7 -0
- package/plugins/src/base/commands/jira-verify.md +7 -0
- package/plugins/src/base/commands/lisa-review-implementation.md +7 -0
- package/plugins/src/base/commands/plan-add-test-coverage.md +7 -0
- package/plugins/src/base/commands/plan-create.md +6 -0
- package/plugins/src/base/commands/plan-execute.md +7 -0
- package/plugins/src/base/commands/plan-fix-linter-error.md +7 -0
- package/plugins/src/base/commands/plan-local-code-review.md +6 -0
- package/plugins/src/base/commands/plan-lower-code-complexity.md +6 -0
- package/plugins/src/base/commands/plan-reduce-max-lines-per-function.md +7 -0
- package/plugins/src/base/commands/plan-reduce-max-lines.md +7 -0
- package/plugins/src/base/commands/pull-request-review.md +7 -0
- package/plugins/src/base/commands/security-zap-scan.md +6 -0
- package/plugins/src/base/commands/sonarqube-check.md +6 -0
- package/plugins/src/base/commands/sonarqube-fix.md +6 -0
- package/plugins/src/base/commands/tasks-load.md +7 -0
- package/plugins/src/base/commands/tasks-sync.md +7 -0
- package/plugins/src/base/hooks/debug-hook.sh +47 -0
- package/plugins/src/base/hooks/enforce-plan-rules.sh +15 -0
- package/plugins/src/base/hooks/format-on-edit.sh +76 -0
- package/plugins/src/base/hooks/install-pkgs.sh +64 -0
- package/plugins/src/base/hooks/lint-on-edit.sh +81 -0
- package/plugins/src/base/hooks/notify-ntfy.sh +183 -0
- package/plugins/src/base/hooks/setup-jira-cli.sh +52 -0
- package/plugins/src/base/hooks/sg-scan-on-edit.sh +68 -0
- package/plugins/src/base/hooks/sync-tasks.sh +107 -0
- package/plugins/src/base/hooks/ticket-sync-reminder.sh +23 -0
- package/plugins/src/base/hooks/track-plan-sessions.sh +164 -0
- package/plugins/src/base/hooks/verify-completion.sh +77 -0
- package/plugins/src/base/rules/README.md +240 -0
- package/plugins/src/base/rules/coding-philosophy.md +428 -0
- package/plugins/src/base/rules/lisa.md +37 -0
- package/plugins/src/base/rules/verfication.md +596 -0
- package/plugins/src/base/skills/agent-design-best-practices/SKILL.md +219 -0
- package/plugins/src/base/skills/git-commit/SKILL.md +48 -0
- package/plugins/src/base/skills/git-commit-and-submit-pr/SKILL.md +8 -0
- package/plugins/src/base/skills/git-commit-submit-pr-and-verify/SKILL.md +7 -0
- package/plugins/src/base/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +7 -0
- package/plugins/src/base/skills/git-prune/SKILL.md +35 -0
- package/plugins/src/base/skills/git-submit-pr/SKILL.md +44 -0
- package/plugins/src/base/skills/jira-add-journey/SKILL.md +120 -0
- package/plugins/src/base/skills/jira-create/SKILL.md +95 -0
- package/plugins/src/base/skills/jira-evidence/SKILL.md +73 -0
- package/plugins/src/base/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/src/base/skills/jira-fix/SKILL.md +16 -0
- package/plugins/src/base/skills/jira-implement/SKILL.md +18 -0
- package/plugins/src/base/skills/jira-journey/SKILL.md +125 -0
- package/plugins/src/base/skills/jira-journey/scripts/generate-templates.py +233 -0
- package/plugins/src/base/skills/jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/src/base/skills/jira-sync/SKILL.md +63 -0
- package/plugins/src/base/skills/jira-verify/SKILL.md +48 -0
- package/plugins/src/base/skills/jsdoc-best-practices/SKILL.md +432 -0
- package/plugins/src/base/skills/lisa-review-implementation/SKILL.md +209 -0
- package/plugins/src/base/skills/plan-add-test-coverage/SKILL.md +44 -0
- package/plugins/src/base/skills/plan-execute/SKILL.md +89 -0
- package/plugins/src/base/skills/plan-fix-linter-error/SKILL.md +45 -0
- package/plugins/src/base/skills/plan-local-code-review/SKILL.md +88 -0
- package/plugins/src/base/skills/plan-lower-code-complexity/SKILL.md +44 -0
- package/plugins/src/base/skills/plan-reduce-max-lines/SKILL.md +45 -0
- package/plugins/src/base/skills/plan-reduce-max-lines-per-function/SKILL.md +46 -0
- package/plugins/src/base/skills/pull-request-review/SKILL.md +68 -0
- package/plugins/src/base/skills/security-zap-scan/SKILL.md +33 -0
- package/plugins/src/base/skills/skill-creator/LICENSE.txt +202 -0
- package/plugins/src/base/skills/skill-creator/SKILL.md +210 -0
- package/plugins/src/base/skills/skill-creator/scripts/init_skill.py +305 -0
- package/plugins/src/base/skills/skill-creator/scripts/package_skill.py +112 -0
- package/plugins/src/base/skills/skill-creator/scripts/quick_validate.py +67 -0
- package/plugins/src/base/skills/sonarqube-check/SKILL.md +11 -0
- package/plugins/src/base/skills/sonarqube-fix/SKILL.md +8 -0
- package/plugins/src/base/skills/tasks-load/SKILL.md +88 -0
- package/plugins/src/base/skills/tasks-sync/SKILL.md +108 -0
- package/plugins/src/cdk/.claude-plugin/plugin.json +86 -0
- package/plugins/src/expo/.claude-plugin/plugin.json +86 -0
- package/plugins/src/expo/agents/ops-specialist.md +124 -0
- package/plugins/src/expo/rules/expo-verification.md +261 -0
- package/plugins/src/expo/skills/apollo-client/SKILL.md +238 -0
- package/plugins/src/expo/skills/apollo-client/references/mutation-patterns.md +360 -0
- package/plugins/src/expo/skills/atomic-design-gluestack/SKILL.md +360 -0
- package/plugins/src/expo/skills/atomic-design-gluestack/references/atomic-levels.md +417 -0
- package/plugins/src/expo/skills/atomic-design-gluestack/references/folder-structure.md +257 -0
- package/plugins/src/expo/skills/atomic-design-gluestack/references/gluestack-mapping.md +233 -0
- package/plugins/src/expo/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +329 -0
- package/plugins/src/expo/skills/container-view-pattern/SKILL.md +299 -0
- package/plugins/src/expo/skills/container-view-pattern/references/examples.md +749 -0
- package/plugins/src/expo/skills/container-view-pattern/references/patterns.md +318 -0
- package/plugins/src/expo/skills/container-view-pattern/scripts/create_component.py +200 -0
- package/plugins/src/expo/skills/container-view-pattern/scripts/validate_component.py +209 -0
- package/plugins/src/expo/skills/cross-platform-compatibility/SKILL.md +268 -0
- package/plugins/src/expo/skills/cross-platform-compatibility/references/common-issues.md +619 -0
- package/plugins/src/expo/skills/cross-platform-compatibility/references/file-extensions.md +340 -0
- package/plugins/src/expo/skills/cross-platform-compatibility/references/platform-api.md +276 -0
- package/plugins/src/expo/skills/cross-platform-compatibility/scripts/validate_cross_platform.py +416 -0
- package/plugins/src/expo/skills/directory-structure/SKILL.md +202 -0
- package/plugins/src/expo/skills/directory-structure/scripts/validate_structure.py +445 -0
- package/plugins/src/expo/skills/expo-env-config/SKILL.md +309 -0
- package/plugins/src/expo/skills/expo-env-config/references/validation-patterns.md +417 -0
- package/plugins/src/expo/skills/expo-router-best-practices/SKILL.md +431 -0
- package/plugins/src/expo/skills/expo-router-best-practices/references/official-docs.md +290 -0
- package/plugins/src/expo/skills/expo-router-best-practices/scripts/generate-route.py +171 -0
- package/plugins/src/expo/skills/gluestack-nativewind/SKILL.md +411 -0
- package/plugins/src/expo/skills/gluestack-nativewind/references/color-tokens.md +343 -0
- package/plugins/src/expo/skills/gluestack-nativewind/references/component-mapping.md +307 -0
- package/plugins/src/expo/skills/gluestack-nativewind/references/spacing-scale.md +300 -0
- package/plugins/src/expo/skills/gluestack-nativewind/scripts/validate_styling.py +315 -0
- package/plugins/src/expo/skills/jira-add-journey/SKILL.md +126 -0
- package/plugins/src/expo/skills/jira-create/SKILL.md +101 -0
- package/plugins/src/expo/skills/jira-evidence/SKILL.md +78 -0
- package/plugins/src/expo/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/src/expo/skills/jira-journey/SKILL.md +190 -0
- package/plugins/src/expo/skills/jira-journey/scripts/generate-templates.py +281 -0
- package/plugins/src/expo/skills/jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/src/expo/skills/jira-verify/SKILL.md +47 -0
- package/plugins/src/expo/skills/local-state/SKILL.md +362 -0
- package/plugins/src/expo/skills/local-state/references/async-storage.md +505 -0
- package/plugins/src/expo/skills/local-state/references/persistence-patterns.md +711 -0
- package/plugins/src/expo/skills/local-state/references/reactive-variables.md +446 -0
- package/plugins/src/expo/skills/ops-browser-uat/SKILL.md +124 -0
- package/plugins/src/expo/skills/ops-check-logs/SKILL.md +211 -0
- package/plugins/src/expo/skills/ops-db-ops/SKILL.md +119 -0
- package/plugins/src/expo/skills/ops-deploy/SKILL.md +119 -0
- package/plugins/src/expo/skills/ops-monitor-errors/SKILL.md +99 -0
- package/plugins/src/expo/skills/ops-performance/SKILL.md +165 -0
- package/plugins/src/expo/skills/ops-run-local/SKILL.md +166 -0
- package/plugins/src/expo/skills/ops-verify-health/SKILL.md +101 -0
- package/plugins/src/expo/skills/owasp-zap/SKILL.md +56 -0
- package/plugins/src/expo/skills/playwright-selectors/SKILL.md +223 -0
- package/plugins/src/expo/skills/testing-library/SKILL.md +314 -0
- package/plugins/src/expo/skills/testing-library/references/async-patterns.md +420 -0
- package/plugins/src/expo/skills/testing-library/references/expo-router-testing.md +556 -0
- package/plugins/src/expo/skills/testing-library/references/mocking-patterns.md +590 -0
- package/plugins/src/expo/skills/testing-library/references/query-priority.md +291 -0
- package/plugins/src/nestjs/.claude-plugin/plugin.json +86 -0
- package/plugins/src/nestjs/skills/nestjs-graphql/SKILL.md +176 -0
- package/plugins/src/nestjs/skills/nestjs-graphql/references/advanced-features.md +527 -0
- package/plugins/src/nestjs/skills/nestjs-graphql/references/project-patterns.md +483 -0
- package/plugins/src/nestjs/skills/nestjs-graphql/references/quick-start.md +257 -0
- package/plugins/src/nestjs/skills/nestjs-graphql/references/resolvers-mutations.md +413 -0
- package/plugins/src/nestjs/skills/nestjs-graphql/references/types-scalars.md +513 -0
- package/plugins/src/nestjs/skills/nestjs-rules/SKILL.md +536 -0
- package/plugins/src/nestjs/skills/typeorm-patterns/SKILL.md +275 -0
- package/plugins/src/nestjs/skills/typeorm-patterns/references/configuration-patterns.md +487 -0
- package/plugins/src/nestjs/skills/typeorm-patterns/references/entity-patterns.md +450 -0
- package/plugins/src/nestjs/skills/typeorm-patterns/references/observability-patterns.md +536 -0
- package/plugins/src/rails/.claude-plugin/plugin.json +77 -0
- package/plugins/src/rails/rules/rails-conventions.md +176 -0
- package/plugins/src/rails/skills/action-controller-best-practices/SKILL.md +374 -0
- package/plugins/src/rails/skills/action-view-best-practices/SKILL.md +335 -0
- package/plugins/src/rails/skills/active-record-model-best-practices/SKILL.md +166 -0
- package/plugins/src/rails/skills/jira-add-journey/SKILL.md +65 -0
- package/plugins/src/rails/skills/jira-create/SKILL.md +41 -0
- package/plugins/src/rails/skills/jira-evidence/SKILL.md +70 -0
- package/plugins/src/rails/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/src/rails/skills/jira-journey/SKILL.md +64 -0
- package/plugins/src/rails/skills/jira-verify/SKILL.md +29 -0
- package/plugins/src/rails/skills/plan-add-test-coverage/SKILL.md +45 -0
- package/plugins/src/rails/skills/plan-fix-linter-error/SKILL.md +45 -0
- package/plugins/src/rails/skills/plan-lower-code-complexity/SKILL.md +48 -0
- package/plugins/src/rails/skills/plan-reduce-max-lines/SKILL.md +46 -0
- package/plugins/src/rails/skills/plan-reduce-max-lines-per-function/SKILL.md +46 -0
- package/plugins/src/typescript/.claude-plugin/plugin.json +86 -0
- package/scripts/build-plugins.sh +22 -0
- package/scripts/cleanup-amplify-branches.sh +150 -0
- package/scripts/cleanup-github-branches.sh +202 -0
- package/scripts/github-status-check.sh +301 -0
- package/scripts/install-claude-plugins.sh +70 -0
- package/scripts/lisa-commit-and-pr-local.sh +204 -0
- package/scripts/lisa-update-local.sh +158 -0
- package/scripts/update-node-version.ts +197 -0
- package/tsconfig/build.json +8 -0
- package/tsconfig/cdk.json +16 -0
- package/tsconfig/eslint.json +12 -0
- package/tsconfig/expo.json +18 -0
- package/tsconfig/nestjs.json +18 -0
- package/tsconfig/spec.json +7 -0
- package/{typescript/copy-overwrite/tsconfig.typescript.json → tsconfig/typescript.json} +1 -1
- package/typescript/copy-overwrite/eslint.config.ts +6 -20
- package/typescript/copy-overwrite/eslint.slow.config.ts +4 -73
- package/typescript/copy-overwrite/jest.config.ts +8 -12
- package/typescript/copy-overwrite/tsconfig.json +1 -1
- package/typescript/deletions.json +7 -1
- package/typescript/merge/.claude/settings.json +29 -0
- package/typescript/package-lisa/package.lisa.json +2 -36
- package/all/copy-overwrite/.claude/rules/lisa.md +0 -66
- package/all/copy-overwrite/.claude/settings.json +0 -79
- package/all/copy-overwrite/CLAUDE.md +0 -59
- package/all/copy-overwrite/HUMAN.md +0 -309
- package/cdk/copy-overwrite/.claude/settings.json +0 -80
- package/expo/copy-overwrite/.claude/settings.json +0 -80
- package/nestjs/copy-overwrite/.claude/settings.json +0 -80
- package/rails/copy-overwrite/CLAUDE.md +0 -56
- package/typescript/copy-overwrite/.claude/settings.json +0 -80
- package/typescript/copy-overwrite/eslint.base.ts +0 -429
- package/typescript/copy-overwrite/eslint.typescript.ts +0 -142
- package/typescript/copy-overwrite/jest.typescript.ts +0 -72
- /package/{all/copy-overwrite/.claude → plugins/lisa-cdk/rules}/README.md +0 -0
- /package/{all/create-only/scripts → scripts}/setup-deploy-key.sh +0 -0
- /package/{typescript/copy-overwrite/tsconfig.base.json → tsconfig/base.json} +0 -0
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
# Apollo Client Mutation Patterns
|
|
2
|
+
|
|
3
|
+
This reference provides comprehensive examples of mutation patterns for Apollo Client 3.10.
|
|
4
|
+
|
|
5
|
+
## Complete Mutation Hook Pattern
|
|
6
|
+
|
|
7
|
+
Every custom mutation hook should follow this structure:
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
import { useCallback } from "react";
|
|
11
|
+
import {
|
|
12
|
+
useUpdateKanbanCardMutation,
|
|
13
|
+
KanbanCardFragment,
|
|
14
|
+
KanbanCardFragmentDoc,
|
|
15
|
+
} from "@/generated/graphql";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Hook for updating kanban card with optimistic UI
|
|
19
|
+
* @param boardId - The board ID for context
|
|
20
|
+
* @returns Object containing update function and loading state
|
|
21
|
+
*/
|
|
22
|
+
export const useUpdateCard = (boardId: string) => {
|
|
23
|
+
const [updateCardMutation, { loading }] = useUpdateKanbanCardMutation({
|
|
24
|
+
// 1. OPTIMISTIC RESPONSE - Provides instant UI feedback
|
|
25
|
+
optimisticResponse: variables => ({
|
|
26
|
+
__typename: "Mutation",
|
|
27
|
+
updateKanbanCard: {
|
|
28
|
+
__typename: "KanbanCard",
|
|
29
|
+
id: variables.id,
|
|
30
|
+
notes: variables.input.notes ?? null,
|
|
31
|
+
position: variables.input.position ?? 0,
|
|
32
|
+
kanbanPhaseId: variables.input.kanbanPhaseId ?? "",
|
|
33
|
+
kanbanPhase: {
|
|
34
|
+
__typename: "KanbanPhase",
|
|
35
|
+
id: variables.input.kanbanPhaseId ?? "",
|
|
36
|
+
name: "", // Will be updated by server response
|
|
37
|
+
},
|
|
38
|
+
createdAt: new Date().toISOString(),
|
|
39
|
+
updatedAt: new Date().toISOString(),
|
|
40
|
+
},
|
|
41
|
+
}),
|
|
42
|
+
|
|
43
|
+
// 2. CACHE UPDATE - Ensures UI stays in sync
|
|
44
|
+
update(cache, { data }) {
|
|
45
|
+
if (!data?.updateKanbanCard) return;
|
|
46
|
+
|
|
47
|
+
// For simple field updates, Apollo handles automatically
|
|
48
|
+
// For complex scenarios, use cache.modify:
|
|
49
|
+
cache.modify({
|
|
50
|
+
id: cache.identify({
|
|
51
|
+
__typename: "KanbanCard",
|
|
52
|
+
id: data.updateKanbanCard.id,
|
|
53
|
+
}),
|
|
54
|
+
fields: {
|
|
55
|
+
notes: () => data.updateKanbanCard.notes,
|
|
56
|
+
position: () => data.updateKanbanCard.position,
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
},
|
|
60
|
+
|
|
61
|
+
// 3. ERROR HANDLING - Never pollutes console
|
|
62
|
+
onError: () => {
|
|
63
|
+
// Set error state in UI, don't console.log
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
// 4. WRAPPED CALLBACK - Proper memoization
|
|
68
|
+
const updateCard = useCallback(
|
|
69
|
+
async (cardId: string, notes: string) => {
|
|
70
|
+
await updateCardMutation({
|
|
71
|
+
variables: {
|
|
72
|
+
id: cardId,
|
|
73
|
+
input: { notes },
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
},
|
|
77
|
+
[updateCardMutation]
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
return { updateCard, isUpdating: loading };
|
|
81
|
+
};
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Adding Items to a List
|
|
85
|
+
|
|
86
|
+
When creating new items that need to appear in a list:
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
const [addPlayerMutation] = useAddPlayerToKanbanMutation({
|
|
90
|
+
optimisticResponse: variables => ({
|
|
91
|
+
__typename: "Mutation",
|
|
92
|
+
addPlayerToKanban: {
|
|
93
|
+
__typename: "KanbanCard",
|
|
94
|
+
id: crypto.randomUUID(), // Temporary ID for new items
|
|
95
|
+
position: 0,
|
|
96
|
+
notes: variables.input.notes ?? null,
|
|
97
|
+
kanbanPhaseId: variables.input.kanbanPhaseId,
|
|
98
|
+
kanbanPhase: {
|
|
99
|
+
__typename: "KanbanPhase",
|
|
100
|
+
id: variables.input.kanbanPhaseId,
|
|
101
|
+
name: "", // Will be replaced by server
|
|
102
|
+
},
|
|
103
|
+
createdAt: new Date().toISOString(),
|
|
104
|
+
updatedAt: new Date().toISOString(),
|
|
105
|
+
},
|
|
106
|
+
}),
|
|
107
|
+
|
|
108
|
+
update(cache, { data }) {
|
|
109
|
+
if (!data?.addPlayerToKanban) return;
|
|
110
|
+
|
|
111
|
+
cache.modify({
|
|
112
|
+
fields: {
|
|
113
|
+
listKanbanCards(existingCards = { edges: [] }) {
|
|
114
|
+
const newCardRef = cache.writeFragment({
|
|
115
|
+
data: data.addPlayerToKanban,
|
|
116
|
+
fragment: KanbanCardFragmentDoc,
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
return {
|
|
120
|
+
...existingCards,
|
|
121
|
+
edges: [
|
|
122
|
+
...existingCards.edges,
|
|
123
|
+
{
|
|
124
|
+
__typename: "KanbanCardEdge",
|
|
125
|
+
cursor: "",
|
|
126
|
+
node: { __ref: newCardRef.__ref },
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
};
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
},
|
|
134
|
+
|
|
135
|
+
onError: () => {
|
|
136
|
+
// Handle error in UI state
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Removing Items from a List
|
|
142
|
+
|
|
143
|
+
When deleting items that should disappear from a list:
|
|
144
|
+
|
|
145
|
+
```typescript
|
|
146
|
+
const [removePlayerMutation] = useRemovePlayerFromKanbanMutation({
|
|
147
|
+
optimisticResponse: variables => ({
|
|
148
|
+
__typename: "Mutation",
|
|
149
|
+
removePlayerFromKanban: {
|
|
150
|
+
__typename: "KanbanCard",
|
|
151
|
+
id: variables.cardId,
|
|
152
|
+
position: 0,
|
|
153
|
+
notes: null,
|
|
154
|
+
kanbanPhaseId: "",
|
|
155
|
+
kanbanPhase: {
|
|
156
|
+
__typename: "KanbanPhase",
|
|
157
|
+
id: "",
|
|
158
|
+
name: "",
|
|
159
|
+
},
|
|
160
|
+
createdAt: new Date().toISOString(),
|
|
161
|
+
updatedAt: new Date().toISOString(),
|
|
162
|
+
},
|
|
163
|
+
}),
|
|
164
|
+
|
|
165
|
+
update(cache, { data }) {
|
|
166
|
+
if (!data?.removePlayerFromKanban) return;
|
|
167
|
+
|
|
168
|
+
const removedId = data.removePlayerFromKanban.id;
|
|
169
|
+
|
|
170
|
+
cache.modify({
|
|
171
|
+
fields: {
|
|
172
|
+
listKanbanCards(existingCards = { edges: [] }, { readField }) {
|
|
173
|
+
return {
|
|
174
|
+
...existingCards,
|
|
175
|
+
edges: existingCards.edges.filter(
|
|
176
|
+
(edge: { node: { __ref: string } }) => {
|
|
177
|
+
const cardRef = edge.node.__ref;
|
|
178
|
+
return readField("id", { __ref: cardRef }) !== removedId;
|
|
179
|
+
}
|
|
180
|
+
),
|
|
181
|
+
};
|
|
182
|
+
},
|
|
183
|
+
},
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
// Evict the removed item from cache entirely
|
|
187
|
+
cache.evict({
|
|
188
|
+
id: cache.identify({
|
|
189
|
+
__typename: "KanbanCard",
|
|
190
|
+
id: removedId,
|
|
191
|
+
}),
|
|
192
|
+
});
|
|
193
|
+
cache.gc();
|
|
194
|
+
},
|
|
195
|
+
|
|
196
|
+
onError: () => {
|
|
197
|
+
// Handle error in UI state
|
|
198
|
+
},
|
|
199
|
+
});
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## Moving Items Between Lists
|
|
203
|
+
|
|
204
|
+
When an item moves from one parent to another:
|
|
205
|
+
|
|
206
|
+
```typescript
|
|
207
|
+
const [moveCardMutation] = useMoveKanbanCardMutation({
|
|
208
|
+
optimisticResponse: variables => ({
|
|
209
|
+
__typename: "Mutation",
|
|
210
|
+
moveKanbanCard: {
|
|
211
|
+
__typename: "KanbanCard",
|
|
212
|
+
id: variables.input.cardId,
|
|
213
|
+
position: variables.input.targetPosition,
|
|
214
|
+
notes: null, // Preserve from existing cache
|
|
215
|
+
kanbanPhaseId: variables.input.targetPhaseId,
|
|
216
|
+
kanbanPhase: {
|
|
217
|
+
__typename: "KanbanPhase",
|
|
218
|
+
id: variables.input.targetPhaseId,
|
|
219
|
+
name: "", // Will be updated by server
|
|
220
|
+
},
|
|
221
|
+
createdAt: new Date().toISOString(),
|
|
222
|
+
updatedAt: new Date().toISOString(),
|
|
223
|
+
},
|
|
224
|
+
}),
|
|
225
|
+
|
|
226
|
+
// For moves, refetchQueries is often cleaner than manual cache updates
|
|
227
|
+
refetchQueries: ["ListKanbanCards"],
|
|
228
|
+
awaitRefetchQueries: false, // Don't block UI
|
|
229
|
+
|
|
230
|
+
onError: () => {
|
|
231
|
+
// Handle error in UI state
|
|
232
|
+
},
|
|
233
|
+
});
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## Batch Updates with Reordering
|
|
237
|
+
|
|
238
|
+
When updating positions of multiple items:
|
|
239
|
+
|
|
240
|
+
```typescript
|
|
241
|
+
const [updatePositionsMutation] = useUpdateKanbanPhasePositionsMutation({
|
|
242
|
+
optimisticResponse: variables => ({
|
|
243
|
+
__typename: "Mutation",
|
|
244
|
+
updateKanbanPhasePositions: variables.input.phasePositions.map(pp => ({
|
|
245
|
+
__typename: "KanbanPhase",
|
|
246
|
+
id: pp.phaseId,
|
|
247
|
+
position: pp.position,
|
|
248
|
+
name: "", // Preserve from cache
|
|
249
|
+
kanbanBoardId: variables.input.kanbanBoardId,
|
|
250
|
+
createdAt: new Date().toISOString(),
|
|
251
|
+
updatedAt: new Date().toISOString(),
|
|
252
|
+
})),
|
|
253
|
+
}),
|
|
254
|
+
|
|
255
|
+
refetchQueries: ["ListKanbanPhases"],
|
|
256
|
+
awaitRefetchQueries: false,
|
|
257
|
+
|
|
258
|
+
onError: () => {
|
|
259
|
+
// Handle error in UI state
|
|
260
|
+
},
|
|
261
|
+
});
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
## Conditional Optimistic Updates
|
|
265
|
+
|
|
266
|
+
Skip optimistic updates when conditions aren't met:
|
|
267
|
+
|
|
268
|
+
```typescript
|
|
269
|
+
const [updateMutation] = useUpdateMutation({
|
|
270
|
+
optimisticResponse: (variables, { IGNORE }) => {
|
|
271
|
+
// Skip optimistic update if we don't have enough data
|
|
272
|
+
if (!variables.input.name) {
|
|
273
|
+
return IGNORE;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
return {
|
|
277
|
+
__typename: "Mutation",
|
|
278
|
+
update: {
|
|
279
|
+
__typename: "Entity",
|
|
280
|
+
id: variables.id,
|
|
281
|
+
name: variables.input.name,
|
|
282
|
+
updatedAt: new Date().toISOString(),
|
|
283
|
+
},
|
|
284
|
+
};
|
|
285
|
+
},
|
|
286
|
+
});
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
## Cache Update with cache.identify
|
|
290
|
+
|
|
291
|
+
Use `cache.identify` to get the correct cache key:
|
|
292
|
+
|
|
293
|
+
```typescript
|
|
294
|
+
update(cache, { data }) {
|
|
295
|
+
if (!data?.updatePlayer) return;
|
|
296
|
+
|
|
297
|
+
const cacheId = cache.identify({
|
|
298
|
+
__typename: "Player",
|
|
299
|
+
id: data.updatePlayer.id,
|
|
300
|
+
});
|
|
301
|
+
// cacheId = "Player:abc-123"
|
|
302
|
+
|
|
303
|
+
cache.modify({
|
|
304
|
+
id: cacheId,
|
|
305
|
+
fields: {
|
|
306
|
+
isActive: () => true,
|
|
307
|
+
updatedAt: () => new Date().toISOString(),
|
|
308
|
+
},
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
## Using readonly Types for Cache Modifiers
|
|
314
|
+
|
|
315
|
+
Apollo cache data is readonly. Use proper typing:
|
|
316
|
+
|
|
317
|
+
```typescript
|
|
318
|
+
cache.modify({
|
|
319
|
+
fields: {
|
|
320
|
+
players(existingPlayers: readonly { __ref: string }[] = [], { readField }) {
|
|
321
|
+
return existingPlayers.filter(ref => readField("id", ref) !== removedId);
|
|
322
|
+
},
|
|
323
|
+
},
|
|
324
|
+
});
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
## Decision Tree: Cache Update Strategy
|
|
328
|
+
|
|
329
|
+
```
|
|
330
|
+
Mutation creates/updates/deletes entity
|
|
331
|
+
│
|
|
332
|
+
▼
|
|
333
|
+
┌───────────────────────────────┐
|
|
334
|
+
│ Does mutation return entity │
|
|
335
|
+
│ with id and __typename? │
|
|
336
|
+
└───────────────────────────────┘
|
|
337
|
+
│
|
|
338
|
+
┌──────┴──────┐
|
|
339
|
+
│ YES │ NO
|
|
340
|
+
▼ ▼
|
|
341
|
+
┌─────────┐ ┌─────────────────┐
|
|
342
|
+
│Automatic│ │ Use │
|
|
343
|
+
│ Update │ │ refetchQueries │
|
|
344
|
+
└─────────┘ └─────────────────┘
|
|
345
|
+
│
|
|
346
|
+
▼
|
|
347
|
+
┌───────────────────────────────┐
|
|
348
|
+
│ Does entity need to appear │
|
|
349
|
+
│ in or disappear from a list? │
|
|
350
|
+
└───────────────────────────────┘
|
|
351
|
+
│
|
|
352
|
+
┌──────┴──────┐
|
|
353
|
+
│ YES │ NO
|
|
354
|
+
▼ ▼
|
|
355
|
+
┌─────────────┐ ┌─────────────┐
|
|
356
|
+
│cache.modify │ │ Automatic │
|
|
357
|
+
│ with list │ │ is enough │
|
|
358
|
+
│ manipulation│ │ │
|
|
359
|
+
└─────────────┘ └─────────────┘
|
|
360
|
+
```
|
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: atomic-design-gluestack
|
|
3
|
+
description: |
|
|
4
|
+
Enforces atomic design methodology (atoms, molecules, organisms, templates, pages) for React Native/Expo projects using Gluestack UI. This skill should be used when creating new components, validating existing component organization, reviewing component placement decisions, or planning component architecture. Use this skill to ensure components are properly categorized, placed in correct directories, and follow composition patterns appropriate to their atomic level.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Atomic Design with Gluestack UI
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
This skill enforces Brad Frost's atomic design methodology adapted for React Native/Expo projects using Gluestack UI v3 + NativeWind v4. It provides clear guidelines for component categorization, directory structure, composition patterns, and testing strategies for each atomic level.
|
|
12
|
+
|
|
13
|
+
## Core Principles
|
|
14
|
+
|
|
15
|
+
### The Atomic Hierarchy
|
|
16
|
+
|
|
17
|
+
Components are organized into five levels, from simplest to most complex:
|
|
18
|
+
|
|
19
|
+
| Level | Definition | State | Examples |
|
|
20
|
+
|-------|------------|-------|----------|
|
|
21
|
+
| **Atoms** | Foundational building blocks that cannot be broken down further while remaining functional | Stateless (purely presentational) | Button, Text, Icon, Input, Badge |
|
|
22
|
+
| **Molecules** | Simple groups of UI elements functioning together as a unit | Isolated state (form validation, toggles) | SearchField, FormField, AvatarWithName |
|
|
23
|
+
| **Organisms** | Complex components composed of molecules and atoms forming distinct interface sections | Feature state, coordinates children | Header, ProductCard, NavigationDrawer |
|
|
24
|
+
| **Templates** | Page-level layouts that place components into a structure (skeleton without real content) | Layout state only | MainLayout, AuthLayout, DashboardLayout |
|
|
25
|
+
| **Pages** | Specific instances of templates with real content and data | Connected to global state | HomeScreen, ProfileScreen, SettingsScreen |
|
|
26
|
+
|
|
27
|
+
### Design Tokens Foundation
|
|
28
|
+
|
|
29
|
+
Design tokens sit **below atoms** as the foundational layer. In this project, tokens are defined in:
|
|
30
|
+
- `components/ui/gluestack-ui-provider/config.ts` - Color tokens (primary, secondary, error, success, etc.)
|
|
31
|
+
- `tailwind.config.js` - Spacing, typography, and other design tokens via NativeWind
|
|
32
|
+
|
|
33
|
+
## Directory Structure
|
|
34
|
+
|
|
35
|
+
### Required Structure
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
components/
|
|
39
|
+
├── ui/ # Gluestack UI library components (DO NOT MODIFY unless extending)
|
|
40
|
+
├── atoms/ # Project-specific atoms
|
|
41
|
+
│ ├── AppIcon/
|
|
42
|
+
│ │ ├── index.tsx
|
|
43
|
+
│ │ ├── AppIcon.test.tsx
|
|
44
|
+
│ │ └── types.ts
|
|
45
|
+
│ └── index.ts # Barrel export for atoms
|
|
46
|
+
├── molecules/ # Composite simple components
|
|
47
|
+
│ ├── SearchField/
|
|
48
|
+
│ │ ├── index.tsx
|
|
49
|
+
│ │ ├── SearchFieldView.tsx
|
|
50
|
+
│ │ ├── SearchField.test.tsx
|
|
51
|
+
│ │ └── types.ts
|
|
52
|
+
│ └── index.ts
|
|
53
|
+
├── organisms/ # Complex feature components
|
|
54
|
+
│ ├── Header/
|
|
55
|
+
│ │ ├── index.tsx
|
|
56
|
+
│ │ ├── HeaderView.tsx
|
|
57
|
+
│ │ ├── Header.test.tsx
|
|
58
|
+
│ │ └── types.ts
|
|
59
|
+
│ └── index.ts
|
|
60
|
+
└── templates/ # Page layouts
|
|
61
|
+
├── MainLayout/
|
|
62
|
+
│ ├── index.tsx
|
|
63
|
+
│ ├── MainLayoutView.tsx
|
|
64
|
+
│ └── types.ts
|
|
65
|
+
└── index.ts
|
|
66
|
+
|
|
67
|
+
features/
|
|
68
|
+
└── [feature-name]/
|
|
69
|
+
├── components/ # Feature-specific components (follow atomic naming)
|
|
70
|
+
│ ├── atoms/
|
|
71
|
+
│ ├── molecules/
|
|
72
|
+
│ └── organisms/
|
|
73
|
+
└── screens/ # Pages (specific to this feature)
|
|
74
|
+
|
|
75
|
+
app/ # Expo Router pages (connect templates with data)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Gluestack UI Components Location
|
|
79
|
+
|
|
80
|
+
The 40+ Gluestack UI components in `components/ui/` serve as the **foundation atom library**. When building custom components:
|
|
81
|
+
|
|
82
|
+
1. **Use Gluestack components as atoms** - Import from `@/components/ui/`
|
|
83
|
+
2. **Extend when needed** - Create project-specific atoms in `components/atoms/`
|
|
84
|
+
3. **Never modify `components/ui/`** - Except for theme customization in `config.ts`
|
|
85
|
+
|
|
86
|
+
## Component Classification Rules
|
|
87
|
+
|
|
88
|
+
### Rule 1: Atoms (Building Blocks)
|
|
89
|
+
|
|
90
|
+
**Definition**: Smallest functional UI elements that cannot be broken down further.
|
|
91
|
+
|
|
92
|
+
**Characteristics**:
|
|
93
|
+
- Stateless and purely presentational
|
|
94
|
+
- Accept props for customization
|
|
95
|
+
- No business logic
|
|
96
|
+
- Highly reusable across the entire app
|
|
97
|
+
|
|
98
|
+
**Gluestack Atoms** (use directly from `@/components/ui/`):
|
|
99
|
+
- Box, Center, HStack, VStack, ScrollView
|
|
100
|
+
- Text, Heading
|
|
101
|
+
- Button, ButtonText, ButtonIcon
|
|
102
|
+
- Input, InputField, InputSlot
|
|
103
|
+
- Icon, Image, Avatar
|
|
104
|
+
- Badge, Divider, Spinner
|
|
105
|
+
|
|
106
|
+
**When to create custom atoms**:
|
|
107
|
+
- Project-specific iconography
|
|
108
|
+
- Branded text variants
|
|
109
|
+
- Wrapper components with default styling
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
/**
|
|
113
|
+
* AppLogo atom - Branded logo component
|
|
114
|
+
* @description Displays the application logo with consistent sizing
|
|
115
|
+
*/
|
|
116
|
+
const AppLogo = memo(function AppLogo({ size = "md" }: AppLogoProps) {
|
|
117
|
+
return (
|
|
118
|
+
<Image
|
|
119
|
+
source={logoSource}
|
|
120
|
+
className={logoSizes[size]}
|
|
121
|
+
alt="App Logo"
|
|
122
|
+
/>
|
|
123
|
+
);
|
|
124
|
+
});
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Rule 2: Molecules (Simple Compositions)
|
|
128
|
+
|
|
129
|
+
**Definition**: Simple groups of atoms functioning together as a unit.
|
|
130
|
+
|
|
131
|
+
**Characteristics**:
|
|
132
|
+
- Combines 2-5 atoms
|
|
133
|
+
- Single responsibility (does one thing well)
|
|
134
|
+
- May have isolated UI state (toggle, validation)
|
|
135
|
+
- No external data fetching
|
|
136
|
+
|
|
137
|
+
**Examples**:
|
|
138
|
+
```typescript
|
|
139
|
+
/**
|
|
140
|
+
* SearchField molecule - Search input with button
|
|
141
|
+
* @description Combines Input and Button atoms for search functionality
|
|
142
|
+
*/
|
|
143
|
+
const SearchField = memo(function SearchField({
|
|
144
|
+
onSearch,
|
|
145
|
+
placeholder
|
|
146
|
+
}: SearchFieldProps) {
|
|
147
|
+
const [value, setValue] = useState("");
|
|
148
|
+
|
|
149
|
+
return (
|
|
150
|
+
<HStack space="sm" className="items-center">
|
|
151
|
+
<Input className="flex-1">
|
|
152
|
+
<InputField
|
|
153
|
+
value={value}
|
|
154
|
+
onChangeText={setValue}
|
|
155
|
+
placeholder={placeholder}
|
|
156
|
+
/>
|
|
157
|
+
</Input>
|
|
158
|
+
<Button onPress={() => onSearch(value)}>
|
|
159
|
+
<ButtonIcon as={SearchIcon} />
|
|
160
|
+
</Button>
|
|
161
|
+
</HStack>
|
|
162
|
+
);
|
|
163
|
+
});
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
**Molecule Checklist**:
|
|
167
|
+
- [ ] Uses only atoms (Gluestack or custom)
|
|
168
|
+
- [ ] Has a single, clear purpose
|
|
169
|
+
- [ ] State is UI-only (no business logic)
|
|
170
|
+
- [ ] Reusable in multiple contexts
|
|
171
|
+
|
|
172
|
+
### Rule 3: Organisms (Complex Sections)
|
|
173
|
+
|
|
174
|
+
**Definition**: Relatively complex components forming distinct interface sections.
|
|
175
|
+
|
|
176
|
+
**Characteristics**:
|
|
177
|
+
- Combines molecules and atoms
|
|
178
|
+
- May have feature-specific state
|
|
179
|
+
- Can coordinate child component behavior
|
|
180
|
+
- Represents a standalone section of UI
|
|
181
|
+
|
|
182
|
+
**Examples**:
|
|
183
|
+
```typescript
|
|
184
|
+
/**
|
|
185
|
+
* ProductCard organism - Complete product display
|
|
186
|
+
* @description Displays product information with actions
|
|
187
|
+
*/
|
|
188
|
+
const ProductCard = memo(function ProductCard({
|
|
189
|
+
product,
|
|
190
|
+
onAddToCart
|
|
191
|
+
}: ProductCardProps) {
|
|
192
|
+
return (
|
|
193
|
+
<Card variant="elevated" size="md">
|
|
194
|
+
<ProductImage source={product.image} /> {/* Atom */}
|
|
195
|
+
<VStack space="sm" className="p-4">
|
|
196
|
+
<Heading size="md">{product.name}</Heading> {/* Atom */}
|
|
197
|
+
<PriceDisplay price={product.price} /> {/* Molecule */}
|
|
198
|
+
<RatingStars rating={product.rating} /> {/* Molecule */}
|
|
199
|
+
<AddToCartButton onPress={onAddToCart} /> {/* Molecule */}
|
|
200
|
+
</VStack>
|
|
201
|
+
</Card>
|
|
202
|
+
);
|
|
203
|
+
});
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
**Organism Checklist**:
|
|
207
|
+
- [ ] Forms a distinct interface section
|
|
208
|
+
- [ ] Combines molecules and/or atoms
|
|
209
|
+
- [ ] Has clear boundaries
|
|
210
|
+
- [ ] May receive data as props (but doesn't fetch)
|
|
211
|
+
|
|
212
|
+
### Rule 4: Templates (Page Layouts)
|
|
213
|
+
|
|
214
|
+
**Definition**: Page-level layouts that place components into a structure.
|
|
215
|
+
|
|
216
|
+
**Characteristics**:
|
|
217
|
+
- Defines layout skeleton with slots
|
|
218
|
+
- No real content (uses placeholder or children)
|
|
219
|
+
- Handles responsive behavior
|
|
220
|
+
- Manages layout-specific state only
|
|
221
|
+
|
|
222
|
+
**Example**:
|
|
223
|
+
```typescript
|
|
224
|
+
/**
|
|
225
|
+
* MainLayout template - Primary app layout
|
|
226
|
+
* @description Provides consistent header, content, and footer structure
|
|
227
|
+
*/
|
|
228
|
+
const MainLayout = memo(function MainLayout({
|
|
229
|
+
children,
|
|
230
|
+
showHeader = true,
|
|
231
|
+
showFooter = true
|
|
232
|
+
}: MainLayoutProps) {
|
|
233
|
+
return (
|
|
234
|
+
<SafeAreaView className="flex-1 bg-background-0">
|
|
235
|
+
{showHeader && <Header />}
|
|
236
|
+
<ScrollView className="flex-1">
|
|
237
|
+
{children}
|
|
238
|
+
</ScrollView>
|
|
239
|
+
{showFooter && <Footer />}
|
|
240
|
+
</SafeAreaView>
|
|
241
|
+
);
|
|
242
|
+
});
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### Rule 5: Pages (Screens)
|
|
246
|
+
|
|
247
|
+
**Definition**: Specific instances of templates with real content and data.
|
|
248
|
+
|
|
249
|
+
**Characteristics**:
|
|
250
|
+
- Connects to global state (Apollo, Context)
|
|
251
|
+
- Handles data fetching
|
|
252
|
+
- Passes data to organisms/molecules
|
|
253
|
+
- Lives in `app/` (Expo Router) or `features/*/screens/`
|
|
254
|
+
|
|
255
|
+
**Example**:
|
|
256
|
+
```typescript
|
|
257
|
+
/**
|
|
258
|
+
* HomeScreen page - Main home page
|
|
259
|
+
* @description Renders home content with fetched data
|
|
260
|
+
*/
|
|
261
|
+
export default function HomeScreen() {
|
|
262
|
+
const { data, loading } = useHomeDataQuery();
|
|
263
|
+
|
|
264
|
+
return (
|
|
265
|
+
<MainLayout>
|
|
266
|
+
{loading ? (
|
|
267
|
+
<LoadingSpinner />
|
|
268
|
+
) : (
|
|
269
|
+
<VStack space="lg">
|
|
270
|
+
<FeaturedProducts products={data.featured} />
|
|
271
|
+
<RecentActivity items={data.activity} />
|
|
272
|
+
</VStack>
|
|
273
|
+
)}
|
|
274
|
+
</MainLayout>
|
|
275
|
+
);
|
|
276
|
+
}
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
## Validation Rules
|
|
280
|
+
|
|
281
|
+
### Enforcement Checklist
|
|
282
|
+
|
|
283
|
+
When creating or reviewing components, verify:
|
|
284
|
+
|
|
285
|
+
1. **Correct Directory Placement**
|
|
286
|
+
- Atoms in `components/atoms/` or `features/*/components/atoms/`
|
|
287
|
+
- Molecules in `components/molecules/` or `features/*/components/molecules/`
|
|
288
|
+
- Organisms in `components/organisms/` or `features/*/components/organisms/`
|
|
289
|
+
- Templates in `components/templates/`
|
|
290
|
+
- Pages in `app/` or `features/*/screens/`
|
|
291
|
+
|
|
292
|
+
2. **State Appropriateness**
|
|
293
|
+
- Atoms: No state
|
|
294
|
+
- Molecules: UI state only (useState for toggles, form values)
|
|
295
|
+
- Organisms: Feature state, may use custom hooks
|
|
296
|
+
- Templates: Layout state only
|
|
297
|
+
- Pages: Connected to global state, data fetching
|
|
298
|
+
|
|
299
|
+
3. **Import Direction** (dependencies flow upward only)
|
|
300
|
+
```
|
|
301
|
+
Pages → Templates → Organisms → Molecules → Atoms → Design Tokens
|
|
302
|
+
```
|
|
303
|
+
- Atoms MUST NOT import from molecules, organisms, templates, or pages
|
|
304
|
+
- Molecules MUST NOT import from organisms, templates, or pages
|
|
305
|
+
- Organisms MUST NOT import from templates or pages
|
|
306
|
+
|
|
307
|
+
4. **Composition Appropriateness**
|
|
308
|
+
- Molecules combine 2-5 atoms
|
|
309
|
+
- Organisms can be complex but should represent a single interface section
|
|
310
|
+
- If an organism becomes too large, extract sub-organisms
|
|
311
|
+
|
|
312
|
+
### Common Mistakes to Avoid
|
|
313
|
+
|
|
314
|
+
| Mistake | Problem | Solution |
|
|
315
|
+
|---------|---------|----------|
|
|
316
|
+
| Atom with useState | Atoms should be stateless | Move state to parent molecule |
|
|
317
|
+
| Molecule fetching data | Data fetching belongs in pages | Accept data as props |
|
|
318
|
+
| Organism in atoms folder | Misclassification | Move to organisms folder |
|
|
319
|
+
| Template with business logic | Templates handle layout only | Move logic to page |
|
|
320
|
+
| Importing organism in atom | Wrong dependency direction | Restructure component hierarchy |
|
|
321
|
+
|
|
322
|
+
## Testing by Atomic Level
|
|
323
|
+
|
|
324
|
+
| Level | Test Type | Focus |
|
|
325
|
+
|-------|-----------|-------|
|
|
326
|
+
| Atoms | Unit + Snapshot | Props rendering, accessibility |
|
|
327
|
+
| Molecules | Unit + Interaction | Composition, isolated state |
|
|
328
|
+
| Organisms | Integration | Data flow, child coordination |
|
|
329
|
+
| Templates | Layout | Slot rendering, responsiveness |
|
|
330
|
+
| Pages | E2E | Full user flows |
|
|
331
|
+
|
|
332
|
+
## Quick Reference
|
|
333
|
+
|
|
334
|
+
### Decision Tree: Which Level?
|
|
335
|
+
|
|
336
|
+
```
|
|
337
|
+
Is it a single, indivisible UI element?
|
|
338
|
+
├─ YES → ATOM
|
|
339
|
+
└─ NO → Does it combine 2-5 atoms for a single purpose?
|
|
340
|
+
├─ YES → MOLECULE
|
|
341
|
+
└─ NO → Does it form a distinct interface section?
|
|
342
|
+
├─ YES → ORGANISM
|
|
343
|
+
└─ NO → Is it a layout skeleton?
|
|
344
|
+
├─ YES → TEMPLATE
|
|
345
|
+
└─ NO → PAGE
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
### Gluestack Component Level Map
|
|
349
|
+
|
|
350
|
+
Reference `references/gluestack-mapping.md` for the complete mapping of all 40 Gluestack UI components to their atomic levels.
|
|
351
|
+
|
|
352
|
+
## Resources
|
|
353
|
+
|
|
354
|
+
### references/
|
|
355
|
+
- `atomic-levels.md` - Detailed definitions with comprehensive examples
|
|
356
|
+
- `gluestack-mapping.md` - Complete Gluestack UI component classification
|
|
357
|
+
- `folder-structure.md` - Detailed directory structure requirements
|
|
358
|
+
|
|
359
|
+
### scripts/
|
|
360
|
+
- `validate_atomic_structure.py` - Validates component placement and imports
|