@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.
Files changed (446) hide show
  1. package/.agent-src/README.md +64 -0
  2. package/.agent-src/commands/agent-handoff.md +64 -0
  3. package/.agent-src/commands/agent-status.md +83 -0
  4. package/.agent-src/commands/agents-audit.md +243 -0
  5. package/.agent-src/commands/agents-cleanup.md +169 -0
  6. package/.agent-src/commands/agents-prepare.md +137 -0
  7. package/.agent-src/commands/analyze-reference-repo.md +191 -0
  8. package/.agent-src/commands/bug-fix.md +181 -0
  9. package/.agent-src/commands/bug-investigate.md +175 -0
  10. package/.agent-src/commands/commit.md +121 -0
  11. package/.agent-src/commands/compress.md +177 -0
  12. package/.agent-src/commands/config-agent-settings.md +126 -0
  13. package/.agent-src/commands/context-create.md +167 -0
  14. package/.agent-src/commands/context-refactor.md +170 -0
  15. package/.agent-src/commands/copilot-agents-init.md +150 -0
  16. package/.agent-src/commands/copilot-agents-optimize.md +251 -0
  17. package/.agent-src/commands/create-pr-description.md +112 -0
  18. package/.agent-src/commands/create-pr.md +76 -0
  19. package/.agent-src/commands/do-and-judge.md +114 -0
  20. package/.agent-src/commands/do-in-steps.md +84 -0
  21. package/.agent-src/commands/e2e-heal.md +98 -0
  22. package/.agent-src/commands/e2e-plan.md +85 -0
  23. package/.agent-src/commands/estimate-ticket.md +80 -0
  24. package/.agent-src/commands/feature-dev.md +111 -0
  25. package/.agent-src/commands/feature-explore.md +180 -0
  26. package/.agent-src/commands/feature-plan.md +288 -0
  27. package/.agent-src/commands/feature-refactor.md +181 -0
  28. package/.agent-src/commands/feature-roadmap.md +184 -0
  29. package/.agent-src/commands/fix-ci.md +48 -0
  30. package/.agent-src/commands/fix-portability.md +97 -0
  31. package/.agent-src/commands/fix-pr-bot-comments.md +146 -0
  32. package/.agent-src/commands/fix-pr-comments.md +58 -0
  33. package/.agent-src/commands/fix-pr-developer-comments.md +152 -0
  34. package/.agent-src/commands/fix-references.md +94 -0
  35. package/.agent-src/commands/fix-seeder.md +146 -0
  36. package/.agent-src/commands/implement-ticket.md +133 -0
  37. package/.agent-src/commands/jira-ticket.md +71 -0
  38. package/.agent-src/commands/judge.md +86 -0
  39. package/.agent-src/commands/memory-add.md +130 -0
  40. package/.agent-src/commands/memory-full.md +97 -0
  41. package/.agent-src/commands/memory-promote.md +144 -0
  42. package/.agent-src/commands/mode.md +121 -0
  43. package/.agent-src/commands/module-create.md +132 -0
  44. package/.agent-src/commands/module-explore.md +157 -0
  45. package/.agent-src/commands/optimize-agents.md +139 -0
  46. package/.agent-src/commands/optimize-augmentignore.md +262 -0
  47. package/.agent-src/commands/optimize-rtk-filters.md +120 -0
  48. package/.agent-src/commands/optimize-skills.md +121 -0
  49. package/.agent-src/commands/override-create.md +97 -0
  50. package/.agent-src/commands/override-manage.md +96 -0
  51. package/.agent-src/commands/package-reset.md +154 -0
  52. package/.agent-src/commands/package-test.md +154 -0
  53. package/.agent-src/commands/prepare-for-review.md +91 -0
  54. package/.agent-src/commands/project-analyze.md +300 -0
  55. package/.agent-src/commands/project-health.md +95 -0
  56. package/.agent-src/commands/propose-memory.md +108 -0
  57. package/.agent-src/commands/quality-fix.md +106 -0
  58. package/.agent-src/commands/refine-ticket.md +81 -0
  59. package/.agent-src/commands/review-changes.md +130 -0
  60. package/.agent-src/commands/review-routing.md +111 -0
  61. package/.agent-src/commands/roadmap-create.md +110 -0
  62. package/.agent-src/commands/roadmap-execute.md +68 -0
  63. package/.agent-src/commands/rule-compliance-audit.md +139 -0
  64. package/.agent-src/commands/tests-create.md +73 -0
  65. package/.agent-src/commands/tests-execute.md +58 -0
  66. package/.agent-src/commands/threat-model.md +115 -0
  67. package/.agent-src/commands/update-form-request-messages.md +189 -0
  68. package/.agent-src/commands/upstream-contribute.md +171 -0
  69. package/.agent-src/contexts/augment-infrastructure.md +181 -0
  70. package/.agent-src/contexts/documentation-hierarchy.md +142 -0
  71. package/.agent-src/contexts/model-recommendations.md +142 -0
  72. package/.agent-src/contexts/override-system.md +187 -0
  73. package/.agent-src/contexts/skills-and-commands.md +154 -0
  74. package/.agent-src/contexts/subagent-configuration.md +62 -0
  75. package/.agent-src/guidelines/agent-infra/agent-interaction-and-decision-quality.md +110 -0
  76. package/.agent-src/guidelines/agent-infra/break-glass-usage.md +113 -0
  77. package/.agent-src/guidelines/agent-infra/developer-judgment.md +82 -0
  78. package/.agent-src/guidelines/agent-infra/engineering-memory-data-format.md +117 -0
  79. package/.agent-src/guidelines/agent-infra/layered-settings.md +158 -0
  80. package/.agent-src/guidelines/agent-infra/memory-access.md +121 -0
  81. package/.agent-src/guidelines/agent-infra/naming.md +69 -0
  82. package/.agent-src/guidelines/agent-infra/output-patterns.md +117 -0
  83. package/.agent-src/guidelines/agent-infra/review-routing-data-format.md +144 -0
  84. package/.agent-src/guidelines/agent-infra/role-contracts.md +211 -0
  85. package/.agent-src/guidelines/agent-infra/role-mode-router.md +89 -0
  86. package/.agent-src/guidelines/agent-infra/runtime-layer.md +89 -0
  87. package/.agent-src/guidelines/agent-infra/self-improvement-pipeline.md +135 -0
  88. package/.agent-src/guidelines/agent-infra/size-and-scope.md +189 -0
  89. package/.agent-src/guidelines/agent-infra/tool-integration.md +73 -0
  90. package/.agent-src/guidelines/docs/readme-size-and-splitting.md +153 -0
  91. package/.agent-src/guidelines/e2e/playwright.md +363 -0
  92. package/.agent-src/guidelines/php/api-design.md +115 -0
  93. package/.agent-src/guidelines/php/artisan-commands.md +81 -0
  94. package/.agent-src/guidelines/php/blade-ui.md +78 -0
  95. package/.agent-src/guidelines/php/controllers.md +90 -0
  96. package/.agent-src/guidelines/php/database.md +111 -0
  97. package/.agent-src/guidelines/php/eloquent.md +208 -0
  98. package/.agent-src/guidelines/php/flux.md +80 -0
  99. package/.agent-src/guidelines/php/general.md +191 -0
  100. package/.agent-src/guidelines/php/git.md +96 -0
  101. package/.agent-src/guidelines/php/jobs.md +111 -0
  102. package/.agent-src/guidelines/php/livewire.md +71 -0
  103. package/.agent-src/guidelines/php/logging.md +79 -0
  104. package/.agent-src/guidelines/php/naming.md +89 -0
  105. package/.agent-src/guidelines/php/patterns/dependency-injection.md +57 -0
  106. package/.agent-src/guidelines/php/patterns/dtos.md +199 -0
  107. package/.agent-src/guidelines/php/patterns/events.md +67 -0
  108. package/.agent-src/guidelines/php/patterns/factory.md +53 -0
  109. package/.agent-src/guidelines/php/patterns/pipelines.md +66 -0
  110. package/.agent-src/guidelines/php/patterns/policies.md +66 -0
  111. package/.agent-src/guidelines/php/patterns/repositories.md +122 -0
  112. package/.agent-src/guidelines/php/patterns/service-layer.md +64 -0
  113. package/.agent-src/guidelines/php/patterns/strategy.md +69 -0
  114. package/.agent-src/guidelines/php/patterns.md +28 -0
  115. package/.agent-src/guidelines/php/performance.md +92 -0
  116. package/.agent-src/guidelines/php/resources.md +100 -0
  117. package/.agent-src/guidelines/php/security.md +110 -0
  118. package/.agent-src/guidelines/php/sql.md +97 -0
  119. package/.agent-src/guidelines/php/validations.md +119 -0
  120. package/.agent-src/guidelines/php/websocket.md +100 -0
  121. package/.agent-src/personas/README.md +104 -0
  122. package/.agent-src/personas/ai-agent.md +77 -0
  123. package/.agent-src/personas/critical-challenger.md +73 -0
  124. package/.agent-src/personas/developer.md +73 -0
  125. package/.agent-src/personas/product-owner.md +78 -0
  126. package/.agent-src/personas/qa.md +67 -0
  127. package/.agent-src/personas/senior-engineer.md +77 -0
  128. package/.agent-src/personas/stakeholder.md +78 -0
  129. package/.agent-src/rules/agent-docs.md +61 -0
  130. package/.agent-src/rules/analysis-skill-routing.md +48 -0
  131. package/.agent-src/rules/architecture.md +62 -0
  132. package/.agent-src/rules/artifact-drafting-protocol.md +73 -0
  133. package/.agent-src/rules/ask-when-uncertain.md +52 -0
  134. package/.agent-src/rules/augment-portability.md +38 -0
  135. package/.agent-src/rules/augment-source-of-truth.md +128 -0
  136. package/.agent-src/rules/capture-learnings.md +89 -0
  137. package/.agent-src/rules/cli-output-handling.md +94 -0
  138. package/.agent-src/rules/commit-conventions.md +64 -0
  139. package/.agent-src/rules/context-hygiene.md +90 -0
  140. package/.agent-src/rules/docker-commands.md +55 -0
  141. package/.agent-src/rules/docs-sync.md +79 -0
  142. package/.agent-src/rules/downstream-changes.md +70 -0
  143. package/.agent-src/rules/e2e-testing.md +53 -0
  144. package/.agent-src/rules/guidelines.md +90 -0
  145. package/.agent-src/rules/improve-before-implement.md +94 -0
  146. package/.agent-src/rules/language-and-tone.md +104 -0
  147. package/.agent-src/rules/laravel-translations.md +48 -0
  148. package/.agent-src/rules/markdown-safe-codeblocks.md +18 -0
  149. package/.agent-src/rules/minimal-safe-diff.md +87 -0
  150. package/.agent-src/rules/missing-tool-handling.md +62 -0
  151. package/.agent-src/rules/model-recommendation.md +70 -0
  152. package/.agent-src/rules/package-ci-checks.md +80 -0
  153. package/.agent-src/rules/php-coding.md +63 -0
  154. package/.agent-src/rules/preservation-guard.md +29 -0
  155. package/.agent-src/rules/review-routing-awareness.md +125 -0
  156. package/.agent-src/rules/reviewer-awareness.md +92 -0
  157. package/.agent-src/rules/roadmap-progress-sync.md +56 -0
  158. package/.agent-src/rules/role-mode-adherence.md +54 -0
  159. package/.agent-src/rules/rule-type-governance.md +46 -0
  160. package/.agent-src/rules/runtime-safety.md +42 -0
  161. package/.agent-src/rules/scope-control.md +40 -0
  162. package/.agent-src/rules/security-sensitive-stop.md +77 -0
  163. package/.agent-src/rules/size-enforcement.md +29 -0
  164. package/.agent-src/rules/skill-improvement-trigger.md +58 -0
  165. package/.agent-src/rules/skill-quality.md +110 -0
  166. package/.agent-src/rules/slash-commands.md +30 -0
  167. package/.agent-src/rules/think-before-action.md +91 -0
  168. package/.agent-src/rules/token-efficiency.md +99 -0
  169. package/.agent-src/rules/tool-safety.md +36 -0
  170. package/.agent-src/rules/upstream-proposal.md +76 -0
  171. package/.agent-src/rules/user-interaction.md +79 -0
  172. package/.agent-src/rules/verify-before-complete.md +120 -0
  173. package/.agent-src/scripts/scan-seeder-violations.php +145 -0
  174. package/.agent-src/scripts/update_roadmap_progress.py +244 -0
  175. package/.agent-src/skills/adversarial-review/SKILL.md +149 -0
  176. package/.agent-src/skills/agent-docs-writing/SKILL.md +234 -0
  177. package/.agent-src/skills/analysis-autonomous-mode/SKILL.md +197 -0
  178. package/.agent-src/skills/analysis-skill-router/SKILL.md +134 -0
  179. package/.agent-src/skills/api-design/SKILL.md +104 -0
  180. package/.agent-src/skills/api-endpoint/SKILL.md +185 -0
  181. package/.agent-src/skills/api-testing/SKILL.md +206 -0
  182. package/.agent-src/skills/artisan-commands/SKILL.md +78 -0
  183. package/.agent-src/skills/authz-review/SKILL.md +171 -0
  184. package/.agent-src/skills/aws-infrastructure/SKILL.md +152 -0
  185. package/.agent-src/skills/blade-ui/SKILL.md +75 -0
  186. package/.agent-src/skills/blast-radius-analyzer/SKILL.md +185 -0
  187. package/.agent-src/skills/bug-analyzer/SKILL.md +256 -0
  188. package/.agent-src/skills/check-refs/SKILL.md +72 -0
  189. package/.agent-src/skills/code-refactoring/SKILL.md +200 -0
  190. package/.agent-src/skills/code-review/SKILL.md +214 -0
  191. package/.agent-src/skills/command-routing/SKILL.md +96 -0
  192. package/.agent-src/skills/command-writing/SKILL.md +143 -0
  193. package/.agent-src/skills/composer-packages/SKILL.md +172 -0
  194. package/.agent-src/skills/context-authoring/SKILL.md +157 -0
  195. package/.agent-src/skills/context-document/SKILL.md +153 -0
  196. package/.agent-src/skills/conventional-commits-writing/SKILL.md +70 -0
  197. package/.agent-src/skills/copilot-agents-optimization/SKILL.md +220 -0
  198. package/.agent-src/skills/copilot-config/SKILL.md +203 -0
  199. package/.agent-src/skills/dashboard-design/SKILL.md +116 -0
  200. package/.agent-src/skills/data-flow-mapper/SKILL.md +160 -0
  201. package/.agent-src/skills/database/SKILL.md +91 -0
  202. package/.agent-src/skills/dependency-upgrade/SKILL.md +204 -0
  203. package/.agent-src/skills/description-assist/SKILL.md +169 -0
  204. package/.agent-src/skills/design-review/SKILL.md +228 -0
  205. package/.agent-src/skills/devcontainer/SKILL.md +121 -0
  206. package/.agent-src/skills/developer-like-execution/SKILL.md +276 -0
  207. package/.agent-src/skills/docker/SKILL.md +245 -0
  208. package/.agent-src/skills/dto-creator/SKILL.md +117 -0
  209. package/.agent-src/skills/eloquent/SKILL.md +92 -0
  210. package/.agent-src/skills/eloquent/evals/last-run.json +99 -0
  211. package/.agent-src/skills/eloquent/evals/triggers.json +16 -0
  212. package/.agent-src/skills/estimate-ticket/SKILL.md +186 -0
  213. package/.agent-src/skills/estimate-ticket/evals/output-schema.yml +20 -0
  214. package/.agent-src/skills/estimate-ticket/evals/triggers.json +18 -0
  215. package/.agent-src/skills/fe-design/SKILL.md +223 -0
  216. package/.agent-src/skills/feature-planning/SKILL.md +226 -0
  217. package/.agent-src/skills/file-editor/SKILL.md +129 -0
  218. package/.agent-src/skills/finishing-a-development-branch/SKILL.md +200 -0
  219. package/.agent-src/skills/flux/SKILL.md +64 -0
  220. package/.agent-src/skills/git-workflow/SKILL.md +102 -0
  221. package/.agent-src/skills/github-ci/SKILL.md +122 -0
  222. package/.agent-src/skills/grafana/SKILL.md +168 -0
  223. package/.agent-src/skills/guideline-writing/SKILL.md +147 -0
  224. package/.agent-src/skills/jira-integration/SKILL.md +182 -0
  225. package/.agent-src/skills/jobs-events/SKILL.md +87 -0
  226. package/.agent-src/skills/judge-bug-hunter/SKILL.md +157 -0
  227. package/.agent-src/skills/judge-code-quality/SKILL.md +158 -0
  228. package/.agent-src/skills/judge-security-auditor/SKILL.md +167 -0
  229. package/.agent-src/skills/judge-test-coverage/SKILL.md +154 -0
  230. package/.agent-src/skills/laravel/SKILL.md +195 -0
  231. package/.agent-src/skills/laravel-horizon/SKILL.md +169 -0
  232. package/.agent-src/skills/laravel-mail/SKILL.md +193 -0
  233. package/.agent-src/skills/laravel-middleware/SKILL.md +185 -0
  234. package/.agent-src/skills/laravel-notifications/SKILL.md +168 -0
  235. package/.agent-src/skills/laravel-pennant/SKILL.md +188 -0
  236. package/.agent-src/skills/laravel-pulse/SKILL.md +160 -0
  237. package/.agent-src/skills/laravel-reverb/SKILL.md +205 -0
  238. package/.agent-src/skills/laravel-scheduling/SKILL.md +167 -0
  239. package/.agent-src/skills/laravel-validation/SKILL.md +71 -0
  240. package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +249 -0
  241. package/.agent-src/skills/lint-skills/SKILL.md +72 -0
  242. package/.agent-src/skills/livewire/SKILL.md +79 -0
  243. package/.agent-src/skills/logging-monitoring/SKILL.md +100 -0
  244. package/.agent-src/skills/mcp/SKILL.md +193 -0
  245. package/.agent-src/skills/merge-conflicts/SKILL.md +158 -0
  246. package/.agent-src/skills/migration-creator/SKILL.md +160 -0
  247. package/.agent-src/skills/module-management/SKILL.md +154 -0
  248. package/.agent-src/skills/multi-tenancy/SKILL.md +129 -0
  249. package/.agent-src/skills/openapi/SKILL.md +154 -0
  250. package/.agent-src/skills/override-management/SKILL.md +186 -0
  251. package/.agent-src/skills/performance/SKILL.md +69 -0
  252. package/.agent-src/skills/performance-analysis/SKILL.md +118 -0
  253. package/.agent-src/skills/pest-testing/SKILL.md +321 -0
  254. package/.agent-src/skills/php-coder/SKILL.md +78 -0
  255. package/.agent-src/skills/php-coder/evals/triggers.json +16 -0
  256. package/.agent-src/skills/php-debugging/SKILL.md +184 -0
  257. package/.agent-src/skills/php-service/SKILL.md +96 -0
  258. package/.agent-src/skills/playwright-testing/SKILL.md +244 -0
  259. package/.agent-src/skills/project-analysis-core/SKILL.md +138 -0
  260. package/.agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +130 -0
  261. package/.agent-src/skills/project-analysis-laravel/SKILL.md +119 -0
  262. package/.agent-src/skills/project-analysis-nextjs/SKILL.md +123 -0
  263. package/.agent-src/skills/project-analysis-node-express/SKILL.md +111 -0
  264. package/.agent-src/skills/project-analysis-react/SKILL.md +119 -0
  265. package/.agent-src/skills/project-analysis-symfony/SKILL.md +111 -0
  266. package/.agent-src/skills/project-analysis-zend-laminas/SKILL.md +108 -0
  267. package/.agent-src/skills/project-analyzer/SKILL.md +341 -0
  268. package/.agent-src/skills/project-docs/SKILL.md +137 -0
  269. package/.agent-src/skills/quality-tools/SKILL.md +411 -0
  270. package/.agent-src/skills/readme-reviewer/SKILL.md +187 -0
  271. package/.agent-src/skills/readme-writing/SKILL.md +142 -0
  272. package/.agent-src/skills/readme-writing-package/SKILL.md +185 -0
  273. package/.agent-src/skills/receiving-code-review/SKILL.md +190 -0
  274. package/.agent-src/skills/refine-ticket/SKILL.md +310 -0
  275. package/.agent-src/skills/refine-ticket/detection-map.yml +124 -0
  276. package/.agent-src/skills/refine-ticket/evals/output-schema.yml +16 -0
  277. package/.agent-src/skills/refine-ticket/evals/triggers.json +16 -0
  278. package/.agent-src/skills/requesting-code-review/SKILL.md +199 -0
  279. package/.agent-src/skills/review-routing/SKILL.md +195 -0
  280. package/.agent-src/skills/roadmap-management/SKILL.md +303 -0
  281. package/.agent-src/skills/rtk-output-filtering/SKILL.md +184 -0
  282. package/.agent-src/skills/rule-writing/SKILL.md +148 -0
  283. package/.agent-src/skills/security/SKILL.md +79 -0
  284. package/.agent-src/skills/security-audit/SKILL.md +123 -0
  285. package/.agent-src/skills/sentry-integration/SKILL.md +170 -0
  286. package/.agent-src/skills/sequential-thinking/SKILL.md +158 -0
  287. package/.agent-src/skills/skill-improvement-pipeline/SKILL.md +155 -0
  288. package/.agent-src/skills/skill-management/SKILL.md +121 -0
  289. package/.agent-src/skills/skill-reviewer/SKILL.md +218 -0
  290. package/.agent-src/skills/skill-writing/SKILL.md +291 -0
  291. package/.agent-src/skills/skill-writing/evals/triggers.json +16 -0
  292. package/.agent-src/skills/sql-writing/SKILL.md +74 -0
  293. package/.agent-src/skills/subagent-orchestration/SKILL.md +190 -0
  294. package/.agent-src/skills/systematic-debugging/SKILL.md +244 -0
  295. package/.agent-src/skills/technical-specification/SKILL.md +185 -0
  296. package/.agent-src/skills/terraform/SKILL.md +137 -0
  297. package/.agent-src/skills/terragrunt/SKILL.md +217 -0
  298. package/.agent-src/skills/test-driven-development/SKILL.md +252 -0
  299. package/.agent-src/skills/test-performance/SKILL.md +172 -0
  300. package/.agent-src/skills/threat-modeling/SKILL.md +189 -0
  301. package/.agent-src/skills/traefik/SKILL.md +319 -0
  302. package/.agent-src/skills/universal-project-analysis/SKILL.md +179 -0
  303. package/.agent-src/skills/upstream-contribute/SKILL.md +255 -0
  304. package/.agent-src/skills/using-git-worktrees/SKILL.md +148 -0
  305. package/.agent-src/skills/validate-feature-fit/SKILL.md +113 -0
  306. package/.agent-src/skills/verify-before-complete/SKILL.md +188 -0
  307. package/.agent-src/skills/websocket/SKILL.md +75 -0
  308. package/.agent-src/templates/AGENTS.md +146 -0
  309. package/.agent-src/templates/agent-settings.md +256 -0
  310. package/.agent-src/templates/agents/.gitattributes.fragment +16 -0
  311. package/.agent-src/templates/agents/agent-project-settings.example.yml +138 -0
  312. package/.agent-src/templates/agents/memory/architecture-decisions.example.yml +95 -0
  313. package/.agent-src/templates/agents/memory/domain-invariants.example.yml +80 -0
  314. package/.agent-src/templates/agents/memory/historical-patterns.example.yml +82 -0
  315. package/.agent-src/templates/agents/memory/incident-learnings.example.yml +113 -0
  316. package/.agent-src/templates/agents/memory/ownership.example.yml +75 -0
  317. package/.agent-src/templates/agents/memory/product-rules.example.yml +87 -0
  318. package/.agent-src/templates/agents/proposal.example.md +143 -0
  319. package/.agent-src/templates/command.md +84 -0
  320. package/.agent-src/templates/contexts/auth-model.md +59 -0
  321. package/.agent-src/templates/contexts/data-sensitivity.md +60 -0
  322. package/.agent-src/templates/contexts/deployment-order.md +72 -0
  323. package/.agent-src/templates/contexts/observability.md +64 -0
  324. package/.agent-src/templates/contexts/tenant-boundaries.md +68 -0
  325. package/.agent-src/templates/contexts.md +116 -0
  326. package/.agent-src/templates/copilot-instructions.md +115 -0
  327. package/.agent-src/templates/features.md +125 -0
  328. package/.agent-src/templates/github-workflows/memory-hygiene.yml +133 -0
  329. package/.agent-src/templates/github-workflows/pr-risk-review.yml +123 -0
  330. package/.agent-src/templates/github-workflows/proposal-drift.yml +118 -0
  331. package/.agent-src/templates/overrides/command.md +24 -0
  332. package/.agent-src/templates/overrides/guideline.md +21 -0
  333. package/.agent-src/templates/overrides/rule.md +19 -0
  334. package/.agent-src/templates/overrides/skill.md +24 -0
  335. package/.agent-src/templates/overrides/template.md +21 -0
  336. package/.agent-src/templates/persona.md +99 -0
  337. package/.agent-src/templates/roadmaps.md +109 -0
  338. package/.agent-src/templates/scripts/README.md +195 -0
  339. package/.agent-src/templates/scripts/check_memory.py +283 -0
  340. package/.agent-src/templates/scripts/check_memory_proposal.py +180 -0
  341. package/.agent-src/templates/scripts/historical-bug-patterns.example.yml +84 -0
  342. package/.agent-src/templates/scripts/implement_ticket/__init__.py +57 -0
  343. package/.agent-src/templates/scripts/implement_ticket/__main__.py +9 -0
  344. package/.agent-src/templates/scripts/implement_ticket/cli.py +171 -0
  345. package/.agent-src/templates/scripts/implement_ticket/delivery_state.py +130 -0
  346. package/.agent-src/templates/scripts/implement_ticket/dispatcher.py +134 -0
  347. package/.agent-src/templates/scripts/implement_ticket/persona_policy.py +85 -0
  348. package/.agent-src/templates/scripts/implement_ticket/steps/__init__.py +49 -0
  349. package/.agent-src/templates/scripts/implement_ticket/steps/analyze.py +98 -0
  350. package/.agent-src/templates/scripts/implement_ticket/steps/implement.py +145 -0
  351. package/.agent-src/templates/scripts/implement_ticket/steps/memory.py +136 -0
  352. package/.agent-src/templates/scripts/implement_ticket/steps/plan.py +175 -0
  353. package/.agent-src/templates/scripts/implement_ticket/steps/refine.py +140 -0
  354. package/.agent-src/templates/scripts/implement_ticket/steps/report.py +195 -0
  355. package/.agent-src/templates/scripts/implement_ticket/steps/test.py +180 -0
  356. package/.agent-src/templates/scripts/implement_ticket/steps/verify.py +170 -0
  357. package/.agent-src/templates/scripts/memory_hash.py +75 -0
  358. package/.agent-src/templates/scripts/memory_lookup.py +216 -0
  359. package/.agent-src/templates/scripts/memory_report.py +184 -0
  360. package/.agent-src/templates/scripts/memory_signal.py +167 -0
  361. package/.agent-src/templates/scripts/memory_status.py +156 -0
  362. package/.agent-src/templates/scripts/ownership-map.example.yml +87 -0
  363. package/.agent-src/templates/scripts/pr-risk-config.example.yml +76 -0
  364. package/.agent-src/templates/scripts/pr_review_routing.py +340 -0
  365. package/.agent-src/templates/scripts/pr_risk_review.py +211 -0
  366. package/.agent-src/templates/skill.md +136 -0
  367. package/.augment-plugin/marketplace.json +32 -0
  368. package/.augment-plugin/plugin.json +21 -0
  369. package/.claude-plugin/marketplace.json +119 -0
  370. package/AGENTS.md +121 -0
  371. package/CHANGELOG.md +279 -0
  372. package/CONTRIBUTING.md +176 -0
  373. package/LICENSE +21 -0
  374. package/README.md +357 -0
  375. package/bin/install.php +38 -0
  376. package/composer.json +29 -0
  377. package/config/agent-settings.template.yml +96 -0
  378. package/config/profiles/balanced.ini +10 -0
  379. package/config/profiles/full.ini +10 -0
  380. package/config/profiles/minimal.ini +10 -0
  381. package/docs/architecture.md +144 -0
  382. package/docs/customization.md +88 -0
  383. package/docs/development.md +171 -0
  384. package/docs/getting-started.md +130 -0
  385. package/docs/github-topics.md +84 -0
  386. package/docs/installation.md +376 -0
  387. package/docs/mcp.md +133 -0
  388. package/docs/quality.md +98 -0
  389. package/docs/skills-catalog.md +136 -0
  390. package/docs/troubleshooting.md +167 -0
  391. package/llms.txt +130 -0
  392. package/package.json +31 -0
  393. package/scripts/audit_skill_descriptions.py +168 -0
  394. package/scripts/check_compression.py +221 -0
  395. package/scripts/check_memory.py +341 -0
  396. package/scripts/check_memory_proposal.py +180 -0
  397. package/scripts/check_portability.py +320 -0
  398. package/scripts/check_proposal.py +269 -0
  399. package/scripts/check_references.py +400 -0
  400. package/scripts/ci_summary.py +131 -0
  401. package/scripts/compress.py +671 -0
  402. package/scripts/compress.sh +18 -0
  403. package/scripts/first-run.sh +109 -0
  404. package/scripts/generate_catalog.py +116 -0
  405. package/scripts/install +151 -0
  406. package/scripts/install-hooks.sh +29 -0
  407. package/scripts/install.py +487 -0
  408. package/scripts/install.sh +637 -0
  409. package/scripts/install_anthropic_key.sh +101 -0
  410. package/scripts/inventory_frontmatter.py +164 -0
  411. package/scripts/lint_marketplace.py +142 -0
  412. package/scripts/lint_regression.py +232 -0
  413. package/scripts/mcp_render.py +159 -0
  414. package/scripts/measure_patterns.py +376 -0
  415. package/scripts/memory_hash.py +75 -0
  416. package/scripts/memory_lookup.py +441 -0
  417. package/scripts/memory_report.py +336 -0
  418. package/scripts/memory_signal.py +210 -0
  419. package/scripts/memory_status.py +195 -0
  420. package/scripts/postinstall.sh +60 -0
  421. package/scripts/readme_linter.py +580 -0
  422. package/scripts/refine_ticket_detect.py +623 -0
  423. package/scripts/requirements-evals.txt +7 -0
  424. package/scripts/runtime_dispatcher.py +265 -0
  425. package/scripts/runtime_handler.py +148 -0
  426. package/scripts/runtime_registry.py +166 -0
  427. package/scripts/schemas/command.schema.json +32 -0
  428. package/scripts/schemas/persona.schema.json +42 -0
  429. package/scripts/schemas/rule.schema.json +28 -0
  430. package/scripts/schemas/skill.schema.json +73 -0
  431. package/scripts/setup.sh +230 -0
  432. package/scripts/setup_eval_venv.sh +58 -0
  433. package/scripts/skill_linter.py +2175 -0
  434. package/scripts/skill_trigger_eval.py +651 -0
  435. package/scripts/tool_registry.py +146 -0
  436. package/scripts/tools/__init__.py +1 -0
  437. package/scripts/tools/adapter_errors.py +63 -0
  438. package/scripts/tools/base_adapter.py +91 -0
  439. package/scripts/tools/github_adapter.py +128 -0
  440. package/scripts/tools/jira_adapter.py +115 -0
  441. package/scripts/update_counts.py +147 -0
  442. package/scripts/validate_frontmatter.py +424 -0
  443. package/templates/consumer-settings/README.md +46 -0
  444. package/templates/consumer-settings/augment-settings.json +12 -0
  445. package/templates/consumer-settings/claude-settings.json +9 -0
  446. 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 "$@"