@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,435 @@
1
+ #!/usr/bin/env python3
2
+ """Scaffold PRD directory structure from frontend_analyzer.py output.
3
+
4
+ Reads analysis JSON and creates the prd/ directory with README.md,
5
+ per-page stubs, and appendix files pre-populated with extracted data.
6
+
7
+ Stdlib only — no third-party dependencies.
8
+
9
+ Usage:
10
+ python3 frontend_analyzer.py /path/to/project -o analysis.json
11
+ python3 prd_scaffolder.py analysis.json
12
+ python3 prd_scaffolder.py analysis.json --output-dir ./prd --project-name "My App"
13
+ """
14
+
15
+ import argparse
16
+ import json
17
+ import re
18
+ from datetime import datetime
19
+ from pathlib import Path
20
+ from typing import Any, Dict, Optional
21
+ from pathlib import Path
22
+ from typing import Any, Dict, List
23
+
24
+
25
+ def slugify(text: str) -> str:
26
+ """Convert text to a filename-safe slug."""
27
+ text = text.strip().lower()
28
+ text = re.sub(r"[/:{}*?\"<>|]", "-", text)
29
+ text = re.sub(r"[^a-z0-9\-]", "-", text)
30
+ text = re.sub(r"-+", "-", text)
31
+ return text.strip("-")
32
+
33
+
34
+ def route_to_page_name(route: str) -> str:
35
+ """Convert a route path to a human-readable page name."""
36
+ if route == "/" or route == "":
37
+ return "Home"
38
+ parts = route.strip("/").split("/")
39
+ # Remove dynamic segments for naming
40
+ clean = [p for p in parts if not p.startswith(":") and not p.startswith("*")]
41
+ if not clean:
42
+ clean = [p.lstrip(":*") for p in parts]
43
+ return " ".join(w.capitalize() for w in "-".join(clean).replace("_", "-").split("-"))
44
+
45
+
46
+ def generate_readme(project_name: str, routes: List[Dict], summary: Dict, date: str) -> str:
47
+ """Generate the PRD README.md."""
48
+ lines = [
49
+ f"# {project_name} — Product Requirements Document",
50
+ "",
51
+ f"> Generated: {date}",
52
+ "",
53
+ "## System Overview",
54
+ "",
55
+ f"<!-- TODO: Describe what {project_name} does, its business context, and primary users -->",
56
+ "",
57
+ "## Summary",
58
+ "",
59
+ f"| Metric | Count |",
60
+ f"|--------|-------|",
61
+ f"| Pages | {summary.get('pages', 0)} |",
62
+ f"| API Endpoints | {summary.get('api_endpoints', 0)} |",
63
+ f"| Integrated APIs | {summary.get('api_integrated', 0)} |",
64
+ f"| Mock APIs | {summary.get('api_mock', 0)} |",
65
+ f"| Enums/Constants | {summary.get('enums', 0)} |",
66
+ f"| i18n | {'Yes' if summary.get('has_i18n') else 'No'} |",
67
+ f"| State Management | {'Yes' if summary.get('has_state_management') else 'No'} |",
68
+ "",
69
+ "## Module Overview",
70
+ "",
71
+ "| Module | Pages | Core Functionality |",
72
+ "|--------|-------|--------------------|",
73
+ "| <!-- TODO: Group pages into modules --> | | |",
74
+ "",
75
+ "## Page Inventory",
76
+ "",
77
+ "| # | Page Name | Route | Module | Doc Link |",
78
+ "|---|-----------|-------|--------|----------|",
79
+ ]
80
+
81
+ for i, route in enumerate(routes, 1):
82
+ path = route.get("path", "/")
83
+ name = route_to_page_name(path)
84
+ slug = slugify(name) or f"page-{i}"
85
+ filename = f"{i:02d}-{slug}.md"
86
+ lines.append(f"| {i} | {name} | `{path}` | <!-- TODO --> | [→](./pages/{filename}) |")
87
+
88
+ lines.extend([
89
+ "",
90
+ "## Global Notes",
91
+ "",
92
+ "### Permission Model",
93
+ "<!-- TODO: Summarize auth/role system if present -->",
94
+ "",
95
+ "### Common Interaction Patterns",
96
+ "<!-- TODO: Global rules — delete confirmations, default sort, etc. -->",
97
+ "",
98
+ ])
99
+
100
+ return "\n".join(lines)
101
+
102
+
103
+ def generate_page_stub(route: Dict, index: int, date: str) -> str:
104
+ """Generate a per-page PRD stub."""
105
+ path = route.get("path", "/")
106
+ name = route_to_page_name(path)
107
+ source = route.get("source", "unknown")
108
+
109
+ return f"""# {name}
110
+
111
+ > **Route:** `{path}`
112
+ > **Module:** <!-- TODO -->
113
+ > **Source:** `{source}`
114
+ > **Generated:** {date}
115
+
116
+ ## Overview
117
+ <!-- TODO: 2-3 sentences — core function and use case -->
118
+
119
+ ## Layout
120
+ <!-- TODO: Region breakdown — search area, table, detail panel, action bar, etc. -->
121
+
122
+ ## Fields
123
+
124
+ ### Search / Filters
125
+ | Field | Type | Required | Options / Enum | Default | Notes |
126
+ |-------|------|----------|---------------|---------|-------|
127
+ | <!-- TODO --> | | | | | |
128
+
129
+ ### Data Table
130
+ | Column | Format | Sortable | Filterable | Notes |
131
+ |--------|--------|----------|-----------|-------|
132
+ | <!-- TODO --> | | | | |
133
+
134
+ ### Actions
135
+ | Button | Visibility Condition | Behavior |
136
+ |--------|---------------------|----------|
137
+ | <!-- TODO --> | | |
138
+
139
+ ## Interactions
140
+
141
+ ### Page Load
142
+ <!-- TODO: What happens on mount — default queries, preloaded data -->
143
+
144
+ ### Search
145
+ - **Trigger:** <!-- TODO -->
146
+ - **Behavior:** <!-- TODO -->
147
+ - **Special rules:** <!-- TODO -->
148
+
149
+ ### Create / Edit
150
+ - **Trigger:** <!-- TODO -->
151
+ - **Modal/drawer content:** <!-- TODO -->
152
+ - **Validation:** <!-- TODO -->
153
+ - **On success:** <!-- TODO -->
154
+
155
+ ### Delete
156
+ - **Trigger:** <!-- TODO -->
157
+ - **Confirmation:** <!-- TODO -->
158
+ - **On success:** <!-- TODO -->
159
+
160
+ ## API Dependencies
161
+
162
+ | API | Method | Path | Trigger | Integrated | Notes |
163
+ |-----|--------|------|---------|-----------|-------|
164
+ | <!-- TODO --> | | | | | |
165
+
166
+ ## Page Relationships
167
+ - **From:** <!-- TODO: Source pages + params -->
168
+ - **To:** <!-- TODO: Target pages + params -->
169
+ - **Data coupling:** <!-- TODO: Cross-page refresh triggers -->
170
+
171
+ ## Business Rules
172
+ <!-- TODO: Anything that doesn't fit above -->
173
+ """
174
+
175
+
176
+ def generate_enum_dictionary(enums: List[Dict]) -> str:
177
+ """Generate the enum dictionary appendix."""
178
+ lines = [
179
+ "# Enum & Constant Dictionary",
180
+ "",
181
+ "All enums, status codes, and type mappings extracted from the codebase.",
182
+ "",
183
+ ]
184
+
185
+ if not enums:
186
+ lines.append("*No enums detected. Manual review recommended.*")
187
+ return "\n".join(lines)
188
+
189
+ for e in enums:
190
+ lines.append(f"## {e['name']}")
191
+ lines.append(f"**Type:** {e.get('type', 'unknown')} | **Source:** `{e.get('source', 'unknown').split('/')[-1]}`")
192
+ lines.append("")
193
+ if e.get("values"):
194
+ lines.append("| Key | Value |")
195
+ lines.append("|-----|-------|")
196
+ for k, v in e["values"].items():
197
+ lines.append(f"| `{k}` | {v} |")
198
+ lines.append("")
199
+
200
+ return "\n".join(lines)
201
+
202
+
203
+ def generate_api_inventory(apis: List[Dict]) -> str:
204
+ """Generate the API inventory appendix."""
205
+ lines = [
206
+ "# API Inventory",
207
+ "",
208
+ "All API endpoints detected in the codebase.",
209
+ "",
210
+ ]
211
+
212
+ if not apis:
213
+ lines.append("*No API calls detected. Manual review recommended.*")
214
+ return "\n".join(lines)
215
+
216
+ integrated = [a for a in apis if a.get("integrated")]
217
+ mocked = [a for a in apis if a.get("mock_detected") and not a.get("integrated")]
218
+ unknown = [a for a in apis if not a.get("integrated") and not a.get("mock_detected")]
219
+
220
+ for label, group in [("Integrated APIs", integrated), ("Mock / Stub APIs", mocked), ("Unknown Status", unknown)]:
221
+ if group:
222
+ lines.append(f"## {label}")
223
+ lines.append("")
224
+ lines.append("| Method | Path | Source | Notes |")
225
+ lines.append("|--------|------|--------|-------|")
226
+ for a in group:
227
+ src = a.get("source", "").split("/")[-1]
228
+ lines.append(f"| {a.get('method', '?')} | `{a.get('path', '?')}` | {src} | |")
229
+ lines.append("")
230
+
231
+ return "\n".join(lines)
232
+
233
+
234
+ def generate_page_relationships(routes: List[Dict]) -> str:
235
+ """Generate page relationships appendix stub."""
236
+ lines = [
237
+ "# Page Relationships",
238
+ "",
239
+ "Navigation flow and data coupling between pages.",
240
+ "",
241
+ "## Navigation Map",
242
+ "",
243
+ "<!-- TODO: Fill in after page-by-page analysis -->",
244
+ "",
245
+ "```",
246
+ "Home",
247
+ ]
248
+
249
+ for r in routes[:20]: # Cap at 20 for readability
250
+ name = route_to_page_name(r.get("path", "/"))
251
+ lines.append(f" ├── {name}")
252
+
253
+ if len(routes) > 20:
254
+ lines.append(f" └── ... ({len(routes) - 20} more)")
255
+
256
+ lines.extend([
257
+ "```",
258
+ "",
259
+ "## Cross-Page Data Dependencies",
260
+ "",
261
+ "| Source Page | Target Page | Trigger | Data Passed |",
262
+ "|-----------|------------|---------|------------|",
263
+ "| <!-- TODO --> | | | |",
264
+ "",
265
+ ])
266
+
267
+ return "\n".join(lines)
268
+
269
+
270
+ def scaffold(analysis: Dict[str, Any], output_dir: Path, project_name: Optional[str] = None):
271
+ """Create the full PRD directory structure."""
272
+ date = datetime.now().strftime("%Y-%m-%d")
273
+ name = project_name or analysis.get("project", {}).get("name", "Project")
274
+ routes = analysis.get("routes", {}).get("pages", [])
275
+ apis = analysis.get("apis", {}).get("endpoints", [])
276
+ enums = analysis.get("enums", {}).get("definitions", [])
277
+ summary = analysis.get("summary", {})
278
+
279
+ # Create directories
280
+ pages_dir = output_dir / "pages"
281
+ appendix_dir = output_dir / "appendix"
282
+ pages_dir.mkdir(parents=True, exist_ok=True)
283
+ appendix_dir.mkdir(parents=True, exist_ok=True)
284
+
285
+ # README.md
286
+ readme = generate_readme(name, routes, summary, date)
287
+ (output_dir / "README.md").write_text(readme)
288
+ print(f" Created: README.md")
289
+
290
+ # Per-page stubs
291
+ for i, route in enumerate(routes, 1):
292
+ page_name = route_to_page_name(route.get("path", "/"))
293
+ slug = slugify(page_name) or f"page-{i}"
294
+ filename = f"{i:02d}-{slug}.md"
295
+ content = generate_page_stub(route, i, date)
296
+ (pages_dir / filename).write_text(content)
297
+ print(f" Created: pages/{filename}")
298
+
299
+ # Appendix
300
+ (appendix_dir / "enum-dictionary.md").write_text(generate_enum_dictionary(enums))
301
+ print(f" Created: appendix/enum-dictionary.md")
302
+
303
+ (appendix_dir / "api-inventory.md").write_text(generate_api_inventory(apis))
304
+ print(f" Created: appendix/api-inventory.md")
305
+
306
+ (appendix_dir / "page-relationships.md").write_text(generate_page_relationships(routes))
307
+ print(f" Created: appendix/page-relationships.md")
308
+
309
+ print(f"\n✅ PRD scaffold complete: {output_dir}")
310
+ print(f" {len(routes)} page stubs, {len(apis)} API endpoints, {len(enums)} enums")
311
+ print(f"\n Next: Review each page stub and fill in the TODO sections.")
312
+
313
+
314
+ def validate_analysis(analysis: Dict[str, Any]) -> List[str]:
315
+ """Validate analysis JSON has the required structure. Returns list of errors."""
316
+ errors = []
317
+
318
+ if not isinstance(analysis, dict):
319
+ return ["Analysis must be a JSON object"]
320
+
321
+ if "error" in analysis:
322
+ errors.append(f"Analysis contains error: {analysis['error']}")
323
+
324
+ required_keys = ["project", "routes", "apis"]
325
+ for key in required_keys:
326
+ if key not in analysis:
327
+ errors.append(f"Missing required key: '{key}'")
328
+
329
+ if "project" in analysis:
330
+ proj = analysis["project"]
331
+ if not isinstance(proj, dict):
332
+ errors.append("'project' must be an object")
333
+ elif "framework" not in proj:
334
+ errors.append("'project.framework' is missing")
335
+
336
+ if "routes" in analysis:
337
+ routes = analysis["routes"]
338
+ if not isinstance(routes, dict):
339
+ errors.append("'routes' must be an object")
340
+ elif "pages" not in routes and "frontend_pages" not in routes and "backend_endpoints" not in routes:
341
+ errors.append("'routes' must contain 'pages', 'frontend_pages', or 'backend_endpoints'")
342
+
343
+ if "apis" in analysis:
344
+ apis = analysis["apis"]
345
+ if not isinstance(apis, dict):
346
+ errors.append("'apis' must be an object")
347
+ elif "endpoints" not in apis:
348
+ errors.append("'apis.endpoints' is missing")
349
+
350
+ return errors
351
+
352
+
353
+ def print_summary(output_dir: Path, analysis: Dict[str, Any]):
354
+ """Print a structured summary of what was generated."""
355
+ routes = analysis.get("routes", {}).get("pages", [])
356
+ apis = analysis.get("apis", {}).get("endpoints", [])
357
+ enums = analysis.get("enums", {}).get("definitions", [])
358
+ models = analysis.get("models", {}).get("definitions", [])
359
+ summary = analysis.get("summary", {})
360
+ stack = summary.get("stack_type", "unknown")
361
+
362
+ print(f"\nPRD scaffold complete: {output_dir}/")
363
+ print(f" Stack type: {stack}")
364
+ print(f" Page stubs: {len(routes)}")
365
+ print(f" API endpoints: {len(apis)}")
366
+ print(f" Enums: {len(enums)}")
367
+ if models:
368
+ print(f" Models: {len(models)}")
369
+ print(f"\n Next: Review each page stub and fill in the TODO sections.")
370
+
371
+
372
+ def main():
373
+ parser = argparse.ArgumentParser(
374
+ description="Scaffold PRD directory from codebase analysis"
375
+ )
376
+ parser.add_argument("analysis", help="Path to analysis JSON from codebase_analyzer.py")
377
+ parser.add_argument("-o", "--output-dir", default="prd", help="Output directory (default: prd/)")
378
+ parser.add_argument("-n", "--project-name", help="Override project name")
379
+ parser.add_argument("--validate-only", action="store_true",
380
+ help="Validate analysis JSON without generating files")
381
+ parser.add_argument("--dry-run", action="store_true",
382
+ help="Show what would be created without writing files")
383
+ args = parser.parse_args()
384
+
385
+ analysis_path = Path(args.analysis)
386
+ if not analysis_path.exists():
387
+ print(f"Error: Analysis file not found: {analysis_path}")
388
+ raise SystemExit(2)
389
+
390
+ try:
391
+ with open(analysis_path) as f:
392
+ analysis = json.load(f)
393
+ except json.JSONDecodeError as e:
394
+ print(f"Error: Invalid JSON in {analysis_path}: {e}")
395
+ raise SystemExit(2)
396
+
397
+ # Validate
398
+ errors = validate_analysis(analysis)
399
+ if errors:
400
+ print(f"Validation errors in {analysis_path}:")
401
+ for err in errors:
402
+ print(f" - {err}")
403
+ raise SystemExit(1)
404
+
405
+ if args.validate_only:
406
+ print(f"Analysis file is valid: {analysis_path}")
407
+ routes = analysis.get("routes", {}).get("pages", [])
408
+ print(f" {len(routes)} routes, "
409
+ f"{len(analysis.get('apis', {}).get('endpoints', []))} APIs, "
410
+ f"{len(analysis.get('enums', {}).get('definitions', []))} enums")
411
+ return
412
+
413
+ output_dir = Path(args.output_dir)
414
+
415
+ if args.dry_run:
416
+ routes = analysis.get("routes", {}).get("pages", [])
417
+ print(f"Dry run — would create in {output_dir}/:\n")
418
+ print(f" {output_dir}/README.md")
419
+ for i, route in enumerate(routes, 1):
420
+ name = route_to_page_name(route.get("path", "/"))
421
+ slug = slugify(name) or f"page-{i}"
422
+ print(f" {output_dir}/pages/{i:02d}-{slug}.md")
423
+ print(f" {output_dir}/appendix/enum-dictionary.md")
424
+ print(f" {output_dir}/appendix/api-inventory.md")
425
+ print(f" {output_dir}/appendix/page-relationships.md")
426
+ print(f"\n Total: {len(routes) + 4} files")
427
+ return
428
+
429
+ print(f"Scaffolding PRD in {output_dir}/...\n")
430
+ scaffold(analysis, output_dir, args.project_name)
431
+ print_summary(output_dir, analysis)
432
+
433
+
434
+ if __name__ == "__main__":
435
+ main()