@codyswann/lisa 1.0.0 → 1.0.5

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 (280) hide show
  1. package/README.md +244 -36
  2. package/all/copy-overwrite/.claude/README.md +1 -3
  3. package/all/copy-overwrite/.claude/REFERENCE.md +519 -0
  4. package/all/copy-overwrite/.claude/agents/skill-evaluator.md +7 -7
  5. package/all/copy-overwrite/.claude/agents/test-coverage-agent.md +17 -0
  6. package/all/copy-overwrite/.claude/commands/git/commit.md +9 -5
  7. package/all/copy-overwrite/.claude/commands/git/submit-pr.md +1 -1
  8. package/all/copy-overwrite/.claude/commands/lisa/review-implementation.md +209 -0
  9. package/all/copy-overwrite/.claude/commands/project/add-test-coverage.md +58 -0
  10. package/all/copy-overwrite/.claude/commands/project/archive.md +1 -1
  11. package/all/copy-overwrite/.claude/commands/project/complete-task.md +53 -1
  12. package/all/copy-overwrite/.claude/commands/project/debrief.md +12 -23
  13. package/all/copy-overwrite/.claude/commands/project/execute.md +33 -77
  14. package/all/copy-overwrite/.claude/commands/project/fix-linter-error.md +87 -0
  15. package/all/copy-overwrite/.claude/commands/project/implement.md +24 -28
  16. package/all/copy-overwrite/.claude/commands/project/lower-code-complexity.md +30 -55
  17. package/all/copy-overwrite/.claude/commands/project/plan.md +87 -242
  18. package/all/copy-overwrite/.claude/commands/project/reduce-max-lines-per-function.md +76 -0
  19. package/all/copy-overwrite/.claude/commands/project/reduce-max-lines.md +75 -0
  20. package/all/copy-overwrite/.claude/commands/project/research.md +86 -188
  21. package/all/copy-overwrite/.claude/commands/project/review.md +19 -38
  22. package/all/copy-overwrite/.claude/commands/project/setup.md +1 -1
  23. package/all/copy-overwrite/.claude/commands/project/verify.md +62 -25
  24. package/all/copy-overwrite/.claude/commands/pull-request/review.md +25 -7
  25. package/all/copy-overwrite/.claude/commands/tasks/load.md +63 -0
  26. package/all/copy-overwrite/.claude/commands/tasks/sync.md +84 -0
  27. package/all/copy-overwrite/.claude/hooks/README.md +75 -0
  28. package/all/copy-overwrite/.claude/hooks/check-tired-boss.sh +61 -0
  29. package/all/copy-overwrite/.claude/hooks/debug-hook.sh +47 -0
  30. package/all/copy-overwrite/.claude/hooks/notify-ntfy.sh +2 -0
  31. package/all/copy-overwrite/.claude/hooks/sync-tasks.sh +95 -0
  32. package/all/copy-overwrite/.claude/{skills/coding-philosophy/SKILL.md → rules/coding-philosophy.md} +93 -70
  33. package/all/copy-overwrite/.claude/settings.json +35 -14
  34. package/all/copy-overwrite/.claude/skills/prompt-complexity-scorer/SKILL.md +41 -9
  35. package/all/copy-overwrite/.claude/skills/skill-creator/scripts/init_skill.py +2 -0
  36. package/all/copy-overwrite/.claude/skills/skill-creator/scripts/package_skill.py +2 -0
  37. package/all/copy-overwrite/.claude/skills/skill-creator/scripts/quick_validate.py +2 -0
  38. package/all/copy-overwrite/.safety-net.json +25 -0
  39. package/all/copy-overwrite/CLAUDE.md +8 -30
  40. package/all/copy-overwrite/HUMAN.md +517 -17
  41. package/all/create-only/.claude/rules/PROJECT_RULES.md +9 -0
  42. package/all/create-only/scripts/setup-deploy-key.sh +190 -0
  43. package/all/deletions.json +5 -0
  44. package/cdk/copy-overwrite/.github/workflows/ci.yml +142 -0
  45. package/cdk/copy-overwrite/.github/workflows/deploy.yml +59 -0
  46. package/cdk/copy-overwrite/eslint.cdk.ts +175 -0
  47. package/cdk/copy-overwrite/eslint.config.ts +51 -0
  48. package/cdk/copy-overwrite/eslint.slow.config.ts +80 -0
  49. package/cdk/copy-overwrite/knip.json +53 -0
  50. package/cdk/copy-overwrite/tsconfig.eslint.json +11 -0
  51. package/cdk/merge/package.json +17 -1
  52. package/dist/cli/index.d.ts +3 -2
  53. package/dist/cli/index.d.ts.map +1 -1
  54. package/dist/cli/index.js +83 -64
  55. package/dist/cli/index.js.map +1 -1
  56. package/dist/cli/prompts.d.ts +17 -3
  57. package/dist/cli/prompts.d.ts.map +1 -1
  58. package/dist/cli/prompts.js +52 -16
  59. package/dist/cli/prompts.js.map +1 -1
  60. package/dist/core/config.d.ts +13 -4
  61. package/dist/core/config.d.ts.map +1 -1
  62. package/dist/core/config.js +17 -9
  63. package/dist/core/config.js.map +1 -1
  64. package/dist/core/git-service.d.ts +40 -0
  65. package/dist/core/git-service.d.ts.map +1 -0
  66. package/dist/core/git-service.js +52 -0
  67. package/dist/core/git-service.js.map +1 -0
  68. package/dist/core/index.d.ts +3 -3
  69. package/dist/core/index.js +3 -3
  70. package/dist/core/lisa.d.ts +124 -7
  71. package/dist/core/lisa.d.ts.map +1 -1
  72. package/dist/core/lisa.js +423 -221
  73. package/dist/core/lisa.js.map +1 -1
  74. package/dist/core/manifest.d.ts +5 -1
  75. package/dist/core/manifest.d.ts.map +1 -1
  76. package/dist/core/manifest.js +22 -16
  77. package/dist/core/manifest.js.map +1 -1
  78. package/dist/detection/detector.interface.d.ts +1 -1
  79. package/dist/detection/detectors/cdk.d.ts +6 -1
  80. package/dist/detection/detectors/cdk.d.ts.map +1 -1
  81. package/dist/detection/detectors/cdk.js +16 -8
  82. package/dist/detection/detectors/cdk.js.map +1 -1
  83. package/dist/detection/detectors/expo.d.ts +6 -1
  84. package/dist/detection/detectors/expo.d.ts.map +1 -1
  85. package/dist/detection/detectors/expo.js +13 -8
  86. package/dist/detection/detectors/expo.js.map +1 -1
  87. package/dist/detection/detectors/nestjs.d.ts +7 -2
  88. package/dist/detection/detectors/nestjs.d.ts.map +1 -1
  89. package/dist/detection/detectors/nestjs.js +17 -9
  90. package/dist/detection/detectors/nestjs.js.map +1 -1
  91. package/dist/detection/detectors/npm-package.d.ts +6 -1
  92. package/dist/detection/detectors/npm-package.d.ts.map +1 -1
  93. package/dist/detection/detectors/npm-package.js +9 -4
  94. package/dist/detection/detectors/npm-package.js.map +1 -1
  95. package/dist/detection/detectors/typescript.d.ts +6 -1
  96. package/dist/detection/detectors/typescript.d.ts.map +1 -1
  97. package/dist/detection/detectors/typescript.js +12 -7
  98. package/dist/detection/detectors/typescript.js.map +1 -1
  99. package/dist/detection/index.d.ts +13 -3
  100. package/dist/detection/index.d.ts.map +1 -1
  101. package/dist/detection/index.js +17 -7
  102. package/dist/detection/index.js.map +1 -1
  103. package/dist/errors/index.d.ts +66 -2
  104. package/dist/errors/index.d.ts.map +1 -1
  105. package/dist/errors/index.js +89 -17
  106. package/dist/errors/index.js.map +1 -1
  107. package/dist/index.js +3 -3
  108. package/dist/index.js.map +1 -1
  109. package/dist/logging/console-logger.d.ts +21 -1
  110. package/dist/logging/console-logger.d.ts.map +1 -1
  111. package/dist/logging/console-logger.js +26 -6
  112. package/dist/logging/console-logger.js.map +1 -1
  113. package/dist/logging/index.d.ts +3 -3
  114. package/dist/logging/index.js +2 -2
  115. package/dist/logging/logger.interface.d.ts +1 -1
  116. package/dist/logging/silent-logger.d.ts +21 -1
  117. package/dist/logging/silent-logger.d.ts.map +1 -1
  118. package/dist/logging/silent-logger.js +20 -0
  119. package/dist/logging/silent-logger.js.map +1 -1
  120. package/dist/strategies/copy-contents.d.ts +47 -6
  121. package/dist/strategies/copy-contents.d.ts.map +1 -1
  122. package/dist/strategies/copy-contents.js +99 -49
  123. package/dist/strategies/copy-contents.js.map +1 -1
  124. package/dist/strategies/copy-overwrite.d.ts +10 -2
  125. package/dist/strategies/copy-overwrite.d.ts.map +1 -1
  126. package/dist/strategies/copy-overwrite.js +17 -9
  127. package/dist/strategies/copy-overwrite.js.map +1 -1
  128. package/dist/strategies/create-only.d.ts +10 -2
  129. package/dist/strategies/create-only.d.ts.map +1 -1
  130. package/dist/strategies/create-only.js +14 -6
  131. package/dist/strategies/create-only.js.map +1 -1
  132. package/dist/strategies/index.d.ts +17 -7
  133. package/dist/strategies/index.d.ts.map +1 -1
  134. package/dist/strategies/index.js +19 -9
  135. package/dist/strategies/index.js.map +1 -1
  136. package/dist/strategies/merge.d.ts +10 -2
  137. package/dist/strategies/merge.d.ts.map +1 -1
  138. package/dist/strategies/merge.js +21 -21
  139. package/dist/strategies/merge.js.map +1 -1
  140. package/dist/strategies/strategy.interface.d.ts +1 -1
  141. package/dist/strategies/strategy.interface.d.ts.map +1 -1
  142. package/dist/transaction/backup.d.ts +15 -1
  143. package/dist/transaction/backup.d.ts.map +1 -1
  144. package/dist/transaction/backup.js +47 -12
  145. package/dist/transaction/backup.js.map +1 -1
  146. package/dist/transaction/index.d.ts +3 -3
  147. package/dist/transaction/index.js +2 -2
  148. package/dist/transaction/transaction.d.ts +25 -2
  149. package/dist/transaction/transaction.d.ts.map +1 -1
  150. package/dist/transaction/transaction.js +25 -2
  151. package/dist/transaction/transaction.js.map +1 -1
  152. package/dist/utils/file-operations.d.ts +21 -0
  153. package/dist/utils/file-operations.d.ts.map +1 -1
  154. package/dist/utils/file-operations.js +48 -12
  155. package/dist/utils/file-operations.js.map +1 -1
  156. package/dist/utils/index.d.ts +3 -3
  157. package/dist/utils/index.js +3 -3
  158. package/dist/utils/json-utils.d.ts +12 -0
  159. package/dist/utils/json-utils.d.ts.map +1 -1
  160. package/dist/utils/json-utils.js +17 -5
  161. package/dist/utils/json-utils.js.map +1 -1
  162. package/dist/utils/path-utils.d.ts +11 -0
  163. package/dist/utils/path-utils.d.ts.map +1 -1
  164. package/dist/utils/path-utils.js +12 -1
  165. package/dist/utils/path-utils.js.map +1 -1
  166. package/eslint-plugin-code-organization/__tests__/enforce-statement-order.test.js +5 -0
  167. package/eslint-plugin-code-organization/index.js +5 -0
  168. package/eslint-plugin-code-organization/rules/enforce-statement-order.js +5 -0
  169. package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +2 -0
  170. package/expo/copy-overwrite/.claude/skills/container-view-pattern/scripts/create_component.py +2 -0
  171. package/expo/copy-overwrite/.claude/skills/container-view-pattern/scripts/validate_component.py +2 -0
  172. package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/scripts/validate_cross_platform.py +2 -0
  173. package/expo/copy-overwrite/.claude/skills/directory-structure/scripts/validate_structure.py +2 -0
  174. package/expo/copy-overwrite/.claude/skills/expo-router-best-practices/scripts/generate-route.py +2 -0
  175. package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/scripts/validate_styling.py +2 -41
  176. package/{typescript → expo}/copy-overwrite/.github/workflows/build.yml +3 -0
  177. package/expo/copy-overwrite/.github/workflows/ci.yml +36 -0
  178. package/{typescript → expo}/copy-overwrite/.github/workflows/deploy.yml +22 -26
  179. package/{typescript → expo}/copy-overwrite/.github/workflows/lighthouse.yml +4 -1
  180. package/expo/copy-overwrite/eslint-plugin-component-structure/__tests__/plugin-index.test.js +5 -0
  181. package/expo/copy-overwrite/eslint-plugin-component-structure/__tests__/require-memo-in-view.test.js +5 -0
  182. package/expo/copy-overwrite/eslint-plugin-component-structure/__tests__/single-component-per-file.test.js +5 -0
  183. package/expo/copy-overwrite/eslint-plugin-component-structure/index.js +5 -0
  184. package/expo/copy-overwrite/eslint-plugin-component-structure/rules/enforce-component-structure.js +5 -0
  185. package/expo/copy-overwrite/eslint-plugin-component-structure/rules/no-return-in-view.js +6 -1
  186. package/expo/copy-overwrite/eslint-plugin-component-structure/rules/require-memo-in-view.js +5 -0
  187. package/expo/copy-overwrite/eslint-plugin-component-structure/rules/single-component-per-file.js +5 -0
  188. package/expo/copy-overwrite/eslint-plugin-ui-standards/README.md +0 -68
  189. package/expo/copy-overwrite/eslint-plugin-ui-standards/index.js +5 -3
  190. package/expo/copy-overwrite/eslint-plugin-ui-standards/rules/no-classname-outside-ui.js +5 -0
  191. package/expo/copy-overwrite/eslint-plugin-ui-standards/rules/no-direct-rn-imports.js +5 -0
  192. package/expo/copy-overwrite/eslint.config.ts +53 -0
  193. package/expo/copy-overwrite/eslint.expo.ts +330 -0
  194. package/expo/copy-overwrite/eslint.slow.config.ts +86 -0
  195. package/expo/copy-overwrite/knip.json +132 -0
  196. package/expo/copy-overwrite/lighthouserc.js +27 -0
  197. package/expo/copy-overwrite/tsconfig.eslint.json +25 -0
  198. package/expo/create-only/lighthouserc-config.json +6 -1
  199. package/expo/merge/package.json +16 -3
  200. package/nestjs/copy-overwrite/.claude/skills/nestjs-rules/SKILL.md +1 -1
  201. package/{typescript → nestjs}/copy-overwrite/.github/k6/README.md +2 -2
  202. package/{typescript → nestjs}/copy-overwrite/.github/k6/examples/customer-deploy-integration.yml +3 -0
  203. package/{typescript → nestjs}/copy-overwrite/.github/k6/examples/data-driven-test.js +5 -0
  204. package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/load.js +6 -2
  205. package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/smoke.js +5 -0
  206. package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/soak.js +5 -0
  207. package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/spike.js +5 -0
  208. package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/stress.js +5 -0
  209. package/{typescript → nestjs}/copy-overwrite/.github/k6/scripts/api-test.js +5 -0
  210. package/{typescript → nestjs}/copy-overwrite/.github/k6/scripts/default-test.js +5 -0
  211. package/nestjs/copy-overwrite/.github/workflows/ci.yml +29 -0
  212. package/nestjs/copy-overwrite/.github/workflows/deploy.yml +291 -0
  213. package/{typescript → nestjs}/copy-overwrite/.github/workflows/load-test.yml +3 -0
  214. package/nestjs/copy-overwrite/eslint.config.ts +53 -0
  215. package/nestjs/copy-overwrite/eslint.nestjs.ts +178 -0
  216. package/nestjs/merge/package.json +11 -3
  217. package/package.json +34 -40
  218. package/typescript/copy-contents/.husky/pre-commit +1 -1
  219. package/typescript/copy-contents/.husky/pre-push +99 -118
  220. package/typescript/copy-overwrite/.claude/hooks/format-on-edit.sh +2 -0
  221. package/typescript/copy-overwrite/.claude/hooks/install_pkgs.sh +3 -11
  222. package/typescript/copy-overwrite/.claude/hooks/lint-on-edit.sh +2 -0
  223. package/typescript/copy-overwrite/.claude/hooks/sg-scan-on-edit.sh +68 -0
  224. package/typescript/copy-overwrite/.claude/settings.json +79 -0
  225. package/typescript/copy-overwrite/.claude/skills/jsdoc-best-practices/SKILL.md +44 -0
  226. package/typescript/copy-overwrite/.github/README.md +49 -1
  227. package/typescript/copy-overwrite/.github/dependabot.yml +3 -0
  228. package/typescript/copy-overwrite/.github/workflows/ci.yml +7 -29
  229. package/typescript/copy-overwrite/.github/workflows/claude.yml +3 -0
  230. package/typescript/copy-overwrite/.github/workflows/create-github-issue-on-failure.yml +6 -4
  231. package/typescript/copy-overwrite/.github/workflows/create-issue-on-failure.yml +176 -0
  232. package/typescript/copy-overwrite/.github/workflows/create-jira-issue-on-failure.yml +3 -1
  233. package/typescript/copy-overwrite/.github/workflows/create-sentry-issue-on-failure.yml +3 -1
  234. package/typescript/copy-overwrite/.github/workflows/lint-slow.yml +40 -0
  235. package/typescript/copy-overwrite/.github/workflows/quality.yml +151 -38
  236. package/typescript/copy-overwrite/.github/workflows/release.yml +3 -0
  237. package/typescript/copy-overwrite/.gitleaksignore +3 -0
  238. package/typescript/copy-overwrite/.lintstagedrc.json +6 -0
  239. package/typescript/copy-overwrite/.prettierignore +2 -1
  240. package/typescript/copy-overwrite/.yamllint +2 -0
  241. package/typescript/copy-overwrite/ast-grep/rule-tests/.gitkeep +3 -0
  242. package/typescript/copy-overwrite/ast-grep/rules/.gitkeep +3 -0
  243. package/typescript/copy-overwrite/ast-grep/utils/.gitkeep +3 -0
  244. package/typescript/copy-overwrite/{commitlint.config.js → commitlint.config.cjs} +5 -0
  245. package/typescript/copy-overwrite/eslint-plugin-code-organization/__tests__/enforce-statement-order.test.js +5 -0
  246. package/typescript/copy-overwrite/eslint-plugin-code-organization/index.js +5 -0
  247. package/typescript/copy-overwrite/eslint-plugin-code-organization/rules/enforce-statement-order.js +5 -0
  248. package/typescript/copy-overwrite/eslint.base.ts +430 -0
  249. package/typescript/copy-overwrite/eslint.config.ts +52 -0
  250. package/typescript/copy-overwrite/eslint.ignore.config.json +19 -2
  251. package/typescript/copy-overwrite/eslint.slow.config.ts +69 -0
  252. package/typescript/copy-overwrite/eslint.typescript.ts +142 -0
  253. package/typescript/copy-overwrite/knip.json +64 -0
  254. package/typescript/copy-overwrite/sgconfig.yml +11 -0
  255. package/typescript/copy-overwrite/tsconfig.eslint.json +9 -0
  256. package/typescript/create-only/eslint.config.local.ts +24 -0
  257. package/typescript/{copy-overwrite/eslint.thresholds.config.json → create-only/eslint.thresholds.json} +1 -1
  258. package/typescript/github-rulesets/base.json +2 -75
  259. package/typescript/merge/.claude/settings.json +160 -0
  260. package/typescript/merge/package.json +35 -34
  261. package/all/copy-overwrite/.claude/commands/rules/format-md.md +0 -72
  262. package/all/copy-overwrite/.claude/skills/coding-philosophy/references/function-structure.md +0 -416
  263. package/all/copy-overwrite/.claude/skills/coding-philosophy/references/immutable-patterns.md +0 -316
  264. package/expo/copy-overwrite/eslint-plugin-ui-standards/rules/no-inline-styles.js +0 -73
  265. package/expo/copy-overwrite/eslint.config.mjs +0 -560
  266. package/lisa.sh +0 -35
  267. package/typescript/copy-overwrite/eslint.config.mjs +0 -390
  268. /package/{all/create-only/PROJECT_RULES.md → cdk/copy-overwrite/.github/workflows/.keep} +0 -0
  269. /package/{typescript → nestjs}/copy-overwrite/.github/k6/BROWSER_TESTING_NOTE.md +0 -0
  270. /package/{typescript → nestjs}/copy-overwrite/.github/k6/INTEGRATION_GUIDE.md +0 -0
  271. /package/{typescript → nestjs}/copy-overwrite/.github/k6/SCENARIO_SELECTION_GUIDE.md +0 -0
  272. /package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/load.json +0 -0
  273. /package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/smoke.json +0 -0
  274. /package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/soak.json +0 -0
  275. /package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/spike.json +0 -0
  276. /package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/stress.json +0 -0
  277. /package/{typescript → nestjs}/copy-overwrite/.github/k6/thresholds/normal.json +0 -0
  278. /package/{typescript → nestjs}/copy-overwrite/.github/k6/thresholds/relaxed.json +0 -0
  279. /package/{typescript → nestjs}/copy-overwrite/.github/k6/thresholds/strict.json +0 -0
  280. /package/{typescript → nestjs}/copy-overwrite/.github/workflows/k6-load-test-README.md +0 -0
@@ -0,0 +1,132 @@
1
+ {
2
+ "$schema": "https://unpkg.com/knip@5/schema.json",
3
+ "entry": [
4
+ "app/**/*.{ts,tsx}",
5
+ "components/**/*.{ts,tsx}",
6
+ "features/**/*.{ts,tsx}",
7
+ "hooks/**/*.{ts,tsx}",
8
+ "utils/**/*.{ts,tsx}",
9
+ "stores/**/*.{ts,tsx}",
10
+ "providers/**/*.{ts,tsx}",
11
+ "constants/**/*.{ts,tsx}",
12
+ "types/**/*.{ts,tsx}",
13
+ "config/**/*.{ts,tsx}"
14
+ ],
15
+ "project": [
16
+ "app/**/*.{ts,tsx}",
17
+ "components/**/*.{ts,tsx}",
18
+ "features/**/*.{ts,tsx}",
19
+ "hooks/**/*.{ts,tsx}",
20
+ "utils/**/*.{ts,tsx}",
21
+ "stores/**/*.{ts,tsx}",
22
+ "providers/**/*.{ts,tsx}",
23
+ "constants/**/*.{ts,tsx}",
24
+ "types/**/*.{ts,tsx}",
25
+ "config/**/*.{ts,tsx}"
26
+ ],
27
+ "ignore": [
28
+ "**/*.test.ts",
29
+ "**/*.test.tsx",
30
+ "**/*.spec.ts",
31
+ "**/*.spec.tsx",
32
+ "**/__tests__/**",
33
+ "**/__mocks__/**",
34
+ "**/tests/**",
35
+ "**/e2e/**",
36
+ "**/dist/**",
37
+ "**/build/**",
38
+ "**/coverage/**",
39
+ "**/node_modules/**",
40
+ "**/ios/**",
41
+ "**/android/**",
42
+ "**/.expo/**",
43
+ "**/assets/**",
44
+ "**/scripts/**",
45
+ "**/eslint-plugin-*/**",
46
+ "**/generated/**",
47
+ "**/patches/**",
48
+ "**/projects/**",
49
+ "**/specs/**",
50
+ "**/docs/**",
51
+ "**/*.config.js",
52
+ "**/*.config.ts",
53
+ "**/metro.config.js",
54
+ "**/babel.config.js"
55
+ ],
56
+ "ignoreBinaries": ["audit", "ast-grep", "maestro", "eas", "source-map-explorer"],
57
+ "ignoreDependencies": [
58
+ "@babel/core",
59
+ "@babel/plugin-proposal-export-namespace-from",
60
+ "@commitlint/cli",
61
+ "@dnd-kit/modifiers",
62
+ "@eslint-community/eslint-plugin-eslint-comments",
63
+ "@eslint/eslintrc",
64
+ "@eslint/js",
65
+ "@expo-google-fonts/inter",
66
+ "@istanbuljs/nyc-config-typescript",
67
+ "@jest/test-sequencer",
68
+ "@react-native-community/cli",
69
+ "@react-native-community/cli-platform-android",
70
+ "@react-native-community/cli-platform-ios",
71
+ "@react-navigation/native",
72
+ "@types/eslint-plugin-jsx-a11y",
73
+ "@types/eslint-plugin-tailwindcss",
74
+ "@types/fs-extra",
75
+ "@types/glob",
76
+ "@types/lodash.merge",
77
+ "babel-plugin-istanbul",
78
+ "baseline-browser-mapping",
79
+ "commitizen",
80
+ "date-fns-tz",
81
+ "eslint-config-expo",
82
+ "eslint-config-prettier",
83
+ "eslint-plugin-code-organization",
84
+ "eslint-plugin-component-structure",
85
+ "eslint-plugin-functional",
86
+ "eslint-plugin-jsdoc",
87
+ "eslint-plugin-jsx-a11y",
88
+ "eslint-plugin-prettier",
89
+ "eslint-plugin-react",
90
+ "eslint-plugin-react-compiler",
91
+ "eslint-plugin-react-hooks",
92
+ "eslint-plugin-react-perf",
93
+ "eslint-plugin-sonarjs",
94
+ "eslint-plugin-tailwindcss",
95
+ "eslint-plugin-ui-standards",
96
+ "events",
97
+ "expo-atlas",
98
+ "expo-clipboard",
99
+ "expo-localization",
100
+ "expo-status-bar",
101
+ "firebase",
102
+ "glob",
103
+ "globals",
104
+ "i18n-js",
105
+ "jscodeshift",
106
+ "lint-staged",
107
+ "memfs",
108
+ "prettier-plugin-tailwindcss",
109
+ "react-native-element-dropdown",
110
+ "tailwind-variants",
111
+ "tar",
112
+ "text-encoding-polyfill",
113
+ "ts-jest",
114
+ "ts-morph",
115
+ "typescript-eslint",
116
+ "usehooks-ts",
117
+ "zod"
118
+ ],
119
+ "ignoreExportsUsedInFile": true,
120
+ "includeEntryExports": false,
121
+ "rules": {
122
+ "dependencies": "error",
123
+ "devDependencies": "error",
124
+ "unlisted": "error",
125
+ "binaries": "error",
126
+ "unresolved": "error",
127
+ "files": "error",
128
+ "duplicates": "error",
129
+ "exports": "error",
130
+ "types": "error"
131
+ }
132
+ }
@@ -1,3 +1,8 @@
1
+ /**
2
+ * This file is managed by Lisa.
3
+ * Do not edit directly — changes will be overwritten on the next `lisa` run.
4
+ */
5
+
1
6
  /**
2
7
  * Lighthouse CI Configuration
3
8
  *
@@ -57,15 +62,20 @@ const defaults = {
57
62
  totalByteWeight: { maxNumericValue: 850000 },
58
63
  scriptSize: { maxNumericValue: 750000 },
59
64
  fontDisplay: { minScore: 0.9 },
65
+ fontDisplayInsight: { minScore: 0.9 },
60
66
  imageAspectRatio: { minScore: 1 },
61
67
  metaDescription: { minScore: 1 },
62
68
  unusedJavascript: { maxLength: 2 },
69
+ unusedCssRules: { maxLength: 0 },
70
+ usesRelPreconnect: { maxLength: 0 },
63
71
  bootupTime: { minScore: 0.9 },
64
72
  mainthreadWorkBreakdown: { minScore: 0.9 },
65
73
  maxPotentialFid: { minScore: 1 },
66
74
  legacyJavascript: { maxLength: 2 },
67
75
  legacyJavascriptInsight: { minScore: 0.4 },
68
76
  speedIndex: { minScore: 0.9 },
77
+ networkDependencyTreeInsight: { minScore: 0.9 },
78
+ duplicatedJavascriptInsight: { minScore: 0.9 },
69
79
  },
70
80
  };
71
81
 
@@ -184,6 +194,23 @@ module.exports = {
184
194
  { minScore: a.legacyJavascriptInsight.minScore },
185
195
  ],
186
196
  "speed-index": ["error", { minScore: a.speedIndex.minScore }],
197
+ "unused-css-rules": ["warn", { maxLength: a.unusedCssRules.maxLength }],
198
+ "uses-rel-preconnect": [
199
+ "warn",
200
+ { maxLength: a.usesRelPreconnect.maxLength },
201
+ ],
202
+ "font-display-insight": [
203
+ "warn",
204
+ { minScore: a.fontDisplayInsight.minScore },
205
+ ],
206
+ "network-dependency-tree-insight": [
207
+ "warn",
208
+ { minScore: a.networkDependencyTreeInsight.minScore },
209
+ ],
210
+ "duplicated-javascript-insight": [
211
+ "warn",
212
+ { minScore: a.duplicatedJavascriptInsight.minScore },
213
+ ],
187
214
  },
188
215
  },
189
216
 
@@ -0,0 +1,25 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "rootDir": ".",
5
+ "noEmit": true
6
+ },
7
+ "include": [
8
+ "app/**/*",
9
+ "components/**/*",
10
+ "hooks/**/*",
11
+ "lib/**/*",
12
+ "features/**/*",
13
+ "providers/**/*",
14
+ "**/*.ts",
15
+ "**/*.tsx"
16
+ ],
17
+ "exclude": [
18
+ "node_modules",
19
+ "dist",
20
+ "build",
21
+ ".expo",
22
+ "ios",
23
+ "android"
24
+ ]
25
+ }
@@ -15,14 +15,19 @@
15
15
  "totalByteWeight": { "maxNumericValue": 850000 },
16
16
  "scriptSize": { "maxNumericValue": 750000 },
17
17
  "fontDisplay": { "minScore": 0.9 },
18
+ "fontDisplayInsight": { "minScore": 0.9 },
18
19
  "imageAspectRatio": { "minScore": 1 },
19
20
  "metaDescription": { "minScore": 1 },
20
21
  "unusedJavascript": { "maxLength": 2 },
22
+ "unusedCssRules": { "maxLength": 0 },
23
+ "usesRelPreconnect": { "maxLength": 0 },
21
24
  "bootupTime": { "minScore": 0.9 },
22
25
  "mainthreadWorkBreakdown": { "minScore": 0.9 },
23
26
  "maxPotentialFid": { "minScore": 1 },
24
27
  "legacyJavascript": { "maxLength": 2 },
25
28
  "legacyJavascriptInsight": { "minScore": 0.4 },
26
- "speedIndex": { "minScore": 0.9 }
29
+ "speedIndex": { "minScore": 0.9 },
30
+ "networkDependencyTreeInsight": { "minScore": 0.9 },
31
+ "duplicatedJavascriptInsight": { "minScore": 0.9 }
27
32
  }
28
33
  }
@@ -1,5 +1,9 @@
1
1
  {
2
2
  "scripts": {
3
+ "test": "NODE_ENV=test jest --passWithNoTests",
4
+ "test:unit": "NODE_ENV=test jest --testPathIgnorePatterns=\"\\.integration\\.test\\.(ts|tsx)$\" --passWithNoTests",
5
+ "test:integration": "NODE_ENV=test jest --testPathPatterns=\"\\.integration\\.test\\.(ts|tsx)$\" --passWithNoTests",
6
+ "test:cov": "NODE_ENV=test jest --coverage",
3
7
  "start:local": "cp .env.localhost .env.local && EXPO_ATLAS=true expo start",
4
8
  "start:dev": "EXPO_ATLAS=true cp .env.development .env.local && EXPO_ATLAS=true expo start",
5
9
  "start:staging": "cp .env.staging .env.local && EXPO_ATLAS=true expo start",
@@ -80,7 +84,7 @@
80
84
  "react-native-web": "^0.21.2",
81
85
  "react-native-worklets": "0.7.1",
82
86
  "tailwindcss": "^3.4.7",
83
- "tar": "^7.5.3",
87
+ "tar": "^7.5.6",
84
88
  "text-encoding-polyfill": "^0.6.7",
85
89
  "use-debounce": "^10.1.0",
86
90
  "usehooks-ts": "^3.1.1",
@@ -100,12 +104,16 @@
100
104
  "@react-native-community/cli-platform-ios": "^20.0.2",
101
105
  "@testing-library/react-native": "^13.0.0",
102
106
  "@types/base-64": "^1.0.2",
107
+ "@types/eslint-plugin-jsx-a11y": "^6.10.1",
108
+ "@types/eslint-plugin-tailwindcss": "^3.17.0",
103
109
  "@types/react": "~19.1.10",
104
110
  "@types/react-dom": "^19.1.7",
105
111
  "babel-plugin-istanbul": "^6.1.1",
106
112
  "babel-plugin-module-resolver": "^5.0.2",
107
113
  "baseline-browser-mapping": "^2.9.2",
108
114
  "eslint-config-expo": "^10.0.0",
115
+ "eslint-import-resolver-typescript": "^4.0.0",
116
+ "eslint-plugin-import": "^2.31.0",
109
117
  "eslint-plugin-component-structure": "file:./eslint-plugin-component-structure",
110
118
  "eslint-plugin-jsx-a11y": "^6.10.0",
111
119
  "eslint-plugin-react": "^7.37.0",
@@ -116,17 +124,22 @@
116
124
  "eslint-plugin-ui-standards": "file:./eslint-plugin-ui-standards",
117
125
  "expo-atlas": "^0.4.0",
118
126
  "globals": "^16.0.0",
127
+ "@istanbuljs/nyc-config-typescript": "^1.0.2",
128
+ "@jest/test-sequencer": "^30.2.0",
129
+ "@types/jest": "^30.0.0",
130
+ "jest": "^30.0.0",
119
131
  "jest-environment-jsdom": "^30.2.0",
120
132
  "jest-expo": "^54.0.12",
133
+ "ts-jest": "^29.4.6",
121
134
  "react-test-renderer": "19.1.0"
122
135
  },
123
136
  "resolutions": {
124
137
  "eslint-plugin-react-hooks": "^7.0.0",
125
- "tar": "^7.5.3"
138
+ "tar": "^7.5.6"
126
139
  },
127
140
  "overrides": {
128
141
  "eslint-plugin-react-hooks": "^7.0.0",
129
142
  "zod-validation-error": "^4.0.0",
130
- "tar": "^7.5.3"
143
+ "tar": "^7.5.6"
131
144
  }
132
145
  }
@@ -272,7 +272,7 @@ plugins:
272
272
 
273
273
  provider:
274
274
  name: aws
275
- runtime: nodejs20.x
275
+ runtime: nodejs22.x
276
276
  region: us-east-1
277
277
  httpApi:
278
278
  cors: true
@@ -66,8 +66,8 @@ docker compose -f docker-compose.k6.yml run --rm k6-smoke
66
66
  K6_BASE_URL=https://staging.example.com docker compose -f docker-compose.k6.yml run --rm k6-load
67
67
 
68
68
  # Run with other services
69
- docker compose -f docker-compose.yml -f docker-compose.k6.yml up -d postgres valkey
70
- docker compose -f docker-compose.yml -f docker-compose.k6.yml run --rm k6-smoke
69
+ docker compose -f docker compose.yml -f docker-compose.k6.yml up -d postgres valkey
70
+ docker compose -f docker compose.yml -f docker-compose.k6.yml run --rm k6-smoke
71
71
  ```
72
72
 
73
73
  ---
@@ -1,3 +1,6 @@
1
+ # This file is managed by Lisa.
2
+ # Do not edit directly — changes will be overwritten on the next `lisa` run.
3
+
1
4
  name: Deploy and Test
2
5
 
3
6
  on:
@@ -1,3 +1,8 @@
1
+ /**
2
+ * This file is managed by Lisa.
3
+ * Do not edit directly — changes will be overwritten on the next `lisa` run.
4
+ */
5
+
1
6
  import http from "k6/http";
2
7
  import { check, group } from "k6";
3
8
  import { SharedArray } from "k6/data";
@@ -1,5 +1,10 @@
1
- import http from "k6/http";
1
+ /**
2
+ * This file is managed by Lisa.
3
+ * Do not edit directly — changes will be overwritten on the next `lisa` run.
4
+ */
5
+
2
6
  import { check, group, sleep } from "k6";
7
+ import http from "k6/http";
3
8
  import { Rate } from "k6/metrics";
4
9
 
5
10
  // Custom metrics
@@ -15,7 +20,6 @@ export const options = {
15
20
  thresholds: {
16
21
  http_req_failed: ["rate<0.05"], // http errors should be less than 5%
17
22
  http_req_duration: ["p(95)<500"], // 95% of requests should be below 500ms
18
- http_req_duration: ["p(99)<1000"], // 99% of requests should be below 1s
19
23
  errors: ["rate<0.05"], // custom errors should be less than 5%
20
24
  api_errors: ["rate<0.02"], // API errors should be less than 2%
21
25
  },
@@ -1,3 +1,8 @@
1
+ /**
2
+ * This file is managed by Lisa.
3
+ * Do not edit directly — changes will be overwritten on the next `lisa` run.
4
+ */
5
+
1
6
  import http from "k6/http";
2
7
  import { check, sleep } from "k6";
3
8
 
@@ -1,3 +1,8 @@
1
+ /**
2
+ * This file is managed by Lisa.
3
+ * Do not edit directly — changes will be overwritten on the next `lisa` run.
4
+ */
5
+
1
6
  import http from "k6/http";
2
7
  import { check, group, sleep } from "k6";
3
8
  import { Rate, Trend, Counter } from "k6/metrics";
@@ -1,3 +1,8 @@
1
+ /**
2
+ * This file is managed by Lisa.
3
+ * Do not edit directly — changes will be overwritten on the next `lisa` run.
4
+ */
5
+
1
6
  import http from "k6/http";
2
7
  import { check, group, sleep } from "k6";
3
8
  import { Rate, Trend } from "k6/metrics";
@@ -1,3 +1,8 @@
1
+ /**
2
+ * This file is managed by Lisa.
3
+ * Do not edit directly — changes will be overwritten on the next `lisa` run.
4
+ */
5
+
1
6
  import http from "k6/http";
2
7
  import { check, group, sleep } from "k6";
3
8
  import { Rate, Trend } from "k6/metrics";
@@ -1,3 +1,8 @@
1
+ /**
2
+ * This file is managed by Lisa.
3
+ * Do not edit directly — changes will be overwritten on the next `lisa` run.
4
+ */
5
+
1
6
  import http from "k6/http";
2
7
  import { check, group, sleep, fail } from "k6";
3
8
  import { Rate, Trend, Counter } from "k6/metrics";
@@ -1,3 +1,8 @@
1
+ /**
2
+ * This file is managed by Lisa.
3
+ * Do not edit directly — changes will be overwritten on the next `lisa` run.
4
+ */
5
+
1
6
  import http from "k6/http";
2
7
  import { check, sleep } from "k6";
3
8
  import { Rate } from "k6/metrics";
@@ -0,0 +1,29 @@
1
+ # This file is managed by Lisa.
2
+ # Do not edit directly — changes will be overwritten on the next `lisa` run.
3
+
4
+ name: 🔍 CI Quality Checks
5
+
6
+ on:
7
+ pull_request:
8
+ workflow_dispatch:
9
+
10
+ jobs:
11
+ quality:
12
+ name: 🔍 Quality Checks
13
+ # Reference to the quality checks workflow
14
+ uses: ./.github/workflows/quality.yml
15
+ with:
16
+ node_version: '22.21.1'
17
+ package_manager: 'bun'
18
+ skip_jobs: 'test,test:integration,test:e2e'
19
+ secrets: inherit
20
+
21
+ create_issue_on_failure:
22
+ name: 📌 Create Issue on Failure
23
+ needs: [quality]
24
+ if: ${{ always() && (needs.quality.result == 'failure' || needs.quality.result == 'failure') && !contains(github.event.head_commit.message, '[skip ci]') }}
25
+ uses: ./.github/workflows/create-issue-on-failure.yml
26
+ with:
27
+ workflow_name: 'CI Quality Checks'
28
+ failed_job: ${{ needs.quality.result == 'failure' && 'quality' || 'playwright' }}
29
+ secrets: inherit