specweave 0.18.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +229 -1817
- package/README.md +68 -0
- package/bin/specweave.js +62 -6
- package/dist/locales/de/.gitkeep +0 -0
- package/dist/locales/de/cli.json +108 -0
- package/dist/locales/en/cli.json +287 -0
- package/dist/locales/en/errors.json +7 -0
- package/dist/locales/en/templates.json +6 -0
- package/dist/locales/es/.gitkeep +0 -0
- package/dist/locales/es/cli.json +41 -0
- package/dist/locales/fr/.gitkeep +0 -0
- package/dist/locales/fr/cli.json +108 -0
- package/dist/locales/ja/.gitkeep +0 -0
- package/dist/locales/ja/cli.json +108 -0
- package/dist/locales/ko/.gitkeep +0 -0
- package/dist/locales/ko/cli.json +108 -0
- package/dist/locales/pt/.gitkeep +0 -0
- package/dist/locales/pt/cli.json +108 -0
- package/dist/locales/ru/.gitkeep +0 -0
- package/dist/locales/ru/cli.json +269 -0
- package/dist/locales/zh/.gitkeep +0 -0
- package/dist/locales/zh/cli.json +108 -0
- package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts.map +1 -1
- package/dist/plugins/specweave/lib/hooks/sync-living-docs.js +3 -0
- package/dist/plugins/specweave/lib/hooks/sync-living-docs.js.map +1 -1
- package/dist/plugins/specweave/lib/hooks/update-ac-status.d.ts +21 -0
- package/dist/plugins/specweave/lib/hooks/update-ac-status.d.ts.map +1 -0
- package/dist/plugins/specweave/lib/hooks/update-ac-status.js +162 -0
- package/dist/plugins/specweave/lib/hooks/update-ac-status.js.map +1 -0
- package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.js +65 -6
- package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.js.map +1 -1
- package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.d.ts +25 -0
- package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.js +191 -0
- package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.js.map +1 -0
- package/dist/plugins/specweave-github/lib/completion-calculator.d.ts +112 -0
- package/dist/plugins/specweave-github/lib/completion-calculator.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/completion-calculator.js +301 -0
- package/dist/plugins/specweave-github/lib/completion-calculator.js.map +1 -0
- package/dist/plugins/specweave-github/lib/duplicate-detector.d.ts +3 -3
- package/dist/plugins/specweave-github/lib/duplicate-detector.js +3 -3
- package/dist/plugins/specweave-github/lib/epic-content-builder.d.ts +70 -0
- package/dist/plugins/specweave-github/lib/epic-content-builder.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/epic-content-builder.js +258 -0
- package/dist/plugins/specweave-github/lib/epic-content-builder.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-client-v2.d.ts +14 -0
- package/dist/plugins/specweave-github/lib/github-client-v2.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-client-v2.js +51 -0
- package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-epic-sync.d.ts +2 -2
- package/dist/plugins/specweave-github/lib/github-epic-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-epic-sync.js +20 -5
- package/dist/plugins/specweave-github/lib/github-epic-sync.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts +87 -0
- package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/github-feature-sync.js +412 -0
- package/dist/plugins/specweave-github/lib/github-feature-sync.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-spec-content-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-spec-content-sync.js +64 -13
- package/dist/plugins/specweave-github/lib/github-spec-content-sync.js.map +1 -1
- package/dist/plugins/specweave-github/lib/progress-comment-builder.d.ts +78 -0
- package/dist/plugins/specweave-github/lib/progress-comment-builder.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/progress-comment-builder.js +237 -0
- package/dist/plugins/specweave-github/lib/progress-comment-builder.js.map +1 -0
- package/dist/plugins/specweave-github/lib/user-story-content-builder.d.ts +97 -0
- package/dist/plugins/specweave-github/lib/user-story-content-builder.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/user-story-content-builder.js +301 -0
- package/dist/plugins/specweave-github/lib/user-story-content-builder.js.map +1 -0
- package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts +83 -0
- package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/user-story-issue-builder.js +386 -0
- package/dist/plugins/specweave-github/lib/user-story-issue-builder.js.map +1 -0
- package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts +28 -0
- package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js +156 -0
- package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js.map +1 -0
- package/dist/plugins/specweave-kafka/lib/cli/kcat-wrapper.d.ts +57 -0
- package/dist/plugins/specweave-kafka/lib/cli/kcat-wrapper.d.ts.map +1 -0
- package/dist/plugins/specweave-kafka/lib/cli/kcat-wrapper.js +248 -0
- package/dist/plugins/specweave-kafka/lib/cli/kcat-wrapper.js.map +1 -0
- package/dist/plugins/specweave-kafka/lib/cli/types.d.ts +82 -0
- package/dist/plugins/specweave-kafka/lib/cli/types.d.ts.map +1 -0
- package/dist/plugins/specweave-kafka/lib/cli/types.js +13 -0
- package/dist/plugins/specweave-kafka/lib/cli/types.js.map +1 -0
- package/dist/plugins/specweave-kafka/lib/mcp/detector.d.ts +49 -0
- package/dist/plugins/specweave-kafka/lib/mcp/detector.d.ts.map +1 -0
- package/dist/plugins/specweave-kafka/lib/mcp/detector.js +316 -0
- package/dist/plugins/specweave-kafka/lib/mcp/detector.js.map +1 -0
- package/dist/plugins/specweave-kafka/lib/mcp/types.d.ts +70 -0
- package/dist/plugins/specweave-kafka/lib/mcp/types.d.ts.map +1 -0
- package/dist/plugins/specweave-kafka/lib/mcp/types.js +23 -0
- package/dist/plugins/specweave-kafka/lib/mcp/types.js.map +1 -0
- package/dist/plugins/specweave-kafka/lib/utils/partitioning.d.ts +85 -0
- package/dist/plugins/specweave-kafka/lib/utils/partitioning.d.ts.map +1 -0
- package/dist/plugins/specweave-kafka/lib/utils/partitioning.js +281 -0
- package/dist/plugins/specweave-kafka/lib/utils/partitioning.js.map +1 -0
- package/dist/plugins/specweave-kafka/lib/utils/sizing.d.ts +75 -0
- package/dist/plugins/specweave-kafka/lib/utils/sizing.d.ts.map +1 -0
- package/dist/plugins/specweave-kafka/lib/utils/sizing.js +238 -0
- package/dist/plugins/specweave-kafka/lib/utils/sizing.js.map +1 -0
- package/dist/spec-parser.js +629 -0
- package/dist/src/cli/commands/import-docs.js +4 -4
- package/dist/src/cli/commands/import-docs.js.map +1 -1
- package/dist/src/cli/commands/init-multiproject.d.ts.map +1 -1
- package/dist/src/cli/commands/init-multiproject.js +17 -18
- package/dist/src/cli/commands/init-multiproject.js.map +1 -1
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +107 -3
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/migrate-to-multiproject.d.ts.map +1 -1
- package/dist/src/cli/commands/migrate-to-multiproject.js +8 -4
- package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -1
- package/dist/src/cli/commands/switch-project.d.ts.map +1 -1
- package/dist/src/cli/commands/switch-project.js +9 -26
- package/dist/src/cli/commands/switch-project.js.map +1 -1
- package/dist/src/cli/commands/sync-spec-content.js +3 -0
- package/dist/src/cli/commands/sync-spec-content.js.map +1 -1
- package/dist/src/core/deduplication/command-deduplicator.d.ts +166 -0
- package/dist/src/core/deduplication/command-deduplicator.d.ts.map +1 -0
- package/dist/src/core/deduplication/command-deduplicator.js +254 -0
- package/dist/src/core/deduplication/command-deduplicator.js.map +1 -0
- package/dist/src/core/increment/active-increment-manager.d.ts +42 -15
- package/dist/src/core/increment/active-increment-manager.d.ts.map +1 -1
- package/dist/src/core/increment/active-increment-manager.js +113 -46
- package/dist/src/core/increment/active-increment-manager.js.map +1 -1
- package/dist/src/core/increment/conflict-resolver.d.ts +40 -0
- package/dist/src/core/increment/conflict-resolver.d.ts.map +1 -0
- package/dist/src/core/increment/conflict-resolver.js +219 -0
- package/dist/src/core/increment/conflict-resolver.js.map +1 -0
- package/dist/src/core/increment/discipline-checker.d.ts.map +1 -1
- package/dist/src/core/increment/discipline-checker.js +7 -1
- package/dist/src/core/increment/discipline-checker.js.map +1 -1
- package/dist/src/core/increment/duplicate-detector.d.ts +52 -0
- package/dist/src/core/increment/duplicate-detector.d.ts.map +1 -0
- package/dist/src/core/increment/duplicate-detector.js +276 -0
- package/dist/src/core/increment/duplicate-detector.js.map +1 -0
- package/dist/src/core/increment/increment-archiver.d.ts +90 -0
- package/dist/src/core/increment/increment-archiver.d.ts.map +1 -0
- package/dist/src/core/increment/increment-archiver.js +368 -0
- package/dist/src/core/increment/increment-archiver.js.map +1 -0
- package/dist/src/core/increment/increment-reopener.d.ts +165 -0
- package/dist/src/core/increment/increment-reopener.d.ts.map +1 -0
- package/dist/src/core/increment/increment-reopener.js +390 -0
- package/dist/src/core/increment/increment-reopener.js.map +1 -0
- package/dist/src/core/increment/metadata-manager.d.ts +26 -1
- package/dist/src/core/increment/metadata-manager.d.ts.map +1 -1
- package/dist/src/core/increment/metadata-manager.js +143 -5
- package/dist/src/core/increment/metadata-manager.js.map +1 -1
- package/dist/src/core/increment/recent-work-scanner.d.ts +121 -0
- package/dist/src/core/increment/recent-work-scanner.d.ts.map +1 -0
- package/dist/src/core/increment/recent-work-scanner.js +303 -0
- package/dist/src/core/increment/recent-work-scanner.js.map +1 -0
- package/dist/src/core/increment/types.d.ts +1 -0
- package/dist/src/core/increment/types.d.ts.map +1 -1
- package/dist/src/core/increment-utils.d.ts +112 -0
- package/dist/src/core/increment-utils.d.ts.map +1 -0
- package/dist/src/core/increment-utils.js +210 -0
- package/dist/src/core/increment-utils.js.map +1 -0
- package/dist/src/core/living-docs/ac-project-specific-generator.d.ts +65 -0
- package/dist/src/core/living-docs/ac-project-specific-generator.d.ts.map +1 -0
- package/dist/src/core/living-docs/ac-project-specific-generator.js +175 -0
- package/dist/src/core/living-docs/ac-project-specific-generator.js.map +1 -0
- package/dist/src/core/living-docs/feature-archiver.d.ts +130 -0
- package/dist/src/core/living-docs/feature-archiver.d.ts.map +1 -0
- package/dist/src/core/living-docs/feature-archiver.js +549 -0
- package/dist/src/core/living-docs/feature-archiver.js.map +1 -0
- package/dist/src/core/living-docs/feature-id-manager.d.ts +81 -0
- package/dist/src/core/living-docs/feature-id-manager.d.ts.map +1 -0
- package/dist/src/core/living-docs/feature-id-manager.js +339 -0
- package/dist/src/core/living-docs/feature-id-manager.js.map +1 -0
- package/dist/src/core/living-docs/hierarchy-mapper.d.ts +144 -83
- package/dist/src/core/living-docs/hierarchy-mapper.d.ts.map +1 -1
- package/dist/src/core/living-docs/hierarchy-mapper.js +488 -270
- package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
- package/dist/src/core/living-docs/index.d.ts +6 -0
- package/dist/src/core/living-docs/index.d.ts.map +1 -1
- package/dist/src/core/living-docs/index.js +6 -0
- package/dist/src/core/living-docs/index.js.map +1 -1
- package/dist/src/core/living-docs/project-detector.d.ts +6 -0
- package/dist/src/core/living-docs/project-detector.d.ts.map +1 -1
- package/dist/src/core/living-docs/project-detector.js +35 -1
- package/dist/src/core/living-docs/project-detector.js.map +1 -1
- package/dist/src/core/living-docs/spec-distributor.d.ts +100 -26
- package/dist/src/core/living-docs/spec-distributor.d.ts.map +1 -1
- package/dist/src/core/living-docs/spec-distributor.js +1275 -258
- package/dist/src/core/living-docs/spec-distributor.js.map +1 -1
- package/dist/src/core/living-docs/task-project-specific-generator.d.ts +109 -0
- package/dist/src/core/living-docs/task-project-specific-generator.d.ts.map +1 -0
- package/dist/src/core/living-docs/task-project-specific-generator.js +221 -0
- package/dist/src/core/living-docs/task-project-specific-generator.js.map +1 -0
- package/dist/src/core/living-docs/types.d.ts +143 -0
- package/dist/src/core/living-docs/types.d.ts.map +1 -1
- package/dist/src/core/project-manager.d.ts +2 -17
- package/dist/src/core/project-manager.d.ts.map +1 -1
- package/dist/src/core/project-manager.js +68 -48
- package/dist/src/core/project-manager.js.map +1 -1
- package/dist/src/core/spec-content-sync.d.ts +1 -1
- package/dist/src/core/spec-content-sync.d.ts.map +1 -1
- package/dist/src/core/sync/enhanced-content-builder.d.ts +32 -54
- package/dist/src/core/sync/enhanced-content-builder.d.ts.map +1 -1
- package/dist/src/core/sync/enhanced-content-builder.js +142 -138
- package/dist/src/core/sync/enhanced-content-builder.js.map +1 -1
- package/dist/src/core/sync/performance-optimizer.d.ts +153 -0
- package/dist/src/core/sync/performance-optimizer.d.ts.map +1 -0
- package/dist/src/core/sync/performance-optimizer.js +220 -0
- package/dist/src/core/sync/performance-optimizer.js.map +1 -0
- package/dist/src/core/sync/retry-handler.d.ts +98 -0
- package/dist/src/core/sync/retry-handler.d.ts.map +1 -0
- package/dist/src/core/sync/retry-handler.js +196 -0
- package/dist/src/core/sync/retry-handler.js.map +1 -0
- package/dist/src/core/sync/spec-content-sync.d.ts +88 -0
- package/dist/src/core/sync/spec-content-sync.d.ts.map +1 -0
- package/dist/src/core/sync/spec-content-sync.js +5 -0
- package/dist/src/core/sync/spec-content-sync.js.map +1 -0
- package/dist/src/core/sync/types.d.ts +52 -0
- package/dist/src/core/sync/types.d.ts.map +1 -0
- package/dist/src/core/sync/types.js +5 -0
- package/dist/src/core/sync/types.js.map +1 -0
- package/dist/src/core/types/config.d.ts +125 -0
- package/dist/src/core/types/config.d.ts.map +1 -1
- package/dist/src/core/types/config.js +25 -0
- package/dist/src/core/types/config.js.map +1 -1
- package/dist/src/core/types/increment-metadata.d.ts +10 -0
- package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
- package/dist/src/core/types/increment-metadata.js +10 -1
- package/dist/src/core/types/increment-metadata.js.map +1 -1
- package/dist/src/integrations/jira/jira-incremental-mapper.d.ts.map +1 -1
- package/dist/src/integrations/jira/jira-incremental-mapper.js +4 -8
- package/dist/src/integrations/jira/jira-incremental-mapper.js.map +1 -1
- package/dist/src/integrations/jira/jira-mapper.d.ts.map +1 -1
- package/dist/src/integrations/jira/jira-mapper.js +4 -8
- package/dist/src/integrations/jira/jira-mapper.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +1 -1
- package/plugins/specweave/COMMANDS.md +13 -4
- package/plugins/specweave/agents/pm/AGENT.md +159 -12
- package/plugins/specweave/commands/specweave-abandon.md +22 -20
- package/plugins/specweave/commands/specweave-archive-features.md +121 -0
- package/plugins/specweave/commands/specweave-archive-increments.md +82 -0
- package/plugins/specweave/commands/specweave-archive.md +363 -0
- package/plugins/specweave/commands/specweave-backlog.md +211 -0
- package/plugins/specweave/commands/specweave-fix-duplicates.md +517 -0
- package/plugins/specweave/commands/specweave-increment.md +4 -3
- package/plugins/specweave/commands/specweave-progress.md +176 -27
- package/plugins/specweave/commands/specweave-reopen.md +391 -0
- package/plugins/specweave/commands/specweave-restore-feature.md +90 -0
- package/plugins/specweave/commands/specweave-restore.md +309 -0
- package/plugins/specweave/commands/specweave-resume.md +51 -23
- package/plugins/specweave/commands/specweave-status.md +41 -7
- package/plugins/specweave/commands/specweave-sync-specs.md +425 -0
- package/plugins/specweave/commands/specweave.md +70 -405
- package/plugins/specweave/hooks/hooks.json +4 -0
- package/plugins/specweave/hooks/lib/sync-spec-content.sh +2 -2
- package/plugins/specweave/hooks/post-increment-planning.sh +26 -2
- package/plugins/specweave/hooks/post-task-completion.sh +39 -0
- package/plugins/specweave/hooks/pre-command-deduplication.sh +83 -0
- package/plugins/specweave/hooks/user-prompt-submit.sh +1 -1
- package/plugins/specweave/lib/hooks/sync-living-docs.js +2 -0
- package/plugins/specweave/lib/hooks/sync-living-docs.ts +4 -0
- package/plugins/specweave/lib/hooks/update-ac-status.js +102 -0
- package/plugins/specweave/lib/hooks/update-ac-status.ts +192 -0
- package/plugins/specweave/skills/archive-increments/SKILL.md +198 -0
- package/plugins/specweave/skills/increment-planner/scripts/feature-utils.js +14 -0
- package/plugins/specweave/skills/smart-reopen-detector/SKILL.md +244 -0
- package/plugins/specweave-ado/lib/ado-spec-content-sync.js +49 -5
- package/plugins/specweave-ado/lib/ado-spec-content-sync.ts +72 -6
- package/plugins/specweave-ado/lib/enhanced-ado-sync.js +170 -0
- package/plugins/specweave-confluent/.claude-plugin/plugin.json +23 -0
- package/plugins/specweave-confluent/README.md +375 -0
- package/plugins/specweave-confluent/agents/confluent-architect/AGENT.md +306 -0
- package/plugins/specweave-confluent/skills/confluent-kafka-connect/SKILL.md +453 -0
- package/plugins/specweave-confluent/skills/confluent-ksqldb/SKILL.md +470 -0
- package/plugins/specweave-confluent/skills/confluent-schema-registry/SKILL.md +316 -0
- package/plugins/specweave-github/agents/github-task-splitter/AGENT.md +2 -2
- package/plugins/specweave-github/agents/user-story-updater/AGENT.md +148 -0
- package/plugins/specweave-github/commands/specweave-github-cleanup-duplicates.md +1 -1
- package/plugins/specweave-github/commands/specweave-github-update-user-story.md +156 -0
- package/plugins/specweave-github/hooks/post-task-completion.sh +42 -9
- package/plugins/specweave-github/lib/completion-calculator.js +262 -0
- package/plugins/specweave-github/lib/completion-calculator.ts +434 -0
- package/plugins/specweave-github/lib/duplicate-detector.js +3 -3
- package/plugins/specweave-github/lib/duplicate-detector.ts +4 -4
- package/plugins/specweave-github/lib/epic-content-builder.js +265 -0
- package/plugins/specweave-github/lib/epic-content-builder.ts +376 -0
- package/plugins/specweave-github/lib/github-client-v2.js +49 -0
- package/plugins/specweave-github/lib/github-client-v2.ts +59 -0
- package/plugins/specweave-github/lib/github-epic-sync.js +23 -24
- package/plugins/specweave-github/lib/github-epic-sync.ts +30 -5
- package/plugins/specweave-github/lib/github-feature-sync.js +381 -0
- package/plugins/specweave-github/lib/github-feature-sync.ts +568 -0
- package/plugins/specweave-github/lib/github-spec-content-sync.js +40 -10
- package/plugins/specweave-github/lib/github-spec-content-sync.ts +82 -14
- package/plugins/specweave-github/lib/progress-comment-builder.js +229 -0
- package/plugins/specweave-github/lib/progress-comment-builder.ts +324 -0
- package/plugins/specweave-github/lib/user-story-content-builder.js +299 -0
- package/plugins/specweave-github/lib/user-story-content-builder.ts +413 -0
- package/plugins/specweave-github/lib/user-story-issue-builder.js +344 -0
- package/plugins/specweave-github/lib/user-story-issue-builder.ts +543 -0
- package/plugins/specweave-github/skills/github-issue-standard/SKILL.md +189 -0
- package/plugins/specweave-jira/lib/enhanced-jira-sync.js +134 -0
- package/plugins/specweave-jira/lib/{enhanced-jira-sync.ts.disabled → enhanced-jira-sync.ts} +26 -52
- package/plugins/specweave-kafka/.claude-plugin/plugin.json +26 -0
- package/plugins/specweave-kafka/IMPLEMENTATION-COMPLETE.md +483 -0
- package/plugins/specweave-kafka/README.md +242 -0
- package/plugins/specweave-kafka/agents/kafka-architect/AGENT.md +235 -0
- package/plugins/specweave-kafka/agents/kafka-devops/AGENT.md +209 -0
- package/plugins/specweave-kafka/agents/kafka-observability/AGENT.md +266 -0
- package/plugins/specweave-kafka/commands/deploy.md +99 -0
- package/plugins/specweave-kafka/commands/dev-env.md +176 -0
- package/plugins/specweave-kafka/commands/mcp-configure.md +101 -0
- package/plugins/specweave-kafka/commands/monitor-setup.md +96 -0
- package/plugins/specweave-kafka/docker/kafka-local/docker-compose.yml +187 -0
- package/plugins/specweave-kafka/docker/redpanda/docker-compose.yml +199 -0
- package/plugins/specweave-kafka/docker/templates/consumer-nodejs.js +225 -0
- package/plugins/specweave-kafka/docker/templates/consumer-python.py +220 -0
- package/plugins/specweave-kafka/docker/templates/producer-nodejs.js +168 -0
- package/plugins/specweave-kafka/docker/templates/producer-python.py +167 -0
- package/plugins/specweave-kafka/lib/adapters/apache-kafka-adapter.js +438 -0
- package/plugins/specweave-kafka/lib/adapters/apache-kafka-adapter.ts +541 -0
- package/plugins/specweave-kafka/lib/adapters/platform-adapter.js +47 -0
- package/plugins/specweave-kafka/lib/adapters/platform-adapter.ts +343 -0
- package/plugins/specweave-kafka/lib/cli/kcat-wrapper.js +258 -0
- package/plugins/specweave-kafka/lib/cli/kcat-wrapper.ts +298 -0
- package/plugins/specweave-kafka/lib/cli/types.js +10 -0
- package/plugins/specweave-kafka/lib/cli/types.ts +92 -0
- package/plugins/specweave-kafka/lib/connectors/connector-catalog.js +305 -0
- package/plugins/specweave-kafka/lib/connectors/connector-catalog.ts +528 -0
- package/plugins/specweave-kafka/lib/documentation/diagram-generator.js +114 -0
- package/plugins/specweave-kafka/lib/documentation/diagram-generator.ts +195 -0
- package/plugins/specweave-kafka/lib/documentation/exporter.js +210 -0
- package/plugins/specweave-kafka/lib/documentation/exporter.ts +338 -0
- package/plugins/specweave-kafka/lib/documentation/schema-catalog-generator.js +60 -0
- package/plugins/specweave-kafka/lib/documentation/schema-catalog-generator.ts +130 -0
- package/plugins/specweave-kafka/lib/documentation/topology-generator.js +143 -0
- package/plugins/specweave-kafka/lib/documentation/topology-generator.ts +290 -0
- package/plugins/specweave-kafka/lib/mcp/detector.js +298 -0
- package/plugins/specweave-kafka/lib/mcp/detector.ts +352 -0
- package/plugins/specweave-kafka/lib/mcp/types.js +21 -0
- package/plugins/specweave-kafka/lib/mcp/types.ts +77 -0
- package/plugins/specweave-kafka/lib/multi-cluster/cluster-config-manager.js +193 -0
- package/plugins/specweave-kafka/lib/multi-cluster/cluster-config-manager.ts +362 -0
- package/plugins/specweave-kafka/lib/multi-cluster/cluster-switcher.js +188 -0
- package/plugins/specweave-kafka/lib/multi-cluster/cluster-switcher.ts +359 -0
- package/plugins/specweave-kafka/lib/multi-cluster/health-aggregator.js +195 -0
- package/plugins/specweave-kafka/lib/multi-cluster/health-aggregator.ts +380 -0
- package/plugins/specweave-kafka/lib/observability/opentelemetry-kafka.js +209 -0
- package/plugins/specweave-kafka/lib/observability/opentelemetry-kafka.ts +358 -0
- package/plugins/specweave-kafka/lib/patterns/advanced-ksqldb-patterns.js +354 -0
- package/plugins/specweave-kafka/lib/patterns/advanced-ksqldb-patterns.ts +563 -0
- package/plugins/specweave-kafka/lib/patterns/circuit-breaker-resilience.js +259 -0
- package/plugins/specweave-kafka/lib/patterns/circuit-breaker-resilience.ts +516 -0
- package/plugins/specweave-kafka/lib/patterns/dead-letter-queue.js +233 -0
- package/plugins/specweave-kafka/lib/patterns/dead-letter-queue.ts +423 -0
- package/plugins/specweave-kafka/lib/patterns/exactly-once-semantics.js +266 -0
- package/plugins/specweave-kafka/lib/patterns/exactly-once-semantics.ts +445 -0
- package/plugins/specweave-kafka/lib/patterns/flink-kafka-integration.js +312 -0
- package/plugins/specweave-kafka/lib/patterns/flink-kafka-integration.ts +561 -0
- package/plugins/specweave-kafka/lib/patterns/multi-dc-replication.js +289 -0
- package/plugins/specweave-kafka/lib/patterns/multi-dc-replication.ts +607 -0
- package/plugins/specweave-kafka/lib/patterns/rate-limiting-backpressure.js +264 -0
- package/plugins/specweave-kafka/lib/patterns/rate-limiting-backpressure.ts +498 -0
- package/plugins/specweave-kafka/lib/patterns/stream-processing-optimization.js +263 -0
- package/plugins/specweave-kafka/lib/patterns/stream-processing-optimization.ts +549 -0
- package/plugins/specweave-kafka/lib/patterns/tiered-storage-compaction.js +205 -0
- package/plugins/specweave-kafka/lib/patterns/tiered-storage-compaction.ts +399 -0
- package/plugins/specweave-kafka/lib/performance/performance-optimizer.js +249 -0
- package/plugins/specweave-kafka/lib/performance/performance-optimizer.ts +427 -0
- package/plugins/specweave-kafka/lib/security/kafka-security.js +252 -0
- package/plugins/specweave-kafka/lib/security/kafka-security.ts +494 -0
- package/plugins/specweave-kafka/lib/utils/capacity-planner.js +203 -0
- package/plugins/specweave-kafka/lib/utils/capacity-planner.ts +469 -0
- package/plugins/specweave-kafka/lib/utils/config-validator.js +419 -0
- package/plugins/specweave-kafka/lib/utils/config-validator.ts +564 -0
- package/plugins/specweave-kafka/lib/utils/partitioning.js +329 -0
- package/plugins/specweave-kafka/lib/utils/partitioning.ts +473 -0
- package/plugins/specweave-kafka/lib/utils/sizing.js +221 -0
- package/plugins/specweave-kafka/lib/utils/sizing.ts +374 -0
- package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-broker-metrics.json +628 -0
- package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-cluster-overview.json +564 -0
- package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-consumer-lag.json +509 -0
- package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-jvm-metrics.json +674 -0
- package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-topic-metrics.json +578 -0
- package/plugins/specweave-kafka/monitoring/grafana/provisioning/dashboards/kafka.yml +17 -0
- package/plugins/specweave-kafka/monitoring/grafana/provisioning/datasources/prometheus.yml +17 -0
- package/plugins/specweave-kafka/monitoring/prometheus/kafka-alerts.yml +415 -0
- package/plugins/specweave-kafka/monitoring/prometheus/kafka-jmx-exporter.yml +256 -0
- package/plugins/specweave-kafka/package.json +41 -0
- package/plugins/specweave-kafka/skills/kafka-architecture/SKILL.md +647 -0
- package/plugins/specweave-kafka/skills/kafka-cli-tools/SKILL.md +433 -0
- package/plugins/specweave-kafka/skills/kafka-iac-deployment/SKILL.md +449 -0
- package/plugins/specweave-kafka/skills/kafka-kubernetes/SKILL.md +667 -0
- package/plugins/specweave-kafka/skills/kafka-mcp-integration/SKILL.md +273 -0
- package/plugins/specweave-kafka/skills/kafka-observability/SKILL.md +576 -0
- package/plugins/specweave-kafka/templates/config/broker-production.properties +254 -0
- package/plugins/specweave-kafka/templates/config/consumer-low-latency.properties +112 -0
- package/plugins/specweave-kafka/templates/config/producer-high-throughput.properties +120 -0
- package/plugins/specweave-kafka/templates/migration/mirrormaker2-config.properties +234 -0
- package/plugins/specweave-kafka/templates/monitoring/grafana/multi-cluster-dashboard.json +686 -0
- package/plugins/specweave-kafka/terraform/apache-kafka/main.tf +347 -0
- package/plugins/specweave-kafka/terraform/apache-kafka/outputs.tf +107 -0
- package/plugins/specweave-kafka/terraform/apache-kafka/templates/kafka-broker-init.sh.tpl +216 -0
- package/plugins/specweave-kafka/terraform/apache-kafka/variables.tf +156 -0
- package/plugins/specweave-kafka/terraform/aws-msk/main.tf +362 -0
- package/plugins/specweave-kafka/terraform/aws-msk/outputs.tf +93 -0
- package/plugins/specweave-kafka/terraform/aws-msk/templates/server.properties.tpl +32 -0
- package/plugins/specweave-kafka/terraform/aws-msk/variables.tf +235 -0
- package/plugins/specweave-kafka/terraform/azure-event-hubs/main.tf +281 -0
- package/plugins/specweave-kafka/terraform/azure-event-hubs/outputs.tf +118 -0
- package/plugins/specweave-kafka/terraform/azure-event-hubs/variables.tf +148 -0
- package/plugins/specweave-kafka/tsconfig.json +21 -0
- package/plugins/specweave-kafka-streams/.claude-plugin/plugin.json +23 -0
- package/plugins/specweave-kafka-streams/README.md +310 -0
- package/plugins/specweave-kafka-streams/skills/kafka-streams-topology/SKILL.md +539 -0
- package/plugins/specweave-n8n/.claude-plugin/plugin.json +22 -0
- package/plugins/specweave-n8n/README.md +354 -0
- package/plugins/specweave-n8n/skills/n8n-kafka-workflows/SKILL.md +504 -0
- package/plugins/specweave-release/commands/specweave-release-platform.md +1 -1
- package/plugins/specweave-release/hooks/post-task-completion.sh +2 -2
- package/src/templates/AGENTS.md.template +601 -7
- package/src/templates/CLAUDE.md.template +188 -88
- package/plugins/specweave-ado/commands/specweave-ado-sync-spec.md +0 -255
- package/plugins/specweave-github/commands/specweave-github-sync-epic.md +0 -248
- package/plugins/specweave-github/commands/specweave-github-sync-from.md +0 -147
- package/plugins/specweave-github/commands/specweave-github-sync-spec.md +0 -208
- package/plugins/specweave-github/commands/specweave-github-sync-tasks.md +0 -530
- package/plugins/specweave-jira/commands/specweave-jira-sync-epic.md +0 -267
- package/plugins/specweave-jira/commands/specweave-jira-sync-spec.md +0 -240
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: kafka-observability
|
|
3
|
+
description: Kafka observability and monitoring specialist. Expert in Prometheus, Grafana, alerting, SLOs, distributed tracing, performance metrics, and troubleshooting production issues.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Kafka Observability Agent
|
|
7
|
+
|
|
8
|
+
I'm a specialized observability agent with deep expertise in monitoring, alerting, and troubleshooting Apache Kafka in production.
|
|
9
|
+
|
|
10
|
+
## My Expertise
|
|
11
|
+
|
|
12
|
+
### Monitoring Infrastructure
|
|
13
|
+
- **Prometheus + Grafana**: JMX exporter, custom dashboards, recording rules
|
|
14
|
+
- **Metrics Collection**: Broker, topic, consumer, JVM, OS metrics
|
|
15
|
+
- **Distributed Tracing**: OpenTelemetry integration for end-to-end visibility
|
|
16
|
+
- **Log Aggregation**: ELK, Datadog, CloudWatch integration
|
|
17
|
+
|
|
18
|
+
### Alerting & SLOs
|
|
19
|
+
- **Alert Design**: Critical vs warning, actionable alerts, reduce noise
|
|
20
|
+
- **SLO Definition**: Availability, latency, throughput targets
|
|
21
|
+
- **On-Call Runbooks**: Step-by-step remediation for common incidents
|
|
22
|
+
- **Escalation Policies**: When to page, when to auto-remediate
|
|
23
|
+
|
|
24
|
+
### Performance Analysis
|
|
25
|
+
- **Latency Profiling**: Produce latency, fetch latency, end-to-end latency
|
|
26
|
+
- **Throughput Optimization**: Identify bottlenecks, scale appropriately
|
|
27
|
+
- **Resource Utilization**: CPU, memory, disk I/O, network bandwidth
|
|
28
|
+
- **Consumer Lag Analysis**: Root cause analysis, scaling recommendations
|
|
29
|
+
|
|
30
|
+
## When to Invoke Me
|
|
31
|
+
|
|
32
|
+
I activate for:
|
|
33
|
+
- **Monitoring setup**: "Configure Prometheus for Kafka", "create Grafana dashboards"
|
|
34
|
+
- **Alert configuration**: "Set up critical alerts", "SLO for 99.9% availability"
|
|
35
|
+
- **Troubleshooting**: "High latency", "consumer lag spiking", "broker CPU at 100%"
|
|
36
|
+
- **Performance analysis**: "Why is Kafka slow?", "optimize throughput", "reduce latency"
|
|
37
|
+
- **Incident response**: "Under-replicated partitions", "offline partitions", "broker down"
|
|
38
|
+
|
|
39
|
+
## My Tools
|
|
40
|
+
|
|
41
|
+
**Dashboards**:
|
|
42
|
+
- kafka-cluster-overview: Cluster health, throughput, ISR changes
|
|
43
|
+
- kafka-broker-metrics: CPU, memory, network, request handlers
|
|
44
|
+
- kafka-consumer-lag: Lag per group/topic, offset tracking
|
|
45
|
+
- kafka-topic-metrics: Partition count, replication, log size
|
|
46
|
+
- kafka-jvm-metrics: Heap, GC, threads, file descriptors
|
|
47
|
+
|
|
48
|
+
**Alerting Rules** (14 alerts):
|
|
49
|
+
- CRITICAL: Under-replicated partitions, offline partitions, no controller, unclean leader elections
|
|
50
|
+
- HIGH: Consumer lag, ISR shrinks, leader election rate
|
|
51
|
+
- WARNING: CPU, memory, GC time, disk usage, file descriptors
|
|
52
|
+
|
|
53
|
+
## Example Workflows
|
|
54
|
+
|
|
55
|
+
### Workflow 1: Set Up Complete Monitoring Stack
|
|
56
|
+
```
|
|
57
|
+
User: "Set up monitoring for Kafka cluster on Kubernetes"
|
|
58
|
+
|
|
59
|
+
Me:
|
|
60
|
+
1. JMX Exporter Configuration:
|
|
61
|
+
- Create ConfigMap with kafka-jmx-exporter.yml
|
|
62
|
+
- Add to Kafka CR: metricsConfig.type=jmxPrometheusExporter
|
|
63
|
+
- Metrics exposed on port 9404 (Strimzi default)
|
|
64
|
+
|
|
65
|
+
2. Prometheus Integration:
|
|
66
|
+
- Create PodMonitor for Kafka pods
|
|
67
|
+
- Scrape interval: 30s
|
|
68
|
+
- Target: strimzi.io/kind=Kafka pods
|
|
69
|
+
|
|
70
|
+
3. Grafana Dashboard Provisioning:
|
|
71
|
+
- Create ConfigMaps for 5 dashboards
|
|
72
|
+
- Label with grafana_dashboard=1
|
|
73
|
+
- Auto-import within 60 seconds
|
|
74
|
+
|
|
75
|
+
4. Alerting Rules:
|
|
76
|
+
- Deploy PrometheusRule with 14 alerts
|
|
77
|
+
- Configure Alertmanager for Slack/PagerDuty
|
|
78
|
+
- Test: Stop a broker, verify alert fires
|
|
79
|
+
|
|
80
|
+
5. Verification:
|
|
81
|
+
- Open Grafana (kubectl port-forward 3000:80)
|
|
82
|
+
- Check metrics: kafka_server_broker_topic_metrics_bytesin_total
|
|
83
|
+
- View dashboards: Cluster Overview, Broker Metrics, Consumer Lag
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Workflow 2: Troubleshoot High Consumer Lag
|
|
87
|
+
```
|
|
88
|
+
User: "Consumer group 'orders-processor' has 50K messages lag, why?"
|
|
89
|
+
|
|
90
|
+
Me:
|
|
91
|
+
1. Immediate Metrics Check:
|
|
92
|
+
- kafka_consumergroup_lag{consumergroup="orders-processor"} = 50,000
|
|
93
|
+
- kafka_consumergroup_current_offset (where are consumers?)
|
|
94
|
+
- kafka_consumergroup_log_end_offset (where are producers?)
|
|
95
|
+
|
|
96
|
+
2. Consumer Health Check:
|
|
97
|
+
- kafka_consumergroup_members = ? (how many active consumers?)
|
|
98
|
+
- Partition count = 12
|
|
99
|
+
- Expected: 12 consumers (1 per partition)
|
|
100
|
+
- If < 12 → Scale up consumers
|
|
101
|
+
|
|
102
|
+
3. Processing Time Analysis:
|
|
103
|
+
- Check application metrics: message processing time
|
|
104
|
+
- If > 100ms → Optimize processing logic
|
|
105
|
+
- If database calls → Add caching, connection pooling
|
|
106
|
+
|
|
107
|
+
4. Producer Rate vs Consumer Rate:
|
|
108
|
+
- Producer: rate(kafka_topic_partition_current_offset[5m]) = 500 msg/sec
|
|
109
|
+
- Consumer: rate(kafka_consumergroup_current_offset[5m]) = 200 msg/sec
|
|
110
|
+
- Gap: 300 msg/sec → Consumers too slow!
|
|
111
|
+
|
|
112
|
+
5. Remediation Options:
|
|
113
|
+
a. Scale consumers: 12 → 24 (but limited by 12 partitions)
|
|
114
|
+
b. Increase partitions: 12 → 24 (allows more consumers)
|
|
115
|
+
c. Optimize processing: Reduce per-message latency
|
|
116
|
+
d. Batch processing: Process 10 messages at once
|
|
117
|
+
|
|
118
|
+
6. Long-term Fix:
|
|
119
|
+
- Increase partitions (requires re-partitioning)
|
|
120
|
+
- Optimize consumer code (reduce latency)
|
|
121
|
+
- Add more consumer instances
|
|
122
|
+
- Monitor: kafka_consumergroup_lag < 1000 (SLO)
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Workflow 3: Investigate Broker Performance Degradation
|
|
126
|
+
```
|
|
127
|
+
User: "Broker CPU spiked to 100%, latency increased, what's wrong?"
|
|
128
|
+
|
|
129
|
+
Me:
|
|
130
|
+
1. Metrics Timeline Analysis:
|
|
131
|
+
- os_process_cpu_load{instance="kafka-broker-2"} = 1.0 (100%)
|
|
132
|
+
- kafka_network_request_metrics_totaltime_total{request="Produce"} spike
|
|
133
|
+
- kafka_server_request_handler_avg_idle_percent = 0.05 (95% busy!)
|
|
134
|
+
|
|
135
|
+
2. Correlation Check (find root cause):
|
|
136
|
+
- kafka_server_broker_topic_metrics_messagesin_total → No spike
|
|
137
|
+
- kafka_log_flush_time_ms_p99 → Spike from 10ms to 500ms (disk I/O issue!)
|
|
138
|
+
- iostat (via node exporter) → Disk queue depth = 50 (saturation)
|
|
139
|
+
|
|
140
|
+
3. Root Cause Identified: Disk I/O Saturation
|
|
141
|
+
- Likely cause: Log flush taking too long
|
|
142
|
+
- Check: log.flush.interval.messages and log.flush.interval.ms
|
|
143
|
+
|
|
144
|
+
4. Immediate Mitigation:
|
|
145
|
+
- Check disk health: SMART errors?
|
|
146
|
+
- Check IOPS limits: GP2 exhausted? Upgrade to GP3
|
|
147
|
+
- Increase provisioned IOPS: 3000 → 10,000
|
|
148
|
+
|
|
149
|
+
5. Configuration Tuning:
|
|
150
|
+
- Increase log.flush.interval.messages (flush less frequently)
|
|
151
|
+
- Reduce log.segment.bytes (smaller segments = less data per flush)
|
|
152
|
+
- Use faster storage class (io2 for critical production)
|
|
153
|
+
|
|
154
|
+
6. Monitoring:
|
|
155
|
+
- Set alert: kafka_log_flush_time_ms_p99 > 100ms for 5m
|
|
156
|
+
- Track: iostat iowait% < 20% (SLO)
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Critical Metrics I Monitor
|
|
160
|
+
|
|
161
|
+
### Cluster Health
|
|
162
|
+
- `kafka_controller_active_controller_count` = 1 (exactly one)
|
|
163
|
+
- `kafka_server_replica_manager_under_replicated_partitions` = 0
|
|
164
|
+
- `kafka_controller_offline_partitions_count` = 0
|
|
165
|
+
- `kafka_controller_unclean_leader_elections_total` = 0
|
|
166
|
+
|
|
167
|
+
### Broker Performance
|
|
168
|
+
- `os_process_cpu_load` < 0.8 (80% CPU)
|
|
169
|
+
- `jvm_memory_heap_used_bytes / jvm_memory_heap_max_bytes` < 0.85 (85% heap)
|
|
170
|
+
- `kafka_server_request_handler_avg_idle_percent` > 0.3 (30% idle)
|
|
171
|
+
- `os_open_file_descriptors / os_max_file_descriptors` < 0.8 (80% FD)
|
|
172
|
+
|
|
173
|
+
### Throughput & Latency
|
|
174
|
+
- `kafka_server_broker_topic_metrics_bytesin_total` (bytes in/sec)
|
|
175
|
+
- `kafka_server_broker_topic_metrics_bytesout_total` (bytes out/sec)
|
|
176
|
+
- `kafka_network_request_metrics_totaltime_total{request="Produce"}` (produce latency)
|
|
177
|
+
- `kafka_network_request_metrics_totaltime_total{request="FetchConsumer"}` (fetch latency)
|
|
178
|
+
|
|
179
|
+
### Consumer Lag
|
|
180
|
+
- `kafka_consumergroup_lag` < 1000 messages (SLO)
|
|
181
|
+
- `rate(kafka_consumergroup_current_offset[5m])` = consumer throughput
|
|
182
|
+
- `rate(kafka_topic_partition_current_offset[5m])` = producer throughput
|
|
183
|
+
|
|
184
|
+
### JVM Health
|
|
185
|
+
- `jvm_gc_collection_time_ms_total` < 500ms/sec (GC time)
|
|
186
|
+
- `jvm_threads_count` < 500 (thread count)
|
|
187
|
+
- `rate(jvm_gc_collection_count_total[5m])` < 1/sec (GC frequency)
|
|
188
|
+
|
|
189
|
+
## Alerting Best Practices
|
|
190
|
+
|
|
191
|
+
### Alert Severity Levels
|
|
192
|
+
|
|
193
|
+
**CRITICAL** (Page On-Call Immediately):
|
|
194
|
+
- Under-replicated partitions > 0 for 5 minutes
|
|
195
|
+
- Offline partitions > 0 for 1 minute
|
|
196
|
+
- No active controller for 1 minute
|
|
197
|
+
- Unclean leader elections > 0
|
|
198
|
+
|
|
199
|
+
**HIGH** (Notify During Business Hours):
|
|
200
|
+
- Consumer lag > 10,000 messages for 10 minutes
|
|
201
|
+
- ISR shrinks > 5/sec for 5 minutes
|
|
202
|
+
- Leader election rate > 0.5/sec for 5 minutes
|
|
203
|
+
|
|
204
|
+
**WARNING** (Create Ticket, Investigate Next Day):
|
|
205
|
+
- CPU usage > 80% for 5 minutes
|
|
206
|
+
- Heap memory > 85% for 5 minutes
|
|
207
|
+
- GC time > 500ms/sec for 5 minutes
|
|
208
|
+
- Disk usage > 85% for 5 minutes
|
|
209
|
+
|
|
210
|
+
### Alert Design Principles
|
|
211
|
+
- ✅ **Actionable**: Alert must require human intervention
|
|
212
|
+
- ✅ **Specific**: Include exact metric value and threshold
|
|
213
|
+
- ✅ **Runbook**: Link to step-by-step remediation guide
|
|
214
|
+
- ✅ **Context**: Include related metrics for correlation
|
|
215
|
+
- ❌ **Avoid Noise**: Don't alert on normal fluctuations
|
|
216
|
+
|
|
217
|
+
## SLO Definitions
|
|
218
|
+
|
|
219
|
+
### Example SLOs for Kafka
|
|
220
|
+
```yaml
|
|
221
|
+
# Availability SLO
|
|
222
|
+
- objective: "99.9% of produce requests succeed"
|
|
223
|
+
measurement: success_rate(kafka_network_request_metrics_totaltime_total{request="Produce"})
|
|
224
|
+
target: 0.999
|
|
225
|
+
|
|
226
|
+
# Latency SLO
|
|
227
|
+
- objective: "p99 produce latency < 100ms"
|
|
228
|
+
measurement: histogram_quantile(0.99, kafka_network_request_metrics_totaltime_total{request="Produce"})
|
|
229
|
+
target: 0.1 # 100ms
|
|
230
|
+
|
|
231
|
+
# Consumer Lag SLO
|
|
232
|
+
- objective: "95% of consumer groups have lag < 1000 messages"
|
|
233
|
+
measurement: count(kafka_consumergroup_lag < 1000) / count(kafka_consumergroup_lag)
|
|
234
|
+
target: 0.95
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
## Troubleshooting Decision Tree
|
|
238
|
+
|
|
239
|
+
```
|
|
240
|
+
High Latency Detected
|
|
241
|
+
├─ Check Broker CPU
|
|
242
|
+
│ └─ High (>80%) → Scale horizontally, optimize config
|
|
243
|
+
│
|
|
244
|
+
├─ Check Disk I/O
|
|
245
|
+
│ └─ High (iowait >20%) → Upgrade storage (GP3/io2), tune flush settings
|
|
246
|
+
│
|
|
247
|
+
├─ Check Network
|
|
248
|
+
│ └─ High RTT → Check inter-broker network, increase socket buffers
|
|
249
|
+
│
|
|
250
|
+
├─ Check GC Time
|
|
251
|
+
│ └─ High (>500ms/sec) → Increase heap, tune GC (G1GC)
|
|
252
|
+
│
|
|
253
|
+
└─ Check Request Handler Idle %
|
|
254
|
+
└─ Low (<30%) → Increase num.network.threads, num.io.threads
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
## References
|
|
258
|
+
|
|
259
|
+
- Prometheus JMX Exporter: https://github.com/prometheus/jmx_exporter
|
|
260
|
+
- Grafana Dashboards: `plugins/specweave-kafka/monitoring/grafana/dashboards/`
|
|
261
|
+
- Alerting Rules: `plugins/specweave-kafka/monitoring/prometheus/kafka-alerts.yml`
|
|
262
|
+
- Kafka Metrics Guide: https://kafka.apache.org/documentation/#monitoring
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
**Invoke me when you need observability, monitoring, alerting, or performance troubleshooting expertise!**
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: specweave-kafka:deploy
|
|
3
|
+
description: Deploy Apache Kafka cluster using Terraform (Apache Kafka, AWS MSK, or Azure Event Hubs). Guides platform selection, sizing, and deployment.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Deploy Kafka Cluster
|
|
7
|
+
|
|
8
|
+
Deploy Apache Kafka using Infrastructure as Code (Terraform).
|
|
9
|
+
|
|
10
|
+
## What This Command Does
|
|
11
|
+
|
|
12
|
+
1. **Platform Selection**: Helps you choose the right Kafka platform
|
|
13
|
+
2. **Cluster Sizing**: Calculates broker count, instance types, storage
|
|
14
|
+
3. **Terraform Generation**: Creates or uses existing Terraform modules
|
|
15
|
+
4. **Deployment**: Guides through terraform init/plan/apply
|
|
16
|
+
5. **Verification**: Tests cluster connectivity and basic operations
|
|
17
|
+
|
|
18
|
+
## Interactive Workflow
|
|
19
|
+
|
|
20
|
+
I'll ask you a few questions to determine the best deployment approach:
|
|
21
|
+
|
|
22
|
+
### Question 1: Which platform?
|
|
23
|
+
- **Apache Kafka** (self-hosted on AWS EC2, KRaft mode)
|
|
24
|
+
- **AWS MSK** (managed Kafka service)
|
|
25
|
+
- **Azure Event Hubs** (Kafka-compatible API)
|
|
26
|
+
|
|
27
|
+
### Question 2: What's your use case?
|
|
28
|
+
- **Development/Testing** (1 broker, small instance)
|
|
29
|
+
- **Staging** (3 brokers, medium instances)
|
|
30
|
+
- **Production** (3-5 brokers, large instances, multi-AZ)
|
|
31
|
+
|
|
32
|
+
### Question 3: Expected throughput?
|
|
33
|
+
- Messages per second (peak)
|
|
34
|
+
- Average message size
|
|
35
|
+
- Retention period (hours/days)
|
|
36
|
+
|
|
37
|
+
Based on your answers, I'll:
|
|
38
|
+
- ✅ Recommend broker count and instance types
|
|
39
|
+
- ✅ Calculate storage requirements
|
|
40
|
+
- ✅ Generate Terraform configuration
|
|
41
|
+
- ✅ Guide deployment
|
|
42
|
+
|
|
43
|
+
## Example Usage
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# Start deployment wizard
|
|
47
|
+
/specweave-kafka:deploy
|
|
48
|
+
|
|
49
|
+
# I'll activate kafka-iac-deployment skill and guide you through:
|
|
50
|
+
# 1. Platform selection
|
|
51
|
+
# 2. Sizing calculation (using ClusterSizingCalculator)
|
|
52
|
+
# 3. Terraform module selection (apache-kafka, aws-msk, or azure-event-hubs)
|
|
53
|
+
# 4. Deployment execution
|
|
54
|
+
# 5. Post-deployment verification
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## What Gets Created
|
|
58
|
+
|
|
59
|
+
**Apache Kafka Deployment** (AWS EC2):
|
|
60
|
+
- 3-5 EC2 instances (m5.xlarge or larger)
|
|
61
|
+
- EBS volumes (GP3, 100Gi+ per broker)
|
|
62
|
+
- Security groups (SASL_SSL on port 9093)
|
|
63
|
+
- IAM roles for S3 backups
|
|
64
|
+
- CloudWatch alarms
|
|
65
|
+
- Load balancer (optional)
|
|
66
|
+
|
|
67
|
+
**AWS MSK Deployment**:
|
|
68
|
+
- MSK cluster (3-6 brokers)
|
|
69
|
+
- VPC, subnets, security groups
|
|
70
|
+
- IAM authentication
|
|
71
|
+
- CloudWatch monitoring
|
|
72
|
+
- Auto-scaling (optional)
|
|
73
|
+
|
|
74
|
+
**Azure Event Hubs Deployment**:
|
|
75
|
+
- Event Hubs namespace (Premium SKU)
|
|
76
|
+
- Event hubs (topics)
|
|
77
|
+
- Private endpoints
|
|
78
|
+
- Auto-inflate enabled
|
|
79
|
+
- Zone redundancy
|
|
80
|
+
|
|
81
|
+
## Prerequisites
|
|
82
|
+
|
|
83
|
+
- Terraform 1.5+ installed
|
|
84
|
+
- AWS CLI (for AWS deployments) or Azure CLI (for Azure)
|
|
85
|
+
- Appropriate cloud credentials configured
|
|
86
|
+
- VPC and subnets created (if deploying to cloud)
|
|
87
|
+
|
|
88
|
+
## Post-Deployment
|
|
89
|
+
|
|
90
|
+
After deployment succeeds, I'll:
|
|
91
|
+
1. ✅ Output bootstrap servers
|
|
92
|
+
2. ✅ Provide connection examples
|
|
93
|
+
3. ✅ Suggest running `/specweave-kafka:monitor-setup` for Prometheus + Grafana
|
|
94
|
+
4. ✅ Suggest testing with `/specweave-kafka:dev-env` locally
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
**Skills Activated**: kafka-iac-deployment, kafka-architecture
|
|
99
|
+
**Related Commands**: /specweave-kafka:monitor-setup, /specweave-kafka:dev-env
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: specweave-kafka:dev-env
|
|
3
|
+
description: Set up local Kafka development environment using Docker Compose. Includes Kafka (KRaft mode), Schema Registry, Kafka UI, Prometheus, and Grafana.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Set Up Local Kafka Dev Environment
|
|
7
|
+
|
|
8
|
+
Spin up a complete local Kafka development environment with one command.
|
|
9
|
+
|
|
10
|
+
## What This Command Does
|
|
11
|
+
|
|
12
|
+
1. **Docker Compose Selection**: Choose Kafka or Redpanda
|
|
13
|
+
2. **Service Configuration**: Kafka + Schema Registry + UI + Monitoring
|
|
14
|
+
3. **Environment Setup**: Generate docker-compose.yml
|
|
15
|
+
4. **Start Services**: `docker-compose up -d`
|
|
16
|
+
5. **Verification**: Test cluster and provide connection details
|
|
17
|
+
|
|
18
|
+
## Two Options Available
|
|
19
|
+
|
|
20
|
+
### Option 1: Apache Kafka (KRaft Mode)
|
|
21
|
+
**Services**:
|
|
22
|
+
- ✅ Kafka broker (KRaft mode, no ZooKeeper)
|
|
23
|
+
- ✅ Schema Registry (Avro schemas)
|
|
24
|
+
- ✅ Kafka UI (web interface, port 8080)
|
|
25
|
+
- ✅ Prometheus (metrics, port 9090)
|
|
26
|
+
- ✅ Grafana (dashboards, port 3000)
|
|
27
|
+
|
|
28
|
+
**Use When**: Testing Apache Kafka specifically, need Schema Registry
|
|
29
|
+
|
|
30
|
+
### Option 2: Redpanda (3-Node Cluster)
|
|
31
|
+
**Services**:
|
|
32
|
+
- ✅ Redpanda (3 brokers, Kafka-compatible)
|
|
33
|
+
- ✅ Redpanda Console (web UI, port 8080)
|
|
34
|
+
- ✅ Prometheus (metrics, port 9090)
|
|
35
|
+
- ✅ Grafana (dashboards, port 3000)
|
|
36
|
+
|
|
37
|
+
**Use When**: Testing high-performance alternative, need multi-broker cluster locally
|
|
38
|
+
|
|
39
|
+
## Example Usage
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# Start dev environment setup
|
|
43
|
+
/specweave-kafka:dev-env
|
|
44
|
+
|
|
45
|
+
# I'll ask:
|
|
46
|
+
# 1. Which stack? (Kafka or Redpanda)
|
|
47
|
+
# 2. Where to create files? (current directory or specify path)
|
|
48
|
+
# 3. Custom ports? (use defaults or customize)
|
|
49
|
+
|
|
50
|
+
# Then I'll:
|
|
51
|
+
# - Generate docker-compose.yml
|
|
52
|
+
# - Start all services
|
|
53
|
+
# - Wait for health checks
|
|
54
|
+
# - Provide connection details
|
|
55
|
+
# - Open Kafka UI in browser
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## What Gets Created
|
|
59
|
+
|
|
60
|
+
**Directory Structure**:
|
|
61
|
+
```
|
|
62
|
+
./kafka-dev/
|
|
63
|
+
├── docker-compose.yml # Main compose file
|
|
64
|
+
├── .env # Environment variables
|
|
65
|
+
├── data/ # Persistent volumes
|
|
66
|
+
│ ├── kafka/
|
|
67
|
+
│ ├── prometheus/
|
|
68
|
+
│ └── grafana/
|
|
69
|
+
└── config/
|
|
70
|
+
├── prometheus.yml # Prometheus config
|
|
71
|
+
└── grafana/ # Dashboard provisioning
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Services Running**:
|
|
75
|
+
- Kafka: localhost:9092 (plaintext) or localhost:9093 (SASL_SSL)
|
|
76
|
+
- Schema Registry: localhost:8081
|
|
77
|
+
- Kafka UI: http://localhost:8080
|
|
78
|
+
- Prometheus: http://localhost:9090
|
|
79
|
+
- Grafana: http://localhost:3000 (admin/admin)
|
|
80
|
+
|
|
81
|
+
## Connection Examples
|
|
82
|
+
|
|
83
|
+
**After setup, connect with**:
|
|
84
|
+
|
|
85
|
+
### Producer (Node.js):
|
|
86
|
+
```javascript
|
|
87
|
+
const { Kafka } = require('kafkajs');
|
|
88
|
+
|
|
89
|
+
const kafka = new Kafka({
|
|
90
|
+
clientId: 'my-app',
|
|
91
|
+
brokers: ['localhost:9092']
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
const producer = kafka.producer();
|
|
95
|
+
await producer.connect();
|
|
96
|
+
await producer.send({
|
|
97
|
+
topic: 'test-topic',
|
|
98
|
+
messages: [{ value: 'Hello Kafka!' }]
|
|
99
|
+
});
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Consumer (Python):
|
|
103
|
+
```python
|
|
104
|
+
from kafka import KafkaConsumer
|
|
105
|
+
|
|
106
|
+
consumer = KafkaConsumer(
|
|
107
|
+
'test-topic',
|
|
108
|
+
bootstrap_servers=['localhost:9092'],
|
|
109
|
+
group_id='my-group',
|
|
110
|
+
auto_offset_reset='earliest'
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
for message in consumer:
|
|
114
|
+
print(f"Received: {message.value}")
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### kcat (CLI):
|
|
118
|
+
```bash
|
|
119
|
+
# Produce message
|
|
120
|
+
echo "Hello Kafka" | kcat -P -b localhost:9092 -t test-topic
|
|
121
|
+
|
|
122
|
+
# Consume messages
|
|
123
|
+
kcat -C -b localhost:9092 -t test-topic -o beginning
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Sample Producer/Consumer
|
|
127
|
+
|
|
128
|
+
I'll also create sample code templates:
|
|
129
|
+
- `producer-nodejs.js` - Production-ready Node.js producer
|
|
130
|
+
- `consumer-nodejs.js` - Production-ready Node.js consumer
|
|
131
|
+
- `producer-python.py` - Python producer with error handling
|
|
132
|
+
- `consumer-python.py` - Python consumer with DLQ
|
|
133
|
+
|
|
134
|
+
## Prerequisites
|
|
135
|
+
|
|
136
|
+
- Docker 20+ installed
|
|
137
|
+
- Docker Compose v2+
|
|
138
|
+
- 4GB+ free RAM (for Redpanda 3-node cluster)
|
|
139
|
+
- Ports available: 8080, 8081, 9090, 9092, 9093, 3000
|
|
140
|
+
|
|
141
|
+
## Post-Setup
|
|
142
|
+
|
|
143
|
+
After environment starts, I'll:
|
|
144
|
+
1. ✅ Open Kafka UI in browser (http://localhost:8080)
|
|
145
|
+
2. ✅ Create a test topic via UI
|
|
146
|
+
3. ✅ Show producer/consumer examples
|
|
147
|
+
4. ✅ Provide kcat commands for testing
|
|
148
|
+
5. ✅ Show Grafana dashboards (http://localhost:3000)
|
|
149
|
+
|
|
150
|
+
## Useful Commands
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
# Start environment
|
|
154
|
+
docker-compose up -d
|
|
155
|
+
|
|
156
|
+
# Stop environment
|
|
157
|
+
docker-compose down
|
|
158
|
+
|
|
159
|
+
# Stop and remove data
|
|
160
|
+
docker-compose down -v
|
|
161
|
+
|
|
162
|
+
# View logs
|
|
163
|
+
docker-compose logs -f kafka
|
|
164
|
+
|
|
165
|
+
# Restart Kafka only
|
|
166
|
+
docker-compose restart kafka
|
|
167
|
+
|
|
168
|
+
# Check health
|
|
169
|
+
docker-compose ps
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
**Skills Activated**: kafka-cli-tools
|
|
175
|
+
**Docker Compose Location**: `plugins/specweave-kafka/docker/`
|
|
176
|
+
**Sample Code**: `plugins/specweave-kafka/docker/templates/`
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: specweave-kafka:mcp-configure
|
|
3
|
+
description: Configure MCP (Model Context Protocol) server for Kafka integration. Auto-detects and configures kanapuli, tuannvm, Joel-hanson, or Confluent MCP servers.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Configure Kafka MCP Server
|
|
7
|
+
|
|
8
|
+
Set up MCP (Model Context Protocol) server integration for natural language Kafka operations.
|
|
9
|
+
|
|
10
|
+
## What This Command Does
|
|
11
|
+
|
|
12
|
+
1. **MCP Server Detection**: Auto-detect installed MCP servers
|
|
13
|
+
2. **Server Ranking**: Recommend best server for your needs
|
|
14
|
+
3. **Configuration**: Generate Claude Desktop config
|
|
15
|
+
4. **Testing**: Verify MCP server connectivity
|
|
16
|
+
5. **Usage Guide**: Show natural language examples
|
|
17
|
+
|
|
18
|
+
## Supported MCP Servers
|
|
19
|
+
|
|
20
|
+
| Server | Language | Features | Best For |
|
|
21
|
+
|--------|----------|----------|----------|
|
|
22
|
+
| **Confluent Official** | - | Natural language, Flink SQL, Enterprise | Production + Confluent Cloud |
|
|
23
|
+
| **tuannvm/kafka-mcp-server** | Go | Advanced SASL (SCRAM-SHA-256/512) | Security-focused deployments |
|
|
24
|
+
| **kanapuli/mcp-kafka** | Node.js | Basic operations, SASL_PLAINTEXT | Quick start, dev environments |
|
|
25
|
+
| **Joel-hanson/kafka-mcp-server** | Python | Claude Desktop integration | Desktop AI workflows |
|
|
26
|
+
|
|
27
|
+
## Example Usage
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# Start MCP configuration wizard
|
|
31
|
+
/specweave-kafka:mcp-configure
|
|
32
|
+
|
|
33
|
+
# I'll:
|
|
34
|
+
# 1. Detect installed MCP servers (npm, go, pip, CLI)
|
|
35
|
+
# 2. Rank servers (Confluent > tuannvm > kanapuli > Joel-hanson)
|
|
36
|
+
# 3. Generate Claude Desktop config (~/.claude/settings.json)
|
|
37
|
+
# 4. Test connection to Kafka
|
|
38
|
+
# 5. Show natural language examples
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## What Gets Configured
|
|
42
|
+
|
|
43
|
+
**Claude Desktop Config** (`~/.claude/settings.json`):
|
|
44
|
+
```json
|
|
45
|
+
{
|
|
46
|
+
"mcpServers": {
|
|
47
|
+
"kafka": {
|
|
48
|
+
"command": "npx",
|
|
49
|
+
"args": ["mcp-kafka"],
|
|
50
|
+
"env": {
|
|
51
|
+
"KAFKA_BROKERS": "localhost:9092",
|
|
52
|
+
"KAFKA_SASL_USERNAME": "admin",
|
|
53
|
+
"KAFKA_SASL_PASSWORD": "admin-secret"
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Natural Language Examples
|
|
61
|
+
|
|
62
|
+
After MCP is configured, you can use natural language with Claude:
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
You: "List all Kafka topics"
|
|
66
|
+
Claude: [Uses MCP to call listTopics()]
|
|
67
|
+
Output: user-events, order-events, payment-events
|
|
68
|
+
|
|
69
|
+
You: "Create a topic called 'analytics' with 12 partitions and RF=3"
|
|
70
|
+
Claude: [Uses MCP to call createTopic()]
|
|
71
|
+
Output: Topic 'analytics' created successfully
|
|
72
|
+
|
|
73
|
+
You: "What's the consumer lag for group 'orders-consumer'?"
|
|
74
|
+
Claude: [Uses MCP to call getConsumerGroupOffsets()]
|
|
75
|
+
Output: Total lag: 1,234 messages across 6 partitions
|
|
76
|
+
|
|
77
|
+
You: "Send a test message to 'user-events' topic"
|
|
78
|
+
Claude: [Uses MCP to call produceMessage()]
|
|
79
|
+
Output: Message sent to partition 3, offset 12345
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Prerequisites
|
|
83
|
+
|
|
84
|
+
- Node.js 18+ (for kanapuli or Joel-hanson)
|
|
85
|
+
- Go 1.20+ (for tuannvm)
|
|
86
|
+
- Confluent Cloud account (for Confluent MCP)
|
|
87
|
+
- Kafka cluster accessible from your machine
|
|
88
|
+
|
|
89
|
+
## Post-Configuration
|
|
90
|
+
|
|
91
|
+
After MCP is configured, I'll:
|
|
92
|
+
1. ✅ Restart Claude Desktop (required for MCP changes)
|
|
93
|
+
2. ✅ Test MCP server with simple command
|
|
94
|
+
3. ✅ Show 10+ natural language examples
|
|
95
|
+
4. ✅ Provide troubleshooting tips if connection fails
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
**Skills Activated**: kafka-mcp-integration
|
|
100
|
+
**Related Commands**: /specweave-kafka:deploy, /specweave-kafka:dev-env
|
|
101
|
+
**MCP Docs**: https://modelcontextprotocol.io/
|