@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,459 @@
1
+ import * as fse from 'fs-extra';
2
+ import { stat, readdir, rmdir } from 'node:fs/promises';
3
+ import * as path from 'node:path';
4
+ import pc from 'picocolors';
5
+ import { COPY_STRATEGIES, createInitialCounters } from './config.js';
6
+ import { listFilesRecursive } from '../utils/file-operations.js';
7
+ import { DestinationNotFoundError, DestinationNotDirectoryError } from '../errors/index.js';
8
+ /**
9
+ * Main Lisa orchestrator
10
+ */
11
+ export class Lisa {
12
+ config;
13
+ deps;
14
+ counters = createInitialCounters();
15
+ detectedTypes = [];
16
+ constructor(config, deps) {
17
+ this.config = config;
18
+ this.deps = deps;
19
+ }
20
+ /**
21
+ * Apply Lisa configurations to the destination project
22
+ */
23
+ async apply() {
24
+ const { logger, prompter, manifestService, backupService, detectorRegistry } = this.deps;
25
+ try {
26
+ // Validate destination
27
+ await this.validateDestination();
28
+ // Print header
29
+ this.printHeader();
30
+ // Initialize services
31
+ if (!this.config.dryRun) {
32
+ await backupService.init(this.config.destDir);
33
+ await manifestService.init(this.config.destDir, this.config.lisaDir);
34
+ }
35
+ // Detect project types
36
+ const rawTypes = await detectorRegistry.detectAll(this.config.destDir);
37
+ this.detectedTypes = detectorRegistry.expandAndOrderTypes(rawTypes);
38
+ // Confirm with user
39
+ this.detectedTypes = [...(await prompter.confirmProjectTypes(this.detectedTypes))];
40
+ // Process 'all' directory first
41
+ logger.info('Processing common configurations (all/)...');
42
+ await this.processProjectType('all');
43
+ // Process each detected type
44
+ for (const type of this.detectedTypes) {
45
+ const typeDir = path.join(this.config.lisaDir, type);
46
+ if (await fse.pathExists(typeDir)) {
47
+ logger.info(`Processing ${type} configurations...`);
48
+ await this.processProjectType(type);
49
+ }
50
+ else {
51
+ logger.warn(`No configuration directory found for type: ${type}`);
52
+ }
53
+ }
54
+ // Finalize manifest
55
+ if (!this.config.dryRun) {
56
+ await manifestService.finalize();
57
+ await backupService.cleanup();
58
+ }
59
+ this.printSummary();
60
+ return {
61
+ success: true,
62
+ counters: { ...this.counters },
63
+ detectedTypes: [...this.detectedTypes],
64
+ mode: this.config.validateOnly ? 'validate' : 'apply',
65
+ errors: [],
66
+ };
67
+ }
68
+ catch (error) {
69
+ if (!this.config.dryRun) {
70
+ try {
71
+ await backupService.rollback();
72
+ }
73
+ catch {
74
+ // Rollback error already logged
75
+ }
76
+ }
77
+ return {
78
+ success: false,
79
+ counters: { ...this.counters },
80
+ detectedTypes: [...this.detectedTypes],
81
+ mode: this.config.validateOnly ? 'validate' : 'apply',
82
+ errors: [error instanceof Error ? error.message : String(error)],
83
+ };
84
+ }
85
+ }
86
+ /**
87
+ * Validate compatibility without applying changes
88
+ */
89
+ async validate() {
90
+ // Validate mode is essentially a dry run
91
+ return this.apply();
92
+ }
93
+ /**
94
+ * Uninstall Lisa-managed files from the project
95
+ */
96
+ async uninstall() {
97
+ const { logger, manifestService } = this.deps;
98
+ // Validate destination
99
+ await this.validateDestination();
100
+ // Print header
101
+ console.log('');
102
+ console.log(pc.blue('========================================'));
103
+ console.log(pc.blue(' Lisa Uninstaller'));
104
+ console.log(pc.blue('========================================'));
105
+ console.log('');
106
+ let removed = 0;
107
+ let skipped = 0;
108
+ const errors = [];
109
+ try {
110
+ // Read manifest
111
+ const entries = await manifestService.read(this.config.destDir);
112
+ logger.info(`Reading manifest: ${path.join(this.config.destDir, '.lisa-manifest')}`);
113
+ console.log('');
114
+ // Process each entry
115
+ for (const entry of entries) {
116
+ const destFile = path.join(this.config.destDir, entry.relativePath);
117
+ switch (entry.strategy) {
118
+ case 'copy-overwrite':
119
+ case 'create-only':
120
+ // These files can be safely removed
121
+ if (await fse.pathExists(destFile)) {
122
+ if (this.config.dryRun) {
123
+ logger.dry(`Would remove: ${entry.relativePath}`);
124
+ }
125
+ else {
126
+ await fse.remove(destFile);
127
+ logger.success(`Removed: ${entry.relativePath}`);
128
+ }
129
+ removed++;
130
+ }
131
+ else {
132
+ skipped++;
133
+ }
134
+ break;
135
+ case 'copy-contents':
136
+ // Cannot safely remove - would need to diff
137
+ logger.warn(`Cannot auto-remove (copy-contents): ${entry.relativePath}`);
138
+ logger.info(' Manually review and remove added lines if needed.');
139
+ skipped++;
140
+ break;
141
+ case 'merge':
142
+ // Cannot safely remove merged JSON
143
+ logger.warn(`Cannot auto-remove (merged JSON): ${entry.relativePath}`);
144
+ logger.info(' Manually remove Lisa-added keys if needed.');
145
+ skipped++;
146
+ break;
147
+ }
148
+ }
149
+ // Remove empty directories and manifest
150
+ if (!this.config.dryRun) {
151
+ await this.removeEmptyDirectories();
152
+ await manifestService.remove(this.config.destDir);
153
+ logger.success('Removed manifest file');
154
+ }
155
+ // Print summary
156
+ console.log('');
157
+ console.log(pc.green('========================================'));
158
+ console.log(pc.green(this.config.dryRun ? ' Lisa Uninstall Dry Run Complete' : ' Lisa Uninstall Complete!'));
159
+ console.log(pc.green('========================================'));
160
+ console.log('');
161
+ console.log(` ${pc.green('Removed:')} ${String(removed).padStart(3)} files`);
162
+ console.log(` ${pc.yellow('Skipped:')} ${String(skipped).padStart(3)} files (manual review needed)`);
163
+ console.log('');
164
+ return {
165
+ success: true,
166
+ counters: { ...this.counters, copied: removed, skipped },
167
+ detectedTypes: [],
168
+ mode: 'uninstall',
169
+ errors,
170
+ };
171
+ }
172
+ catch (error) {
173
+ const message = error instanceof Error ? error.message : String(error);
174
+ logger.error(message);
175
+ errors.push(message);
176
+ return {
177
+ success: false,
178
+ counters: this.counters,
179
+ detectedTypes: [],
180
+ mode: 'uninstall',
181
+ errors,
182
+ };
183
+ }
184
+ }
185
+ /**
186
+ * Process all files for a given project type
187
+ */
188
+ async processProjectType(type) {
189
+ const { logger, strategyRegistry } = this.deps;
190
+ for (const strategy of COPY_STRATEGIES) {
191
+ const srcDir = path.join(this.config.lisaDir, type, strategy);
192
+ if (await fse.pathExists(srcDir)) {
193
+ logger.info(`Processing ${type}/${strategy}...`);
194
+ await this.processDirectory(srcDir, strategyRegistry.get(strategy));
195
+ }
196
+ }
197
+ }
198
+ /**
199
+ * Process all files in a directory with the given strategy
200
+ */
201
+ async processDirectory(srcDir, strategy) {
202
+ const files = await listFilesRecursive(srcDir);
203
+ const context = {
204
+ config: this.config,
205
+ recordFile: (relativePath, strat) => {
206
+ this.deps.manifestService.record(relativePath, strat);
207
+ },
208
+ backupFile: async (absolutePath) => {
209
+ await this.deps.backupService.backup(absolutePath);
210
+ },
211
+ promptOverwrite: async (relativePath, sourcePath, destPath) => {
212
+ return this.handleOverwritePrompt(relativePath, sourcePath, destPath);
213
+ },
214
+ };
215
+ for (const srcFile of files) {
216
+ const relativePath = path.relative(srcDir, srcFile);
217
+ const destFile = path.join(this.config.destDir, relativePath);
218
+ const result = await strategy.apply(srcFile, destFile, relativePath, context);
219
+ this.updateCounters(result);
220
+ this.logResult(result);
221
+ }
222
+ }
223
+ /**
224
+ * Handle overwrite prompt for conflicting files
225
+ */
226
+ async handleOverwritePrompt(relativePath, sourcePath, destPath) {
227
+ const { logger, prompter } = this.deps;
228
+ const decision = await prompter.promptOverwrite(relativePath);
229
+ if (decision === 'diff') {
230
+ // Show diff and re-prompt
231
+ await this.showDiff(sourcePath, destPath);
232
+ return this.handleOverwritePrompt(relativePath, sourcePath, destPath);
233
+ }
234
+ if (decision === 'yes') {
235
+ logger.info(`Auto-accepting overwrite (non-interactive): ${relativePath}`);
236
+ return true;
237
+ }
238
+ return false;
239
+ }
240
+ /**
241
+ * Show diff between two files
242
+ */
243
+ async showDiff(sourcePath, destPath) {
244
+ const { spawn } = await import('node:child_process');
245
+ return new Promise((resolve) => {
246
+ console.log('--- Differences ---');
247
+ const diff = spawn('diff', [destPath, sourcePath], { stdio: 'inherit' });
248
+ diff.on('close', () => {
249
+ console.log('-------------------');
250
+ resolve();
251
+ });
252
+ });
253
+ }
254
+ /**
255
+ * Update counters based on operation result
256
+ */
257
+ updateCounters(result) {
258
+ switch (result.action) {
259
+ case 'copied':
260
+ case 'created':
261
+ this.counters.copied++;
262
+ break;
263
+ case 'skipped':
264
+ this.counters.skipped++;
265
+ break;
266
+ case 'overwritten':
267
+ this.counters.overwritten++;
268
+ break;
269
+ case 'appended':
270
+ this.counters.appended++;
271
+ break;
272
+ case 'merged':
273
+ this.counters.merged++;
274
+ break;
275
+ }
276
+ }
277
+ /**
278
+ * Log operation result
279
+ */
280
+ logResult(result) {
281
+ const { logger } = this.deps;
282
+ switch (result.action) {
283
+ case 'copied':
284
+ if (this.config.dryRun) {
285
+ logger.dry(`Would copy: ${result.relativePath}`);
286
+ }
287
+ else {
288
+ logger.success(`Copied: ${result.relativePath}`);
289
+ }
290
+ break;
291
+ case 'created':
292
+ if (this.config.dryRun) {
293
+ logger.dry(`Would create: ${result.relativePath}`);
294
+ }
295
+ else {
296
+ logger.success(`Created: ${result.relativePath}`);
297
+ }
298
+ break;
299
+ case 'skipped':
300
+ // Silent for skipped files
301
+ break;
302
+ case 'overwritten':
303
+ if (this.config.dryRun) {
304
+ logger.dry(`Would prompt to overwrite: ${result.relativePath}`);
305
+ }
306
+ else {
307
+ logger.success(`Overwritten: ${result.relativePath}`);
308
+ }
309
+ break;
310
+ case 'appended':
311
+ if (this.config.dryRun) {
312
+ logger.dry(`Would append ${result.linesAdded} lines to: ${result.relativePath}`);
313
+ }
314
+ else {
315
+ logger.success(`Appended ${result.linesAdded} lines to: ${result.relativePath}`);
316
+ }
317
+ break;
318
+ case 'merged':
319
+ if (this.config.dryRun) {
320
+ logger.dry(`Would merge: ${result.relativePath}`);
321
+ }
322
+ else {
323
+ logger.success(`Merged: ${result.relativePath}`);
324
+ }
325
+ break;
326
+ }
327
+ }
328
+ /**
329
+ * Validate destination directory exists and is a directory
330
+ */
331
+ async validateDestination() {
332
+ const { destDir } = this.config;
333
+ if (!(await fse.pathExists(destDir))) {
334
+ throw new DestinationNotFoundError(destDir);
335
+ }
336
+ const stats = await stat(destDir);
337
+ if (!stats.isDirectory()) {
338
+ throw new DestinationNotDirectoryError(destDir);
339
+ }
340
+ }
341
+ /**
342
+ * Print header banner
343
+ */
344
+ printHeader() {
345
+ const { logger } = this.deps;
346
+ console.log('');
347
+ console.log(pc.blue('========================================'));
348
+ if (this.config.validateOnly) {
349
+ console.log(pc.blue(' Lisa Project Bootstrapper (VALIDATE)'));
350
+ }
351
+ else if (this.config.dryRun) {
352
+ console.log(pc.blue(' Lisa Project Bootstrapper (DRY RUN)'));
353
+ }
354
+ else {
355
+ console.log(pc.blue(' Lisa Project Bootstrapper'));
356
+ }
357
+ console.log(pc.blue('========================================'));
358
+ console.log('');
359
+ if (this.config.validateOnly) {
360
+ logger.info('Validate mode - checking project compatibility');
361
+ }
362
+ else if (this.config.dryRun) {
363
+ logger.warn('Dry run mode - no changes will be made');
364
+ }
365
+ logger.info(`Lisa directory: ${this.config.lisaDir}`);
366
+ logger.info(`Destination: ${this.config.destDir}`);
367
+ console.log('');
368
+ }
369
+ /**
370
+ * Print summary
371
+ */
372
+ printSummary() {
373
+ console.log('');
374
+ console.log(pc.green('========================================'));
375
+ if (this.config.validateOnly) {
376
+ console.log(pc.green(' Lisa Validation Complete'));
377
+ }
378
+ else if (this.config.dryRun) {
379
+ console.log(pc.green(' Lisa Dry Run Complete'));
380
+ }
381
+ else {
382
+ console.log(pc.green(' Lisa Installation Complete!'));
383
+ }
384
+ console.log(pc.green('========================================'));
385
+ console.log('');
386
+ const { copied, skipped, overwritten, appended, merged } = this.counters;
387
+ if (this.config.validateOnly) {
388
+ console.log(` ${pc.green('Compatible files:')} ${String(copied).padStart(3)} files`);
389
+ console.log(` ${pc.blue('Already present:')} ${String(skipped).padStart(3)} files`);
390
+ console.log(` ${pc.yellow('Would conflict:')} ${String(overwritten).padStart(3)} files`);
391
+ console.log(` ${pc.blue('Would append:')} ${String(appended).padStart(3)} files`);
392
+ console.log(` ${pc.green('Would merge:')} ${String(merged).padStart(3)} files`);
393
+ }
394
+ else if (this.config.dryRun) {
395
+ console.log(` ${pc.green('Would copy:')} ${String(copied).padStart(3)} files`);
396
+ console.log(` ${pc.blue('Would skip:')} ${String(skipped).padStart(3)} files (identical or create-only)`);
397
+ console.log(` ${pc.yellow('Would prompt:')} ${String(overwritten).padStart(3)} files (differ)`);
398
+ console.log(` ${pc.blue('Would append:')} ${String(appended).padStart(3)} files (copy-contents)`);
399
+ console.log(` ${pc.green('Would merge:')} ${String(merged).padStart(3)} files (JSON)`);
400
+ }
401
+ else {
402
+ console.log(` ${pc.green('Copied:')} ${String(copied).padStart(3)} files`);
403
+ console.log(` ${pc.blue('Skipped:')} ${String(skipped).padStart(3)} files (identical or create-only)`);
404
+ console.log(` ${pc.yellow('Overwritten:')} ${String(overwritten).padStart(3)} files (user approved)`);
405
+ console.log(` ${pc.blue('Appended:')} ${String(appended).padStart(3)} files (copy-contents)`);
406
+ console.log(` ${pc.green('Merged:')} ${String(merged).padStart(3)} files (JSON merged)`);
407
+ }
408
+ console.log('');
409
+ if (this.detectedTypes.length > 0) {
410
+ console.log(`Project types: ${pc.green(this.detectedTypes.join(' '))}`);
411
+ }
412
+ else {
413
+ console.log(`Project types: ${pc.yellow("(none detected - only 'all' was applied)")}`);
414
+ }
415
+ console.log('');
416
+ // Validation result for CI/CD
417
+ if (this.config.validateOnly) {
418
+ const { logger } = this.deps;
419
+ if (overwritten > 0) {
420
+ logger.warn(`Validation found ${overwritten} file(s) that would conflict`);
421
+ console.log('Run without --validate to apply changes interactively');
422
+ }
423
+ else {
424
+ logger.success('Project is compatible with Lisa configurations');
425
+ }
426
+ }
427
+ }
428
+ /**
429
+ * Remove empty directories after uninstall
430
+ */
431
+ async removeEmptyDirectories() {
432
+ const destDir = this.config.destDir;
433
+ const removeEmpty = async (dir) => {
434
+ if (dir === destDir)
435
+ return;
436
+ if (dir.includes('.git') || dir.includes('node_modules'))
437
+ return;
438
+ try {
439
+ const entries = await readdir(dir);
440
+ if (entries.length === 0) {
441
+ await rmdir(dir);
442
+ // Recursively check parent
443
+ await removeEmpty(path.dirname(dir));
444
+ }
445
+ }
446
+ catch {
447
+ // Directory might not exist or not be empty
448
+ }
449
+ };
450
+ // Get all directories and check if empty
451
+ const entries = await readdir(destDir, { withFileTypes: true });
452
+ for (const entry of entries) {
453
+ if (entry.isDirectory() && !entry.name.startsWith('.git') && entry.name !== 'node_modules') {
454
+ await removeEmpty(path.join(destDir, entry.name));
455
+ }
456
+ }
457
+ }
458
+ }
459
+ //# sourceMappingURL=lisa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lisa.js","sourceRoot":"","sources":["../../src/core/lisa.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import type { CopyStrategy } from './config.js';
2
+ /**
3
+ * Manifest file name
4
+ */
5
+ export declare const MANIFEST_FILENAME = ".lisa-manifest";
6
+ /**
7
+ * Entry in the manifest file
8
+ */
9
+ export interface ManifestEntry {
10
+ readonly strategy: CopyStrategy;
11
+ readonly relativePath: string;
12
+ }
13
+ /**
14
+ * Interface for manifest operations
15
+ */
16
+ export interface IManifestService {
17
+ /** Initialize or reset the manifest file */
18
+ init(destDir: string, lisaDir: string): Promise<void>;
19
+ /** Record a file entry in the manifest */
20
+ record(relativePath: string, strategy: CopyStrategy): void;
21
+ /** Finalize and write manifest to disk */
22
+ finalize(): Promise<void>;
23
+ /** Read existing manifest from disk */
24
+ read(destDir: string): Promise<readonly ManifestEntry[]>;
25
+ /** Remove the manifest file */
26
+ remove(destDir: string): Promise<void>;
27
+ }
28
+ /**
29
+ * Service for managing the .lisa-manifest file
30
+ */
31
+ export declare class ManifestService implements IManifestService {
32
+ private entries;
33
+ private manifestPath;
34
+ private lisaDir;
35
+ init(destDir: string, lisaDir: string): Promise<void>;
36
+ record(relativePath: string, strategy: CopyStrategy): void;
37
+ finalize(): Promise<void>;
38
+ read(destDir: string): Promise<readonly ManifestEntry[]>;
39
+ remove(destDir: string): Promise<void>;
40
+ }
41
+ /**
42
+ * Error thrown when manifest file is not found
43
+ */
44
+ export declare class ManifestNotFoundError extends Error {
45
+ readonly manifestPath: string;
46
+ constructor(manifestPath: string);
47
+ }
48
+ /**
49
+ * Create a no-op manifest service for dry-run mode
50
+ */
51
+ export declare class DryRunManifestService implements IManifestService {
52
+ init(_destDir: string, _lisaDir: string): Promise<void>;
53
+ record(_relativePath: string, _strategy: CopyStrategy): void;
54
+ finalize(): Promise<void>;
55
+ read(destDir: string): Promise<readonly ManifestEntry[]>;
56
+ remove(_destDir: string): Promise<void>;
57
+ }
58
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/core/manifest.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,iBAAiB,mBAAmB,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4CAA4C;IAC5C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtD,0CAA0C;IAC1C,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAE3D,0CAA0C;IAC1C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B,uCAAuC;IACvC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAAC;IAEzD,+BAA+B;IAC/B,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,OAAO,CAAc;IAEvB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3D,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI;IAIpD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBzB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC;IAgCxD,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAI7C;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;aAClB,YAAY,EAAE,MAAM;gBAApB,YAAY,EAAE,MAAM;CAIjD;AASD;;GAEG;AACH,qBAAa,qBAAsB,YAAW,gBAAgB;IACtD,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI;IAItD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC;IAMxD,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG9C"}
@@ -0,0 +1,104 @@
1
+ import * as fse from 'fs-extra';
2
+ import { readFile, writeFile } from 'node:fs/promises';
3
+ import * as path from 'node:path';
4
+ /**
5
+ * Manifest file name
6
+ */
7
+ export const MANIFEST_FILENAME = '.lisa-manifest';
8
+ /**
9
+ * Service for managing the .lisa-manifest file
10
+ */
11
+ export class ManifestService {
12
+ entries = [];
13
+ manifestPath = null;
14
+ lisaDir = '';
15
+ async init(destDir, lisaDir) {
16
+ this.entries = [];
17
+ this.manifestPath = path.join(destDir, MANIFEST_FILENAME);
18
+ this.lisaDir = lisaDir;
19
+ }
20
+ record(relativePath, strategy) {
21
+ this.entries.push({ strategy, relativePath });
22
+ }
23
+ async finalize() {
24
+ if (!this.manifestPath) {
25
+ throw new Error('Manifest not initialized');
26
+ }
27
+ const lines = [
28
+ '# Lisa manifest - DO NOT EDIT',
29
+ `# Generated: ${new Date().toISOString()}`,
30
+ `# Lisa directory: ${this.lisaDir}`,
31
+ '',
32
+ ...this.entries.map((entry) => `${entry.strategy}:${entry.relativePath}`),
33
+ ];
34
+ await writeFile(this.manifestPath, lines.join('\n') + '\n', 'utf-8');
35
+ }
36
+ async read(destDir) {
37
+ const manifestPath = path.join(destDir, MANIFEST_FILENAME);
38
+ if (!(await fse.pathExists(manifestPath))) {
39
+ throw new ManifestNotFoundError(manifestPath);
40
+ }
41
+ const content = await readFile(manifestPath, 'utf-8');
42
+ const entries = [];
43
+ for (const line of content.split('\n')) {
44
+ // Skip comments and empty lines
45
+ if (line.startsWith('#') || line.trim() === '') {
46
+ continue;
47
+ }
48
+ const colonIndex = line.indexOf(':');
49
+ if (colonIndex === -1) {
50
+ continue;
51
+ }
52
+ const strategy = line.substring(0, colonIndex);
53
+ const relativePath = line.substring(colonIndex + 1);
54
+ if (isValidStrategy(strategy)) {
55
+ entries.push({ strategy, relativePath });
56
+ }
57
+ }
58
+ return entries;
59
+ }
60
+ async remove(destDir) {
61
+ const manifestPath = path.join(destDir, MANIFEST_FILENAME);
62
+ await fse.remove(manifestPath);
63
+ }
64
+ }
65
+ /**
66
+ * Error thrown when manifest file is not found
67
+ */
68
+ export class ManifestNotFoundError extends Error {
69
+ manifestPath;
70
+ constructor(manifestPath) {
71
+ super(`No Lisa manifest found at: ${manifestPath}`);
72
+ this.manifestPath = manifestPath;
73
+ this.name = 'ManifestNotFoundError';
74
+ }
75
+ }
76
+ /**
77
+ * Check if a string is a valid copy strategy
78
+ */
79
+ function isValidStrategy(value) {
80
+ return ['copy-overwrite', 'copy-contents', 'create-only', 'merge'].includes(value);
81
+ }
82
+ /**
83
+ * Create a no-op manifest service for dry-run mode
84
+ */
85
+ export class DryRunManifestService {
86
+ async init(_destDir, _lisaDir) {
87
+ // No-op
88
+ }
89
+ record(_relativePath, _strategy) {
90
+ // No-op
91
+ }
92
+ async finalize() {
93
+ // No-op
94
+ }
95
+ async read(destDir) {
96
+ // Delegate to real service for reading
97
+ const realService = new ManifestService();
98
+ return realService.read(destDir);
99
+ }
100
+ async remove(_destDir) {
101
+ // No-op
102
+ }
103
+ }
104
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/core/manifest.ts"],"names":[],"mappings":"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"}