@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,59 @@
|
|
|
1
|
+
import { formatDate } from '../../core/metadata/generator.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generate initial domain REGISTRY.md content
|
|
4
|
+
*/
|
|
5
|
+
export function generateDomainRegistry(domain, def) {
|
|
6
|
+
const now = formatDate(new Date());
|
|
7
|
+
return `---
|
|
8
|
+
title: ${def.name} Registry
|
|
9
|
+
tier: reference
|
|
10
|
+
domains:
|
|
11
|
+
- ${domain}
|
|
12
|
+
status: active
|
|
13
|
+
last_updated: '${now}'
|
|
14
|
+
version: '1.0.0'
|
|
15
|
+
purpose: Quick reference for ${domain} documentation
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# ${def.name} Registry
|
|
19
|
+
|
|
20
|
+
> Quick reference for ${def.description.toLowerCase()}.
|
|
21
|
+
|
|
22
|
+
## At a Glance
|
|
23
|
+
|
|
24
|
+
| Metric | Value |
|
|
25
|
+
|--------|-------|
|
|
26
|
+
| Documents | 0 |
|
|
27
|
+
| Category | ${def.category} |
|
|
28
|
+
| Load Priority | ${def.loadPriority}/10 |
|
|
29
|
+
|
|
30
|
+
## Quick Links
|
|
31
|
+
|
|
32
|
+
*No documents yet. Add your first document to see it listed here.*
|
|
33
|
+
|
|
34
|
+
## By Tier
|
|
35
|
+
|
|
36
|
+
| Tier | Count |
|
|
37
|
+
|------|-------|
|
|
38
|
+
| Guide | 0 |
|
|
39
|
+
| Standard | 0 |
|
|
40
|
+
| Example | 0 |
|
|
41
|
+
| Reference | 0 |
|
|
42
|
+
| Admin | 0 |
|
|
43
|
+
|
|
44
|
+
## Keywords
|
|
45
|
+
|
|
46
|
+
\`${def.keywords.slice(0, 8).join('` `')}\`
|
|
47
|
+
|
|
48
|
+
## See Also
|
|
49
|
+
|
|
50
|
+
- [Full Index](INDEX.md) - Complete document listing
|
|
51
|
+
- [Root Index](../INDEX.md) - All domains
|
|
52
|
+
- [Root Registry](../REGISTRY.md) - All quick references
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
*Last updated: ${now}*
|
|
57
|
+
`;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=domain-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-registry.js","sourceRoot":"","sources":["../../../src/generators/templates/domain-registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAE9D;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc,EAAE,GAAqB;IAC1E,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAEnC,OAAO;SACA,GAAG,CAAC,IAAI;;;MAGX,MAAM;;iBAEK,GAAG;;+BAEW,MAAM;;;IAGjC,GAAG,CAAC,IAAI;;wBAEY,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE;;;;;;;eAOtC,GAAG,CAAC,QAAQ;oBACP,GAAG,CAAC,YAAY;;;;;;;;;;;;;;;;;;IAkBhC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;iBAUvB,GAAG;CACnB,CAAC;AACF,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* hit-em-with-the-docs
|
|
3
|
+
*
|
|
4
|
+
* Self-managing documentation system with hierarchical structure,
|
|
5
|
+
* intelligent automation, pattern discovery, and agent orchestration.
|
|
6
|
+
*/
|
|
7
|
+
export * from './core/domains/constants.js';
|
|
8
|
+
export * from './core/domains/detector.js';
|
|
9
|
+
export * from './core/domains/classifier.js';
|
|
10
|
+
export * from './core/metadata/schema.js';
|
|
11
|
+
export * from './core/metadata/generator.js';
|
|
12
|
+
export * from './utils/logger.js';
|
|
13
|
+
export * from './utils/glob.js';
|
|
14
|
+
export * from './utils/frontmatter.js';
|
|
15
|
+
export * from './utils/markdown.js';
|
|
16
|
+
export * from './generators/scaffold.js';
|
|
17
|
+
export * from './generators/index-generator.js';
|
|
18
|
+
export * from './generators/registry-generator.js';
|
|
19
|
+
export * from './core/metadata/sync.js';
|
|
20
|
+
export * from './core/links/checker.js';
|
|
21
|
+
export * from './core/links/tracker.js';
|
|
22
|
+
export * from './core/audit/auditor.js';
|
|
23
|
+
export * from './core/integrate/integrator.js';
|
|
24
|
+
export * from './core/maintain/orchestrator.js';
|
|
25
|
+
export * from './core/discover/patterns.js';
|
|
26
|
+
export * from './core/discover/antipatterns.js';
|
|
27
|
+
export * from './core/discover/standards.js';
|
|
28
|
+
export * from './core/discover/dependencies.js';
|
|
29
|
+
export * from './reports/health-report.js';
|
|
30
|
+
export * from './reports/audit-report.js';
|
|
31
|
+
export * from './reports/link-report.js';
|
|
32
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAG7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAG7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AAGnD,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAGhD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAGhD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* hit-em-with-the-docs
|
|
3
|
+
*
|
|
4
|
+
* Self-managing documentation system with hierarchical structure,
|
|
5
|
+
* intelligent automation, pattern discovery, and agent orchestration.
|
|
6
|
+
*/
|
|
7
|
+
// Core domain system
|
|
8
|
+
export * from './core/domains/constants.js';
|
|
9
|
+
export * from './core/domains/detector.js';
|
|
10
|
+
export * from './core/domains/classifier.js';
|
|
11
|
+
// Metadata system
|
|
12
|
+
export * from './core/metadata/schema.js';
|
|
13
|
+
export * from './core/metadata/generator.js';
|
|
14
|
+
// Utilities
|
|
15
|
+
export * from './utils/logger.js';
|
|
16
|
+
export * from './utils/glob.js';
|
|
17
|
+
export * from './utils/frontmatter.js';
|
|
18
|
+
export * from './utils/markdown.js';
|
|
19
|
+
// Generators
|
|
20
|
+
export * from './generators/scaffold.js';
|
|
21
|
+
export * from './generators/index-generator.js';
|
|
22
|
+
export * from './generators/registry-generator.js';
|
|
23
|
+
// Core automation
|
|
24
|
+
export * from './core/metadata/sync.js';
|
|
25
|
+
export * from './core/links/checker.js';
|
|
26
|
+
export * from './core/links/tracker.js';
|
|
27
|
+
export * from './core/audit/auditor.js';
|
|
28
|
+
export * from './core/integrate/integrator.js';
|
|
29
|
+
export * from './core/maintain/orchestrator.js';
|
|
30
|
+
// Discovery system
|
|
31
|
+
export * from './core/discover/patterns.js';
|
|
32
|
+
export * from './core/discover/antipatterns.js';
|
|
33
|
+
export * from './core/discover/standards.js';
|
|
34
|
+
export * from './core/discover/dependencies.js';
|
|
35
|
+
// Reports
|
|
36
|
+
export * from './reports/health-report.js';
|
|
37
|
+
export * from './reports/audit-report.js';
|
|
38
|
+
export * from './reports/link-report.js';
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,qBAAqB;AACrB,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAE7C,kBAAkB;AAClB,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAE7C,YAAY;AACZ,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AAEpC,aAAa;AACb,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AAEnD,kBAAkB;AAClB,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAEhD,mBAAmB;AACnB,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAEhD,UAAU;AACV,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { AuditResult } from '../core/audit/auditor.js';
|
|
2
|
+
export interface AuditReportOptions {
|
|
3
|
+
docsPath: string;
|
|
4
|
+
result: AuditResult;
|
|
5
|
+
format?: 'markdown' | 'json';
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Generate an audit report
|
|
9
|
+
*/
|
|
10
|
+
export declare function generateAuditReport(options: AuditReportOptions): Promise<string>;
|
|
11
|
+
/**
|
|
12
|
+
* Save audit report to file
|
|
13
|
+
*/
|
|
14
|
+
export declare function saveAuditReport(docsPath: string, result: AuditResult, format?: 'markdown' | 'json'): Promise<string>;
|
|
15
|
+
//# sourceMappingURL=audit-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-report.d.ts","sourceRoot":"","sources":["../../src/reports/audit-report.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAQjB;AAmID;;GAEG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,WAAW,EACnB,MAAM,GAAE,UAAU,GAAG,MAAmB,GACvC,OAAO,CAAC,MAAM,CAAC,CAgBjB"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { writeFile, mkdir } from 'fs/promises';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { pathExists } from '../utils/glob.js';
|
|
4
|
+
import { formatDate } from '../core/metadata/generator.js';
|
|
5
|
+
/**
|
|
6
|
+
* Generate an audit report
|
|
7
|
+
*/
|
|
8
|
+
export async function generateAuditReport(options) {
|
|
9
|
+
const { result, format = 'markdown' } = options;
|
|
10
|
+
if (format === 'json') {
|
|
11
|
+
return generateJsonReport(result);
|
|
12
|
+
}
|
|
13
|
+
return generateMarkdownReport(result);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Generate markdown audit report
|
|
17
|
+
*/
|
|
18
|
+
function generateMarkdownReport(result) {
|
|
19
|
+
const now = formatDate(new Date());
|
|
20
|
+
const timestamp = new Date().toISOString();
|
|
21
|
+
const errorIssues = result.issues.filter((i) => i.severity === 'error');
|
|
22
|
+
const warningIssues = result.issues.filter((i) => i.severity === 'warning');
|
|
23
|
+
const infoIssues = result.issues.filter((i) => i.severity === 'info');
|
|
24
|
+
let content = `---
|
|
25
|
+
title: Documentation Audit Report
|
|
26
|
+
tier: admin
|
|
27
|
+
domains: [root]
|
|
28
|
+
status: active
|
|
29
|
+
last_updated: '${now}'
|
|
30
|
+
version: '1.0.0'
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
# Documentation Audit Report
|
|
34
|
+
|
|
35
|
+
**Generated:** ${timestamp}
|
|
36
|
+
**Health Score:** ${result.healthScore.toFixed(1)}/100
|
|
37
|
+
|
|
38
|
+
## Summary
|
|
39
|
+
|
|
40
|
+
| Metric | Value |
|
|
41
|
+
|--------|-------|
|
|
42
|
+
| Total Files | ${result.totalFiles} |
|
|
43
|
+
| Passed | ${result.passedFiles} |
|
|
44
|
+
| Failed | ${result.failedFiles} |
|
|
45
|
+
| Errors | ${errorIssues.length} |
|
|
46
|
+
| Warnings | ${warningIssues.length} |
|
|
47
|
+
| Info | ${infoIssues.length} |
|
|
48
|
+
|
|
49
|
+
## Compliance Scores
|
|
50
|
+
|
|
51
|
+
| Category | Score |
|
|
52
|
+
|----------|-------|
|
|
53
|
+
| Metadata Compliance | ${result.stats.metadataCompliance.toFixed(1)}% |
|
|
54
|
+
| Naming Compliance | ${result.stats.namingCompliance.toFixed(1)}% |
|
|
55
|
+
| Placement Compliance | ${result.stats.placementCompliance.toFixed(1)}% |
|
|
56
|
+
| Tag Consistency | ${result.stats.tagConsistency.toFixed(1)}% |
|
|
57
|
+
|
|
58
|
+
`;
|
|
59
|
+
// Domain breakdown
|
|
60
|
+
if (Object.keys(result.stats.byDomain).length > 0) {
|
|
61
|
+
content += `## By Domain
|
|
62
|
+
|
|
63
|
+
| Domain | Files | Issues | Health |
|
|
64
|
+
|--------|-------|--------|--------|
|
|
65
|
+
`;
|
|
66
|
+
for (const [domain, stats] of Object.entries(result.stats.byDomain)) {
|
|
67
|
+
content += `| ${domain} | ${stats.files} | ${stats.issues} | ${stats.healthScore.toFixed(0)}% |\n`;
|
|
68
|
+
}
|
|
69
|
+
content += '\n';
|
|
70
|
+
}
|
|
71
|
+
// Critical Issues
|
|
72
|
+
if (errorIssues.length > 0) {
|
|
73
|
+
content += `## Critical Issues (${errorIssues.length})
|
|
74
|
+
|
|
75
|
+
| File | Rule | Message |
|
|
76
|
+
|------|------|---------|
|
|
77
|
+
`;
|
|
78
|
+
for (const issue of errorIssues) {
|
|
79
|
+
content += `| ${issue.file} | ${issue.rule} | ${issue.message} |\n`;
|
|
80
|
+
}
|
|
81
|
+
content += '\n';
|
|
82
|
+
}
|
|
83
|
+
// Warnings
|
|
84
|
+
if (warningIssues.length > 0) {
|
|
85
|
+
content += `## Warnings (${warningIssues.length})
|
|
86
|
+
|
|
87
|
+
| File | Rule | Message |
|
|
88
|
+
|------|------|---------|
|
|
89
|
+
`;
|
|
90
|
+
for (const issue of warningIssues.slice(0, 20)) {
|
|
91
|
+
content += `| ${issue.file} | ${issue.rule} | ${issue.message} |\n`;
|
|
92
|
+
}
|
|
93
|
+
if (warningIssues.length > 20) {
|
|
94
|
+
content += `\n*...and ${warningIssues.length - 20} more warnings*\n`;
|
|
95
|
+
}
|
|
96
|
+
content += '\n';
|
|
97
|
+
}
|
|
98
|
+
// Fixable Issues
|
|
99
|
+
const fixableIssues = result.issues.filter((i) => i.fixable);
|
|
100
|
+
if (fixableIssues.length > 0) {
|
|
101
|
+
content += `## Fixable Issues
|
|
102
|
+
|
|
103
|
+
${fixableIssues.length} issues can be auto-fixed. Run:
|
|
104
|
+
|
|
105
|
+
\`\`\`bash
|
|
106
|
+
npx hit-em-with-the-docs maintain --fix
|
|
107
|
+
\`\`\`
|
|
108
|
+
|
|
109
|
+
`;
|
|
110
|
+
}
|
|
111
|
+
content += `---
|
|
112
|
+
|
|
113
|
+
*Generated by hit-em-with-the-docs*
|
|
114
|
+
`;
|
|
115
|
+
return content;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Generate JSON audit report
|
|
119
|
+
*/
|
|
120
|
+
function generateJsonReport(result) {
|
|
121
|
+
return JSON.stringify({
|
|
122
|
+
timestamp: new Date().toISOString(),
|
|
123
|
+
healthScore: result.healthScore,
|
|
124
|
+
summary: {
|
|
125
|
+
totalFiles: result.totalFiles,
|
|
126
|
+
passedFiles: result.passedFiles,
|
|
127
|
+
failedFiles: result.failedFiles,
|
|
128
|
+
totalIssues: result.issues.length,
|
|
129
|
+
},
|
|
130
|
+
stats: result.stats,
|
|
131
|
+
issues: result.issues,
|
|
132
|
+
}, null, 2);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Save audit report to file
|
|
136
|
+
*/
|
|
137
|
+
export async function saveAuditReport(docsPath, result, format = 'markdown') {
|
|
138
|
+
const reportsDir = join(docsPath, 'reports');
|
|
139
|
+
if (!(await pathExists(reportsDir))) {
|
|
140
|
+
await mkdir(reportsDir, { recursive: true });
|
|
141
|
+
}
|
|
142
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
|
|
143
|
+
const ext = format === 'json' ? 'json' : 'md';
|
|
144
|
+
const fileName = `audit-${timestamp}.${ext}`;
|
|
145
|
+
const filePath = join(reportsDir, fileName);
|
|
146
|
+
const content = await generateAuditReport({ docsPath, result, format });
|
|
147
|
+
await writeFile(filePath, content, 'utf-8');
|
|
148
|
+
return filePath;
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=audit-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-report.js","sourceRoot":"","sources":["../../src/reports/audit-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { MaintainResult } from '../core/maintain/orchestrator.js';
|
|
2
|
+
export interface HealthReportOptions {
|
|
3
|
+
docsPath: string;
|
|
4
|
+
result: MaintainResult;
|
|
5
|
+
format?: 'markdown' | 'json';
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Generate a health report
|
|
9
|
+
*/
|
|
10
|
+
export declare function generateHealthReport(options: HealthReportOptions): Promise<string>;
|
|
11
|
+
/**
|
|
12
|
+
* Save health report to file
|
|
13
|
+
*/
|
|
14
|
+
export declare function saveHealthReport(docsPath: string, result: MaintainResult, format?: 'markdown' | 'json'): Promise<string>;
|
|
15
|
+
//# sourceMappingURL=health-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-report.d.ts","sourceRoot":"","sources":["../../src/reports/health-report.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,MAAM,CAAC,CAQjB;AA0JD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,EACtB,MAAM,GAAE,UAAU,GAAG,MAAmB,GACvC,OAAO,CAAC,MAAM,CAAC,CAgBjB"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { writeFile, mkdir } from 'fs/promises';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { pathExists } from '../utils/glob.js';
|
|
4
|
+
import { formatDate } from '../core/metadata/generator.js';
|
|
5
|
+
/**
|
|
6
|
+
* Generate a health report
|
|
7
|
+
*/
|
|
8
|
+
export async function generateHealthReport(options) {
|
|
9
|
+
const { result, format = 'markdown' } = options;
|
|
10
|
+
if (format === 'json') {
|
|
11
|
+
return generateJsonReport(result);
|
|
12
|
+
}
|
|
13
|
+
return generateMarkdownReport(result);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Generate markdown health report
|
|
17
|
+
*/
|
|
18
|
+
function generateMarkdownReport(result) {
|
|
19
|
+
const now = formatDate(new Date());
|
|
20
|
+
const timestamp = new Date().toISOString();
|
|
21
|
+
return `---
|
|
22
|
+
title: Documentation Health Report
|
|
23
|
+
tier: admin
|
|
24
|
+
domains: [root]
|
|
25
|
+
status: active
|
|
26
|
+
last_updated: '${now}'
|
|
27
|
+
version: '1.0.0'
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
# Documentation Health Report
|
|
31
|
+
|
|
32
|
+
**Generated:** ${timestamp}
|
|
33
|
+
**Health Score:** ${result.healthScore.toFixed(1)}/100
|
|
34
|
+
|
|
35
|
+
## Summary
|
|
36
|
+
|
|
37
|
+
| Metric | Value | Status |
|
|
38
|
+
|--------|-------|--------|
|
|
39
|
+
| Health Score | ${result.healthScore.toFixed(1)}% | ${getStatusEmoji(result.healthScore)} |
|
|
40
|
+
| Domain Health | ${result.domainHealth.healthy ? 'Healthy' : 'Issues'} | ${result.domainHealth.healthy ? '✅' : '⚠️'} |
|
|
41
|
+
| Files Analyzed | ${result.metadataSync?.totalFiles ?? 0} | ℹ️ |
|
|
42
|
+
| Valid Files | ${result.metadataSync?.validFiles ?? 0} | ${getStatusEmoji((result.metadataSync?.validFiles ?? 0) / (result.metadataSync?.totalFiles ?? 1) * 100)} |
|
|
43
|
+
| Broken Links | ${result.linkCheck?.brokenLinks.length ?? 'N/A'} | ${(result.linkCheck?.brokenLinks.length ?? 0) === 0 ? '✅' : '⚠️'} |
|
|
44
|
+
|
|
45
|
+
## Health Score Breakdown
|
|
46
|
+
|
|
47
|
+
\`\`\`
|
|
48
|
+
Overall Score: ${result.healthScore.toFixed(1)}/100
|
|
49
|
+
|
|
50
|
+
Components:
|
|
51
|
+
├── Domain Health: ${result.domainHealth.healthy ? '100' : '50'}/100 (weight: 20%)
|
|
52
|
+
├── Metadata Compliance: ${result.audit?.stats.metadataCompliance.toFixed(1) ?? 'N/A'}/100 (weight: 40%)
|
|
53
|
+
├── Link Health: ${result.linkCheck ? (100 - result.linkCheck.stats.brokenPercentage).toFixed(1) : 'N/A'}/100 (weight: 20%)
|
|
54
|
+
└── Naming Compliance: ${result.audit?.stats.namingCompliance.toFixed(1) ?? 'N/A'}/100 (weight: 20%)
|
|
55
|
+
\`\`\`
|
|
56
|
+
|
|
57
|
+
## Recommendations
|
|
58
|
+
|
|
59
|
+
${generateRecommendations(result)}
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
*Generated by hit-em-with-the-docs*
|
|
64
|
+
`;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Generate JSON health report
|
|
68
|
+
*/
|
|
69
|
+
function generateJsonReport(result) {
|
|
70
|
+
return JSON.stringify({
|
|
71
|
+
timestamp: new Date().toISOString(),
|
|
72
|
+
healthScore: result.healthScore,
|
|
73
|
+
summary: {
|
|
74
|
+
domainHealth: result.domainHealth.healthy,
|
|
75
|
+
totalFiles: result.metadataSync?.totalFiles ?? 0,
|
|
76
|
+
validFiles: result.metadataSync?.validFiles ?? 0,
|
|
77
|
+
brokenLinks: result.linkCheck?.brokenLinks.length ?? null,
|
|
78
|
+
auditIssues: result.audit?.issues.length ?? 0,
|
|
79
|
+
},
|
|
80
|
+
domainHealth: result.domainHealth,
|
|
81
|
+
metadataSync: result.metadataSync ? {
|
|
82
|
+
totalFiles: result.metadataSync.totalFiles,
|
|
83
|
+
validFiles: result.metadataSync.validFiles,
|
|
84
|
+
fixedFiles: result.metadataSync.fixedFiles,
|
|
85
|
+
avgCompleteness: result.metadataSync.stats.avgCompleteness,
|
|
86
|
+
} : null,
|
|
87
|
+
linkCheck: result.linkCheck ? {
|
|
88
|
+
totalLinks: result.linkCheck.totalLinks,
|
|
89
|
+
brokenLinks: result.linkCheck.brokenLinks.length,
|
|
90
|
+
crossDomainLinks: result.linkCheck.stats.crossDomainLinks,
|
|
91
|
+
} : null,
|
|
92
|
+
audit: result.audit ? {
|
|
93
|
+
passedFiles: result.audit.passedFiles,
|
|
94
|
+
failedFiles: result.audit.failedFiles,
|
|
95
|
+
healthScore: result.audit.healthScore,
|
|
96
|
+
stats: result.audit.stats,
|
|
97
|
+
} : null,
|
|
98
|
+
errors: result.errors,
|
|
99
|
+
}, null, 2);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get status emoji based on score
|
|
103
|
+
*/
|
|
104
|
+
function getStatusEmoji(score) {
|
|
105
|
+
if (score >= 90)
|
|
106
|
+
return '✅';
|
|
107
|
+
if (score >= 70)
|
|
108
|
+
return '🟡';
|
|
109
|
+
if (score >= 50)
|
|
110
|
+
return '⚠️';
|
|
111
|
+
return '❌';
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Generate recommendations based on results
|
|
115
|
+
*/
|
|
116
|
+
function generateRecommendations(result) {
|
|
117
|
+
const recommendations = [];
|
|
118
|
+
// Domain health recommendations
|
|
119
|
+
if (!result.domainHealth.healthy) {
|
|
120
|
+
if (result.domainHealth.missingDomains.length > 0) {
|
|
121
|
+
recommendations.push(`- **Create missing domain folders:** ${result.domainHealth.missingDomains.join(', ')}`);
|
|
122
|
+
}
|
|
123
|
+
if (result.domainHealth.missingIndexes.length > 0) {
|
|
124
|
+
recommendations.push(`- **Create missing INDEX.md files:** ${result.domainHealth.missingIndexes.join(', ')}`);
|
|
125
|
+
}
|
|
126
|
+
if (result.domainHealth.missingRegistries.length > 0) {
|
|
127
|
+
recommendations.push(`- **Create missing REGISTRY.md files:** ${result.domainHealth.missingRegistries.join(', ')}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Metadata recommendations
|
|
131
|
+
if (result.metadataSync) {
|
|
132
|
+
const invalidFiles = result.metadataSync.totalFiles - result.metadataSync.validFiles;
|
|
133
|
+
if (invalidFiles > 0) {
|
|
134
|
+
recommendations.push(`- **Fix metadata in ${invalidFiles} files:** Run \`npx hit-em-with-the-docs metadata-sync --fix\``);
|
|
135
|
+
}
|
|
136
|
+
if (result.metadataSync.stats.avgCompleteness < 80) {
|
|
137
|
+
recommendations.push(`- **Improve metadata completeness:** Current average is ${result.metadataSync.stats.avgCompleteness.toFixed(1)}%`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// Link recommendations
|
|
141
|
+
if (result.linkCheck && result.linkCheck.brokenLinks.length > 0) {
|
|
142
|
+
recommendations.push(`- **Fix ${result.linkCheck.brokenLinks.length} broken links:** Run \`npx hit-em-with-the-docs link-check --report\` for details`);
|
|
143
|
+
}
|
|
144
|
+
// Audit recommendations
|
|
145
|
+
if (result.audit) {
|
|
146
|
+
const errors = result.audit.issues.filter((i) => i.severity === 'error');
|
|
147
|
+
if (errors.length > 0) {
|
|
148
|
+
recommendations.push(`- **Address ${errors.length} critical audit issues:** Run \`npx hit-em-with-the-docs audit --issues-only\``);
|
|
149
|
+
}
|
|
150
|
+
if (result.audit.stats.namingCompliance < 90) {
|
|
151
|
+
recommendations.push(`- **Improve naming convention compliance:** Rename files to use kebab-case`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (recommendations.length === 0) {
|
|
155
|
+
return '✅ No recommendations - documentation is in great shape!';
|
|
156
|
+
}
|
|
157
|
+
return recommendations.join('\n');
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Save health report to file
|
|
161
|
+
*/
|
|
162
|
+
export async function saveHealthReport(docsPath, result, format = 'markdown') {
|
|
163
|
+
const reportsDir = join(docsPath, 'reports');
|
|
164
|
+
if (!(await pathExists(reportsDir))) {
|
|
165
|
+
await mkdir(reportsDir, { recursive: true });
|
|
166
|
+
}
|
|
167
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
|
|
168
|
+
const ext = format === 'json' ? 'json' : 'md';
|
|
169
|
+
const fileName = `health-${timestamp}.${ext}`;
|
|
170
|
+
const filePath = join(reportsDir, fileName);
|
|
171
|
+
const content = await generateHealthReport({ docsPath, result, format });
|
|
172
|
+
await writeFile(filePath, content, 'utf-8');
|
|
173
|
+
return filePath;
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=health-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-report.js","sourceRoot":"","sources":["../../src/reports/health-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { LinkCheckResult } from '../core/links/checker.js';
|
|
2
|
+
export interface LinkReportOptions {
|
|
3
|
+
docsPath: string;
|
|
4
|
+
result: LinkCheckResult;
|
|
5
|
+
format?: 'markdown' | 'json';
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Generate a link report
|
|
9
|
+
*/
|
|
10
|
+
export declare function generateLinkReport(options: LinkReportOptions): Promise<string>;
|
|
11
|
+
/**
|
|
12
|
+
* Save link report to file
|
|
13
|
+
*/
|
|
14
|
+
export declare function saveLinkReport(docsPath: string, result: LinkCheckResult, format?: 'markdown' | 'json'): Promise<string>;
|
|
15
|
+
//# sourceMappingURL=link-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-report.d.ts","sourceRoot":"","sources":["../../src/reports/link-report.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAEhE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,MAAM,CAAC,CAQjB;AAgJD;;GAEG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,eAAe,EACvB,MAAM,GAAE,UAAU,GAAG,MAAmB,GACvC,OAAO,CAAC,MAAM,CAAC,CAgBjB"}
|