specweave 0.18.1 → 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/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/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/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-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,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress Comment Builder - Generate progress update comments for GitHub issues
|
|
3
|
+
*
|
|
4
|
+
* Architecture:
|
|
5
|
+
* - Reads user story files from living docs
|
|
6
|
+
* - Extracts current AC completion status
|
|
7
|
+
* - Formats progress comment with checkboxes
|
|
8
|
+
* - Creates audit trail of changes over time
|
|
9
|
+
*
|
|
10
|
+
* Key Principle: IMMUTABLE DESCRIPTIONS
|
|
11
|
+
* - Issue description created once (snapshot)
|
|
12
|
+
* - All updates via progress comments (current state)
|
|
13
|
+
* - Complete audit trail preserved
|
|
14
|
+
*/
|
|
15
|
+
interface AcceptanceCriterion {
|
|
16
|
+
id: string;
|
|
17
|
+
description: string;
|
|
18
|
+
completed: boolean;
|
|
19
|
+
priority: string;
|
|
20
|
+
testable: boolean;
|
|
21
|
+
}
|
|
22
|
+
interface Task {
|
|
23
|
+
id: string;
|
|
24
|
+
title: string;
|
|
25
|
+
status: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface ProgressSummary {
|
|
28
|
+
totalACs: number;
|
|
29
|
+
completedACs: number;
|
|
30
|
+
percentage: number;
|
|
31
|
+
statusSummary: string;
|
|
32
|
+
completedCriteria: AcceptanceCriterion[];
|
|
33
|
+
remainingCriteria: AcceptanceCriterion[];
|
|
34
|
+
tasks: Task[];
|
|
35
|
+
}
|
|
36
|
+
export declare class ProgressCommentBuilder {
|
|
37
|
+
private userStoryPath;
|
|
38
|
+
private projectRoot;
|
|
39
|
+
constructor(userStoryPath: string, projectRoot?: string);
|
|
40
|
+
/**
|
|
41
|
+
* Build complete progress comment
|
|
42
|
+
*/
|
|
43
|
+
buildProgressComment(incrementId: string): Promise<string>;
|
|
44
|
+
/**
|
|
45
|
+
* Calculate progress summary
|
|
46
|
+
*/
|
|
47
|
+
calculateProgressSummary(): Promise<ProgressSummary>;
|
|
48
|
+
/**
|
|
49
|
+
* Format AC checkboxes (for inline display)
|
|
50
|
+
*/
|
|
51
|
+
formatACCheckboxes(): string;
|
|
52
|
+
/**
|
|
53
|
+
* Format task checkboxes (for inline display)
|
|
54
|
+
*/
|
|
55
|
+
formatTaskCheckboxes(): string;
|
|
56
|
+
/**
|
|
57
|
+
* Calculate progress percentage
|
|
58
|
+
*/
|
|
59
|
+
calculateProgressPercentage(): Promise<number>;
|
|
60
|
+
/**
|
|
61
|
+
* Extract frontmatter from user story file
|
|
62
|
+
*/
|
|
63
|
+
private extractFrontmatter;
|
|
64
|
+
/**
|
|
65
|
+
* Extract acceptance criteria from content
|
|
66
|
+
*/
|
|
67
|
+
private extractAcceptanceCriteria;
|
|
68
|
+
/**
|
|
69
|
+
* Extract tasks from Implementation section
|
|
70
|
+
*/
|
|
71
|
+
private extractTasks;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* CLI entry point for generating progress comments
|
|
75
|
+
*/
|
|
76
|
+
export declare function main(): Promise<void>;
|
|
77
|
+
export {};
|
|
78
|
+
//# sourceMappingURL=progress-comment-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-comment-builder.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/progress-comment-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAgBH,UAAU,mBAAmB;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,IAAI;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,mBAAmB,EAAE,CAAC;IACzC,iBAAiB,EAAE,mBAAmB,EAAE,CAAC;IACzC,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAS;gBAEhB,aAAa,EAAE,MAAM,EAAE,WAAW,GAAE,MAAsB;IAKtE;;OAEG;IACG,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAsEhE;;OAEG;IACG,wBAAwB,IAAI,OAAO,CAAC,eAAe,CAAC;IAoC1D;;OAEG;IACH,kBAAkB,IAAI,MAAM;IAM5B;;OAEG;IACH,oBAAoB,IAAI,MAAM;IAM9B;;OAEG;IACG,2BAA2B,IAAI,OAAO,CAAC,MAAM,CAAC;IAKpD;;OAEG;YACW,kBAAkB;IAWhC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA2BjC;;OAEG;YACW,YAAY;CAgD3B;AAED;;GAEG;AACH,wBAAsB,IAAI,kBAezB"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress Comment Builder - Generate progress update comments for GitHub issues
|
|
3
|
+
*
|
|
4
|
+
* Architecture:
|
|
5
|
+
* - Reads user story files from living docs
|
|
6
|
+
* - Extracts current AC completion status
|
|
7
|
+
* - Formats progress comment with checkboxes
|
|
8
|
+
* - Creates audit trail of changes over time
|
|
9
|
+
*
|
|
10
|
+
* Key Principle: IMMUTABLE DESCRIPTIONS
|
|
11
|
+
* - Issue description created once (snapshot)
|
|
12
|
+
* - All updates via progress comments (current state)
|
|
13
|
+
* - Complete audit trail preserved
|
|
14
|
+
*/
|
|
15
|
+
import { readFile } from 'fs/promises';
|
|
16
|
+
import { existsSync } from 'fs';
|
|
17
|
+
import * as path from 'path';
|
|
18
|
+
import * as yaml from 'yaml';
|
|
19
|
+
export class ProgressCommentBuilder {
|
|
20
|
+
constructor(userStoryPath, projectRoot = process.cwd()) {
|
|
21
|
+
this.userStoryPath = userStoryPath;
|
|
22
|
+
this.projectRoot = projectRoot;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Build complete progress comment
|
|
26
|
+
*/
|
|
27
|
+
async buildProgressComment(incrementId) {
|
|
28
|
+
const summary = await this.calculateProgressSummary();
|
|
29
|
+
const frontmatter = await this.extractFrontmatter();
|
|
30
|
+
let comment = '';
|
|
31
|
+
// Header
|
|
32
|
+
comment += `📊 **Progress Update from Increment ${incrementId}**\n\n`;
|
|
33
|
+
comment += `**Status**: ${summary.statusSummary} (${summary.completedACs}/${summary.totalACs} AC implemented - ${summary.percentage}%)\n\n`;
|
|
34
|
+
// Completed Acceptance Criteria
|
|
35
|
+
if (summary.completedCriteria.length > 0) {
|
|
36
|
+
comment += `## ✅ Completed Acceptance Criteria\n\n`;
|
|
37
|
+
for (const ac of summary.completedCriteria) {
|
|
38
|
+
const priority = ac.priority ? ` (${ac.priority})` : '';
|
|
39
|
+
const testable = ac.testable ? ' [testable]' : '';
|
|
40
|
+
comment += `- [x] **${ac.id}**: ${ac.description}${priority}${testable}\n`;
|
|
41
|
+
}
|
|
42
|
+
comment += '\n';
|
|
43
|
+
}
|
|
44
|
+
// Remaining Work
|
|
45
|
+
if (summary.remainingCriteria.length > 0) {
|
|
46
|
+
// Group by priority
|
|
47
|
+
const p1 = summary.remainingCriteria.filter(ac => ac.priority === 'P1');
|
|
48
|
+
const p2 = summary.remainingCriteria.filter(ac => ac.priority === 'P2');
|
|
49
|
+
const p3 = summary.remainingCriteria.filter(ac => ac.priority === 'P3');
|
|
50
|
+
if (p1.length > 0) {
|
|
51
|
+
comment += `## 🔴 Remaining Work (P1 - Critical)\n\n`;
|
|
52
|
+
for (const ac of p1) {
|
|
53
|
+
const testable = ac.testable ? ' [testable]' : '';
|
|
54
|
+
comment += `- [ ] **${ac.id}**: ${ac.description} (P1)${testable}\n`;
|
|
55
|
+
}
|
|
56
|
+
comment += '\n';
|
|
57
|
+
}
|
|
58
|
+
if (p2.length > 0 || p3.length > 0) {
|
|
59
|
+
comment += `## ⏳ Remaining Work (P2-P3)\n\n`;
|
|
60
|
+
for (const ac of [...p2, ...p3]) {
|
|
61
|
+
const priority = ac.priority ? ` (${ac.priority})` : '';
|
|
62
|
+
const testable = ac.testable ? ' [testable]' : '';
|
|
63
|
+
comment += `- [ ] **${ac.id}**: ${ac.description}${priority}${testable}\n`;
|
|
64
|
+
}
|
|
65
|
+
comment += '\n';
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Tasks (if any)
|
|
69
|
+
if (summary.tasks.length > 0) {
|
|
70
|
+
const completedTasks = summary.tasks.filter(t => t.status).length;
|
|
71
|
+
const totalTasks = summary.tasks.length;
|
|
72
|
+
comment += `## 📋 Implementation Tasks (${completedTasks}/${totalTasks})\n\n`;
|
|
73
|
+
for (const task of summary.tasks) {
|
|
74
|
+
const checkbox = task.status ? '[x]' : '[ ]';
|
|
75
|
+
comment += `- ${checkbox} ${task.id}: ${task.title}\n`;
|
|
76
|
+
}
|
|
77
|
+
comment += '\n';
|
|
78
|
+
}
|
|
79
|
+
// Footer
|
|
80
|
+
comment += `---\n\n`;
|
|
81
|
+
comment += `🤖 Auto-synced by SpecWeave | `;
|
|
82
|
+
comment += `[View increment](../../increments/${incrementId}) | `;
|
|
83
|
+
comment += `${new Date().toISOString().split('T')[0]}\n`;
|
|
84
|
+
return comment;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Calculate progress summary
|
|
88
|
+
*/
|
|
89
|
+
async calculateProgressSummary() {
|
|
90
|
+
const content = await readFile(this.userStoryPath, 'utf-8');
|
|
91
|
+
const acceptanceCriteria = this.extractAcceptanceCriteria(content);
|
|
92
|
+
const tasks = await this.extractTasks(content);
|
|
93
|
+
const completedCriteria = acceptanceCriteria.filter(ac => ac.completed);
|
|
94
|
+
const remainingCriteria = acceptanceCriteria.filter(ac => !ac.completed);
|
|
95
|
+
const totalACs = acceptanceCriteria.length;
|
|
96
|
+
const completedACs = completedCriteria.length;
|
|
97
|
+
const percentage = totalACs > 0 ? Math.round((completedACs / totalACs) * 100) : 0;
|
|
98
|
+
// Determine status summary
|
|
99
|
+
let statusSummary = 'In Progress';
|
|
100
|
+
if (completedACs === totalACs && totalACs > 0) {
|
|
101
|
+
statusSummary = 'Complete';
|
|
102
|
+
}
|
|
103
|
+
else if (completedACs > 0) {
|
|
104
|
+
// Check if all P1 are done
|
|
105
|
+
const p1Criteria = acceptanceCriteria.filter(ac => ac.priority === 'P1');
|
|
106
|
+
const p1Completed = p1Criteria.filter(ac => ac.completed).length;
|
|
107
|
+
if (p1Completed === p1Criteria.length && p1Criteria.length > 0) {
|
|
108
|
+
statusSummary = 'Core Complete';
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
totalACs,
|
|
113
|
+
completedACs,
|
|
114
|
+
percentage,
|
|
115
|
+
statusSummary,
|
|
116
|
+
completedCriteria,
|
|
117
|
+
remainingCriteria,
|
|
118
|
+
tasks,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Format AC checkboxes (for inline display)
|
|
123
|
+
*/
|
|
124
|
+
formatACCheckboxes() {
|
|
125
|
+
// This method is for simple inline formatting
|
|
126
|
+
// The full buildProgressComment does structured formatting
|
|
127
|
+
return ''; // Placeholder for CLI usage if needed
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Format task checkboxes (for inline display)
|
|
131
|
+
*/
|
|
132
|
+
formatTaskCheckboxes() {
|
|
133
|
+
// This method is for simple inline formatting
|
|
134
|
+
// The full buildProgressComment does structured formatting
|
|
135
|
+
return ''; // Placeholder for CLI usage if needed
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Calculate progress percentage
|
|
139
|
+
*/
|
|
140
|
+
async calculateProgressPercentage() {
|
|
141
|
+
const summary = await this.calculateProgressSummary();
|
|
142
|
+
return summary.percentage;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Extract frontmatter from user story file
|
|
146
|
+
*/
|
|
147
|
+
async extractFrontmatter() {
|
|
148
|
+
const content = await readFile(this.userStoryPath, 'utf-8');
|
|
149
|
+
const match = content.match(/^---\n([\s\S]*?)\n---/);
|
|
150
|
+
if (!match) {
|
|
151
|
+
throw new Error(`User story file missing YAML frontmatter: ${this.userStoryPath}`);
|
|
152
|
+
}
|
|
153
|
+
return yaml.parse(match[1]);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Extract acceptance criteria from content
|
|
157
|
+
*/
|
|
158
|
+
extractAcceptanceCriteria(content) {
|
|
159
|
+
const criteria = [];
|
|
160
|
+
// Pattern: - [x] **AC-US4-01**: Description (P1, testable)
|
|
161
|
+
const acPattern = /- \[([ x])\] \*\*AC-US(\d+)-(\d+)\*\*:\s*([^(]+)(?:\(([^)]+)\))?/g;
|
|
162
|
+
let match;
|
|
163
|
+
while ((match = acPattern.exec(content)) !== null) {
|
|
164
|
+
const completed = match[1] === 'x';
|
|
165
|
+
const usNumber = match[2];
|
|
166
|
+
const acNumber = match[3];
|
|
167
|
+
const description = match[4].trim();
|
|
168
|
+
const metadata = match[5] || '';
|
|
169
|
+
criteria.push({
|
|
170
|
+
id: `AC-US${usNumber}-${acNumber}`,
|
|
171
|
+
description,
|
|
172
|
+
completed,
|
|
173
|
+
priority: metadata.includes('P1') ? 'P1' : metadata.includes('P2') ? 'P2' : metadata.includes('P3') ? 'P3' : '',
|
|
174
|
+
testable: metadata.includes('testable'),
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
return criteria;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Extract tasks from Implementation section
|
|
181
|
+
*/
|
|
182
|
+
async extractTasks(content) {
|
|
183
|
+
const tasks = [];
|
|
184
|
+
// Extract increment ID from Implementation section
|
|
185
|
+
const incrementMatch = content.match(/\*\*Increment\*\*:\s*\[([^\]]+)\]/);
|
|
186
|
+
if (!incrementMatch) {
|
|
187
|
+
return tasks; // No increment linked
|
|
188
|
+
}
|
|
189
|
+
const incrementId = incrementMatch[1];
|
|
190
|
+
// Find tasks.md file
|
|
191
|
+
const tasksPath = path.join(this.projectRoot, '.specweave', 'increments', incrementId, 'tasks.md');
|
|
192
|
+
if (!existsSync(tasksPath)) {
|
|
193
|
+
return tasks; // Tasks file not found
|
|
194
|
+
}
|
|
195
|
+
const tasksContent = await readFile(tasksPath, 'utf-8');
|
|
196
|
+
// Extract task links from user story (e.g., - [T-001: Title](link))
|
|
197
|
+
const taskLinkPattern = /- \[([T-\d]+):\s*([^\]]+)\]/g;
|
|
198
|
+
let match;
|
|
199
|
+
while ((match = taskLinkPattern.exec(content)) !== null) {
|
|
200
|
+
const taskId = match[1];
|
|
201
|
+
const taskTitle = match[2].trim();
|
|
202
|
+
// Check if task is completed in tasks.md
|
|
203
|
+
const taskPattern = new RegExp(`### ${taskId}[:\\s].*?\\n\\*\\*Status\\*\\*:\\s*\\[([x ]?)\\]`, 's');
|
|
204
|
+
const taskMatch = tasksContent.match(taskPattern);
|
|
205
|
+
const completed = taskMatch ? taskMatch[1] === 'x' : false;
|
|
206
|
+
tasks.push({
|
|
207
|
+
id: taskId,
|
|
208
|
+
title: taskTitle,
|
|
209
|
+
status: completed,
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
return tasks;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* CLI entry point for generating progress comments
|
|
217
|
+
*/
|
|
218
|
+
export async function main() {
|
|
219
|
+
const args = process.argv.slice(2);
|
|
220
|
+
if (args.length < 4) {
|
|
221
|
+
console.error('Usage: node progress-comment-builder.js --user-story <path> --increment <id>');
|
|
222
|
+
process.exit(1);
|
|
223
|
+
}
|
|
224
|
+
const userStoryPath = args[args.indexOf('--user-story') + 1];
|
|
225
|
+
const incrementId = args[args.indexOf('--increment') + 1];
|
|
226
|
+
const builder = new ProgressCommentBuilder(userStoryPath);
|
|
227
|
+
const comment = await builder.buildProgressComment(incrementId);
|
|
228
|
+
console.log(comment);
|
|
229
|
+
}
|
|
230
|
+
// Run if called directly
|
|
231
|
+
if (require.main === module) {
|
|
232
|
+
main().catch((error) => {
|
|
233
|
+
console.error('Error generating progress comment:', error.message);
|
|
234
|
+
process.exit(1);
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=progress-comment-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-comment-builder.js","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/progress-comment-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User Story Content Builder - GitHub issue content for individual user stories
|
|
3
|
+
*
|
|
4
|
+
* Architecture:
|
|
5
|
+
* - Reads individual us-*.md files from living docs
|
|
6
|
+
* - Extracts ACs and converts to GitHub task checkboxes
|
|
7
|
+
* - Finds and links related tasks from increment tasks.md
|
|
8
|
+
* - Generates rich GitHub issue body with proper formatting
|
|
9
|
+
*
|
|
10
|
+
* Key Features:
|
|
11
|
+
* - Checkable ACs (GitHub task checkboxes)
|
|
12
|
+
* - Task connections (links to increment tasks)
|
|
13
|
+
* - User story description (As a... I want... So that...)
|
|
14
|
+
* - Implementation details
|
|
15
|
+
*/
|
|
16
|
+
interface UserStoryFrontmatter {
|
|
17
|
+
id: string;
|
|
18
|
+
epic: string;
|
|
19
|
+
title: string;
|
|
20
|
+
status: 'complete' | 'active' | 'planning' | 'not-started';
|
|
21
|
+
project: string;
|
|
22
|
+
priority: string;
|
|
23
|
+
created: string;
|
|
24
|
+
completed?: string;
|
|
25
|
+
}
|
|
26
|
+
interface AcceptanceCriterion {
|
|
27
|
+
id: string;
|
|
28
|
+
description: string;
|
|
29
|
+
completed: boolean;
|
|
30
|
+
priority: string;
|
|
31
|
+
testable: boolean;
|
|
32
|
+
}
|
|
33
|
+
interface Task {
|
|
34
|
+
id: string;
|
|
35
|
+
title: string;
|
|
36
|
+
status: boolean;
|
|
37
|
+
link: string;
|
|
38
|
+
}
|
|
39
|
+
export interface UserStoryContent {
|
|
40
|
+
frontmatter: UserStoryFrontmatter;
|
|
41
|
+
userStoryDescription: {
|
|
42
|
+
asA: string;
|
|
43
|
+
iWant: string;
|
|
44
|
+
soThat: string;
|
|
45
|
+
} | null;
|
|
46
|
+
acceptanceCriteria: AcceptanceCriterion[];
|
|
47
|
+
tasks: Task[];
|
|
48
|
+
incrementId: string | null;
|
|
49
|
+
featureId: string;
|
|
50
|
+
}
|
|
51
|
+
export declare class UserStoryContentBuilder {
|
|
52
|
+
private userStoryPath;
|
|
53
|
+
private projectRoot;
|
|
54
|
+
constructor(userStoryPath: string, projectRoot: string);
|
|
55
|
+
/**
|
|
56
|
+
* Parse user story file and extract all content
|
|
57
|
+
*/
|
|
58
|
+
parse(): Promise<UserStoryContent>;
|
|
59
|
+
/**
|
|
60
|
+
* Build GitHub issue body from user story content
|
|
61
|
+
*
|
|
62
|
+
* @param githubRepo Optional GitHub repo in format "owner/repo" for generating URLs
|
|
63
|
+
*/
|
|
64
|
+
buildIssueBody(githubRepo?: string): Promise<string>;
|
|
65
|
+
/**
|
|
66
|
+
* Extract feature ID from epic or path
|
|
67
|
+
*/
|
|
68
|
+
private extractFeatureId;
|
|
69
|
+
/**
|
|
70
|
+
* Extract user story description (As a... I want... So that...)
|
|
71
|
+
*/
|
|
72
|
+
private extractUserStoryDescription;
|
|
73
|
+
/**
|
|
74
|
+
* Extract acceptance criteria from content
|
|
75
|
+
*/
|
|
76
|
+
private extractAcceptanceCriteria;
|
|
77
|
+
/**
|
|
78
|
+
* Extract increment ID from Implementation section
|
|
79
|
+
*/
|
|
80
|
+
private extractIncrementId;
|
|
81
|
+
/**
|
|
82
|
+
* Extract tasks for this user story from increment tasks.md
|
|
83
|
+
*/
|
|
84
|
+
private extractTasks;
|
|
85
|
+
/**
|
|
86
|
+
* Extract highest priority from acceptance criteria
|
|
87
|
+
* Priority order: P1 > P2 > P3
|
|
88
|
+
*/
|
|
89
|
+
private extractPriorityFromACs;
|
|
90
|
+
/**
|
|
91
|
+
* Detect GitHub repository from git remote
|
|
92
|
+
* Returns "owner/repo" format
|
|
93
|
+
*/
|
|
94
|
+
private detectGitHubRepo;
|
|
95
|
+
}
|
|
96
|
+
export {};
|
|
97
|
+
//# sourceMappingURL=user-story-content-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-story-content-builder.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/user-story-content-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,UAAU,oBAAoB;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,aAAa,CAAC;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,mBAAmB;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,IAAI;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,oBAAoB,CAAC;IAClC,oBAAoB,EAAE;QACpB,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,IAAI,CAAC;IACT,kBAAkB,EAAE,mBAAmB,EAAE,CAAC;IAC1C,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,uBAAuB;IAClC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAS;gBAEhB,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAKtD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAoCxC;;;;OAIG;IACG,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuG1D;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAoBnC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA2BjC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;YACW,YAAY;IA+D1B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAuB9B;;;OAGG;YACW,gBAAgB;CAuB/B"}
|