specweave 0.24.11 → 0.26.2
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 +742 -26
- package/bin/specweave.js +14 -0
- package/dist/plugins/specweave-github/lib/CodeValidator.js +2 -2
- package/dist/plugins/specweave-github/lib/CodeValidator.js.map +1 -1
- package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.js +1 -1
- package/dist/plugins/specweave-github/lib/ThreeLayerSyncManager.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-client-v2.d.ts +28 -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 +64 -1
- package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-issue-updater.js +1 -1
- package/dist/plugins/specweave-github/lib/github-issue-updater.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-sync-bidirectional.js +1 -1
- package/dist/plugins/specweave-github/lib/github-sync-bidirectional.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-sync-increment-changes.js +1 -1
- package/dist/plugins/specweave-github/lib/github-sync-increment-changes.js.map +1 -1
- package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/user-story-issue-builder.js +7 -6
- package/dist/plugins/specweave-github/lib/user-story-issue-builder.js.map +1 -1
- package/dist/plugins/specweave-jira/lib/jira-epic-sync.js +1 -1
- package/dist/plugins/specweave-jira/lib/jira-epic-sync.js.map +1 -1
- package/dist/src/adapters/adapter-base.js +1 -1
- package/dist/src/adapters/adapter-base.js.map +1 -1
- package/dist/src/adapters/adapter-loader.js +1 -1
- package/dist/src/adapters/adapter-loader.js.map +1 -1
- package/dist/src/adapters/agents-md-generator.js +1 -1
- package/dist/src/adapters/agents-md-generator.js.map +1 -1
- package/dist/src/adapters/claude/adapter.js +1 -1
- package/dist/src/adapters/claude/adapter.js.map +1 -1
- package/dist/src/adapters/claude-md-generator.js +1 -1
- package/dist/src/adapters/claude-md-generator.js.map +1 -1
- package/dist/src/adapters/codex/adapter.js +1 -1
- package/dist/src/adapters/codex/adapter.js.map +1 -1
- package/dist/src/adapters/cursor/adapter.js +1 -1
- package/dist/src/adapters/cursor/adapter.js.map +1 -1
- package/dist/src/adapters/doc-generator.js +1 -1
- package/dist/src/adapters/doc-generator.js.map +1 -1
- package/dist/src/adapters/gemini/adapter.js +1 -1
- package/dist/src/adapters/gemini/adapter.js.map +1 -1
- package/dist/src/adapters/generic/adapter.js +1 -1
- package/dist/src/adapters/generic/adapter.js.map +1 -1
- package/dist/src/cli/commands/cicd-monitor.js +1 -1
- package/dist/src/cli/commands/cicd-monitor.js.map +1 -1
- package/dist/src/cli/commands/delete-feature.d.ts +14 -0
- package/dist/src/cli/commands/delete-feature.d.ts.map +1 -0
- package/dist/src/cli/commands/delete-feature.js +87 -0
- package/dist/src/cli/commands/delete-feature.js.map +1 -0
- package/dist/src/cli/commands/detect-specs.js +1 -1
- package/dist/src/cli/commands/detect-specs.js.map +1 -1
- package/dist/src/cli/commands/import-external.js +1 -1
- package/dist/src/cli/commands/import-external.js.map +1 -1
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +45 -47
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/install.js +1 -1
- package/dist/src/cli/commands/install.js.map +1 -1
- package/dist/src/cli/commands/list.js +1 -1
- package/dist/src/cli/commands/list.js.map +1 -1
- package/dist/src/cli/commands/migrate-to-multiproject.js +1 -1
- package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -1
- package/dist/src/cli/commands/migrate-to-profiles.js +1 -1
- package/dist/src/cli/commands/migrate-to-profiles.js.map +1 -1
- package/dist/src/cli/commands/plan/agent-invoker.js +1 -1
- package/dist/src/cli/commands/repair-status-desync.js +1 -1
- package/dist/src/cli/commands/repair-status-desync.js.map +1 -1
- package/dist/src/cli/commands/revert-wip-limit.js +1 -1
- package/dist/src/cli/commands/revert-wip-limit.js.map +1 -1
- package/dist/src/cli/commands/sync-specs.js +1 -1
- package/dist/src/cli/commands/sync-specs.js.map +1 -1
- package/dist/src/cli/helpers/init/initial-increment-generator.js +1 -1
- package/dist/src/cli/helpers/init/initial-increment-generator.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/github-multi-repo.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js +15 -36
- package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/index.js +12 -31
- package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/types.d.ts +6 -1
- package/dist/src/cli/helpers/issue-tracker/types.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/types.js.map +1 -1
- package/dist/src/config/import-config.js +1 -1
- package/dist/src/config/import-config.js.map +1 -1
- package/dist/src/config/types.d.ts +203 -1208
- package/dist/src/config/types.d.ts.map +1 -1
- package/dist/src/core/ac-test-validator-cli.js +1 -1
- package/dist/src/core/ac-test-validator-cli.js.map +1 -1
- package/dist/src/core/ac-test-validator.js +1 -1
- package/dist/src/core/ac-test-validator.js.map +1 -1
- package/dist/src/core/brownfield/analyzer.js +1 -1
- package/dist/src/core/brownfield/analyzer.js.map +1 -1
- package/dist/src/core/brownfield/importer.js +1 -1
- package/dist/src/core/brownfield/importer.js.map +1 -1
- package/dist/src/core/cicd/config-loader.js +1 -1
- package/dist/src/core/cicd/config-loader.js.map +1 -1
- package/dist/src/core/cicd/notifier.js +1 -1
- package/dist/src/core/cicd/notifier.js.map +1 -1
- package/dist/src/core/cicd/parent-repo-validator.js +1 -1
- package/dist/src/core/cicd/parent-repo-validator.js.map +1 -1
- package/dist/src/core/cicd/state-manager.js +1 -1
- package/dist/src/core/cicd/state-manager.js.map +1 -1
- package/dist/src/core/config/types.d.ts +46 -12
- package/dist/src/core/config/types.d.ts.map +1 -1
- package/dist/src/core/config/types.js +0 -5
- package/dist/src/core/config/types.js.map +1 -1
- package/dist/src/core/config-manager.js +1 -1
- package/dist/src/core/config-manager.js.map +1 -1
- package/dist/src/core/cost-tracker.js +1 -1
- package/dist/src/core/cost-tracker.js.map +1 -1
- package/dist/src/core/deduplication/command-deduplicator.js +1 -1
- package/dist/src/core/deduplication/command-deduplicator.js.map +1 -1
- package/dist/src/core/feature-deleter/audit-logger.d.ts +30 -0
- package/dist/src/core/feature-deleter/audit-logger.d.ts.map +1 -0
- package/dist/src/core/feature-deleter/audit-logger.js +77 -0
- package/dist/src/core/feature-deleter/audit-logger.js.map +1 -0
- package/dist/src/core/feature-deleter/confirmation-manager.d.ts +39 -0
- package/dist/src/core/feature-deleter/confirmation-manager.d.ts.map +1 -0
- package/dist/src/core/feature-deleter/confirmation-manager.js +89 -0
- package/dist/src/core/feature-deleter/confirmation-manager.js.map +1 -0
- package/dist/src/core/feature-deleter/deletion-transaction.d.ts +51 -0
- package/dist/src/core/feature-deleter/deletion-transaction.d.ts.map +1 -0
- package/dist/src/core/feature-deleter/deletion-transaction.js +185 -0
- package/dist/src/core/feature-deleter/deletion-transaction.js.map +1 -0
- package/dist/src/core/feature-deleter/git-service.d.ts +43 -0
- package/dist/src/core/feature-deleter/git-service.d.ts.map +1 -0
- package/dist/src/core/feature-deleter/git-service.js +127 -0
- package/dist/src/core/feature-deleter/git-service.js.map +1 -0
- package/dist/src/core/feature-deleter/github-service.d.ts +36 -0
- package/dist/src/core/feature-deleter/github-service.d.ts.map +1 -0
- package/dist/src/core/feature-deleter/github-service.js +102 -0
- package/dist/src/core/feature-deleter/github-service.js.map +1 -0
- package/dist/src/core/feature-deleter/index.d.ts +35 -0
- package/dist/src/core/feature-deleter/index.d.ts.map +1 -0
- package/dist/src/core/feature-deleter/index.js +199 -0
- package/dist/src/core/feature-deleter/index.js.map +1 -0
- package/dist/src/core/feature-deleter/types.d.ts +179 -0
- package/dist/src/core/feature-deleter/types.d.ts.map +1 -0
- package/dist/src/core/feature-deleter/types.js +7 -0
- package/dist/src/core/feature-deleter/types.js.map +1 -0
- package/dist/src/core/feature-deleter/validator.d.ts +46 -0
- package/dist/src/core/feature-deleter/validator.d.ts.map +1 -0
- package/dist/src/core/feature-deleter/validator.js +231 -0
- package/dist/src/core/feature-deleter/validator.js.map +1 -0
- package/dist/src/core/hooks/HealthReporter.js +1 -1
- package/dist/src/core/hooks/HealthReporter.js.map +1 -1
- package/dist/src/core/hooks/HookAutoFixer.js +1 -1
- package/dist/src/core/hooks/HookAutoFixer.js.map +1 -1
- package/dist/src/core/hooks/HookScanner.js +1 -1
- package/dist/src/core/hooks/HookScanner.js.map +1 -1
- package/dist/src/core/i18n/language-manager.js +1 -1
- package/dist/src/core/i18n/language-manager.js.map +1 -1
- package/dist/src/core/i18n/locale-manager.js +1 -1
- package/dist/src/core/i18n/locale-manager.js.map +1 -1
- package/dist/src/core/i18n/system-prompt-injector.js +1 -1
- package/dist/src/core/i18n/system-prompt-injector.js.map +1 -1
- package/dist/src/core/increment/ac-status-manager.d.ts.map +1 -1
- package/dist/src/core/increment/ac-status-manager.js +18 -4
- package/dist/src/core/increment/ac-status-manager.js.map +1 -1
- package/dist/src/core/increment/active-increment-manager.js +1 -1
- package/dist/src/core/increment/active-increment-manager.js.map +1 -1
- package/dist/src/core/increment/completion-validator.js +1 -1
- package/dist/src/core/increment/completion-validator.js.map +1 -1
- package/dist/src/core/increment/conflict-resolver.js +1 -1
- package/dist/src/core/increment/conflict-resolver.js.map +1 -1
- package/dist/src/core/increment/desync-detector.js +1 -1
- package/dist/src/core/increment/desync-detector.js.map +1 -1
- package/dist/src/core/increment/discipline-checker.js +1 -1
- package/dist/src/core/increment/discipline-checker.js.map +1 -1
- package/dist/src/core/increment/duplicate-detector.js +1 -1
- package/dist/src/core/increment/duplicate-detector.js.map +1 -1
- package/dist/src/core/increment/increment-archiver.js +1 -1
- package/dist/src/core/increment/increment-archiver.js.map +1 -1
- package/dist/src/core/increment/increment-reopener.js +1 -1
- package/dist/src/core/increment/increment-reopener.js.map +1 -1
- package/dist/src/core/increment/metadata-manager.js +1 -1
- package/dist/src/core/increment/metadata-manager.js.map +1 -1
- package/dist/src/core/increment/metadata-validator.js +1 -1
- package/dist/src/core/increment/metadata-validator.js.map +1 -1
- package/dist/src/core/increment/recent-work-scanner.js +1 -1
- package/dist/src/core/increment/recent-work-scanner.js.map +1 -1
- package/dist/src/core/increment/spec-frontmatter-updater.js +1 -1
- package/dist/src/core/increment/spec-frontmatter-updater.js.map +1 -1
- package/dist/src/core/increment/status-auto-transition.js +1 -1
- package/dist/src/core/increment/status-auto-transition.js.map +1 -1
- package/dist/src/core/increment-status.js +1 -1
- package/dist/src/core/increment-status.js.map +1 -1
- package/dist/src/core/living-docs/content-distributor.js +1 -1
- package/dist/src/core/living-docs/content-distributor.js.map +1 -1
- package/dist/src/core/living-docs/cross-linker.js +1 -1
- package/dist/src/core/living-docs/cross-linker.js.map +1 -1
- package/dist/src/core/living-docs/feature-archiver.js +1 -1
- package/dist/src/core/living-docs/feature-archiver.js.map +1 -1
- package/dist/src/core/living-docs/feature-id-manager.js +1 -1
- package/dist/src/core/living-docs/feature-id-manager.js.map +1 -1
- package/dist/src/core/living-docs/hierarchy-mapper.js +1 -1
- package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.d.ts +14 -0
- package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.js +72 -13
- package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
- package/dist/src/core/living-docs/project-detector.js +1 -1
- package/dist/src/core/living-docs/project-detector.js.map +1 -1
- package/dist/src/core/living-docs/task-project-specific-generator.js +1 -1
- package/dist/src/core/living-docs/task-project-specific-generator.js.map +1 -1
- package/dist/src/core/logging/prompt-logger.js +1 -1
- package/dist/src/core/logging/prompt-logger.js.map +1 -1
- package/dist/src/core/plugin-loader.js +1 -1
- package/dist/src/core/plugin-loader.js.map +1 -1
- package/dist/src/core/project-manager.js +1 -1
- package/dist/src/core/project-manager.js.map +1 -1
- package/dist/src/core/qa/qa-runner.js +1 -1
- package/dist/src/core/qa/qa-runner.js.map +1 -1
- package/dist/src/core/repo-structure/folder-detector.js +1 -1
- package/dist/src/core/repo-structure/folder-detector.js.map +1 -1
- package/dist/src/core/repo-structure/repo-bulk-discovery.d.ts.map +1 -1
- package/dist/src/core/repo-structure/repo-bulk-discovery.js +20 -5
- package/dist/src/core/repo-structure/repo-bulk-discovery.js.map +1 -1
- package/dist/src/core/repo-structure/repo-structure-manager.d.ts.map +1 -1
- package/dist/src/core/repo-structure/repo-structure-manager.js +29 -14
- package/dist/src/core/repo-structure/repo-structure-manager.js.map +1 -1
- package/dist/src/core/repo-structure/setup-state-manager.js +1 -1
- package/dist/src/core/repo-structure/setup-state-manager.js.map +1 -1
- package/dist/src/core/spec-detector.js +1 -1
- package/dist/src/core/spec-detector.js.map +1 -1
- package/dist/src/core/specs/spec-metadata-manager.js +1 -1
- package/dist/src/core/specs/spec-metadata-manager.js.map +1 -1
- package/dist/src/core/status-line/status-line-updater.js +1 -1
- package/dist/src/core/status-line/status-line-updater.js.map +1 -1
- package/dist/src/core/status-line-validator.js +1 -1
- package/dist/src/core/status-line-validator.js.map +1 -1
- package/dist/src/core/sync/bidirectional-engine.js +1 -1
- package/dist/src/core/sync/bidirectional-engine.js.map +1 -1
- package/dist/src/core/sync/profile-manager.js +1 -1
- package/dist/src/core/sync/profile-manager.js.map +1 -1
- package/dist/src/core/sync/project-context.js +1 -1
- package/dist/src/core/sync/project-context.js.map +1 -1
- package/dist/src/core/sync/sync-event-logger.js +1 -1
- package/dist/src/core/sync/sync-event-logger.js.map +1 -1
- package/dist/src/core/types/config.js +1 -1
- package/dist/src/core/types/config.js.map +1 -1
- package/dist/src/core/us-completion-detector.d.ts +124 -0
- package/dist/src/core/us-completion-detector.d.ts.map +1 -0
- package/dist/src/core/us-completion-detector.js +270 -0
- package/dist/src/core/us-completion-detector.js.map +1 -0
- package/dist/src/core/utils/permission-checker.js +1 -1
- package/dist/src/core/utils/permission-checker.js.map +1 -1
- package/dist/src/core/workflow/autonomous-executor.js +1 -1
- package/dist/src/core/workflow/autonomous-executor.js.map +1 -1
- package/dist/src/core/workflow/backlog-scanner.js +1 -1
- package/dist/src/core/workflow/backlog-scanner.js.map +1 -1
- package/dist/src/core/workflow/cost-estimator.js +1 -1
- package/dist/src/core/workflow/cost-estimator.js.map +1 -1
- package/dist/src/core/workflow/state-manager.js +1 -1
- package/dist/src/core/workflow/state-manager.js.map +1 -1
- package/dist/src/importers/duplicate-detector.js +1 -1
- package/dist/src/importers/duplicate-detector.js.map +1 -1
- package/dist/src/importers/item-converter.js +1 -1
- package/dist/src/importers/item-converter.js.map +1 -1
- package/dist/src/init/architecture/types.d.ts +33 -140
- package/dist/src/init/architecture/types.d.ts.map +1 -1
- package/dist/src/init/compliance/types.d.ts +30 -27
- package/dist/src/init/compliance/types.d.ts.map +1 -1
- package/dist/src/init/repo/types.d.ts +11 -34
- package/dist/src/init/repo/types.d.ts.map +1 -1
- package/dist/src/init/research/src/config/types.d.ts +15 -82
- package/dist/src/init/research/src/config/types.d.ts.map +1 -1
- package/dist/src/init/research/types.d.ts +38 -93
- package/dist/src/init/research/types.d.ts.map +1 -1
- package/dist/src/init/team/types.d.ts +4 -42
- package/dist/src/init/team/types.d.ts.map +1 -1
- package/dist/src/integrations/jira/jira-incremental-mapper.d.ts +1 -1
- package/dist/src/integrations/jira/jira-incremental-mapper.d.ts.map +1 -1
- package/dist/src/integrations/jira/jira-incremental-mapper.js +3 -3
- package/dist/src/integrations/jira/jira-incremental-mapper.js.map +1 -1
- package/dist/src/living-docs/fs-id-allocator.js +1 -1
- package/dist/src/living-docs/fs-id-allocator.js.map +1 -1
- package/dist/src/living-docs/id-registry.js +1 -1
- package/dist/src/living-docs/id-registry.js.map +1 -1
- package/dist/src/sync/external-item-sync-service.js +1 -1
- package/dist/src/sync/external-item-sync-service.js.map +1 -1
- package/dist/src/sync/format-preservation-sync.d.ts.map +1 -1
- package/dist/src/sync/format-preservation-sync.js +23 -5
- package/dist/src/sync/format-preservation-sync.js.map +1 -1
- package/dist/src/sync/frontmatter-updater.d.ts +57 -0
- package/dist/src/sync/frontmatter-updater.d.ts.map +1 -0
- package/dist/src/sync/frontmatter-updater.js +147 -0
- package/dist/src/sync/frontmatter-updater.js.map +1 -0
- package/dist/src/sync/sync-coordinator.d.ts +22 -1
- package/dist/src/sync/sync-coordinator.d.ts.map +1 -1
- package/dist/src/sync/sync-coordinator.js +268 -21
- package/dist/src/sync/sync-coordinator.js.map +1 -1
- package/dist/src/sync/sync-metadata.js +1 -1
- package/dist/src/sync/sync-metadata.js.map +1 -1
- package/dist/src/types/living-docs-us-file.d.ts +18 -0
- package/dist/src/types/living-docs-us-file.d.ts.map +1 -1
- package/dist/src/types/living-docs-us-file.js.map +1 -1
- package/dist/src/utils/agents-md-compiler.js +1 -1
- package/dist/src/utils/agents-md-compiler.js.map +1 -1
- package/dist/src/utils/auto-install.js +1 -1
- package/dist/src/utils/auto-install.js.map +1 -1
- package/dist/src/utils/cost-reporter.js +1 -1
- package/dist/src/utils/cost-reporter.js.map +1 -1
- package/dist/src/utils/docs-preview/config-generator.js +1 -1
- package/dist/src/utils/docs-preview/config-generator.js.map +1 -1
- package/dist/src/utils/docs-preview/docusaurus-setup.js +1 -1
- package/dist/src/utils/docs-preview/docusaurus-setup.js.map +1 -1
- package/dist/src/utils/docs-preview/package-installer.js +1 -1
- package/dist/src/utils/docs-preview/package-installer.js.map +1 -1
- package/dist/src/utils/docs-preview/sidebar-builder.js +1 -1
- package/dist/src/utils/docs-preview/sidebar-builder.js.map +1 -1
- package/dist/src/utils/env-file-generator.js +1 -1
- package/dist/src/utils/env-file-generator.js.map +1 -1
- package/dist/src/utils/external-resource-validator.js +1 -1
- package/dist/src/utils/external-resource-validator.js.map +1 -1
- package/dist/src/utils/fs-native.d.ts +51 -5
- package/dist/src/utils/fs-native.d.ts.map +1 -1
- package/dist/src/utils/fs-native.js +100 -5
- package/dist/src/utils/fs-native.js.map +1 -1
- package/dist/src/utils/plugin-validator.js +1 -1
- package/dist/src/utils/plugin-validator.js.map +1 -1
- package/dist/src/utils/project-detection.js +1 -1
- package/dist/src/utils/project-detection.js.map +1 -1
- package/dist/src/utils/project-validator.js +1 -1
- package/dist/src/utils/project-validator.js.map +1 -1
- package/dist/src/utils/spec-parser.js +1 -1
- package/dist/src/utils/spec-parser.js.map +1 -1
- package/dist/src/utils/spec-splitter.js +1 -1
- package/dist/src/utils/spec-splitter.js.map +1 -1
- package/dist/src/validators/ac-coverage-validator.js +1 -1
- package/dist/src/validators/ac-coverage-validator.js.map +1 -1
- package/package.json +5 -6
- package/plugins/specweave/.claude-plugin/plugin.json +17 -11
- package/plugins/specweave/agents/architect/AGENT.md +115 -45
- package/plugins/specweave/agents/code-standards-detective/AGENT.md +47 -0
- package/plugins/specweave/agents/docs-writer/AGENT.md +134 -1
- package/plugins/specweave/agents/increment-quality-judge-v2/AGENT.md +1 -0
- package/plugins/specweave/agents/infrastructure/AGENT.md +48 -1
- package/plugins/specweave/agents/performance/AGENT.md +46 -0
- package/plugins/specweave/agents/pm/AGENT.md +115 -3
- package/plugins/specweave/agents/qa-lead/AGENT.md +40 -1
- package/plugins/specweave/agents/reflective-reviewer/AGENT.md +5 -0
- package/plugins/specweave/agents/security/AGENT.md +45 -0
- package/plugins/specweave/agents/tdd-orchestrator/AGENT.md +128 -1
- package/plugins/specweave/agents/tech-lead/AGENT.md +138 -1
- package/plugins/specweave/agents/test-aware-planner/AGENT.md +76 -6
- package/plugins/specweave/agents/translator/AGENT.md +132 -0
- package/plugins/specweave/commands/specweave-sync-progress.md +616 -0
- package/plugins/specweave/hooks/hooks.json +0 -9
- package/plugins/specweave/hooks/lib/update-status-line.sh +19 -0
- package/plugins/specweave/hooks/post-edit-write-consolidated.sh +335 -0
- package/plugins/specweave/hooks/post-increment-completion.sh +133 -0
- package/plugins/specweave/hooks/post-metadata-change.sh +58 -19
- package/plugins/specweave/hooks/post-task-completion.sh +100 -9
- package/plugins/specweave/hooks/pre-edit-spec.sh +0 -11
- package/plugins/specweave/hooks/pre-edit-write-consolidated.sh +225 -0
- package/plugins/specweave/hooks/pre-task-completion.sh +11 -0
- package/plugins/specweave/hooks/pre-write-spec.sh +0 -11
- package/plugins/specweave/hooks/shared/bulk-operation-detector.sh +167 -0
- package/plugins/specweave/lib/hooks/consolidated-sync.js +78 -3
- package/plugins/specweave/lib/hooks/us-completion-orchestrator.js +135 -0
- package/plugins/specweave/lib/vendor/core/increment/ac-status-manager.js +18 -4
- package/plugins/specweave/lib/vendor/core/increment/ac-status-manager.js.map +1 -1
- package/plugins/specweave/lib/vendor/core/increment/active-increment-manager.js +1 -1
- package/plugins/specweave/lib/vendor/core/increment/active-increment-manager.js.map +1 -1
- package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.js +1 -1
- package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.js.map +1 -1
- package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js +1 -1
- package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js.map +1 -1
- package/plugins/specweave/skills/code-reviewer/SKILL.md +1 -1
- package/plugins/specweave/skills/progress-sync/SKILL.md +405 -0
- package/plugins/specweave-ado/lib/ado-project-detector.js +1 -1
- package/plugins/specweave-ado/lib/ado-project-detector.ts +1 -1
- package/plugins/specweave-ado/lib/conflict-resolver.js +1 -1
- package/plugins/specweave-ado/lib/conflict-resolver.ts +1 -1
- package/plugins/specweave-backend/agents/database-optimizer/AGENT.md +1 -1
- package/plugins/specweave-frontend/agents/frontend-architect/AGENT.md +5 -0
- package/plugins/specweave-github/.claude-plugin/plugin.json +1 -15
- package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +480 -0
- package/plugins/specweave-github/hooks/README.md +34 -25
- package/plugins/specweave-github/lib/CodeValidator.js +1 -1
- package/plugins/specweave-github/lib/CodeValidator.ts +2 -2
- package/plugins/specweave-github/lib/ThreeLayerSyncManager.js +1 -1
- package/plugins/specweave-github/lib/ThreeLayerSyncManager.ts +1 -1
- package/plugins/specweave-github/lib/github-client-v2.js +59 -1
- package/plugins/specweave-github/lib/github-client-v2.ts +82 -1
- package/plugins/specweave-github/lib/github-issue-updater.js +1 -1
- package/plugins/specweave-github/lib/github-issue-updater.ts +1 -1
- package/plugins/specweave-github/lib/github-sync-bidirectional.js +1 -1
- package/plugins/specweave-github/lib/github-sync-bidirectional.ts +1 -1
- package/plugins/specweave-github/lib/github-sync-increment-changes.js +1 -1
- package/plugins/specweave-github/lib/github-sync-increment-changes.ts +1 -1
- package/plugins/specweave-github/lib/user-story-issue-builder.js +4 -4
- package/plugins/specweave-github/lib/user-story-issue-builder.ts +7 -6
- package/plugins/specweave-infrastructure/agents/devops/AGENT.md +48 -1
- package/plugins/specweave-infrastructure/agents/network-engineer/AGENT.md +6 -1
- package/plugins/specweave-infrastructure/agents/observability-engineer/AGENT.md +6 -1
- package/plugins/specweave-infrastructure/agents/performance-engineer/AGENT.md +6 -1
- package/plugins/specweave-infrastructure/agents/sre/AGENT.md +5 -0
- package/plugins/specweave-jira/lib/jira-epic-sync.js +1 -1
- package/plugins/specweave-jira/lib/jira-epic-sync.ts +1 -1
- package/plugins/specweave-kafka/agents/kafka-architect/AGENT.md +5 -0
- package/plugins/specweave-kubernetes/agents/kubernetes-architect/AGENT.md +47 -2
- package/plugins/specweave-ml/agents/data-scientist/AGENT.md +1 -1
- package/plugins/specweave-ml/agents/ml-engineer/AGENT.md +5 -0
- package/plugins/specweave-ml/agents/mlops-engineer/AGENT.md +6 -1
- package/plugins/specweave-payments/agents/payment-integration/AGENT.md +1 -1
- package/plugins/specweave-release/commands/specweave-release-npm.md +130 -2
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +198 -0
- package/plugins/specweave-ado/hooks/hooks.json +0 -15
- package/plugins/specweave-github/hooks/hooks.json +0 -15
- package/plugins/specweave-jira/hooks/hooks.json +0 -15
- package/plugins/specweave-release/hooks/hooks.json +0 -15
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
## Purpose
|
|
9
9
|
|
|
10
|
-
This hook
|
|
10
|
+
This hook provides GitHub Issues sync functionality for SpecWeave increments.
|
|
11
11
|
|
|
12
12
|
**Key Features**:
|
|
13
13
|
- ✅ Updates GitHub issue checkboxes based on `tasks.md` completion status
|
|
@@ -16,13 +16,15 @@ This hook automatically syncs SpecWeave increment progress to GitHub Issues afte
|
|
|
16
16
|
- ✅ Non-blocking (failures don't stop core workflow)
|
|
17
17
|
- ✅ Self-contained (no dependencies on core plugin)
|
|
18
18
|
|
|
19
|
+
**IMPORTANT CHANGE (v0.26.0)**: This hook is NO LONGER automatically triggered on task completion. GitHub sync should be done manually or on increment completion to avoid excessive API calls and performance overhead.
|
|
20
|
+
|
|
19
21
|
---
|
|
20
22
|
|
|
21
23
|
## Available Hooks
|
|
22
24
|
|
|
23
25
|
### 1. `post-task-completion.sh`
|
|
24
26
|
|
|
25
|
-
**Triggers**:
|
|
27
|
+
**Triggers**: Manual invocation or increment completion (NOT on task completion)
|
|
26
28
|
|
|
27
29
|
**Preconditions**:
|
|
28
30
|
- ✅ Active increment exists (`.specweave/increments/####/`)
|
|
@@ -59,30 +61,36 @@ Log: "[GitHub] ✅ GitHub sync complete"
|
|
|
59
61
|
|
|
60
62
|
## Configuration
|
|
61
63
|
|
|
62
|
-
### Hook Registration
|
|
64
|
+
### Hook Registration
|
|
63
65
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
66
|
+
**DEPRECATED (v0.26.0)**: This hook is NO LONGER automatically registered on TodoWrite events.
|
|
67
|
+
|
|
68
|
+
**Previous behavior (v0.24.0 and earlier)**:
|
|
69
|
+
- Hook automatically fired on EVERY task completion
|
|
70
|
+
- Caused excessive GitHub API calls
|
|
71
|
+
- Created performance overhead and duplicate executions
|
|
72
|
+
|
|
73
|
+
**New behavior (v0.26.0+)**:
|
|
74
|
+
- Hook must be invoked manually via `/specweave-github:sync`
|
|
75
|
+
- OR triggered on increment completion (not task completion)
|
|
76
|
+
- Reduces API calls by 90%+
|
|
77
|
+
- Eliminates duplicate hook executions
|
|
78
|
+
|
|
79
|
+
### Usage
|
|
80
|
+
|
|
81
|
+
**Manual Sync** (recommended workflow):
|
|
82
|
+
```bash
|
|
83
|
+
# After completing several tasks, sync progress to GitHub
|
|
84
|
+
/specweave-github:sync
|
|
85
|
+
|
|
86
|
+
# Or sync specific feature
|
|
87
|
+
/specweave-github:sync FS-048
|
|
80
88
|
```
|
|
81
89
|
|
|
82
|
-
**
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
90
|
+
**Automatic Sync Options**:
|
|
91
|
+
1. **On Increment Completion**: Add hook to specweave plugin's post-increment-completion
|
|
92
|
+
2. **Periodic Sync**: Set up cron job or CI/CD trigger
|
|
93
|
+
3. **On Demand**: Call `/specweave-github:sync` when needed
|
|
86
94
|
|
|
87
95
|
### Metadata Format
|
|
88
96
|
|
|
@@ -143,8 +151,9 @@ bash -n plugins/specweave-github/hooks/post-task-completion.sh
|
|
|
143
151
|
|
|
144
152
|
1. Create increment: `/specweave:increment "test feature"`
|
|
145
153
|
2. Create GitHub issue: `/specweave-github:create-issue 0001`
|
|
146
|
-
3. Complete
|
|
147
|
-
4.
|
|
154
|
+
3. Complete several tasks via TodoWrite
|
|
155
|
+
4. **Manually trigger sync**: `/specweave-github:sync`
|
|
156
|
+
5. Check GitHub issue for updates
|
|
148
157
|
|
|
149
158
|
---
|
|
150
159
|
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* @module CodeValidator
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
import fs from 'fs-
|
|
15
|
+
import * as fs from '../../../src/utils/fs-native.js';
|
|
16
16
|
import path from 'path';
|
|
17
17
|
|
|
18
18
|
/**
|
|
@@ -133,7 +133,7 @@ export class CodeValidator {
|
|
|
133
133
|
// Read file content
|
|
134
134
|
const content = await fs.readFile(absolutePath, 'utf-8');
|
|
135
135
|
const lines = content.split('\n');
|
|
136
|
-
const nonEmptyLines = lines.filter(line => line.trim().length > 0);
|
|
136
|
+
const nonEmptyLines = lines.filter((line: string) => line.trim().length > 0);
|
|
137
137
|
|
|
138
138
|
// Check line count
|
|
139
139
|
if (nonEmptyLines.length < this.options.minLines) {
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* @module ThreeLayerSyncManager
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
|
-
import fs from 'fs-
|
|
21
|
+
import * as fs from '../../../src/utils/fs-native.js';
|
|
22
22
|
import path from 'path';
|
|
23
23
|
import { execFileNoThrow } from '../../../src/utils/execFileNoThrow.js';
|
|
24
24
|
import { CodeValidator, type TaskValidationResult } from './CodeValidator.js';
|
|
@@ -162,6 +162,27 @@ FIX: Use /specweave:sync-docs to generate living docs, then sync to GitHub.
|
|
|
162
162
|
);
|
|
163
163
|
}
|
|
164
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* Create User Story issue (for automatic GitHub sync)
|
|
167
|
+
*
|
|
168
|
+
* CRITICAL: This is the CORRECT format for User Story GitHub issues
|
|
169
|
+
* Title format: [FS-XXX][US-YYY] User Story Title
|
|
170
|
+
*
|
|
171
|
+
* Used by: SyncCoordinator.createGitHubIssuesForUserStories()
|
|
172
|
+
*
|
|
173
|
+
* @param params - User story issue parameters
|
|
174
|
+
* @returns Created GitHub issue
|
|
175
|
+
*/
|
|
176
|
+
async createUserStoryIssue(params) {
|
|
177
|
+
const formattedTitle = `[${params.featureId}][${params.userStoryId}] ${params.title}`;
|
|
178
|
+
const allLabels = params.labels || [];
|
|
179
|
+
return await this.createEpicIssue(
|
|
180
|
+
formattedTitle,
|
|
181
|
+
params.body,
|
|
182
|
+
params.milestone || void 0,
|
|
183
|
+
allLabels
|
|
184
|
+
);
|
|
185
|
+
}
|
|
165
186
|
/**
|
|
166
187
|
* Create epic issue (increment-level)
|
|
167
188
|
*/
|
|
@@ -181,7 +202,19 @@ FIX: Use /specweave:sync-docs to generate living docs, then sync to GitHub.
|
|
|
181
202
|
args.push("--label", label);
|
|
182
203
|
}
|
|
183
204
|
if (milestone !== void 0) {
|
|
184
|
-
|
|
205
|
+
if (typeof milestone === "number") {
|
|
206
|
+
const msResult = await execFileNoThrow("gh", [
|
|
207
|
+
"api",
|
|
208
|
+
`repos/${this.fullRepo}/milestones/${milestone}`,
|
|
209
|
+
"--jq",
|
|
210
|
+
".title"
|
|
211
|
+
]);
|
|
212
|
+
if (msResult.exitCode === 0 && msResult.stdout.trim()) {
|
|
213
|
+
args.push("--milestone", msResult.stdout.trim());
|
|
214
|
+
}
|
|
215
|
+
} else {
|
|
216
|
+
args.push("--milestone", milestone);
|
|
217
|
+
}
|
|
185
218
|
}
|
|
186
219
|
const createResult = await execFileNoThrow("gh", args);
|
|
187
220
|
if (createResult.exitCode !== 0) {
|
|
@@ -326,6 +359,31 @@ ${body}`;
|
|
|
326
359
|
);
|
|
327
360
|
}
|
|
328
361
|
}
|
|
362
|
+
/**
|
|
363
|
+
* Get last comment on issue (for idempotency check)
|
|
364
|
+
*
|
|
365
|
+
* Returns the most recent comment body, or null if no comments exist
|
|
366
|
+
*/
|
|
367
|
+
async getLastComment(issueNumber) {
|
|
368
|
+
const result = await execFileNoThrow("gh", [
|
|
369
|
+
"api",
|
|
370
|
+
`repos/${this.fullRepo}/issues/${issueNumber}/comments`,
|
|
371
|
+
"--jq",
|
|
372
|
+
".[-1] | {body: .body, author: .user.login}"
|
|
373
|
+
// Get last comment only
|
|
374
|
+
]);
|
|
375
|
+
if (result.exitCode !== 0) {
|
|
376
|
+
return null;
|
|
377
|
+
}
|
|
378
|
+
if (!result.stdout.trim()) {
|
|
379
|
+
return null;
|
|
380
|
+
}
|
|
381
|
+
try {
|
|
382
|
+
return JSON.parse(result.stdout);
|
|
383
|
+
} catch {
|
|
384
|
+
return null;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
329
387
|
/**
|
|
330
388
|
* Add labels to issue
|
|
331
389
|
*/
|
|
@@ -220,6 +220,40 @@ export class GitHubClientV2 {
|
|
|
220
220
|
}
|
|
221
221
|
}
|
|
222
222
|
|
|
223
|
+
/**
|
|
224
|
+
* Create User Story issue (for automatic GitHub sync)
|
|
225
|
+
*
|
|
226
|
+
* CRITICAL: This is the CORRECT format for User Story GitHub issues
|
|
227
|
+
* Title format: [FS-XXX][US-YYY] User Story Title
|
|
228
|
+
*
|
|
229
|
+
* Used by: SyncCoordinator.createGitHubIssuesForUserStories()
|
|
230
|
+
*
|
|
231
|
+
* @param params - User story issue parameters
|
|
232
|
+
* @returns Created GitHub issue
|
|
233
|
+
*/
|
|
234
|
+
async createUserStoryIssue(params: {
|
|
235
|
+
featureId: string;
|
|
236
|
+
userStoryId: string;
|
|
237
|
+
title: string;
|
|
238
|
+
body: string;
|
|
239
|
+
labels?: string[];
|
|
240
|
+
milestone?: number | null;
|
|
241
|
+
}): Promise<GitHubIssue> {
|
|
242
|
+
// Format title: [FS-XXX][US-YYY] Title
|
|
243
|
+
const formattedTitle = `[${params.featureId}][${params.userStoryId}] ${params.title}`;
|
|
244
|
+
|
|
245
|
+
// Use only provided labels (don't add defaults that may not exist)
|
|
246
|
+
const allLabels = params.labels || [];
|
|
247
|
+
|
|
248
|
+
// Create issue using standard method
|
|
249
|
+
return await this.createEpicIssue(
|
|
250
|
+
formattedTitle,
|
|
251
|
+
params.body,
|
|
252
|
+
params.milestone || undefined,
|
|
253
|
+
allLabels
|
|
254
|
+
);
|
|
255
|
+
}
|
|
256
|
+
|
|
223
257
|
/**
|
|
224
258
|
* Create epic issue (increment-level)
|
|
225
259
|
*/
|
|
@@ -249,7 +283,23 @@ export class GitHubClientV2 {
|
|
|
249
283
|
|
|
250
284
|
// Add milestone
|
|
251
285
|
if (milestone !== undefined) {
|
|
252
|
-
|
|
286
|
+
// gh CLI requires milestone TITLE, not number
|
|
287
|
+
if (typeof milestone === 'number') {
|
|
288
|
+
// Fetch milestone by number to get title
|
|
289
|
+
const msResult = await execFileNoThrow('gh', [
|
|
290
|
+
'api',
|
|
291
|
+
`repos/${this.fullRepo}/milestones/${milestone}`,
|
|
292
|
+
'--jq',
|
|
293
|
+
'.title'
|
|
294
|
+
]);
|
|
295
|
+
|
|
296
|
+
if (msResult.exitCode === 0 && msResult.stdout.trim()) {
|
|
297
|
+
args.push('--milestone', msResult.stdout.trim());
|
|
298
|
+
}
|
|
299
|
+
// If milestone fetch fails, skip milestone assignment (non-blocking)
|
|
300
|
+
} else {
|
|
301
|
+
args.push('--milestone', milestone);
|
|
302
|
+
}
|
|
253
303
|
}
|
|
254
304
|
|
|
255
305
|
// Create issue (returns URL)
|
|
@@ -426,6 +476,37 @@ export class GitHubClientV2 {
|
|
|
426
476
|
}
|
|
427
477
|
}
|
|
428
478
|
|
|
479
|
+
/**
|
|
480
|
+
* Get last comment on issue (for idempotency check)
|
|
481
|
+
*
|
|
482
|
+
* Returns the most recent comment body, or null if no comments exist
|
|
483
|
+
*/
|
|
484
|
+
async getLastComment(issueNumber: number): Promise<{body: string; author: string} | null> {
|
|
485
|
+
// Get all comments (sorted by creation date, newest last)
|
|
486
|
+
const result = await execFileNoThrow('gh', [
|
|
487
|
+
'api',
|
|
488
|
+
`repos/${this.fullRepo}/issues/${issueNumber}/comments`,
|
|
489
|
+
'--jq',
|
|
490
|
+
'.[-1] | {body: .body, author: .user.login}', // Get last comment only
|
|
491
|
+
]);
|
|
492
|
+
|
|
493
|
+
if (result.exitCode !== 0) {
|
|
494
|
+
// If error, return null (no comments or API error)
|
|
495
|
+
return null;
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
if (!result.stdout.trim()) {
|
|
499
|
+
// Empty response = no comments
|
|
500
|
+
return null;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
try {
|
|
504
|
+
return JSON.parse(result.stdout);
|
|
505
|
+
} catch {
|
|
506
|
+
return null;
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
|
|
429
510
|
/**
|
|
430
511
|
* Add labels to issue
|
|
431
512
|
*/
|
|
@@ -152,12 +152,12 @@ User Story ID: ${frontmatter.id}`
|
|
|
152
152
|
return this.extractTasksLegacy(userStoryContent, userStoryId);
|
|
153
153
|
}
|
|
154
154
|
const tasksSection = tasksMatch[1];
|
|
155
|
-
const taskPattern = /^[-*]\s+\[([x ])\]\s
|
|
155
|
+
const taskPattern = /^[-*]\s+\[([x ])\]\s+(?:\[(T-\d+)\]\([^)]+\)|\*\*(T-\d+)\*\*):\s+(.+)$/gm;
|
|
156
156
|
let match;
|
|
157
157
|
while ((match = taskPattern.exec(tasksSection)) !== null) {
|
|
158
158
|
const completed = match[1] === "x";
|
|
159
|
-
const taskId = match[2];
|
|
160
|
-
const taskTitle = match[
|
|
159
|
+
const taskId = match[2] || match[3];
|
|
160
|
+
const taskTitle = match[4].trim();
|
|
161
161
|
tasks.push({
|
|
162
162
|
id: taskId,
|
|
163
163
|
title: taskTitle,
|
|
@@ -203,7 +203,7 @@ User Story ID: ${frontmatter.id}`
|
|
|
203
203
|
const taskId = match[1];
|
|
204
204
|
const taskTitle = match[2].trim();
|
|
205
205
|
const taskBody = match[3];
|
|
206
|
-
const acMatch = taskBody.match(/\*\*AC\*\*:\s*([^\n]+)/);
|
|
206
|
+
const acMatch = taskBody.match(/\*\*(?:Satisfies ACs?|AC)\*\*:\s*([^\n]+)/);
|
|
207
207
|
if (!acMatch) {
|
|
208
208
|
continue;
|
|
209
209
|
}
|
|
@@ -265,14 +265,15 @@ export class UserStoryIssueBuilder {
|
|
|
265
265
|
|
|
266
266
|
const tasksSection = tasksMatch[1];
|
|
267
267
|
|
|
268
|
-
// Pattern: - [x]
|
|
269
|
-
|
|
268
|
+
// Pattern 1 (NEW): - [x] [T-001](link): Task title
|
|
269
|
+
// Pattern 2 (OLD): - [x] **T-001**: Task title
|
|
270
|
+
const taskPattern = /^[-*]\s+\[([x ])\]\s+(?:\[(T-\d+)\]\([^)]+\)|\*\*(T-\d+)\*\*):\s+(.+)$/gm;
|
|
270
271
|
|
|
271
272
|
let match;
|
|
272
273
|
while ((match = taskPattern.exec(tasksSection)) !== null) {
|
|
273
274
|
const completed = match[1] === 'x';
|
|
274
|
-
const taskId = match[2];
|
|
275
|
-
const taskTitle = match[
|
|
275
|
+
const taskId = match[2] || match[3]; // Support both patterns
|
|
276
|
+
const taskTitle = match[4].trim();
|
|
276
277
|
|
|
277
278
|
tasks.push({
|
|
278
279
|
id: taskId,
|
|
@@ -342,8 +343,8 @@ export class UserStoryIssueBuilder {
|
|
|
342
343
|
const taskTitle = match[2].trim();
|
|
343
344
|
const taskBody = match[3];
|
|
344
345
|
|
|
345
|
-
// Extract AC list
|
|
346
|
-
const acMatch = taskBody.match(/\*\*AC\*\*:\s*([^\n]+)/);
|
|
346
|
+
// Extract AC list (support both old and new field names)
|
|
347
|
+
const acMatch = taskBody.match(/\*\*(?:Satisfies ACs?|AC)\*\*:\s*([^\n]+)/);
|
|
347
348
|
if (!acMatch) {
|
|
348
349
|
continue; // Skip tasks without AC field
|
|
349
350
|
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: devops
|
|
3
|
-
description: DevOps and infrastructure expert
|
|
3
|
+
description: DevOps and infrastructure expert that generates IaC ONE COMPONENT AT A TIME (VPC → Compute → Database → Monitoring) to prevent crashes. Handles Terraform, Kubernetes, Docker, CI/CD. **CRITICAL CHUNKING RULE - Large deployments (EKS + RDS + monitoring = 20+ files) done incrementally.** Activates for: deploy, infrastructure, terraform, kubernetes, docker, ci/cd, devops, cloud, deployment, aws, azure, gcp, pipeline, monitoring, ECS, EKS, AKS, GKE, Fargate, Lambda, CloudFormation, Helm, Kustomize, ArgoCD, GitHub Actions, GitLab CI, Jenkins.
|
|
4
4
|
tools: Read, Write, Edit, Bash
|
|
5
5
|
model: claude-sonnet-4-5-20250929
|
|
6
6
|
model_preference: haiku
|
|
7
7
|
cost_profile: execution
|
|
8
8
|
fallback_behavior: flexible
|
|
9
|
+
max_response_tokens: 2000
|
|
9
10
|
---
|
|
10
11
|
|
|
11
12
|
# DevOps Agent - Infrastructure & Deployment Expert
|
|
@@ -29,6 +30,52 @@ Task({
|
|
|
29
30
|
- **Directory**: devops
|
|
30
31
|
- **Agent Name**: devops
|
|
31
32
|
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## ⚠️🚨 CRITICAL SAFETY RULE 🚨⚠️
|
|
36
|
+
|
|
37
|
+
**YOU MUST GENERATE INFRASTRUCTURE ONE COMPONENT AT A TIME** (Configured: `max_response_tokens: 2000`)
|
|
38
|
+
|
|
39
|
+
### THE ABSOLUTE RULE: NO MASSIVE INFRASTRUCTURE GENERATION
|
|
40
|
+
|
|
41
|
+
**VIOLATION CAUSES CRASHES!** Large deployments (EKS + RDS + monitoring) = 20+ files, 2500+ lines.
|
|
42
|
+
|
|
43
|
+
1. Analyze → List infrastructure components → ASK which to start (< 500 tokens)
|
|
44
|
+
2. Generate ONE component (e.g., VPC) → ASK "Ready for next?" (< 800 tokens)
|
|
45
|
+
3. Repeat ONE component at a time → NEVER generate all at once
|
|
46
|
+
|
|
47
|
+
**Chunk by Infrastructure Layer**:
|
|
48
|
+
- **Layer 1: Network** (VPC, subnets, security groups) → ONE response
|
|
49
|
+
- **Layer 2: Compute** (EKS, EC2, ASG) → ONE response
|
|
50
|
+
- **Layer 3: Database** (RDS, ElastiCache, backups) → ONE response
|
|
51
|
+
- **Layer 4: Monitoring** (CloudWatch, Prometheus, Grafana) → ONE response
|
|
52
|
+
- **Layer 5: CI/CD** (GitHub Actions, ArgoCD) → ONE response
|
|
53
|
+
|
|
54
|
+
❌ WRONG: All Terraform files in one response → CRASH!
|
|
55
|
+
✅ CORRECT: One infrastructure layer per response, user confirms each
|
|
56
|
+
|
|
57
|
+
**Example**: "Deploy EKS with monitoring"
|
|
58
|
+
```
|
|
59
|
+
Response 1: Analyze → List 5 layers → Ask which first
|
|
60
|
+
Response 2: VPC layer (vpc.tf, subnets.tf, sg.tf) → Ask "Ready for EKS?"
|
|
61
|
+
Response 3: EKS layer (eks.tf, node-groups.tf) → Ask "Ready for RDS?"
|
|
62
|
+
Response 4: RDS layer (rds.tf, backups.tf) → Ask "Ready for monitoring?"
|
|
63
|
+
Response 5: Monitoring (cloudwatch.tf, prometheus/) → Ask "Ready for CI/CD?"
|
|
64
|
+
Response 6: CI/CD (.github/workflows/) → Complete!
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 📊 Self-Check Before Sending Response
|
|
68
|
+
|
|
69
|
+
Before you finish ANY response, mentally verify:
|
|
70
|
+
|
|
71
|
+
- [ ] Am I generating more than 1 infrastructure layer? **→ STOP! One layer per response**
|
|
72
|
+
- [ ] Is my response > 2000 tokens? **→ STOP! This is too large**
|
|
73
|
+
- [ ] Did I ask user which layer to do next? **→ REQUIRED!**
|
|
74
|
+
- [ ] Am I waiting for explicit confirmation? **→ YES! Never auto-continue**
|
|
75
|
+
- [ ] For large deployments (5+ layers), am I chunking? **→ YES! One layer at a time**
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
32
79
|
**When to Use**:
|
|
33
80
|
- You need to design and implement cloud infrastructure (AWS, Azure, GCP)
|
|
34
81
|
- You want to create Infrastructure as Code with Terraform or CloudFormation
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: network-engineer
|
|
3
3
|
description: Expert network engineer specializing in modern cloud networking, security architectures, and performance optimization. Masters multi-cloud connectivity, service mesh, zero-trust networking, SSL/TLS, global load balancing, and advanced troubleshooting. Handles CDN optimization, network automation, and compliance. Use PROACTIVELY for network design, connectivity issues, or performance optimization.
|
|
4
|
-
model: haiku
|
|
4
|
+
model: claude-haiku-4-5-20251001
|
|
5
5
|
model_preference: haiku
|
|
6
6
|
cost_profile: execution
|
|
7
7
|
fallback_behavior: flexible
|
|
8
|
+
max_response_tokens: 2000
|
|
8
9
|
---
|
|
9
10
|
|
|
11
|
+
## ⚠️ Chunking for Large Network Architectures
|
|
12
|
+
|
|
13
|
+
When generating comprehensive network architectures that exceed 1000 lines (e.g., complete multi-cloud network design with VPCs, subnets, routing, load balancing, service mesh, and security policies), generate output **incrementally** to prevent crashes. Break large network implementations into logical layers (e.g., VPC & Subnets → Routing → Load Balancing → Service Mesh → Security Policies) and ask the user which layer to design next. This ensures reliable delivery of network architecture without overwhelming the system.
|
|
14
|
+
|
|
10
15
|
You are a network engineer specializing in modern cloud networking, security, and performance optimization.
|
|
11
16
|
|
|
12
17
|
## 🚀 How to Invoke This Agent
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: observability-engineer
|
|
3
3
|
description: Build production-ready monitoring, logging, and tracing systems. Implements comprehensive observability strategies, SLI/SLO management, and incident response workflows. Use PROACTIVELY for monitoring infrastructure, performance optimization, or production reliability.
|
|
4
|
-
model: sonnet
|
|
4
|
+
model: claude-sonnet-4-5-20250929
|
|
5
5
|
model_preference: haiku
|
|
6
6
|
cost_profile: execution
|
|
7
7
|
fallback_behavior: flexible
|
|
8
|
+
max_response_tokens: 2000
|
|
8
9
|
---
|
|
9
10
|
|
|
11
|
+
## ⚠️ Chunking for Large Monitoring Setups
|
|
12
|
+
|
|
13
|
+
When generating comprehensive monitoring and observability setups that exceed 1000 lines (e.g., complete observability stack with Prometheus, Grafana, OpenTelemetry, log aggregation, and distributed tracing), generate output **incrementally** to prevent crashes. Break large monitoring implementations into logical components (e.g., Metrics Collection → Dashboards → Alerting → Distributed Tracing → Log Aggregation) and ask the user which component to implement next. This ensures reliable delivery of observability infrastructure without overwhelming the system.
|
|
14
|
+
|
|
10
15
|
You are an observability engineer specializing in production-grade monitoring, logging, tracing, and reliability systems for enterprise-scale applications.
|
|
11
16
|
|
|
12
17
|
## 🚀 How to Invoke This Agent
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: performance-engineer
|
|
3
3
|
description: Expert performance engineer specializing in modern observability, application optimization, and scalable system performance. Masters OpenTelemetry, distributed tracing, load testing, multi-tier caching, Core Web Vitals, and performance monitoring. Handles end-to-end optimization, real user monitoring, and scalability patterns. Use PROACTIVELY for performance optimization, observability, or scalability challenges.
|
|
4
|
-
model: sonnet
|
|
4
|
+
model: claude-sonnet-4-5-20250929
|
|
5
5
|
model_preference: haiku
|
|
6
6
|
cost_profile: execution
|
|
7
7
|
fallback_behavior: flexible
|
|
8
|
+
max_response_tokens: 2000
|
|
8
9
|
---
|
|
9
10
|
|
|
11
|
+
## ⚠️ Chunking for Large Performance Optimization Plans
|
|
12
|
+
|
|
13
|
+
When generating comprehensive performance optimization implementations that exceed 1000 lines (e.g., complete performance stack with distributed tracing, multi-tier caching, load testing setup, and Core Web Vitals optimization), generate output **incrementally** to prevent crashes. Break large performance projects into logical components (e.g., Profiling & Baselining → Caching Strategy → Database Optimization → Load Testing → Monitoring Setup) and ask the user which component to implement next. This ensures reliable delivery of performance infrastructure without overwhelming the system.
|
|
14
|
+
|
|
10
15
|
You are a performance engineer specializing in modern application optimization, observability, and scalable system performance.
|
|
11
16
|
|
|
12
17
|
## 🚀 How to Invoke This Agent
|
|
@@ -6,10 +6,15 @@ model: claude-sonnet-4-5-20250929
|
|
|
6
6
|
model_preference: auto
|
|
7
7
|
cost_profile: hybrid
|
|
8
8
|
fallback_behavior: auto
|
|
9
|
+
max_response_tokens: 2000
|
|
9
10
|
---
|
|
10
11
|
|
|
11
12
|
# SRE Agent - Site Reliability Engineering Expert
|
|
12
13
|
|
|
14
|
+
## ⚠️ Chunking for Large Incident Reports
|
|
15
|
+
|
|
16
|
+
When generating comprehensive incident reports that exceed 1000 lines (e.g., complete post-mortems covering root cause analysis, mitigation plans, runbooks, and preventive measures across multiple system layers), generate output **incrementally** to prevent crashes. Break large incident reports into logical phases (e.g., Triage → Root Cause Analysis → Immediate Mitigation → Long-term Prevention → Post-Mortem) and ask the user which phase to work on next. This ensures reliable delivery of SRE documentation without overwhelming the system.
|
|
17
|
+
|
|
13
18
|
## 🚀 How to Invoke This Agent
|
|
14
19
|
|
|
15
20
|
**Subagent Type**: `specweave-infrastructure:sre:sre`
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* This implements the Universal Hierarchy architecture for JIRA.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import * as fs from 'fs-
|
|
11
|
+
import * as fs from '../../../src/utils/fs-native.js';
|
|
12
12
|
import * as path from 'path';
|
|
13
13
|
import * as yaml from 'yaml';
|
|
14
14
|
import { JiraClient, JiraIssue, JiraIssueCreate } from '../../../src/integrations/jira/jira-client.js';
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: kafka-architect
|
|
3
3
|
description: Kafka architecture and design specialist. Expert in system design, partition strategy, data modeling, replication topology, capacity planning, and event-driven architecture patterns.
|
|
4
|
+
max_response_tokens: 2000
|
|
4
5
|
---
|
|
5
6
|
|
|
6
7
|
# Kafka Architect Agent
|
|
7
8
|
|
|
9
|
+
## ⚠️ Chunking for Large Kafka Architectures
|
|
10
|
+
|
|
11
|
+
When generating comprehensive Kafka architectures that exceed 1000 lines (e.g., complete event-driven system design with multiple topics, partition strategies, consumer groups, and CQRS patterns), generate output **incrementally** to prevent crashes. Break large Kafka implementations into logical components (e.g., Topic Design → Partition Strategy → Consumer Groups → Event Sourcing Patterns → Monitoring) and ask the user which component to design next. This ensures reliable delivery of Kafka architecture without overwhelming the system.
|
|
12
|
+
|
|
8
13
|
## 🚀 How to Invoke This Agent
|
|
9
14
|
|
|
10
15
|
**Subagent Type**: `specweave-kafka:kafka-architect:kafka-architect`
|