@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,160 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: migration-creator
|
|
3
|
+
description: "Use when the user says "create migration", "add column", or "new table". Creates migrations with correct table prefixes, column naming, and multi-tenant awareness."
|
|
4
|
+
source: package
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# migration-creator
|
|
8
|
+
|
|
9
|
+
## When to use
|
|
10
|
+
|
|
11
|
+
Use this skill when the user asks to create a database migration, add a column, create a table, or modify the schema.
|
|
12
|
+
|
|
13
|
+
## Procedure: Create a migration
|
|
14
|
+
|
|
15
|
+
1. **Read conventions** — Check `./agents/` and `AGENTS.md` for table prefixes, column naming, multi-tenant setup.
|
|
16
|
+
2. **Generate migration** — `php artisan make:migration create_xyz_table` (or add_column, etc.).
|
|
17
|
+
3. **Write schema** — Follow naming conventions, add indexes for WHERE/JOIN columns, use `decimal` for money.
|
|
18
|
+
4. **Verify** — Run migration (`php artisan migrate`), then rollback (`php artisan migrate:rollback`) to confirm reversibility.
|
|
19
|
+
|
|
20
|
+
## All projects
|
|
21
|
+
|
|
22
|
+
- Use `decimal` for money — never `float`.
|
|
23
|
+
- Add indexes for columns used in WHERE clauses and JOINs.
|
|
24
|
+
- Match existing column naming patterns in the same table or domain.
|
|
25
|
+
- Always include a reversible `down()` method.
|
|
26
|
+
|
|
27
|
+
## Laravel projects
|
|
28
|
+
|
|
29
|
+
### Multi-database architecture
|
|
30
|
+
|
|
31
|
+
Some projects use multiple database connections. Check `config/database.php` for connections.
|
|
32
|
+
|
|
33
|
+
| Check | How |
|
|
34
|
+
|---|---|
|
|
35
|
+
| Available connections | `config/database.php` → `'connections'` array |
|
|
36
|
+
| Migration directories | `database/migrations/` (default), check for additional directories |
|
|
37
|
+
| Custom migrate commands | `php artisan list migrate` — look for project-specific commands |
|
|
38
|
+
|
|
39
|
+
**Always determine which database the table belongs to before creating a migration.**
|
|
40
|
+
|
|
41
|
+
### API database migration
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
php artisan make:migration create_example_table
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
```php
|
|
48
|
+
return new class extends Migration {
|
|
49
|
+
public function up(): void
|
|
50
|
+
{
|
|
51
|
+
Schema::connection('api_database')->create('example_table', function (Blueprint $table): void {
|
|
52
|
+
$table->id();
|
|
53
|
+
$table->unsignedBigInteger('customer_id');
|
|
54
|
+
$table->string('name');
|
|
55
|
+
$table->boolean('is_active')->default(true);
|
|
56
|
+
$table->timestamps();
|
|
57
|
+
$table->softDeletes();
|
|
58
|
+
|
|
59
|
+
$table->foreign('customer_id')
|
|
60
|
+
->references('id')
|
|
61
|
+
->on('customers')
|
|
62
|
+
->onDelete('cascade');
|
|
63
|
+
|
|
64
|
+
$table->index('is_active');
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
public function down(): void
|
|
69
|
+
{
|
|
70
|
+
Schema::connection('api_database')->dropIfExists('example_table');
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Customer database migration
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
php artisan make:migration:customer AddWeatherColumn --table=cl_lv_weather
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Customer database tables use the `cl_` prefix (e.g. `cl_user`, `cl_lv_weather`).
|
|
82
|
+
|
|
83
|
+
### Adding a column (with explicit connection)
|
|
84
|
+
|
|
85
|
+
```php
|
|
86
|
+
return new class extends Migration {
|
|
87
|
+
public function up(): void
|
|
88
|
+
{
|
|
89
|
+
Schema::connection('my_connection')->table('example', function (Blueprint $table): void {
|
|
90
|
+
$table->unsignedInteger('new_column')->after('existing_column');
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
public function down(): void
|
|
95
|
+
{
|
|
96
|
+
Schema::connection('my_connection')->table('example', function (Blueprint $table): void {
|
|
97
|
+
$table->dropColumn('new_column');
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Running migrations
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# Default connection
|
|
107
|
+
php artisan migrate # development
|
|
108
|
+
php artisan migrate --env=testing # testing
|
|
109
|
+
|
|
110
|
+
# Multi-tenant / custom — check AGENTS.md or module docs for project-specific commands
|
|
111
|
+
# Example: php artisan migrate:tenants, php artisan migrate --database=tenant
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Composer / legacy projects
|
|
115
|
+
|
|
116
|
+
- Check where existing migrations live (e.g. `core/migrations/`).
|
|
117
|
+
- Use the existing migration format and naming conventions in the project.
|
|
118
|
+
|
|
119
|
+
## Column conventions
|
|
120
|
+
|
|
121
|
+
- Foreign keys: `{entity}_id` (e.g. `customer_id`, `user_id`)
|
|
122
|
+
- Booleans: `is_` prefix (e.g. `is_active`, `is_default`)
|
|
123
|
+
- Dates: descriptive suffix (e.g. `upload_date`, `deleted_at`)
|
|
124
|
+
- Always use `unsignedBigInteger` for foreign keys referencing `id()` columns
|
|
125
|
+
- Use `->after('column')` to place new columns logically
|
|
126
|
+
|
|
127
|
+
## Output format
|
|
128
|
+
|
|
129
|
+
1. Migration file with up() and down() methods
|
|
130
|
+
2. Model updates if columns or relationships changed
|
|
131
|
+
|
|
132
|
+
## Gotcha
|
|
133
|
+
|
|
134
|
+
- Always check if the table/column already exists before creating the migration — the model doesn't always check.
|
|
135
|
+
- Multi-tenant migrations need special handling — customer tables use different prefixes.
|
|
136
|
+
- Don't modify existing migrations that have been deployed — create a new migration instead.
|
|
137
|
+
- The model forgets `->after('column')` for column ordering — MariaDB respects it, and it matters for readability.
|
|
138
|
+
|
|
139
|
+
## Do NOT
|
|
140
|
+
|
|
141
|
+
- Do NOT create migrations without specifying the correct connection when multiple databases exist.
|
|
142
|
+
- Do NOT create tables without checking the project's naming conventions (prefixes, casing).
|
|
143
|
+
- Do NOT use raw SQL in migrations when Schema builder works.
|
|
144
|
+
- Do NOT forget to make migrations reversible (down method).
|
|
145
|
+
- Do NOT use `float` for money — use `decimal`.
|
|
146
|
+
- Do NOT forget indexes on foreign keys and frequently filtered columns.
|
|
147
|
+
|
|
148
|
+
## Adversarial review
|
|
149
|
+
|
|
150
|
+
Before finalizing a migration, run the **`adversarial-review`** skill.
|
|
151
|
+
Focus on the "Database migrations" attack questions: Can this destroy data? Is rollback possible?
|
|
152
|
+
|
|
153
|
+
## Auto-trigger keywords
|
|
154
|
+
|
|
155
|
+
- database migration
|
|
156
|
+
- create migration
|
|
157
|
+
- table prefix
|
|
158
|
+
- column naming
|
|
159
|
+
- add column
|
|
160
|
+
- create table
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: module-management
|
|
3
|
+
description: "Use when the user says "create module", "explore module", or works within app/Modules/. Understands module structure, auto-loading, route registration, and namespace conventions."
|
|
4
|
+
source: package
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# module
|
|
8
|
+
|
|
9
|
+
## When to use
|
|
10
|
+
|
|
11
|
+
Use this skill when creating, exploring, or working within a module in `app/Modules/`.
|
|
12
|
+
|
|
13
|
+
## Procedure: Work with modules
|
|
14
|
+
|
|
15
|
+
1. Read `app/Modules/README.md` for the full module documentation.
|
|
16
|
+
2. Check `app/Providers/ModuleServiceProvider.php` for auto-loading behavior.
|
|
17
|
+
3. If module-level agent docs exist (`app/Modules/{Module}/agents/`), read them.
|
|
18
|
+
|
|
19
|
+
## Detection
|
|
20
|
+
|
|
21
|
+
Check if `app/Modules/` exists in the project. If it doesn't, the project doesn't use modules.
|
|
22
|
+
|
|
23
|
+
## Architecture
|
|
24
|
+
|
|
25
|
+
### ModuleServiceProvider
|
|
26
|
+
|
|
27
|
+
`app/Providers/ModuleServiceProvider.php` auto-discovers modules by scanning `app/Modules/`:
|
|
28
|
+
|
|
29
|
+
1. **Route loading** — automatically loads `Routes/api.php`, `Routes/web.php`, `Routes/console.php`
|
|
30
|
+
- API routes: prefixed with `/api`, `api` middleware
|
|
31
|
+
- Web routes: `web` middleware
|
|
32
|
+
- Console routes: loaded via `require_once`
|
|
33
|
+
- Fallback: also checks lowercase `routes/` for legacy modules
|
|
34
|
+
2. **Command registration** — auto-discovers commands in `App/Console/Commands/`
|
|
35
|
+
- Fallback: also checks `Console/Commands/` for legacy modules
|
|
36
|
+
|
|
37
|
+
### Module structure
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
app/Modules/{ModuleName}/
|
|
41
|
+
├── App/ # All application code (PSR-4)
|
|
42
|
+
│ ├── Console/Commands/ # Artisan commands (auto-registered)
|
|
43
|
+
│ ├── Enums/
|
|
44
|
+
│ ├── Http/
|
|
45
|
+
│ │ ├── Controllers/
|
|
46
|
+
│ │ ├── Middleware/
|
|
47
|
+
│ │ └── Requests/
|
|
48
|
+
│ ├── Jobs/
|
|
49
|
+
│ ├── Models/
|
|
50
|
+
│ ├── Rules/
|
|
51
|
+
│ └── Services/
|
|
52
|
+
├── Routes/ # Auto-loaded route files
|
|
53
|
+
│ ├── api.php
|
|
54
|
+
│ ├── web.php
|
|
55
|
+
│ └── console.php
|
|
56
|
+
├── Tests/ # Module-specific tests
|
|
57
|
+
│ ├── Component/
|
|
58
|
+
│ ├── Integration/
|
|
59
|
+
│ └── Unit/
|
|
60
|
+
├── Docs/ # Optional technical docs
|
|
61
|
+
├── agents/ # Agent docs for this module
|
|
62
|
+
│ ├── features/
|
|
63
|
+
│ ├── roadmaps/
|
|
64
|
+
│ └── contexts/
|
|
65
|
+
└── README.md # Optional module description
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Important:** Directory names use capital letters (App, Routes, Tests) for PSR-4 compliance.
|
|
69
|
+
|
|
70
|
+
### Namespace convention
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
App\Modules\{ModuleName}\App\{Layer}\{Class}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Examples:
|
|
77
|
+
- `App\Modules\ClientSoftware\App\Services\ImportService`
|
|
78
|
+
- `App\Modules\ClientSoftware\App\Http\Controllers\Import\ImportDataController`
|
|
79
|
+
- `App\Modules\ClientSoftware\App\Console\Commands\ProcessImportUploadsCommand`
|
|
80
|
+
|
|
81
|
+
### Route conventions
|
|
82
|
+
|
|
83
|
+
```php
|
|
84
|
+
// Routes/api.php — auto-prefixed with /api by ModuleServiceProvider
|
|
85
|
+
Route::name('v1.')
|
|
86
|
+
->prefix('v1/{module-prefix}')
|
|
87
|
+
->group(function(): void {
|
|
88
|
+
Route::get('/', [Controller::class, 'index'])->name('{module-prefix}.index');
|
|
89
|
+
});
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
- Route prefix: **kebab-case** (e.g., `client-software`, `grafana`)
|
|
93
|
+
- Route names: **dot notation** (e.g., `v1.imports.index`)
|
|
94
|
+
- Module name: **PascalCase** (e.g., `ClientSoftware`, `Grafana`)
|
|
95
|
+
|
|
96
|
+
## Existing modules
|
|
97
|
+
|
|
98
|
+
| Module | Purpose |
|
|
99
|
+
|---|---|
|
|
100
|
+
| `ApiClient` | External API client utilities |
|
|
101
|
+
| `Backoff` | Retry/backoff logic |
|
|
102
|
+
| `ClientSoftware` | Client software imports, uploads, processing |
|
|
103
|
+
| `Grafana` | Grafana/Loki dashboard integration |
|
|
104
|
+
| `Stubbing` | Test stubs and mocks |
|
|
105
|
+
|
|
106
|
+
## Template
|
|
107
|
+
|
|
108
|
+
The `.module-template` directory provides a scaffold for new modules:
|
|
109
|
+
- `app/Modules/.module-template/` — copy and rename to create a new module
|
|
110
|
+
- Contains placeholder route files, README, and directory structure
|
|
111
|
+
- Replace `[MODULE_NAME]` and `[module-prefix]` placeholders
|
|
112
|
+
|
|
113
|
+
## Agent docs in modules
|
|
114
|
+
|
|
115
|
+
Modules can have their own agent documentation:
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
app/Modules/{Module}/agents/
|
|
119
|
+
├── features/ # Module-scoped feature plans
|
|
120
|
+
├── roadmaps/ # Module-scoped roadmaps
|
|
121
|
+
└── contexts/ # Module-scoped context documents
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Output format
|
|
125
|
+
|
|
126
|
+
1. Module directory structure following template conventions
|
|
127
|
+
2. ServiceProvider, routes, and agent docs scaffolded
|
|
128
|
+
|
|
129
|
+
## Auto-trigger keywords
|
|
130
|
+
|
|
131
|
+
- Laravel module
|
|
132
|
+
- module structure
|
|
133
|
+
- module creation
|
|
134
|
+
- module namespace
|
|
135
|
+
|
|
136
|
+
### Validate
|
|
137
|
+
|
|
138
|
+
- Verify namespace follows `App\Modules\{Name}\App\{Layer}` pattern.
|
|
139
|
+
- Confirm `ModuleServiceProvider` auto-discovers the new module's routes and providers.
|
|
140
|
+
- Run PHPStan on the module — must pass.
|
|
141
|
+
- Run module tests — must pass.
|
|
142
|
+
|
|
143
|
+
## Gotcha
|
|
144
|
+
|
|
145
|
+
- Module namespace is `App\Modules\{Name}\App\{Layer}` — don't forget the extra `App` segment.
|
|
146
|
+
- Routes in modules auto-register via `ModuleServiceProvider` — don't register them manually.
|
|
147
|
+
- Don't put shared code in a module — shared code belongs in `app/` not `app/Modules/`.
|
|
148
|
+
|
|
149
|
+
## Do NOT
|
|
150
|
+
|
|
151
|
+
- Do NOT manually register module routes — `ModuleServiceProvider` handles this.
|
|
152
|
+
- Do NOT use lowercase directory names (`routes/`, `app/`) — use `Routes/`, `App/`.
|
|
153
|
+
- Do NOT put business logic in controllers — use module services.
|
|
154
|
+
- Do NOT create a module for trivial functionality — only when logical separation is needed.
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: multi-tenancy
|
|
3
|
+
description: "Use when working with the multi-tenant architecture — customer DB switching, FQDN routing, tenant isolation, or cross-tenant operations."
|
|
4
|
+
source: package
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# multi-tenancy
|
|
8
|
+
|
|
9
|
+
## When to use
|
|
10
|
+
|
|
11
|
+
Use this skill when working with tenant-specific data, customer database connections, or any code that touches the dual-database architecture.
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
Do NOT use when:
|
|
15
|
+
- Single-database applications
|
|
16
|
+
- Frontend-only changes
|
|
17
|
+
|
|
18
|
+
## Procedure: Work with multi-tenancy
|
|
19
|
+
|
|
20
|
+
1. **Gather context** — read `agents/docs/` for multi-tenant architecture, `config/database.php` for connection definitions, and search for the tenant switching service.
|
|
21
|
+
2. **Identify connection** — determine whether the code touches central, tenant, or both databases. Set `$connection` explicitly on any new model.
|
|
22
|
+
3. **Implement** — write the feature using the correct connection. Use the tenant switching service for cross-tenant operations. Never mix connections in a single query.
|
|
23
|
+
4. **Verify isolation** — inspect the code for tenant leaks: global scopes, missing `$connection`, shared caches, or job serialization without tenant context.
|
|
24
|
+
5. **Test** — write a test that exercises the tenant boundary: seed tenant-specific data, switch context, verify correct data is returned and other tenants' data is invisible.
|
|
25
|
+
|
|
26
|
+
## Architecture overview
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
Request → Identify Tenant (JWT / subdomain / API key)
|
|
30
|
+
→ Lookup credentials from central database
|
|
31
|
+
→ Reconfigure tenant connection at runtime
|
|
32
|
+
→ All tenant queries use tenant connection
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Dual-database pattern
|
|
36
|
+
|
|
37
|
+
| Connection type | Purpose | Scope |
|
|
38
|
+
|---|---|---|
|
|
39
|
+
| Central / shared | Global data — tenants, config, shared resources | Shared across all tenants |
|
|
40
|
+
| Tenant / customer | Tenant-specific data — domain entities | One per tenant |
|
|
41
|
+
|
|
42
|
+
The central connection is typically the **default connection**.
|
|
43
|
+
The tenant connection starts **empty** and is configured dynamically per request.
|
|
44
|
+
|
|
45
|
+
### Additional connections
|
|
46
|
+
|
|
47
|
+
Projects may have additional connections for admin operations, provisioning, or monitoring. Check `config/database.php`.
|
|
48
|
+
|
|
49
|
+
## Core tenant switching service
|
|
50
|
+
|
|
51
|
+
Search the codebase for the service responsible for tenant switching. Typical responsibilities:
|
|
52
|
+
|
|
53
|
+
1. Store tenant context (e.g., in Laravel Context or a singleton)
|
|
54
|
+
2. Load tenant configuration
|
|
55
|
+
3. Set monitoring context (tenant ID, name, domain)
|
|
56
|
+
4. Reconfigure the database connection with tenant credentials
|
|
57
|
+
5. Bind tenant-specific services via the container
|
|
58
|
+
|
|
59
|
+
## Model conventions
|
|
60
|
+
|
|
61
|
+
### Setting `$connection`
|
|
62
|
+
|
|
63
|
+
Every model **must** explicitly set its connection:
|
|
64
|
+
|
|
65
|
+
```php
|
|
66
|
+
// Central models
|
|
67
|
+
class Tenant extends Model
|
|
68
|
+
{
|
|
69
|
+
protected $connection = 'central_database';
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Tenant models
|
|
73
|
+
class Project extends Model
|
|
74
|
+
{
|
|
75
|
+
protected $connection = 'tenant_database';
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Check the project for the actual connection names and namespace conventions.
|
|
80
|
+
|
|
81
|
+
## Tenant isolation rules
|
|
82
|
+
|
|
83
|
+
- **Never query the tenant connection before the tenant is set.**
|
|
84
|
+
- **Never mix connections in a single query** — use explicit joins or separate queries.
|
|
85
|
+
- **Always specify `$connection`** on new models — never rely on the default.
|
|
86
|
+
- **Use transactions per connection** — `DB::connection('tenant_database')->transaction(...)`.
|
|
87
|
+
- **Artisan commands** that need tenant access must use the appropriate trait (search for it in the project).
|
|
88
|
+
|
|
89
|
+
## Testing with tenants
|
|
90
|
+
|
|
91
|
+
- Tests use dedicated tenant seeders (check `agents/docs/` for seeder conventions).
|
|
92
|
+
- The testing database may consolidate multiple connections into a single DB for simplicity.
|
|
93
|
+
- Use `RefreshDatabase` or manual seeding — never assume a specific tenant state from previous tests.
|
|
94
|
+
|
|
95
|
+
## Common pitfalls
|
|
96
|
+
|
|
97
|
+
| Problem | Solution |
|
|
98
|
+
|---|---|
|
|
99
|
+
| Query on `customer_database` returns empty | Customer not set yet — check middleware order |
|
|
100
|
+
| Race condition in parallel tests | Each test process gets its own DB (parallel testing with separate DBs) |
|
|
101
|
+
| Wrong tenant data in background jobs | Serialize customer ID, re-resolve in job's `handle()` method |
|
|
102
|
+
| Migration on wrong connection | Specify `--database=customer_database` or set `$connection` in migration |
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
## Output format
|
|
106
|
+
|
|
107
|
+
1. Tenant-aware code with correct DB connection switching
|
|
108
|
+
2. Verification that tenant isolation is maintained
|
|
109
|
+
|
|
110
|
+
## Auto-trigger keywords
|
|
111
|
+
|
|
112
|
+
- multi-tenant
|
|
113
|
+
- tenant isolation
|
|
114
|
+
- customer database
|
|
115
|
+
- FQDN routing
|
|
116
|
+
|
|
117
|
+
## Gotcha
|
|
118
|
+
|
|
119
|
+
- Always verify which database connection is active before running queries — cross-tenant data leaks are critical bugs.
|
|
120
|
+
- The model forgets to switch back to the main connection after tenant operations.
|
|
121
|
+
- Queue jobs serialize the connection state — ensure the tenant context is restored when the job runs.
|
|
122
|
+
- Don't use `DB::connection()` directly — use the tenant switching helpers.
|
|
123
|
+
|
|
124
|
+
## Do NOT
|
|
125
|
+
|
|
126
|
+
- Do NOT hardcode database names — always use connection names.
|
|
127
|
+
- Do NOT assume `customer_database` is available in service providers or early boot.
|
|
128
|
+
- Do NOT access tenant data in global middleware that runs before customer identification.
|
|
129
|
+
- Do NOT store tenant DB credentials in code — they come from the `customer_databases` table.
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: openapi
|
|
3
|
+
description: "Use when documenting APIs — OpenAPI/Swagger, PHP attributes, Redocly validation, versioned specs — even when the user just says 'document this endpoint' without naming OpenAPI."
|
|
4
|
+
source: package
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# openapi
|
|
8
|
+
|
|
9
|
+
## When to use
|
|
10
|
+
|
|
11
|
+
Use this skill when adding or updating API documentation, writing OpenAPI annotations on controllers, or validating API specs.
|
|
12
|
+
|
|
13
|
+
## Procedure: Add OpenAPI documentation
|
|
14
|
+
|
|
15
|
+
1. **Gather context** — read `agents/docs/controller.md` for OpenAPI patterns, `agents/contexts/api-versioning.md` for versioning, and check 2-3 existing controllers for annotation style.
|
|
16
|
+
2. **Detect tooling** — check `composer.json` for `l5-swagger` or `laravel-openapi`, look for `@OA\` vs `#[OA\` syntax in existing controllers, find the config file.
|
|
17
|
+
3. **Write annotations** — add `#[OA\...]` attributes to the controller method. Include path, summary, tags, all parameters, and all response codes (200, 401, 403, 404, 422).
|
|
18
|
+
4. **Define schemas** — create or reuse `#[OA\Schema]` for request/response types. Use `$ref` for shared types.
|
|
19
|
+
5. **Validate** — run the spec validation (`npx @redocly/cli lint` or `php artisan l5-swagger:generate`). Fix any errors.
|
|
20
|
+
6. **Verify accuracy** — compare the documented request/response with the actual controller + FormRequest + Resource to ensure they match.
|
|
21
|
+
|
|
22
|
+
## OpenAPI attributes
|
|
23
|
+
|
|
24
|
+
### Detection
|
|
25
|
+
|
|
26
|
+
Check the project for OpenAPI tooling:
|
|
27
|
+
- Look for `darkaonline/l5-swagger` or `vyuldashev/laravel-openapi` in `composer.json`.
|
|
28
|
+
- Check for `@OA\` or `#[OA\` annotations in controllers.
|
|
29
|
+
- Look for `config/l5-swagger.php` or similar config files.
|
|
30
|
+
|
|
31
|
+
### PHP 8 attribute syntax
|
|
32
|
+
|
|
33
|
+
Modern Laravel projects use PHP 8 attributes instead of docblock annotations:
|
|
34
|
+
|
|
35
|
+
```php
|
|
36
|
+
#[OA\Get(
|
|
37
|
+
path: '/projects',
|
|
38
|
+
summary: 'List all projects',
|
|
39
|
+
tags: ['Projects'],
|
|
40
|
+
parameters: [
|
|
41
|
+
new OA\Parameter(
|
|
42
|
+
name: 'page',
|
|
43
|
+
in: 'query',
|
|
44
|
+
required: false,
|
|
45
|
+
schema: new OA\Schema(type: 'integer'),
|
|
46
|
+
),
|
|
47
|
+
],
|
|
48
|
+
responses: [
|
|
49
|
+
new OA\Response(
|
|
50
|
+
response: 200,
|
|
51
|
+
description: 'Successful operation',
|
|
52
|
+
),
|
|
53
|
+
],
|
|
54
|
+
)]
|
|
55
|
+
public function __invoke(ListProjectsRequest $request): ProjectCollection
|
|
56
|
+
{
|
|
57
|
+
// ...
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Conventions
|
|
62
|
+
|
|
63
|
+
- Place OpenAPI attributes **directly on the controller method**.
|
|
64
|
+
- **Paths are relative to the server URL.** If the server is configured as `http://host/api/v1`,
|
|
65
|
+
then `path: '/projects'` resolves to `/api/v1/projects`. Never repeat the server prefix in the path.
|
|
66
|
+
- Use **tags** matching the resource name (e.g., `Projects`, `Users`).
|
|
67
|
+
- Document **all parameters** — path, query, and header.
|
|
68
|
+
- Document **all response codes** — 200, 201, 401, 403, 404, 422.
|
|
69
|
+
- Use **schema references** (`$ref`) for reusable types.
|
|
70
|
+
|
|
71
|
+
## Response documentation
|
|
72
|
+
|
|
73
|
+
### Resource schemas
|
|
74
|
+
|
|
75
|
+
Define reusable schemas for API Resources:
|
|
76
|
+
|
|
77
|
+
```php
|
|
78
|
+
#[OA\Schema(
|
|
79
|
+
schema: 'Project',
|
|
80
|
+
properties: [
|
|
81
|
+
new OA\Property(property: 'id', type: 'integer'),
|
|
82
|
+
new OA\Property(property: 'name', type: 'string'),
|
|
83
|
+
new OA\Property(property: 'status', type: 'string', enum: ['active', 'archived']),
|
|
84
|
+
],
|
|
85
|
+
)]
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Pagination schema
|
|
89
|
+
|
|
90
|
+
Document paginated responses with `meta` and `links`:
|
|
91
|
+
|
|
92
|
+
```php
|
|
93
|
+
#[OA\Response(
|
|
94
|
+
response: 200,
|
|
95
|
+
description: 'Paginated list',
|
|
96
|
+
content: new OA\JsonContent(
|
|
97
|
+
properties: [
|
|
98
|
+
new OA\Property(property: 'data', type: 'array', items: new OA\Items(ref: '#/components/schemas/Project')),
|
|
99
|
+
new OA\Property(property: 'meta', ref: '#/components/schemas/PaginationMeta'),
|
|
100
|
+
],
|
|
101
|
+
),
|
|
102
|
+
)]
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Validation with Redocly
|
|
106
|
+
|
|
107
|
+
If the project uses Redocly for OpenAPI validation:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
# Validate the spec
|
|
111
|
+
npx @redocly/cli lint openapi.yaml
|
|
112
|
+
|
|
113
|
+
# Preview documentation
|
|
114
|
+
npx @redocly/cli preview-docs openapi.yaml
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Check for `.redocly.yaml` or `redocly.yaml` config in the project root.
|
|
118
|
+
|
|
119
|
+
## Versioned documentation
|
|
120
|
+
|
|
121
|
+
When the API uses URL-based versioning (e.g., `/api/v1/`, `/api/v2/`):
|
|
122
|
+
|
|
123
|
+
- The version prefix is typically part of the **server URL**, not the individual endpoint paths.
|
|
124
|
+
- Check the OpenAPI server configuration to understand what prefix is already included.
|
|
125
|
+
- When creating a v2 endpoint, add new documentation — don't modify v1 docs.
|
|
126
|
+
- Mark deprecated endpoints with `deprecated: true`.
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
## Output format
|
|
130
|
+
|
|
131
|
+
1. OpenAPI annotations as PHP attributes on controllers/models
|
|
132
|
+
2. Spec validation passing via Redocly
|
|
133
|
+
|
|
134
|
+
## Auto-trigger keywords
|
|
135
|
+
|
|
136
|
+
- OpenAPI
|
|
137
|
+
- Swagger
|
|
138
|
+
- API documentation
|
|
139
|
+
- PHP attributes
|
|
140
|
+
- Redocly
|
|
141
|
+
|
|
142
|
+
## Gotcha
|
|
143
|
+
|
|
144
|
+
- OpenAPI attributes must match the actual endpoint behavior — stale docs are worse than no docs.
|
|
145
|
+
- The model tends to define response schemas that don't match the Resource class output.
|
|
146
|
+
- Don't document internal endpoints in the public API spec.
|
|
147
|
+
|
|
148
|
+
## Do NOT
|
|
149
|
+
|
|
150
|
+
- Do NOT skip OpenAPI documentation when creating new endpoints.
|
|
151
|
+
- Do NOT document internal/private endpoints that are not part of the public API.
|
|
152
|
+
- Do NOT use docblock `@OA\` annotations when the project uses PHP 8 attributes.
|
|
153
|
+
- Do NOT hardcode example values that contain real customer data.
|
|
154
|
+
- Do NOT create documentation that contradicts the actual implementation.
|