@codyswann/lisa 1.0.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 (322) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +867 -0
  3. package/all/copy-overwrite/.claude/README.md +205 -0
  4. package/all/copy-overwrite/.claude/agents/agent-architect.md +311 -0
  5. package/all/copy-overwrite/.claude/agents/codebase-analyzer.md +146 -0
  6. package/all/copy-overwrite/.claude/agents/codebase-locator.md +125 -0
  7. package/all/copy-overwrite/.claude/agents/codebase-pattern-finder.md +237 -0
  8. package/all/copy-overwrite/.claude/agents/git-history-analyzer.md +183 -0
  9. package/all/copy-overwrite/.claude/agents/hooks-expert.md +74 -0
  10. package/all/copy-overwrite/.claude/agents/skill-evaluator.md +246 -0
  11. package/all/copy-overwrite/.claude/agents/slash-command-architect.md +87 -0
  12. package/all/copy-overwrite/.claude/agents/web-search-researcher.md +112 -0
  13. package/all/copy-overwrite/.claude/commands/git/commit-and-submit-pr.md +8 -0
  14. package/all/copy-overwrite/.claude/commands/git/commit.md +44 -0
  15. package/all/copy-overwrite/.claude/commands/git/prune.md +34 -0
  16. package/all/copy-overwrite/.claude/commands/git/submit-pr.md +50 -0
  17. package/all/copy-overwrite/.claude/commands/jira/create.md +50 -0
  18. package/all/copy-overwrite/.claude/commands/jira/verify.md +34 -0
  19. package/all/copy-overwrite/.claude/commands/project/archive.md +8 -0
  20. package/all/copy-overwrite/.claude/commands/project/bootstrap.md +49 -0
  21. package/all/copy-overwrite/.claude/commands/project/complete-task.md +7 -0
  22. package/all/copy-overwrite/.claude/commands/project/debrief.md +65 -0
  23. package/all/copy-overwrite/.claude/commands/project/execute.md +94 -0
  24. package/all/copy-overwrite/.claude/commands/project/implement.md +42 -0
  25. package/all/copy-overwrite/.claude/commands/project/local-code-review.md +88 -0
  26. package/all/copy-overwrite/.claude/commands/project/lower-code-complexity.md +74 -0
  27. package/all/copy-overwrite/.claude/commands/project/plan.md +314 -0
  28. package/all/copy-overwrite/.claude/commands/project/research.md +248 -0
  29. package/all/copy-overwrite/.claude/commands/project/review.md +63 -0
  30. package/all/copy-overwrite/.claude/commands/project/setup.md +19 -0
  31. package/all/copy-overwrite/.claude/commands/project/verify.md +38 -0
  32. package/all/copy-overwrite/.claude/commands/pull-request/review.md +12 -0
  33. package/all/copy-overwrite/.claude/commands/rules/format-md.md +72 -0
  34. package/all/copy-overwrite/.claude/commands/sonarqube/check.md +6 -0
  35. package/all/copy-overwrite/.claude/commands/sonarqube/fix.md +3 -0
  36. package/all/copy-overwrite/.claude/hooks/README.md +301 -0
  37. package/all/copy-overwrite/.claude/hooks/notify-ntfy.sh +181 -0
  38. package/all/copy-overwrite/.claude/settings.json +41 -0
  39. package/all/copy-overwrite/.claude/settings.local.json.example +14 -0
  40. package/all/copy-overwrite/.claude/skills/coding-philosophy/SKILL.md +405 -0
  41. package/all/copy-overwrite/.claude/skills/coding-philosophy/references/function-structure.md +416 -0
  42. package/all/copy-overwrite/.claude/skills/coding-philosophy/references/immutable-patterns.md +316 -0
  43. package/all/copy-overwrite/.claude/skills/prompt-complexity-scorer/SKILL.md +118 -0
  44. package/all/copy-overwrite/.claude/skills/skill-creator/LICENSE.txt +202 -0
  45. package/all/copy-overwrite/.claude/skills/skill-creator/SKILL.md +210 -0
  46. package/all/copy-overwrite/.claude/skills/skill-creator/scripts/__pycache__/quick_validate.cpython-312.pyc +0 -0
  47. package/all/copy-overwrite/.claude/skills/skill-creator/scripts/init_skill.py +303 -0
  48. package/all/copy-overwrite/.claude/skills/skill-creator/scripts/package_skill.py +110 -0
  49. package/all/copy-overwrite/.claude/skills/skill-creator/scripts/quick_validate.py +65 -0
  50. package/all/copy-overwrite/CLAUDE.md +77 -0
  51. package/all/copy-overwrite/HUMAN.md +17 -0
  52. package/all/copy-overwrite/specs/.keep +0 -0
  53. package/all/create-only/PROJECT_RULES.md +0 -0
  54. package/cdk/merge/package.json +20 -0
  55. package/dist/cli/index.d.ts +7 -0
  56. package/dist/cli/index.d.ts.map +1 -0
  57. package/dist/cli/index.js +107 -0
  58. package/dist/cli/index.js.map +1 -0
  59. package/dist/cli/prompts.d.ts +45 -0
  60. package/dist/cli/prompts.d.ts.map +1 -0
  61. package/dist/cli/prompts.js +58 -0
  62. package/dist/cli/prompts.js.map +1 -0
  63. package/dist/core/config.d.ts +73 -0
  64. package/dist/core/config.d.ts.map +1 -0
  65. package/dist/core/config.js +36 -0
  66. package/dist/core/config.js.map +1 -0
  67. package/dist/core/index.d.ts +4 -0
  68. package/dist/core/index.d.ts.map +1 -0
  69. package/dist/core/index.js +4 -0
  70. package/dist/core/index.js.map +1 -0
  71. package/dist/core/lisa.d.ts +81 -0
  72. package/dist/core/lisa.d.ts.map +1 -0
  73. package/dist/core/lisa.js +459 -0
  74. package/dist/core/lisa.js.map +1 -0
  75. package/dist/core/manifest.d.ts +58 -0
  76. package/dist/core/manifest.d.ts.map +1 -0
  77. package/dist/core/manifest.js +104 -0
  78. package/dist/core/manifest.js.map +1 -0
  79. package/dist/detection/detector.interface.d.ts +15 -0
  80. package/dist/detection/detector.interface.d.ts.map +1 -0
  81. package/dist/detection/detector.interface.js +2 -0
  82. package/dist/detection/detector.interface.js.map +1 -0
  83. package/dist/detection/detectors/cdk.d.ts +10 -0
  84. package/dist/detection/detectors/cdk.d.ts.map +1 -0
  85. package/dist/detection/detectors/cdk.js +34 -0
  86. package/dist/detection/detectors/cdk.js.map +1 -0
  87. package/dist/detection/detectors/expo.d.ts +10 -0
  88. package/dist/detection/detectors/expo.d.ts.map +1 -0
  89. package/dist/detection/detectors/expo.js +30 -0
  90. package/dist/detection/detectors/expo.js.map +1 -0
  91. package/dist/detection/detectors/nestjs.d.ts +10 -0
  92. package/dist/detection/detectors/nestjs.d.ts.map +1 -0
  93. package/dist/detection/detectors/nestjs.js +34 -0
  94. package/dist/detection/detectors/nestjs.js.map +1 -0
  95. package/dist/detection/detectors/npm-package.d.ts +13 -0
  96. package/dist/detection/detectors/npm-package.d.ts.map +1 -0
  97. package/dist/detection/detectors/npm-package.js +30 -0
  98. package/dist/detection/detectors/npm-package.js.map +1 -0
  99. package/dist/detection/detectors/typescript.d.ts +10 -0
  100. package/dist/detection/detectors/typescript.d.ts.map +1 -0
  101. package/dist/detection/detectors/typescript.js +25 -0
  102. package/dist/detection/detectors/typescript.js.map +1 -0
  103. package/dist/detection/index.d.ts +24 -0
  104. package/dist/detection/index.d.ts.map +1 -0
  105. package/dist/detection/index.js +57 -0
  106. package/dist/detection/index.js.map +1 -0
  107. package/dist/errors/index.d.ts +69 -0
  108. package/dist/errors/index.d.ts.map +1 -0
  109. package/dist/errors/index.js +110 -0
  110. package/dist/errors/index.js.map +1 -0
  111. package/dist/index.d.ts +3 -0
  112. package/dist/index.d.ts.map +1 -0
  113. package/dist/index.js +8 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/logging/console-logger.d.ts +12 -0
  116. package/dist/logging/console-logger.d.ts.map +1 -0
  117. package/dist/logging/console-logger.js +22 -0
  118. package/dist/logging/console-logger.js.map +1 -0
  119. package/dist/logging/index.d.ts +4 -0
  120. package/dist/logging/index.d.ts.map +1 -0
  121. package/dist/logging/index.js +3 -0
  122. package/dist/logging/index.js.map +1 -0
  123. package/dist/logging/logger.interface.d.ts +20 -0
  124. package/dist/logging/logger.interface.d.ts.map +1 -0
  125. package/dist/logging/logger.interface.js +2 -0
  126. package/dist/logging/logger.interface.js.map +1 -0
  127. package/dist/logging/silent-logger.d.ts +12 -0
  128. package/dist/logging/silent-logger.d.ts.map +1 -0
  129. package/dist/logging/silent-logger.js +21 -0
  130. package/dist/logging/silent-logger.js.map +1 -0
  131. package/dist/strategies/copy-contents.d.ts +14 -0
  132. package/dist/strategies/copy-contents.d.ts.map +1 -0
  133. package/dist/strategies/copy-contents.js +69 -0
  134. package/dist/strategies/copy-contents.js.map +1 -0
  135. package/dist/strategies/copy-overwrite.d.ts +14 -0
  136. package/dist/strategies/copy-overwrite.d.ts.map +1 -0
  137. package/dist/strategies/copy-overwrite.js +47 -0
  138. package/dist/strategies/copy-overwrite.js.map +1 -0
  139. package/dist/strategies/create-only.d.ts +13 -0
  140. package/dist/strategies/create-only.d.ts.map +1 -0
  141. package/dist/strategies/create-only.js +30 -0
  142. package/dist/strategies/create-only.js.map +1 -0
  143. package/dist/strategies/index.d.ts +31 -0
  144. package/dist/strategies/index.d.ts.map +1 -0
  145. package/dist/strategies/index.js +52 -0
  146. package/dist/strategies/index.js.map +1 -0
  147. package/dist/strategies/merge.d.ts +13 -0
  148. package/dist/strategies/merge.d.ts.map +1 -0
  149. package/dist/strategies/merge.js +60 -0
  150. package/dist/strategies/merge.js.map +1 -0
  151. package/dist/strategies/strategy.interface.d.ts +31 -0
  152. package/dist/strategies/strategy.interface.d.ts.map +1 -0
  153. package/dist/strategies/strategy.interface.js +2 -0
  154. package/dist/strategies/strategy.interface.js.map +1 -0
  155. package/dist/transaction/backup.d.ts +38 -0
  156. package/dist/transaction/backup.d.ts.map +1 -0
  157. package/dist/transaction/backup.js +97 -0
  158. package/dist/transaction/backup.js.map +1 -0
  159. package/dist/transaction/index.d.ts +4 -0
  160. package/dist/transaction/index.d.ts.map +1 -0
  161. package/dist/transaction/index.js +3 -0
  162. package/dist/transaction/index.js.map +1 -0
  163. package/dist/transaction/transaction.d.ts +34 -0
  164. package/dist/transaction/transaction.d.ts.map +1 -0
  165. package/dist/transaction/transaction.js +68 -0
  166. package/dist/transaction/transaction.js.map +1 -0
  167. package/dist/utils/file-operations.d.ts +29 -0
  168. package/dist/utils/file-operations.d.ts.map +1 -0
  169. package/dist/utils/file-operations.js +84 -0
  170. package/dist/utils/file-operations.js.map +1 -0
  171. package/dist/utils/index.d.ts +4 -0
  172. package/dist/utils/index.d.ts.map +1 -0
  173. package/dist/utils/index.js +4 -0
  174. package/dist/utils/index.js.map +1 -0
  175. package/dist/utils/json-utils.d.ts +22 -0
  176. package/dist/utils/json-utils.d.ts.map +1 -0
  177. package/dist/utils/json-utils.js +57 -0
  178. package/dist/utils/json-utils.js.map +1 -0
  179. package/dist/utils/path-utils.d.ts +21 -0
  180. package/dist/utils/path-utils.d.ts.map +1 -0
  181. package/dist/utils/path-utils.js +35 -0
  182. package/dist/utils/path-utils.js.map +1 -0
  183. package/eslint-plugin-code-organization/README.md +149 -0
  184. package/eslint-plugin-code-organization/__tests__/enforce-statement-order.test.js +468 -0
  185. package/eslint-plugin-code-organization/index.js +23 -0
  186. package/eslint-plugin-code-organization/package.json +10 -0
  187. package/eslint-plugin-code-organization/rules/enforce-statement-order.js +157 -0
  188. package/expo/copy-overwrite/.claude/skills/apollo-client/SKILL.md +238 -0
  189. package/expo/copy-overwrite/.claude/skills/apollo-client/references/mutation-patterns.md +360 -0
  190. package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/SKILL.md +360 -0
  191. package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/references/atomic-levels.md +417 -0
  192. package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/references/folder-structure.md +257 -0
  193. package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/references/gluestack-mapping.md +233 -0
  194. package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +327 -0
  195. package/expo/copy-overwrite/.claude/skills/container-view-pattern/SKILL.md +299 -0
  196. package/expo/copy-overwrite/.claude/skills/container-view-pattern/references/examples.md +749 -0
  197. package/expo/copy-overwrite/.claude/skills/container-view-pattern/references/patterns.md +318 -0
  198. package/expo/copy-overwrite/.claude/skills/container-view-pattern/scripts/create_component.py +198 -0
  199. package/expo/copy-overwrite/.claude/skills/container-view-pattern/scripts/validate_component.py +207 -0
  200. package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/SKILL.md +268 -0
  201. package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/references/common-issues.md +619 -0
  202. package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/references/file-extensions.md +340 -0
  203. package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/references/platform-api.md +276 -0
  204. package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/scripts/validate_cross_platform.py +414 -0
  205. package/expo/copy-overwrite/.claude/skills/directory-structure/SKILL.md +202 -0
  206. package/expo/copy-overwrite/.claude/skills/directory-structure/scripts/validate_structure.py +443 -0
  207. package/expo/copy-overwrite/.claude/skills/expo-env-config/SKILL.md +309 -0
  208. package/expo/copy-overwrite/.claude/skills/expo-env-config/references/validation-patterns.md +417 -0
  209. package/expo/copy-overwrite/.claude/skills/expo-router-best-practices/SKILL.md +431 -0
  210. package/expo/copy-overwrite/.claude/skills/expo-router-best-practices/references/official-docs.md +290 -0
  211. package/expo/copy-overwrite/.claude/skills/expo-router-best-practices/scripts/generate-route.py +169 -0
  212. package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/SKILL.md +411 -0
  213. package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/references/color-tokens.md +343 -0
  214. package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/references/component-mapping.md +307 -0
  215. package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/references/spacing-scale.md +300 -0
  216. package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/scripts/validate_styling.py +354 -0
  217. package/expo/copy-overwrite/.claude/skills/local-state/SKILL.md +362 -0
  218. package/expo/copy-overwrite/.claude/skills/local-state/references/async-storage.md +505 -0
  219. package/expo/copy-overwrite/.claude/skills/local-state/references/persistence-patterns.md +711 -0
  220. package/expo/copy-overwrite/.claude/skills/local-state/references/reactive-variables.md +446 -0
  221. package/expo/copy-overwrite/.claude/skills/playwright-selectors/SKILL.md +223 -0
  222. package/expo/copy-overwrite/.claude/skills/testing-library/SKILL.md +319 -0
  223. package/expo/copy-overwrite/.claude/skills/testing-library/references/async-patterns.md +420 -0
  224. package/expo/copy-overwrite/.claude/skills/testing-library/references/expo-router-testing.md +556 -0
  225. package/expo/copy-overwrite/.claude/skills/testing-library/references/mocking-patterns.md +590 -0
  226. package/expo/copy-overwrite/.claude/skills/testing-library/references/query-priority.md +291 -0
  227. package/expo/copy-overwrite/.easignore.extra +2 -0
  228. package/expo/copy-overwrite/.mcp.json +33 -0
  229. package/expo/copy-overwrite/eslint-plugin-component-structure/README.md +234 -0
  230. package/expo/copy-overwrite/eslint-plugin-component-structure/__tests__/plugin-index.test.js +84 -0
  231. package/expo/copy-overwrite/eslint-plugin-component-structure/__tests__/require-memo-in-view.test.js +196 -0
  232. package/expo/copy-overwrite/eslint-plugin-component-structure/__tests__/single-component-per-file.test.js +289 -0
  233. package/expo/copy-overwrite/eslint-plugin-component-structure/index.js +32 -0
  234. package/expo/copy-overwrite/eslint-plugin-component-structure/package.json +10 -0
  235. package/expo/copy-overwrite/eslint-plugin-component-structure/rules/enforce-component-structure.js +230 -0
  236. package/expo/copy-overwrite/eslint-plugin-component-structure/rules/no-return-in-view.js +91 -0
  237. package/expo/copy-overwrite/eslint-plugin-component-structure/rules/require-memo-in-view.js +178 -0
  238. package/expo/copy-overwrite/eslint-plugin-component-structure/rules/single-component-per-file.js +238 -0
  239. package/expo/copy-overwrite/eslint-plugin-ui-standards/README.md +260 -0
  240. package/expo/copy-overwrite/eslint-plugin-ui-standards/index.js +29 -0
  241. package/expo/copy-overwrite/eslint-plugin-ui-standards/package.json +10 -0
  242. package/expo/copy-overwrite/eslint-plugin-ui-standards/rules/no-classname-outside-ui.js +51 -0
  243. package/expo/copy-overwrite/eslint-plugin-ui-standards/rules/no-direct-rn-imports.js +55 -0
  244. package/expo/copy-overwrite/eslint-plugin-ui-standards/rules/no-inline-styles.js +73 -0
  245. package/expo/copy-overwrite/eslint.config.mjs +560 -0
  246. package/expo/copy-overwrite/lighthouserc.js +194 -0
  247. package/expo/create-only/lighthouserc-config.json +28 -0
  248. package/expo/merge/package.json +132 -0
  249. package/lisa.sh +35 -0
  250. package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/SKILL.md +176 -0
  251. package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/references/advanced-features.md +527 -0
  252. package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/references/project-patterns.md +483 -0
  253. package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/references/quick-start.md +257 -0
  254. package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/references/resolvers-mutations.md +413 -0
  255. package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/references/types-scalars.md +513 -0
  256. package/nestjs/copy-overwrite/.claude/skills/nestjs-rules/SKILL.md +536 -0
  257. package/nestjs/copy-overwrite/.claude/skills/typeorm-patterns/SKILL.md +275 -0
  258. package/nestjs/copy-overwrite/.claude/skills/typeorm-patterns/references/configuration-patterns.md +487 -0
  259. package/nestjs/copy-overwrite/.claude/skills/typeorm-patterns/references/entity-patterns.md +450 -0
  260. package/nestjs/copy-overwrite/.claude/skills/typeorm-patterns/references/observability-patterns.md +536 -0
  261. package/nestjs/merge/package.json +75 -0
  262. package/package.json +124 -0
  263. package/typescript/copy-contents/.husky/commit-msg +91 -0
  264. package/typescript/copy-contents/.husky/pre-commit +96 -0
  265. package/typescript/copy-contents/.husky/pre-push +211 -0
  266. package/typescript/copy-overwrite/.claude/hooks/format-on-edit.sh +74 -0
  267. package/typescript/copy-overwrite/.claude/hooks/install_pkgs.sh +59 -0
  268. package/typescript/copy-overwrite/.claude/hooks/lint-on-edit.sh +103 -0
  269. package/typescript/copy-overwrite/.claude/skills/jsdoc-best-practices/SKILL.md +388 -0
  270. package/typescript/copy-overwrite/.github/README.md +455 -0
  271. package/typescript/copy-overwrite/.github/dependabot.yml +40 -0
  272. package/typescript/copy-overwrite/.github/k6/BROWSER_TESTING_NOTE.md +129 -0
  273. package/typescript/copy-overwrite/.github/k6/INTEGRATION_GUIDE.md +354 -0
  274. package/typescript/copy-overwrite/.github/k6/README.md +386 -0
  275. package/typescript/copy-overwrite/.github/k6/SCENARIO_SELECTION_GUIDE.md +264 -0
  276. package/typescript/copy-overwrite/.github/k6/examples/customer-deploy-integration.yml +115 -0
  277. package/typescript/copy-overwrite/.github/k6/examples/data-driven-test.js +268 -0
  278. package/typescript/copy-overwrite/.github/k6/scenarios/load.js +142 -0
  279. package/typescript/copy-overwrite/.github/k6/scenarios/load.json +27 -0
  280. package/typescript/copy-overwrite/.github/k6/scenarios/smoke.js +26 -0
  281. package/typescript/copy-overwrite/.github/k6/scenarios/smoke.json +20 -0
  282. package/typescript/copy-overwrite/.github/k6/scenarios/soak.js +244 -0
  283. package/typescript/copy-overwrite/.github/k6/scenarios/soak.json +29 -0
  284. package/typescript/copy-overwrite/.github/k6/scenarios/spike.js +180 -0
  285. package/typescript/copy-overwrite/.github/k6/scenarios/spike.json +32 -0
  286. package/typescript/copy-overwrite/.github/k6/scenarios/stress.js +206 -0
  287. package/typescript/copy-overwrite/.github/k6/scenarios/stress.json +38 -0
  288. package/typescript/copy-overwrite/.github/k6/scripts/api-test.js +452 -0
  289. package/typescript/copy-overwrite/.github/k6/scripts/default-test.js +185 -0
  290. package/typescript/copy-overwrite/.github/k6/thresholds/normal.json +30 -0
  291. package/typescript/copy-overwrite/.github/k6/thresholds/relaxed.json +21 -0
  292. package/typescript/copy-overwrite/.github/k6/thresholds/strict.json +29 -0
  293. package/typescript/copy-overwrite/.github/workflows/build.yml +72 -0
  294. package/typescript/copy-overwrite/.github/workflows/ci.yml +49 -0
  295. package/typescript/copy-overwrite/.github/workflows/claude.yml +51 -0
  296. package/typescript/copy-overwrite/.github/workflows/create-github-issue-on-failure.yml +113 -0
  297. package/typescript/copy-overwrite/.github/workflows/create-jira-issue-on-failure.yml +195 -0
  298. package/typescript/copy-overwrite/.github/workflows/create-sentry-issue-on-failure.yml +267 -0
  299. package/typescript/copy-overwrite/.github/workflows/deploy.yml +228 -0
  300. package/typescript/copy-overwrite/.github/workflows/k6-load-test-README.md +230 -0
  301. package/typescript/copy-overwrite/.github/workflows/lighthouse.yml +68 -0
  302. package/typescript/copy-overwrite/.github/workflows/load-test.yml +282 -0
  303. package/typescript/copy-overwrite/.github/workflows/quality.yml +1737 -0
  304. package/typescript/copy-overwrite/.github/workflows/release.yml +1599 -0
  305. package/typescript/copy-overwrite/.gitleaksignore +28 -0
  306. package/typescript/copy-overwrite/.nvmrc +1 -0
  307. package/typescript/copy-overwrite/.prettierignore +23 -0
  308. package/typescript/copy-overwrite/.prettierrc.json +22 -0
  309. package/typescript/copy-overwrite/.versionrc +42 -0
  310. package/typescript/copy-overwrite/.yamllint +20 -0
  311. package/typescript/copy-overwrite/commitlint.config.js +11 -0
  312. package/typescript/copy-overwrite/eslint-plugin-code-organization/README.md +149 -0
  313. package/typescript/copy-overwrite/eslint-plugin-code-organization/__tests__/enforce-statement-order.test.js +468 -0
  314. package/typescript/copy-overwrite/eslint-plugin-code-organization/index.js +23 -0
  315. package/typescript/copy-overwrite/eslint-plugin-code-organization/package.json +10 -0
  316. package/typescript/copy-overwrite/eslint-plugin-code-organization/rules/enforce-statement-order.js +157 -0
  317. package/typescript/copy-overwrite/eslint.config.mjs +390 -0
  318. package/typescript/copy-overwrite/eslint.ignore.config.json +57 -0
  319. package/typescript/copy-overwrite/eslint.thresholds.config.json +5 -0
  320. package/typescript/github-rulesets/base.json +106 -0
  321. package/typescript/merge/.claude/settings.json +28 -0
  322. package/typescript/merge/package.json +71 -0
@@ -0,0 +1,103 @@
1
+ #!/bin/bash
2
+
3
+ # Hook script to lint and auto-fix files with ESLint after Claude edits them
4
+ # This script receives JSON input via stdin with tool information
5
+ # Reference: https://docs.claude.com/en/docs/claude-code/hooks
6
+
7
+ # Read the JSON input from stdin
8
+ JSON_INPUT=$(cat)
9
+
10
+ # Extract the file path from the tool_input
11
+ # The Edit tool input contains a "file_path" field in the tool_input object
12
+ FILE_PATH=$(echo "$JSON_INPUT" | grep -o '"tool_input":{[^}]*"file_path":"[^"]*"' | grep -o '"file_path":"[^"]*"' | cut -d'"' -f4)
13
+
14
+ # Check if we successfully extracted a file path
15
+ if [ -z "$FILE_PATH" ]; then
16
+ echo "⚠ Skipping ESLint: Could not extract file path from Edit tool input" >&2
17
+ exit 0 # Exit gracefully to not interrupt Claude's workflow
18
+ fi
19
+
20
+ # Check if the file exists
21
+ if [ ! -f "$FILE_PATH" ]; then
22
+ echo "⚠ Skipping ESLint: File does not exist: $FILE_PATH" >&2
23
+ exit 0 # Exit gracefully
24
+ fi
25
+
26
+ # Get the file extension
27
+ FILE_EXT="${FILE_PATH##*.}"
28
+
29
+ # Check if this is a TypeScript file that should be linted
30
+ # Based on package.json lint command: "eslint \"{src,apps,libs,test}/**/*.ts\""
31
+ case "$FILE_EXT" in
32
+ ts|tsx)
33
+ # File type is supported for linting
34
+ ;;
35
+ *)
36
+ echo "ℹ Skipping ESLint: File type .$FILE_EXT is not configured for linting"
37
+ exit 0
38
+ ;;
39
+ esac
40
+
41
+ # Check if the file is in a directory that should be linted
42
+ # Extract the relative path from the project directory
43
+ RELATIVE_PATH="${FILE_PATH#$CLAUDE_PROJECT_DIR/}"
44
+
45
+ # Check if the file is in src, apps, libs, or test directories
46
+ case "$RELATIVE_PATH" in
47
+ src/*|apps/*|libs/*|test/*|features/*|components/*|hooks/*|screens/*|app/*|constants/*|utils/*|providers/*|stores/*)
48
+ # File is in a directory configured for linting
49
+ ;;
50
+ *)
51
+ echo "ℹ Skipping ESLint: File is not in src/, apps/, libs/, or test/ directory"
52
+ exit 0
53
+ ;;
54
+ esac
55
+
56
+ # Change to the project directory to ensure package manager commands work
57
+ cd "$CLAUDE_PROJECT_DIR" || exit 0
58
+
59
+ # Detect package manager based on lock file presence
60
+ detect_package_manager() {
61
+ if [ -f "bun.lockb" ] || [ -f "bun.lock" ]; then
62
+ echo "bun"
63
+ elif [ -f "pnpm-lock.yaml" ]; then
64
+ echo "pnpm"
65
+ elif [ -f "yarn.lock" ]; then
66
+ echo "yarn"
67
+ elif [ -f "package-lock.json" ]; then
68
+ echo "npm"
69
+ else
70
+ echo "npm" # Default fallback
71
+ fi
72
+ }
73
+
74
+ PKG_MANAGER=$(detect_package_manager)
75
+
76
+ # Run ESLint with --fix on the specific file
77
+ echo "🔍 Running ESLint --fix on: $FILE_PATH"
78
+
79
+ # Run ESLint with fix flag and capture output
80
+ $PKG_MANAGER run lint --fix "$FILE_PATH" 2>&1 | while IFS= read -r line; do
81
+ # Filter out common noise from package manager output
82
+ if [[ ! "$line" =~ ^$ ]] && \
83
+ [[ ! "$line" =~ "Need to install the following packages" ]] && \
84
+ [[ ! "$line" =~ "Ok to proceed" ]]; then
85
+ echo "$line"
86
+ fi
87
+ done
88
+
89
+ # Check the exit status (use PIPESTATUS to get the eslint exit code, not the while loop)
90
+ EXIT_CODE=${PIPESTATUS[0]}
91
+
92
+ if [ $EXIT_CODE -eq 0 ]; then
93
+ echo "✓ ESLint: No issues found in $(basename "$FILE_PATH")"
94
+ elif [ $EXIT_CODE -eq 1 ]; then
95
+ echo "✓ ESLint: Fixed issues in $(basename "$FILE_PATH")"
96
+ echo " Some issues were automatically fixed. Please review the changes."
97
+ else
98
+ echo "⚠ ESLint found issues that couldn't be auto-fixed in: $FILE_PATH" >&2
99
+ echo " You may need to run '$PKG_MANAGER run lint:fix' manually or fix the issues by hand." >&2
100
+ fi
101
+
102
+ # Always exit successfully to not interrupt Claude's workflow
103
+ exit 0
@@ -0,0 +1,388 @@
1
+ ---
2
+ name: jsdoc-best-practices
3
+ description: Enforces JSDoc documentation standards for this TypeScript project. This skill should be used when writing or reviewing TypeScript code to ensure proper documentation with file preambles, function docs, interface docs, and the critical distinction between documenting "what" vs "why". Use this skill to understand the project's JSDoc ESLint rules and established patterns.
4
+ ---
5
+
6
+ # JSDoc Best Practices
7
+
8
+ ## Overview
9
+
10
+ This skill defines the JSDoc documentation standards for this project. The core principle is that **documentation should explain "why", not just "what"**. Code already shows what it does—good documentation explains the reasoning, context, and non-obvious details that help developers understand and maintain the code.
11
+
12
+ ## Core Philosophy: Why Over What
13
+
14
+ ### The Problem with "What" Documentation
15
+
16
+ ```typescript
17
+ // Bad: Just restates the code
18
+ /**
19
+ * Gets the user by ID
20
+ * @param id - The ID
21
+ * @returns The user
22
+ */
23
+ function getUserById(id: string): User { ... }
24
+ ```
25
+
26
+ This documentation adds no value—the function name already tells us it gets a user by ID.
27
+
28
+ ### The Solution: Document "Why"
29
+
30
+ ```typescript
31
+ // Good: Explains context, constraints, and non-obvious behavior
32
+ /**
33
+ * Retrieves a user by their unique identifier
34
+ * @param id - The user's UUID (not the legacy numeric ID)
35
+ * @returns The user if found, null if not found or soft-deleted
36
+ * @remarks Used by DataLoader for batching - maintains input order
37
+ */
38
+ function getUserById(id: string): User | null { ... }
39
+ ```
40
+
41
+ This documentation adds value by explaining:
42
+ - What kind of ID (UUID vs legacy)
43
+ - What happens when not found
44
+ - Why this specific implementation exists (DataLoader batching)
45
+
46
+ ## ESLint Enforcement
47
+
48
+ The project enforces JSDoc through `eslint-plugin-jsdoc` with these rules:
49
+
50
+ ### Required Documentation
51
+
52
+ | Rule | Setting | What It Enforces |
53
+ |------|---------|------------------|
54
+ | `jsdoc/require-jsdoc` | error | JSDoc on function declarations, interfaces, type aliases, and PascalCase arrow functions |
55
+ | `jsdoc/require-param-description` | error | All `@param` tags must have descriptions |
56
+ | `jsdoc/require-returns-description` | error | All `@returns` tags must have descriptions |
57
+ | `jsdoc/require-property-description` | error | All `@property` tags must have descriptions |
58
+
59
+ ### Allowed Tags
60
+
61
+ | Rule | Setting | Effect |
62
+ |------|---------|--------|
63
+ | `jsdoc/check-tag-names` | `definedTags: ["remarks"]` | Allows `@remarks` for "why" documentation |
64
+ | `jsdoc/no-types` | off | TypeScript types in JSDoc are optional |
65
+ | `jsdoc/require-param-type` | off | Types come from TypeScript, not JSDoc |
66
+ | `jsdoc/require-returns-type` | off | Types come from TypeScript, not JSDoc |
67
+
68
+ ### What Requires Documentation
69
+
70
+ Per `jsdoc/require-jsdoc` configuration:
71
+
72
+ ```javascript
73
+ {
74
+ require: {
75
+ FunctionDeclaration: true, // function foo() {}
76
+ MethodDefinition: false, // class methods (optional)
77
+ ClassDeclaration: false, // classes (optional but recommended)
78
+ ArrowFunctionExpression: false, // const foo = () => {} (optional)
79
+ FunctionExpression: false, // const foo = function() {} (optional)
80
+ },
81
+ contexts: [
82
+ "TSInterfaceDeclaration", // interface Foo {}
83
+ "TSTypeAliasDeclaration", // type Foo = ...
84
+ // PascalCase arrow functions (React components, factories):
85
+ "VariableDeclaration[declarations.0.init.type='ArrowFunctionExpression']:has([id.name=/^[A-Z]/])"
86
+ ]
87
+ }
88
+ ```
89
+
90
+ ## Documentation Patterns
91
+
92
+ ### File Preambles
93
+
94
+ Every file should have a preamble comment at the top:
95
+
96
+ ```typescript
97
+ /**
98
+ * @file complexity.plugin.ts
99
+ * @description Apollo Server plugin for query complexity analysis and limiting
100
+ * @module graphql
101
+ */
102
+ ```
103
+
104
+ | Tag | Purpose |
105
+ |-----|---------|
106
+ | `@file` | The filename (for navigation and search) |
107
+ | `@description` | What this file provides |
108
+ | `@module` | The feature module this belongs to |
109
+
110
+ ### Service Documentation
111
+
112
+ ```typescript
113
+ /**
114
+ * Service for managing user accounts
115
+ * @description Provides CRUD operations for user entities
116
+ * @remarks
117
+ * - All methods are idempotent
118
+ * - Throws NotFoundException for missing resources
119
+ * - Uses DataLoader batching for bulk operations
120
+ */
121
+ @Injectable()
122
+ export class UserService { ... }
123
+ ```
124
+
125
+ ### Method Documentation
126
+
127
+ ```typescript
128
+ /**
129
+ * Batch loads entities by IDs (for DataLoader)
130
+ * @param ids - Array of entity IDs to load
131
+ * @returns Promise resolving to array of entities in same order as input
132
+ * @remarks Used by DataLoader for batching - maintains input order
133
+ */
134
+ async findByIds(ids: readonly string[]): Promise<Entity[]> { ... }
135
+ ```
136
+
137
+ ### Interface Documentation
138
+
139
+ ```typescript
140
+ /**
141
+ * Interface for authentication services
142
+ * @description Defines the contract for both Cognito and Local auth implementations.
143
+ * This interface ensures both AuthService (production) and LocalAuthService
144
+ * (local development) provide the same public API for authentication operations.
145
+ */
146
+ export interface IAuthService {
147
+ /**
148
+ * Initiates the sign-in flow by sending an OTP to the user
149
+ * @param input - The sign-in input containing the user identifier (phone/email)
150
+ * @returns A promise resolving to the sign-in result with session and challenge info
151
+ */
152
+ signIn(input: SignInInput): Promise<SignInResult>;
153
+ }
154
+ ```
155
+
156
+ ### Type/Constant Documentation
157
+
158
+ ```typescript
159
+ /**
160
+ * Default complexity configuration
161
+ * @description Tune these values based on your server capacity
162
+ */
163
+ const COMPLEXITY_CONFIG = {
164
+ /** Maximum allowed query complexity */
165
+ maxComplexity: 100,
166
+ /** Default complexity for fields without explicit complexity */
167
+ defaultComplexity: 1,
168
+ } as const;
169
+ ```
170
+
171
+ ## The @remarks Tag
172
+
173
+ Use `@remarks` to document the "why" and important context:
174
+
175
+ ### When to Use @remarks
176
+
177
+ | Use Case | Example |
178
+ |----------|---------|
179
+ | Design decisions | `@remarks Uses closure pattern to cache between Lambda invocations` |
180
+ | Usage constraints | `@remarks Call getLoaders() once per GraphQL request in context factory` |
181
+ | Non-obvious behavior | `@remarks Maintains input order for DataLoader compatibility` |
182
+ | Important caveats | `@remarks All methods are idempotent - safe to retry` |
183
+ | Integration details | `@remarks Connects on module initialization, disconnects on destruction` |
184
+
185
+ ### @remarks Format
186
+
187
+ Use bullet points for multiple remarks:
188
+
189
+ ```typescript
190
+ /**
191
+ * Apollo Server plugin that calculates and limits query complexity
192
+ * @description Prevents expensive queries from overwhelming the server
193
+ * @remarks
194
+ * - Uses field extensions estimator for custom complexity values
195
+ * - Falls back to simple estimator with default complexity of 1
196
+ * - Rejects queries that exceed the configured maximum complexity
197
+ */
198
+ ```
199
+
200
+ Use inline for single remarks:
201
+
202
+ ```typescript
203
+ /**
204
+ * Creates all DataLoader instances for a single request
205
+ * @returns Object containing all typed DataLoaders
206
+ * @remarks Called in GraphQL context factory - creates fresh instances per request
207
+ */
208
+ ```
209
+
210
+ ## Parameter Descriptions
211
+
212
+ ### Bad: Restating the Name
213
+
214
+ ```typescript
215
+ /**
216
+ * @param id - The id
217
+ * @param name - The name
218
+ * @param options - The options
219
+ */
220
+ ```
221
+
222
+ ### Good: Adding Value
223
+
224
+ ```typescript
225
+ /**
226
+ * @param id - The user's UUID (not the legacy numeric ID from v1 API)
227
+ * @param name - Display name, max 50 characters, sanitized for XSS
228
+ * @param options - Configuration for the query, see QueryOptions type
229
+ */
230
+ ```
231
+
232
+ ### Parameter Description Guidelines
233
+
234
+ | Include | Avoid |
235
+ |---------|-------|
236
+ | Valid value ranges | Restating the parameter name |
237
+ | Format requirements | Restating the type |
238
+ | Default behavior | Obvious information |
239
+ | Edge cases | Implementation details |
240
+ | Units (ms, bytes, etc.) | Internal variable names |
241
+
242
+ ## Return Value Descriptions
243
+
244
+ ### Bad: Restating the Type
245
+
246
+ ```typescript
247
+ /**
248
+ * @returns The user
249
+ * @returns A promise
250
+ * @returns The result
251
+ */
252
+ ```
253
+
254
+ ### Good: Explaining Behavior
255
+
256
+ ```typescript
257
+ /**
258
+ * @returns The user if found, null if not found or soft-deleted
259
+ * @returns Promise resolving to array of entities in same order as input
260
+ * @returns Authentication tokens on success, error message on failure
261
+ */
262
+ ```
263
+
264
+ ## Anti-Patterns to Avoid
265
+
266
+ ### Don't Document the Obvious
267
+
268
+ ```typescript
269
+ // Wrong: Adds no value
270
+ /**
271
+ * Constructor
272
+ */
273
+ constructor() {}
274
+
275
+ /**
276
+ * Gets the name
277
+ * @returns The name
278
+ */
279
+ getName(): string { return this.name; }
280
+ ```
281
+
282
+ ### Don't Duplicate TypeScript Types
283
+
284
+ ```typescript
285
+ // Wrong: Type is already in signature
286
+ /**
287
+ * @param id - {string} The user ID
288
+ * @returns {Promise<User>} The user
289
+ */
290
+ async getUser(id: string): Promise<User> { ... }
291
+
292
+ // Correct: Description only, type from TypeScript
293
+ /**
294
+ * @param id - The user's UUID identifier
295
+ * @returns The user entity with populated relations
296
+ */
297
+ async getUser(id: string): Promise<User> { ... }
298
+ ```
299
+
300
+ ### Don't Write Implementation Comments
301
+
302
+ ```typescript
303
+ // Wrong: Documents how, not why
304
+ /**
305
+ * Loops through users and filters by active status
306
+ */
307
+ const activeUsers = users.filter(u => u.active);
308
+
309
+ // Correct: Self-documenting code needs no comment
310
+ // If explanation is needed, explain WHY:
311
+ // Active users are filtered first to avoid unnecessary permission checks
312
+ const activeUsers = users.filter(u => u.active);
313
+ ```
314
+
315
+ ## Quick Reference
316
+
317
+ ### Required Structure for Services
318
+
319
+ ```typescript
320
+ /**
321
+ * @file feature.service.ts
322
+ * @description Service providing feature functionality
323
+ * @module feature
324
+ */
325
+
326
+ /**
327
+ * Service for feature operations
328
+ * @description Brief description of what this service handles
329
+ * @remarks
330
+ * - Important architectural decisions
331
+ * - Usage patterns or constraints
332
+ */
333
+ @Injectable()
334
+ export class FeatureService {
335
+ /**
336
+ * Brief description of what this method does
337
+ * @param paramName - What this parameter represents and any constraints
338
+ * @returns What is returned and under what conditions
339
+ * @remarks Any non-obvious behavior or usage notes
340
+ */
341
+ methodName(paramName: Type): ReturnType { ... }
342
+ }
343
+ ```
344
+
345
+ ### Required Structure for Interfaces
346
+
347
+ ```typescript
348
+ /**
349
+ * Interface for feature operations
350
+ * @description Explains the contract this interface defines
351
+ */
352
+ export interface IFeature {
353
+ /**
354
+ * Method description
355
+ * @param param - Parameter description with constraints
356
+ * @returns Return description with conditions
357
+ */
358
+ method(param: Type): ReturnType;
359
+ }
360
+ ```
361
+
362
+ ### Required Structure for Types
363
+
364
+ ```typescript
365
+ /**
366
+ * Represents a feature configuration
367
+ * @description Used to configure feature behavior at initialization
368
+ */
369
+ export type FeatureConfig = {
370
+ /** Maximum retry attempts before failing */
371
+ maxRetries: number;
372
+ /** Timeout in milliseconds */
373
+ timeoutMs: number;
374
+ };
375
+ ```
376
+
377
+ ## Verification Checklist
378
+
379
+ Before committing code, verify:
380
+
381
+ 1. **File preamble exists**: `@file`, `@description`, `@module`
382
+ 2. **Function declarations have JSDoc**: Required by ESLint
383
+ 3. **Interfaces have JSDoc**: Required by ESLint
384
+ 4. **Type aliases have JSDoc**: Required by ESLint
385
+ 5. **Parameters have meaningful descriptions**: Not just restating the name
386
+ 6. **Returns have meaningful descriptions**: Explain conditions and edge cases
387
+ 7. **@remarks used for "why"**: Design decisions, constraints, non-obvious behavior
388
+ 8. **No TypeScript types in JSDoc**: Types come from the signature