@dinyangetoh/codeplug-cli 0.1.3 → 0.1.5

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 (163) hide show
  1. package/README.md +149 -187
  2. package/dist/cli/commands/convention.d.ts +1 -1
  3. package/dist/cli/commands/convention.d.ts.map +1 -1
  4. package/dist/cli/commands/convention.js +174 -31
  5. package/dist/cli/commands/convention.js.map +1 -1
  6. package/dist/cli/commands/docs.d.ts.map +1 -1
  7. package/dist/cli/commands/docs.js +9 -2
  8. package/dist/cli/commands/docs.js.map +1 -1
  9. package/dist/cli/commands/export.d.ts.map +1 -1
  10. package/dist/cli/commands/export.js +6 -1
  11. package/dist/cli/commands/export.js.map +1 -1
  12. package/dist/cli/commands/start.d.ts +2 -0
  13. package/dist/cli/commands/start.d.ts.map +1 -0
  14. package/dist/cli/commands/start.js +172 -0
  15. package/dist/cli/commands/start.js.map +1 -0
  16. package/dist/cli/index.js +9 -2
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/config/ConfigManager.d.ts +18 -0
  19. package/dist/config/ConfigManager.d.ts.map +1 -1
  20. package/dist/config/ConfigManager.js +55 -2
  21. package/dist/config/ConfigManager.js.map +1 -1
  22. package/dist/config/ConventionSchema.d.ts +59 -0
  23. package/dist/config/ConventionSchema.d.ts.map +1 -1
  24. package/dist/config/ConventionSchema.js +11 -0
  25. package/dist/config/ConventionSchema.js.map +1 -1
  26. package/dist/config/defaults.d.ts +60 -2
  27. package/dist/config/defaults.d.ts.map +1 -1
  28. package/dist/config/defaults.js +136 -20
  29. package/dist/config/defaults.js.map +1 -1
  30. package/dist/config/types.d.ts +71 -0
  31. package/dist/config/types.d.ts.map +1 -1
  32. package/dist/core/analyzer/AstAnalyzer.d.ts +11 -2
  33. package/dist/core/analyzer/AstAnalyzer.d.ts.map +1 -1
  34. package/dist/core/analyzer/AstAnalyzer.js +21 -5
  35. package/dist/core/analyzer/AstAnalyzer.js.map +1 -1
  36. package/dist/core/analyzer/ConventionDetector.d.ts +12 -1
  37. package/dist/core/analyzer/ConventionDetector.d.ts.map +1 -1
  38. package/dist/core/analyzer/ConventionDetector.js +120 -20
  39. package/dist/core/analyzer/ConventionDetector.js.map +1 -1
  40. package/dist/core/analyzer/ConventionMlResolver.d.ts +4 -0
  41. package/dist/core/analyzer/ConventionMlResolver.d.ts.map +1 -0
  42. package/dist/core/analyzer/ConventionMlResolver.js +17 -0
  43. package/dist/core/analyzer/ConventionMlResolver.js.map +1 -0
  44. package/dist/core/analyzer/PatternAggregator.d.ts +11 -2
  45. package/dist/core/analyzer/PatternAggregator.d.ts.map +1 -1
  46. package/dist/core/analyzer/PatternAggregator.js +87 -15
  47. package/dist/core/analyzer/PatternAggregator.js.map +1 -1
  48. package/dist/core/analyzer/SemanticCoherencePhase.d.ts +10 -0
  49. package/dist/core/analyzer/SemanticCoherencePhase.d.ts.map +1 -0
  50. package/dist/core/analyzer/SemanticCoherencePhase.js +191 -0
  51. package/dist/core/analyzer/SemanticCoherencePhase.js.map +1 -0
  52. package/dist/core/analyzer/SemanticCoherenceService.d.ts +11 -0
  53. package/dist/core/analyzer/SemanticCoherenceService.d.ts.map +1 -0
  54. package/dist/core/analyzer/SemanticCoherenceService.js +56 -0
  55. package/dist/core/analyzer/SemanticCoherenceService.js.map +1 -0
  56. package/dist/core/analyzer/visitors/ComponentVisitor.d.ts.map +1 -1
  57. package/dist/core/analyzer/visitors/ComponentVisitor.js +2 -2
  58. package/dist/core/analyzer/visitors/ComponentVisitor.js.map +1 -1
  59. package/dist/core/analyzer/visitors/ErrorHandlingVisitor.d.ts.map +1 -1
  60. package/dist/core/analyzer/visitors/ErrorHandlingVisitor.js +2 -2
  61. package/dist/core/analyzer/visitors/ErrorHandlingVisitor.js.map +1 -1
  62. package/dist/core/analyzer/visitors/ImportVisitor.d.ts +5 -0
  63. package/dist/core/analyzer/visitors/ImportVisitor.d.ts.map +1 -1
  64. package/dist/core/analyzer/visitors/ImportVisitor.js +8 -3
  65. package/dist/core/analyzer/visitors/ImportVisitor.js.map +1 -1
  66. package/dist/core/analyzer/visitors/NamingVisitor.d.ts +20 -2
  67. package/dist/core/analyzer/visitors/NamingVisitor.d.ts.map +1 -1
  68. package/dist/core/analyzer/visitors/NamingVisitor.js +464 -25
  69. package/dist/core/analyzer/visitors/NamingVisitor.js.map +1 -1
  70. package/dist/core/analyzer/visitors/SchemaVisitor.d.ts +7 -0
  71. package/dist/core/analyzer/visitors/SchemaVisitor.d.ts.map +1 -0
  72. package/dist/core/analyzer/visitors/SchemaVisitor.js +50 -0
  73. package/dist/core/analyzer/visitors/SchemaVisitor.js.map +1 -0
  74. package/dist/core/analyzer/visitors/StructureVisitor.d.ts +4 -1
  75. package/dist/core/analyzer/visitors/StructureVisitor.d.ts.map +1 -1
  76. package/dist/core/analyzer/visitors/StructureVisitor.js +38 -4
  77. package/dist/core/analyzer/visitors/StructureVisitor.js.map +1 -1
  78. package/dist/core/analyzer/visitors/types.d.ts +4 -0
  79. package/dist/core/analyzer/visitors/types.d.ts.map +1 -1
  80. package/dist/core/classifier/CodeBertEmbedder.d.ts +9 -0
  81. package/dist/core/classifier/CodeBertEmbedder.d.ts.map +1 -0
  82. package/dist/core/classifier/CodeBertEmbedder.js +33 -0
  83. package/dist/core/classifier/CodeBertEmbedder.js.map +1 -0
  84. package/dist/core/classifier/ConfidenceGate.d.ts +2 -0
  85. package/dist/core/classifier/ConfidenceGate.d.ts.map +1 -1
  86. package/dist/core/classifier/ConfidenceGate.js +6 -2
  87. package/dist/core/classifier/ConfidenceGate.js.map +1 -1
  88. package/dist/core/exporter/FreshnessChecker.d.ts +5 -1
  89. package/dist/core/exporter/FreshnessChecker.d.ts.map +1 -1
  90. package/dist/core/exporter/FreshnessChecker.js +5 -10
  91. package/dist/core/exporter/FreshnessChecker.js.map +1 -1
  92. package/dist/core/generator/DocGenerator.d.ts +6 -1
  93. package/dist/core/generator/DocGenerator.d.ts.map +1 -1
  94. package/dist/core/generator/DocGenerator.js +34 -7
  95. package/dist/core/generator/DocGenerator.js.map +1 -1
  96. package/dist/core/generator/StalenessTracker.d.ts +7 -1
  97. package/dist/core/generator/StalenessTracker.d.ts.map +1 -1
  98. package/dist/core/generator/StalenessTracker.js +12 -12
  99. package/dist/core/generator/StalenessTracker.js.map +1 -1
  100. package/dist/core/generator/documents/ArchitectureGenerator.d.ts +1 -0
  101. package/dist/core/generator/documents/ArchitectureGenerator.d.ts.map +1 -1
  102. package/dist/core/generator/documents/ArchitectureGenerator.js +34 -16
  103. package/dist/core/generator/documents/ArchitectureGenerator.js.map +1 -1
  104. package/dist/core/generator/documents/ContributingGenerator.d.ts.map +1 -1
  105. package/dist/core/generator/documents/ContributingGenerator.js +10 -9
  106. package/dist/core/generator/documents/ContributingGenerator.js.map +1 -1
  107. package/dist/core/generator/documents/ConventionsGenerator.d.ts.map +1 -1
  108. package/dist/core/generator/documents/ConventionsGenerator.js +22 -8
  109. package/dist/core/generator/documents/ConventionsGenerator.js.map +1 -1
  110. package/dist/core/generator/documents/OnboardingGenerator.d.ts.map +1 -1
  111. package/dist/core/generator/documents/OnboardingGenerator.js +25 -27
  112. package/dist/core/generator/documents/OnboardingGenerator.js.map +1 -1
  113. package/dist/core/generator/documents/ReadmeGenerator.d.ts +4 -3
  114. package/dist/core/generator/documents/ReadmeGenerator.d.ts.map +1 -1
  115. package/dist/core/generator/documents/ReadmeGenerator.js +149 -140
  116. package/dist/core/generator/documents/ReadmeGenerator.js.map +1 -1
  117. package/dist/core/generator/documents/promptHelpers.d.ts +1 -1
  118. package/dist/core/generator/documents/promptHelpers.d.ts.map +1 -1
  119. package/dist/core/generator/documents/promptHelpers.js +1 -1
  120. package/dist/core/generator/documents/promptHelpers.js.map +1 -1
  121. package/dist/core/generator/documents/types.d.ts +4 -1
  122. package/dist/core/generator/documents/types.d.ts.map +1 -1
  123. package/dist/core/generator/facts/FactExtractor.d.ts +5 -0
  124. package/dist/core/generator/facts/FactExtractor.d.ts.map +1 -0
  125. package/dist/core/generator/facts/FactExtractor.js +90 -0
  126. package/dist/core/generator/facts/FactExtractor.js.map +1 -0
  127. package/dist/core/generator/facts/types.d.ts +18 -0
  128. package/dist/core/generator/facts/types.d.ts.map +1 -0
  129. package/dist/core/generator/facts/types.js +2 -0
  130. package/dist/core/generator/facts/types.js.map +1 -0
  131. package/dist/core/generator/mlPipelineBuilder.d.ts +8 -0
  132. package/dist/core/generator/mlPipelineBuilder.d.ts.map +1 -0
  133. package/dist/core/generator/mlPipelineBuilder.js +117 -0
  134. package/dist/core/generator/mlPipelineBuilder.js.map +1 -0
  135. package/dist/core/scorer/ComplianceScorer.d.ts +5 -1
  136. package/dist/core/scorer/ComplianceScorer.d.ts.map +1 -1
  137. package/dist/core/scorer/ComplianceScorer.js +47 -23
  138. package/dist/core/scorer/ComplianceScorer.js.map +1 -1
  139. package/dist/core/scorer/ViolationDetector.d.ts +19 -2
  140. package/dist/core/scorer/ViolationDetector.d.ts.map +1 -1
  141. package/dist/core/scorer/ViolationDetector.js +169 -53
  142. package/dist/core/scorer/ViolationDetector.js.map +1 -1
  143. package/dist/models/ModelManager.d.ts +5 -1
  144. package/dist/models/ModelManager.d.ts.map +1 -1
  145. package/dist/models/ModelManager.js +19 -5
  146. package/dist/models/ModelManager.js.map +1 -1
  147. package/dist/models/ModelRegistry.d.ts +1 -1
  148. package/dist/models/ModelRegistry.d.ts.map +1 -1
  149. package/dist/models/ModelRegistry.js +28 -0
  150. package/dist/models/ModelRegistry.js.map +1 -1
  151. package/dist/storage/CustomRuleStore.d.ts +9 -0
  152. package/dist/storage/CustomRuleStore.d.ts.map +1 -0
  153. package/dist/storage/CustomRuleStore.js +22 -0
  154. package/dist/storage/CustomRuleStore.js.map +1 -0
  155. package/dist/storage/ScoreStore.d.ts +2 -5
  156. package/dist/storage/ScoreStore.d.ts.map +1 -1
  157. package/dist/storage/ScoreStore.js +23 -71
  158. package/dist/storage/ScoreStore.js.map +1 -1
  159. package/package.json +4 -3
  160. package/dist/core/classifier/DriftClassifier.d.ts +0 -17
  161. package/dist/core/classifier/DriftClassifier.d.ts.map +0 -1
  162. package/dist/core/classifier/DriftClassifier.js +0 -293
  163. package/dist/core/classifier/DriftClassifier.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"StructureVisitor.d.ts","sourceRoot":"","sources":["../../../../src/core/analyzer/visitors/StructureVisitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,qBAAa,gBAAiB,YAAW,UAAU;IACjD,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,cAAc,EAAE;CAK3C"}
1
+ {"version":3,"file":"StructureVisitor.d.ts","sourceRoot":"","sources":["../../../../src/core/analyzer/visitors/StructureVisitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAShE,qBAAa,gBAAiB,YAAW,UAAU;IACjD,OAAO,CAAC,KAAK,CAAiB;gBAG5B,SAAS,GAAE,MAAM,EAAO,EACxB,eAAe,CAAC,EAAE,eAAe;IAoBnC,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,EAAE;CAmB1C"}
@@ -1,8 +1,42 @@
1
+ import { DEFAULT_STRUCTURE } from '../../../config/defaults.js';
1
2
  export class StructureVisitor {
2
- visit(_file) {
3
- // Structure analysis is done at the folder level in PatternAggregator.ingestStructure,
4
- // not per-file. This visitor is a no-op placeholder for consistency with the visitor pattern.
5
- return [];
3
+ rules = [];
4
+ constructor(filePaths = [], structureConfig) {
5
+ const allDirs = new Set();
6
+ for (const p of filePaths) {
7
+ for (const seg of p.split('/').slice(0, -1)) {
8
+ allDirs.add(seg);
9
+ }
10
+ }
11
+ const placement = structureConfig?.directoryPlacement ?? DEFAULT_STRUCTURE.directoryPlacement ?? [];
12
+ for (const r of placement) {
13
+ if (![...allDirs].some((d) => d === r.dir))
14
+ continue;
15
+ this.rules.push({
16
+ pattern: new RegExp(r.filePattern),
17
+ dir: r.dir,
18
+ patternName: r.patternName,
19
+ });
20
+ }
21
+ }
22
+ visit(file) {
23
+ const findings = [];
24
+ const base = file.filePath.split('/').pop() ?? '';
25
+ const stem = base.replace(/\.[^.]+$/, '');
26
+ const dirsInPath = file.filePath.split('/').slice(0, -1);
27
+ for (const { pattern, dir, patternName } of this.rules) {
28
+ if (!pattern.test(stem))
29
+ continue;
30
+ const inRightDir = dirsInPath.includes(dir);
31
+ findings.push({
32
+ dimension: 'structure',
33
+ pattern: patternName,
34
+ count: inRightDir ? 1 : 0,
35
+ total: 1,
36
+ example: file.filePath,
37
+ });
38
+ }
39
+ return findings;
6
40
  }
7
41
  }
8
42
  //# sourceMappingURL=StructureVisitor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StructureVisitor.js","sourceRoot":"","sources":["../../../../src/core/analyzer/visitors/StructureVisitor.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,gBAAgB;IAC3B,KAAK,CAAC,KAAiB;QACrB,uFAAuF;QACvF,8FAA8F;QAC9F,OAAO,EAAE,CAAC;IACZ,CAAC;CACF"}
1
+ {"version":3,"file":"StructureVisitor.js","sourceRoot":"","sources":["../../../../src/core/analyzer/visitors/StructureVisitor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAQhE,MAAM,OAAO,gBAAgB;IACnB,KAAK,GAAc,EAAE,CAAC;IAE9B,YACE,YAAsB,EAAE,EACxB,eAAiC;QAEjC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,eAAe,EAAE,kBAAkB,IAAI,iBAAiB,CAAC,kBAAkB,IAAI,EAAE,CAAC;QACpG,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;gBAAE,SAAS;YACrD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACd,OAAO,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC;gBAClC,GAAG,EAAE,CAAC,CAAC,GAAG;gBACV,WAAW,EAAE,CAAC,CAAC,WAAW;aAC3B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAgB;QACpB,MAAM,QAAQ,GAAqB,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEzD,KAAK,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACvD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,SAAS;YAClC,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC;gBACZ,SAAS,EAAE,WAAW;gBACtB,OAAO,EAAE,WAAW;gBACpB,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzB,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,IAAI,CAAC,QAAQ;aACvB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF"}
@@ -1,11 +1,15 @@
1
1
  import type { ParsedFile } from '../AstAnalyzer.js';
2
2
  import type { Dimension } from '../../../config/types.js';
3
+ export type ExportedKind = 'class' | 'instance' | 'component' | 'function' | 'hook';
3
4
  export interface VisitorFinding {
4
5
  dimension: Dimension;
5
6
  pattern: string;
6
7
  count: number;
7
8
  total: number;
8
9
  example?: string;
10
+ exportedName?: string;
11
+ exportedKind?: ExportedKind;
12
+ foundValue?: string;
9
13
  }
10
14
  export interface AstVisitor {
11
15
  visit(file: ParsedFile): VisitorFinding[];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/analyzer/visitors/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,EAAE,CAAC;CAC3C"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/analyzer/visitors/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;AAEpF,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,EAAE,CAAC;CAC3C"}
@@ -0,0 +1,9 @@
1
+ import type { ModelManager } from '../../models/ModelManager.js';
2
+ export declare class CodeBertEmbedder {
3
+ private modelManager;
4
+ constructor(modelManager: ModelManager);
5
+ getEmbedding(text: string): Promise<number[]>;
6
+ similarity(a: string, b: string): Promise<number>;
7
+ dispose(): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=CodeBertEmbedder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeBertEmbedder.d.ts","sourceRoot":"","sources":["../../../src/core/classifier/CodeBertEmbedder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAgBjE,qBAAa,gBAAgB;IACf,OAAO,CAAC,YAAY;gBAAZ,YAAY,EAAE,YAAY;IAExC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAU7C,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKjD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
@@ -0,0 +1,33 @@
1
+ function cosineSimilarity(a, b) {
2
+ if (a.length !== b.length)
3
+ return 0;
4
+ let dot = 0;
5
+ let na = 0;
6
+ let nb = 0;
7
+ for (let i = 0; i < a.length; i++) {
8
+ dot += a[i] * b[i];
9
+ na += a[i] * a[i];
10
+ nb += b[i] * b[i];
11
+ }
12
+ const denom = Math.sqrt(na) * Math.sqrt(nb);
13
+ return denom === 0 ? 0 : dot / denom;
14
+ }
15
+ export class CodeBertEmbedder {
16
+ modelManager;
17
+ constructor(modelManager) {
18
+ this.modelManager = modelManager;
19
+ }
20
+ async getEmbedding(text) {
21
+ const pipe = (await this.modelManager.loadModel('classifier'));
22
+ const result = await pipe(text.slice(0, 512), { pooling: 'mean', normalize: true });
23
+ return Array.from(result?.data ?? []);
24
+ }
25
+ async similarity(a, b) {
26
+ const [embA, embB] = await Promise.all([this.getEmbedding(a), this.getEmbedding(b)]);
27
+ return cosineSimilarity(embA, embB);
28
+ }
29
+ async dispose() {
30
+ await this.modelManager.disposeModel();
31
+ }
32
+ }
33
+ //# sourceMappingURL=CodeBertEmbedder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeBertEmbedder.js","sourceRoot":"","sources":["../../../src/core/classifier/CodeBertEmbedder.ts"],"names":[],"mappings":"AAEA,SAAS,gBAAgB,CAAC,CAAW,EAAE,CAAW;IAChD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC;IACpC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACnB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5C,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC;AACvC,CAAC;AAED,MAAM,OAAO,gBAAgB;IACP;IAApB,YAAoB,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;IAAG,CAAC;IAElD,KAAK,CAAC,YAAY,CAAC,IAAY;QAC7B,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC,CAGzB,CAAC;QAErC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpF,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,CAAS,EAAE,CAAS;QACnC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,OAAO,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;IACzC,CAAC;CACF"}
@@ -4,6 +4,8 @@ export interface GatedResult {
4
4
  needsReview: boolean;
5
5
  }
6
6
  export declare class ConfidenceGate {
7
+ private threshold;
8
+ constructor(threshold?: number);
7
9
  gate(classification: string, confidence: number): GatedResult;
8
10
  }
9
11
  //# sourceMappingURL=ConfidenceGate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConfidenceGate.d.ts","sourceRoot":"","sources":["../../../src/core/classifier/ConfidenceGate.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;CACtB;AAID,qBAAa,cAAc;IACzB,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW;CAO9D"}
1
+ {"version":3,"file":"ConfidenceGate.d.ts","sourceRoot":"","sources":["../../../src/core/classifier/ConfidenceGate.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,CAAC,EAAE,MAAM;IAI9B,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW;CAO9D"}
@@ -1,10 +1,14 @@
1
- const CONFIDENCE_THRESHOLD = 0.7;
1
+ import { DEFAULT_DRIFT } from '../../config/defaults.js';
2
2
  export class ConfidenceGate {
3
+ threshold;
4
+ constructor(threshold) {
5
+ this.threshold = threshold ?? DEFAULT_DRIFT.confidenceThreshold ?? 0.7;
6
+ }
3
7
  gate(classification, confidence) {
4
8
  return {
5
9
  classification: classification,
6
10
  confidence,
7
- needsReview: confidence < CONFIDENCE_THRESHOLD,
11
+ needsReview: confidence < this.threshold,
8
12
  };
9
13
  }
10
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ConfidenceGate.js","sourceRoot":"","sources":["../../../src/core/classifier/ConfidenceGate.ts"],"names":[],"mappings":"AAMA,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAEjC,MAAM,OAAO,cAAc;IACzB,IAAI,CAAC,cAAsB,EAAE,UAAkB;QAC7C,OAAO;YACL,cAAc,EAAE,cAA+C;YAC/D,UAAU;YACV,WAAW,EAAE,UAAU,GAAG,oBAAoB;SAC/C,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"ConfidenceGate.js","sourceRoot":"","sources":["../../../src/core/classifier/ConfidenceGate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAQzD,MAAM,OAAO,cAAc;IACjB,SAAS,CAAS;IAE1B,YAAY,SAAkB;QAC5B,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,aAAa,CAAC,mBAAmB,IAAI,GAAG,CAAC;IACzE,CAAC;IAED,IAAI,CAAC,cAAsB,EAAE,UAAkB;QAC7C,OAAO;YACL,cAAc,EAAE,cAA+C;YAC/D,UAAU;YACV,WAAW,EAAE,UAAU,GAAG,IAAI,CAAC,SAAS;SACzC,CAAC;IACJ,CAAC;CACF"}
@@ -1,7 +1,11 @@
1
+ import type { DocsConfig } from '../../config/types.js';
1
2
  export declare class FreshnessChecker {
2
3
  private projectRoot;
3
4
  private conventionsPath;
4
- constructor(projectRoot: string);
5
+ private exportTargets;
6
+ constructor(projectRoot: string, options?: {
7
+ docsConfig?: DocsConfig;
8
+ });
5
9
  check(): Promise<boolean>;
6
10
  private getMtime;
7
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FreshnessChecker.d.ts","sourceRoot":"","sources":["../../../src/core/exporter/FreshnessChecker.ts"],"names":[],"mappings":"AAaA,qBAAa,gBAAgB;IAGf,OAAO,CAAC,WAAW;IAF/B,OAAO,CAAC,eAAe,CAAS;gBAEZ,WAAW,EAAE,MAAM;IAIjC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;YAwBjB,QAAQ;CAQvB"}
1
+ {"version":3,"file":"FreshnessChecker.d.ts","sourceRoot":"","sources":["../../../src/core/exporter/FreshnessChecker.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,qBAAa,gBAAgB;IAKzB,OAAO,CAAC,WAAW;IAJrB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,aAAa,CAA8B;gBAGzC,WAAW,EAAE,MAAM,EAC3B,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,UAAU,CAAA;KAAE;IAMjC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;YAwBjB,QAAQ;CAQvB"}
@@ -1,20 +1,15 @@
1
1
  import { stat } from 'node:fs/promises';
2
2
  import { existsSync } from 'node:fs';
3
3
  import { join } from 'node:path';
4
- import { CODEPLUG_DIR, CONVENTIONS_FILE } from '../../config/defaults.js';
5
- const EXPORT_TARGETS = [
6
- { file: 'CLAUDE.md', dir: '.' },
7
- { file: 'conventions.mdc', dir: '.cursor/rules' },
8
- { file: 'copilot-instructions.md', dir: '.github' },
9
- { file: 'codeplug-export.json', dir: '.codeplug/exports' },
10
- { file: 'ci-report.json', dir: CODEPLUG_DIR },
11
- ];
4
+ import { CODEPLUG_DIR, CONVENTIONS_FILE, DEFAULT_DOCS } from '../../config/defaults.js';
12
5
  export class FreshnessChecker {
13
6
  projectRoot;
14
7
  conventionsPath;
15
- constructor(projectRoot) {
8
+ exportTargets;
9
+ constructor(projectRoot, options) {
16
10
  this.projectRoot = projectRoot;
17
11
  this.conventionsPath = join(projectRoot, CODEPLUG_DIR, CONVENTIONS_FILE);
12
+ this.exportTargets = options?.docsConfig?.exportTargets ?? DEFAULT_DOCS.exportTargets ?? [];
18
13
  }
19
14
  async check() {
20
15
  if (!existsSync(this.conventionsPath)) {
@@ -24,7 +19,7 @@ export class FreshnessChecker {
24
19
  if (convMtime === null)
25
20
  return true;
26
21
  let anyExportExists = false;
27
- for (const target of EXPORT_TARGETS) {
22
+ for (const target of this.exportTargets ?? []) {
28
23
  const exportPath = join(this.projectRoot, target.dir, target.file);
29
24
  if (!existsSync(exportPath))
30
25
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"FreshnessChecker.js","sourceRoot":"","sources":["../../../src/core/exporter/FreshnessChecker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE1E,MAAM,cAAc,GAAG;IACrB,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE;IAC/B,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,eAAe,EAAE;IACjD,EAAE,IAAI,EAAE,yBAAyB,EAAE,GAAG,EAAE,SAAS,EAAE;IACnD,EAAE,IAAI,EAAE,sBAAsB,EAAE,GAAG,EAAE,mBAAmB,EAAE;IAC1D,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,YAAY,EAAE;CAC9C,CAAC;AAEF,MAAM,OAAO,gBAAgB;IAGP;IAFZ,eAAe,CAAS;IAEhC,YAAoB,WAAmB;QAAnB,gBAAW,GAAX,WAAW,CAAQ;QACrC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5D,IAAI,SAAS,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAEpC,IAAI,eAAe,GAAG,KAAK,CAAC;QAE5B,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;YACpC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACnE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;gBAAE,SAAS;YAEtC,eAAe,GAAG,IAAI,CAAC;YACvB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACpD,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,GAAG,SAAS,EAAE,CAAC;gBACpD,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,QAAgB;QACrC,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/B,OAAO,CAAC,CAAC,OAAO,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"FreshnessChecker.js","sourceRoot":"","sources":["../../../src/core/exporter/FreshnessChecker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExF,MAAM,OAAO,gBAAgB;IAKjB;IAJF,eAAe,CAAS;IACxB,aAAa,CAA8B;IAEnD,YACU,WAAmB,EAC3B,OAAqC;QAD7B,gBAAW,GAAX,WAAW,CAAQ;QAG3B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;QACzE,IAAI,CAAC,aAAa,GAAG,OAAO,EAAE,UAAU,EAAE,aAAa,IAAI,YAAY,CAAC,aAAa,IAAI,EAAE,CAAC;IAC9F,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5D,IAAI,SAAS,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAEpC,IAAI,eAAe,GAAG,KAAK,CAAC;QAE5B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;YAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACnE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;gBAAE,SAAS;YAEtC,eAAe,GAAG,IAAI,CAAC;YACvB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACpD,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,GAAG,SAAS,EAAE,CAAC;gBACpD,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,QAAgB;QACrC,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/B,OAAO,CAAC,CAAC,OAAO,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
@@ -1,8 +1,13 @@
1
1
  import type { DocsGenerateOptions, DocGenerationResult, DocUpdateResult } from '../../config/types.js';
2
+ import { ConfigManager } from '../../config/ConfigManager.js';
2
3
  export declare class DocGenerator {
3
4
  private projectRoot;
4
5
  private stalenessTracker;
5
- constructor(projectRoot: string);
6
+ private configManager;
7
+ constructor(projectRoot: string, options?: {
8
+ configManager?: ConfigManager;
9
+ });
10
+ private ensureReady;
6
11
  generate(options: DocsGenerateOptions): Promise<DocGenerationResult>;
7
12
  update(): Promise<DocUpdateResult>;
8
13
  private resolveTargetDocs;
@@ -1 +1 @@
1
- {"version":3,"file":"DocGenerator.d.ts","sourceRoot":"","sources":["../../../src/core/generator/DocGenerator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EAGhB,MAAM,uBAAuB,CAAC;AAuB/B,qBAAa,YAAY;IAGX,OAAO,CAAC,WAAW;IAF/B,OAAO,CAAC,gBAAgB,CAAmB;gBAEvB,WAAW,EAAE,MAAM;IAIjC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA4DpE,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC;IAkBxC,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,aAAa;YAWP,WAAW;YAMX,eAAe;YAQf,eAAe;YASf,mBAAmB;YAkBnB,UAAU;CAgBzB"}
1
+ {"version":3,"file":"DocGenerator.d.ts","sourceRoot":"","sources":["../../../src/core/generator/DocGenerator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EAGhB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAuB9D,qBAAa,YAAY;IAKrB,OAAO,CAAC,WAAW;IAJrB,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,aAAa,CAAgB;gBAG3B,WAAW,EAAE,MAAM,EAC3B,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,aAAa,CAAA;KAAE;YAK/B,WAAW;IAUnB,QAAQ,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAqEpE,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC;IAuBxC,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,aAAa;YAWP,WAAW;YAUX,eAAe;YAQf,eAAe;YASf,mBAAmB;YAkBnB,UAAU;CAgBzB"}
@@ -10,6 +10,7 @@ import { ArchitectureGenerator } from './documents/ArchitectureGenerator.js';
10
10
  import { ConventionsGenerator } from './documents/ConventionsGenerator.js';
11
11
  import { ContributingGenerator } from './documents/ContributingGenerator.js';
12
12
  import { OnboardingGenerator } from './documents/OnboardingGenerator.js';
13
+ import { extractFacts } from './facts/FactExtractor.js';
13
14
  const DOC_GENERATORS = {
14
15
  'README.md': new ReadmeGenerator(),
15
16
  'ARCHITECTURE.md': new ArchitectureGenerator(),
@@ -20,14 +21,25 @@ const DOC_GENERATORS = {
20
21
  const ALL_DOC_NAMES = Object.keys(DOC_GENERATORS);
21
22
  export class DocGenerator {
22
23
  projectRoot;
23
- stalenessTracker;
24
- constructor(projectRoot) {
24
+ stalenessTracker = null;
25
+ configManager;
26
+ constructor(projectRoot, options) {
25
27
  this.projectRoot = projectRoot;
26
- this.stalenessTracker = new StalenessTracker(projectRoot);
28
+ this.configManager = options?.configManager ?? new ConfigManager(projectRoot);
29
+ }
30
+ async ensureReady() {
31
+ await this.configManager.load();
32
+ if (this.stalenessTracker === null) {
33
+ this.stalenessTracker = new StalenessTracker(this.projectRoot, {
34
+ analysisConfig: this.configManager.getAnalysisConfig(),
35
+ docsConfig: this.configManager.getDocsConfig(),
36
+ });
37
+ }
27
38
  }
28
39
  async generate(options) {
29
40
  const start = Date.now();
30
41
  const chalk = (await import('chalk')).default;
42
+ await this.ensureReady();
31
43
  const targetDocs = this.resolveTargetDocs(options.doc);
32
44
  const audience = options.audience ?? 'developers';
33
45
  const style = options.style ?? 'professional';
@@ -39,8 +51,13 @@ export class DocGenerator {
39
51
  console.log(chalk.yellow('LLM unavailable — using template-only generation.'));
40
52
  }
41
53
  const packageMetadata = await this.loadPackageMetadata();
54
+ const docsConfig = this.configManager.getDocsConfig();
55
+ const facts = extractFacts(analysis, conventions, packageMetadata, this.projectRoot);
42
56
  const written = [];
43
- const sourceHash = await this.stalenessTracker.computeSourceHash();
57
+ const tracker = this.stalenessTracker;
58
+ if (!tracker)
59
+ throw new Error('StalenessTracker not initialized');
60
+ const sourceHash = await tracker.computeSourceHash();
44
61
  for (const docName of targetDocs) {
45
62
  const generator = DOC_GENERATORS[docName];
46
63
  if (!generator)
@@ -56,12 +73,14 @@ export class DocGenerator {
56
73
  llmClient,
57
74
  existingDoc,
58
75
  packageMetadata,
76
+ docsConfig,
77
+ facts,
59
78
  };
60
79
  try {
61
80
  const content = await generator.generate(ctx);
62
81
  const outPath = join(this.projectRoot, docName);
63
82
  await writeFile(outPath, content, 'utf-8');
64
- await this.stalenessTracker.update(docName, sourceHash);
83
+ await tracker.update(docName, sourceHash);
65
84
  written.push(docName);
66
85
  console.log(chalk.green(` ✓ ${docName}`));
67
86
  }
@@ -78,7 +97,11 @@ export class DocGenerator {
78
97
  }
79
98
  async update() {
80
99
  const chalk = (await import('chalk')).default;
81
- const statuses = await this.stalenessTracker.check();
100
+ await this.ensureReady();
101
+ const tracker = this.stalenessTracker;
102
+ if (!tracker)
103
+ throw new Error('StalenessTracker not initialized');
104
+ const statuses = await tracker.check();
82
105
  const staleDocs = statuses.filter((s) => s.stale).map((s) => s.name);
83
106
  if (staleDocs.length === 0) {
84
107
  console.log(chalk.green('All documents are up to date.'));
@@ -111,7 +134,11 @@ export class DocGenerator {
111
134
  }
112
135
  async runAnalysis() {
113
136
  const { AstAnalyzer } = await import('../analyzer/AstAnalyzer.js');
114
- const analyzer = new AstAnalyzer(this.projectRoot);
137
+ const analyzer = new AstAnalyzer(this.projectRoot, {
138
+ analysisConfig: this.configManager.getAnalysisConfig(),
139
+ structureConfig: this.configManager.getStructureConfig(),
140
+ namingConfig: this.configManager.getNamingConfig(),
141
+ });
115
142
  return analyzer.analyze();
116
143
  }
117
144
  async loadConventions() {
@@ -1 +1 @@
1
- {"version":3,"file":"DocGenerator.js","sourceRoot":"","sources":["../../../src/core/generator/DocGenerator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DocGenerator.js","sourceRoot":"","sources":["../../../src/core/generator/DocGenerator.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,15 @@
1
+ import type { AnalysisConfig, DocsConfig } from '../../config/types.js';
1
2
  import type { DocStatus } from '../../config/types.js';
2
3
  export declare class StalenessTracker {
3
4
  private projectRoot;
4
5
  private hashFilePath;
5
6
  private dirPath;
6
- constructor(projectRoot: string);
7
+ private analysisConfig;
8
+ private docsConfig;
9
+ constructor(projectRoot: string, options?: {
10
+ analysisConfig?: AnalysisConfig;
11
+ docsConfig?: DocsConfig;
12
+ });
7
13
  check(): Promise<DocStatus[]>;
8
14
  update(docName: string, hash: string): Promise<void>;
9
15
  computeSourceHash(): Promise<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"StalenessTracker.d.ts","sourceRoot":"","sources":["../../../src/core/generator/StalenessTracker.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAevD,qBAAa,gBAAgB;IAIf,OAAO,CAAC,WAAW;IAH/B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAS;gBAEJ,WAAW,EAAE,MAAM;IAKjC,KAAK,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAoB7B,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpD,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;YAuB5B,UAAU;YAQV,UAAU;CAMzB"}
1
+ {"version":3,"file":"StalenessTracker.d.ts","sourceRoot":"","sources":["../../../src/core/generator/StalenessTracker.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAMvD,qBAAa,gBAAgB;IAOzB,OAAO,CAAC,WAAW;IANrB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,UAAU,CAAa;gBAGrB,WAAW,EAAE,MAAM,EAC3B,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,cAAc,CAAC;QAAC,UAAU,CAAC,EAAE,UAAU,CAAA;KAAE;IAQlE,KAAK,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAqB7B,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpD,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;YAsB5B,UAAU;YAQV,UAAU;CAMzB"}
@@ -2,27 +2,25 @@ import { createHash } from 'node:crypto';
2
2
  import { readFile, writeFile, mkdir } from 'node:fs/promises';
3
3
  import { existsSync } from 'node:fs';
4
4
  import { join } from 'node:path';
5
- import { CODEPLUG_DIR, DOC_HASHES_FILE } from '../../config/defaults.js';
6
- const TRACKED_DOCS = [
7
- 'README.md',
8
- 'ARCHITECTURE.md',
9
- 'CONVENTIONS.md',
10
- 'CONTRIBUTING.md',
11
- 'ONBOARDING.md',
12
- ];
5
+ import { CODEPLUG_DIR, DOC_HASHES_FILE, DEFAULT_ANALYSIS, DEFAULT_DOCS } from '../../config/defaults.js';
13
6
  export class StalenessTracker {
14
7
  projectRoot;
15
8
  hashFilePath;
16
9
  dirPath;
17
- constructor(projectRoot) {
10
+ analysisConfig;
11
+ docsConfig;
12
+ constructor(projectRoot, options) {
18
13
  this.projectRoot = projectRoot;
19
14
  this.dirPath = join(projectRoot, CODEPLUG_DIR);
20
15
  this.hashFilePath = join(this.dirPath, DOC_HASHES_FILE);
16
+ this.analysisConfig = options?.analysisConfig ?? DEFAULT_ANALYSIS;
17
+ this.docsConfig = options?.docsConfig ?? DEFAULT_DOCS;
21
18
  }
22
19
  async check() {
23
20
  const saved = await this.loadHashes();
24
21
  const currentHash = await this.computeSourceHash();
25
- return TRACKED_DOCS.map((name) => {
22
+ const tracked = this.docsConfig.tracked ?? DEFAULT_DOCS.tracked ?? [];
23
+ return tracked.map((name) => {
26
24
  const docPath = join(this.projectRoot, name);
27
25
  if (!existsSync(docPath)) {
28
26
  return { name, stale: true, reason: 'Document does not exist' };
@@ -44,10 +42,12 @@ export class StalenessTracker {
44
42
  }
45
43
  async computeSourceHash() {
46
44
  const { globby } = await import('globby');
47
- const files = await globby(['**/*.{ts,tsx,js,jsx,mjs,cjs}'], {
45
+ const include = this.analysisConfig.include ?? DEFAULT_ANALYSIS.include;
46
+ const ignore = this.analysisConfig.ignore ?? DEFAULT_ANALYSIS.ignore;
47
+ const files = await globby(include ?? ['**/*.{ts,tsx,js,jsx,mjs,cjs}'], {
48
48
  cwd: this.projectRoot,
49
49
  gitignore: true,
50
- ignore: ['**/node_modules/**', '**/dist/**', '**/build/**', '**/.codeplug/**'],
50
+ ignore,
51
51
  absolute: false,
52
52
  });
53
53
  files.sort();
@@ -1 +1 @@
1
- {"version":3,"file":"StalenessTracker.js","sourceRoot":"","sources":["../../../src/core/generator/StalenessTracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StalenessTracker.js","sourceRoot":"","sources":["../../../src/core/generator/StalenessTracker.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ export declare class ArchitectureGenerator implements DocumentGenerator {
5
5
  private countDirs;
6
6
  private buildDirectoryMap;
7
7
  private renderTree;
8
+ private buildTechnologies;
8
9
  private buildComponentRelationships;
9
10
  private buildDataFlow;
10
11
  private buildDesignDecisions;
@@ -1 +1 @@
1
- {"version":3,"file":"ArchitectureGenerator.d.ts","sourceRoot":"","sources":["../../../../src/core/generator/documents/ArchitectureGenerator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAsB,MAAM,YAAY,CAAC;AAO3F,qBAAa,qBAAsB,YAAW,iBAAiB;IACvD,QAAQ,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBvD,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,2BAA2B;IAYnC,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,oBAAoB;YAYd,cAAc;CAoB7B"}
1
+ {"version":3,"file":"ArchitectureGenerator.d.ts","sourceRoot":"","sources":["../../../../src/core/generator/documents/ArchitectureGenerator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAsB,MAAM,YAAY,CAAC;AAO3F,qBAAa,qBAAsB,YAAW,iBAAiB;IACvD,QAAQ,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBvD,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,2BAA2B;IAYnC,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,oBAAoB;YAWd,cAAc;CAoB7B"}
@@ -1,5 +1,5 @@
1
1
  import { basename } from 'node:path';
2
- import { EXECUTIVE_SUMMARY_INSTRUCTION, EXISTING_CONTENT_INSTRUCTION, STRUCTURE_INSTRUCTION, } from './promptHelpers.js';
2
+ import { OVERVIEW_INSTRUCTION, EXISTING_CONTENT_INSTRUCTION, STRUCTURE_INSTRUCTION, } from './promptHelpers.js';
3
3
  export class ArchitectureGenerator {
4
4
  async generate(ctx) {
5
5
  const projectName = basename(ctx.projectRoot);
@@ -8,6 +8,7 @@ export class ArchitectureGenerator {
8
8
  sections.push(this.buildOverview(ctx));
9
9
  sections.push(this.buildDirectoryMap(ctx.analysis.folderStructure));
10
10
  sections.push(this.buildComponentRelationships(ctx));
11
+ sections.push(this.buildTechnologies(ctx));
11
12
  sections.push(this.buildDataFlow(ctx));
12
13
  sections.push(this.buildDesignDecisions(ctx));
13
14
  const template = sections.join('\n');
@@ -18,9 +19,12 @@ export class ArchitectureGenerator {
18
19
  }
19
20
  buildOverview(ctx) {
20
21
  const { analysis } = ctx;
22
+ const description = ctx.facts.description;
21
23
  const tagline = ctx.packageMetadata?.description;
22
- const lines = ['## Executive Summary\n'];
23
- if (tagline)
24
+ const lines = ['## Overview\n'];
25
+ if (description)
26
+ lines.push(description, '');
27
+ else if (tagline)
24
28
  lines.push(tagline, '');
25
29
  lines.push(`The project contains ${analysis.fileCount} source files organized across ${this.countDirs(analysis.folderStructure)} directories.`, '');
26
30
  return lines.join('\n');
@@ -48,6 +52,18 @@ export class ArchitectureGenerator {
48
52
  }
49
53
  return lines;
50
54
  }
55
+ buildTechnologies(ctx) {
56
+ const techStack = ctx.facts.techStack;
57
+ if (!techStack || techStack.length === 0)
58
+ return '';
59
+ const lines = ['## Technologies\n'];
60
+ for (const tech of techStack.slice(0, 15)) {
61
+ if (tech?.trim())
62
+ lines.push(`- ${tech.trim()}`);
63
+ }
64
+ lines.push('');
65
+ return lines.join('\n');
66
+ }
51
67
  buildComponentRelationships(ctx) {
52
68
  const structural = ctx.analysis.patterns.filter((p) => p.dimension === 'structure' || p.dimension === 'component');
53
69
  if (structural.length === 0)
@@ -60,36 +76,38 @@ export class ArchitectureGenerator {
60
76
  return lines.join('\n');
61
77
  }
62
78
  buildDataFlow(ctx) {
79
+ const entryPoints = ctx.facts.entryPoints;
80
+ const entryPoint = entryPoints.length > 0 ? entryPoints[0] : undefined;
63
81
  const apiPatterns = ctx.analysis.patterns.filter((p) => p.dimension === 'api' || p.dimension === 'state');
64
- if (apiPatterns.length === 0) {
65
- return [
66
- '## Data Flow\n',
67
- 'No API or state management patterns detected. Refer to source code for data flow details.',
68
- '',
69
- ].join('\n');
70
- }
71
82
  const lines = ['## Data Flow\n'];
72
- for (const p of apiPatterns) {
73
- lines.push(`- **${p.pattern}**: ${p.examples.slice(0, 2).join(', ') || 'N/A'}`);
83
+ if (entryPoint)
84
+ lines.push(`**Entry point:** ${entryPoint}`, '');
85
+ if (apiPatterns.length > 0) {
86
+ for (const p of apiPatterns) {
87
+ lines.push(`- **${p.pattern}**: ${p.examples.slice(0, 2).join(', ') || 'N/A'}`);
88
+ }
89
+ }
90
+ else {
91
+ lines.push('No API or state management patterns detected. Refer to source code for data flow details.');
74
92
  }
75
93
  lines.push('');
76
94
  return lines.join('\n');
77
95
  }
78
96
  buildDesignDecisions(ctx) {
79
97
  const highConf = ctx.analysis.patterns.filter((p) => p.confidence >= 0.8);
80
- if (highConf.length === 0)
81
- return '';
82
98
  const lines = ['## Design Decisions\n'];
83
99
  for (const p of highConf.slice(0, 5)) {
84
100
  lines.push(`- **${p.dimension}**: ${p.pattern}`);
85
101
  }
102
+ if (highConf.length === 0)
103
+ return '';
86
104
  lines.push('');
87
105
  return lines.join('\n');
88
106
  }
89
107
  async enhanceWithLlm(ctx, template) {
90
108
  const parts = [
91
109
  `Improve this ARCHITECTURE.md for a ${ctx.audience} audience in a ${ctx.style} style.`,
92
- EXECUTIVE_SUMMARY_INSTRUCTION,
110
+ OVERVIEW_INSTRUCTION,
93
111
  STRUCTURE_INSTRUCTION,
94
112
  'Add mermaid diagrams where appropriate to illustrate component relationships and data flow.',
95
113
  'Include a Key Descriptions section for important components.',
@@ -100,7 +118,7 @@ export class ArchitectureGenerator {
100
118
  }
101
119
  parts.push('Return only the final markdown.\n', template);
102
120
  return ctx.llmClient.generate(parts.join('\n'), {
103
- systemPrompt: 'You are a software architect writing clear documentation. Always include an executive summary and key descriptions.',
121
+ systemPrompt: 'You are a software architect writing clear documentation. Always include an Overview and key descriptions.',
104
122
  temperature: 0.3,
105
123
  maxTokens: 4000,
106
124
  });