@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,36 @@
1
+ export interface SyncOptions {
2
+ docsPath: string;
3
+ dryRun?: boolean;
4
+ fix?: boolean;
5
+ domain?: string;
6
+ silent?: boolean;
7
+ }
8
+ export interface SyncResult {
9
+ totalFiles: number;
10
+ validFiles: number;
11
+ fixedFiles: number;
12
+ skippedFiles: number;
13
+ errors: SyncError[];
14
+ stats: SyncStats;
15
+ }
16
+ export interface SyncError {
17
+ file: string;
18
+ error: string;
19
+ fixable: boolean;
20
+ }
21
+ export interface SyncStats {
22
+ totalWordCount: number;
23
+ avgCompleteness: number;
24
+ byDomain: Record<string, number>;
25
+ byStatus: Record<string, number>;
26
+ byTier: Record<string, number>;
27
+ }
28
+ /**
29
+ * Sync metadata across all documentation files
30
+ */
31
+ export declare function syncMetadata(options: SyncOptions): Promise<SyncResult>;
32
+ /**
33
+ * Get sync statistics for a documentation root
34
+ */
35
+ export declare function getSyncStats(docsPath: string): Promise<SyncStats>;
36
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/core/metadata/sync.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAyH5E;AAwGD;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CASvE"}
@@ -0,0 +1,195 @@
1
+ import { readFile, writeFile } from 'fs/promises';
2
+ import { relative } from 'path';
3
+ import { findMarkdownFiles } from '../../utils/glob.js';
4
+ import { parseFrontmatter, setFrontmatter } from '../../utils/frontmatter.js';
5
+ import { countWords, formatReadTime } from '../../utils/markdown.js';
6
+ import { logger } from '../../utils/logger.js';
7
+ import { validatePartialMetadata, getMissingRequiredFields, calculateMetadataCompleteness, } from './schema.js';
8
+ import { generateMetadata, mergeMetadata, formatDate } from './generator.js';
9
+ /**
10
+ * Sync metadata across all documentation files
11
+ */
12
+ export async function syncMetadata(options) {
13
+ const { docsPath, dryRun = false, fix = false, domain, silent = false, } = options;
14
+ const result = {
15
+ totalFiles: 0,
16
+ validFiles: 0,
17
+ fixedFiles: 0,
18
+ skippedFiles: 0,
19
+ errors: [],
20
+ stats: {
21
+ totalWordCount: 0,
22
+ avgCompleteness: 0,
23
+ byDomain: {},
24
+ byStatus: {},
25
+ byTier: {},
26
+ },
27
+ };
28
+ if (!silent) {
29
+ logger.header('Metadata Sync');
30
+ if (dryRun)
31
+ logger.info('Running in dry-run mode (no changes will be made)');
32
+ if (fix)
33
+ logger.info('Auto-fix mode enabled');
34
+ }
35
+ // Find all markdown files
36
+ let files = await findMarkdownFiles(docsPath);
37
+ // Filter by domain if specified
38
+ if (domain) {
39
+ files = files.filter((f) => {
40
+ const rel = relative(docsPath, f);
41
+ return rel.startsWith(domain + '/') || rel.startsWith(domain + '\\');
42
+ });
43
+ }
44
+ // Exclude INDEX.md and REGISTRY.md files (system files)
45
+ files = files.filter((f) => {
46
+ const name = f.split(/[/\\]/).pop() ?? '';
47
+ return !['INDEX.md', 'REGISTRY.md'].includes(name);
48
+ });
49
+ result.totalFiles = files.length;
50
+ if (!silent) {
51
+ logger.info(`Found ${files.length} documentation files`);
52
+ }
53
+ let completenessSum = 0;
54
+ for (const file of files) {
55
+ try {
56
+ const syncResult = await syncFile(file, docsPath, dryRun, fix);
57
+ if (syncResult.valid) {
58
+ result.validFiles++;
59
+ }
60
+ if (syncResult.fixed) {
61
+ result.fixedFiles++;
62
+ }
63
+ if (syncResult.skipped) {
64
+ result.skippedFiles++;
65
+ }
66
+ if (syncResult.error) {
67
+ result.errors.push(syncResult.error);
68
+ }
69
+ // Update stats
70
+ if (syncResult.metadata) {
71
+ const meta = syncResult.metadata;
72
+ completenessSum += syncResult.completeness;
73
+ result.stats.totalWordCount += meta.word_count ?? 0;
74
+ // Track by domain
75
+ const domain = meta.domains?.[0] ?? 'unknown';
76
+ result.stats.byDomain[domain] = (result.stats.byDomain[domain] ?? 0) + 1;
77
+ // Track by status
78
+ const status = meta.status ?? 'unknown';
79
+ result.stats.byStatus[status] = (result.stats.byStatus[status] ?? 0) + 1;
80
+ // Track by tier
81
+ const tier = meta.tier ?? 'unknown';
82
+ result.stats.byTier[tier] = (result.stats.byTier[tier] ?? 0) + 1;
83
+ }
84
+ }
85
+ catch (error) {
86
+ const message = error instanceof Error ? error.message : String(error);
87
+ result.errors.push({
88
+ file: relative(docsPath, file),
89
+ error: message,
90
+ fixable: false,
91
+ });
92
+ }
93
+ }
94
+ // Calculate average completeness
95
+ result.stats.avgCompleteness =
96
+ files.length > 0 ? completenessSum / files.length : 0;
97
+ if (!silent) {
98
+ logger.newline();
99
+ logger.success(`Sync complete!`);
100
+ logger.info(`Valid: ${result.validFiles}/${result.totalFiles}`);
101
+ if (result.fixedFiles > 0) {
102
+ logger.info(`Fixed: ${result.fixedFiles}`);
103
+ }
104
+ if (result.errors.length > 0) {
105
+ logger.warn(`Errors: ${result.errors.length}`);
106
+ }
107
+ logger.info(`Avg completeness: ${result.stats.avgCompleteness.toFixed(1)}%`);
108
+ }
109
+ return result;
110
+ }
111
+ /**
112
+ * Sync metadata for a single file
113
+ */
114
+ async function syncFile(filePath, docsPath, dryRun, fix) {
115
+ const result = {
116
+ valid: false,
117
+ fixed: false,
118
+ skipped: false,
119
+ completeness: 0,
120
+ };
121
+ const content = await readFile(filePath, 'utf-8');
122
+ const { data, content: body } = parseFrontmatter(content);
123
+ // Validate existing metadata
124
+ const validation = validatePartialMetadata(data);
125
+ const missingRequired = getMissingRequiredFields(data);
126
+ result.completeness = calculateMetadataCompleteness(data);
127
+ // Check if file is valid
128
+ if (validation.valid && missingRequired.length === 0) {
129
+ result.valid = true;
130
+ result.metadata = data;
131
+ // Still update auto-generated fields if fix mode
132
+ if (fix) {
133
+ const updated = updateAutoFields(data, body);
134
+ if (JSON.stringify(updated) !== JSON.stringify(data)) {
135
+ if (!dryRun) {
136
+ const newContent = setFrontmatter(content, updated);
137
+ await writeFile(filePath, newContent, 'utf-8');
138
+ }
139
+ result.fixed = true;
140
+ result.metadata = updated;
141
+ }
142
+ }
143
+ return result;
144
+ }
145
+ // File has issues
146
+ if (!fix) {
147
+ result.error = {
148
+ file: relative(docsPath, filePath),
149
+ error: `Missing required fields: ${missingRequired.join(', ')}`,
150
+ fixable: true,
151
+ };
152
+ return result;
153
+ }
154
+ // Fix mode: generate missing metadata
155
+ const generated = generateMetadata({
156
+ filePath,
157
+ content,
158
+ docsRoot: docsPath,
159
+ existingMetadata: data,
160
+ });
161
+ const merged = mergeMetadata(data, generated);
162
+ result.metadata = merged;
163
+ if (!dryRun) {
164
+ const newContent = setFrontmatter(content, merged);
165
+ await writeFile(filePath, newContent, 'utf-8');
166
+ }
167
+ result.fixed = true;
168
+ result.valid = true;
169
+ result.completeness = calculateMetadataCompleteness(merged);
170
+ return result;
171
+ }
172
+ /**
173
+ * Update auto-generated fields
174
+ */
175
+ function updateAutoFields(metadata, content) {
176
+ return {
177
+ ...metadata,
178
+ word_count: countWords(content),
179
+ estimated_read_time: formatReadTime(content),
180
+ last_validated: formatDate(new Date()),
181
+ };
182
+ }
183
+ /**
184
+ * Get sync statistics for a documentation root
185
+ */
186
+ export async function getSyncStats(docsPath) {
187
+ const result = await syncMetadata({
188
+ docsPath,
189
+ dryRun: true,
190
+ fix: false,
191
+ silent: true,
192
+ });
193
+ return result.stats;
194
+ }
195
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/core/metadata/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { type Domain } from '../core/domains/constants.js';
2
+ export interface IndexEntry {
3
+ path: string;
4
+ title: string;
5
+ tier: string;
6
+ status: string;
7
+ lastUpdated: string;
8
+ wordCount?: number;
9
+ description?: string;
10
+ }
11
+ /**
12
+ * Generate the root INDEX.md content
13
+ */
14
+ export declare function generateRootIndex(entries?: Record<Domain, IndexEntry[]>): string;
15
+ /**
16
+ * Generate a domain-specific INDEX.md content
17
+ */
18
+ export declare function generateDomainIndexContent(domain: Domain, entries?: IndexEntry[]): string;
19
+ //# sourceMappingURL=index-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-generator.d.ts","sourceRoot":"","sources":["../../src/generators/index-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAGxF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,GAAG,MAAM,CA+DhF;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,UAAU,EAAO,GACzB,MAAM,CA0ER"}
@@ -0,0 +1,191 @@
1
+ import { DOMAINS, DOMAIN_DEFINITIONS } from '../core/domains/constants.js';
2
+ import { formatDate } from '../core/metadata/generator.js';
3
+ /**
4
+ * Generate the root INDEX.md content
5
+ */
6
+ export function generateRootIndex(entries) {
7
+ const now = formatDate(new Date());
8
+ let content = `---
9
+ title: Documentation Index
10
+ tier: reference
11
+ domains: [root]
12
+ status: active
13
+ last_updated: '${now}'
14
+ version: '1.0.0'
15
+ purpose: Navigation hub for all documentation
16
+ ---
17
+
18
+ # Documentation Index
19
+
20
+ > Complete listing of all documentation organized by domain.
21
+
22
+ ## Overview
23
+
24
+ | Domain | Documents | Description |
25
+ |--------|-----------|-------------|
26
+ `;
27
+ // Add domain rows
28
+ for (const domain of DOMAINS) {
29
+ const def = DOMAIN_DEFINITIONS[domain];
30
+ const count = entries?.[domain]?.length ?? 0;
31
+ content += `| [${def.name}](#${domain}) | ${count} | ${def.description} |\n`;
32
+ }
33
+ content += `\n---\n\n`;
34
+ // Add domain sections
35
+ for (const domain of DOMAINS) {
36
+ const def = DOMAIN_DEFINITIONS[domain];
37
+ const domainEntries = entries?.[domain] ?? [];
38
+ content += `## ${def.name}\n\n`;
39
+ content += `> ${def.description}\n\n`;
40
+ content += `**Path:** \`${domain}/\`\n\n`;
41
+ if (domainEntries.length === 0) {
42
+ content += `*No documents yet.*\n\n`;
43
+ }
44
+ else {
45
+ content += `| Document | Tier | Status | Updated |\n`;
46
+ content += `|----------|------|--------|----------|\n`;
47
+ for (const entry of domainEntries) {
48
+ content += `| [${entry.title}](${entry.path}) | ${entry.tier} | ${entry.status} | ${entry.lastUpdated} |\n`;
49
+ }
50
+ content += `\n`;
51
+ }
52
+ content += `---\n\n`;
53
+ }
54
+ // Footer
55
+ content += `## Maintenance\n\n`;
56
+ content += `- **Last generated:** ${now}\n`;
57
+ content += `- **Run maintenance:** \`npx hit-em-with-the-docs maintain\`\n`;
58
+ content += `- **Regenerate index:** \`npx hit-em-with-the-docs index\`\n`;
59
+ return content;
60
+ }
61
+ /**
62
+ * Generate a domain-specific INDEX.md content
63
+ */
64
+ export function generateDomainIndexContent(domain, entries = []) {
65
+ const def = DOMAIN_DEFINITIONS[domain];
66
+ const now = formatDate(new Date());
67
+ let content = `---
68
+ title: ${def.name} Documentation Index
69
+ tier: reference
70
+ domains: [${domain}]
71
+ status: active
72
+ last_updated: '${now}'
73
+ version: '1.0.0'
74
+ purpose: Complete listing of ${domain} documentation
75
+ ---
76
+
77
+ # ${def.name} Documentation
78
+
79
+ > ${def.description}
80
+
81
+ ## Overview
82
+
83
+ - **Total Documents:** ${entries.length}
84
+ - **Domain:** \`${domain}/\`
85
+ - **Category:** ${def.category}
86
+ - **Load Priority:** ${def.loadPriority}/10
87
+
88
+ ## Documents
89
+
90
+ `;
91
+ if (entries.length === 0) {
92
+ content += `*No documents in this domain yet.*\n\n`;
93
+ content += `To add a document:\n\n`;
94
+ content += `1. Create a markdown file in this directory\n`;
95
+ content += `2. Add YAML frontmatter with required metadata\n`;
96
+ content += `3. Run \`npx hit-em-with-the-docs integrate <file>\`\n`;
97
+ }
98
+ else {
99
+ // Group by tier
100
+ const byTier = groupByTier(entries);
101
+ for (const [tier, tierEntries] of Object.entries(byTier)) {
102
+ if (tierEntries.length === 0)
103
+ continue;
104
+ content += `### ${capitalize(tier)}s\n\n`;
105
+ content += `| Document | Status | Updated | Words |\n`;
106
+ content += `|----------|--------|---------|-------|\n`;
107
+ for (const entry of tierEntries) {
108
+ const words = entry.wordCount ? entry.wordCount.toLocaleString() : '-';
109
+ content += `| [${entry.title}](${entry.path}) | ${entry.status} | ${entry.lastUpdated} | ${words} |\n`;
110
+ }
111
+ content += `\n`;
112
+ }
113
+ }
114
+ // Keywords section
115
+ content += `## Keywords\n\n`;
116
+ content += `This domain covers: ${def.keywords.slice(0, 10).join(', ')}\n\n`;
117
+ // Related domains
118
+ const relatedDomains = findRelatedDomains(domain);
119
+ if (relatedDomains.length > 0) {
120
+ content += `## Related Domains\n\n`;
121
+ for (const related of relatedDomains) {
122
+ const relatedDef = DOMAIN_DEFINITIONS[related];
123
+ content += `- [${relatedDef.name}](../${related}/) - ${relatedDef.description}\n`;
124
+ }
125
+ content += `\n`;
126
+ }
127
+ // Footer
128
+ content += `---\n\n`;
129
+ content += `*Last updated: ${now}*\n`;
130
+ return content;
131
+ }
132
+ /**
133
+ * Group entries by tier
134
+ */
135
+ function groupByTier(entries) {
136
+ const grouped = {
137
+ guide: [],
138
+ standard: [],
139
+ example: [],
140
+ reference: [],
141
+ admin: [],
142
+ };
143
+ for (const entry of entries) {
144
+ const tier = entry.tier.toLowerCase();
145
+ if (tier in grouped) {
146
+ grouped[tier].push(entry);
147
+ }
148
+ else {
149
+ grouped['guide'].push(entry);
150
+ }
151
+ }
152
+ return grouped;
153
+ }
154
+ /**
155
+ * Find related domains based on shared keywords
156
+ */
157
+ function findRelatedDomains(domain) {
158
+ const def = DOMAIN_DEFINITIONS[domain];
159
+ const related = [];
160
+ for (const other of DOMAINS) {
161
+ if (other === domain)
162
+ continue;
163
+ const otherDef = DOMAIN_DEFINITIONS[other];
164
+ let score = 0;
165
+ // Check keyword overlap
166
+ for (const keyword of def.keywords) {
167
+ if (otherDef.keywords.includes(keyword)) {
168
+ score++;
169
+ }
170
+ }
171
+ // Check category match
172
+ if (def.category === otherDef.category) {
173
+ score += 2;
174
+ }
175
+ if (score > 0) {
176
+ related.push({ domain: other, score });
177
+ }
178
+ }
179
+ // Sort by score and return top 3
180
+ return related
181
+ .sort((a, b) => b.score - a.score)
182
+ .slice(0, 3)
183
+ .map((r) => r.domain);
184
+ }
185
+ /**
186
+ * Capitalize first letter
187
+ */
188
+ function capitalize(str) {
189
+ return str.charAt(0).toUpperCase() + str.slice(1);
190
+ }
191
+ //# sourceMappingURL=index-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-generator.js","sourceRoot":"","sources":["../../src/generators/index-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type Domain } from '../core/domains/constants.js';
2
+ import type { IndexEntry } from './index-generator.js';
3
+ /**
4
+ * Generate the root REGISTRY.md content (quick reference)
5
+ */
6
+ export declare function generateRootRegistry(): string;
7
+ /**
8
+ * Generate domain-specific REGISTRY.md content
9
+ */
10
+ export declare function generateDomainRegistryContent(domain: Domain, entries?: IndexEntry[]): string;
11
+ //# sourceMappingURL=registry-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-generator.d.ts","sourceRoot":"","sources":["../../src/generators/registry-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAExF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CA+D7C;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,UAAU,EAAO,GACzB,MAAM,CA8ER"}
@@ -0,0 +1,156 @@
1
+ import { DOMAINS, DOMAIN_DEFINITIONS } from '../core/domains/constants.js';
2
+ import { formatDate } from '../core/metadata/generator.js';
3
+ /**
4
+ * Generate the root REGISTRY.md content (quick reference)
5
+ */
6
+ export function generateRootRegistry() {
7
+ const now = formatDate(new Date());
8
+ let content = `---
9
+ title: Documentation Registry
10
+ tier: reference
11
+ domains: [root]
12
+ status: active
13
+ last_updated: '${now}'
14
+ version: '1.0.0'
15
+ purpose: Quick reference for all documentation domains
16
+ ---
17
+
18
+ # Documentation Registry
19
+
20
+ > Quick reference tables for fast navigation.
21
+
22
+ ## Domain Quick Reference
23
+
24
+ | Domain | Category | Priority | Keywords |
25
+ |--------|----------|----------|----------|
26
+ `;
27
+ for (const domain of DOMAINS) {
28
+ const def = DOMAIN_DEFINITIONS[domain];
29
+ const keywords = def.keywords.slice(0, 3).join(', ');
30
+ content += `| [${def.name}](${domain}/) | ${def.category} | ${def.loadPriority}/10 | ${keywords} |\n`;
31
+ }
32
+ content += `\n## By Category\n\n`;
33
+ // Group by category
34
+ const categories = ['core', 'development', 'features', 'advanced'];
35
+ for (const category of categories) {
36
+ const categoryDomains = DOMAINS.filter((d) => DOMAIN_DEFINITIONS[d].category === category);
37
+ content += `### ${capitalize(category)}\n\n`;
38
+ for (const domain of categoryDomains) {
39
+ const def = DOMAIN_DEFINITIONS[domain];
40
+ content += `- **[${def.name}](${domain}/)** - ${def.description}\n`;
41
+ }
42
+ content += `\n`;
43
+ }
44
+ content += `## Common Tasks\n\n`;
45
+ content += `| Task | Start Here |\n`;
46
+ content += `|------|------------|\n`;
47
+ content += `| New developer setup | [quickstart/](quickstart/) |\n`;
48
+ content += `| Coding standards | [standards/](standards/) |\n`;
49
+ content += `| API development | [api/](api/) |\n`;
50
+ content += `| Security implementation | [security/](security/) |\n`;
51
+ content += `| Database changes | [database/](database/) |\n`;
52
+ content += `| Deployment | [devops/](devops/) |\n`;
53
+ content += `| Troubleshooting | [troubleshooting/](troubleshooting/) |\n`;
54
+ content += `\n---\n\n`;
55
+ content += `*Last updated: ${now}*\n`;
56
+ return content;
57
+ }
58
+ /**
59
+ * Generate domain-specific REGISTRY.md content
60
+ */
61
+ export function generateDomainRegistryContent(domain, entries = []) {
62
+ const def = DOMAIN_DEFINITIONS[domain];
63
+ const now = formatDate(new Date());
64
+ let content = `---
65
+ title: ${def.name} Registry
66
+ tier: reference
67
+ domains: [${domain}]
68
+ status: active
69
+ last_updated: '${now}'
70
+ version: '1.0.0'
71
+ purpose: Quick reference for ${domain} documentation
72
+ ---
73
+
74
+ # ${def.name} Registry
75
+
76
+ > Quick reference for ${def.description.toLowerCase()}.
77
+
78
+ ## At a Glance
79
+
80
+ | Metric | Value |
81
+ |--------|-------|
82
+ | Documents | ${entries.length} |
83
+ | Category | ${def.category} |
84
+ | Load Priority | ${def.loadPriority}/10 |
85
+
86
+ `;
87
+ if (entries.length > 0) {
88
+ // Quick links to most important docs
89
+ const activeEntries = entries.filter((e) => e.status === 'active');
90
+ const recentEntries = [...entries]
91
+ .sort((a, b) => b.lastUpdated.localeCompare(a.lastUpdated))
92
+ .slice(0, 5);
93
+ if (activeEntries.length > 0) {
94
+ content += `## Active Documents\n\n`;
95
+ for (const entry of activeEntries.slice(0, 10)) {
96
+ content += `- [${entry.title}](${entry.path})\n`;
97
+ }
98
+ content += `\n`;
99
+ }
100
+ if (recentEntries.length > 0) {
101
+ content += `## Recently Updated\n\n`;
102
+ for (const entry of recentEntries) {
103
+ content += `- [${entry.title}](${entry.path}) - ${entry.lastUpdated}\n`;
104
+ }
105
+ content += `\n`;
106
+ }
107
+ // By status
108
+ content += `## By Status\n\n`;
109
+ const byStatus = groupByStatus(entries);
110
+ content += `| Status | Count |\n`;
111
+ content += `|--------|-------|\n`;
112
+ for (const [status, statusEntries] of Object.entries(byStatus)) {
113
+ content += `| ${status} | ${statusEntries.length} |\n`;
114
+ }
115
+ content += `\n`;
116
+ }
117
+ else {
118
+ content += `## Documents\n\n`;
119
+ content += `*No documents in this domain yet.*\n\n`;
120
+ }
121
+ // Keywords
122
+ content += `## Keywords\n\n`;
123
+ content += `\`${def.keywords.join('` `')}\`\n\n`;
124
+ // See also
125
+ content += `## See Also\n\n`;
126
+ content += `- [Full Index](INDEX.md) - Complete document listing\n`;
127
+ content += `- [Root Index](../INDEX.md) - All domains\n`;
128
+ content += `\n---\n\n`;
129
+ content += `*Last updated: ${now}*\n`;
130
+ return content;
131
+ }
132
+ /**
133
+ * Group entries by status
134
+ */
135
+ function groupByStatus(entries) {
136
+ const grouped = {
137
+ active: [],
138
+ draft: [],
139
+ deprecated: [],
140
+ archived: [],
141
+ };
142
+ for (const entry of entries) {
143
+ const status = entry.status.toLowerCase();
144
+ if (status in grouped) {
145
+ grouped[status].push(entry);
146
+ }
147
+ }
148
+ return grouped;
149
+ }
150
+ /**
151
+ * Capitalize first letter
152
+ */
153
+ function capitalize(str) {
154
+ return str.charAt(0).toUpperCase() + str.slice(1);
155
+ }
156
+ //# sourceMappingURL=registry-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-generator.js","sourceRoot":"","sources":["../../src/generators/registry-generator.ts"],"names":[],"mappings":"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"}