@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,93 @@
1
+ #!/usr/bin/env bash
2
+ # Detect project heuristics (When X → Do Y decisions)
3
+ set -euo pipefail
4
+
5
+ PROJECT_DIR="${1:-.}"
6
+ cd "$PROJECT_DIR"
7
+
8
+ # Get project language
9
+ PROJECT_INFO=$(bash "$(dirname "$0")/detect-project.sh" "$PROJECT_DIR" 2>/dev/null || echo '{"language":"unknown"}')
10
+ LANGUAGE=$(echo "$PROJECT_INFO" | jq -r '.language')
11
+
12
+ output=""
13
+
14
+ # Check for env file patterns
15
+ if [ -f ".env.example" ] || [ -f ".env.sample" ]; then
16
+ output="$output| Adding env var | Add to \`.env.example\` first |\n"
17
+ fi
18
+
19
+ # Check for TypeScript env types
20
+ if [ -f "src/env.d.ts" ] || [ -f "types/env.d.ts" ]; then
21
+ output="$output| Adding env var | Also update \`types/env.d.ts\` |\n"
22
+ fi
23
+
24
+ # Check for Next.js App Router
25
+ if [ -d "app" ] && { [ -f "next.config.js" ] || [ -f "next.config.ts" ] || [ -f "next.config.mjs" ]; }; then
26
+ output="$output| Adding new page | Create in \`app/\` (App Router) |\n"
27
+ fi
28
+
29
+ # Check for old Next.js Pages Router
30
+ if [ -d "pages" ] && [ ! -d "app" ]; then
31
+ output="$output| Adding new page | Create in \`pages/\` directory |\n"
32
+ fi
33
+
34
+ # Check for state management
35
+ if grep -q "zustand" package.json 2>/dev/null; then
36
+ output="$output| Adding state | Use Zustand store in \`stores/\` |\n"
37
+ elif grep -q "redux" package.json 2>/dev/null; then
38
+ output="$output| Adding state | Use Redux slice pattern |\n"
39
+ elif grep -q "mobx" package.json 2>/dev/null; then
40
+ output="$output| Adding state | Use MobX observable pattern |\n"
41
+ fi
42
+
43
+ # Check for API directory patterns
44
+ if [ -d "src/api" ] || [ -d "api" ]; then
45
+ api_dir=$([ -d "src/api" ] && echo "src/api" || echo "api")
46
+ output="$output| Adding API endpoint | Create in \`$api_dir/\` |\n"
47
+ fi
48
+
49
+ # Check for test patterns
50
+ if [ -d "__tests__" ]; then
51
+ output="$output| Adding tests | Create in \`__tests__/\` directory |\n"
52
+ elif [ -d "tests" ] || [ -d "test" ]; then
53
+ test_dir=$([ -d "tests" ] && echo "tests" || echo "test")
54
+ output="$output| Adding tests | Create in \`$test_dir/\` directory |\n"
55
+ fi
56
+
57
+ # Check for TYPO3
58
+ if [ -f "ext_emconf.php" ]; then
59
+ output="$output| Adding controller | Create in \`Classes/Controller/\` |\n"
60
+ output="$output| Adding service | Create in \`Classes/Service/\` |\n"
61
+ fi
62
+
63
+ # Check for Makefile
64
+ if [ -f "Makefile" ]; then
65
+ output="$output| Running tasks | Check \`make help\` for available commands |\n"
66
+ fi
67
+
68
+ # Check for Docker
69
+ if [ -f "docker-compose.yml" ] || [ -f "docker-compose.yaml" ] || [ -f "compose.yml" ]; then
70
+ output="$output| Running locally | Use \`docker compose up\` |\n"
71
+ fi
72
+
73
+ # Check for DDEV
74
+ if [ -d ".ddev" ]; then
75
+ output="$output| Running locally | Use \`ddev start\` then \`ddev ssh\` |\n"
76
+ fi
77
+
78
+ # Language-specific heuristics
79
+ case "$LANGUAGE" in
80
+ "go")
81
+ output="$output| Adding package | Internal → \`internal/\`, Public → \`pkg/\` |\n"
82
+ [ -f "go.work" ] && output="$output| Multi-module | Use \`go.work\` for workspace |\n"
83
+ ;;
84
+ "php")
85
+ output="$output| Adding class | Follow PSR-4 in \`Classes/\` or \`src/\` |\n"
86
+ ;;
87
+ "python")
88
+ [ -f "pyproject.toml" ] && output="$output| Adding dependency | Update \`pyproject.toml\` |\n"
89
+ ;;
90
+ esac
91
+
92
+ # Output (remove empty lines, duplicates, limit to 10)
93
+ echo -e "$output" | sed '/^$/d' | sort -u | head -10
@@ -0,0 +1,486 @@
1
+ #!/usr/bin/env bash
2
+ # Detect project type, language, version, and build tools
3
+ set -euo pipefail
4
+
5
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
+ source "$SCRIPT_DIR/lib/config-root.sh"
7
+
8
+ PROJECT_DIR="${1:-.}"
9
+ cd "$PROJECT_DIR"
10
+
11
+ # Initialize variables
12
+ LANGUAGE="unknown"
13
+ VERSION="unknown"
14
+ BUILD_TOOL="unknown" # Deprecated: use package_manager or task_runner
15
+ PACKAGE_MANAGER="unknown" # Package manager: npm/yarn/pnpm/bun, composer, poetry/uv/pip, go
16
+ TASK_RUNNER="none" # Task runner: make/just/mage/bazel, or none
17
+ FRAMEWORK="none"
18
+ PROJECT_TYPE="unknown"
19
+ QUALITY_TOOLS=()
20
+ TEST_FRAMEWORK="unknown"
21
+ HAS_DOCKER=false
22
+ CI="none"
23
+ IDE_CONFIGS=()
24
+ AGENT_CONFIGS=()
25
+ STACKS=() # Multi-stack detection: (go, php, python, typescript, docker)
26
+
27
+ # Detect language and version
28
+ detect_language() {
29
+ if [ -f "go.mod" ]; then
30
+ LANGUAGE="go"
31
+ VERSION=$(grep '^go ' go.mod | awk '{print $2}' || echo "unknown")
32
+ BUILD_TOOL="go"
33
+ PACKAGE_MANAGER="go"
34
+ TEST_FRAMEWORK="testing"
35
+
36
+ # Detect Go project type
37
+ if [ -d "cmd" ]; then
38
+ PROJECT_TYPE="go-cli"
39
+ elif grep -q "github.com/gofiber/fiber" go.mod 2>/dev/null; then
40
+ PROJECT_TYPE="go-web-app"
41
+ FRAMEWORK="fiber"
42
+ elif grep -q "github.com/labstack/echo" go.mod 2>/dev/null; then
43
+ PROJECT_TYPE="go-web-app"
44
+ FRAMEWORK="echo"
45
+ elif grep -q "github.com/gin-gonic/gin" go.mod 2>/dev/null; then
46
+ PROJECT_TYPE="go-web-app"
47
+ FRAMEWORK="gin"
48
+ else
49
+ PROJECT_TYPE="go-library"
50
+ fi
51
+
52
+ # Detect Go quality tools
53
+ { [ -f ".golangci.yml" ] || [ -f ".golangci.yaml" ]; } && QUALITY_TOOLS+=("golangci-lint") || true
54
+ command -v gofmt &>/dev/null && QUALITY_TOOLS+=("gofmt") || true
55
+
56
+ elif [ -f "composer.json" ]; then
57
+ # Check if this is actually a PHP project:
58
+ # 1. Has PHP version requirement, OR
59
+ # 2. Has PHP source files, OR
60
+ # 3. Has PHP framework dependencies
61
+ local has_php_requirement=false
62
+ local has_php_files=false
63
+ local has_php_deps=false
64
+
65
+ # Check for PHP version requirement
66
+ if jq -e '.require.php // .["require-dev"].php' composer.json &>/dev/null; then
67
+ has_php_requirement=true
68
+ fi
69
+
70
+ # Check for PHP source files (common locations)
71
+ if [ -d "src" ] && find src -name "*.php" -type f 2>/dev/null | head -1 | grep -q .; then
72
+ has_php_files=true
73
+ elif [ -d "Classes" ] && find Classes -name "*.php" -type f 2>/dev/null | head -1 | grep -q .; then
74
+ has_php_files=true
75
+ elif [ -d "lib" ] && find lib -name "*.php" -type f 2>/dev/null | head -1 | grep -q .; then
76
+ has_php_files=true
77
+ elif [ -f "ext_emconf.php" ]; then
78
+ has_php_files=true
79
+ elif find . -maxdepth 2 -name "*.php" -type f 2>/dev/null | head -1 | grep -q .; then
80
+ has_php_files=true
81
+ fi
82
+
83
+ # Check for PHP framework dependencies
84
+ if jq -e '.require."typo3/cms-core" // .require."laravel/framework" // .require."symfony/framework-bundle" // .require."oro/platform"' composer.json &>/dev/null; then
85
+ has_php_deps=true
86
+ fi
87
+
88
+ # Only treat as PHP if we have evidence it's a PHP project
89
+ if [ "$has_php_requirement" = true ] || [ "$has_php_files" = true ] || [ "$has_php_deps" = true ]; then
90
+ LANGUAGE="php"
91
+ VERSION=$(jq -r '.require.php // "unknown"' composer.json 2>/dev/null || echo "unknown")
92
+ BUILD_TOOL="composer"
93
+ PACKAGE_MANAGER="composer"
94
+ else
95
+ # composer.json exists but this isn't a PHP project
96
+ # Continue to check other languages
97
+ :
98
+ fi
99
+
100
+ # Detect PHP framework (only if we determined this is PHP)
101
+ if [ "$LANGUAGE" = "php" ]; then
102
+ # TYPO3 extension detection (ext_emconf.php is definitive)
103
+ if [ -f "ext_emconf.php" ]; then
104
+ PROJECT_TYPE="php-typo3-extension"
105
+ FRAMEWORK="typo3"
106
+ elif jq -e '.require."typo3/cms-core"' composer.json &>/dev/null; then
107
+ PROJECT_TYPE="php-typo3"
108
+ FRAMEWORK="typo3"
109
+ # Oro detection (OroCommerce, OroPlatform, OroCRM)
110
+ # Differentiate between full Oro project and standalone bundle
111
+ elif jq -e '.require."oro/platform"' composer.json &>/dev/null || \
112
+ jq -e '.require."oro/commerce"' composer.json &>/dev/null || \
113
+ jq -e '.require."oro/crm"' composer.json &>/dev/null; then
114
+ FRAMEWORK="oro"
115
+ # Check if it's a standalone bundle (has type: oro-bundle, or no bin/console)
116
+ composer_type=$(jq -r '.type // ""' composer.json 2>/dev/null)
117
+ if [ "$composer_type" = "oro-bundle" ] || [ "$composer_type" = "symfony-bundle" ]; then
118
+ PROJECT_TYPE="php-oro-bundle"
119
+ elif [ -f "bin/console" ] || [ -f "public/index.php" ]; then
120
+ PROJECT_TYPE="php-oro"
121
+ else
122
+ # Likely a standalone bundle without explicit type
123
+ PROJECT_TYPE="php-oro-bundle"
124
+ fi
125
+ elif [ -f "config/oro/bundles.yml" ]; then
126
+ PROJECT_TYPE="php-oro-bundle"
127
+ FRAMEWORK="oro"
128
+ elif jq -e '.require."laravel/framework"' composer.json &>/dev/null; then
129
+ PROJECT_TYPE="php-laravel"
130
+ FRAMEWORK="laravel"
131
+ elif jq -e '.require."symfony/symfony"' composer.json &>/dev/null || \
132
+ jq -e '.require."symfony/framework-bundle"' composer.json &>/dev/null; then
133
+ PROJECT_TYPE="php-symfony"
134
+ FRAMEWORK="symfony"
135
+ else
136
+ PROJECT_TYPE="php-library"
137
+ fi
138
+
139
+ # Detect PHP quality tools
140
+ jq -e '.require."phpstan/phpstan" // .["require-dev"]."phpstan/phpstan"' composer.json &>/dev/null && QUALITY_TOOLS+=("phpstan") || true
141
+ jq -e '.require."friendsofphp/php-cs-fixer" // .["require-dev"]."friendsofphp/php-cs-fixer"' composer.json &>/dev/null && QUALITY_TOOLS+=("php-cs-fixer") || true
142
+ { [ -f "phpunit.xml" ] || [ -f "phpunit.xml.dist" ]; } && TEST_FRAMEWORK="phpunit" || true
143
+ fi
144
+ # If composer.json exists but it's not a PHP project, fall through to other checks
145
+
146
+ fi
147
+
148
+ # Check for package.json (might also exist alongside composer.json)
149
+ if [ "$LANGUAGE" = "unknown" ] && [ -f "package.json" ]; then
150
+ LANGUAGE="typescript"
151
+ VERSION=$(jq -r '.engines.node // "unknown"' package.json 2>/dev/null || echo "unknown")
152
+
153
+ # Detect package manager from lockfile (workspace-aware, default npm)
154
+ PACKAGE_MANAGER="npm"
155
+ local ws_root
156
+ ws_root=$(find_node_workspace_root "$(pwd)" || true)
157
+ if [ -n "$ws_root" ]; then
158
+ # Check workspace root for lockfiles
159
+ [ -f "$ws_root/pnpm-lock.yaml" ] && PACKAGE_MANAGER="pnpm"
160
+ [ -f "$ws_root/yarn.lock" ] && PACKAGE_MANAGER="yarn"
161
+ [ -f "$ws_root/bun.lockb" ] && PACKAGE_MANAGER="bun"
162
+ [ -f "$ws_root/package-lock.json" ] && PACKAGE_MANAGER="npm"
163
+ else
164
+ # Fallback to local lockfiles
165
+ [ -f "yarn.lock" ] && PACKAGE_MANAGER="yarn"
166
+ [ -f "pnpm-lock.yaml" ] && PACKAGE_MANAGER="pnpm"
167
+ [ -f "bun.lockb" ] && PACKAGE_MANAGER="bun"
168
+ fi
169
+ BUILD_TOOL="$PACKAGE_MANAGER"
170
+
171
+ # Detect JS/TS framework
172
+ if jq -e '.dependencies."next"' package.json &>/dev/null; then
173
+ PROJECT_TYPE="typescript-nextjs"
174
+ FRAMEWORK="next.js"
175
+ elif jq -e '.dependencies."react"' package.json &>/dev/null; then
176
+ PROJECT_TYPE="typescript-react"
177
+ FRAMEWORK="react"
178
+ elif jq -e '.dependencies."vue"' package.json &>/dev/null; then
179
+ PROJECT_TYPE="typescript-vue"
180
+ FRAMEWORK="vue"
181
+ elif jq -e '.dependencies."express"' package.json &>/dev/null; then
182
+ PROJECT_TYPE="typescript-node"
183
+ FRAMEWORK="express"
184
+ else
185
+ PROJECT_TYPE="typescript-library"
186
+ fi
187
+
188
+ # Detect quality tools
189
+ jq -e '.devDependencies."eslint"' package.json &>/dev/null && QUALITY_TOOLS+=("eslint") || true
190
+ jq -e '.devDependencies."prettier"' package.json &>/dev/null && QUALITY_TOOLS+=("prettier") || true
191
+ jq -e '.devDependencies."typescript"' package.json &>/dev/null && QUALITY_TOOLS+=("tsc") || true
192
+
193
+ # Detect test framework
194
+ if jq -e '.devDependencies."jest"' package.json &>/dev/null; then
195
+ TEST_FRAMEWORK="jest"
196
+ elif jq -e '.devDependencies."vitest"' package.json &>/dev/null; then
197
+ TEST_FRAMEWORK="vitest"
198
+ fi || true
199
+
200
+ fi
201
+
202
+ # Check for pyproject.toml
203
+ if [ "$LANGUAGE" = "unknown" ] && [ -f "pyproject.toml" ]; then
204
+ LANGUAGE="python"
205
+ VERSION=$(grep 'requires-python' pyproject.toml | cut -d'"' -f2 2>/dev/null || echo "unknown")
206
+
207
+ # Detect Python package manager
208
+ if grep -q '\[tool.poetry\]' pyproject.toml 2>/dev/null; then
209
+ PACKAGE_MANAGER="poetry"
210
+ elif grep -q '\[tool.uv\]' pyproject.toml 2>/dev/null || [ -f "uv.lock" ]; then
211
+ PACKAGE_MANAGER="uv"
212
+ elif grep -q '\[tool.hatch\]' pyproject.toml 2>/dev/null; then
213
+ PACKAGE_MANAGER="hatch"
214
+ else
215
+ PACKAGE_MANAGER="pip"
216
+ fi
217
+ BUILD_TOOL="$PACKAGE_MANAGER"
218
+
219
+ # Detect framework
220
+ if grep -q 'django' pyproject.toml 2>/dev/null; then
221
+ PROJECT_TYPE="python-django"
222
+ FRAMEWORK="django"
223
+ elif grep -q 'flask' pyproject.toml 2>/dev/null; then
224
+ PROJECT_TYPE="python-flask"
225
+ FRAMEWORK="flask"
226
+ elif grep -q 'fastapi' pyproject.toml 2>/dev/null; then
227
+ PROJECT_TYPE="python-fastapi"
228
+ FRAMEWORK="fastapi"
229
+ elif [ -d "scripts" ] && [ "$(find scripts -name '*.py' | wc -l)" -gt 3 ]; then
230
+ PROJECT_TYPE="python-cli"
231
+ else
232
+ PROJECT_TYPE="python-library"
233
+ fi
234
+
235
+ # Detect quality tools
236
+ grep -q 'ruff' pyproject.toml 2>/dev/null && QUALITY_TOOLS+=("ruff")
237
+ grep -q 'black' pyproject.toml 2>/dev/null && QUALITY_TOOLS+=("black")
238
+ grep -q 'mypy' pyproject.toml 2>/dev/null && QUALITY_TOOLS+=("mypy")
239
+ grep -q 'pytest' pyproject.toml 2>/dev/null && TEST_FRAMEWORK="pytest"
240
+ fi
241
+
242
+ # Check for Claude Code plugin/skill repos
243
+ # Can be: plugin-only, skill-only, plugin+skills, or any of these with bash
244
+ if [ "$LANGUAGE" = "unknown" ]; then
245
+ local has_plugin=false
246
+ local has_skills=false
247
+ local skill_count=0
248
+
249
+ [ -f ".claude-plugin/plugin.json" ] && has_plugin=true
250
+ [ -d "skills" ] && skill_count=$(find skills -maxdepth 2 -name "SKILL.md" -type f 2>/dev/null | wc -l)
251
+ [ "$skill_count" -gt 0 ] && has_skills=true
252
+
253
+ if [ "$has_plugin" = true ] || [ "$has_skills" = true ]; then
254
+ FRAMEWORK="claude-code"
255
+ PACKAGE_MANAGER="none"
256
+
257
+ # Determine project type based on combination
258
+ if [ "$has_plugin" = true ] && [ "$has_skills" = true ]; then
259
+ if [ "$skill_count" -gt 1 ]; then
260
+ PROJECT_TYPE="claude-code-plugin-monorepo"
261
+ else
262
+ PROJECT_TYPE="claude-code-plugin"
263
+ fi
264
+ LANGUAGE="claude-code-plugin"
265
+ elif [ "$has_plugin" = true ]; then
266
+ PROJECT_TYPE="claude-code-plugin"
267
+ LANGUAGE="claude-code-plugin"
268
+ else
269
+ # Skills without plugin.json (standalone skill repo)
270
+ if [ "$skill_count" -gt 1 ]; then
271
+ PROJECT_TYPE="claude-code-skill-monorepo"
272
+ else
273
+ PROJECT_TYPE="claude-code-skill"
274
+ fi
275
+ LANGUAGE="claude-code-skill"
276
+ fi
277
+
278
+ # Check for shell scripts (common in skills)
279
+ local sh_count
280
+ sh_count=$(find . -maxdepth 5 -name "*.sh" -type f 2>/dev/null | wc -l)
281
+ if [ "$sh_count" -gt 3 ]; then
282
+ BUILD_TOOL="bash"
283
+ [ -f ".shellcheckrc" ] && QUALITY_TOOLS+=("shellcheck") || true
284
+ fi
285
+ fi
286
+ fi
287
+
288
+ # Container-primary detection (Dockerfile-only repos)
289
+ # Must come before bash fallback - some container repos have helper scripts
290
+ if [ "$LANGUAGE" = "unknown" ]; then
291
+ if [ -f "Dockerfile" ]; then
292
+ # Check if this is primarily a container image project
293
+ # Indicators: no source code, or only build scripts
294
+ local has_source=false
295
+ # Check for significant source files
296
+ [ "$(find . -maxdepth 3 -name '*.go' -o -name '*.py' -o -name '*.php' -o -name '*.ts' -o -name '*.js' 2>/dev/null | head -5 | wc -l)" -gt 3 ] && has_source=true
297
+
298
+ if [ "$has_source" = false ]; then
299
+ LANGUAGE="docker"
300
+ PROJECT_TYPE="container-image"
301
+ BUILD_TOOL="docker"
302
+ PACKAGE_MANAGER="none"
303
+ FRAMEWORK="docker"
304
+
305
+ # Detect if it's a compose-based project
306
+ if [ -f "docker-compose.yml" ] || [ -f "compose.yml" ] || [ -f "compose.yaml" ]; then
307
+ PROJECT_TYPE="container-stack"
308
+ fi
309
+ fi
310
+ fi
311
+ fi
312
+
313
+ # Fallback: Check for bash/shell projects
314
+ if [ "$LANGUAGE" = "unknown" ]; then
315
+ local sh_count
316
+ sh_count=$(find . -maxdepth 5 -name "*.sh" -type f 2>/dev/null | wc -l)
317
+ if [ "$sh_count" -gt 3 ]; then
318
+ LANGUAGE="bash"
319
+ PROJECT_TYPE="bash-scripts"
320
+ BUILD_TOOL="bash"
321
+ PACKAGE_MANAGER="none"
322
+ # Check for shellcheck
323
+ [ -f ".shellcheckrc" ] && QUALITY_TOOLS+=("shellcheck") || true
324
+ fi
325
+ fi
326
+ }
327
+
328
+ # Detect task runner (does NOT override package_manager)
329
+ if [ -f "Makefile" ]; then
330
+ TASK_RUNNER="make"
331
+ elif [ -f "justfile" ] || [ -f "Justfile" ]; then
332
+ TASK_RUNNER="just"
333
+ elif [ -f "Taskfile.yml" ] || [ -f "Taskfile.yaml" ]; then
334
+ TASK_RUNNER="task"
335
+ fi
336
+
337
+ # Detect Docker (check both old and new compose naming)
338
+ [ -f "Dockerfile" ] || [ -f "docker-compose.yml" ] || [ -f "compose.yml" ] || [ -f "compose.yaml" ] && HAS_DOCKER=true
339
+
340
+ # Detect CI
341
+ if [ -d ".github/workflows" ]; then
342
+ CI="github-actions"
343
+ elif [ -f ".gitlab-ci.yml" ]; then
344
+ CI="gitlab-ci"
345
+ elif [ -f ".circleci/config.yml" ]; then
346
+ CI="circleci"
347
+ fi
348
+
349
+ # Detect IDE configurations
350
+ [ -f ".editorconfig" ] && IDE_CONFIGS+=("editorconfig") || true
351
+ [ -d ".vscode" ] && IDE_CONFIGS+=("vscode") || true
352
+ [ -d ".idea" ] && IDE_CONFIGS+=("idea") || true
353
+ [ -d ".phpstorm" ] && IDE_CONFIGS+=("phpstorm") || true
354
+ [ -d ".fleet" ] && IDE_CONFIGS+=("fleet") || true
355
+ [ -f ".sublime-project" ] && IDE_CONFIGS+=("sublime") || true
356
+ { [ -d ".vim" ] || [ -f ".vimrc" ]; } && IDE_CONFIGS+=("vim") || true
357
+ { [ -d ".nvim" ] || [ -f ".nvimrc" ]; } && IDE_CONFIGS+=("neovim") || true
358
+
359
+ # Detect AI coding agent configurations
360
+ [ -d ".cursor" ] && AGENT_CONFIGS+=("cursor") || true
361
+ { [ -d ".claude" ] || [ -f "CLAUDE.md" ] || [ -f ".claude/CLAUDE.md" ]; } && AGENT_CONFIGS+=("claude") || true
362
+ [ -d ".windsurf" ] && AGENT_CONFIGS+=("windsurf") || true
363
+ { [ -d ".aider" ] || [ -f ".aider.conf.yml" ]; } && AGENT_CONFIGS+=("aider") || true
364
+ [ -d ".continue" ] && AGENT_CONFIGS+=("continue") || true
365
+ { [ -f "copilot-instructions.md" ] || [ -f ".github/copilot-instructions.md" ]; } && AGENT_CONFIGS+=("copilot") || true
366
+ [ -d ".codeium" ] && AGENT_CONFIGS+=("codeium") || true
367
+ [ -d ".tabnine" ] && AGENT_CONFIGS+=("tabnine") || true
368
+ { [ -d ".sourcegraph" ] || [ -f ".sourcegraph/cody.json" ]; } && AGENT_CONFIGS+=("cody") || true
369
+
370
+ # Run detection
371
+ detect_language
372
+
373
+ # Multi-stack detection: detect secondary languages/technologies
374
+ # STACKS array is populated here after primary language detection
375
+ detect_stacks() {
376
+ # Always add primary language to stacks (if known)
377
+ [ "$LANGUAGE" != "unknown" ] && STACKS+=("$LANGUAGE")
378
+
379
+ # Detect Docker as secondary stack (if not already primary)
380
+ if [ "$LANGUAGE" != "docker" ] && [ "$HAS_DOCKER" = true ]; then
381
+ STACKS+=("docker")
382
+ fi
383
+
384
+ # Detect frontend stack in backend projects
385
+ if [[ "$LANGUAGE" =~ ^(php|go|python)$ ]]; then
386
+ # Check for Node.js frontend
387
+ if [ -f "package.json" ]; then
388
+ # Check what kind of frontend
389
+ if jq -e '.dependencies."react" // .dependencies."next"' package.json &>/dev/null; then
390
+ STACKS+=("react")
391
+ elif jq -e '.dependencies."vue"' package.json &>/dev/null; then
392
+ STACKS+=("vue")
393
+ elif jq -e '.dependencies."svelte"' package.json &>/dev/null; then
394
+ STACKS+=("svelte")
395
+ else
396
+ STACKS+=("typescript")
397
+ fi
398
+ fi
399
+ # Check for frontend in subdirectories
400
+ for frontend_dir in web frontend client ui internal/web; do
401
+ if [ -d "$frontend_dir" ] && [ -f "$frontend_dir/package.json" ]; then
402
+ if jq -e '.dependencies."react" // .dependencies."next"' "$frontend_dir/package.json" &>/dev/null; then
403
+ [[ ! " ${STACKS[*]} " =~ " react " ]] && STACKS+=("react")
404
+ elif jq -e '.dependencies."vue"' "$frontend_dir/package.json" &>/dev/null; then
405
+ [[ ! " ${STACKS[*]} " =~ " vue " ]] && STACKS+=("vue")
406
+ fi
407
+ fi
408
+ done
409
+ fi
410
+
411
+ # Detect backend in frontend projects (monorepo patterns)
412
+ if [[ "$LANGUAGE" == "typescript" ]]; then
413
+ # Check for Go backend
414
+ if [ -f "go.mod" ] || [ -d "server" ] && [ -f "server/go.mod" ]; then
415
+ STACKS+=("go")
416
+ fi
417
+ # Check for Python backend
418
+ if [ -f "pyproject.toml" ] || { [ -d "server" ] && [ -f "server/pyproject.toml" ]; }; then
419
+ STACKS+=("python")
420
+ fi
421
+ # Check for PHP backend
422
+ if [ -f "composer.json" ] || { [ -d "api" ] && [ -f "api/composer.json" ]; }; then
423
+ STACKS+=("php")
424
+ fi
425
+ fi
426
+ }
427
+
428
+ detect_stacks
429
+
430
+ # Output JSON
431
+ # Handle empty arrays
432
+ if [ ${#QUALITY_TOOLS[@]} -eq 0 ]; then
433
+ TOOLS_JSON="[]"
434
+ else
435
+ TOOLS_JSON="$(printf '%s\n' "${QUALITY_TOOLS[@]}" | jq -R . | jq -s .)"
436
+ fi
437
+
438
+ if [ ${#IDE_CONFIGS[@]} -eq 0 ]; then
439
+ IDE_JSON="[]"
440
+ else
441
+ IDE_JSON="$(printf '%s\n' "${IDE_CONFIGS[@]}" | jq -R . | jq -s .)"
442
+ fi
443
+
444
+ if [ ${#AGENT_CONFIGS[@]} -eq 0 ]; then
445
+ AGENT_JSON="[]"
446
+ else
447
+ AGENT_JSON="$(printf '%s\n' "${AGENT_CONFIGS[@]}" | jq -R . | jq -s .)"
448
+ fi
449
+
450
+ if [ ${#STACKS[@]} -eq 0 ]; then
451
+ STACKS_JSON="[]"
452
+ else
453
+ STACKS_JSON="$(printf '%s\n' "${STACKS[@]}" | jq -R . | jq -s .)"
454
+ fi
455
+
456
+ jq -n \
457
+ --arg type "$PROJECT_TYPE" \
458
+ --arg lang "$LANGUAGE" \
459
+ --arg ver "$VERSION" \
460
+ --arg build "$BUILD_TOOL" \
461
+ --arg pkg_mgr "$PACKAGE_MANAGER" \
462
+ --arg task_runner "$TASK_RUNNER" \
463
+ --arg framework "$FRAMEWORK" \
464
+ --argjson docker "$HAS_DOCKER" \
465
+ --argjson tools "$TOOLS_JSON" \
466
+ --arg test "$TEST_FRAMEWORK" \
467
+ --arg ci "$CI" \
468
+ --argjson ide_configs "$IDE_JSON" \
469
+ --argjson agent_configs "$AGENT_JSON" \
470
+ --argjson stacks "$STACKS_JSON" \
471
+ '{
472
+ type: $type,
473
+ language: $lang,
474
+ version: $ver,
475
+ build_tool: $build,
476
+ package_manager: $pkg_mgr,
477
+ task_runner: $task_runner,
478
+ framework: $framework,
479
+ has_docker: $docker,
480
+ quality_tools: $tools,
481
+ test_framework: $test,
482
+ ci: $ci,
483
+ ide_configs: $ide_configs,
484
+ agent_configs: $agent_configs,
485
+ stacks: $stacks
486
+ }'