@event4u/agent-config 1.9.1
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/.agent-src/README.md +64 -0
- package/.agent-src/commands/agent-handoff.md +64 -0
- package/.agent-src/commands/agent-status.md +83 -0
- package/.agent-src/commands/agents-audit.md +243 -0
- package/.agent-src/commands/agents-cleanup.md +169 -0
- package/.agent-src/commands/agents-prepare.md +137 -0
- package/.agent-src/commands/analyze-reference-repo.md +191 -0
- package/.agent-src/commands/bug-fix.md +181 -0
- package/.agent-src/commands/bug-investigate.md +175 -0
- package/.agent-src/commands/commit.md +121 -0
- package/.agent-src/commands/compress.md +177 -0
- package/.agent-src/commands/config-agent-settings.md +126 -0
- package/.agent-src/commands/context-create.md +167 -0
- package/.agent-src/commands/context-refactor.md +170 -0
- package/.agent-src/commands/copilot-agents-init.md +150 -0
- package/.agent-src/commands/copilot-agents-optimize.md +251 -0
- package/.agent-src/commands/create-pr-description.md +112 -0
- package/.agent-src/commands/create-pr.md +76 -0
- package/.agent-src/commands/do-and-judge.md +114 -0
- package/.agent-src/commands/do-in-steps.md +84 -0
- package/.agent-src/commands/e2e-heal.md +98 -0
- package/.agent-src/commands/e2e-plan.md +85 -0
- package/.agent-src/commands/estimate-ticket.md +80 -0
- package/.agent-src/commands/feature-dev.md +111 -0
- package/.agent-src/commands/feature-explore.md +180 -0
- package/.agent-src/commands/feature-plan.md +288 -0
- package/.agent-src/commands/feature-refactor.md +181 -0
- package/.agent-src/commands/feature-roadmap.md +184 -0
- package/.agent-src/commands/fix-ci.md +48 -0
- package/.agent-src/commands/fix-portability.md +97 -0
- package/.agent-src/commands/fix-pr-bot-comments.md +146 -0
- package/.agent-src/commands/fix-pr-comments.md +58 -0
- package/.agent-src/commands/fix-pr-developer-comments.md +152 -0
- package/.agent-src/commands/fix-references.md +94 -0
- package/.agent-src/commands/fix-seeder.md +146 -0
- package/.agent-src/commands/implement-ticket.md +133 -0
- package/.agent-src/commands/jira-ticket.md +71 -0
- package/.agent-src/commands/judge.md +86 -0
- package/.agent-src/commands/memory-add.md +130 -0
- package/.agent-src/commands/memory-full.md +97 -0
- package/.agent-src/commands/memory-promote.md +144 -0
- package/.agent-src/commands/mode.md +121 -0
- package/.agent-src/commands/module-create.md +132 -0
- package/.agent-src/commands/module-explore.md +157 -0
- package/.agent-src/commands/optimize-agents.md +139 -0
- package/.agent-src/commands/optimize-augmentignore.md +262 -0
- package/.agent-src/commands/optimize-rtk-filters.md +120 -0
- package/.agent-src/commands/optimize-skills.md +121 -0
- package/.agent-src/commands/override-create.md +97 -0
- package/.agent-src/commands/override-manage.md +96 -0
- package/.agent-src/commands/package-reset.md +154 -0
- package/.agent-src/commands/package-test.md +154 -0
- package/.agent-src/commands/prepare-for-review.md +91 -0
- package/.agent-src/commands/project-analyze.md +300 -0
- package/.agent-src/commands/project-health.md +95 -0
- package/.agent-src/commands/propose-memory.md +108 -0
- package/.agent-src/commands/quality-fix.md +106 -0
- package/.agent-src/commands/refine-ticket.md +81 -0
- package/.agent-src/commands/review-changes.md +130 -0
- package/.agent-src/commands/review-routing.md +111 -0
- package/.agent-src/commands/roadmap-create.md +110 -0
- package/.agent-src/commands/roadmap-execute.md +68 -0
- package/.agent-src/commands/rule-compliance-audit.md +139 -0
- package/.agent-src/commands/tests-create.md +73 -0
- package/.agent-src/commands/tests-execute.md +58 -0
- package/.agent-src/commands/threat-model.md +115 -0
- package/.agent-src/commands/update-form-request-messages.md +189 -0
- package/.agent-src/commands/upstream-contribute.md +171 -0
- package/.agent-src/contexts/augment-infrastructure.md +181 -0
- package/.agent-src/contexts/documentation-hierarchy.md +142 -0
- package/.agent-src/contexts/model-recommendations.md +142 -0
- package/.agent-src/contexts/override-system.md +187 -0
- package/.agent-src/contexts/skills-and-commands.md +154 -0
- package/.agent-src/contexts/subagent-configuration.md +62 -0
- package/.agent-src/guidelines/agent-infra/agent-interaction-and-decision-quality.md +110 -0
- package/.agent-src/guidelines/agent-infra/break-glass-usage.md +113 -0
- package/.agent-src/guidelines/agent-infra/developer-judgment.md +82 -0
- package/.agent-src/guidelines/agent-infra/engineering-memory-data-format.md +117 -0
- package/.agent-src/guidelines/agent-infra/layered-settings.md +158 -0
- package/.agent-src/guidelines/agent-infra/memory-access.md +121 -0
- package/.agent-src/guidelines/agent-infra/naming.md +69 -0
- package/.agent-src/guidelines/agent-infra/output-patterns.md +117 -0
- package/.agent-src/guidelines/agent-infra/review-routing-data-format.md +144 -0
- package/.agent-src/guidelines/agent-infra/role-contracts.md +211 -0
- package/.agent-src/guidelines/agent-infra/role-mode-router.md +89 -0
- package/.agent-src/guidelines/agent-infra/runtime-layer.md +89 -0
- package/.agent-src/guidelines/agent-infra/self-improvement-pipeline.md +135 -0
- package/.agent-src/guidelines/agent-infra/size-and-scope.md +189 -0
- package/.agent-src/guidelines/agent-infra/tool-integration.md +73 -0
- package/.agent-src/guidelines/docs/readme-size-and-splitting.md +153 -0
- package/.agent-src/guidelines/e2e/playwright.md +363 -0
- package/.agent-src/guidelines/php/api-design.md +115 -0
- package/.agent-src/guidelines/php/artisan-commands.md +81 -0
- package/.agent-src/guidelines/php/blade-ui.md +78 -0
- package/.agent-src/guidelines/php/controllers.md +90 -0
- package/.agent-src/guidelines/php/database.md +111 -0
- package/.agent-src/guidelines/php/eloquent.md +208 -0
- package/.agent-src/guidelines/php/flux.md +80 -0
- package/.agent-src/guidelines/php/general.md +191 -0
- package/.agent-src/guidelines/php/git.md +96 -0
- package/.agent-src/guidelines/php/jobs.md +111 -0
- package/.agent-src/guidelines/php/livewire.md +71 -0
- package/.agent-src/guidelines/php/logging.md +79 -0
- package/.agent-src/guidelines/php/naming.md +89 -0
- package/.agent-src/guidelines/php/patterns/dependency-injection.md +57 -0
- package/.agent-src/guidelines/php/patterns/dtos.md +199 -0
- package/.agent-src/guidelines/php/patterns/events.md +67 -0
- package/.agent-src/guidelines/php/patterns/factory.md +53 -0
- package/.agent-src/guidelines/php/patterns/pipelines.md +66 -0
- package/.agent-src/guidelines/php/patterns/policies.md +66 -0
- package/.agent-src/guidelines/php/patterns/repositories.md +122 -0
- package/.agent-src/guidelines/php/patterns/service-layer.md +64 -0
- package/.agent-src/guidelines/php/patterns/strategy.md +69 -0
- package/.agent-src/guidelines/php/patterns.md +28 -0
- package/.agent-src/guidelines/php/performance.md +92 -0
- package/.agent-src/guidelines/php/resources.md +100 -0
- package/.agent-src/guidelines/php/security.md +110 -0
- package/.agent-src/guidelines/php/sql.md +97 -0
- package/.agent-src/guidelines/php/validations.md +119 -0
- package/.agent-src/guidelines/php/websocket.md +100 -0
- package/.agent-src/personas/README.md +104 -0
- package/.agent-src/personas/ai-agent.md +77 -0
- package/.agent-src/personas/critical-challenger.md +73 -0
- package/.agent-src/personas/developer.md +73 -0
- package/.agent-src/personas/product-owner.md +78 -0
- package/.agent-src/personas/qa.md +67 -0
- package/.agent-src/personas/senior-engineer.md +77 -0
- package/.agent-src/personas/stakeholder.md +78 -0
- package/.agent-src/rules/agent-docs.md +61 -0
- package/.agent-src/rules/analysis-skill-routing.md +48 -0
- package/.agent-src/rules/architecture.md +62 -0
- package/.agent-src/rules/artifact-drafting-protocol.md +73 -0
- package/.agent-src/rules/ask-when-uncertain.md +52 -0
- package/.agent-src/rules/augment-portability.md +38 -0
- package/.agent-src/rules/augment-source-of-truth.md +128 -0
- package/.agent-src/rules/capture-learnings.md +89 -0
- package/.agent-src/rules/cli-output-handling.md +94 -0
- package/.agent-src/rules/commit-conventions.md +64 -0
- package/.agent-src/rules/context-hygiene.md +90 -0
- package/.agent-src/rules/docker-commands.md +55 -0
- package/.agent-src/rules/docs-sync.md +79 -0
- package/.agent-src/rules/downstream-changes.md +70 -0
- package/.agent-src/rules/e2e-testing.md +53 -0
- package/.agent-src/rules/guidelines.md +90 -0
- package/.agent-src/rules/improve-before-implement.md +94 -0
- package/.agent-src/rules/language-and-tone.md +104 -0
- package/.agent-src/rules/laravel-translations.md +48 -0
- package/.agent-src/rules/markdown-safe-codeblocks.md +18 -0
- package/.agent-src/rules/minimal-safe-diff.md +87 -0
- package/.agent-src/rules/missing-tool-handling.md +62 -0
- package/.agent-src/rules/model-recommendation.md +70 -0
- package/.agent-src/rules/package-ci-checks.md +80 -0
- package/.agent-src/rules/php-coding.md +63 -0
- package/.agent-src/rules/preservation-guard.md +29 -0
- package/.agent-src/rules/review-routing-awareness.md +125 -0
- package/.agent-src/rules/reviewer-awareness.md +92 -0
- package/.agent-src/rules/roadmap-progress-sync.md +56 -0
- package/.agent-src/rules/role-mode-adherence.md +54 -0
- package/.agent-src/rules/rule-type-governance.md +46 -0
- package/.agent-src/rules/runtime-safety.md +42 -0
- package/.agent-src/rules/scope-control.md +40 -0
- package/.agent-src/rules/security-sensitive-stop.md +77 -0
- package/.agent-src/rules/size-enforcement.md +29 -0
- package/.agent-src/rules/skill-improvement-trigger.md +58 -0
- package/.agent-src/rules/skill-quality.md +110 -0
- package/.agent-src/rules/slash-commands.md +30 -0
- package/.agent-src/rules/think-before-action.md +91 -0
- package/.agent-src/rules/token-efficiency.md +99 -0
- package/.agent-src/rules/tool-safety.md +36 -0
- package/.agent-src/rules/upstream-proposal.md +76 -0
- package/.agent-src/rules/user-interaction.md +79 -0
- package/.agent-src/rules/verify-before-complete.md +120 -0
- package/.agent-src/scripts/scan-seeder-violations.php +145 -0
- package/.agent-src/scripts/update_roadmap_progress.py +244 -0
- package/.agent-src/skills/adversarial-review/SKILL.md +149 -0
- package/.agent-src/skills/agent-docs-writing/SKILL.md +234 -0
- package/.agent-src/skills/analysis-autonomous-mode/SKILL.md +197 -0
- package/.agent-src/skills/analysis-skill-router/SKILL.md +134 -0
- package/.agent-src/skills/api-design/SKILL.md +104 -0
- package/.agent-src/skills/api-endpoint/SKILL.md +185 -0
- package/.agent-src/skills/api-testing/SKILL.md +206 -0
- package/.agent-src/skills/artisan-commands/SKILL.md +78 -0
- package/.agent-src/skills/authz-review/SKILL.md +171 -0
- package/.agent-src/skills/aws-infrastructure/SKILL.md +152 -0
- package/.agent-src/skills/blade-ui/SKILL.md +75 -0
- package/.agent-src/skills/blast-radius-analyzer/SKILL.md +185 -0
- package/.agent-src/skills/bug-analyzer/SKILL.md +256 -0
- package/.agent-src/skills/check-refs/SKILL.md +72 -0
- package/.agent-src/skills/code-refactoring/SKILL.md +200 -0
- package/.agent-src/skills/code-review/SKILL.md +214 -0
- package/.agent-src/skills/command-routing/SKILL.md +96 -0
- package/.agent-src/skills/command-writing/SKILL.md +143 -0
- package/.agent-src/skills/composer-packages/SKILL.md +172 -0
- package/.agent-src/skills/context-authoring/SKILL.md +157 -0
- package/.agent-src/skills/context-document/SKILL.md +153 -0
- package/.agent-src/skills/conventional-commits-writing/SKILL.md +70 -0
- package/.agent-src/skills/copilot-agents-optimization/SKILL.md +220 -0
- package/.agent-src/skills/copilot-config/SKILL.md +203 -0
- package/.agent-src/skills/dashboard-design/SKILL.md +116 -0
- package/.agent-src/skills/data-flow-mapper/SKILL.md +160 -0
- package/.agent-src/skills/database/SKILL.md +91 -0
- package/.agent-src/skills/dependency-upgrade/SKILL.md +204 -0
- package/.agent-src/skills/description-assist/SKILL.md +169 -0
- package/.agent-src/skills/design-review/SKILL.md +228 -0
- package/.agent-src/skills/devcontainer/SKILL.md +121 -0
- package/.agent-src/skills/developer-like-execution/SKILL.md +276 -0
- package/.agent-src/skills/docker/SKILL.md +245 -0
- package/.agent-src/skills/dto-creator/SKILL.md +117 -0
- package/.agent-src/skills/eloquent/SKILL.md +92 -0
- package/.agent-src/skills/eloquent/evals/last-run.json +99 -0
- package/.agent-src/skills/eloquent/evals/triggers.json +16 -0
- package/.agent-src/skills/estimate-ticket/SKILL.md +186 -0
- package/.agent-src/skills/estimate-ticket/evals/output-schema.yml +20 -0
- package/.agent-src/skills/estimate-ticket/evals/triggers.json +18 -0
- package/.agent-src/skills/fe-design/SKILL.md +223 -0
- package/.agent-src/skills/feature-planning/SKILL.md +226 -0
- package/.agent-src/skills/file-editor/SKILL.md +129 -0
- package/.agent-src/skills/finishing-a-development-branch/SKILL.md +200 -0
- package/.agent-src/skills/flux/SKILL.md +64 -0
- package/.agent-src/skills/git-workflow/SKILL.md +102 -0
- package/.agent-src/skills/github-ci/SKILL.md +122 -0
- package/.agent-src/skills/grafana/SKILL.md +168 -0
- package/.agent-src/skills/guideline-writing/SKILL.md +147 -0
- package/.agent-src/skills/jira-integration/SKILL.md +182 -0
- package/.agent-src/skills/jobs-events/SKILL.md +87 -0
- package/.agent-src/skills/judge-bug-hunter/SKILL.md +157 -0
- package/.agent-src/skills/judge-code-quality/SKILL.md +158 -0
- package/.agent-src/skills/judge-security-auditor/SKILL.md +167 -0
- package/.agent-src/skills/judge-test-coverage/SKILL.md +154 -0
- package/.agent-src/skills/laravel/SKILL.md +195 -0
- package/.agent-src/skills/laravel-horizon/SKILL.md +169 -0
- package/.agent-src/skills/laravel-mail/SKILL.md +193 -0
- package/.agent-src/skills/laravel-middleware/SKILL.md +185 -0
- package/.agent-src/skills/laravel-notifications/SKILL.md +168 -0
- package/.agent-src/skills/laravel-pennant/SKILL.md +188 -0
- package/.agent-src/skills/laravel-pulse/SKILL.md +160 -0
- package/.agent-src/skills/laravel-reverb/SKILL.md +205 -0
- package/.agent-src/skills/laravel-scheduling/SKILL.md +167 -0
- package/.agent-src/skills/laravel-validation/SKILL.md +71 -0
- package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +249 -0
- package/.agent-src/skills/lint-skills/SKILL.md +72 -0
- package/.agent-src/skills/livewire/SKILL.md +79 -0
- package/.agent-src/skills/logging-monitoring/SKILL.md +100 -0
- package/.agent-src/skills/mcp/SKILL.md +193 -0
- package/.agent-src/skills/merge-conflicts/SKILL.md +158 -0
- package/.agent-src/skills/migration-creator/SKILL.md +160 -0
- package/.agent-src/skills/module-management/SKILL.md +154 -0
- package/.agent-src/skills/multi-tenancy/SKILL.md +129 -0
- package/.agent-src/skills/openapi/SKILL.md +154 -0
- package/.agent-src/skills/override-management/SKILL.md +186 -0
- package/.agent-src/skills/performance/SKILL.md +69 -0
- package/.agent-src/skills/performance-analysis/SKILL.md +118 -0
- package/.agent-src/skills/pest-testing/SKILL.md +321 -0
- package/.agent-src/skills/php-coder/SKILL.md +78 -0
- package/.agent-src/skills/php-coder/evals/triggers.json +16 -0
- package/.agent-src/skills/php-debugging/SKILL.md +184 -0
- package/.agent-src/skills/php-service/SKILL.md +96 -0
- package/.agent-src/skills/playwright-testing/SKILL.md +244 -0
- package/.agent-src/skills/project-analysis-core/SKILL.md +138 -0
- package/.agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +130 -0
- package/.agent-src/skills/project-analysis-laravel/SKILL.md +119 -0
- package/.agent-src/skills/project-analysis-nextjs/SKILL.md +123 -0
- package/.agent-src/skills/project-analysis-node-express/SKILL.md +111 -0
- package/.agent-src/skills/project-analysis-react/SKILL.md +119 -0
- package/.agent-src/skills/project-analysis-symfony/SKILL.md +111 -0
- package/.agent-src/skills/project-analysis-zend-laminas/SKILL.md +108 -0
- package/.agent-src/skills/project-analyzer/SKILL.md +341 -0
- package/.agent-src/skills/project-docs/SKILL.md +137 -0
- package/.agent-src/skills/quality-tools/SKILL.md +411 -0
- package/.agent-src/skills/readme-reviewer/SKILL.md +187 -0
- package/.agent-src/skills/readme-writing/SKILL.md +142 -0
- package/.agent-src/skills/readme-writing-package/SKILL.md +185 -0
- package/.agent-src/skills/receiving-code-review/SKILL.md +190 -0
- package/.agent-src/skills/refine-ticket/SKILL.md +310 -0
- package/.agent-src/skills/refine-ticket/detection-map.yml +124 -0
- package/.agent-src/skills/refine-ticket/evals/output-schema.yml +16 -0
- package/.agent-src/skills/refine-ticket/evals/triggers.json +16 -0
- package/.agent-src/skills/requesting-code-review/SKILL.md +199 -0
- package/.agent-src/skills/review-routing/SKILL.md +195 -0
- package/.agent-src/skills/roadmap-management/SKILL.md +303 -0
- package/.agent-src/skills/rtk-output-filtering/SKILL.md +184 -0
- package/.agent-src/skills/rule-writing/SKILL.md +148 -0
- package/.agent-src/skills/security/SKILL.md +79 -0
- package/.agent-src/skills/security-audit/SKILL.md +123 -0
- package/.agent-src/skills/sentry-integration/SKILL.md +170 -0
- package/.agent-src/skills/sequential-thinking/SKILL.md +158 -0
- package/.agent-src/skills/skill-improvement-pipeline/SKILL.md +155 -0
- package/.agent-src/skills/skill-management/SKILL.md +121 -0
- package/.agent-src/skills/skill-reviewer/SKILL.md +218 -0
- package/.agent-src/skills/skill-writing/SKILL.md +291 -0
- package/.agent-src/skills/skill-writing/evals/triggers.json +16 -0
- package/.agent-src/skills/sql-writing/SKILL.md +74 -0
- package/.agent-src/skills/subagent-orchestration/SKILL.md +190 -0
- package/.agent-src/skills/systematic-debugging/SKILL.md +244 -0
- package/.agent-src/skills/technical-specification/SKILL.md +185 -0
- package/.agent-src/skills/terraform/SKILL.md +137 -0
- package/.agent-src/skills/terragrunt/SKILL.md +217 -0
- package/.agent-src/skills/test-driven-development/SKILL.md +252 -0
- package/.agent-src/skills/test-performance/SKILL.md +172 -0
- package/.agent-src/skills/threat-modeling/SKILL.md +189 -0
- package/.agent-src/skills/traefik/SKILL.md +319 -0
- package/.agent-src/skills/universal-project-analysis/SKILL.md +179 -0
- package/.agent-src/skills/upstream-contribute/SKILL.md +255 -0
- package/.agent-src/skills/using-git-worktrees/SKILL.md +148 -0
- package/.agent-src/skills/validate-feature-fit/SKILL.md +113 -0
- package/.agent-src/skills/verify-before-complete/SKILL.md +188 -0
- package/.agent-src/skills/websocket/SKILL.md +75 -0
- package/.agent-src/templates/AGENTS.md +146 -0
- package/.agent-src/templates/agent-settings.md +256 -0
- package/.agent-src/templates/agents/.gitattributes.fragment +16 -0
- package/.agent-src/templates/agents/agent-project-settings.example.yml +138 -0
- package/.agent-src/templates/agents/memory/architecture-decisions.example.yml +95 -0
- package/.agent-src/templates/agents/memory/domain-invariants.example.yml +80 -0
- package/.agent-src/templates/agents/memory/historical-patterns.example.yml +82 -0
- package/.agent-src/templates/agents/memory/incident-learnings.example.yml +113 -0
- package/.agent-src/templates/agents/memory/ownership.example.yml +75 -0
- package/.agent-src/templates/agents/memory/product-rules.example.yml +87 -0
- package/.agent-src/templates/agents/proposal.example.md +143 -0
- package/.agent-src/templates/command.md +84 -0
- package/.agent-src/templates/contexts/auth-model.md +59 -0
- package/.agent-src/templates/contexts/data-sensitivity.md +60 -0
- package/.agent-src/templates/contexts/deployment-order.md +72 -0
- package/.agent-src/templates/contexts/observability.md +64 -0
- package/.agent-src/templates/contexts/tenant-boundaries.md +68 -0
- package/.agent-src/templates/contexts.md +116 -0
- package/.agent-src/templates/copilot-instructions.md +115 -0
- package/.agent-src/templates/features.md +125 -0
- package/.agent-src/templates/github-workflows/memory-hygiene.yml +133 -0
- package/.agent-src/templates/github-workflows/pr-risk-review.yml +123 -0
- package/.agent-src/templates/github-workflows/proposal-drift.yml +118 -0
- package/.agent-src/templates/overrides/command.md +24 -0
- package/.agent-src/templates/overrides/guideline.md +21 -0
- package/.agent-src/templates/overrides/rule.md +19 -0
- package/.agent-src/templates/overrides/skill.md +24 -0
- package/.agent-src/templates/overrides/template.md +21 -0
- package/.agent-src/templates/persona.md +99 -0
- package/.agent-src/templates/roadmaps.md +109 -0
- package/.agent-src/templates/scripts/README.md +195 -0
- package/.agent-src/templates/scripts/check_memory.py +283 -0
- package/.agent-src/templates/scripts/check_memory_proposal.py +180 -0
- package/.agent-src/templates/scripts/historical-bug-patterns.example.yml +84 -0
- package/.agent-src/templates/scripts/implement_ticket/__init__.py +57 -0
- package/.agent-src/templates/scripts/implement_ticket/__main__.py +9 -0
- package/.agent-src/templates/scripts/implement_ticket/cli.py +171 -0
- package/.agent-src/templates/scripts/implement_ticket/delivery_state.py +130 -0
- package/.agent-src/templates/scripts/implement_ticket/dispatcher.py +134 -0
- package/.agent-src/templates/scripts/implement_ticket/persona_policy.py +85 -0
- package/.agent-src/templates/scripts/implement_ticket/steps/__init__.py +49 -0
- package/.agent-src/templates/scripts/implement_ticket/steps/analyze.py +98 -0
- package/.agent-src/templates/scripts/implement_ticket/steps/implement.py +145 -0
- package/.agent-src/templates/scripts/implement_ticket/steps/memory.py +136 -0
- package/.agent-src/templates/scripts/implement_ticket/steps/plan.py +175 -0
- package/.agent-src/templates/scripts/implement_ticket/steps/refine.py +140 -0
- package/.agent-src/templates/scripts/implement_ticket/steps/report.py +195 -0
- package/.agent-src/templates/scripts/implement_ticket/steps/test.py +180 -0
- package/.agent-src/templates/scripts/implement_ticket/steps/verify.py +170 -0
- package/.agent-src/templates/scripts/memory_hash.py +75 -0
- package/.agent-src/templates/scripts/memory_lookup.py +216 -0
- package/.agent-src/templates/scripts/memory_report.py +184 -0
- package/.agent-src/templates/scripts/memory_signal.py +167 -0
- package/.agent-src/templates/scripts/memory_status.py +156 -0
- package/.agent-src/templates/scripts/ownership-map.example.yml +87 -0
- package/.agent-src/templates/scripts/pr-risk-config.example.yml +76 -0
- package/.agent-src/templates/scripts/pr_review_routing.py +340 -0
- package/.agent-src/templates/scripts/pr_risk_review.py +211 -0
- package/.agent-src/templates/skill.md +136 -0
- package/.augment-plugin/marketplace.json +32 -0
- package/.augment-plugin/plugin.json +21 -0
- package/.claude-plugin/marketplace.json +119 -0
- package/AGENTS.md +121 -0
- package/CHANGELOG.md +279 -0
- package/CONTRIBUTING.md +176 -0
- package/LICENSE +21 -0
- package/README.md +357 -0
- package/bin/install.php +38 -0
- package/composer.json +29 -0
- package/config/agent-settings.template.yml +96 -0
- package/config/profiles/balanced.ini +10 -0
- package/config/profiles/full.ini +10 -0
- package/config/profiles/minimal.ini +10 -0
- package/docs/architecture.md +144 -0
- package/docs/customization.md +88 -0
- package/docs/development.md +171 -0
- package/docs/getting-started.md +130 -0
- package/docs/github-topics.md +84 -0
- package/docs/installation.md +376 -0
- package/docs/mcp.md +133 -0
- package/docs/quality.md +98 -0
- package/docs/skills-catalog.md +136 -0
- package/docs/troubleshooting.md +167 -0
- package/llms.txt +130 -0
- package/package.json +31 -0
- package/scripts/audit_skill_descriptions.py +168 -0
- package/scripts/check_compression.py +221 -0
- package/scripts/check_memory.py +341 -0
- package/scripts/check_memory_proposal.py +180 -0
- package/scripts/check_portability.py +320 -0
- package/scripts/check_proposal.py +269 -0
- package/scripts/check_references.py +400 -0
- package/scripts/ci_summary.py +131 -0
- package/scripts/compress.py +671 -0
- package/scripts/compress.sh +18 -0
- package/scripts/first-run.sh +109 -0
- package/scripts/generate_catalog.py +116 -0
- package/scripts/install +151 -0
- package/scripts/install-hooks.sh +29 -0
- package/scripts/install.py +487 -0
- package/scripts/install.sh +637 -0
- package/scripts/install_anthropic_key.sh +101 -0
- package/scripts/inventory_frontmatter.py +164 -0
- package/scripts/lint_marketplace.py +142 -0
- package/scripts/lint_regression.py +232 -0
- package/scripts/mcp_render.py +159 -0
- package/scripts/measure_patterns.py +376 -0
- package/scripts/memory_hash.py +75 -0
- package/scripts/memory_lookup.py +441 -0
- package/scripts/memory_report.py +336 -0
- package/scripts/memory_signal.py +210 -0
- package/scripts/memory_status.py +195 -0
- package/scripts/postinstall.sh +60 -0
- package/scripts/readme_linter.py +580 -0
- package/scripts/refine_ticket_detect.py +623 -0
- package/scripts/requirements-evals.txt +7 -0
- package/scripts/runtime_dispatcher.py +265 -0
- package/scripts/runtime_handler.py +148 -0
- package/scripts/runtime_registry.py +166 -0
- package/scripts/schemas/command.schema.json +32 -0
- package/scripts/schemas/persona.schema.json +42 -0
- package/scripts/schemas/rule.schema.json +28 -0
- package/scripts/schemas/skill.schema.json +73 -0
- package/scripts/setup.sh +230 -0
- package/scripts/setup_eval_venv.sh +58 -0
- package/scripts/skill_linter.py +2175 -0
- package/scripts/skill_trigger_eval.py +651 -0
- package/scripts/tool_registry.py +146 -0
- package/scripts/tools/__init__.py +1 -0
- package/scripts/tools/adapter_errors.py +63 -0
- package/scripts/tools/base_adapter.py +91 -0
- package/scripts/tools/github_adapter.py +128 -0
- package/scripts/tools/jira_adapter.py +115 -0
- package/scripts/update_counts.py +147 -0
- package/scripts/validate_frontmatter.py +424 -0
- package/templates/consumer-settings/README.md +46 -0
- package/templates/consumer-settings/augment-settings.json +12 -0
- package/templates/consumer-settings/claude-settings.json +9 -0
- package/templates/consumer-settings/copilot-settings.json +14 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: laravel
|
|
3
|
+
description: "Writes Laravel code following framework conventions, project architecture, and modern best practices for controllers, requests, services, jobs, events, policies, and application structure."
|
|
4
|
+
source: package
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# laravel
|
|
8
|
+
|
|
9
|
+
## When to use
|
|
10
|
+
|
|
11
|
+
Use this skill for all Laravel-specific code generation and editing tasks, especially when working with:
|
|
12
|
+
|
|
13
|
+
- Controllers
|
|
14
|
+
- Form Requests
|
|
15
|
+
- Middleware
|
|
16
|
+
- Service Providers
|
|
17
|
+
- Jobs / Queued Jobs
|
|
18
|
+
- Events / Listeners
|
|
19
|
+
- Policies / Gates
|
|
20
|
+
- Notifications
|
|
21
|
+
- Console Commands
|
|
22
|
+
- Config, Routing, and Application Structure
|
|
23
|
+
|
|
24
|
+
This skill extends the base `php-coder` skill and applies Laravel conventions on top of the project's general PHP rules.
|
|
25
|
+
|
|
26
|
+
## Procedure: Write Laravel code
|
|
27
|
+
|
|
28
|
+
→ **First apply the `php-coder` skill** — it handles project docs, module docs, patterns, and quality tools.
|
|
29
|
+
|
|
30
|
+
Then add these **Laravel-specific** checks:
|
|
31
|
+
|
|
32
|
+
1. **Confirm this is a Laravel app** — check whether `artisan` exists.
|
|
33
|
+
2. **Inspect app structure** — classic Laravel, modules (`app/Modules/`), or domain folders.
|
|
34
|
+
3. **Check routes and HTTP flow** — understand how requests enter the application and where logic belongs.
|
|
35
|
+
4. **Check test conventions** — inspect existing tests in the same domain before writing new code.
|
|
36
|
+
|
|
37
|
+
## Core Laravel principles
|
|
38
|
+
|
|
39
|
+
- Follow **Laravel conventions first** unless the project explicitly does otherwise.
|
|
40
|
+
- Keep **controllers thin** — delegate business logic to services/actions.
|
|
41
|
+
- Keep **Form Requests responsible for validation and authorization**.
|
|
42
|
+
- Use **dependency injection** through the container.
|
|
43
|
+
- Prefer **framework features** over custom infrastructure when the built-in solution is sufficient.
|
|
44
|
+
- Avoid hidden magic when explicit code is clearer for the project.
|
|
45
|
+
- Respect the existing architecture — do not force "pure Laravel" if the project uses modules or service layers.
|
|
46
|
+
|
|
47
|
+
## HTTP layer rules
|
|
48
|
+
|
|
49
|
+
- Controllers should:
|
|
50
|
+
- accept the request
|
|
51
|
+
- delegate business logic
|
|
52
|
+
- return a response / resource / redirect
|
|
53
|
+
- Do not put business logic, calculations, or large data transformations in controllers.
|
|
54
|
+
- Use **Form Request** classes for validation instead of inline controller validation when the request is non-trivial.
|
|
55
|
+
- Use route model binding when it improves clarity and matches existing patterns.
|
|
56
|
+
- Keep controller actions focused and small.
|
|
57
|
+
|
|
58
|
+
## Validation rules
|
|
59
|
+
|
|
60
|
+
- Use **Form Requests** for reusable or non-trivial validation.
|
|
61
|
+
- Prefer explicit validation rules over implicit behavior.
|
|
62
|
+
- Reuse existing custom rules when available.
|
|
63
|
+
- Keep validation close to the HTTP boundary.
|
|
64
|
+
- Do not mix validation with persistence or business decisions.
|
|
65
|
+
|
|
66
|
+
## Service layer rules
|
|
67
|
+
|
|
68
|
+
- Put orchestration and business logic into dedicated services/actions.
|
|
69
|
+
- Services should be framework-light when possible.
|
|
70
|
+
- A service should have one clear responsibility.
|
|
71
|
+
- Prefer constructor injection for dependencies.
|
|
72
|
+
- Do not move trivial one-line controller behavior into a service unless the project consistently does that.
|
|
73
|
+
|
|
74
|
+
## Routing rules
|
|
75
|
+
|
|
76
|
+
- Follow the existing route organization:
|
|
77
|
+
- `routes/web.php`
|
|
78
|
+
- `routes/api.php`
|
|
79
|
+
- module-specific route files
|
|
80
|
+
- Keep route definitions readable and grouped logically.
|
|
81
|
+
- Use route names consistently.
|
|
82
|
+
- Apply middleware explicitly and according to project conventions.
|
|
83
|
+
- Do not introduce route patterns that differ from the surrounding code without a good reason.
|
|
84
|
+
|
|
85
|
+
## Response rules
|
|
86
|
+
|
|
87
|
+
- Use the response style already established in the project:
|
|
88
|
+
- Blade views
|
|
89
|
+
- JSON responses
|
|
90
|
+
- API Resources
|
|
91
|
+
- Redirects with flash messages
|
|
92
|
+
- For APIs, prefer:
|
|
93
|
+
- consistent status codes
|
|
94
|
+
- structured JSON payloads
|
|
95
|
+
- API Resources when the project uses them
|
|
96
|
+
- Do not return raw models directly unless that is already the established project pattern.
|
|
97
|
+
|
|
98
|
+
## Queues, jobs, and async work
|
|
99
|
+
|
|
100
|
+
- Use Jobs for clearly asynchronous or deferred work.
|
|
101
|
+
- Keep Jobs focused on a single responsibility.
|
|
102
|
+
- Pass only the data needed by the job.
|
|
103
|
+
- Avoid putting excessive domain logic directly into the Job class — delegate to services where appropriate.
|
|
104
|
+
- Be mindful of serialization when passing models or objects.
|
|
105
|
+
|
|
106
|
+
## Events and listeners
|
|
107
|
+
|
|
108
|
+
- Use events for meaningful domain or application events, not for every small action.
|
|
109
|
+
- Name events clearly in the past tense when something already happened.
|
|
110
|
+
- Keep listeners focused and side-effect oriented.
|
|
111
|
+
- Do not introduce event-driven complexity unless it is already part of the project architecture.
|
|
112
|
+
|
|
113
|
+
## Auth, policies, and authorization
|
|
114
|
+
|
|
115
|
+
- Use Laravel authorization features consistently:
|
|
116
|
+
- policies
|
|
117
|
+
- gates
|
|
118
|
+
- request authorization
|
|
119
|
+
- Keep authorization logic out of controllers where possible.
|
|
120
|
+
- Reuse existing policies and permission patterns.
|
|
121
|
+
- Do not hardcode role checks in multiple places if a policy/gate already exists.
|
|
122
|
+
|
|
123
|
+
## Config and environment
|
|
124
|
+
|
|
125
|
+
- Read configuration from config files, not directly from `env()` outside config files.
|
|
126
|
+
- Do not introduce new environment variables unless necessary.
|
|
127
|
+
- Reuse existing config structure and naming patterns.
|
|
128
|
+
|
|
129
|
+
## Database interaction
|
|
130
|
+
|
|
131
|
+
- Prefer Eloquent for normal application data access unless the project uses repositories or query objects.
|
|
132
|
+
- Use transactions when multiple writes must succeed or fail together.
|
|
133
|
+
- Avoid N+1 problems — eager load when appropriate.
|
|
134
|
+
- For heavy data access logic, follow the dedicated `eloquent` skill.
|
|
135
|
+
|
|
136
|
+
## Migrations and schema changes
|
|
137
|
+
|
|
138
|
+
- Keep migrations focused and reversible.
|
|
139
|
+
- Follow existing naming conventions for columns, foreign keys, and indexes.
|
|
140
|
+
- Do not mix unrelated schema changes in a single migration.
|
|
141
|
+
- Be careful with destructive changes on existing production tables.
|
|
142
|
+
|
|
143
|
+
## Blade and view rules
|
|
144
|
+
|
|
145
|
+
- Keep views dumb — presentation only.
|
|
146
|
+
- Avoid embedding business logic in Blade templates.
|
|
147
|
+
- Extract reusable UI pieces into components/partials when it matches project patterns.
|
|
148
|
+
- Escape output by default and use raw output only when safe and intentional.
|
|
149
|
+
|
|
150
|
+
## What NOT to do
|
|
151
|
+
|
|
152
|
+
- Do not put business logic into controllers, models, or Blade templates.
|
|
153
|
+
- Do not validate large requests inline in controllers when Form Requests are more appropriate.
|
|
154
|
+
- Do not call `env()` outside config files.
|
|
155
|
+
- Do not introduce new architectural layers unless the project already uses them.
|
|
156
|
+
- Do not bypass Laravel features already used consistently in the project.
|
|
157
|
+
- Do not return inconsistent API response shapes in an established API.
|
|
158
|
+
|
|
159
|
+
## Output expectations
|
|
160
|
+
|
|
161
|
+
When generating Laravel code:
|
|
162
|
+
|
|
163
|
+
- follow Laravel naming conventions
|
|
164
|
+
- use dependency injection
|
|
165
|
+
- keep classes small and focused
|
|
166
|
+
- match the surrounding project structure
|
|
167
|
+
- prefer explicit, readable code over clever abstractions
|
|
168
|
+
- integrate with existing requests, resources, services, policies, and tests
|
|
169
|
+
|
|
170
|
+
## Output format
|
|
171
|
+
|
|
172
|
+
1. Laravel code following framework conventions and project architecture
|
|
173
|
+
2. All related files (controller, service, request, resource, test) as needed
|
|
174
|
+
|
|
175
|
+
## Do NOT
|
|
176
|
+
|
|
177
|
+
- Do NOT put business logic in controllers — delegate to services.
|
|
178
|
+
- Do NOT use facades in service classes — use dependency injection.
|
|
179
|
+
- Do NOT skip middleware for route groups that need authentication.
|
|
180
|
+
|
|
181
|
+
## Gotcha
|
|
182
|
+
|
|
183
|
+
- `env()` only works in config files — use `config()` everywhere else.
|
|
184
|
+
- Don't mix `Route::resource()` with single-action controllers — pick the project's convention.
|
|
185
|
+
- Don't return Eloquent models directly — always use API Resources.
|
|
186
|
+
- Don't bypass existing middleware stacks when adding new routes.
|
|
187
|
+
|
|
188
|
+
## Auto-trigger keywords
|
|
189
|
+
|
|
190
|
+
- Laravel
|
|
191
|
+
- controller
|
|
192
|
+
- service
|
|
193
|
+
- middleware
|
|
194
|
+
- route
|
|
195
|
+
- application structure
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: laravel-horizon
|
|
3
|
+
description: "Use when working with Laravel queues in production — Horizon dashboard, worker supervision, job metrics, balancing strategies — even when the user just says 'my jobs are piling up'."
|
|
4
|
+
source: package
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# laravel-horizon
|
|
8
|
+
|
|
9
|
+
## When to use
|
|
10
|
+
|
|
11
|
+
Use this skill for anything related to Laravel Horizon:
|
|
12
|
+
- Queue worker configuration and supervision
|
|
13
|
+
- Horizon dashboard setup and access control
|
|
14
|
+
- Job metrics, throughput, and failure monitoring
|
|
15
|
+
- Balancing strategies and scaling workers
|
|
16
|
+
- Production tuning and deployment
|
|
17
|
+
|
|
18
|
+
For **writing queue jobs** themselves, see [jobs-events](../jobs-events/SKILL.md).
|
|
19
|
+
|
|
20
|
+
## Procedure: Configure Horizon
|
|
21
|
+
|
|
22
|
+
### config/horizon.php
|
|
23
|
+
|
|
24
|
+
```php
|
|
25
|
+
'environments' => [
|
|
26
|
+
'production' => [
|
|
27
|
+
'supervisor-1' => [
|
|
28
|
+
'maxProcesses' => 10,
|
|
29
|
+
'balanceMaxShift' => 1,
|
|
30
|
+
'balanceCooldown' => 3,
|
|
31
|
+
'connection' => 'redis',
|
|
32
|
+
'queue' => ['default', 'high', 'low'],
|
|
33
|
+
'balance' => 'auto', // auto, simple, or false
|
|
34
|
+
'tries' => 3,
|
|
35
|
+
'timeout' => 60,
|
|
36
|
+
'maxTime' => 3600,
|
|
37
|
+
'maxJobs' => 1000,
|
|
38
|
+
'memory' => 128,
|
|
39
|
+
],
|
|
40
|
+
],
|
|
41
|
+
'local' => [
|
|
42
|
+
'supervisor-1' => [
|
|
43
|
+
'maxProcesses' => 3,
|
|
44
|
+
'connection' => 'redis',
|
|
45
|
+
'queue' => ['default', 'high', 'low'],
|
|
46
|
+
'balance' => 'auto',
|
|
47
|
+
'tries' => 3,
|
|
48
|
+
'timeout' => 60,
|
|
49
|
+
],
|
|
50
|
+
],
|
|
51
|
+
],
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Queue priority
|
|
55
|
+
|
|
56
|
+
```php
|
|
57
|
+
// Higher priority queues are listed first
|
|
58
|
+
'queue' => ['high', 'default', 'low'],
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Running Horizon
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# Start Horizon (foreground)
|
|
65
|
+
php artisan horizon
|
|
66
|
+
|
|
67
|
+
# Pause / Continue
|
|
68
|
+
php artisan horizon:pause
|
|
69
|
+
php artisan horizon:continue
|
|
70
|
+
|
|
71
|
+
# Terminate gracefully (for deployments)
|
|
72
|
+
php artisan horizon:terminate
|
|
73
|
+
|
|
74
|
+
# Check status
|
|
75
|
+
php artisan horizon:status
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Deployment
|
|
79
|
+
|
|
80
|
+
**Always terminate and restart Horizon after deploying new code:**
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
php artisan horizon:terminate
|
|
84
|
+
# Supervisor will auto-restart Horizon
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Supervisor config (production)
|
|
88
|
+
|
|
89
|
+
```ini
|
|
90
|
+
[program:horizon]
|
|
91
|
+
process_name=%(program_name)s
|
|
92
|
+
command=php /path/to/artisan horizon
|
|
93
|
+
autostart=true
|
|
94
|
+
autorestart=true
|
|
95
|
+
user=www-data
|
|
96
|
+
redirect_stderr=true
|
|
97
|
+
stdout_logfile=/var/log/horizon.log
|
|
98
|
+
stopwaitsecs=3600
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Dashboard access
|
|
102
|
+
|
|
103
|
+
```php
|
|
104
|
+
// HorizonServiceProvider
|
|
105
|
+
protected function gate(): void
|
|
106
|
+
{
|
|
107
|
+
Gate::define('viewHorizon', function (User $user): bool {
|
|
108
|
+
return $user->isSuperuser();
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Balancing strategies
|
|
114
|
+
|
|
115
|
+
| Strategy | Behavior |
|
|
116
|
+
|---|---|
|
|
117
|
+
| `auto` | Distributes workers based on queue workload (recommended) |
|
|
118
|
+
| `simple` | Round-robin across queues |
|
|
119
|
+
| `false` | Fixed worker count per queue |
|
|
120
|
+
|
|
121
|
+
## Metrics and monitoring
|
|
122
|
+
|
|
123
|
+
- **Throughput** — jobs processed per minute per queue
|
|
124
|
+
- **Runtime** — average job execution time
|
|
125
|
+
- **Wait time** — time jobs spend waiting in queue
|
|
126
|
+
- **Failed jobs** — track and retry from dashboard
|
|
127
|
+
- **Tags** — auto-tagged by Eloquent models, custom tags via `tags()` method
|
|
128
|
+
|
|
129
|
+
```php
|
|
130
|
+
// Custom tags on a job
|
|
131
|
+
public function tags(): array
|
|
132
|
+
{
|
|
133
|
+
return ['customer:' . $this->customer->getId(), 'report'];
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Core rules
|
|
138
|
+
|
|
139
|
+
- **Always use Supervisor** in production — Horizon is a long-running process.
|
|
140
|
+
- **Terminate on deploy** — `horizon:terminate` ensures workers pick up new code.
|
|
141
|
+
- **Use `auto` balancing** — it adapts to workload automatically.
|
|
142
|
+
- **Set `maxTime`** — prevents workers from running forever (memory leaks).
|
|
143
|
+
- **Set `maxJobs`** — recycles workers after N jobs to prevent memory bloat.
|
|
144
|
+
- **Tag jobs** — makes debugging and filtering in the dashboard much easier.
|
|
145
|
+
|
|
146
|
+
## Output format
|
|
147
|
+
|
|
148
|
+
1. Updated Horizon configuration with supervisor and queue settings
|
|
149
|
+
2. Environment-specific balancing strategy rationale
|
|
150
|
+
|
|
151
|
+
## Auto-trigger keywords
|
|
152
|
+
|
|
153
|
+
- Horizon
|
|
154
|
+
- queue worker
|
|
155
|
+
- queue dashboard
|
|
156
|
+
- job monitoring
|
|
157
|
+
- supervisor
|
|
158
|
+
- queue balancing
|
|
159
|
+
|
|
160
|
+
## Gotcha
|
|
161
|
+
|
|
162
|
+
- Horizon config changes require `php artisan horizon:terminate` and restart — they don't hot-reload.
|
|
163
|
+
- Don't set `maxProcesses` too high — each process holds a DB connection. Monitor your connection pool.
|
|
164
|
+
- The model forgets that Horizon only works with Redis queues — not database or SQS.
|
|
165
|
+
|
|
166
|
+
## Do NOT
|
|
167
|
+
|
|
168
|
+
- Do NOT run Horizon without Supervisor/systemd in production.
|
|
169
|
+
- Do NOT expose the Horizon dashboard without access control.
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: laravel-mail
|
|
3
|
+
description: "Use when building Laravel emails — Mailables, Markdown templates, queued sending, attachments, previews — even when the user says 'send this as an email' without naming Mailables."
|
|
4
|
+
source: package
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# laravel-mail
|
|
8
|
+
|
|
9
|
+
## When to use
|
|
10
|
+
|
|
11
|
+
Use this skill when building email functionality:
|
|
12
|
+
- Mailable classes with HTML/Blade or Markdown templates
|
|
13
|
+
- Queued email sending
|
|
14
|
+
- Attachments and inline images
|
|
15
|
+
- Mail testing and previewing
|
|
16
|
+
|
|
17
|
+
For **simple notification emails** (one-off messages), see [laravel-notifications](../laravel-notifications/SKILL.md).
|
|
18
|
+
Use Mailables when you need full control over the email template.
|
|
19
|
+
|
|
20
|
+
## Procedure: Create a Mailable
|
|
21
|
+
|
|
22
|
+
1. **Generate class** — `php artisan make:mail InvoiceMail --markdown=emails.invoice`.
|
|
23
|
+
2. **Configure** — Set subject, from, attachments, queuing (`ShouldQueue`).
|
|
24
|
+
3. **Create template** — Markdown template in `resources/views/emails/`.
|
|
25
|
+
4. **Verify** — Send test email, confirm rendering and delivery.
|
|
26
|
+
|
|
27
|
+
### Example
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
php artisan make:mail InvoiceMail --markdown=emails.invoice
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```php
|
|
34
|
+
declare(strict_types=1);
|
|
35
|
+
|
|
36
|
+
namespace App\Mail;
|
|
37
|
+
|
|
38
|
+
use App\Models\Invoice;
|
|
39
|
+
use Illuminate\Bus\Queueable;
|
|
40
|
+
use Illuminate\Contracts\Queue\ShouldQueue;
|
|
41
|
+
use Illuminate\Mail\Mailable;
|
|
42
|
+
use Illuminate\Mail\Mailables\Content;
|
|
43
|
+
use Illuminate\Mail\Mailables\Envelope;
|
|
44
|
+
use Illuminate\Queue\SerializesModels;
|
|
45
|
+
|
|
46
|
+
class InvoiceMail extends Mailable implements ShouldQueue
|
|
47
|
+
{
|
|
48
|
+
use Queueable;
|
|
49
|
+
use SerializesModels;
|
|
50
|
+
|
|
51
|
+
public function __construct(
|
|
52
|
+
private readonly Invoice $invoice,
|
|
53
|
+
) {}
|
|
54
|
+
|
|
55
|
+
public function envelope(): Envelope
|
|
56
|
+
{
|
|
57
|
+
return new Envelope(
|
|
58
|
+
subject: 'Invoice #' . $this->invoice->getNumber(),
|
|
59
|
+
replyTo: ['billing@example.com'],
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
public function content(): Content
|
|
64
|
+
{
|
|
65
|
+
return new Content(
|
|
66
|
+
markdown: 'emails.invoice',
|
|
67
|
+
with: [
|
|
68
|
+
'invoice' => $this->invoice,
|
|
69
|
+
'url' => route('invoices.show', $this->invoice->getId()),
|
|
70
|
+
],
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** @return array<int, \Illuminate\Mail\Mailables\Attachment> */
|
|
75
|
+
public function attachments(): array
|
|
76
|
+
{
|
|
77
|
+
return [
|
|
78
|
+
Attachment::fromPath('/path/to/invoice.pdf')
|
|
79
|
+
->as('invoice-' . $this->invoice->getNumber() . '.pdf')
|
|
80
|
+
->withMime('application/pdf'),
|
|
81
|
+
];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Markdown templates
|
|
87
|
+
|
|
88
|
+
```blade
|
|
89
|
+
{{-- resources/views/emails/invoice.blade.php --}}
|
|
90
|
+
<x-mail::message>
|
|
91
|
+
# Invoice {{ $invoice->getNumber() }}
|
|
92
|
+
|
|
93
|
+
Thank you for your order. Here is your invoice summary:
|
|
94
|
+
|
|
95
|
+
<x-mail::table>
|
|
96
|
+
| Item | Amount |
|
|
97
|
+
|:-----|-------:|
|
|
98
|
+
@foreach ($invoice->getItems() as $item)
|
|
99
|
+
| {{ $item->getName() }} | {{ $item->getFormattedAmount() }} |
|
|
100
|
+
@endforeach
|
|
101
|
+
| **Total** | **{{ $invoice->getFormattedTotal() }}** |
|
|
102
|
+
</x-mail::table>
|
|
103
|
+
|
|
104
|
+
<x-mail::button :url="$url">
|
|
105
|
+
View Invoice
|
|
106
|
+
</x-mail::button>
|
|
107
|
+
|
|
108
|
+
Thanks,<br>
|
|
109
|
+
{{ config('app.name') }}
|
|
110
|
+
</x-mail::message>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Sending mail
|
|
114
|
+
|
|
115
|
+
```php
|
|
116
|
+
// Send immediately
|
|
117
|
+
Mail::to($user)->send(new InvoiceMail($invoice));
|
|
118
|
+
|
|
119
|
+
// Queue for background sending (preferred)
|
|
120
|
+
Mail::to($user)->queue(new InvoiceMail($invoice));
|
|
121
|
+
|
|
122
|
+
// Send later
|
|
123
|
+
Mail::to($user)->later(now()->addMinutes(10), new InvoiceMail($invoice));
|
|
124
|
+
|
|
125
|
+
// Multiple recipients
|
|
126
|
+
Mail::to($users)
|
|
127
|
+
->cc($manager)
|
|
128
|
+
->bcc('archive@example.com')
|
|
129
|
+
->send(new InvoiceMail($invoice));
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Testing
|
|
133
|
+
|
|
134
|
+
```php
|
|
135
|
+
// Assert mail was sent
|
|
136
|
+
Mail::fake();
|
|
137
|
+
|
|
138
|
+
// ... trigger action ...
|
|
139
|
+
|
|
140
|
+
Mail::assertSent(InvoiceMail::class, function (InvoiceMail $mail) use ($user) {
|
|
141
|
+
return $mail->hasTo($user->getEmail());
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
Mail::assertNotSent(InvoiceMail::class);
|
|
145
|
+
Mail::assertNothingSent();
|
|
146
|
+
Mail::assertQueued(InvoiceMail::class);
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Previewing in browser
|
|
150
|
+
|
|
151
|
+
```php
|
|
152
|
+
// routes/web.php (local only)
|
|
153
|
+
Route::get('/mail-preview', function () {
|
|
154
|
+
$invoice = Invoice::factory()->create();
|
|
155
|
+
return new InvoiceMail($invoice);
|
|
156
|
+
});
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Core rules
|
|
160
|
+
|
|
161
|
+
- **Always queue emails** — implement `ShouldQueue` to avoid blocking requests.
|
|
162
|
+
- **Use Markdown templates** for consistent styling across email clients.
|
|
163
|
+
- **Use Envelope + Content** pattern (Laravel 11+) — not the old `build()` method.
|
|
164
|
+
- **Test with `Mail::fake()`** — verify recipients, content, and queuing.
|
|
165
|
+
- **Keep Mailables focused** — one Mailable per email type.
|
|
166
|
+
|
|
167
|
+
## Output format
|
|
168
|
+
|
|
169
|
+
1. Mailable class with envelope, content, and attachments
|
|
170
|
+
2. Blade/Markdown email template
|
|
171
|
+
3. Queued mail dispatch integration
|
|
172
|
+
|
|
173
|
+
## Auto-trigger keywords
|
|
174
|
+
|
|
175
|
+
- Mailable
|
|
176
|
+
- email template
|
|
177
|
+
- send mail
|
|
178
|
+
- Mail::to
|
|
179
|
+
- markdown email
|
|
180
|
+
- mail attachment
|
|
181
|
+
|
|
182
|
+
## Gotcha
|
|
183
|
+
|
|
184
|
+
- Always queue emails (`ShouldQueue`) — synchronous sending blocks the request.
|
|
185
|
+
- The model forgets that mail templates are Blade files — they need to be published/created.
|
|
186
|
+
- Don't test email content with `Mail::fake()` alone — it doesn't render the template. Use `Mail::assertSent()` with closure.
|
|
187
|
+
|
|
188
|
+
## Do NOT
|
|
189
|
+
|
|
190
|
+
- Do NOT send emails synchronously in request lifecycle — always queue.
|
|
191
|
+
- Do NOT use `build()` method — use `envelope()`, `content()`, `attachments()`.
|
|
192
|
+
- Do NOT hardcode email addresses — use config or environment variables.
|
|
193
|
+
- Do NOT put HTML in Mailable classes — use Blade templates.
|