novahiz 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 +202 -0
- package/NOTICE.md +46 -0
- package/README.md +123 -0
- package/adapters/README.md +13 -0
- package/adapters/opencode/agent/novahiz-agent.md +31 -0
- package/adapters/opencode/commands/novahiz-clean.md +15 -0
- package/adapters/opencode/commands/novahiz-doctor.md +9 -0
- package/adapters/opencode/commands/novahiz-plan.md +24 -0
- package/adapters/opencode/commands/novahiz-status.md +11 -0
- package/adapters/opencode/instructions.md +69 -0
- package/adapters/opencode/novahiz.ts +266 -0
- package/bin/novahiz.cmd +2 -0
- package/bin/novahiz.mjs +7 -0
- package/bundled-skills/AGENTS.md +50 -0
- package/bundled-skills/LICENSE +21 -0
- package/bundled-skills/README.md +202 -0
- package/bundled-skills/SKILL.md +313 -0
- package/bundled-skills/a11y-audit/SKILL.md +211 -0
- package/bundled-skills/a11y-audit/assets/sample-component.tsx +51 -0
- package/bundled-skills/a11y-audit/expected_outputs/sample-contrast-output.txt +39 -0
- package/bundled-skills/a11y-audit/expected_outputs/sample-scan-output.json +34 -0
- package/bundled-skills/a11y-audit/expected_outputs/sample-scan-report.md +63 -0
- package/bundled-skills/a11y-audit/references/aria-patterns.md +223 -0
- package/bundled-skills/a11y-audit/references/audit-report-template.md +46 -0
- package/bundled-skills/a11y-audit/references/ci-cd-integration.md +127 -0
- package/bundled-skills/a11y-audit/references/color-contrast-guide.md +83 -0
- package/bundled-skills/a11y-audit/references/examples-by-framework.md +312 -0
- package/bundled-skills/a11y-audit/references/framework-a11y-patterns.md +661 -0
- package/bundled-skills/a11y-audit/references/testing-checklist.md +41 -0
- package/bundled-skills/a11y-audit/references/wcag-22-new-criteria.md +79 -0
- package/bundled-skills/a11y-audit/references/wcag-quick-ref.md +113 -0
- package/bundled-skills/a11y-audit/scripts/a11y_scanner.py +684 -0
- package/bundled-skills/a11y-audit/scripts/contrast_checker.py +504 -0
- package/bundled-skills/ab-testing/SKILL.md +353 -0
- package/bundled-skills/ab-testing/evals/evals.json +105 -0
- package/bundled-skills/ab-testing/references/sample-size-guide.md +263 -0
- package/bundled-skills/ab-testing/references/test-templates.md +277 -0
- package/bundled-skills/ad-creative/SKILL.md +425 -0
- package/bundled-skills/ad-creative/assets/creative-review-template.html +400 -0
- package/bundled-skills/ad-creative/evals/evals.json +217 -0
- package/bundled-skills/ad-creative/references/creative-review-page.md +106 -0
- package/bundled-skills/ad-creative/references/creative-roadmap.md +118 -0
- package/bundled-skills/ad-creative/references/generative-tools.md +637 -0
- package/bundled-skills/ad-creative/references/hook-system.md +115 -0
- package/bundled-skills/ad-creative/references/imessage-video-ads.md +201 -0
- package/bundled-skills/ad-creative/references/meta-creative-formats.md +114 -0
- package/bundled-skills/ad-creative/references/motion-video-ads.md +126 -0
- package/bundled-skills/ad-creative/references/platform-specs.md +213 -0
- package/bundled-skills/ad-creative/references/short-form-video-specs.md +213 -0
- package/bundled-skills/ad-creative/references/static-ad-templates.md +308 -0
- package/bundled-skills/ads/SKILL.md +499 -0
- package/bundled-skills/ads/evals/evals.json +157 -0
- package/bundled-skills/ads/references/abm-playbook.md +93 -0
- package/bundled-skills/ads/references/ad-copy-templates.md +207 -0
- package/bundled-skills/ads/references/audience-targeting.md +243 -0
- package/bundled-skills/ads/references/audit-guardrails.md +83 -0
- package/bundled-skills/ads/references/b2b-paid-playbook.md +115 -0
- package/bundled-skills/ads/references/conversion-tracking.md +361 -0
- package/bundled-skills/ads/references/creative-research-automation.md +103 -0
- package/bundled-skills/ads/references/google-ads-audit-checklist.md +84 -0
- package/bundled-skills/ads/references/google-search-playbook.md +120 -0
- package/bundled-skills/ads/references/linkedin-b2b-playbook.md +107 -0
- package/bundled-skills/ads/references/meta-decision-system.md +176 -0
- package/bundled-skills/ads/references/payback-period.md +69 -0
- package/bundled-skills/ads/references/platform-setup-checklists.md +277 -0
- package/bundled-skills/ads/references/rsa-output-spec.md +88 -0
- package/bundled-skills/adversarial-reviewer/SKILL.md +247 -0
- package/bundled-skills/agent-device/SKILL.md +20 -0
- package/bundled-skills/ai-seo/SKILL.md +488 -0
- package/bundled-skills/ai-seo/evals/evals.json +135 -0
- package/bundled-skills/ai-seo/references/agent-readiness.md +57 -0
- package/bundled-skills/ai-seo/references/citations-vs-recommendations.md +85 -0
- package/bundled-skills/ai-seo/references/content-patterns.md +287 -0
- package/bundled-skills/ai-seo/references/content-types.md +71 -0
- package/bundled-skills/ai-seo/references/format-volatility.md +98 -0
- package/bundled-skills/ai-seo/references/okf.md +104 -0
- package/bundled-skills/ai-seo/references/platform-ranking-factors.md +154 -0
- package/bundled-skills/ai-seo/references/youtube-ai-citations.md +60 -0
- package/bundled-skills/analytics/SKILL.md +310 -0
- package/bundled-skills/analytics/evals/evals.json +90 -0
- package/bundled-skills/analytics/references/event-library.md +260 -0
- package/bundled-skills/analytics/references/ga4-implementation.md +300 -0
- package/bundled-skills/analytics/references/gtm-implementation.md +390 -0
- package/bundled-skills/android-emulator/SKILL.md +32 -0
- package/bundled-skills/anti-AI-design/SKILL.md +189 -0
- package/bundled-skills/anti-pattern-detector/SKILL.md +185 -0
- package/bundled-skills/anti-pattern-detector/references/async-network-patterns.md +581 -0
- package/bundled-skills/anti-pattern-detector/references/build-deploy-patterns.md +554 -0
- package/bundled-skills/anti-pattern-detector/references/cache-patterns.md +446 -0
- package/bundled-skills/anti-pattern-detector/references/cloud-infra-patterns.md +538 -0
- package/bundled-skills/anti-pattern-detector/references/concurrency-patterns.md +558 -0
- package/bundled-skills/anti-pattern-detector/references/language-specific-patterns.md +740 -0
- package/bundled-skills/anti-pattern-detector/references/monitoring-patterns.md +456 -0
- package/bundled-skills/api-design-reviewer/SKILL.md +433 -0
- package/bundled-skills/api-design-reviewer/references/api_antipatterns.md +680 -0
- package/bundled-skills/api-design-reviewer/references/rest_design_rules.md +487 -0
- package/bundled-skills/api-design-reviewer/scripts/api_linter.py +956 -0
- package/bundled-skills/api-design-reviewer/scripts/api_scorecard.py +1661 -0
- package/bundled-skills/api-design-reviewer/scripts/breaking_change_detector.py +1102 -0
- package/bundled-skills/apple-hig-expert/SKILL.md +108 -0
- package/bundled-skills/apple-hig-expert/references/accessibility.md +55 -0
- package/bundled-skills/apple-hig-expert/references/platform-specifics.md +48 -0
- package/bundled-skills/apple-hig-expert/references/visual-design.md +69 -0
- package/bundled-skills/apple-hig-expert/scripts/hig_checker.py +97 -0
- package/bundled-skills/apple-hig-expert/templates/hig-audit-template.md +83 -0
- package/bundled-skills/build-graph/SKILL.md +38 -0
- package/bundled-skills/claude-history-ingest/SKILL.md +463 -0
- package/bundled-skills/claude-history-ingest/references/claude-data-format.md +118 -0
- package/bundled-skills/clean-code/SKILL.md +99 -0
- package/bundled-skills/code-reviewer/README.md +92 -0
- package/bundled-skills/code-reviewer/SKILL.md +183 -0
- package/bundled-skills/code-reviewer/assets/sample_c_clean.c +71 -0
- package/bundled-skills/code-reviewer/assets/sample_c_smells.c +66 -0
- package/bundled-skills/code-reviewer/assets/sample_csharp_clean.cs +100 -0
- package/bundled-skills/code-reviewer/assets/sample_csharp_smells.cs +78 -0
- package/bundled-skills/code-reviewer/assets/sample_java_clean.java +55 -0
- package/bundled-skills/code-reviewer/assets/sample_java_smells.java +56 -0
- package/bundled-skills/code-reviewer/expected_outputs/sample_c_clean_quality.json +65 -0
- package/bundled-skills/code-reviewer/expected_outputs/sample_c_smells_quality.json +155 -0
- package/bundled-skills/code-reviewer/expected_outputs/sample_csharp_clean_quality.json +135 -0
- package/bundled-skills/code-reviewer/expected_outputs/sample_csharp_smells_quality.json +143 -0
- package/bundled-skills/code-reviewer/expected_outputs/sample_java_clean_quality.json +53 -0
- package/bundled-skills/code-reviewer/expected_outputs/sample_java_smells_quality.json +83 -0
- package/bundled-skills/code-reviewer/languages/c.md +103 -0
- package/bundled-skills/code-reviewer/languages/cpp.md +103 -0
- package/bundled-skills/code-reviewer/languages/csharp.md +97 -0
- package/bundled-skills/code-reviewer/languages/dart.md +108 -0
- package/bundled-skills/code-reviewer/languages/go.md +92 -0
- package/bundled-skills/code-reviewer/languages/java.md +103 -0
- package/bundled-skills/code-reviewer/languages/kotlin.md +88 -0
- package/bundled-skills/code-reviewer/languages/php.md +109 -0
- package/bundled-skills/code-reviewer/languages/python.md +94 -0
- package/bundled-skills/code-reviewer/languages/ruby.md +105 -0
- package/bundled-skills/code-reviewer/languages/rust.md +99 -0
- package/bundled-skills/code-reviewer/languages/swift.md +88 -0
- package/bundled-skills/code-reviewer/languages/typescript.md +97 -0
- package/bundled-skills/code-reviewer/rules/universal.md +49 -0
- package/bundled-skills/code-reviewer/scripts/code_quality_checker.py +1020 -0
- package/bundled-skills/code-reviewer/scripts/pr_analyzer.py +535 -0
- package/bundled-skills/code-reviewer/scripts/review_report_generator.py +505 -0
- package/bundled-skills/code-understand/SKILL.md +90 -0
- package/bundled-skills/codex-history-ingest/SKILL.md +248 -0
- package/bundled-skills/codex-history-ingest/references/codex-data-format.md +82 -0
- package/bundled-skills/cold-email/SKILL.md +159 -0
- package/bundled-skills/cold-email/evals/evals.json +94 -0
- package/bundled-skills/cold-email/references/benchmarks.md +83 -0
- package/bundled-skills/cold-email/references/follow-up-sequences.md +81 -0
- package/bundled-skills/cold-email/references/frameworks.md +90 -0
- package/bundled-skills/cold-email/references/personalization.md +79 -0
- package/bundled-skills/cold-email/references/subject-lines.md +53 -0
- package/bundled-skills/competitor-profiling/SKILL.md +415 -0
- package/bundled-skills/competitor-profiling/evals/evals.json +85 -0
- package/bundled-skills/competitor-profiling/references/templates.md +167 -0
- package/bundled-skills/competitor-profiling/references/tool-reference.md +179 -0
- package/bundled-skills/computer-use/SKILL.md +41 -0
- package/bundled-skills/content-strategy/SKILL.md +439 -0
- package/bundled-skills/content-strategy/evals/evals.json +116 -0
- package/bundled-skills/content-strategy/references/content-distribution.md +83 -0
- package/bundled-skills/content-strategy/references/headless-cms.md +194 -0
- package/bundled-skills/copilot-history-ingest/SKILL.md +376 -0
- package/bundled-skills/copilot-history-ingest/references/copilot-data-format.md +321 -0
- package/bundled-skills/copy-editing/SKILL.md +457 -0
- package/bundled-skills/copy-editing/evals/evals.json +89 -0
- package/bundled-skills/copy-editing/references/checklist.md +66 -0
- package/bundled-skills/copy-editing/references/content-refresh.md +38 -0
- package/bundled-skills/copy-editing/references/plain-english-alternatives.md +394 -0
- package/bundled-skills/copywriting/SKILL.md +256 -0
- package/bundled-skills/copywriting/evals/evals.json +126 -0
- package/bundled-skills/copywriting/references/copy-frameworks.md +433 -0
- package/bundled-skills/copywriting/references/natural-transitions.md +272 -0
- package/bundled-skills/cro/SKILL.md +187 -0
- package/bundled-skills/cro/evals/evals.json +111 -0
- package/bundled-skills/cro/references/experiments.md +248 -0
- package/bundled-skills/cro/references/form.md +422 -0
- package/bundled-skills/cross-linker/SKILL.md +309 -0
- package/bundled-skills/customer-research/SKILL.md +305 -0
- package/bundled-skills/customer-research/evals/evals.json +176 -0
- package/bundled-skills/customer-research/references/interviews-and-surveys.md +155 -0
- package/bundled-skills/customer-research/references/source-guides.md +401 -0
- package/bundled-skills/daily-update/SKILL.md +223 -0
- package/bundled-skills/dart-add-unit-test/SKILL.md +122 -0
- package/bundled-skills/dart-build-cli-app/SKILL.md +185 -0
- package/bundled-skills/dart-collect-coverage/SKILL.md +141 -0
- package/bundled-skills/dart-fix-runtime-errors/SKILL.md +166 -0
- package/bundled-skills/dart-generate-test-mocks/SKILL.md +155 -0
- package/bundled-skills/dart-migrate-to-checks-package/SKILL.md +528 -0
- package/bundled-skills/dart-resolve-package-conflicts/SKILL.md +116 -0
- package/bundled-skills/dart-run-static-analysis/SKILL.md +104 -0
- package/bundled-skills/dart-setup-ffi-assets/SKILL.md +419 -0
- package/bundled-skills/dart-use-doc-examples/SKILL.md +96 -0
- package/bundled-skills/dart-use-ffigen/SKILL.md +218 -0
- package/bundled-skills/dart-use-pattern-matching/SKILL.md +146 -0
- package/bundled-skills/dart-use-primary-constructors/SKILL.md +262 -0
- package/bundled-skills/dart-write-documentation/SKILL.md +136 -0
- package/bundled-skills/database-designer/README.md +388 -0
- package/bundled-skills/database-designer/SKILL.md +314 -0
- package/bundled-skills/database-designer/assets/sample_query_patterns.json +375 -0
- package/bundled-skills/database-designer/assets/sample_schema.json +372 -0
- package/bundled-skills/database-designer/assets/sample_schema.sql +207 -0
- package/bundled-skills/database-designer/expected_outputs/index_optimization_sample.txt +60 -0
- package/bundled-skills/database-designer/expected_outputs/migration_sample.txt +124 -0
- package/bundled-skills/database-designer/expected_outputs/schema_analysis_sample.txt +222 -0
- package/bundled-skills/database-designer/index_optimizer.py +926 -0
- package/bundled-skills/database-designer/migration_generator.py +1199 -0
- package/bundled-skills/database-designer/references/database-design-reference.md +476 -0
- package/bundled-skills/database-designer/references/database_selection_decision_tree.md +373 -0
- package/bundled-skills/database-designer/references/index_strategy_patterns.md +424 -0
- package/bundled-skills/database-designer/references/normalization_guide.md +354 -0
- package/bundled-skills/database-designer/schema_analyzer.py +982 -0
- package/bundled-skills/debug-issue/SKILL.md +28 -0
- package/bundled-skills/defuddle/SKILL.md +41 -0
- package/bundled-skills/dependency-auditor/README.md +524 -0
- package/bundled-skills/dependency-auditor/SKILL.md +85 -0
- package/bundled-skills/dependency-auditor/assets/sample_go.mod +53 -0
- package/bundled-skills/dependency-auditor/assets/sample_package.json +72 -0
- package/bundled-skills/dependency-auditor/assets/sample_requirements.txt +71 -0
- package/bundled-skills/dependency-auditor/expected_outputs/sample_license_report.txt +37 -0
- package/bundled-skills/dependency-auditor/expected_outputs/sample_upgrade_plan.txt +59 -0
- package/bundled-skills/dependency-auditor/expected_outputs/sample_vulnerability_report.json +71 -0
- package/bundled-skills/dependency-auditor/references/dependency_management_best_practices.md +643 -0
- package/bundled-skills/dependency-auditor/references/license_compatibility_matrix.md +238 -0
- package/bundled-skills/dependency-auditor/references/vulnerability_assessment_guide.md +461 -0
- package/bundled-skills/dependency-auditor/scripts/dep_scanner.py +794 -0
- package/bundled-skills/dependency-auditor/scripts/license_checker.py +996 -0
- package/bundled-skills/dependency-auditor/scripts/upgrade_planner.py +1029 -0
- package/bundled-skills/dependency-auditor/test-inventory.json +421 -0
- package/bundled-skills/dependency-auditor/test-project/package.json +72 -0
- package/bundled-skills/design-taste-frontend/SKILL.md +247 -0
- package/bundled-skills/dogfood/SKILL.md +27 -0
- package/bundled-skills/eas-app-stores/SKILL.md +176 -0
- package/bundled-skills/eas-app-stores/agents/openai.yaml +4 -0
- package/bundled-skills/eas-app-stores/references/app-store-metadata.md +497 -0
- package/bundled-skills/eas-app-stores/references/ios-app-store.md +376 -0
- package/bundled-skills/eas-app-stores/references/native-ios.md +167 -0
- package/bundled-skills/eas-app-stores/references/play-store.md +244 -0
- package/bundled-skills/eas-app-stores/references/testflight.md +62 -0
- package/bundled-skills/eas-app-stores/references/workflows.md +120 -0
- package/bundled-skills/eas-hosting/SKILL.md +431 -0
- package/bundled-skills/eas-hosting/agents/openai.yaml +4 -0
- package/bundled-skills/eas-observe/SKILL.md +54 -0
- package/bundled-skills/eas-observe/agents/openai.yaml +4 -0
- package/bundled-skills/eas-observe/references/metrics.md +98 -0
- package/bundled-skills/eas-observe/references/queries.md +403 -0
- package/bundled-skills/eas-observe/references/setup.md +476 -0
- package/bundled-skills/eas-observe/references/third-party.md +136 -0
- package/bundled-skills/eas-simulator/SKILL.md +208 -0
- package/bundled-skills/eas-simulator/agents/openai.yaml +4 -0
- package/bundled-skills/eas-simulator/references/controllers.md +106 -0
- package/bundled-skills/eas-simulator/references/run-your-app.md +224 -0
- package/bundled-skills/eas-simulator/references/troubleshooting.md +44 -0
- package/bundled-skills/eas-update/SKILL.md +146 -0
- package/bundled-skills/eas-update/agents/openai.yaml +4 -0
- package/bundled-skills/eas-update-insights/SKILL.md +238 -0
- package/bundled-skills/eas-update-insights/agents/openai.yaml +4 -0
- package/bundled-skills/eas-update-insights/references/channel-insights-schema.md +47 -0
- package/bundled-skills/eas-update-insights/references/update-insights-schema.md +69 -0
- package/bundled-skills/eas-workflows/SKILL.md +99 -0
- package/bundled-skills/eas-workflows/agents/openai.yaml +4 -0
- package/bundled-skills/eas-workflows/scripts/fetch.js +109 -0
- package/bundled-skills/eas-workflows/scripts/package.json +6 -0
- package/bundled-skills/emails/SKILL.md +311 -0
- package/bundled-skills/emails/evals/evals.json +93 -0
- package/bundled-skills/emails/references/copy-guidelines.md +113 -0
- package/bundled-skills/emails/references/email-types.md +515 -0
- package/bundled-skills/emails/references/sequence-templates.md +168 -0
- package/bundled-skills/engineering-standards/SKILL.md +736 -0
- package/bundled-skills/env-secrets-manager/SKILL.md +260 -0
- package/bundled-skills/env-secrets-manager/references/secret-patterns.md +41 -0
- package/bundled-skills/env-secrets-manager/references/validation-detection-rotation.md +358 -0
- package/bundled-skills/env-secrets-manager/scripts/env_auditor.py +145 -0
- package/bundled-skills/explore-codebase/SKILL.md +29 -0
- package/bundled-skills/expo-animation/LICENSE +21 -0
- package/bundled-skills/expo-animation/RECIPES.md +385 -0
- package/bundled-skills/expo-animation/SKILL.md +267 -0
- package/bundled-skills/expo-animation/agents/openai.yaml +4 -0
- package/bundled-skills/expo-app-clip/SKILL.md +290 -0
- package/bundled-skills/expo-app-clip/agents/openai.yaml +4 -0
- package/bundled-skills/expo-app-clip/references/native-module.md +96 -0
- package/bundled-skills/expo-brownfield/SKILL.md +62 -0
- package/bundled-skills/expo-brownfield/agents/openai.yaml +4 -0
- package/bundled-skills/expo-brownfield/references/brownfield-integrated.md +526 -0
- package/bundled-skills/expo-brownfield/references/brownfield-isolated.md +451 -0
- package/bundled-skills/expo-brownfield/references/comparison.md +63 -0
- package/bundled-skills/expo-brownfield/references/troubleshooting.md +88 -0
- package/bundled-skills/expo-data-fetching/SKILL.md +478 -0
- package/bundled-skills/expo-data-fetching/agents/openai.yaml +4 -0
- package/bundled-skills/expo-data-fetching/references/expo-router-loaders.md +341 -0
- package/bundled-skills/expo-data-fetching/references/offline-and-cancellation.md +68 -0
- package/bundled-skills/expo-design-system/SKILL.md +376 -0
- package/bundled-skills/expo-design-system/agents/openai.yaml +4 -0
- package/bundled-skills/expo-design-system/references/audit.md +190 -0
- package/bundled-skills/expo-design-system/references/native-slop.md +74 -0
- package/bundled-skills/expo-dev-client/SKILL.md +182 -0
- package/bundled-skills/expo-dev-client/agents/openai.yaml +4 -0
- package/bundled-skills/expo-dom/SKILL.md +425 -0
- package/bundled-skills/expo-dom/agents/openai.yaml +4 -0
- package/bundled-skills/expo-examples/SKILL.md +106 -0
- package/bundled-skills/expo-examples/agents/openai.yaml +4 -0
- package/bundled-skills/expo-examples/references/catalog.md +105 -0
- package/bundled-skills/expo-migrate-module/SKILL.md +113 -0
- package/bundled-skills/expo-migrate-module/agents/openai.yaml +4 -0
- package/bundled-skills/expo-migrate-module/references/compatibility.md +73 -0
- package/bundled-skills/expo-migrate-module/references/example.md +212 -0
- package/bundled-skills/expo-migrate-module/references/migration-map.md +306 -0
- package/bundled-skills/expo-module/SKILL.md +151 -0
- package/bundled-skills/expo-module/agents/openai.yaml +4 -0
- package/bundled-skills/expo-module/references/config-plugin.md +90 -0
- package/bundled-skills/expo-module/references/create-expo-module.md +206 -0
- package/bundled-skills/expo-module/references/lifecycle.md +127 -0
- package/bundled-skills/expo-module/references/module-config.md +48 -0
- package/bundled-skills/expo-module/references/native-module.md +286 -0
- package/bundled-skills/expo-module/references/native-view.md +171 -0
- package/bundled-skills/expo-native-ui/SKILL.md +201 -0
- package/bundled-skills/expo-native-ui/agents/openai.yaml +4 -0
- package/bundled-skills/expo-native-ui/references/controls.md +231 -0
- package/bundled-skills/expo-native-ui/references/gradients.md +106 -0
- package/bundled-skills/expo-native-ui/references/icons.md +232 -0
- package/bundled-skills/expo-native-ui/references/media.md +193 -0
- package/bundled-skills/expo-native-ui/references/storage.md +121 -0
- package/bundled-skills/expo-native-ui/references/visual-effects.md +198 -0
- package/bundled-skills/expo-native-ui/references/webgpu-three.md +605 -0
- package/bundled-skills/expo-overview/SKILL.md +115 -0
- package/bundled-skills/expo-overview/agents/openai.yaml +4 -0
- package/bundled-skills/expo-project-structure/SKILL.md +114 -0
- package/bundled-skills/expo-project-structure/agents/openai.yaml +4 -0
- package/bundled-skills/expo-router/SKILL.md +240 -0
- package/bundled-skills/expo-router/agents/openai.yaml +4 -0
- package/bundled-skills/expo-router/references/form-sheet.md +253 -0
- package/bundled-skills/expo-router/references/route-structure.md +229 -0
- package/bundled-skills/expo-router/references/search.md +248 -0
- package/bundled-skills/expo-router/references/tabs.md +433 -0
- package/bundled-skills/expo-router/references/toolbar-and-headers.md +284 -0
- package/bundled-skills/expo-router/references/zoom-transitions.md +158 -0
- package/bundled-skills/expo-skill-eval/SKILL.md +314 -0
- package/bundled-skills/expo-skill-eval/agents/visual-grader.md +52 -0
- package/bundled-skills/expo-skill-eval/references/design-rubric.md +45 -0
- package/bundled-skills/expo-skill-eval/references/runtime-matrix.md +34 -0
- package/bundled-skills/expo-skill-eval/scripts/check-static.sh +64 -0
- package/bundled-skills/expo-skill-eval/scripts/clean-fixture.sh +56 -0
- package/bundled-skills/expo-skill-eval/scripts/generate_viewer.py +450 -0
- package/bundled-skills/expo-skill-eval/scripts/latest-sdk.sh +46 -0
- package/bundled-skills/expo-skill-eval/scripts/make-fixture.sh +95 -0
- package/bundled-skills/expo-skill-eval/scripts/make-workspace.sh +31 -0
- package/bundled-skills/expo-skill-eval/scripts/snapshot-android.sh +284 -0
- package/bundled-skills/expo-skill-eval/scripts/snapshot-ios.sh +132 -0
- package/bundled-skills/expo-skill-eval/scripts/snapshot-web.sh +61 -0
- package/bundled-skills/expo-skill-feedback/SKILL.md +87 -0
- package/bundled-skills/expo-skill-feedback/agents/openai.yaml +4 -0
- package/bundled-skills/expo-skill-feedback/scripts/skill-event.cjs +180 -0
- package/bundled-skills/expo-skill-feedback/scripts/telemetry.cjs +65 -0
- package/bundled-skills/expo-skill-feedback/scripts/telemetry_common.cjs +171 -0
- package/bundled-skills/expo-ui/SKILL.md +101 -0
- package/bundled-skills/expo-ui/agents/openai.yaml +4 -0
- package/bundled-skills/expo-ui/references/drop-in-replacements.md +27 -0
- package/bundled-skills/expo-ui/references/jetpack-compose.md +73 -0
- package/bundled-skills/expo-ui/references/swift-ui.md +73 -0
- package/bundled-skills/expo-ui/references/universal.md +104 -0
- package/bundled-skills/expo-ui/scripts/list-components.js +193 -0
- package/bundled-skills/expo-upgrade/SKILL.md +150 -0
- package/bundled-skills/expo-upgrade/agents/openai.yaml +4 -0
- package/bundled-skills/expo-upgrade/references/expo-av-to-audio.md +132 -0
- package/bundled-skills/expo-upgrade/references/expo-av-to-video.md +160 -0
- package/bundled-skills/expo-upgrade/references/native-tabs.md +124 -0
- package/bundled-skills/expo-upgrade/references/new-architecture.md +79 -0
- package/bundled-skills/expo-upgrade/references/react-19.md +79 -0
- package/bundled-skills/expo-upgrade/references/react-compiler.md +59 -0
- package/bundled-skills/expo-upgrade/references/react-navigation-to-expo-router.md +61 -0
- package/bundled-skills/expo-web-to-native/SKILL.md +91 -0
- package/bundled-skills/expo-web-to-native/agents/openai.yaml +4 -0
- package/bundled-skills/expo-web-to-native/references/false-friends.md +119 -0
- package/bundled-skills/expo-web-to-native/references/native-patterns.md +39 -0
- package/bundled-skills/expo-web-to-native/references/run-as-goal.md +48 -0
- package/bundled-skills/expo-web-to-native/references/verify-on-device.md +45 -0
- package/bundled-skills/find-skills/SKILL.md +141 -0
- package/bundled-skills/fix/SKILL.md +113 -0
- package/bundled-skills/fix/flaky-taxonomy.md +134 -0
- package/bundled-skills/flutter-add-integration-test/SKILL.md +163 -0
- package/bundled-skills/flutter-add-widget-preview/SKILL.md +145 -0
- package/bundled-skills/flutter-add-widget-test/SKILL.md +154 -0
- package/bundled-skills/flutter-apply-architecture-best-practices/SKILL.md +162 -0
- package/bundled-skills/flutter-build-responsive-layout/SKILL.md +139 -0
- package/bundled-skills/flutter-fix-layout-issues/SKILL.md +130 -0
- package/bundled-skills/flutter-implement-json-serialization/SKILL.md +153 -0
- package/bundled-skills/flutter-setup-declarative-routing/SKILL.md +255 -0
- package/bundled-skills/flutter-setup-localization/SKILL.md +210 -0
- package/bundled-skills/flutter-use-http-package/SKILL.md +174 -0
- package/bundled-skills/gate/SKILL.md +13 -0
- package/bundled-skills/graph-colorize/SKILL.md +180 -0
- package/bundled-skills/hermes-history-ingest/SKILL.md +239 -0
- package/bundled-skills/hermes-history-ingest/references/hermes-data-format.md +131 -0
- package/bundled-skills/humanizer/SKILL.md +374 -0
- package/bundled-skills/impeccable/SKILL.md +89 -0
- package/bundled-skills/impeccable/reference/adapt.md +312 -0
- package/bundled-skills/impeccable/reference/adapt.native.md +58 -0
- package/bundled-skills/impeccable/reference/android.md +46 -0
- package/bundled-skills/impeccable/reference/animate.md +89 -0
- package/bundled-skills/impeccable/reference/audit.md +136 -0
- package/bundled-skills/impeccable/reference/audit.native.md +139 -0
- package/bundled-skills/impeccable/reference/bolder.md +33 -0
- package/bundled-skills/impeccable/reference/clarify.md +94 -0
- package/bundled-skills/impeccable/reference/colorize.md +86 -0
- package/bundled-skills/impeccable/reference/craft-floor.md +44 -0
- package/bundled-skills/impeccable/reference/craft.md +5 -0
- package/bundled-skills/impeccable/reference/critique.md +806 -0
- package/bundled-skills/impeccable/reference/degraded/asset-producer.md +37 -0
- package/bundled-skills/impeccable/reference/degraded/documenter.md +24 -0
- package/bundled-skills/impeccable/reference/degraded/finish-reviewer.md +38 -0
- package/bundled-skills/impeccable/reference/degraded/manual-edit-applier.md +92 -0
- package/bundled-skills/impeccable/reference/delight.md +70 -0
- package/bundled-skills/impeccable/reference/distill.md +111 -0
- package/bundled-skills/impeccable/reference/doctor.md +54 -0
- package/bundled-skills/impeccable/reference/document.md +416 -0
- package/bundled-skills/impeccable/reference/extract.md +69 -0
- package/bundled-skills/impeccable/reference/harden.md +336 -0
- package/bundled-skills/impeccable/reference/hooks.md +111 -0
- package/bundled-skills/impeccable/reference/init.md +131 -0
- package/bundled-skills/impeccable/reference/ios.md +51 -0
- package/bundled-skills/impeccable/reference/layout.md +84 -0
- package/bundled-skills/impeccable/reference/live-setup.md +104 -0
- package/bundled-skills/impeccable/reference/live.md +325 -0
- package/bundled-skills/impeccable/reference/new-work.md +145 -0
- package/bundled-skills/impeccable/reference/onboard.md +234 -0
- package/bundled-skills/impeccable/reference/operate.md +61 -0
- package/bundled-skills/impeccable/reference/optimize.md +258 -0
- package/bundled-skills/impeccable/reference/overdrive.md +127 -0
- package/bundled-skills/impeccable/reference/polish.md +105 -0
- package/bundled-skills/impeccable/reference/quieter.md +99 -0
- package/bundled-skills/impeccable/reference/routing.md +24 -0
- package/bundled-skills/impeccable/reference/shape.md +59 -0
- package/bundled-skills/impeccable/reference/typeset.md +80 -0
- package/bundled-skills/impeccable/reference/visualize.md +46 -0
- package/bundled-skills/impeccable/scripts/VERSION +1 -0
- package/bundled-skills/impeccable/scripts/bin/windows-x64/impeccable.exe +0 -0
- package/bundled-skills/impeccable/scripts/command-metadata.json +94 -0
- package/bundled-skills/impeccable/scripts/data/font-index-failures.json +121 -0
- package/bundled-skills/impeccable/scripts/data/font-index.json +1 -0
- package/bundled-skills/impeccable/scripts/impeccable +206 -0
- package/bundled-skills/impeccable/scripts/impeccable.cmd +214 -0
- package/bundled-skills/impeccable/scripts/live-browser-dom.js +167 -0
- package/bundled-skills/impeccable/scripts/live-browser-ignores.js +242 -0
- package/bundled-skills/impeccable/scripts/live-browser-session.js +144 -0
- package/bundled-skills/impeccable/scripts/live-browser.js +12990 -0
- package/bundled-skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
- package/bundled-skills/impl-validator/SKILL.md +118 -0
- package/bundled-skills/ios-simulator/SKILL.md +32 -0
- package/bundled-skills/json-canvas/SKILL.md +244 -0
- package/bundled-skills/json-canvas/references/EXAMPLES.md +329 -0
- package/bundled-skills/launch/SKILL.md +381 -0
- package/bundled-skills/launch/evals/evals.json +106 -0
- package/bundled-skills/llm-wiki/SKILL.md +661 -0
- package/bundled-skills/llm-wiki/references/WRITING.md +28 -0
- package/bundled-skills/llm-wiki/references/karpathy-pattern.md +45 -0
- package/bundled-skills/marketing-plan/SKILL.md +300 -0
- package/bundled-skills/marketing-plan/evals/evals.json +112 -0
- package/bundled-skills/marketing-plan/references/aarrr-framework.md +180 -0
- package/bundled-skills/marketing-plan/references/budget-planning.md +168 -0
- package/bundled-skills/marketing-plan/references/client-types.md +373 -0
- package/bundled-skills/marketing-plan/references/current-state-rubric.md +255 -0
- package/bundled-skills/marketing-plan/references/example-quietude.md +972 -0
- package/bundled-skills/marketing-plan/references/funding-stage-unlocks.md +230 -0
- package/bundled-skills/marketing-plan/references/growth-patterns.md +190 -0
- package/bundled-skills/marketing-plan/references/idea-cross-reference.md +265 -0
- package/bundled-skills/marketing-plan/references/measurement-framework.md +213 -0
- package/bundled-skills/marketing-plan/references/methodology.md +363 -0
- package/bundled-skills/marketing-plan/references/ops-stack-mapping.md +197 -0
- package/bundled-skills/marketing-plan/references/plan-template.md +494 -0
- package/bundled-skills/marketing-plan/references/team-and-agency-model.md +278 -0
- package/bundled-skills/marketing-psychology/SKILL.md +455 -0
- package/bundled-skills/marketing-psychology/evals/evals.json +88 -0
- package/bundled-skills/mcp-server-builder/README.md +50 -0
- package/bundled-skills/mcp-server-builder/SKILL.md +100 -0
- package/bundled-skills/mcp-server-builder/references/openapi-extraction-guide.md +34 -0
- package/bundled-skills/mcp-server-builder/references/production-hardening-guide.md +78 -0
- package/bundled-skills/mcp-server-builder/references/python-server-template.md +22 -0
- package/bundled-skills/mcp-server-builder/references/typescript-server-template.md +19 -0
- package/bundled-skills/mcp-server-builder/references/validation-checklist.md +30 -0
- package/bundled-skills/mcp-server-builder/scripts/mcp_validator.py +186 -0
- package/bundled-skills/mcp-server-builder/scripts/openapi_to_mcp.py +284 -0
- package/bundled-skills/memory/SKILL.md +10 -0
- package/bundled-skills/memory-bridge/SKILL.md +163 -0
- package/bundled-skills/memory-save/SKILL.md +88 -0
- package/bundled-skills/migrate/SKILL.md +135 -0
- package/bundled-skills/migrate/cypress-mapping.md +79 -0
- package/bundled-skills/migrate/selenium-mapping.md +94 -0
- package/bundled-skills/novahiz-analyse/SKILL.md +74 -0
- package/bundled-skills/novahiz-audit/SKILL.md +75 -0
- package/bundled-skills/novahiz-clarify/SKILL.md +94 -0
- package/bundled-skills/novahiz-converge/SKILL.md +76 -0
- package/bundled-skills/novahiz-gate/SKILL.md +82 -0
- package/bundled-skills/novahiz-implement/SKILL.md +80 -0
- package/bundled-skills/novahiz-memory/SKILL.md +58 -0
- package/bundled-skills/novahiz-plan/SKILL.md +100 -0
- package/bundled-skills/novahiz-planner/SKILL.md +104 -0
- package/bundled-skills/novahiz-task/SKILL.md +105 -0
- package/bundled-skills/obsidian-bases/SKILL.md +499 -0
- package/bundled-skills/obsidian-bases/references/FUNCTIONS_REFERENCE.md +173 -0
- package/bundled-skills/obsidian-cli/SKILL.md +106 -0
- package/bundled-skills/obsidian-layout-adjustment/SKILL.md +226 -0
- package/bundled-skills/obsidian-layout-adjustment/evals/evals.json +53 -0
- package/bundled-skills/obsidian-layout-adjustment/references/workflow-reference.md +212 -0
- package/bundled-skills/obsidian-markdown/SKILL.md +196 -0
- package/bundled-skills/obsidian-markdown/references/CALLOUTS.md +58 -0
- package/bundled-skills/obsidian-markdown/references/EMBEDS.md +70 -0
- package/bundled-skills/obsidian-markdown/references/PROPERTIES.md +61 -0
- package/bundled-skills/offers/SKILL.md +155 -0
- package/bundled-skills/offers/evals/evals.json +21 -0
- package/bundled-skills/offers/references/bonus-stacking.md +150 -0
- package/bundled-skills/offers/references/examples.md +215 -0
- package/bundled-skills/offers/references/guarantee-design.md +172 -0
- package/bundled-skills/offers/references/offer-anatomy.md +203 -0
- package/bundled-skills/offers/references/offer-formats.md +240 -0
- package/bundled-skills/offers/references/saas-offers.md +116 -0
- package/bundled-skills/offers/references/scarcity-urgency.md +175 -0
- package/bundled-skills/offers/references/value-equation.md +134 -0
- package/bundled-skills/onboarding/SKILL.md +261 -0
- package/bundled-skills/onboarding/evals/evals.json +108 -0
- package/bundled-skills/onboarding/references/activation-models.md +57 -0
- package/bundled-skills/onboarding/references/experiments.md +258 -0
- package/bundled-skills/onboarding/references/minimum-path-to-value.md +49 -0
- package/bundled-skills/openclaw-history-ingest/SKILL.md +257 -0
- package/bundled-skills/openclaw-history-ingest/references/openclaw-data-format.md +154 -0
- package/bundled-skills/orchestration/SKILL.md +69 -0
- package/bundled-skills/pi-history-ingest/SKILL.md +312 -0
- package/bundled-skills/playwright-agent/SKILL.md +142 -0
- package/bundled-skills/postgresql-optimization/SKILL.md +179 -0
- package/bundled-skills/pricing/SKILL.md +295 -0
- package/bundled-skills/pricing/evals/evals.json +119 -0
- package/bundled-skills/pricing/references/pricing-models.md +66 -0
- package/bundled-skills/pricing/references/pricing-page-teardown.md +85 -0
- package/bundled-skills/pricing/references/research-methods.md +152 -0
- package/bundled-skills/pricing/references/tier-structure.md +232 -0
- package/bundled-skills/product-marketing/SKILL.md +255 -0
- package/bundled-skills/product-marketing/evals/evals.json +98 -0
- package/bundled-skills/prospecting/SKILL.md +262 -0
- package/bundled-skills/prospecting/evals/evals.json +122 -0
- package/bundled-skills/prospecting/references/b2b-prospecting.md +106 -0
- package/bundled-skills/prospecting/references/compliance.md +123 -0
- package/bundled-skills/prospecting/references/data-sources.md +287 -0
- package/bundled-skills/prospecting/references/demand-signals.md +129 -0
- package/bundled-skills/prospecting/references/local-prospecting.md +165 -0
- package/bundled-skills/prospecting/references/saas-prospecting.md +123 -0
- package/bundled-skills/refactor-safely/SKILL.md +29 -0
- package/bundled-skills/review-changes/SKILL.md +30 -0
- package/bundled-skills/review-delta/SKILL.md +46 -0
- package/bundled-skills/review-pr/SKILL.md +66 -0
- package/bundled-skills/sales-enablement/SKILL.md +359 -0
- package/bundled-skills/sales-enablement/evals/evals.json +91 -0
- package/bundled-skills/sales-enablement/references/deck-frameworks.md +263 -0
- package/bundled-skills/sales-enablement/references/demo-scripts.md +355 -0
- package/bundled-skills/sales-enablement/references/objection-library.md +270 -0
- package/bundled-skills/sales-enablement/references/one-pager-templates.md +208 -0
- package/bundled-skills/security-guidance/SKILL.md +161 -0
- package/bundled-skills/security-guidance/references/pretooluse_hook_canon.md +141 -0
- package/bundled-skills/senior-architect/SKILL.md +343 -0
- package/bundled-skills/senior-architect/references/architecture_patterns.md +470 -0
- package/bundled-skills/senior-architect/references/system_design_workflows.md +536 -0
- package/bundled-skills/senior-architect/references/tech_decision_guide.md +412 -0
- package/bundled-skills/senior-architect/scripts/architecture_diagram_generator.py +660 -0
- package/bundled-skills/senior-architect/scripts/dependency_analyzer.py +615 -0
- package/bundled-skills/senior-architect/scripts/project_architect.py +749 -0
- package/bundled-skills/senior-backend/SKILL.md +467 -0
- package/bundled-skills/senior-backend/profiles/django-monolith.json +57 -0
- package/bundled-skills/senior-backend/profiles/fastapi-python.json +58 -0
- package/bundled-skills/senior-backend/profiles/go-or-rust-microservice.json +62 -0
- package/bundled-skills/senior-backend/profiles/node-express.json +57 -0
- package/bundled-skills/senior-backend/references/api_design_patterns.md +530 -0
- package/bundled-skills/senior-backend/references/backend_security_practices.md +1075 -0
- package/bundled-skills/senior-backend/references/composition_map.md +58 -0
- package/bundled-skills/senior-backend/references/database_optimization_guide.md +593 -0
- package/bundled-skills/senior-backend/references/forcing_questions.md +100 -0
- package/bundled-skills/senior-backend/scripts/api_load_tester.py +607 -0
- package/bundled-skills/senior-backend/scripts/api_scaffolder.py +645 -0
- package/bundled-skills/senior-backend/scripts/backend_decision_engine.py +397 -0
- package/bundled-skills/senior-backend/scripts/database_migration_tool.py +858 -0
- package/bundled-skills/seo-audit/SKILL.md +499 -0
- package/bundled-skills/seo-audit/evals/evals.json +136 -0
- package/bundled-skills/seo-audit/references/ai-writing-detection.md +200 -0
- package/bundled-skills/seo-audit/references/international-seo.md +230 -0
- package/bundled-skills/session-brain/SKILL.md +101 -0
- package/bundled-skills/session-search/SKILL.md +97 -0
- package/bundled-skills/skill-creator/LICENSE.txt +202 -0
- package/bundled-skills/skill-creator/SKILL.md +485 -0
- package/bundled-skills/skill-creator/agents/analyzer.md +274 -0
- package/bundled-skills/skill-creator/agents/comparator.md +202 -0
- package/bundled-skills/skill-creator/agents/grader.md +223 -0
- package/bundled-skills/skill-creator/assets/eval_review.html +146 -0
- package/bundled-skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/bundled-skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/bundled-skills/skill-creator/references/schemas.md +430 -0
- package/bundled-skills/skill-creator/scripts/__init__.py +0 -0
- package/bundled-skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/bundled-skills/skill-creator/scripts/generate_report.py +326 -0
- package/bundled-skills/skill-creator/scripts/improve_description.py +247 -0
- package/bundled-skills/skill-creator/scripts/package_skill.py +136 -0
- package/bundled-skills/skill-creator/scripts/quick_validate.py +103 -0
- package/bundled-skills/skill-creator/scripts/run_eval.py +310 -0
- package/bundled-skills/skill-creator/scripts/run_loop.py +328 -0
- package/bundled-skills/skill-creator/scripts/utils.py +47 -0
- package/bundled-skills/social/SKILL.md +413 -0
- package/bundled-skills/social/evals/evals.json +107 -0
- package/bundled-skills/social/references/carousel-frameworks.md +141 -0
- package/bundled-skills/social/references/listening-sources-template.md +123 -0
- package/bundled-skills/social/references/listening.md +283 -0
- package/bundled-skills/social/references/platform-limits.md +110 -0
- package/bundled-skills/social/references/platforms.md +170 -0
- package/bundled-skills/social/references/post-templates.md +179 -0
- package/bundled-skills/social/references/reverse-engineering.md +195 -0
- package/bundled-skills/social/references/short-form-video.md +237 -0
- package/bundled-skills/spec-driven-workflow/SKILL.md +333 -0
- package/bundled-skills/spec-driven-workflow/references/acceptance_criteria_patterns.md +497 -0
- package/bundled-skills/spec-driven-workflow/references/bounded_autonomy_rules.md +273 -0
- package/bundled-skills/spec-driven-workflow/references/spec_format_guide.md +531 -0
- package/bundled-skills/spec-driven-workflow/scripts/spec_generator.py +338 -0
- package/bundled-skills/spec-driven-workflow/scripts/spec_validator.py +461 -0
- package/bundled-skills/spec-driven-workflow/scripts/test_extractor.py +431 -0
- package/bundled-skills/supabase/CHANGELOG.md +78 -0
- package/bundled-skills/supabase/SKILL.md +149 -0
- package/bundled-skills/supabase/assets/feedback-issue-template.md +17 -0
- package/bundled-skills/supabase/references/skill-feedback.md +17 -0
- package/bundled-skills/supabase-postgres-best-practices/CHANGELOG.md +73 -0
- package/bundled-skills/supabase-postgres-best-practices/SKILL.md +64 -0
- package/bundled-skills/supabase-postgres-best-practices/references/_contributing.md +170 -0
- package/bundled-skills/supabase-postgres-best-practices/references/_sections.md +39 -0
- package/bundled-skills/supabase-postgres-best-practices/references/_template.md +34 -0
- package/bundled-skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
- package/bundled-skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
- package/bundled-skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
- package/bundled-skills/supabase-postgres-best-practices/references/conn-limits.md +44 -0
- package/bundled-skills/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
- package/bundled-skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
- package/bundled-skills/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
- package/bundled-skills/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
- package/bundled-skills/supabase-postgres-best-practices/references/data-pagination.md +50 -0
- package/bundled-skills/supabase-postgres-best-practices/references/data-upsert.md +50 -0
- package/bundled-skills/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
- package/bundled-skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
- package/bundled-skills/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
- package/bundled-skills/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
- package/bundled-skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
- package/bundled-skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
- package/bundled-skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
- package/bundled-skills/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
- package/bundled-skills/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
- package/bundled-skills/supabase-postgres-best-practices/references/query-index-types.md +48 -0
- package/bundled-skills/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
- package/bundled-skills/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
- package/bundled-skills/supabase-postgres-best-practices/references/schema-constraints.md +80 -0
- package/bundled-skills/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
- package/bundled-skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
- package/bundled-skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
- package/bundled-skills/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
- package/bundled-skills/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
- package/bundled-skills/supabase-postgres-best-practices/references/security-privileges.md +54 -0
- package/bundled-skills/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
- package/bundled-skills/supabase-postgres-best-practices/references/security-rls-performance.md +63 -0
- package/bundled-skills/tag-taxonomy/SKILL.md +218 -0
- package/bundled-skills/typescript-expert/SKILL.md +431 -0
- package/bundled-skills/typescript-expert/references/tsconfig-strict.json +45 -0
- package/bundled-skills/typescript-expert/references/typescript-cheatsheet.md +383 -0
- package/bundled-skills/typescript-expert/references/utility-types.ts +335 -0
- package/bundled-skills/typescript-expert/scripts/ts_diagnostic.py +203 -0
- package/bundled-skills/ui-design-system/SKILL.md +379 -0
- package/bundled-skills/ui-design-system/assets/design_system_doc_template.md +180 -0
- package/bundled-skills/ui-design-system/references/component-architecture.md +396 -0
- package/bundled-skills/ui-design-system/references/developer-handoff.md +509 -0
- package/bundled-skills/ui-design-system/references/responsive-calculations.md +390 -0
- package/bundled-skills/ui-design-system/references/token-generation.md +324 -0
- package/bundled-skills/ui-design-system/scripts/design_token_generator.py +590 -0
- package/bundled-skills/vault-skill-factory/SKILL.md +143 -0
- package/bundled-skills/video/SKILL.md +346 -0
- package/bundled-skills/video/evals/evals.json +103 -0
- package/bundled-skills/video/references/ai-video-prompting.md +175 -0
- package/bundled-skills/video/references/edit-anatomy.md +84 -0
- package/bundled-skills/wiki-agent/SKILL.md +322 -0
- package/bundled-skills/wiki-capture/SKILL.md +337 -0
- package/bundled-skills/wiki-capture/references/RAW-FORMAT.md +115 -0
- package/bundled-skills/wiki-context-pack/SKILL.md +89 -0
- package/bundled-skills/wiki-dashboard/SKILL.md +472 -0
- package/bundled-skills/wiki-dedup/SKILL.md +320 -0
- package/bundled-skills/wiki-digest/SKILL.md +243 -0
- package/bundled-skills/wiki-export/SKILL.md +445 -0
- package/bundled-skills/wiki-history-ingest/SKILL.md +61 -0
- package/bundled-skills/wiki-import/SKILL.md +276 -0
- package/bundled-skills/wiki-ingest/SKILL.md +563 -0
- package/bundled-skills/wiki-ingest/references/ingest-prompts.md +54 -0
- package/bundled-skills/wiki-ingest/references/pageindex.md +72 -0
- package/bundled-skills/wiki-ingest/references/url-sources.md +295 -0
- package/bundled-skills/wiki-lint/SKILL.md +643 -0
- package/bundled-skills/wiki-narrate/SKILL.md +120 -0
- package/bundled-skills/wiki-narrate/references/voices.md +29 -0
- package/bundled-skills/wiki-query/SKILL.md +307 -0
- package/bundled-skills/wiki-rebuild/SKILL.md +212 -0
- package/bundled-skills/wiki-research/SKILL.md +319 -0
- package/bundled-skills/wiki-setup/SKILL.md +359 -0
- package/bundled-skills/wiki-stage-commit/SKILL.md +164 -0
- package/bundled-skills/wiki-status/SKILL.md +556 -0
- package/bundled-skills/wiki-switch/SKILL.md +115 -0
- package/bundled-skills/wiki-synthesize/SKILL.md +212 -0
- package/bundled-skills/wiki-update/SKILL.md +271 -0
- package/bundled-skills/write-a-skill/SKILL.md +141 -0
- package/bundled-skills/write-a-skill/references/companion_tooling.md +67 -0
- package/bundled-skills/write-a-skill/references/description_design_patterns.md +139 -0
- package/bundled-skills/write-a-skill/references/progressive_disclosure_principles.md +89 -0
- package/bundled-skills/write-a-skill/references/quality_gates_for_skills.md +158 -0
- package/bundled-skills/write-a-skill/scripts/skill_description_validator.py +255 -0
- package/bundled-skills/write-a-skill/scripts/skill_review_checklist_runner.py +268 -0
- package/bundled-skills/write-a-skill/scripts/skill_structure_validator.py +277 -0
- package/bundled-skills/zero-hallucination-coder/SKILL.md +271 -0
- package/catalog/categories.json +1030 -0
- package/catalog/overrides.json +525 -0
- package/catalog/providers.json +145 -0
- package/catalog/rules.json +112 -0
- package/docs/ARCHITECTURE.md +82 -0
- package/docs/CONSTITUTION.md +60 -0
- package/docs/EXECUTION.md +79 -0
- package/docs/HARNESSES.md +38 -0
- package/docs/INSTALL.md +123 -0
- package/docs/PROVIDERS.md +128 -0
- package/docs/ROADMAPS.md +74 -0
- package/docs/RULES.md +85 -0
- package/docs/TOKENS.md +48 -0
- package/install/bootstrap.mjs +273 -0
- package/install/install.mjs +466 -0
- package/install/install.ps1 +3 -0
- package/install/install.sh +4 -0
- package/install/lib.mjs +198 -0
- package/install/prompt.mjs +16 -0
- package/install/uninstall.mjs +109 -0
- package/mcp/novahiz-tools/README.md +26 -0
- package/mcp/novahiz-tools/index.mjs +452 -0
- package/novahiz.config.example.json +39 -0
- package/package.json +76 -0
- package/skills/a11y-audit/SKILL.md +211 -0
- package/skills/a11y-audit/assets/sample-component.tsx +51 -0
- package/skills/a11y-audit/expected_outputs/sample-contrast-output.txt +39 -0
- package/skills/a11y-audit/expected_outputs/sample-scan-output.json +34 -0
- package/skills/a11y-audit/expected_outputs/sample-scan-report.md +63 -0
- package/skills/a11y-audit/references/aria-patterns.md +223 -0
- package/skills/a11y-audit/references/audit-report-template.md +46 -0
- package/skills/a11y-audit/references/ci-cd-integration.md +127 -0
- package/skills/a11y-audit/references/color-contrast-guide.md +83 -0
- package/skills/a11y-audit/references/examples-by-framework.md +312 -0
- package/skills/a11y-audit/references/framework-a11y-patterns.md +661 -0
- package/skills/a11y-audit/references/testing-checklist.md +41 -0
- package/skills/a11y-audit/references/wcag-22-new-criteria.md +79 -0
- package/skills/a11y-audit/references/wcag-quick-ref.md +113 -0
- package/skills/a11y-audit/scripts/a11y_scanner.py +684 -0
- package/skills/a11y-audit/scripts/contrast_checker.py +504 -0
- package/skills/adversarial-reviewer/SKILL.md +247 -0
- package/skills/ai-security/SKILL.md +364 -0
- package/skills/ai-security/references/atlas-coverage.md +150 -0
- package/skills/ai-security/scripts/ai_threat_scanner.py +564 -0
- package/skills/anti-AI-design/SKILL.md +189 -0
- package/skills/anti-pattern-detector/SKILL.md +185 -0
- package/skills/anti-pattern-detector/references/async-network-patterns.md +581 -0
- package/skills/anti-pattern-detector/references/build-deploy-patterns.md +554 -0
- package/skills/anti-pattern-detector/references/cache-patterns.md +446 -0
- package/skills/anti-pattern-detector/references/cloud-infra-patterns.md +538 -0
- package/skills/anti-pattern-detector/references/concurrency-patterns.md +558 -0
- package/skills/anti-pattern-detector/references/language-specific-patterns.md +740 -0
- package/skills/anti-pattern-detector/references/monitoring-patterns.md +456 -0
- package/skills/api-design-reviewer/SKILL.md +433 -0
- package/skills/api-design-reviewer/references/api_antipatterns.md +680 -0
- package/skills/api-design-reviewer/references/rest_design_rules.md +487 -0
- package/skills/api-design-reviewer/scripts/api_linter.py +956 -0
- package/skills/api-design-reviewer/scripts/api_scorecard.py +1661 -0
- package/skills/api-design-reviewer/scripts/breaking_change_detector.py +1102 -0
- package/skills/apple-hig-expert/SKILL.md +108 -0
- package/skills/apple-hig-expert/references/accessibility.md +55 -0
- package/skills/apple-hig-expert/references/platform-specifics.md +48 -0
- package/skills/apple-hig-expert/references/visual-design.md +69 -0
- package/skills/apple-hig-expert/scripts/hig_checker.py +97 -0
- package/skills/apple-hig-expert/templates/hig-audit-template.md +83 -0
- package/skills/clean-code/SKILL.md +99 -0
- package/skills/code-reviewer/README.md +92 -0
- package/skills/code-reviewer/SKILL.md +183 -0
- package/skills/code-reviewer/assets/sample_c_clean.c +71 -0
- package/skills/code-reviewer/assets/sample_c_smells.c +66 -0
- package/skills/code-reviewer/assets/sample_csharp_clean.cs +100 -0
- package/skills/code-reviewer/assets/sample_csharp_smells.cs +78 -0
- package/skills/code-reviewer/assets/sample_java_clean.java +55 -0
- package/skills/code-reviewer/assets/sample_java_smells.java +56 -0
- package/skills/code-reviewer/expected_outputs/sample_c_clean_quality.json +65 -0
- package/skills/code-reviewer/expected_outputs/sample_c_smells_quality.json +155 -0
- package/skills/code-reviewer/expected_outputs/sample_csharp_clean_quality.json +135 -0
- package/skills/code-reviewer/expected_outputs/sample_csharp_smells_quality.json +143 -0
- package/skills/code-reviewer/expected_outputs/sample_java_clean_quality.json +53 -0
- package/skills/code-reviewer/expected_outputs/sample_java_smells_quality.json +83 -0
- package/skills/code-reviewer/languages/c.md +103 -0
- package/skills/code-reviewer/languages/cpp.md +103 -0
- package/skills/code-reviewer/languages/csharp.md +97 -0
- package/skills/code-reviewer/languages/dart.md +108 -0
- package/skills/code-reviewer/languages/go.md +92 -0
- package/skills/code-reviewer/languages/java.md +103 -0
- package/skills/code-reviewer/languages/kotlin.md +88 -0
- package/skills/code-reviewer/languages/php.md +109 -0
- package/skills/code-reviewer/languages/python.md +94 -0
- package/skills/code-reviewer/languages/ruby.md +105 -0
- package/skills/code-reviewer/languages/rust.md +99 -0
- package/skills/code-reviewer/languages/swift.md +88 -0
- package/skills/code-reviewer/languages/typescript.md +97 -0
- package/skills/code-reviewer/rules/universal.md +49 -0
- package/skills/code-reviewer/scripts/code_quality_checker.py +1020 -0
- package/skills/code-reviewer/scripts/pr_analyzer.py +535 -0
- package/skills/code-reviewer/scripts/review_report_generator.py +505 -0
- package/skills/code-understand/SKILL.md +90 -0
- package/skills/database-designer/README.md +388 -0
- package/skills/database-designer/SKILL.md +314 -0
- package/skills/database-designer/assets/sample_query_patterns.json +375 -0
- package/skills/database-designer/assets/sample_schema.json +372 -0
- package/skills/database-designer/assets/sample_schema.sql +207 -0
- package/skills/database-designer/expected_outputs/index_optimization_sample.txt +60 -0
- package/skills/database-designer/expected_outputs/migration_sample.txt +124 -0
- package/skills/database-designer/expected_outputs/schema_analysis_sample.txt +222 -0
- package/skills/database-designer/index_optimizer.py +926 -0
- package/skills/database-designer/migration_generator.py +1199 -0
- package/skills/database-designer/references/database-design-reference.md +476 -0
- package/skills/database-designer/references/database_selection_decision_tree.md +373 -0
- package/skills/database-designer/references/index_strategy_patterns.md +424 -0
- package/skills/database-designer/references/normalization_guide.md +354 -0
- package/skills/database-designer/schema_analyzer.py +982 -0
- package/skills/defuddle/SKILL.md +41 -0
- package/skills/dependency-auditor/README.md +524 -0
- package/skills/dependency-auditor/SKILL.md +85 -0
- package/skills/dependency-auditor/assets/sample_go.mod +53 -0
- package/skills/dependency-auditor/assets/sample_package.json +72 -0
- package/skills/dependency-auditor/assets/sample_requirements.txt +71 -0
- package/skills/dependency-auditor/expected_outputs/sample_license_report.txt +37 -0
- package/skills/dependency-auditor/expected_outputs/sample_upgrade_plan.txt +59 -0
- package/skills/dependency-auditor/expected_outputs/sample_vulnerability_report.json +71 -0
- package/skills/dependency-auditor/references/dependency_management_best_practices.md +643 -0
- package/skills/dependency-auditor/references/license_compatibility_matrix.md +238 -0
- package/skills/dependency-auditor/references/vulnerability_assessment_guide.md +461 -0
- package/skills/dependency-auditor/scripts/dep_scanner.py +794 -0
- package/skills/dependency-auditor/scripts/license_checker.py +996 -0
- package/skills/dependency-auditor/scripts/upgrade_planner.py +1029 -0
- package/skills/dependency-auditor/test-inventory.json +421 -0
- package/skills/dependency-auditor/test-project/package.json +72 -0
- package/skills/design-taste-frontend/SKILL.md +247 -0
- package/skills/engineering-standards/SKILL.md +736 -0
- package/skills/env-secrets-manager/SKILL.md +260 -0
- package/skills/env-secrets-manager/references/secret-patterns.md +41 -0
- package/skills/env-secrets-manager/references/validation-detection-rotation.md +358 -0
- package/skills/env-secrets-manager/scripts/env_auditor.py +145 -0
- package/skills/fix/SKILL.md +113 -0
- package/skills/fix/flaky-taxonomy.md +134 -0
- package/skills/gate/SKILL.md +13 -0
- package/skills/humanizer/SKILL.md +374 -0
- package/skills/mcp-server-builder/README.md +50 -0
- package/skills/mcp-server-builder/SKILL.md +100 -0
- package/skills/mcp-server-builder/references/openapi-extraction-guide.md +34 -0
- package/skills/mcp-server-builder/references/production-hardening-guide.md +78 -0
- package/skills/mcp-server-builder/references/python-server-template.md +22 -0
- package/skills/mcp-server-builder/references/typescript-server-template.md +19 -0
- package/skills/mcp-server-builder/references/validation-checklist.md +30 -0
- package/skills/mcp-server-builder/scripts/mcp_validator.py +186 -0
- package/skills/mcp-server-builder/scripts/openapi_to_mcp.py +284 -0
- package/skills/memory/SKILL.md +10 -0
- package/skills/migrate/SKILL.md +135 -0
- package/skills/migrate/cypress-mapping.md +79 -0
- package/skills/migrate/selenium-mapping.md +94 -0
- package/skills/novahiz-analyse/SKILL.md +74 -0
- package/skills/novahiz-audit/SKILL.md +75 -0
- package/skills/novahiz-clarify/SKILL.md +94 -0
- package/skills/novahiz-converge/SKILL.md +76 -0
- package/skills/novahiz-gate/SKILL.md +82 -0
- package/skills/novahiz-implement/SKILL.md +80 -0
- package/skills/novahiz-memory/SKILL.md +58 -0
- package/skills/novahiz-plan/SKILL.md +99 -0
- package/skills/novahiz-planner/SKILL.md +104 -0
- package/skills/novahiz-task/SKILL.md +105 -0
- package/skills/playwright-agent/SKILL.md +142 -0
- package/skills/postgresql-optimization/SKILL.md +179 -0
- package/skills/review-changes/SKILL.md +30 -0
- package/skills/security-guidance/SKILL.md +160 -0
- package/skills/security-guidance/references/pretooluse_hook_canon.md +141 -0
- package/skills/senior-architect/SKILL.md +343 -0
- package/skills/senior-architect/references/architecture_patterns.md +470 -0
- package/skills/senior-architect/references/system_design_workflows.md +536 -0
- package/skills/senior-architect/references/tech_decision_guide.md +412 -0
- package/skills/senior-architect/scripts/architecture_diagram_generator.py +660 -0
- package/skills/senior-architect/scripts/dependency_analyzer.py +615 -0
- package/skills/senior-architect/scripts/project_architect.py +749 -0
- package/skills/senior-backend/SKILL.md +467 -0
- package/skills/senior-backend/profiles/django-monolith.json +57 -0
- package/skills/senior-backend/profiles/fastapi-python.json +58 -0
- package/skills/senior-backend/profiles/go-or-rust-microservice.json +62 -0
- package/skills/senior-backend/profiles/node-express.json +57 -0
- package/skills/senior-backend/references/api_design_patterns.md +530 -0
- package/skills/senior-backend/references/backend_security_practices.md +1075 -0
- package/skills/senior-backend/references/composition_map.md +58 -0
- package/skills/senior-backend/references/database_optimization_guide.md +593 -0
- package/skills/senior-backend/references/forcing_questions.md +100 -0
- package/skills/senior-backend/scripts/api_load_tester.py +607 -0
- package/skills/senior-backend/scripts/api_scaffolder.py +645 -0
- package/skills/senior-backend/scripts/backend_decision_engine.py +397 -0
- package/skills/senior-backend/scripts/database_migration_tool.py +858 -0
- package/skills/senior-secops/SKILL.md +505 -0
- package/skills/senior-secops/references/compliance_requirements.md +792 -0
- package/skills/senior-secops/references/security_standards.md +718 -0
- package/skills/senior-secops/references/vulnerability_management_guide.md +487 -0
- package/skills/senior-secops/scripts/compliance_checker.py +1107 -0
- package/skills/senior-secops/scripts/security_scanner.py +471 -0
- package/skills/senior-secops/scripts/vulnerability_assessor.py +563 -0
- package/skills/skill-creator/LICENSE.txt +202 -0
- package/skills/skill-creator/SKILL.md +485 -0
- package/skills/skill-creator/agents/analyzer.md +274 -0
- package/skills/skill-creator/agents/comparator.md +202 -0
- package/skills/skill-creator/agents/grader.md +223 -0
- package/skills/skill-creator/assets/eval_review.html +146 -0
- package/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/skills/skill-creator/references/schemas.md +430 -0
- package/skills/skill-creator/scripts/__init__.py +0 -0
- package/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/skills/skill-creator/scripts/generate_report.py +326 -0
- package/skills/skill-creator/scripts/improve_description.py +247 -0
- package/skills/skill-creator/scripts/package_skill.py +136 -0
- package/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/skills/skill-creator/scripts/run_eval.py +310 -0
- package/skills/skill-creator/scripts/run_loop.py +328 -0
- package/skills/skill-creator/scripts/utils.py +47 -0
- package/skills/spec-driven-workflow/SKILL.md +333 -0
- package/skills/spec-driven-workflow/references/acceptance_criteria_patterns.md +497 -0
- package/skills/spec-driven-workflow/references/bounded_autonomy_rules.md +273 -0
- package/skills/spec-driven-workflow/references/spec_format_guide.md +531 -0
- package/skills/spec-driven-workflow/scripts/spec_generator.py +338 -0
- package/skills/spec-driven-workflow/scripts/spec_validator.py +461 -0
- package/skills/spec-driven-workflow/scripts/test_extractor.py +431 -0
- package/skills/supabase/CHANGELOG.md +78 -0
- package/skills/supabase/SKILL.md +149 -0
- package/skills/supabase/assets/feedback-issue-template.md +17 -0
- package/skills/supabase/references/skill-feedback.md +17 -0
- package/skills/supabase-postgres-best-practices/CHANGELOG.md +73 -0
- package/skills/supabase-postgres-best-practices/SKILL.md +64 -0
- package/skills/supabase-postgres-best-practices/references/_contributing.md +170 -0
- package/skills/supabase-postgres-best-practices/references/_sections.md +39 -0
- package/skills/supabase-postgres-best-practices/references/_template.md +34 -0
- package/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
- package/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
- package/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
- package/skills/supabase-postgres-best-practices/references/conn-limits.md +44 -0
- package/skills/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
- package/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
- package/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
- package/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
- package/skills/supabase-postgres-best-practices/references/data-pagination.md +50 -0
- package/skills/supabase-postgres-best-practices/references/data-upsert.md +50 -0
- package/skills/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
- package/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
- package/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
- package/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
- package/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
- package/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
- package/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
- package/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
- package/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
- package/skills/supabase-postgres-best-practices/references/query-index-types.md +48 -0
- package/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
- package/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
- package/skills/supabase-postgres-best-practices/references/schema-constraints.md +80 -0
- package/skills/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
- package/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
- package/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
- package/skills/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
- package/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
- package/skills/supabase-postgres-best-practices/references/security-privileges.md +54 -0
- package/skills/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
- package/skills/supabase-postgres-best-practices/references/security-rls-performance.md +63 -0
- package/skills/typescript-expert/SKILL.md +431 -0
- package/skills/typescript-expert/references/tsconfig-strict.json +45 -0
- package/skills/typescript-expert/references/typescript-cheatsheet.md +383 -0
- package/skills/typescript-expert/references/utility-types.ts +335 -0
- package/skills/typescript-expert/scripts/ts_diagnostic.py +203 -0
- package/skills/ui-design-system/SKILL.md +379 -0
- package/skills/ui-design-system/assets/design_system_doc_template.md +180 -0
- package/skills/ui-design-system/references/component-architecture.md +396 -0
- package/skills/ui-design-system/references/developer-handoff.md +509 -0
- package/skills/ui-design-system/references/responsive-calculations.md +390 -0
- package/skills/ui-design-system/references/token-generation.md +324 -0
- package/skills/ui-design-system/scripts/design_token_generator.py +590 -0
- package/skills/write-a-skill/SKILL.md +141 -0
- package/skills/write-a-skill/references/companion_tooling.md +67 -0
- package/skills/write-a-skill/references/description_design_patterns.md +139 -0
- package/skills/write-a-skill/references/progressive_disclosure_principles.md +89 -0
- package/skills/write-a-skill/references/quality_gates_for_skills.md +158 -0
- package/skills/write-a-skill/scripts/skill_description_validator.py +255 -0
- package/skills/write-a-skill/scripts/skill_review_checklist_runner.py +268 -0
- package/skills/write-a-skill/scripts/skill_structure_validator.py +277 -0
- package/skills/zero-hallucination-coder/SKILL.md +271 -0
- package/src/catalog.ts +266 -0
- package/src/classify.ts +201 -0
- package/src/cli.ts +115 -0
- package/src/commands/clean.ts +114 -0
- package/src/commands/context.ts +130 -0
- package/src/commands/doctor.ts +191 -0
- package/src/commands/gate.ts +192 -0
- package/src/commands/inspect.ts +296 -0
- package/src/commands/report.ts +85 -0
- package/src/commands/task.ts +310 -0
- package/src/commands/tokens.ts +85 -0
- package/src/content.ts +70 -0
- package/src/db.ts +143 -0
- package/src/deps.ts +36 -0
- package/src/exec.ts +85 -0
- package/src/gate.ts +261 -0
- package/src/ledger.ts +468 -0
- package/src/providers.ts +52 -0
- package/src/relevance.ts +73 -0
- package/src/render.ts +107 -0
- package/src/spec.ts +306 -0
- package/src/targets.ts +296 -0
- package/tsconfig.json +15 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dart-generate-test-mocks
|
|
3
|
+
description: Define and generate mock objects for external dependencies using `package:mockito` and `build_runner`. Use when unit testing classes that depend on complex external services like APIs or databases.
|
|
4
|
+
metadata:
|
|
5
|
+
model: models/gemini-3.1-pro-preview
|
|
6
|
+
last_modified: Fri, 24 Apr 2026 15:13:58 GMT
|
|
7
|
+
---
|
|
8
|
+
# Testing and Mocking Dart Applications
|
|
9
|
+
|
|
10
|
+
## Contents
|
|
11
|
+
- [Structuring Code for Testability](#structuring-code-for-testability)
|
|
12
|
+
- [Managing Dependencies](#managing-dependencies)
|
|
13
|
+
- [Generating Mocks](#generating-mocks)
|
|
14
|
+
- [Implementing Unit Tests](#implementing-unit-tests)
|
|
15
|
+
- [Workflow: Creating and Running Mocked Tests](#workflow-creating-and-running-mocked-tests)
|
|
16
|
+
- [Examples](#examples)
|
|
17
|
+
|
|
18
|
+
## Structuring Code for Testability
|
|
19
|
+
Design Dart classes to support dependency injection. Isolate complex external dependencies (like API clients or databases) so they can be replaced with mock objects during testing.
|
|
20
|
+
|
|
21
|
+
- Inject external services (e.g., `http.Client`) through class constructors.
|
|
22
|
+
- Represent URLs strictly as `Uri` objects using `Uri.parse(string)`.
|
|
23
|
+
- Utilize Dart's object-oriented features (classes, mixins) to define clear interfaces for external interactions.
|
|
24
|
+
|
|
25
|
+
## Managing Dependencies
|
|
26
|
+
Configure the `pubspec.yaml` file with the necessary testing and code generation packages.
|
|
27
|
+
|
|
28
|
+
- Add runtime dependencies (e.g., `package:http`) using `dart pub add http`.
|
|
29
|
+
- Add testing dependencies using `dart pub add dev:test dev:mockito dev:build_runner`.
|
|
30
|
+
- Import HTTP libraries with a prefix to avoid namespace collisions: `import 'package:http/http.dart' as http;`.
|
|
31
|
+
|
|
32
|
+
## Generating Mocks
|
|
33
|
+
Use `package:mockito` and `build_runner` to automatically generate mock classes for fixed scenarios and behavior verification.
|
|
34
|
+
|
|
35
|
+
- Always use the `@GenerateNiceMocks` annotation (preferable to `@GenerateMocks` to avoid missing stub exceptions).
|
|
36
|
+
- Place the annotation in the test file, passing a list of `MockSpec<Type>()` objects.
|
|
37
|
+
- Import the generated file using the `.mocks.dart` extension.
|
|
38
|
+
- Execute `build_runner` to generate the mock files: `dart run build_runner build`.
|
|
39
|
+
|
|
40
|
+
## Implementing Unit Tests
|
|
41
|
+
Isolate the system under test using the generated mock objects. Use `package:test` to structure the test suite.
|
|
42
|
+
|
|
43
|
+
- **Stubbing:** Configure mock behavior before interacting with the system under test.
|
|
44
|
+
- Use `when(mock.method()).thenReturn(value)` for synchronous methods.
|
|
45
|
+
- **CRITICAL:** Always use `thenAnswer((_) async => value)` for methods returning a `Future` or `Stream`. Never use `thenReturn` for asynchronous returns.
|
|
46
|
+
- **Verification:** Assert that the system under test interacted with the mock object correctly.
|
|
47
|
+
- Use `verify(mock.method()).called(1)` to check exact invocation counts.
|
|
48
|
+
- Use argument matchers like `any`, `anyNamed`, or `captureAny` for flexible verification.
|
|
49
|
+
|
|
50
|
+
## Workflow: Creating and Running Mocked Tests
|
|
51
|
+
|
|
52
|
+
Use the following checklist to implement and verify mocked unit tests.
|
|
53
|
+
|
|
54
|
+
### Task Progress
|
|
55
|
+
- [ ] 1. Identify the external dependency to mock (e.g., `http.Client`).
|
|
56
|
+
- [ ] 2. Inject the dependency into the target class constructor.
|
|
57
|
+
- [ ] 3. Create a test file (e.g., `target_test.dart`) and add `@GenerateNiceMocks([MockSpec<Dependency>()])`.
|
|
58
|
+
- [ ] 4. Add the `part` or `import` directive for the generated `.mocks.dart` file.
|
|
59
|
+
- [ ] 5. Run `dart run build_runner build` to generate the mock classes.
|
|
60
|
+
- [ ] 6. Write the test cases using `group()` and `test()`.
|
|
61
|
+
- [ ] 7. Stub required behaviors using `when()`.
|
|
62
|
+
- [ ] 8. Execute the target method.
|
|
63
|
+
- [ ] 9. Verify interactions using `verify()` and assert outcomes using `expect()`.
|
|
64
|
+
- [ ] 10. Run the test suite using `dart test`.
|
|
65
|
+
|
|
66
|
+
### Feedback Loop: Test Failures
|
|
67
|
+
If tests fail or `build_runner` encounters errors:
|
|
68
|
+
1. **Run validator:** Execute `dart test` or `dart run build_runner build`.
|
|
69
|
+
2. **Review errors:** Check for missing stubs, mismatched argument matchers, or syntax errors in the generated files.
|
|
70
|
+
3. **Fix:**
|
|
71
|
+
- If a mock method throws an unexpected null error, ensure you used `@GenerateNiceMocks`.
|
|
72
|
+
- If an async stub throws an `ArgumentError`, change `thenReturn` to `thenAnswer`.
|
|
73
|
+
- If `build_runner` fails, ensure the `.mocks.dart` import matches the file name exactly.
|
|
74
|
+
4. Repeat until all tests pass.
|
|
75
|
+
|
|
76
|
+
## Examples
|
|
77
|
+
|
|
78
|
+
### High-Fidelity Mocking and Testing Example
|
|
79
|
+
|
|
80
|
+
**1. System Under Test (`lib/api_service.dart`)**
|
|
81
|
+
```dart
|
|
82
|
+
import 'dart:convert';
|
|
83
|
+
import 'package:http/http.dart' as http;
|
|
84
|
+
|
|
85
|
+
class ApiService {
|
|
86
|
+
final http.Client client;
|
|
87
|
+
|
|
88
|
+
ApiService(this.client);
|
|
89
|
+
|
|
90
|
+
Future<String> fetchData(String urlString) async {
|
|
91
|
+
final uri = Uri.parse(urlString);
|
|
92
|
+
final response = await client.get(uri);
|
|
93
|
+
|
|
94
|
+
if (response.statusCode == 200) {
|
|
95
|
+
return jsonDecode(response.body)['data'];
|
|
96
|
+
} else {
|
|
97
|
+
throw Exception('Failed to load data');
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**2. Test Implementation (`test/api_service_test.dart`)**
|
|
104
|
+
```dart
|
|
105
|
+
import 'package:test/test.dart';
|
|
106
|
+
import 'package:mockito/annotations.dart';
|
|
107
|
+
import 'package:mockito/mockito.dart';
|
|
108
|
+
import 'package:http/http.dart' as http;
|
|
109
|
+
import 'package:my_app/api_service.dart';
|
|
110
|
+
|
|
111
|
+
// Generate the mock class for http.Client
|
|
112
|
+
@GenerateNiceMocks([MockSpec<http.Client>()])
|
|
113
|
+
import 'api_service_test.mocks.dart';
|
|
114
|
+
|
|
115
|
+
void main() {
|
|
116
|
+
group('ApiService', () {
|
|
117
|
+
late ApiService apiService;
|
|
118
|
+
late MockClient mockHttpClient;
|
|
119
|
+
|
|
120
|
+
setUp(() {
|
|
121
|
+
mockHttpClient = MockClient();
|
|
122
|
+
apiService = ApiService(mockHttpClient);
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
test('returns data if the http call completes successfully', () async {
|
|
126
|
+
// Arrange: Stub the async HTTP GET request using thenAnswer
|
|
127
|
+
when(mockHttpClient.get(any)).thenAnswer(
|
|
128
|
+
(_) async => http.Response('{"data": "Success"}', 200),
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
// Act
|
|
132
|
+
final result = await apiService.fetchData('https://api.example.com/data');
|
|
133
|
+
|
|
134
|
+
// Assert
|
|
135
|
+
expect(result, 'Success');
|
|
136
|
+
|
|
137
|
+
// Verify the mock was called with the correct Uri
|
|
138
|
+
verify(mockHttpClient.get(Uri.parse('https://api.example.com/data'))).called(1);
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
test('throws an exception if the http call completes with an error', () {
|
|
142
|
+
// Arrange
|
|
143
|
+
when(mockHttpClient.get(any)).thenAnswer(
|
|
144
|
+
(_) async => http.Response('Not Found', 404),
|
|
145
|
+
);
|
|
146
|
+
|
|
147
|
+
// Act & Assert
|
|
148
|
+
expect(
|
|
149
|
+
apiService.fetchData('https://api.example.com/data'),
|
|
150
|
+
throwsException,
|
|
151
|
+
);
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
```
|
|
@@ -0,0 +1,528 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dart-migrate-to-checks-package
|
|
3
|
+
description: |-
|
|
4
|
+
Replace the usage of `expect` and similar functions from `package:matcher`
|
|
5
|
+
to `package:checks` equivalents.
|
|
6
|
+
metadata:
|
|
7
|
+
model: models/gemini-3.1-pro-preview
|
|
8
|
+
last_modified: Tue, 09 Jun 2026 19:30:00 GMT
|
|
9
|
+
---
|
|
10
|
+
# Migrating Dart Tests to Package Checks
|
|
11
|
+
|
|
12
|
+
Use this skill when you need to migrate a Dart test suite from the legacy
|
|
13
|
+
`package:matcher` (which is exported by default from `package:test/test.dart`)
|
|
14
|
+
to the modern, type-safe, and literate `package:checks` assertion library.
|
|
15
|
+
|
|
16
|
+
## Contents
|
|
17
|
+
- [When to Use This Skill](#when-to-use-this-skill)
|
|
18
|
+
- [How to Use This Skill (The Workflow)](#how-to-use-this-skill-the-workflow)
|
|
19
|
+
- [Key Syntax Differences and Pitfalls](#key-syntax-differences-and-pitfalls)
|
|
20
|
+
- [Matcher-to-Checks Mapping Table](#matcher-to-checks-mapping-table)
|
|
21
|
+
- [Matchers with No Direct Replacements](#matchers-with-no-direct-replacements)
|
|
22
|
+
- [Strategies for Discovery](#strategies-for-discovery)
|
|
23
|
+
- [Examples](#examples)
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## When to Use This Skill
|
|
28
|
+
- When asked to "migrate tests to checks", "use package:checks", or
|
|
29
|
+
"modernize test assertions".
|
|
30
|
+
- When updating legacy test suites where static type safety, better
|
|
31
|
+
autocomplete in IDEs, and highly detailed failure diagnostics are desired.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## How to Use This Skill (The Workflow)
|
|
36
|
+
|
|
37
|
+
Follow this structured workflow to safely and systematically migrate a test suite:
|
|
38
|
+
|
|
39
|
+
### 1. Dependency Setup
|
|
40
|
+
- Add `package:checks` as a `dev_dependency` in `pubspec.yaml`:
|
|
41
|
+
```bash
|
|
42
|
+
dart pub add dev:checks
|
|
43
|
+
```
|
|
44
|
+
- Remove `package:matcher` if it is explicitly listed under `dev_dependencies`
|
|
45
|
+
(it is typically transitively included by `package:test`, which is fine).
|
|
46
|
+
|
|
47
|
+
### 2. Identify and Plan Target Files
|
|
48
|
+
- Use the grep patterns in [Strategies for Discovery](#strategies-for-discovery)
|
|
49
|
+
to locate all test files containing legacy `expect` or `expectLater` calls.
|
|
50
|
+
- Decide whether to migrate files fully or incrementally.
|
|
51
|
+
|
|
52
|
+
### 3. Migrating a File (Incremental or Full)
|
|
53
|
+
For any target test file:
|
|
54
|
+
1. **Update Imports**:
|
|
55
|
+
- Replace the generic `import 'package:test/test.dart';` with:
|
|
56
|
+
```dart
|
|
57
|
+
import 'package:test/scaffolding.dart';
|
|
58
|
+
import 'package:checks/checks.dart';
|
|
59
|
+
```
|
|
60
|
+
- **For Incremental Migration**: If you only want to migrate some test cases
|
|
61
|
+
in the file, or want to migrate one step at a time, add:
|
|
62
|
+
```dart
|
|
63
|
+
import 'package:test/expect.dart'; // Temporarily allows legacy expect()
|
|
64
|
+
```
|
|
65
|
+
2. **Translate Assertions**: Rewrite legacy `expect` and `expectLater` calls
|
|
66
|
+
to `check` syntax following the [Key Syntax Differences and
|
|
67
|
+
Pitfalls](#key-syntax-differences-and-pitfalls) and the
|
|
68
|
+
[Matcher-to-Checks Mapping Table](#matcher-to-checks-mapping-table).
|
|
69
|
+
3. **Verify via Compiler**: If migrating fully, remove the `import
|
|
70
|
+
'package:test/expect.dart';` line. Any remaining un-migrated `expect`
|
|
71
|
+
calls will immediately surface as compiler errors, making them easy to
|
|
72
|
+
find and fix.
|
|
73
|
+
|
|
74
|
+
### 4. Verification and Feedback Loops
|
|
75
|
+
- **Static Analysis**: Run static analysis on the target package:
|
|
76
|
+
```bash
|
|
77
|
+
dart analyze
|
|
78
|
+
```
|
|
79
|
+
Pay close attention to generic type parameters on `.isA<Type>()` and
|
|
80
|
+
ensure asynchronous expectations are properly awaited (check for
|
|
81
|
+
`unawaited_futures` warnings).
|
|
82
|
+
- **Run Tests**: Execute the tests to verify both behavior and correct
|
|
83
|
+
assertion runtime logic:
|
|
84
|
+
```bash
|
|
85
|
+
dart test
|
|
86
|
+
```
|
|
87
|
+
If a test fails, review the extremely detailed failure output of
|
|
88
|
+
`package:checks` to diagnose if the test is genuinely failing or if the
|
|
89
|
+
expectation was translated incorrectly.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Key Syntax Differences and Pitfalls
|
|
94
|
+
|
|
95
|
+
> [!IMPORTANT]
|
|
96
|
+
> A line-for-line translation can sometimes introduce subtle bugs or false
|
|
97
|
+
> passes. Always review these key differences carefully:
|
|
98
|
+
|
|
99
|
+
### 1. Collection Equality Pitfall (`equals` vs `deepEquals`)
|
|
100
|
+
- **Legacy Matcher**: `expect(actual, expected)` or `expect(actual,
|
|
101
|
+
equals(expected))` performed a **deep equality check** if the arguments
|
|
102
|
+
were collections (Lists, Maps, Sets).
|
|
103
|
+
- **Package Checks**: `.equals(expected)` corresponds strictly to
|
|
104
|
+
`operator ==`. Since Dart collections do not override `operator ==` for
|
|
105
|
+
element-wise comparison, using `.equals` on a collection will check for
|
|
106
|
+
*identity* and almost certainly fail at runtime.
|
|
107
|
+
- **Remediation**: You **must** replace collection equality assertions with
|
|
108
|
+
`.deepEquals(expected)`.
|
|
109
|
+
```dart
|
|
110
|
+
// BEFORE (Matcher)
|
|
111
|
+
expect(myList, [1, 2, 3]);
|
|
112
|
+
|
|
113
|
+
// AFTER (Checks)
|
|
114
|
+
check(myList).deepEquals([1, 2, 3]);
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### 2. The `reason` Parameter is now `because`
|
|
118
|
+
- **Legacy Matcher**: The explanation was passed as a trailing named
|
|
119
|
+
argument `reason` to `expect`:
|
|
120
|
+
```dart
|
|
121
|
+
expect(actual, expectation, reason: 'Explanation');
|
|
122
|
+
```
|
|
123
|
+
- **Package Checks**: The explanation is passed as the named argument
|
|
124
|
+
`because` to the `check` function *before* the actual subject:
|
|
125
|
+
```dart
|
|
126
|
+
check(because: 'Explanation', actual).expectation();
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### 3. Regular Expression Matching (`matches` vs `matchesPattern`)
|
|
130
|
+
- **Legacy Matcher**: The `matches(pattern)` matcher automatically converted
|
|
131
|
+
a `String` argument into a `RegExp` (e.g., `matches(r'\d')` matched `'1'`).
|
|
132
|
+
- **Package Checks**: `.matchesPattern(pattern)` treats a `String` argument
|
|
133
|
+
as a literal string pattern.
|
|
134
|
+
- **Remediation**: To match using a regular expression, you must explicitly
|
|
135
|
+
pass a `RegExp` object:
|
|
136
|
+
```dart
|
|
137
|
+
// BEFORE (Matcher)
|
|
138
|
+
expect(someString, matches(r'\d+'));
|
|
139
|
+
|
|
140
|
+
// AFTER (Checks)
|
|
141
|
+
check(someString).matchesPattern(RegExp(r'\d+'));
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### 4. Property Extraction (`TypeMatcher.having` vs `.has`)
|
|
145
|
+
- **Legacy Matcher**: Chained field/property expectations used
|
|
146
|
+
`TypeMatcher.having(feature, description, matcher)`:
|
|
147
|
+
```dart
|
|
148
|
+
expect(actual, isA<Person>().having((p) => p.name, 'name', startsWith('A')));
|
|
149
|
+
```
|
|
150
|
+
- **Package Checks**: The `.has(feature, description)` extension is
|
|
151
|
+
available on all `Subject`s, takes one fewer argument, and returns a new
|
|
152
|
+
`Subject` representing that property. You chain expectations directly off
|
|
153
|
+
it:
|
|
154
|
+
```dart
|
|
155
|
+
check(actual).isA<Person>().has((p) => p.name, 'name').startsWith('A');
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### 5. Synchronous vs. Asynchronous `throws`
|
|
159
|
+
- **Legacy Matcher**: In `package:matcher`, `throwsA` behaved similarly for both
|
|
160
|
+
synchronous closures and asynchronous futures when wrapped in `expect` or
|
|
161
|
+
`expectLater`.
|
|
162
|
+
- **Package Checks**: The `.throws<E>()` expectation behaves differently and
|
|
163
|
+
has different return types depending on whether the subject is synchronous or
|
|
164
|
+
asynchronous:
|
|
165
|
+
- **Synchronous** (`Subject<T Function()>`): `.throws<E>()` returns a
|
|
166
|
+
`Subject<E>` synchronously. This **does not** accept a callback argument!
|
|
167
|
+
You chain or cascade expectations directly off the returned `Subject<E>`:
|
|
168
|
+
```dart
|
|
169
|
+
// YES (Synchronous chaining)
|
|
170
|
+
check(() => triggerSyncError()).throws<ArgumentError>()
|
|
171
|
+
..has((e) => e.message, 'message').equals('invalid input');
|
|
172
|
+
|
|
173
|
+
// NO (Passing a callback to sync throws will cause a compiler error!)
|
|
174
|
+
check(() => triggerSync").throws<ArgumentError>((it) => ...); // ERROR!
|
|
175
|
+
```
|
|
176
|
+
- **Asynchronous** (`Subject<Future<T>>`): `.throws<E>()` returns
|
|
177
|
+
`Future<void>`. Because you cannot chain directly off a `Future<void>`, this
|
|
178
|
+
**requires** an inspection callback:
|
|
179
|
+
```dart
|
|
180
|
+
// YES (Asynchronous callback)
|
|
181
|
+
await check(triggerAsyncError()).throws<ArgumentError>((it) => it
|
|
182
|
+
..has((e) => e.message, 'message').equals('invalid input'));
|
|
183
|
+
```
|
|
184
|
+
- **Crucial Pitfall**: Trying to chain expectations directly after an awaited
|
|
185
|
+
asynchronous `.throws<E>()` (e.g.,
|
|
186
|
+
`await check(future).throws<E>().equals(...)`) will fail to compile
|
|
187
|
+
because it returns `Future<void>`.
|
|
188
|
+
|
|
189
|
+
### 6. RegExp / Pattern Equality
|
|
190
|
+
- **Legacy Matcher**: In `package:matcher`, `expect(myPattern,`
|
|
191
|
+
`equals(RegExp('Hello')))` worked because the matcher comparison rules
|
|
192
|
+
handled RegExp instances.
|
|
193
|
+
- **Package Checks**: `.equals()` uses strict Dart `==` equality. Since separate
|
|
194
|
+
`RegExp` instances do not satisfy `==`, using `.equals()` will fail at runtime.
|
|
195
|
+
- **Remediation**: Use `.isA<RegExp>()` type refinement along with cascades to
|
|
196
|
+
assert on the properties of the `RegExp` object explicitly:
|
|
197
|
+
```dart
|
|
198
|
+
check(myPattern).isA<RegExp>()
|
|
199
|
+
..has((r) => r.pattern, 'pattern').equals('Hello')
|
|
200
|
+
..has((r) => r.isMultiLine, 'isMultiLine').isTrue();
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### 7. Strict Nullable Boolean Safety (`bool?` fields)
|
|
204
|
+
- **Legacy Matcher**: Statically, `isTrue` and `isFalse` performed loose
|
|
205
|
+
dynamic checks at runtime, which silently accepted nullable booleans (`bool?`).
|
|
206
|
+
- **Package Checks**: `.isTrue()` and `.isFalse()` are defined strictly on
|
|
207
|
+
`Subject<bool>` (non-nullable). They are **not** available on `Subject<bool?>`.
|
|
208
|
+
- **Remediation**: For fields declared as `bool?`, you must either refine the
|
|
209
|
+
subject (e.g., `.isNotNull().isTrue()`) or simply use `.equals(true)` and
|
|
210
|
+
`.equals(false)` which are generic and work on all types:
|
|
211
|
+
```dart
|
|
212
|
+
// If options.flagOutdated is a bool?
|
|
213
|
+
check(options.flagOutdated).equals(true);
|
|
214
|
+
check(options.flagOutdated).equals(false);
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### 8. Map Key Containment (`containsKey` vs `contains`)
|
|
218
|
+
- **Legacy Matcher**: In `package:matcher`, `contains(key)` was used to assert
|
|
219
|
+
that a `Map` contained a specific key.
|
|
220
|
+
- **Package Checks**: Calling `.contains(...)` on a `Subject<Map>` is not
|
|
221
|
+
defined and will fail compilation.
|
|
222
|
+
- **Remediation**: Use the map-specific `.containsKey(key)` matcher instead:
|
|
223
|
+
```dart
|
|
224
|
+
// BEFORE (Matcher)
|
|
225
|
+
expect(myMap, contains('my_key'));
|
|
226
|
+
|
|
227
|
+
// AFTER (Checks)
|
|
228
|
+
check(myMap).containsKey('my_key');
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### 9. Explicit Generic Parameters for Extension Types
|
|
232
|
+
- **Legacy Matcher**: `expect(extensionTypeConst, 3)` compiled because of loose
|
|
233
|
+
dynamic equality.
|
|
234
|
+
- **Package Checks**: If `QrEciValue` is an extension type representation of `int`
|
|
235
|
+
(e.g., `extension type const QrEciValue(int value) implements int`), calling
|
|
236
|
+
`.equals(3)` on a `Subject<QrEciValue>` fails because `3` (an `int`) is not
|
|
237
|
+
assignable to `QrEciValue`. Casting with `as int` will trigger an
|
|
238
|
+
"Unnecessary cast" static analysis warning because `QrEciValue` statically
|
|
239
|
+
implements `int`.
|
|
240
|
+
- **Remediation**: Explicitly specify the generic type parameter on the `check`
|
|
241
|
+
function to force checks to treat it as the primitive type:
|
|
242
|
+
```dart
|
|
243
|
+
// YES (Type-safe and warning-free)
|
|
244
|
+
check<int>(QrEciValue.iso8859_1).equals(3);
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### 10. Dynamic Map / JSON Lookup Casting
|
|
248
|
+
- **Legacy Matcher**: Loose dynamic typing allowed comparing nested json lookups
|
|
249
|
+
statically typed as `dynamic` directly against lists or maps.
|
|
250
|
+
- **Package Checks**: Strict type safety rejects the implicit assignment of
|
|
251
|
+
`dynamic` to `Iterable<Object?>` in `.deepEquals(...)`.
|
|
252
|
+
- **Remediation**: Statically cast the dynamic lookup result to a `List` or `Map`:
|
|
253
|
+
```dart
|
|
254
|
+
// YES (Explicit cast to List)
|
|
255
|
+
check(myIterable).deepEquals(json['data']['items'] as List);
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## Matcher-to-Checks Mapping Table
|
|
261
|
+
|
|
262
|
+
Use this table as a quick reference for direct matcher replacements:
|
|
263
|
+
|
|
264
|
+
| Legacy Matcher | Package Checks Equivalent | Notes |
|
|
265
|
+
| :--- | :--- | :--- |
|
|
266
|
+
| `expect(actual, expected)` | `check(actual).equals(expected)` | Use `.deepEquals` for collections! |
|
|
267
|
+
| `expect(actual, equals(expected))` | `check(actual).equals(expected)` | Use `.deepEquals` for collections! |
|
|
268
|
+
| `isA<T>()` | `check(actual).isA<T>()` | Chaining is supported directly |
|
|
269
|
+
| `same(expected)` | `check(actual).identicalTo(expected)` | Verifies identity |
|
|
270
|
+
| `anyElement(matcher)` | `check(iterable).any(conditionCallback)` | E.g. `check(list).any((e) => e.equals(1))` |
|
|
271
|
+
| `everyElement(matcher)` | `check(iterable).every(conditionCallback)` | E.g. `check(list).every((e) => e.isGreaterThan(0))` |
|
|
272
|
+
| `hasLength(expected)` | `check(actual).length.equals(expected)` | Works on String, Map, Iterable, etc. |
|
|
273
|
+
| `isNot(matcher)` | `check(actual).not(conditionCallback)` | E.g. `check(val).not((it) => it.equals(5))` |
|
|
274
|
+
| `contains(element)` | `check(actual).contains(element)` | Works on String, Iterable (use `containsKey` for Map!) |
|
|
275
|
+
| `contains(key)` (on a Map) | `check(map).containsKey(key)` | Map key containment |
|
|
276
|
+
| `startsWith(prefix)` | `check(string).startsWith(prefix)` | String only |
|
|
277
|
+
| `endsWith(suffix)` | `check(string).endsWith(suffix)` | String only |
|
|
278
|
+
| `isEmpty` | `check(actual).isEmpty()` | Works on String, Map, Iterable |
|
|
279
|
+
| `isNotEmpty` | `check(actual).isNotEmpty()` | Works on String, Map, Iterable |
|
|
280
|
+
| `isNull` | `check(actual).isNull()` | |
|
|
281
|
+
| `isNotNull` | `check(actual).isNotNull()` | |
|
|
282
|
+
| `isTrue` / `true` | `check(actual).isTrue()` | Works on non-nullable `bool` only |
|
|
283
|
+
| `isFalse` / `false` | `check(actual).isFalse()` | Works on non-nullable `bool` only |
|
|
284
|
+
| `completion(matcher)` | `await check(future).completes(conditionCallback)` | Must be awaited! |
|
|
285
|
+
| `throwsA(matcher)` | `await check(future).throws<Type>()` | Must be awaited! |
|
|
286
|
+
| `emits(value)` | `await check(streamQueue).emits(conditionCallback)` | Must be awaited! |
|
|
287
|
+
| `emitsThrough(value)` | `await check(streamQueue).emitsThrough(conditionCallback)` | Must be awaited! |
|
|
288
|
+
| `stringContainsInOrder(list)` | `check(string).containsInOrder(list)` | String only |
|
|
289
|
+
| `pairwiseCompare(...)` | `check(actual).pairwiseMatches(...)` | |
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
## Matchers with No Direct Replacements
|
|
294
|
+
|
|
295
|
+
Some legacy matchers do not have a one-to-one equivalent in `package:checks`
|
|
296
|
+
due to API cleanup. Use these standard workarounds:
|
|
297
|
+
|
|
298
|
+
### 1. Specific Error Matchers
|
|
299
|
+
- **Legacy**: `throwsArgumentError`, `throwsStateError`,
|
|
300
|
+
`throwsUnsupportedError`, etc.
|
|
301
|
+
- **Checks**: Use `.throws<T>()` with the specific error type:
|
|
302
|
+
```dart
|
|
303
|
+
await check(triggerError()).throws<ArgumentError>();
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
### 2. The `anything` Matcher
|
|
307
|
+
- **Legacy**: `expect(actual, anything)`
|
|
308
|
+
- **Checks**: Pass an empty condition callback `(_) {}` when a condition is
|
|
309
|
+
syntactically required:
|
|
310
|
+
```dart
|
|
311
|
+
await check(someFuture).completes((_) {});
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### 3. Specific Numeric Toggles
|
|
315
|
+
- **Legacy**: `isPositive`, `isNegative`, `isZero`, `isNonPositive`,
|
|
316
|
+
`isNonNegative`, `isNonZero`
|
|
317
|
+
- **Checks**: Use explicit comparative expectations:
|
|
318
|
+
- `isPositive` $\rightarrow$ `isGreaterThan(0)`
|
|
319
|
+
- `isNegative` $\rightarrow$ `isLessThan(0)`
|
|
320
|
+
- `isZero` $\rightarrow$ `equals(0)`
|
|
321
|
+
- `isNonNegative` $\rightarrow$ `isGreaterOrEqual(0)`
|
|
322
|
+
|
|
323
|
+
### 4. Numeric Ranges
|
|
324
|
+
- **Legacy**: `inClosedOpenRange(min, max)`, `inInclusiveRange(min, max)`,
|
|
325
|
+
etc.
|
|
326
|
+
- **Checks**: Chain the boundaries using the cascade operator (`..`):
|
|
327
|
+
```dart
|
|
328
|
+
check(actualValue)
|
|
329
|
+
..isGreaterOrEqual(min)
|
|
330
|
+
..isLessThan(max);
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## Writing Custom Expectations (Replacing Custom Matchers)
|
|
336
|
+
|
|
337
|
+
When migrating from a legacy codebase, you may encounter custom `Matcher`
|
|
338
|
+
subclasses. In `package:checks`, custom assertions are implemented as
|
|
339
|
+
`extension` methods on `Subject<T>`.
|
|
340
|
+
|
|
341
|
+
To write custom expectations, you must import the checks context API:
|
|
342
|
+
```dart
|
|
343
|
+
import 'package:checks/context.dart';
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
### 1. Simple Custom Expectations (using `expect`)
|
|
347
|
+
Use `context.expect` to check a property and return a `Rejection` on failure:
|
|
348
|
+
```dart
|
|
349
|
+
extension CustomPersonChecks on Subject<Person> {
|
|
350
|
+
void isAdult() {
|
|
351
|
+
context.expect(
|
|
352
|
+
() => ['is an adult (age >= 18)'],
|
|
353
|
+
(actual) {
|
|
354
|
+
if (actual.age >= 18) return null; // Pass
|
|
355
|
+
return Rejection(
|
|
356
|
+
which: ['is only ${actual.age} years old'],
|
|
357
|
+
);
|
|
358
|
+
},
|
|
359
|
+
);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
### 2. Nested Property Extraction (using `nest` or `has`)
|
|
365
|
+
To extract a property and allow further chained checks, use `nest` or the
|
|
366
|
+
simpler `has` helper:
|
|
367
|
+
- **Using `has` (Recommended for simple, non-failing field access)**:
|
|
368
|
+
```dart
|
|
369
|
+
extension CustomPersonChecks on Subject<Person> {
|
|
370
|
+
Subject<Address> get address => has((p) => p.address, 'address');
|
|
371
|
+
}
|
|
372
|
+
```
|
|
373
|
+
- **Using `nest` (For property extraction that can fail or reject)**:
|
|
374
|
+
```dart
|
|
375
|
+
extension CustomPersonChecks on Subject<Person> {
|
|
376
|
+
Subject<String> get ssn => context.nest(
|
|
377
|
+
'has a valid SSN',
|
|
378
|
+
(actual) {
|
|
379
|
+
final ssnValue = actual.ssn;
|
|
380
|
+
if (ssnValue == null) {
|
|
381
|
+
return Extracted.rejection(which: ['has no SSN']);
|
|
382
|
+
}
|
|
383
|
+
return Extracted.value(ssnValue);
|
|
384
|
+
},
|
|
385
|
+
);
|
|
386
|
+
}
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
### 3. Asynchronous Custom Expectations
|
|
390
|
+
If the expectation is asynchronous (e.g. checking a Future or Stream), use
|
|
391
|
+
`context.expectAsync` or `context.nestAsync` and return the resulting `Future`:
|
|
392
|
+
```dart
|
|
393
|
+
extension CustomFutureChecks<T> on Subject<Future<T>> {
|
|
394
|
+
Future<void> completesNormally() {
|
|
395
|
+
return context.expectAsync(
|
|
396
|
+
() => ['completes without throwing'],
|
|
397
|
+
(actual) async {
|
|
398
|
+
try {
|
|
399
|
+
await actual;
|
|
400
|
+
return null; // Pass
|
|
401
|
+
} catch (e) {
|
|
402
|
+
return Rejection(which: ['threw $e']);
|
|
403
|
+
}
|
|
404
|
+
},
|
|
405
|
+
);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
---
|
|
411
|
+
|
|
412
|
+
## Strategies for Discovery
|
|
413
|
+
|
|
414
|
+
Execute these commands in the terminal to identify legacy matchers and files
|
|
415
|
+
requiring migration:
|
|
416
|
+
|
|
417
|
+
```bash
|
|
418
|
+
# 1. Find all test files containing legacy expect() or expectLater()
|
|
419
|
+
grep -rn "expect(" test/
|
|
420
|
+
grep -rn "expectLater(" test/
|
|
421
|
+
|
|
422
|
+
# 2. Find potential collection equality pitfalls (literal lists or maps)
|
|
423
|
+
grep -rn "expect(.*, \[" test/
|
|
424
|
+
grep -rn "expect(.*, {" test/
|
|
425
|
+
|
|
426
|
+
# 3. Find matches() calls (need conversion to RegExp + matchesPattern)
|
|
427
|
+
grep -rn "matches(" test/
|
|
428
|
+
|
|
429
|
+
# 4. Find legacy TypeMatcher.having() calls (which need conversion to .has())
|
|
430
|
+
grep -rn "having(" test/
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
---
|
|
434
|
+
|
|
435
|
+
## Examples
|
|
436
|
+
|
|
437
|
+
### Basic Assertions
|
|
438
|
+
**Before (Matcher):**
|
|
439
|
+
```dart
|
|
440
|
+
expect(someValue, isNotNull);
|
|
441
|
+
expect(result, isTrue, reason: 'should be successful');
|
|
442
|
+
expect(myString, startsWith('hello'));
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
**After (Checks):**
|
|
446
|
+
```dart
|
|
447
|
+
check(someValue).isNotNull();
|
|
448
|
+
check(because: 'should be successful', result).isTrue();
|
|
449
|
+
check(myString).startsWith('hello');
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
### Collection and Deep Equality
|
|
453
|
+
**Before (Matcher):**
|
|
454
|
+
```dart
|
|
455
|
+
expect(items, [1, 2, 3]);
|
|
456
|
+
expect(configMap, equals({'port': 8080}));
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
**After (Checks):**
|
|
460
|
+
```dart
|
|
461
|
+
check(items).deepEquals([1, 2, 3]);
|
|
462
|
+
check(configMap).deepEquals({'port': 8080});
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
### Chaining and Cascades
|
|
466
|
+
**Before (Matcher):**
|
|
467
|
+
```dart
|
|
468
|
+
expect(someString, allOf([
|
|
469
|
+
startsWith('a'),
|
|
470
|
+
contains('b'),
|
|
471
|
+
endsWith('c'),
|
|
472
|
+
]));
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
**After (Checks):**
|
|
476
|
+
```dart
|
|
477
|
+
check(someString)
|
|
478
|
+
..startsWith('a')
|
|
479
|
+
..contains('b')
|
|
480
|
+
..endsWith('c');
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
### Complex Property Matching (has)
|
|
484
|
+
**Before (Matcher):**
|
|
485
|
+
```dart
|
|
486
|
+
expect(response, isA<Response>()
|
|
487
|
+
.having((r) => r.statusCode, 'statusCode', 200)
|
|
488
|
+
.having((r) => r.body, 'body', contains('success')));
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
**After (Checks):**
|
|
492
|
+
```dart
|
|
493
|
+
check(response).isA<Response>()
|
|
494
|
+
..has((r) => r.statusCode, 'statusCode').equals(200)
|
|
495
|
+
..has((r) => r.body, 'body').contains('success');
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
### Asynchronous Futures
|
|
499
|
+
**Before (Matcher):**
|
|
500
|
+
```dart
|
|
501
|
+
expect(fetchData(), completes);
|
|
502
|
+
expect(fetchData(), completion(equals('data')));
|
|
503
|
+
expect(failingCall(), throwsA(isA<StateError>()));
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
**After (Checks):**
|
|
507
|
+
```dart
|
|
508
|
+
await check(fetchData()).completes();
|
|
509
|
+
await check(fetchData()).completes((it) => it.equals('data'));
|
|
510
|
+
await check(failingCall()).throws<StateError>();
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
### Asynchronous Streams
|
|
514
|
+
**Before (Matcher):**
|
|
515
|
+
```dart
|
|
516
|
+
var queue = StreamQueue(Stream.fromIterable([1, 2, 3]));
|
|
517
|
+
await expectLater(queue, emitsInOrder([1, 2, 3]));
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
**After (Checks):**
|
|
521
|
+
```dart
|
|
522
|
+
var queue = StreamQueue(Stream.fromIterable([1, 2, 3]));
|
|
523
|
+
await check(queue).inOrder([
|
|
524
|
+
(s) => s.emits((e) => e.equals(1)),
|
|
525
|
+
(s) => s.emits((e) => e.equals(2)),
|
|
526
|
+
(s) => s.emits((e) => e.equals(3)),
|
|
527
|
+
]);
|
|
528
|
+
```
|