@dsalazardev/ai-hub-cli 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/NOTICE.md +34 -0
- package/README.md +64 -2
- package/agents/cpp-build-resolver.md +25 -0
- package/agents/cpp-reviewer.md +28 -0
- package/agents/csharp-reviewer.md +28 -0
- package/agents/django-build-resolver.md +25 -0
- package/agents/django-reviewer.md +28 -0
- package/agents/explorer-domain.md +28 -0
- package/agents/fastapi-reviewer.md +28 -0
- package/agents/flutter-build-resolver.md +25 -0
- package/agents/flutter-reviewer.md +28 -0
- package/agents/go-build-resolver.md +25 -0
- package/agents/go-reviewer.md +28 -0
- package/agents/implementer-backend.md +30 -0
- package/agents/implementer-frontend.md +30 -0
- package/agents/java-build-resolver.md +26 -0
- package/agents/java-reviewer.md +29 -0
- package/agents/kotlin-build-resolver.md +25 -0
- package/agents/kotlin-reviewer.md +28 -0
- package/agents/mle-reviewer.md +28 -0
- package/agents/php-reviewer.md +29 -0
- package/agents/postgres-reviewer.md +28 -0
- package/agents/python-reviewer.md +28 -0
- package/agents/pytorch-build-resolver.md +25 -0
- package/agents/rag-reviewer.md +28 -0
- package/agents/react-build-resolver.md +26 -0
- package/agents/react-reviewer.md +29 -0
- package/agents/reviewer-architecture.md +32 -0
- package/agents/reviewer-tests.md +31 -0
- package/agents/rust-build-resolver.md +25 -0
- package/agents/rust-reviewer.md +28 -0
- package/agents/spec-author.md +36 -0
- package/agents/spec-miner.md +14 -0
- package/agents/swift-build-resolver.md +25 -0
- package/agents/swift-reviewer.md +28 -0
- package/agents/typescript-reviewer.md +28 -0
- package/agents/vue-reviewer.md +28 -0
- package/dist/backup/snapshots.d.ts +24 -0
- package/dist/backup/snapshots.js +171 -0
- package/dist/bin/ai-hub.d.ts +2 -0
- package/dist/bin/ai-hub.js +11 -0
- package/dist/cli/args.d.ts +4 -0
- package/dist/cli/args.js +63 -0
- package/dist/cli/context.d.ts +7 -0
- package/dist/cli/context.js +74 -0
- package/dist/cli/doctor.d.ts +14 -0
- package/dist/cli/doctor.js +200 -0
- package/dist/cli/drift.d.ts +2 -0
- package/dist/cli/drift.js +34 -0
- package/dist/cli/items.d.ts +5 -0
- package/dist/cli/items.js +10 -0
- package/dist/cli/legacy.d.ts +3 -0
- package/dist/cli/legacy.js +18 -0
- package/dist/cli/maintenance.d.ts +8 -0
- package/dist/cli/maintenance.js +262 -0
- package/dist/cli/memory.d.ts +2 -0
- package/dist/cli/memory.js +84 -0
- package/dist/cli/onboarding.d.ts +17 -0
- package/dist/cli/onboarding.js +234 -0
- package/dist/cli/run.d.ts +15 -0
- package/dist/cli/run.js +183 -0
- package/dist/cli/source.d.ts +5 -0
- package/dist/cli/source.js +22 -0
- package/dist/cli/trunk.d.ts +8 -0
- package/dist/cli/trunk.js +54 -0
- package/dist/cli/types.d.ts +17 -0
- package/dist/cli/types.js +4 -0
- package/dist/cli/worktrees.d.ts +11 -0
- package/dist/cli/worktrees.js +141 -0
- package/dist/engine/engine.d.ts +48 -0
- package/dist/engine/engine.js +114 -0
- package/dist/engine/gates.d.ts +2 -0
- package/dist/engine/gates.js +93 -0
- package/dist/frontmatter.d.ts +11 -0
- package/dist/frontmatter.js +30 -0
- package/dist/harness/guards/adapters/context.d.ts +19 -0
- package/dist/harness/guards/adapters/context.js +153 -0
- package/dist/harness/guards/adapters/hermes.d.ts +13 -0
- package/dist/harness/guards/adapters/hermes.js +18 -0
- package/dist/harness/guards/adapters/hooks.d.ts +25 -0
- package/dist/harness/guards/adapters/hooks.js +52 -0
- package/dist/harness/guards/branch.d.ts +5 -0
- package/dist/harness/guards/branch.js +43 -0
- package/dist/harness/guards/danger.d.ts +13 -0
- package/dist/harness/guards/danger.js +157 -0
- package/dist/harness/guards/index.d.ts +6 -0
- package/dist/harness/guards/index.js +6 -0
- package/dist/harness/guards/preflight.d.ts +14 -0
- package/dist/harness/guards/preflight.js +37 -0
- package/dist/harness/guards/ship.d.ts +2 -0
- package/dist/harness/guards/ship.js +35 -0
- package/dist/harness/guards/trunk.d.ts +5 -0
- package/dist/harness/guards/trunk.js +41 -0
- package/dist/harness/guards/types.d.ts +50 -0
- package/dist/harness/guards/types.js +1 -0
- package/dist/harness/memory/ledger.d.ts +53 -0
- package/dist/harness/memory/ledger.js +136 -0
- package/dist/harness/memory/state.d.ts +35 -0
- package/dist/harness/memory/state.js +121 -0
- package/dist/harness/worktree/reaper.d.ts +32 -0
- package/dist/harness/worktree/reaper.js +54 -0
- package/dist/manifest/build.d.ts +1 -0
- package/dist/manifest/build.js +1 -0
- package/dist/manifest/cli.d.ts +2 -0
- package/dist/manifest/cli.js +44 -0
- package/dist/manifest/dispatch.d.ts +13 -0
- package/dist/manifest/dispatch.js +36 -0
- package/dist/manifest/labels.d.ts +15 -0
- package/dist/manifest/labels.js +70 -0
- package/dist/manifest/manifest.d.ts +113 -0
- package/dist/manifest/manifest.js +202 -0
- package/dist/package-info.d.ts +4 -0
- package/dist/package-info.js +7 -0
- package/dist/paths.d.ts +33 -0
- package/dist/paths.js +123 -0
- package/dist/presets/detect.d.ts +24 -0
- package/dist/presets/detect.js +116 -0
- package/dist/presets/materialize.d.ts +18 -0
- package/dist/presets/materialize.js +101 -0
- package/dist/presets/resolve.d.ts +37 -0
- package/dist/presets/resolve.js +83 -0
- package/dist/presets/schema.d.ts +57 -0
- package/dist/presets/schema.js +68 -0
- package/dist/source-checkout.d.ts +8 -0
- package/dist/source-checkout.js +19 -0
- package/dist/sync/config.d.ts +47 -0
- package/dist/sync/config.js +85 -0
- package/dist/sync/lock.d.ts +16 -0
- package/dist/sync/lock.js +43 -0
- package/dist/sync/render.d.ts +18 -0
- package/dist/sync/render.js +255 -0
- package/dist/sync/sync.d.ts +38 -0
- package/dist/sync/sync.js +288 -0
- package/dist/sync/targets.d.ts +24 -0
- package/dist/sync/targets.js +78 -0
- package/engine/coupling.json +4 -0
- package/engine/engine.yaml +250 -0
- package/engine/legacy-paths.json +4 -0
- package/engine/preflight.md +11 -0
- package/manifest.json +393 -0
- package/package.json +61 -4
- package/presets/angular-express/harness/rules/01-zero-any.sh +25 -0
- package/presets/angular-express/harness/rules/02-no-ng-module.sh +21 -0
- package/presets/angular-express/harness/rules/03-no-constructor-injection.sh +21 -0
- package/presets/angular-express/harness/rules/04-no-legacy-directives.sh +21 -0
- package/presets/angular-express/harness/rules/05-no-dolibarrdal-inheritance.sh +25 -0
- package/presets/angular-express/harness/rules/06-no-todos.sh +22 -0
- package/presets/angular-express/harness/run-all.sh +13 -0
- package/presets/angular-express/preset.yaml +55 -0
- package/presets/angular-express/references/common-imports-catalog.md +146 -0
- package/presets/angular-express/references/fichajes-migration-notes.md +57 -0
- package/presets/angular-express/references/module-implementation-flow.md +260 -0
- package/presets/angular-express/references/products-coding-standard.md +143 -0
- package/presets/angular-express/references/products-module-blueprint.md +860 -0
- package/presets/angular-express/references/replicate-module-checklist.md +72 -0
- package/presets/angular-express/references/users-migration-notes.md +172 -0
- package/presets/angular-express/rules/architecture.md +8 -0
- package/presets/angular-express/rules/backend.md +4 -0
- package/presets/angular-express/rules/frontend.md +53 -0
- package/presets/angular-express/skills/angular-developer/SKILL.md +130 -0
- package/presets/angular-express/skills/angular-developer/references/angular-animations.md +160 -0
- package/presets/angular-express/skills/angular-developer/references/angular-aria.md +410 -0
- package/presets/angular-express/skills/angular-developer/references/cli.md +86 -0
- package/presets/angular-express/skills/angular-developer/references/component-harnesses.md +59 -0
- package/presets/angular-express/skills/angular-developer/references/component-styling.md +91 -0
- package/presets/angular-express/skills/angular-developer/references/components.md +117 -0
- package/presets/angular-express/skills/angular-developer/references/creating-services.md +97 -0
- package/presets/angular-express/skills/angular-developer/references/data-resolvers.md +69 -0
- package/presets/angular-express/skills/angular-developer/references/define-routes.md +67 -0
- package/presets/angular-express/skills/angular-developer/references/defining-providers.md +72 -0
- package/presets/angular-express/skills/angular-developer/references/di-fundamentals.md +120 -0
- package/presets/angular-express/skills/angular-developer/references/e2e-testing.md +66 -0
- package/presets/angular-express/skills/angular-developer/references/effects.md +83 -0
- package/presets/angular-express/skills/angular-developer/references/hierarchical-injectors.md +43 -0
- package/presets/angular-express/skills/angular-developer/references/host-elements.md +80 -0
- package/presets/angular-express/skills/angular-developer/references/injection-context.md +63 -0
- package/presets/angular-express/skills/angular-developer/references/inputs.md +101 -0
- package/presets/angular-express/skills/angular-developer/references/linked-signal.md +59 -0
- package/presets/angular-express/skills/angular-developer/references/loading-strategies.md +61 -0
- package/presets/angular-express/skills/angular-developer/references/mcp.md +106 -0
- package/presets/angular-express/skills/angular-developer/references/migrations.md +30 -0
- package/presets/angular-express/skills/angular-developer/references/navigate-to-routes.md +69 -0
- package/presets/angular-express/skills/angular-developer/references/outputs.md +86 -0
- package/presets/angular-express/skills/angular-developer/references/reactive-forms.md +122 -0
- package/presets/angular-express/skills/angular-developer/references/rendering-strategies.md +44 -0
- package/presets/angular-express/skills/angular-developer/references/resource.md +74 -0
- package/presets/angular-express/skills/angular-developer/references/route-animations.md +56 -0
- package/presets/angular-express/skills/angular-developer/references/route-guards.md +52 -0
- package/presets/angular-express/skills/angular-developer/references/router-lifecycle.md +45 -0
- package/presets/angular-express/skills/angular-developer/references/router-testing.md +87 -0
- package/presets/angular-express/skills/angular-developer/references/show-routes-with-outlets.md +68 -0
- package/presets/angular-express/skills/angular-developer/references/signal-forms.md +897 -0
- package/presets/angular-express/skills/angular-developer/references/signals-overview.md +94 -0
- package/presets/angular-express/skills/angular-developer/references/tailwind-css.md +69 -0
- package/presets/angular-express/skills/angular-developer/references/template-driven-forms.md +114 -0
- package/presets/angular-express/skills/angular-developer/references/testing-fundamentals.md +66 -0
- package/presets/angular-express/skills/angular-new-app/SKILL.md +62 -0
- package/presets/angular-express/skills/frontend-design/LICENSE.txt +177 -0
- package/presets/angular-express/skills/frontend-design/SKILL.md +55 -0
- package/presets/angular-express/skills/onna-architecture-angular/SKILL.md +229 -0
- package/presets/angular-express/skills/onna-architecture-bff/SKILL.md +446 -0
- package/presets/angular-express/skills/onna-architecture-common/SKILL.md +313 -0
- package/presets/angular-express/skills/onna-design-system/SKILL.md +615 -0
- package/presets/base/preset.yaml +27 -0
- package/presets/base/rules/core.md +35 -0
- package/presets/generic-ts/preset.yaml +46 -0
- package/presets/python/preset.yaml +47 -0
- package/presets/python/rules/python.md +10 -0
- package/schema/engine.schema.json +73 -0
- package/schema/manifest.schema.json +140 -0
- package/schema/preset.schema.json +98 -0
- package/schema/state.schema.json +27 -0
- package/skills/shared/ab-testing/SKILL.md +159 -0
- package/skills/shared/ab-testing/evals/README.md +8 -0
- package/skills/shared/ab-testing/evals/cases.yaml +49 -0
- package/skills/shared/ab-testing/references/pitfalls.md +74 -0
- package/skills/shared/ab-testing/references/sample-size-and-cuped.md +128 -0
- package/skills/shared/ab-testing/scripts/verify.sh +89 -0
- package/skills/shared/accessibility/SKILL.md +216 -0
- package/skills/shared/accessibility/evals/README.md +3 -0
- package/skills/shared/accessibility/evals/cases.yaml +47 -0
- package/skills/shared/accessibility/references/aria-patterns.md +113 -0
- package/skills/shared/accessibility/references/wcag22-checklist.md +83 -0
- package/skills/shared/accessibility/scripts/verify.sh +103 -0
- package/skills/shared/agent-eval/SKILL.md +187 -0
- package/skills/shared/agent-eval/evals/README.md +12 -0
- package/skills/shared/agent-eval/evals/cases.yaml +45 -0
- package/skills/shared/agent-eval/references/judge-design.md +118 -0
- package/skills/shared/agent-eval/references/runner-and-gate.md +183 -0
- package/skills/shared/agent-eval/scripts/verify.sh +161 -0
- package/skills/shared/agent-safety/SKILL.md +169 -0
- package/skills/shared/agent-safety/evals/README.md +12 -0
- package/skills/shared/agent-safety/evals/cases.yaml +46 -0
- package/skills/shared/agent-safety/references/threat-model.md +51 -0
- package/skills/shared/analyze/SKILL.md +123 -0
- package/skills/shared/analyze/evals/README.md +72 -0
- package/skills/shared/analyze/evals/cases.yaml +74 -0
- package/skills/shared/angular/SKILL.md +275 -0
- package/skills/shared/angular/evals/README.md +3 -0
- package/skills/shared/angular/evals/cases.yaml +38 -0
- package/skills/shared/angular/references/migration.md +81 -0
- package/skills/shared/angular/references/signals-rxjs.md +92 -0
- package/skills/shared/angular/scripts/verify.sh +122 -0
- package/skills/shared/api-connector-builder/SKILL.md +268 -0
- package/skills/shared/api-connector-builder/evals/README.md +11 -0
- package/skills/shared/api-connector-builder/evals/cases.yaml +47 -0
- package/skills/shared/api-connector-builder/references/auth-flows.md +132 -0
- package/skills/shared/api-connector-builder/references/pagination.md +144 -0
- package/skills/shared/api-connector-builder/scripts/verify.sh +172 -0
- package/skills/shared/api-design/SKILL.md +182 -0
- package/skills/shared/api-design/evals/README.md +3 -0
- package/skills/shared/api-design/evals/cases.yaml +45 -0
- package/skills/shared/api-design/references/graphql-design.md +70 -0
- package/skills/shared/api-design/references/openapi-contract.md +86 -0
- package/skills/shared/api-design/references/rest-conventions.md +63 -0
- package/skills/shared/api-design/references/versioning-and-evolution.md +49 -0
- package/skills/shared/api-design/scripts/verify.sh +138 -0
- package/skills/shared/astro/SKILL.md +257 -0
- package/skills/shared/astro/evals/README.md +3 -0
- package/skills/shared/astro/evals/cases.yaml +41 -0
- package/skills/shared/astro/references/content-layer.md +118 -0
- package/skills/shared/astro/references/deploy-and-integrations.md +163 -0
- package/skills/shared/astro/scripts/verify.sh +137 -0
- package/skills/shared/author-skill/SKILL.md +194 -0
- package/skills/shared/author-skill/evals/README.md +66 -0
- package/skills/shared/author-skill/evals/cases.yaml +75 -0
- package/skills/shared/author-skill/references/description-recipe.md +85 -0
- package/skills/shared/author-skill/references/eval-authoring.md +108 -0
- package/skills/shared/author-skill/references/skill-conventions.md +95 -0
- package/skills/shared/automation-flows/SKILL.md +122 -0
- package/skills/shared/automation-flows/evals/README.md +5 -0
- package/skills/shared/automation-flows/evals/cases.yaml +44 -0
- package/skills/shared/automation-flows/references/error-handling.md +58 -0
- package/skills/shared/automation-flows/references/n8n-workflow-json.md +63 -0
- package/skills/shared/automation-flows/scripts/verify.sh +78 -0
- package/skills/shared/aws-essentials/SKILL.md +206 -0
- package/skills/shared/aws-essentials/evals/README.md +10 -0
- package/skills/shared/aws-essentials/evals/cases.yaml +44 -0
- package/skills/shared/aws-essentials/references/iam-least-privilege.md +134 -0
- package/skills/shared/aws-essentials/references/rds-cloudfront-recipes.md +127 -0
- package/skills/shared/aws-essentials/scripts/verify.sh +99 -0
- package/skills/shared/backups/SKILL.md +131 -0
- package/skills/shared/backups/evals/README.md +3 -0
- package/skills/shared/backups/evals/cases.yaml +42 -0
- package/skills/shared/backups/references/engine-recipes.md +121 -0
- package/skills/shared/backups/references/restore-runbook.md +65 -0
- package/skills/shared/backups/scripts/verify.sh +80 -0
- package/skills/shared/bash-scripting/SKILL.md +227 -0
- package/skills/shared/bash-scripting/evals/README.md +3 -0
- package/skills/shared/bash-scripting/evals/cases.yaml +45 -0
- package/skills/shared/bash-scripting/references/portability.md +97 -0
- package/skills/shared/bash-scripting/scripts/verify.sh +140 -0
- package/skills/shared/building-agents/SKILL.md +386 -0
- package/skills/shared/building-agents/evals/README.md +68 -0
- package/skills/shared/building-agents/evals/cases.yaml +60 -0
- package/skills/shared/building-agents/references/agent-loops-and-harness.md +371 -0
- package/skills/shared/building-agents/references/evals-and-observability.md +420 -0
- package/skills/shared/building-agents/references/mcp-servers.md +294 -0
- package/skills/shared/building-agents/references/provider-abstraction.md +489 -0
- package/skills/shared/building-agents/references/tools-and-rag.md +417 -0
- package/skills/shared/building-agents/scripts/verify.sh +121 -0
- package/skills/shared/chatbot/SKILL.md +151 -0
- package/skills/shared/chatbot/evals/README.md +13 -0
- package/skills/shared/chatbot/evals/cases.yaml +43 -0
- package/skills/shared/chatbot/references/handoff-and-sales.md +71 -0
- package/skills/shared/chatbot/references/system-prompt-and-guardrails.md +78 -0
- package/skills/shared/chatbot/scripts/verify.sh +162 -0
- package/skills/shared/chrome-extension/SKILL.md +169 -0
- package/skills/shared/chrome-extension/evals/README.md +12 -0
- package/skills/shared/chrome-extension/evals/cases.yaml +40 -0
- package/skills/shared/chrome-extension/references/store-and-migration.md +84 -0
- package/skills/shared/chrome-extension/scripts/verify.sh +62 -0
- package/skills/shared/clarify/SKILL.md +161 -0
- package/skills/shared/clarify/evals/README.md +70 -0
- package/skills/shared/clarify/evals/cases.yaml +71 -0
- package/skills/shared/clickhouse-analytics/SKILL.md +159 -0
- package/skills/shared/clickhouse-analytics/evals/README.md +3 -0
- package/skills/shared/clickhouse-analytics/evals/cases.yaml +45 -0
- package/skills/shared/clickhouse-analytics/references/ingestion-and-mvs.md +109 -0
- package/skills/shared/clickhouse-analytics/references/query-optimization.md +76 -0
- package/skills/shared/clickhouse-analytics/references/schema-and-engines.md +63 -0
- package/skills/shared/clickhouse-analytics/scripts/verify.sh +109 -0
- package/skills/shared/cloudflare/SKILL.md +186 -0
- package/skills/shared/cloudflare/evals/README.md +15 -0
- package/skills/shared/cloudflare/evals/cases.yaml +46 -0
- package/skills/shared/cloudflare/references/storage-primitives.md +104 -0
- package/skills/shared/cloudflare/references/wrangler-config.md +91 -0
- package/skills/shared/cloudflare/scripts/verify.sh +133 -0
- package/skills/shared/code-review/SKILL.md +132 -0
- package/skills/shared/code-review/evals/README.md +3 -0
- package/skills/shared/code-review/evals/cases.yaml +55 -0
- package/skills/shared/code-review/references/pr-workflow.md +67 -0
- package/skills/shared/codebase-onboarding/SKILL.md +128 -0
- package/skills/shared/codebase-onboarding/evals/README.md +3 -0
- package/skills/shared/codebase-onboarding/evals/cases.yaml +69 -0
- package/skills/shared/codebase-onboarding/references/recon-playbook.md +57 -0
- package/skills/shared/codebase-onboarding/scripts/verify.sh +54 -0
- package/skills/shared/compose-multiplatform/SKILL.md +198 -0
- package/skills/shared/compose-multiplatform/evals/README.md +3 -0
- package/skills/shared/compose-multiplatform/evals/cases.yaml +40 -0
- package/skills/shared/compose-multiplatform/references/ios-interop.md +91 -0
- package/skills/shared/compose-multiplatform/references/project-setup.md +96 -0
- package/skills/shared/compose-multiplatform/scripts/verify.sh +123 -0
- package/skills/shared/connect-tool/SKILL.md +163 -0
- package/skills/shared/connect-tool/evals/cases.yaml +58 -0
- package/skills/shared/constitution/SKILL.md +158 -0
- package/skills/shared/constitution/evals/README.md +68 -0
- package/skills/shared/constitution/evals/cases.yaml +72 -0
- package/skills/shared/constitution/references/constitution-template.md +100 -0
- package/skills/shared/context-budget/SKILL.md +114 -0
- package/skills/shared/context-budget/evals/README.md +11 -0
- package/skills/shared/context-budget/evals/cases.yaml +40 -0
- package/skills/shared/context-budget/references/handoff-and-compaction.md +96 -0
- package/skills/shared/continuous-learning/SKILL.md +106 -0
- package/skills/shared/continuous-learning/evals/README.md +16 -0
- package/skills/shared/continuous-learning/evals/cases.yaml +39 -0
- package/skills/shared/continuous-learning/references/lesson-routing.md +106 -0
- package/skills/shared/coolify/SKILL.md +194 -0
- package/skills/shared/coolify/evals/README.md +21 -0
- package/skills/shared/coolify/evals/cases.yaml +46 -0
- package/skills/shared/coolify/references/databases-and-backups.md +99 -0
- package/skills/shared/coolify/references/deploy-recipes.md +105 -0
- package/skills/shared/coolify/references/install-and-proxy.md +80 -0
- package/skills/shared/coolify/scripts/verify.sh +123 -0
- package/skills/shared/cost-tracking/SKILL.md +176 -0
- package/skills/shared/cost-tracking/evals/README.md +3 -0
- package/skills/shared/cost-tracking/evals/cases.yaml +45 -0
- package/skills/shared/cost-tracking/references/cloud-caps.md +52 -0
- package/skills/shared/cost-tracking/references/pricing-tables.md +51 -0
- package/skills/shared/cost-tracking/scripts/verify.sh +135 -0
- package/skills/shared/cpp/SKILL.md +302 -0
- package/skills/shared/cpp/evals/README.md +14 -0
- package/skills/shared/cpp/evals/cases.yaml +44 -0
- package/skills/shared/cpp/references/cmake.md +167 -0
- package/skills/shared/cpp/references/move-and-templates.md +130 -0
- package/skills/shared/cpp/references/undefined-behavior.md +86 -0
- package/skills/shared/cpp/scripts/verify.sh +165 -0
- package/skills/shared/csharp-dotnet/SKILL.md +272 -0
- package/skills/shared/csharp-dotnet/evals/README.md +3 -0
- package/skills/shared/csharp-dotnet/evals/cases.yaml +48 -0
- package/skills/shared/csharp-dotnet/references/aspnetcore.md +99 -0
- package/skills/shared/csharp-dotnet/references/async.md +82 -0
- package/skills/shared/csharp-dotnet/references/efcore.md +96 -0
- package/skills/shared/csharp-dotnet/scripts/verify.sh +90 -0
- package/skills/shared/data-cleaning/SKILL.md +259 -0
- package/skills/shared/data-cleaning/evals/README.md +16 -0
- package/skills/shared/data-cleaning/evals/cases.yaml +57 -0
- package/skills/shared/data-cleaning/references/normalization-recipes.md +136 -0
- package/skills/shared/data-cleaning/references/validation-patterns.md +134 -0
- package/skills/shared/data-cleaning/scripts/verify.sh +115 -0
- package/skills/shared/data-scraper/SKILL.md +130 -0
- package/skills/shared/data-scraper/evals/README.md +3 -0
- package/skills/shared/data-scraper/evals/cases.yaml +46 -0
- package/skills/shared/data-scraper/references/anti-bot.md +85 -0
- package/skills/shared/data-scraper/references/frameworks.md +116 -0
- package/skills/shared/data-scraper/references/legal-compliance.md +64 -0
- package/skills/shared/data-scraper/scripts/verify.sh +166 -0
- package/skills/shared/db-migrations/SKILL.md +237 -0
- package/skills/shared/db-migrations/evals/README.md +10 -0
- package/skills/shared/db-migrations/evals/cases.yaml +46 -0
- package/skills/shared/db-migrations/references/backfill-and-batching.md +105 -0
- package/skills/shared/db-migrations/references/expand-contract-playbook.md +152 -0
- package/skills/shared/db-migrations/references/tools-and-runners.md +88 -0
- package/skills/shared/db-migrations/scripts/verify.sh +112 -0
- package/skills/shared/debug/SKILL.md +188 -0
- package/skills/shared/debug/evals/README.md +88 -0
- package/skills/shared/debug/evals/cases.yaml +74 -0
- package/skills/shared/decision-challenge/SKILL.md +113 -0
- package/skills/shared/decision-challenge/evals/README.md +3 -0
- package/skills/shared/decision-challenge/evals/cases.yaml +42 -0
- package/skills/shared/decision-records/SKILL.md +202 -0
- package/skills/shared/decision-records/evals/README.md +3 -0
- package/skills/shared/decision-records/evals/cases.yaml +43 -0
- package/skills/shared/decision-records/references/templates.md +252 -0
- package/skills/shared/decision-records/scripts/verify.sh +105 -0
- package/skills/shared/deep-learning/SKILL.md +226 -0
- package/skills/shared/deep-learning/evals/README.md +11 -0
- package/skills/shared/deep-learning/evals/cases.yaml +48 -0
- package/skills/shared/deep-learning/references/distributed.md +105 -0
- package/skills/shared/deep-learning/references/training-recipes.md +135 -0
- package/skills/shared/deployment/SKILL.md +374 -0
- package/skills/shared/deployment/evals/README.md +50 -0
- package/skills/shared/deployment/evals/cases.yaml +53 -0
- package/skills/shared/deployment/references/coolify.md +216 -0
- package/skills/shared/deployment/references/dockerfiles-by-stack.md +319 -0
- package/skills/shared/deployment/references/github-actions.md +295 -0
- package/skills/shared/deployment/references/hosting-targets.md +272 -0
- package/skills/shared/deployment/scripts/verify.sh +134 -0
- package/skills/shared/deprecation/SKILL.md +123 -0
- package/skills/shared/deprecation/evals/README.md +3 -0
- package/skills/shared/deprecation/evals/cases.yaml +42 -0
- package/skills/shared/design/IMPECCABLE-LICENSE.txt +191 -0
- package/skills/shared/design/SKILL.md +111 -0
- package/skills/shared/design/THIRD_PARTY.md +26 -0
- package/skills/shared/design/engine/LICENSE +21 -0
- package/skills/shared/design/engine/RUN.md +515 -0
- package/skills/shared/design/engine/UPSTREAM.json +4 -0
- package/skills/shared/design/engine/assets/app.css +216 -0
- package/skills/shared/design/engine/assets/base.css +105 -0
- package/skills/shared/design/engine/assets/base.js +37 -0
- package/skills/shared/design/engine/assets/charts.js +617 -0
- package/skills/shared/design/engine/assets/scenes/stage.css +28 -0
- package/skills/shared/design/engine/assets/scenes/stage.js +133 -0
- package/skills/shared/design/engine/library/app.json +1327 -0
- package/skills/shared/design/engine/library/directions.json +1078 -0
- package/skills/shared/design/engine/library/heroes.json +1086 -0
- package/skills/shared/design/engine/library/motions.json +92 -0
- package/skills/shared/design/engine/library/palettes.json +1485 -0
- package/skills/shared/design/engine/library/photos.json +7240 -0
- package/skills/shared/design/engine/library/sections.json +4429 -0
- package/skills/shared/design/engine/library/sites.json +8350 -0
- package/skills/shared/design/engine/library/type.json +2024 -0
- package/skills/shared/design/engine/references/app-screens.md +1199 -0
- package/skills/shared/design/engine/references/colour.md +141 -0
- package/skills/shared/design/engine/references/copy.md +177 -0
- package/skills/shared/design/engine/references/critique.md +182 -0
- package/skills/shared/design/engine/references/imagery.md +791 -0
- package/skills/shared/design/engine/references/layout.md +292 -0
- package/skills/shared/design/engine/references/motion.md +980 -0
- package/skills/shared/design/engine/references/research.md +356 -0
- package/skills/shared/design/engine/references/scenes.md +174 -0
- package/skills/shared/design/engine/references/tells.md +115 -0
- package/skills/shared/design/engine/references/type.md +170 -0
- package/skills/shared/design/engine/scripts/assets.mjs +865 -0
- package/skills/shared/design/engine/scripts/draw.mjs +584 -0
- package/skills/shared/design/engine/scripts/inspect.mjs +303 -0
- package/skills/shared/design/engine/scripts/lib/app-draw.mjs +203 -0
- package/skills/shared/design/engine/scripts/lib/cdp.mjs +248 -0
- package/skills/shared/design/engine/scripts/lib/probe.mjs +909 -0
- package/skills/shared/design/engine/scripts/lib/rules.mjs +243 -0
- package/skills/shared/design/engine/scripts/lint.mjs +119 -0
- package/skills/shared/design/engine/scripts/scenes.mjs +124 -0
- package/skills/shared/design/evals/cases.yaml +45 -0
- package/skills/shared/design/references/design-md.md +49 -0
- package/skills/shared/design/references/finish-review.md +46 -0
- package/skills/shared/design/references/modes.md +51 -0
- package/skills/shared/digitalocean/SKILL.md +227 -0
- package/skills/shared/digitalocean/evals/README.md +10 -0
- package/skills/shared/digitalocean/evals/cases.yaml +37 -0
- package/skills/shared/digitalocean/references/app-spec.md +126 -0
- package/skills/shared/digitalocean/references/droplet-ops.md +95 -0
- package/skills/shared/digitalocean/scripts/verify.sh +102 -0
- package/skills/shared/django/SKILL.md +263 -0
- package/skills/shared/django/evals/README.md +11 -0
- package/skills/shared/django/evals/cases.yaml +47 -0
- package/skills/shared/django/references/drf.md +109 -0
- package/skills/shared/django/references/orm-performance.md +91 -0
- package/skills/shared/django/references/security.md +81 -0
- package/skills/shared/django/references/testing.md +86 -0
- package/skills/shared/django/scripts/verify.sh +115 -0
- package/skills/shared/docker/SKILL.md +251 -0
- package/skills/shared/docker/evals/README.md +10 -0
- package/skills/shared/docker/evals/cases.yaml +44 -0
- package/skills/shared/docker/references/base-images-and-stages.md +104 -0
- package/skills/shared/docker/references/compose-recipes.md +109 -0
- package/skills/shared/docker/scripts/verify.sh +149 -0
- package/skills/shared/domains-dns/SKILL.md +131 -0
- package/skills/shared/domains-dns/evals/README.md +16 -0
- package/skills/shared/domains-dns/evals/cases.yaml +47 -0
- package/skills/shared/domains-dns/references/record-cookbook.md +94 -0
- package/skills/shared/domains-dns/references/tls-and-acme.md +90 -0
- package/skills/shared/domains-dns/references/verify-and-debug.md +64 -0
- package/skills/shared/domains-dns/scripts/verify.sh +163 -0
- package/skills/shared/drizzle-orm/SKILL.md +231 -0
- package/skills/shared/drizzle-orm/evals/README.md +12 -0
- package/skills/shared/drizzle-orm/evals/cases.yaml +47 -0
- package/skills/shared/drizzle-orm/references/relations-and-drivers.md +118 -0
- package/skills/shared/drizzle-orm/scripts/verify.sh +155 -0
- package/skills/shared/duckdb/SKILL.md +202 -0
- package/skills/shared/duckdb/evals/README.md +31 -0
- package/skills/shared/duckdb/evals/cases.yaml +41 -0
- package/skills/shared/duckdb/references/python-and-interop.md +105 -0
- package/skills/shared/duckdb/references/remote-and-lakehouse.md +101 -0
- package/skills/shared/duckdb/scripts/verify.sh +71 -0
- package/skills/shared/dynamodb/SKILL.md +204 -0
- package/skills/shared/dynamodb/evals/README.md +8 -0
- package/skills/shared/dynamodb/evals/cases.yaml +46 -0
- package/skills/shared/dynamodb/references/access-patterns.md +127 -0
- package/skills/shared/dynamodb/references/capacity-and-limits.md +78 -0
- package/skills/shared/dynamodb/scripts/verify.sh +108 -0
- package/skills/shared/e2e-testing/SKILL.md +233 -0
- package/skills/shared/e2e-testing/evals/README.md +10 -0
- package/skills/shared/e2e-testing/evals/cases.yaml +64 -0
- package/skills/shared/e2e-testing/references/config-and-ci.md +156 -0
- package/skills/shared/e2e-testing/references/flakiness-playbook.md +124 -0
- package/skills/shared/e2e-testing/scripts/verify.sh +117 -0
- package/skills/shared/electron/SKILL.md +209 -0
- package/skills/shared/electron/evals/README.md +13 -0
- package/skills/shared/electron/evals/cases.yaml +38 -0
- package/skills/shared/electron/references/packaging-and-updates.md +122 -0
- package/skills/shared/electron/references/security-and-ipc.md +158 -0
- package/skills/shared/electron/scripts/verify.sh +143 -0
- package/skills/shared/elixir/SKILL.md +209 -0
- package/skills/shared/elixir/evals/README.md +3 -0
- package/skills/shared/elixir/evals/cases.yaml +41 -0
- package/skills/shared/elixir/references/mix-and-releases.md +91 -0
- package/skills/shared/elixir/references/otp-patterns.md +96 -0
- package/skills/shared/elixir/scripts/verify.sh +76 -0
- package/skills/shared/email-deliverability/SKILL.md +148 -0
- package/skills/shared/email-deliverability/evals/README.md +21 -0
- package/skills/shared/email-deliverability/evals/cases.yaml +45 -0
- package/skills/shared/email-deliverability/scripts/verify.sh +98 -0
- package/skills/shared/embeddings-search/SKILL.md +184 -0
- package/skills/shared/embeddings-search/evals/README.md +10 -0
- package/skills/shared/embeddings-search/evals/cases.yaml +44 -0
- package/skills/shared/embeddings-search/references/evaluation.md +86 -0
- package/skills/shared/embeddings-search/references/models.md +73 -0
- package/skills/shared/embeddings-search/scripts/verify.sh +103 -0
- package/skills/shared/error-handling/SKILL.md +273 -0
- package/skills/shared/error-handling/evals/README.md +12 -0
- package/skills/shared/error-handling/evals/cases.yaml +46 -0
- package/skills/shared/error-handling/references/boundaries-and-messaging.md +120 -0
- package/skills/shared/error-handling/references/retry-and-resilience.md +154 -0
- package/skills/shared/error-handling/scripts/verify.sh +110 -0
- package/skills/shared/expo/SKILL.md +243 -0
- package/skills/shared/expo/evals/README.md +13 -0
- package/skills/shared/expo/evals/cases.yaml +44 -0
- package/skills/shared/expo/references/config-plugins.md +117 -0
- package/skills/shared/expo/references/eas-update.md +118 -0
- package/skills/shared/expo/scripts/verify.sh +132 -0
- package/skills/shared/fal/SKILL.md +196 -0
- package/skills/shared/fal/evals/README.md +3 -0
- package/skills/shared/fal/evals/cases.yaml +42 -0
- package/skills/shared/fal/references/models-and-cost.md +53 -0
- package/skills/shared/fal/references/queue-and-webhooks.md +153 -0
- package/skills/shared/fal/scripts/verify.sh +72 -0
- package/skills/shared/fastapi/SKILL.md +469 -0
- package/skills/shared/fastapi/evals/README.md +50 -0
- package/skills/shared/fastapi/evals/cases.yaml +55 -0
- package/skills/shared/fastapi/references/database.md +347 -0
- package/skills/shared/fastapi/references/production.md +338 -0
- package/skills/shared/fastapi/references/security.md +330 -0
- package/skills/shared/fastapi/references/testing.md +349 -0
- package/skills/shared/fastapi/scripts/verify.sh +157 -0
- package/skills/shared/finetuning/SKILL.md +232 -0
- package/skills/shared/finetuning/evals/README.md +13 -0
- package/skills/shared/finetuning/evals/cases.yaml +50 -0
- package/skills/shared/finetuning/references/hyperparameters-and-eval.md +74 -0
- package/skills/shared/finetuning/references/methods.md +189 -0
- package/skills/shared/firebase/SKILL.md +237 -0
- package/skills/shared/firebase/evals/README.md +12 -0
- package/skills/shared/firebase/evals/cases.yaml +45 -0
- package/skills/shared/firebase/references/cloud-functions.md +102 -0
- package/skills/shared/firebase/references/data-modeling.md +108 -0
- package/skills/shared/firebase/references/security-rules.md +137 -0
- package/skills/shared/firebase/scripts/verify.sh +98 -0
- package/skills/shared/flutter/SKILL.md +400 -0
- package/skills/shared/flutter/evals/README.md +54 -0
- package/skills/shared/flutter/evals/cases.yaml +69 -0
- package/skills/shared/flutter/references/architecture-and-state.md +499 -0
- package/skills/shared/flutter/references/i18n-and-dependencies.md +197 -0
- package/skills/shared/flutter/references/performance.md +299 -0
- package/skills/shared/flutter/references/testing.md +385 -0
- package/skills/shared/flutter/references/ui-and-navigation.md +378 -0
- package/skills/shared/flutter/scripts/verify.sh +104 -0
- package/skills/shared/fly-io/SKILL.md +197 -0
- package/skills/shared/fly-io/evals/README.md +3 -0
- package/skills/shared/fly-io/evals/cases.yaml +42 -0
- package/skills/shared/fly-io/references/fly-toml.md +155 -0
- package/skills/shared/fly-io/references/multi-region.md +66 -0
- package/skills/shared/fly-io/scripts/verify.sh +90 -0
- package/skills/shared/ftd/SKILL.md +111 -0
- package/skills/shared/ftd/evals/cases.yaml +66 -0
- package/skills/shared/ftd/evals/routing.json +24 -0
- package/skills/shared/game-design/SKILL.md +146 -0
- package/skills/shared/game-design/evals/README.md +13 -0
- package/skills/shared/game-design/evals/cases.yaml +47 -0
- package/skills/shared/game-design/references/mechanics-and-loops.md +78 -0
- package/skills/shared/game-design/references/playtesting-and-scope.md +58 -0
- package/skills/shared/game-design/references/progression-and-economy.md +70 -0
- package/skills/shared/game-storytelling/SKILL.md +134 -0
- package/skills/shared/game-storytelling/evals/README.md +28 -0
- package/skills/shared/game-storytelling/evals/cases.yaml +51 -0
- package/skills/shared/game-storytelling/references/branching-and-state.md +134 -0
- package/skills/shared/game-storytelling/references/dialogue-tools.md +117 -0
- package/skills/shared/game-storytelling/references/environmental-storytelling.md +71 -0
- package/skills/shared/gamedev-multiplayer/SKILL.md +237 -0
- package/skills/shared/gamedev-multiplayer/evals/README.md +12 -0
- package/skills/shared/gamedev-multiplayer/evals/cases.yaml +44 -0
- package/skills/shared/gamedev-multiplayer/references/godot-high-level-multiplayer.md +133 -0
- package/skills/shared/gamedev-multiplayer/references/prediction-and-latency.md +104 -0
- package/skills/shared/gamedev-multiplayer/references/unity-and-unreal-netcode.md +166 -0
- package/skills/shared/gamedev-pathing/SKILL.md +233 -0
- package/skills/shared/gamedev-pathing/evals/README.md +14 -0
- package/skills/shared/gamedev-pathing/evals/cases.yaml +49 -0
- package/skills/shared/gamedev-pathing/references/navmesh-workflow.md +110 -0
- package/skills/shared/gamedev-pathing/references/search-algorithms.md +135 -0
- package/skills/shared/gamedev-pathing/references/steering-and-avoidance.md +120 -0
- package/skills/shared/gamedev-physics/SKILL.md +225 -0
- package/skills/shared/gamedev-physics/evals/README.md +12 -0
- package/skills/shared/gamedev-physics/evals/cases.yaml +54 -0
- package/skills/shared/gamedev-physics/references/character-controllers.md +120 -0
- package/skills/shared/gamedev-physics/references/determinism-and-queries.md +124 -0
- package/skills/shared/gamedev-physics/references/layers-and-masks.md +115 -0
- package/skills/shared/gamedev-shaders/SKILL.md +232 -0
- package/skills/shared/gamedev-shaders/evals/README.md +14 -0
- package/skills/shared/gamedev-shaders/evals/cases.yaml +45 -0
- package/skills/shared/gamedev-shaders/references/effect-recipes.md +205 -0
- package/skills/shared/gamedev-shaders/references/godot-shading-language.md +133 -0
- package/skills/shared/gamedev-shaders/references/unity-and-unreal-shaders.md +169 -0
- package/skills/shared/gamedev-shipping/SKILL.md +220 -0
- package/skills/shared/gamedev-shipping/evals/README.md +9 -0
- package/skills/shared/gamedev-shipping/evals/cases.yaml +55 -0
- package/skills/shared/gamedev-shipping/references/mobile-and-desktop.md +127 -0
- package/skills/shared/gamedev-shipping/references/stores-and-ci.md +162 -0
- package/skills/shared/gamedev-shipping/references/web-export-headers.md +140 -0
- package/skills/shared/gcp-essentials/SKILL.md +324 -0
- package/skills/shared/gcp-essentials/evals/README.md +12 -0
- package/skills/shared/gcp-essentials/evals/cases.yaml +38 -0
- package/skills/shared/gcp-essentials/references/deploy-recipes.md +81 -0
- package/skills/shared/gcp-essentials/references/iam-and-auth.md +94 -0
- package/skills/shared/gcp-essentials/references/networking-and-sql.md +74 -0
- package/skills/shared/gcp-essentials/scripts/verify.sh +158 -0
- package/skills/shared/git-workflow/SKILL.md +214 -0
- package/skills/shared/git-workflow/evals/README.md +10 -0
- package/skills/shared/git-workflow/evals/cases.yaml +52 -0
- package/skills/shared/git-workflow/references/gitmoji.md +157 -0
- package/skills/shared/git-workflow/references/interactive-rebase.md +89 -0
- package/skills/shared/github-actions/SKILL.md +244 -0
- package/skills/shared/github-actions/evals/README.md +3 -0
- package/skills/shared/github-actions/evals/cases.yaml +45 -0
- package/skills/shared/github-actions/references/caching-and-matrix.md +92 -0
- package/skills/shared/github-actions/references/oidc-deploys.md +130 -0
- package/skills/shared/github-actions/scripts/verify.sh +105 -0
- package/skills/shared/gitlab-auth/SKILL.md +99 -0
- package/skills/shared/gitlab-workflow/SKILL.md +138 -0
- package/skills/shared/go/SKILL.md +390 -0
- package/skills/shared/go/evals/README.md +56 -0
- package/skills/shared/go/evals/cases.yaml +55 -0
- package/skills/shared/go/references/concurrency.md +557 -0
- package/skills/shared/go/references/http-services.md +529 -0
- package/skills/shared/go/references/testing.md +338 -0
- package/skills/shared/go/scripts/verify.sh +134 -0
- package/skills/shared/godot/SKILL.md +300 -0
- package/skills/shared/godot/evals/README.md +13 -0
- package/skills/shared/godot/evals/cases.yaml +50 -0
- package/skills/shared/godot/references/export-and-testing.md +102 -0
- package/skills/shared/godot/references/gdscript-style.md +84 -0
- package/skills/shared/godot/references/godot3-to-4-traps.md +89 -0
- package/skills/shared/godot/references/nodes-scenes-resources.md +109 -0
- package/skills/shared/harness/SKILL.md +316 -0
- package/skills/shared/harness/assets/_TEMPLATE/.env.example +8 -0
- package/skills/shared/harness/assets/_TEMPLATE/CREDENTIALS.md +25 -0
- package/skills/shared/harness/assets/_TEMPLATE/README.md +25 -0
- package/skills/shared/harness/assets/_TEMPLATE/gitignore +10 -0
- package/skills/shared/harness/assets/_TEMPLATE/test_connection.sh +30 -0
- package/skills/shared/harness/evals/README.md +54 -0
- package/skills/shared/harness/evals/cases.yaml +72 -0
- package/skills/shared/harness/examples/audit-example.md +120 -0
- package/skills/shared/harness/references/agents-md-template.md +41 -0
- package/skills/shared/harness/references/audit-report-template.html +140 -0
- package/skills/shared/harness/references/audit-report-template.md +116 -0
- package/skills/shared/harness/references/claude-md-template.md +85 -0
- package/skills/shared/harness/references/daily-curation-automation.md +68 -0
- package/skills/shared/harness/references/inbox-readme-template.md +51 -0
- package/skills/shared/harness/references/ingest-formats.md +185 -0
- package/skills/shared/harness/references/ingest-ignore-defaults.md +48 -0
- package/skills/shared/harness/references/obsidian-scaffolding.md +103 -0
- package/skills/shared/harness/references/providers.yaml +3546 -0
- package/skills/shared/harness/references/tools-readme-template.md +88 -0
- package/skills/shared/harness/references/wiki-archive-template.html +81 -0
- package/skills/shared/harness/references/wiki-article-template.md +60 -0
- package/skills/shared/harness/references/wiki-dashboard-template.html +136 -0
- package/skills/shared/harness/references/wiki-deep-improve-report-template.html +126 -0
- package/skills/shared/harness/references/wiki-gaps-template.md +22 -0
- package/skills/shared/harness/references/wiki-index-template.md +32 -0
- package/skills/shared/harness/references/wiki-protocol.md +926 -0
- package/skills/shared/harness/references/wiki-raw-template.md +7 -0
- package/skills/shared/harness/references/wiki-worklog-template.md +60 -0
- package/skills/shared/hetzner/SKILL.md +203 -0
- package/skills/shared/hetzner/evals/README.md +35 -0
- package/skills/shared/hetzner/evals/cases.yaml +46 -0
- package/skills/shared/hetzner/references/cloud-init.md +120 -0
- package/skills/shared/hetzner/references/plans-and-locations.md +56 -0
- package/skills/shared/hetzner/scripts/verify.sh +122 -0
- package/skills/shared/htmx/SKILL.md +261 -0
- package/skills/shared/htmx/evals/README.md +3 -0
- package/skills/shared/htmx/evals/cases.yaml +38 -0
- package/skills/shared/htmx/references/patterns.md +113 -0
- package/skills/shared/htmx/references/server-contract.md +91 -0
- package/skills/shared/htmx/scripts/verify.sh +93 -0
- package/skills/shared/huggingface/SKILL.md +191 -0
- package/skills/shared/huggingface/evals/README.md +11 -0
- package/skills/shared/huggingface/evals/cases.yaml +41 -0
- package/skills/shared/huggingface/references/endpoints-and-spaces.md +99 -0
- package/skills/shared/huggingface/references/hub-and-cli.md +85 -0
- package/skills/shared/huggingface/references/inference-providers.md +115 -0
- package/skills/shared/huggingface/scripts/verify.sh +123 -0
- package/skills/shared/idea-refinement/SKILL.md +121 -0
- package/skills/shared/idea-refinement/evals/README.md +3 -0
- package/skills/shared/idea-refinement/evals/cases.yaml +42 -0
- package/skills/shared/implement/SKILL.md +383 -0
- package/skills/shared/implement/evals/README.md +56 -0
- package/skills/shared/implement/evals/cases.yaml +43 -0
- package/skills/shared/implement/references/per-task-review.md +46 -0
- package/skills/shared/implement/scripts/review-package +59 -0
- package/skills/shared/implement/scripts/sdd-workspace +47 -0
- package/skills/shared/implement/scripts/task-brief +77 -0
- package/skills/shared/init/SKILL.md +209 -0
- package/skills/shared/init/evals/README.md +49 -0
- package/skills/shared/init/evals/cases.yaml +74 -0
- package/skills/shared/init/references/accompaniment-and-profile.md +122 -0
- package/skills/shared/init/references/discovery.md +90 -0
- package/skills/shared/init/references/recommend-skills.md +115 -0
- package/skills/shared/init/scripts/verify.sh +118 -0
- package/skills/shared/java/SKILL.md +341 -0
- package/skills/shared/java/evals/README.md +23 -0
- package/skills/shared/java/evals/cases.yaml +43 -0
- package/skills/shared/java/references/builds.md +133 -0
- package/skills/shared/java/references/concurrency.md +108 -0
- package/skills/shared/java/references/streams.md +102 -0
- package/skills/shared/java/scripts/verify.sh +107 -0
- package/skills/shared/knowledge-ops/SKILL.md +122 -0
- package/skills/shared/knowledge-ops/evals/README.md +16 -0
- package/skills/shared/knowledge-ops/evals/cases.yaml +50 -0
- package/skills/shared/knowledge-ops/references/gardening-playbook.md +126 -0
- package/skills/shared/kotlin-android/SKILL.md +245 -0
- package/skills/shared/kotlin-android/evals/README.md +13 -0
- package/skills/shared/kotlin-android/evals/cases.yaml +56 -0
- package/skills/shared/kotlin-android/references/architecture.md +200 -0
- package/skills/shared/kotlin-android/references/gradle-setup.md +125 -0
- package/skills/shared/kotlin-android/scripts/verify.sh +109 -0
- package/skills/shared/laravel/SKILL.md +301 -0
- package/skills/shared/laravel/evals/README.md +10 -0
- package/skills/shared/laravel/evals/cases.yaml +45 -0
- package/skills/shared/laravel/references/eloquent-patterns.md +126 -0
- package/skills/shared/laravel/references/queues-and-scheduling.md +153 -0
- package/skills/shared/laravel/scripts/verify.sh +128 -0
- package/skills/shared/level-design/SKILL.md +143 -0
- package/skills/shared/level-design/evals/README.md +35 -0
- package/skills/shared/level-design/evals/cases.yaml +58 -0
- package/skills/shared/level-design/references/blockout-to-art.md +118 -0
- package/skills/shared/level-design/references/guidance-and-readability.md +152 -0
- package/skills/shared/level-design/references/pacing-and-encounters.md +142 -0
- package/skills/shared/llm-pipeline/SKILL.md +150 -0
- package/skills/shared/llm-pipeline/evals/README.md +3 -0
- package/skills/shared/llm-pipeline/evals/cases.yaml +44 -0
- package/skills/shared/llm-pipeline/references/caching-layers.md +60 -0
- package/skills/shared/llm-pipeline/references/litellm-router.md +101 -0
- package/skills/shared/llm-pipeline/scripts/verify.sh +169 -0
- package/skills/shared/machine-learning/SKILL.md +228 -0
- package/skills/shared/machine-learning/evals/README.md +15 -0
- package/skills/shared/machine-learning/evals/cases.yaml +54 -0
- package/skills/shared/machine-learning/references/gbdt-and-tuning.md +83 -0
- package/skills/shared/machine-learning/references/metrics-and-imbalance.md +82 -0
- package/skills/shared/machine-learning/references/pipelines-and-cv.md +135 -0
- package/skills/shared/modal/SKILL.md +290 -0
- package/skills/shared/modal/evals/README.md +29 -0
- package/skills/shared/modal/evals/cases.yaml +50 -0
- package/skills/shared/modal/references/images-gpu-cookbook.md +160 -0
- package/skills/shared/modal/references/web-and-scaling.md +138 -0
- package/skills/shared/modal/scripts/verify.sh +127 -0
- package/skills/shared/mongodb/SKILL.md +342 -0
- package/skills/shared/mongodb/evals/README.md +29 -0
- package/skills/shared/mongodb/evals/cases.yaml +41 -0
- package/skills/shared/mongodb/references/aggregation.md +115 -0
- package/skills/shared/mongodb/references/data-modeling.md +135 -0
- package/skills/shared/mongodb/references/transactions-and-ops.md +128 -0
- package/skills/shared/mongodb/scripts/verify.sh +151 -0
- package/skills/shared/monitoring/SKILL.md +155 -0
- package/skills/shared/monitoring/evals/README.md +3 -0
- package/skills/shared/monitoring/evals/cases.yaml +47 -0
- package/skills/shared/monitoring/references/burn-rate-and-oncall.md +128 -0
- package/skills/shared/monitoring/references/tool-setup.md +154 -0
- package/skills/shared/monitoring/scripts/verify.sh +145 -0
- package/skills/shared/mysql/SKILL.md +249 -0
- package/skills/shared/mysql/evals/README.md +12 -0
- package/skills/shared/mysql/evals/cases.yaml +49 -0
- package/skills/shared/mysql/references/indexing-and-explain.md +161 -0
- package/skills/shared/mysql/references/mysql-vs-mariadb.md +78 -0
- package/skills/shared/mysql/references/online-ddl-and-migrations.md +120 -0
- package/skills/shared/mysql/references/replication-and-ha.md +115 -0
- package/skills/shared/mysql/scripts/verify.sh +141 -0
- package/skills/shared/neon/SKILL.md +218 -0
- package/skills/shared/neon/evals/README.md +11 -0
- package/skills/shared/neon/evals/cases.yaml +45 -0
- package/skills/shared/neon/references/branching-ci.md +86 -0
- package/skills/shared/neon/scripts/verify.sh +78 -0
- package/skills/shared/nestjs/SKILL.md +217 -0
- package/skills/shared/nestjs/evals/README.md +3 -0
- package/skills/shared/nestjs/evals/cases.yaml +38 -0
- package/skills/shared/nestjs/references/cross-cutting.md +135 -0
- package/skills/shared/nestjs/references/testing-recipes.md +105 -0
- package/skills/shared/nestjs/scripts/verify.sh +98 -0
- package/skills/shared/netlify/SKILL.md +208 -0
- package/skills/shared/netlify/evals/README.md +13 -0
- package/skills/shared/netlify/evals/cases.yaml +43 -0
- package/skills/shared/netlify/references/functions.md +97 -0
- package/skills/shared/netlify/references/netlify-toml.md +115 -0
- package/skills/shared/netlify/scripts/verify.sh +95 -0
- package/skills/shared/nextjs/SKILL.md +400 -0
- package/skills/shared/nextjs/evals/README.md +59 -0
- package/skills/shared/nextjs/evals/cases.yaml +56 -0
- package/skills/shared/nextjs/references/data-and-caching.md +309 -0
- package/skills/shared/nextjs/references/metadata.md +208 -0
- package/skills/shared/nextjs/references/performance.md +325 -0
- package/skills/shared/nextjs/references/react.md +383 -0
- package/skills/shared/nextjs/references/security.md +239 -0
- package/skills/shared/nextjs/references/testing.md +290 -0
- package/skills/shared/nextjs/scripts/verify.sh +141 -0
- package/skills/shared/nlp/SKILL.md +225 -0
- package/skills/shared/nlp/evals/README.md +10 -0
- package/skills/shared/nlp/evals/cases.yaml +45 -0
- package/skills/shared/nlp/references/evaluation.md +107 -0
- package/skills/shared/nlp/references/tokenization.md +95 -0
- package/skills/shared/no-code-app/SKILL.md +145 -0
- package/skills/shared/no-code-app/evals/README.md +3 -0
- package/skills/shared/no-code-app/evals/cases.yaml +43 -0
- package/skills/shared/no-code-app/references/platform-limits.md +100 -0
- package/skills/shared/nodejs/SKILL.md +229 -0
- package/skills/shared/nodejs/evals/README.md +3 -0
- package/skills/shared/nodejs/evals/cases.yaml +39 -0
- package/skills/shared/nodejs/references/express5-migration.md +53 -0
- package/skills/shared/nodejs/references/graceful-shutdown.md +73 -0
- package/skills/shared/nodejs/scripts/verify.sh +122 -0
- package/skills/shared/observability/SKILL.md +235 -0
- package/skills/shared/observability/evals/README.md +3 -0
- package/skills/shared/observability/evals/cases.yaml +51 -0
- package/skills/shared/observability/references/collector-config.md +98 -0
- package/skills/shared/observability/references/instrumentation-recipes.md +115 -0
- package/skills/shared/observability/scripts/verify.sh +156 -0
- package/skills/shared/ollama/SKILL.md +213 -0
- package/skills/shared/ollama/evals/README.md +9 -0
- package/skills/shared/ollama/evals/cases.yaml +43 -0
- package/skills/shared/ollama/references/api.md +148 -0
- package/skills/shared/ollama/references/hardware-sizing.md +87 -0
- package/skills/shared/ollama/scripts/verify.sh +116 -0
- package/skills/shared/open-weights/SKILL.md +239 -0
- package/skills/shared/open-weights/evals/README.md +14 -0
- package/skills/shared/open-weights/evals/cases.yaml +42 -0
- package/skills/shared/open-weights/references/licenses.md +123 -0
- package/skills/shared/open-weights/references/model-families.md +83 -0
- package/skills/shared/open-weights/references/sizing-and-quant.md +89 -0
- package/skills/shared/orient/SKILL.md +92 -0
- package/skills/shared/orient/evals/README.md +18 -0
- package/skills/shared/orient/evals/cases.yaml +67 -0
- package/skills/shared/orient/references/explain-ladder.md +93 -0
- package/skills/shared/orient/references/orientation-contract.md +86 -0
- package/skills/shared/parallel/SKILL.md +168 -0
- package/skills/shared/parallel/evals/README.md +62 -0
- package/skills/shared/parallel/evals/cases.yaml +44 -0
- package/skills/shared/performance/SKILL.md +229 -0
- package/skills/shared/performance/evals/README.md +3 -0
- package/skills/shared/performance/evals/cases.yaml +49 -0
- package/skills/shared/performance/references/profiling-playbook.md +54 -0
- package/skills/shared/performance/scripts/verify.sh +94 -0
- package/skills/shared/phoenix/SKILL.md +169 -0
- package/skills/shared/phoenix/evals/README.md +3 -0
- package/skills/shared/phoenix/evals/cases.yaml +40 -0
- package/skills/shared/phoenix/references/auth-and-scopes.md +82 -0
- package/skills/shared/phoenix/references/ecto-patterns.md +93 -0
- package/skills/shared/phoenix/references/liveview.md +134 -0
- package/skills/shared/phoenix/scripts/verify.sh +73 -0
- package/skills/shared/php/SKILL.md +397 -0
- package/skills/shared/php/evals/README.md +12 -0
- package/skills/shared/php/evals/cases.yaml +45 -0
- package/skills/shared/php/references/tooling.md +170 -0
- package/skills/shared/php/references/type-system.md +220 -0
- package/skills/shared/php/scripts/verify.sh +155 -0
- package/skills/shared/plan/SKILL.md +166 -0
- package/skills/shared/plan/evals/README.md +62 -0
- package/skills/shared/plan/evals/cases.yaml +49 -0
- package/skills/shared/plan/references/plan-template.md +153 -0
- package/skills/shared/planetscale/SKILL.md +198 -0
- package/skills/shared/planetscale/evals/README.md +11 -0
- package/skills/shared/planetscale/evals/cases.yaml +46 -0
- package/skills/shared/planetscale/references/deploy-requests.md +75 -0
- package/skills/shared/planetscale/references/no-foreign-keys.md +88 -0
- package/skills/shared/planetscale/scripts/verify.sh +115 -0
- package/skills/shared/planning-with-files/SKILL.md +278 -0
- package/skills/shared/planning-with-files/examples.md +202 -0
- package/skills/shared/planning-with-files/reference.md +218 -0
- package/skills/shared/planning-with-files/scripts/attest-plan.ps1 +118 -0
- package/skills/shared/planning-with-files/scripts/attest-plan.sh +110 -0
- package/skills/shared/planning-with-files/scripts/check-complete.ps1 +44 -0
- package/skills/shared/planning-with-files/scripts/check-complete.sh +46 -0
- package/skills/shared/planning-with-files/scripts/init-session.ps1 +166 -0
- package/skills/shared/planning-with-files/scripts/init-session.sh +284 -0
- package/skills/shared/planning-with-files/scripts/resolve-plan-dir.ps1 +44 -0
- package/skills/shared/planning-with-files/scripts/resolve-plan-dir.sh +76 -0
- package/skills/shared/planning-with-files/scripts/session-catchup.py +438 -0
- package/skills/shared/planning-with-files/scripts/set-active-plan.ps1 +50 -0
- package/skills/shared/planning-with-files/scripts/set-active-plan.sh +50 -0
- package/skills/shared/planning-with-files/templates/findings.md +95 -0
- package/skills/shared/planning-with-files/templates/progress.md +114 -0
- package/skills/shared/planning-with-files/templates/task_plan.md +132 -0
- package/skills/shared/postgresdb/SKILL.md +354 -0
- package/skills/shared/postgresdb/evals/README.md +55 -0
- package/skills/shared/postgresdb/evals/cases.yaml +57 -0
- package/skills/shared/postgresdb/references/migrations.md +279 -0
- package/skills/shared/postgresdb/references/operations-and-security.md +267 -0
- package/skills/shared/postgresdb/references/query-optimization.md +374 -0
- package/skills/shared/postgresdb/references/schema-and-indexing.md +379 -0
- package/skills/shared/postgresdb/scripts/verify.sh +191 -0
- package/skills/shared/prisma-orm/SKILL.md +313 -0
- package/skills/shared/prisma-orm/evals/README.md +12 -0
- package/skills/shared/prisma-orm/evals/cases.yaml +56 -0
- package/skills/shared/prisma-orm/references/migrations-and-v7-upgrade.md +197 -0
- package/skills/shared/prisma-orm/references/queries-and-performance.md +169 -0
- package/skills/shared/prisma-orm/scripts/verify.sh +137 -0
- package/skills/shared/prompt-engineering/SKILL.md +127 -0
- package/skills/shared/prompt-engineering/evals/README.md +11 -0
- package/skills/shared/prompt-engineering/evals/cases.yaml +46 -0
- package/skills/shared/prompt-engineering/references/eval-templates.md +94 -0
- package/skills/shared/prompt-engineering/references/output-contracts.md +120 -0
- package/skills/shared/prompt-engineering/scripts/verify.sh +84 -0
- package/skills/shared/python/SKILL.md +320 -0
- package/skills/shared/python/evals/README.md +19 -0
- package/skills/shared/python/evals/cases.yaml +46 -0
- package/skills/shared/python/references/async.md +136 -0
- package/skills/shared/python/references/stdlib.md +162 -0
- package/skills/shared/python/references/typing.md +160 -0
- package/skills/shared/python/scripts/verify.sh +125 -0
- package/skills/shared/rag/SKILL.md +209 -0
- package/skills/shared/rag/evals/README.md +13 -0
- package/skills/shared/rag/evals/cases.yaml +45 -0
- package/skills/shared/rag/references/evaluation.md +99 -0
- package/skills/shared/rag/references/pipeline.md +151 -0
- package/skills/shared/rag/scripts/verify.sh +99 -0
- package/skills/shared/rails/SKILL.md +264 -0
- package/skills/shared/rails/evals/README.md +12 -0
- package/skills/shared/rails/evals/cases.yaml +47 -0
- package/skills/shared/rails/references/activerecord.md +148 -0
- package/skills/shared/rails/references/hotwire.md +139 -0
- package/skills/shared/rails/references/testing.md +110 -0
- package/skills/shared/rails/scripts/verify.sh +128 -0
- package/skills/shared/railway/SKILL.md +245 -0
- package/skills/shared/railway/evals/README.md +14 -0
- package/skills/shared/railway/evals/cases.yaml +44 -0
- package/skills/shared/railway/references/cli-cookbook.md +137 -0
- package/skills/shared/railway/references/config-as-code.md +120 -0
- package/skills/shared/railway/scripts/verify.sh +162 -0
- package/skills/shared/react/SKILL.md +182 -0
- package/skills/shared/react/evals/README.md +3 -0
- package/skills/shared/react/evals/cases.yaml +43 -0
- package/skills/shared/react/references/data-and-state.md +152 -0
- package/skills/shared/react/references/performance.md +75 -0
- package/skills/shared/react/references/routing.md +99 -0
- package/skills/shared/react/scripts/verify.sh +123 -0
- package/skills/shared/react-native/SKILL.md +215 -0
- package/skills/shared/react-native/evals/README.md +3 -0
- package/skills/shared/react-native/evals/cases.yaml +42 -0
- package/skills/shared/react-native/references/native-modules.md +123 -0
- package/skills/shared/react-native/references/performance-debugging.md +46 -0
- package/skills/shared/react-native/scripts/verify.sh +120 -0
- package/skills/shared/redis/SKILL.md +298 -0
- package/skills/shared/redis/evals/README.md +10 -0
- package/skills/shared/redis/evals/cases.yaml +43 -0
- package/skills/shared/redis/references/caching.md +116 -0
- package/skills/shared/redis/references/locks-and-rate-limiting.md +140 -0
- package/skills/shared/redis/references/queues.md +102 -0
- package/skills/shared/redis/scripts/verify.sh +164 -0
- package/skills/shared/render/SKILL.md +256 -0
- package/skills/shared/render/evals/README.md +12 -0
- package/skills/shared/render/evals/cases.yaml +45 -0
- package/skills/shared/render/references/blueprint-reference.md +203 -0
- package/skills/shared/render/scripts/verify.sh +167 -0
- package/skills/shared/replicate/SKILL.md +210 -0
- package/skills/shared/replicate/evals/README.md +9 -0
- package/skills/shared/replicate/evals/cases.yaml +45 -0
- package/skills/shared/replicate/references/cog-packaging.md +89 -0
- package/skills/shared/replicate/references/deployments-api.md +87 -0
- package/skills/shared/replicate/references/webhooks-and-async.md +110 -0
- package/skills/shared/replicate/scripts/verify.sh +162 -0
- package/skills/shared/research-ops/SKILL.md +200 -0
- package/skills/shared/research-ops/evals/README.md +13 -0
- package/skills/shared/research-ops/evals/cases.yaml +38 -0
- package/skills/shared/research-ops/references/credibility-rubric.md +78 -0
- package/skills/shared/research-ops/references/memo-template.md +63 -0
- package/skills/shared/research-ops/scripts/verify.sh +181 -0
- package/skills/shared/review/SKILL.md +314 -0
- package/skills/shared/review/evals/README.md +84 -0
- package/skills/shared/review/evals/cases.yaml +55 -0
- package/skills/shared/ruby/SKILL.md +295 -0
- package/skills/shared/ruby/evals/README.md +12 -0
- package/skills/shared/ruby/evals/cases.yaml +41 -0
- package/skills/shared/ruby/references/gems-and-testing.md +208 -0
- package/skills/shared/ruby/references/metaprogramming.md +161 -0
- package/skills/shared/ruby/scripts/verify.sh +83 -0
- package/skills/shared/runpod/SKILL.md +238 -0
- package/skills/shared/runpod/evals/README.md +11 -0
- package/skills/shared/runpod/evals/cases.yaml +47 -0
- package/skills/shared/runpod/references/cost-and-scaling.md +85 -0
- package/skills/shared/runpod/references/serverless-workers.md +101 -0
- package/skills/shared/runpod/scripts/verify.sh +126 -0
- package/skills/shared/rust/SKILL.md +320 -0
- package/skills/shared/rust/evals/README.md +12 -0
- package/skills/shared/rust/evals/cases.yaml +42 -0
- package/skills/shared/rust/references/async-tokio.md +141 -0
- package/skills/shared/rust/references/axum-service.md +132 -0
- package/skills/shared/rust/references/ownership.md +86 -0
- package/skills/shared/rust/references/testing.md +108 -0
- package/skills/shared/rust/scripts/verify.sh +91 -0
- package/skills/shared/scaling/SKILL.md +137 -0
- package/skills/shared/scaling/evals/README.md +3 -0
- package/skills/shared/scaling/evals/cases.yaml +42 -0
- package/skills/shared/scaling/references/load-testing-k6.md +127 -0
- package/skills/shared/scaling/scripts/example.load.js +24 -0
- package/skills/shared/scaling/scripts/verify.sh +70 -0
- package/skills/shared/sdd/SKILL.md +250 -0
- package/skills/shared/sdd/evals/README.md +60 -0
- package/skills/shared/sdd/evals/cases.yaml +90 -0
- package/skills/shared/sdd/references/model-routing.md +194 -0
- package/skills/shared/sdd-init/SKILL.md +189 -0
- package/skills/shared/sdd-init/evals/README.md +3 -0
- package/skills/shared/sdd-init/evals/cases.yaml +43 -0
- package/skills/shared/secure-coding/SKILL.md +336 -0
- package/skills/shared/secure-coding/evals/README.md +68 -0
- package/skills/shared/secure-coding/evals/cases.yaml +55 -0
- package/skills/shared/secure-coding/references/authn-authz.md +249 -0
- package/skills/shared/secure-coding/references/owasp-by-stack.md +574 -0
- package/skills/shared/secure-coding/references/secrets-and-supply-chain.md +205 -0
- package/skills/shared/secure-coding/references/threat-modeling.md +213 -0
- package/skills/shared/secure-coding/scripts/verify.sh +208 -0
- package/skills/shared/security-scan/SKILL.md +219 -0
- package/skills/shared/security-scan/evals/README.md +14 -0
- package/skills/shared/security-scan/evals/cases.yaml +50 -0
- package/skills/shared/security-scan/references/tools.md +97 -0
- package/skills/shared/security-scan/references/triage.md +92 -0
- package/skills/shared/security-scan/scripts/verify.sh +108 -0
- package/skills/shared/ship/SKILL.md +272 -0
- package/skills/shared/ship/evals/README.md +89 -0
- package/skills/shared/ship/evals/cases.yaml +44 -0
- package/skills/shared/shopify/SKILL.md +229 -0
- package/skills/shared/shopify/evals/README.md +14 -0
- package/skills/shared/shopify/evals/cases.yaml +41 -0
- package/skills/shared/shopify/references/apps-graphql.md +103 -0
- package/skills/shared/shopify/references/checkout-extensibility.md +71 -0
- package/skills/shared/shopify/references/liquid-themes.md +89 -0
- package/skills/shared/shopify/scripts/verify.sh +120 -0
- package/skills/shared/simplify-code/SKILL.md +101 -0
- package/skills/shared/simplify-code/evals/README.md +3 -0
- package/skills/shared/simplify-code/evals/cases.yaml +42 -0
- package/skills/shared/skill-scout/SKILL.md +169 -0
- package/skills/shared/skill-scout/evals/README.md +12 -0
- package/skills/shared/skill-scout/evals/cases.yaml +56 -0
- package/skills/shared/skill-scout/references/install-commands.md +76 -0
- package/skills/shared/skill-scout/scripts/verify.sh +154 -0
- package/skills/shared/solid-js/SKILL.md +260 -0
- package/skills/shared/solid-js/evals/README.md +3 -0
- package/skills/shared/solid-js/evals/cases.yaml +38 -0
- package/skills/shared/solid-js/references/reactivity-deep-dive.md +89 -0
- package/skills/shared/solid-js/references/router-and-start.md +93 -0
- package/skills/shared/solid-js/scripts/verify.sh +130 -0
- package/skills/shared/source-grounded-development/SKILL.md +108 -0
- package/skills/shared/source-grounded-development/evals/README.md +3 -0
- package/skills/shared/source-grounded-development/evals/cases.yaml +42 -0
- package/skills/shared/specify/SKILL.md +391 -0
- package/skills/shared/specify/evals/README.md +73 -0
- package/skills/shared/specify/evals/cases.yaml +93 -0
- package/skills/shared/specify/references/eliciting-requirements.md +117 -0
- package/skills/shared/specify/references/spec-template.md +101 -0
- package/skills/shared/speckit-analyze/SKILL.md +35 -0
- package/skills/shared/speckit-assess-decide/SKILL.md +36 -0
- package/skills/shared/speckit-assess-define/SKILL.md +36 -0
- package/skills/shared/speckit-assess-intake/SKILL.md +38 -0
- package/skills/shared/speckit-assess-research/SKILL.md +36 -0
- package/skills/shared/speckit-assess-shape/SKILL.md +36 -0
- package/skills/shared/speckit-bug-assess/SKILL.md +38 -0
- package/skills/shared/speckit-bug-fix/SKILL.md +37 -0
- package/skills/shared/speckit-bug-test/SKILL.md +37 -0
- package/skills/shared/speckit-checklist/SKILL.md +35 -0
- package/skills/shared/speckit-clarify/SKILL.md +32 -0
- package/skills/shared/speckit-constitution/SKILL.md +35 -0
- package/skills/shared/speckit-converge/SKILL.md +36 -0
- package/skills/shared/speckit-implement/SKILL.md +32 -0
- package/skills/shared/speckit-plan/SKILL.md +37 -0
- package/skills/shared/speckit-specify/SKILL.md +36 -0
- package/skills/shared/speckit-tasks/SKILL.md +34 -0
- package/skills/shared/spreadsheet-ops/SKILL.md +180 -0
- package/skills/shared/spreadsheet-ops/evals/README.md +33 -0
- package/skills/shared/spreadsheet-ops/evals/cases.yaml +42 -0
- package/skills/shared/spreadsheet-ops/references/formula-cookbook.md +70 -0
- package/skills/shared/spreadsheet-ops/references/python-excel.md +87 -0
- package/skills/shared/spreadsheet-ops/references/sheets-api-appsscript.md +118 -0
- package/skills/shared/spreadsheet-ops/scripts/verify.sh +152 -0
- package/skills/shared/spring-boot/SKILL.md +350 -0
- package/skills/shared/spring-boot/evals/README.md +11 -0
- package/skills/shared/spring-boot/evals/cases.yaml +49 -0
- package/skills/shared/spring-boot/references/jpa.md +94 -0
- package/skills/shared/spring-boot/references/security.md +92 -0
- package/skills/shared/spring-boot/references/testing.md +95 -0
- package/skills/shared/spring-boot/scripts/verify.sh +115 -0
- package/skills/shared/sql/SKILL.md +286 -0
- package/skills/shared/sql/evals/README.md +9 -0
- package/skills/shared/sql/evals/cases.yaml +49 -0
- package/skills/shared/sql/references/ctes-and-recursion.md +63 -0
- package/skills/shared/sql/references/joins-and-sets.md +71 -0
- package/skills/shared/sql/references/portability.md +38 -0
- package/skills/shared/sql/references/window-functions.md +72 -0
- package/skills/shared/sql/scripts/verify.sh +139 -0
- package/skills/shared/sqlite-turso/SKILL.md +214 -0
- package/skills/shared/sqlite-turso/evals/README.md +24 -0
- package/skills/shared/sqlite-turso/evals/cases.yaml +45 -0
- package/skills/shared/sqlite-turso/references/embedded-replicas.md +96 -0
- package/skills/shared/sqlite-turso/scripts/verify.sh +95 -0
- package/skills/shared/structured-extraction/SKILL.md +230 -0
- package/skills/shared/structured-extraction/evals/README.md +13 -0
- package/skills/shared/structured-extraction/evals/cases.yaml +70 -0
- package/skills/shared/structured-extraction/references/providers.md +152 -0
- package/skills/shared/structured-extraction/scripts/verify.sh +160 -0
- package/skills/shared/suggest/SKILL.md +123 -0
- package/skills/shared/suggest/evals/README.md +17 -0
- package/skills/shared/suggest/evals/cases.yaml +78 -0
- package/skills/shared/supabase/SKILL.md +268 -0
- package/skills/shared/supabase/evals/README.md +12 -0
- package/skills/shared/supabase/evals/cases.yaml +42 -0
- package/skills/shared/supabase/references/auth-ssr.md +173 -0
- package/skills/shared/supabase/references/rls-cookbook.md +122 -0
- package/skills/shared/supabase/scripts/verify.sh +149 -0
- package/skills/shared/svelte/SKILL.md +238 -0
- package/skills/shared/svelte/evals/README.md +3 -0
- package/skills/shared/svelte/evals/cases.yaml +41 -0
- package/skills/shared/svelte/references/runes.md +97 -0
- package/skills/shared/svelte/references/sveltekit-data.md +156 -0
- package/skills/shared/svelte/scripts/verify.sh +128 -0
- package/skills/shared/swift-ios/SKILL.md +224 -0
- package/skills/shared/swift-ios/evals/README.md +3 -0
- package/skills/shared/swift-ios/evals/cases.yaml +46 -0
- package/skills/shared/swift-ios/references/concurrency.md +132 -0
- package/skills/shared/swift-ios/references/testing.md +112 -0
- package/skills/shared/swift-ios/scripts/verify.sh +98 -0
- package/skills/shared/tasks/SKILL.md +265 -0
- package/skills/shared/tasks/evals/README.md +70 -0
- package/skills/shared/tasks/evals/cases.yaml +75 -0
- package/skills/shared/tauri/SKILL.md +219 -0
- package/skills/shared/tauri/evals/README.md +12 -0
- package/skills/shared/tauri/evals/cases.yaml +46 -0
- package/skills/shared/tauri/references/bundling-distribution.md +129 -0
- package/skills/shared/tauri/references/security.md +143 -0
- package/skills/shared/tauri/scripts/verify.sh +178 -0
- package/skills/shared/technical-writing/SKILL.md +230 -0
- package/skills/shared/technical-writing/evals/README.md +12 -0
- package/skills/shared/technical-writing/evals/cases.yaml +53 -0
- package/skills/shared/technical-writing/references/diataxis-modes.md +131 -0
- package/skills/shared/technical-writing/references/vale-starter.md +90 -0
- package/skills/shared/technical-writing/scripts/verify.sh +83 -0
- package/skills/shared/testing-go/SKILL.md +263 -0
- package/skills/shared/testing-go/evals/README.md +3 -0
- package/skills/shared/testing-go/evals/cases.yaml +46 -0
- package/skills/shared/testing-go/references/coverage-and-benchmarks.md +85 -0
- package/skills/shared/testing-go/references/mocks-and-fakes.md +140 -0
- package/skills/shared/testing-go/references/synctest-and-concurrency.md +82 -0
- package/skills/shared/testing-go/scripts/verify.sh +72 -0
- package/skills/shared/testing-py/SKILL.md +197 -0
- package/skills/shared/testing-py/evals/README.md +5 -0
- package/skills/shared/testing-py/evals/cases.yaml +44 -0
- package/skills/shared/testing-py/references/mocking.md +141 -0
- package/skills/shared/testing-py/references/property-testing.md +99 -0
- package/skills/shared/testing-py/scripts/verify.sh +117 -0
- package/skills/shared/testing-web/SKILL.md +244 -0
- package/skills/shared/testing-web/evals/README.md +11 -0
- package/skills/shared/testing-web/evals/cases.yaml +52 -0
- package/skills/shared/testing-web/references/jest-setup.md +88 -0
- package/skills/shared/testing-web/references/recipes.md +116 -0
- package/skills/shared/testing-web/scripts/verify.sh +111 -0
- package/skills/shared/together-fireworks/SKILL.md +176 -0
- package/skills/shared/together-fireworks/evals/README.md +3 -0
- package/skills/shared/together-fireworks/evals/cases.yaml +50 -0
- package/skills/shared/together-fireworks/references/batch-and-tuning.md +59 -0
- package/skills/shared/together-fireworks/references/models-and-pricing.md +79 -0
- package/skills/shared/together-fireworks/scripts/verify.sh +165 -0
- package/skills/shared/training-data/SKILL.md +226 -0
- package/skills/shared/training-data/evals/README.md +13 -0
- package/skills/shared/training-data/evals/cases.yaml +41 -0
- package/skills/shared/training-data/references/formats.md +118 -0
- package/skills/shared/training-data/references/synthesis-dedup-quality.md +134 -0
- package/skills/shared/translation-l10n/SKILL.md +229 -0
- package/skills/shared/translation-l10n/evals/README.md +3 -0
- package/skills/shared/translation-l10n/evals/cases.yaml +39 -0
- package/skills/shared/translation-l10n/references/icu-cookbook.md +82 -0
- package/skills/shared/translation-l10n/references/rtl-and-bidi.md +60 -0
- package/skills/shared/typescript/SKILL.md +225 -0
- package/skills/shared/typescript/evals/README.md +15 -0
- package/skills/shared/typescript/evals/cases.yaml +46 -0
- package/skills/shared/typescript/references/build-and-monorepo.md +141 -0
- package/skills/shared/typescript/references/type-system.md +162 -0
- package/skills/shared/typescript/scripts/verify.sh +52 -0
- package/skills/shared/ui-engineering/SKILL.md +113 -0
- package/skills/shared/ui-engineering/evals/cases.yaml +38 -0
- package/skills/shared/unity/SKILL.md +282 -0
- package/skills/shared/unity/evals/README.md +8 -0
- package/skills/shared/unity/evals/cases.yaml +43 -0
- package/skills/shared/unity/references/build-and-platforms.md +65 -0
- package/skills/shared/unity/references/input-system.md +102 -0
- package/skills/shared/unity/references/lifecycle-deep-dive.md +75 -0
- package/skills/shared/unreal/SKILL.md +270 -0
- package/skills/shared/unreal/evals/README.md +12 -0
- package/skills/shared/unreal/evals/cases.yaml +45 -0
- package/skills/shared/unreal/references/blueprint-cpp-parity.md +109 -0
- package/skills/shared/unreal/references/gameplay-framework.md +95 -0
- package/skills/shared/unreal/references/packaging.md +83 -0
- package/skills/shared/unslop/SKILL.md +143 -0
- package/skills/shared/unslop/evals/README.md +25 -0
- package/skills/shared/unslop/evals/cases.yaml +61 -0
- package/skills/shared/unsloth/SKILL.md +254 -0
- package/skills/shared/unsloth/evals/README.md +10 -0
- package/skills/shared/unsloth/evals/cases.yaml +42 -0
- package/skills/shared/unsloth/references/export.md +75 -0
- package/skills/shared/unsloth/references/grpo.md +91 -0
- package/skills/shared/unsloth/references/masking-and-templates.md +91 -0
- package/skills/shared/variant-explorer/SKILL.md +93 -0
- package/skills/shared/variant-explorer/evals/cases.yaml +38 -0
- package/skills/shared/vector-db/SKILL.md +189 -0
- package/skills/shared/vector-db/evals/README.md +10 -0
- package/skills/shared/vector-db/evals/cases.yaml +45 -0
- package/skills/shared/vector-db/references/engines.md +175 -0
- package/skills/shared/vector-db/references/tuning.md +62 -0
- package/skills/shared/vector-db/scripts/verify.sh +110 -0
- package/skills/shared/vercel/SKILL.md +242 -0
- package/skills/shared/vercel/evals/README.md +23 -0
- package/skills/shared/vercel/evals/cases.yaml +45 -0
- package/skills/shared/vercel/references/cli-cookbook.md +98 -0
- package/skills/shared/vercel/references/vercel-json.md +120 -0
- package/skills/shared/vercel/scripts/verify.sh +168 -0
- package/skills/shared/verify/SKILL.md +230 -0
- package/skills/shared/verify/evals/README.md +78 -0
- package/skills/shared/verify/evals/cases.yaml +104 -0
- package/skills/shared/vllm/SKILL.md +235 -0
- package/skills/shared/vllm/evals/README.md +9 -0
- package/skills/shared/vllm/evals/cases.yaml +47 -0
- package/skills/shared/vllm/references/flags-and-endpoints.md +105 -0
- package/skills/shared/vllm/references/memory-and-throughput.md +78 -0
- package/skills/shared/vue-nuxt/SKILL.md +323 -0
- package/skills/shared/vue-nuxt/evals/README.md +11 -0
- package/skills/shared/vue-nuxt/evals/cases.yaml +49 -0
- package/skills/shared/vue-nuxt/references/data-and-state.md +127 -0
- package/skills/shared/vue-nuxt/references/migration-nuxt4.md +79 -0
- package/skills/shared/vue-nuxt/references/nitro-and-rendering.md +117 -0
- package/skills/shared/vue-nuxt/references/reactivity.md +135 -0
- package/skills/shared/vue-nuxt/scripts/verify.sh +148 -0
- package/skills/shared/webhooks/SKILL.md +229 -0
- package/skills/shared/webhooks/evals/README.md +15 -0
- package/skills/shared/webhooks/evals/cases.yaml +46 -0
- package/skills/shared/webhooks/references/framework-raw-body.md +97 -0
- package/skills/shared/webhooks/references/signature-schemes.md +66 -0
- package/skills/shared/webhooks/scripts/verify.sh +142 -0
- package/skills/shared/wordpress/SKILL.md +224 -0
- package/skills/shared/wordpress/evals/README.md +3 -0
- package/skills/shared/wordpress/evals/cases.yaml +50 -0
- package/skills/shared/wordpress/references/hardening.md +108 -0
- package/skills/shared/wordpress/references/performance.md +80 -0
- package/skills/shared/wordpress/references/woocommerce.md +65 -0
- package/skills/shared/wordpress/scripts/verify.sh +96 -0
- package/skills/shared/worktrees/SKILL.md +204 -0
- package/skills/shared/worktrees/evals/README.md +78 -0
- package/skills/shared/worktrees/evals/cases.yaml +47 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# MonoBehaviour lifecycle — deep dive (Unity 6)
|
|
2
|
+
|
|
3
|
+
Full execution order for a `MonoBehaviour`, and the exact reason each callback exists. Reference:
|
|
4
|
+
Unity Manual "Order of execution for event functions".
|
|
5
|
+
|
|
6
|
+
## Initialization (once per object, in this order)
|
|
7
|
+
|
|
8
|
+
1. **`Awake`** — called when the script instance is loaded, **even if the component is disabled**, and
|
|
9
|
+
before any `Start`. Cache `GetComponent`/`TryGetComponent`, allocate internal state. Do NOT reach
|
|
10
|
+
into *other* objects here — their `Awake` may not have run yet.
|
|
11
|
+
2. **`OnEnable`** — every time the object/component becomes enabled (including re-enable). Subscribe to
|
|
12
|
+
C# events, register with managers, enable input actions. Must be mirrored by `OnDisable`.
|
|
13
|
+
3. **`Start`** — once, just before the first `Update`, and **only if the component is active**. Safe
|
|
14
|
+
place for cross-object wiring because every object's `Awake` has already run. If an object is created
|
|
15
|
+
disabled and never enabled, `Start` never runs.
|
|
16
|
+
|
|
17
|
+
Across a scene: all `Awake`s run, then all `OnEnable`s, then all `Start`s — so `Start` is your
|
|
18
|
+
"everyone exists now" hook.
|
|
19
|
+
|
|
20
|
+
## Physics loop (`FixedUpdate`) — 0..n times per frame
|
|
21
|
+
|
|
22
|
+
- Runs on a fixed timestep (`Time.fixedDeltaTime`, default 0.02s = 50 Hz). May run zero times (high FPS)
|
|
23
|
+
or several times (low FPS) per rendered frame.
|
|
24
|
+
- **All `Rigidbody` work goes here:** `AddForce`, `MovePosition`, `MoveRotation`, velocity changes.
|
|
25
|
+
Setting `transform.position` directly on a physics body fights the solver → jitter/tunneling.
|
|
26
|
+
- Do NOT read edge-triggered input here (`WasPressedThisFrame`) — you'll miss events. Read in `Update`,
|
|
27
|
+
store the intent, consume it in `FixedUpdate`.
|
|
28
|
+
- Collision/trigger callbacks (`OnCollisionEnter`, `OnTriggerEnter`, and their `Stay`/`Exit`, plus 2D
|
|
29
|
+
variants) fire from the physics step.
|
|
30
|
+
|
|
31
|
+
## Game logic loop (per frame)
|
|
32
|
+
|
|
33
|
+
4. **`Update`** — once per rendered frame. Input, timers, non-physics movement, state machines.
|
|
34
|
+
Frame-rate independent movement multiplies by `Time.deltaTime`.
|
|
35
|
+
5. **`LateUpdate`** — after every `Update` in the scene has run. Camera follow, look-at, IK, procedural
|
|
36
|
+
bone adjustments — anything that must read the *final* positions of objects that moved this frame.
|
|
37
|
+
|
|
38
|
+
## Rendering-adjacent (advanced)
|
|
39
|
+
|
|
40
|
+
- `OnPreCull`, `OnBecameVisible`/`OnBecameInvisible`, `OnWillRenderObject`, `OnRenderImage` (Built-in RP;
|
|
41
|
+
URP/HDRP use `RenderPipelineManager` callbacks / render features instead).
|
|
42
|
+
- `OnDrawGizmos` / `OnDrawGizmosSelected` — Editor scene-view debug drawing only.
|
|
43
|
+
- `OnGUI` — legacy IMGUI, called multiple times per frame; editor tooling only, never runtime gameplay.
|
|
44
|
+
|
|
45
|
+
## Teardown
|
|
46
|
+
|
|
47
|
+
6. **`OnDisable`** — when the object/component disables (and just before `OnDestroy`). Unsubscribe from
|
|
48
|
+
everything subscribed in `OnEnable`, disable input actions, stop coroutines you own. A missing
|
|
49
|
+
unsubscribe here is the #1 cause of leaks and "handler fired twice after re-enable".
|
|
50
|
+
7. **`OnDestroy`** — once, when the object is destroyed (or scene unloads / app quits). Release native
|
|
51
|
+
handles, dispose `IDisposable`s (`NativeArray`, `InputActionAsset` you `new`ed), final cleanup.
|
|
52
|
+
8. **`OnApplicationQuit`** / `OnApplicationPause` / `OnApplicationFocus` — app-level lifecycle for
|
|
53
|
+
save-on-quit and mobile pause handling.
|
|
54
|
+
|
|
55
|
+
## Coroutine yield timing (where a coroutine resumes)
|
|
56
|
+
|
|
57
|
+
| `yield return` | Resumes |
|
|
58
|
+
| --- | --- |
|
|
59
|
+
| `null` | next frame, after `Update` |
|
|
60
|
+
| `new WaitForSeconds(t)` | after `t` scaled seconds (affected by `Time.timeScale`) |
|
|
61
|
+
| `new WaitForSecondsRealtime(t)` | after `t` real seconds (ignores `timeScale`) |
|
|
62
|
+
| `new WaitForFixedUpdate()` | after the next physics step |
|
|
63
|
+
| `new WaitForEndOfFrame()` | after rendering, before present (good for screen capture) |
|
|
64
|
+
| `new WaitUntil(() => cond)` / `WaitWhile(...)` | when the predicate flips |
|
|
65
|
+
| another `IEnumerator` | when the nested coroutine completes |
|
|
66
|
+
|
|
67
|
+
Gotcha: `new WaitForSeconds(t)` allocates every call — cache the instance if you yield it in a loop, or
|
|
68
|
+
switch to `Awaitable.WaitForSecondsAsync`.
|
|
69
|
+
|
|
70
|
+
## Script execution order
|
|
71
|
+
|
|
72
|
+
If object A must initialize before object B, don't rely on scene order — set it in
|
|
73
|
+
`Project Settings → Script Execution Order`, or better, express the dependency explicitly (have B pull
|
|
74
|
+
what it needs in its own `Start`, or use an explicit init call). `[DefaultExecutionOrder(n)]` sets it
|
|
75
|
+
per-class in code.
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: unreal
|
|
3
|
+
description: "Use when building, scripting or debugging a game in Unreal Engine 5 with Blueprint or C++ — the gameplay framework (Actor, Pawn, Character, GameMode, PlayerController), Actor lifecycle and tick, the reflection macros and garbage collection, Enhanced Input, multicast delegates, UMG widgets, Paper2D, and Blueprint-to-C++ parity in both directions. NOT Godot (that is `godot`), NOT Unity or MonoBehaviour (that is `unity`), NOT language-only C++ memory and RAII questions with no Unreal types (that is `cpp`)."
|
|
4
|
+
tags: [unreal, ue5, blueprint, unreal-engine, gamedev]
|
|
5
|
+
recommends: [cpp, gamedev-shipping, gamedev-multiplayer, game-design, gamedev-physics, godot, unity]
|
|
6
|
+
profiles: [full]
|
|
7
|
+
origin: ai-hub
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Unreal Engine 5 (Blueprint + C++)
|
|
11
|
+
|
|
12
|
+
Build and debug UE5 games with the grain of the engine: the Gameplay Framework for structure,
|
|
13
|
+
reflection macros so C++ and Blueprint see the same types, Enhanced Input for controls, UMG for
|
|
14
|
+
UI, Paper2D for 2D — and a clean Blueprint↔C++ boundary so either can call the other. Hands
|
|
15
|
+
3D-only concerns (shaders, physics, netcode, shipping) to the siblings below.
|
|
16
|
+
|
|
17
|
+
## Version contract — read first
|
|
18
|
+
|
|
19
|
+
Target **Unreal Engine 5.x** (patterns valid 5.3+; current stable **UE 5.8**, the last UE5 line
|
|
20
|
+
before UE6). Emit modern UE5 APIs only. **Never emit these deprecated / legacy patterns:**
|
|
21
|
+
|
|
22
|
+
| Never emit | Use instead (UE5) |
|
|
23
|
+
| --- | --- |
|
|
24
|
+
| Legacy input: Project-Settings Action/Axis Mappings + `InputComponent->BindAction/BindAxis(FName,…)` | **Enhanced Input**: `UInputAction` + `UInputMappingContext` + `UEnhancedInputComponent->BindAction(…)`, context added via `UEnhancedInputLocalPlayerSubsystem` (default since 5.1; legacy deprecated 5.2) |
|
|
25
|
+
| Raw `UObject*` / `AActor*` as a **UPROPERTY member** | `TObjectPtr<T>` for UPROPERTY members (raw `T*` is fine for locals/params) |
|
|
26
|
+
| `GENERATED_UCLASS_BODY()` | `GENERATED_BODY()` |
|
|
27
|
+
| `TAssetPtr<T>` / `FStringAssetReference` | `TSoftObjectPtr<T>` / `FSoftObjectPath` |
|
|
28
|
+
| `ANY_PACKAGE` in `FindObject` / `StaticLoadObject` | explicit package or `FTopLevelAssetPath` |
|
|
29
|
+
| Slate/Canvas `DrawText`/`HUD` for game UI | **UMG** (`UUserWidget`) |
|
|
30
|
+
| `AGameMode` as the default base for a solo game | `AGameModeBase` (use `AGameMode` only when you need `MatchState`/multiplayer login flow) |
|
|
31
|
+
| `DECLARE_MULTICAST_DELEGATE` for a Blueprint-bindable event | `DECLARE_DYNAMIC_MULTICAST_DELEGATE…` + `BlueprintAssignable` |
|
|
32
|
+
| `bCanEverTick = true` "just in case" | leave tick **off**; drive logic from events/overlaps/timers (`FTimerManager`) |
|
|
33
|
+
| Hard-referencing / loading heavy assets at runtime by path | soft refs + `FStreamableManager` async load (hard refs only via `ConstructorHelpers` in the constructor) |
|
|
34
|
+
|
|
35
|
+
**Blueprint vs C++ — and the hybrid.** Blueprint: designer-facing tweaks, per-level scripting,
|
|
36
|
+
UI wiring, rapid iteration, one-off actors. C++: core systems, performance-critical/tick-heavy
|
|
37
|
+
code, base classes, math, anything you want unit-tested or diffable in git. **Default to the
|
|
38
|
+
hybrid**: write the base class in C++ (`UCLASS(Blueprintable)`), expose tunables with
|
|
39
|
+
`UPROPERTY(EditAnywhere, BlueprintReadWrite)` and hooks with `BlueprintImplementableEvent` /
|
|
40
|
+
`BlueprintNativeEvent`, then create a **Blueprint subclass** for designers to set defaults, wire
|
|
41
|
+
assets, and script the specifics — C++ speed and testability with Blueprint iteration.
|
|
42
|
+
|
|
43
|
+
## Gameplay Framework — who owns what
|
|
44
|
+
|
|
45
|
+
| Class | Responsibility | Lifetime / scope |
|
|
46
|
+
| --- | --- | --- |
|
|
47
|
+
| `AActor` | Anything placeable/spawnable in a level; holds components. | Per instance in a level/world |
|
|
48
|
+
| `UActorComponent` / `USceneComponent` | Reusable behavior/data on an Actor; `USceneComponent` adds a transform. | Owned by its Actor |
|
|
49
|
+
| `APawn` | An Actor that can be **possessed** and driven by a controller. | Per instance |
|
|
50
|
+
| `ACharacter` | A Pawn with a `CapsuleComponent`, `SkeletalMesh`, and `CharacterMovementComponent` (walk/jump/crouch, networked). | Per instance |
|
|
51
|
+
| `AController` / `APlayerController` / `AAIController` | The "brain" that possesses a Pawn; `APlayerController` maps a human player to input, camera, and UI. | One per player/AI |
|
|
52
|
+
| `APlayerState` | Per-player **replicated** state that must survive respawn (name, score, team). | One per player |
|
|
53
|
+
| `AGameModeBase` | The rules of the match; spawns players, defines default Pawn/Controller/HUD classes. **Server-only** — never exists on clients. | One per level |
|
|
54
|
+
| `AGameStateBase` | Game-wide **replicated** state all clients need (match phase, shared score, player array). | One, replicated |
|
|
55
|
+
| `AHUD` / `UUserWidget` | On-screen UI; prefer UMG `UUserWidget` over `AHUD` canvas drawing. | Per PlayerController |
|
|
56
|
+
|
|
57
|
+
Rule of thumb: **transient input/camera → PlayerController; persistent per-player data →
|
|
58
|
+
PlayerState; match rules → GameMode (server); shared world state → GameState.** Full
|
|
59
|
+
responsibilities and a spawn-order diagram → `references/gameplay-framework.md`.
|
|
60
|
+
|
|
61
|
+
## Actor lifecycle, components & attachment
|
|
62
|
+
|
|
63
|
+
Order for a spawned/placed Actor: **constructor** (set defaults, create subobjects — never
|
|
64
|
+
gameplay logic) → `PostInitializeComponents` → `BeginPlay` (world is live; safe to start logic)
|
|
65
|
+
→ `Tick(DeltaSeconds)` each frame (only if enabled) → `EndPlay` / `Destroyed` (release).
|
|
66
|
+
|
|
67
|
+
```cpp
|
|
68
|
+
AMyActor::AMyActor()
|
|
69
|
+
{
|
|
70
|
+
PrimaryActorTick.bCanEverTick = false; // opt in only if you truly tick
|
|
71
|
+
RootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("Root"));
|
|
72
|
+
Mesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Mesh"));
|
|
73
|
+
Mesh->SetupAttachment(RootComponent); // attach in the CONSTRUCTOR
|
|
74
|
+
}
|
|
75
|
+
void AMyActor::BeginPlay() { Super::BeginPlay(); /* start logic here, not in ctor */ }
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
- **Create components** with `CreateDefaultSubobject<T>(TEXT("Name"))` in the constructor; store
|
|
79
|
+
them in a `UPROPERTY() TObjectPtr<T>` so they're kept alive and visible.
|
|
80
|
+
- **Attach in the constructor** with `SetupAttachment`; **at runtime** use
|
|
81
|
+
`AttachToComponent(Parent, FAttachmentTransformRules::SnapToTargetNotIncludingScale)`.
|
|
82
|
+
- Prefer timers over tick for periodic work:
|
|
83
|
+
`GetWorldTimerManager().SetTimer(Handle, this, &AMyActor::Fn, 1.f, true);`
|
|
84
|
+
|
|
85
|
+
## Reflection macros & garbage collection
|
|
86
|
+
|
|
87
|
+
Macros register types with Unreal Header Tool (UHT) so they get GC, serialization, editor, and
|
|
88
|
+
Blueprint support. Put `GENERATED_BODY()` first inside the class.
|
|
89
|
+
|
|
90
|
+
```cpp
|
|
91
|
+
UENUM(BlueprintType)
|
|
92
|
+
enum class ETeam : uint8 { Red, Blue };
|
|
93
|
+
|
|
94
|
+
USTRUCT(BlueprintType) // value type, visible to BP; no GC of itself
|
|
95
|
+
struct FLoadout { GENERATED_BODY()
|
|
96
|
+
UPROPERTY(EditAnywhere, BlueprintReadWrite) int32 Ammo = 30;
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
UCLASS(Blueprintable) // Blueprintable = can be subclassed in BP
|
|
100
|
+
class MYGAME_API AWeapon : public AActor {
|
|
101
|
+
GENERATED_BODY()
|
|
102
|
+
public:
|
|
103
|
+
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Combat") float Damage = 10.f;
|
|
104
|
+
UPROPERTY(VisibleAnywhere) TObjectPtr<UStaticMeshComponent> Mesh; // GC-tracked ref
|
|
105
|
+
UFUNCTION(BlueprintCallable, Category="Combat") void Fire();
|
|
106
|
+
};
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Common `UPROPERTY` specifiers: `EditAnywhere` (edit on instances + defaults),
|
|
110
|
+
`EditDefaultsOnly` (class defaults only), `VisibleAnywhere` (read-only in editor);
|
|
111
|
+
`BlueprintReadWrite` (get + set in BP) vs `BlueprintReadOnly` (get only); always give a
|
|
112
|
+
`Category`.
|
|
113
|
+
|
|
114
|
+
**Garbage collection — the #1 gotcha.** The GC frees any `UObject` that no reachable `UPROPERTY`
|
|
115
|
+
points to. A UObject reference stored **without** `UPROPERTY()` is invisible to GC: it will be
|
|
116
|
+
collected out from under you and the pointer dangles/crashes. So:
|
|
117
|
+
|
|
118
|
+
- Store every long-lived `UObject`/`AActor` reference in a `UPROPERTY() TObjectPtr<T>`.
|
|
119
|
+
- For a non-owning "might already be dead" reference (don't keep it alive, must null-check), use
|
|
120
|
+
`TWeakObjectPtr<T>` and `.IsValid()`.
|
|
121
|
+
- Never `new`/`delete` a `UObject` — spawn Actors with `SpawnActor<T>()` and create other UObjects
|
|
122
|
+
with `NewObject<T>()`; the GC owns their lifetime. `new`/`delete` and smart pointers apply only
|
|
123
|
+
to **non-`UObject`** C++ types.
|
|
124
|
+
|
|
125
|
+
## Delegates & events
|
|
126
|
+
|
|
127
|
+
```cpp
|
|
128
|
+
// Dynamic multicast = Blueprint-assignable + serializable. Params need a typed macro variant.
|
|
129
|
+
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnHealthChanged, float, NewHealth);
|
|
130
|
+
|
|
131
|
+
UPROPERTY(BlueprintAssignable, Category="Events") // shows as a red event node in BP
|
|
132
|
+
FOnHealthChanged OnHealthChanged;
|
|
133
|
+
|
|
134
|
+
// C++ side: bind and fire.
|
|
135
|
+
OnHealthChanged.AddDynamic(this, &AMyActor::HandleHealth); // dynamic → AddDynamic + UFUNCTION
|
|
136
|
+
OnHealthChanged.Broadcast(NewHealth);
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Use a **dynamic** multicast delegate whenever Blueprint must bind to the event (`BlueprintAssignable`);
|
|
140
|
+
its handler must be a `UFUNCTION`. Use a plain `DECLARE_MULTICAST_DELEGATE…` (bind with
|
|
141
|
+
`AddUObject`/`AddLambda`) only for C++-to-C++ events that never touch Blueprint. Overlap/hit
|
|
142
|
+
events (`OnComponentBeginOverlap`, `OnActorHit`) are already dynamic multicast — bind with
|
|
143
|
+
`AddDynamic`.
|
|
144
|
+
|
|
145
|
+
## Blueprint ↔ C++ parity
|
|
146
|
+
|
|
147
|
+
Same graph, two languages. Left = the Blueprint node; right = the C++ that does the same thing.
|
|
148
|
+
|
|
149
|
+
| Blueprint node | C++ |
|
|
150
|
+
| --- | --- |
|
|
151
|
+
| Event **BeginPlay** | `virtual void BeginPlay() override;` (call `Super::BeginPlay()`) |
|
|
152
|
+
| Event **Tick (Delta Seconds)** | `virtual void Tick(float DeltaSeconds) override;` |
|
|
153
|
+
| **Spawn Actor from Class** | `GetWorld()->SpawnActor<AWeapon>(Class, Loc, Rot);` |
|
|
154
|
+
| **Cast To** `X` | `if (AX* P = Cast<AX>(Obj)) { … }` (always null-check) |
|
|
155
|
+
| **Set Timer by Event** | `GetWorldTimerManager().SetTimer(H, this, &A::Fn, Rate, bLoop);` |
|
|
156
|
+
| **Print String** | `UE_LOG(LogTemp, Warning, TEXT("v=%d"), V);` / `GEngine->AddOnScreenDebugMessage(...)` |
|
|
157
|
+
| **Get Player Controller** | `UGameplayStatics::GetPlayerController(this, 0);` |
|
|
158
|
+
| **Bind Event to** `OnClicked` | `Button->OnClicked.AddDynamic(this, &U::Fn);` |
|
|
159
|
+
|
|
160
|
+
**Expose C++ → Blueprint:**
|
|
161
|
+
|
|
162
|
+
```cpp
|
|
163
|
+
UFUNCTION(BlueprintCallable, Category="X") void DoThing(); // callable node (has exec pins)
|
|
164
|
+
UFUNCTION(BlueprintPure, Category="X") int32 GetScore() const; // pure node (no exec pins)
|
|
165
|
+
UPROPERTY(EditAnywhere, BlueprintReadWrite) float Speed = 600.f; // exposed variable
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**Call Blueprint ← C++** (the hybrid hooks — declare in C++, implement/override in the BP subclass):
|
|
169
|
+
|
|
170
|
+
```cpp
|
|
171
|
+
// No C++ body — Blueprint provides the whole implementation. C++ just calls OnScored().
|
|
172
|
+
UFUNCTION(BlueprintImplementableEvent) void OnScored(int32 Points);
|
|
173
|
+
|
|
174
|
+
// C++ gives a default; Blueprint may override. Implement the C++ default in OnDamaged_Implementation.
|
|
175
|
+
UFUNCTION(BlueprintNativeEvent) void OnDamaged(float Amount);
|
|
176
|
+
void AMyActor::OnDamaged_Implementation(float Amount) { Health -= Amount; }
|
|
177
|
+
// Call the event from C++ by its plain name: OnScored(10); OnDamaged(5.f);
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Mapping table (every specifier), full expose/override examples, and the C++-base-+-BP-subclass
|
|
181
|
+
workflow → `references/blueprint-cpp-parity.md`.
|
|
182
|
+
|
|
183
|
+
## UMG (UI)
|
|
184
|
+
|
|
185
|
+
UI is a `UUserWidget` (design the visuals in a WBP asset; drive logic in C++ or its BP graph).
|
|
186
|
+
Bind C++ members to named widgets with `meta=(BindWidget)` — the C++ name must match the WBP
|
|
187
|
+
widget.
|
|
188
|
+
|
|
189
|
+
```cpp
|
|
190
|
+
UCLASS() class UHealthWidget : public UUserWidget { GENERATED_BODY()
|
|
191
|
+
UPROPERTY(meta=(BindWidget)) TObjectPtr<UProgressBar> HealthBar; // name matches WBP
|
|
192
|
+
UFUNCTION(BlueprintCallable) void SetHealth(float Pct);
|
|
193
|
+
};
|
|
194
|
+
// Create + show from a PlayerController:
|
|
195
|
+
UHealthWidget* W = CreateWidget<UHealthWidget>(PC, WidgetClass);
|
|
196
|
+
W->AddToViewport();
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Layout with panels (Canvas/V-H Box/Overlay/Grid); `SetVisibility`,
|
|
200
|
+
`RemoveFromParent` to hide/close; anchors + a design resolution for scaling.
|
|
201
|
+
|
|
202
|
+
## Paper2D (2D)
|
|
203
|
+
|
|
204
|
+
Enable the Paper2D plugin. Core types:
|
|
205
|
+
|
|
206
|
+
- **Sprite** (`UPaperSprite` asset, `UPaperSpriteComponent`) — a single textured quad.
|
|
207
|
+
- **Flipbook** (`UPaperFlipbook` asset, `UPaperFlipbookComponent`) — frames + FPS = animation;
|
|
208
|
+
`SetFlipbook(...)` to swap states (idle/run/jump).
|
|
209
|
+
- **`APaperCharacter`** — a `ACharacter` whose mesh is a flipbook; you get
|
|
210
|
+
`CharacterMovementComponent` (walk/jump) for free, driven by Enhanced Input just like 3D.
|
|
211
|
+
- **Tile maps** (`UPaperTileMap`, `UPaperTileMapComponent`) for level geometry.
|
|
212
|
+
|
|
213
|
+
2D uses the same Gameplay Framework, Enhanced Input, and lifecycle as 3D — only the visual
|
|
214
|
+
components differ. Constrain movement to a plane and use an orthographic camera.
|
|
215
|
+
|
|
216
|
+
## Packaging & build config (brief)
|
|
217
|
+
|
|
218
|
+
- **Build configurations**: `Debug`, `DebugGame`, `Development` (default for iteration —
|
|
219
|
+
optimized engine, hot-reloadable game code), `Shipping` (fully optimized, logging/console
|
|
220
|
+
stripped — ship this), `Test`.
|
|
221
|
+
- **Target files** (`*.Target.cs`) define Game/Editor/Client/Server targets; **module rules**
|
|
222
|
+
(`*.Build.cs`) declare module dependencies (e.g. `"EnhancedInput"`, `"UMG"`, `"Paper2D"`).
|
|
223
|
+
- Package from **Platforms ▸ <target> ▸ Package Project**, or automate with
|
|
224
|
+
`RunUAT BuildCookRun` (cook content → stage → package). Per-platform settings live in
|
|
225
|
+
`Config/DefaultGame.ini` / `Default<Platform>Engine.ini`.
|
|
226
|
+
|
|
227
|
+
This is the minimum. Deep shipping — cooking, pak/IoStore, certification, size/perf budgets, CI —
|
|
228
|
+
is owned by [`gamedev-shipping`](../gamedev-shipping/SKILL.md). Overview + a starter `.Build.cs` →
|
|
229
|
+
`references/packaging.md`.
|
|
230
|
+
|
|
231
|
+
## Guardrails & gotchas
|
|
232
|
+
|
|
233
|
+
- **UPROPERTY-or-GC'd**: any UObject ref you keep must be a `UPROPERTY()` or it will be garbage
|
|
234
|
+
collected and crash. This is the most common Unreal C++ bug.
|
|
235
|
+
- **Enhanced Input only** — no legacy Action/Axis mappings; add the `UInputMappingContext` via the
|
|
236
|
+
local player subsystem in `BeginPlay`/on-possess, bind actions on `UEnhancedInputComponent`.
|
|
237
|
+
- **GameMode is server-only** — never read it on a client; put client-visible state on GameState
|
|
238
|
+
or PlayerState and replicate.
|
|
239
|
+
- **No gameplay in the constructor** — the world isn't ready. Do it in `BeginPlay`.
|
|
240
|
+
- **Always null-check `Cast<T>()`** and `SpawnActor` results; they can return `nullptr`.
|
|
241
|
+
- **Don't `new`/`delete` UObjects** — `NewObject`/`SpawnActor` and let GC free them. Header
|
|
242
|
+
changes need a full editor recompile (Live Coding covers `.cpp` bodies only).
|
|
243
|
+
- **Regenerate project files** after adding classes/modules; add module deps in `*.Build.cs`
|
|
244
|
+
(missing `"EnhancedInput"`/`"UMG"` = linker errors).
|
|
245
|
+
- **Multiplayer**: replicate state with `UPROPERTY(Replicated)`, gate server actions behind
|
|
246
|
+
`HasAuthority()` → see `gamedev-multiplayer`.
|
|
247
|
+
|
|
248
|
+
## Related skills
|
|
249
|
+
|
|
250
|
+
- [`cpp`](../cpp/SKILL.md) — plain C++/RAII/smart-pointer ownership for **non-UObject** code; this
|
|
251
|
+
skill owns the Unreal reflection + GC model layered on top.
|
|
252
|
+
- [`gamedev-shipping`](../gamedev-shipping/SKILL.md) — deep cooking/packaging/store submission.
|
|
253
|
+
- [`gamedev-multiplayer`](../gamedev-multiplayer/SKILL.md) — replication, RPCs, authority.
|
|
254
|
+
- [`gamedev-physics`](../gamedev-physics/SKILL.md) — Chaos physics, collision, constraints.
|
|
255
|
+
- [`game-design`](../game-design/SKILL.md) — mechanics/loops before you build them.
|
|
256
|
+
- [`godot`](../godot/SKILL.md) / [`unity`](../unity/SKILL.md) — the other engines; route there
|
|
257
|
+
when the project is Godot or Unity, not Unreal.
|
|
258
|
+
|
|
259
|
+
## Checklist
|
|
260
|
+
|
|
261
|
+
- [ ] Correct base class chosen (Actor/Pawn/Character; GameMode**Base** unless match-state needed).
|
|
262
|
+
- [ ] No legacy input — Enhanced Input (`UInputAction` + `UInputMappingContext` + subsystem).
|
|
263
|
+
- [ ] Every long-lived UObject/Actor ref is a `UPROPERTY() TObjectPtr<T>` (GC-safe).
|
|
264
|
+
- [ ] Components made in ctor via `CreateDefaultSubobject` + `SetupAttachment`; no logic in ctor.
|
|
265
|
+
- [ ] Tick left off unless required; periodic work on a timer/event.
|
|
266
|
+
- [ ] C++↔BP boundary correct: `BlueprintCallable`/`Pure` to expose, `BlueprintImplementableEvent`/
|
|
267
|
+
`NativeEvent` for BP-overridable hooks; BP-bound delegates are dynamic multicast.
|
|
268
|
+
- [ ] UI is UMG (`UUserWidget` + `BindWidget`), not HUD canvas drawing.
|
|
269
|
+
- [ ] Server-only vs replicated state placed correctly (GameMode server-only).
|
|
270
|
+
- [ ] Module deps (`EnhancedInput`/`UMG`/`Paper2D`) added in `*.Build.cs`; project files regenerated.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Eval harness — `unreal` skill
|
|
2
|
+
|
|
3
|
+
These cases are run by the ai-hub skill-eval harness (a Claude agent with the full catalog loaded)
|
|
4
|
+
or read manually. **Triggering**: the `unreal` description must fire on real UE5 Blueprint/C++
|
|
5
|
+
requests — including symptom-only ones (a garbage-collected UObject) — while staying quiet on
|
|
6
|
+
near-misses that belong to `godot`, `unity`, `cpp`, `game-design`, or `gamedev-shipping`, routing
|
|
7
|
+
each to that sibling. **Capability**: with `SKILL.md` + references loaded, the generated UE5 code
|
|
8
|
+
must satisfy the `must_include` rubric — Enhanced Input (never legacy mappings), GC-safe
|
|
9
|
+
`UPROPERTY() TObjectPtr<T>` refs, `GENERATED_BODY()`, no logic in the constructor, correct
|
|
10
|
+
Blueprint exposure, a dynamic multicast delegate, and the right `.Build.cs` module — and beat the
|
|
11
|
+
no-skill baseline. Run 3–5 trials per prompt (LLM routing is non-deterministic); a prompt passes
|
|
12
|
+
on a majority.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
skill: unreal
|
|
2
|
+
|
|
3
|
+
should_trigger:
|
|
4
|
+
- prompt: "In my UE5 project, write a Character in C++ that moves and jumps with Enhanced Input, then let designers subclass it in Blueprint."
|
|
5
|
+
why: "Core hybrid workflow: C++ ACharacter base + Enhanced Input + Blueprint subclass — the skill's central use case."
|
|
6
|
+
- prompt: "How do I expose this C++ function and a float variable to Blueprint so a designer can call and tweak them?"
|
|
7
|
+
why: "Blueprint↔C++ parity / exposure via BlueprintCallable + UPROPERTY(EditAnywhere, BlueprintReadWrite)."
|
|
8
|
+
- prompt: "My UObject keeps getting garbage collected and the pointer crashes at random — I'm holding it in a plain member. What's wrong?"
|
|
9
|
+
why: "Symptom-only trigger for the GC/UPROPERTY(TObjectPtr) rule — the #1 Unreal C++ gotcha this skill owns."
|
|
10
|
+
- prompt: "What's the difference between GameMode, GameState, PlayerController and PlayerState, and where do I put the player's score?"
|
|
11
|
+
why: "Gameplay Framework responsibilities — the reference table routes score to PlayerState and match rules to server-only GameMode."
|
|
12
|
+
- prompt: "Set up a Paper2D player with idle/run/jump flipbook animations that swap on movement."
|
|
13
|
+
why: "Paper2D (APaperCharacter + UPaperFlipbookComponent) is explicitly covered for 2D."
|
|
14
|
+
- prompt: "I want a UMG health bar widget in C++ bound to a progress bar in the WBP and shown on screen."
|
|
15
|
+
why: "UMG basics: UUserWidget + meta=(BindWidget) + CreateWidget/AddToViewport."
|
|
16
|
+
- prompt: "Declare an event other Blueprints and C++ can bind to when the player dies, and broadcast it from C++."
|
|
17
|
+
why: "Dynamic multicast delegate + BlueprintAssignable + Broadcast/AddDynamic is owned here."
|
|
18
|
+
|
|
19
|
+
should_not_trigger:
|
|
20
|
+
- prompt: "In Godot 4, how do I structure nodes and connect signals for my player scene?"
|
|
21
|
+
route_to: "godot"
|
|
22
|
+
why: "Godot's node/signal model is a different engine; unreal must not answer engine-specific Godot questions."
|
|
23
|
+
- prompt: "My Unity MonoBehaviour Start() runs before my other script's Awake() — how do I fix the execution order?"
|
|
24
|
+
route_to: "unity"
|
|
25
|
+
why: "Unity/C#/MonoBehaviour lifecycle belongs to the unity skill, not Unreal's Actor lifecycle."
|
|
26
|
+
- prompt: "Explain unique_ptr vs shared_ptr ownership and how to avoid a use-after-free in my plain C++ library."
|
|
27
|
+
route_to: "cpp"
|
|
28
|
+
why: "Pure C++ smart-pointer/RAII with no Unreal types goes to cpp; unreal owns only the UObject/GC model layered on top."
|
|
29
|
+
- prompt: "Design the core game loop and progression economy for my roguelike before I build anything."
|
|
30
|
+
route_to: "game-design"
|
|
31
|
+
why: "Mechanics/loop/economy design is engine-agnostic and precedes implementation — game-design, not unreal."
|
|
32
|
+
- prompt: "Tune Unreal's cook settings, pak/IoStore, and set up CI to produce signed console builds."
|
|
33
|
+
route_to: "gamedev-shipping"
|
|
34
|
+
why: "Deep cooking/packaging/certification pipeline is delegated to gamedev-shipping; unreal only covers the build-config overview."
|
|
35
|
+
|
|
36
|
+
capability:
|
|
37
|
+
- scenario: "Author a UE5 first-person Character in C++ that walks and jumps via Enhanced Input, exposes a movement-speed tunable, fires a Blueprint-bindable OnDied event, and is meant to be subclassed in Blueprint."
|
|
38
|
+
must_include:
|
|
39
|
+
- "Uses Enhanced Input (UInputAction + UInputMappingContext + UEnhancedInputComponent->BindAction, context added through UEnhancedInputLocalPlayerSubsystem) — NOT legacy Action/Axis mappings or InputComponent->BindAxis"
|
|
40
|
+
- "Class derives from ACharacter (or APawn) and uses GENERATED_BODY(), not GENERATED_UCLASS_BODY()"
|
|
41
|
+
- "Components/refs kept alive via UPROPERTY() using TObjectPtr<T> rather than a raw UObject*/AActor* member"
|
|
42
|
+
- "Adds the input mapping context in BeginPlay (or on possession), not in the constructor, and does no gameplay logic in the constructor"
|
|
43
|
+
- "Exposes the speed tunable with UPROPERTY(EditAnywhere, BlueprintReadWrite) and marks it UCLASS(Blueprintable) for the Blueprint subclass"
|
|
44
|
+
- "Declares the death event as a DECLARE_DYNAMIC_MULTICAST_DELEGATE... with a UPROPERTY(BlueprintAssignable) member and Broadcast()s it (dynamic, not plain multicast)"
|
|
45
|
+
- "Lists the EnhancedInput module dependency in the .Build.cs"
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Blueprint ↔ C++ parity (UE5)
|
|
2
|
+
|
|
3
|
+
Blueprint and C++ compile to the same reflected types. This is the full mapping + the exposure
|
|
4
|
+
specifiers + the hybrid (C++ base, Blueprint subclass) workflow.
|
|
5
|
+
|
|
6
|
+
## Node ↔ C++ mapping
|
|
7
|
+
|
|
8
|
+
| Blueprint node | C++ equivalent |
|
|
9
|
+
| --- | --- |
|
|
10
|
+
| Event BeginPlay | `virtual void BeginPlay() override;` — call `Super::BeginPlay()` first |
|
|
11
|
+
| Event Tick (Delta Seconds) | `virtual void Tick(float DeltaSeconds) override;` (enable `PrimaryActorTick.bCanEverTick`) |
|
|
12
|
+
| Construction Script | `virtual void OnConstruction(const FTransform& T) override;` |
|
|
13
|
+
| Spawn Actor from Class | `GetWorld()->SpawnActor<AType>(Class, Loc, Rot, Params);` |
|
|
14
|
+
| Spawn Actor Deferred + Finish | `SpawnActorDeferred<AType>(...)` then `UGameplayStatics::FinishSpawningActor(A, T)` |
|
|
15
|
+
| Cast To `X` | `if (AX* P = Cast<AX>(Obj)) { … }` (null on failure — always check) |
|
|
16
|
+
| Get Player Controller / Pawn / Character | `UGameplayStatics::GetPlayerController(this, 0)` / `GetPlayerPawn` / `GetPlayerCharacter` |
|
|
17
|
+
| Get Game Mode / Game State | `GetWorld()->GetAuthGameMode<AMyGameMode>()` / `GetGameState<AMyGameState>()` |
|
|
18
|
+
| Set Timer by Event / by Function | `GetWorldTimerManager().SetTimer(Handle, this, &A::Fn, Rate, bLoop, Delay);` |
|
|
19
|
+
| Delay | `FTimerHandle` one-shot timer, or a latent node from C++ via `FLatentActionInfo` |
|
|
20
|
+
| Print String | `UE_LOG(LogTemp, Warning, TEXT("x=%d"), X);` or `GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, TEXT("hi"));` |
|
|
21
|
+
| Bind Event to `OnClicked` / `OnComponentBeginOverlap` | `Button->OnClicked.AddDynamic(this, &U::Handler);` |
|
|
22
|
+
| Get / Set variable | `UPROPERTY` member read/write |
|
|
23
|
+
| Make / Break struct | aggregate init / field access on a `USTRUCT` |
|
|
24
|
+
| Line Trace By Channel | `GetWorld()->LineTraceSingleByChannel(Hit, Start, End, ECC_Visibility, Params);` |
|
|
25
|
+
| Attach Actor/Component to | `AttachToComponent(Parent, FAttachmentTransformRules::SnapToTargetNotIncludingScale)` |
|
|
26
|
+
| Destroy Actor | `Destroy();` |
|
|
27
|
+
|
|
28
|
+
## Expose C++ → Blueprint
|
|
29
|
+
|
|
30
|
+
```cpp
|
|
31
|
+
// --- Class visibility ---
|
|
32
|
+
UCLASS(Blueprintable) // can be subclassed as a Blueprint
|
|
33
|
+
UCLASS(BlueprintType) // can be used as a variable type / pin in Blueprint
|
|
34
|
+
// (both are common together on gameplay classes)
|
|
35
|
+
|
|
36
|
+
// --- Functions ---
|
|
37
|
+
UFUNCTION(BlueprintCallable, Category="Combat")
|
|
38
|
+
void Fire(); // impure node with exec pins (may have side effects)
|
|
39
|
+
|
|
40
|
+
UFUNCTION(BlueprintPure, Category="Combat")
|
|
41
|
+
float GetDamage() const; // pure node, no exec pins (read-only getter)
|
|
42
|
+
|
|
43
|
+
UFUNCTION(BlueprintCallable, meta=(WorldContext="WorldContextObject"))
|
|
44
|
+
static AItem* SpawnItem(UObject* WorldContextObject); // static → library-style node
|
|
45
|
+
|
|
46
|
+
// --- Properties ---
|
|
47
|
+
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Stats")
|
|
48
|
+
float Speed = 600.f; // editable in editor + get/set in BP graph
|
|
49
|
+
|
|
50
|
+
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Config")
|
|
51
|
+
TSubclassOf<AWeapon> WeaponClass; // pick a class in the editor; read-only in BP
|
|
52
|
+
|
|
53
|
+
UPROPERTY(BlueprintAssignable, Category="Events")
|
|
54
|
+
FOnDied OnDied; // dynamic multicast delegate, bindable in BP
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Specifier cheats: `EditAnywhere` (instances + defaults) · `EditInstanceOnly` · `EditDefaultsOnly`
|
|
58
|
+
(class defaults only) · `VisibleAnywhere` (read-only in editor). `BlueprintReadWrite` (get+set) vs
|
|
59
|
+
`BlueprintReadOnly` (get only). `meta=(AllowPrivateAccess="true")` exposes a `private` member.
|
|
60
|
+
`meta=(ClampMin="0", ClampMax="100")` bounds a numeric field in the editor.
|
|
61
|
+
|
|
62
|
+
## Call Blueprint ← C++ (overridable hooks)
|
|
63
|
+
|
|
64
|
+
Two ways to let a Blueprint subclass provide/override behavior a C++ base invokes:
|
|
65
|
+
|
|
66
|
+
```cpp
|
|
67
|
+
// (1) Implemented entirely in Blueprint. C++ declares it and calls it; there is NO C++ body.
|
|
68
|
+
UFUNCTION(BlueprintImplementableEvent, Category="Events")
|
|
69
|
+
void OnScored(int32 Points);
|
|
70
|
+
|
|
71
|
+
// (2) C++ gives a default implementation; Blueprint MAY override (and can call Parent).
|
|
72
|
+
UFUNCTION(BlueprintNativeEvent, Category="Events")
|
|
73
|
+
void OnDamaged(float Amount);
|
|
74
|
+
void AMyActor::OnDamaged_Implementation(float Amount) // note the _Implementation suffix
|
|
75
|
+
{
|
|
76
|
+
Health = FMath::Max(0.f, Health - Amount);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Call BOTH from C++ by their plain names — the reflected thunk dispatches to BP if overridden:
|
|
80
|
+
void AMyActor::ApplyHit(float Dmg) { OnDamaged(Dmg); OnScored(10); }
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
To call an arbitrary Blueprint-defined function by name (rare — prefer the hooks above):
|
|
84
|
+
`FindFunction(FName("MyFn"))` + `ProcessEvent(Fn, &Params)`.
|
|
85
|
+
|
|
86
|
+
## The hybrid workflow (recommended default)
|
|
87
|
+
|
|
88
|
+
1. **C++ base class** (`UCLASS(Blueprintable)`): fields, systems, tick/perf-critical logic,
|
|
89
|
+
the math. Expose tunables (`UPROPERTY(EditAnywhere, BlueprintReadWrite)`) and hooks
|
|
90
|
+
(`BlueprintImplementableEvent` / `BlueprintNativeEvent`).
|
|
91
|
+
2. **Blueprint subclass** (Content Browser → Blueprint Class → pick your C++ class): designers
|
|
92
|
+
set default values, assign meshes/materials/sounds/`TSubclassOf` refs, and script the hooks
|
|
93
|
+
and per-instance behavior on the graph.
|
|
94
|
+
3. **Spawn/reference the Blueprint class**, not the C++ class, from the game (via a
|
|
95
|
+
`TSubclassOf<AMyActor>` UPROPERTY the designer fills in) — otherwise the Blueprint's default
|
|
96
|
+
values and graph never run.
|
|
97
|
+
|
|
98
|
+
Why: C++ gives speed, testability, and clean git diffs; Blueprint gives fast iteration and a
|
|
99
|
+
designer-editable surface. The reflection macros are the seam that keeps both in sync.
|
|
100
|
+
|
|
101
|
+
## Gotchas
|
|
102
|
+
|
|
103
|
+
- A `BlueprintAssignable` delegate must be a **dynamic** multicast (`DECLARE_DYNAMIC_MULTICAST_DELEGATE…`);
|
|
104
|
+
a plain multicast delegate won't show in Blueprint.
|
|
105
|
+
- `AddDynamic` handlers must be `UFUNCTION`s; a non-`UFUNCTION` method silently fails to bind.
|
|
106
|
+
- Overriding a `BlueprintNativeEvent` in C++ means overriding `Fn_Implementation`, never `Fn`.
|
|
107
|
+
- Changing a `UFUNCTION`/`UPROPERTY` signature is a header change → full recompile, not Live Coding.
|
|
108
|
+
- Renaming a C++ property that a Blueprint references breaks the pin; use
|
|
109
|
+
`UPROPERTY(meta=(DeprecatedProperty))` or a Core Redirect to migrate.
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# UE5 Gameplay Framework — responsibilities & flow
|
|
2
|
+
|
|
3
|
+
The Gameplay Framework is Unreal's opinionated skeleton for a game. Put each responsibility in
|
|
4
|
+
the class that owns it; fighting the framework is the usual cause of "where does this code go?"
|
|
5
|
+
|
|
6
|
+
## The classes
|
|
7
|
+
|
|
8
|
+
### AActor
|
|
9
|
+
Base for anything with a presence in a level — placed or spawned at runtime. Holds a tree of
|
|
10
|
+
components rooted at `RootComponent` (a `USceneComponent` giving it a transform). Actors are
|
|
11
|
+
GC'd UObjects; spawn with `SpawnActor<T>()`, remove with `Destroy()`. Everything below is an
|
|
12
|
+
Actor except components.
|
|
13
|
+
|
|
14
|
+
### UActorComponent / USceneComponent / UPrimitiveComponent
|
|
15
|
+
Reusable, composable behavior/data attached to an Actor.
|
|
16
|
+
- `UActorComponent` — logic/data, no transform (e.g. an inventory or health component).
|
|
17
|
+
- `USceneComponent` — adds a transform; can be attached in a hierarchy.
|
|
18
|
+
- `UPrimitiveComponent` — a scene component with geometry that renders/collides
|
|
19
|
+
(`UStaticMeshComponent`, `USkeletalMeshComponent`, `UCapsuleComponent`, `UBoxComponent`).
|
|
20
|
+
Prefer composition (small components) over deep Actor inheritance.
|
|
21
|
+
|
|
22
|
+
### APawn
|
|
23
|
+
An Actor that a controller can **possess** and drive. Minimal by itself (add a mesh + movement
|
|
24
|
+
if you want them). Use a bare Pawn for non-humanoid controllables (a ship, a camera, a ball).
|
|
25
|
+
|
|
26
|
+
### ACharacter
|
|
27
|
+
A Pawn preconfigured for a walking humanoid: `UCapsuleComponent` (collision), a
|
|
28
|
+
`USkeletalMeshComponent`, and a `UCharacterMovementComponent` that implements walking, falling,
|
|
29
|
+
jumping, crouching, and swimming — all **network-replicated** with client prediction. In 2D,
|
|
30
|
+
`APaperCharacter` is the equivalent with a flipbook mesh.
|
|
31
|
+
|
|
32
|
+
### AController / APlayerController / AAIController
|
|
33
|
+
The "brain" that possesses a Pawn. The Pawn is the body; the controller persists across
|
|
34
|
+
possession changes.
|
|
35
|
+
- `APlayerController` — one per human player: receives input, owns the camera
|
|
36
|
+
(`PlayerCameraManager`), owns/creates the player's UI, and is the client's authority link.
|
|
37
|
+
Input setup and HUD widgets live here (or on the Character it possesses).
|
|
38
|
+
- `AAIController` — drives an AI Pawn (behavior tree, perception, navmesh pathing).
|
|
39
|
+
|
|
40
|
+
### APlayerState
|
|
41
|
+
Per-player **replicated** data that must survive the Pawn dying/respawning: display name, score,
|
|
42
|
+
ping, team. Lives on every machine for every player. Do NOT put transient input here.
|
|
43
|
+
|
|
44
|
+
### AGameModeBase / AGameMode
|
|
45
|
+
The **rules** of the current level/match. Defines the default classes (`DefaultPawnClass`,
|
|
46
|
+
`PlayerControllerClass`, `HUDClass`, `GameStateClass`, `PlayerStateClass`), handles login and
|
|
47
|
+
where/what to spawn for a joining player. **Exists only on the server / authority** — clients
|
|
48
|
+
have `nullptr`. Use `AGameModeBase` (lean) by default; use `AGameMode` only when you need its
|
|
49
|
+
`MatchState` machine (WaitingToStart → InProgress → …) for match-based multiplayer.
|
|
50
|
+
|
|
51
|
+
### AGameStateBase / AGameState
|
|
52
|
+
Game-wide state that **all clients** need to see: current match phase, shared/team score, the
|
|
53
|
+
replicated array of `APlayerState`. Replicated from the server. This is how clients learn
|
|
54
|
+
game-level facts (the GameMode that owns those facts is server-only).
|
|
55
|
+
|
|
56
|
+
### AHUD / UUserWidget
|
|
57
|
+
On-screen UI. `AHUD` is the legacy immediate-mode canvas; **prefer UMG** — build a `UUserWidget`,
|
|
58
|
+
`CreateWidget` + `AddToViewport` from the `APlayerController`.
|
|
59
|
+
|
|
60
|
+
## Where does my code go?
|
|
61
|
+
|
|
62
|
+
| I need to… | Put it on |
|
|
63
|
+
| --- | --- |
|
|
64
|
+
| Read input, move the camera, open menus | `APlayerController` (or the possessed `Character`) |
|
|
65
|
+
| Store score/name that survives respawn | `APlayerState` |
|
|
66
|
+
| Decide who wins, when the match starts, where to spawn | `AGameModeBase` (server) |
|
|
67
|
+
| Share match phase / team score with all clients | `AGameStateBase` (replicated) |
|
|
68
|
+
| Make a thing that walks and jumps | `ACharacter` / `APaperCharacter` |
|
|
69
|
+
| Make a reusable ability (health, inventory) | a `UActorComponent` added to the owner |
|
|
70
|
+
| Make a placeable prop / pickup / trigger | `AActor` with the right components |
|
|
71
|
+
|
|
72
|
+
## Startup / spawn order (server or standalone)
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
Level loads
|
|
76
|
+
→ GameMode spawned (authority only)
|
|
77
|
+
→ for each player: PlayerController spawned
|
|
78
|
+
→ GameMode spawns the Pawn/Character (DefaultPawnClass) at a PlayerStart
|
|
79
|
+
→ PlayerController Possesses the Pawn
|
|
80
|
+
→ PlayerState created & associated
|
|
81
|
+
→ GameState spawned and replicated to clients
|
|
82
|
+
→ All actors: PostInitializeComponents → BeginPlay
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Client join adds: connect → PlayerController (client proxy) → GameState/PlayerState replicate
|
|
86
|
+
down → possessed Pawn replicates down. Remember: the client never sees the GameMode.
|
|
87
|
+
|
|
88
|
+
## Possession pattern
|
|
89
|
+
|
|
90
|
+
```cpp
|
|
91
|
+
// Give a player a new body (e.g. respawn or vehicle enter):
|
|
92
|
+
APlayerController* PC = UGameplayStatics::GetPlayerController(this, 0);
|
|
93
|
+
ACharacter* NewBody = GetWorld()->SpawnActor<ACharacter>(BodyClass, SpawnT);
|
|
94
|
+
PC->Possess(NewBody); // controller now drives NewBody; input/camera follow
|
|
95
|
+
```
|