@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,109 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ SETTINGS_FILE=".agent-settings.yml"
5
+ LEGACY_SETTINGS_FILE=".agent-settings"
6
+
7
+ echo ""
8
+ echo "========================================"
9
+ echo " Agent Config — First Run"
10
+ echo "========================================"
11
+ echo ""
12
+
13
+ # --- Profile detection ---
14
+ # The YAML format stores `cost_profile` as a top-level scalar:
15
+ # cost_profile: minimal
16
+ # It may be unquoted or double-quoted after migration. We strip both.
17
+ read_cost_profile() {
18
+ local file="$1"
19
+ grep -E '^cost_profile:' "$file" 2>/dev/null \
20
+ | head -n1 \
21
+ | sed -E 's/^cost_profile:[[:space:]]*//' \
22
+ | sed -E 's/^"(.*)"$/\1/' \
23
+ | sed -E "s/^'(.*)'\$/\\1/" \
24
+ | tr -d '[:space:]'
25
+ }
26
+
27
+ if [ -f "$SETTINGS_FILE" ]; then
28
+ echo "✅ Found $SETTINGS_FILE"
29
+ echo ""
30
+ CURRENT_PROFILE=$(read_cost_profile "$SETTINGS_FILE" || true)
31
+
32
+ if [ -n "${CURRENT_PROFILE:-}" ]; then
33
+ echo "Active cost_profile: $CURRENT_PROFILE"
34
+ else
35
+ echo "No cost_profile configured yet."
36
+ echo ""
37
+ echo "Recommended: add this to $SETTINGS_FILE:"
38
+ echo ""
39
+ echo " cost_profile: minimal"
40
+ fi
41
+ elif [ -f "$LEGACY_SETTINGS_FILE" ]; then
42
+ echo "⚠️ Found legacy $LEGACY_SETTINGS_FILE (key=value format)."
43
+ echo ""
44
+ echo " Run 'scripts/install' (or 'php vendor/bin/install.php') to migrate"
45
+ echo " it to $SETTINGS_FILE automatically."
46
+ echo ""
47
+ else
48
+ echo "❌ No $SETTINGS_FILE found."
49
+ echo ""
50
+ echo "Create one with:"
51
+ echo ""
52
+ echo " cost_profile: minimal"
53
+ echo ""
54
+ fi
55
+
56
+ # --- What this gives you ---
57
+ echo ""
58
+ echo "What this gives you:"
59
+ echo " ✅ Analysis before implementation"
60
+ echo " ✅ Clarification instead of guessing"
61
+ echo " ✅ Alignment with your existing codebase"
62
+ echo " ✅ Zero token overhead in minimal mode"
63
+ echo ""
64
+
65
+ # --- 3 test prompts ---
66
+ echo "========================================"
67
+ echo " Try these 3 prompts now"
68
+ echo "========================================"
69
+ echo ""
70
+
71
+ echo "1️⃣ Refactoring check"
72
+ echo ' Ask your agent: "Refactor this function"'
73
+ echo ""
74
+ echo " Watch for:"
75
+ echo " → Agent analyzes BEFORE coding"
76
+ echo " → Agent does NOT jump directly into a rewrite"
77
+ echo ""
78
+
79
+ echo "2️⃣ Ambiguity check"
80
+ echo ' Ask your agent: "Add caching to this"'
81
+ echo ""
82
+ echo " Watch for:"
83
+ echo " → Agent asks targeted questions"
84
+ echo " → Agent does NOT guess what you mean"
85
+ echo ""
86
+
87
+ echo "3️⃣ Feature-fit check"
88
+ echo ' Ask your agent: "Implement this feature"'
89
+ echo ""
90
+ echo " Watch for:"
91
+ echo " → Agent considers your existing codebase"
92
+ echo " → Agent avoids conflicting patterns"
93
+ echo " → Agent challenges weak requirements"
94
+ echo ""
95
+
96
+ # --- Next steps ---
97
+ echo "========================================"
98
+ echo " Next steps"
99
+ echo "========================================"
100
+ echo ""
101
+ echo "Cost profiles:"
102
+ echo " minimal rules, skills, commands only"
103
+ echo " balanced + runtime dispatcher"
104
+ echo " full + experimental read-only tool adapters"
105
+ echo ""
106
+ echo "Change profile: edit cost_profile: <name> in $SETTINGS_FILE"
107
+ echo "Profile details: docs/customization.md"
108
+ echo "Getting started: docs/getting-started.md"
109
+ echo ""
@@ -0,0 +1,116 @@
1
+ #!/usr/bin/env python3
2
+ """Generate llms.txt and docs/skills-catalog.md from SKILL.md frontmatter.
3
+
4
+ Reads name + description from each `.agent-src/skills/*/SKILL.md` and writes:
5
+
6
+ - `llms.txt` — machine-readable index (plain text)
7
+ - `docs/skills-catalog.md` — human-readable catalog (markdown)
8
+
9
+ Idempotent. Safe to re-run. Sort order: alphabetical by skill name.
10
+
11
+ Usage:
12
+ python3 scripts/generate_catalog.py
13
+ """
14
+
15
+ from __future__ import annotations
16
+
17
+ import re
18
+ from pathlib import Path
19
+
20
+ REPO_ROOT = Path(__file__).resolve().parent.parent
21
+ SKILLS_DIR = REPO_ROOT / ".agent-src" / "skills"
22
+ LLMS_TXT = REPO_ROOT / "llms.txt"
23
+ CATALOG_MD = REPO_ROOT / "docs" / "skills-catalog.md"
24
+
25
+ FRONTMATTER_RE = re.compile(r"^---\s*\n(.*?)\n---", re.DOTALL)
26
+ NAME_RE = re.compile(r"^name:\s*(.+?)\s*$", re.MULTILINE)
27
+ DESC_RE = re.compile(r"^description:\s*\"?(.+?)\"?\s*$", re.MULTILINE)
28
+
29
+
30
+ def parse_skill(skill_md: Path) -> tuple[str, str] | None:
31
+ text = skill_md.read_text(encoding="utf-8")
32
+ m = FRONTMATTER_RE.match(text)
33
+ if not m:
34
+ return None
35
+ front = m.group(1)
36
+ name_m = NAME_RE.search(front)
37
+ desc_m = DESC_RE.search(front)
38
+ if not name_m or not desc_m:
39
+ return None
40
+ return name_m.group(1).strip(), desc_m.group(1).strip()
41
+
42
+
43
+ def collect_skills() -> list[tuple[str, str]]:
44
+ skills = []
45
+ for skill_dir in sorted(SKILLS_DIR.iterdir()):
46
+ if not skill_dir.is_dir():
47
+ continue
48
+ skill_md = skill_dir / "SKILL.md"
49
+ if not skill_md.exists():
50
+ continue
51
+ parsed = parse_skill(skill_md)
52
+ if parsed is not None:
53
+ skills.append(parsed)
54
+ return skills
55
+
56
+
57
+ def render_llms_txt(skills: list[tuple[str, str]]) -> str:
58
+ lines = [
59
+ "# agent-config — Skill Index",
60
+ "",
61
+ "Machine-readable index of all skills in this package. Each line:",
62
+ " <skill-name>: <one-line description>",
63
+ "",
64
+ "Source: .agent-src/skills/<name>/SKILL.md",
65
+ "Catalog: docs/skills-catalog.md",
66
+ "",
67
+ ]
68
+ for name, desc in skills:
69
+ lines.append(f"{name}: {desc}")
70
+ lines.append("")
71
+ return "\n".join(lines)
72
+
73
+
74
+ def render_catalog_md(skills: list[tuple[str, str]]) -> str:
75
+ lines = [
76
+ "# Skills Catalog",
77
+ "",
78
+ f"All **{len(skills)} skills** available in this package, in alphabetical order.",
79
+ "Click a skill name to open its SKILL.md and read the full guidance.",
80
+ "",
81
+ "> **Regenerate:** `python3 scripts/generate_catalog.py`",
82
+ "> This file is auto-generated from `SKILL.md` frontmatter — do not edit manually.",
83
+ "",
84
+ "| Skill | What your agent learns |",
85
+ "|---|---|",
86
+ ]
87
+ for name, desc in skills:
88
+ lines.append(f"| [`{name}`](../.agent-src/skills/{name}/SKILL.md) | {desc} |")
89
+ lines.append("")
90
+ lines.append("---")
91
+ lines.append("")
92
+ lines.append("← [Back to README](../README.md)")
93
+ lines.append("")
94
+ return "\n".join(lines)
95
+
96
+
97
+ def main() -> int:
98
+ if not SKILLS_DIR.exists():
99
+ print(f"❌ Skills directory not found: {SKILLS_DIR}")
100
+ return 1
101
+ skills = collect_skills()
102
+ if not skills:
103
+ print("❌ No skills found.")
104
+ return 1
105
+
106
+ LLMS_TXT.write_text(render_llms_txt(skills), encoding="utf-8")
107
+ CATALOG_MD.parent.mkdir(parents=True, exist_ok=True)
108
+ CATALOG_MD.write_text(render_catalog_md(skills), encoding="utf-8")
109
+
110
+ print(f"✅ Wrote {LLMS_TXT.relative_to(REPO_ROOT)} ({len(skills)} skills)")
111
+ print(f"✅ Wrote {CATALOG_MD.relative_to(REPO_ROOT)}")
112
+ return 0
113
+
114
+
115
+ if __name__ == "__main__":
116
+ raise SystemExit(main())
@@ -0,0 +1,151 @@
1
+ #!/usr/bin/env bash
2
+ # install — Primary entry point for agent-config installation.
3
+ #
4
+ # Orchestrates the two stages:
5
+ # 1. scripts/install.sh — payload sync (copy rules, symlink skills/commands)
6
+ # 2. scripts/install.py — bridge files (.agent-settings, VSCode/Augment JSONs)
7
+ #
8
+ # This is the only installer a consumer needs to invoke. The underlying
9
+ # scripts remain callable directly for advanced use; see their --help.
10
+ #
11
+ # Usage:
12
+ # bash scripts/install [OPTIONS]
13
+ #
14
+ # Options:
15
+ # --source <dir> Package source directory (default: auto-detect)
16
+ # --target <dir> Target project root (default: cwd)
17
+ # --profile <name> Cost profile for bridges (minimal|balanced|full)
18
+ # --force Overwrite existing bridge files
19
+ # --dry-run Show what payload sync would do (does not run bridges)
20
+ # --verbose Detailed payload sync output
21
+ # --quiet Suppress non-error output
22
+ # --skip-sync Skip payload sync (install.sh)
23
+ # --skip-bridges Skip bridge files (install.py)
24
+ # --help, -h Show this help
25
+
26
+ set -uo pipefail
27
+
28
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
29
+ INSTALL_SH="$SCRIPT_DIR/install.sh"
30
+ INSTALL_PY="$SCRIPT_DIR/install.py"
31
+
32
+ SOURCE_DIR=""
33
+ TARGET_DIR=""
34
+ PROFILE=""
35
+ FORCE=false
36
+ DRY_RUN=false
37
+ VERBOSE=false
38
+ QUIET=false
39
+ SKIP_SYNC=false
40
+ SKIP_BRIDGES=false
41
+
42
+ show_help() {
43
+ sed -n '3,25p' "${BASH_SOURCE[0]}" | sed 's/^# \{0,1\}//'
44
+ }
45
+
46
+ err() { echo " ❌ $*" >&2; }
47
+
48
+ while [[ $# -gt 0 ]]; do
49
+ case "$1" in
50
+ --source) SOURCE_DIR="$2"; shift 2 ;;
51
+ --source=*) SOURCE_DIR="${1#*=}"; shift ;;
52
+ --target) TARGET_DIR="$2"; shift 2 ;;
53
+ --target=*) TARGET_DIR="${1#*=}"; shift ;;
54
+ --profile) PROFILE="$2"; shift 2 ;;
55
+ --profile=*) PROFILE="${1#*=}"; shift ;;
56
+ --force) FORCE=true; shift ;;
57
+ --dry-run) DRY_RUN=true; shift ;;
58
+ --verbose) VERBOSE=true; shift ;;
59
+ --quiet) QUIET=true; shift ;;
60
+ --skip-sync) SKIP_SYNC=true; shift ;;
61
+ --skip-bridges) SKIP_BRIDGES=true; shift ;;
62
+ --help|-h) show_help; exit 0 ;;
63
+ *) err "Unknown argument: $1"; show_help >&2; exit 1 ;;
64
+ esac
65
+ done
66
+
67
+ # Auto-detect source: directory above this script
68
+ if [[ -z "$SOURCE_DIR" ]]; then
69
+ SOURCE_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
70
+ fi
71
+
72
+ # Auto-detect target: PROJECT_ROOT env, or derive from vendor/node_modules path, else cwd
73
+ if [[ -z "$TARGET_DIR" ]]; then
74
+ if [[ -n "${PROJECT_ROOT:-}" ]]; then
75
+ TARGET_DIR="$PROJECT_ROOT"
76
+ elif [[ "$SOURCE_DIR" == */vendor/event4u/agent-config ]]; then
77
+ TARGET_DIR="$(cd "$SOURCE_DIR/../../.." && pwd)"
78
+ elif [[ "$SOURCE_DIR" == */node_modules/@event4u/agent-config ]]; then
79
+ TARGET_DIR="$(cd "$SOURCE_DIR/../../.." && pwd)"
80
+ elif [[ "$SOURCE_DIR" == */node_modules/*/agent-config ]]; then
81
+ TARGET_DIR="$(cd "$SOURCE_DIR/../../.." && pwd)"
82
+ else
83
+ TARGET_DIR="$(pwd)"
84
+ fi
85
+ fi
86
+
87
+ # Find python3 for the bridges stage (optional until SKIP_BRIDGES=false)
88
+ find_python() {
89
+ local candidate path
90
+ for candidate in python3 python; do
91
+ path="$(command -v "$candidate" 2>/dev/null || true)"
92
+ [[ -z "$path" ]] && continue
93
+ if "$path" -c 'import sys; exit(0 if sys.version_info[0] >= 3 else 1)' 2>/dev/null; then
94
+ echo "$path"
95
+ return 0
96
+ fi
97
+ done
98
+ return 1
99
+ }
100
+
101
+ run_sync() {
102
+ local args=(--source "$SOURCE_DIR" --target "$TARGET_DIR")
103
+ $DRY_RUN && args+=(--dry-run)
104
+ $VERBOSE && args+=(--verbose)
105
+ $QUIET && args+=(--quiet)
106
+ bash "$INSTALL_SH" "${args[@]}"
107
+ }
108
+
109
+ run_bridges() {
110
+ local python_bin
111
+ if ! python_bin="$(find_python)"; then
112
+ $QUIET || echo " ⚠️ Python 3 not found — skipping .agent-settings and bridge files." >&2
113
+ $QUIET || echo " Install python3 and re-run: bash scripts/install --skip-sync" >&2
114
+ return 0
115
+ fi
116
+
117
+ if $DRY_RUN; then
118
+ $QUIET || echo " ⏭️ Skipping bridges (--dry-run)"
119
+ return 0
120
+ fi
121
+
122
+ local args=(--project "$TARGET_DIR" --package "$SOURCE_DIR")
123
+ [[ -n "$PROFILE" ]] && args+=(--profile="$PROFILE")
124
+ $FORCE && args+=(--force)
125
+ $QUIET && args+=(--quiet)
126
+ "$python_bin" "$INSTALL_PY" "${args[@]}"
127
+ }
128
+
129
+ RC=0
130
+ if ! $SKIP_SYNC; then
131
+ if [[ ! -f "$INSTALL_SH" ]]; then
132
+ err "Missing $INSTALL_SH"
133
+ exit 1
134
+ fi
135
+ run_sync || RC=$?
136
+ fi
137
+
138
+ if [[ $RC -ne 0 ]]; then
139
+ err "Payload sync failed (exit $RC); skipping bridges."
140
+ exit $RC
141
+ fi
142
+
143
+ if ! $SKIP_BRIDGES; then
144
+ if [[ ! -f "$INSTALL_PY" ]]; then
145
+ err "Missing $INSTALL_PY"
146
+ exit 1
147
+ fi
148
+ run_bridges || RC=$?
149
+ fi
150
+
151
+ exit $RC
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env bash
2
+ # Install git hooks for this repository.
3
+ # Run once: bash scripts/install-hooks.sh
4
+
5
+ set -euo pipefail
6
+
7
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8
+ PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
9
+ HOOKS_DIR="$PROJECT_ROOT/.git/hooks"
10
+
11
+ mkdir -p "$HOOKS_DIR"
12
+
13
+ cat > "$HOOKS_DIR/pre-push" << 'EOF'
14
+ #!/usr/bin/env bash
15
+ # Pre-push hook: verify .agent-src/ is in sync with .agent-src.uncompressed/
16
+
17
+ echo "🔍 Checking .agent-src/ sync..."
18
+ python3 scripts/compress.py --check
19
+
20
+ if [ $? -ne 0 ]; then
21
+ echo ""
22
+ echo "❌ Push blocked — .agent-src/ is out of sync."
23
+ echo " Run 'task sync' and compress changed .md files, then commit."
24
+ exit 1
25
+ fi
26
+ EOF
27
+
28
+ chmod +x "$HOOKS_DIR/pre-push"
29
+ echo "✅ Pre-push hook installed."