@theglitchking/hit-em-with-the-docs 2.0.0

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 (200) hide show
  1. package/.claude-plugin/marketplace.json +46 -0
  2. package/.claude-plugin/plugin.json +114 -0
  3. package/LICENSE +21 -0
  4. package/MIGRATION.md +255 -0
  5. package/README.backup.md +714 -0
  6. package/README.md +869 -0
  7. package/action.yml +56 -0
  8. package/dist/action/action/index.d.ts +2 -0
  9. package/dist/action/action/index.d.ts.map +1 -0
  10. package/dist/action/cli/index.d.ts +3 -0
  11. package/dist/action/cli/index.d.ts.map +1 -0
  12. package/dist/action/core/audit/auditor.d.ts +43 -0
  13. package/dist/action/core/audit/auditor.d.ts.map +1 -0
  14. package/dist/action/core/audit/rules.d.ts +37 -0
  15. package/dist/action/core/audit/rules.d.ts.map +1 -0
  16. package/dist/action/core/discover/antipatterns.d.ts +24 -0
  17. package/dist/action/core/discover/antipatterns.d.ts.map +1 -0
  18. package/dist/action/core/discover/dependencies.d.ts +57 -0
  19. package/dist/action/core/discover/dependencies.d.ts.map +1 -0
  20. package/dist/action/core/discover/patterns.d.ts +38 -0
  21. package/dist/action/core/discover/patterns.d.ts.map +1 -0
  22. package/dist/action/core/discover/standards.d.ts +58 -0
  23. package/dist/action/core/discover/standards.d.ts.map +1 -0
  24. package/dist/action/core/domains/classifier.d.ts +41 -0
  25. package/dist/action/core/domains/classifier.d.ts.map +1 -0
  26. package/dist/action/core/domains/constants.d.ts +40 -0
  27. package/dist/action/core/domains/constants.d.ts.map +1 -0
  28. package/dist/action/core/domains/detector.d.ts +35 -0
  29. package/dist/action/core/domains/detector.d.ts.map +1 -0
  30. package/dist/action/core/integrate/integrator.d.ts +35 -0
  31. package/dist/action/core/integrate/integrator.d.ts.map +1 -0
  32. package/dist/action/core/links/checker.d.ts +64 -0
  33. package/dist/action/core/links/checker.d.ts.map +1 -0
  34. package/dist/action/core/links/tracker.d.ts +69 -0
  35. package/dist/action/core/links/tracker.d.ts.map +1 -0
  36. package/dist/action/core/maintain/orchestrator.d.ts +39 -0
  37. package/dist/action/core/maintain/orchestrator.d.ts.map +1 -0
  38. package/dist/action/core/metadata/generator.d.ts +26 -0
  39. package/dist/action/core/metadata/generator.d.ts.map +1 -0
  40. package/dist/action/core/metadata/schema.d.ts +201 -0
  41. package/dist/action/core/metadata/schema.d.ts.map +1 -0
  42. package/dist/action/core/metadata/sync.d.ts +36 -0
  43. package/dist/action/core/metadata/sync.d.ts.map +1 -0
  44. package/dist/action/generators/index-generator.d.ts +19 -0
  45. package/dist/action/generators/index-generator.d.ts.map +1 -0
  46. package/dist/action/generators/registry-generator.d.ts +11 -0
  47. package/dist/action/generators/registry-generator.d.ts.map +1 -0
  48. package/dist/action/generators/scaffold.d.ts +30 -0
  49. package/dist/action/generators/scaffold.d.ts.map +1 -0
  50. package/dist/action/generators/templates/document.d.ts +14 -0
  51. package/dist/action/generators/templates/document.d.ts.map +1 -0
  52. package/dist/action/generators/templates/domain-index.d.ts +6 -0
  53. package/dist/action/generators/templates/domain-index.d.ts.map +1 -0
  54. package/dist/action/generators/templates/domain-registry.d.ts +6 -0
  55. package/dist/action/generators/templates/domain-registry.d.ts.map +1 -0
  56. package/dist/action/index.d.ts +31 -0
  57. package/dist/action/index.d.ts.map +1 -0
  58. package/dist/action/index.js +17 -0
  59. package/dist/action/index.js.map +1 -0
  60. package/dist/action/package.json +3 -0
  61. package/dist/action/reports/audit-report.d.ts +15 -0
  62. package/dist/action/reports/audit-report.d.ts.map +1 -0
  63. package/dist/action/reports/health-report.d.ts +15 -0
  64. package/dist/action/reports/health-report.d.ts.map +1 -0
  65. package/dist/action/reports/link-report.d.ts +15 -0
  66. package/dist/action/reports/link-report.d.ts.map +1 -0
  67. package/dist/action/utils/frontmatter.d.ts +50 -0
  68. package/dist/action/utils/frontmatter.d.ts.map +1 -0
  69. package/dist/action/utils/glob.d.ts +63 -0
  70. package/dist/action/utils/glob.d.ts.map +1 -0
  71. package/dist/action/utils/logger.d.ts +42 -0
  72. package/dist/action/utils/logger.d.ts.map +1 -0
  73. package/dist/action/utils/markdown.d.ts +89 -0
  74. package/dist/action/utils/markdown.d.ts.map +1 -0
  75. package/dist/cli/index.d.ts +3 -0
  76. package/dist/cli/index.d.ts.map +1 -0
  77. package/dist/cli/index.js +287 -0
  78. package/dist/cli/index.js.map +1 -0
  79. package/dist/core/audit/auditor.d.ts +43 -0
  80. package/dist/core/audit/auditor.d.ts.map +1 -0
  81. package/dist/core/audit/auditor.js +273 -0
  82. package/dist/core/audit/auditor.js.map +1 -0
  83. package/dist/core/audit/rules.d.ts +37 -0
  84. package/dist/core/audit/rules.d.ts.map +1 -0
  85. package/dist/core/audit/rules.js +223 -0
  86. package/dist/core/audit/rules.js.map +1 -0
  87. package/dist/core/discover/antipatterns.d.ts +24 -0
  88. package/dist/core/discover/antipatterns.d.ts.map +1 -0
  89. package/dist/core/discover/antipatterns.js +354 -0
  90. package/dist/core/discover/antipatterns.js.map +1 -0
  91. package/dist/core/discover/dependencies.d.ts +57 -0
  92. package/dist/core/discover/dependencies.d.ts.map +1 -0
  93. package/dist/core/discover/dependencies.js +311 -0
  94. package/dist/core/discover/dependencies.js.map +1 -0
  95. package/dist/core/discover/patterns.d.ts +38 -0
  96. package/dist/core/discover/patterns.d.ts.map +1 -0
  97. package/dist/core/discover/patterns.js +371 -0
  98. package/dist/core/discover/patterns.js.map +1 -0
  99. package/dist/core/discover/standards.d.ts +58 -0
  100. package/dist/core/discover/standards.d.ts.map +1 -0
  101. package/dist/core/discover/standards.js +359 -0
  102. package/dist/core/discover/standards.js.map +1 -0
  103. package/dist/core/domains/classifier.d.ts +41 -0
  104. package/dist/core/domains/classifier.d.ts.map +1 -0
  105. package/dist/core/domains/classifier.js +208 -0
  106. package/dist/core/domains/classifier.js.map +1 -0
  107. package/dist/core/domains/constants.d.ts +40 -0
  108. package/dist/core/domains/constants.d.ts.map +1 -0
  109. package/dist/core/domains/constants.js +252 -0
  110. package/dist/core/domains/constants.js.map +1 -0
  111. package/dist/core/domains/detector.d.ts +35 -0
  112. package/dist/core/domains/detector.d.ts.map +1 -0
  113. package/dist/core/domains/detector.js +176 -0
  114. package/dist/core/domains/detector.js.map +1 -0
  115. package/dist/core/integrate/integrator.d.ts +35 -0
  116. package/dist/core/integrate/integrator.d.ts.map +1 -0
  117. package/dist/core/integrate/integrator.js +216 -0
  118. package/dist/core/integrate/integrator.js.map +1 -0
  119. package/dist/core/links/checker.d.ts +64 -0
  120. package/dist/core/links/checker.d.ts.map +1 -0
  121. package/dist/core/links/checker.js +190 -0
  122. package/dist/core/links/checker.js.map +1 -0
  123. package/dist/core/links/tracker.d.ts +69 -0
  124. package/dist/core/links/tracker.d.ts.map +1 -0
  125. package/dist/core/links/tracker.js +184 -0
  126. package/dist/core/links/tracker.js.map +1 -0
  127. package/dist/core/maintain/orchestrator.d.ts +39 -0
  128. package/dist/core/maintain/orchestrator.d.ts.map +1 -0
  129. package/dist/core/maintain/orchestrator.js +372 -0
  130. package/dist/core/maintain/orchestrator.js.map +1 -0
  131. package/dist/core/metadata/generator.d.ts +26 -0
  132. package/dist/core/metadata/generator.d.ts.map +1 -0
  133. package/dist/core/metadata/generator.js +221 -0
  134. package/dist/core/metadata/generator.js.map +1 -0
  135. package/dist/core/metadata/schema.d.ts +201 -0
  136. package/dist/core/metadata/schema.d.ts.map +1 -0
  137. package/dist/core/metadata/schema.js +184 -0
  138. package/dist/core/metadata/schema.js.map +1 -0
  139. package/dist/core/metadata/sync.d.ts +36 -0
  140. package/dist/core/metadata/sync.d.ts.map +1 -0
  141. package/dist/core/metadata/sync.js +195 -0
  142. package/dist/core/metadata/sync.js.map +1 -0
  143. package/dist/generators/index-generator.d.ts +19 -0
  144. package/dist/generators/index-generator.d.ts.map +1 -0
  145. package/dist/generators/index-generator.js +191 -0
  146. package/dist/generators/index-generator.js.map +1 -0
  147. package/dist/generators/registry-generator.d.ts +11 -0
  148. package/dist/generators/registry-generator.d.ts.map +1 -0
  149. package/dist/generators/registry-generator.js +156 -0
  150. package/dist/generators/registry-generator.js.map +1 -0
  151. package/dist/generators/scaffold.d.ts +30 -0
  152. package/dist/generators/scaffold.d.ts.map +1 -0
  153. package/dist/generators/scaffold.js +213 -0
  154. package/dist/generators/scaffold.js.map +1 -0
  155. package/dist/generators/templates/document.d.ts +14 -0
  156. package/dist/generators/templates/document.d.ts.map +1 -0
  157. package/dist/generators/templates/document.js +305 -0
  158. package/dist/generators/templates/document.js.map +1 -0
  159. package/dist/generators/templates/domain-index.d.ts +6 -0
  160. package/dist/generators/templates/domain-index.d.ts.map +1 -0
  161. package/dist/generators/templates/domain-index.js +68 -0
  162. package/dist/generators/templates/domain-index.js.map +1 -0
  163. package/dist/generators/templates/domain-registry.d.ts +6 -0
  164. package/dist/generators/templates/domain-registry.d.ts.map +1 -0
  165. package/dist/generators/templates/domain-registry.js +59 -0
  166. package/dist/generators/templates/domain-registry.js.map +1 -0
  167. package/dist/index.d.ts +32 -0
  168. package/dist/index.d.ts.map +1 -0
  169. package/dist/index.js +39 -0
  170. package/dist/index.js.map +1 -0
  171. package/dist/reports/audit-report.d.ts +15 -0
  172. package/dist/reports/audit-report.d.ts.map +1 -0
  173. package/dist/reports/audit-report.js +150 -0
  174. package/dist/reports/audit-report.js.map +1 -0
  175. package/dist/reports/health-report.d.ts +15 -0
  176. package/dist/reports/health-report.d.ts.map +1 -0
  177. package/dist/reports/health-report.js +175 -0
  178. package/dist/reports/health-report.js.map +1 -0
  179. package/dist/reports/link-report.d.ts +15 -0
  180. package/dist/reports/link-report.d.ts.map +1 -0
  181. package/dist/reports/link-report.js +165 -0
  182. package/dist/reports/link-report.js.map +1 -0
  183. package/dist/utils/frontmatter.d.ts +50 -0
  184. package/dist/utils/frontmatter.d.ts.map +1 -0
  185. package/dist/utils/frontmatter.js +93 -0
  186. package/dist/utils/frontmatter.js.map +1 -0
  187. package/dist/utils/glob.d.ts +63 -0
  188. package/dist/utils/glob.d.ts.map +1 -0
  189. package/dist/utils/glob.js +128 -0
  190. package/dist/utils/glob.js.map +1 -0
  191. package/dist/utils/logger.d.ts +42 -0
  192. package/dist/utils/logger.d.ts.map +1 -0
  193. package/dist/utils/logger.js +118 -0
  194. package/dist/utils/logger.js.map +1 -0
  195. package/dist/utils/markdown.d.ts +89 -0
  196. package/dist/utils/markdown.d.ts.map +1 -0
  197. package/dist/utils/markdown.js +192 -0
  198. package/dist/utils/markdown.js.map +1 -0
  199. package/package.json +100 -0
  200. package/templates/claude/CLAUDE.md +204 -0
@@ -0,0 +1,359 @@
1
+ import { readFile } from 'fs/promises';
2
+ import { relative, basename } from 'path';
3
+ import { glob } from '../../utils/glob.js';
4
+ import { logger } from '../../utils/logger.js';
5
+ /**
6
+ * Discover implicit standards from codebase
7
+ */
8
+ export async function discoverStandards(options) {
9
+ const { rootPath, silent = false } = options;
10
+ if (!silent) {
11
+ logger.header('Standards Discovery');
12
+ logger.info(`Analyzing: ${rootPath}`);
13
+ }
14
+ // Find all source files
15
+ const tsFiles = await glob('**/*.{ts,tsx}', {
16
+ cwd: rootPath,
17
+ absolute: true,
18
+ ignore: ['**/node_modules/**', '**/dist/**'],
19
+ });
20
+ const jsFiles = await glob('**/*.{js,jsx,mjs}', {
21
+ cwd: rootPath,
22
+ absolute: true,
23
+ ignore: ['**/node_modules/**', '**/dist/**'],
24
+ });
25
+ const allFiles = [...new Set([...tsFiles, ...jsFiles])];
26
+ if (!silent) {
27
+ logger.info(`Analyzing ${allFiles.length} source files...`);
28
+ }
29
+ // Discover each category
30
+ const naming = await discoverNamingStandards(allFiles, rootPath);
31
+ const fileOrganization = await discoverFileOrganization(rootPath);
32
+ const codeStyle = await discoverCodeStyle(allFiles);
33
+ const documentation = await discoverDocumentationStandards(allFiles);
34
+ const testing = await discoverTestingStandards(rootPath);
35
+ const standards = {
36
+ naming,
37
+ fileOrganization,
38
+ codeStyle,
39
+ documentation,
40
+ testing,
41
+ };
42
+ if (!silent) {
43
+ logger.newline();
44
+ logger.success('Standards discovered:');
45
+ logger.info(` Functions: ${naming.functions.convention} (${naming.functions.compliance.toFixed(0)}% compliance)`);
46
+ logger.info(` Classes: ${naming.classes.convention} (${naming.classes.compliance.toFixed(0)}% compliance)`);
47
+ logger.info(` Indentation: ${codeStyle.indentation}${codeStyle.indentSize ? ` (${codeStyle.indentSize} spaces)` : ''}`);
48
+ logger.info(` Type hints: ${documentation.typeHintCoverage.toFixed(0)}% coverage`);
49
+ }
50
+ return standards;
51
+ }
52
+ /**
53
+ * Discover naming conventions
54
+ */
55
+ async function discoverNamingStandards(files, rootPath) {
56
+ const functionNames = [];
57
+ const classNames = [];
58
+ const constantNames = [];
59
+ const variableNames = [];
60
+ for (const file of files.slice(0, 100)) {
61
+ try {
62
+ const content = await readFile(file, 'utf-8');
63
+ const relPath = relative(rootPath, file);
64
+ // Extract function names
65
+ const funcMatches = content.matchAll(/(?:function\s+(\w+)|(?:const|let|var)\s+(\w+)\s*=\s*(?:async\s*)?\([^)]*\)\s*=>)/g);
66
+ for (const match of funcMatches) {
67
+ const name = match[1] ?? match[2];
68
+ if (name)
69
+ functionNames.push({ name, file: relPath });
70
+ }
71
+ // Extract class names
72
+ const classMatches = content.matchAll(/class\s+(\w+)/g);
73
+ for (const match of classMatches) {
74
+ if (match[1])
75
+ classNames.push({ name: match[1], file: relPath });
76
+ }
77
+ // Extract constants (UPPER_SNAKE_CASE)
78
+ const constMatches = content.matchAll(/const\s+([A-Z][A-Z0-9_]+)\s*=/g);
79
+ for (const match of constMatches) {
80
+ if (match[1])
81
+ constantNames.push({ name: match[1], file: relPath });
82
+ }
83
+ // Extract regular variables
84
+ const varMatches = content.matchAll(/(?:const|let|var)\s+([a-z][a-zA-Z0-9]*)\s*=/g);
85
+ for (const match of varMatches) {
86
+ if (match[1])
87
+ variableNames.push({ name: match[1], file: relPath });
88
+ }
89
+ }
90
+ catch {
91
+ // Skip
92
+ }
93
+ }
94
+ // Analyze file naming
95
+ const fileNameExamples = files.slice(0, 20).map((f) => ({
96
+ name: basename(f),
97
+ file: relative(rootPath, f),
98
+ }));
99
+ return {
100
+ functions: analyzeNamingConvention(functionNames, 'camelCase'),
101
+ classes: analyzeNamingConvention(classNames, 'PascalCase'),
102
+ constants: analyzeNamingConvention(constantNames, 'UPPER_SNAKE_CASE'),
103
+ variables: analyzeNamingConvention(variableNames, 'camelCase'),
104
+ files: analyzeFileNaming(fileNameExamples),
105
+ };
106
+ }
107
+ /**
108
+ * Analyze naming convention compliance
109
+ */
110
+ function analyzeNamingConvention(names, expectedConvention) {
111
+ const checks = {
112
+ camelCase: (n) => /^[a-z][a-zA-Z0-9]*$/.test(n),
113
+ PascalCase: (n) => /^[A-Z][a-zA-Z0-9]*$/.test(n),
114
+ UPPER_SNAKE_CASE: (n) => /^[A-Z][A-Z0-9_]*$/.test(n),
115
+ 'kebab-case': (n) => /^[a-z][a-z0-9-]*$/.test(n),
116
+ snake_case: (n) => /^[a-z][a-z0-9_]*$/.test(n),
117
+ };
118
+ const check = checks[expectedConvention] ?? checks.camelCase;
119
+ const compliant = names.filter((n) => check(n.name));
120
+ const compliance = names.length > 0 ? (compliant.length / names.length) * 100 : 100;
121
+ // Detect actual convention used
122
+ let detectedConvention = expectedConvention;
123
+ let maxCompliance = compliance;
124
+ for (const [convention, checkFn] of Object.entries(checks)) {
125
+ const conventionCompliance = names.filter((n) => checkFn(n.name)).length / Math.max(names.length, 1) * 100;
126
+ if (conventionCompliance > maxCompliance) {
127
+ maxCompliance = conventionCompliance;
128
+ detectedConvention = convention;
129
+ }
130
+ }
131
+ return {
132
+ convention: detectedConvention,
133
+ compliance: maxCompliance,
134
+ examples: names.slice(0, 5).map((n) => ({
135
+ ...n,
136
+ compliant: check(n.name),
137
+ })),
138
+ };
139
+ }
140
+ /**
141
+ * Analyze file naming convention
142
+ */
143
+ function analyzeFileNaming(files) {
144
+ const kebabCase = files.filter((f) => /^[a-z][a-z0-9-]*\./.test(f.name)).length;
145
+ const camelCase = files.filter((f) => /^[a-z][a-zA-Z0-9]*\./.test(f.name)).length;
146
+ const pascalCase = files.filter((f) => /^[A-Z][a-zA-Z0-9]*\./.test(f.name)).length;
147
+ const snakeCase = files.filter((f) => /^[a-z][a-z0-9_]*\./.test(f.name)).length;
148
+ const total = files.length || 1;
149
+ const conventions = [
150
+ { name: 'kebab-case', count: kebabCase },
151
+ { name: 'camelCase', count: camelCase },
152
+ { name: 'PascalCase', count: pascalCase },
153
+ { name: 'snake_case', count: snakeCase },
154
+ ];
155
+ const best = conventions.sort((a, b) => b.count - a.count)[0];
156
+ return {
157
+ convention: best.name,
158
+ compliance: (best.count / total) * 100,
159
+ examples: files.slice(0, 5).map((f) => ({
160
+ ...f,
161
+ compliant: best.name === 'kebab-case' ? /^[a-z][a-z0-9-]*\./.test(f.name) : true,
162
+ })),
163
+ };
164
+ }
165
+ /**
166
+ * Discover file organization patterns
167
+ */
168
+ async function discoverFileOrganization(rootPath) {
169
+ const patterns = [];
170
+ // Common folder patterns to check
171
+ const folderPatterns = [
172
+ { pattern: 'src/', glob: 'src/**/*' },
173
+ { pattern: 'lib/', glob: 'lib/**/*' },
174
+ { pattern: 'components/', glob: '**/components/**/*' },
175
+ { pattern: 'services/', glob: '**/services/**/*' },
176
+ { pattern: 'models/', glob: '**/models/**/*' },
177
+ { pattern: 'utils/', glob: '**/utils/**/*' },
178
+ { pattern: 'hooks/', glob: '**/hooks/**/*' },
179
+ { pattern: 'api/', glob: '**/api/**/*' },
180
+ { pattern: 'routes/', glob: '**/routes/**/*' },
181
+ { pattern: 'routers/', glob: '**/routers/**/*' },
182
+ { pattern: 'tests/', glob: '**/tests/**/*' },
183
+ { pattern: '__tests__/', glob: '**/__tests__/**/*' },
184
+ ];
185
+ for (const { pattern: name, glob: globPattern } of folderPatterns) {
186
+ const files = await glob(globPattern, {
187
+ cwd: rootPath,
188
+ ignore: ['**/node_modules/**', '**/dist/**'],
189
+ });
190
+ if (files.length > 0) {
191
+ patterns.push({
192
+ pattern: name,
193
+ files: files.length,
194
+ examples: files.slice(0, 3),
195
+ });
196
+ }
197
+ }
198
+ // Get root folders
199
+ const rootEntries = await glob('*', { cwd: rootPath });
200
+ const rootFolders = rootEntries.filter((e) => !e.includes('.'));
201
+ return {
202
+ patterns: patterns.sort((a, b) => b.files - a.files),
203
+ rootFolders,
204
+ };
205
+ }
206
+ /**
207
+ * Discover code style preferences
208
+ */
209
+ async function discoverCodeStyle(files) {
210
+ let tabCount = 0;
211
+ let spaceCount = 0;
212
+ let space2Count = 0;
213
+ let space4Count = 0;
214
+ let semiCount = 0;
215
+ let noSemiCount = 0;
216
+ let singleQuoteCount = 0;
217
+ let doubleQuoteCount = 0;
218
+ let trailingCommaCount = 0;
219
+ let noTrailingCommaCount = 0;
220
+ let maxLineLength = 0;
221
+ for (const file of files.slice(0, 50)) {
222
+ try {
223
+ const content = await readFile(file, 'utf-8');
224
+ const lines = content.split('\n');
225
+ for (const line of lines) {
226
+ // Check indentation
227
+ if (line.startsWith('\t'))
228
+ tabCount++;
229
+ if (line.startsWith(' ')) {
230
+ spaceCount++;
231
+ if (line.startsWith(' ') && !line.startsWith(' '))
232
+ space4Count++;
233
+ else if (line.startsWith(' ') && !line.startsWith(' '))
234
+ space2Count++;
235
+ }
236
+ // Check max line length
237
+ if (line.length > maxLineLength)
238
+ maxLineLength = line.length;
239
+ // Check semicolons (at end of statements)
240
+ if (/[a-zA-Z0-9)}\]'"`]\s*;$/.test(line.trim()))
241
+ semiCount++;
242
+ if (/[a-zA-Z0-9)}\]'"`]$/.test(line.trim()) && !line.trim().endsWith('{'))
243
+ noSemiCount++;
244
+ // Check quotes
245
+ if (line.includes("'") && !line.includes('"'))
246
+ singleQuoteCount++;
247
+ if (line.includes('"') && !line.includes("'"))
248
+ doubleQuoteCount++;
249
+ // Check trailing commas
250
+ if (/,\s*[}\]]/.test(line))
251
+ trailingCommaCount++;
252
+ if (/[^,\s]\s*[}\]]/.test(line))
253
+ noTrailingCommaCount++;
254
+ }
255
+ }
256
+ catch {
257
+ // Skip
258
+ }
259
+ }
260
+ // Determine preferences
261
+ const indentation = tabCount > spaceCount * 0.8 ? 'tabs' :
262
+ spaceCount > tabCount * 0.8 ? 'spaces' : 'mixed';
263
+ const indentSize = space4Count > space2Count ? 4 : 2;
264
+ const semicolons = semiCount > noSemiCount * 2 ? 'always' :
265
+ noSemiCount > semiCount * 2 ? 'never' : 'mixed';
266
+ const quotes = singleQuoteCount > doubleQuoteCount * 2 ? 'single' :
267
+ doubleQuoteCount > singleQuoteCount * 2 ? 'double' : 'mixed';
268
+ const trailingCommas = trailingCommaCount > noTrailingCommaCount * 2 ? 'always' :
269
+ noTrailingCommaCount > trailingCommaCount * 2 ? 'never' : 'mixed';
270
+ const result = {
271
+ maxLineLength,
272
+ indentation,
273
+ semicolons,
274
+ quotes,
275
+ trailingCommas,
276
+ };
277
+ if (indentation === 'spaces') {
278
+ result.indentSize = indentSize;
279
+ }
280
+ return result;
281
+ }
282
+ /**
283
+ * Discover documentation standards
284
+ */
285
+ async function discoverDocumentationStandards(files) {
286
+ let totalFunctions = 0;
287
+ let documentedFunctions = 0;
288
+ let typedFunctions = 0;
289
+ let jsdocCount = 0;
290
+ let tsdocCount = 0;
291
+ for (const file of files.slice(0, 50)) {
292
+ try {
293
+ const content = await readFile(file, 'utf-8');
294
+ // Count functions
295
+ const functions = content.match(/(?:function\s+\w+|(?:const|let|var)\s+\w+\s*=\s*(?:async\s*)?\([^)]*\)\s*=>)/g);
296
+ totalFunctions += functions?.length ?? 0;
297
+ // Count documented functions (JSDoc/TSDoc comments before functions)
298
+ const jsdocs = content.match(/\/\*\*[\s\S]*?\*\/\s*(?:export\s+)?(?:async\s+)?(?:function|const|let|var)/g);
299
+ documentedFunctions += jsdocs?.length ?? 0;
300
+ // Check docstring style
301
+ if (content.includes('@param'))
302
+ jsdocCount++;
303
+ if (content.includes('@returns'))
304
+ tsdocCount++;
305
+ // Count typed functions (TypeScript)
306
+ const typed = content.match(/\([^)]*:[^)]+\)\s*(?::\s*\w+)?\s*(?:=>|{)/g);
307
+ typedFunctions += typed?.length ?? 0;
308
+ }
309
+ catch {
310
+ // Skip
311
+ }
312
+ }
313
+ const docstringStyle = tsdocCount > jsdocCount ? 'TSDoc' : 'JSDoc';
314
+ const coverage = totalFunctions > 0 ? (documentedFunctions / totalFunctions) * 100 : 0;
315
+ const typeHintCoverage = totalFunctions > 0 ? (typedFunctions / totalFunctions) * 100 : 0;
316
+ return {
317
+ docstringStyle,
318
+ coverage,
319
+ typeHintCoverage,
320
+ };
321
+ }
322
+ /**
323
+ * Discover testing standards
324
+ */
325
+ async function discoverTestingStandards(rootPath) {
326
+ // Check for test files in various patterns
327
+ const patterns = [
328
+ '**/*.test.ts',
329
+ '**/*.spec.ts',
330
+ '**/__tests__/*.ts',
331
+ '**/test/*.ts',
332
+ '**/tests/*.ts',
333
+ ];
334
+ let testPattern = '*.test.ts';
335
+ let maxFiles = 0;
336
+ for (const pattern of patterns) {
337
+ const files = await glob(pattern, {
338
+ cwd: rootPath,
339
+ ignore: ['**/node_modules/**'],
340
+ });
341
+ if (files.length > maxFiles) {
342
+ maxFiles = files.length;
343
+ testPattern = pattern.replace('**/', '').replace('/*.ts', '');
344
+ }
345
+ }
346
+ // Check for fixtures
347
+ const fixtures = await glob('**/fixtures/**/*', {
348
+ cwd: rootPath,
349
+ ignore: ['**/node_modules/**'],
350
+ });
351
+ const result = {
352
+ pattern: testPattern,
353
+ };
354
+ if (fixtures.length > 0) {
355
+ result.fixturePattern = 'fixtures/';
356
+ }
357
+ return result;
358
+ }
359
+ //# sourceMappingURL=standards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standards.js","sourceRoot":"","sources":["../../../src/core/discover/standards.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Document tier classification system.
3
+ * Classifies documents into 5 tiers based on content structure.
4
+ */
5
+ export declare const TIERS: readonly ["guide", "standard", "example", "reference", "admin"];
6
+ export type Tier = (typeof TIERS)[number];
7
+ export interface TierDefinition {
8
+ id: Tier;
9
+ name: string;
10
+ description: string;
11
+ sizeRange: {
12
+ min: number;
13
+ max: number;
14
+ };
15
+ indicators: string[];
16
+ headingPatterns: RegExp[];
17
+ }
18
+ export declare const TIER_DEFINITIONS: Record<Tier, TierDefinition>;
19
+ export interface TierClassificationResult {
20
+ tier: Tier;
21
+ confidence: number;
22
+ scores: Record<Tier, number>;
23
+ reasoning: string[];
24
+ }
25
+ /**
26
+ * Classify document content into a tier
27
+ */
28
+ export declare function classifyTier(content: string): TierClassificationResult;
29
+ /**
30
+ * Get tier definition by ID
31
+ */
32
+ export declare function getTierDefinition(tier: Tier): TierDefinition;
33
+ /**
34
+ * Check if a string is a valid tier
35
+ */
36
+ export declare function isValidTier(value: string): value is Tier;
37
+ /**
38
+ * Get tier display name
39
+ */
40
+ export declare function getTierDisplayName(tier: Tier): string;
41
+ //# sourceMappingURL=classifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classifier.d.ts","sourceRoot":"","sources":["../../../src/core/domains/classifier.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,KAAK,iEAAkE,CAAC;AACrF,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1C,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,IAAI,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,IAAI,EAAE,cAAc,CAgFzD,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,IAAI,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7B,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,wBAAwB,CA+GtE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,cAAc,CAE5D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,IAAI,CAExD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAErD"}
@@ -0,0 +1,208 @@
1
+ /**
2
+ * Document tier classification system.
3
+ * Classifies documents into 5 tiers based on content structure.
4
+ */
5
+ export const TIERS = ['guide', 'standard', 'example', 'reference', 'admin'];
6
+ export const TIER_DEFINITIONS = {
7
+ guide: {
8
+ id: 'guide',
9
+ name: 'Guide',
10
+ description: 'Step-by-step how-to guides',
11
+ sizeRange: { min: 15, max: 30 },
12
+ indicators: [
13
+ 'how to', 'step by step', 'tutorial', 'guide', 'walkthrough',
14
+ 'getting started', 'learn', 'implement', 'build', 'create',
15
+ ],
16
+ headingPatterns: [
17
+ /^#+\s*(prerequisites?|requirements?)/i,
18
+ /^#+\s*(step\s*\d+|first|next|then|finally)/i,
19
+ /^#+\s*(overview|introduction|getting started)/i,
20
+ /^#+\s*(example|demo|try it)/i,
21
+ ],
22
+ },
23
+ standard: {
24
+ id: 'standard',
25
+ name: 'Standard',
26
+ description: 'Coding standards and conventions',
27
+ sizeRange: { min: 5, max: 15 },
28
+ indicators: [
29
+ 'standard', 'convention', 'rule', 'must', 'should', 'must not',
30
+ 'should not', 'required', 'recommended', 'best practice', 'guideline',
31
+ ],
32
+ headingPatterns: [
33
+ /^#+\s*(rules?|guidelines?|conventions?)/i,
34
+ /^#+\s*(do|don'?t|avoid|prefer)/i,
35
+ /^#+\s*(naming|formatting|style)/i,
36
+ /^#+\s*(required|recommended|optional)/i,
37
+ ],
38
+ },
39
+ example: {
40
+ id: 'example',
41
+ name: 'Example',
42
+ description: 'Code examples and templates',
43
+ sizeRange: { min: 3, max: 10 },
44
+ indicators: [
45
+ 'example', 'sample', 'template', 'snippet', 'code', 'demo',
46
+ 'showcase', 'pattern example', 'usage example',
47
+ ],
48
+ headingPatterns: [
49
+ /^#+\s*(example|sample|template)/i,
50
+ /^#+\s*(code|snippet|usage)/i,
51
+ /^#+\s*(input|output|result)/i,
52
+ ],
53
+ },
54
+ reference: {
55
+ id: 'reference',
56
+ name: 'Reference',
57
+ description: 'Comprehensive references',
58
+ sizeRange: { min: 30, max: 100 },
59
+ indicators: [
60
+ 'reference', 'specification', 'api', 'complete', 'comprehensive',
61
+ 'all', 'full list', 'documentation', 'schema', 'interface',
62
+ ],
63
+ headingPatterns: [
64
+ /^#+\s*(api|schema|interface|type)/i,
65
+ /^#+\s*(parameters?|arguments?|options?)/i,
66
+ /^#+\s*(methods?|functions?|endpoints?)/i,
67
+ /^#+\s*(properties|fields|attributes)/i,
68
+ ],
69
+ },
70
+ admin: {
71
+ id: 'admin',
72
+ name: 'Admin',
73
+ description: 'Administrative/operational docs',
74
+ sizeRange: { min: 10, max: 20 },
75
+ indicators: [
76
+ 'admin', 'administrative', 'operational', 'maintenance', 'ops',
77
+ 'manage', 'configure', 'setup', 'deployment', 'monitoring',
78
+ ],
79
+ headingPatterns: [
80
+ /^#+\s*(configuration|setup|installation)/i,
81
+ /^#+\s*(maintenance|monitoring|logging)/i,
82
+ /^#+\s*(backup|restore|recovery)/i,
83
+ /^#+\s*(troubleshooting|debugging)/i,
84
+ ],
85
+ },
86
+ };
87
+ /**
88
+ * Classify document content into a tier
89
+ */
90
+ export function classifyTier(content) {
91
+ const scores = {
92
+ guide: 0,
93
+ standard: 0,
94
+ example: 0,
95
+ reference: 0,
96
+ admin: 0,
97
+ };
98
+ const reasoning = [];
99
+ const lowerContent = content.toLowerCase();
100
+ // Calculate content size in KB
101
+ const sizeKB = Buffer.byteLength(content, 'utf8') / 1024;
102
+ // Score based on indicators
103
+ for (const tier of TIERS) {
104
+ const def = TIER_DEFINITIONS[tier];
105
+ // Check indicators
106
+ for (const indicator of def.indicators) {
107
+ const regex = new RegExp(`\\b${escapeRegExp(indicator)}\\b`, 'gi');
108
+ const matches = lowerContent.match(regex);
109
+ if (matches) {
110
+ scores[tier] += matches.length * 2;
111
+ if (matches.length >= 3) {
112
+ reasoning.push(`Found indicator "${indicator}" ${matches.length} times (${tier})`);
113
+ }
114
+ }
115
+ }
116
+ // Check heading patterns
117
+ for (const pattern of def.headingPatterns) {
118
+ const matches = content.match(new RegExp(pattern.source, 'gim'));
119
+ if (matches) {
120
+ scores[tier] += matches.length * 5;
121
+ reasoning.push(`Matched heading pattern for ${tier}: ${matches.length} matches`);
122
+ }
123
+ }
124
+ // Size-based scoring
125
+ if (sizeKB >= def.sizeRange.min && sizeKB <= def.sizeRange.max) {
126
+ scores[tier] += 10;
127
+ reasoning.push(`Size ${sizeKB.toFixed(1)}KB matches ${tier} range`);
128
+ }
129
+ }
130
+ // Additional heuristics
131
+ // Code block ratio indicates example or reference
132
+ const codeBlockCount = (content.match(/```/g) ?? []).length / 2;
133
+ const lines = content.split('\n').length;
134
+ const codeRatio = codeBlockCount / (lines / 50);
135
+ if (codeRatio > 0.5) {
136
+ scores.example += 15;
137
+ reasoning.push('High code block ratio suggests example');
138
+ }
139
+ // Bullet/numbered list ratio indicates guide or standard
140
+ const listItems = (content.match(/^[\s]*[-*\d.]+\s/gm) ?? []).length;
141
+ const listRatio = listItems / lines;
142
+ if (listRatio > 0.3) {
143
+ scores.guide += 10;
144
+ scores.standard += 8;
145
+ reasoning.push('High list ratio suggests guide or standard');
146
+ }
147
+ // Table presence indicates reference
148
+ const tables = (content.match(/^\|.*\|$/gm) ?? []).length;
149
+ if (tables > 5) {
150
+ scores.reference += 15;
151
+ reasoning.push('Multiple tables suggest reference');
152
+ }
153
+ // Warning/Note boxes indicate admin or troubleshooting
154
+ const warnings = (content.match(/>\s*\*\*(warning|note|caution|important)/gi) ?? []).length;
155
+ if (warnings > 2) {
156
+ scores.admin += 10;
157
+ reasoning.push('Warning boxes suggest admin documentation');
158
+ }
159
+ // Find the winning tier
160
+ let maxScore = 0;
161
+ let winningTier = 'guide';
162
+ for (const tier of TIERS) {
163
+ if (scores[tier] > maxScore) {
164
+ maxScore = scores[tier];
165
+ winningTier = tier;
166
+ }
167
+ }
168
+ // Calculate confidence based on score difference
169
+ const sortedScores = Object.values(scores).sort((a, b) => b - a);
170
+ const topScore = sortedScores[0] ?? 0;
171
+ const secondScore = sortedScores[1] ?? 0;
172
+ const scoreDiff = topScore - secondScore;
173
+ let confidence = 0.5;
174
+ if (topScore > 0) {
175
+ confidence = Math.min(0.5 + (scoreDiff / topScore) * 0.3 + (topScore / 100) * 0.2, 0.95);
176
+ }
177
+ return {
178
+ tier: winningTier,
179
+ confidence,
180
+ scores,
181
+ reasoning,
182
+ };
183
+ }
184
+ /**
185
+ * Get tier definition by ID
186
+ */
187
+ export function getTierDefinition(tier) {
188
+ return TIER_DEFINITIONS[tier];
189
+ }
190
+ /**
191
+ * Check if a string is a valid tier
192
+ */
193
+ export function isValidTier(value) {
194
+ return TIERS.includes(value);
195
+ }
196
+ /**
197
+ * Get tier display name
198
+ */
199
+ export function getTierDisplayName(tier) {
200
+ return TIER_DEFINITIONS[tier].name;
201
+ }
202
+ /**
203
+ * Escape special regex characters
204
+ */
205
+ function escapeRegExp(string) {
206
+ return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
207
+ }
208
+ //# sourceMappingURL=classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classifier.js","sourceRoot":"","sources":["../../../src/core/domains/classifier.ts"],"names":[],"mappings":"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"}