specweave 0.32.10 → 0.33.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 +162 -1
- package/dist/plugins/specweave-ado/lib/per-us-sync.d.ts +120 -0
- package/dist/plugins/specweave-ado/lib/per-us-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-ado/lib/per-us-sync.js +276 -0
- package/dist/plugins/specweave-ado/lib/per-us-sync.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-client-v2.d.ts +4 -1
- package/dist/plugins/specweave-github/lib/github-client-v2.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-client-v2.js +13 -3
- package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
- package/dist/plugins/specweave-github/lib/per-us-sync.d.ts +97 -0
- package/dist/plugins/specweave-github/lib/per-us-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/per-us-sync.js +274 -0
- package/dist/plugins/specweave-github/lib/per-us-sync.js.map +1 -0
- package/dist/plugins/specweave-jira/lib/per-us-sync.d.ts +113 -0
- package/dist/plugins/specweave-jira/lib/per-us-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-jira/lib/per-us-sync.js +254 -0
- package/dist/plugins/specweave-jira/lib/per-us-sync.js.map +1 -0
- package/dist/src/cli/add-child-pid.d.ts +11 -0
- package/dist/src/cli/add-child-pid.d.ts.map +1 -0
- package/dist/src/cli/add-child-pid.js +42 -0
- package/dist/src/cli/add-child-pid.js.map +1 -0
- package/dist/src/cli/add-child-process.d.ts +15 -0
- package/dist/src/cli/add-child-process.d.ts.map +1 -0
- package/dist/src/cli/add-child-process.js +40 -0
- package/dist/src/cli/add-child-process.js.map +1 -0
- package/dist/src/cli/check-watchdog.d.ts +15 -0
- package/dist/src/cli/check-watchdog.d.ts.map +1 -0
- package/dist/src/cli/check-watchdog.js +47 -0
- package/dist/src/cli/check-watchdog.js.map +1 -0
- package/dist/src/cli/cleanup-zombies.d.ts +14 -0
- package/dist/src/cli/cleanup-zombies.d.ts.map +1 -0
- package/dist/src/cli/cleanup-zombies.js +268 -0
- package/dist/src/cli/cleanup-zombies.js.map +1 -0
- package/dist/src/cli/find-session-by-pid.d.ts +14 -0
- package/dist/src/cli/find-session-by-pid.d.ts.map +1 -0
- package/dist/src/cli/find-session-by-pid.js +45 -0
- package/dist/src/cli/find-session-by-pid.js.map +1 -0
- package/dist/src/cli/get-stale-sessions.d.ts +17 -0
- package/dist/src/cli/get-stale-sessions.d.ts.map +1 -0
- package/dist/src/cli/get-stale-sessions.js +36 -0
- package/dist/src/cli/get-stale-sessions.js.map +1 -0
- package/dist/src/cli/register-session.d.ts +16 -0
- package/dist/src/cli/register-session.d.ts.map +1 -0
- package/dist/src/cli/register-session.js +48 -0
- package/dist/src/cli/register-session.js.map +1 -0
- package/dist/src/cli/remove-session.d.ts +11 -0
- package/dist/src/cli/remove-session.d.ts.map +1 -0
- package/dist/src/cli/remove-session.js +36 -0
- package/dist/src/cli/remove-session.js.map +1 -0
- package/dist/src/cli/update-heartbeat.d.ts +11 -0
- package/dist/src/cli/update-heartbeat.d.ts.map +1 -0
- package/dist/src/cli/update-heartbeat.js +36 -0
- package/dist/src/cli/update-heartbeat.js.map +1 -0
- package/dist/src/config/types.d.ts +1208 -203
- package/dist/src/config/types.d.ts.map +1 -1
- package/dist/src/core/background/job-manager.d.ts +16 -0
- package/dist/src/core/background/job-manager.d.ts.map +1 -1
- package/dist/src/core/background/job-manager.js +110 -15
- package/dist/src/core/background/job-manager.js.map +1 -1
- package/dist/src/core/config/config-manager.d.ts.map +1 -1
- package/dist/src/core/config/config-manager.js +58 -0
- package/dist/src/core/config/config-manager.js.map +1 -1
- package/dist/src/core/config/types.d.ts +80 -0
- package/dist/src/core/config/types.d.ts.map +1 -1
- package/dist/src/core/config/types.js.map +1 -1
- package/dist/src/core/increment/increment-utils.d.ts +26 -1
- package/dist/src/core/increment/increment-utils.d.ts.map +1 -1
- package/dist/src/core/increment/increment-utils.js +66 -4
- package/dist/src/core/increment/increment-utils.js.map +1 -1
- package/dist/src/core/increment/status-change-sync-trigger.d.ts +3 -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 +5 -2
- package/dist/src/core/increment/status-change-sync-trigger.js.map +1 -1
- package/dist/src/core/living-docs/cross-project-sync.d.ts +87 -15
- package/dist/src/core/living-docs/cross-project-sync.d.ts.map +1 -1
- package/dist/src/core/living-docs/cross-project-sync.js +147 -28
- package/dist/src/core/living-docs/cross-project-sync.js.map +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.d.ts.map +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.js +48 -12
- package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.js.map +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/cache-manager.d.ts +70 -0
- package/dist/src/core/living-docs/intelligent-analyzer/cache-manager.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/cache-manager.js +188 -0
- package/dist/src/core/living-docs/intelligent-analyzer/cache-manager.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/dashboard-generator.d.ts +33 -0
- package/dist/src/core/living-docs/intelligent-analyzer/dashboard-generator.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/dashboard-generator.js +290 -0
- package/dist/src/core/living-docs/intelligent-analyzer/dashboard-generator.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.d.ts.map +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.js +114 -11
- package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.js.map +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/graph-visualizer.d.ts +23 -0
- package/dist/src/core/living-docs/intelligent-analyzer/graph-visualizer.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/graph-visualizer.js +283 -0
- package/dist/src/core/living-docs/intelligent-analyzer/graph-visualizer.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/mermaid-generator.d.ts +44 -0
- package/dist/src/core/living-docs/intelligent-analyzer/mermaid-generator.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/mermaid-generator.js +61 -0
- package/dist/src/core/living-docs/intelligent-analyzer/mermaid-generator.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/orchestrator.d.ts +126 -0
- package/dist/src/core/living-docs/intelligent-analyzer/orchestrator.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/orchestrator.js +378 -0
- package/dist/src/core/living-docs/intelligent-analyzer/orchestrator.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.d.ts.map +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.js +57 -0
- package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.js.map +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/pattern-analyzer.d.ts +82 -0
- package/dist/src/core/living-docs/intelligent-analyzer/pattern-analyzer.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/pattern-analyzer.js +430 -0
- package/dist/src/core/living-docs/intelligent-analyzer/pattern-analyzer.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/repo-scanner.d.ts +84 -0
- package/dist/src/core/living-docs/intelligent-analyzer/repo-scanner.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/repo-scanner.js +387 -0
- package/dist/src/core/living-docs/intelligent-analyzer/repo-scanner.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/report-writer.d.ts +61 -0
- package/dist/src/core/living-docs/intelligent-analyzer/report-writer.d.ts.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/report-writer.js +174 -0
- package/dist/src/core/living-docs/intelligent-analyzer/report-writer.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/types.d.ts +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/types.d.ts.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.js +26 -22
- package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
- package/dist/src/core/living-docs/module-analyzer.d.ts +3 -0
- package/dist/src/core/living-docs/module-analyzer.d.ts.map +1 -1
- package/dist/src/core/living-docs/module-analyzer.js +40 -1
- package/dist/src/core/living-docs/module-analyzer.js.map +1 -1
- package/dist/src/core/living-docs/types.d.ts +24 -3
- package/dist/src/core/living-docs/types.d.ts.map +1 -1
- package/dist/src/core/qa/qa-runner.js +1 -1
- package/dist/src/core/qa/qa-runner.js.map +1 -1
- package/dist/src/core/scheduler/session-sync-executor.js +1 -1
- package/dist/src/core/scheduler/session-sync-executor.js.map +1 -1
- package/dist/src/core/status-line/status-line-updater.d.ts +1 -1
- package/dist/src/core/status-line/status-line-updater.d.ts.map +1 -1
- package/dist/src/core/status-line/status-line-updater.js +4 -3
- package/dist/src/core/status-line/status-line-updater.js.map +1 -1
- package/dist/src/core/types/config.d.ts +79 -0
- package/dist/src/core/types/config.d.ts.map +1 -1
- package/dist/src/core/types/config.js.map +1 -1
- package/dist/src/importers/jira-importer.d.ts.map +1 -1
- package/dist/src/importers/jira-importer.js +18 -9
- package/dist/src/importers/jira-importer.js.map +1 -1
- package/dist/src/init/architecture/types.d.ts +140 -33
- package/dist/src/init/architecture/types.d.ts.map +1 -1
- package/dist/src/init/compliance/types.d.ts +27 -30
- package/dist/src/init/compliance/types.d.ts.map +1 -1
- package/dist/src/init/repo/types.d.ts +34 -11
- package/dist/src/init/repo/types.d.ts.map +1 -1
- package/dist/src/init/research/src/config/types.d.ts +82 -15
- package/dist/src/init/research/src/config/types.d.ts.map +1 -1
- package/dist/src/init/research/types.d.ts +93 -38
- package/dist/src/init/research/types.d.ts.map +1 -1
- package/dist/src/init/team/types.d.ts +42 -4
- package/dist/src/init/team/types.d.ts.map +1 -1
- package/dist/src/sync/ado-reconciler.js +1 -1
- package/dist/src/sync/ado-reconciler.js.map +1 -1
- package/dist/src/sync/github-reconciler.js +1 -1
- package/dist/src/sync/github-reconciler.js.map +1 -1
- package/dist/src/sync/jira-reconciler.js +1 -1
- package/dist/src/sync/jira-reconciler.js.map +1 -1
- package/dist/src/sync/sync-coordinator.d.ts +20 -0
- package/dist/src/sync/sync-coordinator.d.ts.map +1 -1
- package/dist/src/sync/sync-coordinator.js +258 -33
- package/dist/src/sync/sync-coordinator.js.map +1 -1
- package/dist/src/types/session.d.ts +65 -0
- package/dist/src/types/session.d.ts.map +1 -0
- package/dist/src/types/session.js +8 -0
- package/dist/src/types/session.js.map +1 -0
- package/dist/src/utils/lock-manager.d.ts +48 -0
- package/dist/src/utils/lock-manager.d.ts.map +1 -0
- package/dist/src/utils/lock-manager.js +195 -0
- package/dist/src/utils/lock-manager.js.map +1 -0
- package/dist/src/utils/notification-manager.d.ts +45 -0
- package/dist/src/utils/notification-manager.d.ts.map +1 -0
- package/dist/src/utils/notification-manager.js +130 -0
- package/dist/src/utils/notification-manager.js.map +1 -0
- package/dist/src/utils/platform-utils.d.ts +136 -0
- package/dist/src/utils/platform-utils.d.ts.map +1 -0
- package/dist/src/utils/platform-utils.js +366 -0
- package/dist/src/utils/platform-utils.js.map +1 -0
- package/dist/src/utils/project-resolver.d.ts +156 -0
- package/dist/src/utils/project-resolver.d.ts.map +1 -0
- package/dist/src/utils/project-resolver.js +587 -0
- package/dist/src/utils/project-resolver.js.map +1 -0
- package/dist/src/utils/session-registry.d.ts +142 -0
- package/dist/src/utils/session-registry.d.ts.map +1 -0
- package/dist/src/utils/session-registry.js +480 -0
- package/dist/src/utils/session-registry.js.map +1 -0
- package/package.json +5 -2
- package/plugins/specweave/commands/specweave-living-docs.md +42 -0
- package/plugins/specweave/hooks/hooks.json +20 -0
- package/plugins/specweave/hooks/lib/update-active-increment.sh +2 -2
- package/plugins/specweave/hooks/lib/update-status-line.sh +1 -1
- package/plugins/specweave/hooks/post-increment-status-change.sh +3 -3
- package/plugins/specweave/hooks/post-metadata-change.sh +1 -1
- 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 +107 -5
- package/plugins/specweave/hooks/v2/guards/increment-root-guard.sh +61 -0
- package/plugins/specweave/hooks/v2/guards/per-us-project-validator.sh +281 -0
- package/plugins/specweave/hooks/v2/handlers/living-specs-handler.sh +29 -0
- package/plugins/specweave/hooks/v2/session-end.sh +69 -0
- package/plugins/specweave/hooks/v2/session-start.sh +81 -0
- package/plugins/specweave/lib/vendor/sync/github-reconciler.js +1 -1
- package/plugins/specweave/lib/vendor/sync/github-reconciler.js.map +1 -1
- package/plugins/specweave/scripts/heartbeat.sh +110 -0
- package/plugins/specweave/scripts/progress.js +34 -4
- package/plugins/specweave/scripts/read-jobs.sh +1 -1
- package/plugins/specweave/scripts/read-progress.sh +50 -5
- package/plugins/specweave/scripts/read-workflow.sh +1 -1
- package/plugins/specweave/scripts/session-watchdog.sh +65 -0
- package/plugins/specweave/scripts/status.js +28 -11
- package/plugins/specweave-ado/lib/per-us-sync.js +247 -0
- package/plugins/specweave-ado/lib/per-us-sync.ts +410 -0
- package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +738 -0
- package/plugins/specweave-github/lib/github-client-v2.js +10 -3
- package/plugins/specweave-github/lib/github-client-v2.ts +15 -3
- package/plugins/specweave-github/lib/per-us-sync.js +241 -0
- package/plugins/specweave-github/lib/per-us-sync.ts +375 -0
- package/plugins/specweave-jira/lib/per-us-sync.js +224 -0
- package/plugins/specweave-jira/lib/per-us-sync.ts +366 -0
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +1107 -0
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive Graph Visualizer
|
|
3
|
+
*
|
|
4
|
+
* Generates standalone HTML files with D3.js-powered interactive dependency graphs.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Generates interactive HTML visualizations using D3.js.
|
|
8
|
+
*/
|
|
9
|
+
export class GraphVisualizer {
|
|
10
|
+
/**
|
|
11
|
+
* Generate standalone HTML file with interactive module graph.
|
|
12
|
+
*/
|
|
13
|
+
generateInteractiveGraph(graph, circularDeps = [], options = {}) {
|
|
14
|
+
const { title = 'Module Dependency Graph', highlightCircular = true, enableSearch = true, enableFilters = true, } = options;
|
|
15
|
+
// Prepare data for D3.js
|
|
16
|
+
const nodes = graph.nodes.map(node => ({
|
|
17
|
+
id: node.id,
|
|
18
|
+
name: node.name,
|
|
19
|
+
type: node.type,
|
|
20
|
+
repo: node.repo,
|
|
21
|
+
isCircular: this.isNodeInCircularDep(node.id, circularDeps),
|
|
22
|
+
}));
|
|
23
|
+
const links = graph.edges.map(edge => ({
|
|
24
|
+
source: edge.from,
|
|
25
|
+
target: edge.to,
|
|
26
|
+
type: edge.type,
|
|
27
|
+
count: edge.count,
|
|
28
|
+
}));
|
|
29
|
+
// Generate HTML with embedded D3.js
|
|
30
|
+
return `<!DOCTYPE html>
|
|
31
|
+
<html lang="en">
|
|
32
|
+
<head>
|
|
33
|
+
<meta charset="UTF-8">
|
|
34
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
35
|
+
<title>${title}</title>
|
|
36
|
+
<script src="https://d3js.org/d3.v7.min.js"></script>
|
|
37
|
+
<style>
|
|
38
|
+
body {
|
|
39
|
+
margin: 0;
|
|
40
|
+
font-family: Arial, sans-serif;
|
|
41
|
+
overflow: hidden;
|
|
42
|
+
}
|
|
43
|
+
#graph {
|
|
44
|
+
width: 100vw;
|
|
45
|
+
height: 100vh;
|
|
46
|
+
}
|
|
47
|
+
.controls {
|
|
48
|
+
position: absolute;
|
|
49
|
+
top: 10px;
|
|
50
|
+
left: 10px;
|
|
51
|
+
background: white;
|
|
52
|
+
padding: 15px;
|
|
53
|
+
border-radius: 8px;
|
|
54
|
+
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
|
|
55
|
+
z-index: 1000;
|
|
56
|
+
}
|
|
57
|
+
.controls h3 {
|
|
58
|
+
margin: 0 0 10px 0;
|
|
59
|
+
font-size: 16px;
|
|
60
|
+
}
|
|
61
|
+
.controls input[type="text"] {
|
|
62
|
+
width: 200px;
|
|
63
|
+
padding: 5px;
|
|
64
|
+
margin-bottom: 10px;
|
|
65
|
+
}
|
|
66
|
+
.controls label {
|
|
67
|
+
display: block;
|
|
68
|
+
margin: 5px 0;
|
|
69
|
+
font-size: 14px;
|
|
70
|
+
}
|
|
71
|
+
.node {
|
|
72
|
+
cursor: pointer;
|
|
73
|
+
stroke: #fff;
|
|
74
|
+
stroke-width: 2px;
|
|
75
|
+
}
|
|
76
|
+
.node.component { fill: #4A90E2; }
|
|
77
|
+
.node.service { fill: #7ED321; }
|
|
78
|
+
.node.util { fill: #F5A623; }
|
|
79
|
+
.node.config { fill: #BD10E0; }
|
|
80
|
+
.node.circular { fill: #D0021B; }
|
|
81
|
+
.link {
|
|
82
|
+
stroke: #999;
|
|
83
|
+
stroke-opacity: 0.6;
|
|
84
|
+
stroke-width: 1.5px;
|
|
85
|
+
}
|
|
86
|
+
.link-label {
|
|
87
|
+
font-size: 10px;
|
|
88
|
+
fill: #666;
|
|
89
|
+
}
|
|
90
|
+
.detail-panel {
|
|
91
|
+
position: absolute;
|
|
92
|
+
top: 10px;
|
|
93
|
+
right: 10px;
|
|
94
|
+
width: 300px;
|
|
95
|
+
background: white;
|
|
96
|
+
padding: 15px;
|
|
97
|
+
border-radius: 8px;
|
|
98
|
+
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
|
|
99
|
+
z-index: 1000;
|
|
100
|
+
display: none;
|
|
101
|
+
}
|
|
102
|
+
.detail-panel h3 {
|
|
103
|
+
margin: 0 0 10px 0;
|
|
104
|
+
font-size: 16px;
|
|
105
|
+
}
|
|
106
|
+
.detail-panel .close {
|
|
107
|
+
float: right;
|
|
108
|
+
cursor: pointer;
|
|
109
|
+
font-size: 18px;
|
|
110
|
+
font-weight: bold;
|
|
111
|
+
}
|
|
112
|
+
</style>
|
|
113
|
+
</head>
|
|
114
|
+
<body>
|
|
115
|
+
<div class="controls">
|
|
116
|
+
<h3>Controls</h3>
|
|
117
|
+
${enableSearch ? '<input type="text" id="search" placeholder="Search modules...">' : ''}
|
|
118
|
+
${enableFilters ? `
|
|
119
|
+
<div>
|
|
120
|
+
<label><input type="checkbox" class="filter" value="component" checked> Components</label>
|
|
121
|
+
<label><input type="checkbox" class="filter" value="service" checked> Services</label>
|
|
122
|
+
<label><input type="checkbox" class="filter" value="util" checked> Utils</label>
|
|
123
|
+
<label><input type="checkbox" class="filter" value="config" checked> Config</label>
|
|
124
|
+
</div>
|
|
125
|
+
` : ''}
|
|
126
|
+
<p style="margin-top: 10px; font-size: 12px; color: #666;">
|
|
127
|
+
Zoom: Scroll | Pan: Drag | Click: Details
|
|
128
|
+
</p>
|
|
129
|
+
</div>
|
|
130
|
+
|
|
131
|
+
<div class="detail-panel" id="detailPanel">
|
|
132
|
+
<span class="close" onclick="document.getElementById('detailPanel').style.display='none'">×</span>
|
|
133
|
+
<h3 id="detailTitle"></h3>
|
|
134
|
+
<div id="detailContent"></div>
|
|
135
|
+
</div>
|
|
136
|
+
|
|
137
|
+
<svg id="graph"></svg>
|
|
138
|
+
|
|
139
|
+
<script>
|
|
140
|
+
const graphData = {
|
|
141
|
+
nodes: ${JSON.stringify(nodes)},
|
|
142
|
+
links: ${JSON.stringify(links)}
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
const width = window.innerWidth;
|
|
146
|
+
const height = window.innerHeight;
|
|
147
|
+
|
|
148
|
+
const svg = d3.select('#graph')
|
|
149
|
+
.attr('width', width)
|
|
150
|
+
.attr('height', height);
|
|
151
|
+
|
|
152
|
+
const g = svg.append('g');
|
|
153
|
+
|
|
154
|
+
// Zoom behavior
|
|
155
|
+
const zoom = d3.zoom()
|
|
156
|
+
.scaleExtent([0.1, 4])
|
|
157
|
+
.on('zoom', (event) => {
|
|
158
|
+
g.attr('transform', event.transform);
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
svg.call(zoom);
|
|
162
|
+
|
|
163
|
+
// Force simulation
|
|
164
|
+
const simulation = d3.forceSimulation(graphData.nodes)
|
|
165
|
+
.force('link', d3.forceLink(graphData.links).id(d => d.id).distance(100))
|
|
166
|
+
.force('charge', d3.forceManyBody().strength(-300))
|
|
167
|
+
.force('center', d3.forceCenter(width / 2, height / 2))
|
|
168
|
+
.force('collision', d3.forceCollide().radius(30));
|
|
169
|
+
|
|
170
|
+
// Links
|
|
171
|
+
const link = g.append('g')
|
|
172
|
+
.selectAll('line')
|
|
173
|
+
.data(graphData.links)
|
|
174
|
+
.join('line')
|
|
175
|
+
.attr('class', 'link');
|
|
176
|
+
|
|
177
|
+
// Nodes
|
|
178
|
+
const node = g.append('g')
|
|
179
|
+
.selectAll('circle')
|
|
180
|
+
.data(graphData.nodes)
|
|
181
|
+
.join('circle')
|
|
182
|
+
.attr('class', d => \`node \${d.isCircular ? 'circular' : d.type}\`)
|
|
183
|
+
.attr('r', 10)
|
|
184
|
+
.call(d3.drag()
|
|
185
|
+
.on('start', dragstarted)
|
|
186
|
+
.on('drag', dragged)
|
|
187
|
+
.on('end', dragended))
|
|
188
|
+
.on('click', showDetails);
|
|
189
|
+
|
|
190
|
+
// Labels
|
|
191
|
+
const label = g.append('g')
|
|
192
|
+
.selectAll('text')
|
|
193
|
+
.data(graphData.nodes)
|
|
194
|
+
.join('text')
|
|
195
|
+
.text(d => d.name)
|
|
196
|
+
.attr('font-size', 12)
|
|
197
|
+
.attr('dx', 15)
|
|
198
|
+
.attr('dy', 4);
|
|
199
|
+
|
|
200
|
+
simulation.on('tick', () => {
|
|
201
|
+
link
|
|
202
|
+
.attr('x1', d => d.source.x)
|
|
203
|
+
.attr('y1', d => d.source.y)
|
|
204
|
+
.attr('x2', d => d.target.x)
|
|
205
|
+
.attr('y2', d => d.target.y);
|
|
206
|
+
|
|
207
|
+
node
|
|
208
|
+
.attr('cx', d => d.x)
|
|
209
|
+
.attr('cy', d => d.y);
|
|
210
|
+
|
|
211
|
+
label
|
|
212
|
+
.attr('x', d => d.x)
|
|
213
|
+
.attr('y', d => d.y);
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
// Drag functions
|
|
217
|
+
function dragstarted(event, d) {
|
|
218
|
+
if (!event.active) simulation.alphaTarget(0.3).restart();
|
|
219
|
+
d.fx = d.x;
|
|
220
|
+
d.fy = d.y;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
function dragged(event, d) {
|
|
224
|
+
d.fx = event.x;
|
|
225
|
+
d.fy = event.y;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
function dragended(event, d) {
|
|
229
|
+
if (!event.active) simulation.alphaTarget(0);
|
|
230
|
+
d.fx = null;
|
|
231
|
+
d.fy = null;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// Show details panel
|
|
235
|
+
function showDetails(event, d) {
|
|
236
|
+
const panel = document.getElementById('detailPanel');
|
|
237
|
+
const title = document.getElementById('detailTitle');
|
|
238
|
+
const content = document.getElementById('detailContent');
|
|
239
|
+
|
|
240
|
+
title.textContent = d.name;
|
|
241
|
+
|
|
242
|
+
const dependencies = graphData.links.filter(l => l.source.id === d.id);
|
|
243
|
+
const dependents = graphData.links.filter(l => l.target.id === d.id);
|
|
244
|
+
|
|
245
|
+
content.innerHTML = \`
|
|
246
|
+
<p><strong>Type:</strong> \${d.type}</p>
|
|
247
|
+
<p><strong>Repo:</strong> \${d.repo}</p>
|
|
248
|
+
<p><strong>Dependencies:</strong> \${dependencies.length}</p>
|
|
249
|
+
<p><strong>Dependents:</strong> \${dependents.length}</p>
|
|
250
|
+
\${d.isCircular ? '<p style="color: red;"><strong>⚠️ Part of circular dependency!</strong></p>' : ''}
|
|
251
|
+
\`;
|
|
252
|
+
|
|
253
|
+
panel.style.display = 'block';
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// Search functionality
|
|
257
|
+
${enableSearch ? `
|
|
258
|
+
document.getElementById('search').addEventListener('input', (e) => {
|
|
259
|
+
const query = e.target.value.toLowerCase();
|
|
260
|
+
node.style('opacity', d => d.name.toLowerCase().includes(query) ? 1 : 0.2);
|
|
261
|
+
label.style('opacity', d => d.name.toLowerCase().includes(query) ? 1 : 0.2);
|
|
262
|
+
});
|
|
263
|
+
` : ''}
|
|
264
|
+
|
|
265
|
+
// Filter functionality
|
|
266
|
+
${enableFilters ? `
|
|
267
|
+
document.querySelectorAll('.filter').forEach(checkbox => {
|
|
268
|
+
checkbox.addEventListener('change', () => {
|
|
269
|
+
const activeFilters = Array.from(document.querySelectorAll('.filter:checked')).map(c => c.value);
|
|
270
|
+
node.style('display', d => activeFilters.includes(d.type) ? 'block' : 'none');
|
|
271
|
+
label.style('display', d => activeFilters.includes(d.type) ? 'block' : 'none');
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
` : ''}
|
|
275
|
+
</script>
|
|
276
|
+
</body>
|
|
277
|
+
</html>`;
|
|
278
|
+
}
|
|
279
|
+
isNodeInCircularDep(nodeId, circularDeps) {
|
|
280
|
+
return circularDeps.some(dep => dep.cycle.includes(nodeId));
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
//# sourceMappingURL=graph-visualizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-visualizer.js","sourceRoot":"","sources":["../../../../../src/core/living-docs/intelligent-analyzer/graph-visualizer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH;;GAEG;AACH,MAAM,OAAO,eAAe;IAC1B;;OAEG;IACH,wBAAwB,CACtB,KAAkB,EAClB,eAA8B,EAAE,EAChC,UAAkC,EAAE;QAEpC,MAAM,EACJ,KAAK,GAAG,yBAAyB,EACjC,iBAAiB,GAAG,IAAI,EACxB,YAAY,GAAG,IAAI,EACnB,aAAa,GAAG,IAAI,GACrB,GAAG,OAAO,CAAC;QAEZ,yBAAyB;QACzB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC;SAC5D,CAAC,CAAC,CAAC;QAEJ,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrC,MAAM,EAAE,IAAI,CAAC,IAAI;YACjB,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC,CAAC;QAEJ,oCAAoC;QACpC,OAAO;;;;;WAKA,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAkFV,YAAY,CAAC,CAAC,CAAC,iEAAiE,CAAC,CAAC,CAAC,EAAE;MACrF,aAAa,CAAC,CAAC,CAAC;;;;;;;KAOjB,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;eAgBK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;eACrB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmH9B,YAAY,CAAC,CAAC,CAAC;;;;;;KAMhB,CAAC,CAAC,CAAC,EAAE;;;MAGJ,aAAa,CAAC,CAAC,CAAC;;;;;;;;KAQjB,CAAC,CAAC,CAAC,EAAE;;;QAGF,CAAC;IACP,CAAC;IAEO,mBAAmB,CAAC,MAAc,EAAE,YAA2B;QACrE,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,CAAC;CACF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mermaid Diagram Generator
|
|
3
|
+
*
|
|
4
|
+
* Exports module graphs and team structures to Mermaid diagram format.
|
|
5
|
+
*/
|
|
6
|
+
export interface ModuleGraph {
|
|
7
|
+
nodes: Module[];
|
|
8
|
+
edges: Dependency[];
|
|
9
|
+
}
|
|
10
|
+
export interface Module {
|
|
11
|
+
id: string;
|
|
12
|
+
name: string;
|
|
13
|
+
path: string;
|
|
14
|
+
type: 'component' | 'service' | 'util' | 'config';
|
|
15
|
+
repo: string;
|
|
16
|
+
}
|
|
17
|
+
export interface Dependency {
|
|
18
|
+
from: string;
|
|
19
|
+
to: string;
|
|
20
|
+
type: 'import' | 'require' | 'dynamic';
|
|
21
|
+
count: number;
|
|
22
|
+
}
|
|
23
|
+
export interface CircularDep {
|
|
24
|
+
cycle: string[];
|
|
25
|
+
severity: 'warning' | 'error';
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Generates Mermaid diagrams from module graphs.
|
|
29
|
+
*/
|
|
30
|
+
export declare class MermaidGenerator {
|
|
31
|
+
/**
|
|
32
|
+
* Export module graph to Mermaid diagram.
|
|
33
|
+
*/
|
|
34
|
+
exportModuleGraph(graph: ModuleGraph, circularDeps?: CircularDep[]): string;
|
|
35
|
+
/**
|
|
36
|
+
* Export team structure to Mermaid organization chart.
|
|
37
|
+
*/
|
|
38
|
+
exportTeamStructure(teams: any[]): string;
|
|
39
|
+
/**
|
|
40
|
+
* Sanitize ID for Mermaid (remove special characters).
|
|
41
|
+
*/
|
|
42
|
+
private sanitizeId;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=mermaid-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mermaid-generator.d.ts","sourceRoot":"","sources":["../../../../../src/core/living-docs/intelligent-analyzer/mermaid-generator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;IAClD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IACvC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC;CAC/B;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,WAAW,EAAE,GAAG,MAAM;IA4B3E;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,MAAM;IAoBzC;;OAEG;IACH,OAAO,CAAC,UAAU;CAGnB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mermaid Diagram Generator
|
|
3
|
+
*
|
|
4
|
+
* Exports module graphs and team structures to Mermaid diagram format.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Generates Mermaid diagrams from module graphs.
|
|
8
|
+
*/
|
|
9
|
+
export class MermaidGenerator {
|
|
10
|
+
/**
|
|
11
|
+
* Export module graph to Mermaid diagram.
|
|
12
|
+
*/
|
|
13
|
+
exportModuleGraph(graph, circularDeps) {
|
|
14
|
+
let mmd = 'graph TD\n';
|
|
15
|
+
// Add nodes
|
|
16
|
+
for (const node of graph.nodes) {
|
|
17
|
+
const label = `${node.name}\\n(${node.type})`;
|
|
18
|
+
mmd += ` ${this.sanitizeId(node.id)}["${label}"]\n`;
|
|
19
|
+
}
|
|
20
|
+
mmd += '\n';
|
|
21
|
+
// Add edges
|
|
22
|
+
for (const edge of graph.edges) {
|
|
23
|
+
mmd += ` ${this.sanitizeId(edge.from)} --> ${this.sanitizeId(edge.to)}\n`;
|
|
24
|
+
}
|
|
25
|
+
// Highlight circular dependencies
|
|
26
|
+
if (circularDeps && circularDeps.length > 0) {
|
|
27
|
+
mmd += '\n %% Circular dependencies highlighted in red\n';
|
|
28
|
+
for (const cycle of circularDeps) {
|
|
29
|
+
const ids = cycle.cycle.map(id => this.sanitizeId(id)).join(',');
|
|
30
|
+
mmd += ` style ${ids} fill:#ff6b6b\n`;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return mmd;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Export team structure to Mermaid organization chart.
|
|
37
|
+
*/
|
|
38
|
+
exportTeamStructure(teams) {
|
|
39
|
+
let mmd = 'graph TD\n';
|
|
40
|
+
mmd += ' ROOT[Organization]\n\n';
|
|
41
|
+
for (const team of teams) {
|
|
42
|
+
const teamId = this.sanitizeId(team.name);
|
|
43
|
+
mmd += ` ROOT --> ${teamId}["${team.name}"]\n`;
|
|
44
|
+
// Add team members/repos
|
|
45
|
+
if (team.repos) {
|
|
46
|
+
for (const repo of team.repos) {
|
|
47
|
+
const repoId = this.sanitizeId(`${team.name}-${repo}`);
|
|
48
|
+
mmd += ` ${teamId} --> ${repoId}["${repo}"]\n`;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return mmd;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Sanitize ID for Mermaid (remove special characters).
|
|
56
|
+
*/
|
|
57
|
+
sanitizeId(id) {
|
|
58
|
+
return id.replace(/[^a-zA-Z0-9_]/g, '_');
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=mermaid-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mermaid-generator.js","sourceRoot":"","sources":["../../../../../src/core/living-docs/intelligent-analyzer/mermaid-generator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA2BH;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAC3B;;OAEG;IACH,iBAAiB,CAAC,KAAkB,EAAE,YAA4B;QAChE,IAAI,GAAG,GAAG,YAAY,CAAC;QAEvB,YAAY;QACZ,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,GAAG,CAAC;YAC9C,GAAG,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC;QACvD,CAAC;QAED,GAAG,IAAI,IAAI,CAAC;QAEZ,YAAY;QACZ,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,GAAG,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;QAC7E,CAAC;QAED,kCAAkC;QAClC,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,GAAG,IAAI,mDAAmD,CAAC;YAC3D,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;gBACjC,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACjE,GAAG,IAAI,WAAW,GAAG,iBAAiB,CAAC;YACzC,CAAC;QACH,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,KAAY;QAC9B,IAAI,GAAG,GAAG,YAAY,CAAC;QACvB,GAAG,IAAI,0BAA0B,CAAC;QAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,GAAG,IAAI,cAAc,MAAM,KAAK,IAAI,CAAC,IAAI,MAAM,CAAC;YAEhD,yBAAyB;YACzB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;oBACvD,GAAG,IAAI,KAAK,MAAM,QAAQ,MAAM,KAAK,IAAI,MAAM,CAAC;gBAClD,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,EAAU;QAC3B,OAAO,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;CACF"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Living Docs Orchestrator
|
|
3
|
+
*
|
|
4
|
+
* Main coordinator that manages the entire analysis pipeline with caching and change detection.
|
|
5
|
+
*
|
|
6
|
+
* Architecture:
|
|
7
|
+
* Phase 1: Discovery (repo scanning)
|
|
8
|
+
* Phase 2: Analysis (patterns, modules, tech debt)
|
|
9
|
+
* Phase 3: Synthesis (ADR generation with LLM)
|
|
10
|
+
*/
|
|
11
|
+
import { Logger } from '../../../utils/logger.js';
|
|
12
|
+
import type { RepoAnalysis, LLMProvider } from './types.js';
|
|
13
|
+
export interface OrchestratorOptions {
|
|
14
|
+
projectRoot: string;
|
|
15
|
+
logger?: Logger;
|
|
16
|
+
llmProvider?: LLMProvider;
|
|
17
|
+
}
|
|
18
|
+
export interface UpdateOptions {
|
|
19
|
+
incremental?: boolean;
|
|
20
|
+
full?: boolean;
|
|
21
|
+
adrOnly?: boolean;
|
|
22
|
+
techDebtOnly?: boolean;
|
|
23
|
+
modulesOnly?: boolean;
|
|
24
|
+
dryRun?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface DiscoveryResult {
|
|
27
|
+
repos: Array<{
|
|
28
|
+
name: string;
|
|
29
|
+
path: string;
|
|
30
|
+
}>;
|
|
31
|
+
totalFiles: number;
|
|
32
|
+
duration: number;
|
|
33
|
+
}
|
|
34
|
+
export interface AnalysisResult {
|
|
35
|
+
repoAnalyses: Map<string, RepoAnalysis>;
|
|
36
|
+
duration: number;
|
|
37
|
+
filesCreated?: string[];
|
|
38
|
+
}
|
|
39
|
+
export interface SynthesisResult {
|
|
40
|
+
adrsGenerated: number;
|
|
41
|
+
teamsClustered: number;
|
|
42
|
+
duration: number;
|
|
43
|
+
filesCreated?: string[];
|
|
44
|
+
}
|
|
45
|
+
export interface PhaseResult {
|
|
46
|
+
success: boolean;
|
|
47
|
+
duration: number;
|
|
48
|
+
message: string;
|
|
49
|
+
}
|
|
50
|
+
export interface UpdateResult {
|
|
51
|
+
success: boolean;
|
|
52
|
+
duration: number;
|
|
53
|
+
phases: {
|
|
54
|
+
discovery: PhaseResult;
|
|
55
|
+
analysis: PhaseResult;
|
|
56
|
+
synthesis: PhaseResult;
|
|
57
|
+
};
|
|
58
|
+
filesCreated: string[];
|
|
59
|
+
filesUpdated: string[];
|
|
60
|
+
errors: string[];
|
|
61
|
+
}
|
|
62
|
+
export interface ChangedFiles {
|
|
63
|
+
path: string;
|
|
64
|
+
status: 'added' | 'modified' | 'deleted';
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Main orchestrator for living docs intelligent analysis.
|
|
68
|
+
*
|
|
69
|
+
* Coordinates all analysis phases with caching and Git-based change detection.
|
|
70
|
+
*/
|
|
71
|
+
export declare class LivingDocsOrchestrator {
|
|
72
|
+
private projectRoot;
|
|
73
|
+
private logger;
|
|
74
|
+
private llmProvider?;
|
|
75
|
+
private cacheDir;
|
|
76
|
+
constructor(options: OrchestratorOptions);
|
|
77
|
+
/**
|
|
78
|
+
* Main entry point - orchestrates full update or incremental update.
|
|
79
|
+
*/
|
|
80
|
+
update(options?: UpdateOptions): Promise<UpdateResult>;
|
|
81
|
+
/**
|
|
82
|
+
* Phase 1: Discovery
|
|
83
|
+
* Scans all repos (umbrella or single) and creates file inventory.
|
|
84
|
+
*/
|
|
85
|
+
private executePhase1Discovery;
|
|
86
|
+
/**
|
|
87
|
+
* Phase 2: Analysis
|
|
88
|
+
* Pattern detection, module graph, tech debt detection.
|
|
89
|
+
*/
|
|
90
|
+
private executePhase2Analysis;
|
|
91
|
+
/**
|
|
92
|
+
* Phase 3: Synthesis
|
|
93
|
+
* LLM-powered ADR synthesis, team clustering, architecture docs.
|
|
94
|
+
*/
|
|
95
|
+
private executePhase3Synthesis;
|
|
96
|
+
/**
|
|
97
|
+
* Detect changes since last update using Git diff.
|
|
98
|
+
*/
|
|
99
|
+
detectChanges(): Promise<ChangedFiles[]>;
|
|
100
|
+
/**
|
|
101
|
+
* Load data from cache.
|
|
102
|
+
*/
|
|
103
|
+
loadFromCache<T>(key: string): Promise<T | null>;
|
|
104
|
+
/**
|
|
105
|
+
* Save data to cache.
|
|
106
|
+
*/
|
|
107
|
+
saveToCache(key: string, data: any): Promise<void>;
|
|
108
|
+
/**
|
|
109
|
+
* Clear all cache and checkpoint data.
|
|
110
|
+
* Used when --full flag is set to force complete rebuild.
|
|
111
|
+
*/
|
|
112
|
+
clearCache(): Promise<void>;
|
|
113
|
+
/**
|
|
114
|
+
* Discover all repos (umbrella or single).
|
|
115
|
+
*/
|
|
116
|
+
private discoverRepos;
|
|
117
|
+
/**
|
|
118
|
+
* Get current Git commit hash.
|
|
119
|
+
*/
|
|
120
|
+
private getCurrentCommit;
|
|
121
|
+
/**
|
|
122
|
+
* Count files in a directory (excluding node_modules, .git, etc.).
|
|
123
|
+
*/
|
|
124
|
+
private countFiles;
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../../../src/core/living-docs/intelligent-analyzer/orchestrator.ts"],"names":[],"mappings":"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"}
|