xtrm-tools 2.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 (447) hide show
  1. package/CHANGELOG.md +496 -0
  2. package/README.md +762 -0
  3. package/cli/dist/index.cjs +55245 -0
  4. package/cli/dist/index.cjs.map +1 -0
  5. package/cli/dist/index.d.cts +2 -0
  6. package/cli/package.json +43 -0
  7. package/config/.env.example +40 -0
  8. package/config/hooks.json +36 -0
  9. package/config/mcp_servers.json +46 -0
  10. package/config/mcp_servers_optional.json +53 -0
  11. package/config/settings.json +70 -0
  12. package/hooks/README.md +156 -0
  13. package/hooks/__pycache__/agent_context.cpython-314.pyc +0 -0
  14. package/hooks/agent_context.py +105 -0
  15. package/hooks/gitnexus/gitnexus-hook.cjs +133 -0
  16. package/hooks/serena-workflow-reminder.py +74 -0
  17. package/hooks/skill-discovery.py +90 -0
  18. package/hooks/skill-suggestion.py +112 -0
  19. package/hooks/test_agent_context.py +112 -0
  20. package/hooks/type-safety-enforcement.py +107 -0
  21. package/package.json +48 -0
  22. package/project-skills/main-guard/.claude/hooks/main-guard.cjs +188 -0
  23. package/project-skills/main-guard/.claude/settings.json +16 -0
  24. package/project-skills/main-guard/.claude/skills/using-main-guard/SKILL.md +135 -0
  25. package/project-skills/main-guard/README.md +163 -0
  26. package/project-skills/py-quality-gate/.claude/hooks/quality-check.py +311 -0
  27. package/project-skills/py-quality-gate/.claude/settings.json +16 -0
  28. package/project-skills/py-quality-gate/.claude/skills/using-py-quality-gate/SKILL.md +112 -0
  29. package/project-skills/py-quality-gate/README.md +147 -0
  30. package/project-skills/service-skills-set/.claude/git-hooks/__pycache__/doc_reminder.cpython-314.pyc +0 -0
  31. package/project-skills/service-skills-set/.claude/git-hooks/__pycache__/skill_staleness.cpython-314.pyc +0 -0
  32. package/project-skills/service-skills-set/.claude/git-hooks/doc_reminder.py +67 -0
  33. package/project-skills/service-skills-set/.claude/git-hooks/skill_staleness.py +194 -0
  34. package/project-skills/service-skills-set/.claude/service-registry.json +4 -0
  35. package/project-skills/service-skills-set/.claude/settings.json +37 -0
  36. package/project-skills/service-skills-set/.claude/skills/creating-service-skills/SKILL.md +433 -0
  37. package/project-skills/service-skills-set/.claude/skills/creating-service-skills/references/script_quality_standards.md +412 -0
  38. package/project-skills/service-skills-set/.claude/skills/creating-service-skills/references/service_skill_system_guide.md +264 -0
  39. package/project-skills/service-skills-set/.claude/skills/creating-service-skills/scripts/bootstrap.py +308 -0
  40. package/project-skills/service-skills-set/.claude/skills/creating-service-skills/scripts/deep_dive.py +304 -0
  41. package/project-skills/service-skills-set/.claude/skills/creating-service-skills/scripts/scaffolder.py +482 -0
  42. package/project-skills/service-skills-set/.claude/skills/scoping-service-skills/SKILL.md +231 -0
  43. package/project-skills/service-skills-set/.claude/skills/scoping-service-skills/scripts/scope.py +74 -0
  44. package/project-skills/service-skills-set/.claude/skills/updating-service-skills/SKILL.md +136 -0
  45. package/project-skills/service-skills-set/.claude/skills/updating-service-skills/scripts/__pycache__/drift_detector.cpython-314.pyc +0 -0
  46. package/project-skills/service-skills-set/.claude/skills/updating-service-skills/scripts/drift_detector.py +222 -0
  47. package/project-skills/service-skills-set/.claude/skills/using-service-skills/SKILL.md +108 -0
  48. package/project-skills/service-skills-set/.claude/skills/using-service-skills/scripts/__pycache__/cataloger.cpython-314.pyc +0 -0
  49. package/project-skills/service-skills-set/.claude/skills/using-service-skills/scripts/__pycache__/skill_activator.cpython-314.pyc +0 -0
  50. package/project-skills/service-skills-set/.claude/skills/using-service-skills/scripts/cataloger.py +74 -0
  51. package/project-skills/service-skills-set/.claude/skills/using-service-skills/scripts/skill_activator.py +152 -0
  52. package/project-skills/service-skills-set/README.md +93 -0
  53. package/project-skills/service-skills-set/__pycache__/install-service-skills.cpython-314.pyc +0 -0
  54. package/project-skills/service-skills-set/install-service-skills.py +163 -0
  55. package/project-skills/service-skills-set/service-skills-readme.md +236 -0
  56. package/project-skills/tdd-guard/.claude/settings.json +38 -0
  57. package/project-skills/tdd-guard/.claude/skills/using-tdd-guard/SKILL.md +74 -0
  58. package/project-skills/tdd-guard/CLAUDE.md +98 -0
  59. package/project-skills/tdd-guard/CONTRIBUTING.md +38 -0
  60. package/project-skills/tdd-guard/DEVELOPMENT.md +127 -0
  61. package/project-skills/tdd-guard/LICENSE +21 -0
  62. package/project-skills/tdd-guard/README.md +396 -0
  63. package/project-skills/tdd-guard/docs/adr/001-claude-session-subdirectory.md +52 -0
  64. package/project-skills/tdd-guard/docs/adr/002-secure-claude-binary-path.md +56 -0
  65. package/project-skills/tdd-guard/docs/adr/003-remove-configurable-data-directory.md +56 -0
  66. package/project-skills/tdd-guard/docs/adr/004-monorepo-architecture.md +64 -0
  67. package/project-skills/tdd-guard/docs/adr/005-claude-project-dir-support.md +55 -0
  68. package/project-skills/tdd-guard/docs/adr/006-phpunit-separate-repository.md +93 -0
  69. package/project-skills/tdd-guard/docs/adr/007-golangci-lint-path-support.md +83 -0
  70. package/project-skills/tdd-guard/docs/adr/008-storybook-reporter-design.md +182 -0
  71. package/project-skills/tdd-guard/docs/assets/tdd-guard-demo-screenshot.gif +0 -0
  72. package/project-skills/tdd-guard/docs/config-migration.md +143 -0
  73. package/project-skills/tdd-guard/docs/configuration.md +137 -0
  74. package/project-skills/tdd-guard/docs/custom-instructions.md +43 -0
  75. package/project-skills/tdd-guard/docs/enforcement.md +46 -0
  76. package/project-skills/tdd-guard/docs/ignore-patterns.md +81 -0
  77. package/project-skills/tdd-guard/docs/linting.md +109 -0
  78. package/project-skills/tdd-guard/docs/quick-commands.md +52 -0
  79. package/project-skills/tdd-guard/docs/session-management.md +75 -0
  80. package/project-skills/tdd-guard/docs/storybook-vitest-addon.md +120 -0
  81. package/project-skills/tdd-guard/docs/validation-model.md +63 -0
  82. package/project-skills/tdd-guard/eslint.config.mjs +140 -0
  83. package/project-skills/tdd-guard/package-lock.json +16937 -0
  84. package/project-skills/tdd-guard/package.json +102 -0
  85. package/project-skills/tdd-guard/reporters/go/README.md +67 -0
  86. package/project-skills/tdd-guard/reporters/go/cmd/tdd-guard-go/main.go +127 -0
  87. package/project-skills/tdd-guard/reporters/go/cmd/tdd-guard-go/main_test.go +280 -0
  88. package/project-skills/tdd-guard/reporters/go/go.mod +3 -0
  89. package/project-skills/tdd-guard/reporters/go/go.sum +0 -0
  90. package/project-skills/tdd-guard/reporters/go/internal/formatter/formatter.go +126 -0
  91. package/project-skills/tdd-guard/reporters/go/internal/formatter/formatter_test.go +264 -0
  92. package/project-skills/tdd-guard/reporters/go/internal/io/tee_reader.go +26 -0
  93. package/project-skills/tdd-guard/reporters/go/internal/io/tee_reader_test.go +37 -0
  94. package/project-skills/tdd-guard/reporters/go/internal/parser/mixed_reader.go +94 -0
  95. package/project-skills/tdd-guard/reporters/go/internal/parser/mixed_reader_test.go +198 -0
  96. package/project-skills/tdd-guard/reporters/go/internal/parser/parser.go +245 -0
  97. package/project-skills/tdd-guard/reporters/go/internal/parser/parser_test.go +547 -0
  98. package/project-skills/tdd-guard/reporters/go/internal/storage/storage.go +35 -0
  99. package/project-skills/tdd-guard/reporters/go/internal/storage/storage_test.go +113 -0
  100. package/project-skills/tdd-guard/reporters/go/internal/transformer/transformer.go +103 -0
  101. package/project-skills/tdd-guard/reporters/go/internal/transformer/transformer_test.go +303 -0
  102. package/project-skills/tdd-guard/reporters/jest/README.md +102 -0
  103. package/project-skills/tdd-guard/reporters/jest/package.json +38 -0
  104. package/project-skills/tdd-guard/reporters/phpunit/.php-cs-fixer.php +28 -0
  105. package/project-skills/tdd-guard/reporters/phpunit/README.md +97 -0
  106. package/project-skills/tdd-guard/reporters/phpunit/SYNC_README.md +29 -0
  107. package/project-skills/tdd-guard/reporters/phpunit/composer.json +55 -0
  108. package/project-skills/tdd-guard/reporters/phpunit/phpunit.xml.dist +19 -0
  109. package/project-skills/tdd-guard/reporters/phpunit/psalm.xml +44 -0
  110. package/project-skills/tdd-guard/reporters/phpunit/src/Event/ErroredTestSubscriber.php +28 -0
  111. package/project-skills/tdd-guard/reporters/phpunit/src/Event/FailedTestSubscriber.php +28 -0
  112. package/project-skills/tdd-guard/reporters/phpunit/src/Event/IncompleteTestSubscriber.php +28 -0
  113. package/project-skills/tdd-guard/reporters/phpunit/src/Event/PassedTestSubscriber.php +27 -0
  114. package/project-skills/tdd-guard/reporters/phpunit/src/Event/SkippedTestSubscriber.php +28 -0
  115. package/project-skills/tdd-guard/reporters/phpunit/src/Event/TestRunnerFinishedSubscriber.php +24 -0
  116. package/project-skills/tdd-guard/reporters/phpunit/src/PathValidator.php +88 -0
  117. package/project-skills/tdd-guard/reporters/phpunit/src/Storage.php +26 -0
  118. package/project-skills/tdd-guard/reporters/phpunit/src/TddGuardExtension.php +33 -0
  119. package/project-skills/tdd-guard/reporters/phpunit/src/TddGuardListener.php +158 -0
  120. package/project-skills/tdd-guard/reporters/phpunit/src/TddGuardSubscriber.php +35 -0
  121. package/project-skills/tdd-guard/reporters/phpunit/src/TestResultCollector.php +105 -0
  122. package/project-skills/tdd-guard/reporters/phpunit/tests/PathValidatorTest.php +74 -0
  123. package/project-skills/tdd-guard/reporters/phpunit/tests/TddGuardExtensionFailedTest.php +241 -0
  124. package/project-skills/tdd-guard/reporters/phpunit/tests/TddGuardExtensionTest.php +84 -0
  125. package/project-skills/tdd-guard/reporters/phpunit/tests/TddGuardStorageLocationTest.php +71 -0
  126. package/project-skills/tdd-guard/reporters/pytest/README.md +77 -0
  127. package/project-skills/tdd-guard/reporters/pytest/pyproject.toml +43 -0
  128. package/project-skills/tdd-guard/reporters/pytest/pytest.ini.example +7 -0
  129. package/project-skills/tdd-guard/reporters/pytest/tdd_guard_pytest/__init__.py +1 -0
  130. package/project-skills/tdd-guard/reporters/pytest/tdd_guard_pytest/pytest_reporter.py +134 -0
  131. package/project-skills/tdd-guard/reporters/pytest/tests/__init__.py +1 -0
  132. package/project-skills/tdd-guard/reporters/pytest/tests/conftest.py +3 -0
  133. package/project-skills/tdd-guard/reporters/pytest/tests/helpers.py +293 -0
  134. package/project-skills/tdd-guard/reporters/pytest/tests/test_config_option.py +38 -0
  135. package/project-skills/tdd-guard/reporters/pytest/tests/test_path_validation.py +59 -0
  136. package/project-skills/tdd-guard/reporters/pytest/tests/test_plugin_config.py +32 -0
  137. package/project-skills/tdd-guard/reporters/pytest/tests/test_project_root.py +296 -0
  138. package/project-skills/tdd-guard/reporters/pytest/tests/test_pytest_reporter.py +137 -0
  139. package/project-skills/tdd-guard/reporters/rspec/Gemfile +3 -0
  140. package/project-skills/tdd-guard/reporters/rust/Cargo.lock +458 -0
  141. package/project-skills/tdd-guard/reporters/rust/Cargo.toml +33 -0
  142. package/project-skills/tdd-guard/reporters/rust/Makefile.example +95 -0
  143. package/project-skills/tdd-guard/reporters/rust/README.md +88 -0
  144. package/project-skills/tdd-guard/reporters/rust/src/error_parser.rs +309 -0
  145. package/project-skills/tdd-guard/reporters/rust/src/main.rs +464 -0
  146. package/project-skills/tdd-guard/reporters/rust/src/parser.rs +225 -0
  147. package/project-skills/tdd-guard/reporters/rust/src/transformer.rs +409 -0
  148. package/project-skills/tdd-guard/reporters/storybook/README.md +108 -0
  149. package/project-skills/tdd-guard/reporters/storybook/package-lock.json +9482 -0
  150. package/project-skills/tdd-guard/reporters/storybook/package.json +43 -0
  151. package/project-skills/tdd-guard/reporters/storybook/src/StorybookReporter.test-data.ts +22 -0
  152. package/project-skills/tdd-guard/reporters/storybook/src/StorybookReporter.test.ts +190 -0
  153. package/project-skills/tdd-guard/reporters/storybook/src/StorybookReporter.ts +88 -0
  154. package/project-skills/tdd-guard/reporters/storybook/src/index.ts +12 -0
  155. package/project-skills/tdd-guard/reporters/storybook/src/types.ts +37 -0
  156. package/project-skills/tdd-guard/reporters/storybook/tsconfig.json +11 -0
  157. package/project-skills/tdd-guard/reporters/test/artifacts/go/failing/go.mod +3 -0
  158. package/project-skills/tdd-guard/reporters/test/artifacts/go/failing/single_failing_test.go +13 -0
  159. package/project-skills/tdd-guard/reporters/test/artifacts/go/import/go.mod +3 -0
  160. package/project-skills/tdd-guard/reporters/test/artifacts/go/import/single_import_error_test.go +17 -0
  161. package/project-skills/tdd-guard/reporters/test/artifacts/go/passing/go.mod +3 -0
  162. package/project-skills/tdd-guard/reporters/test/artifacts/go/passing/single_passing_test.go +13 -0
  163. package/project-skills/tdd-guard/reporters/test/artifacts/jest/single-failing.test.js +5 -0
  164. package/project-skills/tdd-guard/reporters/test/artifacts/jest/single-import-error.test.js +8 -0
  165. package/project-skills/tdd-guard/reporters/test/artifacts/jest/single-passing.test.js +5 -0
  166. package/project-skills/tdd-guard/reporters/test/artifacts/phpunit/SingleFailingTest.php +11 -0
  167. package/project-skills/tdd-guard/reporters/test/artifacts/phpunit/SingleImportErrorTest.php +14 -0
  168. package/project-skills/tdd-guard/reporters/test/artifacts/phpunit/SinglePassingTest.php +11 -0
  169. package/project-skills/tdd-guard/reporters/test/artifacts/pytest/test_single_failing.py +3 -0
  170. package/project-skills/tdd-guard/reporters/test/artifacts/pytest/test_single_import_error.py +6 -0
  171. package/project-skills/tdd-guard/reporters/test/artifacts/pytest/test_single_passing.py +3 -0
  172. package/project-skills/tdd-guard/reporters/test/artifacts/rust/failing/Cargo.lock +7 -0
  173. package/project-skills/tdd-guard/reporters/test/artifacts/rust/failing/Cargo.toml +4 -0
  174. package/project-skills/tdd-guard/reporters/test/artifacts/rust/failing/src/lib.rs +14 -0
  175. package/project-skills/tdd-guard/reporters/test/artifacts/rust/import/Cargo.lock +7 -0
  176. package/project-skills/tdd-guard/reporters/test/artifacts/rust/import/Cargo.toml +4 -0
  177. package/project-skills/tdd-guard/reporters/test/artifacts/rust/import/src/lib.rs +13 -0
  178. package/project-skills/tdd-guard/reporters/test/artifacts/rust/passing/Cargo.lock +7 -0
  179. package/project-skills/tdd-guard/reporters/test/artifacts/rust/passing/Cargo.toml +4 -0
  180. package/project-skills/tdd-guard/reporters/test/artifacts/rust/passing/src/lib.rs +14 -0
  181. package/project-skills/tdd-guard/reporters/test/artifacts/storybook/Calculator.js +4 -0
  182. package/project-skills/tdd-guard/reporters/test/artifacts/storybook/single-failing.stories.js +15 -0
  183. package/project-skills/tdd-guard/reporters/test/artifacts/storybook/single-import-error.stories.js +14 -0
  184. package/project-skills/tdd-guard/reporters/test/artifacts/storybook/single-passing.stories.js +15 -0
  185. package/project-skills/tdd-guard/reporters/test/artifacts/vitest/single-failing.test.js +7 -0
  186. package/project-skills/tdd-guard/reporters/test/artifacts/vitest/single-import-error.test.js +9 -0
  187. package/project-skills/tdd-guard/reporters/test/artifacts/vitest/single-passing.test.js +7 -0
  188. package/project-skills/tdd-guard/reporters/test/factories/go.ts +59 -0
  189. package/project-skills/tdd-guard/reporters/test/factories/helpers.ts +48 -0
  190. package/project-skills/tdd-guard/reporters/test/factories/index.ts +7 -0
  191. package/project-skills/tdd-guard/reporters/test/factories/jest.ts +51 -0
  192. package/project-skills/tdd-guard/reporters/test/factories/phpunit.ts +63 -0
  193. package/project-skills/tdd-guard/reporters/test/factories/pytest.ts +41 -0
  194. package/project-skills/tdd-guard/reporters/test/factories/rust.ts +158 -0
  195. package/project-skills/tdd-guard/reporters/test/factories/storybook.ts +198 -0
  196. package/project-skills/tdd-guard/reporters/test/factories/vitest.ts +51 -0
  197. package/project-skills/tdd-guard/reporters/test/reporters.integration.test.ts +735 -0
  198. package/project-skills/tdd-guard/reporters/test/types.ts +28 -0
  199. package/project-skills/tdd-guard/reporters/vitest/README.md +64 -0
  200. package/project-skills/tdd-guard/reporters/vitest/package.json +35 -0
  201. package/project-skills/tdd-guard/src/cli/buildContext.test.ts +200 -0
  202. package/project-skills/tdd-guard/src/cli/buildContext.ts +48 -0
  203. package/project-skills/tdd-guard/src/cli/tdd-guard.test.ts +159 -0
  204. package/project-skills/tdd-guard/src/cli/tdd-guard.ts +48 -0
  205. package/project-skills/tdd-guard/src/config/Config.test.ts +538 -0
  206. package/project-skills/tdd-guard/src/config/Config.ts +172 -0
  207. package/project-skills/tdd-guard/src/contracts/schemas/guardSchemas.test.ts +58 -0
  208. package/project-skills/tdd-guard/src/contracts/schemas/guardSchemas.ts +8 -0
  209. package/project-skills/tdd-guard/src/contracts/schemas/lintSchemas.test.ts +347 -0
  210. package/project-skills/tdd-guard/src/contracts/schemas/lintSchemas.ts +61 -0
  211. package/project-skills/tdd-guard/src/contracts/schemas/pytestSchemas.test.ts +24 -0
  212. package/project-skills/tdd-guard/src/contracts/schemas/pytestSchemas.ts +7 -0
  213. package/project-skills/tdd-guard/src/contracts/schemas/reporterSchemas.test.ts +377 -0
  214. package/project-skills/tdd-guard/src/contracts/schemas/reporterSchemas.ts +75 -0
  215. package/project-skills/tdd-guard/src/contracts/schemas/toolSchemas.test.ts +563 -0
  216. package/project-skills/tdd-guard/src/contracts/schemas/toolSchemas.ts +140 -0
  217. package/project-skills/tdd-guard/src/contracts/types/ClientType.ts +1 -0
  218. package/project-skills/tdd-guard/src/contracts/types/ConfigOptions.ts +12 -0
  219. package/project-skills/tdd-guard/src/contracts/types/Context.ts +16 -0
  220. package/project-skills/tdd-guard/src/contracts/types/ModelClient.ts +3 -0
  221. package/project-skills/tdd-guard/src/contracts/types/ValidationResult.ts +6 -0
  222. package/project-skills/tdd-guard/src/guard/GuardManager.test.ts +336 -0
  223. package/project-skills/tdd-guard/src/guard/GuardManager.ts +83 -0
  224. package/project-skills/tdd-guard/src/hooks/HookEvents.test.ts +107 -0
  225. package/project-skills/tdd-guard/src/hooks/HookEvents.ts +39 -0
  226. package/project-skills/tdd-guard/src/hooks/fileTypeDetection.ts +16 -0
  227. package/project-skills/tdd-guard/src/hooks/postToolLint.test.ts +327 -0
  228. package/project-skills/tdd-guard/src/hooks/postToolLint.ts +165 -0
  229. package/project-skills/tdd-guard/src/hooks/processHookData.test.ts +465 -0
  230. package/project-skills/tdd-guard/src/hooks/processHookData.ts +203 -0
  231. package/project-skills/tdd-guard/src/hooks/sessionHandler.test.ts +136 -0
  232. package/project-skills/tdd-guard/src/hooks/sessionHandler.ts +31 -0
  233. package/project-skills/tdd-guard/src/hooks/userPromptHandler.test.ts +131 -0
  234. package/project-skills/tdd-guard/src/hooks/userPromptHandler.ts +55 -0
  235. package/project-skills/tdd-guard/src/index.ts +19 -0
  236. package/project-skills/tdd-guard/src/linters/Linter.ts +5 -0
  237. package/project-skills/tdd-guard/src/linters/eslint/ESLint.test.ts +183 -0
  238. package/project-skills/tdd-guard/src/linters/eslint/ESLint.ts +82 -0
  239. package/project-skills/tdd-guard/src/linters/golangci/GolangciLint.test.ts +170 -0
  240. package/project-skills/tdd-guard/src/linters/golangci/GolangciLint.ts +148 -0
  241. package/project-skills/tdd-guard/src/processors/index.ts +1 -0
  242. package/project-skills/tdd-guard/src/processors/lintProcessor.ts +77 -0
  243. package/project-skills/tdd-guard/src/processors/testResults/TestResultsProcessor.test.ts +303 -0
  244. package/project-skills/tdd-guard/src/processors/testResults/TestResultsProcessor.ts +255 -0
  245. package/project-skills/tdd-guard/src/providers/LinterProvider.test.ts +43 -0
  246. package/project-skills/tdd-guard/src/providers/LinterProvider.ts +20 -0
  247. package/project-skills/tdd-guard/src/providers/ModelClientProvider.test.ts +68 -0
  248. package/project-skills/tdd-guard/src/providers/ModelClientProvider.ts +22 -0
  249. package/project-skills/tdd-guard/src/storage/FileStorage.test.ts +76 -0
  250. package/project-skills/tdd-guard/src/storage/FileStorage.ts +108 -0
  251. package/project-skills/tdd-guard/src/storage/MemoryStorage.ts +57 -0
  252. package/project-skills/tdd-guard/src/storage/Storage.test.ts +227 -0
  253. package/project-skills/tdd-guard/src/storage/Storage.ts +17 -0
  254. package/project-skills/tdd-guard/src/validation/context/context.test.ts +364 -0
  255. package/project-skills/tdd-guard/src/validation/context/context.ts +155 -0
  256. package/project-skills/tdd-guard/src/validation/models/AnthropicApi.test.ts +171 -0
  257. package/project-skills/tdd-guard/src/validation/models/AnthropicApi.ts +49 -0
  258. package/project-skills/tdd-guard/src/validation/models/ClaudeAgentSdk.test.ts +167 -0
  259. package/project-skills/tdd-guard/src/validation/models/ClaudeAgentSdk.ts +54 -0
  260. package/project-skills/tdd-guard/src/validation/models/ClaudeCli.test.ts +239 -0
  261. package/project-skills/tdd-guard/src/validation/models/ClaudeCli.ts +57 -0
  262. package/project-skills/tdd-guard/src/validation/prompts/file-types.ts +52 -0
  263. package/project-skills/tdd-guard/src/validation/prompts/operations/edit.ts +58 -0
  264. package/project-skills/tdd-guard/src/validation/prompts/operations/multi-edit.ts +54 -0
  265. package/project-skills/tdd-guard/src/validation/prompts/operations/write.ts +54 -0
  266. package/project-skills/tdd-guard/src/validation/prompts/response.ts +40 -0
  267. package/project-skills/tdd-guard/src/validation/prompts/rules.ts +51 -0
  268. package/project-skills/tdd-guard/src/validation/prompts/system-prompt.ts +10 -0
  269. package/project-skills/tdd-guard/src/validation/prompts/tools/lint-results.ts +15 -0
  270. package/project-skills/tdd-guard/src/validation/prompts/tools/test-output.ts +14 -0
  271. package/project-skills/tdd-guard/src/validation/prompts/tools/todos.ts +9 -0
  272. package/project-skills/tdd-guard/src/validation/validator.test.ts +268 -0
  273. package/project-skills/tdd-guard/src/validation/validator.ts +159 -0
  274. package/project-skills/tdd-guard/test/artifacts/go/.golangci.yml +6 -0
  275. package/project-skills/tdd-guard/test/artifacts/go/with-issues/file-with-issues.go +12 -0
  276. package/project-skills/tdd-guard/test/artifacts/go/with-issues/go.mod +3 -0
  277. package/project-skills/tdd-guard/test/artifacts/go/without-issues/file-without-issues.go +7 -0
  278. package/project-skills/tdd-guard/test/artifacts/go/without-issues/go.mod +3 -0
  279. package/project-skills/tdd-guard/test/artifacts/javascript/eslint.config.js +20 -0
  280. package/project-skills/tdd-guard/test/artifacts/javascript/file-with-issues.js +12 -0
  281. package/project-skills/tdd-guard/test/artifacts/javascript/file-without-issues.js +10 -0
  282. package/project-skills/tdd-guard/test/hooks/fileTypeDetection.test.ts +26 -0
  283. package/project-skills/tdd-guard/test/hooks/processHookData.fileType.test.ts +46 -0
  284. package/project-skills/tdd-guard/test/hooks/processHookData.python.test.ts +68 -0
  285. package/project-skills/tdd-guard/test/integration/test-context.test.ts +66 -0
  286. package/project-skills/tdd-guard/test/integration/validator.core.test.ts +96 -0
  287. package/project-skills/tdd-guard/test/integration/validator.scenarios.test.ts +497 -0
  288. package/project-skills/tdd-guard/test/utils/assertions.ts +29 -0
  289. package/project-skills/tdd-guard/test/utils/factories/contextFactory.ts +30 -0
  290. package/project-skills/tdd-guard/test/utils/factories/editFactory.ts +82 -0
  291. package/project-skills/tdd-guard/test/utils/factories/helpers.test.ts +46 -0
  292. package/project-skills/tdd-guard/test/utils/factories/helpers.ts +46 -0
  293. package/project-skills/tdd-guard/test/utils/factories/lintFactory.ts +352 -0
  294. package/project-skills/tdd-guard/test/utils/factories/modelClientProviderFactory.ts +21 -0
  295. package/project-skills/tdd-guard/test/utils/factories/multiEditFactory.ts +79 -0
  296. package/project-skills/tdd-guard/test/utils/factories/operations.ts +57 -0
  297. package/project-skills/tdd-guard/test/utils/factories/reporterFactory.ts +55 -0
  298. package/project-skills/tdd-guard/test/utils/factories/scenarios/index.ts +22 -0
  299. package/project-skills/tdd-guard/test/utils/factories/scenarios/languages/python.ts +745 -0
  300. package/project-skills/tdd-guard/test/utils/factories/scenarios/languages/typescript.ts +767 -0
  301. package/project-skills/tdd-guard/test/utils/factories/scenarios/types.ts +77 -0
  302. package/project-skills/tdd-guard/test/utils/factories/scenarios/utils.ts +15 -0
  303. package/project-skills/tdd-guard/test/utils/factories/sessionStartFactory.ts +36 -0
  304. package/project-skills/tdd-guard/test/utils/factories/testDefaults.ts +90 -0
  305. package/project-skills/tdd-guard/test/utils/factories/testResultsFactory.ts +234 -0
  306. package/project-skills/tdd-guard/test/utils/factories/todoFactory.ts +99 -0
  307. package/project-skills/tdd-guard/test/utils/factories/userPromptSubmitFactory.ts +39 -0
  308. package/project-skills/tdd-guard/test/utils/factories/writeFactory.ts +70 -0
  309. package/project-skills/tdd-guard/test/utils/index.ts +131 -0
  310. package/project-skills/tdd-guard/tsconfig.build.json +16 -0
  311. package/project-skills/tdd-guard/tsconfig.eslint.json +17 -0
  312. package/project-skills/tdd-guard/tsconfig.json +32 -0
  313. package/project-skills/tdd-guard/tsconfig.node.json +10 -0
  314. package/project-skills/tdd-guard/vitest.config.ts +85 -0
  315. package/project-skills/ts-quality-gate/.claude/hooks/hook-config.json +66 -0
  316. package/project-skills/ts-quality-gate/.claude/hooks/quality-check.cjs +1251 -0
  317. package/project-skills/ts-quality-gate/.claude/settings.json +16 -0
  318. package/project-skills/ts-quality-gate/.claude/skills/using-ts-quality-gate/SKILL.md +81 -0
  319. package/project-skills/ts-quality-gate/README.md +115 -0
  320. package/skills/README.txt +31 -0
  321. package/skills/clean-code/SKILL.md +201 -0
  322. package/skills/delegating/SKILL.md +196 -0
  323. package/skills/delegating/config.yaml +210 -0
  324. package/skills/delegating/references/orchestration-protocols.md +41 -0
  325. package/skills/docker-expert/SKILL.md +409 -0
  326. package/skills/documenting/CHANGELOG.md +23 -0
  327. package/skills/documenting/README.md +148 -0
  328. package/skills/documenting/SKILL.md +113 -0
  329. package/skills/documenting/examples/example_pattern.md +70 -0
  330. package/skills/documenting/examples/example_reference.md +70 -0
  331. package/skills/documenting/examples/example_ssot_analytics.md +64 -0
  332. package/skills/documenting/examples/example_workflow.md +141 -0
  333. package/skills/documenting/references/changelog-format.md +97 -0
  334. package/skills/documenting/references/metadata-schema.md +136 -0
  335. package/skills/documenting/references/taxonomy.md +81 -0
  336. package/skills/documenting/references/versioning-rules.md +78 -0
  337. package/skills/documenting/scripts/__pycache__/drift_detector.cpython-314.pyc +0 -0
  338. package/skills/documenting/scripts/__pycache__/orchestrator.cpython-314.pyc +0 -0
  339. package/skills/documenting/scripts/__pycache__/validate_metadata.cpython-314.pyc +0 -0
  340. package/skills/documenting/scripts/bump_version.sh +60 -0
  341. package/skills/documenting/scripts/changelog/__init__.py +0 -0
  342. package/skills/documenting/scripts/changelog/__pycache__/__init__.cpython-314.pyc +0 -0
  343. package/skills/documenting/scripts/changelog/__pycache__/add_entry.cpython-314.pyc +0 -0
  344. package/skills/documenting/scripts/changelog/__pycache__/bump_release.cpython-314.pyc +0 -0
  345. package/skills/documenting/scripts/changelog/__pycache__/validate_changelog.cpython-314.pyc +0 -0
  346. package/skills/documenting/scripts/changelog/add_entry.py +216 -0
  347. package/skills/documenting/scripts/changelog/bump_release.py +117 -0
  348. package/skills/documenting/scripts/changelog/init_changelog.py +54 -0
  349. package/skills/documenting/scripts/changelog/validate_changelog.py +128 -0
  350. package/skills/documenting/scripts/drift_detector.py +266 -0
  351. package/skills/documenting/scripts/generate_template.py +311 -0
  352. package/skills/documenting/scripts/list_by_category.sh +84 -0
  353. package/skills/documenting/scripts/orchestrator.py +255 -0
  354. package/skills/documenting/scripts/validate_metadata.py +242 -0
  355. package/skills/documenting/templates/CHANGELOG.md.template +13 -0
  356. package/skills/documenting/tests/__pycache__/test_changelog.cpython-314-pytest-9.0.2.pyc +0 -0
  357. package/skills/documenting/tests/__pycache__/test_drift_detector.cpython-314-pytest-9.0.2.pyc +0 -0
  358. package/skills/documenting/tests/__pycache__/test_orchestrator.cpython-314-pytest-9.0.2.pyc +0 -0
  359. package/skills/documenting/tests/__pycache__/test_validate_metadata.cpython-314-pytest-9.0.2.pyc +0 -0
  360. package/skills/documenting/tests/integration_test.sh +70 -0
  361. package/skills/documenting/tests/test_changelog.py +201 -0
  362. package/skills/documenting/tests/test_drift_detector.py +80 -0
  363. package/skills/documenting/tests/test_orchestrator.py +52 -0
  364. package/skills/documenting/tests/test_validate_metadata.py +64 -0
  365. package/skills/find-skills/SKILL.md +133 -0
  366. package/skills/gitnexus-debugging/SKILL.md +85 -0
  367. package/skills/gitnexus-exploring/SKILL.md +75 -0
  368. package/skills/gitnexus-impact-analysis/SKILL.md +94 -0
  369. package/skills/gitnexus-refactoring/SKILL.md +113 -0
  370. package/skills/hook-development/SKILL.md +797 -0
  371. package/skills/hook-development/examples/load-context.sh +55 -0
  372. package/skills/hook-development/examples/quality-check.js +1168 -0
  373. package/skills/hook-development/examples/validate-bash.sh +43 -0
  374. package/skills/hook-development/examples/validate-write.sh +38 -0
  375. package/skills/hook-development/references/advanced.md +527 -0
  376. package/skills/hook-development/references/migration.md +369 -0
  377. package/skills/hook-development/references/patterns.md +412 -0
  378. package/skills/hook-development/scripts/README.md +164 -0
  379. package/skills/hook-development/scripts/hook-linter.sh +153 -0
  380. package/skills/hook-development/scripts/test-hook.sh +252 -0
  381. package/skills/hook-development/scripts/validate-hook-schema.sh +159 -0
  382. package/skills/obsidian-cli/SKILL.md +106 -0
  383. package/skills/orchestrating-agents/SKILL.md +135 -0
  384. package/skills/orchestrating-agents/config.yaml +45 -0
  385. package/skills/orchestrating-agents/references/agent-context-integration.md +37 -0
  386. package/skills/orchestrating-agents/references/examples.md +45 -0
  387. package/skills/orchestrating-agents/references/handover-protocol.md +31 -0
  388. package/skills/orchestrating-agents/references/workflows.md +42 -0
  389. package/skills/orchestrating-agents/scripts/detect_neighbors.py +23 -0
  390. package/skills/prompt-improving/README.md +162 -0
  391. package/skills/prompt-improving/SKILL.md +74 -0
  392. package/skills/prompt-improving/references/analysis_commands.md +24 -0
  393. package/skills/prompt-improving/references/chain_of_thought.md +24 -0
  394. package/skills/prompt-improving/references/mcp_definitions.md +20 -0
  395. package/skills/prompt-improving/references/multishot.md +23 -0
  396. package/skills/prompt-improving/references/xml_core.md +60 -0
  397. package/skills/python-testing/SKILL.md +815 -0
  398. package/skills/senior-backend/SKILL.md +209 -0
  399. package/skills/senior-backend/references/api_design_patterns.md +103 -0
  400. package/skills/senior-backend/references/backend_security_practices.md +103 -0
  401. package/skills/senior-backend/references/database_optimization_guide.md +103 -0
  402. package/skills/senior-backend/scripts/api_load_tester.py +114 -0
  403. package/skills/senior-backend/scripts/api_scaffolder.py +114 -0
  404. package/skills/senior-backend/scripts/database_migration_tool.py +114 -0
  405. package/skills/senior-data-scientist/SKILL.md +226 -0
  406. package/skills/senior-data-scientist/references/experiment_design_frameworks.md +80 -0
  407. package/skills/senior-data-scientist/references/feature_engineering_patterns.md +80 -0
  408. package/skills/senior-data-scientist/references/statistical_methods_advanced.md +80 -0
  409. package/skills/senior-data-scientist/scripts/experiment_designer.py +100 -0
  410. package/skills/senior-data-scientist/scripts/feature_engineering_pipeline.py +100 -0
  411. package/skills/senior-data-scientist/scripts/model_evaluation_suite.py +100 -0
  412. package/skills/senior-devops/SKILL.md +209 -0
  413. package/skills/senior-devops/references/cicd_pipeline_guide.md +103 -0
  414. package/skills/senior-devops/references/deployment_strategies.md +103 -0
  415. package/skills/senior-devops/references/infrastructure_as_code.md +103 -0
  416. package/skills/senior-devops/scripts/deployment_manager.py +114 -0
  417. package/skills/senior-devops/scripts/pipeline_generator.py +114 -0
  418. package/skills/senior-devops/scripts/terraform_scaffolder.py +114 -0
  419. package/skills/senior-security/SKILL.md +209 -0
  420. package/skills/senior-security/references/cryptography_implementation.md +103 -0
  421. package/skills/senior-security/references/penetration_testing_guide.md +103 -0
  422. package/skills/senior-security/references/security_architecture_patterns.md +103 -0
  423. package/skills/senior-security/scripts/pentest_automator.py +114 -0
  424. package/skills/senior-security/scripts/security_auditor.py +114 -0
  425. package/skills/senior-security/scripts/threat_modeler.py +114 -0
  426. package/skills/skill-creator/LICENSE.txt +202 -0
  427. package/skills/skill-creator/SKILL.md +479 -0
  428. package/skills/skill-creator/agents/analyzer.md +274 -0
  429. package/skills/skill-creator/agents/comparator.md +202 -0
  430. package/skills/skill-creator/agents/grader.md +223 -0
  431. package/skills/skill-creator/assets/eval_review.html +146 -0
  432. package/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  433. package/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  434. package/skills/skill-creator/references/schemas.md +430 -0
  435. package/skills/skill-creator/scripts/__init__.py +0 -0
  436. package/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  437. package/skills/skill-creator/scripts/generate_report.py +326 -0
  438. package/skills/skill-creator/scripts/improve_description.py +248 -0
  439. package/skills/skill-creator/scripts/package_skill.py +136 -0
  440. package/skills/skill-creator/scripts/quick_validate.py +103 -0
  441. package/skills/skill-creator/scripts/run_eval.py +310 -0
  442. package/skills/skill-creator/scripts/run_loop.py +332 -0
  443. package/skills/skill-creator/scripts/utils.py +47 -0
  444. package/skills/using-TDD/SKILL.md +410 -0
  445. package/skills/using-serena-lsp/README.md +8 -0
  446. package/skills/using-serena-lsp/REFERENCE.md +194 -0
  447. package/skills/using-serena-lsp/SKILL.md +82 -0
@@ -0,0 +1,30 @@
1
+ import { Context } from '../../../src/contracts/types/Context'
2
+ import { TEST_DEFAULTS } from './testDefaults'
3
+
4
+ /**
5
+ * Creates a test Context object with sensible defaults
6
+ */
7
+ export function context(overrides?: Partial<Context>): Context {
8
+ return {
9
+ modifications: TEST_DEFAULTS.modifications,
10
+ todo: JSON.stringify([TEST_DEFAULTS.todo]),
11
+ test: TEST_DEFAULTS.test,
12
+ ...overrides,
13
+ }
14
+ }
15
+
16
+ /**
17
+ * Creates a test Context object without specific fields
18
+ */
19
+ export function contextWithout<K extends keyof Context>(
20
+ ...omitFields: K[]
21
+ ): Omit<Context, K> {
22
+ const fullContext = context()
23
+ const result = { ...fullContext }
24
+
25
+ for (const field of omitFields) {
26
+ delete result[field]
27
+ }
28
+
29
+ return result as Omit<Context, K>
30
+ }
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Factory functions for creating Edit and EditOperation test data
3
+ */
4
+
5
+ import type {
6
+ Edit,
7
+ EditOperation,
8
+ } from '../../../src/contracts/schemas/toolSchemas'
9
+ import { hookDataDefaults, omit } from './helpers'
10
+ import { TEST_DEFAULTS } from './testDefaults'
11
+
12
+ /**
13
+ * Creates a single edit object
14
+ * @param params - Optional parameters for the edit
15
+ */
16
+ export const edit = (params?: Partial<Edit>): Edit => {
17
+ const defaults = TEST_DEFAULTS.edit
18
+ const base = params ?? {}
19
+
20
+ const result: Edit = {
21
+ file_path: base.file_path ?? defaults.file_path,
22
+ old_string: base.old_string ?? defaults.old_string,
23
+ new_string: base.new_string ?? defaults.new_string,
24
+ }
25
+
26
+ if (base.replace_all !== undefined) {
27
+ result.replace_all = base.replace_all
28
+ }
29
+
30
+ return result
31
+ }
32
+
33
+ /**
34
+ * Creates an edit object with specified properties omitted
35
+ * @param keys - Array of property keys to omit
36
+ * @param params - Optional parameters for the edit
37
+ */
38
+ export const editWithout = <K extends keyof Edit>(
39
+ keys: K[],
40
+ params?: Partial<Edit>
41
+ ): Omit<Edit, K> => {
42
+ const fullEdit = edit(params)
43
+ return omit(fullEdit, keys)
44
+ }
45
+
46
+ /**
47
+ * Creates a single edit operation object
48
+ * @param params - Optional parameters for the edit operation
49
+ */
50
+ export const editOperation = (
51
+ params?: Partial<EditOperation>
52
+ ): EditOperation => ({
53
+ ...hookDataDefaults(),
54
+ tool_name: 'Edit',
55
+ tool_input: params?.tool_input ?? edit(),
56
+ })
57
+
58
+ /**
59
+ * Creates an edit operation object with specified properties omitted
60
+ * @param keys - Array of property keys to omit
61
+ * @param params - Optional parameters for the edit operation
62
+ */
63
+ export const editOperationWithout = <K extends keyof EditOperation>(
64
+ keys: K[],
65
+ params?: Partial<EditOperation>
66
+ ): Omit<EditOperation, K> => {
67
+ const fullEditOperation = editOperation(params)
68
+ return omit(fullEditOperation, keys)
69
+ }
70
+
71
+ /**
72
+ * Creates an invalid edit operation object for testing
73
+ * @param params - Parameters including invalid values
74
+ */
75
+ export const invalidEditOperation = (params: {
76
+ tool_name?: string
77
+ tool_input?: unknown
78
+ }): Record<string, unknown> => ({
79
+ ...hookDataDefaults(),
80
+ tool_name: params.tool_name ?? 'Edit',
81
+ tool_input: params.tool_input ?? edit(),
82
+ })
@@ -0,0 +1,46 @@
1
+ import { describe, test, expect } from 'vitest'
2
+ import { pick, omit } from './helpers'
3
+
4
+ describe('Helper functions', () => {
5
+ describe('pick', () => {
6
+ const testObject = {
7
+ a: 1,
8
+ b: 'two',
9
+ c: true,
10
+ d: { nested: 'value' },
11
+ }
12
+
13
+ test('picks single property', () => {
14
+ const result = pick(testObject, ['a'])
15
+
16
+ expect(result).toEqual({ a: 1 })
17
+ })
18
+
19
+ test('picks multiple properties', () => {
20
+ const result = pick(testObject, ['a', 'c'])
21
+
22
+ expect(result).toEqual({ a: 1, c: true })
23
+ })
24
+ })
25
+
26
+ describe('omit', () => {
27
+ const testObject = {
28
+ a: 1,
29
+ b: 'two',
30
+ c: true,
31
+ d: { nested: 'value' },
32
+ }
33
+
34
+ test('omits single property', () => {
35
+ const result = omit(testObject, ['a'])
36
+
37
+ expect(result).toEqual({ b: 'two', c: true, d: { nested: 'value' } })
38
+ })
39
+
40
+ test('omits multiple properties', () => {
41
+ const result = omit(testObject, ['a', 'c'])
42
+
43
+ expect(result).toEqual({ b: 'two', d: { nested: 'value' } })
44
+ })
45
+ })
46
+ })
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Helper functions for object manipulation in test factories
3
+ */
4
+
5
+ import { TEST_DEFAULTS } from './testDefaults'
6
+
7
+ /**
8
+ * Default hook data fields for all operations
9
+ */
10
+ export const hookDataDefaults = (): {
11
+ session_id: string
12
+ transcript_path: string
13
+ hook_event_name: string
14
+ } => ({
15
+ session_id: TEST_DEFAULTS.hookData.session_id,
16
+ transcript_path: TEST_DEFAULTS.hookData.transcript_path,
17
+ hook_event_name: TEST_DEFAULTS.hookData.hook_event_name,
18
+ })
19
+
20
+ /**
21
+ * Creates a new object with only the specified properties
22
+ * @param obj - The source object
23
+ * @param keys - Array of property keys to include
24
+ * @returns A new object with only the specified properties
25
+ */
26
+ export const pick = <T, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> => {
27
+ const result = {} as Pick<T, K>
28
+ keys.forEach((key) => {
29
+ result[key] = obj[key]
30
+ })
31
+ return result
32
+ }
33
+
34
+ /**
35
+ * Creates a new object with specified properties omitted
36
+ * @param obj - The source object
37
+ * @param keys - Array of property keys to omit
38
+ * @returns A new object without the specified properties
39
+ */
40
+ export const omit = <T, K extends keyof T>(obj: T, keys: K[]): Omit<T, K> => {
41
+ const result = { ...obj }
42
+ keys.forEach((key) => {
43
+ delete result[key]
44
+ })
45
+ return result as Omit<T, K>
46
+ }
@@ -0,0 +1,352 @@
1
+ /**
2
+ * Factory functions for creating Lint test data
3
+ */
4
+
5
+ import type {
6
+ LintIssue,
7
+ LintData,
8
+ LintResult,
9
+ ESLintMessage,
10
+ ESLintResult,
11
+ GolangciLintPosition,
12
+ GolangciLintIssue,
13
+ GolangciLintResult,
14
+ } from '../../../src/contracts/schemas/lintSchemas'
15
+ import { omit } from './helpers'
16
+
17
+ /**
18
+ * Creates a single lint issue object
19
+ * @param params - Optional parameters for the lint issue
20
+ */
21
+ export const lintIssue = (params?: Partial<LintIssue>): LintIssue => {
22
+ const defaults: LintIssue = {
23
+ file: '/src/example.ts',
24
+ line: 15,
25
+ column: 5,
26
+ severity: 'error',
27
+ message: 'Function has too high complexity',
28
+ rule: 'complexity',
29
+ }
30
+
31
+ return {
32
+ ...defaults,
33
+ ...params,
34
+ }
35
+ }
36
+
37
+ /**
38
+ * Creates a lint issue object with specified properties omitted
39
+ * @param keys - Array of property keys to omit
40
+ * @param params - Optional parameters for the lint issue
41
+ */
42
+ export const lintIssueWithout = <K extends keyof LintIssue>(
43
+ keys: K[],
44
+ params?: Partial<LintIssue>
45
+ ): Omit<LintIssue, K> => {
46
+ const fullLintIssue = lintIssue(params)
47
+ return omit(fullLintIssue, keys)
48
+ }
49
+
50
+ /**
51
+ * Creates a lint result object
52
+ * @param params - Optional parameters for the lint result
53
+ */
54
+ export const lintResult = (params?: Partial<LintResult>): LintResult => {
55
+ const defaults: LintResult = {
56
+ timestamp: '2024-01-01T00:00:00Z',
57
+ files: ['/src/example.ts'],
58
+ issues: [lintIssue()],
59
+ errorCount: 1,
60
+ warningCount: 0,
61
+ }
62
+
63
+ return {
64
+ ...defaults,
65
+ ...params,
66
+ }
67
+ }
68
+
69
+ /**
70
+ * Creates a lint result object with specified properties omitted
71
+ * @param keys - Array of property keys to omit
72
+ * @param params - Optional parameters for the lint result
73
+ */
74
+ export const lintResultWithout = <K extends keyof LintResult>(
75
+ keys: K[],
76
+ params?: Partial<LintResult>
77
+ ): Omit<LintResult, K> => {
78
+ const fullLintResult = lintResult(params)
79
+ return omit(fullLintResult, keys)
80
+ }
81
+
82
+ /**
83
+ * Creates a lint data object
84
+ * @param params - Optional parameters for the lint data
85
+ */
86
+ export const lintData = (params?: Partial<LintData>): LintData => {
87
+ const defaults: LintData = {
88
+ timestamp: '2024-01-01T00:00:00Z',
89
+ files: ['/src/example.ts'],
90
+ issues: [lintIssue()],
91
+ errorCount: 1,
92
+ warningCount: 0,
93
+ hasNotifiedAboutLintIssues: false,
94
+ }
95
+
96
+ return {
97
+ ...defaults,
98
+ ...params,
99
+ }
100
+ }
101
+
102
+ /**
103
+ * Creates a lint data object with specified properties omitted
104
+ * @param keys - Array of property keys to omit
105
+ * @param params - Optional parameters for the lint data
106
+ */
107
+ export const lintDataWithout = <K extends keyof LintData>(
108
+ keys: K[],
109
+ params?: Partial<LintData>
110
+ ): Omit<LintData, K> => {
111
+ const fullLintData = lintData(params)
112
+ return omit(fullLintData, keys)
113
+ }
114
+
115
+ /**
116
+ * Creates an ESLint message object
117
+ * @param params - Optional parameters for the ESLint message
118
+ */
119
+ export const eslintMessage = (
120
+ params?: Partial<ESLintMessage>
121
+ ): ESLintMessage => {
122
+ const defaults: ESLintMessage = {
123
+ line: 10,
124
+ column: 5,
125
+ severity: 2,
126
+ message: 'Unexpected var, use let or const instead',
127
+ ruleId: 'no-var',
128
+ }
129
+
130
+ return {
131
+ ...defaults,
132
+ ...params,
133
+ }
134
+ }
135
+
136
+ /**
137
+ * Creates an ESLint message object with specified properties omitted
138
+ * @param keys - Array of property keys to omit
139
+ * @param params - Optional parameters for the ESLint message
140
+ */
141
+ export const eslintMessageWithout = <K extends keyof ESLintMessage>(
142
+ keys: K[],
143
+ params?: Partial<ESLintMessage>
144
+ ): Omit<ESLintMessage, K> => {
145
+ const fullMessage = eslintMessage(params)
146
+ return omit(fullMessage, keys)
147
+ }
148
+
149
+ /**
150
+ * Creates an ESLint result object
151
+ * @param params - Optional parameters for the ESLint result
152
+ */
153
+ export const eslintResult = (params?: Partial<ESLintResult>): ESLintResult => {
154
+ const defaults: ESLintResult = {
155
+ filePath: '/src/example.ts',
156
+ messages: [eslintMessage()],
157
+ }
158
+
159
+ return {
160
+ ...defaults,
161
+ ...params,
162
+ }
163
+ }
164
+
165
+ /**
166
+ * Creates an ESLint result object with specified properties omitted
167
+ * @param keys - Array of property keys to omit
168
+ * @param params - Optional parameters for the ESLint result
169
+ */
170
+ export const eslintResultWithout = <K extends keyof ESLintResult>(
171
+ keys: K[],
172
+ params?: Partial<ESLintResult>
173
+ ): Omit<ESLintResult, K> => {
174
+ const fullResult = eslintResult(params)
175
+ return omit(fullResult, keys)
176
+ }
177
+
178
+ /**
179
+ * Creates a lint result object with no errors
180
+ * @param params - Optional parameters to override defaults
181
+ */
182
+ export const lintResultWithoutErrors = (
183
+ params?: Partial<LintResult>
184
+ ): LintResult => {
185
+ return {
186
+ timestamp: new Date().toISOString(),
187
+ files: params?.files ?? [],
188
+ issues: [],
189
+ errorCount: 0,
190
+ warningCount: 0,
191
+ ...params,
192
+ }
193
+ }
194
+
195
+ /**
196
+ * Creates a lint result object with errors
197
+ * @param params - Optional parameters to override defaults
198
+ */
199
+ export const lintResultWithError = (
200
+ params?: Partial<LintResult>
201
+ ): LintResult => {
202
+ const defaultIssue = lintIssue()
203
+ return {
204
+ timestamp: new Date().toISOString(),
205
+ files: params?.files ?? ['/src/example.ts'],
206
+ issues: params?.issues ?? [defaultIssue],
207
+ errorCount: params?.errorCount ?? 1,
208
+ warningCount: params?.warningCount ?? 0,
209
+ ...params,
210
+ }
211
+ }
212
+
213
+ /**
214
+ * Creates a lint data object with notification flag set (for testing notification state)
215
+ * @param params - Optional parameters to override defaults
216
+ */
217
+ export const lintDataWithNotificationFlag = (
218
+ params?: Partial<LintData>
219
+ ): LintData => {
220
+ return {
221
+ timestamp: new Date().toISOString(),
222
+ files: [],
223
+ issues: [],
224
+ errorCount: 0,
225
+ warningCount: 0,
226
+ hasNotifiedAboutLintIssues: true,
227
+ ...params,
228
+ }
229
+ }
230
+
231
+ /**
232
+ * Creates a lint data object with errors
233
+ * @param params - Optional parameters to override defaults
234
+ */
235
+ export const lintDataWithError = (params?: Partial<LintData>): LintData => {
236
+ const baseLintResult = lintResultWithError()
237
+ return {
238
+ ...baseLintResult,
239
+ hasNotifiedAboutLintIssues: false,
240
+ ...params,
241
+ }
242
+ }
243
+
244
+ /**
245
+ * Creates a lint data object without errors
246
+ * @param params - Optional parameters to override defaults
247
+ */
248
+ export const lintDataWithoutErrors = (params?: Partial<LintData>): LintData => {
249
+ const baseLintResult = lintResultWithoutErrors()
250
+ return {
251
+ ...baseLintResult,
252
+ hasNotifiedAboutLintIssues: false,
253
+ ...params,
254
+ }
255
+ }
256
+
257
+ /**
258
+ * Creates a GolangciLint position object
259
+ * @param params - Optional parameters for the position
260
+ */
261
+ export const golangciLintPosition = (
262
+ params?: Partial<GolangciLintPosition>
263
+ ): GolangciLintPosition => {
264
+ const defaults: GolangciLintPosition = {
265
+ Filename: '/path/to/file.go',
266
+ Line: 10,
267
+ Column: 5,
268
+ }
269
+
270
+ return {
271
+ ...defaults,
272
+ ...params,
273
+ }
274
+ }
275
+
276
+ /**
277
+ * Creates a GolangciLint position object with specified properties omitted
278
+ * @param keys - Array of property keys to omit
279
+ * @param params - Optional parameters for the position
280
+ */
281
+ export const golangciLintPositionWithout = <
282
+ K extends keyof GolangciLintPosition,
283
+ >(
284
+ keys: K[],
285
+ params?: Partial<GolangciLintPosition>
286
+ ): Omit<GolangciLintPosition, K> => {
287
+ const fullPosition = golangciLintPosition(params)
288
+ return omit(fullPosition, keys)
289
+ }
290
+
291
+ /**
292
+ * Creates a GolangciLint issue object
293
+ * @param params - Optional parameters for the issue
294
+ */
295
+ export const golangciLintIssue = (
296
+ params?: Partial<GolangciLintIssue>
297
+ ): GolangciLintIssue => {
298
+ const defaults: GolangciLintIssue = {
299
+ FromLinter: 'typecheck',
300
+ Text: 'undefined: variable',
301
+ Severity: 'error',
302
+ Pos: golangciLintPosition(),
303
+ }
304
+
305
+ return {
306
+ ...defaults,
307
+ ...params,
308
+ }
309
+ }
310
+
311
+ /**
312
+ * Creates a GolangciLint issue object with specified properties omitted
313
+ * @param keys - Array of property keys to omit
314
+ * @param params - Optional parameters for the issue
315
+ */
316
+ export const golangciLintIssueWithout = <K extends keyof GolangciLintIssue>(
317
+ keys: K[],
318
+ params?: Partial<GolangciLintIssue>
319
+ ): Omit<GolangciLintIssue, K> => {
320
+ const fullIssue = golangciLintIssue(params)
321
+ return omit(fullIssue, keys)
322
+ }
323
+
324
+ /**
325
+ * Creates a GolangciLint result object
326
+ * @param params - Optional parameters for the result
327
+ */
328
+ export const golangciLintResult = (
329
+ params?: Partial<GolangciLintResult>
330
+ ): GolangciLintResult => {
331
+ const defaults: GolangciLintResult = {
332
+ Issues: [golangciLintIssue()],
333
+ }
334
+
335
+ return {
336
+ ...defaults,
337
+ ...params,
338
+ }
339
+ }
340
+
341
+ /**
342
+ * Creates a GolangciLint result object with specified properties omitted
343
+ * @param keys - Array of property keys to omit
344
+ * @param params - Optional parameters for the result
345
+ */
346
+ export const golangciLintResultWithout = <K extends keyof GolangciLintResult>(
347
+ keys: K[],
348
+ params?: Partial<GolangciLintResult>
349
+ ): Omit<GolangciLintResult, K> => {
350
+ const fullResult = golangciLintResult(params)
351
+ return omit(fullResult, keys)
352
+ }
@@ -0,0 +1,21 @@
1
+ import { ModelClientProvider } from '../../../src/providers/ModelClientProvider'
2
+ import { IModelClient } from '../../../src/contracts/types/ModelClient'
3
+ import { Config } from '../../../src/config/Config'
4
+
5
+ export function modelClientProvider(): ModelClientProvider {
6
+ return new MockModelClientProvider()
7
+ }
8
+
9
+ class MockModelClientProvider extends ModelClientProvider {
10
+ getModelClient(config?: Config): IModelClient {
11
+ const actualConfig = config ?? new Config()
12
+
13
+ return {
14
+ ask: async () =>
15
+ JSON.stringify({
16
+ decision: undefined,
17
+ reason: `Using mock model client with modelType: ${actualConfig.modelType}`,
18
+ }),
19
+ }
20
+ }
21
+ }
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Factory functions for creating MultiEdit and MultiEditOperation test data
3
+ */
4
+
5
+ import type {
6
+ MultiEdit,
7
+ MultiEditOperation,
8
+ } from '../../../src/contracts/schemas/toolSchemas'
9
+ import { hookDataDefaults, omit } from './helpers'
10
+ import { TEST_DEFAULTS } from './testDefaults'
11
+
12
+ /**
13
+ * Creates a single multi-edit object
14
+ * @param params - Optional parameters for the multi-edit
15
+ */
16
+ export const multiEdit = (params?: Partial<MultiEdit>): MultiEdit => ({
17
+ file_path: params?.file_path ?? TEST_DEFAULTS.multiEdit.file_path,
18
+ edits: params?.edits ?? [
19
+ {
20
+ old_string: TEST_DEFAULTS.multiEdit.edits[0].old_string,
21
+ new_string: TEST_DEFAULTS.multiEdit.edits[0].new_string,
22
+ },
23
+ {
24
+ old_string: TEST_DEFAULTS.multiEdit.edits[1].old_string,
25
+ new_string: TEST_DEFAULTS.multiEdit.edits[1].new_string,
26
+ },
27
+ ],
28
+ })
29
+
30
+ /**
31
+ * Creates a multi-edit object with specified properties omitted
32
+ * @param keys - Array of property keys to omit
33
+ * @param params - Optional parameters for the multi-edit
34
+ */
35
+ export const multiEditWithout = <K extends keyof MultiEdit>(
36
+ keys: K[],
37
+ params?: Partial<MultiEdit>
38
+ ): Omit<MultiEdit, K> => {
39
+ const fullMultiEdit = multiEdit(params)
40
+ return omit(fullMultiEdit, keys)
41
+ }
42
+
43
+ /**
44
+ * Creates a single multi-edit operation object
45
+ * @param params - Optional parameters for the multi-edit operation
46
+ */
47
+ export const multiEditOperation = (
48
+ params?: Partial<MultiEditOperation>
49
+ ): MultiEditOperation => ({
50
+ ...hookDataDefaults(),
51
+ tool_name: 'MultiEdit',
52
+ tool_input: params?.tool_input ?? multiEdit(),
53
+ })
54
+
55
+ /**
56
+ * Creates a multi-edit operation object with specified properties omitted
57
+ * @param keys - Array of property keys to omit
58
+ * @param params - Optional parameters for the multi-edit operation
59
+ */
60
+ export const multiEditOperationWithout = <K extends keyof MultiEditOperation>(
61
+ keys: K[],
62
+ params?: Partial<MultiEditOperation>
63
+ ): Omit<MultiEditOperation, K> => {
64
+ const fullMultiEditOperation = multiEditOperation(params)
65
+ return omit(fullMultiEditOperation, keys)
66
+ }
67
+
68
+ /**
69
+ * Creates an invalid multi-edit operation object for testing
70
+ * @param params - Parameters including invalid values
71
+ */
72
+ export const invalidMultiEditOperation = (params: {
73
+ tool_name?: string
74
+ tool_input?: unknown
75
+ }): Record<string, unknown> => ({
76
+ ...hookDataDefaults(),
77
+ tool_name: params.tool_name ?? 'MultiEdit',
78
+ tool_input: params.tool_input ?? multiEdit(),
79
+ })