specweave 0.32.10 → 0.33.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.
Files changed (172) hide show
  1. package/CLAUDE.md +106 -1
  2. package/dist/src/cli/add-child-pid.d.ts +11 -0
  3. package/dist/src/cli/add-child-pid.d.ts.map +1 -0
  4. package/dist/src/cli/add-child-pid.js +42 -0
  5. package/dist/src/cli/add-child-pid.js.map +1 -0
  6. package/dist/src/cli/add-child-process.d.ts +15 -0
  7. package/dist/src/cli/add-child-process.d.ts.map +1 -0
  8. package/dist/src/cli/add-child-process.js +40 -0
  9. package/dist/src/cli/add-child-process.js.map +1 -0
  10. package/dist/src/cli/check-watchdog.d.ts +15 -0
  11. package/dist/src/cli/check-watchdog.d.ts.map +1 -0
  12. package/dist/src/cli/check-watchdog.js +47 -0
  13. package/dist/src/cli/check-watchdog.js.map +1 -0
  14. package/dist/src/cli/cleanup-zombies.d.ts +14 -0
  15. package/dist/src/cli/cleanup-zombies.d.ts.map +1 -0
  16. package/dist/src/cli/cleanup-zombies.js +268 -0
  17. package/dist/src/cli/cleanup-zombies.js.map +1 -0
  18. package/dist/src/cli/find-session-by-pid.d.ts +14 -0
  19. package/dist/src/cli/find-session-by-pid.d.ts.map +1 -0
  20. package/dist/src/cli/find-session-by-pid.js +45 -0
  21. package/dist/src/cli/find-session-by-pid.js.map +1 -0
  22. package/dist/src/cli/get-stale-sessions.d.ts +17 -0
  23. package/dist/src/cli/get-stale-sessions.d.ts.map +1 -0
  24. package/dist/src/cli/get-stale-sessions.js +36 -0
  25. package/dist/src/cli/get-stale-sessions.js.map +1 -0
  26. package/dist/src/cli/register-session.d.ts +16 -0
  27. package/dist/src/cli/register-session.d.ts.map +1 -0
  28. package/dist/src/cli/register-session.js +48 -0
  29. package/dist/src/cli/register-session.js.map +1 -0
  30. package/dist/src/cli/remove-session.d.ts +11 -0
  31. package/dist/src/cli/remove-session.d.ts.map +1 -0
  32. package/dist/src/cli/remove-session.js +36 -0
  33. package/dist/src/cli/remove-session.js.map +1 -0
  34. package/dist/src/cli/update-heartbeat.d.ts +11 -0
  35. package/dist/src/cli/update-heartbeat.d.ts.map +1 -0
  36. package/dist/src/cli/update-heartbeat.js +36 -0
  37. package/dist/src/cli/update-heartbeat.js.map +1 -0
  38. package/dist/src/config/types.d.ts +1208 -203
  39. package/dist/src/config/types.d.ts.map +1 -1
  40. package/dist/src/core/background/job-manager.d.ts +16 -0
  41. package/dist/src/core/background/job-manager.d.ts.map +1 -1
  42. package/dist/src/core/background/job-manager.js +110 -15
  43. package/dist/src/core/background/job-manager.js.map +1 -1
  44. package/dist/src/core/increment/increment-utils.d.ts +26 -1
  45. package/dist/src/core/increment/increment-utils.d.ts.map +1 -1
  46. package/dist/src/core/increment/increment-utils.js +66 -4
  47. package/dist/src/core/increment/increment-utils.js.map +1 -1
  48. package/dist/src/core/increment/status-change-sync-trigger.d.ts +3 -1
  49. package/dist/src/core/increment/status-change-sync-trigger.d.ts.map +1 -1
  50. package/dist/src/core/increment/status-change-sync-trigger.js +5 -2
  51. package/dist/src/core/increment/status-change-sync-trigger.js.map +1 -1
  52. package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.d.ts.map +1 -1
  53. package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.js +48 -12
  54. package/dist/src/core/living-docs/intelligent-analyzer/architecture-generator.js.map +1 -1
  55. package/dist/src/core/living-docs/intelligent-analyzer/cache-manager.d.ts +70 -0
  56. package/dist/src/core/living-docs/intelligent-analyzer/cache-manager.d.ts.map +1 -0
  57. package/dist/src/core/living-docs/intelligent-analyzer/cache-manager.js +188 -0
  58. package/dist/src/core/living-docs/intelligent-analyzer/cache-manager.js.map +1 -0
  59. package/dist/src/core/living-docs/intelligent-analyzer/dashboard-generator.d.ts +33 -0
  60. package/dist/src/core/living-docs/intelligent-analyzer/dashboard-generator.d.ts.map +1 -0
  61. package/dist/src/core/living-docs/intelligent-analyzer/dashboard-generator.js +290 -0
  62. package/dist/src/core/living-docs/intelligent-analyzer/dashboard-generator.js.map +1 -0
  63. package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.d.ts.map +1 -1
  64. package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.js +114 -11
  65. package/dist/src/core/living-docs/intelligent-analyzer/deep-repo-analyzer.js.map +1 -1
  66. package/dist/src/core/living-docs/intelligent-analyzer/graph-visualizer.d.ts +23 -0
  67. package/dist/src/core/living-docs/intelligent-analyzer/graph-visualizer.d.ts.map +1 -0
  68. package/dist/src/core/living-docs/intelligent-analyzer/graph-visualizer.js +283 -0
  69. package/dist/src/core/living-docs/intelligent-analyzer/graph-visualizer.js.map +1 -0
  70. package/dist/src/core/living-docs/intelligent-analyzer/mermaid-generator.d.ts +44 -0
  71. package/dist/src/core/living-docs/intelligent-analyzer/mermaid-generator.d.ts.map +1 -0
  72. package/dist/src/core/living-docs/intelligent-analyzer/mermaid-generator.js +61 -0
  73. package/dist/src/core/living-docs/intelligent-analyzer/mermaid-generator.js.map +1 -0
  74. package/dist/src/core/living-docs/intelligent-analyzer/orchestrator.d.ts +126 -0
  75. package/dist/src/core/living-docs/intelligent-analyzer/orchestrator.d.ts.map +1 -0
  76. package/dist/src/core/living-docs/intelligent-analyzer/orchestrator.js +378 -0
  77. package/dist/src/core/living-docs/intelligent-analyzer/orchestrator.js.map +1 -0
  78. package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.d.ts.map +1 -1
  79. package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.js +57 -0
  80. package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.js.map +1 -1
  81. package/dist/src/core/living-docs/intelligent-analyzer/pattern-analyzer.d.ts +82 -0
  82. package/dist/src/core/living-docs/intelligent-analyzer/pattern-analyzer.d.ts.map +1 -0
  83. package/dist/src/core/living-docs/intelligent-analyzer/pattern-analyzer.js +430 -0
  84. package/dist/src/core/living-docs/intelligent-analyzer/pattern-analyzer.js.map +1 -0
  85. package/dist/src/core/living-docs/intelligent-analyzer/repo-scanner.d.ts +84 -0
  86. package/dist/src/core/living-docs/intelligent-analyzer/repo-scanner.d.ts.map +1 -0
  87. package/dist/src/core/living-docs/intelligent-analyzer/repo-scanner.js +387 -0
  88. package/dist/src/core/living-docs/intelligent-analyzer/repo-scanner.js.map +1 -0
  89. package/dist/src/core/living-docs/intelligent-analyzer/report-writer.d.ts +61 -0
  90. package/dist/src/core/living-docs/intelligent-analyzer/report-writer.d.ts.map +1 -0
  91. package/dist/src/core/living-docs/intelligent-analyzer/report-writer.js +174 -0
  92. package/dist/src/core/living-docs/intelligent-analyzer/report-writer.js.map +1 -0
  93. package/dist/src/core/living-docs/intelligent-analyzer/types.d.ts +1 -1
  94. package/dist/src/core/living-docs/intelligent-analyzer/types.d.ts.map +1 -1
  95. package/dist/src/core/living-docs/module-analyzer.d.ts +3 -0
  96. package/dist/src/core/living-docs/module-analyzer.d.ts.map +1 -1
  97. package/dist/src/core/living-docs/module-analyzer.js +40 -1
  98. package/dist/src/core/living-docs/module-analyzer.js.map +1 -1
  99. package/dist/src/core/qa/qa-runner.js +1 -1
  100. package/dist/src/core/qa/qa-runner.js.map +1 -1
  101. package/dist/src/core/scheduler/session-sync-executor.js +1 -1
  102. package/dist/src/core/scheduler/session-sync-executor.js.map +1 -1
  103. package/dist/src/core/status-line/status-line-updater.d.ts +1 -1
  104. package/dist/src/core/status-line/status-line-updater.d.ts.map +1 -1
  105. package/dist/src/core/status-line/status-line-updater.js +4 -3
  106. package/dist/src/core/status-line/status-line-updater.js.map +1 -1
  107. package/dist/src/importers/jira-importer.d.ts.map +1 -1
  108. package/dist/src/importers/jira-importer.js +18 -9
  109. package/dist/src/importers/jira-importer.js.map +1 -1
  110. package/dist/src/init/architecture/types.d.ts +140 -33
  111. package/dist/src/init/architecture/types.d.ts.map +1 -1
  112. package/dist/src/init/compliance/types.d.ts +27 -30
  113. package/dist/src/init/compliance/types.d.ts.map +1 -1
  114. package/dist/src/init/repo/types.d.ts +34 -11
  115. package/dist/src/init/repo/types.d.ts.map +1 -1
  116. package/dist/src/init/research/src/config/types.d.ts +82 -15
  117. package/dist/src/init/research/src/config/types.d.ts.map +1 -1
  118. package/dist/src/init/research/types.d.ts +93 -38
  119. package/dist/src/init/research/types.d.ts.map +1 -1
  120. package/dist/src/init/team/types.d.ts +42 -4
  121. package/dist/src/init/team/types.d.ts.map +1 -1
  122. package/dist/src/sync/ado-reconciler.js +1 -1
  123. package/dist/src/sync/ado-reconciler.js.map +1 -1
  124. package/dist/src/sync/github-reconciler.js +1 -1
  125. package/dist/src/sync/github-reconciler.js.map +1 -1
  126. package/dist/src/sync/jira-reconciler.js +1 -1
  127. package/dist/src/sync/jira-reconciler.js.map +1 -1
  128. package/dist/src/types/session.d.ts +65 -0
  129. package/dist/src/types/session.d.ts.map +1 -0
  130. package/dist/src/types/session.js +8 -0
  131. package/dist/src/types/session.js.map +1 -0
  132. package/dist/src/utils/lock-manager.d.ts +48 -0
  133. package/dist/src/utils/lock-manager.d.ts.map +1 -0
  134. package/dist/src/utils/lock-manager.js +195 -0
  135. package/dist/src/utils/lock-manager.js.map +1 -0
  136. package/dist/src/utils/notification-manager.d.ts +45 -0
  137. package/dist/src/utils/notification-manager.d.ts.map +1 -0
  138. package/dist/src/utils/notification-manager.js +130 -0
  139. package/dist/src/utils/notification-manager.js.map +1 -0
  140. package/dist/src/utils/platform-utils.d.ts +136 -0
  141. package/dist/src/utils/platform-utils.d.ts.map +1 -0
  142. package/dist/src/utils/platform-utils.js +366 -0
  143. package/dist/src/utils/platform-utils.js.map +1 -0
  144. package/dist/src/utils/session-registry.d.ts +142 -0
  145. package/dist/src/utils/session-registry.d.ts.map +1 -0
  146. package/dist/src/utils/session-registry.js +480 -0
  147. package/dist/src/utils/session-registry.js.map +1 -0
  148. package/package.json +5 -2
  149. package/plugins/specweave/commands/specweave-living-docs.md +42 -0
  150. package/plugins/specweave/hooks/hooks.json +10 -0
  151. package/plugins/specweave/hooks/lib/update-active-increment.sh +2 -2
  152. package/plugins/specweave/hooks/lib/update-status-line.sh +1 -1
  153. package/plugins/specweave/hooks/post-increment-status-change.sh +3 -3
  154. package/plugins/specweave/hooks/post-metadata-change.sh +1 -1
  155. package/plugins/specweave/hooks/universal/hook-wrapper.cmd +26 -26
  156. package/plugins/specweave/hooks/universal/session-start.cmd +16 -16
  157. package/plugins/specweave/hooks/universal/session-start.ps1 +16 -16
  158. package/plugins/specweave/hooks/user-prompt-submit.sh +2 -2
  159. package/plugins/specweave/hooks/v2/guards/increment-root-guard.sh +61 -0
  160. package/plugins/specweave/hooks/v2/session-end.sh +69 -0
  161. package/plugins/specweave/hooks/v2/session-start.sh +81 -0
  162. package/plugins/specweave/lib/vendor/sync/github-reconciler.js +1 -1
  163. package/plugins/specweave/lib/vendor/sync/github-reconciler.js.map +1 -1
  164. package/plugins/specweave/scripts/heartbeat.sh +110 -0
  165. package/plugins/specweave/scripts/progress.js +34 -4
  166. package/plugins/specweave/scripts/read-jobs.sh +1 -1
  167. package/plugins/specweave/scripts/read-progress.sh +50 -5
  168. package/plugins/specweave/scripts/read-workflow.sh +1 -1
  169. package/plugins/specweave/scripts/session-watchdog.sh +65 -0
  170. package/plugins/specweave/scripts/status.js +28 -11
  171. package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +738 -0
  172. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +1107 -0
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Repo Scanner
3
+ *
4
+ * Discovers and inventories all repositories in the project.
5
+ * Detects repo type (frontend/backend/mobile/shared-lib) and extracts tech stack.
6
+ */
7
+ import { Logger } from '../../../utils/logger.js';
8
+ export interface RepoInfo {
9
+ path: string;
10
+ name: string;
11
+ type: RepoType;
12
+ techStack: TechStack;
13
+ fileCount: number;
14
+ lineCount: number;
15
+ languages: LanguageStats[];
16
+ lastCommit: string;
17
+ branch: string;
18
+ }
19
+ export type RepoType = 'frontend' | 'backend' | 'mobile' | 'shared-lib' | 'infrastructure' | 'unknown';
20
+ export interface TechStack {
21
+ primary: string;
22
+ framework?: string;
23
+ database?: string;
24
+ orm?: string;
25
+ testing?: string;
26
+ }
27
+ export interface LanguageStats {
28
+ language: string;
29
+ fileCount: number;
30
+ percentage: number;
31
+ }
32
+ /**
33
+ * Repository scanner that discovers repos and extracts metadata.
34
+ */
35
+ export declare class RepoScanner {
36
+ private projectRoot;
37
+ private logger;
38
+ constructor(projectRoot: string, logger?: Logger);
39
+ /**
40
+ * Scan all repos (umbrella or single).
41
+ */
42
+ scanAll(): Promise<RepoInfo[]>;
43
+ /**
44
+ * Scan a single repository.
45
+ */
46
+ scanRepo(repoPath: string): Promise<RepoInfo>;
47
+ /**
48
+ * Detect repository type based on file patterns.
49
+ */
50
+ detectRepoType(repoPath: string): RepoType;
51
+ /**
52
+ * Extract tech stack from repository.
53
+ */
54
+ extractTechStack(repoPath: string): Promise<TechStack>;
55
+ /**
56
+ * Count files in repository (excluding node_modules, .git, etc.).
57
+ */
58
+ private countFiles;
59
+ /**
60
+ * Count total lines of code.
61
+ */
62
+ private countLines;
63
+ /**
64
+ * Detect languages used in repository.
65
+ */
66
+ private detectLanguages;
67
+ /**
68
+ * Map file extension to language.
69
+ */
70
+ private extensionToLanguage;
71
+ /**
72
+ * Get Git information for repository.
73
+ */
74
+ private getGitInfo;
75
+ /**
76
+ * Discover all repos from config.
77
+ */
78
+ private discoverRepos;
79
+ /**
80
+ * Find files matching pattern.
81
+ */
82
+ private findFiles;
83
+ }
84
+ //# sourceMappingURL=repo-scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-scanner.d.ts","sourceRoot":"","sources":["../../../../../src/core/living-docs/intelligent-analyzer/repo-scanner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,MAAM,EAAiB,MAAM,0BAA0B,CAAC;AAEjE,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY,GAAG,gBAAgB,GAAG,SAAS,CAAC;AAEvG,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;gBAEX,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAKhD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAYpC;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAsBnD;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ;IAiE1C;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAoF5D;;OAEG;IACH,OAAO,CAAC,UAAU;IA0BlB;;OAEG;YACW,UAAU;IAKxB;;OAEG;IACH,OAAO,CAAC,eAAe;IA0CvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqB3B;;OAEG;IACH,OAAO,CAAC,UAAU;IAiBlB;;OAEG;YACW,aAAa;IAqB3B;;OAEG;IACH,OAAO,CAAC,SAAS;CAyBlB"}
@@ -0,0 +1,387 @@
1
+ /**
2
+ * Repo Scanner
3
+ *
4
+ * Discovers and inventories all repositories in the project.
5
+ * Detects repo type (frontend/backend/mobile/shared-lib) and extracts tech stack.
6
+ */
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import { consoleLogger } from '../../../utils/logger.js';
10
+ /**
11
+ * Repository scanner that discovers repos and extracts metadata.
12
+ */
13
+ export class RepoScanner {
14
+ constructor(projectRoot, logger) {
15
+ this.projectRoot = projectRoot;
16
+ this.logger = logger ?? consoleLogger;
17
+ }
18
+ /**
19
+ * Scan all repos (umbrella or single).
20
+ */
21
+ async scanAll() {
22
+ const repos = await this.discoverRepos();
23
+ const repoInfos = [];
24
+ for (const repo of repos) {
25
+ const info = await this.scanRepo(repo.path);
26
+ repoInfos.push(info);
27
+ }
28
+ return repoInfos;
29
+ }
30
+ /**
31
+ * Scan a single repository.
32
+ */
33
+ async scanRepo(repoPath) {
34
+ const name = path.basename(repoPath);
35
+ const type = this.detectRepoType(repoPath);
36
+ const techStack = await this.extractTechStack(repoPath);
37
+ const fileCount = this.countFiles(repoPath);
38
+ const lineCount = await this.countLines(repoPath);
39
+ const languages = this.detectLanguages(repoPath);
40
+ const { lastCommit, branch } = this.getGitInfo(repoPath);
41
+ return {
42
+ path: repoPath,
43
+ name,
44
+ type,
45
+ techStack,
46
+ fileCount,
47
+ lineCount,
48
+ languages,
49
+ lastCommit,
50
+ branch,
51
+ };
52
+ }
53
+ /**
54
+ * Detect repository type based on file patterns.
55
+ */
56
+ detectRepoType(repoPath) {
57
+ // Check package.json for Node.js projects
58
+ const packageJsonPath = path.join(repoPath, 'package.json');
59
+ if (fs.existsSync(packageJsonPath)) {
60
+ try {
61
+ const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
62
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
63
+ // Frontend indicators
64
+ if (deps['react'] || deps['vue'] || deps['@angular/core'] || deps['svelte']) {
65
+ return 'frontend';
66
+ }
67
+ // Mobile indicators
68
+ if (deps['react-native'] || deps['expo'] || deps['@ionic/angular']) {
69
+ return 'mobile';
70
+ }
71
+ // Backend indicators
72
+ if (deps['express'] || deps['fastify'] || deps['koa'] || deps['@nestjs/core']) {
73
+ return 'backend';
74
+ }
75
+ }
76
+ catch {
77
+ // Ignore parse errors
78
+ }
79
+ }
80
+ // Check go.mod for Go projects
81
+ if (fs.existsSync(path.join(repoPath, 'go.mod'))) {
82
+ return 'backend';
83
+ }
84
+ // Check requirements.txt for Python projects
85
+ if (fs.existsSync(path.join(repoPath, 'requirements.txt'))) {
86
+ const content = fs.readFileSync(path.join(repoPath, 'requirements.txt'), 'utf-8');
87
+ if (content.includes('django') || content.includes('flask') || content.includes('fastapi')) {
88
+ return 'backend';
89
+ }
90
+ }
91
+ // Check for Terraform/infrastructure
92
+ const tfFiles = this.findFiles(repoPath, /\.tf$/);
93
+ if (tfFiles.length > 0) {
94
+ return 'infrastructure';
95
+ }
96
+ // Check for shared library indicators
97
+ const hasTypesFolder = fs.existsSync(path.join(repoPath, 'types'));
98
+ const hasUtilsFolder = fs.existsSync(path.join(repoPath, 'utils'));
99
+ const hasSharedFolder = fs.existsSync(path.join(repoPath, 'shared'));
100
+ if ((hasTypesFolder || hasUtilsFolder || hasSharedFolder) && packageJsonPath) {
101
+ try {
102
+ const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
103
+ if (pkg.main || pkg.exports) {
104
+ return 'shared-lib';
105
+ }
106
+ }
107
+ catch {
108
+ // Ignore
109
+ }
110
+ }
111
+ return 'unknown';
112
+ }
113
+ /**
114
+ * Extract tech stack from repository.
115
+ */
116
+ async extractTechStack(repoPath) {
117
+ const techStack = {
118
+ primary: 'unknown',
119
+ };
120
+ // Check package.json for Node.js/TypeScript
121
+ const packageJsonPath = path.join(repoPath, 'package.json');
122
+ if (fs.existsSync(packageJsonPath)) {
123
+ try {
124
+ const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
125
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
126
+ // Primary language
127
+ if (deps['typescript'] || fs.existsSync(path.join(repoPath, 'tsconfig.json'))) {
128
+ techStack.primary = 'typescript';
129
+ }
130
+ else {
131
+ techStack.primary = 'javascript';
132
+ }
133
+ // Framework detection
134
+ if (deps['next'])
135
+ techStack.framework = 'nextjs';
136
+ else if (deps['@nestjs/core'])
137
+ techStack.framework = 'nestjs';
138
+ else if (deps['express'])
139
+ techStack.framework = 'express';
140
+ else if (deps['fastify'])
141
+ techStack.framework = 'fastify';
142
+ else if (deps['react'])
143
+ techStack.framework = 'react';
144
+ else if (deps['vue'])
145
+ techStack.framework = 'vue';
146
+ else if (deps['@angular/core'])
147
+ techStack.framework = 'angular';
148
+ // Database detection
149
+ if (deps['pg'] || deps['postgres'])
150
+ techStack.database = 'postgresql';
151
+ else if (deps['mysql'] || deps['mysql2'])
152
+ techStack.database = 'mysql';
153
+ else if (deps['mongodb'] || deps['mongoose'])
154
+ techStack.database = 'mongodb';
155
+ else if (deps['redis'])
156
+ techStack.database = 'redis';
157
+ // ORM detection
158
+ if (deps['prisma'] || deps['@prisma/client'])
159
+ techStack.orm = 'prisma';
160
+ else if (deps['typeorm'])
161
+ techStack.orm = 'typeorm';
162
+ else if (deps['sequelize'])
163
+ techStack.orm = 'sequelize';
164
+ else if (deps['mongoose'])
165
+ techStack.orm = 'mongoose';
166
+ // Testing framework
167
+ if (deps['jest'])
168
+ techStack.testing = 'jest';
169
+ else if (deps['vitest'])
170
+ techStack.testing = 'vitest';
171
+ else if (deps['mocha'])
172
+ techStack.testing = 'mocha';
173
+ else if (deps['@playwright/test'])
174
+ techStack.testing = 'playwright';
175
+ }
176
+ catch {
177
+ // Ignore parse errors
178
+ }
179
+ }
180
+ // Check go.mod for Go projects
181
+ if (fs.existsSync(path.join(repoPath, 'go.mod'))) {
182
+ techStack.primary = 'go';
183
+ const goModContent = fs.readFileSync(path.join(repoPath, 'go.mod'), 'utf-8');
184
+ if (goModContent.includes('gin-gonic/gin'))
185
+ techStack.framework = 'gin';
186
+ else if (goModContent.includes('gorilla/mux'))
187
+ techStack.framework = 'gorilla';
188
+ if (goModContent.includes('gorm.io/gorm'))
189
+ techStack.orm = 'gorm';
190
+ }
191
+ // Check requirements.txt for Python
192
+ const requirementsTxt = path.join(repoPath, 'requirements.txt');
193
+ if (fs.existsSync(requirementsTxt)) {
194
+ techStack.primary = 'python';
195
+ const content = fs.readFileSync(requirementsTxt, 'utf-8');
196
+ if (content.includes('django'))
197
+ techStack.framework = 'django';
198
+ else if (content.includes('flask'))
199
+ techStack.framework = 'flask';
200
+ else if (content.includes('fastapi'))
201
+ techStack.framework = 'fastapi';
202
+ if (content.includes('sqlalchemy'))
203
+ techStack.orm = 'sqlalchemy';
204
+ if (content.includes('pytest'))
205
+ techStack.testing = 'pytest';
206
+ }
207
+ // Check for Rust
208
+ if (fs.existsSync(path.join(repoPath, 'Cargo.toml'))) {
209
+ techStack.primary = 'rust';
210
+ }
211
+ // Check for Java
212
+ if (fs.existsSync(path.join(repoPath, 'pom.xml')) || fs.existsSync(path.join(repoPath, 'build.gradle'))) {
213
+ techStack.primary = 'java';
214
+ }
215
+ return techStack;
216
+ }
217
+ /**
218
+ * Count files in repository (excluding node_modules, .git, etc.).
219
+ */
220
+ countFiles(repoPath) {
221
+ let count = 0;
222
+ const excludeDirs = ['node_modules', '.git', 'dist', 'build', '.specweave', 'coverage', '__pycache__'];
223
+ const walk = (dir) => {
224
+ try {
225
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
226
+ for (const entry of entries) {
227
+ if (excludeDirs.includes(entry.name))
228
+ continue;
229
+ const fullPath = path.join(dir, entry.name);
230
+ if (entry.isDirectory()) {
231
+ walk(fullPath);
232
+ }
233
+ else {
234
+ count++;
235
+ }
236
+ }
237
+ }
238
+ catch {
239
+ // Ignore permission errors
240
+ }
241
+ };
242
+ walk(repoPath);
243
+ return count;
244
+ }
245
+ /**
246
+ * Count total lines of code.
247
+ */
248
+ async countLines(repoPath) {
249
+ // Simplified - would use cloc or similar in production
250
+ return 0; // Placeholder
251
+ }
252
+ /**
253
+ * Detect languages used in repository.
254
+ */
255
+ detectLanguages(repoPath) {
256
+ const langCounts = {};
257
+ const excludeDirs = ['node_modules', '.git', 'dist', 'build', '.specweave'];
258
+ const walk = (dir) => {
259
+ try {
260
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
261
+ for (const entry of entries) {
262
+ if (excludeDirs.includes(entry.name))
263
+ continue;
264
+ const fullPath = path.join(dir, entry.name);
265
+ if (entry.isDirectory()) {
266
+ walk(fullPath);
267
+ }
268
+ else {
269
+ const ext = path.extname(entry.name);
270
+ const lang = this.extensionToLanguage(ext);
271
+ if (lang) {
272
+ langCounts[lang] = (langCounts[lang] || 0) + 1;
273
+ }
274
+ }
275
+ }
276
+ }
277
+ catch {
278
+ // Ignore permission errors
279
+ }
280
+ };
281
+ walk(repoPath);
282
+ const total = Object.values(langCounts).reduce((sum, count) => sum + count, 0);
283
+ const stats = [];
284
+ for (const [language, fileCount] of Object.entries(langCounts)) {
285
+ stats.push({
286
+ language,
287
+ fileCount,
288
+ percentage: Math.round((fileCount / total) * 100),
289
+ });
290
+ }
291
+ return stats.sort((a, b) => b.fileCount - a.fileCount);
292
+ }
293
+ /**
294
+ * Map file extension to language.
295
+ */
296
+ extensionToLanguage(ext) {
297
+ const map = {
298
+ '.ts': 'TypeScript',
299
+ '.tsx': 'TypeScript',
300
+ '.js': 'JavaScript',
301
+ '.jsx': 'JavaScript',
302
+ '.py': 'Python',
303
+ '.go': 'Go',
304
+ '.rs': 'Rust',
305
+ '.java': 'Java',
306
+ '.kt': 'Kotlin',
307
+ '.rb': 'Ruby',
308
+ '.php': 'PHP',
309
+ '.cs': 'C#',
310
+ '.cpp': 'C++',
311
+ '.c': 'C',
312
+ '.swift': 'Swift',
313
+ };
314
+ return map[ext] || null;
315
+ }
316
+ /**
317
+ * Get Git information for repository.
318
+ */
319
+ getGitInfo(repoPath) {
320
+ try {
321
+ const { execSync } = require('child_process');
322
+ const lastCommit = execSync('git rev-parse HEAD', {
323
+ cwd: repoPath,
324
+ encoding: 'utf-8',
325
+ }).trim();
326
+ const branch = execSync('git rev-parse --abbrev-ref HEAD', {
327
+ cwd: repoPath,
328
+ encoding: 'utf-8',
329
+ }).trim();
330
+ return { lastCommit, branch };
331
+ }
332
+ catch {
333
+ return { lastCommit: 'unknown', branch: 'unknown' };
334
+ }
335
+ }
336
+ /**
337
+ * Discover all repos from config.
338
+ */
339
+ async discoverRepos() {
340
+ const configPath = path.join(this.projectRoot, '.specweave/config.json');
341
+ if (!fs.existsSync(configPath)) {
342
+ return [{ name: path.basename(this.projectRoot), path: this.projectRoot }];
343
+ }
344
+ try {
345
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
346
+ if (config.umbrella && config.umbrella.childRepos) {
347
+ return config.umbrella.childRepos.map((repo) => ({
348
+ name: repo.name,
349
+ path: path.join(this.projectRoot, repo.path),
350
+ }));
351
+ }
352
+ }
353
+ catch (error) {
354
+ this.logger.warn(`Failed to load config: ${error}`);
355
+ }
356
+ return [{ name: path.basename(this.projectRoot), path: this.projectRoot }];
357
+ }
358
+ /**
359
+ * Find files matching pattern.
360
+ */
361
+ findFiles(repoPath, pattern) {
362
+ const files = [];
363
+ const excludeDirs = ['node_modules', '.git', 'dist', 'build'];
364
+ const walk = (dir) => {
365
+ try {
366
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
367
+ for (const entry of entries) {
368
+ if (excludeDirs.includes(entry.name))
369
+ continue;
370
+ const fullPath = path.join(dir, entry.name);
371
+ if (entry.isDirectory()) {
372
+ walk(fullPath);
373
+ }
374
+ else if (pattern.test(entry.name)) {
375
+ files.push(fullPath);
376
+ }
377
+ }
378
+ }
379
+ catch {
380
+ // Ignore errors
381
+ }
382
+ };
383
+ walk(repoPath);
384
+ return files;
385
+ }
386
+ }
387
+ //# sourceMappingURL=repo-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-scanner.js","sourceRoot":"","sources":["../../../../../src/core/living-docs/intelligent-analyzer/repo-scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Report Writer
3
+ *
4
+ * Generates markdown reports for technical debt, team structure, and other documentation.
5
+ */
6
+ export interface TechDebtItem {
7
+ severity: 'P1' | 'P2' | 'P3';
8
+ category: 'large-file' | 'high-complexity' | 'outdated-deps' | 'pattern-inconsistency' | 'circular-dep';
9
+ file: string;
10
+ lineNumber?: number;
11
+ description: string;
12
+ impact: string;
13
+ recommendation: string;
14
+ estimatedEffort: string;
15
+ }
16
+ export interface TechDebtReport {
17
+ items: TechDebtItem[];
18
+ summary: {
19
+ p1Count: number;
20
+ p2Count: number;
21
+ p3Count: number;
22
+ totalCount: number;
23
+ };
24
+ }
25
+ export interface TeamInfo {
26
+ name: string;
27
+ modules: string[];
28
+ techStack: string[];
29
+ contact?: string;
30
+ repos: string[];
31
+ }
32
+ /**
33
+ * Writes formatted markdown reports.
34
+ */
35
+ export declare class ReportWriter {
36
+ /**
37
+ * Generate technical debt report in markdown format.
38
+ */
39
+ generateTechDebtReport(report: TechDebtReport): string;
40
+ /**
41
+ * Format individual tech debt item.
42
+ */
43
+ private formatTechDebtItem;
44
+ /**
45
+ * Get human-readable category label.
46
+ */
47
+ private getCategoryLabel;
48
+ /**
49
+ * Generate team structure documentation.
50
+ */
51
+ generateTeamStructure(teams: TeamInfo[]): string;
52
+ /**
53
+ * Generate organization chart in Mermaid format.
54
+ */
55
+ generateOrgChart(teams: TeamInfo[]): string;
56
+ /**
57
+ * Sanitize ID for Mermaid diagrams.
58
+ */
59
+ private sanitizeId;
60
+ }
61
+ //# sourceMappingURL=report-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-writer.d.ts","sourceRoot":"","sources":["../../../../../src/core/living-docs/intelligent-analyzer/report-writer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,YAAY,GAAG,iBAAiB,GAAG,eAAe,GAAG,uBAAuB,GAAG,cAAc,CAAC;IACxG,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB;;OAEG;IACH,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IAuEtD;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,qBAAqB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM;IAmDhD;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM;IAoB3C;;OAEG;IACH,OAAO,CAAC,UAAU;CAGnB"}