specweave 0.18.1 → 0.20.1

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 (389) hide show
  1. package/CLAUDE.md +229 -1817
  2. package/README.md +68 -0
  3. package/bin/specweave.js +62 -6
  4. package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts.map +1 -1
  5. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js +3 -0
  6. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js.map +1 -1
  7. package/dist/plugins/specweave/lib/hooks/update-ac-status.d.ts +21 -0
  8. package/dist/plugins/specweave/lib/hooks/update-ac-status.d.ts.map +1 -0
  9. package/dist/plugins/specweave/lib/hooks/update-ac-status.js +162 -0
  10. package/dist/plugins/specweave/lib/hooks/update-ac-status.js.map +1 -0
  11. package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.d.ts.map +1 -1
  12. package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.js +65 -6
  13. package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.js.map +1 -1
  14. package/dist/plugins/specweave-github/lib/completion-calculator.d.ts +112 -0
  15. package/dist/plugins/specweave-github/lib/completion-calculator.d.ts.map +1 -0
  16. package/dist/plugins/specweave-github/lib/completion-calculator.js +301 -0
  17. package/dist/plugins/specweave-github/lib/completion-calculator.js.map +1 -0
  18. package/dist/plugins/specweave-github/lib/duplicate-detector.d.ts +3 -3
  19. package/dist/plugins/specweave-github/lib/duplicate-detector.js +3 -3
  20. package/dist/plugins/specweave-github/lib/epic-content-builder.d.ts +7 -0
  21. package/dist/plugins/specweave-github/lib/epic-content-builder.d.ts.map +1 -1
  22. package/dist/plugins/specweave-github/lib/epic-content-builder.js +42 -0
  23. package/dist/plugins/specweave-github/lib/epic-content-builder.js.map +1 -1
  24. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts +14 -0
  25. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts.map +1 -1
  26. package/dist/plugins/specweave-github/lib/github-client-v2.js +51 -0
  27. package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
  28. package/dist/plugins/specweave-github/lib/github-epic-sync.js +1 -1
  29. package/dist/plugins/specweave-github/lib/github-epic-sync.js.map +1 -1
  30. package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts +87 -0
  31. package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts.map +1 -0
  32. package/dist/plugins/specweave-github/lib/github-feature-sync.js +412 -0
  33. package/dist/plugins/specweave-github/lib/github-feature-sync.js.map +1 -0
  34. package/dist/plugins/specweave-github/lib/github-spec-content-sync.d.ts.map +1 -1
  35. package/dist/plugins/specweave-github/lib/github-spec-content-sync.js +64 -13
  36. package/dist/plugins/specweave-github/lib/github-spec-content-sync.js.map +1 -1
  37. package/dist/plugins/specweave-github/lib/progress-comment-builder.d.ts +78 -0
  38. package/dist/plugins/specweave-github/lib/progress-comment-builder.d.ts.map +1 -0
  39. package/dist/plugins/specweave-github/lib/progress-comment-builder.js +237 -0
  40. package/dist/plugins/specweave-github/lib/progress-comment-builder.js.map +1 -0
  41. package/dist/plugins/specweave-github/lib/user-story-content-builder.d.ts +97 -0
  42. package/dist/plugins/specweave-github/lib/user-story-content-builder.d.ts.map +1 -0
  43. package/dist/plugins/specweave-github/lib/user-story-content-builder.js +301 -0
  44. package/dist/plugins/specweave-github/lib/user-story-content-builder.js.map +1 -0
  45. package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts +83 -0
  46. package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts.map +1 -0
  47. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js +386 -0
  48. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js.map +1 -0
  49. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts +8 -6
  50. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts.map +1 -1
  51. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js +78 -117
  52. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js.map +1 -1
  53. package/dist/src/cli/commands/import-docs.js +4 -4
  54. package/dist/src/cli/commands/import-docs.js.map +1 -1
  55. package/dist/src/cli/commands/init-multiproject.d.ts.map +1 -1
  56. package/dist/src/cli/commands/init-multiproject.js +17 -18
  57. package/dist/src/cli/commands/init-multiproject.js.map +1 -1
  58. package/dist/src/cli/commands/migrate-to-multiproject.d.ts.map +1 -1
  59. package/dist/src/cli/commands/migrate-to-multiproject.js +8 -4
  60. package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -1
  61. package/dist/src/cli/commands/switch-project.d.ts.map +1 -1
  62. package/dist/src/cli/commands/switch-project.js +9 -26
  63. package/dist/src/cli/commands/switch-project.js.map +1 -1
  64. package/dist/src/cli/commands/sync-spec-content.js +3 -0
  65. package/dist/src/cli/commands/sync-spec-content.js.map +1 -1
  66. package/dist/src/core/deduplication/command-deduplicator.d.ts +166 -0
  67. package/dist/src/core/deduplication/command-deduplicator.d.ts.map +1 -0
  68. package/dist/src/core/deduplication/command-deduplicator.js +254 -0
  69. package/dist/src/core/deduplication/command-deduplicator.js.map +1 -0
  70. package/dist/src/core/increment/active-increment-manager.d.ts +42 -15
  71. package/dist/src/core/increment/active-increment-manager.d.ts.map +1 -1
  72. package/dist/src/core/increment/active-increment-manager.js +113 -46
  73. package/dist/src/core/increment/active-increment-manager.js.map +1 -1
  74. package/dist/src/core/increment/conflict-resolver.d.ts +40 -0
  75. package/dist/src/core/increment/conflict-resolver.d.ts.map +1 -0
  76. package/dist/src/core/increment/conflict-resolver.js +219 -0
  77. package/dist/src/core/increment/conflict-resolver.js.map +1 -0
  78. package/dist/src/core/increment/discipline-checker.d.ts.map +1 -1
  79. package/dist/src/core/increment/discipline-checker.js +7 -1
  80. package/dist/src/core/increment/discipline-checker.js.map +1 -1
  81. package/dist/src/core/increment/duplicate-detector.d.ts +52 -0
  82. package/dist/src/core/increment/duplicate-detector.d.ts.map +1 -0
  83. package/dist/src/core/increment/duplicate-detector.js +276 -0
  84. package/dist/src/core/increment/duplicate-detector.js.map +1 -0
  85. package/dist/src/core/increment/increment-archiver.d.ts +90 -0
  86. package/dist/src/core/increment/increment-archiver.d.ts.map +1 -0
  87. package/dist/src/core/increment/increment-archiver.js +368 -0
  88. package/dist/src/core/increment/increment-archiver.js.map +1 -0
  89. package/dist/src/core/increment/increment-reopener.d.ts +165 -0
  90. package/dist/src/core/increment/increment-reopener.d.ts.map +1 -0
  91. package/dist/src/core/increment/increment-reopener.js +390 -0
  92. package/dist/src/core/increment/increment-reopener.js.map +1 -0
  93. package/dist/src/core/increment/metadata-manager.d.ts +26 -1
  94. package/dist/src/core/increment/metadata-manager.d.ts.map +1 -1
  95. package/dist/src/core/increment/metadata-manager.js +143 -5
  96. package/dist/src/core/increment/metadata-manager.js.map +1 -1
  97. package/dist/src/core/increment/recent-work-scanner.d.ts +121 -0
  98. package/dist/src/core/increment/recent-work-scanner.d.ts.map +1 -0
  99. package/dist/src/core/increment/recent-work-scanner.js +303 -0
  100. package/dist/src/core/increment/recent-work-scanner.js.map +1 -0
  101. package/dist/src/core/increment/types.d.ts +1 -0
  102. package/dist/src/core/increment/types.d.ts.map +1 -1
  103. package/dist/src/core/increment-utils.d.ts +112 -0
  104. package/dist/src/core/increment-utils.d.ts.map +1 -0
  105. package/dist/src/core/increment-utils.js +210 -0
  106. package/dist/src/core/increment-utils.js.map +1 -0
  107. package/dist/src/core/living-docs/ac-project-specific-generator.d.ts +65 -0
  108. package/dist/src/core/living-docs/ac-project-specific-generator.d.ts.map +1 -0
  109. package/dist/src/core/living-docs/ac-project-specific-generator.js +175 -0
  110. package/dist/src/core/living-docs/ac-project-specific-generator.js.map +1 -0
  111. package/dist/src/core/living-docs/feature-archiver.d.ts +130 -0
  112. package/dist/src/core/living-docs/feature-archiver.d.ts.map +1 -0
  113. package/dist/src/core/living-docs/feature-archiver.js +549 -0
  114. package/dist/src/core/living-docs/feature-archiver.js.map +1 -0
  115. package/dist/src/core/living-docs/feature-id-manager.d.ts +81 -0
  116. package/dist/src/core/living-docs/feature-id-manager.d.ts.map +1 -0
  117. package/dist/src/core/living-docs/feature-id-manager.js +339 -0
  118. package/dist/src/core/living-docs/feature-id-manager.js.map +1 -0
  119. package/dist/src/core/living-docs/hierarchy-mapper.d.ts +144 -83
  120. package/dist/src/core/living-docs/hierarchy-mapper.d.ts.map +1 -1
  121. package/dist/src/core/living-docs/hierarchy-mapper.js +488 -270
  122. package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
  123. package/dist/src/core/living-docs/index.d.ts +6 -0
  124. package/dist/src/core/living-docs/index.d.ts.map +1 -1
  125. package/dist/src/core/living-docs/index.js +6 -0
  126. package/dist/src/core/living-docs/index.js.map +1 -1
  127. package/dist/src/core/living-docs/project-detector.d.ts +6 -0
  128. package/dist/src/core/living-docs/project-detector.d.ts.map +1 -1
  129. package/dist/src/core/living-docs/project-detector.js +35 -1
  130. package/dist/src/core/living-docs/project-detector.js.map +1 -1
  131. package/dist/src/core/living-docs/spec-distributor.d.ts +100 -26
  132. package/dist/src/core/living-docs/spec-distributor.d.ts.map +1 -1
  133. package/dist/src/core/living-docs/spec-distributor.js +1275 -258
  134. package/dist/src/core/living-docs/spec-distributor.js.map +1 -1
  135. package/dist/src/core/living-docs/task-project-specific-generator.d.ts +109 -0
  136. package/dist/src/core/living-docs/task-project-specific-generator.d.ts.map +1 -0
  137. package/dist/src/core/living-docs/task-project-specific-generator.js +221 -0
  138. package/dist/src/core/living-docs/task-project-specific-generator.js.map +1 -0
  139. package/dist/src/core/living-docs/types.d.ts +143 -0
  140. package/dist/src/core/living-docs/types.d.ts.map +1 -1
  141. package/dist/src/core/project-manager.d.ts +2 -17
  142. package/dist/src/core/project-manager.d.ts.map +1 -1
  143. package/dist/src/core/project-manager.js +68 -48
  144. package/dist/src/core/project-manager.js.map +1 -1
  145. package/dist/src/core/spec-content-sync.d.ts +1 -1
  146. package/dist/src/core/spec-content-sync.d.ts.map +1 -1
  147. package/dist/src/core/sync/enhanced-content-builder.d.ts.map +1 -1
  148. package/dist/src/core/sync/enhanced-content-builder.js +2 -1
  149. package/dist/src/core/sync/enhanced-content-builder.js.map +1 -1
  150. package/dist/src/core/sync/performance-optimizer.d.ts +153 -0
  151. package/dist/src/core/sync/performance-optimizer.d.ts.map +1 -0
  152. package/dist/src/core/sync/performance-optimizer.js +220 -0
  153. package/dist/src/core/sync/performance-optimizer.js.map +1 -0
  154. package/dist/src/core/sync/retry-handler.d.ts +98 -0
  155. package/dist/src/core/sync/retry-handler.d.ts.map +1 -0
  156. package/dist/src/core/sync/retry-handler.js +196 -0
  157. package/dist/src/core/sync/retry-handler.js.map +1 -0
  158. package/dist/src/core/types/config.d.ts +94 -0
  159. package/dist/src/core/types/config.d.ts.map +1 -1
  160. package/dist/src/core/types/config.js +16 -0
  161. package/dist/src/core/types/config.js.map +1 -1
  162. package/dist/src/core/types/increment-metadata.d.ts +6 -0
  163. package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
  164. package/dist/src/core/types/increment-metadata.js +10 -1
  165. package/dist/src/core/types/increment-metadata.js.map +1 -1
  166. package/dist/src/integrations/jira/jira-incremental-mapper.d.ts.map +1 -1
  167. package/dist/src/integrations/jira/jira-incremental-mapper.js +4 -8
  168. package/dist/src/integrations/jira/jira-incremental-mapper.js.map +1 -1
  169. package/dist/src/integrations/jira/jira-mapper.d.ts.map +1 -1
  170. package/dist/src/integrations/jira/jira-mapper.js +4 -8
  171. package/dist/src/integrations/jira/jira-mapper.js.map +1 -1
  172. package/package.json +1 -1
  173. package/plugins/specweave/COMMANDS.md +13 -4
  174. package/plugins/specweave/commands/specweave-abandon.md +22 -20
  175. package/plugins/specweave/commands/specweave-archive-features.md +121 -0
  176. package/plugins/specweave/commands/specweave-archive-increments.md +82 -0
  177. package/plugins/specweave/commands/specweave-archive.md +363 -0
  178. package/plugins/specweave/commands/specweave-backlog.md +211 -0
  179. package/plugins/specweave/commands/specweave-fix-duplicates.md +517 -0
  180. package/plugins/specweave/commands/specweave-increment.md +4 -3
  181. package/plugins/specweave/commands/specweave-progress.md +176 -27
  182. package/plugins/specweave/commands/specweave-reopen.md +391 -0
  183. package/plugins/specweave/commands/specweave-restore-feature.md +90 -0
  184. package/plugins/specweave/commands/specweave-restore.md +309 -0
  185. package/plugins/specweave/commands/specweave-resume.md +51 -23
  186. package/plugins/specweave/commands/specweave-status.md +41 -7
  187. package/plugins/specweave/commands/specweave-sync-specs.md +425 -0
  188. package/plugins/specweave/hooks/hooks.json +4 -0
  189. package/plugins/specweave/hooks/lib/sync-spec-content.sh +2 -2
  190. package/plugins/specweave/hooks/post-task-completion.sh +39 -0
  191. package/plugins/specweave/hooks/pre-command-deduplication.sh +83 -0
  192. package/plugins/specweave/hooks/user-prompt-submit.sh +1 -1
  193. package/plugins/specweave/lib/hooks/sync-living-docs.js +2 -0
  194. package/plugins/specweave/lib/hooks/sync-living-docs.ts +4 -0
  195. package/plugins/specweave/lib/hooks/update-ac-status.js +102 -0
  196. package/plugins/specweave/lib/hooks/update-ac-status.ts +192 -0
  197. package/plugins/specweave/skills/archive-increments/SKILL.md +198 -0
  198. package/plugins/specweave/skills/increment-planner/scripts/feature-utils.js +14 -0
  199. package/plugins/specweave/skills/smart-reopen-detector/SKILL.md +244 -0
  200. package/plugins/specweave-ado/lib/ado-spec-content-sync.js +49 -5
  201. package/plugins/specweave-ado/lib/ado-spec-content-sync.ts +72 -6
  202. package/plugins/specweave-confluent/.claude-plugin/plugin.json +23 -0
  203. package/plugins/specweave-confluent/README.md +375 -0
  204. package/plugins/specweave-confluent/agents/confluent-architect/AGENT.md +306 -0
  205. package/plugins/specweave-confluent/skills/confluent-kafka-connect/SKILL.md +453 -0
  206. package/plugins/specweave-confluent/skills/confluent-ksqldb/SKILL.md +470 -0
  207. package/plugins/specweave-confluent/skills/confluent-schema-registry/SKILL.md +316 -0
  208. package/plugins/specweave-github/agents/github-task-splitter/AGENT.md +2 -2
  209. package/plugins/specweave-github/agents/user-story-updater/AGENT.md +148 -0
  210. package/plugins/specweave-github/commands/specweave-github-cleanup-duplicates.md +1 -1
  211. package/plugins/specweave-github/commands/specweave-github-update-user-story.md +156 -0
  212. package/plugins/specweave-github/hooks/post-task-completion.sh +10 -9
  213. package/plugins/specweave-github/lib/completion-calculator.js +262 -0
  214. package/plugins/specweave-github/lib/completion-calculator.ts +434 -0
  215. package/plugins/specweave-github/lib/duplicate-detector.js +3 -3
  216. package/plugins/specweave-github/lib/duplicate-detector.ts +4 -4
  217. package/plugins/specweave-github/lib/epic-content-builder.js +38 -0
  218. package/plugins/specweave-github/lib/epic-content-builder.ts +59 -0
  219. package/plugins/specweave-github/lib/github-client-v2.js +49 -0
  220. package/plugins/specweave-github/lib/github-client-v2.ts +59 -0
  221. package/plugins/specweave-github/lib/github-epic-sync.ts +1 -1
  222. package/plugins/specweave-github/lib/github-feature-sync.js +381 -0
  223. package/plugins/specweave-github/lib/github-feature-sync.ts +568 -0
  224. package/plugins/specweave-github/lib/github-spec-content-sync.js +40 -10
  225. package/plugins/specweave-github/lib/github-spec-content-sync.ts +82 -14
  226. package/plugins/specweave-github/lib/progress-comment-builder.js +229 -0
  227. package/plugins/specweave-github/lib/progress-comment-builder.ts +324 -0
  228. package/plugins/specweave-github/lib/user-story-content-builder.js +299 -0
  229. package/plugins/specweave-github/lib/user-story-content-builder.ts +413 -0
  230. package/plugins/specweave-github/lib/user-story-issue-builder.js +344 -0
  231. package/plugins/specweave-github/lib/user-story-issue-builder.ts +543 -0
  232. package/plugins/specweave-github/skills/github-issue-standard/SKILL.md +189 -0
  233. package/plugins/{specweave-ado/lib/enhanced-ado-sync.js → specweave-jira/lib/enhanced-jira-sync.js} +25 -61
  234. package/plugins/specweave-jira/lib/{enhanced-jira-sync.ts.disabled → enhanced-jira-sync.ts} +26 -52
  235. package/plugins/specweave-kafka/.claude-plugin/plugin.json +26 -0
  236. package/plugins/specweave-kafka/IMPLEMENTATION-COMPLETE.md +483 -0
  237. package/plugins/specweave-kafka/README.md +242 -0
  238. package/plugins/specweave-kafka/agents/kafka-architect/AGENT.md +235 -0
  239. package/plugins/specweave-kafka/agents/kafka-devops/AGENT.md +209 -0
  240. package/plugins/specweave-kafka/agents/kafka-observability/AGENT.md +266 -0
  241. package/plugins/specweave-kafka/commands/deploy.md +99 -0
  242. package/plugins/specweave-kafka/commands/dev-env.md +176 -0
  243. package/plugins/specweave-kafka/commands/mcp-configure.md +101 -0
  244. package/plugins/specweave-kafka/commands/monitor-setup.md +96 -0
  245. package/plugins/specweave-kafka/docker/kafka-local/docker-compose.yml +187 -0
  246. package/plugins/specweave-kafka/docker/redpanda/docker-compose.yml +199 -0
  247. package/plugins/specweave-kafka/docker/templates/consumer-nodejs.js +225 -0
  248. package/plugins/specweave-kafka/docker/templates/consumer-python.py +220 -0
  249. package/plugins/specweave-kafka/docker/templates/producer-nodejs.js +168 -0
  250. package/plugins/specweave-kafka/docker/templates/producer-python.py +167 -0
  251. package/plugins/specweave-kafka/lib/adapters/apache-kafka-adapter.js +438 -0
  252. package/plugins/specweave-kafka/lib/adapters/apache-kafka-adapter.ts +541 -0
  253. package/plugins/specweave-kafka/lib/adapters/platform-adapter.js +47 -0
  254. package/plugins/specweave-kafka/lib/adapters/platform-adapter.ts +343 -0
  255. package/plugins/specweave-kafka/lib/cli/kcat-wrapper.js +258 -0
  256. package/plugins/specweave-kafka/lib/cli/kcat-wrapper.ts +298 -0
  257. package/plugins/specweave-kafka/lib/cli/types.js +10 -0
  258. package/plugins/specweave-kafka/lib/cli/types.ts +92 -0
  259. package/plugins/specweave-kafka/lib/connectors/connector-catalog.js +305 -0
  260. package/plugins/specweave-kafka/lib/connectors/connector-catalog.ts +528 -0
  261. package/plugins/specweave-kafka/lib/documentation/diagram-generator.js +114 -0
  262. package/plugins/specweave-kafka/lib/documentation/diagram-generator.ts +195 -0
  263. package/plugins/specweave-kafka/lib/documentation/exporter.js +210 -0
  264. package/plugins/specweave-kafka/lib/documentation/exporter.ts +338 -0
  265. package/plugins/specweave-kafka/lib/documentation/schema-catalog-generator.js +60 -0
  266. package/plugins/specweave-kafka/lib/documentation/schema-catalog-generator.ts +130 -0
  267. package/plugins/specweave-kafka/lib/documentation/topology-generator.js +143 -0
  268. package/plugins/specweave-kafka/lib/documentation/topology-generator.ts +290 -0
  269. package/plugins/specweave-kafka/lib/mcp/detector.js +298 -0
  270. package/plugins/specweave-kafka/lib/mcp/detector.ts +352 -0
  271. package/plugins/specweave-kafka/lib/mcp/types.js +21 -0
  272. package/plugins/specweave-kafka/lib/mcp/types.ts +77 -0
  273. package/plugins/specweave-kafka/lib/multi-cluster/cluster-config-manager.js +193 -0
  274. package/plugins/specweave-kafka/lib/multi-cluster/cluster-config-manager.ts +362 -0
  275. package/plugins/specweave-kafka/lib/multi-cluster/cluster-switcher.js +188 -0
  276. package/plugins/specweave-kafka/lib/multi-cluster/cluster-switcher.ts +359 -0
  277. package/plugins/specweave-kafka/lib/multi-cluster/health-aggregator.js +195 -0
  278. package/plugins/specweave-kafka/lib/multi-cluster/health-aggregator.ts +380 -0
  279. package/plugins/specweave-kafka/lib/observability/opentelemetry-kafka.js +209 -0
  280. package/plugins/specweave-kafka/lib/observability/opentelemetry-kafka.ts +358 -0
  281. package/plugins/specweave-kafka/lib/patterns/advanced-ksqldb-patterns.js +354 -0
  282. package/plugins/specweave-kafka/lib/patterns/advanced-ksqldb-patterns.ts +563 -0
  283. package/plugins/specweave-kafka/lib/patterns/circuit-breaker-resilience.js +259 -0
  284. package/plugins/specweave-kafka/lib/patterns/circuit-breaker-resilience.ts +516 -0
  285. package/plugins/specweave-kafka/lib/patterns/dead-letter-queue.js +233 -0
  286. package/plugins/specweave-kafka/lib/patterns/dead-letter-queue.ts +423 -0
  287. package/plugins/specweave-kafka/lib/patterns/exactly-once-semantics.js +266 -0
  288. package/plugins/specweave-kafka/lib/patterns/exactly-once-semantics.ts +445 -0
  289. package/plugins/specweave-kafka/lib/patterns/flink-kafka-integration.js +312 -0
  290. package/plugins/specweave-kafka/lib/patterns/flink-kafka-integration.ts +561 -0
  291. package/plugins/specweave-kafka/lib/patterns/multi-dc-replication.js +289 -0
  292. package/plugins/specweave-kafka/lib/patterns/multi-dc-replication.ts +607 -0
  293. package/plugins/specweave-kafka/lib/patterns/rate-limiting-backpressure.js +264 -0
  294. package/plugins/specweave-kafka/lib/patterns/rate-limiting-backpressure.ts +498 -0
  295. package/plugins/specweave-kafka/lib/patterns/stream-processing-optimization.js +263 -0
  296. package/plugins/specweave-kafka/lib/patterns/stream-processing-optimization.ts +549 -0
  297. package/plugins/specweave-kafka/lib/patterns/tiered-storage-compaction.js +205 -0
  298. package/plugins/specweave-kafka/lib/patterns/tiered-storage-compaction.ts +399 -0
  299. package/plugins/specweave-kafka/lib/performance/performance-optimizer.js +249 -0
  300. package/plugins/specweave-kafka/lib/performance/performance-optimizer.ts +427 -0
  301. package/plugins/specweave-kafka/lib/security/kafka-security.js +252 -0
  302. package/plugins/specweave-kafka/lib/security/kafka-security.ts +494 -0
  303. package/plugins/specweave-kafka/lib/utils/capacity-planner.js +203 -0
  304. package/plugins/specweave-kafka/lib/utils/capacity-planner.ts +469 -0
  305. package/plugins/specweave-kafka/lib/utils/config-validator.js +419 -0
  306. package/plugins/specweave-kafka/lib/utils/config-validator.ts +564 -0
  307. package/plugins/specweave-kafka/lib/utils/partitioning.js +329 -0
  308. package/plugins/specweave-kafka/lib/utils/partitioning.ts +473 -0
  309. package/plugins/specweave-kafka/lib/utils/sizing.js +221 -0
  310. package/plugins/specweave-kafka/lib/utils/sizing.ts +374 -0
  311. package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-broker-metrics.json +628 -0
  312. package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-cluster-overview.json +564 -0
  313. package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-consumer-lag.json +509 -0
  314. package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-jvm-metrics.json +674 -0
  315. package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-topic-metrics.json +578 -0
  316. package/plugins/specweave-kafka/monitoring/grafana/provisioning/dashboards/kafka.yml +17 -0
  317. package/plugins/specweave-kafka/monitoring/grafana/provisioning/datasources/prometheus.yml +17 -0
  318. package/plugins/specweave-kafka/monitoring/prometheus/kafka-alerts.yml +415 -0
  319. package/plugins/specweave-kafka/monitoring/prometheus/kafka-jmx-exporter.yml +256 -0
  320. package/plugins/specweave-kafka/package.json +41 -0
  321. package/plugins/specweave-kafka/skills/kafka-architecture/SKILL.md +647 -0
  322. package/plugins/specweave-kafka/skills/kafka-cli-tools/SKILL.md +433 -0
  323. package/plugins/specweave-kafka/skills/kafka-iac-deployment/SKILL.md +449 -0
  324. package/plugins/specweave-kafka/skills/kafka-kubernetes/SKILL.md +667 -0
  325. package/plugins/specweave-kafka/skills/kafka-mcp-integration/SKILL.md +273 -0
  326. package/plugins/specweave-kafka/skills/kafka-observability/SKILL.md +576 -0
  327. package/plugins/specweave-kafka/templates/config/broker-production.properties +254 -0
  328. package/plugins/specweave-kafka/templates/config/consumer-low-latency.properties +112 -0
  329. package/plugins/specweave-kafka/templates/config/producer-high-throughput.properties +120 -0
  330. package/plugins/specweave-kafka/templates/migration/mirrormaker2-config.properties +234 -0
  331. package/plugins/specweave-kafka/templates/monitoring/grafana/multi-cluster-dashboard.json +686 -0
  332. package/plugins/specweave-kafka/terraform/apache-kafka/main.tf +347 -0
  333. package/plugins/specweave-kafka/terraform/apache-kafka/outputs.tf +107 -0
  334. package/plugins/specweave-kafka/terraform/apache-kafka/templates/kafka-broker-init.sh.tpl +216 -0
  335. package/plugins/specweave-kafka/terraform/apache-kafka/variables.tf +156 -0
  336. package/plugins/specweave-kafka/terraform/aws-msk/main.tf +362 -0
  337. package/plugins/specweave-kafka/terraform/aws-msk/outputs.tf +93 -0
  338. package/plugins/specweave-kafka/terraform/aws-msk/templates/server.properties.tpl +32 -0
  339. package/plugins/specweave-kafka/terraform/aws-msk/variables.tf +235 -0
  340. package/plugins/specweave-kafka/terraform/azure-event-hubs/main.tf +281 -0
  341. package/plugins/specweave-kafka/terraform/azure-event-hubs/outputs.tf +118 -0
  342. package/plugins/specweave-kafka/terraform/azure-event-hubs/variables.tf +148 -0
  343. package/plugins/specweave-kafka/tsconfig.json +21 -0
  344. package/plugins/specweave-kafka-streams/.claude-plugin/plugin.json +23 -0
  345. package/plugins/specweave-kafka-streams/README.md +310 -0
  346. package/plugins/specweave-kafka-streams/skills/kafka-streams-topology/SKILL.md +539 -0
  347. package/plugins/specweave-n8n/.claude-plugin/plugin.json +22 -0
  348. package/plugins/specweave-n8n/README.md +354 -0
  349. package/plugins/specweave-n8n/skills/n8n-kafka-workflows/SKILL.md +504 -0
  350. package/plugins/specweave-release/commands/specweave-release-platform.md +1 -1
  351. package/plugins/specweave-release/hooks/post-task-completion.sh +2 -2
  352. package/src/templates/AGENTS.md.template +601 -7
  353. package/src/templates/CLAUDE.md.template +188 -88
  354. package/dist/locales/de/.gitkeep +0 -0
  355. package/dist/locales/de/cli.json +0 -108
  356. package/dist/locales/en/cli.json +0 -287
  357. package/dist/locales/en/errors.json +0 -7
  358. package/dist/locales/en/templates.json +0 -6
  359. package/dist/locales/es/.gitkeep +0 -0
  360. package/dist/locales/es/cli.json +0 -41
  361. package/dist/locales/fr/.gitkeep +0 -0
  362. package/dist/locales/fr/cli.json +0 -108
  363. package/dist/locales/ja/.gitkeep +0 -0
  364. package/dist/locales/ja/cli.json +0 -108
  365. package/dist/locales/ko/.gitkeep +0 -0
  366. package/dist/locales/ko/cli.json +0 -108
  367. package/dist/locales/pt/.gitkeep +0 -0
  368. package/dist/locales/pt/cli.json +0 -108
  369. package/dist/locales/ru/.gitkeep +0 -0
  370. package/dist/locales/ru/cli.json +0 -269
  371. package/dist/locales/zh/.gitkeep +0 -0
  372. package/dist/locales/zh/cli.json +0 -108
  373. package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.d.ts +0 -25
  374. package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.d.ts.map +0 -1
  375. package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.js +0 -191
  376. package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.js.map +0 -1
  377. package/dist/spec-parser.js +0 -629
  378. package/dist/src/core/sync/spec-content-sync.d.ts +0 -88
  379. package/dist/src/core/sync/spec-content-sync.d.ts.map +0 -1
  380. package/dist/src/core/sync/spec-content-sync.js +0 -5
  381. package/dist/src/core/sync/spec-content-sync.js.map +0 -1
  382. package/dist/tsconfig.tsbuildinfo +0 -1
  383. package/plugins/specweave-ado/commands/specweave-ado-sync-spec.md +0 -255
  384. package/plugins/specweave-github/commands/specweave-github-sync-epic.md +0 -248
  385. package/plugins/specweave-github/commands/specweave-github-sync-from.md +0 -147
  386. package/plugins/specweave-github/commands/specweave-github-sync-spec.md +0 -208
  387. package/plugins/specweave-github/commands/specweave-github-sync-tasks.md +0 -530
  388. package/plugins/specweave-jira/commands/specweave-jira-sync-epic.md +0 -267
  389. package/plugins/specweave-jira/commands/specweave-jira-sync-spec.md +0 -240
@@ -0,0 +1,338 @@
1
+ /**
2
+ * Documentation Exporter
3
+ *
4
+ * Exports generated documentation to multiple formats (Markdown, HTML, PDF)
5
+ *
6
+ * @module exporter
7
+ */
8
+
9
+ import * as fs from 'fs';
10
+ import * as path from 'path';
11
+
12
+ /**
13
+ * Export Format
14
+ */
15
+ export enum ExportFormat {
16
+ MARKDOWN = 'markdown',
17
+ HTML = 'html',
18
+ PDF = 'pdf',
19
+ JSON = 'json',
20
+ }
21
+
22
+ /**
23
+ * Export Options
24
+ */
25
+ export interface ExportOptions {
26
+ /** Output directory */
27
+ outputDir: string;
28
+ /** File name (without extension) */
29
+ fileName: string;
30
+ /** Export format */
31
+ format: ExportFormat;
32
+ /** Include timestamp in filename */
33
+ includeTimestamp?: boolean;
34
+ /** Custom CSS for HTML/PDF (optional) */
35
+ customCSS?: string;
36
+ }
37
+
38
+ /**
39
+ * Documentation Exporter
40
+ *
41
+ * Handles exporting documentation to various formats
42
+ */
43
+ export class DocumentationExporter {
44
+ /**
45
+ * Export documentation
46
+ */
47
+ static async export(content: string, options: ExportOptions): Promise<string> {
48
+ // Ensure output directory exists
49
+ if (!fs.existsSync(options.outputDir)) {
50
+ fs.mkdirSync(options.outputDir, { recursive: true });
51
+ }
52
+
53
+ // Build filename
54
+ const timestamp = options.includeTimestamp
55
+ ? `-${new Date().toISOString().replace(/:/g, '-').split('.')[0]}`
56
+ : '';
57
+ const extension = this.getExtension(options.format);
58
+ const fileName = `${options.fileName}${timestamp}.${extension}`;
59
+ const filePath = path.join(options.outputDir, fileName);
60
+
61
+ switch (options.format) {
62
+ case ExportFormat.MARKDOWN:
63
+ return this.exportMarkdown(content, filePath);
64
+
65
+ case ExportFormat.HTML:
66
+ return this.exportHTML(content, filePath, options.customCSS);
67
+
68
+ case ExportFormat.PDF:
69
+ return this.exportPDF(content, filePath, options.customCSS);
70
+
71
+ case ExportFormat.JSON:
72
+ return this.exportJSON(content, filePath);
73
+
74
+ default:
75
+ throw new Error(`Unsupported export format: ${options.format}`);
76
+ }
77
+ }
78
+
79
+ /**
80
+ * Get file extension for format
81
+ */
82
+ private static getExtension(format: ExportFormat): string {
83
+ switch (format) {
84
+ case ExportFormat.MARKDOWN:
85
+ return 'md';
86
+ case ExportFormat.HTML:
87
+ return 'html';
88
+ case ExportFormat.PDF:
89
+ return 'pdf';
90
+ case ExportFormat.JSON:
91
+ return 'json';
92
+ default:
93
+ return 'txt';
94
+ }
95
+ }
96
+
97
+ /**
98
+ * Export as Markdown
99
+ */
100
+ private static exportMarkdown(content: string, filePath: string): string {
101
+ fs.writeFileSync(filePath, content, 'utf-8');
102
+ return filePath;
103
+ }
104
+
105
+ /**
106
+ * Export as HTML
107
+ */
108
+ private static exportHTML(content: string, filePath: string, customCSS?: string): string {
109
+ // Convert Markdown to HTML (would use marked or similar in real implementation)
110
+ const htmlContent = this.markdownToHTML(content);
111
+
112
+ const html = `<!DOCTYPE html>
113
+ <html lang="en">
114
+ <head>
115
+ <meta charset="UTF-8">
116
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
117
+ <title>Kafka Documentation</title>
118
+ <style>
119
+ ${customCSS || this.getDefaultCSS()}
120
+ </style>
121
+ </head>
122
+ <body>
123
+ <div class="container">
124
+ ${htmlContent}
125
+ </div>
126
+ </body>
127
+ </html>`;
128
+
129
+ fs.writeFileSync(filePath, html, 'utf-8');
130
+ return filePath;
131
+ }
132
+
133
+ /**
134
+ * Export as PDF
135
+ */
136
+ private static exportPDF(content: string, filePath: string, customCSS?: string): string {
137
+ // In real implementation, would use puppeteer or similar
138
+ // For now, just export as HTML and note that PDF generation requires additional setup
139
+
140
+ const htmlPath = filePath.replace('.pdf', '.html');
141
+ this.exportHTML(content, htmlPath, customCSS);
142
+
143
+ console.warn(
144
+ `PDF export requires additional setup (puppeteer, wkhtmltopdf, etc.). ` +
145
+ `HTML file exported to: ${htmlPath}. ` +
146
+ `Use a tool like puppeteer to convert to PDF.`
147
+ );
148
+
149
+ return htmlPath;
150
+ }
151
+
152
+ /**
153
+ * Export as JSON
154
+ */
155
+ private static exportJSON(content: string, filePath: string): string {
156
+ // Assume content is already JSON string
157
+ fs.writeFileSync(filePath, content, 'utf-8');
158
+ return filePath;
159
+ }
160
+
161
+ /**
162
+ * Convert Markdown to HTML (simplified)
163
+ */
164
+ private static markdownToHTML(markdown: string): string {
165
+ // Simple Markdown to HTML conversion
166
+ // In production, use marked, markdown-it, or similar
167
+
168
+ let html = markdown;
169
+
170
+ // Headers
171
+ html = html.replace(/^### (.*$)/gim, '<h3>$1</h3>');
172
+ html = html.replace(/^## (.*$)/gim, '<h2>$1</h2>');
173
+ html = html.replace(/^# (.*$)/gim, '<h1>$1</h1>');
174
+
175
+ // Bold
176
+ html = html.replace(/\*\*(.*?)\*\*/g, '<strong>$1</strong>');
177
+
178
+ // Tables (basic)
179
+ const tableRegex = /\|(.+)\|\n\|(.+)\|\n((?:\|.+\|\n?)+)/gm;
180
+ html = html.replace(tableRegex, (match) => {
181
+ const lines = match.trim().split('\n');
182
+ const headers = lines[0]
183
+ .split('|')
184
+ .filter((c) => c.trim())
185
+ .map((h) => `<th>${h.trim()}</th>`)
186
+ .join('');
187
+ const rows = lines
188
+ .slice(2)
189
+ .map((line) => {
190
+ const cells = line
191
+ .split('|')
192
+ .filter((c) => c.trim())
193
+ .map((c) => `<td>${c.trim()}</td>`)
194
+ .join('');
195
+ return `<tr>${cells}</tr>`;
196
+ })
197
+ .join('');
198
+
199
+ return `<table><thead><tr>${headers}</tr></thead><tbody>${rows}</tbody></table>`;
200
+ });
201
+
202
+ // Code blocks
203
+ html = html.replace(/```(.*?)\n([\s\S]*?)```/g, '<pre><code>$2</code></pre>');
204
+
205
+ // Paragraphs
206
+ html = html.replace(/\n\n/g, '</p><p>');
207
+ html = `<p>${html}</p>`;
208
+
209
+ return html;
210
+ }
211
+
212
+ /**
213
+ * Get default CSS for HTML export
214
+ */
215
+ private static getDefaultCSS(): string {
216
+ return `
217
+ body {
218
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
219
+ line-height: 1.6;
220
+ color: #333;
221
+ background: #f5f5f5;
222
+ }
223
+ .container {
224
+ max-width: 1000px;
225
+ margin: 40px auto;
226
+ padding: 40px;
227
+ background: white;
228
+ box-shadow: 0 2px 8px rgba(0,0,0,0.1);
229
+ }
230
+ h1 {
231
+ border-bottom: 3px solid #2196F3;
232
+ padding-bottom: 10px;
233
+ color: #1976D2;
234
+ }
235
+ h2 {
236
+ border-bottom: 2px solid #64B5F6;
237
+ padding-bottom: 8px;
238
+ color: #1976D2;
239
+ margin-top: 30px;
240
+ }
241
+ h3 {
242
+ color: #424242;
243
+ margin-top: 20px;
244
+ }
245
+ table {
246
+ width: 100%;
247
+ border-collapse: collapse;
248
+ margin: 20px 0;
249
+ }
250
+ th, td {
251
+ border: 1px solid #ddd;
252
+ padding: 12px;
253
+ text-align: left;
254
+ }
255
+ th {
256
+ background-color: #2196F3;
257
+ color: white;
258
+ font-weight: bold;
259
+ }
260
+ tr:nth-child(even) {
261
+ background-color: #f9f9f9;
262
+ }
263
+ pre {
264
+ background: #2e3440;
265
+ color: #d8dee9;
266
+ padding: 16px;
267
+ border-radius: 4px;
268
+ overflow-x: auto;
269
+ }
270
+ code {
271
+ font-family: 'Monaco', 'Courier New', monospace;
272
+ font-size: 14px;
273
+ }
274
+ `;
275
+ }
276
+
277
+ /**
278
+ * Batch export to multiple formats
279
+ */
280
+ static async exportMultiple(
281
+ content: string,
282
+ baseOptions: Omit<ExportOptions, 'format'>
283
+ ): Promise<string[]> {
284
+ const formats = [ExportFormat.MARKDOWN, ExportFormat.HTML, ExportFormat.JSON];
285
+ const results: string[] = [];
286
+
287
+ for (const format of formats) {
288
+ const filePath = await this.export(content, {
289
+ ...baseOptions,
290
+ format,
291
+ });
292
+ results.push(filePath);
293
+ }
294
+
295
+ return results;
296
+ }
297
+ }
298
+
299
+ /**
300
+ * Example Usage: Export Topology Documentation
301
+ *
302
+ * ```typescript
303
+ * import { TopologyGenerator } from './topology-generator';
304
+ * import { DocumentationExporter, ExportFormat } from './exporter';
305
+ *
306
+ * // Generate topology markdown
307
+ * const topology = await TopologyGenerator.generate(admin);
308
+ * const markdown = TopologyGenerator.formatAsMarkdown(topology);
309
+ *
310
+ * // Export as HTML
311
+ * const htmlPath = await DocumentationExporter.export(markdown, {
312
+ * outputDir: './docs/output',
313
+ * fileName: 'kafka-topology',
314
+ * format: ExportFormat.HTML,
315
+ * includeTimestamp: true,
316
+ * });
317
+ *
318
+ * console.log(`Documentation exported to: ${htmlPath}`);
319
+ * ```
320
+ */
321
+
322
+ /**
323
+ * Example Usage: Batch Export
324
+ *
325
+ * ```typescript
326
+ * // Export to all formats
327
+ * const paths = await DocumentationExporter.exportMultiple(markdown, {
328
+ * outputDir: './docs/output',
329
+ * fileName: 'kafka-topology',
330
+ * includeTimestamp: false,
331
+ * });
332
+ *
333
+ * console.log('Exported files:', paths);
334
+ * // Output: ['./docs/output/kafka-topology.md', './docs/output/kafka-topology.html', './docs/output/kafka-topology.json']
335
+ * ```
336
+ */
337
+
338
+ export default DocumentationExporter;
@@ -0,0 +1,60 @@
1
+ class SchemaCatalogGenerator {
2
+ /**
3
+ * Generate schema catalog from Schema Registry
4
+ */
5
+ static async generate(schemaRegistryUrl) {
6
+ const subjects = [];
7
+ return {
8
+ totalSubjects: subjects.length,
9
+ subjects,
10
+ generatedAt: /* @__PURE__ */ new Date()
11
+ };
12
+ }
13
+ /**
14
+ * Format catalog as Markdown
15
+ */
16
+ static formatAsMarkdown(catalog) {
17
+ const lines = [];
18
+ lines.push("# Schema Registry Catalog");
19
+ lines.push("");
20
+ lines.push(`**Total Subjects**: ${catalog.totalSubjects}`);
21
+ lines.push(`**Generated**: ${catalog.generatedAt.toISOString()}`);
22
+ lines.push("");
23
+ for (const subject of catalog.subjects) {
24
+ lines.push(`## ${subject.subject}`);
25
+ lines.push("");
26
+ lines.push(`**Latest Version**: ${subject.latestVersion}`);
27
+ lines.push(`**Compatibility Mode**: ${subject.compatibility}`);
28
+ lines.push("");
29
+ lines.push("### Versions");
30
+ lines.push("");
31
+ lines.push("| Version | Schema ID | Type |");
32
+ lines.push("|---------|-----------|------|");
33
+ for (const version of subject.versions) {
34
+ lines.push(`| ${version.version} | ${version.id} | ${version.schemaType} |`);
35
+ }
36
+ lines.push("");
37
+ const latestVersion = subject.versions[subject.versions.length - 1];
38
+ if (latestVersion) {
39
+ lines.push("### Latest Schema");
40
+ lines.push("");
41
+ lines.push("```json");
42
+ lines.push(latestVersion.schema);
43
+ lines.push("```");
44
+ lines.push("");
45
+ }
46
+ }
47
+ return lines.join("\n");
48
+ }
49
+ /**
50
+ * Format catalog as JSON
51
+ */
52
+ static formatAsJSON(catalog) {
53
+ return JSON.stringify(catalog, null, 2);
54
+ }
55
+ }
56
+ var schema_catalog_generator_default = SchemaCatalogGenerator;
57
+ export {
58
+ SchemaCatalogGenerator,
59
+ schema_catalog_generator_default as default
60
+ };
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Schema Catalog Generator
3
+ *
4
+ * Generates Schema Registry catalog documentation
5
+ *
6
+ * @module schema-catalog-generator
7
+ */
8
+
9
+ /**
10
+ * Schema Version
11
+ */
12
+ export interface SchemaVersion {
13
+ /** Schema ID */
14
+ id: number;
15
+ /** Version number */
16
+ version: number;
17
+ /** Schema definition (Avro/Protobuf/JSON) */
18
+ schema: string;
19
+ /** Schema type */
20
+ schemaType: 'AVRO' | 'PROTOBUF' | 'JSON';
21
+ }
22
+
23
+ /**
24
+ * Subject Metadata
25
+ */
26
+ export interface SubjectMetadata {
27
+ /** Subject name */
28
+ subject: string;
29
+ /** Latest version */
30
+ latestVersion: number;
31
+ /** Compatibility mode */
32
+ compatibility: 'BACKWARD' | 'FORWARD' | 'FULL' | 'NONE';
33
+ /** All versions */
34
+ versions: SchemaVersion[];
35
+ }
36
+
37
+ /**
38
+ * Schema Catalog
39
+ */
40
+ export interface SchemaCatalog {
41
+ /** Total subjects */
42
+ totalSubjects: number;
43
+ /** Subjects */
44
+ subjects: SubjectMetadata[];
45
+ /** Generated timestamp */
46
+ generatedAt: Date;
47
+ }
48
+
49
+ /**
50
+ * Schema Catalog Generator
51
+ *
52
+ * Generates documentation for Schema Registry
53
+ */
54
+ export class SchemaCatalogGenerator {
55
+ /**
56
+ * Generate schema catalog from Schema Registry
57
+ */
58
+ static async generate(schemaRegistryUrl: string): Promise<SchemaCatalog> {
59
+ // In real implementation, would use @kafkajs/confluent-schema-registry
60
+ // For now, return mock data structure
61
+
62
+ const subjects: SubjectMetadata[] = [];
63
+
64
+ // Would fetch from Schema Registry REST API:
65
+ // GET /subjects
66
+ // GET /subjects/{subject}/versions
67
+ // GET /subjects/{subject}/versions/{version}
68
+ // GET /config/{subject}
69
+
70
+ return {
71
+ totalSubjects: subjects.length,
72
+ subjects,
73
+ generatedAt: new Date(),
74
+ };
75
+ }
76
+
77
+ /**
78
+ * Format catalog as Markdown
79
+ */
80
+ static formatAsMarkdown(catalog: SchemaCatalog): string {
81
+ const lines: string[] = [];
82
+
83
+ lines.push('# Schema Registry Catalog');
84
+ lines.push('');
85
+ lines.push(`**Total Subjects**: ${catalog.totalSubjects}`);
86
+ lines.push(`**Generated**: ${catalog.generatedAt.toISOString()}`);
87
+ lines.push('');
88
+
89
+ for (const subject of catalog.subjects) {
90
+ lines.push(`## ${subject.subject}`);
91
+ lines.push('');
92
+ lines.push(`**Latest Version**: ${subject.latestVersion}`);
93
+ lines.push(`**Compatibility Mode**: ${subject.compatibility}`);
94
+ lines.push('');
95
+
96
+ lines.push('### Versions');
97
+ lines.push('');
98
+ lines.push('| Version | Schema ID | Type |');
99
+ lines.push('|---------|-----------|------|');
100
+
101
+ for (const version of subject.versions) {
102
+ lines.push(`| ${version.version} | ${version.id} | ${version.schemaType} |`);
103
+ }
104
+
105
+ lines.push('');
106
+
107
+ // Latest schema definition
108
+ const latestVersion = subject.versions[subject.versions.length - 1];
109
+ if (latestVersion) {
110
+ lines.push('### Latest Schema');
111
+ lines.push('');
112
+ lines.push('```json');
113
+ lines.push(latestVersion.schema);
114
+ lines.push('```');
115
+ lines.push('');
116
+ }
117
+ }
118
+
119
+ return lines.join('\n');
120
+ }
121
+
122
+ /**
123
+ * Format catalog as JSON
124
+ */
125
+ static formatAsJSON(catalog: SchemaCatalog): string {
126
+ return JSON.stringify(catalog, null, 2);
127
+ }
128
+ }
129
+
130
+ export default SchemaCatalogGenerator;
@@ -0,0 +1,143 @@
1
+ class TopologyGenerator {
2
+ /**
3
+ * Generate cluster topology documentation
4
+ */
5
+ static async generate(admin) {
6
+ const cluster = await admin.describeCluster();
7
+ const allTopics = await admin.listTopics();
8
+ const topicMetadata = await admin.fetchTopicMetadata({ topics: allTopics });
9
+ const topicConfigs = await admin.fetchTopicOffsets(allTopics.slice(0, 10));
10
+ const topics = [];
11
+ let totalPartitions = 0;
12
+ const underReplicatedPartitions = [];
13
+ for (const topicData of topicMetadata.topics) {
14
+ const partitionCount = topicData.partitions.length;
15
+ totalPartitions += partitionCount;
16
+ const replicationFactor = topicData.partitions.length > 0 ? topicData.partitions[0].replicas.length : 0;
17
+ topics.push({
18
+ name: topicData.name,
19
+ partitions: partitionCount,
20
+ replicationFactor,
21
+ configs: {},
22
+ // Would fetch from describeConfigs in real implementation
23
+ isInternal: topicData.name.startsWith("__") || topicData.name.startsWith("_")
24
+ });
25
+ for (const partition of topicData.partitions) {
26
+ if (partition.isr.length < partition.replicas.length) {
27
+ underReplicatedPartitions.push({
28
+ topic: topicData.name,
29
+ partition: partition.partitionId,
30
+ leader: partition.leader,
31
+ isr: partition.isr.map(Number),
32
+ replicas: partition.replicas.map(Number)
33
+ });
34
+ }
35
+ }
36
+ }
37
+ const topology = {
38
+ clusterId: cluster.clusterId,
39
+ controller: Number(cluster.controller),
40
+ brokers: cluster.brokers.map((broker) => ({
41
+ nodeId: broker.nodeId,
42
+ host: broker.host,
43
+ port: broker.port,
44
+ rack: broker.rack
45
+ })),
46
+ topics,
47
+ totalPartitions,
48
+ underReplicatedPartitions,
49
+ generatedAt: /* @__PURE__ */ new Date()
50
+ };
51
+ return topology;
52
+ }
53
+ /**
54
+ * Format topology as Markdown
55
+ */
56
+ static formatAsMarkdown(topology) {
57
+ const lines = [];
58
+ lines.push("# Kafka Cluster Topology");
59
+ lines.push("");
60
+ lines.push(`**Cluster ID**: ${topology.clusterId}`);
61
+ lines.push(`**Controller**: Broker ${topology.controller}`);
62
+ lines.push(`**Generated**: ${topology.generatedAt.toISOString()}`);
63
+ lines.push("");
64
+ lines.push("## Brokers");
65
+ lines.push("");
66
+ lines.push("| Broker ID | Host | Port | Rack |");
67
+ lines.push("|-----------|------|------|------|");
68
+ for (const broker of topology.brokers) {
69
+ lines.push(
70
+ `| ${broker.nodeId} | ${broker.host} | ${broker.port} | ${broker.rack || "N/A"} |`
71
+ );
72
+ }
73
+ lines.push("");
74
+ lines.push("## Topics");
75
+ lines.push("");
76
+ lines.push(`**Total Topics**: ${topology.topics.length}`);
77
+ lines.push(`**Total Partitions**: ${topology.totalPartitions}`);
78
+ lines.push("");
79
+ lines.push("### Topic List");
80
+ lines.push("");
81
+ lines.push("| Topic Name | Partitions | Replication Factor | Internal |");
82
+ lines.push("|------------|------------|-------------------|----------|");
83
+ const sortedTopics = [...topology.topics].sort((a, b) => a.name.localeCompare(b.name));
84
+ for (const topic of sortedTopics) {
85
+ lines.push(
86
+ `| ${topic.name} | ${topic.partitions} | ${topic.replicationFactor} | ${topic.isInternal ? "Yes" : "No"} |`
87
+ );
88
+ }
89
+ lines.push("");
90
+ if (topology.underReplicatedPartitions.length > 0) {
91
+ lines.push("## \u26A0\uFE0F Under-Replicated Partitions");
92
+ lines.push("");
93
+ lines.push("| Topic | Partition | Leader | ISR | Replicas |");
94
+ lines.push("|-------|-----------|--------|-----|----------|");
95
+ for (const partition of topology.underReplicatedPartitions) {
96
+ lines.push(
97
+ `| ${partition.topic} | ${partition.partition} | ${partition.leader} | ${partition.isr.join(", ")} | ${partition.replicas.join(", ")} |`
98
+ );
99
+ }
100
+ lines.push("");
101
+ }
102
+ return lines.join("\n");
103
+ }
104
+ /**
105
+ * Format topology as JSON
106
+ */
107
+ static formatAsJSON(topology) {
108
+ return JSON.stringify(topology, null, 2);
109
+ }
110
+ /**
111
+ * Generate Mermaid diagram for cluster topology
112
+ */
113
+ static generateMermaidDiagram(topology) {
114
+ const lines = [];
115
+ lines.push("```mermaid");
116
+ lines.push("graph TB");
117
+ lines.push(" subgraph Kafka Cluster");
118
+ for (const broker of topology.brokers) {
119
+ const isController = broker.nodeId === topology.controller;
120
+ const shape = isController ? "[Broker " : "(Broker ";
121
+ const endShape = isController ? "]" : ")";
122
+ lines.push(
123
+ ` B${broker.nodeId}${shape}${broker.nodeId}<br/>${broker.host}:${broker.port}${endShape}`
124
+ );
125
+ }
126
+ const sampleTopics = topology.topics.filter((t) => !t.isInternal).slice(0, 10);
127
+ for (const topic of sampleTopics) {
128
+ const topicId = topic.name.replace(/[^a-zA-Z0-9]/g, "_");
129
+ lines.push(` T_${topicId}[${topic.name}<br/>${topic.partitions} partitions]`);
130
+ for (const broker of topology.brokers.slice(0, 3)) {
131
+ lines.push(` T_${topicId} --> B${broker.nodeId}`);
132
+ }
133
+ }
134
+ lines.push(" end");
135
+ lines.push("```");
136
+ return lines.join("\n");
137
+ }
138
+ }
139
+ var topology_generator_default = TopologyGenerator;
140
+ export {
141
+ TopologyGenerator,
142
+ topology_generator_default as default
143
+ };