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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/.claude-plugin/marketplace.json +46 -0
  2. package/.claude-plugin/plugin.json +114 -0
  3. package/LICENSE +21 -0
  4. package/MIGRATION.md +255 -0
  5. package/README.backup.md +714 -0
  6. package/README.md +869 -0
  7. package/action.yml +56 -0
  8. package/dist/action/action/index.d.ts +2 -0
  9. package/dist/action/action/index.d.ts.map +1 -0
  10. package/dist/action/cli/index.d.ts +3 -0
  11. package/dist/action/cli/index.d.ts.map +1 -0
  12. package/dist/action/core/audit/auditor.d.ts +43 -0
  13. package/dist/action/core/audit/auditor.d.ts.map +1 -0
  14. package/dist/action/core/audit/rules.d.ts +37 -0
  15. package/dist/action/core/audit/rules.d.ts.map +1 -0
  16. package/dist/action/core/discover/antipatterns.d.ts +24 -0
  17. package/dist/action/core/discover/antipatterns.d.ts.map +1 -0
  18. package/dist/action/core/discover/dependencies.d.ts +57 -0
  19. package/dist/action/core/discover/dependencies.d.ts.map +1 -0
  20. package/dist/action/core/discover/patterns.d.ts +38 -0
  21. package/dist/action/core/discover/patterns.d.ts.map +1 -0
  22. package/dist/action/core/discover/standards.d.ts +58 -0
  23. package/dist/action/core/discover/standards.d.ts.map +1 -0
  24. package/dist/action/core/domains/classifier.d.ts +41 -0
  25. package/dist/action/core/domains/classifier.d.ts.map +1 -0
  26. package/dist/action/core/domains/constants.d.ts +40 -0
  27. package/dist/action/core/domains/constants.d.ts.map +1 -0
  28. package/dist/action/core/domains/detector.d.ts +35 -0
  29. package/dist/action/core/domains/detector.d.ts.map +1 -0
  30. package/dist/action/core/integrate/integrator.d.ts +35 -0
  31. package/dist/action/core/integrate/integrator.d.ts.map +1 -0
  32. package/dist/action/core/links/checker.d.ts +64 -0
  33. package/dist/action/core/links/checker.d.ts.map +1 -0
  34. package/dist/action/core/links/tracker.d.ts +69 -0
  35. package/dist/action/core/links/tracker.d.ts.map +1 -0
  36. package/dist/action/core/maintain/orchestrator.d.ts +39 -0
  37. package/dist/action/core/maintain/orchestrator.d.ts.map +1 -0
  38. package/dist/action/core/metadata/generator.d.ts +26 -0
  39. package/dist/action/core/metadata/generator.d.ts.map +1 -0
  40. package/dist/action/core/metadata/schema.d.ts +201 -0
  41. package/dist/action/core/metadata/schema.d.ts.map +1 -0
  42. package/dist/action/core/metadata/sync.d.ts +36 -0
  43. package/dist/action/core/metadata/sync.d.ts.map +1 -0
  44. package/dist/action/generators/index-generator.d.ts +19 -0
  45. package/dist/action/generators/index-generator.d.ts.map +1 -0
  46. package/dist/action/generators/registry-generator.d.ts +11 -0
  47. package/dist/action/generators/registry-generator.d.ts.map +1 -0
  48. package/dist/action/generators/scaffold.d.ts +30 -0
  49. package/dist/action/generators/scaffold.d.ts.map +1 -0
  50. package/dist/action/generators/templates/document.d.ts +14 -0
  51. package/dist/action/generators/templates/document.d.ts.map +1 -0
  52. package/dist/action/generators/templates/domain-index.d.ts +6 -0
  53. package/dist/action/generators/templates/domain-index.d.ts.map +1 -0
  54. package/dist/action/generators/templates/domain-registry.d.ts +6 -0
  55. package/dist/action/generators/templates/domain-registry.d.ts.map +1 -0
  56. package/dist/action/index.d.ts +31 -0
  57. package/dist/action/index.d.ts.map +1 -0
  58. package/dist/action/index.js +17 -0
  59. package/dist/action/index.js.map +1 -0
  60. package/dist/action/package.json +3 -0
  61. package/dist/action/reports/audit-report.d.ts +15 -0
  62. package/dist/action/reports/audit-report.d.ts.map +1 -0
  63. package/dist/action/reports/health-report.d.ts +15 -0
  64. package/dist/action/reports/health-report.d.ts.map +1 -0
  65. package/dist/action/reports/link-report.d.ts +15 -0
  66. package/dist/action/reports/link-report.d.ts.map +1 -0
  67. package/dist/action/utils/frontmatter.d.ts +50 -0
  68. package/dist/action/utils/frontmatter.d.ts.map +1 -0
  69. package/dist/action/utils/glob.d.ts +63 -0
  70. package/dist/action/utils/glob.d.ts.map +1 -0
  71. package/dist/action/utils/logger.d.ts +42 -0
  72. package/dist/action/utils/logger.d.ts.map +1 -0
  73. package/dist/action/utils/markdown.d.ts +89 -0
  74. package/dist/action/utils/markdown.d.ts.map +1 -0
  75. package/dist/cli/index.d.ts +3 -0
  76. package/dist/cli/index.d.ts.map +1 -0
  77. package/dist/cli/index.js +287 -0
  78. package/dist/cli/index.js.map +1 -0
  79. package/dist/core/audit/auditor.d.ts +43 -0
  80. package/dist/core/audit/auditor.d.ts.map +1 -0
  81. package/dist/core/audit/auditor.js +273 -0
  82. package/dist/core/audit/auditor.js.map +1 -0
  83. package/dist/core/audit/rules.d.ts +37 -0
  84. package/dist/core/audit/rules.d.ts.map +1 -0
  85. package/dist/core/audit/rules.js +223 -0
  86. package/dist/core/audit/rules.js.map +1 -0
  87. package/dist/core/discover/antipatterns.d.ts +24 -0
  88. package/dist/core/discover/antipatterns.d.ts.map +1 -0
  89. package/dist/core/discover/antipatterns.js +354 -0
  90. package/dist/core/discover/antipatterns.js.map +1 -0
  91. package/dist/core/discover/dependencies.d.ts +57 -0
  92. package/dist/core/discover/dependencies.d.ts.map +1 -0
  93. package/dist/core/discover/dependencies.js +311 -0
  94. package/dist/core/discover/dependencies.js.map +1 -0
  95. package/dist/core/discover/patterns.d.ts +38 -0
  96. package/dist/core/discover/patterns.d.ts.map +1 -0
  97. package/dist/core/discover/patterns.js +371 -0
  98. package/dist/core/discover/patterns.js.map +1 -0
  99. package/dist/core/discover/standards.d.ts +58 -0
  100. package/dist/core/discover/standards.d.ts.map +1 -0
  101. package/dist/core/discover/standards.js +359 -0
  102. package/dist/core/discover/standards.js.map +1 -0
  103. package/dist/core/domains/classifier.d.ts +41 -0
  104. package/dist/core/domains/classifier.d.ts.map +1 -0
  105. package/dist/core/domains/classifier.js +208 -0
  106. package/dist/core/domains/classifier.js.map +1 -0
  107. package/dist/core/domains/constants.d.ts +40 -0
  108. package/dist/core/domains/constants.d.ts.map +1 -0
  109. package/dist/core/domains/constants.js +252 -0
  110. package/dist/core/domains/constants.js.map +1 -0
  111. package/dist/core/domains/detector.d.ts +35 -0
  112. package/dist/core/domains/detector.d.ts.map +1 -0
  113. package/dist/core/domains/detector.js +176 -0
  114. package/dist/core/domains/detector.js.map +1 -0
  115. package/dist/core/integrate/integrator.d.ts +35 -0
  116. package/dist/core/integrate/integrator.d.ts.map +1 -0
  117. package/dist/core/integrate/integrator.js +216 -0
  118. package/dist/core/integrate/integrator.js.map +1 -0
  119. package/dist/core/links/checker.d.ts +64 -0
  120. package/dist/core/links/checker.d.ts.map +1 -0
  121. package/dist/core/links/checker.js +190 -0
  122. package/dist/core/links/checker.js.map +1 -0
  123. package/dist/core/links/tracker.d.ts +69 -0
  124. package/dist/core/links/tracker.d.ts.map +1 -0
  125. package/dist/core/links/tracker.js +184 -0
  126. package/dist/core/links/tracker.js.map +1 -0
  127. package/dist/core/maintain/orchestrator.d.ts +39 -0
  128. package/dist/core/maintain/orchestrator.d.ts.map +1 -0
  129. package/dist/core/maintain/orchestrator.js +372 -0
  130. package/dist/core/maintain/orchestrator.js.map +1 -0
  131. package/dist/core/metadata/generator.d.ts +26 -0
  132. package/dist/core/metadata/generator.d.ts.map +1 -0
  133. package/dist/core/metadata/generator.js +221 -0
  134. package/dist/core/metadata/generator.js.map +1 -0
  135. package/dist/core/metadata/schema.d.ts +201 -0
  136. package/dist/core/metadata/schema.d.ts.map +1 -0
  137. package/dist/core/metadata/schema.js +184 -0
  138. package/dist/core/metadata/schema.js.map +1 -0
  139. package/dist/core/metadata/sync.d.ts +36 -0
  140. package/dist/core/metadata/sync.d.ts.map +1 -0
  141. package/dist/core/metadata/sync.js +195 -0
  142. package/dist/core/metadata/sync.js.map +1 -0
  143. package/dist/generators/index-generator.d.ts +19 -0
  144. package/dist/generators/index-generator.d.ts.map +1 -0
  145. package/dist/generators/index-generator.js +191 -0
  146. package/dist/generators/index-generator.js.map +1 -0
  147. package/dist/generators/registry-generator.d.ts +11 -0
  148. package/dist/generators/registry-generator.d.ts.map +1 -0
  149. package/dist/generators/registry-generator.js +156 -0
  150. package/dist/generators/registry-generator.js.map +1 -0
  151. package/dist/generators/scaffold.d.ts +30 -0
  152. package/dist/generators/scaffold.d.ts.map +1 -0
  153. package/dist/generators/scaffold.js +213 -0
  154. package/dist/generators/scaffold.js.map +1 -0
  155. package/dist/generators/templates/document.d.ts +14 -0
  156. package/dist/generators/templates/document.d.ts.map +1 -0
  157. package/dist/generators/templates/document.js +305 -0
  158. package/dist/generators/templates/document.js.map +1 -0
  159. package/dist/generators/templates/domain-index.d.ts +6 -0
  160. package/dist/generators/templates/domain-index.d.ts.map +1 -0
  161. package/dist/generators/templates/domain-index.js +68 -0
  162. package/dist/generators/templates/domain-index.js.map +1 -0
  163. package/dist/generators/templates/domain-registry.d.ts +6 -0
  164. package/dist/generators/templates/domain-registry.d.ts.map +1 -0
  165. package/dist/generators/templates/domain-registry.js +59 -0
  166. package/dist/generators/templates/domain-registry.js.map +1 -0
  167. package/dist/index.d.ts +32 -0
  168. package/dist/index.d.ts.map +1 -0
  169. package/dist/index.js +39 -0
  170. package/dist/index.js.map +1 -0
  171. package/dist/reports/audit-report.d.ts +15 -0
  172. package/dist/reports/audit-report.d.ts.map +1 -0
  173. package/dist/reports/audit-report.js +150 -0
  174. package/dist/reports/audit-report.js.map +1 -0
  175. package/dist/reports/health-report.d.ts +15 -0
  176. package/dist/reports/health-report.d.ts.map +1 -0
  177. package/dist/reports/health-report.js +175 -0
  178. package/dist/reports/health-report.js.map +1 -0
  179. package/dist/reports/link-report.d.ts +15 -0
  180. package/dist/reports/link-report.d.ts.map +1 -0
  181. package/dist/reports/link-report.js +165 -0
  182. package/dist/reports/link-report.js.map +1 -0
  183. package/dist/utils/frontmatter.d.ts +50 -0
  184. package/dist/utils/frontmatter.d.ts.map +1 -0
  185. package/dist/utils/frontmatter.js +93 -0
  186. package/dist/utils/frontmatter.js.map +1 -0
  187. package/dist/utils/glob.d.ts +63 -0
  188. package/dist/utils/glob.d.ts.map +1 -0
  189. package/dist/utils/glob.js +128 -0
  190. package/dist/utils/glob.js.map +1 -0
  191. package/dist/utils/logger.d.ts +42 -0
  192. package/dist/utils/logger.d.ts.map +1 -0
  193. package/dist/utils/logger.js +118 -0
  194. package/dist/utils/logger.js.map +1 -0
  195. package/dist/utils/markdown.d.ts +89 -0
  196. package/dist/utils/markdown.d.ts.map +1 -0
  197. package/dist/utils/markdown.js +192 -0
  198. package/dist/utils/markdown.js.map +1 -0
  199. package/package.json +100 -0
  200. package/templates/claude/CLAUDE.md +204 -0
@@ -0,0 +1,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"}