specweave 0.30.19 → 0.32.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 +176 -2
- package/README.md +22 -0
- package/bin/specweave.js +18 -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/init.js +1 -1
- 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/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/external-tools/external-items-counter.d.ts +62 -0
- package/dist/src/core/external-tools/external-items-counter.d.ts.map +1 -0
- package/dist/src/core/external-tools/external-items-counter.js +206 -0
- package/dist/src/core/external-tools/external-items-counter.js.map +1 -0
- package/dist/src/core/external-tools/external-items-display.d.ts +39 -0
- package/dist/src/core/external-tools/external-items-display.d.ts.map +1 -0
- package/dist/src/core/external-tools/external-items-display.js +185 -0
- package/dist/src/core/external-tools/external-items-display.js.map +1 -0
- package/dist/src/core/external-tools/index.d.ts +8 -0
- package/dist/src/core/external-tools/index.d.ts.map +1 -0
- package/dist/src/core/external-tools/index.js +8 -0
- package/dist/src/core/external-tools/index.js.map +1 -0
- package/dist/src/core/external-tools/providers/ado-items-adapter.d.ts +39 -0
- package/dist/src/core/external-tools/providers/ado-items-adapter.d.ts.map +1 -0
- package/dist/src/core/external-tools/providers/ado-items-adapter.js +188 -0
- package/dist/src/core/external-tools/providers/ado-items-adapter.js.map +1 -0
- package/dist/src/core/external-tools/providers/github-items-adapter.d.ts +38 -0
- package/dist/src/core/external-tools/providers/github-items-adapter.d.ts.map +1 -0
- package/dist/src/core/external-tools/providers/github-items-adapter.js +136 -0
- package/dist/src/core/external-tools/providers/github-items-adapter.js.map +1 -0
- package/dist/src/core/external-tools/providers/index.d.ts +7 -0
- package/dist/src/core/external-tools/providers/index.d.ts.map +1 -0
- package/dist/src/core/external-tools/providers/index.js +7 -0
- package/dist/src/core/external-tools/providers/index.js.map +1 -0
- package/dist/src/core/external-tools/providers/jira-items-adapter.d.ts +42 -0
- package/dist/src/core/external-tools/providers/jira-items-adapter.d.ts.map +1 -0
- package/dist/src/core/external-tools/providers/jira-items-adapter.js +153 -0
- package/dist/src/core/external-tools/providers/jira-items-adapter.js.map +1 -0
- package/dist/src/core/external-tools/types.d.ts +78 -0
- package/dist/src/core/external-tools/types.d.ts.map +1 -0
- package/dist/src/core/external-tools/types.js +19 -0
- package/dist/src/core/external-tools/types.js.map +1 -0
- 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 +24 -0
- package/dist/src/core/increment/increment-archiver.d.ts.map +1 -1
- package/dist/src/core/increment/increment-archiver.js +59 -2
- 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 +98 -37
- package/dist/src/core/increment/increment-utils.d.ts.map +1 -1
- package/dist/src/core/increment/increment-utils.js +119 -68
- 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/increment/status-change-sync-trigger.d.ts.map +1 -1
- package/dist/src/core/increment/status-change-sync-trigger.js +4 -0
- package/dist/src/core/increment/status-change-sync-trigger.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 +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 +247 -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 +18 -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 +154 -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 +146 -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 +5 -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 +36 -2
- package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
- package/dist/src/core/llm/providers/azure-openai-provider.d.ts.map +1 -1
- package/dist/src/core/llm/providers/azure-openai-provider.js +1 -0
- package/dist/src/core/llm/providers/azure-openai-provider.js.map +1 -1
- package/dist/src/core/llm/providers/bedrock-provider.d.ts.map +1 -1
- package/dist/src/core/llm/providers/bedrock-provider.js +2 -0
- package/dist/src/core/llm/providers/bedrock-provider.js.map +1 -1
- package/dist/src/core/llm/providers/openai-provider.d.ts.map +1 -1
- package/dist/src/core/llm/providers/openai-provider.js +1 -0
- package/dist/src/core/llm/providers/openai-provider.js.map +1 -1
- package/dist/src/core/llm/providers/vertex-ai-provider.d.ts.map +1 -1
- package/dist/src/core/llm/providers/vertex-ai-provider.js +1 -0
- package/dist/src/core/llm/providers/vertex-ai-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/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/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/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/feature-id-collision.js +1 -1
- package/dist/src/utils/feature-id-collision.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/package.json +1 -5
- 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-do.md +35 -1
- package/plugins/specweave/commands/specweave-done.md +96 -0
- package/plugins/specweave/commands/specweave-external.md +150 -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/hooks/docs-changed.sh.backup +79 -0
- package/plugins/specweave/hooks/hooks.json +33 -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/universal/dispatcher.mjs +135 -42
- package/plugins/specweave/hooks/universal/fail-fast-wrapper.sh +183 -0
- package/plugins/specweave/hooks/universal/hook-wrapper.cmd +26 -26
- package/plugins/specweave/hooks/universal/session-start.cmd +16 -16
- package/plugins/specweave/hooks/universal/session-start.ps1 +16 -16
- 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/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/increment-planner/SKILL.md +333 -24
- package/plugins/specweave/skills/increment-planner/templates/spec-multi-project.md +17 -9
- package/plugins/specweave/skills/increment-planner/templates/spec-single-project.md +6 -2
- package/plugins/specweave/skills/instant-status/SKILL.md +70 -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/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/hooks/.specweave/logs/hooks-debug.log +1262 -626
- 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-jira/hooks/post-task-completion.sh.backup +172 -0
- package/plugins/specweave-jira/lib/enhanced-jira-sync.js +134 -0
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +1254 -939
- 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,343 @@
|
|
|
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 * as fs from 'fs';
|
|
10
|
+
import * as path from 'path';
|
|
11
|
+
export async function generateStrategy(repoAnalyses, orgResult, inconsistencyResult, llmProvider, onProgress, log) {
|
|
12
|
+
log('PHASE F: Strategy Generation');
|
|
13
|
+
onProgress('strategy', 0, 100, 'Analyzing strategic landscape');
|
|
14
|
+
// Collect all tech debt
|
|
15
|
+
onProgress('strategy', 20, 100, 'Cataloging tech debt');
|
|
16
|
+
const techDebtCatalog = collectTechDebt(repoAnalyses, inconsistencyResult);
|
|
17
|
+
log(' Collected ' + techDebtCatalog.length + ' tech debt items');
|
|
18
|
+
// Map business domains
|
|
19
|
+
onProgress('strategy', 40, 100, 'Mapping business domains');
|
|
20
|
+
const domainMap = mapBusinessDomains(repoAnalyses, orgResult);
|
|
21
|
+
log(' Mapped ' + domainMap.length + ' business domains');
|
|
22
|
+
// Identify modernization candidates
|
|
23
|
+
onProgress('strategy', 60, 100, 'Identifying modernization candidates');
|
|
24
|
+
const modernizationCandidates = identifyModernizationCandidates(repoAnalyses, techDebtCatalog);
|
|
25
|
+
log(' Found ' + modernizationCandidates.length + ' modernization candidates');
|
|
26
|
+
// Generate recommendations
|
|
27
|
+
onProgress('strategy', 80, 100, 'Generating recommendations');
|
|
28
|
+
const recommendations = generateRecommendations(techDebtCatalog, domainMap, modernizationCandidates, orgResult);
|
|
29
|
+
log(' Generated ' + recommendations.length + ' strategic recommendations');
|
|
30
|
+
return { techDebtCatalog, domainMap, modernizationCandidates, recommendations };
|
|
31
|
+
}
|
|
32
|
+
function collectTechDebt(analyses, inconsistencyResult) {
|
|
33
|
+
const debt = [...inconsistencyResult.techDebt];
|
|
34
|
+
let debtNum = debt.length + 1;
|
|
35
|
+
for (const [name, analysis] of analyses) {
|
|
36
|
+
// Check for outdated patterns
|
|
37
|
+
const outdatedPatterns = analysis.patternsUsed.filter(p => isOutdatedPattern(p.pattern));
|
|
38
|
+
if (outdatedPatterns.length > 0) {
|
|
39
|
+
debt.push({
|
|
40
|
+
id: 'DEBT-' + String(debtNum++).padStart(3, '0'),
|
|
41
|
+
title: 'Update outdated patterns in ' + name,
|
|
42
|
+
description: 'Found ' + outdatedPatterns.length + ' outdated patterns: ' +
|
|
43
|
+
outdatedPatterns.map(p => p.pattern).join(', '),
|
|
44
|
+
severity: 'medium',
|
|
45
|
+
effort: 'medium',
|
|
46
|
+
repos: [name],
|
|
47
|
+
category: 'legacy',
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
// Check for missing tests (heuristic: no test files in sample)
|
|
51
|
+
if (analysis.filesAnalyzed < 5 && analysis.confidence === 'low') {
|
|
52
|
+
debt.push({
|
|
53
|
+
id: 'DEBT-' + String(debtNum++).padStart(3, '0'),
|
|
54
|
+
title: 'Improve test coverage for ' + name,
|
|
55
|
+
description: 'Low file count and confidence suggests missing tests',
|
|
56
|
+
severity: 'medium',
|
|
57
|
+
effort: 'medium',
|
|
58
|
+
repos: [name],
|
|
59
|
+
category: 'missing-tests',
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return debt;
|
|
64
|
+
}
|
|
65
|
+
function isOutdatedPattern(pattern) {
|
|
66
|
+
const outdated = [
|
|
67
|
+
'callback',
|
|
68
|
+
'jquery',
|
|
69
|
+
'angular.js',
|
|
70
|
+
'backbone',
|
|
71
|
+
'grunt',
|
|
72
|
+
'bower',
|
|
73
|
+
];
|
|
74
|
+
return outdated.some(o => pattern.toLowerCase().includes(o));
|
|
75
|
+
}
|
|
76
|
+
function mapBusinessDomains(analyses, orgResult) {
|
|
77
|
+
const domains = [];
|
|
78
|
+
// Use organization domains if available
|
|
79
|
+
for (const domain of orgResult.domains) {
|
|
80
|
+
const repoAnalysesList = domain.repos
|
|
81
|
+
.map(r => analyses.get(r))
|
|
82
|
+
.filter((a) => a !== undefined);
|
|
83
|
+
const avgConfidence = repoAnalysesList.length > 0
|
|
84
|
+
? repoAnalysesList.reduce((sum, a) => sum + (a.confidence === 'high' ? 100 : a.confidence === 'medium' ? 70 : 40), 0) / repoAnalysesList.length
|
|
85
|
+
: 50;
|
|
86
|
+
const concerns = [];
|
|
87
|
+
if (avgConfidence < 60)
|
|
88
|
+
concerns.push('Low documentation quality');
|
|
89
|
+
if (repoAnalysesList.some(a => a.filesAnalyzed < 3))
|
|
90
|
+
concerns.push('Some repos poorly structured');
|
|
91
|
+
domains.push({
|
|
92
|
+
domain: domain.name,
|
|
93
|
+
description: domain.description,
|
|
94
|
+
repos: domain.repos,
|
|
95
|
+
healthScore: Math.round(avgConfidence),
|
|
96
|
+
concerns,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
// If no domains from org, create from key concepts
|
|
100
|
+
if (domains.length === 0) {
|
|
101
|
+
const conceptGroups = new Map();
|
|
102
|
+
for (const [name, analysis] of analyses) {
|
|
103
|
+
for (const concept of analysis.keyConcepts.slice(0, 3)) {
|
|
104
|
+
const normalized = concept.toLowerCase();
|
|
105
|
+
if (!conceptGroups.has(normalized)) {
|
|
106
|
+
conceptGroups.set(normalized, []);
|
|
107
|
+
}
|
|
108
|
+
conceptGroups.get(normalized).push(name);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
for (const [concept, repos] of conceptGroups) {
|
|
112
|
+
if (repos.length >= 2) {
|
|
113
|
+
domains.push({
|
|
114
|
+
domain: concept,
|
|
115
|
+
description: 'Repos sharing ' + concept + ' concept',
|
|
116
|
+
repos,
|
|
117
|
+
healthScore: 70,
|
|
118
|
+
concerns: [],
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return domains;
|
|
124
|
+
}
|
|
125
|
+
function identifyModernizationCandidates(analyses, techDebt) {
|
|
126
|
+
const candidates = [];
|
|
127
|
+
const debtByRepo = new Map();
|
|
128
|
+
// Count debt items per repo
|
|
129
|
+
for (const item of techDebt) {
|
|
130
|
+
for (const repo of item.repos) {
|
|
131
|
+
debtByRepo.set(repo, (debtByRepo.get(repo) || 0) + 1);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
for (const [name, analysis] of analyses) {
|
|
135
|
+
const debtCount = debtByRepo.get(name) || 0;
|
|
136
|
+
const hasLowConfidence = analysis.confidence === 'low';
|
|
137
|
+
const hasOutdatedPatterns = analysis.patternsUsed.some(p => isOutdatedPattern(p.pattern));
|
|
138
|
+
const hasFewerFiles = analysis.filesAnalyzed < 5;
|
|
139
|
+
// Score for modernization need
|
|
140
|
+
let score = 0;
|
|
141
|
+
const reasons = [];
|
|
142
|
+
if (debtCount >= 3) {
|
|
143
|
+
score += 3;
|
|
144
|
+
reasons.push('High tech debt (' + debtCount + ' items)');
|
|
145
|
+
}
|
|
146
|
+
if (hasLowConfidence) {
|
|
147
|
+
score += 2;
|
|
148
|
+
reasons.push('Poor documentation');
|
|
149
|
+
}
|
|
150
|
+
if (hasOutdatedPatterns) {
|
|
151
|
+
score += 2;
|
|
152
|
+
reasons.push('Outdated patterns');
|
|
153
|
+
}
|
|
154
|
+
if (hasFewerFiles) {
|
|
155
|
+
score += 1;
|
|
156
|
+
reasons.push('Minimal codebase');
|
|
157
|
+
}
|
|
158
|
+
if (score >= 3) {
|
|
159
|
+
candidates.push({
|
|
160
|
+
repo: name,
|
|
161
|
+
reason: reasons.join(', '),
|
|
162
|
+
priority: score >= 5 ? 'high' : score >= 4 ? 'medium' : 'low',
|
|
163
|
+
suggestedApproach: suggestApproach(reasons),
|
|
164
|
+
estimatedEffort: score >= 5 ? 'large' : score >= 4 ? 'medium' : 'small',
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return candidates.sort((a, b) => {
|
|
169
|
+
const priorityOrder = { high: 0, medium: 1, low: 2 };
|
|
170
|
+
return priorityOrder[a.priority] - priorityOrder[b.priority];
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
function suggestApproach(reasons) {
|
|
174
|
+
if (reasons.some(r => r.includes('Outdated patterns'))) {
|
|
175
|
+
return 'Incremental migration to modern patterns with feature flags';
|
|
176
|
+
}
|
|
177
|
+
if (reasons.some(r => r.includes('Poor documentation'))) {
|
|
178
|
+
return 'Documentation sprint followed by gradual refactoring';
|
|
179
|
+
}
|
|
180
|
+
if (reasons.some(r => r.includes('High tech debt'))) {
|
|
181
|
+
return 'Dedicated tech debt reduction sprint';
|
|
182
|
+
}
|
|
183
|
+
return 'Evaluate for rewrite vs refactor based on business criticality';
|
|
184
|
+
}
|
|
185
|
+
function generateRecommendations(techDebt, domains, candidates, orgResult) {
|
|
186
|
+
const recommendations = [];
|
|
187
|
+
let recNum = 1;
|
|
188
|
+
// High priority modernization
|
|
189
|
+
const highPriorityCandidates = candidates.filter(c => c.priority === 'high');
|
|
190
|
+
if (highPriorityCandidates.length > 0) {
|
|
191
|
+
recommendations.push({
|
|
192
|
+
id: 'REC-' + String(recNum++).padStart(3, '0'),
|
|
193
|
+
title: 'Address high-priority modernization candidates',
|
|
194
|
+
description: highPriorityCandidates.length + ' repositories need immediate attention: ' +
|
|
195
|
+
highPriorityCandidates.map(c => c.repo).join(', '),
|
|
196
|
+
impact: 'high',
|
|
197
|
+
effort: 'large',
|
|
198
|
+
category: 'architecture',
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
// Documentation debt
|
|
202
|
+
const docDebt = techDebt.filter(d => d.category === 'documentation');
|
|
203
|
+
if (docDebt.length >= 3) {
|
|
204
|
+
recommendations.push({
|
|
205
|
+
id: 'REC-' + String(recNum++).padStart(3, '0'),
|
|
206
|
+
title: 'Launch documentation improvement initiative',
|
|
207
|
+
description: docDebt.length + ' repos have documentation issues. ' +
|
|
208
|
+
'Consider a team-wide doc sprint.',
|
|
209
|
+
impact: 'medium',
|
|
210
|
+
effort: 'medium',
|
|
211
|
+
category: 'process',
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
// Domain health
|
|
215
|
+
const unhealthyDomains = domains.filter(d => d.healthScore < 60);
|
|
216
|
+
if (unhealthyDomains.length > 0) {
|
|
217
|
+
recommendations.push({
|
|
218
|
+
id: 'REC-' + String(recNum++).padStart(3, '0'),
|
|
219
|
+
title: 'Improve health of critical domains',
|
|
220
|
+
description: unhealthyDomains.length + ' business domains have low health scores: ' +
|
|
221
|
+
unhealthyDomains.map(d => d.domain + ' (' + d.healthScore + '%)').join(', '),
|
|
222
|
+
impact: 'high',
|
|
223
|
+
effort: 'medium',
|
|
224
|
+
category: 'architecture',
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
// Team ownership
|
|
228
|
+
if (orgResult.hypotheses.length > 0) {
|
|
229
|
+
recommendations.push({
|
|
230
|
+
id: 'REC-' + String(recNum++).padStart(3, '0'),
|
|
231
|
+
title: 'Clarify team ownership and boundaries',
|
|
232
|
+
description: 'Organization analysis identified uncertainties: ' +
|
|
233
|
+
orgResult.hypotheses.slice(0, 2).join('; '),
|
|
234
|
+
impact: 'medium',
|
|
235
|
+
effort: 'small',
|
|
236
|
+
category: 'team',
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
// Pattern standardization
|
|
240
|
+
const patternInconsistencies = techDebt.filter(d => d.description.toLowerCase().includes('pattern'));
|
|
241
|
+
if (patternInconsistencies.length > 0) {
|
|
242
|
+
recommendations.push({
|
|
243
|
+
id: 'REC-' + String(recNum++).padStart(3, '0'),
|
|
244
|
+
title: 'Standardize development patterns',
|
|
245
|
+
description: 'Multiple inconsistent patterns detected. ' +
|
|
246
|
+
'Create and enforce architectural guidelines.',
|
|
247
|
+
impact: 'medium',
|
|
248
|
+
effort: 'medium',
|
|
249
|
+
category: 'tooling',
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
return recommendations;
|
|
253
|
+
}
|
|
254
|
+
export async function saveStrategy(projectPath, result) {
|
|
255
|
+
const savedFiles = [];
|
|
256
|
+
const strategyPath = path.join(projectPath, '.specweave/docs/internal/strategy');
|
|
257
|
+
fs.mkdirSync(strategyPath, { recursive: true });
|
|
258
|
+
// Tech Debt Catalog
|
|
259
|
+
const debtFile = path.join(strategyPath, 'tech-debt-catalog.md');
|
|
260
|
+
const debtLines = [
|
|
261
|
+
'# Tech Debt Catalog',
|
|
262
|
+
'',
|
|
263
|
+
'*Auto-generated by Intelligent Analyzer*',
|
|
264
|
+
'',
|
|
265
|
+
'## Summary',
|
|
266
|
+
'',
|
|
267
|
+
'| Severity | Count |',
|
|
268
|
+
'|----------|-------|',
|
|
269
|
+
'| High | ' + result.techDebtCatalog.filter(d => d.severity === 'high').length + ' |',
|
|
270
|
+
'| Medium | ' + result.techDebtCatalog.filter(d => d.severity === 'medium').length + ' |',
|
|
271
|
+
'| Low | ' + result.techDebtCatalog.filter(d => d.severity === 'low').length + ' |',
|
|
272
|
+
'',
|
|
273
|
+
'## Items',
|
|
274
|
+
'',
|
|
275
|
+
];
|
|
276
|
+
for (const item of result.techDebtCatalog) {
|
|
277
|
+
debtLines.push('### ' + item.id + ': ' + item.title, '', item.description, '', '- **Severity**: ' + item.severity, '- **Effort**: ' + item.effort, '- **Category**: ' + item.category, '- **Repos**: ' + item.repos.join(', '), '');
|
|
278
|
+
}
|
|
279
|
+
fs.writeFileSync(debtFile, debtLines.join('\n'));
|
|
280
|
+
savedFiles.push(debtFile);
|
|
281
|
+
// Domain Map
|
|
282
|
+
const domainFile = path.join(strategyPath, 'domain-map.md');
|
|
283
|
+
const domainLines = [
|
|
284
|
+
'# Business Domain Map',
|
|
285
|
+
'',
|
|
286
|
+
'*Auto-generated by Intelligent Analyzer*',
|
|
287
|
+
'',
|
|
288
|
+
];
|
|
289
|
+
for (const domain of result.domainMap) {
|
|
290
|
+
domainLines.push('## ' + domain.domain, '', domain.description, '', '- **Health Score**: ' + domain.healthScore + '%', '- **Repos**: ' + domain.repos.join(', '), '');
|
|
291
|
+
if (domain.concerns.length > 0) {
|
|
292
|
+
domainLines.push('**Concerns**:', '');
|
|
293
|
+
for (const concern of domain.concerns) {
|
|
294
|
+
domainLines.push('- ' + concern);
|
|
295
|
+
}
|
|
296
|
+
domainLines.push('');
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
fs.writeFileSync(domainFile, domainLines.join('\n'));
|
|
300
|
+
savedFiles.push(domainFile);
|
|
301
|
+
// Modernization Candidates
|
|
302
|
+
if (result.modernizationCandidates.length > 0) {
|
|
303
|
+
const modernFile = path.join(strategyPath, 'modernization-candidates.md');
|
|
304
|
+
const modernLines = [
|
|
305
|
+
'# Modernization Candidates',
|
|
306
|
+
'',
|
|
307
|
+
'*Auto-generated by Intelligent Analyzer*',
|
|
308
|
+
'',
|
|
309
|
+
'## Priority Summary',
|
|
310
|
+
'',
|
|
311
|
+
'| Priority | Count |',
|
|
312
|
+
'|----------|-------|',
|
|
313
|
+
'| High | ' + result.modernizationCandidates.filter(c => c.priority === 'high').length + ' |',
|
|
314
|
+
'| Medium | ' + result.modernizationCandidates.filter(c => c.priority === 'medium').length + ' |',
|
|
315
|
+
'| Low | ' + result.modernizationCandidates.filter(c => c.priority === 'low').length + ' |',
|
|
316
|
+
'',
|
|
317
|
+
'## Candidates',
|
|
318
|
+
'',
|
|
319
|
+
];
|
|
320
|
+
for (const candidate of result.modernizationCandidates) {
|
|
321
|
+
modernLines.push('### ' + candidate.repo + ' (' + candidate.priority.toUpperCase() + ')', '', '**Reason**: ' + candidate.reason, '', '**Suggested Approach**: ' + candidate.suggestedApproach, '', '**Estimated Effort**: ' + candidate.estimatedEffort, '');
|
|
322
|
+
}
|
|
323
|
+
fs.writeFileSync(modernFile, modernLines.join('\n'));
|
|
324
|
+
savedFiles.push(modernFile);
|
|
325
|
+
}
|
|
326
|
+
// Strategic Recommendations
|
|
327
|
+
if (result.recommendations.length > 0) {
|
|
328
|
+
const recFile = path.join(strategyPath, 'recommendations.md');
|
|
329
|
+
const recLines = [
|
|
330
|
+
'# Strategic Recommendations',
|
|
331
|
+
'',
|
|
332
|
+
'*Auto-generated by Intelligent Analyzer*',
|
|
333
|
+
'',
|
|
334
|
+
];
|
|
335
|
+
for (const rec of result.recommendations) {
|
|
336
|
+
recLines.push('## ' + rec.id + ': ' + rec.title, '', rec.description, '', '| Aspect | Value |', '|--------|-------|', '| Impact | ' + rec.impact + ' |', '| Effort | ' + rec.effort + ' |', '| Category | ' + rec.category + ' |', '');
|
|
337
|
+
}
|
|
338
|
+
fs.writeFileSync(recFile, recLines.join('\n'));
|
|
339
|
+
savedFiles.push(recFile);
|
|
340
|
+
}
|
|
341
|
+
return savedFiles;
|
|
342
|
+
}
|
|
343
|
+
//# sourceMappingURL=strategy-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategy-generator.js","sourceRoot":"","sources":["../../../../../src/core/living-docs/intelligent-analyzer/strategy-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Intelligent Analyzer Types
|
|
3
|
+
*
|
|
4
|
+
* Types for the deep codebase analysis and organization synthesis.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Analysis checkpoint for resume support
|
|
8
|
+
*/
|
|
9
|
+
export interface IntelligentAnalysisCheckpoint {
|
|
10
|
+
phase: 'A' | 'B' | 'C' | 'D' | 'E' | 'F';
|
|
11
|
+
reposTotal: number;
|
|
12
|
+
reposCompleted: string[];
|
|
13
|
+
repoInProgress: string | null;
|
|
14
|
+
discoveryComplete: boolean;
|
|
15
|
+
deepAnalysisComplete: boolean;
|
|
16
|
+
clusteringComplete: boolean;
|
|
17
|
+
architectureComplete: boolean;
|
|
18
|
+
inconsistenciesComplete: boolean;
|
|
19
|
+
strategyComplete: boolean;
|
|
20
|
+
startedAt: string;
|
|
21
|
+
lastActivityAt: string;
|
|
22
|
+
estimatedCompletion: string | null;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Deep analysis result for a single repo
|
|
26
|
+
*/
|
|
27
|
+
export interface RepoAnalysis {
|
|
28
|
+
name: string;
|
|
29
|
+
path: string;
|
|
30
|
+
purpose: string;
|
|
31
|
+
keyConcepts: string[];
|
|
32
|
+
mainApis: ApiSurface[];
|
|
33
|
+
patternsUsed: PatternUsage[];
|
|
34
|
+
internalDependencies: string[];
|
|
35
|
+
externalDependencies: string[];
|
|
36
|
+
filesAnalyzed: number;
|
|
37
|
+
confidence: 'high' | 'medium' | 'low';
|
|
38
|
+
analyzedAt: string;
|
|
39
|
+
observations: string[];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* API surface detected in a repo
|
|
43
|
+
*/
|
|
44
|
+
export interface ApiSurface {
|
|
45
|
+
name: string;
|
|
46
|
+
type: 'class' | 'function' | 'interface' | 'endpoint' | 'event';
|
|
47
|
+
description: string;
|
|
48
|
+
location: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Pattern usage detected in code
|
|
52
|
+
*/
|
|
53
|
+
export interface PatternUsage {
|
|
54
|
+
pattern: string;
|
|
55
|
+
category: 'auth' | 'api' | 'data' | 'messaging' | 'architecture' | 'other';
|
|
56
|
+
evidence: string[];
|
|
57
|
+
confidence: 'high' | 'medium' | 'low';
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Organization cluster (team, service, or domain)
|
|
61
|
+
*/
|
|
62
|
+
export interface OrganizationCluster {
|
|
63
|
+
name: string;
|
|
64
|
+
type: 'team' | 'microservice' | 'domain';
|
|
65
|
+
description: string;
|
|
66
|
+
repos: string[];
|
|
67
|
+
confidence: 'high' | 'medium' | 'low';
|
|
68
|
+
reasoning: string;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Detected architectural decision
|
|
72
|
+
*/
|
|
73
|
+
export interface DetectedADR {
|
|
74
|
+
id: string;
|
|
75
|
+
title: string;
|
|
76
|
+
pattern: string;
|
|
77
|
+
status: 'Detected';
|
|
78
|
+
context: string;
|
|
79
|
+
decision: string;
|
|
80
|
+
consequences: string[];
|
|
81
|
+
evidence: ADREvidence[];
|
|
82
|
+
confidence: 'high' | 'medium' | 'low';
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Evidence for a detected ADR
|
|
86
|
+
*/
|
|
87
|
+
export interface ADREvidence {
|
|
88
|
+
repo: string;
|
|
89
|
+
files: string[];
|
|
90
|
+
description: string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Inconsistency or question found
|
|
94
|
+
*/
|
|
95
|
+
export interface DetectedIssue {
|
|
96
|
+
id: string;
|
|
97
|
+
type: 'inconsistency' | 'duplicate' | 'ownership' | 'security' | 'question';
|
|
98
|
+
severity: 'critical' | 'important' | 'minor';
|
|
99
|
+
title: string;
|
|
100
|
+
description: string;
|
|
101
|
+
evidence: IssueEvidence[];
|
|
102
|
+
suggestedAction: string;
|
|
103
|
+
targetAudience: 'cto' | 'po' | 'team' | 'anyone';
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Evidence for a detected issue
|
|
107
|
+
*/
|
|
108
|
+
export interface IssueEvidence {
|
|
109
|
+
repo: string;
|
|
110
|
+
files: string[];
|
|
111
|
+
details: string;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Tech debt item
|
|
115
|
+
*/
|
|
116
|
+
export interface TechDebtItem {
|
|
117
|
+
id: string;
|
|
118
|
+
title: string;
|
|
119
|
+
description: string;
|
|
120
|
+
severity: 'high' | 'medium' | 'low';
|
|
121
|
+
effort: 'small' | 'medium' | 'large';
|
|
122
|
+
repos: string[];
|
|
123
|
+
category: 'legacy' | 'duplication' | 'missing-tests' | 'outdated-deps' | 'documentation' | 'other';
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* File sample for LLM analysis
|
|
127
|
+
*/
|
|
128
|
+
export interface FileSample {
|
|
129
|
+
path: string;
|
|
130
|
+
content: string;
|
|
131
|
+
type: 'readme' | 'config' | 'entry' | 'api' | 'model' | 'other';
|
|
132
|
+
truncated: boolean;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* LLM provider interface (simplified)
|
|
136
|
+
*/
|
|
137
|
+
export interface LLMProvider {
|
|
138
|
+
analyze(prompt: string): Promise<{
|
|
139
|
+
content: string;
|
|
140
|
+
}>;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Progress callback for long-running operations
|
|
144
|
+
*/
|
|
145
|
+
export type ProgressCallback = (phase: string, current: number, total: number, message: string) => void;
|
|
146
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/core/living-docs/intelligent-analyzer/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAGzC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAG9B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,uBAAuB,EAAE,OAAO,CAAC;IACjC,gBAAgB,EAAE,OAAO,CAAC;IAG1B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IAGb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,YAAY,EAAE,YAAY,EAAE,CAAC;IAG7B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAG/B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;IAGnB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC;IAChE,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,WAAW,GAAG,cAAc,GAAG,OAAO,CAAC;IAC3E,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,QAAQ,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,eAAe,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,CAAC;IAC5E,QAAQ,EAAE,UAAU,GAAG,WAAW,GAAG,OAAO,CAAC;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,KAAK,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;CAClD;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACpC,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,QAAQ,GAAG,aAAa,GAAG,eAAe,GAAG,eAAe,GAAG,eAAe,GAAG,OAAO,CAAC;CACpG;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;IAChE,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvD;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAC7B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,KACZ,IAAI,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/core/living-docs/intelligent-analyzer/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -191,6 +191,11 @@ export declare class LivingDocsSync {
|
|
|
191
191
|
* AC-US5-02: When GitHub configured, trigger GitHub sync
|
|
192
192
|
* AC-US5-03: When no external tools configured, skip
|
|
193
193
|
* AC-US5-05: External tool failures don't break living docs sync
|
|
194
|
+
*
|
|
195
|
+
* v0.32.2+ (AC-US3-01 to AC-US3-05): Permission checks before syncing
|
|
196
|
+
* - canUpsertInternalItems: Required for creating issues from SpecWeave increments
|
|
197
|
+
* - canUpdateExternalItems: Required for updating externally-imported items
|
|
198
|
+
* - canUpdateStatus: Required for updating issue status (open/closed)
|
|
194
199
|
*/
|
|
195
200
|
private syncToExternalTools;
|
|
196
201
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"living-docs-sync.d.ts","sourceRoot":"","sources":["../../../../src/core/living-docs/living-docs-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AASH,OAAO,EAAE,MAAM,EAAiB,MAAM,uBAAuB,CAAC;AAO9D,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,UAAU,EACV,aAAa,EACb,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAoBpB,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,uBAAuB,EAAE,CAAC;AAE5F,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;gBAEd,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO;IASlE;;;;;;;OAOG;IACH,YAAY,IAAI,MAAM;IAItB;;;;;OAKG;YACW,mBAAmB;IASjC;;OAEG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IA8JxF;;;;;;;;;;;;;;;;;;;;;;OAsBG;YACW,wBAAwB;IAkDtC;;;;;;;;;OASG;IACH,OAAO,CAAC,8BAA8B;IA+BtC;;;;;;;;;;;;;OAaG;YACW,2BAA2B;IAkEzC;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IA6BhC;;OAEG;YACW,sBAAsB;IAKpC;;;;;;;;;;;;;;OAcG;YACW,kBAAkB;IA6GhC;;OAEG;YACW,uBAAuB;IAcrC;;OAEG;YACW,wBAAwB;IAmFtC;;;OAGG;YACW,sBAAsB;IAqGpC;;OAEG;YACW,iBAAiB;IA0C/B;;;;;;;;;;;OAWG;YACW,oBAAoB;IAwClC;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,iBAAiB;IAwCzB;;OAEG;YACW,kBAAkB;
|
|
1
|
+
{"version":3,"file":"living-docs-sync.d.ts","sourceRoot":"","sources":["../../../../src/core/living-docs/living-docs-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AASH,OAAO,EAAE,MAAM,EAAiB,MAAM,uBAAuB,CAAC;AAO9D,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,UAAU,EACV,aAAa,EACb,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAoBpB,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,uBAAuB,EAAE,CAAC;AAE5F,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;gBAEd,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO;IASlE;;;;;;;OAOG;IACH,YAAY,IAAI,MAAM;IAItB;;;;;OAKG;YACW,mBAAmB;IASjC;;OAEG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IA8JxF;;;;;;;;;;;;;;;;;;;;;;OAsBG;YACW,wBAAwB;IAkDtC;;;;;;;;;OASG;IACH,OAAO,CAAC,8BAA8B;IA+BtC;;;;;;;;;;;;;OAaG;YACW,2BAA2B;IAkEzC;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IA6BhC;;OAEG;YACW,sBAAsB;IAKpC;;;;;;;;;;;;;;OAcG;YACW,kBAAkB;IA6GhC;;OAEG;YACW,uBAAuB;IAcrC;;OAEG;YACW,wBAAwB;IAmFtC;;;OAGG;YACW,sBAAsB;IAqGpC;;OAEG;YACW,iBAAiB;IA0C/B;;;;;;;;;;;OAWG;YACW,oBAAoB;IAwClC;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,iBAAiB;IAwCzB;;OAEG;YACW,kBAAkB;IAoHhC;;;;OAIG;YACW,sBAAsB;IAkCpC;;OAEG;YACW,kBAAkB;IAmChC;;;;;;;;;;;;OAYG;YACW,mBAAmB;IA6EjC;;;;;;OAMG;IACH;;;;;;;;;;;OAWG;YACW,mBAAmB;IAyIjC;;;;;;;;;OASG;YACW,YAAY;IA0F1B;;;;;;;;;;;;OAYG;YACW,UAAU;IAyFxB;;;;;;;;;;;;OAYG;YACW,SAAS;IAyFvB;;;;;;;;;OASG;YACW,4BAA4B;CAmB3C"}
|
|
@@ -849,7 +849,8 @@ export class LivingDocsSync {
|
|
|
849
849
|
}
|
|
850
850
|
}
|
|
851
851
|
if (!title) {
|
|
852
|
-
|
|
852
|
+
// Handle both regular (0111-name) and external (0111E-name) increment IDs
|
|
853
|
+
title = incrementId.replace(/^\d+E?-/, '').split('-').map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' ');
|
|
853
854
|
}
|
|
854
855
|
// Extract overview
|
|
855
856
|
let overview = '';
|
|
@@ -952,6 +953,11 @@ export class LivingDocsSync {
|
|
|
952
953
|
* AC-US5-02: When GitHub configured, trigger GitHub sync
|
|
953
954
|
* AC-US5-03: When no external tools configured, skip
|
|
954
955
|
* AC-US5-05: External tool failures don't break living docs sync
|
|
956
|
+
*
|
|
957
|
+
* v0.32.2+ (AC-US3-01 to AC-US3-05): Permission checks before syncing
|
|
958
|
+
* - canUpsertInternalItems: Required for creating issues from SpecWeave increments
|
|
959
|
+
* - canUpdateExternalItems: Required for updating externally-imported items
|
|
960
|
+
* - canUpdateStatus: Required for updating issue status (open/closed)
|
|
955
961
|
*/
|
|
956
962
|
async syncToExternalTools(incrementId, featureId, projectPath) {
|
|
957
963
|
try {
|
|
@@ -961,8 +967,36 @@ export class LivingDocsSync {
|
|
|
961
967
|
// AC-US5-03: No external tools configured, skip
|
|
962
968
|
return;
|
|
963
969
|
}
|
|
970
|
+
// 2. Load sync settings and check permissions (v0.32.2+ AC-US3-01 to AC-US3-05)
|
|
971
|
+
const configPath = path.join(this.projectRoot, '.specweave/config.json');
|
|
972
|
+
let syncSettings = {
|
|
973
|
+
canUpsertInternalItems: false,
|
|
974
|
+
canUpdateExternalItems: false,
|
|
975
|
+
canUpdateStatus: false,
|
|
976
|
+
};
|
|
977
|
+
if (existsSync(configPath)) {
|
|
978
|
+
try {
|
|
979
|
+
const config = await readJson(configPath);
|
|
980
|
+
syncSettings = {
|
|
981
|
+
canUpsertInternalItems: config.sync?.settings?.canUpsertInternalItems ?? false,
|
|
982
|
+
canUpdateExternalItems: config.sync?.settings?.canUpdateExternalItems ?? false,
|
|
983
|
+
canUpdateStatus: config.sync?.settings?.canUpdateStatus ?? false,
|
|
984
|
+
};
|
|
985
|
+
}
|
|
986
|
+
catch (error) {
|
|
987
|
+
this.logger.warn(' ⚠️ Failed to load sync settings, using defaults (disabled)');
|
|
988
|
+
}
|
|
989
|
+
}
|
|
990
|
+
// 3. AC-US3-01: Check canUpsertInternalItems permission for creating issues
|
|
991
|
+
if (!syncSettings.canUpsertInternalItems) {
|
|
992
|
+
this.logger.log(' ⚠️ Skipping external sync - canUpsertInternalItems is disabled in config');
|
|
993
|
+
this.logger.log(' 💡 Enable in .specweave/config.json: sync.settings.canUpsertInternalItems: true');
|
|
994
|
+
return;
|
|
995
|
+
}
|
|
964
996
|
this.logger.log(`\n📡 Syncing to external tools: ${externalTools.join(', ')}`);
|
|
965
|
-
|
|
997
|
+
this.logger.log(` 📋 Permissions: upsert=${syncSettings.canUpsertInternalItems}, ` +
|
|
998
|
+
`update=${syncSettings.canUpdateExternalItems}, status=${syncSettings.canUpdateStatus}`);
|
|
999
|
+
// 4. Sync to each configured external tool (passing permissions for granular control)
|
|
966
1000
|
for (const tool of externalTools) {
|
|
967
1001
|
try {
|
|
968
1002
|
switch (tool) {
|