@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,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain definitions for the hierarchical documentation system.
|
|
3
|
+
* The system organizes documentation into 15 specialized domains.
|
|
4
|
+
*/
|
|
5
|
+
export declare const DOMAINS: readonly ["agents", "api", "architecture", "backups", "database", "devops", "features", "plans", "procedures", "quickstart", "security", "standards", "testing", "troubleshooting", "workflows"];
|
|
6
|
+
export type Domain = (typeof DOMAINS)[number];
|
|
7
|
+
export interface DomainDefinition {
|
|
8
|
+
id: Domain;
|
|
9
|
+
name: string;
|
|
10
|
+
description: string;
|
|
11
|
+
keywords: string[];
|
|
12
|
+
loadPriority: number;
|
|
13
|
+
category: 'core' | 'development' | 'features' | 'advanced';
|
|
14
|
+
}
|
|
15
|
+
export declare const DOMAIN_DEFINITIONS: Record<Domain, DomainDefinition>;
|
|
16
|
+
/**
|
|
17
|
+
* Get domain definition by ID
|
|
18
|
+
*/
|
|
19
|
+
export declare function getDomainDefinition(domain: Domain): DomainDefinition;
|
|
20
|
+
/**
|
|
21
|
+
* Get all domain IDs
|
|
22
|
+
*/
|
|
23
|
+
export declare function getAllDomains(): readonly Domain[];
|
|
24
|
+
/**
|
|
25
|
+
* Get domains by category
|
|
26
|
+
*/
|
|
27
|
+
export declare function getDomainsByCategory(category: DomainDefinition['category']): Domain[];
|
|
28
|
+
/**
|
|
29
|
+
* Get domains sorted by load priority (highest first)
|
|
30
|
+
*/
|
|
31
|
+
export declare function getDomainsByPriority(): Domain[];
|
|
32
|
+
/**
|
|
33
|
+
* Check if a string is a valid domain
|
|
34
|
+
*/
|
|
35
|
+
export declare function isValidDomain(value: string): value is Domain;
|
|
36
|
+
/**
|
|
37
|
+
* Get all keywords across all domains
|
|
38
|
+
*/
|
|
39
|
+
export declare function getAllKeywords(): Map<string, Domain[]>;
|
|
40
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/core/domains/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,OAAO,kMAgBV,CAAC;AAEX,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,UAAU,GAAG,UAAU,CAAC;CAC5D;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAwL/D,CAAC;AAEF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAEpE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,SAAS,MAAM,EAAE,CAEjD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,GACrC,MAAM,EAAE,CAEV;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAI/C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,MAAM,CAE5D;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAatD"}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain definitions for the hierarchical documentation system.
|
|
3
|
+
* The system organizes documentation into 15 specialized domains.
|
|
4
|
+
*/
|
|
5
|
+
export const DOMAINS = [
|
|
6
|
+
'agents',
|
|
7
|
+
'api',
|
|
8
|
+
'architecture',
|
|
9
|
+
'backups',
|
|
10
|
+
'database',
|
|
11
|
+
'devops',
|
|
12
|
+
'features',
|
|
13
|
+
'plans',
|
|
14
|
+
'procedures',
|
|
15
|
+
'quickstart',
|
|
16
|
+
'security',
|
|
17
|
+
'standards',
|
|
18
|
+
'testing',
|
|
19
|
+
'troubleshooting',
|
|
20
|
+
'workflows',
|
|
21
|
+
];
|
|
22
|
+
export const DOMAIN_DEFINITIONS = {
|
|
23
|
+
security: {
|
|
24
|
+
id: 'security',
|
|
25
|
+
name: 'Security',
|
|
26
|
+
description: 'Security, auth, Vault, Keycloak, RLS',
|
|
27
|
+
keywords: [
|
|
28
|
+
'security', 'auth', 'authentication', 'authorization', 'oauth', 'jwt',
|
|
29
|
+
'keycloak', 'vault', 'secrets', 'rls', 'row-level-security', 'rbac',
|
|
30
|
+
'permissions', 'access-control', 'encryption', 'ssl', 'tls', 'certificate',
|
|
31
|
+
],
|
|
32
|
+
loadPriority: 9,
|
|
33
|
+
category: 'core',
|
|
34
|
+
},
|
|
35
|
+
devops: {
|
|
36
|
+
id: 'devops',
|
|
37
|
+
name: 'DevOps',
|
|
38
|
+
description: 'Deployment, CI/CD, Docker, environments, infrastructure',
|
|
39
|
+
keywords: [
|
|
40
|
+
'devops', 'deployment', 'deploy', 'ci', 'cd', 'ci/cd', 'pipeline',
|
|
41
|
+
'docker', 'container', 'kubernetes', 'k8s', 'infrastructure', 'terraform',
|
|
42
|
+
'ansible', 'aws', 'gcp', 'azure', 'cloud', 'environment', 'production',
|
|
43
|
+
'staging', 'development', 'nginx', 'load-balancer', 'monitoring',
|
|
44
|
+
],
|
|
45
|
+
loadPriority: 8,
|
|
46
|
+
category: 'core',
|
|
47
|
+
},
|
|
48
|
+
database: {
|
|
49
|
+
id: 'database',
|
|
50
|
+
name: 'Database',
|
|
51
|
+
description: 'Schema, migrations, RLS, queries, procedures',
|
|
52
|
+
keywords: [
|
|
53
|
+
'database', 'db', 'postgres', 'postgresql', 'mysql', 'sql', 'schema',
|
|
54
|
+
'migration', 'migrations', 'alembic', 'query', 'queries', 'table',
|
|
55
|
+
'index', 'indexes', 'rls', 'procedure', 'function', 'trigger',
|
|
56
|
+
'transaction', 'orm', 'sqlalchemy', 'prisma',
|
|
57
|
+
],
|
|
58
|
+
loadPriority: 8,
|
|
59
|
+
category: 'core',
|
|
60
|
+
},
|
|
61
|
+
api: {
|
|
62
|
+
id: 'api',
|
|
63
|
+
name: 'API',
|
|
64
|
+
description: 'API endpoints, routes, specifications, contracts',
|
|
65
|
+
keywords: [
|
|
66
|
+
'api', 'endpoint', 'endpoints', 'route', 'routes', 'rest', 'restful',
|
|
67
|
+
'graphql', 'grpc', 'openapi', 'swagger', 'specification', 'contract',
|
|
68
|
+
'request', 'response', 'http', 'fastapi', 'express', 'flask', 'django',
|
|
69
|
+
],
|
|
70
|
+
loadPriority: 8,
|
|
71
|
+
category: 'core',
|
|
72
|
+
},
|
|
73
|
+
standards: {
|
|
74
|
+
id: 'standards',
|
|
75
|
+
name: 'Standards',
|
|
76
|
+
description: 'Coding standards (backend, frontend, database, devops, security)',
|
|
77
|
+
keywords: [
|
|
78
|
+
'standard', 'standards', 'convention', 'conventions', 'pattern', 'patterns',
|
|
79
|
+
'best-practice', 'best-practices', 'guideline', 'guidelines', 'style',
|
|
80
|
+
'style-guide', 'coding', 'naming', 'formatting', 'linting', 'rules',
|
|
81
|
+
],
|
|
82
|
+
loadPriority: 10,
|
|
83
|
+
category: 'development',
|
|
84
|
+
},
|
|
85
|
+
testing: {
|
|
86
|
+
id: 'testing',
|
|
87
|
+
name: 'Testing',
|
|
88
|
+
description: 'Test strategies, fixtures, patterns, integration/e2e',
|
|
89
|
+
keywords: [
|
|
90
|
+
'test', 'testing', 'tests', 'unit', 'unit-test', 'integration',
|
|
91
|
+
'integration-test', 'e2e', 'end-to-end', 'fixture', 'fixtures', 'mock',
|
|
92
|
+
'mocking', 'stub', 'pytest', 'jest', 'vitest', 'playwright', 'cypress',
|
|
93
|
+
'coverage', 'tdd', 'bdd',
|
|
94
|
+
],
|
|
95
|
+
loadPriority: 7,
|
|
96
|
+
category: 'development',
|
|
97
|
+
},
|
|
98
|
+
architecture: {
|
|
99
|
+
id: 'architecture',
|
|
100
|
+
name: 'Architecture',
|
|
101
|
+
description: 'System design, AI coach, project registry, patterns',
|
|
102
|
+
keywords: [
|
|
103
|
+
'architecture', 'design', 'system', 'system-design', 'pattern', 'patterns',
|
|
104
|
+
'microservices', 'monolith', 'serverless', 'event-driven', 'cqrs',
|
|
105
|
+
'ddd', 'domain-driven', 'clean-architecture', 'hexagonal', 'decision',
|
|
106
|
+
'adr', 'registry', 'diagram',
|
|
107
|
+
],
|
|
108
|
+
loadPriority: 7,
|
|
109
|
+
category: 'development',
|
|
110
|
+
},
|
|
111
|
+
features: {
|
|
112
|
+
id: 'features',
|
|
113
|
+
name: 'Features',
|
|
114
|
+
description: 'Feature implementation guides, admin docs',
|
|
115
|
+
keywords: [
|
|
116
|
+
'feature', 'features', 'implementation', 'guide', 'how-to', 'tutorial',
|
|
117
|
+
'admin', 'administration', 'dashboard', 'ui', 'component', 'module',
|
|
118
|
+
'functionality', 'capability',
|
|
119
|
+
],
|
|
120
|
+
loadPriority: 6,
|
|
121
|
+
category: 'features',
|
|
122
|
+
},
|
|
123
|
+
quickstart: {
|
|
124
|
+
id: 'quickstart',
|
|
125
|
+
name: 'Quickstart',
|
|
126
|
+
description: 'Setup guides, dev workflow, onboarding',
|
|
127
|
+
keywords: [
|
|
128
|
+
'quickstart', 'quick-start', 'getting-started', 'setup', 'install',
|
|
129
|
+
'installation', 'onboarding', 'developer', 'dev', 'workflow', 'start',
|
|
130
|
+
'begin', 'intro', 'introduction', 'new-developer',
|
|
131
|
+
],
|
|
132
|
+
loadPriority: 9,
|
|
133
|
+
category: 'features',
|
|
134
|
+
},
|
|
135
|
+
procedures: {
|
|
136
|
+
id: 'procedures',
|
|
137
|
+
name: 'Procedures',
|
|
138
|
+
description: 'Step-by-step operational procedures (SOP)',
|
|
139
|
+
keywords: [
|
|
140
|
+
'procedure', 'procedures', 'sop', 'standard-operating-procedure', 'step',
|
|
141
|
+
'steps', 'operational', 'operation', 'operations', 'runbook', 'playbook',
|
|
142
|
+
'checklist', 'process', 'manual',
|
|
143
|
+
],
|
|
144
|
+
loadPriority: 6,
|
|
145
|
+
category: 'features',
|
|
146
|
+
},
|
|
147
|
+
workflows: {
|
|
148
|
+
id: 'workflows',
|
|
149
|
+
name: 'Workflows',
|
|
150
|
+
description: 'Process documentation, multi-step operations',
|
|
151
|
+
keywords: [
|
|
152
|
+
'workflow', 'workflows', 'process', 'processes', 'flow', 'flowchart',
|
|
153
|
+
'sequence', 'pipeline', 'automation', 'automated', 'multi-step',
|
|
154
|
+
'orchestration', 'state-machine',
|
|
155
|
+
],
|
|
156
|
+
loadPriority: 5,
|
|
157
|
+
category: 'features',
|
|
158
|
+
},
|
|
159
|
+
agents: {
|
|
160
|
+
id: 'agents',
|
|
161
|
+
name: 'Agents',
|
|
162
|
+
description: 'Expert agent documentation, specialty matrix',
|
|
163
|
+
keywords: [
|
|
164
|
+
'agent', 'agents', 'ai', 'assistant', 'expert', 'specialist', 'llm',
|
|
165
|
+
'langchain', 'rag', 'retrieval', 'embedding', 'vector', 'prompt',
|
|
166
|
+
'orchestration', 'chain', 'tool',
|
|
167
|
+
],
|
|
168
|
+
loadPriority: 5,
|
|
169
|
+
category: 'advanced',
|
|
170
|
+
},
|
|
171
|
+
backups: {
|
|
172
|
+
id: 'backups',
|
|
173
|
+
name: 'Backups',
|
|
174
|
+
description: 'Backup/restore guides, disaster recovery',
|
|
175
|
+
keywords: [
|
|
176
|
+
'backup', 'backups', 'restore', 'recovery', 'disaster', 'disaster-recovery',
|
|
177
|
+
'dr', 'snapshot', 'archive', 'retention', 'replication', 'failover',
|
|
178
|
+
],
|
|
179
|
+
loadPriority: 4,
|
|
180
|
+
category: 'advanced',
|
|
181
|
+
},
|
|
182
|
+
troubleshooting: {
|
|
183
|
+
id: 'troubleshooting',
|
|
184
|
+
name: 'Troubleshooting',
|
|
185
|
+
description: 'Debug guides, common issues, solutions',
|
|
186
|
+
keywords: [
|
|
187
|
+
'troubleshooting', 'troubleshoot', 'debug', 'debugging', 'issue', 'issues',
|
|
188
|
+
'problem', 'problems', 'error', 'errors', 'fix', 'solution', 'solutions',
|
|
189
|
+
'resolve', 'diagnose', 'diagnosis', 'log', 'logs', 'faq',
|
|
190
|
+
],
|
|
191
|
+
loadPriority: 6,
|
|
192
|
+
category: 'advanced',
|
|
193
|
+
},
|
|
194
|
+
plans: {
|
|
195
|
+
id: 'plans',
|
|
196
|
+
name: 'Plans',
|
|
197
|
+
description: 'Planning documents, roadmaps, proposals',
|
|
198
|
+
keywords: [
|
|
199
|
+
'plan', 'plans', 'planning', 'roadmap', 'proposal', 'proposals', 'rfc',
|
|
200
|
+
'design-doc', 'specification', 'spec', 'milestone', 'timeline', 'schedule',
|
|
201
|
+
'project', 'initiative',
|
|
202
|
+
],
|
|
203
|
+
loadPriority: 3,
|
|
204
|
+
category: 'advanced',
|
|
205
|
+
},
|
|
206
|
+
};
|
|
207
|
+
/**
|
|
208
|
+
* Get domain definition by ID
|
|
209
|
+
*/
|
|
210
|
+
export function getDomainDefinition(domain) {
|
|
211
|
+
return DOMAIN_DEFINITIONS[domain];
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Get all domain IDs
|
|
215
|
+
*/
|
|
216
|
+
export function getAllDomains() {
|
|
217
|
+
return DOMAINS;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Get domains by category
|
|
221
|
+
*/
|
|
222
|
+
export function getDomainsByCategory(category) {
|
|
223
|
+
return DOMAINS.filter((d) => DOMAIN_DEFINITIONS[d].category === category);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Get domains sorted by load priority (highest first)
|
|
227
|
+
*/
|
|
228
|
+
export function getDomainsByPriority() {
|
|
229
|
+
return [...DOMAINS].sort((a, b) => DOMAIN_DEFINITIONS[b].loadPriority - DOMAIN_DEFINITIONS[a].loadPriority);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Check if a string is a valid domain
|
|
233
|
+
*/
|
|
234
|
+
export function isValidDomain(value) {
|
|
235
|
+
return DOMAINS.includes(value);
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Get all keywords across all domains
|
|
239
|
+
*/
|
|
240
|
+
export function getAllKeywords() {
|
|
241
|
+
const keywordMap = new Map();
|
|
242
|
+
for (const domain of DOMAINS) {
|
|
243
|
+
const def = DOMAIN_DEFINITIONS[domain];
|
|
244
|
+
for (const keyword of def.keywords) {
|
|
245
|
+
const existing = keywordMap.get(keyword) ?? [];
|
|
246
|
+
existing.push(domain);
|
|
247
|
+
keywordMap.set(keyword, existing);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return keywordMap;
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/core/domains/constants.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Domain } from './constants.js';
|
|
2
|
+
export interface DomainDetectionResult {
|
|
3
|
+
domain: Domain | null;
|
|
4
|
+
confidence: number;
|
|
5
|
+
method: 'path' | 'content' | 'keywords' | 'none';
|
|
6
|
+
alternativeDomains: {
|
|
7
|
+
domain: Domain;
|
|
8
|
+
confidence: number;
|
|
9
|
+
}[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Detect domain from file path and/or content
|
|
13
|
+
*/
|
|
14
|
+
export declare function detectDomain(filePath: string, content?: string, docsRoot?: string): DomainDetectionResult;
|
|
15
|
+
/**
|
|
16
|
+
* Detect domain from file path
|
|
17
|
+
*/
|
|
18
|
+
export declare function detectDomainFromPath(filePath: string, docsRoot?: string): DomainDetectionResult;
|
|
19
|
+
/**
|
|
20
|
+
* Detect domain from document content
|
|
21
|
+
*/
|
|
22
|
+
export declare function detectDomainFromContent(content: string): DomainDetectionResult;
|
|
23
|
+
/**
|
|
24
|
+
* Get suggested domains for a file based on its name
|
|
25
|
+
*/
|
|
26
|
+
export declare function suggestDomainsForFile(fileName: string): Domain[];
|
|
27
|
+
/**
|
|
28
|
+
* Validate that a file is in the correct domain
|
|
29
|
+
*/
|
|
30
|
+
export declare function validateDomainPlacement(filePath: string, docsRoot?: string): {
|
|
31
|
+
isCorrect: boolean;
|
|
32
|
+
currentDomain: Domain | null;
|
|
33
|
+
suggestedDomain: Domain | null;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../../src/core/domains/detector.ts"],"names":[],"mappings":"AACA,OAAO,EACL,MAAM,EAKP,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;IACjD,kBAAkB,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC9D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,EAChB,QAAQ,GAAE,MAAyB,GAClC,qBAAqB,CA8BvB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,MAAyB,GAClC,qBAAqB,CA8CvB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,CAyD9E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAyBhE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,MAAyB,GAClC;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAWtF"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { basename, relative } from 'path';
|
|
2
|
+
import { DOMAINS, DOMAIN_DEFINITIONS, getAllKeywords, isValidDomain, } from './constants.js';
|
|
3
|
+
/**
|
|
4
|
+
* Detect domain from file path and/or content
|
|
5
|
+
*/
|
|
6
|
+
export function detectDomain(filePath, content, docsRoot = '.documentation') {
|
|
7
|
+
// Priority 1: Path-based detection (highest confidence)
|
|
8
|
+
const pathResult = detectDomainFromPath(filePath, docsRoot);
|
|
9
|
+
if (pathResult.domain && pathResult.confidence >= 0.9) {
|
|
10
|
+
return pathResult;
|
|
11
|
+
}
|
|
12
|
+
// Priority 2: Content-based detection (if provided)
|
|
13
|
+
if (content) {
|
|
14
|
+
const contentResult = detectDomainFromContent(content);
|
|
15
|
+
// If path gave a lower confidence match, compare with content
|
|
16
|
+
if (pathResult.domain) {
|
|
17
|
+
if (contentResult.confidence > pathResult.confidence) {
|
|
18
|
+
// Content wins but add path result as alternative
|
|
19
|
+
contentResult.alternativeDomains.unshift({
|
|
20
|
+
domain: pathResult.domain,
|
|
21
|
+
confidence: pathResult.confidence,
|
|
22
|
+
});
|
|
23
|
+
return contentResult;
|
|
24
|
+
}
|
|
25
|
+
// Path wins
|
|
26
|
+
return pathResult;
|
|
27
|
+
}
|
|
28
|
+
return contentResult;
|
|
29
|
+
}
|
|
30
|
+
// Return path result even if low confidence
|
|
31
|
+
return pathResult;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Detect domain from file path
|
|
35
|
+
*/
|
|
36
|
+
export function detectDomainFromPath(filePath, docsRoot = '.documentation') {
|
|
37
|
+
const result = {
|
|
38
|
+
domain: null,
|
|
39
|
+
confidence: 0,
|
|
40
|
+
method: 'path',
|
|
41
|
+
alternativeDomains: [],
|
|
42
|
+
};
|
|
43
|
+
// Normalize path separators
|
|
44
|
+
const normalizedPath = filePath.replace(/\\/g, '/');
|
|
45
|
+
const normalizedRoot = docsRoot.replace(/\\/g, '/');
|
|
46
|
+
// Try to get relative path from docs root
|
|
47
|
+
let relativePath;
|
|
48
|
+
try {
|
|
49
|
+
relativePath = relative(normalizedRoot, normalizedPath).replace(/\\/g, '/');
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
relativePath = normalizedPath;
|
|
53
|
+
}
|
|
54
|
+
// Check if path contains a domain folder
|
|
55
|
+
const parts = relativePath.split('/');
|
|
56
|
+
for (let i = 0; i < parts.length; i++) {
|
|
57
|
+
const part = parts[i];
|
|
58
|
+
if (part && isValidDomain(part)) {
|
|
59
|
+
result.domain = part;
|
|
60
|
+
// Higher confidence if domain is early in path
|
|
61
|
+
result.confidence = i === 0 ? 1.0 : 0.9 - i * 0.1;
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Also check filename for domain hints
|
|
66
|
+
if (!result.domain) {
|
|
67
|
+
const fileName = basename(filePath, '.md');
|
|
68
|
+
for (const domain of DOMAINS) {
|
|
69
|
+
if (fileName.includes(domain)) {
|
|
70
|
+
result.domain = domain;
|
|
71
|
+
result.confidence = 0.6;
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Detect domain from document content
|
|
80
|
+
*/
|
|
81
|
+
export function detectDomainFromContent(content) {
|
|
82
|
+
const result = {
|
|
83
|
+
domain: null,
|
|
84
|
+
confidence: 0,
|
|
85
|
+
method: 'content',
|
|
86
|
+
alternativeDomains: [],
|
|
87
|
+
};
|
|
88
|
+
const lowerContent = content.toLowerCase();
|
|
89
|
+
const keywordMap = getAllKeywords();
|
|
90
|
+
// Count keyword matches per domain
|
|
91
|
+
const domainScores = new Map();
|
|
92
|
+
for (const [keyword, domains] of keywordMap) {
|
|
93
|
+
// Count occurrences of keyword
|
|
94
|
+
const regex = new RegExp(`\\b${escapeRegExp(keyword)}\\b`, 'gi');
|
|
95
|
+
const matches = lowerContent.match(regex);
|
|
96
|
+
if (matches) {
|
|
97
|
+
const count = matches.length;
|
|
98
|
+
for (const domain of domains) {
|
|
99
|
+
const current = domainScores.get(domain) ?? 0;
|
|
100
|
+
domainScores.set(domain, current + count);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Sort domains by score
|
|
105
|
+
const sortedDomains = [...domainScores.entries()]
|
|
106
|
+
.filter(([, score]) => score > 0)
|
|
107
|
+
.sort((a, b) => b[1] - a[1]);
|
|
108
|
+
if (sortedDomains.length > 0) {
|
|
109
|
+
const maxScore = sortedDomains[0][1];
|
|
110
|
+
const topDomain = sortedDomains[0][0];
|
|
111
|
+
// Calculate confidence based on score and score difference from second place
|
|
112
|
+
const secondScore = sortedDomains[1]?.[1] ?? 0;
|
|
113
|
+
const scoreDiff = maxScore - secondScore;
|
|
114
|
+
const normalizedScore = Math.min(maxScore / 20, 1); // Normalize to 0-1
|
|
115
|
+
const scoreDiffFactor = Math.min(scoreDiff / 10, 0.3);
|
|
116
|
+
result.domain = topDomain;
|
|
117
|
+
result.confidence = Math.min(0.5 + normalizedScore * 0.3 + scoreDiffFactor, 0.95);
|
|
118
|
+
result.method = 'keywords';
|
|
119
|
+
// Add alternatives
|
|
120
|
+
for (let i = 1; i < Math.min(sortedDomains.length, 4); i++) {
|
|
121
|
+
const [domain, score] = sortedDomains[i];
|
|
122
|
+
result.alternativeDomains.push({
|
|
123
|
+
domain,
|
|
124
|
+
confidence: (score / maxScore) * result.confidence * 0.8,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return result;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Get suggested domains for a file based on its name
|
|
132
|
+
*/
|
|
133
|
+
export function suggestDomainsForFile(fileName) {
|
|
134
|
+
const baseName = basename(fileName, '.md').toLowerCase();
|
|
135
|
+
const suggestions = [];
|
|
136
|
+
// Check each domain's keywords against the filename
|
|
137
|
+
for (const domain of DOMAINS) {
|
|
138
|
+
const def = DOMAIN_DEFINITIONS[domain];
|
|
139
|
+
for (const keyword of def.keywords) {
|
|
140
|
+
if (baseName.includes(keyword.replace(/-/g, ''))) {
|
|
141
|
+
if (!suggestions.includes(domain)) {
|
|
142
|
+
suggestions.push(domain);
|
|
143
|
+
}
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// Also check if domain name is in filename
|
|
149
|
+
for (const domain of DOMAINS) {
|
|
150
|
+
if (baseName.includes(domain) && !suggestions.includes(domain)) {
|
|
151
|
+
suggestions.unshift(domain);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return suggestions;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Validate that a file is in the correct domain
|
|
158
|
+
*/
|
|
159
|
+
export function validateDomainPlacement(filePath, docsRoot = '.documentation') {
|
|
160
|
+
// Get the domain from the path
|
|
161
|
+
const pathResult = detectDomainFromPath(filePath, docsRoot);
|
|
162
|
+
// Read the file content would be needed here for full validation
|
|
163
|
+
// For now, just return the path-based result
|
|
164
|
+
return {
|
|
165
|
+
isCorrect: pathResult.confidence >= 0.8,
|
|
166
|
+
currentDomain: pathResult.domain,
|
|
167
|
+
suggestedDomain: pathResult.domain,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Escape special regex characters
|
|
172
|
+
*/
|
|
173
|
+
function escapeRegExp(string) {
|
|
174
|
+
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../../src/core/domains/detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type PartialDocumentMetadata } from '../metadata/schema.js';
|
|
2
|
+
import type { Domain } from '../domains/constants.js';
|
|
3
|
+
export interface IntegrateOptions {
|
|
4
|
+
filePath: string;
|
|
5
|
+
docsPath: string;
|
|
6
|
+
auto?: boolean;
|
|
7
|
+
dryRun?: boolean;
|
|
8
|
+
force?: boolean;
|
|
9
|
+
silent?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface IntegrateResult {
|
|
12
|
+
success: boolean;
|
|
13
|
+
integrated: boolean;
|
|
14
|
+
originalPath: string;
|
|
15
|
+
targetPath?: string;
|
|
16
|
+
domain?: Domain;
|
|
17
|
+
tier?: string;
|
|
18
|
+
duplicates?: DuplicateMatch[];
|
|
19
|
+
metadata?: PartialDocumentMetadata;
|
|
20
|
+
error?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface DuplicateMatch {
|
|
23
|
+
path: string;
|
|
24
|
+
title: string;
|
|
25
|
+
similarity: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Integrate a document into the documentation system
|
|
29
|
+
*/
|
|
30
|
+
export declare function integrateDocument(options: IntegrateOptions): Promise<IntegrateResult>;
|
|
31
|
+
/**
|
|
32
|
+
* Batch integrate multiple documents
|
|
33
|
+
*/
|
|
34
|
+
export declare function batchIntegrate(files: string[], options: Omit<IntegrateOptions, 'filePath'>): Promise<IntegrateResult[]>;
|
|
35
|
+
//# sourceMappingURL=integrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integrator.d.ts","sourceRoot":"","sources":["../../../src/core/integrate/integrator.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAGtD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,uBAAuB,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CA8I1B;AA+GD;;GAEG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAC1C,OAAO,CAAC,eAAe,EAAE,CAAC,CAY5B"}
|