specweave 0.32.0 → 0.32.3
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 +215 -2
- package/README.md +22 -0
- package/bin/specweave.js +52 -1
- package/dist/plugins/specweave-ado/lib/ado-duplicate-detector.d.ts +100 -0
- package/dist/plugins/specweave-ado/lib/ado-duplicate-detector.d.ts.map +1 -0
- package/dist/plugins/specweave-ado/lib/ado-duplicate-detector.js +291 -0
- package/dist/plugins/specweave-ado/lib/ado-duplicate-detector.js.map +1 -0
- package/dist/plugins/specweave-jira/lib/jira-duplicate-detector.d.ts +103 -0
- package/dist/plugins/specweave-jira/lib/jira-duplicate-detector.d.ts.map +1 -0
- package/dist/plugins/specweave-jira/lib/jira-duplicate-detector.js +310 -0
- package/dist/plugins/specweave-jira/lib/jira-duplicate-detector.js.map +1 -0
- package/dist/plugins/specweave-jira/lib/jira-permission-gate.d.ts +126 -0
- package/dist/plugins/specweave-jira/lib/jira-permission-gate.d.ts.map +1 -0
- package/dist/plugins/specweave-jira/lib/jira-permission-gate.js +207 -0
- package/dist/plugins/specweave-jira/lib/jira-permission-gate.js.map +1 -0
- package/dist/src/adapters/codex/README.md +1 -1
- package/dist/src/adapters/codex/adapter.js +1 -1
- package/dist/src/cli/commands/archive.d.ts +2 -0
- package/dist/src/cli/commands/archive.d.ts.map +1 -1
- package/dist/src/cli/commands/archive.js +33 -0
- package/dist/src/cli/commands/archive.js.map +1 -1
- package/dist/src/cli/commands/cache.d.ts +17 -0
- package/dist/src/cli/commands/cache.d.ts.map +1 -0
- package/dist/src/cli/commands/cache.js +126 -0
- package/dist/src/cli/commands/cache.js.map +1 -0
- package/dist/src/cli/commands/context.d.ts +92 -0
- package/dist/src/cli/commands/context.d.ts.map +1 -0
- package/dist/src/cli/commands/context.js +205 -0
- package/dist/src/cli/commands/context.js.map +1 -0
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +112 -70
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/plan/increment-detector.js +2 -2
- package/dist/src/cli/commands/plan/increment-detector.js.map +1 -1
- package/dist/src/cli/commands/sync-spec-commits.js +1 -1
- package/dist/src/cli/commands/sync-spec-commits.js.map +1 -1
- package/dist/src/cli/commands/sync-specs.js +2 -2
- package/dist/src/cli/commands/sync-specs.js.map +1 -1
- package/dist/src/cli/helpers/github/increment-profile-selector.js +1 -1
- package/dist/src/cli/helpers/github/increment-profile-selector.js.map +1 -1
- package/dist/src/cli/helpers/init/external-import.d.ts +3 -0
- package/dist/src/cli/helpers/init/external-import.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/external-import.js +17 -4
- package/dist/src/cli/helpers/init/external-import.js.map +1 -1
- package/dist/src/cli/helpers/init/index.d.ts +1 -0
- package/dist/src/cli/helpers/init/index.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/index.js +2 -0
- package/dist/src/cli/helpers/init/index.js.map +1 -1
- package/dist/src/cli/helpers/init/jira-ado-auto-detect.d.ts +70 -0
- package/dist/src/cli/helpers/init/jira-ado-auto-detect.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/jira-ado-auto-detect.js +214 -4
- package/dist/src/cli/helpers/init/jira-ado-auto-detect.js.map +1 -1
- package/dist/src/cli/helpers/init/living-docs-preflight.d.ts +4 -0
- package/dist/src/cli/helpers/init/living-docs-preflight.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/living-docs-preflight.js +34 -3
- package/dist/src/cli/helpers/init/living-docs-preflight.js.map +1 -1
- package/dist/src/cli/helpers/init/testing-config.d.ts +3 -0
- package/dist/src/cli/helpers/init/testing-config.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/testing-config.js +9 -2
- package/dist/src/cli/helpers/init/testing-config.js.map +1 -1
- package/dist/src/cli/helpers/init/translation-config.d.ts +3 -0
- package/dist/src/cli/helpers/init/translation-config.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/translation-config.js +21 -4
- package/dist/src/cli/helpers/init/translation-config.js.map +1 -1
- package/dist/src/cli/helpers/init/wizard-navigation.d.ts +45 -0
- package/dist/src/cli/helpers/init/wizard-navigation.d.ts.map +1 -0
- package/dist/src/cli/helpers/init/wizard-navigation.js +97 -0
- package/dist/src/cli/helpers/init/wizard-navigation.js.map +1 -0
- package/dist/src/cli/workers/living-docs-worker.js +66 -1
- package/dist/src/cli/workers/living-docs-worker.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/discrepancy/increment-generator.d.ts.map +1 -1
- package/dist/src/core/discrepancy/increment-generator.js +5 -2
- package/dist/src/core/discrepancy/increment-generator.js.map +1 -1
- package/dist/src/core/increment/duplicate-detector.js +2 -2
- package/dist/src/core/increment/duplicate-detector.js.map +1 -1
- package/dist/src/core/increment/increment-archiver.d.ts +49 -4
- package/dist/src/core/increment/increment-archiver.d.ts.map +1 -1
- package/dist/src/core/increment/increment-archiver.js +123 -22
- package/dist/src/core/increment/increment-archiver.js.map +1 -1
- package/dist/src/core/increment/increment-status.js +2 -2
- package/dist/src/core/increment/increment-status.js.map +1 -1
- package/dist/src/core/increment/increment-utils.d.ts +150 -0
- package/dist/src/core/increment/increment-utils.d.ts.map +1 -1
- package/dist/src/core/increment/increment-utils.js +216 -4
- package/dist/src/core/increment/increment-utils.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/living-docs/feature-archiver.d.ts +4 -0
- package/dist/src/core/living-docs/feature-archiver.d.ts.map +1 -1
- package/dist/src/core/living-docs/feature-archiver.js +32 -10
- package/dist/src/core/living-docs/feature-archiver.js.map +1 -1
- package/dist/src/core/living-docs/feature-id-manager.d.ts.map +1 -1
- package/dist/src/core/living-docs/feature-id-manager.js +8 -4
- package/dist/src/core/living-docs/feature-id-manager.js.map +1 -1
- package/dist/src/core/living-docs/governance/ecosystem-detector.d.ts +38 -0
- package/dist/src/core/living-docs/governance/ecosystem-detector.d.ts.map +1 -0
- package/dist/src/core/living-docs/governance/ecosystem-detector.js +325 -0
- package/dist/src/core/living-docs/governance/ecosystem-detector.js.map +1 -0
- package/dist/src/core/living-docs/governance/frontend-standards-parser.d.ts +74 -0
- package/dist/src/core/living-docs/governance/frontend-standards-parser.d.ts.map +1 -0
- package/dist/src/core/living-docs/governance/frontend-standards-parser.js +366 -0
- package/dist/src/core/living-docs/governance/frontend-standards-parser.js.map +1 -0
- package/dist/src/core/living-docs/governance/go-standards-parser.d.ts +64 -0
- package/dist/src/core/living-docs/governance/go-standards-parser.d.ts.map +1 -0
- package/dist/src/core/living-docs/governance/go-standards-parser.js +229 -0
- package/dist/src/core/living-docs/governance/go-standards-parser.js.map +1 -0
- package/dist/src/core/living-docs/governance/index.d.ts +50 -0
- package/dist/src/core/living-docs/governance/index.d.ts.map +1 -0
- package/dist/src/core/living-docs/governance/index.js +56 -0
- package/dist/src/core/living-docs/governance/index.js.map +1 -0
- package/dist/src/core/living-docs/governance/java-standards-parser.d.ts +89 -0
- package/dist/src/core/living-docs/governance/java-standards-parser.d.ts.map +1 -0
- package/dist/src/core/living-docs/governance/java-standards-parser.js +356 -0
- package/dist/src/core/living-docs/governance/java-standards-parser.js.map +1 -0
- package/dist/src/core/living-docs/governance/python-standards-parser.d.ts +83 -0
- package/dist/src/core/living-docs/governance/python-standards-parser.d.ts.map +1 -0
- package/dist/src/core/living-docs/governance/python-standards-parser.js +347 -0
- package/dist/src/core/living-docs/governance/python-standards-parser.js.map +1 -0
- package/dist/src/core/living-docs/governance/standards-generator.d.ts +38 -0
- package/dist/src/core/living-docs/governance/standards-generator.d.ts.map +1 -0
- package/dist/src/core/living-docs/governance/standards-generator.js +476 -0
- package/dist/src/core/living-docs/governance/standards-generator.js.map +1 -0
- package/dist/src/core/living-docs/hierarchy-mapper.js +3 -3
- package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.d.ts +18 -0
- package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.js +299 -0
- package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.d.ts +15 -0
- package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.js +138 -0
- package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/file-sampler.d.ts +24 -0
- package/dist/src/core/living-docs/intelligent-analyzer/file-sampler.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/file-sampler.js +198 -0
- package/dist/src/core/living-docs/intelligent-analyzer/file-sampler.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.d.ts +17 -0
- package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.js +241 -0
- package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/index.d.ts +28 -0
- package/dist/src/core/living-docs/intelligent-analyzer/index.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/index.js +197 -0
- package/dist/src/core/living-docs/intelligent-analyzer/index.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.d.ts +22 -0
- package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.js +482 -0
- package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/strategy-generator.d.ts +42 -0
- package/dist/src/core/living-docs/intelligent-analyzer/strategy-generator.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/strategy-generator.js +343 -0
- package/dist/src/core/living-docs/intelligent-analyzer/strategy-generator.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/types.d.ts +190 -0
- package/dist/src/core/living-docs/intelligent-analyzer/types.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/types.js +7 -0
- package/dist/src/core/living-docs/intelligent-analyzer/types.js.map +1 -0
- package/dist/src/core/living-docs/living-docs-sync.d.ts +11 -3
- package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.js +53 -10
- package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
- package/dist/src/core/living-docs/module-analyzer.d.ts +22 -0
- package/dist/src/core/living-docs/module-analyzer.d.ts.map +1 -1
- package/dist/src/core/living-docs/module-analyzer.js +123 -19
- package/dist/src/core/living-docs/module-analyzer.js.map +1 -1
- package/dist/src/core/llm/provider-factory.js +2 -2
- package/dist/src/core/llm/provider-factory.js.map +1 -1
- package/dist/src/core/llm/providers/anthropic-provider.js +1 -1
- package/dist/src/core/llm/providers/bedrock-provider.d.ts.map +1 -1
- package/dist/src/core/llm/providers/bedrock-provider.js +8 -4
- package/dist/src/core/llm/providers/bedrock-provider.js.map +1 -1
- package/dist/src/core/sync/spec-increment-mapper.js +3 -3
- package/dist/src/core/sync/spec-increment-mapper.js.map +1 -1
- package/dist/src/importers/item-converter.d.ts +25 -0
- package/dist/src/importers/item-converter.d.ts.map +1 -1
- package/dist/src/importers/item-converter.js +135 -5
- package/dist/src/importers/item-converter.js.map +1 -1
- package/dist/src/importers/jira-importer.d.ts +14 -0
- package/dist/src/importers/jira-importer.d.ts.map +1 -1
- package/dist/src/importers/jira-importer.js +75 -0
- package/dist/src/importers/jira-importer.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-token-provider.d.ts +93 -0
- package/dist/src/integrations/jira/jira-token-provider.d.ts.map +1 -0
- package/dist/src/integrations/jira/jira-token-provider.js +160 -0
- package/dist/src/integrations/jira/jira-token-provider.js.map +1 -0
- package/dist/src/sync/ado-reconciler.d.ts +92 -0
- package/dist/src/sync/ado-reconciler.d.ts.map +1 -0
- package/dist/src/sync/ado-reconciler.js +335 -0
- package/dist/src/sync/ado-reconciler.js.map +1 -0
- package/dist/src/sync/jira-reconciler.d.ts +106 -0
- package/dist/src/sync/jira-reconciler.d.ts.map +1 -0
- package/dist/src/sync/jira-reconciler.js +405 -0
- package/dist/src/sync/jira-reconciler.js.map +1 -0
- package/dist/src/types/dashboard-cache.d.ts +181 -0
- package/dist/src/types/dashboard-cache.d.ts.map +1 -0
- package/dist/src/types/dashboard-cache.js +65 -0
- package/dist/src/types/dashboard-cache.js.map +1 -0
- package/dist/src/types/model-selection.d.ts +6 -4
- package/dist/src/types/model-selection.d.ts.map +1 -1
- package/dist/src/types/model-selection.js +3 -1
- package/dist/src/types/model-selection.js.map +1 -1
- package/dist/src/utils/docs-validator.d.ts +131 -0
- package/dist/src/utils/docs-validator.d.ts.map +1 -0
- package/dist/src/utils/docs-validator.js +529 -0
- package/dist/src/utils/docs-validator.js.map +1 -0
- package/dist/src/utils/external-tool-drift-detector.d.ts +1 -1
- package/dist/src/utils/external-tool-drift-detector.d.ts.map +1 -1
- package/dist/src/utils/external-tool-drift-detector.js +5 -4
- package/dist/src/utils/external-tool-drift-detector.js.map +1 -1
- package/dist/src/utils/feature-id-collision.js +1 -1
- package/dist/src/utils/feature-id-collision.js.map +1 -1
- package/dist/src/utils/feature-id-derivation.d.ts +8 -3
- package/dist/src/utils/feature-id-derivation.d.ts.map +1 -1
- package/dist/src/utils/feature-id-derivation.js +14 -6
- package/dist/src/utils/feature-id-derivation.js.map +1 -1
- package/dist/src/utils/html-to-mdx.d.ts +1 -0
- package/dist/src/utils/html-to-mdx.d.ts.map +1 -1
- package/dist/src/utils/html-to-mdx.js +43 -5
- package/dist/src/utils/html-to-mdx.js.map +1 -1
- package/dist/src/utils/model-selection.d.ts +3 -4
- package/dist/src/utils/model-selection.d.ts.map +1 -1
- package/dist/src/utils/model-selection.js +3 -4
- package/dist/src/utils/model-selection.js.map +1 -1
- package/package.json +1 -1
- package/plugins/specweave/agents/code-standards-detective/AGENT.md +48 -0
- package/plugins/specweave/agents/pm/AGENT.md +10 -7
- package/plugins/specweave/commands/specweave-archive-features.md +5 -7
- package/plugins/specweave/commands/specweave-archive.md +2 -1
- package/plugins/specweave/commands/specweave-costs.md +4 -4
- package/plugins/specweave/commands/specweave-do.md +44 -10
- package/plugins/specweave/commands/specweave-done.md +109 -0
- package/plugins/specweave/commands/specweave-import-external.md +45 -18
- package/plugins/specweave/commands/specweave-increment.md +331 -33
- package/plugins/specweave/commands/specweave-jobs.md +2 -2
- package/plugins/specweave/commands/specweave-progress.md +4 -4
- package/plugins/specweave/commands/specweave-restore-feature.md +5 -4
- package/plugins/specweave/commands/specweave-sync-docs.md +1 -1
- package/plugins/specweave/commands/specweave-sync-specs.md +216 -322
- package/plugins/specweave/commands/specweave-validate-features.md +13 -8
- package/plugins/specweave/commands/specweave-validate.md +27 -1
- package/plugins/specweave/hooks/docs-changed.sh.backup +79 -0
- package/plugins/specweave/hooks/hooks.json +43 -4
- package/plugins/specweave/hooks/human-input-required.sh.backup +75 -0
- package/plugins/specweave/hooks/lib/common-setup.sh +375 -0
- package/plugins/specweave/hooks/lib/crash-prevention.sh +336 -0
- package/plugins/specweave/hooks/post-first-increment.sh.backup +61 -0
- package/plugins/specweave/hooks/post-increment-change.sh.backup +98 -0
- package/plugins/specweave/hooks/post-increment-completion.sh.backup +231 -0
- package/plugins/specweave/hooks/post-increment-planning.sh.backup +1048 -0
- package/plugins/specweave/hooks/post-increment-status-change.sh.backup +147 -0
- package/plugins/specweave/hooks/post-spec-update.sh.backup +158 -0
- package/plugins/specweave/hooks/post-task-completion.sh +4 -23
- package/plugins/specweave/hooks/post-user-story-complete.sh.backup +179 -0
- package/plugins/specweave/hooks/pre-command-deduplication.sh +1 -6
- package/plugins/specweave/hooks/pre-command-deduplication.sh.backup +83 -0
- package/plugins/specweave/hooks/pre-implementation.sh.backup +67 -0
- package/plugins/specweave/hooks/pre-task-completion.sh +8 -37
- package/plugins/specweave/hooks/pre-task-completion.sh.backup +194 -0
- package/plugins/specweave/hooks/pre-tool-use.sh +2 -11
- package/plugins/specweave/hooks/pre-tool-use.sh.backup +133 -0
- package/plugins/specweave/hooks/spec-project-validator.sh +80 -25
- package/plugins/specweave/hooks/universal/dispatcher.mjs +135 -42
- package/plugins/specweave/hooks/universal/fail-fast-wrapper.sh +183 -0
- package/plugins/specweave/hooks/user-prompt-submit.sh +140 -38
- package/plugins/specweave/hooks/user-prompt-submit.sh.backup +386 -0
- package/plugins/specweave/hooks/v2/dispatchers/post-tool-use.sh +12 -0
- package/plugins/specweave/hooks/v2/dispatchers/session-start.sh +89 -0
- package/plugins/specweave/hooks/v2/guards/bash-file-guard.sh +211 -0
- package/plugins/specweave/hooks/v2/guards/bash-file-guard.test.sh +163 -0
- package/plugins/specweave/hooks/v2/guards/completion-guard.sh +26 -28
- package/plugins/specweave/hooks/v2/guards/features-folder-guard.sh +50 -0
- package/plugins/specweave/hooks/v2/guards/increment-duplicate-guard.sh +135 -0
- package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.js +2 -2
- package/plugins/specweave/lib/vendor/core/increment/duplicate-detector.js.map +1 -1
- package/plugins/specweave/scripts/README.md +166 -0
- package/plugins/specweave/scripts/cleanup-state.sh +142 -0
- package/plugins/specweave/scripts/force-kill.sh +142 -0
- package/plugins/specweave/scripts/jobs.js +171 -0
- package/plugins/specweave/scripts/progress.js +170 -0
- package/plugins/specweave/scripts/read-costs.sh +132 -0
- package/plugins/specweave/scripts/read-jobs.sh +324 -0
- package/plugins/specweave/scripts/read-progress.sh +185 -0
- package/plugins/specweave/scripts/read-status.sh +146 -0
- package/plugins/specweave/scripts/read-workflow.sh +173 -0
- package/plugins/specweave/scripts/rebuild-dashboard-cache.sh +327 -0
- package/plugins/specweave/scripts/session-watchdog.sh +192 -0
- package/plugins/specweave/scripts/status.js +154 -0
- package/plugins/specweave/scripts/update-dashboard-cache.sh +281 -0
- package/plugins/specweave/skills/code-standards-analyzer/SKILL.md +58 -6
- package/plugins/specweave/skills/increment-planner/SKILL.md +388 -48
- package/plugins/specweave/skills/increment-planner/templates/spec-multi-project.md +17 -7
- package/plugins/specweave/skills/increment-planner/templates/spec-single-project.md +6 -1
- package/plugins/specweave/skills/increment-planner/templates/tasks-multi-project.md +1 -1
- package/plugins/specweave/skills/increment-planner/templates/tasks-single-project.md +1 -1
- package/plugins/specweave/skills/instant-status/SKILL.md +70 -0
- package/plugins/specweave-ado/commands/cleanup-duplicates.md +212 -0
- package/plugins/specweave-ado/commands/reconcile.md +120 -0
- package/plugins/specweave-ado/hooks/post-living-docs-update.sh.backup +353 -0
- package/plugins/specweave-ado/hooks/post-task-completion.sh.backup +172 -0
- package/plugins/specweave-ado/lib/ado-duplicate-detector.js +279 -0
- package/plugins/specweave-ado/lib/ado-duplicate-detector.ts +407 -0
- package/plugins/specweave-ado/lib/enhanced-ado-sync.js +170 -0
- package/plugins/specweave-docs/commands/build.md +32 -4
- package/plugins/specweave-docs/commands/preview.md +43 -1
- package/plugins/specweave-docs/commands/validate.md +250 -0
- package/plugins/specweave-github/agents/github-manager/AGENT.md +2 -2
- package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +1262 -0
- package/plugins/specweave-github/hooks/post-task-completion.sh.backup +258 -0
- package/plugins/specweave-github/lib/enhanced-github-sync.js +220 -0
- package/plugins/specweave-infrastructure/skills/hetzner-provisioner/README.md +1 -1
- package/plugins/specweave-jira/agents/jira-manager/AGENT.md +1 -1
- package/plugins/specweave-jira/agents/jira-multi-project-mapper/AGENT.md +530 -0
- package/plugins/specweave-jira/agents/jira-sync-judge/AGENT.md +438 -0
- package/plugins/specweave-jira/commands/cleanup-duplicates.md +219 -0
- package/plugins/specweave-jira/commands/close.md +297 -0
- package/plugins/specweave-jira/commands/create.md +198 -0
- package/plugins/specweave-jira/commands/reconcile.md +123 -0
- package/plugins/specweave-jira/commands/status.md +215 -0
- package/plugins/specweave-jira/hooks/post-task-completion.sh.backup +172 -0
- package/plugins/specweave-jira/lib/enhanced-jira-sync.js +134 -0
- package/plugins/specweave-jira/lib/jira-duplicate-detector.js +296 -0
- package/plugins/specweave-jira/lib/jira-duplicate-detector.ts +434 -0
- package/plugins/specweave-jira/lib/jira-permission-gate.js +160 -0
- package/plugins/specweave-jira/lib/jira-permission-gate.ts +276 -0
- package/plugins/specweave-jira/lib/jira-profile-resolver.js +222 -0
- package/plugins/specweave-jira/lib/jira-profile-resolver.ts +427 -0
- package/plugins/specweave-jira/reference/jira-specweave-mapping.md +16 -11
- package/plugins/specweave-release/commands/specweave-release-npm.md +140 -14
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +1254 -0
- package/plugins/specweave-release/hooks/post-task-completion.sh.backup +110 -0
- package/plugins/specweave/hooks/post-edit-spec.sh +0 -265
- package/plugins/specweave/hooks/post-write-spec.sh +0 -267
- package/plugins/specweave/hooks/pre-edit-spec.sh +0 -151
- package/plugins/specweave/hooks/pre-write-spec.sh +0 -151
|
@@ -0,0 +1,482 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Organization Synthesizer
|
|
3
|
+
*
|
|
4
|
+
* Clusters repos into teams, microservices, and domains
|
|
5
|
+
* using LLM analysis and external specs from Jira/ADO.
|
|
6
|
+
*
|
|
7
|
+
* Supports 1-level (project/) and 2-level (project/board/) folder structures
|
|
8
|
+
* matching the specs structure detected by structure-level-detector.
|
|
9
|
+
*/
|
|
10
|
+
import * as fs from 'fs';
|
|
11
|
+
import * as path from 'path';
|
|
12
|
+
import { glob } from 'glob';
|
|
13
|
+
import { extractJson, buildJsonPrompt } from '../../../utils/llm-json-extractor.js';
|
|
14
|
+
import { detectStructureLevel } from '../../../utils/structure-level-detector.js';
|
|
15
|
+
export async function synthesizeOrganization(repoAnalyses, projectPath, llmProvider, onProgress, log) {
|
|
16
|
+
log('PHASE C: Organization Synthesis');
|
|
17
|
+
onProgress('org-synthesis', 0, 100, 'Loading external specs');
|
|
18
|
+
// Load external specs from Jira/ADO imports
|
|
19
|
+
const externalSpecs = await loadExternalSpecs(projectPath);
|
|
20
|
+
log(` Loaded ${externalSpecs.length} external spec files`);
|
|
21
|
+
// Detect structure level for team organization
|
|
22
|
+
const structureConfig = detectStructureLevel(projectPath);
|
|
23
|
+
log(` Structure level: ${structureConfig.level}-level (${structureConfig.detectionReason})`);
|
|
24
|
+
// Fetch teams from external tools (ADO/JIRA)
|
|
25
|
+
onProgress('org-synthesis', 10, 100, 'Fetching external teams');
|
|
26
|
+
const externalTeams = await fetchExternalTeams(projectPath, log);
|
|
27
|
+
const externalEnhancedTeams = convertExternalTeamsToEnhanced(externalTeams, structureConfig);
|
|
28
|
+
if (externalTeams.length > 0) {
|
|
29
|
+
log(` Imported ${externalTeams.length} teams from external tools`);
|
|
30
|
+
}
|
|
31
|
+
onProgress('org-synthesis', 20, 100, 'Building repo summaries');
|
|
32
|
+
// Build summaries for LLM
|
|
33
|
+
const repoSummaries = buildRepoSummaries(repoAnalyses);
|
|
34
|
+
log(` Built summaries for ${repoAnalyses.size} repos`);
|
|
35
|
+
// If we have external teams and no LLM, use external teams directly
|
|
36
|
+
if (!llmProvider && externalTeams.length > 0) {
|
|
37
|
+
log(' No LLM provider, using external teams');
|
|
38
|
+
return createExternalTeamsOnlyResult(externalEnhancedTeams);
|
|
39
|
+
}
|
|
40
|
+
if (!llmProvider) {
|
|
41
|
+
log(' No LLM provider, using basic clustering');
|
|
42
|
+
return createBasicClustering(repoAnalyses, projectPath);
|
|
43
|
+
}
|
|
44
|
+
onProgress('org-synthesis', 40, 100, 'LLM clustering analysis');
|
|
45
|
+
// Build LLM prompt (include external teams context)
|
|
46
|
+
const externalTeamsContext = externalTeams.length > 0
|
|
47
|
+
? `\n\nExternal teams from ADO/JIRA:\n${externalTeams.map(t => `- ${t.name}: ${t.description || 'No description'}`).join('\n')}`
|
|
48
|
+
: '';
|
|
49
|
+
const prompt = buildClusteringPrompt(repoSummaries, externalSpecs, externalTeamsContext);
|
|
50
|
+
log(' Sending to LLM for organization analysis...');
|
|
51
|
+
try {
|
|
52
|
+
const result = await llmProvider.analyze(prompt);
|
|
53
|
+
if (!result || !result.content) {
|
|
54
|
+
log(' LLM returned empty, using external teams or basic clustering');
|
|
55
|
+
return externalTeams.length > 0
|
|
56
|
+
? createExternalTeamsOnlyResult(externalEnhancedTeams)
|
|
57
|
+
: createBasicClustering(repoAnalyses, projectPath);
|
|
58
|
+
}
|
|
59
|
+
const extraction = extractJson(result.content, { requiredFields: ['teams'] });
|
|
60
|
+
if (extraction.success && extraction.data) {
|
|
61
|
+
log(' LLM clustering successful');
|
|
62
|
+
onProgress('org-synthesis', 80, 100, 'Processing results');
|
|
63
|
+
// Merge LLM teams with external teams
|
|
64
|
+
const llmResult = convertLLMResponse(extraction.data, projectPath);
|
|
65
|
+
// Add external teams that aren't already covered by LLM
|
|
66
|
+
const llmTeamNames = new Set(llmResult.enhancedTeams.map(t => t.name.toLowerCase()));
|
|
67
|
+
const uniqueExternalTeams = externalEnhancedTeams.filter(et => !llmTeamNames.has(et.name.toLowerCase()));
|
|
68
|
+
if (uniqueExternalTeams.length > 0) {
|
|
69
|
+
llmResult.enhancedTeams.push(...uniqueExternalTeams);
|
|
70
|
+
log(` Merged ${uniqueExternalTeams.length} external teams`);
|
|
71
|
+
}
|
|
72
|
+
return llmResult;
|
|
73
|
+
}
|
|
74
|
+
log(` JSON extraction failed: ${extraction.error}`);
|
|
75
|
+
return externalTeams.length > 0
|
|
76
|
+
? createExternalTeamsOnlyResult(externalEnhancedTeams)
|
|
77
|
+
: createBasicClustering(repoAnalyses, projectPath);
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
log(` LLM error: ${err.message}`);
|
|
81
|
+
return externalTeams.length > 0
|
|
82
|
+
? createExternalTeamsOnlyResult(externalEnhancedTeams)
|
|
83
|
+
: createBasicClustering(repoAnalyses, projectPath);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Create result with only external teams (no LLM clustering)
|
|
88
|
+
*/
|
|
89
|
+
function createExternalTeamsOnlyResult(enhancedTeams) {
|
|
90
|
+
const teams = enhancedTeams.map(t => ({
|
|
91
|
+
name: t.name,
|
|
92
|
+
type: 'team',
|
|
93
|
+
description: t.description,
|
|
94
|
+
repos: t.repos,
|
|
95
|
+
confidence: 'high',
|
|
96
|
+
reasoning: t.reasoning
|
|
97
|
+
}));
|
|
98
|
+
return {
|
|
99
|
+
teams,
|
|
100
|
+
enhancedTeams,
|
|
101
|
+
microservices: [],
|
|
102
|
+
domains: [],
|
|
103
|
+
crossCutting: [],
|
|
104
|
+
hypotheses: ['Teams imported from external tool - repo associations not automatic'],
|
|
105
|
+
confidence: 'medium'
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
async function loadExternalSpecs(projectPath) {
|
|
109
|
+
const specsPath = path.join(projectPath, '.specweave/docs/internal/specs');
|
|
110
|
+
if (!fs.existsSync(specsPath))
|
|
111
|
+
return [];
|
|
112
|
+
try {
|
|
113
|
+
const files = await glob('**/*.md', { cwd: specsPath, nodir: true });
|
|
114
|
+
const summaries = [];
|
|
115
|
+
for (const file of files.slice(0, 20)) {
|
|
116
|
+
try {
|
|
117
|
+
const content = fs.readFileSync(path.join(specsPath, file), 'utf-8');
|
|
118
|
+
const titleMatch = content.match(/^#\s+(.+)/m);
|
|
119
|
+
if (titleMatch)
|
|
120
|
+
summaries.push(`${file}: ${titleMatch[1]}`);
|
|
121
|
+
}
|
|
122
|
+
catch { /* skip */ }
|
|
123
|
+
}
|
|
124
|
+
return summaries;
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
return [];
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Fetch teams from external tools (ADO/JIRA) when sync is configured
|
|
132
|
+
*
|
|
133
|
+
* Uses dynamic imports to avoid initialization errors when external tools aren't configured.
|
|
134
|
+
*/
|
|
135
|
+
async function fetchExternalTeams(projectPath, log) {
|
|
136
|
+
const externalTeams = [];
|
|
137
|
+
const configPath = path.join(projectPath, '.specweave/config.json');
|
|
138
|
+
if (!fs.existsSync(configPath)) {
|
|
139
|
+
return externalTeams;
|
|
140
|
+
}
|
|
141
|
+
let config;
|
|
142
|
+
try {
|
|
143
|
+
config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
log(' Could not parse config.json for external teams');
|
|
147
|
+
return externalTeams;
|
|
148
|
+
}
|
|
149
|
+
// Check for ADO sync profiles
|
|
150
|
+
const profiles = config.sync?.profiles || {};
|
|
151
|
+
for (const [profileName, profile] of Object.entries(profiles)) {
|
|
152
|
+
const p = profile;
|
|
153
|
+
if (p.provider !== 'ado')
|
|
154
|
+
continue;
|
|
155
|
+
const adoProject = p.config?.project;
|
|
156
|
+
const organization = p.config?.organization;
|
|
157
|
+
if (!adoProject || !organization) {
|
|
158
|
+
log(` ADO profile ${profileName} missing project/organization`);
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
try {
|
|
162
|
+
// Dynamic import to avoid initialization errors
|
|
163
|
+
const { AdoClient } = await import('../../../integrations/ado/ado-client.js');
|
|
164
|
+
const { getAdoPat } = await import('../../../integrations/ado/ado-pat-provider.js');
|
|
165
|
+
const pat = getAdoPat(organization);
|
|
166
|
+
if (!pat) {
|
|
167
|
+
log(` No ADO PAT available for organization: ${organization}`);
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
const adoClient = new AdoClient({ pat, organization, project: adoProject });
|
|
171
|
+
const teams = await adoClient.getTeams(adoProject);
|
|
172
|
+
log(` Fetched ${teams.length} teams from ADO project: ${adoProject}`);
|
|
173
|
+
for (const team of teams) {
|
|
174
|
+
externalTeams.push({
|
|
175
|
+
id: team.id || team.name,
|
|
176
|
+
name: team.name,
|
|
177
|
+
description: team.description,
|
|
178
|
+
url: team.url || `https://dev.azure.com/${organization}/${adoProject}/_settings/teams/${team.name}`,
|
|
179
|
+
projectId: adoProject,
|
|
180
|
+
provider: 'ado'
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
catch (err) {
|
|
185
|
+
log(` Failed to fetch ADO teams from ${profileName}: ${err.message}`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// JIRA Teams API requires organization ID which isn't typically configured
|
|
189
|
+
// Implementation note: JIRA Teams are org-level, not project-level
|
|
190
|
+
// Future enhancement: Add JIRA teams via https://api.atlassian.com/public/teams/v1/org/{orgId}/teams
|
|
191
|
+
return externalTeams;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Convert external teams to EnhancedTeam format
|
|
195
|
+
*/
|
|
196
|
+
function convertExternalTeamsToEnhanced(externalTeams, structureConfig) {
|
|
197
|
+
return externalTeams.map(et => ({
|
|
198
|
+
name: et.name,
|
|
199
|
+
description: et.description || `Team from ${et.provider === 'ado' ? 'Azure DevOps' : 'Jira'}`,
|
|
200
|
+
responsibilities: ['Manage associated repositories and work items'],
|
|
201
|
+
domainExpertise: [],
|
|
202
|
+
techStack: [],
|
|
203
|
+
repos: [], // External teams don't have direct repo mapping
|
|
204
|
+
reasoning: `Team imported from ${et.provider === 'ado' ? 'Azure DevOps' : 'Jira'}`,
|
|
205
|
+
project: et.projectId ? normalizeId(et.projectId) : structureConfig.projects[0]?.id,
|
|
206
|
+
externalId: et.id,
|
|
207
|
+
externalUrl: et.url,
|
|
208
|
+
externalProvider: et.provider
|
|
209
|
+
}));
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Normalize ID to kebab-case for folder names
|
|
213
|
+
*/
|
|
214
|
+
function normalizeId(name) {
|
|
215
|
+
return name
|
|
216
|
+
.toLowerCase()
|
|
217
|
+
.replace(/\s+/g, '-')
|
|
218
|
+
.replace(/[^a-z0-9-]/g, '')
|
|
219
|
+
.replace(/-+/g, '-')
|
|
220
|
+
.replace(/^-|-$/g, '');
|
|
221
|
+
}
|
|
222
|
+
function buildRepoSummaries(analyses) {
|
|
223
|
+
const lines = [];
|
|
224
|
+
for (const [name, analysis] of analyses) {
|
|
225
|
+
lines.push(`## ${name}`);
|
|
226
|
+
lines.push(`Purpose: ${analysis.purpose}`);
|
|
227
|
+
if (analysis.keyConcepts.length > 0)
|
|
228
|
+
lines.push(`Concepts: ${analysis.keyConcepts.join(', ')}`);
|
|
229
|
+
if (analysis.patternsUsed.length > 0)
|
|
230
|
+
lines.push(`Patterns: ${analysis.patternsUsed.map(p => p.pattern).join(', ')}`);
|
|
231
|
+
lines.push('');
|
|
232
|
+
}
|
|
233
|
+
return lines.join('\n');
|
|
234
|
+
}
|
|
235
|
+
function buildClusteringPrompt(repoSummaries, externalSpecs, externalTeamsContext = '') {
|
|
236
|
+
const schema = {
|
|
237
|
+
teams: '[{name, description, responsibilities:[], domainExpertise:[], techStack:[], repos:[], reasoning, integrationBoundaries?}, ...]',
|
|
238
|
+
microservices: '[{name, description, repos:[], reasoning}, ...]',
|
|
239
|
+
domains: '[{name, description, repos:[], reasoning}, ...]',
|
|
240
|
+
crossCutting: '[{name, description, repos:[], reasoning}, ...]',
|
|
241
|
+
hypotheses: '["uncertainty1", ...]',
|
|
242
|
+
};
|
|
243
|
+
const specsContext = externalSpecs.length > 0 ? `\n\nExternal project info (from Jira/ADO):\n${externalSpecs.join('\n')}` : '';
|
|
244
|
+
const context = `Analyze these repositories to understand organization structure.
|
|
245
|
+
|
|
246
|
+
For each TEAM, provide comprehensive documentation:
|
|
247
|
+
- name: Team name (e.g., "AssetCare Team", "CDP Platform Team")
|
|
248
|
+
- description: 2-3 sentence summary of what this team does
|
|
249
|
+
- responsibilities: Array of 3-5 bullet points defining what the team owns and maintains
|
|
250
|
+
- domainExpertise: Array of technical competencies (e.g., "FHIR integration", "Angular development", "Azure Functions")
|
|
251
|
+
- techStack: Array of primary technologies used across team repos
|
|
252
|
+
- repos: List of repository names belonging to this team
|
|
253
|
+
- reasoning: Brief explanation of why these repos were grouped together
|
|
254
|
+
- integrationBoundaries: (optional) Description of upstream/downstream dependencies
|
|
255
|
+
|
|
256
|
+
Repositories to analyze:
|
|
257
|
+
${repoSummaries}${specsContext}${externalTeamsContext}
|
|
258
|
+
|
|
259
|
+
Group by:
|
|
260
|
+
1. Teams (likely ownership with rich metadata)
|
|
261
|
+
2. Microservices (service boundaries)
|
|
262
|
+
3. Domains (business areas)
|
|
263
|
+
4. Cross-cutting (shared infra)
|
|
264
|
+
|
|
265
|
+
Note any uncertainties in hypotheses.`;
|
|
266
|
+
return buildJsonPrompt(context, schema, 'Cluster these repositories with detailed team information.');
|
|
267
|
+
}
|
|
268
|
+
function convertLLMResponse(response, projectPath) {
|
|
269
|
+
const structureConfig = detectStructureLevel(projectPath);
|
|
270
|
+
const convert = (items, type) => (items || []).map(item => ({
|
|
271
|
+
name: item.name, type, description: item.description || '',
|
|
272
|
+
repos: item.repos || [], confidence: 'medium', reasoning: item.reasoning || '',
|
|
273
|
+
}));
|
|
274
|
+
// Convert enhanced teams with all fields and project context
|
|
275
|
+
const defaultProject = structureConfig.projects[0]?.id || 'default';
|
|
276
|
+
const enhancedTeams = (response.teams || []).map(team => ({
|
|
277
|
+
name: team.name || 'Unknown Team',
|
|
278
|
+
description: team.description || '',
|
|
279
|
+
responsibilities: team.responsibilities || [],
|
|
280
|
+
domainExpertise: team.domainExpertise || [],
|
|
281
|
+
techStack: team.techStack || [],
|
|
282
|
+
repos: team.repos || [],
|
|
283
|
+
reasoning: team.reasoning || '',
|
|
284
|
+
integrationBoundaries: team.integrationBoundaries,
|
|
285
|
+
project: defaultProject, // Set default project for LLM-derived teams
|
|
286
|
+
}));
|
|
287
|
+
return {
|
|
288
|
+
teams: convert(response.teams, 'team'),
|
|
289
|
+
enhancedTeams,
|
|
290
|
+
microservices: convert(response.microservices, 'microservice'),
|
|
291
|
+
domains: convert(response.domains, 'domain'),
|
|
292
|
+
crossCutting: convert(response.crossCutting, 'domain'),
|
|
293
|
+
hypotheses: response.hypotheses || [],
|
|
294
|
+
confidence: 'medium',
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
function createBasicClustering(analyses, projectPath) {
|
|
298
|
+
const structureConfig = detectStructureLevel(projectPath);
|
|
299
|
+
const defaultProject = structureConfig.projects[0]?.id || 'default';
|
|
300
|
+
// Basic clustering by naming conventions
|
|
301
|
+
const teamMap = new Map();
|
|
302
|
+
for (const [name] of analyses) {
|
|
303
|
+
const prefixMatch = name.match(/^([a-z]+)-/i);
|
|
304
|
+
const team = prefixMatch ? prefixMatch[1] : 'other';
|
|
305
|
+
if (!teamMap.has(team))
|
|
306
|
+
teamMap.set(team, []);
|
|
307
|
+
teamMap.get(team).push(name);
|
|
308
|
+
}
|
|
309
|
+
const teams = [];
|
|
310
|
+
const enhancedTeams = [];
|
|
311
|
+
for (const [team, repos] of teamMap) {
|
|
312
|
+
const teamName = `${team}-team`;
|
|
313
|
+
teams.push({
|
|
314
|
+
name: teamName,
|
|
315
|
+
type: 'team',
|
|
316
|
+
description: `Repos with ${team}- prefix`,
|
|
317
|
+
repos,
|
|
318
|
+
confidence: 'low',
|
|
319
|
+
reasoning: 'Grouped by naming convention'
|
|
320
|
+
});
|
|
321
|
+
// Create basic enhanced team (without LLM-derived fields)
|
|
322
|
+
enhancedTeams.push({
|
|
323
|
+
name: teamName,
|
|
324
|
+
description: `Repositories grouped by ${team}- naming prefix.`,
|
|
325
|
+
responsibilities: ['Maintain repositories with this prefix'],
|
|
326
|
+
domainExpertise: ['General development'],
|
|
327
|
+
techStack: ['TypeScript'], // Default
|
|
328
|
+
repos,
|
|
329
|
+
reasoning: 'Grouped by naming convention - LLM analysis recommended for accurate details',
|
|
330
|
+
project: defaultProject, // Set default project for basic clustering
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
return {
|
|
334
|
+
teams,
|
|
335
|
+
enhancedTeams,
|
|
336
|
+
microservices: [],
|
|
337
|
+
domains: [],
|
|
338
|
+
crossCutting: [],
|
|
339
|
+
hypotheses: ['Basic clustering by naming only - LLM analysis recommended'],
|
|
340
|
+
confidence: 'low'
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Get the team folder path based on structure level configuration
|
|
345
|
+
*
|
|
346
|
+
* 1-level: organization/teams/{project}/
|
|
347
|
+
* 2-level: organization/teams/{project}/{board}/
|
|
348
|
+
*/
|
|
349
|
+
function getTeamFolderPath(basePath, team, structureConfig) {
|
|
350
|
+
const teamsBasePath = path.join(basePath, 'teams');
|
|
351
|
+
// Determine project ID
|
|
352
|
+
const projectId = team.project
|
|
353
|
+
|| structureConfig.projects[0]?.id
|
|
354
|
+
|| 'default';
|
|
355
|
+
if (structureConfig.level === 2) {
|
|
356
|
+
// 2-level: teams/{project}/{board}/
|
|
357
|
+
const boardId = team.board
|
|
358
|
+
|| (structureConfig.boardsByProject?.[projectId]?.[0]?.id)
|
|
359
|
+
|| 'general';
|
|
360
|
+
return path.join(teamsBasePath, projectId, boardId);
|
|
361
|
+
}
|
|
362
|
+
// 1-level: teams/{project}/
|
|
363
|
+
return path.join(teamsBasePath, projectId);
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Generate team markdown content with external links support
|
|
367
|
+
*/
|
|
368
|
+
function generateTeamMarkdown(team) {
|
|
369
|
+
const sections = [
|
|
370
|
+
`# ${team.name}`,
|
|
371
|
+
'',
|
|
372
|
+
team.description,
|
|
373
|
+
''
|
|
374
|
+
];
|
|
375
|
+
// External links section (if available)
|
|
376
|
+
if (team.externalUrl) {
|
|
377
|
+
sections.push('## External Links', '', `- [View in ${team.externalProvider === 'ado' ? 'Azure DevOps' : team.externalProvider === 'jira' ? 'Jira' : team.externalProvider}](${team.externalUrl})`, '');
|
|
378
|
+
}
|
|
379
|
+
// Responsibilities
|
|
380
|
+
sections.push('## Responsibilities', '', ...(team.responsibilities.length > 0
|
|
381
|
+
? team.responsibilities.map(r => `- ${r}`)
|
|
382
|
+
: ['- TBD']), '');
|
|
383
|
+
// Domain Expertise
|
|
384
|
+
sections.push('## Domain Expertise', '', ...(team.domainExpertise.length > 0
|
|
385
|
+
? team.domainExpertise.map(e => `- ${e}`)
|
|
386
|
+
: ['- General development']), '');
|
|
387
|
+
// Technology Stack
|
|
388
|
+
sections.push('## Technology Stack', '', ...(team.techStack.length > 0
|
|
389
|
+
? team.techStack.map(t => `- ${t}`)
|
|
390
|
+
: ['- TypeScript']), '');
|
|
391
|
+
// Repositories (adjust relative path based on depth)
|
|
392
|
+
const modulesRelPath = team.board ? '../../../../modules' : '../../../modules';
|
|
393
|
+
sections.push('## Repositories', '', ...team.repos.map(r => `- [${r}](${modulesRelPath}/${r}.md)`), '');
|
|
394
|
+
// Integration Boundaries
|
|
395
|
+
sections.push('## Integration Boundaries', '', team.integrationBoundaries || 'Integration boundaries to be documented.', '');
|
|
396
|
+
// Footer
|
|
397
|
+
sections.push('---', `*Clustering reasoning: ${team.reasoning}*`, `*Generated on ${new Date().toISOString().split('T')[0]}*`);
|
|
398
|
+
return sections.join('\n');
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Generate index.md for a team folder (project or board level)
|
|
402
|
+
*/
|
|
403
|
+
function generateTeamIndexMarkdown(folderName, teams, level) {
|
|
404
|
+
const title = level === 'project'
|
|
405
|
+
? `# ${folderName} Teams`
|
|
406
|
+
: `# ${folderName} Board Teams`;
|
|
407
|
+
const sections = [
|
|
408
|
+
title,
|
|
409
|
+
'',
|
|
410
|
+
`*${teams.length} teams in this ${level}*`,
|
|
411
|
+
'',
|
|
412
|
+
'## Teams',
|
|
413
|
+
'',
|
|
414
|
+
...teams.map(t => `- [${t.name}](./${t.name.toLowerCase().replace(/\s+/g, '-')}.md)`),
|
|
415
|
+
'',
|
|
416
|
+
'---',
|
|
417
|
+
`*Generated on ${new Date().toISOString().split('T')[0]}*`
|
|
418
|
+
];
|
|
419
|
+
return sections.join('\n');
|
|
420
|
+
}
|
|
421
|
+
export async function saveOrganizationStructure(projectPath, result, repoAnalyses) {
|
|
422
|
+
const savedFiles = [];
|
|
423
|
+
const orgPath = path.join(projectPath, '.specweave/docs/internal/organization');
|
|
424
|
+
fs.mkdirSync(orgPath, { recursive: true });
|
|
425
|
+
// Detect structure level for team organization
|
|
426
|
+
const structureConfig = detectStructureLevel(projectPath);
|
|
427
|
+
// Overview
|
|
428
|
+
const overviewLines = [
|
|
429
|
+
'# Organization Overview',
|
|
430
|
+
'',
|
|
431
|
+
`*Generated ${new Date().toISOString().split('T')[0]} | Confidence: ${result.confidence}*`,
|
|
432
|
+
'',
|
|
433
|
+
`## Summary`,
|
|
434
|
+
'',
|
|
435
|
+
`- **Teams**: ${result.teams.length}`,
|
|
436
|
+
`- **Microservices**: ${result.microservices.length}`,
|
|
437
|
+
`- **Domains**: ${result.domains.length}`,
|
|
438
|
+
`- **Repositories**: ${repoAnalyses.size}`,
|
|
439
|
+
`- **Structure Level**: ${structureConfig.level}-level (${structureConfig.detectionReason})`,
|
|
440
|
+
''
|
|
441
|
+
];
|
|
442
|
+
if (result.hypotheses.length > 0) {
|
|
443
|
+
overviewLines.push('## Uncertainties', '', ...result.hypotheses.map(h => `- ${h}`), '');
|
|
444
|
+
}
|
|
445
|
+
fs.writeFileSync(path.join(orgPath, 'overview.md'), overviewLines.join('\n'));
|
|
446
|
+
savedFiles.push(path.join(orgPath, 'overview.md'));
|
|
447
|
+
// Teams - use enhancedTeams for rich documentation with structure-level-aware folders
|
|
448
|
+
if (result.enhancedTeams.length > 0) {
|
|
449
|
+
// Group teams by their target folder
|
|
450
|
+
const teamsByFolder = new Map();
|
|
451
|
+
for (const team of result.enhancedTeams) {
|
|
452
|
+
const folderPath = getTeamFolderPath(orgPath, team, structureConfig);
|
|
453
|
+
if (!teamsByFolder.has(folderPath)) {
|
|
454
|
+
teamsByFolder.set(folderPath, []);
|
|
455
|
+
}
|
|
456
|
+
teamsByFolder.get(folderPath).push(team);
|
|
457
|
+
}
|
|
458
|
+
// Create folders and write team files
|
|
459
|
+
for (const [folderPath, teams] of teamsByFolder) {
|
|
460
|
+
fs.mkdirSync(folderPath, { recursive: true });
|
|
461
|
+
// Create index.md for this folder
|
|
462
|
+
const relativePath = path.relative(path.join(orgPath, 'teams'), folderPath);
|
|
463
|
+
const parts = relativePath.split(path.sep).filter(p => p);
|
|
464
|
+
const folderName = parts[parts.length - 1] || 'Teams';
|
|
465
|
+
const indexLevel = structureConfig.level === 2 && parts.length > 1 ? 'board' : 'project';
|
|
466
|
+
const indexContent = generateTeamIndexMarkdown(folderName, teams, indexLevel);
|
|
467
|
+
const indexPath = path.join(folderPath, 'index.md');
|
|
468
|
+
fs.writeFileSync(indexPath, indexContent);
|
|
469
|
+
savedFiles.push(indexPath);
|
|
470
|
+
// Write individual team files
|
|
471
|
+
for (const team of teams) {
|
|
472
|
+
const content = generateTeamMarkdown(team);
|
|
473
|
+
const fileName = `${team.name.toLowerCase().replace(/\s+/g, '-')}.md`;
|
|
474
|
+
const filePath = path.join(folderPath, fileName);
|
|
475
|
+
fs.writeFileSync(filePath, content);
|
|
476
|
+
savedFiles.push(filePath);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
return savedFiles;
|
|
481
|
+
}
|
|
482
|
+
//# sourceMappingURL=organization-synthesizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organization-synthesizer.js","sourceRoot":"","sources":["../../../../../src/core/living-docs/intelligent-analyzer/organization-synthesizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strategy Generator
|
|
3
|
+
*
|
|
4
|
+
* Extracts strategic insights from codebase analysis:
|
|
5
|
+
* - Tech debt catalog
|
|
6
|
+
* - Business domain mapping
|
|
7
|
+
* - Modernization candidates
|
|
8
|
+
*/
|
|
9
|
+
import type { RepoAnalysis, TechDebtItem, LLMProvider, ProgressCallback } from './types.js';
|
|
10
|
+
import type { OrganizationSynthesisResult } from './organization-synthesizer.js';
|
|
11
|
+
import type { InconsistencyResult } from './inconsistency-detector.js';
|
|
12
|
+
export interface StrategyResult {
|
|
13
|
+
techDebtCatalog: TechDebtItem[];
|
|
14
|
+
domainMap: DomainMapping[];
|
|
15
|
+
modernizationCandidates: ModernizationCandidate[];
|
|
16
|
+
recommendations: StrategicRecommendation[];
|
|
17
|
+
}
|
|
18
|
+
export interface DomainMapping {
|
|
19
|
+
domain: string;
|
|
20
|
+
description: string;
|
|
21
|
+
repos: string[];
|
|
22
|
+
healthScore: number;
|
|
23
|
+
concerns: string[];
|
|
24
|
+
}
|
|
25
|
+
export interface ModernizationCandidate {
|
|
26
|
+
repo: string;
|
|
27
|
+
reason: string;
|
|
28
|
+
priority: 'high' | 'medium' | 'low';
|
|
29
|
+
suggestedApproach: string;
|
|
30
|
+
estimatedEffort: 'small' | 'medium' | 'large';
|
|
31
|
+
}
|
|
32
|
+
export interface StrategicRecommendation {
|
|
33
|
+
id: string;
|
|
34
|
+
title: string;
|
|
35
|
+
description: string;
|
|
36
|
+
impact: 'high' | 'medium' | 'low';
|
|
37
|
+
effort: 'small' | 'medium' | 'large';
|
|
38
|
+
category: 'architecture' | 'process' | 'tooling' | 'team';
|
|
39
|
+
}
|
|
40
|
+
export declare function generateStrategy(repoAnalyses: Map<string, RepoAnalysis>, orgResult: OrganizationSynthesisResult, inconsistencyResult: InconsistencyResult, llmProvider: LLMProvider | null, onProgress: ProgressCallback, log: (msg: string) => void): Promise<StrategyResult>;
|
|
41
|
+
export declare function saveStrategy(projectPath: string, result: StrategyResult): Promise<string[]>;
|
|
42
|
+
//# sourceMappingURL=strategy-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategy-generator.d.ts","sourceRoot":"","sources":["../../../../../src/core/living-docs/intelligent-analyzer/strategy-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,gBAAgB,EACjB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,MAAM,WAAW,cAAc;IAC7B,eAAe,EAAE,YAAY,EAAE,CAAC;IAChC,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,uBAAuB,EAAE,sBAAsB,EAAE,CAAC;IAClD,eAAe,EAAE,uBAAuB,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;CAC/C;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAClC,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrC,QAAQ,EAAE,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;CAC3D;AAED,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACvC,SAAS,EAAE,2BAA2B,EACtC,mBAAmB,EAAE,mBAAmB,EACxC,WAAW,EAAE,WAAW,GAAG,IAAI,EAC/B,UAAU,EAAE,gBAAgB,EAC5B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GACzB,OAAO,CAAC,cAAc,CAAC,CA8BzB;AAoQD,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,MAAM,EAAE,CAAC,CAuInB"}
|