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,311 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Generate SSOT memory template with boilerplate metadata.
4
+
5
+ Creates a new memory file with proper frontmatter structure based on category type.
6
+ """
7
+
8
+ import sys
9
+ from datetime import datetime, timezone
10
+ from pathlib import Path
11
+
12
+
13
+ TEMPLATES = {
14
+ "ssot": """---
15
+ title: {title}
16
+ version: 0.1.0
17
+ updated: {timestamp}
18
+ scope: {scope}
19
+ category: {category}
20
+ subcategory: {subcategory}
21
+ domain: [{domain}]
22
+ applicability: {applicability}
23
+ tracks: []
24
+ changelog:
25
+ - 0.1.0 ({date}): Initial creation.
26
+ ---
27
+
28
+ <!-- INDEX: auto-generated by validate_metadata.py — do not edit manually -->
29
+ | Section | Summary |
30
+ |---|---|
31
+ <!-- END INDEX -->
32
+
33
+ ## Purpose
34
+ {purpose}
35
+
36
+ ## Overview
37
+ {overview}
38
+
39
+ ## Key Components
40
+
41
+ ### Component 1
42
+ Description...
43
+
44
+ ### Component 2
45
+ Description...
46
+
47
+ ## Current State
48
+
49
+ ### What Works
50
+ - Item 1
51
+ - Item 2
52
+
53
+ ### Known Limitations
54
+ - Limitation 1
55
+ - Limitation 2
56
+
57
+ ## Related SSOTs
58
+ - `related_ssot_1.md` - Description
59
+ - `related_ssot_2.md` - Description
60
+
61
+ ## Next Steps
62
+ - [ ] Task 1
63
+ - [ ] Task 2
64
+
65
+ ## References
66
+ - Internal doc references
67
+ - External resources
68
+ """,
69
+
70
+ "pattern": """---
71
+ title: {title}
72
+ version: 0.1.0
73
+ updated: {timestamp}
74
+ scope: {scope}
75
+ category: pattern
76
+ subcategory: {subcategory}
77
+ domain: [{domain}]
78
+ applicability: {applicability}
79
+ tracks: []
80
+ changelog:
81
+ - 0.1.0 ({date}): Initial creation.
82
+ ---
83
+
84
+ <!-- INDEX: auto-generated by validate_metadata.py — do not edit manually -->
85
+ | Section | Summary |
86
+ |---|---|
87
+ <!-- END INDEX -->
88
+
89
+ ## Purpose
90
+ {purpose}
91
+
92
+ ## Pattern Description
93
+ {description}
94
+
95
+ ## When to Apply
96
+ - Scenario 1
97
+ - Scenario 2
98
+
99
+ ## Implementation
100
+
101
+ ### Approach
102
+ Steps to implement this pattern...
103
+
104
+ ### Example
105
+ ```python
106
+ # Code example
107
+ ```
108
+
109
+ ## Trade-offs
110
+
111
+ ### Benefits
112
+ - Benefit 1
113
+ - Benefit 2
114
+
115
+ ### Costs
116
+ - Cost 1
117
+ - Cost 2
118
+
119
+ ## Related Patterns
120
+ - `related_pattern_1.md`
121
+ - `related_pattern_2.md`
122
+ """,
123
+
124
+ "reference": """---
125
+ title: {title}
126
+ scope: {scope}
127
+ category: reference
128
+ subcategory: {subcategory}
129
+ domain: [{domain}]
130
+ tracks: []
131
+ ---
132
+
133
+ <!-- INDEX: auto-generated by validate_metadata.py — do not edit manually -->
134
+ | Section | Summary |
135
+ |---|---|
136
+ <!-- END INDEX -->
137
+
138
+ ## Purpose
139
+ {purpose}
140
+
141
+ ## Quick Reference
142
+
143
+ ### Category 1
144
+ | Item | Description | Example |
145
+ |------|-------------|---------|
146
+ | Item1 | Desc | `example` |
147
+
148
+ ### Category 2
149
+ Details...
150
+
151
+ ## Detailed Documentation
152
+
153
+ ### Section 1
154
+ Content...
155
+
156
+ ### Section 2
157
+ Content...
158
+
159
+ ## Examples
160
+
161
+ ### Example 1: {example_name}
162
+ ```
163
+ Code or configuration example
164
+ ```
165
+
166
+ ### Example 2: {example_name}
167
+ ```
168
+ Code or configuration example
169
+ ```
170
+
171
+ ## Additional Resources
172
+ - Link 1
173
+ - Link 2
174
+ """,
175
+
176
+ "plan": """---
177
+ title: {title}
178
+ version: 0.1.0
179
+ updated: {timestamp}
180
+ scope: {scope}
181
+ category: plan
182
+ subcategory: {subcategory}
183
+ status: draft
184
+ tracks: []
185
+ changelog:
186
+ - 0.1.0 ({date}): Initial plan creation.
187
+ tracks: []
188
+ ---
189
+
190
+ <!-- INDEX: auto-generated by validate_metadata.py — do not edit manually -->
191
+ | Section | Summary |
192
+ |---|---|
193
+ <!-- END INDEX -->
194
+
195
+ ## Objective
196
+ {objective}
197
+
198
+ ## Background
199
+ {background}
200
+
201
+ ## Proposed Approach
202
+
203
+ ### Phase 1: {phase_name}
204
+ - Task 1
205
+ - Task 2
206
+
207
+ ### Phase 2: {phase_name}
208
+ - Task 1
209
+ - Task 2
210
+
211
+ ## Success Criteria
212
+ - [ ] Criterion 1
213
+ - [ ] Criterion 2
214
+
215
+ ## Risks & Mitigations
216
+ | Risk | Impact | Mitigation |
217
+ |------|--------|------------|
218
+ | Risk 1 | High | Mitigation strategy |
219
+
220
+ ## Timeline
221
+ - Phase 1: Dates
222
+ - Phase 2: Dates
223
+
224
+ ## Related Docs
225
+ - `related_ssot.md`
226
+ - `related_pattern.md`
227
+ """,
228
+ }
229
+
230
+
231
+ def generate_timestamp():
232
+ """Generate ISO8601 timestamp with timezone."""
233
+ return datetime.now(timezone.utc).isoformat()
234
+
235
+
236
+ def generate_date():
237
+ """Generate YYYY-MM-DD date."""
238
+ return datetime.now().strftime("%Y-%m-%d")
239
+
240
+
241
+ def generate_template(category, **kwargs):
242
+ """Generate memory template from category."""
243
+ if category not in TEMPLATES:
244
+ print(f"ERROR: Invalid category: {category}")
245
+ print(f"Valid categories: {', '.join(TEMPLATES.keys())}")
246
+ sys.exit(1)
247
+
248
+ # Merge defaults with user-provided values
249
+ params = {
250
+ "title": "New Memory",
251
+ "timestamp": generate_timestamp(),
252
+ "date": generate_date(),
253
+ "scope": "to-be-defined",
254
+ "category": category,
255
+ "subcategory": "general",
256
+ "domain": "domain1, domain2",
257
+ "applicability": "specific area or 'all'",
258
+ "purpose": "Brief statement of purpose...",
259
+ "overview": "High-level overview...",
260
+ "description": "Detailed description...",
261
+ "objective": "What this plan aims to achieve...",
262
+ "background": "Context and motivation...",
263
+ "phase_name": "Phase Name",
264
+ "example_name": "Example Name",
265
+ }
266
+ params.update(kwargs)
267
+
268
+ return TEMPLATES[category].format(**params)
269
+
270
+
271
+ def main():
272
+ if len(sys.argv) < 3:
273
+ print("Usage: generate_template.py <category> <output_filename> [key=value ...]")
274
+ print("")
275
+ print("Categories: ssot, pattern, reference, plan")
276
+ print("")
277
+ print("Examples:")
278
+ print(" generate_template.py ssot analytics_new_ssot.md \\")
279
+ print(" title='New Analytics SSOT' domain='analytics' subcategory='metrics'")
280
+ print("")
281
+ print(" generate_template.py pattern caching_strategy_pattern.md \\")
282
+ print(" title='Caching Strategy Pattern' domain='performance'")
283
+ sys.exit(1)
284
+
285
+ category = sys.argv[1]
286
+ output_file = sys.argv[2]
287
+
288
+ # Parse optional key=value parameters
289
+ params = {}
290
+ for arg in sys.argv[3:]:
291
+ if '=' in arg:
292
+ key, value = arg.split('=', 1)
293
+ params[key] = value.strip("'\"")
294
+
295
+ # Generate template
296
+ content = generate_template(category, **params)
297
+
298
+ # Write to file
299
+ output_path = Path(output_file)
300
+ if output_path.exists():
301
+ print(f"ERROR: File already exists: {output_file}")
302
+ print("Use a different filename or remove the existing file first.")
303
+ sys.exit(1)
304
+
305
+ output_path.write_text(content, encoding='utf-8')
306
+ print(f"✅ Created {category} memory: {output_file}")
307
+ print(f"📝 Edit the file to fill in placeholders and add content.")
308
+
309
+
310
+ if __name__ == "__main__":
311
+ main()
@@ -0,0 +1,84 @@
1
+ #!/bin/bash
2
+ # List Serena memories filtered by category suffix
3
+ #
4
+ # Usage: list_by_category.sh [category]
5
+ # category: ssot | pattern | plan | reference | archive | troubleshoot | all
6
+ #
7
+ # Examples:
8
+ # list_by_category.sh ssot -> List all SSOT memories
9
+ # list_by_category.sh archive -> List all archived memories
10
+ # list_by_category.sh all -> List all memories grouped by category
11
+
12
+ set -e
13
+
14
+ CATEGORY="${1:-all}"
15
+ MEMORIES_DIR="${SERENA_MEMORIES_DIR:-.serena/memories}"
16
+
17
+ if [ ! -d "$MEMORIES_DIR" ]; then
18
+ echo "ERROR: Memories directory not found: $MEMORIES_DIR"
19
+ echo "Set SERENA_MEMORIES_DIR environment variable or run from project root"
20
+ exit 1
21
+ fi
22
+
23
+ # Function to list files with a given suffix
24
+ list_suffix() {
25
+ local suffix=$1
26
+ local label=$2
27
+ local files
28
+
29
+ files=$(find "$MEMORIES_DIR" -maxdepth 1 -name "*_${suffix}.md" -type f 2>/dev/null | sort)
30
+
31
+ if [ -n "$files" ]; then
32
+ echo ""
33
+ echo "=== ${label} ==="
34
+ echo "$files" | while read -r file; do
35
+ basename "$file"
36
+ done
37
+ fi
38
+ }
39
+
40
+ # List by category
41
+ case "$CATEGORY" in
42
+ ssot)
43
+ list_suffix "ssot" "SSOT Memories"
44
+ ;;
45
+ pattern)
46
+ list_suffix "pattern" "Pattern Memories"
47
+ ;;
48
+ plan)
49
+ list_suffix "plan" "Plan Memories"
50
+ ;;
51
+ reference)
52
+ list_suffix "reference" "Reference Memories"
53
+ ;;
54
+ archive)
55
+ list_suffix "archive" "Archived Memories"
56
+ ;;
57
+ troubleshoot)
58
+ list_suffix "troubleshoot" "Troubleshooting Guides"
59
+ ;;
60
+ all)
61
+ echo "Memories in: $MEMORIES_DIR"
62
+ list_suffix "ssot" "SSOT Memories"
63
+ list_suffix "pattern" "Pattern Memories"
64
+ list_suffix "plan" "Plan Memories"
65
+ list_suffix "reference" "Reference Memories"
66
+ list_suffix "troubleshoot" "Troubleshooting Guides"
67
+ list_suffix "archive" "Archived Memories (Deprecated)"
68
+
69
+ # Count special files
70
+ commit_logs=$(find "$MEMORIES_DIR" -maxdepth 1 -name "*_commit_log.md" -type f 2>/dev/null | wc -l)
71
+ if [ "$commit_logs" -gt 0 ]; then
72
+ echo ""
73
+ echo "=== Commit Logs ==="
74
+ find "$MEMORIES_DIR" -maxdepth 1 -name "*_commit_log.md" -type f | sort | while read -r file; do
75
+ basename "$file"
76
+ done
77
+ fi
78
+ ;;
79
+ *)
80
+ echo "ERROR: Invalid category: $CATEGORY"
81
+ echo "Valid categories: ssot, pattern, plan, reference, archive, troubleshoot, all"
82
+ exit 1
83
+ ;;
84
+ esac
@@ -0,0 +1,255 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Documentation orchestrator for coordinating SSOT, CHANGELOG, README, CLAUDE.md updates.
4
+
5
+ Workflow:
6
+ 1. Classify change type (feature, bugfix, refactor, breaking, docs, chore)
7
+ 2. Update SSOT memories (.serena/memories/)
8
+ 3. Update CHANGELOG.md
9
+ 4. Suggest README.md updates
10
+ 5. Suggest CLAUDE.md/AGENT.md updates
11
+ 6. Validate all changes
12
+ """
13
+
14
+ import sys
15
+ from enum import Enum
16
+ from pathlib import Path
17
+ from typing import Dict, List, Optional
18
+ from datetime import datetime, timezone
19
+
20
+ from scripts.changelog.add_entry import add_entry_to_file, ChangeCategory
21
+ from scripts.changelog.validate_changelog import validate_file as validate_changelog_file
22
+
23
+
24
+ class ChangeType(Enum):
25
+ """Types of changes to document."""
26
+ FEATURE = "feature"
27
+ BUGFIX = "bugfix"
28
+ REFACTOR = "refactor"
29
+ BREAKING = "breaking"
30
+ DOCS = "docs"
31
+ CHORE = "chore"
32
+
33
+
34
+ # Mapping of ChangeType to CHANGELOG category
35
+ CHANGE_TYPE_TO_CATEGORY = {
36
+ ChangeType.FEATURE: ChangeCategory.ADDED,
37
+ ChangeType.BUGFIX: ChangeCategory.FIXED,
38
+ ChangeType.REFACTOR: ChangeCategory.CHANGED,
39
+ ChangeType.BREAKING: ChangeCategory.CHANGED,
40
+ ChangeType.DOCS: ChangeCategory.CHANGED,
41
+ ChangeType.CHORE: ChangeCategory.CHANGED,
42
+ }
43
+
44
+
45
+ class DocumentingOrchestrator:
46
+ """Coordinates documentation updates across multiple doc types."""
47
+
48
+ def __init__(self, project_root: Path):
49
+ self.project_root = Path(project_root)
50
+ self.changelog_path = self.project_root / "CHANGELOG.md"
51
+ self.readme_path = self.project_root / "README.md"
52
+ self.claude_path = self._find_agent_doc()
53
+ self.ssot_dir = self.project_root / ".serena" / "memories"
54
+
55
+ def _find_agent_doc(self) -> Optional[Path]:
56
+ """Find CLAUDE.md or AGENT.md."""
57
+ for name in ["CLAUDE.md", "AGENT.md"]:
58
+ path = self.project_root / name
59
+ if path.exists():
60
+ return path
61
+ return None
62
+
63
+ def document_change(
64
+ self,
65
+ change_type: ChangeType,
66
+ description: str,
67
+ details: Optional[Dict] = None
68
+ ) -> Dict:
69
+ """
70
+ Document a change across all relevant documentation.
71
+
72
+ Args:
73
+ change_type: Type of change
74
+ description: Brief description
75
+ details: Additional context:
76
+ - scope: SSOT scope identifier
77
+ - category: SSOT category
78
+ - subcategory: SSOT subcategory
79
+ - files_changed: List of affected files
80
+ - breaking: Whether change is breaking
81
+
82
+ Returns:
83
+ {
84
+ "changelog_updated": bool,
85
+ "ssot_updated": bool,
86
+ "ssot_file": Optional[Path],
87
+ "readme_suggestions": List[str],
88
+ "claude_suggestions": List[str],
89
+ "validation_errors": List[str]
90
+ }
91
+ """
92
+ details = details or {}
93
+ result = {
94
+ "changelog_updated": False,
95
+ "ssot_updated": False,
96
+ "ssot_file": None,
97
+ "readme_suggestions": [],
98
+ "claude_suggestions": [],
99
+ "validation_errors": []
100
+ }
101
+
102
+ # 1. Update CHANGELOG
103
+ if self.changelog_path.exists():
104
+ try:
105
+ category = CHANGE_TYPE_TO_CATEGORY[change_type]
106
+ if details.get("breaking"):
107
+ description = f"**BREAKING**: {description}"
108
+
109
+ add_entry_to_file(self.changelog_path, category, description)
110
+ result["changelog_updated"] = True
111
+ except Exception as e:
112
+ result["validation_errors"].append(f"CHANGELOG update failed: {e}")
113
+
114
+ # 2. Update/Create SSOT (if relevant)
115
+ if change_type in [ChangeType.FEATURE, ChangeType.REFACTOR, ChangeType.BREAKING]:
116
+ ssot_result = self._update_ssot(change_type, description, details)
117
+ result.update(ssot_result)
118
+
119
+ # 3. Generate README suggestions
120
+ if change_type == ChangeType.FEATURE:
121
+ result["readme_suggestions"] = self._generate_readme_suggestions(description, details)
122
+
123
+ # 4. Generate CLAUDE.md suggestions
124
+ if change_type in [ChangeType.FEATURE, ChangeType.REFACTOR]:
125
+ result["claude_suggestions"] = self._generate_claude_suggestions(description, details)
126
+
127
+ # 5. Validate all documentation
128
+ validation = self.validate_all()
129
+ result["validation_errors"].extend(validation["errors"])
130
+
131
+ return result
132
+
133
+ def _update_ssot(self, change_type: ChangeType, description: str, details: Dict) -> Dict:
134
+ """Update or create SSOT memory."""
135
+ # This will be implemented with Serena tools in later tasks
136
+ # For now, just return placeholder
137
+ return {
138
+ "ssot_updated": False,
139
+ "ssot_file": None
140
+ }
141
+
142
+ def _generate_readme_suggestions(self, description: str, details: Dict) -> List[str]:
143
+ """Generate suggestions for README.md updates."""
144
+ suggestions = []
145
+
146
+ # Suggest updating features section
147
+ suggestions.append(f"Consider adding to ## Features section: {description}")
148
+
149
+ # If files_changed includes examples, suggest updating usage
150
+ if details.get("files_changed"):
151
+ if any("example" in f.lower() for f in details["files_changed"]):
152
+ suggestions.append("Update ## Usage section with new example")
153
+
154
+ return suggestions
155
+
156
+ def _generate_claude_suggestions(self, description: str, details: Dict) -> List[str]:
157
+ """Generate suggestions for CLAUDE.md/AGENT.md updates."""
158
+ suggestions = []
159
+
160
+ if not self.claude_path:
161
+ return suggestions
162
+
163
+ # Suggest architecture updates for major features
164
+ suggestions.append(f"Review ## Architecture section for: {description}")
165
+
166
+ # If files_changed affects setup, suggest updating
167
+ if details.get("files_changed"):
168
+ setup_files = ["requirements.txt", "package.json", ".env", "docker-compose.yml"]
169
+ if any(f in details["files_changed"] for f in setup_files):
170
+ suggestions.append("Update ## Development Environment section")
171
+
172
+ return suggestions
173
+
174
+ def validate_all(self) -> Dict:
175
+ """Validate all documentation."""
176
+ errors = []
177
+ warnings = []
178
+
179
+ # Validate CHANGELOG
180
+ if self.changelog_path.exists():
181
+ result = validate_changelog_file(self.changelog_path)
182
+ errors.extend(result.get("errors", []))
183
+ warnings.extend(result.get("warnings", []))
184
+
185
+ # TODO: Add SSOT validation
186
+ # TODO: Add README validation (check for broken links, etc.)
187
+
188
+ return {
189
+ "valid": len(errors) == 0,
190
+ "errors": errors,
191
+ "warnings": warnings
192
+ }
193
+
194
+
195
+ def main():
196
+ """CLI entry point."""
197
+ if len(sys.argv) < 4:
198
+ print("Usage: orchestrator.py <project_root> <change_type> <description> [--scope=X] [--category=Y]")
199
+ print("")
200
+ print("Change Types: feature, bugfix, refactor, breaking, docs, chore")
201
+ print("")
202
+ print("Example:")
203
+ print(' orchestrator.py . feature "Add semantic search" --scope=search --category=backend')
204
+ sys.exit(1)
205
+
206
+ project_root = Path(sys.argv[1])
207
+ change_type = ChangeType(sys.argv[2])
208
+ description = sys.argv[3]
209
+
210
+ # Parse optional details
211
+ details = {}
212
+ for arg in sys.argv[4:]:
213
+ if arg.startswith("--"):
214
+ key, value = arg[2:].split("=", 1)
215
+ details[key] = value
216
+
217
+ orchestrator = DocumentingOrchestrator(project_root)
218
+ result = orchestrator.document_change(change_type, description, details)
219
+
220
+ # Print results
221
+ print("")
222
+ print("📝 Documentation Update Results")
223
+ print("=" * 60)
224
+
225
+ if result["changelog_updated"]:
226
+ print("✅ CHANGELOG.md updated")
227
+
228
+ if result["ssot_updated"]:
229
+ print(f"✅ SSOT updated: {result['ssot_file']}")
230
+
231
+ if result["readme_suggestions"]:
232
+ print("")
233
+ print("💡 README.md suggestions:")
234
+ for suggestion in result["readme_suggestions"]:
235
+ print(f" - {suggestion}")
236
+
237
+ if result["claude_suggestions"]:
238
+ print("")
239
+ print("💡 CLAUDE.md suggestions:")
240
+ for suggestion in result["claude_suggestions"]:
241
+ print(f" - {suggestion}")
242
+
243
+ if result["validation_errors"]:
244
+ print("")
245
+ print("❌ Validation errors:")
246
+ for error in result["validation_errors"]:
247
+ print(f" - {error}")
248
+ sys.exit(1)
249
+
250
+ print("")
251
+ print("✅ All documentation validated")
252
+
253
+
254
+ if __name__ == "__main__":
255
+ main()