@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,637 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# install.sh — Agent-config payload sync (one of two installer stages).
|
|
3
|
+
#
|
|
4
|
+
# Reads from vendor's .agent-src/ (fallback: .augment/ for pre-2.0 packages) and
|
|
5
|
+
# writes the target project's .augment/ tree: copies rules, symlinks everything else.
|
|
6
|
+
# Creates tool-specific directories for Claude Code, Cursor, Cline, Windsurf, Gemini.
|
|
7
|
+
#
|
|
8
|
+
# Does NOT render .agent-settings.yml or bridge JSONs — that is the job of
|
|
9
|
+
# scripts/install.py. The primary entry point scripts/install orchestrates both.
|
|
10
|
+
# Running this script on its own installs the payload only.
|
|
11
|
+
#
|
|
12
|
+
# Usage:
|
|
13
|
+
# bash scripts/install.sh [--source <dir>] [--target <dir>] [--dry-run] [--verbose] [--quiet]
|
|
14
|
+
#
|
|
15
|
+
# Environment:
|
|
16
|
+
# PROJECT_ROOT — override target directory (default: cwd)
|
|
17
|
+
|
|
18
|
+
set -euo pipefail
|
|
19
|
+
|
|
20
|
+
# --- Configuration ---
|
|
21
|
+
COPY_DIRS="rules" # Subdirectories where files must be real copies (space-separated)
|
|
22
|
+
GITIGNORE_MARKER="# event4u/agent-config"
|
|
23
|
+
|
|
24
|
+
# Rules that are internal to the agent-config package and should NOT be shipped to consumers.
|
|
25
|
+
# These are only relevant when developing the agent-config package itself.
|
|
26
|
+
EXCLUDE_RULES="augment-source-of-truth.md augment-portability.md docs-sync.md"
|
|
27
|
+
|
|
28
|
+
# Files inside target/.augment/ that are NOT managed by sync (created by the bridge installer).
|
|
29
|
+
# Never remove them in clean_stale even though they are absent in the source manifest.
|
|
30
|
+
PRESERVE_TARGET="settings.json"
|
|
31
|
+
|
|
32
|
+
# --- Globals ---
|
|
33
|
+
SOURCE_DIR=""
|
|
34
|
+
TARGET_DIR=""
|
|
35
|
+
DRY_RUN=false
|
|
36
|
+
VERBOSE=false
|
|
37
|
+
QUIET=false
|
|
38
|
+
|
|
39
|
+
# --- Logging ---
|
|
40
|
+
log_info() { $QUIET || echo " ✅ $*"; }
|
|
41
|
+
log_warn() { $QUIET || echo " ⚠️ $*" >&2; }
|
|
42
|
+
log_verbose() { $VERBOSE && ! $QUIET && echo " $*" || true; }
|
|
43
|
+
log_error() { echo " ❌ $*" >&2; }
|
|
44
|
+
|
|
45
|
+
# --- Argument parsing ---
|
|
46
|
+
parse_args() {
|
|
47
|
+
while [[ $# -gt 0 ]]; do
|
|
48
|
+
case "$1" in
|
|
49
|
+
--source) SOURCE_DIR="$2"; shift 2 ;;
|
|
50
|
+
--target) TARGET_DIR="$2"; shift 2 ;;
|
|
51
|
+
--dry-run) DRY_RUN=true; shift ;;
|
|
52
|
+
--verbose) VERBOSE=true; shift ;;
|
|
53
|
+
--quiet) QUIET=true; shift ;;
|
|
54
|
+
--help|-h) show_help; exit 0 ;;
|
|
55
|
+
*) log_error "Unknown argument: $1"; show_help; exit 1 ;;
|
|
56
|
+
esac
|
|
57
|
+
done
|
|
58
|
+
|
|
59
|
+
# Auto-detect source: directory where this script lives (../ = package root)
|
|
60
|
+
if [[ -z "$SOURCE_DIR" ]]; then
|
|
61
|
+
SOURCE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
62
|
+
fi
|
|
63
|
+
|
|
64
|
+
# Auto-detect target: PROJECT_ROOT env var, or derive from source location
|
|
65
|
+
if [[ -z "$TARGET_DIR" ]]; then
|
|
66
|
+
if [[ -n "${PROJECT_ROOT:-}" ]]; then
|
|
67
|
+
TARGET_DIR="$PROJECT_ROOT"
|
|
68
|
+
elif [[ "$SOURCE_DIR" == */vendor/event4u/agent-config ]]; then
|
|
69
|
+
# Composer: vendor/event4u/agent-config → project root is 3 levels up
|
|
70
|
+
TARGET_DIR="$(cd "$SOURCE_DIR/../../.." && pwd)"
|
|
71
|
+
elif [[ "$SOURCE_DIR" == */node_modules/@event4u/agent-config ]]; then
|
|
72
|
+
# npm (scoped): node_modules/@event4u/agent-config → project root is 3 levels up
|
|
73
|
+
TARGET_DIR="$(cd "$SOURCE_DIR/../../.." && pwd)"
|
|
74
|
+
elif [[ "$SOURCE_DIR" == */node_modules/*/agent-config ]]; then
|
|
75
|
+
# npm (unscoped fallback)
|
|
76
|
+
TARGET_DIR="$(cd "$SOURCE_DIR/../../.." && pwd)"
|
|
77
|
+
else
|
|
78
|
+
# Fallback: cwd (manual invocation or local development)
|
|
79
|
+
TARGET_DIR="$(pwd)"
|
|
80
|
+
fi
|
|
81
|
+
fi
|
|
82
|
+
|
|
83
|
+
# Resolve source layout: prefer .agent-src/ (v2.0+), fallback to .augment/ (pre-2.0).
|
|
84
|
+
if [[ -d "$SOURCE_DIR/.agent-src" ]]; then
|
|
85
|
+
SOURCE_PAYLOAD="$SOURCE_DIR/.agent-src"
|
|
86
|
+
elif [[ -d "$SOURCE_DIR/.augment" ]]; then
|
|
87
|
+
SOURCE_PAYLOAD="$SOURCE_DIR/.augment"
|
|
88
|
+
else
|
|
89
|
+
log_error "Source payload not found: $SOURCE_DIR/.agent-src (or .augment)"
|
|
90
|
+
exit 1
|
|
91
|
+
fi
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
show_help() {
|
|
95
|
+
cat <<'EOF'
|
|
96
|
+
Usage: bash install.sh [OPTIONS]
|
|
97
|
+
|
|
98
|
+
Syncs agent-config to target project. Copies rules, symlinks everything else.
|
|
99
|
+
|
|
100
|
+
Options:
|
|
101
|
+
--source <dir> Package source directory (default: auto-detect from script location)
|
|
102
|
+
--target <dir> Target project root (default: $PROJECT_ROOT or cwd)
|
|
103
|
+
--dry-run Show what would happen without making changes
|
|
104
|
+
--verbose Show detailed output
|
|
105
|
+
--quiet Suppress all output except errors
|
|
106
|
+
--help, -h Show this help
|
|
107
|
+
|
|
108
|
+
Environment:
|
|
109
|
+
PROJECT_ROOT Override target directory
|
|
110
|
+
EOF
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
# --- Utility functions ---
|
|
114
|
+
|
|
115
|
+
# Check if a relative path should be copied (true=copy) or symlinked (false=symlink)
|
|
116
|
+
should_copy() {
|
|
117
|
+
local rel_path="$1"
|
|
118
|
+
local first_segment="${rel_path%%/*}"
|
|
119
|
+
|
|
120
|
+
# Root-level files (no /) → symlink
|
|
121
|
+
if [[ "$first_segment" == "$rel_path" ]]; then
|
|
122
|
+
return 1
|
|
123
|
+
fi
|
|
124
|
+
|
|
125
|
+
# Check against COPY_DIRS
|
|
126
|
+
for dir in $COPY_DIRS; do
|
|
127
|
+
if [[ "$first_segment" == "$dir" ]]; then
|
|
128
|
+
return 0
|
|
129
|
+
fi
|
|
130
|
+
done
|
|
131
|
+
return 1
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
# Resolve a path to its canonical form (cached per session)
|
|
135
|
+
# Uses pwd -P to avoid subprocess overhead of realpath
|
|
136
|
+
_resolve_path() {
|
|
137
|
+
if [[ -d "$1" ]]; then
|
|
138
|
+
(cd "$1" && pwd -P)
|
|
139
|
+
elif [[ -f "$1" ]]; then
|
|
140
|
+
echo "$(cd "$(dirname "$1")" && pwd -P)/$(basename "$1")"
|
|
141
|
+
else
|
|
142
|
+
echo "$1"
|
|
143
|
+
fi
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
# Calculate relative path from $1 (directory) to $2 (file)
|
|
147
|
+
get_relative_path() {
|
|
148
|
+
local from_dir to_file
|
|
149
|
+
from_dir="$(_resolve_path "$1")"
|
|
150
|
+
to_file="$(_resolve_path "$2")"
|
|
151
|
+
_bash_relpath "$from_dir" "$to_file"
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
# Pure bash relative path calculation (no external tools needed)
|
|
155
|
+
_bash_relpath() {
|
|
156
|
+
local from="$1" to="$2"
|
|
157
|
+
local common_part="$from" result=""
|
|
158
|
+
|
|
159
|
+
while [[ "${to#"$common_part"}" == "${to}" ]]; do
|
|
160
|
+
common_part="$(dirname "$common_part")"
|
|
161
|
+
result="../${result}"
|
|
162
|
+
done
|
|
163
|
+
|
|
164
|
+
local forward="${to#"$common_part"}"
|
|
165
|
+
forward="${forward#/}"
|
|
166
|
+
|
|
167
|
+
if [[ -n "$result" ]] && [[ -n "$forward" ]]; then
|
|
168
|
+
echo "${result}${forward}"
|
|
169
|
+
elif [[ -n "$result" ]]; then
|
|
170
|
+
echo "${result%/}"
|
|
171
|
+
elif [[ -n "$forward" ]]; then
|
|
172
|
+
echo "$forward"
|
|
173
|
+
else
|
|
174
|
+
echo "."
|
|
175
|
+
fi
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
# Create a relative symlink, with copy fallback
|
|
179
|
+
create_symlink() {
|
|
180
|
+
local source_abs="$1"
|
|
181
|
+
local link_abs="$2"
|
|
182
|
+
local link_dir
|
|
183
|
+
link_dir="$(dirname "$link_abs")"
|
|
184
|
+
|
|
185
|
+
mkdir -p "$link_dir"
|
|
186
|
+
|
|
187
|
+
# Remove existing file/symlink
|
|
188
|
+
if [[ -L "$link_abs" ]] || [[ -f "$link_abs" ]]; then
|
|
189
|
+
$DRY_RUN || rm -f "$link_abs"
|
|
190
|
+
fi
|
|
191
|
+
|
|
192
|
+
local rel_path
|
|
193
|
+
rel_path="$(get_relative_path "$link_dir" "$source_abs")"
|
|
194
|
+
|
|
195
|
+
if $DRY_RUN; then
|
|
196
|
+
log_verbose "symlink $link_abs → $rel_path"
|
|
197
|
+
return
|
|
198
|
+
fi
|
|
199
|
+
|
|
200
|
+
if ! ln -s "$rel_path" "$link_abs" 2>/dev/null; then
|
|
201
|
+
cp "$source_abs" "$link_abs"
|
|
202
|
+
log_warn "Symlink failed, copied: $(basename "$link_abs")"
|
|
203
|
+
fi
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
# --- Core functions ---
|
|
208
|
+
|
|
209
|
+
# Check if a relative path matches an excluded rule
|
|
210
|
+
is_excluded_rule() {
|
|
211
|
+
local rel_path="$1"
|
|
212
|
+
local filename
|
|
213
|
+
filename="$(basename "$rel_path")"
|
|
214
|
+
|
|
215
|
+
for excluded in $EXCLUDE_RULES; do
|
|
216
|
+
if [[ "$filename" == "$excluded" ]]; then
|
|
217
|
+
return 0
|
|
218
|
+
fi
|
|
219
|
+
done
|
|
220
|
+
return 1
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
# Check if a target entry must never be removed by clean_stale
|
|
224
|
+
is_preserved_target() {
|
|
225
|
+
local rel_path="$1"
|
|
226
|
+
for preserved in $PRESERVE_TARGET; do
|
|
227
|
+
if [[ "$rel_path" == "$preserved" ]]; then
|
|
228
|
+
return 0
|
|
229
|
+
fi
|
|
230
|
+
done
|
|
231
|
+
return 1
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
# Hybrid sync: copy COPY_DIRS files, symlink everything else
|
|
235
|
+
sync_hybrid() {
|
|
236
|
+
local source_augment="$1"
|
|
237
|
+
local target_augment="$2"
|
|
238
|
+
|
|
239
|
+
if [[ ! -d "$source_augment" ]]; then
|
|
240
|
+
return
|
|
241
|
+
fi
|
|
242
|
+
|
|
243
|
+
$DRY_RUN || mkdir -p "$target_augment"
|
|
244
|
+
|
|
245
|
+
# Resolve canonical paths ONCE (avoids per-file subprocess)
|
|
246
|
+
local source_canonical target_canonical
|
|
247
|
+
source_canonical="$(_resolve_path "$source_augment")"
|
|
248
|
+
target_canonical="$(_resolve_path "$target_augment")"
|
|
249
|
+
|
|
250
|
+
# Pre-compute base relative path (target → source at the same depth)
|
|
251
|
+
local base_rel
|
|
252
|
+
base_rel="$(_bash_relpath "$target_canonical" "$source_canonical")"
|
|
253
|
+
|
|
254
|
+
# Collect all source files (relative paths)
|
|
255
|
+
local source_files
|
|
256
|
+
source_files=$(cd "$source_augment" && find . -type f | sed 's|^\./||' | sort)
|
|
257
|
+
|
|
258
|
+
# Sync each file
|
|
259
|
+
while IFS= read -r rel_path; do
|
|
260
|
+
[[ -z "$rel_path" ]] && continue
|
|
261
|
+
|
|
262
|
+
# Skip package-internal rules that should not be shipped to consumers
|
|
263
|
+
if is_excluded_rule "$rel_path"; then
|
|
264
|
+
log_verbose "skip (internal): $rel_path"
|
|
265
|
+
continue
|
|
266
|
+
fi
|
|
267
|
+
|
|
268
|
+
local source_file="$source_augment/$rel_path"
|
|
269
|
+
local target_file="$target_augment/$rel_path"
|
|
270
|
+
local target_dir
|
|
271
|
+
target_dir="$(dirname "$target_file")"
|
|
272
|
+
|
|
273
|
+
mkdir -p "$target_dir"
|
|
274
|
+
|
|
275
|
+
if should_copy "$rel_path"; then
|
|
276
|
+
# Remove existing symlink before copying
|
|
277
|
+
if [[ -L "$target_file" ]]; then
|
|
278
|
+
$DRY_RUN || rm -f "$target_file"
|
|
279
|
+
fi
|
|
280
|
+
if $DRY_RUN; then
|
|
281
|
+
log_verbose "copy $rel_path"
|
|
282
|
+
else
|
|
283
|
+
cp "$source_file" "$target_file"
|
|
284
|
+
fi
|
|
285
|
+
else
|
|
286
|
+
# Fast symlink: compute relative path from depth offset instead of per-file resolution
|
|
287
|
+
local rel_dir
|
|
288
|
+
rel_dir="$(dirname "$rel_path")"
|
|
289
|
+
local depth_prefix=""
|
|
290
|
+
if [[ "$rel_dir" != "." ]]; then
|
|
291
|
+
# Count directory depth and prepend ../ for each level
|
|
292
|
+
local depth
|
|
293
|
+
depth=$(echo "$rel_dir" | tr '/' '\n' | wc -l | tr -d ' ')
|
|
294
|
+
local i
|
|
295
|
+
for ((i=0; i<depth; i++)); do
|
|
296
|
+
depth_prefix="../$depth_prefix"
|
|
297
|
+
done
|
|
298
|
+
fi
|
|
299
|
+
local sym_target="${depth_prefix}${base_rel}/${rel_path}"
|
|
300
|
+
|
|
301
|
+
# Remove existing file/symlink
|
|
302
|
+
if [[ -L "$target_file" ]] || [[ -f "$target_file" ]]; then
|
|
303
|
+
$DRY_RUN || rm -f "$target_file"
|
|
304
|
+
fi
|
|
305
|
+
|
|
306
|
+
if $DRY_RUN; then
|
|
307
|
+
log_verbose "symlink $target_file → $sym_target"
|
|
308
|
+
else
|
|
309
|
+
if ! ln -s "$sym_target" "$target_file" 2>/dev/null; then
|
|
310
|
+
cp "$source_file" "$target_file"
|
|
311
|
+
log_warn "Symlink failed, copied: $(basename "$target_file")"
|
|
312
|
+
fi
|
|
313
|
+
fi
|
|
314
|
+
fi
|
|
315
|
+
done <<< "$source_files"
|
|
316
|
+
|
|
317
|
+
# Clean stale entries
|
|
318
|
+
clean_stale "$source_augment" "$target_augment"
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
# Remove stale files and broken symlinks
|
|
322
|
+
clean_stale() {
|
|
323
|
+
local source_dir="$1"
|
|
324
|
+
local target_dir="$2"
|
|
325
|
+
|
|
326
|
+
if [[ ! -d "$target_dir" ]]; then
|
|
327
|
+
return
|
|
328
|
+
fi
|
|
329
|
+
|
|
330
|
+
# Build source manifest
|
|
331
|
+
local source_manifest
|
|
332
|
+
source_manifest=$(cd "$source_dir" && find . -type f | sed 's|^\./||' | sort)
|
|
333
|
+
|
|
334
|
+
# Find all entries in target (files + symlinks)
|
|
335
|
+
local target_entries
|
|
336
|
+
target_entries=$(cd "$target_dir" && find . \( -type f -o -type l \) | sed 's|^\./||' | sort)
|
|
337
|
+
|
|
338
|
+
# Remove stale entries (in target but not in source) and excluded rules
|
|
339
|
+
while IFS= read -r entry; do
|
|
340
|
+
[[ -z "$entry" ]] && continue
|
|
341
|
+
if is_preserved_target "$entry"; then
|
|
342
|
+
log_verbose "preserve: $entry"
|
|
343
|
+
continue
|
|
344
|
+
fi
|
|
345
|
+
if is_excluded_rule "$entry" || ! echo "$source_manifest" | grep -qxF "$entry"; then
|
|
346
|
+
local path="$target_dir/$entry"
|
|
347
|
+
if $DRY_RUN; then
|
|
348
|
+
log_verbose "remove stale: $entry"
|
|
349
|
+
else
|
|
350
|
+
rm -f "$path"
|
|
351
|
+
log_verbose "Removed stale: $entry"
|
|
352
|
+
fi
|
|
353
|
+
fi
|
|
354
|
+
done <<< "$target_entries"
|
|
355
|
+
|
|
356
|
+
# Remove broken symlinks
|
|
357
|
+
while IFS= read -r entry; do
|
|
358
|
+
[[ -z "$entry" ]] && continue
|
|
359
|
+
local path="$target_dir/$entry"
|
|
360
|
+
if [[ -L "$path" ]] && [[ ! -e "$path" ]]; then
|
|
361
|
+
if $DRY_RUN; then
|
|
362
|
+
log_verbose "remove broken symlink: $entry"
|
|
363
|
+
else
|
|
364
|
+
rm -f "$path"
|
|
365
|
+
log_verbose "Removed broken symlink: $entry"
|
|
366
|
+
fi
|
|
367
|
+
fi
|
|
368
|
+
done <<< "$target_entries"
|
|
369
|
+
|
|
370
|
+
# Remove empty directories
|
|
371
|
+
if ! $DRY_RUN; then
|
|
372
|
+
find "$target_dir" -type d -empty -delete 2>/dev/null || true
|
|
373
|
+
fi
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
# Create tool-specific rule symlinks
|
|
378
|
+
create_tool_symlinks() {
|
|
379
|
+
local project_root="$1"
|
|
380
|
+
local rules_dir="$project_root/.augment/rules"
|
|
381
|
+
|
|
382
|
+
[[ -d "$rules_dir" ]] || return
|
|
383
|
+
|
|
384
|
+
local -a tool_dirs=(".claude/rules" ".cursor/rules" ".clinerules")
|
|
385
|
+
local -a rel_prefixes=("../../.augment/rules" "../../.augment/rules" "../.augment/rules")
|
|
386
|
+
|
|
387
|
+
local count=0
|
|
388
|
+
for i in "${!tool_dirs[@]}"; do
|
|
389
|
+
local dir="${tool_dirs[$i]}"
|
|
390
|
+
local rel_prefix="${rel_prefixes[$i]}"
|
|
391
|
+
local target_dir="$project_root/$dir"
|
|
392
|
+
|
|
393
|
+
mkdir -p "$target_dir"
|
|
394
|
+
|
|
395
|
+
for rule_file in "$rules_dir"/*.md; do
|
|
396
|
+
[[ -f "$rule_file" ]] || continue
|
|
397
|
+
local filename
|
|
398
|
+
filename="$(basename "$rule_file")"
|
|
399
|
+
local link="$target_dir/$filename"
|
|
400
|
+
local target="$rel_prefix/$filename"
|
|
401
|
+
|
|
402
|
+
if [[ -L "$link" ]]; then
|
|
403
|
+
$DRY_RUN || rm -f "$link"
|
|
404
|
+
elif [[ -f "$link" ]]; then
|
|
405
|
+
continue # Don't overwrite real files
|
|
406
|
+
fi
|
|
407
|
+
|
|
408
|
+
if $DRY_RUN; then
|
|
409
|
+
log_verbose "symlink $dir/$filename"
|
|
410
|
+
else
|
|
411
|
+
ln -s "$target" "$link" 2>/dev/null || cp "$rule_file" "$link"
|
|
412
|
+
fi
|
|
413
|
+
((count++)) || true
|
|
414
|
+
done
|
|
415
|
+
done
|
|
416
|
+
|
|
417
|
+
# Clean stale symlinks in tool dirs
|
|
418
|
+
for i in "${!tool_dirs[@]}"; do
|
|
419
|
+
local dir="${tool_dirs[$i]}"
|
|
420
|
+
local target_dir="$project_root/$dir"
|
|
421
|
+
[[ -d "$target_dir" ]] || continue
|
|
422
|
+
|
|
423
|
+
for entry in "$target_dir"/*; do
|
|
424
|
+
[[ -L "$entry" ]] || continue
|
|
425
|
+
local entry_name
|
|
426
|
+
entry_name="$(basename "$entry")"
|
|
427
|
+
# If no matching source rule exists, remove the stale symlink
|
|
428
|
+
if [[ ! -f "$rules_dir/$entry_name" ]]; then
|
|
429
|
+
$DRY_RUN || rm -f "$entry"
|
|
430
|
+
log_verbose "Removed stale tool symlink: $dir/$entry_name"
|
|
431
|
+
fi
|
|
432
|
+
done
|
|
433
|
+
done
|
|
434
|
+
|
|
435
|
+
log_info "Created $count rule symlinks across ${#tool_dirs[@]} tool directories"
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
# Create .claude/skills/ directory symlinks
|
|
439
|
+
create_skill_symlinks() {
|
|
440
|
+
local project_root="$1"
|
|
441
|
+
local skills_dir="$project_root/.augment/skills"
|
|
442
|
+
|
|
443
|
+
[[ -d "$skills_dir" ]] || return
|
|
444
|
+
|
|
445
|
+
local target_dir="$project_root/.claude/skills"
|
|
446
|
+
mkdir -p "$target_dir"
|
|
447
|
+
|
|
448
|
+
local count=0
|
|
449
|
+
for skill_dir in "$skills_dir"/*/; do
|
|
450
|
+
[[ -d "$skill_dir" ]] || continue
|
|
451
|
+
local skill_name
|
|
452
|
+
skill_name="$(basename "$skill_dir")"
|
|
453
|
+
local link="$target_dir/$skill_name"
|
|
454
|
+
local target="../../.augment/skills/$skill_name"
|
|
455
|
+
|
|
456
|
+
if [[ -L "$link" ]]; then
|
|
457
|
+
$DRY_RUN || rm -f "$link"
|
|
458
|
+
elif [[ -d "$link" ]]; then
|
|
459
|
+
continue # Don't overwrite real directories
|
|
460
|
+
fi
|
|
461
|
+
|
|
462
|
+
if $DRY_RUN; then
|
|
463
|
+
log_verbose "symlink .claude/skills/$skill_name"
|
|
464
|
+
else
|
|
465
|
+
ln -s "$target" "$link" 2>/dev/null || {
|
|
466
|
+
# Fallback: copy SKILL.md
|
|
467
|
+
if [[ -f "$skills_dir/$skill_name/SKILL.md" ]]; then
|
|
468
|
+
mkdir -p "$link"
|
|
469
|
+
cp "$skills_dir/$skill_name/SKILL.md" "$link/SKILL.md"
|
|
470
|
+
fi
|
|
471
|
+
}
|
|
472
|
+
fi
|
|
473
|
+
((count++)) || true
|
|
474
|
+
done
|
|
475
|
+
|
|
476
|
+
# Clean stale skill symlinks
|
|
477
|
+
for entry in "$target_dir"/*; do
|
|
478
|
+
[[ -L "$entry" ]] || continue
|
|
479
|
+
local entry_name
|
|
480
|
+
entry_name="$(basename "$entry")"
|
|
481
|
+
if [[ ! -d "$skills_dir/$entry_name" ]]; then
|
|
482
|
+
$DRY_RUN || rm -f "$entry"
|
|
483
|
+
log_verbose "Removed stale skill symlink: .claude/skills/$entry_name"
|
|
484
|
+
fi
|
|
485
|
+
done
|
|
486
|
+
|
|
487
|
+
log_info "Created $count skill symlinks in .claude/skills/"
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
# Generate .windsurfrules from all rules (strip frontmatter)
|
|
491
|
+
generate_windsurfrules() {
|
|
492
|
+
local project_root="$1"
|
|
493
|
+
local rules_dir="$project_root/.augment/rules"
|
|
494
|
+
|
|
495
|
+
[[ -d "$rules_dir" ]] || return
|
|
496
|
+
|
|
497
|
+
local output="$project_root/.windsurfrules"
|
|
498
|
+
local count=0
|
|
499
|
+
|
|
500
|
+
if $DRY_RUN; then
|
|
501
|
+
log_verbose "generate .windsurfrules"
|
|
502
|
+
return
|
|
503
|
+
fi
|
|
504
|
+
|
|
505
|
+
echo "# Auto-generated from .augment/rules/ — do not edit directly" > "$output"
|
|
506
|
+
echo "" >> "$output"
|
|
507
|
+
|
|
508
|
+
for rule_file in "$rules_dir"/*.md; do
|
|
509
|
+
[[ -f "$rule_file" ]] || continue
|
|
510
|
+
local content
|
|
511
|
+
content="$(cat "$rule_file")"
|
|
512
|
+
|
|
513
|
+
# Strip YAML frontmatter (between first and second ---)
|
|
514
|
+
if [[ "$content" == ---* ]]; then
|
|
515
|
+
content="$(echo "$content" | awk 'BEGIN{skip=0} /^---$/{skip++; next} skip>=2{print}')"
|
|
516
|
+
fi
|
|
517
|
+
|
|
518
|
+
echo "---" >> "$output"
|
|
519
|
+
echo "" >> "$output"
|
|
520
|
+
echo "$content" >> "$output"
|
|
521
|
+
echo "" >> "$output"
|
|
522
|
+
((count++)) || true
|
|
523
|
+
done
|
|
524
|
+
|
|
525
|
+
log_info "Generated .windsurfrules ($count rules)"
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
|
|
529
|
+
# Create GEMINI.md symlink
|
|
530
|
+
create_gemini_md() {
|
|
531
|
+
local project_root="$1"
|
|
532
|
+
local link="$project_root/GEMINI.md"
|
|
533
|
+
|
|
534
|
+
if [[ -L "$link" ]] || [[ -f "$link" ]]; then
|
|
535
|
+
return # Don't overwrite
|
|
536
|
+
fi
|
|
537
|
+
|
|
538
|
+
if $DRY_RUN; then
|
|
539
|
+
log_verbose "symlink GEMINI.md → AGENTS.md"
|
|
540
|
+
return
|
|
541
|
+
fi
|
|
542
|
+
|
|
543
|
+
ln -s "AGENTS.md" "$link" 2>/dev/null || true
|
|
544
|
+
log_info "Created GEMINI.md → AGENTS.md symlink"
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
# Copy file if it doesn't exist in target
|
|
548
|
+
copy_if_missing() {
|
|
549
|
+
local source="$1"
|
|
550
|
+
local target="$2"
|
|
551
|
+
|
|
552
|
+
[[ -f "$source" ]] || return
|
|
553
|
+
[[ -f "$target" ]] && return
|
|
554
|
+
|
|
555
|
+
if $DRY_RUN; then
|
|
556
|
+
log_verbose "copy $(basename "$target") (missing)"
|
|
557
|
+
return
|
|
558
|
+
fi
|
|
559
|
+
|
|
560
|
+
mkdir -p "$(dirname "$target")"
|
|
561
|
+
cp "$source" "$target"
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
# Ensure .gitignore contains agent-config entries
|
|
565
|
+
ensure_gitignore() {
|
|
566
|
+
local project_root="$1"
|
|
567
|
+
local gitignore="$project_root/.gitignore"
|
|
568
|
+
|
|
569
|
+
if [[ ! -f "$gitignore" ]]; then
|
|
570
|
+
return 0
|
|
571
|
+
fi
|
|
572
|
+
|
|
573
|
+
if grep -qF "$GITIGNORE_MARKER" "$gitignore"; then
|
|
574
|
+
return 0 # Already present
|
|
575
|
+
fi
|
|
576
|
+
|
|
577
|
+
if $DRY_RUN; then
|
|
578
|
+
log_verbose "append .gitignore block"
|
|
579
|
+
return
|
|
580
|
+
fi
|
|
581
|
+
|
|
582
|
+
cat >> "$gitignore" << 'BLOCK'
|
|
583
|
+
|
|
584
|
+
# event4u/agent-config
|
|
585
|
+
# Agent config — symlinked from vendor (auto-managed)
|
|
586
|
+
.augment/skills/
|
|
587
|
+
.augment/commands/
|
|
588
|
+
.augment/guidelines/
|
|
589
|
+
.augment/templates/
|
|
590
|
+
.augment/contexts/
|
|
591
|
+
.augment/scripts/
|
|
592
|
+
.augment/README.md
|
|
593
|
+
|
|
594
|
+
# Agent config — NOT ignored (real copies, may contain project overrides)
|
|
595
|
+
# .augment/rules/
|
|
596
|
+
BLOCK
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
# --- Main ---
|
|
600
|
+
main() {
|
|
601
|
+
parse_args "$@"
|
|
602
|
+
|
|
603
|
+
$QUIET || echo "🔧 Syncing agent-config payload..."
|
|
604
|
+
$QUIET || echo " Source: $SOURCE_DIR"
|
|
605
|
+
$QUIET || echo " Target: $TARGET_DIR"
|
|
606
|
+
$DRY_RUN && ! $QUIET && echo " Mode: DRY RUN"
|
|
607
|
+
echo ""
|
|
608
|
+
|
|
609
|
+
# 1. Hybrid sync payload → target/.augment/
|
|
610
|
+
sync_hybrid "$SOURCE_PAYLOAD" "$TARGET_DIR/.augment"
|
|
611
|
+
log_info "Synced .augment/ (rules copied, rest symlinked)"
|
|
612
|
+
|
|
613
|
+
# 2. Copy standalone files from templates if missing on the target.
|
|
614
|
+
# We copy from templates/ (generic placeholders), NOT from the package's
|
|
615
|
+
# own root AGENTS.md / copilot-instructions.md — those are meta docs
|
|
616
|
+
# about the package itself and would leak package-specific content
|
|
617
|
+
# into consumer projects.
|
|
618
|
+
copy_if_missing "$SOURCE_PAYLOAD/templates/AGENTS.md" "$TARGET_DIR/AGENTS.md"
|
|
619
|
+
copy_if_missing "$SOURCE_PAYLOAD/templates/copilot-instructions.md" "$TARGET_DIR/.github/copilot-instructions.md"
|
|
620
|
+
|
|
621
|
+
# 3. Create tool-specific symlinks
|
|
622
|
+
create_tool_symlinks "$TARGET_DIR"
|
|
623
|
+
create_skill_symlinks "$TARGET_DIR"
|
|
624
|
+
|
|
625
|
+
# 4. Generate files
|
|
626
|
+
generate_windsurfrules "$TARGET_DIR"
|
|
627
|
+
create_gemini_md "$TARGET_DIR"
|
|
628
|
+
|
|
629
|
+
# 5. Manage .gitignore
|
|
630
|
+
ensure_gitignore "$TARGET_DIR"
|
|
631
|
+
|
|
632
|
+
echo ""
|
|
633
|
+
$QUIET || echo "✅ agent-config payload synced."
|
|
634
|
+
$QUIET || echo " Run scripts/install (or python3 scripts/install.py) to render .agent-settings.yml and bridges."
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
main "$@"
|