@synapta/skills 0.1.1 → 0.2.0

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 (354) hide show
  1. package/dist/index.js +11 -4
  2. package/package.json +3 -4
  3. package/skills/ATTRIBUTION.md +80 -0
  4. package/skills/accessibility-audit/SKILL.md +325 -0
  5. package/skills/accessibility-audit/reference/wcag-checklist.md +103 -0
  6. package/skills/apns-notifier/SKILL.md +86 -0
  7. package/skills/approval-policy-enforcer/SKILL.md +66 -0
  8. package/skills/apps-sdk-builder/LICENSE.txt +201 -0
  9. package/skills/apps-sdk-builder/SKILL.md +328 -0
  10. package/skills/apps-sdk-builder/agents/openai.yaml +13 -0
  11. package/skills/apps-sdk-builder/references/app-archetypes.md +132 -0
  12. package/skills/apps-sdk-builder/references/apps-sdk-docs-workflow.md +135 -0
  13. package/skills/apps-sdk-builder/references/interactive-state-sync-patterns.md +113 -0
  14. package/skills/apps-sdk-builder/references/repo-contract-and-validation.md +93 -0
  15. package/skills/apps-sdk-builder/references/search-fetch-standard.md +67 -0
  16. package/skills/apps-sdk-builder/references/upstream-example-workflow.md +79 -0
  17. package/skills/apps-sdk-builder/references/window-openai-patterns.md +79 -0
  18. package/skills/apps-sdk-builder/scripts/scaffold_node_ext_apps.mjs +606 -0
  19. package/skills/architecture-selector/SKILL.md +64 -0
  20. package/skills/backlog-planner/SKILL.md +68 -0
  21. package/skills/carplay-entitlement-checker/SKILL.md +82 -0
  22. package/skills/concept-deepener/SKILL.md +86 -0
  23. package/skills/concept-discovery/SKILL.md +517 -0
  24. package/skills/concept-discovery/assets/sample-analysis.json +81 -0
  25. package/skills/concept-discovery/expected_outputs/sample-enum-dictionary.md +25 -0
  26. package/skills/concept-discovery/expected_outputs/sample-page-user-list.md +83 -0
  27. package/skills/concept-discovery/expected_outputs/sample-prd-readme.md +43 -0
  28. package/skills/concept-discovery/references/framework-patterns.md +228 -0
  29. package/skills/concept-discovery/references/prd-quality-checklist.md +65 -0
  30. package/skills/concept-discovery/scripts/codebase_analyzer.py +732 -0
  31. package/skills/concept-discovery/scripts/prd_scaffolder.py +435 -0
  32. package/skills/dast-zap/SKILL.md +453 -0
  33. package/skills/dast-zap/assets/.gitkeep +9 -0
  34. package/skills/dast-zap/assets/github_action.yml +207 -0
  35. package/skills/dast-zap/assets/gitlab_ci.yml +226 -0
  36. package/skills/dast-zap/assets/zap_automation.yaml +196 -0
  37. package/skills/dast-zap/assets/zap_context.xml +192 -0
  38. package/skills/dast-zap/references/EXAMPLE.md +40 -0
  39. package/skills/dast-zap/references/api_testing_guide.md +475 -0
  40. package/skills/dast-zap/references/authentication_guide.md +431 -0
  41. package/skills/dast-zap/references/false_positive_handling.md +427 -0
  42. package/skills/dast-zap/references/owasp_mapping.md +255 -0
  43. package/skills/dep-sbom-scan/SKILL.md +466 -0
  44. package/skills/deploy-cloudflare/SKILL.md +930 -0
  45. package/skills/deploy-docker/SKILL.md +55 -0
  46. package/skills/deploy-fly/SKILL.md +228 -0
  47. package/skills/deploy-k8s/SKILL.md +108 -0
  48. package/skills/deploy-k8s/assets/logo.png +0 -0
  49. package/skills/deploy-k8s/docs/README.md +29 -0
  50. package/skills/deploy-k8s/docs/SUMMARY.md +56 -0
  51. package/skills/deploy-k8s/docs/advanced/token-efficiency.md +61 -0
  52. package/skills/deploy-k8s/docs/architecture/multi-tenancy.md +96 -0
  53. package/skills/deploy-k8s/docs/architecture/storage-and-state.md +102 -0
  54. package/skills/deploy-k8s/docs/architecture/workload-patterns.md +87 -0
  55. package/skills/deploy-k8s/docs/book.json +16 -0
  56. package/skills/deploy-k8s/docs/community/changelog.md +34 -0
  57. package/skills/deploy-k8s/docs/community/contributing.md +67 -0
  58. package/skills/deploy-k8s/docs/core-concepts/failure-modes.md +153 -0
  59. package/skills/deploy-k8s/docs/core-concepts/philosophy.md +83 -0
  60. package/skills/deploy-k8s/docs/core-concepts/workflow.md +124 -0
  61. package/skills/deploy-k8s/docs/examples/bad-patterns.md +47 -0
  62. package/skills/deploy-k8s/docs/examples/do-dont-checklist.md +37 -0
  63. package/skills/deploy-k8s/docs/examples/good-patterns.md +49 -0
  64. package/skills/deploy-k8s/docs/failure-modes/api-drift.md +104 -0
  65. package/skills/deploy-k8s/docs/failure-modes/fragile-rollouts.md +99 -0
  66. package/skills/deploy-k8s/docs/failure-modes/insecure-workload-defaults.md +80 -0
  67. package/skills/deploy-k8s/docs/failure-modes/network-exposure.md +98 -0
  68. package/skills/deploy-k8s/docs/failure-modes/privilege-sprawl.md +91 -0
  69. package/skills/deploy-k8s/docs/failure-modes/resource-starvation.md +85 -0
  70. package/skills/deploy-k8s/docs/getting-started/installation.md +152 -0
  71. package/skills/deploy-k8s/docs/getting-started/quick-start.md +115 -0
  72. package/skills/deploy-k8s/docs/guides/helm-patterns.md +71 -0
  73. package/skills/deploy-k8s/docs/guides/kustomize-patterns.md +65 -0
  74. package/skills/deploy-k8s/docs/guides/observability.md +67 -0
  75. package/skills/deploy-k8s/docs/guides/security-hardening.md +59 -0
  76. package/skills/deploy-k8s/docs/guides/validation-and-policy.md +66 -0
  77. package/skills/deploy-k8s/docs/integrations/mcp-integration.md +52 -0
  78. package/skills/deploy-k8s/docs/package-lock.json +2892 -0
  79. package/skills/deploy-k8s/docs/package.json +13 -0
  80. package/skills/deploy-k8s/references/api-drift.md +298 -0
  81. package/skills/deploy-k8s/references/conditional/aks-patterns.md +70 -0
  82. package/skills/deploy-k8s/references/conditional/eks-patterns.md +79 -0
  83. package/skills/deploy-k8s/references/conditional/gitops-controllers.md +71 -0
  84. package/skills/deploy-k8s/references/conditional/gke-patterns.md +74 -0
  85. package/skills/deploy-k8s/references/conditional/observability-stacks.md +80 -0
  86. package/skills/deploy-k8s/references/conditional/openshift-patterns.md +67 -0
  87. package/skills/deploy-k8s/references/daemonset-operator-patterns.md +155 -0
  88. package/skills/deploy-k8s/references/deployment-patterns.md +146 -0
  89. package/skills/deploy-k8s/references/do-dont-patterns.md +87 -0
  90. package/skills/deploy-k8s/references/examples-bad.md +282 -0
  91. package/skills/deploy-k8s/references/examples-good.md +440 -0
  92. package/skills/deploy-k8s/references/fragile-rollouts.md +303 -0
  93. package/skills/deploy-k8s/references/helm-patterns.md +203 -0
  94. package/skills/deploy-k8s/references/insecure-workload-defaults.md +300 -0
  95. package/skills/deploy-k8s/references/job-patterns.md +120 -0
  96. package/skills/deploy-k8s/references/kustomize-patterns.md +239 -0
  97. package/skills/deploy-k8s/references/multi-tenancy.md +343 -0
  98. package/skills/deploy-k8s/references/network-exposure.md +481 -0
  99. package/skills/deploy-k8s/references/observability.md +302 -0
  100. package/skills/deploy-k8s/references/privilege-sprawl.md +273 -0
  101. package/skills/deploy-k8s/references/resource-starvation.md +374 -0
  102. package/skills/deploy-k8s/references/security-hardening.md +209 -0
  103. package/skills/deploy-k8s/references/stateful-patterns.md +130 -0
  104. package/skills/deploy-k8s/references/storage-and-state.md +330 -0
  105. package/skills/deploy-k8s/references/validation-and-policy.md +242 -0
  106. package/skills/deploy-railway/SKILL.md +235 -0
  107. package/skills/deploy-railway/references/analyze-db-mongo.md +84 -0
  108. package/skills/deploy-railway/references/analyze-db-mysql.md +254 -0
  109. package/skills/deploy-railway/references/analyze-db-postgres.md +479 -0
  110. package/skills/deploy-railway/references/analyze-db-redis.md +208 -0
  111. package/skills/deploy-railway/references/analyze-db.md +344 -0
  112. package/skills/deploy-railway/references/configure.md +309 -0
  113. package/skills/deploy-railway/references/deploy.md +195 -0
  114. package/skills/deploy-railway/references/operate.md +214 -0
  115. package/skills/deploy-railway/references/request.md +248 -0
  116. package/skills/deploy-railway/references/setup.md +312 -0
  117. package/skills/deploy-railway/scripts/analyze-mongo.py +1549 -0
  118. package/skills/deploy-railway/scripts/analyze-mysql.py +1195 -0
  119. package/skills/deploy-railway/scripts/analyze-postgres.py +3058 -0
  120. package/skills/deploy-railway/scripts/analyze-redis.py +1090 -0
  121. package/skills/deploy-railway/scripts/dal.py +671 -0
  122. package/skills/deploy-railway/scripts/enable-pg-stats.py +170 -0
  123. package/skills/deploy-railway/scripts/pg-extensions.py +370 -0
  124. package/skills/deploy-railway/scripts/railway-api.sh +52 -0
  125. package/skills/deploy-ssh/SKILL.md +91 -0
  126. package/skills/deploy-vercel/SKILL.md +304 -0
  127. package/skills/deploy-vercel/resources/deploy-codex.sh +301 -0
  128. package/skills/deploy-vercel/resources/deploy.sh +301 -0
  129. package/skills/docs-runbooks/SKILL.md +399 -0
  130. package/skills/drive-status-renderer/SKILL.md +62 -0
  131. package/skills/iac-scan/SKILL.md +680 -0
  132. package/skills/iac-scan/assets/.gitkeep +9 -0
  133. package/skills/iac-scan/assets/checkov_config.yaml +94 -0
  134. package/skills/iac-scan/assets/github_actions.yml +199 -0
  135. package/skills/iac-scan/assets/gitlab_ci.yml +218 -0
  136. package/skills/iac-scan/assets/pre_commit_config.yaml +92 -0
  137. package/skills/iac-scan/references/EXAMPLE.md +40 -0
  138. package/skills/iac-scan/references/compliance_mapping.md +237 -0
  139. package/skills/iac-scan/references/custom_policies.md +460 -0
  140. package/skills/iac-scan/references/suppression_guide.md +431 -0
  141. package/skills/incident-briefing/SKILL.md +66 -0
  142. package/skills/incident-triage/SKILL.md +481 -0
  143. package/{LICENSE → skills/mcp-builder/LICENSE.txt} +15 -14
  144. package/skills/mcp-builder/SKILL.md +244 -0
  145. package/skills/mcp-builder/reference/evaluation.md +602 -0
  146. package/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
  147. package/skills/mcp-builder/reference/node_mcp_server.md +970 -0
  148. package/skills/mcp-builder/reference/python_mcp_server.md +719 -0
  149. package/skills/mcp-builder/scripts/connections.py +151 -0
  150. package/skills/mcp-builder/scripts/evaluation.py +373 -0
  151. package/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  152. package/skills/mcp-builder/scripts/requirements.txt +2 -0
  153. package/skills/mobile-pairing/SKILL.md +52 -0
  154. package/skills/ops-sre/SKILL.md +297 -0
  155. package/skills/playwright-qa/LICENSE.txt +201 -0
  156. package/skills/playwright-qa/NOTICE.txt +14 -0
  157. package/skills/playwright-qa/SKILL.md +156 -0
  158. package/skills/playwright-qa/agents/openai.yaml +6 -0
  159. package/skills/playwright-qa/assets/playwright-small.svg +3 -0
  160. package/skills/playwright-qa/assets/playwright.png +0 -0
  161. package/skills/playwright-qa/references/cli.md +116 -0
  162. package/skills/playwright-qa/references/workflows.md +95 -0
  163. package/skills/playwright-qa/scripts/playwright_cli.sh +25 -0
  164. package/skills/release-publish/SKILL.md +85 -0
  165. package/skills/repo-bootstrap/SKILL.md +92 -0
  166. package/skills/repo-bootstrap/assets/example-workflows/validate-agents.yml +89 -0
  167. package/skills/repo-bootstrap/assets/root-thin.md +141 -0
  168. package/skills/repo-bootstrap/assets/root-verbose.md +149 -0
  169. package/skills/repo-bootstrap/assets/scoped/backend-go.md +107 -0
  170. package/skills/repo-bootstrap/assets/scoped/backend-php.md +94 -0
  171. package/skills/repo-bootstrap/assets/scoped/backend-python.md +84 -0
  172. package/skills/repo-bootstrap/assets/scoped/backend-typescript.md +89 -0
  173. package/skills/repo-bootstrap/assets/scoped/claude-code-skill.md +101 -0
  174. package/skills/repo-bootstrap/assets/scoped/cli.md +83 -0
  175. package/skills/repo-bootstrap/assets/scoped/concourse.md +196 -0
  176. package/skills/repo-bootstrap/assets/scoped/ddev.md +68 -0
  177. package/skills/repo-bootstrap/assets/scoped/docker.md +160 -0
  178. package/skills/repo-bootstrap/assets/scoped/documentation.md +98 -0
  179. package/skills/repo-bootstrap/assets/scoped/examples.md +96 -0
  180. package/skills/repo-bootstrap/assets/scoped/frontend-typescript.md +88 -0
  181. package/skills/repo-bootstrap/assets/scoped/github-actions.md +174 -0
  182. package/skills/repo-bootstrap/assets/scoped/gitlab-ci.md +174 -0
  183. package/skills/repo-bootstrap/assets/scoped/oro-bundle.md +209 -0
  184. package/skills/repo-bootstrap/assets/scoped/oro-project.md +170 -0
  185. package/skills/repo-bootstrap/assets/scoped/python-modern.md +170 -0
  186. package/skills/repo-bootstrap/assets/scoped/resources.md +96 -0
  187. package/skills/repo-bootstrap/assets/scoped/skill-repo.md +139 -0
  188. package/skills/repo-bootstrap/assets/scoped/symfony.md +168 -0
  189. package/skills/repo-bootstrap/assets/scoped/testing.md +87 -0
  190. package/skills/repo-bootstrap/assets/scoped/typo3-docs.md +103 -0
  191. package/skills/repo-bootstrap/assets/scoped/typo3-extension.md +133 -0
  192. package/skills/repo-bootstrap/assets/scoped/typo3-project.md +137 -0
  193. package/skills/repo-bootstrap/assets/scoped/typo3-testing.md +80 -0
  194. package/skills/repo-bootstrap/checkpoints.yaml +279 -0
  195. package/skills/repo-bootstrap/evals/evals.json +385 -0
  196. package/skills/repo-bootstrap/references/ai-contribution-guidelines.md +63 -0
  197. package/skills/repo-bootstrap/references/ai-tool-compatibility.md +223 -0
  198. package/skills/repo-bootstrap/references/directory-coverage.md +82 -0
  199. package/skills/repo-bootstrap/references/examples/coding-agent-cli/AGENTS.md +70 -0
  200. package/skills/repo-bootstrap/references/examples/coding-agent-cli/go.mod +3 -0
  201. package/skills/repo-bootstrap/references/examples/coding-agent-cli/scripts-AGENTS.md +389 -0
  202. package/skills/repo-bootstrap/references/examples/express-api-ts/.env.example +13 -0
  203. package/skills/repo-bootstrap/references/examples/express-api-ts/AGENTS.md +91 -0
  204. package/skills/repo-bootstrap/references/examples/express-api-ts/package.json +33 -0
  205. package/skills/repo-bootstrap/references/examples/express-api-ts/pnpm-lock.yaml +3 -0
  206. package/skills/repo-bootstrap/references/examples/express-api-ts/src/AGENTS.md +91 -0
  207. package/skills/repo-bootstrap/references/examples/express-api-ts/src/config.ts +28 -0
  208. package/skills/repo-bootstrap/references/examples/express-api-ts/src/controllers/userController.ts +74 -0
  209. package/skills/repo-bootstrap/references/examples/express-api-ts/src/index.ts +26 -0
  210. package/skills/repo-bootstrap/references/examples/express-api-ts/src/middleware/errorHandler.ts +45 -0
  211. package/skills/repo-bootstrap/references/examples/express-api-ts/src/middleware/requestLogger.ts +18 -0
  212. package/skills/repo-bootstrap/references/examples/express-api-ts/src/routes/health.ts +18 -0
  213. package/skills/repo-bootstrap/references/examples/express-api-ts/src/routes/users.ts +13 -0
  214. package/skills/repo-bootstrap/references/examples/express-api-ts/src/utils/errors.ts +40 -0
  215. package/skills/repo-bootstrap/references/examples/express-api-ts/src/utils/logger.ts +14 -0
  216. package/skills/repo-bootstrap/references/examples/express-api-ts/tsconfig.json +24 -0
  217. package/skills/repo-bootstrap/references/examples/fastapi-app/.env.example +19 -0
  218. package/skills/repo-bootstrap/references/examples/fastapi-app/AGENTS.md +92 -0
  219. package/skills/repo-bootstrap/references/examples/fastapi-app/pyproject.toml +88 -0
  220. package/skills/repo-bootstrap/references/examples/fastapi-app/src/AGENTS.md +85 -0
  221. package/skills/repo-bootstrap/references/examples/fastapi-app/src/__init__.py +3 -0
  222. package/skills/repo-bootstrap/references/examples/fastapi-app/src/config.py +49 -0
  223. package/skills/repo-bootstrap/references/examples/fastapi-app/src/main.py +66 -0
  224. package/skills/repo-bootstrap/references/examples/fastapi-app/src/models/__init__.py +13 -0
  225. package/skills/repo-bootstrap/references/examples/fastapi-app/src/models/item.py +43 -0
  226. package/skills/repo-bootstrap/references/examples/fastapi-app/src/models/user.py +40 -0
  227. package/skills/repo-bootstrap/references/examples/fastapi-app/src/routes/__init__.py +5 -0
  228. package/skills/repo-bootstrap/references/examples/fastapi-app/src/routes/health.py +20 -0
  229. package/skills/repo-bootstrap/references/examples/fastapi-app/src/routes/items.py +61 -0
  230. package/skills/repo-bootstrap/references/examples/fastapi-app/src/routes/users.py +55 -0
  231. package/skills/repo-bootstrap/references/examples/fastapi-app/src/services/__init__.py +6 -0
  232. package/skills/repo-bootstrap/references/examples/fastapi-app/src/services/item_service.py +77 -0
  233. package/skills/repo-bootstrap/references/examples/fastapi-app/src/services/user_service.py +69 -0
  234. package/skills/repo-bootstrap/references/examples/fastapi-app/uv.lock +4 -0
  235. package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/.scopes +3 -0
  236. package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/AGENTS.md +86 -0
  237. package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/admin/package.json +20 -0
  238. package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/admin/src/App.tsx +5 -0
  239. package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/cmd/api/main.go +7 -0
  240. package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/go.mod +2 -0
  241. package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/main.go +7 -0
  242. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/.scopes +3 -0
  243. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/AGENTS.md +89 -0
  244. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/go.mod +2 -0
  245. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/AGENTS.md +90 -0
  246. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/package.json +17 -0
  247. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/src/App.tsx +1 -0
  248. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/src/Button.tsx +1 -0
  249. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/src/Footer.tsx +1 -0
  250. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/src/Header.tsx +1 -0
  251. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/src/Sidebar.tsx +1 -0
  252. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/main.go +7 -0
  253. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/package-lock.json +0 -0
  254. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/package.json +12 -0
  255. package/skills/repo-bootstrap/references/examples/ldap-selfservice/AGENTS.md +70 -0
  256. package/skills/repo-bootstrap/references/examples/ldap-selfservice/go.mod +3 -0
  257. package/skills/repo-bootstrap/references/examples/ldap-selfservice/internal-AGENTS.md +371 -0
  258. package/skills/repo-bootstrap/references/examples/ldap-selfservice/internal-web-AGENTS.md +448 -0
  259. package/skills/repo-bootstrap/references/examples/php-with-frontend/.scopes +3 -0
  260. package/skills/repo-bootstrap/references/examples/php-with-frontend/AGENTS.md +91 -0
  261. package/skills/repo-bootstrap/references/examples/php-with-frontend/composer.json +8 -0
  262. package/skills/repo-bootstrap/references/examples/php-with-frontend/package.json +15 -0
  263. package/skills/repo-bootstrap/references/examples/php-with-frontend/pnpm-lock.yaml +0 -0
  264. package/skills/repo-bootstrap/references/examples/php-with-frontend/src/Controller.php +3 -0
  265. package/skills/repo-bootstrap/references/examples/php-with-frontend/web/AGENTS.md +92 -0
  266. package/skills/repo-bootstrap/references/examples/php-with-frontend/web/package.json +26 -0
  267. package/skills/repo-bootstrap/references/examples/php-with-frontend/web/src/App.tsx +3 -0
  268. package/skills/repo-bootstrap/references/examples/php-with-frontend/web/src/Button.tsx +10 -0
  269. package/skills/repo-bootstrap/references/examples/php-with-frontend/web/src/Footer.tsx +9 -0
  270. package/skills/repo-bootstrap/references/examples/php-with-frontend/web/src/Header.tsx +9 -0
  271. package/skills/repo-bootstrap/references/examples/php-with-frontend/web/src/main.tsx +3 -0
  272. package/skills/repo-bootstrap/references/examples/php-with-frontend/web/tsconfig.json +13 -0
  273. package/skills/repo-bootstrap/references/examples/pnpm-workspace/AGENTS.md +75 -0
  274. package/skills/repo-bootstrap/references/examples/pnpm-workspace/package.json +7 -0
  275. package/skills/repo-bootstrap/references/examples/pnpm-workspace/packages/web/package.json +11 -0
  276. package/skills/repo-bootstrap/references/examples/pnpm-workspace/packages/web/src/index.ts +11 -0
  277. package/skills/repo-bootstrap/references/examples/pnpm-workspace/pnpm-lock.yaml +42 -0
  278. package/skills/repo-bootstrap/references/examples/pnpm-workspace/pnpm-workspace.yaml +2 -0
  279. package/skills/repo-bootstrap/references/examples/simple-ldap-go/AGENTS.md +70 -0
  280. package/skills/repo-bootstrap/references/examples/simple-ldap-go/examples-AGENTS.md +45 -0
  281. package/skills/repo-bootstrap/references/examples/simple-ldap-go/go.mod +3 -0
  282. package/skills/repo-bootstrap/references/examples/t3x-rte-ckeditor-image/AGENTS.md +70 -0
  283. package/skills/repo-bootstrap/references/examples/t3x-rte-ckeditor-image/Classes-AGENTS.md +392 -0
  284. package/skills/repo-bootstrap/references/examples/t3x-rte-ckeditor-image/composer.json +8 -0
  285. package/skills/repo-bootstrap/references/feedback-memory-schema.md +135 -0
  286. package/skills/repo-bootstrap/references/git-hooks-setup.md +79 -0
  287. package/skills/repo-bootstrap/references/output-structure.md +124 -0
  288. package/skills/repo-bootstrap/references/scripts-guide.md +175 -0
  289. package/skills/repo-bootstrap/references/verification-guide.md +137 -0
  290. package/skills/repo-bootstrap/scripts/analyze-git-history.sh +315 -0
  291. package/skills/repo-bootstrap/scripts/check-freshness.sh +230 -0
  292. package/skills/repo-bootstrap/scripts/detect-golden-samples.sh +161 -0
  293. package/skills/repo-bootstrap/scripts/detect-heuristics.sh +93 -0
  294. package/skills/repo-bootstrap/scripts/detect-project.sh +486 -0
  295. package/skills/repo-bootstrap/scripts/detect-scopes.sh +330 -0
  296. package/skills/repo-bootstrap/scripts/detect-utilities.sh +133 -0
  297. package/skills/repo-bootstrap/scripts/extract-adrs.sh +194 -0
  298. package/skills/repo-bootstrap/scripts/extract-agent-configs.sh +331 -0
  299. package/skills/repo-bootstrap/scripts/extract-architecture-rules.sh +522 -0
  300. package/skills/repo-bootstrap/scripts/extract-ci-commands.sh +385 -0
  301. package/skills/repo-bootstrap/scripts/extract-ci-rules.sh +384 -0
  302. package/skills/repo-bootstrap/scripts/extract-commands.sh +358 -0
  303. package/skills/repo-bootstrap/scripts/extract-documentation.sh +308 -0
  304. package/skills/repo-bootstrap/scripts/extract-github-rulesets.sh +96 -0
  305. package/skills/repo-bootstrap/scripts/extract-github-settings.sh +88 -0
  306. package/skills/repo-bootstrap/scripts/extract-ide-settings.sh +228 -0
  307. package/skills/repo-bootstrap/scripts/extract-platform-files.sh +290 -0
  308. package/skills/repo-bootstrap/scripts/extract-quality-configs.sh +442 -0
  309. package/skills/repo-bootstrap/scripts/generate-agents.sh +2424 -0
  310. package/skills/repo-bootstrap/scripts/generate-file-map.sh +153 -0
  311. package/skills/repo-bootstrap/scripts/lib/config-root.sh +211 -0
  312. package/skills/repo-bootstrap/scripts/lib/summary.sh +244 -0
  313. package/skills/repo-bootstrap/scripts/lib/template.sh +397 -0
  314. package/skills/repo-bootstrap/scripts/validate-structure.sh +324 -0
  315. package/skills/repo-bootstrap/scripts/verify-commands.sh +615 -0
  316. package/skills/repo-bootstrap/scripts/verify-content.sh +302 -0
  317. package/skills/schema-api-contracts/SKILL.md +56 -0
  318. package/skills/secret-hygiene/SKILL.md +511 -0
  319. package/skills/secret-hygiene/assets/.gitkeep +9 -0
  320. package/skills/secret-hygiene/assets/config-balanced.toml +81 -0
  321. package/skills/secret-hygiene/assets/config-custom.toml +178 -0
  322. package/skills/secret-hygiene/assets/config-strict.toml +48 -0
  323. package/skills/secret-hygiene/assets/github-action.yml +181 -0
  324. package/skills/secret-hygiene/assets/gitlab-ci.yml +257 -0
  325. package/skills/secret-hygiene/assets/precommit-config.yaml +70 -0
  326. package/skills/secret-hygiene/references/EXAMPLE.md +40 -0
  327. package/skills/secret-hygiene/references/compliance_mapping.md +538 -0
  328. package/skills/secret-hygiene/references/detection_rules.md +276 -0
  329. package/skills/secret-hygiene/references/false_positives.md +598 -0
  330. package/skills/secret-hygiene/references/remediation_guide.md +530 -0
  331. package/skills/stack-selector/SKILL.md +56 -0
  332. package/skills/telegram-control/SKILL.md +110 -0
  333. package/skills/telegram-control/references/architecture.md +184 -0
  334. package/skills/telegram-control/references/convex.md +173 -0
  335. package/skills/telegram-control/references/error_handling.md +212 -0
  336. package/skills/telegram-control/references/initial_setup.md +165 -0
  337. package/skills/telegram-control/references/telegram_api.md +156 -0
  338. package/skills/telegram-control/scripts/cancel_message.ts +53 -0
  339. package/skills/telegram-control/scripts/list_scheduled.ts +103 -0
  340. package/skills/telegram-control/scripts/logger.ts +121 -0
  341. package/skills/telegram-control/scripts/proxy-util.ts +11 -0
  342. package/skills/telegram-control/scripts/schedule_message.ts +216 -0
  343. package/skills/telegram-control/scripts/send_message.ts +115 -0
  344. package/skills/telegram-control/scripts/setup.ts +185 -0
  345. package/skills/telegram-control/scripts/types.ts +75 -0
  346. package/skills/telegram-control/scripts/view_history.ts +74 -0
  347. package/skills/test-strategy/SKILL.md +352 -0
  348. package/skills/threat-model/SKILL.md +303 -0
  349. package/skills/threat-model/examples/example-output.md +196 -0
  350. package/skills/threat-model/template.md +96 -0
  351. package/skills/ts-lint/SKILL.md +80 -0
  352. package/skills/ui-flow/SKILL.md +668 -0
  353. package/skills/voice-command-router/SKILL.md +51 -0
  354. package/skills/widget-live-activity-sync/SKILL.md +66 -0
@@ -0,0 +1,448 @@
1
+ # Frontend - TypeScript & Tailwind CSS
2
+
3
+ <!-- Managed by agent: keep sections & order; edit content, not structure. Last updated: 2025-10-09 -->
4
+
5
+ **Scope**: Frontend assets in `internal/web/` directory - TypeScript, Tailwind CSS, HTML templates
6
+
7
+ **See also**: [../../AGENTS.md](../../AGENTS.md) for global standards, [../AGENTS.md](../AGENTS.md) for Go backend
8
+
9
+ ## Overview
10
+
11
+ Frontend implementation for LDAP selfservice password changer with strict accessibility compliance:
12
+
13
+ - **static/**: Client-side TypeScript, compiled CSS, static assets
14
+ - **js/**: TypeScript source files (compiled to ES modules)
15
+ - **styles.css**: Tailwind CSS output
16
+ - Icons, logos, favicons, manifest
17
+ - **templates/**: Go HTML templates (\*.gohtml)
18
+ - **handlers.go**: HTTP route handlers
19
+ - **middleware.go**: Security headers, CORS, etc.
20
+ - **server.go**: Fiber server setup
21
+
22
+ **Key characteristics**:
23
+
24
+ - **WCAG 2.2 AAA**: 7:1 contrast, keyboard navigation, screen reader support, adaptive density
25
+ - **Ultra-strict TypeScript**: All strict flags enabled, no `any` types
26
+ - **Tailwind CSS 4**: Utility-first, dark mode, responsive, accessible patterns
27
+ - **Progressive enhancement**: Works without JavaScript (forms submit via HTTP)
28
+ - **Password manager friendly**: Proper autocomplete attributes
29
+
30
+ ## Setup/Environment
31
+
32
+ **Prerequisites**: Node.js 24+, pnpm 10.18+ (from root `package.json`)
33
+
34
+ ```bash
35
+ # From project root
36
+ pnpm install # Install dependencies
37
+
38
+ # Development (watch mode)
39
+ pnpm css:dev # Tailwind CSS watch
40
+ pnpm js:dev # TypeScript watch
41
+ # OR
42
+ pnpm dev # Concurrent: CSS + TS + Go hot-reload
43
+ ```
44
+
45
+ **No .env needed for frontend** - all config comes from Go backend
46
+
47
+ **Browser targets**: Modern browsers with ES module support (Chrome 90+, Firefox 88+, Safari 14+, Edge 90+)
48
+
49
+ ## Build & Tests
50
+
51
+ ```bash
52
+ # Build frontend assets
53
+ pnpm build:assets # TypeScript + CSS (production builds)
54
+
55
+ # TypeScript
56
+ pnpm js:build # Compile TS → ES modules + minify
57
+ pnpm js:dev # Watch mode with preserveWatchOutput
58
+ tsc --noEmit # Type check only (no output)
59
+
60
+ # CSS
61
+ pnpm css:build # Tailwind + PostCSS → styles.css
62
+ pnpm css:dev # Watch mode
63
+
64
+ # Formatting
65
+ pnpm prettier --write internal/web/ # Format TS, CSS, HTML templates
66
+ pnpm prettier --check internal/web/ # Check formatting (CI)
67
+ ```
68
+
69
+ **No unit tests yet** - TypeScript strict mode catches most errors, integration via Go tests
70
+
71
+ **CI validation** (from `.github/workflows/check.yml`):
72
+
73
+ ```bash
74
+ pnpm install
75
+ pnpm js:build # TypeScript strict compilation
76
+ pnpm prettier --check .
77
+ ```
78
+
79
+ **Accessibility testing**:
80
+
81
+ - Keyboard navigation: Tab through all interactive elements
82
+ - Screen reader: Test with VoiceOver (macOS/iOS) or NVDA (Windows)
83
+ - Contrast: Verify 7:1 ratios with browser dev tools
84
+ - See [../../docs/accessibility.md](../../docs/accessibility.md) for comprehensive guide
85
+
86
+ ## Code Style
87
+
88
+ **TypeScript Ultra-Strict** (from `tsconfig.json`):
89
+
90
+ ```json
91
+ {
92
+ "strict": true,
93
+ "noUncheckedIndexedAccess": true,
94
+ "exactOptionalPropertyTypes": true,
95
+ "noPropertyAccessFromIndexSignature": true,
96
+ "noImplicitReturns": true,
97
+ "noFallthroughCasesInSwitch": true,
98
+ "noUnusedLocals": true,
99
+ "noUnusedParameters": true
100
+ }
101
+ ```
102
+
103
+ **No `any` types allowed**:
104
+
105
+ ```typescript
106
+ // ✅ Good: explicit types
107
+ function validatePassword(password: string, minLength: number): boolean {
108
+ return password.length >= minLength;
109
+ }
110
+
111
+ // ❌ Bad: any type
112
+ function validatePassword(password: any): boolean {
113
+ return password.length >= 8; // ❌ unsafe
114
+ }
115
+ ```
116
+
117
+ **Prettier formatting**:
118
+
119
+ - 120 char width
120
+ - 2-space indentation
121
+ - Semicolons required
122
+ - Double quotes (not single)
123
+ - Trailing comma: none
124
+
125
+ **File organization**:
126
+
127
+ - TypeScript source: `static/js/*.ts`
128
+ - Output: `static/js/*.js` (minified ES modules)
129
+ - CSS input: `tailwind.css` (Tailwind directives)
130
+ - CSS output: `static/styles.css` (PostCSS processed)
131
+
132
+ ## Accessibility Standards (WCAG 2.2 AAA)
133
+
134
+ **Required compliance** - not optional:
135
+
136
+ ### Keyboard Navigation
137
+
138
+ - All interactive elements focusable with Tab
139
+ - Visual focus indicators (4px outline, 7:1 contrast)
140
+ - Logical tab order (top to bottom, left to right)
141
+ - No keyboard traps
142
+ - Skip links where needed
143
+
144
+ ### Screen Readers
145
+
146
+ - Semantic HTML: `<button>`, `<input>`, `<label>`, not `<div onclick>`
147
+ - ARIA labels on icon-only buttons: `aria-label="Submit"`
148
+ - Error messages: `aria-describedby` linking to error text
149
+ - Live regions for dynamic content: `aria-live="polite"`
150
+ - Form field associations: `<label for="id">` + `<input id="id">`
151
+
152
+ ### Color & Contrast
153
+
154
+ - Text: 7:1 contrast ratio (AAA)
155
+ - Large text (18pt+): 4.5:1 minimum
156
+ - Focus indicators: 3:1 against adjacent colors
157
+ - Dark mode: same contrast requirements
158
+ - Never rely on color alone (use icons, text, patterns)
159
+
160
+ ### Responsive & Adaptive
161
+
162
+ - Responsive: layout adapts to viewport size
163
+ - Text zoom: 200% without horizontal scroll
164
+ - Adaptive density: spacing adjusts for user preferences
165
+ - Touch targets: 44×44 CSS pixels minimum (mobile)
166
+
167
+ ### Examples
168
+
169
+ **✅ Good: Accessible button**
170
+
171
+ ```html
172
+ <button type="submit" class="btn-primary focus:ring-4 focus:ring-blue-300" aria-label="Submit password change">
173
+ <svg aria-hidden="true">...</svg>
174
+ Change Password
175
+ </button>
176
+ ```
177
+
178
+ **❌ Bad: Inaccessible div-button**
179
+
180
+ ```html
181
+ <div onclick="submit()" class="button">❌ not keyboard accessible Submit</div>
182
+ ```
183
+
184
+ **✅ Good: Form with error handling**
185
+
186
+ ```html
187
+ <form>
188
+ <label for="password">New Password</label>
189
+ <input
190
+ id="password"
191
+ type="password"
192
+ aria-describedby="password-error"
193
+ aria-invalid="true"
194
+ autocomplete="new-password"
195
+ />
196
+ <div id="password-error" role="alert">Password must be at least 8 characters</div>
197
+ </form>
198
+ ```
199
+
200
+ **❌ Bad: Form without associations**
201
+
202
+ ```html
203
+ <form>
204
+ <div>Password</div>
205
+ ❌ not a label, no association <input type="password" /> ❌ no autocomplete, no error linkage
206
+ <div style="color: red">Error</div>
207
+ ❌ no role="alert", only color
208
+ </form>
209
+ ```
210
+
211
+ ## Tailwind CSS Patterns
212
+
213
+ **Use utility classes**, not custom CSS:
214
+
215
+ **✅ Good: Utility classes**
216
+
217
+ ```html
218
+ <button
219
+ class="rounded-lg bg-blue-600 px-4 py-2 font-semibold text-white hover:bg-blue-700 focus:ring-4 focus:ring-blue-300"
220
+ >
221
+ Submit
222
+ </button>
223
+ ```
224
+
225
+ **❌ Bad: Custom CSS**
226
+
227
+ ```html
228
+ <button class="custom-button">Submit</button>
229
+ <style>
230
+ .custom-button {
231
+ background: blue;
232
+ } /* ❌ Use Tailwind utilities */
233
+ </style>
234
+ ```
235
+
236
+ **Dark mode support**:
237
+
238
+ ```html
239
+ <div class="bg-white text-gray-900 dark:bg-gray-900 dark:text-gray-100">Content</div>
240
+ ```
241
+
242
+ **Responsive design**:
243
+
244
+ ```html
245
+ <div class="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3">
246
+ <!-- Responsive grid: 1 col mobile, 2 tablet, 3 desktop -->
247
+ </div>
248
+ ```
249
+
250
+ **Focus states (required)**:
251
+
252
+ ```html
253
+ <button class="focus:ring-4 focus:ring-blue-300 focus:outline-none">
254
+ <!-- 4px focus ring, 7:1 contrast -->
255
+ </button>
256
+ ```
257
+
258
+ ## TypeScript Patterns
259
+
260
+ **Strict null checking**:
261
+
262
+ ```typescript
263
+ // ✅ Good: handle nulls explicitly
264
+ function getElement(id: string): HTMLElement | null {
265
+ return document.getElementById(id);
266
+ }
267
+
268
+ const el = getElement("password");
269
+ if (el) {
270
+ // ✅ null check
271
+ el.textContent = "Hello";
272
+ }
273
+
274
+ // ❌ Bad: assume non-null
275
+ const el = getElement("password");
276
+ el.textContent = "Hello"; // ❌ may crash if null
277
+ ```
278
+
279
+ **Type guards**:
280
+
281
+ ```typescript
282
+ // ✅ Good: type guard for forms
283
+ function isHTMLFormElement(element: Element): element is HTMLFormElement {
284
+ return element instanceof HTMLFormElement;
285
+ }
286
+
287
+ const form = document.querySelector("form");
288
+ if (form && isHTMLFormElement(form)) {
289
+ form.addEventListener("submit", handleSubmit);
290
+ }
291
+ ```
292
+
293
+ **No unsafe array access**:
294
+
295
+ ```typescript
296
+ // ✅ Good: check array bounds
297
+ const items = ["a", "b", "c"];
298
+ const first = items[0]; // string | undefined (noUncheckedIndexedAccess)
299
+ if (first) {
300
+ console.log(first.toUpperCase());
301
+ }
302
+
303
+ // ❌ Bad: unsafe access
304
+ console.log(items[0].toUpperCase()); // ❌ may crash if empty array
305
+ ```
306
+
307
+ ## PR/Commit Checklist
308
+
309
+ **Before committing frontend code**:
310
+
311
+ - [ ] Run `pnpm js:build` (TypeScript strict check)
312
+ - [ ] Run `pnpm prettier --write internal/web/`
313
+ - [ ] Verify keyboard navigation works
314
+ - [ ] Test with screen reader (VoiceOver/NVDA)
315
+ - [ ] Check contrast ratios (7:1 for text)
316
+ - [ ] Test dark mode
317
+ - [ ] Verify password manager autofill works
318
+ - [ ] No console errors in browser
319
+ - [ ] Test on mobile viewport (responsive)
320
+
321
+ **Accessibility checklist**:
322
+
323
+ - [ ] All interactive elements keyboard accessible
324
+ - [ ] Focus indicators visible (4px outline, 7:1 contrast)
325
+ - [ ] ARIA labels on icon-only buttons
326
+ - [ ] Form fields properly labeled
327
+ - [ ] Error messages linked with aria-describedby
328
+ - [ ] No color-only information conveyance
329
+ - [ ] Touch targets ≥44×44 CSS pixels (mobile)
330
+
331
+ **Performance checklist**:
332
+
333
+ - [ ] Minified JS (via `pnpm js:minify`)
334
+ - [ ] CSS optimized (cssnano via PostCSS)
335
+ - [ ] No unused Tailwind classes (purged automatically)
336
+ - [ ] No console.log in production code
337
+
338
+ ## Good vs Bad Examples
339
+
340
+ **✅ Good: Type-safe DOM access**
341
+
342
+ ```typescript
343
+ function setupPasswordToggle(): void {
344
+ const toggle = document.getElementById("toggle-password");
345
+ const input = document.getElementById("password");
346
+
347
+ if (!toggle || !(input instanceof HTMLInputElement)) {
348
+ return; // Guard against missing elements
349
+ }
350
+
351
+ toggle.addEventListener("click", () => {
352
+ input.type = input.type === "password" ? "text" : "password";
353
+ });
354
+ }
355
+ ```
356
+
357
+ **❌ Bad: Unsafe DOM access**
358
+
359
+ ```typescript
360
+ function setupPasswordToggle() {
361
+ const toggle = document.getElementById("toggle-password")!; // ❌ non-null assertion
362
+ const input = document.getElementById("password") as any; // ❌ any type
363
+
364
+ toggle.addEventListener("click", () => {
365
+ input.type = input.type === "password" ? "text" : "password"; // ❌ may crash
366
+ });
367
+ }
368
+ ```
369
+
370
+ **✅ Good: Accessible form validation**
371
+
372
+ ```typescript
373
+ function showError(input: HTMLInputElement, message: string): void {
374
+ const errorId = `${input.id}-error`;
375
+ let errorEl = document.getElementById(errorId);
376
+
377
+ if (!errorEl) {
378
+ errorEl = document.createElement("div");
379
+ errorEl.id = errorId;
380
+ errorEl.setAttribute("role", "alert");
381
+ errorEl.className = "text-red-600 dark:text-red-400 text-sm mt-1";
382
+ input.parentElement?.appendChild(errorEl);
383
+ }
384
+
385
+ errorEl.textContent = message;
386
+ input.setAttribute("aria-invalid", "true");
387
+ input.setAttribute("aria-describedby", errorId);
388
+ }
389
+ ```
390
+
391
+ **❌ Bad: Inaccessible validation**
392
+
393
+ ```typescript
394
+ function showError(input: any, message: string) {
395
+ // ❌ any type
396
+ input.style.borderColor = "red"; // ❌ color only, no text
397
+ alert(message); // ❌ blocks UI, not persistent
398
+ }
399
+ ```
400
+
401
+ ## When Stuck
402
+
403
+ **TypeScript issues**:
404
+
405
+ 1. **Type errors**: Check `tsconfig.json` flags, use proper types (no `any`)
406
+ 2. **Null errors**: Add null checks or type guards
407
+ 3. **Module errors**: Ensure ES module syntax (`import`/`export`)
408
+ 4. **Build errors**: `pnpm install` to refresh dependencies
409
+
410
+ **CSS issues**:
411
+
412
+ 1. **Styles not applying**: Check Tailwind purge config, rebuild with `pnpm css:build`
413
+ 2. **Dark mode broken**: Use `dark:` prefix on utilities
414
+ 3. **Responsive broken**: Use `md:`, `lg:` breakpoint prefixes
415
+ 4. **Custom classes**: Don't - use Tailwind utilities instead
416
+
417
+ **Accessibility issues**:
418
+
419
+ 1. **Keyboard nav broken**: Check tab order, focus indicators
420
+ 2. **Screen reader confusion**: Verify ARIA labels, semantic HTML
421
+ 3. **Contrast failure**: Use darker colors, test with dev tools
422
+ 4. **See**: [../../docs/accessibility.md](../../docs/accessibility.md)
423
+
424
+ **Browser dev tools**:
425
+
426
+ - Accessibility tab: Check ARIA, contrast, structure
427
+ - Lighthouse: Run accessibility audit (aim for 100 score)
428
+ - Console: No errors in production code
429
+
430
+ ## Testing Workflow
431
+
432
+ **Manual testing required** (no automated frontend tests yet):
433
+
434
+ 1. **Visual testing**: Check all pages in light/dark mode
435
+ 2. **Keyboard testing**: Tab through all interactive elements
436
+ 3. **Screen reader testing**: Use VoiceOver (Cmd+F5) or NVDA
437
+ 4. **Responsive testing**: Test mobile, tablet, desktop viewports
438
+ 5. **Browser testing**: Chrome, Firefox, Safari, Edge
439
+ 6. **Password manager**: Test autofill with 1Password, LastPass, etc.
440
+
441
+ **Accessibility testing tools**:
442
+
443
+ - Browser dev tools Lighthouse
444
+ - axe DevTools extension
445
+ - WAVE browser extension
446
+ - Manual keyboard/screen reader testing (required)
447
+
448
+ **Integration testing**: Go backend tests exercise full request/response flow including frontend templates
@@ -0,0 +1,3 @@
1
+ # Scopes for testing cross-language projects
2
+ # Format: path:type
3
+ web:frontend-typescript
@@ -0,0 +1,91 @@
1
+ <!-- FOR AI AGENTS - Human readability is a side effect, not a goal -->
2
+ <!-- Managed by agent: keep sections and order; edit content, not structure -->
3
+ <!-- Last updated: 2026-02-05 | Last verified: never -->
4
+
5
+ # AGENTS.md
6
+
7
+ **Precedence:** the **closest `AGENTS.md`** to the files you're changing wins. Root holds global defaults only.
8
+
9
+ ## Commands (unverified)
10
+ > Source: composer.json — CI-sourced commands are most reliable
11
+
12
+ <!-- AGENTS-GENERATED:START commands -->
13
+ | Task | Command | ~Time |
14
+ |------|---------|-------|
15
+ | Typecheck | composer run phpstan | ~15s |
16
+ | Lint | vendor/bin/php-cs-fixer fix --dry-run | ~10s |
17
+ | Format | vendor/bin/php-cs-fixer fix | ~5s |
18
+ | Test (single) | vendor/bin/phpunit | ~2s |
19
+ | Test (all) | composer run test | ~30s |
20
+ <!-- AGENTS-GENERATED:END commands -->
21
+
22
+ > If commands fail, verify against Makefile/package.json/composer.json or ask user to update.
23
+
24
+ ## Workflow
25
+ 1. **Before coding**: Read nearest `AGENTS.md` + check Golden Samples for the area you're touching
26
+ 2. **After each change**: Run the smallest relevant check (lint → typecheck → single test)
27
+ 3. **Before committing**: Run full test suite if changes affect >2 files or touch shared code
28
+
29
+ ## File Map
30
+ <!-- AGENTS-GENERATED:START filemap -->
31
+ ```
32
+ web/ → documentation
33
+ src/ → application source code
34
+ ```
35
+ <!-- AGENTS-GENERATED:END filemap -->
36
+
37
+ ## Golden Samples (follow these patterns)
38
+ <!-- AGENTS-GENERATED:START golden-samples -->
39
+ | For | Reference | Key patterns |
40
+ |-----|-----------|--------------|
41
+ | Controller | `src/Controller.php` | (class) |
42
+ <!-- AGENTS-GENERATED:END golden-samples -->
43
+
44
+ ## Heuristics (quick decisions)
45
+ <!-- AGENTS-GENERATED:START heuristics -->
46
+ | When | Do |
47
+ |------|-----|
48
+ | Adding class | Follow PSR-4 in `Classes/` or `src/` |
49
+ | Committing | Use Conventional Commits (feat:, fix:, docs:, etc.) |
50
+ | Merging PRs | Squash and merge |
51
+ | Adding dependency | Ask first - we minimize deps |
52
+ | Unsure about pattern | Check Golden Samples above |
53
+ <!-- AGENTS-GENERATED:END heuristics -->
54
+
55
+ ## Repository Settings
56
+ <!-- AGENTS-GENERATED:START repo-settings -->
57
+ - **Default branch:** `main`
58
+ - **Merge strategy:** squash, merge, rebase
59
+ <!-- AGENTS-GENERATED:END repo-settings -->
60
+
61
+ ## Boundaries
62
+
63
+ ### Always Do
64
+ - Run pre-commit checks before committing
65
+ - Add tests for new code paths
66
+ - Use conventional commit format: `type(scope): subject`
67
+ - Follow PSR-12 coding standards and PHP ^8.2 features
68
+
69
+ ### Ask First
70
+ - Adding new dependencies
71
+ - Modifying CI/CD configuration
72
+ - Changing public API signatures
73
+ - Running full e2e test suites
74
+ - Repo-wide refactoring or rewrites
75
+
76
+ ### Never Do
77
+ - Commit secrets, credentials, or sensitive data
78
+ - Modify vendor/, node_modules/, or generated files
79
+ - Push directly to main/master branch
80
+ - Delete migration files or schema changes
81
+ - Commit composer.lock without composer.json changes
82
+ - Modify core framework files
83
+
84
+ ## Index of scoped AGENTS.md
85
+ <!-- AGENTS-GENERATED:START scope-index -->
86
+ - `./web/AGENTS.md` — Frontend application (TypeScript/React/Vue)
87
+ <!-- AGENTS-GENERATED:END scope-index -->
88
+
89
+ ## When instructions conflict
90
+ The nearest `AGENTS.md` wins. Explicit user prompts override files.
91
+ - For PHP-specific patterns, follow PSR standards
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "test/php-with-frontend",
3
+ "require": { "php": "^8.2" },
4
+ "scripts": {
5
+ "test": "vendor/bin/phpunit",
6
+ "phpstan": "vendor/bin/phpstan analyze"
7
+ }
8
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "frontend",
3
+ "scripts": {
4
+ "dev": "vite",
5
+ "build": "vite build",
6
+ "lint": "eslint src",
7
+ "test": "vitest run"
8
+ },
9
+ "devDependencies": {
10
+ "eslint": "^8.56.0",
11
+ "react": "^18.0.0",
12
+ "vite": "^8.0.8",
13
+ "vitest": "^1.0.0"
14
+ }
15
+ }
@@ -0,0 +1,3 @@
1
+ <?php
2
+ namespace App;
3
+ class Controller {}
@@ -0,0 +1,92 @@
1
+ <!-- Managed by agent: keep sections and order; edit content, not structure. Last updated: 2026-02-05 -->
2
+
3
+ # AGENTS.md — web
4
+
5
+ <!-- AGENTS-GENERATED:START overview -->
6
+ ## Overview
7
+ Frontend application (TypeScript/React/Vue)
8
+ <!-- AGENTS-GENERATED:END overview -->
9
+
10
+ <!-- AGENTS-GENERATED:START filemap -->
11
+ ## Key Files
12
+ | File | Purpose |
13
+ |------|---------|
14
+ | `web/src/App.tsx` | (add description) |
15
+ | `web/src/Button.tsx` | (add description) |
16
+ | `web/src/Header.tsx` | (add description) |
17
+ | `web/src/main.tsx` | (add description) |
18
+ | `web/src/Footer.tsx` | (add description) |
19
+ <!-- AGENTS-GENERATED:END filemap -->
20
+
21
+ <!-- AGENTS-GENERATED:START golden-samples -->
22
+ ## Golden Samples (follow these patterns)
23
+ | Pattern | Reference |
24
+ |---------|-----------|
25
+ | Standard implementation | `web/src/Button.tsx` |
26
+ <!-- AGENTS-GENERATED:END golden-samples -->
27
+
28
+ <!-- AGENTS-GENERATED:START setup -->
29
+ ## Setup & environment
30
+ - Node version: >=20.0.0
31
+ - Framework: react
32
+ - Package manager: npm
33
+ - Environment variables: See .env.example
34
+ <!-- AGENTS-GENERATED:END setup -->
35
+
36
+ <!-- AGENTS-GENERATED:START commands -->
37
+ ## Build & tests
38
+ - Install: `npm install`
39
+ - Typecheck: `npm run typecheck`
40
+ - Lint: `npm run lint`
41
+ - Format: `npx prettier --write .`
42
+ - Test: `npm test`
43
+ - Build: `npm run build`
44
+ - Dev server: `npm run dev`
45
+ <!-- AGENTS-GENERATED:END commands -->
46
+
47
+ <!-- AGENTS-GENERATED:START code-style -->
48
+ ## Code style & conventions
49
+ - TypeScript strict mode enabled (verified from tsconfig.json)
50
+ - Use functional components with hooks
51
+ - Naming: `camelCase` for variables/functions, `PascalCase` for components
52
+ - File naming: `ComponentName.tsx`, `utilityName.ts`
53
+ - Imports: group and sort (external, internal, types)
54
+ - CSS: Tailwind CSS
55
+ - Avoid class components
56
+ <!-- AGENTS-GENERATED:END code-style -->
57
+
58
+ <!-- AGENTS-GENERATED:START security -->
59
+ ## Security & safety
60
+ - Sanitize user inputs before rendering
61
+ - Raw HTML rendering only with sanitized content (use DOMPurify)
62
+ - Validate environment variables at build time
63
+ - Never expose secrets in client-side code
64
+ - Use HTTPS for all API calls
65
+ - Implement CSP headers
66
+ - WCAG 2.2 AA accessibility compliance
67
+ <!-- AGENTS-GENERATED:END security -->
68
+
69
+ <!-- AGENTS-GENERATED:START checklist -->
70
+ ## PR/commit checklist
71
+ - [ ] Tests pass: `npm test`
72
+ - [ ] TypeScript compiles: `npm run typecheck`
73
+ - [ ] Lint clean: `npm run lint`
74
+ - [ ] Formatted: `npx prettier --write .`
75
+ - [ ] Accessibility: keyboard navigation works, ARIA labels present
76
+ - [ ] Responsive: tested on mobile, tablet, desktop
77
+ - [ ] Performance: no unnecessary re-renders
78
+ <!-- AGENTS-GENERATED:END checklist -->
79
+
80
+ <!-- AGENTS-GENERATED:START examples -->
81
+ ## Patterns to Follow
82
+ > **Prefer looking at real code in this repo over generic examples.**
83
+ > See **Golden Samples** section above for files that demonstrate correct patterns.
84
+ <!-- AGENTS-GENERATED:END examples -->
85
+
86
+ <!-- AGENTS-GENERATED:START help -->
87
+ ## When stuck
88
+ - Check React documentation: https://react.dev
89
+ - Review TypeScript handbook: https://www.typescriptlang.org/docs/
90
+ - Check root AGENTS.md for project-wide conventions
91
+ - Review existing components for patterns
92
+ <!-- AGENTS-GENERATED:END help -->
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "frontend",
3
+ "private": true,
4
+ "engines": {
5
+ "node": ">=20.0.0"
6
+ },
7
+ "scripts": {
8
+ "dev": "vite",
9
+ "build": "vite build",
10
+ "lint": "eslint src --ext .ts,.tsx",
11
+ "test": "vitest run",
12
+ "typecheck": "tsc --noEmit"
13
+ },
14
+ "dependencies": {
15
+ "react": "^18.2.0",
16
+ "react-dom": "^18.2.0"
17
+ },
18
+ "devDependencies": {
19
+ "@types/react": "^18.2.0",
20
+ "eslint": "^8.56.0",
21
+ "tailwindcss": "^3.4.0",
22
+ "typescript": "^5.3.0",
23
+ "vite": "^8.0.8",
24
+ "vitest": "^1.0.0"
25
+ }
26
+ }
@@ -0,0 +1,3 @@
1
+ export default function App() {
2
+ return <div>Hello</div>;
3
+ }