@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.
- package/.claude-plugin/marketplace.json +46 -0
- package/.claude-plugin/plugin.json +114 -0
- package/LICENSE +21 -0
- package/MIGRATION.md +255 -0
- package/README.backup.md +714 -0
- package/README.md +869 -0
- package/action.yml +56 -0
- package/dist/action/action/index.d.ts +2 -0
- package/dist/action/action/index.d.ts.map +1 -0
- package/dist/action/cli/index.d.ts +3 -0
- package/dist/action/cli/index.d.ts.map +1 -0
- package/dist/action/core/audit/auditor.d.ts +43 -0
- package/dist/action/core/audit/auditor.d.ts.map +1 -0
- package/dist/action/core/audit/rules.d.ts +37 -0
- package/dist/action/core/audit/rules.d.ts.map +1 -0
- package/dist/action/core/discover/antipatterns.d.ts +24 -0
- package/dist/action/core/discover/antipatterns.d.ts.map +1 -0
- package/dist/action/core/discover/dependencies.d.ts +57 -0
- package/dist/action/core/discover/dependencies.d.ts.map +1 -0
- package/dist/action/core/discover/patterns.d.ts +38 -0
- package/dist/action/core/discover/patterns.d.ts.map +1 -0
- package/dist/action/core/discover/standards.d.ts +58 -0
- package/dist/action/core/discover/standards.d.ts.map +1 -0
- package/dist/action/core/domains/classifier.d.ts +41 -0
- package/dist/action/core/domains/classifier.d.ts.map +1 -0
- package/dist/action/core/domains/constants.d.ts +40 -0
- package/dist/action/core/domains/constants.d.ts.map +1 -0
- package/dist/action/core/domains/detector.d.ts +35 -0
- package/dist/action/core/domains/detector.d.ts.map +1 -0
- package/dist/action/core/integrate/integrator.d.ts +35 -0
- package/dist/action/core/integrate/integrator.d.ts.map +1 -0
- package/dist/action/core/links/checker.d.ts +64 -0
- package/dist/action/core/links/checker.d.ts.map +1 -0
- package/dist/action/core/links/tracker.d.ts +69 -0
- package/dist/action/core/links/tracker.d.ts.map +1 -0
- package/dist/action/core/maintain/orchestrator.d.ts +39 -0
- package/dist/action/core/maintain/orchestrator.d.ts.map +1 -0
- package/dist/action/core/metadata/generator.d.ts +26 -0
- package/dist/action/core/metadata/generator.d.ts.map +1 -0
- package/dist/action/core/metadata/schema.d.ts +201 -0
- package/dist/action/core/metadata/schema.d.ts.map +1 -0
- package/dist/action/core/metadata/sync.d.ts +36 -0
- package/dist/action/core/metadata/sync.d.ts.map +1 -0
- package/dist/action/generators/index-generator.d.ts +19 -0
- package/dist/action/generators/index-generator.d.ts.map +1 -0
- package/dist/action/generators/registry-generator.d.ts +11 -0
- package/dist/action/generators/registry-generator.d.ts.map +1 -0
- package/dist/action/generators/scaffold.d.ts +30 -0
- package/dist/action/generators/scaffold.d.ts.map +1 -0
- package/dist/action/generators/templates/document.d.ts +14 -0
- package/dist/action/generators/templates/document.d.ts.map +1 -0
- package/dist/action/generators/templates/domain-index.d.ts +6 -0
- package/dist/action/generators/templates/domain-index.d.ts.map +1 -0
- package/dist/action/generators/templates/domain-registry.d.ts +6 -0
- package/dist/action/generators/templates/domain-registry.d.ts.map +1 -0
- package/dist/action/index.d.ts +31 -0
- package/dist/action/index.d.ts.map +1 -0
- package/dist/action/index.js +17 -0
- package/dist/action/index.js.map +1 -0
- package/dist/action/package.json +3 -0
- package/dist/action/reports/audit-report.d.ts +15 -0
- package/dist/action/reports/audit-report.d.ts.map +1 -0
- package/dist/action/reports/health-report.d.ts +15 -0
- package/dist/action/reports/health-report.d.ts.map +1 -0
- package/dist/action/reports/link-report.d.ts +15 -0
- package/dist/action/reports/link-report.d.ts.map +1 -0
- package/dist/action/utils/frontmatter.d.ts +50 -0
- package/dist/action/utils/frontmatter.d.ts.map +1 -0
- package/dist/action/utils/glob.d.ts +63 -0
- package/dist/action/utils/glob.d.ts.map +1 -0
- package/dist/action/utils/logger.d.ts +42 -0
- package/dist/action/utils/logger.d.ts.map +1 -0
- package/dist/action/utils/markdown.d.ts +89 -0
- package/dist/action/utils/markdown.d.ts.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +287 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/audit/auditor.d.ts +43 -0
- package/dist/core/audit/auditor.d.ts.map +1 -0
- package/dist/core/audit/auditor.js +273 -0
- package/dist/core/audit/auditor.js.map +1 -0
- package/dist/core/audit/rules.d.ts +37 -0
- package/dist/core/audit/rules.d.ts.map +1 -0
- package/dist/core/audit/rules.js +223 -0
- package/dist/core/audit/rules.js.map +1 -0
- package/dist/core/discover/antipatterns.d.ts +24 -0
- package/dist/core/discover/antipatterns.d.ts.map +1 -0
- package/dist/core/discover/antipatterns.js +354 -0
- package/dist/core/discover/antipatterns.js.map +1 -0
- package/dist/core/discover/dependencies.d.ts +57 -0
- package/dist/core/discover/dependencies.d.ts.map +1 -0
- package/dist/core/discover/dependencies.js +311 -0
- package/dist/core/discover/dependencies.js.map +1 -0
- package/dist/core/discover/patterns.d.ts +38 -0
- package/dist/core/discover/patterns.d.ts.map +1 -0
- package/dist/core/discover/patterns.js +371 -0
- package/dist/core/discover/patterns.js.map +1 -0
- package/dist/core/discover/standards.d.ts +58 -0
- package/dist/core/discover/standards.d.ts.map +1 -0
- package/dist/core/discover/standards.js +359 -0
- package/dist/core/discover/standards.js.map +1 -0
- package/dist/core/domains/classifier.d.ts +41 -0
- package/dist/core/domains/classifier.d.ts.map +1 -0
- package/dist/core/domains/classifier.js +208 -0
- package/dist/core/domains/classifier.js.map +1 -0
- package/dist/core/domains/constants.d.ts +40 -0
- package/dist/core/domains/constants.d.ts.map +1 -0
- package/dist/core/domains/constants.js +252 -0
- package/dist/core/domains/constants.js.map +1 -0
- package/dist/core/domains/detector.d.ts +35 -0
- package/dist/core/domains/detector.d.ts.map +1 -0
- package/dist/core/domains/detector.js +176 -0
- package/dist/core/domains/detector.js.map +1 -0
- package/dist/core/integrate/integrator.d.ts +35 -0
- package/dist/core/integrate/integrator.d.ts.map +1 -0
- package/dist/core/integrate/integrator.js +216 -0
- package/dist/core/integrate/integrator.js.map +1 -0
- package/dist/core/links/checker.d.ts +64 -0
- package/dist/core/links/checker.d.ts.map +1 -0
- package/dist/core/links/checker.js +190 -0
- package/dist/core/links/checker.js.map +1 -0
- package/dist/core/links/tracker.d.ts +69 -0
- package/dist/core/links/tracker.d.ts.map +1 -0
- package/dist/core/links/tracker.js +184 -0
- package/dist/core/links/tracker.js.map +1 -0
- package/dist/core/maintain/orchestrator.d.ts +39 -0
- package/dist/core/maintain/orchestrator.d.ts.map +1 -0
- package/dist/core/maintain/orchestrator.js +372 -0
- package/dist/core/maintain/orchestrator.js.map +1 -0
- package/dist/core/metadata/generator.d.ts +26 -0
- package/dist/core/metadata/generator.d.ts.map +1 -0
- package/dist/core/metadata/generator.js +221 -0
- package/dist/core/metadata/generator.js.map +1 -0
- package/dist/core/metadata/schema.d.ts +201 -0
- package/dist/core/metadata/schema.d.ts.map +1 -0
- package/dist/core/metadata/schema.js +184 -0
- package/dist/core/metadata/schema.js.map +1 -0
- package/dist/core/metadata/sync.d.ts +36 -0
- package/dist/core/metadata/sync.d.ts.map +1 -0
- package/dist/core/metadata/sync.js +195 -0
- package/dist/core/metadata/sync.js.map +1 -0
- package/dist/generators/index-generator.d.ts +19 -0
- package/dist/generators/index-generator.d.ts.map +1 -0
- package/dist/generators/index-generator.js +191 -0
- package/dist/generators/index-generator.js.map +1 -0
- package/dist/generators/registry-generator.d.ts +11 -0
- package/dist/generators/registry-generator.d.ts.map +1 -0
- package/dist/generators/registry-generator.js +156 -0
- package/dist/generators/registry-generator.js.map +1 -0
- package/dist/generators/scaffold.d.ts +30 -0
- package/dist/generators/scaffold.d.ts.map +1 -0
- package/dist/generators/scaffold.js +213 -0
- package/dist/generators/scaffold.js.map +1 -0
- package/dist/generators/templates/document.d.ts +14 -0
- package/dist/generators/templates/document.d.ts.map +1 -0
- package/dist/generators/templates/document.js +305 -0
- package/dist/generators/templates/document.js.map +1 -0
- package/dist/generators/templates/domain-index.d.ts +6 -0
- package/dist/generators/templates/domain-index.d.ts.map +1 -0
- package/dist/generators/templates/domain-index.js +68 -0
- package/dist/generators/templates/domain-index.js.map +1 -0
- package/dist/generators/templates/domain-registry.d.ts +6 -0
- package/dist/generators/templates/domain-registry.d.ts.map +1 -0
- package/dist/generators/templates/domain-registry.js +59 -0
- package/dist/generators/templates/domain-registry.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/reports/audit-report.d.ts +15 -0
- package/dist/reports/audit-report.d.ts.map +1 -0
- package/dist/reports/audit-report.js +150 -0
- package/dist/reports/audit-report.js.map +1 -0
- package/dist/reports/health-report.d.ts +15 -0
- package/dist/reports/health-report.d.ts.map +1 -0
- package/dist/reports/health-report.js +175 -0
- package/dist/reports/health-report.js.map +1 -0
- package/dist/reports/link-report.d.ts +15 -0
- package/dist/reports/link-report.d.ts.map +1 -0
- package/dist/reports/link-report.js +165 -0
- package/dist/reports/link-report.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +50 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +93 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/glob.d.ts +63 -0
- package/dist/utils/glob.d.ts.map +1 -0
- package/dist/utils/glob.js +128 -0
- package/dist/utils/glob.js.map +1 -0
- package/dist/utils/logger.d.ts +42 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +118 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/markdown.d.ts +89 -0
- package/dist/utils/markdown.d.ts.map +1 -0
- package/dist/utils/markdown.js +192 -0
- package/dist/utils/markdown.js.map +1 -0
- package/package.json +100 -0
- 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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"}
|