@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
package/README.md ADDED
@@ -0,0 +1,867 @@
1
+ # Lisa
2
+
3
+ Lisa is a **Claude Code governance framework** that ensures Claude produces high-quality, consistent code through multiple layers of guardrails, guidance, and automated enforcement.
4
+
5
+ ## Why Lisa Exists
6
+
7
+ Claude Code is powerful, but without guardrails it can:
8
+ - Produce inconsistent code styles across sessions
9
+ - Skip tests or quality checks when not reminded
10
+ - Over-engineer solutions or create unnecessary abstractions
11
+ - Mutate data instead of using immutable patterns
12
+ - Leave deprecated code instead of cleanly deleting it
13
+
14
+ Lisa solves this by applying a comprehensive governance system that guides Claude's behavior at every step.
15
+
16
+ **The key insight:** Not every developer needs to be an AI expert. Platform teams with deep AI knowledge can encode best practices into Lisa, and implementation teams get the benefits automatically through simple commands.
17
+
18
+ ## How It Works
19
+
20
+ Lisa applies multiple layers of quality control to your project:
21
+
22
+ | Layer | Purpose | Examples |
23
+ |-------|---------|----------|
24
+ | **CLAUDE.md** | Direct behavioral rules | "Never skip tests", "Always use immutable patterns" |
25
+ | **Skills** | Teach patterns & philosophy | Immutability, TDD, YAGNI/SOLID/DRY/KISS |
26
+ | **Hooks** | Auto-enforcement on every edit | Format and lint after Write/Edit operations |
27
+ | **Slash Commands** | Guided workflows | `/project:implement`, `/project:review`, `/git:commit` |
28
+ | **Custom ESLint Plugins** | Enforce code structure | Statement ordering, component structure |
29
+ | **Thresholds** | Configurable limits | Max complexity, max file length |
30
+ | **Git Hooks** | Pre-commit quality gates | Husky + lint-staged + commitlint |
31
+ | **Agents** | Specialized sub-agents | Codebase analysis, pattern finding |
32
+
33
+ These layers work together. When Claude writes code:
34
+ 1. **CLAUDE.md** tells it what patterns to follow
35
+ 2. **Skills** teach it the philosophy behind those patterns
36
+ 3. **Hooks** automatically format and lint the code
37
+ 4. **ESLint plugins** catch structural violations
38
+ 5. **Git hooks** prevent commits that fail quality checks
39
+
40
+ ## Team & Organization Usage
41
+
42
+ Lisa is designed for a **two-tier organizational model** that separates AI expertise from day-to-day development:
43
+
44
+ ```
45
+ ┌─────────────────────────────────────────────────────────────┐
46
+ │ PLATFORM TEAM │
47
+ │ │
48
+ │ • Deep AI/LLM expertise (prompting, context engineering) │
49
+ │ • Domain knowledge of coding standards & best practices │
50
+ │ • Maintains and iterates on Lisa configurations │
51
+ │ • Writes skills, hooks, ESLint rules, slash commands │
52
+ │ • Tests guardrails against real-world edge cases │
53
+ │ │
54
+ │ │ │
55
+ │ ▼ │
56
+ │ Lisa Repository │
57
+ │ │ │
58
+ │ ▼ │
59
+ ├─────────────────────────────────────────────────────────────┤
60
+ │ IMPLEMENTATION TEAMS │
61
+ │ │
62
+ │ • Focus on building end-user software │
63
+ │ • Run `lisa.sh` to bootstrap projects │
64
+ │ • Use simple commands like `/project:implement` │
65
+ │ • Don't need deep AI expertise │
66
+ │ • Automatically get guardrails & quality enforcement │
67
+ │ │
68
+ └─────────────────────────────────────────────────────────────┘
69
+ ```
70
+
71
+ ### Why This Model Works
72
+
73
+ **For Platform Teams:**
74
+ - Centralize AI governance expertise in one place
75
+ - Iterate on prompts, skills, and guardrails based on real feedback
76
+ - A/B test different approaches across the organization
77
+ - Push improvements to all teams instantly via Lisa updates
78
+
79
+ **For Implementation Teams:**
80
+ - No need to learn prompt engineering or context engineering
81
+ - Simple commands produce high-quality, consistent code
82
+ - Guardrails prevent common mistakes automatically
83
+ - Focus on business logic, not AI wrangling
84
+
85
+ ### How Implementation Teams Work
86
+
87
+ Once Lisa is applied to a project, developers have two paths:
88
+
89
+ **Path 1: Just Type a Prompt**
90
+
91
+ Even if a developer just types a vague request, Lisa's built-in `prompt-complexity-scorer` skill automatically evaluates it:
92
+
93
+ ```
94
+ Developer: "Make the app faster"
95
+
96
+ Claude: This request scores 8/10 on complexity. I suggest writing it
97
+ as a spec to plan it out properly.
98
+
99
+ Would you like me to create `specs/performance-optimization.md`?
100
+ ```
101
+
102
+ Complex or vague prompts (score 5+) are automatically routed to the spec workflow. Simple, well-defined requests (score 1-4) proceed immediately. Developers don't need to know which path to take—Lisa routes them automatically.
103
+
104
+ **Path 2: The Full Workflow**
105
+
106
+ For planned work, the workflow is two commands:
107
+
108
+ ```bash
109
+ # 1. Create a spec file describing what you want
110
+ # (or let Claude create it from your prompt)
111
+ echo "Add user authentication with OAuth" > specs/add-auth.md
112
+
113
+ # 2. Bootstrap: research, analyze, identify gaps
114
+ /project:bootstrap @specs/add-auth.md
115
+
116
+ # 3. Execute: plan tasks, implement with TDD, verify completion
117
+ /project:execute @projects/add-auth
118
+ ```
119
+
120
+ That's it. Behind the scenes, Lisa ensures:
121
+ - Comprehensive codebase and web research
122
+ - Knowledge gap detection (stops if questions need answering)
123
+ - Task breakdown and TDD implementation
124
+ - Verification that all tasks completed
125
+ - New patterns captured in `PROJECT_RULES.md`
126
+
127
+ ### Platform Team Iteration Example
128
+
129
+ 1. **Platform Team** discovers Claude sometimes creates overly complex functions
130
+ 2. **Platform Team** adds a `cognitiveComplexity: 10` threshold to ESLint config
131
+ 3. **Platform Team** writes a skill teaching Claude to decompose complex logic
132
+ 4. **Platform Team** pushes update to Lisa repository
133
+ 5. **Implementation Teams** run `lisa.sh` on their projects (or it happens via CI)
134
+ 6. **Implementation Teams** now automatically get simpler, more maintainable code
135
+
136
+ ### Forking for Your Organization
137
+
138
+ ```bash
139
+ # Fork Lisa for your organization
140
+ gh repo fork CodySwannGT/lisa --org your-org --clone
141
+
142
+ # Customize configurations
143
+ cd lisa
144
+ # Edit skills, hooks, CLAUDE.md, ESLint rules, etc.
145
+
146
+ # Push to your org's fork
147
+ git push origin main
148
+ ```
149
+
150
+ Implementation teams then clone from your organization's fork:
151
+
152
+ ```bash
153
+ git clone https://github.com/your-org/lisa ~/lisa
154
+ ~/lisa/lisa.sh /path/to/project
155
+ ```
156
+
157
+ ## Installation
158
+
159
+ Clone the Lisa repository to your machine:
160
+
161
+ ```bash
162
+ git clone <lisa-repo-url> ~/lisa
163
+ cd ~/lisa
164
+ npm install
165
+ npm run build
166
+ ```
167
+
168
+ ### Requirements
169
+
170
+ - **Node.js 18+**
171
+ - **npm** or **bun**
172
+
173
+ ## Usage
174
+
175
+ Run Lisa against any project directory:
176
+
177
+ ```bash
178
+ ~/lisa/lisa.sh /path/to/your-project
179
+
180
+ # Or from within your project
181
+ ~/lisa/lisa.sh .
182
+ ```
183
+
184
+ ### Options
185
+
186
+ | Option | Description |
187
+ |--------|-------------|
188
+ | `-n, --dry-run` | Show what would be done without making changes |
189
+ | `-y, --yes` | Non-interactive mode (auto-accept defaults, overwrite on conflict) |
190
+ | `-v, --validate` | Validate project compatibility without applying changes |
191
+ | `-u, --uninstall` | Remove Lisa-managed files from the project |
192
+ | `-h, --help` | Show help message |
193
+
194
+ ### Dry Run
195
+
196
+ Preview changes before applying them:
197
+
198
+ ```bash
199
+ ~/lisa/lisa.sh --dry-run /path/to/your-project
200
+ ```
201
+
202
+ ### CI/CD Usage
203
+
204
+ For automated pipelines, use non-interactive mode:
205
+
206
+ ```bash
207
+ ~/lisa/lisa.sh --yes /path/to/project
208
+ ```
209
+
210
+ ### Validate Mode
211
+
212
+ Check project compatibility without making changes:
213
+
214
+ ```bash
215
+ ~/lisa/lisa.sh --validate /path/to/project
216
+ ```
217
+
218
+ ### Uninstall
219
+
220
+ Remove Lisa-managed files from a project:
221
+
222
+ ```bash
223
+ ~/lisa/lisa.sh --uninstall /path/to/project
224
+
225
+ # Preview what would be removed
226
+ ~/lisa/lisa.sh --dry-run --uninstall /path/to/project
227
+ ```
228
+
229
+ Note: Files applied with `copy-contents` or `merge` strategies require manual cleanup as they modify existing content.
230
+
231
+ ### GitHub Rulesets
232
+
233
+ Lisa can also apply GitHub repository rulesets via a separate script. This enforces branch protection rules like requiring PRs, status checks, and preventing force pushes.
234
+
235
+ ```bash
236
+ # Apply rulesets to a project's GitHub repo
237
+ ~/lisa/lisa-github-rulesets.sh /path/to/project
238
+
239
+ # Preview what would be applied
240
+ ~/lisa/lisa-github-rulesets.sh --dry-run /path/to/project
241
+
242
+ # Non-interactive mode
243
+ ~/lisa/lisa-github-rulesets.sh --yes /path/to/project
244
+ ```
245
+
246
+ **Requirements:**
247
+ - `gh` CLI installed and authenticated (`gh auth login`)
248
+ - Admin permissions on the repository
249
+ - `jq` installed
250
+
251
+ **How it works:**
252
+
253
+ 1. Detects project types (same as main Lisa script)
254
+ 2. Collects ruleset templates from `github-rulesets/` directories:
255
+ - `all/github-rulesets/` → applied to all projects
256
+ - `typescript/github-rulesets/` → TypeScript projects
257
+ - `expo/github-rulesets/` → Expo projects (inherits typescript)
258
+ - etc.
259
+ 3. Creates or updates rulesets via the GitHub API
260
+
261
+ **Template format:**
262
+
263
+ Place JSON files in `{type}/github-rulesets/`. The script strips read-only fields (`id`, `source`, `source_type`) before applying:
264
+
265
+ ```json
266
+ {
267
+ "name": "Protect Main Branch",
268
+ "target": "branch",
269
+ "enforcement": "active",
270
+ "conditions": {
271
+ "ref_name": {
272
+ "include": ["~DEFAULT_BRANCH"],
273
+ "exclude": []
274
+ }
275
+ },
276
+ "rules": [
277
+ { "type": "deletion" },
278
+ { "type": "non_fast_forward" },
279
+ {
280
+ "type": "pull_request",
281
+ "parameters": {
282
+ "required_approving_review_count": 1,
283
+ "dismiss_stale_reviews_on_push": true,
284
+ "require_code_owner_review": false,
285
+ "require_last_push_approval": true,
286
+ "required_review_thread_resolution": true
287
+ }
288
+ }
289
+ ]
290
+ }
291
+ ```
292
+
293
+ You can export an existing ruleset from GitHub's UI or API and place it in the appropriate directory. The script handles idempotency—if a ruleset with the same name exists, it updates rather than creates.
294
+
295
+ ## What Lisa Applies
296
+
297
+ ### CLAUDE.md - Behavioral Rules
298
+
299
+ Direct instructions for Claude Code:
300
+
301
+ ```markdown
302
+ Always invoke /coding-philosophy skill to enforce immutable patterns
303
+ Always make atomic commits with clear conventional messages
304
+ Never skip or disable any tests or quality checks
305
+ Never use --no-verify with git commands
306
+ Never create TODOs or placeholders
307
+ ```
308
+
309
+ ### Skills - Teaching Philosophy
310
+
311
+ Skills teach Claude the "why" behind coding decisions:
312
+
313
+ - **coding-philosophy** - Immutability, function structure, TDD, clean deletion
314
+ - **jsdoc-best-practices** - Documentation that explains "why" not "what"
315
+ - **container-view-pattern** - Component architecture for React/Expo
316
+
317
+ ### Hooks - Automated Enforcement
318
+
319
+ Hooks run automatically during Claude Code sessions:
320
+
321
+ | Hook | Trigger | Action |
322
+ |------|---------|--------|
323
+ | `format-on-edit.sh` | After Write/Edit | Run Prettier on changed files |
324
+ | `lint-on-edit.sh` | After Write/Edit | Run ESLint on changed files |
325
+ | `install_pkgs.sh` | Session start | Ensure dependencies installed |
326
+ | `notify-ntfy.sh` | Permission prompt/Stop | Send notifications |
327
+
328
+ **Async Workflow:** Lisa includes built-in [ntfy.sh](https://ntfy.sh) integration for push notifications. This enables a powerful async workflow with Claude Code Web - fire off tasks and get notified when they complete or need attention. See [Claude Code Web + Notifications](docs/workflows/claude-code-web-notifications.md) for setup instructions.
329
+
330
+ ### Slash Commands - Guided Workflows
331
+
332
+ Pre-built workflows for common tasks:
333
+
334
+ | Command | Purpose |
335
+ |---------|---------|
336
+ | `/project:plan` | Create implementation plan |
337
+ | `/project:implement` | Execute all planned tasks |
338
+ | `/project:review` | Run code review |
339
+ | `/project:verify` | Run all quality checks |
340
+ | `/git:commit` | Create conventional commit |
341
+ | `/git:submit-pr` | Create pull request |
342
+
343
+ ### Custom ESLint Plugins
344
+
345
+ Lisa includes custom ESLint plugins that enforce code structure:
346
+
347
+ **eslint-plugin-code-organization**
348
+ - `enforce-statement-order` - Definitions → Side effects → Return
349
+
350
+ **eslint-plugin-component-structure** (Expo)
351
+ - `single-component-per-file` - One component per file
352
+ - `require-memo-in-view` - Memoization in view components
353
+ - `no-inline-styles` - Extract styles to StyleSheet
354
+
355
+ ### Thresholds
356
+
357
+ Configurable limits in `eslint.thresholds.config.json`:
358
+
359
+ ```json
360
+ {
361
+ "cognitiveComplexity": 10,
362
+ "maxLines": 300,
363
+ "maxLinesView": 300
364
+ }
365
+ ```
366
+
367
+ ## Project Type Detection
368
+
369
+ Lisa auto-detects project types and applies appropriate configurations:
370
+
371
+ | Type | Detection |
372
+ |------|-----------|
373
+ | TypeScript | `tsconfig.json` or `"typescript"` in package.json |
374
+ | npm-package | Not `"private": true` and has `main`, `bin`, `exports`, or `files` |
375
+ | Expo | `app.json`, `eas.json`, or `"expo"` in package.json |
376
+ | NestJS | `nest-cli.json` or `"@nestjs"` in package.json |
377
+ | CDK | `cdk.json` or `"aws-cdk"` in package.json |
378
+
379
+ ### Cascading Inheritance
380
+
381
+ Types inherit from their parents:
382
+
383
+ ```
384
+ all/ ← Applied to every project
385
+ └── typescript/ ← TypeScript-specific
386
+ ├── npm-package/ ← Publishable npm packages (includes typescript)
387
+ ├── expo/ ← Expo (includes typescript)
388
+ ├── nestjs/ ← NestJS (includes typescript)
389
+ └── cdk/ ← CDK (includes typescript)
390
+ ```
391
+
392
+ An Expo project receives configs from: `all/` → `typescript/` → `expo/`
393
+
394
+ An npm package receives configs from: `all/` → `typescript/` → `npm-package/`
395
+
396
+ ### Why Stack-Specific Rules Matter
397
+
398
+ **Generic AI rules don't work.** Each technology stack has its own:
399
+ - Architectural patterns (NestJS modules vs. Expo screens vs. CDK constructs)
400
+ - Testing approaches (Jest + Testing Library vs. Supertest vs. CDK assertions)
401
+ - File organization conventions
402
+ - Performance pitfalls
403
+ - Security considerations
404
+
405
+ When Claude writes code without stack-specific guidance, it produces "generic" solutions that miss the idioms and best practices of your stack. For example:
406
+
407
+ | Stack | Generic AI Output | With Lisa Stack Rules |
408
+ |-------|-------------------|----------------------|
409
+ | **Expo** | Inline styles, direct RN imports | Uses design system, container/view pattern |
410
+ | **NestJS** | Mixed concerns in controllers | Proper service/repository separation |
411
+ | **CDK** | Hardcoded values, no constructs | Parameterized, reusable L3 constructs |
412
+
413
+ The more specific the guidance, the better the output. That's why Lisa is structured around project types rather than one-size-fits-all rules.
414
+
415
+ ### npm Package Publishing
416
+
417
+ Projects detected as `npm-package` automatically receive a GitHub Actions workflow for publishing to npm using **OIDC trusted publishing**. This workflow:
418
+
419
+ 1. Triggers on push to `main`
420
+ 2. Runs semantic versioning via `release.yml`
421
+ 3. Publishes to npm with `npm publish --access public --provenance`
422
+
423
+ **Step 1: First-Time Publish (Manual)**
424
+
425
+ OIDC trusted publishing requires the package to exist on npm first. For new packages, do a manual initial publish:
426
+
427
+ ```bash
428
+ # Login to npm (opens browser for authentication)
429
+ npm login
430
+
431
+ # Verify you're logged in
432
+ npm whoami
433
+
434
+ # Build the package
435
+ npm run build
436
+
437
+ # Publish for the first time
438
+ npm publish --access public
439
+ ```
440
+
441
+ **Step 2: Configure Trusted Publisher on npm**
442
+
443
+ After the first publish, configure OIDC for automated future releases:
444
+
445
+ 1. Go to [npmjs.com](https://www.npmjs.com/) and navigate to your package
446
+ 2. Click **Settings** → **Trusted Publishers**
447
+ 3. Click **Add GitHub Actions**
448
+ 4. Fill in the required fields:
449
+ - **Organization/User**: Your GitHub username or org (e.g., `CodySwannGT`)
450
+ - **Repository**: Your repo name (e.g., `lisa`)
451
+ - **Workflow filename**: `publish.yml` (must match exactly, including `.yml`)
452
+ - **Environment**: Leave blank unless using GitHub environments
453
+ 5. Click **Save**
454
+
455
+ **Step 3: Future Releases (Automatic)**
456
+
457
+ Once configured, all future releases are automatic:
458
+ - Push to `main` triggers the workflow
459
+ - Semantic versioning determines the version bump
460
+ - OIDC authenticates without tokens
461
+ - Package publishes with provenance attestation
462
+
463
+ **Benefits of OIDC Trusted Publishing:**
464
+
465
+ - No tokens to manage, rotate, or risk leaking
466
+ - Automatic provenance attestations for supply chain security
467
+ - Short-lived, workflow-specific credentials
468
+ - No 90-day expiration limits to worry about
469
+
470
+ **Requirements:**
471
+
472
+ - npm CLI 11.5+ (workflow automatically installs latest)
473
+ - Cannot use self-hosted GitHub runners (not yet supported by npm)
474
+
475
+ ### Extending Lisa for Other Stacks
476
+
477
+ Lisa currently supports TypeScript, npm-package, Expo, NestJS, and CDK—but the architecture is designed for extension. **We're calling on the community to contribute stack-specific configurations.**
478
+
479
+ **Stacks that would benefit from Lisa extensions:**
480
+
481
+ | Stack | Potential Rules |
482
+ |-------|-----------------|
483
+ | **Next.js** | App Router patterns, Server Components vs. Client, caching strategies |
484
+ | **React Native (non-Expo)** | Native module patterns, platform-specific code |
485
+ | **Django** | Model/View/Template separation, ORM patterns, admin customization |
486
+ | **FastAPI** | Dependency injection, Pydantic models, async patterns |
487
+ | **Spring Boot** | Bean lifecycle, annotation patterns, JPA repositories |
488
+ | **Laravel** | Eloquent patterns, Blade templates, queue workers |
489
+ | **Rails** | Convention over configuration, concerns, ActiveRecord |
490
+ | **Go (Gin/Echo)** | Error handling, middleware patterns, struct design |
491
+ | **Rust (Axum/Actix)** | Ownership patterns, error types, async runtime |
492
+ | **Flutter** | Widget composition, BLoC pattern, platform channels |
493
+ | **Vue/Nuxt** | Composition API, Pinia stores, auto-imports |
494
+ | **Svelte/SvelteKit** | Reactive statements, load functions, form actions |
495
+ | **Terraform** | Module structure, state management, provider patterns |
496
+ | **Kubernetes** | Helm charts, operator patterns, RBAC |
497
+
498
+ **To contribute a new stack:**
499
+
500
+ 1. Create a new detector in `src/detection/detectors/`
501
+ 2. Register the detector in `src/detection/index.ts`
502
+ 3. Add the config directory structure:
503
+
504
+ ```bash
505
+ # Create the stack directory
506
+ mkdir -p your-stack/{copy-overwrite,merge}
507
+
508
+ # Add stack-specific skills
509
+ mkdir -p your-stack/copy-overwrite/.claude/skills/your-pattern
510
+ cat > your-stack/copy-overwrite/.claude/skills/your-pattern/SKILL.md << 'EOF'
511
+ ---
512
+ name: your-pattern
513
+ description: Teaches Claude the idioms of your stack
514
+ ---
515
+ # Your Pattern
516
+ ...
517
+ EOF
518
+
519
+ # Add stack-specific ESLint rules
520
+ mkdir -p your-stack/copy-overwrite/eslint-plugin-your-stack
521
+
522
+ # Add package.json dependencies via merge/
523
+ ```
524
+
525
+ See the `expo/` directory for a comprehensive example of stack-specific configuration.
526
+
527
+ **Example prompts to bootstrap a new stack with Claude:**
528
+
529
+ Use these prompts in Claude Code (with Lisa applied) to generate stack configurations:
530
+
531
+ ```
532
+ Research Rails best practices and create a Lisa configuration for Ruby on Rails projects.
533
+ Look at the expo/ directory as a reference for structure. Include:
534
+ - Detection logic as a new detector in src/detection/detectors/
535
+ - Skills for Rails conventions (MVC, ActiveRecord patterns, concerns)
536
+ - ESLint equivalent rules using RuboCop (create a rubocop config, not an ESLint plugin)
537
+ - Common .gitignore entries for Rails projects
538
+ ```
539
+
540
+ ```
541
+ Create a Lisa configuration for Flutter projects. Reference expo/ for structure.
542
+ Include:
543
+ - Detection logic (pubspec.yaml with flutter dependency)
544
+ - Skills for widget composition, BLoC/Riverpod patterns, platform channels
545
+ - Dart analyzer rules (analysis_options.yaml instead of ESLint)
546
+ - Flutter-specific .gitignore entries
547
+ ```
548
+
549
+ ```
550
+ Add Next.js support to Lisa. This should be a child of typescript/ (like expo is).
551
+ Include:
552
+ - Detection logic (next.config.js or "next" in package.json)
553
+ - Skills for App Router patterns, Server vs Client Components, caching
554
+ - ESLint rules for Next.js idioms (or extend next/core-web-vitals)
555
+ - Typical Next.js scripts in package.json
556
+ ```
557
+
558
+ ```
559
+ Analyze the expo/ directory structure and create equivalent configuration for Django.
560
+ Include:
561
+ - Detection logic (manage.py, settings.py, or django in requirements.txt)
562
+ - Skills for MVT pattern, ORM best practices, admin customization
563
+ - Linting via flake8/ruff config (not ESLint)
564
+ - Django-specific .gitignore entries
565
+ ```
566
+
567
+ ## Copy Strategies
568
+
569
+ Each type directory contains subdirectories that control how files are applied:
570
+
571
+ | Strategy | Dest doesn't exist | Dest identical | Dest differs |
572
+ |----------|-------------------|----------------|--------------|
573
+ | `copy-overwrite/` | Copy | Skip | Prompt (overwrite/skip) |
574
+ | `copy-contents/` | Copy | Skip | Append missing lines |
575
+ | `create-only/` | Copy | Skip | Skip |
576
+ | `merge/` | Copy | Skip | JSON deep merge |
577
+
578
+ ### Strategy Details
579
+
580
+ **copy-overwrite**: Standard config files that should match Lisa's version. Prompts when local changes exist.
581
+
582
+ **copy-contents**: For files like `.gitignore` where you want to ensure certain lines exist without removing custom entries.
583
+
584
+ **create-only**: Template files that should only be created once (e.g., `PROJECT_RULES.md` for project-specific customization).
585
+
586
+ **merge**: For `package.json` files. Performs a deep merge where:
587
+ - Lisa provides default values
588
+ - Your project's values take precedence
589
+ - Missing scripts/dependencies are added without overwriting existing ones
590
+
591
+ ## Architecture
592
+
593
+ Lisa is written in TypeScript with the following structure:
594
+
595
+ ```
596
+ lisa/
597
+ ├── src/
598
+ │ ├── index.ts # CLI entry point
599
+ │ ├── cli/
600
+ │ │ ├── index.ts # Commander setup
601
+ │ │ └── prompts.ts # Interactive prompts
602
+ │ ├── core/
603
+ │ │ ├── lisa.ts # Main orchestrator
604
+ │ │ ├── config.ts # Types and configuration
605
+ │ │ └── manifest.ts # Manifest operations
606
+ │ ├── detection/
607
+ │ │ ├── index.ts # Detector registry
608
+ │ │ └── detectors/ # Project type detectors
609
+ │ ├── strategies/
610
+ │ │ ├── index.ts # Strategy registry
611
+ │ │ ├── copy-overwrite.ts
612
+ │ │ ├── copy-contents.ts
613
+ │ │ ├── create-only.ts
614
+ │ │ └── merge.ts
615
+ │ ├── transaction/
616
+ │ │ ├── backup.ts # Backup/restore
617
+ │ │ └── transaction.ts # Atomic wrapper
618
+ │ ├── logging/ # Console logger
619
+ │ ├── errors/ # Custom error types
620
+ │ └── utils/ # File and JSON utilities
621
+ ├── all/ # Applied to all projects
622
+ ├── typescript/ # TypeScript projects
623
+ ├── npm-package/ # Publishable npm packages
624
+ ├── expo/ # Expo projects
625
+ ├── nestjs/ # NestJS projects
626
+ ├── cdk/ # CDK projects
627
+ ├── tests/ # Vitest test suite
628
+ ├── lisa.sh # Wrapper script
629
+ ├── package.json
630
+ ├── tsconfig.json
631
+ └── vitest.config.ts
632
+ ```
633
+
634
+ ## Coding Philosophy
635
+
636
+ Lisa enforces a consistent coding philosophy through skills and linting:
637
+
638
+ ### Core Principles
639
+
640
+ 1. **Immutability First** - Never mutate data; always create new references
641
+ 2. **Function Structure** - Definitions → Side effects → Return
642
+ 3. **Functional Transformations** - Use `map`, `filter`, `reduce` over loops
643
+ 4. **Test-Driven Development** - Write failing tests before implementation
644
+ 5. **Clean Deletion** - Delete old code completely; no deprecation layers
645
+
646
+ ### YAGNI + SOLID + DRY + KISS
647
+
648
+ When principles conflict, **KISS wins**. The decision framework:
649
+
650
+ 1. Do I need this now? (YAGNI) → If no, don't build it
651
+ 2. Is there a simpler way? (KISS) → Choose simpler
652
+ 3. Am I repeating 3+ times? (DRY) → Extract if simpler
653
+ 4. Does this do one thing? (SRP) → Split only if clearer
654
+
655
+ ## Configuration Customization
656
+
657
+ ### Project-Specific Rules
658
+
659
+ Edit `PROJECT_RULES.md` (created by Lisa) to add project-specific instructions:
660
+
661
+ ```markdown
662
+ # Project Rules
663
+
664
+ This is a mobile app for sports betting.
665
+ Always use the design system components from `@/ui`.
666
+ Never import directly from react-native.
667
+ ```
668
+
669
+ ### Threshold Adjustment
670
+
671
+ Edit `eslint.thresholds.config.json` to adjust limits:
672
+
673
+ ```json
674
+ {
675
+ "cognitiveComplexity": 15,
676
+ "maxLines": 400
677
+ }
678
+ ```
679
+
680
+ ### Local Settings
681
+
682
+ Create `.claude/settings.local.json` for machine-specific overrides:
683
+
684
+ ```json
685
+ {
686
+ "env": {
687
+ "CUSTOM_VAR": "value"
688
+ }
689
+ }
690
+ ```
691
+
692
+ This file should be in `.gitignore`.
693
+
694
+ ## Troubleshooting
695
+
696
+ ### Common Issues
697
+
698
+ #### "Node.js not found"
699
+
700
+ Install Node.js 18+:
701
+
702
+ ```bash
703
+ # macOS with Homebrew
704
+ brew install node
705
+
706
+ # Using nvm
707
+ nvm install 18
708
+ nvm use 18
709
+ ```
710
+
711
+ #### "Permission denied" when running lisa.sh
712
+
713
+ Make the script executable:
714
+
715
+ ```bash
716
+ chmod +x ~/lisa/lisa.sh
717
+ ```
718
+
719
+ #### JSON merge fails with "parse error"
720
+
721
+ Your project's `package.json` may have syntax errors. Validate it:
722
+
723
+ ```bash
724
+ node -e "require('./package.json')"
725
+ ```
726
+
727
+ #### Hooks not running
728
+
729
+ Ensure `.claude/settings.json` was applied and hooks are executable:
730
+
731
+ ```bash
732
+ chmod +x .claude/hooks/*.sh
733
+ ```
734
+
735
+ ### Debug Mode
736
+
737
+ ```bash
738
+ # See all operations without making changes
739
+ ~/lisa/lisa.sh --dry-run /path/to/project
740
+
741
+ # Check compatibility issues
742
+ ~/lisa/lisa.sh --validate /path/to/project
743
+ ```
744
+
745
+ ## Development
746
+
747
+ ### Building
748
+
749
+ ```bash
750
+ npm install
751
+ npm run build
752
+ ```
753
+
754
+ ### Testing
755
+
756
+ Lisa includes a comprehensive test suite using Vitest:
757
+
758
+ ```bash
759
+ # Run all tests
760
+ npm test
761
+
762
+ # Run tests in watch mode
763
+ npm run test:watch
764
+
765
+ # Run with coverage
766
+ npm run test:coverage
767
+ ```
768
+
769
+ ### Type Checking
770
+
771
+ ```bash
772
+ npm run typecheck
773
+ ```
774
+
775
+ ## Adding New Configurations
776
+
777
+ ### Adding a Skill
778
+
779
+ ```bash
780
+ mkdir -p all/copy-overwrite/.claude/skills/my-skill
781
+ cat > all/copy-overwrite/.claude/skills/my-skill/SKILL.md << 'EOF'
782
+ ---
783
+ name: my-skill
784
+ description: What this skill teaches Claude
785
+ ---
786
+
787
+ # My Skill
788
+
789
+ ## When to Use
790
+ - Scenario 1
791
+ - Scenario 2
792
+
793
+ ## Instructions
794
+ 1. Step one
795
+ 2. Step two
796
+ EOF
797
+ ```
798
+
799
+ ### Adding a Slash Command
800
+
801
+ ```bash
802
+ mkdir -p all/copy-overwrite/.claude/commands/my-category
803
+ cat > all/copy-overwrite/.claude/commands/my-category/my-command.md << 'EOF'
804
+ ---
805
+ description: What this command does
806
+ argument-hint: <optional-args>
807
+ ---
808
+
809
+ Instructions for Claude to follow...
810
+ EOF
811
+ ```
812
+
813
+ ### Adding an ESLint Rule
814
+
815
+ 1. Add rule to appropriate plugin in `eslint-plugin-*/rules/`
816
+ 2. Register in plugin's `index.js`
817
+ 3. Add tests in `__tests__/`
818
+
819
+ ### Adding a New Project Type Detector
820
+
821
+ 1. Create detector in `src/detection/detectors/your-type.ts`
822
+ 2. Register in `src/detection/index.ts`
823
+ 3. Update `PROJECT_TYPE_HIERARCHY` in `src/core/config.ts` if it has a parent
824
+ 4. Add tests in `tests/unit/detection/`
825
+
826
+ ## Changelog
827
+
828
+ ### v2.0.0 (2026-01-17)
829
+
830
+ **Breaking Changes:**
831
+ - Rewritten from Bash to TypeScript
832
+ - Removed dependency on `jq` - now uses native Node.js
833
+ - Removed bats test suite - now uses Vitest
834
+
835
+ **Features:**
836
+ - Full TypeScript implementation with type safety
837
+ - 97 comprehensive tests with Vitest
838
+ - Modular architecture with dependency injection
839
+ - Atomic transactions with backup/rollback
840
+ - Improved error handling with custom error types
841
+ - New `npm-package` project type with automated npm publishing workflow
842
+ - ESLint 9 flat config support for TypeScript projects
843
+
844
+ ### v1.0.0 (2026-01-17)
845
+
846
+ **Features:**
847
+ - Initial release
848
+ - Multi-layer Claude Code governance (CLAUDE.md, skills, hooks, commands)
849
+ - Custom ESLint plugins for code structure enforcement
850
+ - Project type detection (TypeScript, Expo, NestJS, CDK)
851
+ - Four copy strategies: copy-overwrite, copy-contents, create-only, merge
852
+ - Cascading type inheritance
853
+ - Dry-run and validate modes
854
+ - Non-interactive mode for CI/CD
855
+ - Uninstall capability with manifest tracking
856
+
857
+ **Governance Layers:**
858
+ - Behavioral rules via CLAUDE.md
859
+ - Teaching skills for coding philosophy
860
+ - Automated hooks for format/lint on edit
861
+ - Pre-built slash commands for workflows
862
+ - Threshold-based complexity limits
863
+ - Git hooks via Husky for pre-commit gates
864
+
865
+ ## License
866
+
867
+ MIT License - see [LICENSE](LICENSE) for details