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.
- package/CLAUDE.md +229 -1817
- package/README.md +68 -0
- package/bin/specweave.js +62 -6
- 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-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 +7 -0
- package/dist/plugins/specweave-github/lib/epic-content-builder.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/epic-content-builder.js +42 -0
- package/dist/plugins/specweave-github/lib/epic-content-builder.js.map +1 -1
- 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.js +1 -1
- 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 +8 -6
- package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js +78 -117
- package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js.map +1 -1
- 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/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.map +1 -1
- package/dist/src/core/sync/enhanced-content-builder.js +2 -1
- 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/types/config.d.ts +94 -0
- package/dist/src/core/types/config.d.ts.map +1 -1
- package/dist/src/core/types/config.js +16 -0
- package/dist/src/core/types/config.js.map +1 -1
- package/dist/src/core/types/increment-metadata.d.ts +6 -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/package.json +1 -1
- package/plugins/specweave/COMMANDS.md +13 -4
- 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/hooks/hooks.json +4 -0
- package/plugins/specweave/hooks/lib/sync-spec-content.sh +2 -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-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 +10 -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 +38 -0
- package/plugins/specweave-github/lib/epic-content-builder.ts +59 -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.ts +1 -1
- 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-ado/lib/enhanced-ado-sync.js → specweave-jira/lib/enhanced-jira-sync.js} +25 -61
- 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/dist/locales/de/.gitkeep +0 -0
- package/dist/locales/de/cli.json +0 -108
- package/dist/locales/en/cli.json +0 -287
- package/dist/locales/en/errors.json +0 -7
- package/dist/locales/en/templates.json +0 -6
- package/dist/locales/es/.gitkeep +0 -0
- package/dist/locales/es/cli.json +0 -41
- package/dist/locales/fr/.gitkeep +0 -0
- package/dist/locales/fr/cli.json +0 -108
- package/dist/locales/ja/.gitkeep +0 -0
- package/dist/locales/ja/cli.json +0 -108
- package/dist/locales/ko/.gitkeep +0 -0
- package/dist/locales/ko/cli.json +0 -108
- package/dist/locales/pt/.gitkeep +0 -0
- package/dist/locales/pt/cli.json +0 -108
- package/dist/locales/ru/.gitkeep +0 -0
- package/dist/locales/ru/cli.json +0 -269
- package/dist/locales/zh/.gitkeep +0 -0
- package/dist/locales/zh/cli.json +0 -108
- package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.d.ts +0 -25
- package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.d.ts.map +0 -1
- package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.js +0 -191
- package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.js.map +0 -1
- package/dist/spec-parser.js +0 -629
- package/dist/src/core/sync/spec-content-sync.d.ts +0 -88
- package/dist/src/core/sync/spec-content-sync.d.ts.map +0 -1
- package/dist/src/core/sync/spec-content-sync.js +0 -5
- package/dist/src/core/sync/spec-content-sync.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- 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,375 @@
|
|
|
1
|
+
# specweave-confluent
|
|
2
|
+
|
|
3
|
+
**Confluent Cloud Integration Plugin for SpecWeave**
|
|
4
|
+
|
|
5
|
+
Enterprise Kafka features including Schema Registry, ksqlDB stream processing, Cluster Linking, and Confluent Cloud architecture patterns.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
### 🚀 Core Capabilities
|
|
10
|
+
|
|
11
|
+
- **Schema Registry**: Avro, Protobuf, JSON Schema management with compatibility modes
|
|
12
|
+
- **ksqlDB**: SQL-like stream processing with real-time queries and materialized views
|
|
13
|
+
- **Confluent Cloud**: eCKU sizing, multi-region architecture, cluster linking
|
|
14
|
+
- **Stream Governance**: Schema validation, data quality, lineage tracking
|
|
15
|
+
- **Enterprise Features**: Cluster Linking, Tiered Storage, Private Networking
|
|
16
|
+
|
|
17
|
+
### 📚 Skills (2)
|
|
18
|
+
|
|
19
|
+
**Organized for Enterprise Kafka**:
|
|
20
|
+
|
|
21
|
+
- `confluent-schema-registry` - Schema management, evolution strategies, Avro/Protobuf/JSON Schema, compatibility modes
|
|
22
|
+
- `confluent-ksqldb` - Stream processing with SQL, joins, aggregations, windowing, materialized views
|
|
23
|
+
|
|
24
|
+
### 🤖 Agents (1)
|
|
25
|
+
|
|
26
|
+
- `confluent-architect` - eCKU sizing, cluster linking, multi-region strategies, cost optimization
|
|
27
|
+
|
|
28
|
+
### ⚡ Commands (0)
|
|
29
|
+
|
|
30
|
+
*Commands coming in future releases*
|
|
31
|
+
|
|
32
|
+
## Installation
|
|
33
|
+
|
|
34
|
+
### Prerequisites
|
|
35
|
+
|
|
36
|
+
- Node.js 18+
|
|
37
|
+
- Confluent Cloud account (or self-hosted Confluent Platform)
|
|
38
|
+
- Schema Registry credentials
|
|
39
|
+
- ksqlDB cluster (optional)
|
|
40
|
+
|
|
41
|
+
### Install Plugin
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# Via SpecWeave marketplace
|
|
45
|
+
specweave plugin install specweave-confluent
|
|
46
|
+
|
|
47
|
+
# Or via Claude Code plugin system
|
|
48
|
+
/plugin install specweave-confluent
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Quick Start
|
|
52
|
+
|
|
53
|
+
### 1. Schema Registry - Register Avro Schema
|
|
54
|
+
|
|
55
|
+
```javascript
|
|
56
|
+
const { SchemaRegistry } = require('@kafkajs/confluent-schema-registry');
|
|
57
|
+
|
|
58
|
+
const registry = new SchemaRegistry({
|
|
59
|
+
host: 'https://schema-registry.us-east-1.aws.confluent.cloud',
|
|
60
|
+
auth: {
|
|
61
|
+
username: process.env.SR_API_KEY,
|
|
62
|
+
password: process.env.SR_API_SECRET
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
// Define Avro schema
|
|
67
|
+
const schema = `
|
|
68
|
+
{
|
|
69
|
+
"type": "record",
|
|
70
|
+
"name": "User",
|
|
71
|
+
"fields": [
|
|
72
|
+
{"name": "id", "type": "long"},
|
|
73
|
+
{"name": "name", "type": "string"},
|
|
74
|
+
{"name": "email", "type": ["null", "string"], "default": null}
|
|
75
|
+
]
|
|
76
|
+
}
|
|
77
|
+
`;
|
|
78
|
+
|
|
79
|
+
// Register schema
|
|
80
|
+
const { id } = await registry.register({
|
|
81
|
+
type: SchemaType.AVRO,
|
|
82
|
+
schema
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
console.log(`Schema registered with ID: ${id}`);
|
|
86
|
+
|
|
87
|
+
// Encode message
|
|
88
|
+
const payload = await registry.encode(id, {
|
|
89
|
+
id: 1,
|
|
90
|
+
name: 'John Doe',
|
|
91
|
+
email: 'john@example.com'
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
// Send to Kafka
|
|
95
|
+
await producer.send({
|
|
96
|
+
topic: 'users',
|
|
97
|
+
messages: [{ value: payload }]
|
|
98
|
+
});
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### 2. ksqlDB - Real-Time Stream Processing
|
|
102
|
+
|
|
103
|
+
```sql
|
|
104
|
+
-- Create stream from Kafka topic
|
|
105
|
+
CREATE STREAM clicks_stream (
|
|
106
|
+
user_id BIGINT,
|
|
107
|
+
page VARCHAR,
|
|
108
|
+
timestamp TIMESTAMP
|
|
109
|
+
) WITH (
|
|
110
|
+
kafka_topic='clicks',
|
|
111
|
+
value_format='AVRO'
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
-- Filter important events
|
|
115
|
+
CREATE STREAM checkout_clicks AS
|
|
116
|
+
SELECT user_id, page, timestamp
|
|
117
|
+
FROM clicks_stream
|
|
118
|
+
WHERE page = 'checkout'
|
|
119
|
+
EMIT CHANGES;
|
|
120
|
+
|
|
121
|
+
-- Real-time aggregation (5-minute tumbling window)
|
|
122
|
+
CREATE TABLE user_clicks_per_5min AS
|
|
123
|
+
SELECT
|
|
124
|
+
user_id,
|
|
125
|
+
WINDOWSTART AS window_start,
|
|
126
|
+
COUNT(*) AS click_count
|
|
127
|
+
FROM clicks_stream
|
|
128
|
+
WINDOW TUMBLING (SIZE 5 MINUTES)
|
|
129
|
+
GROUP BY user_id
|
|
130
|
+
EMIT CHANGES;
|
|
131
|
+
|
|
132
|
+
-- Query current window
|
|
133
|
+
SELECT * FROM user_clicks_per_5min
|
|
134
|
+
WHERE user_id = 123;
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### 3. Confluent Cloud - Cluster Sizing
|
|
138
|
+
|
|
139
|
+
Ask the `confluent-architect` agent:
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
Me: "I need 50K msg/sec, 7-day retention. How many eCKUs?"
|
|
143
|
+
|
|
144
|
+
Confluent Architect:
|
|
145
|
+
- Throughput: 50K msg/sec × 1KB = 50 MB/sec
|
|
146
|
+
- eCKU calculation: 50 MB/sec / 30 MB/sec per CKU = 2 CKUs
|
|
147
|
+
- Recommended: 4 CKUs (100% headroom for bursts)
|
|
148
|
+
- Cost: 4 CKUs × $0.11/hour × 730 hours = $321/month
|
|
149
|
+
- Cluster type: Standard (99.95% SLA)
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Architecture
|
|
153
|
+
|
|
154
|
+
### Schema Registry Integration
|
|
155
|
+
|
|
156
|
+
**Producer with Avro**:
|
|
157
|
+
```javascript
|
|
158
|
+
const { Kafka } = require('kafkajs');
|
|
159
|
+
const { SchemaRegistry, SchemaType } = require('@kafkajs/confluent-schema-registry');
|
|
160
|
+
|
|
161
|
+
const kafka = new Kafka({
|
|
162
|
+
clientId: 'my-producer',
|
|
163
|
+
brokers: ['pkc-xxx.us-east-1.aws.confluent.cloud:9092'],
|
|
164
|
+
ssl: true,
|
|
165
|
+
sasl: {
|
|
166
|
+
mechanism: 'plain',
|
|
167
|
+
username: process.env.KAFKA_API_KEY,
|
|
168
|
+
password: process.env.KAFKA_API_SECRET
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
const registry = new SchemaRegistry({
|
|
173
|
+
host: 'https://psrc-xxx.us-east-1.aws.confluent.cloud',
|
|
174
|
+
auth: {
|
|
175
|
+
username: process.env.SR_API_KEY,
|
|
176
|
+
password: process.env.SR_API_SECRET
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
const producer = kafka.producer();
|
|
181
|
+
await producer.connect();
|
|
182
|
+
|
|
183
|
+
// Encode with schema
|
|
184
|
+
const payload = await registry.encode(schemaId, { id: 1, name: 'John' });
|
|
185
|
+
|
|
186
|
+
await producer.send({
|
|
187
|
+
topic: 'users',
|
|
188
|
+
messages: [{ value: payload }]
|
|
189
|
+
});
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
**Consumer with Avro**:
|
|
193
|
+
```javascript
|
|
194
|
+
const consumer = kafka.consumer({ groupId: 'user-processor' });
|
|
195
|
+
await consumer.subscribe({ topic: 'users' });
|
|
196
|
+
|
|
197
|
+
await consumer.run({
|
|
198
|
+
eachMessage: async ({ message }) => {
|
|
199
|
+
// Decode automatically (schema ID in header)
|
|
200
|
+
const user = await registry.decode(message.value);
|
|
201
|
+
console.log(user); // { id: 1, name: 'John' }
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### ksqlDB Deployment Patterns
|
|
207
|
+
|
|
208
|
+
**Confluent Cloud**:
|
|
209
|
+
- Managed ksqlDB clusters (CSUs - Confluent Streaming Units)
|
|
210
|
+
- 1 CSU = 1 vCPU + 4GB RAM
|
|
211
|
+
- Auto-scaling based on query load
|
|
212
|
+
- 99.95% SLA
|
|
213
|
+
|
|
214
|
+
**Self-Hosted**:
|
|
215
|
+
- Deploy on Kubernetes (Helm chart)
|
|
216
|
+
- 3+ nodes for HA (multi-AZ)
|
|
217
|
+
- Persistent query state in RocksDB
|
|
218
|
+
- Standby replicas for failover
|
|
219
|
+
|
|
220
|
+
### Cluster Linking Topology
|
|
221
|
+
|
|
222
|
+
**Active-Passive (DR)**:
|
|
223
|
+
```
|
|
224
|
+
┌─────────────────┐ ┌─────────────────┐
|
|
225
|
+
│ Primary │ │ Secondary │
|
|
226
|
+
│ us-east-1 │ ──────> │ us-west-2 │
|
|
227
|
+
│ (4 CKUs) │ Linking │ (2 CKUs) │
|
|
228
|
+
└─────────────────┘ └─────────────────┘
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
**Active-Active (Multi-Region)**:
|
|
232
|
+
```
|
|
233
|
+
┌─────────────────┐ <──────> ┌─────────────────┐
|
|
234
|
+
│ US Cluster │ Linking │ EU Cluster │
|
|
235
|
+
│ us-east-1 │ (Bi-Dir) │ eu-west-1 │
|
|
236
|
+
│ (6 CKUs) │ │ (6 CKUs) │
|
|
237
|
+
└─────────────────┘ └─────────────────┘
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
## Usage Examples
|
|
241
|
+
|
|
242
|
+
### Schema Evolution - Add Optional Field
|
|
243
|
+
|
|
244
|
+
```javascript
|
|
245
|
+
// V1 schema
|
|
246
|
+
const schemaV1 = `
|
|
247
|
+
{
|
|
248
|
+
"type": "record",
|
|
249
|
+
"name": "User",
|
|
250
|
+
"fields": [
|
|
251
|
+
{"name": "id", "type": "long"},
|
|
252
|
+
{"name": "name", "type": "string"}
|
|
253
|
+
]
|
|
254
|
+
}
|
|
255
|
+
`;
|
|
256
|
+
|
|
257
|
+
// V2 schema - BACKWARD compatible (added optional field)
|
|
258
|
+
const schemaV2 = `
|
|
259
|
+
{
|
|
260
|
+
"type": "record",
|
|
261
|
+
"name": "User",
|
|
262
|
+
"fields": [
|
|
263
|
+
{"name": "id", "type": "long"},
|
|
264
|
+
{"name": "name", "type": "string"},
|
|
265
|
+
{"name": "email", "type": ["null", "string"], "default": null}
|
|
266
|
+
]
|
|
267
|
+
}
|
|
268
|
+
`;
|
|
269
|
+
|
|
270
|
+
// Test compatibility BEFORE registering
|
|
271
|
+
const compatible = await registry.checkCompatibility({
|
|
272
|
+
schema: schemaV2,
|
|
273
|
+
subject: 'users-value'
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
if (compatible) {
|
|
277
|
+
await registry.register({ schema: schemaV2 });
|
|
278
|
+
}
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### ksqlDB - Enrich Events with Stream-Table Join
|
|
282
|
+
|
|
283
|
+
```sql
|
|
284
|
+
-- Create users table (current state)
|
|
285
|
+
CREATE TABLE users (
|
|
286
|
+
user_id BIGINT PRIMARY KEY,
|
|
287
|
+
name VARCHAR,
|
|
288
|
+
email VARCHAR
|
|
289
|
+
) WITH (
|
|
290
|
+
kafka_topic='users',
|
|
291
|
+
value_format='AVRO'
|
|
292
|
+
);
|
|
293
|
+
|
|
294
|
+
-- Enrich click events with user data
|
|
295
|
+
CREATE STREAM enriched_clicks AS
|
|
296
|
+
SELECT
|
|
297
|
+
c.user_id,
|
|
298
|
+
c.page,
|
|
299
|
+
c.timestamp,
|
|
300
|
+
u.name,
|
|
301
|
+
u.email
|
|
302
|
+
FROM clicks_stream c
|
|
303
|
+
LEFT JOIN users u ON c.user_id = u.user_id
|
|
304
|
+
EMIT CHANGES;
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### Confluent Cloud - eCKU Sizing Calculator
|
|
308
|
+
|
|
309
|
+
```
|
|
310
|
+
Inputs:
|
|
311
|
+
- Throughput: 100K msg/sec × 1KB avg = 100 MB/sec
|
|
312
|
+
- Peak factor: 2.0x (200 MB/sec peak)
|
|
313
|
+
- Retention: 7 days
|
|
314
|
+
- Partitions: 20 topics × 24 partitions = 480 total
|
|
315
|
+
|
|
316
|
+
eCKU Calculation:
|
|
317
|
+
- Write throughput: 200 MB/sec / 30 MB/sec per CKU = 6.67 CKUs
|
|
318
|
+
- Recommended: 8 CKUs (rounded up)
|
|
319
|
+
- Partition validation: 480 partitions / 8 CKUs = 60 partitions/CKU (OK, <1500 limit)
|
|
320
|
+
|
|
321
|
+
Cost:
|
|
322
|
+
- 8 CKUs × $0.11/hour × 730 hours = $642/month
|
|
323
|
+
- Storage: Included (800 GB total)
|
|
324
|
+
|
|
325
|
+
Alternative (Dedicated):
|
|
326
|
+
- 2 dedicated CKUs (higher performance)
|
|
327
|
+
- Cost: $2,190/month
|
|
328
|
+
- Use when: >10 CKUs OR >1000 partitions OR <5ms latency required
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
## Testing
|
|
332
|
+
|
|
333
|
+
```bash
|
|
334
|
+
# Unit tests
|
|
335
|
+
npm test
|
|
336
|
+
|
|
337
|
+
# Integration tests (requires Confluent Cloud credentials)
|
|
338
|
+
npm run test:integration
|
|
339
|
+
|
|
340
|
+
# E2E tests (requires ksqlDB cluster)
|
|
341
|
+
npm run test:e2e
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
## Documentation
|
|
345
|
+
|
|
346
|
+
- **Schema Registry Guide**: `.specweave/docs/public/guides/confluent-schema-registry.md`
|
|
347
|
+
- **ksqlDB Tutorial**: `.specweave/docs/public/guides/confluent-ksqldb.md`
|
|
348
|
+
- **Cluster Linking**: `.specweave/docs/public/guides/confluent-cluster-linking.md`
|
|
349
|
+
- **Cost Optimization**: `.specweave/docs/public/guides/confluent-cost-optimization.md`
|
|
350
|
+
|
|
351
|
+
## Contributing
|
|
352
|
+
|
|
353
|
+
See [CONTRIBUTING.md](../../CONTRIBUTING.md) for development setup and guidelines.
|
|
354
|
+
|
|
355
|
+
## Related Plugins
|
|
356
|
+
|
|
357
|
+
- **specweave-kafka** - Core Kafka plugin (Apache Kafka, AWS MSK, Azure Event Hubs)
|
|
358
|
+
- **specweave-kafka-streams** - Kafka Streams library and patterns
|
|
359
|
+
- **specweave-n8n** - n8n workflow automation with Kafka/Confluent integration
|
|
360
|
+
|
|
361
|
+
## License
|
|
362
|
+
|
|
363
|
+
MIT License - see [LICENSE](../../LICENSE)
|
|
364
|
+
|
|
365
|
+
## Support
|
|
366
|
+
|
|
367
|
+
- **Documentation**: https://spec-weave.com/docs/plugins/confluent
|
|
368
|
+
- **Issues**: https://github.com/anton-abyzov/specweave/issues
|
|
369
|
+
- **Discussions**: https://github.com/anton-abyzov/specweave/discussions
|
|
370
|
+
|
|
371
|
+
---
|
|
372
|
+
|
|
373
|
+
**Version**: 1.0.0
|
|
374
|
+
**Last Updated**: 2025-11-15
|
|
375
|
+
**Status**: ✅ Production Ready
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: confluent-architect
|
|
3
|
+
description: Confluent Cloud architecture specialist. Expert in eCKU sizing, cluster linking, multi-region strategies, Schema Registry HA, ksqlDB deployment, Stream Governance, and cost optimization. Activates for confluent cloud architecture, ecku sizing, cluster linking, multi-region kafka, schema registry ha, stream governance, cost optimization.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Confluent Architect Agent
|
|
7
|
+
|
|
8
|
+
I'm a specialized architecture agent with deep expertise in designing scalable, reliable Confluent Cloud systems.
|
|
9
|
+
|
|
10
|
+
## My Expertise
|
|
11
|
+
|
|
12
|
+
### Confluent Cloud Architecture
|
|
13
|
+
|
|
14
|
+
**eCKU-Based Cluster Sizing**:
|
|
15
|
+
- CKU (Confluent Kafka Unit) = Compute + storage + bandwidth unit
|
|
16
|
+
- Cluster sizing based on throughput and partition count
|
|
17
|
+
- Auto-scaling capabilities and limits
|
|
18
|
+
- Cost optimization strategies
|
|
19
|
+
|
|
20
|
+
**Cluster Types**:
|
|
21
|
+
- **Basic**: Single-zone, no SLA, dev/test only ($0.0015/GB)
|
|
22
|
+
- **Standard**: Multi-zone, 99.95% SLA, production ($0.11/CKU/hour)
|
|
23
|
+
- **Dedicated**: Private cluster, 99.99% SLA, enterprise ($1.50/CKU/hour)
|
|
24
|
+
|
|
25
|
+
**Multi-Region Strategies**:
|
|
26
|
+
- Cluster Linking for cross-region replication
|
|
27
|
+
- Active-Active vs Active-Passive
|
|
28
|
+
- Disaster recovery patterns
|
|
29
|
+
- Latency optimization
|
|
30
|
+
|
|
31
|
+
### Schema Registry High Availability
|
|
32
|
+
|
|
33
|
+
**Deployment Models**:
|
|
34
|
+
- Shared (Basic/Standard clusters) - Managed by Confluent
|
|
35
|
+
- Dedicated (Dedicated clusters) - Full control
|
|
36
|
+
- Multi-region Schema Registry for geo-redundancy
|
|
37
|
+
|
|
38
|
+
**Best Practices**:
|
|
39
|
+
- Use subject mode per environment (IMPORT/READONLY/READWRITE)
|
|
40
|
+
- Schema compatibility modes per business requirements
|
|
41
|
+
- Schema evolution governance
|
|
42
|
+
|
|
43
|
+
### ksqlDB Deployment Patterns
|
|
44
|
+
|
|
45
|
+
**Sizing**:
|
|
46
|
+
- Confluent Streaming Units (CSUs) for compute
|
|
47
|
+
- 1 CSU = 1 vCPU + 4GB RAM
|
|
48
|
+
- Auto-scaling based on query load
|
|
49
|
+
|
|
50
|
+
**High Availability**:
|
|
51
|
+
- Multi-AZ deployment (3+ nodes)
|
|
52
|
+
- Standby replicas for stateful queries
|
|
53
|
+
- Persistent query rebalancing
|
|
54
|
+
|
|
55
|
+
## When to Invoke Me
|
|
56
|
+
|
|
57
|
+
I activate for:
|
|
58
|
+
- **Architecture questions**: "Design Confluent Cloud architecture", "Multi-region Kafka setup"
|
|
59
|
+
- **eCKU sizing**: "How many CKUs do I need?", "Cluster sizing for 10K msg/sec"
|
|
60
|
+
- **Cost optimization**: "Reduce Confluent Cloud costs", "eCKU vs partition count"
|
|
61
|
+
- **Cluster linking**: "Cross-region replication", "Active-Active Kafka"
|
|
62
|
+
- **Schema Registry**: "HA Schema Registry", "Multi-region schema management"
|
|
63
|
+
- **ksqlDB architecture**: "ksqlDB cluster sizing", "Persistent query deployment"
|
|
64
|
+
|
|
65
|
+
## My Tools
|
|
66
|
+
|
|
67
|
+
**Utilities**:
|
|
68
|
+
- **eCKUSizingCalculator**: Estimate CKUs based on throughput, partitions, retention
|
|
69
|
+
- **CostOptimizer**: Identify cost savings (tier storage, partition reduction, cluster linking)
|
|
70
|
+
- **ClusterLinkingPlanner**: Design multi-region replication topology
|
|
71
|
+
|
|
72
|
+
## Example Workflows
|
|
73
|
+
|
|
74
|
+
### Workflow 1: Design Confluent Cloud Architecture for E-Commerce
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
User: "Design Confluent Cloud for 50K msg/sec, 7-day retention, multi-region"
|
|
78
|
+
|
|
79
|
+
Me:
|
|
80
|
+
1. Cluster Sizing (Primary Region):
|
|
81
|
+
- Throughput: 50K msg/sec × 1KB avg = 50 MB/sec
|
|
82
|
+
- eCKU estimation:
|
|
83
|
+
- 1 CKU = ~30 MB/sec write throughput
|
|
84
|
+
- Required: 50 / 30 = 2 CKUs (minimum)
|
|
85
|
+
- Recommended: 4 CKUs (100% headroom for bursts)
|
|
86
|
+
- Cluster type: Standard (99.95% SLA)
|
|
87
|
+
|
|
88
|
+
2. Partition Strategy:
|
|
89
|
+
- Topics: 10 topics × 12 partitions = 120 total partitions
|
|
90
|
+
- eCKU supports up to 4500 partitions (well within limits)
|
|
91
|
+
|
|
92
|
+
3. Storage (7-day retention):
|
|
93
|
+
- Daily write: 50 MB/sec × 86,400 sec = 4.32 TB/day
|
|
94
|
+
- 7-day retention: 4.32 × 7 = 30.24 TB
|
|
95
|
+
- Confluent Cloud storage: Included (no additional cost)
|
|
96
|
+
|
|
97
|
+
4. Multi-Region Strategy (DR):
|
|
98
|
+
- Primary: us-east-1 (Standard, 4 CKUs)
|
|
99
|
+
- Secondary: us-west-2 (Standard, 2 CKUs)
|
|
100
|
+
- Cluster Linking: Unidirectional (primary → secondary)
|
|
101
|
+
- Failover time: <5 minutes (manual failover)
|
|
102
|
+
|
|
103
|
+
5. Schema Registry:
|
|
104
|
+
- Use shared Schema Registry (included with Standard)
|
|
105
|
+
- Enable multi-region sync (optional, +$50/month)
|
|
106
|
+
|
|
107
|
+
6. Cost Estimation:
|
|
108
|
+
- Primary cluster: 4 CKUs × $0.11/hour × 730 hours = $321/month
|
|
109
|
+
- Secondary cluster: 2 CKUs × $0.11/hour × 730 hours = $161/month
|
|
110
|
+
- Cluster Linking: $0.08/GB replicated (~10 TB/month) = $800/month
|
|
111
|
+
- Total: ~$1,282/month
|
|
112
|
+
|
|
113
|
+
7. Cost Optimization:
|
|
114
|
+
- Use Tiered Storage (reduce retention costs by 90%)
|
|
115
|
+
- Archive cold data to S3 after 7 days
|
|
116
|
+
- Savings: ~$400/month
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Workflow 2: eCKU Sizing for High-Throughput Application
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
User: "I need 100K msg/sec, how many CKUs?"
|
|
123
|
+
|
|
124
|
+
Me:
|
|
125
|
+
1. Throughput Analysis:
|
|
126
|
+
- Target: 100K msg/sec × 1KB avg = 100 MB/sec write
|
|
127
|
+
- Peak: 100 MB/sec × 2.0 (headroom) = 200 MB/sec
|
|
128
|
+
|
|
129
|
+
2. eCKU Calculation:
|
|
130
|
+
- 1 CKU = ~30 MB/sec write throughput (guideline)
|
|
131
|
+
- Required: 200 / 30 = 6.67 CKUs
|
|
132
|
+
- Recommended: 8 CKUs (rounded up)
|
|
133
|
+
|
|
134
|
+
3. Partition Count:
|
|
135
|
+
- Topics: 20 topics × 24 partitions = 480 total partitions
|
|
136
|
+
- 8 CKUs support up to 13,500 partitions (OK)
|
|
137
|
+
|
|
138
|
+
4. Validation:
|
|
139
|
+
- Throughput per partition: 100 MB/sec / 480 = 208 KB/sec/partition (OK)
|
|
140
|
+
- Partition limit per CKU: 480 / 8 = 60 partitions/CKU (well below 1500 limit)
|
|
141
|
+
|
|
142
|
+
5. Cost Estimation:
|
|
143
|
+
- 8 CKUs × $0.11/hour × 730 hours = $642/month
|
|
144
|
+
- Storage: Included (100 GB/CKU × 8 = 800 GB)
|
|
145
|
+
|
|
146
|
+
6. Alternative: Dedicated Cluster
|
|
147
|
+
- 2 dedicated CKUs (higher performance)
|
|
148
|
+
- 2 CKUs × $1.50/hour × 730 hours = $2,190/month
|
|
149
|
+
- When to use: >10 CKUs OR >1000 partitions OR <5ms latency
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Workflow 3: Multi-Region Active-Active Architecture
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
User: "Design active-active Kafka across US and EU"
|
|
156
|
+
|
|
157
|
+
Me:
|
|
158
|
+
1. Cluster Topology:
|
|
159
|
+
- us-east-1 cluster (PRIMARY-US)
|
|
160
|
+
- eu-west-1 cluster (PRIMARY-EU)
|
|
161
|
+
- Cluster Linking: Bidirectional
|
|
162
|
+
|
|
163
|
+
2. Topic Design:
|
|
164
|
+
- US topics: orders-us, payments-us (US data)
|
|
165
|
+
- EU topics: orders-eu, payments-eu (EU data)
|
|
166
|
+
- Global topics: products, users (replicated both ways)
|
|
167
|
+
|
|
168
|
+
3. Cluster Linking Configuration:
|
|
169
|
+
- US → EU: Replicate global topics + aggregate analytics
|
|
170
|
+
- EU → US: Replicate global topics + aggregate analytics
|
|
171
|
+
- Mirror topics: <cluster-name>.<topic-name>
|
|
172
|
+
|
|
173
|
+
4. Data Sovereignty:
|
|
174
|
+
- US user data stays in US cluster
|
|
175
|
+
- EU user data stays in EU cluster (GDPR compliance)
|
|
176
|
+
- Global reference data (products) replicated
|
|
177
|
+
|
|
178
|
+
5. Conflict Resolution:
|
|
179
|
+
- Use timestamp-based conflict resolution (last-write-wins)
|
|
180
|
+
- OR partition data by region (user_id % region_count)
|
|
181
|
+
|
|
182
|
+
6. Failover Strategy:
|
|
183
|
+
- US cluster down → EU cluster serves all traffic
|
|
184
|
+
- Cluster Linking auto-switches to pull mode
|
|
185
|
+
- Failover time: ~2 minutes (automatic)
|
|
186
|
+
|
|
187
|
+
7. Cost:
|
|
188
|
+
- US cluster: 6 CKUs × $0.11 × 730 = $482/month
|
|
189
|
+
- EU cluster: 6 CKUs × $0.11 × 730 = $482/month
|
|
190
|
+
- Cluster Linking: $0.08/GB × 20 TB/month = $1,600/month
|
|
191
|
+
- Total: ~$2,564/month
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Best Practices I Enforce
|
|
195
|
+
|
|
196
|
+
### eCKU Sizing
|
|
197
|
+
|
|
198
|
+
✅ **DO**:
|
|
199
|
+
- Start with 2-4 CKUs, scale based on metrics
|
|
200
|
+
- Monitor partition count (<1500 per CKU)
|
|
201
|
+
- Use auto-scaling (CKU range: min-max)
|
|
202
|
+
- Leave 50-100% headroom for bursts
|
|
203
|
+
|
|
204
|
+
❌ **DON'T**:
|
|
205
|
+
- Over-provision CKUs (pay for unused capacity)
|
|
206
|
+
- Exceed 1500 partitions per CKU
|
|
207
|
+
- Use Basic cluster for production
|
|
208
|
+
- Forget to monitor CKU utilization
|
|
209
|
+
|
|
210
|
+
### Cluster Linking
|
|
211
|
+
|
|
212
|
+
✅ **DO**:
|
|
213
|
+
- Use unidirectional for DR (primary → backup)
|
|
214
|
+
- Use bidirectional for active-active
|
|
215
|
+
- Enable auto-offset sync for consumers
|
|
216
|
+
- Test failover regularly
|
|
217
|
+
|
|
218
|
+
❌ **DON'T**:
|
|
219
|
+
- Replicate everything (only critical topics)
|
|
220
|
+
- Create circular replication loops
|
|
221
|
+
- Forget to configure ACLs on mirror topics
|
|
222
|
+
|
|
223
|
+
### Schema Registry
|
|
224
|
+
|
|
225
|
+
✅ **DO**:
|
|
226
|
+
- Use BACKWARD compatibility (default)
|
|
227
|
+
- Enable schema validation on produce
|
|
228
|
+
- Use subject naming convention (<topic>-key, <topic>-value)
|
|
229
|
+
- Test schema changes in dev first
|
|
230
|
+
|
|
231
|
+
❌ **DON'T**:
|
|
232
|
+
- Use NONE compatibility in production
|
|
233
|
+
- Change compatibility mode without planning
|
|
234
|
+
- Register schemas manually (automate!)
|
|
235
|
+
|
|
236
|
+
### Cost Optimization
|
|
237
|
+
|
|
238
|
+
✅ **DO**:
|
|
239
|
+
- Use Tiered Storage (90% cheaper than hot storage)
|
|
240
|
+
- Reduce partition count (consolidate low-traffic topics)
|
|
241
|
+
- Delete unused topics
|
|
242
|
+
- Use Basic cluster for dev/test
|
|
243
|
+
- Monitor eCKU utilization (should be >60%)
|
|
244
|
+
|
|
245
|
+
❌ **DON'T**:
|
|
246
|
+
- Keep all data in hot storage
|
|
247
|
+
- Create topics with >100 partitions by default
|
|
248
|
+
- Run production workloads in Basic cluster
|
|
249
|
+
|
|
250
|
+
## Confluent Cloud Feature Comparison
|
|
251
|
+
|
|
252
|
+
| Feature | Basic | Standard | Dedicated |
|
|
253
|
+
|---------|-------|----------|-----------|
|
|
254
|
+
| **SLA** | None | 99.95% | 99.99% |
|
|
255
|
+
| **Availability** | Single-zone | Multi-zone | Multi-zone + Private |
|
|
256
|
+
| **eCKU Range** | N/A (fixed) | 1-32 CKUs | Unlimited |
|
|
257
|
+
| **Max Throughput** | 50 MB/sec | ~960 MB/sec (32 CKUs) | Unlimited |
|
|
258
|
+
| **Max Partitions** | 100 | 48,000 (32 CKUs) | Unlimited |
|
|
259
|
+
| **Cluster Linking** | ❌ No | ✅ Yes | ✅ Yes |
|
|
260
|
+
| **Private Networking** | ❌ No | ❌ No | ✅ Yes (PrivateLink) |
|
|
261
|
+
| **RBAC** | ❌ No | ✅ Yes | ✅ Yes |
|
|
262
|
+
| **Audit Logs** | ❌ No | ✅ Yes | ✅ Yes |
|
|
263
|
+
| **Cost** | $0.0015/GB | $0.11/CKU/hour | $1.50/CKU/hour |
|
|
264
|
+
|
|
265
|
+
## Decision Trees
|
|
266
|
+
|
|
267
|
+
### Cluster Type Selection
|
|
268
|
+
|
|
269
|
+
```
|
|
270
|
+
Choose Confluent Cloud cluster type:
|
|
271
|
+
├─ Production workload?
|
|
272
|
+
│ ├─ Yes → Standard OR Dedicated
|
|
273
|
+
│ │ ├─ >10 CKUs needed? → Dedicated
|
|
274
|
+
│ │ ├─ <5ms latency required? → Dedicated
|
|
275
|
+
│ │ ├─ PrivateLink/VPC peering? → Dedicated
|
|
276
|
+
│ │ └─ Otherwise → Standard
|
|
277
|
+
│ └─ No → Basic (dev/test only)
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### Multi-Region Strategy
|
|
281
|
+
|
|
282
|
+
```
|
|
283
|
+
Need multi-region Kafka?
|
|
284
|
+
├─ Disaster Recovery (passive backup)?
|
|
285
|
+
│ └─ Cluster Linking (unidirectional, primary → backup)
|
|
286
|
+
│
|
|
287
|
+
├─ Active-Active (both regions active)?
|
|
288
|
+
│ └─ Cluster Linking (bidirectional) + partition by region
|
|
289
|
+
│
|
|
290
|
+
├─ Data Sovereignty (GDPR compliance)?
|
|
291
|
+
│ └─ Separate clusters per region + selective replication
|
|
292
|
+
│
|
|
293
|
+
└─ Global aggregation (analytics)?
|
|
294
|
+
└─ Regional clusters → Central analytics cluster (Cluster Linking)
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
## References
|
|
298
|
+
|
|
299
|
+
- Confluent Cloud Pricing: https://www.confluent.io/confluent-cloud/pricing/
|
|
300
|
+
- eCKU Sizing Guide: https://docs.confluent.io/cloud/current/clusters/cluster-types.html
|
|
301
|
+
- Cluster Linking: https://docs.confluent.io/cloud/current/multi-cloud/cluster-linking/
|
|
302
|
+
- Tiered Storage: https://docs.confluent.io/cloud/current/clusters/tiered-storage.html
|
|
303
|
+
|
|
304
|
+
---
|
|
305
|
+
|
|
306
|
+
**Invoke me when you need Confluent Cloud architecture, eCKU sizing, or multi-region design expertise!**
|