xtrm-tools 2.2.0 → 2.4.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 (286) hide show
  1. package/README.md +127 -104
  2. package/cli/dist/index.cjs +1078 -970
  3. package/cli/dist/index.cjs.map +1 -1
  4. package/cli/package.json +1 -1
  5. package/config/pi/extensions/beads.ts +33 -5
  6. package/config/pi/extensions/service-skills.ts +17 -9
  7. package/config/pi/install-schema.json +2 -1
  8. package/hooks/beads-gate-core.mjs +6 -4
  9. package/hooks/beads-memory-gate.mjs +12 -5
  10. package/hooks/hooks.json +126 -0
  11. package/package.json +3 -1
  12. package/skills/test-planning/SKILL.md +208 -0
  13. package/skills/test-planning/evals/evals.json +23 -0
  14. package/skills/using-xtrm/SKILL.md +5 -27
  15. package/project-skills/tdd-guard/.claude/hooks/tdd-guard-pretool-bridge.cjs +0 -103
  16. package/project-skills/tdd-guard/.claude/settings.json +0 -38
  17. package/project-skills/tdd-guard/.claude/skills/using-tdd-guard/SKILL.md +0 -79
  18. package/project-skills/tdd-guard/CLAUDE.md +0 -98
  19. package/project-skills/tdd-guard/CONTRIBUTING.md +0 -38
  20. package/project-skills/tdd-guard/DEVELOPMENT.md +0 -127
  21. package/project-skills/tdd-guard/LICENSE +0 -21
  22. package/project-skills/tdd-guard/README.md +0 -398
  23. package/project-skills/tdd-guard/docs/adr/001-claude-session-subdirectory.md +0 -52
  24. package/project-skills/tdd-guard/docs/adr/002-secure-claude-binary-path.md +0 -56
  25. package/project-skills/tdd-guard/docs/adr/003-remove-configurable-data-directory.md +0 -56
  26. package/project-skills/tdd-guard/docs/adr/004-monorepo-architecture.md +0 -64
  27. package/project-skills/tdd-guard/docs/adr/005-claude-project-dir-support.md +0 -55
  28. package/project-skills/tdd-guard/docs/adr/006-phpunit-separate-repository.md +0 -93
  29. package/project-skills/tdd-guard/docs/adr/007-golangci-lint-path-support.md +0 -83
  30. package/project-skills/tdd-guard/docs/adr/008-storybook-reporter-design.md +0 -182
  31. package/project-skills/tdd-guard/docs/assets/tdd-guard-demo-screenshot.gif +0 -0
  32. package/project-skills/tdd-guard/docs/config-migration.md +0 -143
  33. package/project-skills/tdd-guard/docs/configuration.md +0 -137
  34. package/project-skills/tdd-guard/docs/custom-instructions.md +0 -43
  35. package/project-skills/tdd-guard/docs/enforcement.md +0 -46
  36. package/project-skills/tdd-guard/docs/ignore-patterns.md +0 -81
  37. package/project-skills/tdd-guard/docs/linting.md +0 -109
  38. package/project-skills/tdd-guard/docs/quick-commands.md +0 -52
  39. package/project-skills/tdd-guard/docs/session-management.md +0 -75
  40. package/project-skills/tdd-guard/docs/storybook-vitest-addon.md +0 -120
  41. package/project-skills/tdd-guard/docs/validation-model.md +0 -63
  42. package/project-skills/tdd-guard/eslint.config.mjs +0 -140
  43. package/project-skills/tdd-guard/package-lock.json +0 -16937
  44. package/project-skills/tdd-guard/package.json +0 -102
  45. package/project-skills/tdd-guard/reporters/go/README.md +0 -67
  46. package/project-skills/tdd-guard/reporters/go/cmd/tdd-guard-go/main.go +0 -127
  47. package/project-skills/tdd-guard/reporters/go/cmd/tdd-guard-go/main_test.go +0 -280
  48. package/project-skills/tdd-guard/reporters/go/go.mod +0 -3
  49. package/project-skills/tdd-guard/reporters/go/go.sum +0 -0
  50. package/project-skills/tdd-guard/reporters/go/internal/formatter/formatter.go +0 -126
  51. package/project-skills/tdd-guard/reporters/go/internal/formatter/formatter_test.go +0 -264
  52. package/project-skills/tdd-guard/reporters/go/internal/io/tee_reader.go +0 -26
  53. package/project-skills/tdd-guard/reporters/go/internal/io/tee_reader_test.go +0 -37
  54. package/project-skills/tdd-guard/reporters/go/internal/parser/mixed_reader.go +0 -94
  55. package/project-skills/tdd-guard/reporters/go/internal/parser/mixed_reader_test.go +0 -198
  56. package/project-skills/tdd-guard/reporters/go/internal/parser/parser.go +0 -245
  57. package/project-skills/tdd-guard/reporters/go/internal/parser/parser_test.go +0 -547
  58. package/project-skills/tdd-guard/reporters/go/internal/storage/storage.go +0 -35
  59. package/project-skills/tdd-guard/reporters/go/internal/storage/storage_test.go +0 -113
  60. package/project-skills/tdd-guard/reporters/go/internal/transformer/transformer.go +0 -103
  61. package/project-skills/tdd-guard/reporters/go/internal/transformer/transformer_test.go +0 -303
  62. package/project-skills/tdd-guard/reporters/jest/README.md +0 -102
  63. package/project-skills/tdd-guard/reporters/jest/package.json +0 -38
  64. package/project-skills/tdd-guard/reporters/jest/src/JestReporter.test-data.ts +0 -199
  65. package/project-skills/tdd-guard/reporters/jest/src/JestReporter.test.ts +0 -302
  66. package/project-skills/tdd-guard/reporters/jest/src/JestReporter.ts +0 -201
  67. package/project-skills/tdd-guard/reporters/jest/src/index.ts +0 -4
  68. package/project-skills/tdd-guard/reporters/jest/src/types.ts +0 -42
  69. package/project-skills/tdd-guard/reporters/jest/tsconfig.json +0 -11
  70. package/project-skills/tdd-guard/reporters/phpunit/.php-cs-fixer.php +0 -28
  71. package/project-skills/tdd-guard/reporters/phpunit/README.md +0 -97
  72. package/project-skills/tdd-guard/reporters/phpunit/SYNC_README.md +0 -29
  73. package/project-skills/tdd-guard/reporters/phpunit/composer.json +0 -55
  74. package/project-skills/tdd-guard/reporters/phpunit/phpunit.xml.dist +0 -19
  75. package/project-skills/tdd-guard/reporters/phpunit/psalm.xml +0 -44
  76. package/project-skills/tdd-guard/reporters/phpunit/src/Event/ErroredTestSubscriber.php +0 -28
  77. package/project-skills/tdd-guard/reporters/phpunit/src/Event/FailedTestSubscriber.php +0 -28
  78. package/project-skills/tdd-guard/reporters/phpunit/src/Event/IncompleteTestSubscriber.php +0 -28
  79. package/project-skills/tdd-guard/reporters/phpunit/src/Event/PassedTestSubscriber.php +0 -27
  80. package/project-skills/tdd-guard/reporters/phpunit/src/Event/SkippedTestSubscriber.php +0 -28
  81. package/project-skills/tdd-guard/reporters/phpunit/src/Event/TestRunnerFinishedSubscriber.php +0 -24
  82. package/project-skills/tdd-guard/reporters/phpunit/src/PathValidator.php +0 -88
  83. package/project-skills/tdd-guard/reporters/phpunit/src/Storage.php +0 -26
  84. package/project-skills/tdd-guard/reporters/phpunit/src/TddGuardExtension.php +0 -33
  85. package/project-skills/tdd-guard/reporters/phpunit/src/TddGuardListener.php +0 -158
  86. package/project-skills/tdd-guard/reporters/phpunit/src/TddGuardSubscriber.php +0 -35
  87. package/project-skills/tdd-guard/reporters/phpunit/src/TestResultCollector.php +0 -105
  88. package/project-skills/tdd-guard/reporters/phpunit/tests/PathValidatorTest.php +0 -74
  89. package/project-skills/tdd-guard/reporters/phpunit/tests/TddGuardExtensionFailedTest.php +0 -241
  90. package/project-skills/tdd-guard/reporters/phpunit/tests/TddGuardExtensionTest.php +0 -84
  91. package/project-skills/tdd-guard/reporters/phpunit/tests/TddGuardStorageLocationTest.php +0 -71
  92. package/project-skills/tdd-guard/reporters/pytest/README.md +0 -77
  93. package/project-skills/tdd-guard/reporters/pytest/pyproject.toml +0 -43
  94. package/project-skills/tdd-guard/reporters/pytest/pytest.ini.example +0 -7
  95. package/project-skills/tdd-guard/reporters/pytest/tdd_guard_pytest/__init__.py +0 -1
  96. package/project-skills/tdd-guard/reporters/pytest/tdd_guard_pytest/pytest_reporter.py +0 -134
  97. package/project-skills/tdd-guard/reporters/pytest/tests/__init__.py +0 -1
  98. package/project-skills/tdd-guard/reporters/pytest/tests/conftest.py +0 -3
  99. package/project-skills/tdd-guard/reporters/pytest/tests/helpers.py +0 -293
  100. package/project-skills/tdd-guard/reporters/pytest/tests/test_config_option.py +0 -38
  101. package/project-skills/tdd-guard/reporters/pytest/tests/test_path_validation.py +0 -59
  102. package/project-skills/tdd-guard/reporters/pytest/tests/test_plugin_config.py +0 -32
  103. package/project-skills/tdd-guard/reporters/pytest/tests/test_project_root.py +0 -296
  104. package/project-skills/tdd-guard/reporters/pytest/tests/test_pytest_reporter.py +0 -137
  105. package/project-skills/tdd-guard/reporters/rspec/Gemfile +0 -3
  106. package/project-skills/tdd-guard/reporters/rust/Cargo.lock +0 -458
  107. package/project-skills/tdd-guard/reporters/rust/Cargo.toml +0 -33
  108. package/project-skills/tdd-guard/reporters/rust/Makefile.example +0 -95
  109. package/project-skills/tdd-guard/reporters/rust/README.md +0 -88
  110. package/project-skills/tdd-guard/reporters/rust/src/error_parser.rs +0 -309
  111. package/project-skills/tdd-guard/reporters/rust/src/main.rs +0 -464
  112. package/project-skills/tdd-guard/reporters/rust/src/parser.rs +0 -225
  113. package/project-skills/tdd-guard/reporters/rust/src/transformer.rs +0 -409
  114. package/project-skills/tdd-guard/reporters/storybook/README.md +0 -108
  115. package/project-skills/tdd-guard/reporters/storybook/package-lock.json +0 -9482
  116. package/project-skills/tdd-guard/reporters/storybook/package.json +0 -43
  117. package/project-skills/tdd-guard/reporters/storybook/src/StorybookReporter.test-data.ts +0 -22
  118. package/project-skills/tdd-guard/reporters/storybook/src/StorybookReporter.test.ts +0 -190
  119. package/project-skills/tdd-guard/reporters/storybook/src/StorybookReporter.ts +0 -88
  120. package/project-skills/tdd-guard/reporters/storybook/src/index.ts +0 -12
  121. package/project-skills/tdd-guard/reporters/storybook/src/types.ts +0 -37
  122. package/project-skills/tdd-guard/reporters/storybook/tsconfig.json +0 -11
  123. package/project-skills/tdd-guard/reporters/test/artifacts/go/failing/go.mod +0 -3
  124. package/project-skills/tdd-guard/reporters/test/artifacts/go/failing/single_failing_test.go +0 -13
  125. package/project-skills/tdd-guard/reporters/test/artifacts/go/import/go.mod +0 -3
  126. package/project-skills/tdd-guard/reporters/test/artifacts/go/import/single_import_error_test.go +0 -17
  127. package/project-skills/tdd-guard/reporters/test/artifacts/go/passing/go.mod +0 -3
  128. package/project-skills/tdd-guard/reporters/test/artifacts/go/passing/single_passing_test.go +0 -13
  129. package/project-skills/tdd-guard/reporters/test/artifacts/jest/single-failing.test.js +0 -5
  130. package/project-skills/tdd-guard/reporters/test/artifacts/jest/single-import-error.test.js +0 -8
  131. package/project-skills/tdd-guard/reporters/test/artifacts/jest/single-passing.test.js +0 -5
  132. package/project-skills/tdd-guard/reporters/test/artifacts/phpunit/SingleFailingTest.php +0 -11
  133. package/project-skills/tdd-guard/reporters/test/artifacts/phpunit/SingleImportErrorTest.php +0 -14
  134. package/project-skills/tdd-guard/reporters/test/artifacts/phpunit/SinglePassingTest.php +0 -11
  135. package/project-skills/tdd-guard/reporters/test/artifacts/pytest/test_single_failing.py +0 -3
  136. package/project-skills/tdd-guard/reporters/test/artifacts/pytest/test_single_import_error.py +0 -6
  137. package/project-skills/tdd-guard/reporters/test/artifacts/pytest/test_single_passing.py +0 -3
  138. package/project-skills/tdd-guard/reporters/test/artifacts/rust/failing/Cargo.lock +0 -7
  139. package/project-skills/tdd-guard/reporters/test/artifacts/rust/failing/Cargo.toml +0 -4
  140. package/project-skills/tdd-guard/reporters/test/artifacts/rust/failing/src/lib.rs +0 -14
  141. package/project-skills/tdd-guard/reporters/test/artifacts/rust/import/Cargo.lock +0 -7
  142. package/project-skills/tdd-guard/reporters/test/artifacts/rust/import/Cargo.toml +0 -4
  143. package/project-skills/tdd-guard/reporters/test/artifacts/rust/import/src/lib.rs +0 -13
  144. package/project-skills/tdd-guard/reporters/test/artifacts/rust/passing/Cargo.lock +0 -7
  145. package/project-skills/tdd-guard/reporters/test/artifacts/rust/passing/Cargo.toml +0 -4
  146. package/project-skills/tdd-guard/reporters/test/artifacts/rust/passing/src/lib.rs +0 -14
  147. package/project-skills/tdd-guard/reporters/test/artifacts/storybook/Calculator.js +0 -4
  148. package/project-skills/tdd-guard/reporters/test/artifacts/storybook/single-failing.stories.js +0 -15
  149. package/project-skills/tdd-guard/reporters/test/artifacts/storybook/single-import-error.stories.js +0 -14
  150. package/project-skills/tdd-guard/reporters/test/artifacts/storybook/single-passing.stories.js +0 -15
  151. package/project-skills/tdd-guard/reporters/test/artifacts/vitest/single-failing.test.js +0 -7
  152. package/project-skills/tdd-guard/reporters/test/artifacts/vitest/single-import-error.test.js +0 -9
  153. package/project-skills/tdd-guard/reporters/test/artifacts/vitest/single-passing.test.js +0 -7
  154. package/project-skills/tdd-guard/reporters/test/factories/go.ts +0 -59
  155. package/project-skills/tdd-guard/reporters/test/factories/helpers.ts +0 -48
  156. package/project-skills/tdd-guard/reporters/test/factories/index.ts +0 -7
  157. package/project-skills/tdd-guard/reporters/test/factories/jest.ts +0 -51
  158. package/project-skills/tdd-guard/reporters/test/factories/phpunit.ts +0 -63
  159. package/project-skills/tdd-guard/reporters/test/factories/pytest.ts +0 -41
  160. package/project-skills/tdd-guard/reporters/test/factories/rust.ts +0 -158
  161. package/project-skills/tdd-guard/reporters/test/factories/storybook.ts +0 -198
  162. package/project-skills/tdd-guard/reporters/test/factories/vitest.ts +0 -51
  163. package/project-skills/tdd-guard/reporters/test/reporters.integration.test.ts +0 -735
  164. package/project-skills/tdd-guard/reporters/test/types.ts +0 -28
  165. package/project-skills/tdd-guard/reporters/vitest/README.md +0 -64
  166. package/project-skills/tdd-guard/reporters/vitest/package.json +0 -35
  167. package/project-skills/tdd-guard/reporters/vitest/src/VitestReporter.test-data.ts +0 -85
  168. package/project-skills/tdd-guard/reporters/vitest/src/VitestReporter.test.ts +0 -446
  169. package/project-skills/tdd-guard/reporters/vitest/src/VitestReporter.ts +0 -110
  170. package/project-skills/tdd-guard/reporters/vitest/src/index.ts +0 -4
  171. package/project-skills/tdd-guard/reporters/vitest/src/types.ts +0 -39
  172. package/project-skills/tdd-guard/reporters/vitest/tsconfig.json +0 -11
  173. package/project-skills/tdd-guard/src/cli/buildContext.test.ts +0 -200
  174. package/project-skills/tdd-guard/src/cli/buildContext.ts +0 -48
  175. package/project-skills/tdd-guard/src/cli/tdd-guard.test.ts +0 -159
  176. package/project-skills/tdd-guard/src/cli/tdd-guard.ts +0 -48
  177. package/project-skills/tdd-guard/src/config/Config.test.ts +0 -538
  178. package/project-skills/tdd-guard/src/config/Config.ts +0 -172
  179. package/project-skills/tdd-guard/src/contracts/schemas/guardSchemas.test.ts +0 -58
  180. package/project-skills/tdd-guard/src/contracts/schemas/guardSchemas.ts +0 -8
  181. package/project-skills/tdd-guard/src/contracts/schemas/lintSchemas.test.ts +0 -347
  182. package/project-skills/tdd-guard/src/contracts/schemas/lintSchemas.ts +0 -61
  183. package/project-skills/tdd-guard/src/contracts/schemas/pytestSchemas.test.ts +0 -24
  184. package/project-skills/tdd-guard/src/contracts/schemas/pytestSchemas.ts +0 -7
  185. package/project-skills/tdd-guard/src/contracts/schemas/reporterSchemas.test.ts +0 -377
  186. package/project-skills/tdd-guard/src/contracts/schemas/reporterSchemas.ts +0 -75
  187. package/project-skills/tdd-guard/src/contracts/schemas/toolSchemas.test.ts +0 -563
  188. package/project-skills/tdd-guard/src/contracts/schemas/toolSchemas.ts +0 -140
  189. package/project-skills/tdd-guard/src/contracts/types/ClientType.ts +0 -1
  190. package/project-skills/tdd-guard/src/contracts/types/ConfigOptions.ts +0 -12
  191. package/project-skills/tdd-guard/src/contracts/types/Context.ts +0 -16
  192. package/project-skills/tdd-guard/src/contracts/types/ModelClient.ts +0 -3
  193. package/project-skills/tdd-guard/src/contracts/types/ValidationResult.ts +0 -6
  194. package/project-skills/tdd-guard/src/guard/GuardManager.test.ts +0 -336
  195. package/project-skills/tdd-guard/src/guard/GuardManager.ts +0 -83
  196. package/project-skills/tdd-guard/src/hooks/HookEvents.test.ts +0 -107
  197. package/project-skills/tdd-guard/src/hooks/HookEvents.ts +0 -39
  198. package/project-skills/tdd-guard/src/hooks/fileTypeDetection.ts +0 -16
  199. package/project-skills/tdd-guard/src/hooks/postToolLint.test.ts +0 -327
  200. package/project-skills/tdd-guard/src/hooks/postToolLint.ts +0 -165
  201. package/project-skills/tdd-guard/src/hooks/processHookData.test.ts +0 -465
  202. package/project-skills/tdd-guard/src/hooks/processHookData.ts +0 -203
  203. package/project-skills/tdd-guard/src/hooks/sessionHandler.test.ts +0 -136
  204. package/project-skills/tdd-guard/src/hooks/sessionHandler.ts +0 -31
  205. package/project-skills/tdd-guard/src/hooks/userPromptHandler.test.ts +0 -131
  206. package/project-skills/tdd-guard/src/hooks/userPromptHandler.ts +0 -55
  207. package/project-skills/tdd-guard/src/index.ts +0 -19
  208. package/project-skills/tdd-guard/src/linters/Linter.ts +0 -5
  209. package/project-skills/tdd-guard/src/linters/eslint/ESLint.test.ts +0 -183
  210. package/project-skills/tdd-guard/src/linters/eslint/ESLint.ts +0 -82
  211. package/project-skills/tdd-guard/src/linters/golangci/GolangciLint.test.ts +0 -170
  212. package/project-skills/tdd-guard/src/linters/golangci/GolangciLint.ts +0 -148
  213. package/project-skills/tdd-guard/src/processors/index.ts +0 -1
  214. package/project-skills/tdd-guard/src/processors/lintProcessor.ts +0 -77
  215. package/project-skills/tdd-guard/src/processors/testResults/TestResultsProcessor.test.ts +0 -303
  216. package/project-skills/tdd-guard/src/processors/testResults/TestResultsProcessor.ts +0 -255
  217. package/project-skills/tdd-guard/src/providers/LinterProvider.test.ts +0 -43
  218. package/project-skills/tdd-guard/src/providers/LinterProvider.ts +0 -20
  219. package/project-skills/tdd-guard/src/providers/ModelClientProvider.test.ts +0 -68
  220. package/project-skills/tdd-guard/src/providers/ModelClientProvider.ts +0 -22
  221. package/project-skills/tdd-guard/src/storage/FileStorage.test.ts +0 -76
  222. package/project-skills/tdd-guard/src/storage/FileStorage.ts +0 -108
  223. package/project-skills/tdd-guard/src/storage/MemoryStorage.ts +0 -57
  224. package/project-skills/tdd-guard/src/storage/Storage.test.ts +0 -227
  225. package/project-skills/tdd-guard/src/storage/Storage.ts +0 -17
  226. package/project-skills/tdd-guard/src/validation/context/context.test.ts +0 -364
  227. package/project-skills/tdd-guard/src/validation/context/context.ts +0 -155
  228. package/project-skills/tdd-guard/src/validation/models/AnthropicApi.test.ts +0 -171
  229. package/project-skills/tdd-guard/src/validation/models/AnthropicApi.ts +0 -49
  230. package/project-skills/tdd-guard/src/validation/models/ClaudeAgentSdk.test.ts +0 -167
  231. package/project-skills/tdd-guard/src/validation/models/ClaudeAgentSdk.ts +0 -54
  232. package/project-skills/tdd-guard/src/validation/models/ClaudeCli.test.ts +0 -239
  233. package/project-skills/tdd-guard/src/validation/models/ClaudeCli.ts +0 -57
  234. package/project-skills/tdd-guard/src/validation/prompts/file-types.ts +0 -52
  235. package/project-skills/tdd-guard/src/validation/prompts/operations/edit.ts +0 -58
  236. package/project-skills/tdd-guard/src/validation/prompts/operations/multi-edit.ts +0 -54
  237. package/project-skills/tdd-guard/src/validation/prompts/operations/write.ts +0 -54
  238. package/project-skills/tdd-guard/src/validation/prompts/response.ts +0 -40
  239. package/project-skills/tdd-guard/src/validation/prompts/rules.ts +0 -51
  240. package/project-skills/tdd-guard/src/validation/prompts/system-prompt.ts +0 -10
  241. package/project-skills/tdd-guard/src/validation/prompts/tools/lint-results.ts +0 -15
  242. package/project-skills/tdd-guard/src/validation/prompts/tools/test-output.ts +0 -14
  243. package/project-skills/tdd-guard/src/validation/prompts/tools/todos.ts +0 -9
  244. package/project-skills/tdd-guard/src/validation/validator.test.ts +0 -268
  245. package/project-skills/tdd-guard/src/validation/validator.ts +0 -159
  246. package/project-skills/tdd-guard/test/artifacts/go/.golangci.yml +0 -6
  247. package/project-skills/tdd-guard/test/artifacts/go/with-issues/file-with-issues.go +0 -12
  248. package/project-skills/tdd-guard/test/artifacts/go/with-issues/go.mod +0 -3
  249. package/project-skills/tdd-guard/test/artifacts/go/without-issues/file-without-issues.go +0 -7
  250. package/project-skills/tdd-guard/test/artifacts/go/without-issues/go.mod +0 -3
  251. package/project-skills/tdd-guard/test/artifacts/javascript/eslint.config.js +0 -20
  252. package/project-skills/tdd-guard/test/artifacts/javascript/file-with-issues.js +0 -12
  253. package/project-skills/tdd-guard/test/artifacts/javascript/file-without-issues.js +0 -10
  254. package/project-skills/tdd-guard/test/hooks/fileTypeDetection.test.ts +0 -26
  255. package/project-skills/tdd-guard/test/hooks/processHookData.fileType.test.ts +0 -46
  256. package/project-skills/tdd-guard/test/hooks/processHookData.python.test.ts +0 -68
  257. package/project-skills/tdd-guard/test/integration/test-context.test.ts +0 -66
  258. package/project-skills/tdd-guard/test/integration/validator.core.test.ts +0 -96
  259. package/project-skills/tdd-guard/test/integration/validator.scenarios.test.ts +0 -497
  260. package/project-skills/tdd-guard/test/utils/assertions.ts +0 -29
  261. package/project-skills/tdd-guard/test/utils/factories/contextFactory.ts +0 -30
  262. package/project-skills/tdd-guard/test/utils/factories/editFactory.ts +0 -82
  263. package/project-skills/tdd-guard/test/utils/factories/helpers.test.ts +0 -46
  264. package/project-skills/tdd-guard/test/utils/factories/helpers.ts +0 -46
  265. package/project-skills/tdd-guard/test/utils/factories/lintFactory.ts +0 -352
  266. package/project-skills/tdd-guard/test/utils/factories/modelClientProviderFactory.ts +0 -21
  267. package/project-skills/tdd-guard/test/utils/factories/multiEditFactory.ts +0 -79
  268. package/project-skills/tdd-guard/test/utils/factories/operations.ts +0 -57
  269. package/project-skills/tdd-guard/test/utils/factories/reporterFactory.ts +0 -55
  270. package/project-skills/tdd-guard/test/utils/factories/scenarios/index.ts +0 -22
  271. package/project-skills/tdd-guard/test/utils/factories/scenarios/languages/python.ts +0 -745
  272. package/project-skills/tdd-guard/test/utils/factories/scenarios/languages/typescript.ts +0 -767
  273. package/project-skills/tdd-guard/test/utils/factories/scenarios/types.ts +0 -77
  274. package/project-skills/tdd-guard/test/utils/factories/scenarios/utils.ts +0 -15
  275. package/project-skills/tdd-guard/test/utils/factories/sessionStartFactory.ts +0 -36
  276. package/project-skills/tdd-guard/test/utils/factories/testDefaults.ts +0 -90
  277. package/project-skills/tdd-guard/test/utils/factories/testResultsFactory.ts +0 -234
  278. package/project-skills/tdd-guard/test/utils/factories/todoFactory.ts +0 -99
  279. package/project-skills/tdd-guard/test/utils/factories/userPromptSubmitFactory.ts +0 -39
  280. package/project-skills/tdd-guard/test/utils/factories/writeFactory.ts +0 -70
  281. package/project-skills/tdd-guard/test/utils/index.ts +0 -131
  282. package/project-skills/tdd-guard/tsconfig.build.json +0 -16
  283. package/project-skills/tdd-guard/tsconfig.eslint.json +0 -17
  284. package/project-skills/tdd-guard/tsconfig.json +0 -32
  285. package/project-skills/tdd-guard/tsconfig.node.json +0 -10
  286. package/project-skills/tdd-guard/vitest.config.ts +0 -85
@@ -1,28 +0,0 @@
1
- export interface TestScenarios {
2
- singlePassing: string
3
- singleFailing: string
4
- singleImportError: string
5
- }
6
-
7
- export interface ReporterConfig {
8
- name: string
9
- testScenarios: TestScenarios
10
- run: (tempDir: string, scenario: keyof TestScenarios) => void | Promise<void>
11
- }
12
-
13
- export interface TestResultData {
14
- testModules: Array<{
15
- moduleId: string
16
- tests: Array<{
17
- name: string
18
- fullName: string
19
- state: string
20
- errors?: Array<{
21
- message: string
22
- expected?: string
23
- actual?: string
24
- }>
25
- }>
26
- }>
27
- reason: string
28
- }
@@ -1,64 +0,0 @@
1
- # TDD Guard Vitest Reporter
2
-
3
- Vitest reporter that captures test results for TDD Guard validation.
4
-
5
- ## Requirements
6
-
7
- - Node.js 18+
8
- - Vitest 3.2.0+
9
- - [TDD Guard](https://github.com/nizos/tdd-guard) installed globally
10
-
11
- ## Installation
12
-
13
- ```bash
14
- npm install --save-dev tdd-guard-vitest
15
- ```
16
-
17
- ## Configuration
18
-
19
- ### Vitest Configuration
20
-
21
- Add the reporter to your `vitest.config.ts`:
22
-
23
- ```typescript
24
- import { defineConfig } from 'vitest/config'
25
- import { VitestReporter } from 'tdd-guard-vitest'
26
-
27
- export default defineConfig({
28
- test: {
29
- reporters: ['default', new VitestReporter()],
30
- },
31
- })
32
- ```
33
-
34
- ### Workspace/Monorepo Configuration
35
-
36
- For workspaces or monorepos, pass the project root path to the reporter:
37
-
38
- ```typescript
39
- // vitest.config.ts in project root
40
- import { defineConfig } from 'vitest/config'
41
- import { VitestReporter } from 'tdd-guard-vitest'
42
- import path from 'path'
43
-
44
- export default defineConfig({
45
- test: {
46
- reporters: ['default', new VitestReporter(path.resolve(__dirname))],
47
- },
48
- })
49
- ```
50
-
51
- If your vitest config is in a workspace subdirectory, pass the absolute path to your project root:
52
-
53
- ```typescript
54
- new VitestReporter('/Users/username/projects/my-app')
55
- ```
56
-
57
- ## More Information
58
-
59
- - Test results are saved to `.claude/tdd-guard/data/test.json`
60
- - See [TDD Guard documentation](https://github.com/nizos/tdd-guard) for complete setup
61
-
62
- ## License
63
-
64
- MIT
@@ -1,35 +0,0 @@
1
- {
2
- "name": "tdd-guard-vitest",
3
- "version": "0.1.6",
4
- "description": "Vitest reporter for TDD Guard",
5
- "author": "Nizar Selander",
6
- "license": "MIT",
7
- "repository": {
8
- "type": "git",
9
- "url": "git+https://github.com/nizos/tdd-guard.git",
10
- "directory": "reporters/vitest"
11
- },
12
- "main": "dist/index.js",
13
- "types": "dist/index.d.ts",
14
- "files": [
15
- "dist",
16
- "!dist/*.tsbuildinfo",
17
- "!dist/*.test-data.*"
18
- ],
19
- "scripts": {
20
- "build": "tsc --build",
21
- "test": "vitest run",
22
- "typecheck": "tsc --noEmit"
23
- },
24
- "dependencies": {
25
- "tdd-guard": "^1.1.0"
26
- },
27
- "peerDependencies": {
28
- "vitest": ">=3.2.4"
29
- },
30
- "devDependencies": {
31
- "@types/node": "^24.1.0",
32
- "typescript": "^5.8.3",
33
- "vitest": "^3.2.4"
34
- }
35
- }
@@ -1,85 +0,0 @@
1
- import type { TestModule, TestCase, TestResult } from 'vitest/node'
2
- import type { SerializedError } from '@vitest/utils'
3
-
4
- const DEFAULT_MODULE_ID = '/test/example.test.ts'
5
- const DEFAULT_TEST_NAME = 'should pass'
6
- const DEFAULT_TEST_FULL_NAME = 'Example Suite > should pass'
7
-
8
- // Helper to create a valid TestResult for a given state
9
- export function createTestResult(state: TestResult['state']): TestResult {
10
- switch (state) {
11
- case 'failed':
12
- return { state: 'failed', errors: [] }
13
- case 'passed':
14
- return { state: 'passed', errors: undefined }
15
- case 'skipped':
16
- return { state: 'skipped', errors: undefined, note: undefined }
17
- case 'pending':
18
- return { state: 'pending', errors: undefined }
19
- }
20
- }
21
-
22
- // Creates a minimal TestModule mock for testing
23
- function createTestModule(props: {
24
- moduleId: string
25
- errors?: () => SerializedError[]
26
- }): TestModule {
27
- return {
28
- moduleId: props.moduleId,
29
- errors: props.errors ?? ((): SerializedError[] => []),
30
- } as TestModule
31
- }
32
-
33
- export function testModule(overrides?: {
34
- moduleId?: string
35
- errors?: () => SerializedError[]
36
- }): TestModule {
37
- return createTestModule({
38
- moduleId: overrides?.moduleId ?? DEFAULT_MODULE_ID,
39
- errors: overrides?.errors,
40
- })
41
- }
42
-
43
- export function createTestCase(overrides?: Partial<TestCase>): TestCase {
44
- const defaultModule = createTestModule({ moduleId: DEFAULT_MODULE_ID })
45
-
46
- return {
47
- name: DEFAULT_TEST_NAME,
48
- fullName: DEFAULT_TEST_FULL_NAME,
49
- module: defaultModule,
50
- result: () => ({ state: 'passed', errors: [] }) as TestResult,
51
- ...overrides,
52
- } as TestCase
53
- }
54
-
55
- export function failedTestCase(overrides?: Partial<TestCase>): TestCase {
56
- return createTestCase({
57
- name: 'should fail',
58
- fullName: 'Example Suite > should fail',
59
- result: () =>
60
- ({
61
- state: 'failed',
62
- errors: [
63
- {
64
- message: 'expected 2 to be 3',
65
- stack: 'Error: expected 2 to be 3\n at test.ts:7:19',
66
- expected: '3',
67
- actual: '2',
68
- },
69
- ],
70
- }) as TestResult,
71
- ...overrides,
72
- })
73
- }
74
-
75
- export function createUnhandledError(
76
- overrides: Partial<SerializedError> = {}
77
- ): SerializedError {
78
- return {
79
- name: 'Error',
80
- message: 'Cannot find module "./helpers"',
81
- stack:
82
- "Error: Cannot find module './helpers' imported from '/src/example.test.ts'",
83
- ...overrides,
84
- }
85
- }
@@ -1,446 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest'
2
- import type { TestModule, TestCase } from 'vitest/node'
3
- import { VitestReporter } from './VitestReporter'
4
- import {
5
- MemoryStorage,
6
- FileStorage,
7
- Storage,
8
- Config,
9
- DEFAULT_DATA_DIR,
10
- isFailingTest,
11
- isPassingTest,
12
- TestResult,
13
- Test,
14
- } from 'tdd-guard'
15
- import {
16
- testModule,
17
- failedTestCase,
18
- createTestCase,
19
- createUnhandledError,
20
- createTestResult,
21
- } from './VitestReporter.test-data'
22
- import type { FormattedError } from './types'
23
- import { rmSync, mkdtempSync } from 'node:fs'
24
- import { tmpdir } from 'node:os'
25
- import { join } from 'node:path'
26
-
27
- describe('VitestReporter', () => {
28
- let sut: Awaited<ReturnType<typeof setupVitestReporter>>
29
- const module = testModule()
30
- const passedTest = createTestCase()
31
- const failedTest = failedTestCase()
32
-
33
- beforeEach(() => {
34
- sut = setupVitestReporter()
35
- })
36
-
37
- afterEach(() => {
38
- sut.cleanup()
39
- })
40
-
41
- it('uses FileStorage by default', () => {
42
- const reporter = new VitestReporter()
43
- expect(reporter['storage']).toBeInstanceOf(FileStorage)
44
- })
45
-
46
- it('uses FileStorage when no storage provided', async () => {
47
- const localSut = setupVitestReporter({ type: 'file' })
48
-
49
- expect(localSut.reporter['storage']).toBeInstanceOf(FileStorage)
50
-
51
- const result = await localSut.collectAndGetSaved([
52
- testModule(),
53
- createTestCase(),
54
- ])
55
-
56
- expect(result).toBeTruthy()
57
- expect(result).toContain('testModules')
58
-
59
- localSut.cleanup()
60
- })
61
-
62
- it('accepts Storage instance in constructor', () => {
63
- const storage = new MemoryStorage()
64
- const reporter = new VitestReporter(storage)
65
- expect(reporter['storage']).toBe(storage)
66
- })
67
-
68
- it('accepts root path string in constructor', () => {
69
- const rootPath = '/some/project/root'
70
- const reporter = new VitestReporter(rootPath)
71
- expect(reporter['storage']).toBeInstanceOf(FileStorage)
72
- // Verify the storage is configured with the correct path
73
- const fileStorage = reporter['storage'] as FileStorage
74
- const config = fileStorage['config'] as Config
75
- const expectedDataDir = join(rootPath, ...DEFAULT_DATA_DIR.split('/'))
76
- expect(config.dataDir).toBe(expectedDataDir)
77
- })
78
-
79
- describe('when collecting test data', () => {
80
- beforeEach(async () => {
81
- sut.reporter.onTestModuleCollected(module)
82
- sut.reporter.onTestCaseResult(passedTest)
83
- sut.reporter.onTestCaseResult(failedTest)
84
- await sut.reporter.onTestRunEnd()
85
- })
86
-
87
- it('saves output as valid JSON', async () => {
88
- const parsed = await sut.getParsedData()
89
- expect(parsed).toBeDefined()
90
- })
91
-
92
- it('includes test modules', async () => {
93
- const parsed = await sut.getParsedData()
94
-
95
- expect(parsed).not.toBeNull()
96
- expect(parsed?.testModules).toHaveLength(1)
97
- expect(parsed?.testModules[0].moduleId).toBe(module.moduleId)
98
- })
99
-
100
- it('includes test cases', async () => {
101
- const tests = await sut.getTests()
102
- expect(tests).toHaveLength(2)
103
- })
104
-
105
- it('captures test states', async () => {
106
- const passedTests = await sut.getPassedTests()
107
- const failedTests = await sut.getFailedTests()
108
-
109
- expect(passedTests).toHaveLength(1)
110
- expect(failedTests).toHaveLength(1)
111
- })
112
-
113
- it('includes error information for failed tests', async () => {
114
- const failedTests = await sut.getFailedTests()
115
- const failedTestData = failedTests[0]
116
-
117
- expect(failedTestData).toBeDefined()
118
- expect(failedTestData.state).toBe('failed')
119
- expect(failedTestData.errors).toBeDefined()
120
- expect(failedTestData.errors?.length).toBeGreaterThan(0)
121
- })
122
- })
123
-
124
- describe('test state mapping', () => {
125
- it.each([
126
- ['passed', 'passed'],
127
- ['failed', 'failed'],
128
- ['skipped', 'skipped'],
129
- ['pending', 'skipped'], // pending gets mapped to skipped
130
- ] as const)('maps %s to %s', async (vitestState, expected) => {
131
- // Given a test with the specified state
132
- const testCase = createTestCase({
133
- result: () => createTestResult(vitestState),
134
- })
135
-
136
- // When we process the test
137
- sut.reporter.onTestModuleCollected(module)
138
- sut.reporter.onTestCaseResult(testCase)
139
- await sut.reporter.onTestRunEnd()
140
-
141
- // Then it should be mapped correctly
142
- const tests = await sut.getTests()
143
- expect(tests[0]?.state).toBe(expected)
144
- })
145
- })
146
-
147
- describe('error expected and actual values', () => {
148
- let error: FormattedError | undefined
149
-
150
- beforeEach(async () => {
151
- // Given a test with an assertion error
152
- sut.reporter.onTestModuleCollected(module)
153
- sut.reporter.onTestCaseResult(failedTest)
154
- await sut.reporter.onTestRunEnd()
155
-
156
- // When we get the failed test errors
157
- const failedTests = await sut.getFailedTests()
158
- error = failedTests[0]?.errors?.[0]
159
- })
160
-
161
- it('includes expected value in error when available', () => {
162
- expect(error).toHaveProperty('expected')
163
- expect(error?.expected).toBe('3')
164
- })
165
-
166
- it('includes actual value in error when available', () => {
167
- expect(error).toHaveProperty('actual')
168
- expect(error?.actual).toBe('2')
169
- })
170
- })
171
-
172
- it('handles empty test runs', async () => {
173
- // When no tests are collected
174
- await sut.reporter.onTestRunEnd()
175
-
176
- // Then output should be valid JSON with empty modules
177
- const parsed = await sut.getParsedData()
178
-
179
- expect(parsed).not.toBeNull()
180
- expect(parsed).toEqual({ testModules: [], unhandledErrors: [] })
181
- })
182
-
183
- describe('storage integration', () => {
184
- it('saves test output to storage', async () => {
185
- const result = await sut.collectAndGetSaved([
186
- testModule(),
187
- createTestCase(),
188
- ])
189
-
190
- expect(result).toBeTruthy()
191
- expect(result).toContain('testModules')
192
- expect(result).toContain('passed')
193
- })
194
-
195
- it('accumulates multiple test results in storage', async () => {
196
- const result = await sut.collectAndGetSaved([
197
- module,
198
- passedTest,
199
- failedTest,
200
- ])
201
-
202
- const parsed = JSON.parse(result!)
203
- expect(parsed.testModules[0].tests).toHaveLength(2)
204
- })
205
- })
206
-
207
- describe('stores import errors as unhandled errors', () => {
208
- let parsed: TestResult | null
209
-
210
- beforeEach(async () => {
211
- // Given a module that was collected but has no tests due to import error
212
- const moduleWithImportError = testModule({
213
- moduleId: '/src/example.test.ts',
214
- errors: () => [createUnhandledError()],
215
- })
216
-
217
- // When the test run ends
218
- sut.reporter.onTestModuleCollected(moduleWithImportError)
219
- await sut.reporter.onTestRunEnd()
220
-
221
- parsed = await sut.getParsedData()
222
- })
223
-
224
- it('includes the module in test modules', () => {
225
- expect(parsed?.testModules).toHaveLength(1)
226
- })
227
-
228
- it('shows module with one synthetic failed test', () => {
229
- expect(parsed?.testModules[0].tests).toHaveLength(1)
230
- expect(parsed?.testModules[0].tests[0].state).toBe('failed')
231
- })
232
-
233
- it('uses module filename as test name', () => {
234
- const syntheticTest = parsed?.testModules[0].tests[0]
235
- expect(syntheticTest?.name).toBe('example.test.ts')
236
- expect(syntheticTest?.fullName).toBe('/src/example.test.ts')
237
- })
238
-
239
- it('includes import error details in synthetic test', () => {
240
- const syntheticTest = parsed?.testModules[0].tests[0]
241
- expect(syntheticTest?.errors).toHaveLength(1)
242
- expect(syntheticTest?.errors?.[0].message).toBe(
243
- 'Cannot find module "./helpers"'
244
- )
245
- })
246
-
247
- it('includes empty unhandled errors', () => {
248
- expect(parsed?.unhandledErrors).toHaveLength(0)
249
- })
250
-
251
- it('preserves error message in synthetic test', () => {
252
- const error = parsed?.testModules[0].tests[0].errors?.[0]
253
- expect(error?.message).toBe('Cannot find module "./helpers"')
254
- })
255
-
256
- it('preserves error stack trace in synthetic test', () => {
257
- expect(parsed?.testModules[0].tests[0].errors?.[0].stack).toContain(
258
- 'imported from'
259
- )
260
- })
261
- })
262
-
263
- describe('handles module errors from testModule.errors()', () => {
264
- it('creates synthetic test when module has errors', async () => {
265
- // Given a module with its own errors (like import errors)
266
- const moduleWithErrors = testModule({
267
- moduleId: '/src/import-error.test.ts',
268
- errors: () => [createUnhandledError()],
269
- })
270
-
271
- // When the test run ends
272
- sut.reporter.onTestModuleCollected(moduleWithErrors)
273
- await sut.reporter.onTestRunEnd([], [], 'failed')
274
-
275
- // Then a synthetic failed test should be created
276
- const parsed = await sut.getParsedData()
277
- expect(parsed?.testModules[0].tests).toHaveLength(1)
278
- expect(parsed?.testModules[0].tests[0].state).toBe('failed')
279
- })
280
- })
281
-
282
- describe('handles testModules parameter', () => {
283
- it('receives test modules in onTestRunEnd', async () => {
284
- const module1 = testModule({ moduleId: '/test1.ts' })
285
- const module2 = testModule({ moduleId: '/test2.ts' })
286
-
287
- await sut.reporter.onTestRunEnd([module1, module2])
288
-
289
- const parsed = await sut.getParsedData()
290
- expect(parsed?.testModules).toEqual([]) // Empty because we didn't collect them
291
- })
292
- })
293
-
294
- describe('handles unhandled errors', () => {
295
- it('includes unhandled errors in output when provided', async () => {
296
- const unhandledError = createUnhandledError({
297
- message: 'Connection failed',
298
- name: 'NetworkError',
299
- })
300
-
301
- await sut.reporter.onTestRunEnd([], [unhandledError])
302
-
303
- const parsed = await sut.getParsedData()
304
- expect(parsed?.unhandledErrors).toEqual([
305
- expect.objectContaining({
306
- message: 'Connection failed',
307
- name: 'NetworkError',
308
- }),
309
- ])
310
- })
311
-
312
- it('returns empty array when no errors provided', async () => {
313
- await sut.reporter.onTestRunEnd()
314
-
315
- const parsed = await sut.getParsedData()
316
- expect(parsed?.unhandledErrors).toEqual([])
317
- })
318
- })
319
-
320
- describe('when test run ends with reason', () => {
321
- it('captures "failed" reason in output', async () => {
322
- const moduleWithImportError = testModule({
323
- moduleId: '/src/linters/eslint/helpers.test.ts',
324
- })
325
-
326
- sut.reporter.onTestModuleCollected(moduleWithImportError)
327
- await sut.reporter.onTestRunEnd([], [], 'failed')
328
-
329
- const parsed = await sut.getParsedData()
330
-
331
- expect(parsed?.reason).toBe('failed')
332
- // When no errors are provided, module should have no tests
333
- expect(parsed?.testModules[0].tests).toHaveLength(0)
334
- })
335
-
336
- it('creates synthetic test when module fails with errors', async () => {
337
- const moduleWithImportError = testModule({
338
- moduleId: '/src/failing.test.ts',
339
- errors: () => [createUnhandledError()],
340
- })
341
-
342
- sut.reporter.onTestModuleCollected(moduleWithImportError)
343
- await sut.reporter.onTestRunEnd([], [], 'failed')
344
-
345
- const parsed = await sut.getParsedData()
346
-
347
- expect(parsed?.reason).toBe('failed')
348
- expect(parsed?.testModules[0].tests).toHaveLength(1)
349
- expect(parsed?.testModules[0].tests[0].state).toBe('failed')
350
- })
351
-
352
- it('captures "interrupted" reason in output', async () => {
353
- await sut.reporter.onTestRunEnd([], [], 'interrupted')
354
-
355
- const parsed = await sut.getParsedData()
356
- expect(parsed?.reason).toBe('interrupted')
357
- })
358
-
359
- it('captures "passed" reason in output', async () => {
360
- sut.reporter.onTestModuleCollected(module)
361
- sut.reporter.onTestCaseResult(passedTest)
362
- await sut.reporter.onTestRunEnd([], [], 'passed')
363
-
364
- const parsed = await sut.getParsedData()
365
- expect(parsed?.reason).toBe('passed')
366
- })
367
- })
368
- })
369
-
370
- function setupVitestReporter(options?: { type: 'file' | 'memory' }) {
371
- const { storage, cleanup } = createTestStorage(options?.type)
372
- const reporter = new VitestReporter(storage)
373
-
374
- const collectAndGetSaved = async (
375
- items: Array<TestModule | TestCase>
376
- ): Promise<string | null> => {
377
- collectTestData(reporter, items)
378
- await reporter.onTestRunEnd()
379
- return storage.getTest()
380
- }
381
-
382
- const getParsedData = async (): Promise<TestResult | null> => {
383
- const content = await storage.getTest()
384
- return content ? JSON.parse(content) : null
385
- }
386
-
387
- const getTests = async (): Promise<Test[]> => {
388
- return getTestsFromStorage(storage)
389
- }
390
-
391
- const getPassedTests = async (): Promise<(Test & { state: 'passed' })[]> => {
392
- const tests = await getTests()
393
- return tests.filter(isPassingTest)
394
- }
395
-
396
- const getFailedTests = async (): Promise<(Test & { state: 'failed' })[]> => {
397
- const tests = await getTests()
398
- return tests.filter(isFailingTest)
399
- }
400
-
401
- return {
402
- reporter,
403
- storage,
404
- collectAndGetSaved,
405
- getParsedData,
406
- getTests,
407
- getPassedTests,
408
- getFailedTests,
409
- cleanup,
410
- }
411
- }
412
-
413
- function createTestStorage(type: 'file' | 'memory' = 'memory'): {
414
- storage: Storage
415
- cleanup: () => void
416
- } {
417
- if (type === 'file') {
418
- const projectRoot = mkdtempSync(join(tmpdir(), 'vitest-reporter-test-'))
419
- const config = new Config({ projectRoot })
420
- const storage = new FileStorage(config)
421
- const cleanup = () => rmSync(projectRoot, { recursive: true, force: true })
422
- return { storage, cleanup }
423
- }
424
-
425
- return { storage: new MemoryStorage(), cleanup: () => {} }
426
- }
427
-
428
- function collectTestData(
429
- reporter: VitestReporter,
430
- items: Array<TestModule | TestCase>
431
- ): void {
432
- for (const item of items) {
433
- if ('moduleId' in item && !('module' in item)) {
434
- reporter.onTestModuleCollected(item as TestModule)
435
- } else {
436
- reporter.onTestCaseResult(item as TestCase)
437
- }
438
- }
439
- }
440
-
441
- async function getTestsFromStorage(storage: Storage): Promise<Test[]> {
442
- const content = await storage.getTest()
443
- if (!content) return []
444
- const parsed: TestResult = JSON.parse(content)
445
- return parsed.testModules[0]?.tests ?? []
446
- }