@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,487 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Agent Config — Project Bridge Installer (Python)
4
+
5
+ Generates project bridge files (.agent-settings.yml, .vscode/settings.json,
6
+ etc.) so that supported AI tools can discover agent-config from the project.
7
+
8
+ On first run in a project that still has the legacy flat-file
9
+ `.agent-settings` (key=value), the installer migrates it to the new YAML
10
+ format in `.agent-settings.yml`, leaves a one-shot backup as
11
+ `.agent-settings.backup.key-value`, and deletes the legacy file. This runs
12
+ exactly once; subsequent runs are idempotent.
13
+
14
+ Usage:
15
+ python3 scripts/install.py # defaults: cost_profile=minimal
16
+ python3 scripts/install.py --profile=balanced # set cost_profile=balanced
17
+ python3 scripts/install.py --force # overwrite existing files
18
+ python3 scripts/install.py --skip-bridges # only create .agent-settings.yml
19
+ python3 scripts/install.py --project <dir> # override project root
20
+
21
+ Idempotent — safe to run multiple times. Never overwrites files without --force.
22
+ Zero dependencies — standard library only.
23
+ """
24
+
25
+ from __future__ import annotations
26
+
27
+ import argparse
28
+ import copy
29
+ import json
30
+ import os
31
+ import re
32
+ import sys
33
+ from pathlib import Path
34
+
35
+ DEFAULT_PROFILE = "minimal"
36
+ SUPPORTED_PROFILES = ("minimal", "balanced", "full")
37
+ COST_PROFILE_PLACEHOLDER = "__COST_PROFILE__"
38
+
39
+ SETTINGS_FILE = ".agent-settings.yml"
40
+ LEGACY_SETTINGS_FILE = ".agent-settings"
41
+ LEGACY_BACKUP_FILE = ".agent-settings.backup.key-value"
42
+
43
+ # Maps legacy flat keys (.agent-settings, key=value) to the new dotted YAML
44
+ # paths in .agent-settings.yml. Applied once during auto-migration.
45
+ LEGACY_RENAME_MAP = {
46
+ "cost_profile": "cost_profile",
47
+ "ide": "personal.ide",
48
+ "open_edited_files": "personal.open_edited_files",
49
+ "user_name": "personal.user_name",
50
+ "rtk_installed": "personal.rtk_installed",
51
+ "minimal_output": "personal.minimal_output",
52
+ "play_by_play": "personal.play_by_play",
53
+ "pr_comment_bot_icon": "project.pr_comment_bot_icon",
54
+ "pr_template": "project.pr_template",
55
+ "upstream_repo": "project.upstream_repo",
56
+ "improvement_pr_branch_prefix": "project.improvement_pr_branch_prefix",
57
+ "github_pr_reply_method": "github.pr_reply_method",
58
+ "eloquent_access_style": "eloquent.access_style",
59
+ "skill_improvement_pipeline": "pipelines.skill_improvement",
60
+ "subagent_implementer_model": "subagents.implementer_model",
61
+ "subagent_judge_model": "subagents.judge_model",
62
+ "subagent_max_parallel": "subagents.max_parallel",
63
+ }
64
+
65
+
66
+ # --- Output helpers ---
67
+
68
+ QUIET = False
69
+
70
+
71
+ def info(msg: str) -> None:
72
+ if not QUIET:
73
+ print(f" {msg}")
74
+
75
+
76
+ def success(msg: str) -> None:
77
+ if not QUIET:
78
+ print(f" ✅ {msg}")
79
+
80
+
81
+ def skip(msg: str) -> None:
82
+ if not QUIET:
83
+ print(f" ⏭️ {msg}")
84
+
85
+
86
+ def warn(msg: str) -> None:
87
+ print(f" ⚠️ {msg}", file=sys.stderr)
88
+
89
+
90
+ def fail(msg: str) -> "None":
91
+ print(f" ❌ {msg}", file=sys.stderr)
92
+ sys.exit(1)
93
+
94
+
95
+ # --- Package detection ---
96
+
97
+ def detect_package_root(project_root: Path) -> Path:
98
+ candidates = [
99
+ project_root / "vendor" / "event4u" / "agent-config",
100
+ project_root / "node_modules" / "@event4u" / "agent-config",
101
+ ]
102
+ for path in candidates:
103
+ if path.is_dir():
104
+ return path.resolve()
105
+
106
+ # Running from within the package itself (development mode)
107
+ if (project_root / "config" / "profiles" / "minimal.ini").exists():
108
+ return project_root
109
+
110
+ fail("Could not find agent-config package. Run from a project with composer/npm install.")
111
+ return project_root # unreachable
112
+
113
+
114
+ def detect_package_type(package_root: Path) -> str:
115
+ parts = package_root.parts
116
+ if "vendor" in parts:
117
+ return "composer"
118
+ if "node_modules" in parts:
119
+ return "npm"
120
+ return "local"
121
+
122
+
123
+ def detect_package_type_for_project(project_root: Path, package_root: Path) -> str:
124
+ """Determine package type based on where the package lives relative to the project."""
125
+ composer_path = (project_root / "vendor" / "event4u" / "agent-config").resolve()
126
+ npm_path = (project_root / "node_modules" / "@event4u" / "agent-config").resolve()
127
+ package_resolved = package_root.resolve()
128
+
129
+ if package_resolved == composer_path or composer_path.exists():
130
+ if package_resolved == composer_path:
131
+ return "composer"
132
+ if package_resolved == npm_path or npm_path.exists():
133
+ if package_resolved == npm_path:
134
+ return "npm"
135
+ return detect_package_type(package_root)
136
+
137
+
138
+ # --- File utilities ---
139
+
140
+ def ensure_directory(path: Path) -> None:
141
+ path.mkdir(parents=True, exist_ok=True)
142
+
143
+
144
+ def write_file(path: Path, content: str) -> None:
145
+ ensure_directory(path.parent)
146
+ path.write_text(content, encoding="utf-8")
147
+
148
+
149
+ def read_json_file(path: Path) -> dict:
150
+ try:
151
+ data = json.loads(path.read_text(encoding="utf-8"))
152
+ except json.JSONDecodeError:
153
+ warn(f"Invalid JSON in {path}, treating as empty")
154
+ return {}
155
+ if not isinstance(data, dict):
156
+ warn(f"Unexpected JSON shape in {path}, treating as empty")
157
+ return {}
158
+ return data
159
+
160
+
161
+ def write_json_file(path: Path, data: dict) -> None:
162
+ content = json.dumps(data, indent=4, ensure_ascii=False) + "\n"
163
+ write_file(path, content)
164
+
165
+
166
+ def deep_merge(base: dict, overlay: dict) -> dict:
167
+ """Recursive dict merge — overlay wins, nested dicts are merged, lists are replaced."""
168
+ result = copy.deepcopy(base)
169
+ for key, value in overlay.items():
170
+ if key in result and isinstance(result[key], dict) and isinstance(value, dict):
171
+ result[key] = deep_merge(result[key], value)
172
+ else:
173
+ result[key] = copy.deepcopy(value)
174
+ return result
175
+
176
+
177
+ def merge_json_file(path: Path, new_data: dict, force: bool, label: str) -> None:
178
+ if not path.exists():
179
+ write_json_file(path, new_data)
180
+ success(f"{label} created")
181
+ return
182
+
183
+ existing = read_json_file(path)
184
+ merged = deep_merge(existing, new_data)
185
+
186
+ if merged == existing:
187
+ skip(f"{label} already configured")
188
+ return
189
+
190
+ if not force:
191
+ skip(f"{label} exists, needs update (use --force)")
192
+ return
193
+
194
+ write_json_file(path, merged)
195
+ success(f"{label} updated")
196
+
197
+
198
+ # --- Legacy settings migration ---
199
+
200
+ def _parse_legacy_settings(text: str) -> "tuple[dict, list]":
201
+ """Parse a legacy .agent-settings (key=value) file.
202
+
203
+ Returns (values, unknown) where values is a dict mapping legacy flat
204
+ keys to string values, and unknown is a list of keys NOT in
205
+ LEGACY_RENAME_MAP (preserved under `_legacy:` after migration).
206
+ """
207
+ values: dict = {}
208
+ unknown: list = []
209
+ for raw in text.splitlines():
210
+ line = raw.strip()
211
+ if not line or line.startswith("#"):
212
+ continue
213
+ if "=" not in line:
214
+ continue
215
+ key, _, value = line.partition("=")
216
+ key = key.strip()
217
+ value = value.strip()
218
+ if not key:
219
+ continue
220
+ values[key] = value
221
+ if key not in LEGACY_RENAME_MAP:
222
+ unknown.append(key)
223
+ return values, unknown
224
+
225
+
226
+ def _yaml_scalar(value: str) -> str:
227
+ """Format a string value as a YAML scalar with minimal quoting.
228
+
229
+ Booleans and non-negative integers are emitted unquoted; everything
230
+ else is double-quoted so the migrated file is unambiguous.
231
+ """
232
+ if value == "":
233
+ return '""'
234
+ if value in ("true", "false"):
235
+ return value
236
+ if value.isdigit():
237
+ return value
238
+ # Escape backslashes and double-quotes, then wrap
239
+ escaped = value.replace("\\", "\\\\").replace('"', '\\"')
240
+ return f'"{escaped}"'
241
+
242
+
243
+ def _replace_template_value(template: str, dotted_path: str, value: str) -> str:
244
+ """Replace the default value for a dotted-path key in the YAML template.
245
+
246
+ Strategy: walk the template lines, track the current top-level
247
+ section, and replace the first matching line. Comments and indentation
248
+ are preserved.
249
+ """
250
+ parts = dotted_path.split(".")
251
+ if len(parts) == 1:
252
+ section, key = None, parts[0]
253
+ elif len(parts) == 2:
254
+ section, key = parts[0], parts[1]
255
+ else:
256
+ return template # deeper nesting not supported in current schema
257
+
258
+ lines = template.splitlines()
259
+ current_section: "str | None" = None
260
+ section_re = re.compile(r"^([A-Za-z_][A-Za-z0-9_]*):\s*$")
261
+ scalar_top_re = re.compile(r"^([A-Za-z_][A-Za-z0-9_]*):\s*.*$")
262
+ scalar_sub_re = re.compile(r"^(\s+)([A-Za-z_][A-Za-z0-9_]*):\s*.*$")
263
+
264
+ replacement = _yaml_scalar(value)
265
+ for idx, line in enumerate(lines):
266
+ # Top-level section header
267
+ m_section = section_re.match(line)
268
+ if m_section:
269
+ current_section = m_section.group(1)
270
+ continue
271
+ if section is None:
272
+ # Top-level scalar target
273
+ m_top = scalar_top_re.match(line)
274
+ if m_top and m_top.group(1) == key and not line.startswith((" ", "\t")):
275
+ lines[idx] = f"{key}: {replacement}"
276
+ return "\n".join(lines) + ("\n" if template.endswith("\n") else "")
277
+ else:
278
+ if current_section != section:
279
+ continue
280
+ m_sub = scalar_sub_re.match(line)
281
+ if m_sub and m_sub.group(2) == key:
282
+ indent = m_sub.group(1)
283
+ lines[idx] = f"{indent}{key}: {replacement}"
284
+ return "\n".join(lines) + ("\n" if template.endswith("\n") else "")
285
+ return template
286
+
287
+
288
+ def _append_unknown_legacy(rendered: str, legacy_values: dict, unknown_keys: list) -> str:
289
+ if not unknown_keys:
290
+ return rendered
291
+ block = [
292
+ "",
293
+ "# Unknown keys from the legacy .agent-settings — review and drop.",
294
+ "_legacy:",
295
+ ]
296
+ for key in sorted(unknown_keys):
297
+ block.append(f" {key}: {_yaml_scalar(legacy_values[key])}")
298
+ suffix = "\n".join(block) + "\n"
299
+ if rendered.endswith("\n"):
300
+ return rendered + suffix
301
+ return rendered + "\n" + suffix
302
+
303
+
304
+ def _migrate_legacy_if_present(project_root: Path, template_body: str) -> "str | None":
305
+ """If a legacy .agent-settings exists, migrate it and return the new
306
+ YAML body. Returns None if no legacy file exists."""
307
+ legacy_target = project_root / LEGACY_SETTINGS_FILE
308
+ if not legacy_target.is_file():
309
+ return None
310
+
311
+ legacy_text = legacy_target.read_text(encoding="utf-8")
312
+ values, unknown = _parse_legacy_settings(legacy_text)
313
+
314
+ rendered = template_body
315
+ for flat_key, value in values.items():
316
+ if flat_key in LEGACY_RENAME_MAP:
317
+ rendered = _replace_template_value(rendered, LEGACY_RENAME_MAP[flat_key], value)
318
+ rendered = _append_unknown_legacy(rendered, values, unknown)
319
+
320
+ backup_target = project_root / LEGACY_BACKUP_FILE
321
+ backup_target.write_text(legacy_text, encoding="utf-8")
322
+ legacy_target.unlink()
323
+
324
+ info(f"Migrated legacy {LEGACY_SETTINGS_FILE} → {SETTINGS_FILE}")
325
+ info(f"Backup saved to {LEGACY_BACKUP_FILE}")
326
+ if unknown:
327
+ warn(f"Legacy keys not in rename map preserved under _legacy: {', '.join(sorted(unknown))}")
328
+ return rendered
329
+
330
+
331
+ # --- Bridge generators ---
332
+
333
+ def ensure_agent_settings(project_root: Path, package_root: Path, profile: str, force: bool) -> None:
334
+ target = project_root / SETTINGS_FILE
335
+ profile_source = package_root / "config" / "profiles" / f"{profile}.ini"
336
+ template_source = package_root / "config" / "agent-settings.template.yml"
337
+
338
+ if not profile_source.exists():
339
+ fail(f"Missing profile preset: {profile_source}")
340
+ if not template_source.exists():
341
+ fail(f"Missing settings template: {template_source}")
342
+
343
+ template = template_source.read_text(encoding="utf-8")
344
+ if COST_PROFILE_PLACEHOLDER not in template:
345
+ fail(f"Template is missing placeholder {COST_PROFILE_PLACEHOLDER}")
346
+ template_body = template.replace(COST_PROFILE_PLACEHOLDER, profile)
347
+
348
+ legacy_target = project_root / LEGACY_SETTINGS_FILE
349
+ if legacy_target.is_file() and target.exists():
350
+ warn(
351
+ f"Both {SETTINGS_FILE} and legacy {LEGACY_SETTINGS_FILE} exist. "
352
+ f"Skipping migration to avoid overwriting {SETTINGS_FILE}. "
353
+ f"Delete one of them manually and re-run."
354
+ )
355
+ return
356
+
357
+ migrated = _migrate_legacy_if_present(project_root, template_body)
358
+ if migrated is not None:
359
+ write_file(target, migrated)
360
+ success(f"{SETTINGS_FILE} migrated from legacy key=value")
361
+ return
362
+
363
+ if target.exists() and not force:
364
+ skip(f"{SETTINGS_FILE} already exists")
365
+ return
366
+
367
+ write_file(target, template_body)
368
+ success(f"{SETTINGS_FILE} created (cost_profile={profile})")
369
+
370
+
371
+ def ensure_vscode_bridge(project_root: Path, package_type: str, force: bool) -> None:
372
+ plugin_paths = {
373
+ "composer": "./vendor/event4u/agent-config/plugin/agent-config",
374
+ "npm": "./node_modules/@event4u/agent-config/plugin/agent-config",
375
+ }
376
+ plugin_path = plugin_paths.get(package_type, "./plugin/agent-config")
377
+
378
+ bridge = {"chat.pluginLocations": {plugin_path: True}}
379
+ merge_json_file(project_root / ".vscode" / "settings.json", bridge, force, ".vscode/settings.json")
380
+
381
+
382
+ def ensure_augment_bridge(project_root: Path, force: bool) -> None:
383
+ bridge = {"enabledPlugins": {"agent-config@event4u": True}}
384
+ merge_json_file(project_root / ".augment" / "settings.json", bridge, force, ".augment/settings.json")
385
+
386
+
387
+ def ensure_copilot_bridge(project_root: Path, force: bool) -> None:
388
+ target = project_root / ".github" / "plugin" / "marketplace.json"
389
+
390
+ bridge = {
391
+ "marketplace": {
392
+ "name": "event4u-agent-marketplace",
393
+ "plugins": [
394
+ {
395
+ "id": "agent-config@event4u",
396
+ "repository": "https://github.com/event4u-app/agent-config",
397
+ },
398
+ ],
399
+ },
400
+ }
401
+
402
+ if target.exists() and not force:
403
+ skip(".github/plugin/marketplace.json already exists")
404
+ return
405
+
406
+ write_json_file(target, bridge)
407
+ success(".github/plugin/marketplace.json created")
408
+
409
+
410
+ # --- Argument parsing ---
411
+
412
+ def parse_options(argv: list[str]) -> argparse.Namespace:
413
+ parser = argparse.ArgumentParser(
414
+ prog="install.py",
415
+ description="Agent Config — Project Bridge Installer",
416
+ add_help=True,
417
+ )
418
+ parser.add_argument(
419
+ "--profile",
420
+ default=DEFAULT_PROFILE,
421
+ help=f"cost_profile value ({'|'.join(SUPPORTED_PROFILES)}, default: {DEFAULT_PROFILE})",
422
+ )
423
+ parser.add_argument("--force", action="store_true", help="overwrite existing files")
424
+ parser.add_argument("--skip-bridges", action="store_true", help="only create .agent-settings.yml")
425
+ parser.add_argument("--project", default=None, help="project root (default: cwd or PROJECT_ROOT env)")
426
+ parser.add_argument("--package", default=None, help="package root (default: auto-detect under project)")
427
+ parser.add_argument("--quiet", action="store_true", help="suppress info/success output (warnings/errors still shown)")
428
+ return parser.parse_args(argv)
429
+
430
+
431
+ # --- Main ---
432
+
433
+ def main(argv: list[str]) -> int:
434
+ global QUIET
435
+
436
+ opts = parse_options(argv)
437
+ QUIET = opts.quiet
438
+
439
+ if opts.profile not in SUPPORTED_PROFILES:
440
+ fail(f"Unsupported profile: {opts.profile}. Supported: {', '.join(SUPPORTED_PROFILES)}")
441
+
442
+ project_root = Path(opts.project or os.environ.get("PROJECT_ROOT") or os.getcwd()).resolve()
443
+
444
+ if opts.package:
445
+ package_root = Path(opts.package).resolve()
446
+ if not (package_root / "config" / "profiles" / "minimal.ini").exists():
447
+ fail(f"Invalid --package path (missing config/profiles/minimal.ini): {package_root}")
448
+ package_type = detect_package_type_for_project(project_root, package_root)
449
+ else:
450
+ package_root = detect_package_root(project_root)
451
+ package_type = detect_package_type(package_root)
452
+
453
+ if not QUIET:
454
+ print()
455
+ info("Agent Config — Project Bridge Installer")
456
+ info(f"Project: {project_root}")
457
+ info(f"Package: {package_root}")
458
+ info(f"Type: {package_type}")
459
+ info(f"Profile: {opts.profile}")
460
+ print()
461
+
462
+ ensure_agent_settings(project_root, package_root, opts.profile, opts.force)
463
+
464
+ if not opts.skip_bridges:
465
+ ensure_vscode_bridge(project_root, package_type, opts.force)
466
+ ensure_augment_bridge(project_root, opts.force)
467
+ ensure_copilot_bridge(project_root, opts.force)
468
+
469
+ if not QUIET:
470
+ print()
471
+ success("Done.")
472
+ print()
473
+ print(" Try these 3 prompts with your agent:")
474
+ print(' 1. "Refactor this function" → agent analyzes first')
475
+ print(' 2. "Add caching to this" → agent asks instead of guessing')
476
+ print(' 3. "Implement this feature" → agent respects your codebase')
477
+ print()
478
+ print(" Next steps:")
479
+ print(" • Commit .agent-settings.yml and bridge files to your repo")
480
+ print(" • New team members just run composer install / npm install — done")
481
+ print(" • Full walkthrough: https://github.com/event4u-app/agent-config/blob/main/docs/getting-started.md")
482
+ print()
483
+ return 0
484
+
485
+
486
+ if __name__ == "__main__":
487
+ sys.exit(main(sys.argv[1:]))