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,498 @@
1
+ /**
2
+ * Rate Limiting and Backpressure Handling
3
+ *
4
+ * Producer rate limiting, consumer backpressure, quota management, and flow control
5
+ *
6
+ * @module rate-limiting-backpressure
7
+ */
8
+
9
+ import { Producer, Consumer } from 'kafkajs';
10
+
11
+ /**
12
+ * Rate Limiter Configuration
13
+ */
14
+ export interface RateLimiterConfig {
15
+ /** Max messages per second */
16
+ maxMessagesPerSecond: number;
17
+ /** Max bytes per second */
18
+ maxBytesPerSecond?: number;
19
+ /** Burst capacity (tokens) */
20
+ burstCapacity?: number;
21
+ /** Refill rate (messages/sec) */
22
+ refillRate?: number;
23
+ }
24
+
25
+ /**
26
+ * Backpressure Strategy
27
+ */
28
+ export enum BackpressureStrategy {
29
+ /** Drop messages when overwhelmed */
30
+ DROP = 'drop',
31
+ /** Buffer messages up to limit */
32
+ BUFFER = 'buffer',
33
+ /** Throttle producer */
34
+ THROTTLE = 'throttle',
35
+ /** Dynamic (adaptive) */
36
+ DYNAMIC = 'dynamic',
37
+ }
38
+
39
+ /**
40
+ * Quota Configuration (Kafka Broker-Level)
41
+ */
42
+ export interface QuotaConfig {
43
+ /** Client ID */
44
+ clientId: string;
45
+ /** Producer quota (bytes/sec) */
46
+ producerQuota?: number;
47
+ /** Consumer quota (bytes/sec) */
48
+ consumerQuota?: number;
49
+ /** Request quota (% of network/IO thread time) */
50
+ requestQuota?: number;
51
+ }
52
+
53
+ /**
54
+ * Token Bucket Rate Limiter
55
+ *
56
+ * Classic rate limiting algorithm with burst capacity
57
+ */
58
+ export class TokenBucketRateLimiter {
59
+ private tokens: number;
60
+ private lastRefill: number;
61
+ private readonly maxTokens: number;
62
+ private readonly refillRate: number; // tokens per millisecond
63
+
64
+ constructor(config: RateLimiterConfig) {
65
+ this.maxTokens = config.burstCapacity || config.maxMessagesPerSecond;
66
+ this.refillRate = (config.refillRate || config.maxMessagesPerSecond) / 1000; // per ms
67
+ this.tokens = this.maxTokens;
68
+ this.lastRefill = Date.now();
69
+ }
70
+
71
+ /**
72
+ * Try to consume tokens (non-blocking)
73
+ */
74
+ tryConsume(count: number = 1): boolean {
75
+ this.refill();
76
+
77
+ if (this.tokens >= count) {
78
+ this.tokens -= count;
79
+ return true; // Allowed
80
+ }
81
+
82
+ return false; // Rate limit exceeded
83
+ }
84
+
85
+ /**
86
+ * Wait until tokens available (blocking)
87
+ */
88
+ async consume(count: number = 1): Promise<void> {
89
+ while (!this.tryConsume(count)) {
90
+ const waitMs = (count - this.tokens) / this.refillRate;
91
+ await this.sleep(Math.ceil(waitMs));
92
+ }
93
+ }
94
+
95
+ /**
96
+ * Refill tokens based on elapsed time
97
+ */
98
+ private refill(): void {
99
+ const now = Date.now();
100
+ const elapsed = now - this.lastRefill;
101
+ const newTokens = elapsed * this.refillRate;
102
+
103
+ this.tokens = Math.min(this.maxTokens, this.tokens + newTokens);
104
+ this.lastRefill = now;
105
+ }
106
+
107
+ /**
108
+ * Get current tokens available
109
+ */
110
+ getAvailableTokens(): number {
111
+ this.refill();
112
+ return Math.floor(this.tokens);
113
+ }
114
+
115
+ private sleep(ms: number): Promise<void> {
116
+ return new Promise((resolve) => setTimeout(resolve, ms));
117
+ }
118
+ }
119
+
120
+ /**
121
+ * Rate-Limited Producer
122
+ *
123
+ * Wraps kafkajs Producer with rate limiting
124
+ */
125
+ export class RateLimitedProducer {
126
+ private producer: Producer;
127
+ private rateLimiter: TokenBucketRateLimiter;
128
+ private byteRateLimiter?: TokenBucketRateLimiter;
129
+
130
+ constructor(producer: Producer, config: RateLimiterConfig) {
131
+ this.producer = producer;
132
+ this.rateLimiter = new TokenBucketRateLimiter(config);
133
+
134
+ if (config.maxBytesPerSecond) {
135
+ this.byteRateLimiter = new TokenBucketRateLimiter({
136
+ maxMessagesPerSecond: config.maxBytesPerSecond,
137
+ burstCapacity: config.maxBytesPerSecond * 2, // 2x burst
138
+ });
139
+ }
140
+ }
141
+
142
+ /**
143
+ * Send message with rate limiting
144
+ */
145
+ async send(params: {
146
+ topic: string;
147
+ messages: Array<{ key?: string; value: string }>;
148
+ }): Promise<void> {
149
+ const messageCount = params.messages.length;
150
+
151
+ // Rate limit by message count
152
+ await this.rateLimiter.consume(messageCount);
153
+
154
+ // Rate limit by bytes (if configured)
155
+ if (this.byteRateLimiter) {
156
+ const totalBytes = params.messages.reduce(
157
+ (sum, msg) => sum + (msg.value?.length || 0),
158
+ 0
159
+ );
160
+ await this.byteRateLimiter.consume(totalBytes);
161
+ }
162
+
163
+ // Send to Kafka
164
+ await this.producer.send(params);
165
+ }
166
+
167
+ /**
168
+ * Try send (non-blocking, returns false if rate limited)
169
+ */
170
+ trySend(params: {
171
+ topic: string;
172
+ messages: Array<{ key?: string; value: string }>;
173
+ }): boolean {
174
+ const messageCount = params.messages.length;
175
+
176
+ if (!this.rateLimiter.tryConsume(messageCount)) {
177
+ return false; // Rate limited
178
+ }
179
+
180
+ // Async send (fire-and-forget)
181
+ this.producer.send(params).catch((err) => {
182
+ console.error('Send failed:', err);
183
+ });
184
+
185
+ return true; // Accepted
186
+ }
187
+
188
+ /**
189
+ * Get current rate limit status
190
+ */
191
+ getStatus(): {
192
+ availableMessages: number;
193
+ availableBytes?: number;
194
+ } {
195
+ return {
196
+ availableMessages: this.rateLimiter.getAvailableTokens(),
197
+ availableBytes: this.byteRateLimiter?.getAvailableTokens(),
198
+ };
199
+ }
200
+ }
201
+
202
+ /**
203
+ * Backpressure Handler
204
+ *
205
+ * Handles consumer backpressure with different strategies
206
+ */
207
+ export class BackpressureHandler {
208
+ private strategy: BackpressureStrategy;
209
+ private buffer: Array<any> = [];
210
+ private maxBufferSize: number;
211
+ private droppedCount: number = 0;
212
+
213
+ constructor(strategy: BackpressureStrategy, maxBufferSize: number = 10000) {
214
+ this.strategy = strategy;
215
+ this.maxBufferSize = maxBufferSize;
216
+ }
217
+
218
+ /**
219
+ * Handle incoming message with backpressure
220
+ */
221
+ async handleMessage(
222
+ message: any,
223
+ processor: (msg: any) => Promise<void>
224
+ ): Promise<boolean> {
225
+ switch (this.strategy) {
226
+ case BackpressureStrategy.DROP:
227
+ return this.handleDrop(message, processor);
228
+
229
+ case BackpressureStrategy.BUFFER:
230
+ return this.handleBuffer(message, processor);
231
+
232
+ case BackpressureStrategy.THROTTLE:
233
+ return this.handleThrottle(message, processor);
234
+
235
+ case BackpressureStrategy.DYNAMIC:
236
+ return this.handleDynamic(message, processor);
237
+
238
+ default:
239
+ throw new Error(`Unknown backpressure strategy: ${this.strategy}`);
240
+ }
241
+ }
242
+
243
+ /**
244
+ * Drop strategy: Drop messages when buffer full
245
+ */
246
+ private async handleDrop(message: any, processor: (msg: any) => Promise<void>): Promise<boolean> {
247
+ if (this.buffer.length < this.maxBufferSize) {
248
+ this.buffer.push(message);
249
+ this.processBuffer(processor);
250
+ return true; // Accepted
251
+ } else {
252
+ this.droppedCount++;
253
+ console.warn(`Message dropped (backpressure). Total dropped: ${this.droppedCount}`);
254
+ return false; // Dropped
255
+ }
256
+ }
257
+
258
+ /**
259
+ * Buffer strategy: Buffer up to max size, then block
260
+ */
261
+ private async handleBuffer(message: any, processor: (msg: any) => Promise<void>): Promise<boolean> {
262
+ // Wait until buffer has space
263
+ while (this.buffer.length >= this.maxBufferSize) {
264
+ await this.sleep(100); // Wait 100ms
265
+ }
266
+
267
+ this.buffer.push(message);
268
+ this.processBuffer(processor);
269
+ return true;
270
+ }
271
+
272
+ /**
273
+ * Throttle strategy: Slow down producer by blocking
274
+ */
275
+ private async handleThrottle(message: any, processor: (msg: any) => Promise<void>): Promise<boolean> {
276
+ // Calculate delay based on buffer utilization
277
+ const utilizationPercent = (this.buffer.length / this.maxBufferSize) * 100;
278
+ const delayMs = utilizationPercent > 80 ? 1000 : utilizationPercent > 50 ? 100 : 0;
279
+
280
+ if (delayMs > 0) {
281
+ await this.sleep(delayMs);
282
+ }
283
+
284
+ this.buffer.push(message);
285
+ this.processBuffer(processor);
286
+ return true;
287
+ }
288
+
289
+ /**
290
+ * Dynamic strategy: Adapt based on buffer state
291
+ */
292
+ private async handleDynamic(message: any, processor: (msg: any) => Promise<void>): Promise<boolean> {
293
+ const utilization = this.buffer.length / this.maxBufferSize;
294
+
295
+ if (utilization < 0.5) {
296
+ // Low utilization: Accept immediately
297
+ this.buffer.push(message);
298
+ this.processBuffer(processor);
299
+ return true;
300
+ } else if (utilization < 0.9) {
301
+ // Medium utilization: Throttle
302
+ return this.handleThrottle(message, processor);
303
+ } else {
304
+ // High utilization: Drop
305
+ return this.handleDrop(message, processor);
306
+ }
307
+ }
308
+
309
+ /**
310
+ * Process buffered messages
311
+ */
312
+ private async processBuffer(processor: (msg: any) => Promise<void>): Promise<void> {
313
+ while (this.buffer.length > 0) {
314
+ const message = this.buffer.shift();
315
+ if (message) {
316
+ try {
317
+ await processor(message);
318
+ } catch (error) {
319
+ console.error('Processing failed:', error);
320
+ }
321
+ }
322
+ }
323
+ }
324
+
325
+ /**
326
+ * Get backpressure metrics
327
+ */
328
+ getMetrics(): {
329
+ bufferSize: number;
330
+ bufferUtilization: number;
331
+ droppedCount: number;
332
+ } {
333
+ return {
334
+ bufferSize: this.buffer.length,
335
+ bufferUtilization: (this.buffer.length / this.maxBufferSize) * 100,
336
+ droppedCount: this.droppedCount,
337
+ };
338
+ }
339
+
340
+ private sleep(ms: number): Promise<void> {
341
+ return new Promise((resolve) => setTimeout(resolve, ms));
342
+ }
343
+ }
344
+
345
+ /**
346
+ * Kafka Quota Manager
347
+ *
348
+ * Manages broker-level quotas via Admin API
349
+ */
350
+ export class KafkaQuotaManager {
351
+ /**
352
+ * Generate quota configuration script
353
+ */
354
+ static generateQuotaScript(quota: QuotaConfig): string {
355
+ const commands: string[] = [];
356
+
357
+ if (quota.producerQuota) {
358
+ commands.push(
359
+ `kafka-configs.sh --alter --add-config 'producer_byte_rate=${quota.producerQuota}' --entity-type clients --entity-name ${quota.clientId}`
360
+ );
361
+ }
362
+
363
+ if (quota.consumerQuota) {
364
+ commands.push(
365
+ `kafka-configs.sh --alter --add-config 'consumer_byte_rate=${quota.consumerQuota}' --entity-type clients --entity-name ${quota.clientId}`
366
+ );
367
+ }
368
+
369
+ if (quota.requestQuota) {
370
+ commands.push(
371
+ `kafka-configs.sh --alter --add-config 'request_percentage=${quota.requestQuota}' --entity-type clients --entity-name ${quota.clientId}`
372
+ );
373
+ }
374
+
375
+ return commands.join('\n');
376
+ }
377
+
378
+ /**
379
+ * Calculate recommended quotas
380
+ */
381
+ static calculateRecommendedQuotas(
382
+ expectedThroughputMBps: number,
383
+ clientCount: number,
384
+ headroomPercent: number = 20
385
+ ): {
386
+ producerQuota: number;
387
+ consumerQuota: number;
388
+ } {
389
+ // Add headroom
390
+ const targetThroughputMBps = expectedThroughputMBps * (1 + headroomPercent / 100);
391
+
392
+ // Convert to bytes/sec
393
+ const targetBytesPerSec = targetThroughputMBps * 1024 * 1024;
394
+
395
+ // Distribute across clients
396
+ const quotaPerClient = Math.ceil(targetBytesPerSec / clientCount);
397
+
398
+ return {
399
+ producerQuota: quotaPerClient,
400
+ consumerQuota: quotaPerClient * 2, // Consumers need 2x (read + fanout)
401
+ };
402
+ }
403
+ }
404
+
405
+ /**
406
+ * Example Usage: Rate-Limited Producer
407
+ *
408
+ * ```typescript
409
+ * const kafka = new Kafka({ brokers: ['localhost:9092'] });
410
+ * const producer = kafka.producer();
411
+ * await producer.connect();
412
+ *
413
+ * const rateLimitedProducer = new RateLimitedProducer(producer, {
414
+ * maxMessagesPerSecond: 1000,
415
+ * maxBytesPerSecond: 10 * 1024 * 1024, // 10 MB/s
416
+ * burstCapacity: 2000, // Allow bursts up to 2000 messages
417
+ * });
418
+ *
419
+ * // Rate-limited send
420
+ * await rateLimitedProducer.send({
421
+ * topic: 'high-volume-topic',
422
+ * messages: [{ value: 'message1' }, { value: 'message2' }],
423
+ * });
424
+ * ```
425
+ */
426
+
427
+ /**
428
+ * Example Usage: Backpressure Handler
429
+ *
430
+ * ```typescript
431
+ * const backpressure = new BackpressureHandler(
432
+ * BackpressureStrategy.DYNAMIC,
433
+ * 10000 // Max 10K buffered messages
434
+ * );
435
+ *
436
+ * await consumer.run({
437
+ * eachMessage: async ({ message }) => {
438
+ * await backpressure.handleMessage(message, async (msg) => {
439
+ * // Your processing logic
440
+ * await processMessage(msg);
441
+ * });
442
+ * },
443
+ * });
444
+ *
445
+ * // Monitor backpressure
446
+ * setInterval(() => {
447
+ * const metrics = backpressure.getMetrics();
448
+ * console.log(`Buffer: ${metrics.bufferUtilization.toFixed(1)}%`);
449
+ * }, 5000);
450
+ * ```
451
+ */
452
+
453
+ /**
454
+ * Rate Limiting & Backpressure Best Practices:
455
+ *
456
+ * **When to Use Rate Limiting**:
457
+ * - Protect downstream systems from overload
458
+ * - Comply with SLA/quotas
459
+ * - Prevent "thundering herd" problems
460
+ * - Smooth out traffic spikes
461
+ *
462
+ * **Rate Limiter Configuration**:
463
+ * - maxMessagesPerSecond: Set to 80% of target (20% headroom)
464
+ * - burstCapacity: 2x rate (handle short bursts)
465
+ * - Use token bucket (better than leaky bucket for bursts)
466
+ *
467
+ * **Backpressure Strategies**:
468
+ * - DROP: Real-time analytics (some loss OK)
469
+ * - BUFFER: Important data (no loss, accept latency)
470
+ * - THROTTLE: Flow control (slow down producer)
471
+ * - DYNAMIC: Adaptive (combine strategies)
472
+ *
473
+ * **Kafka Broker Quotas**:
474
+ * - producer_byte_rate: Limit producer throughput (bytes/sec)
475
+ * - consumer_byte_rate: Limit consumer throughput (bytes/sec)
476
+ * - request_percentage: Limit CPU/network time (%)
477
+ * - Apply per client-id or user
478
+ *
479
+ * **Monitoring**:
480
+ * - Rate limiter: Available tokens, wait time
481
+ * - Backpressure: Buffer utilization, dropped count
482
+ * - Broker quotas: Throttle time, quota violations
483
+ * - Consumer lag: Detect backpressure issues
484
+ *
485
+ * **Tuning**:
486
+ * - Start conservative (low limits)
487
+ * - Monitor throttle metrics
488
+ * - Gradually increase limits
489
+ * - Set alerts for quota violations
490
+ */
491
+
492
+ export default {
493
+ TokenBucketRateLimiter,
494
+ RateLimitedProducer,
495
+ BackpressureHandler,
496
+ KafkaQuotaManager,
497
+ BackpressureStrategy,
498
+ };