driftdetect-core 0.1.2 → 0.3.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 (193) hide show
  1. package/dist/boundaries/boundary-store.d.ts +92 -0
  2. package/dist/boundaries/boundary-store.d.ts.map +1 -0
  3. package/dist/boundaries/boundary-store.js +458 -0
  4. package/dist/boundaries/boundary-store.js.map +1 -0
  5. package/dist/boundaries/index.d.ts +8 -0
  6. package/dist/boundaries/index.d.ts.map +1 -0
  7. package/dist/boundaries/index.js +8 -0
  8. package/dist/boundaries/index.js.map +1 -0
  9. package/dist/boundaries/types.d.ts +237 -0
  10. package/dist/boundaries/types.d.ts.map +1 -0
  11. package/dist/boundaries/types.js +8 -0
  12. package/dist/boundaries/types.js.map +1 -0
  13. package/dist/dna/ai-context.d.ts +10 -0
  14. package/dist/dna/ai-context.d.ts.map +1 -0
  15. package/dist/dna/ai-context.js +46 -0
  16. package/dist/dna/ai-context.js.map +1 -0
  17. package/dist/dna/dna-analyzer.d.ts +34 -0
  18. package/dist/dna/dna-analyzer.d.ts.map +1 -0
  19. package/dist/dna/dna-analyzer.js +110 -0
  20. package/dist/dna/dna-analyzer.js.map +1 -0
  21. package/dist/dna/dna-store.d.ts +13 -0
  22. package/dist/dna/dna-store.d.ts.map +1 -0
  23. package/dist/dna/dna-store.js +43 -0
  24. package/dist/dna/dna-store.js.map +1 -0
  25. package/dist/dna/gene-extractors/animation-approach.d.ts +15 -0
  26. package/dist/dna/gene-extractors/animation-approach.d.ts.map +1 -0
  27. package/dist/dna/gene-extractors/animation-approach.js +97 -0
  28. package/dist/dna/gene-extractors/animation-approach.js.map +1 -0
  29. package/dist/dna/gene-extractors/base-extractor.d.ts +53 -0
  30. package/dist/dna/gene-extractors/base-extractor.d.ts.map +1 -0
  31. package/dist/dna/gene-extractors/base-extractor.js +76 -0
  32. package/dist/dna/gene-extractors/base-extractor.js.map +1 -0
  33. package/dist/dna/gene-extractors/index.d.ts +16 -0
  34. package/dist/dna/gene-extractors/index.d.ts.map +1 -0
  35. package/dist/dna/gene-extractors/index.js +38 -0
  36. package/dist/dna/gene-extractors/index.js.map +1 -0
  37. package/dist/dna/gene-extractors/responsive-approach.d.ts +10 -0
  38. package/dist/dna/gene-extractors/responsive-approach.d.ts.map +1 -0
  39. package/dist/dna/gene-extractors/responsive-approach.js +30 -0
  40. package/dist/dna/gene-extractors/responsive-approach.js.map +1 -0
  41. package/dist/dna/gene-extractors/spacing-philosophy.d.ts +10 -0
  42. package/dist/dna/gene-extractors/spacing-philosophy.d.ts.map +1 -0
  43. package/dist/dna/gene-extractors/spacing-philosophy.js +30 -0
  44. package/dist/dna/gene-extractors/spacing-philosophy.js.map +1 -0
  45. package/dist/dna/gene-extractors/state-styling.d.ts +10 -0
  46. package/dist/dna/gene-extractors/state-styling.d.ts.map +1 -0
  47. package/dist/dna/gene-extractors/state-styling.js +29 -0
  48. package/dist/dna/gene-extractors/state-styling.js.map +1 -0
  49. package/dist/dna/gene-extractors/theming.d.ts +10 -0
  50. package/dist/dna/gene-extractors/theming.d.ts.map +1 -0
  51. package/dist/dna/gene-extractors/theming.js +30 -0
  52. package/dist/dna/gene-extractors/theming.js.map +1 -0
  53. package/dist/dna/gene-extractors/variant-handling.d.ts +13 -0
  54. package/dist/dna/gene-extractors/variant-handling.d.ts.map +1 -0
  55. package/dist/dna/gene-extractors/variant-handling.js +38 -0
  56. package/dist/dna/gene-extractors/variant-handling.js.map +1 -0
  57. package/dist/dna/health-calculator.d.ts +21 -0
  58. package/dist/dna/health-calculator.d.ts.map +1 -0
  59. package/dist/dna/health-calculator.js +113 -0
  60. package/dist/dna/health-calculator.js.map +1 -0
  61. package/dist/dna/index.d.ts +21 -0
  62. package/dist/dna/index.d.ts.map +1 -0
  63. package/dist/dna/index.js +19 -0
  64. package/dist/dna/index.js.map +1 -0
  65. package/dist/dna/mutation-detector.d.ts +10 -0
  66. package/dist/dna/mutation-detector.d.ts.map +1 -0
  67. package/dist/dna/mutation-detector.js +39 -0
  68. package/dist/dna/mutation-detector.js.map +1 -0
  69. package/dist/dna/playbook-generator.d.ts +6 -0
  70. package/dist/dna/playbook-generator.d.ts.map +1 -0
  71. package/dist/dna/playbook-generator.js +53 -0
  72. package/dist/dna/playbook-generator.js.map +1 -0
  73. package/dist/dna/types.d.ts +95 -0
  74. package/dist/dna/types.d.ts.map +1 -0
  75. package/dist/dna/types.js +8 -0
  76. package/dist/dna/types.js.map +1 -0
  77. package/dist/index.d.ts +7 -0
  78. package/dist/index.d.ts.map +1 -1
  79. package/dist/index.js +10 -0
  80. package/dist/index.js.map +1 -1
  81. package/dist/parsers/parser-manager.d.ts.map +1 -1
  82. package/dist/parsers/parser-manager.js +2 -0
  83. package/dist/parsers/parser-manager.js.map +1 -1
  84. package/dist/parsers/tree-sitter/config.d.ts +82 -0
  85. package/dist/parsers/tree-sitter/config.d.ts.map +1 -0
  86. package/dist/parsers/tree-sitter/config.js +200 -0
  87. package/dist/parsers/tree-sitter/config.js.map +1 -0
  88. package/dist/parsers/tree-sitter/csharp-ast-converter.d.ts +64 -0
  89. package/dist/parsers/tree-sitter/csharp-ast-converter.d.ts.map +1 -0
  90. package/dist/parsers/tree-sitter/csharp-ast-converter.js +271 -0
  91. package/dist/parsers/tree-sitter/csharp-ast-converter.js.map +1 -0
  92. package/dist/parsers/tree-sitter/csharp-loader.d.ts +43 -0
  93. package/dist/parsers/tree-sitter/csharp-loader.d.ts.map +1 -0
  94. package/dist/parsers/tree-sitter/csharp-loader.js +146 -0
  95. package/dist/parsers/tree-sitter/csharp-loader.js.map +1 -0
  96. package/dist/parsers/tree-sitter/index.d.ts +26 -0
  97. package/dist/parsers/tree-sitter/index.d.ts.map +1 -0
  98. package/dist/parsers/tree-sitter/index.js +47 -0
  99. package/dist/parsers/tree-sitter/index.js.map +1 -0
  100. package/dist/parsers/tree-sitter/java/annotation-extractor.d.ts +79 -0
  101. package/dist/parsers/tree-sitter/java/annotation-extractor.d.ts.map +1 -0
  102. package/dist/parsers/tree-sitter/java/annotation-extractor.js +540 -0
  103. package/dist/parsers/tree-sitter/java/annotation-extractor.js.map +1 -0
  104. package/dist/parsers/tree-sitter/java/class-extractor.d.ts +40 -0
  105. package/dist/parsers/tree-sitter/java/class-extractor.d.ts.map +1 -0
  106. package/dist/parsers/tree-sitter/java/class-extractor.js +770 -0
  107. package/dist/parsers/tree-sitter/java/class-extractor.js.map +1 -0
  108. package/dist/parsers/tree-sitter/java/index.d.ts +14 -0
  109. package/dist/parsers/tree-sitter/java/index.d.ts.map +1 -0
  110. package/dist/parsers/tree-sitter/java/index.js +25 -0
  111. package/dist/parsers/tree-sitter/java/index.js.map +1 -0
  112. package/dist/parsers/tree-sitter/java/method-extractor.d.ts +88 -0
  113. package/dist/parsers/tree-sitter/java/method-extractor.d.ts.map +1 -0
  114. package/dist/parsers/tree-sitter/java/method-extractor.js +551 -0
  115. package/dist/parsers/tree-sitter/java/method-extractor.js.map +1 -0
  116. package/dist/parsers/tree-sitter/java/types.d.ts +545 -0
  117. package/dist/parsers/tree-sitter/java/types.d.ts.map +1 -0
  118. package/dist/parsers/tree-sitter/java/types.js +81 -0
  119. package/dist/parsers/tree-sitter/java/types.js.map +1 -0
  120. package/dist/parsers/tree-sitter/loader.d.ts +50 -0
  121. package/dist/parsers/tree-sitter/loader.d.ts.map +1 -0
  122. package/dist/parsers/tree-sitter/loader.js +156 -0
  123. package/dist/parsers/tree-sitter/loader.js.map +1 -0
  124. package/dist/parsers/tree-sitter/pydantic/config-extractor.d.ts +78 -0
  125. package/dist/parsers/tree-sitter/pydantic/config-extractor.d.ts.map +1 -0
  126. package/dist/parsers/tree-sitter/pydantic/config-extractor.js +278 -0
  127. package/dist/parsers/tree-sitter/pydantic/config-extractor.js.map +1 -0
  128. package/dist/parsers/tree-sitter/pydantic/constraint-parser.d.ts +84 -0
  129. package/dist/parsers/tree-sitter/pydantic/constraint-parser.d.ts.map +1 -0
  130. package/dist/parsers/tree-sitter/pydantic/constraint-parser.js +321 -0
  131. package/dist/parsers/tree-sitter/pydantic/constraint-parser.js.map +1 -0
  132. package/dist/parsers/tree-sitter/pydantic/field-extractor.d.ts +74 -0
  133. package/dist/parsers/tree-sitter/pydantic/field-extractor.d.ts.map +1 -0
  134. package/dist/parsers/tree-sitter/pydantic/field-extractor.js +285 -0
  135. package/dist/parsers/tree-sitter/pydantic/field-extractor.js.map +1 -0
  136. package/dist/parsers/tree-sitter/pydantic/index.d.ts +18 -0
  137. package/dist/parsers/tree-sitter/pydantic/index.d.ts.map +1 -0
  138. package/dist/parsers/tree-sitter/pydantic/index.js +23 -0
  139. package/dist/parsers/tree-sitter/pydantic/index.js.map +1 -0
  140. package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.d.ts +70 -0
  141. package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.d.ts.map +1 -0
  142. package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.js +251 -0
  143. package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.js.map +1 -0
  144. package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.d.ts +102 -0
  145. package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.d.ts.map +1 -0
  146. package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.js +399 -0
  147. package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.js.map +1 -0
  148. package/dist/parsers/tree-sitter/pydantic/type-resolver.d.ts +89 -0
  149. package/dist/parsers/tree-sitter/pydantic/type-resolver.d.ts.map +1 -0
  150. package/dist/parsers/tree-sitter/pydantic/type-resolver.js +426 -0
  151. package/dist/parsers/tree-sitter/pydantic/type-resolver.js.map +1 -0
  152. package/dist/parsers/tree-sitter/pydantic/types.d.ts +177 -0
  153. package/dist/parsers/tree-sitter/pydantic/types.d.ts.map +1 -0
  154. package/dist/parsers/tree-sitter/pydantic/types.js +139 -0
  155. package/dist/parsers/tree-sitter/pydantic/types.js.map +1 -0
  156. package/dist/parsers/tree-sitter/pydantic/validator-extractor.d.ts +88 -0
  157. package/dist/parsers/tree-sitter/pydantic/validator-extractor.d.ts.map +1 -0
  158. package/dist/parsers/tree-sitter/pydantic/validator-extractor.js +315 -0
  159. package/dist/parsers/tree-sitter/pydantic/validator-extractor.js.map +1 -0
  160. package/dist/parsers/tree-sitter/python-ast-converter.d.ts +140 -0
  161. package/dist/parsers/tree-sitter/python-ast-converter.d.ts.map +1 -0
  162. package/dist/parsers/tree-sitter/python-ast-converter.js +360 -0
  163. package/dist/parsers/tree-sitter/python-ast-converter.js.map +1 -0
  164. package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.d.ts +465 -0
  165. package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.d.ts.map +1 -0
  166. package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.js +1146 -0
  167. package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.js.map +1 -0
  168. package/dist/parsers/tree-sitter/tree-sitter-python-parser.d.ts +86 -0
  169. package/dist/parsers/tree-sitter/tree-sitter-python-parser.d.ts.map +1 -0
  170. package/dist/parsers/tree-sitter/tree-sitter-python-parser.js +177 -0
  171. package/dist/parsers/tree-sitter/tree-sitter-python-parser.js.map +1 -0
  172. package/dist/parsers/tree-sitter/types.d.ts +399 -0
  173. package/dist/parsers/tree-sitter/types.d.ts.map +1 -0
  174. package/dist/parsers/tree-sitter/types.js +20 -0
  175. package/dist/parsers/tree-sitter/types.js.map +1 -0
  176. package/dist/parsers/types.d.ts +1 -1
  177. package/dist/parsers/types.d.ts.map +1 -1
  178. package/dist/scanner/file-walker.d.ts.map +1 -1
  179. package/dist/scanner/file-walker.js +5 -0
  180. package/dist/scanner/file-walker.js.map +1 -1
  181. package/dist/store/history-store.d.ts +85 -269
  182. package/dist/store/history-store.d.ts.map +1 -1
  183. package/dist/store/history-store.js +272 -624
  184. package/dist/store/history-store.js.map +1 -1
  185. package/dist/types/index.d.ts +1 -0
  186. package/dist/types/index.d.ts.map +1 -1
  187. package/dist/types/index.js +2 -0
  188. package/dist/types/index.js.map +1 -1
  189. package/dist/types/java-type-mapping.d.ts +79 -0
  190. package/dist/types/java-type-mapping.d.ts.map +1 -0
  191. package/dist/types/java-type-mapping.js +290 -0
  192. package/dist/types/java-type-mapping.js.map +1 -0
  193. package/package.json +8 -3
@@ -0,0 +1,237 @@
1
+ /**
2
+ * Data Boundaries Types
3
+ *
4
+ * Types for tracking which code accesses which database tables/fields,
5
+ * and optionally enforcing access boundaries.
6
+ */
7
+ /**
8
+ * Operation type for data access
9
+ */
10
+ export type DataOperation = 'read' | 'write' | 'delete' | 'unknown';
11
+ /**
12
+ * Sensitivity classification for fields
13
+ */
14
+ export type SensitivityType = 'pii' | 'credentials' | 'financial' | 'health' | 'unknown';
15
+ /**
16
+ * ORM framework identifier
17
+ */
18
+ export type ORMFramework = 'efcore' | 'django' | 'sqlalchemy' | 'prisma' | 'typeorm' | 'sequelize' | 'drizzle' | 'knex' | 'unknown';
19
+ /**
20
+ * A detected ORM model/entity
21
+ */
22
+ export interface ORMModel {
23
+ /** Model/class name (e.g., "User") */
24
+ name: string;
25
+ /** Mapped table name if detectable (e.g., "users") */
26
+ tableName: string | null;
27
+ /** Known fields/columns */
28
+ fields: string[];
29
+ /** Source file */
30
+ file: string;
31
+ /** Line number of definition */
32
+ line: number;
33
+ /** Detected ORM framework */
34
+ framework: ORMFramework;
35
+ /** Detection confidence */
36
+ confidence: number;
37
+ }
38
+ /**
39
+ * A sensitive field detection
40
+ */
41
+ export interface SensitiveField {
42
+ /** Field/column name */
43
+ field: string;
44
+ /** Table name if known */
45
+ table: string | null;
46
+ /** Sensitivity classification */
47
+ sensitivityType: SensitivityType;
48
+ /** Source file where detected */
49
+ file: string;
50
+ /** Line number */
51
+ line: number;
52
+ /** Detection confidence */
53
+ confidence: number;
54
+ }
55
+ /**
56
+ * A data access point in code
57
+ */
58
+ export interface DataAccessPoint {
59
+ /** Unique identifier */
60
+ id: string;
61
+ /** Table/model being accessed */
62
+ table: string;
63
+ /** Fields accessed (if detectable) */
64
+ fields: string[];
65
+ /** Type of operation */
66
+ operation: DataOperation;
67
+ /** Source file */
68
+ file: string;
69
+ /** Line number */
70
+ line: number;
71
+ /** Column number */
72
+ column: number;
73
+ /** Surrounding code context */
74
+ context: string;
75
+ /** Whether this is raw SQL vs ORM */
76
+ isRawSql: boolean;
77
+ /** Detection confidence */
78
+ confidence: number;
79
+ }
80
+ /**
81
+ * Table access information
82
+ */
83
+ export interface TableAccessInfo {
84
+ /** Table name */
85
+ name: string;
86
+ /** Associated ORM model if known */
87
+ model: string | null;
88
+ /** Known fields */
89
+ fields: string[];
90
+ /** Sensitive fields in this table */
91
+ sensitiveFields: SensitiveField[];
92
+ /** All access points to this table */
93
+ accessedBy: DataAccessPoint[];
94
+ }
95
+ /**
96
+ * File access information
97
+ */
98
+ export interface FileAccessInfo {
99
+ /** File path */
100
+ file: string;
101
+ /** Tables accessed from this file */
102
+ tables: string[];
103
+ /** All access points in this file */
104
+ accessPoints: DataAccessPoint[];
105
+ }
106
+ /**
107
+ * Complete data access map
108
+ */
109
+ export interface DataAccessMap {
110
+ /** Schema version */
111
+ version: '1.0';
112
+ /** Generation timestamp */
113
+ generatedAt: string;
114
+ /** Project root */
115
+ projectRoot: string;
116
+ /** Discovered ORM models */
117
+ models: ORMModel[];
118
+ /** Table-centric access information */
119
+ tables: Record<string, TableAccessInfo>;
120
+ /** All access points indexed by ID */
121
+ accessPoints: Record<string, DataAccessPoint>;
122
+ /** Detected sensitive fields */
123
+ sensitiveFields: SensitiveField[];
124
+ /** Statistics */
125
+ stats: {
126
+ totalTables: number;
127
+ totalAccessPoints: number;
128
+ totalSensitiveFields: number;
129
+ totalModels: number;
130
+ };
131
+ }
132
+ /**
133
+ * Severity level for boundary violations
134
+ */
135
+ export type BoundarySeverity = 'error' | 'warning' | 'info';
136
+ /**
137
+ * A boundary rule definition
138
+ */
139
+ export interface BoundaryRule {
140
+ /** Unique rule identifier */
141
+ id: string;
142
+ /** Human-readable description */
143
+ description: string;
144
+ /** Field-level restrictions (e.g., ["users.ssn", "users.password_hash"]) */
145
+ fields?: string[];
146
+ /** Table-level restrictions (e.g., ["audit_logs", "payments"]) */
147
+ tables?: string[];
148
+ /** Operation restrictions */
149
+ operations?: DataOperation[];
150
+ /** Glob patterns for allowed file paths */
151
+ allowedPaths: string[];
152
+ /** Glob patterns for excluded paths (e.g., tests) */
153
+ excludePaths?: string[];
154
+ /** Violation severity */
155
+ severity: BoundarySeverity;
156
+ /** Whether rule is enabled */
157
+ enabled?: boolean;
158
+ }
159
+ /**
160
+ * Sensitivity tier configuration
161
+ */
162
+ export interface SensitivityTiers {
163
+ /** Critical fields - strictest protection */
164
+ critical: string[];
165
+ /** Sensitive fields - moderate protection */
166
+ sensitive: string[];
167
+ /** General fields - no restrictions (default) */
168
+ general: string[];
169
+ }
170
+ /**
171
+ * Complete boundary rules configuration
172
+ */
173
+ export interface BoundaryRules {
174
+ /** Schema version */
175
+ version: '1.0';
176
+ /** Sensitivity tier definitions */
177
+ sensitivity: SensitivityTiers;
178
+ /** Boundary rules */
179
+ boundaries: BoundaryRule[];
180
+ /** Global exclude patterns (e.g., test files) */
181
+ globalExcludes?: string[];
182
+ }
183
+ /**
184
+ * A boundary violation
185
+ */
186
+ export interface BoundaryViolation {
187
+ /** Violation ID */
188
+ id: string;
189
+ /** Rule that was violated */
190
+ ruleId: string;
191
+ /** Rule description */
192
+ ruleDescription: string;
193
+ /** Severity */
194
+ severity: BoundarySeverity;
195
+ /** File where violation occurred */
196
+ file: string;
197
+ /** Line number */
198
+ line: number;
199
+ /** Column number */
200
+ column: number;
201
+ /** Violation message */
202
+ message: string;
203
+ /** Table accessed */
204
+ table: string;
205
+ /** Fields accessed */
206
+ fields: string[];
207
+ /** Operation performed */
208
+ operation: DataOperation;
209
+ /** Suggested fix */
210
+ suggestion?: string;
211
+ }
212
+ /**
213
+ * BoundaryStore configuration
214
+ */
215
+ export interface BoundaryStoreConfig {
216
+ /** Project root directory */
217
+ rootDir: string;
218
+ }
219
+ /**
220
+ * Boundary scan result
221
+ */
222
+ export interface BoundaryScanResult {
223
+ /** Discovered access map */
224
+ accessMap: DataAccessMap;
225
+ /** Violations (if rules defined) */
226
+ violations: BoundaryViolation[];
227
+ /** Scan statistics */
228
+ stats: {
229
+ filesScanned: number;
230
+ tablesFound: number;
231
+ accessPointsFound: number;
232
+ sensitiveFieldsFound: number;
233
+ violationsFound: number;
234
+ scanDurationMs: number;
235
+ };
236
+ }
237
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/boundaries/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Data Boundaries Types
3
+ *
4
+ * Types for tracking which code accesses which database tables/fields,
5
+ * and optionally enforcing access boundaries.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/boundaries/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,10 @@
1
+ import type { StylingDNAProfile } from './types.js';
2
+ export type ContextLevel = 1 | 2 | 3 | 4;
3
+ export declare class AIContextBuilder {
4
+ build(profile: StylingDNAProfile, level?: ContextLevel): string;
5
+ private buildLevel1;
6
+ private buildLevel2;
7
+ private buildLevel3;
8
+ private buildLevel4;
9
+ }
10
+ //# sourceMappingURL=ai-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-context.d.ts","sourceRoot":"","sources":["../../src/dna/ai-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEzC,qBAAa,gBAAgB;IAC3B,KAAK,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,GAAE,YAAgB,GAAG,MAAM;IAUlE,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,WAAW;CAGpB"}
@@ -0,0 +1,46 @@
1
+ export class AIContextBuilder {
2
+ build(profile, level = 3) {
3
+ switch (level) {
4
+ case 1: return this.buildLevel1(profile);
5
+ case 2: return this.buildLevel2(profile);
6
+ case 3: return this.buildLevel3(profile);
7
+ case 4: return this.buildLevel4(profile);
8
+ default: return this.buildLevel3(profile);
9
+ }
10
+ }
11
+ buildLevel1(p) {
12
+ const fw = p.summary.dominantFramework;
13
+ const genes = Object.values(p.genes).filter(g => g.dominant).map(g => g.dominant?.name).join(', ');
14
+ return `${fw} codebase using ${genes}. Health: ${p.summary.healthScore}/100.`;
15
+ }
16
+ buildLevel2(p) {
17
+ const lines = ['## Styling Conventions', '', '| Concern | Approach | Confidence |', '|---------|----------|------------|'];
18
+ for (const g of Object.values(p.genes)) {
19
+ lines.push(`| ${g.name} | ${g.dominant?.name ?? 'None'} | ${Math.round(g.confidence * 100)}% |`);
20
+ }
21
+ lines.push('', `Health Score: ${p.summary.healthScore}/100`);
22
+ return lines.join('\n');
23
+ }
24
+ buildLevel3(p) {
25
+ const lines = [`# Styling Conventions (${p.summary.dominantFramework})`, ''];
26
+ for (const g of Object.values(p.genes)) {
27
+ if (!g.dominant)
28
+ continue;
29
+ lines.push(`## ${g.name}`, `Use ${g.dominant.name}:`, '```tsx');
30
+ const ex = g.dominant.examples[0];
31
+ if (ex)
32
+ lines.push(ex.code);
33
+ lines.push('```', '');
34
+ }
35
+ if (p.mutations.length > 0) {
36
+ lines.push('---', `⚠️ ${p.mutations.length} mutations detected`);
37
+ for (const m of p.mutations.slice(0, 3))
38
+ lines.push(`- ${m.file}: ${m.actual}`);
39
+ }
40
+ return lines.join('\n');
41
+ }
42
+ buildLevel4(p) {
43
+ return JSON.stringify(p, null, 2);
44
+ }
45
+ }
46
+ //# sourceMappingURL=ai-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-context.js","sourceRoot":"","sources":["../../src/dna/ai-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { StylingDNAProfile, DNAThresholds } from './types.js';
2
+ export interface DNAAnalyzerConfig {
3
+ rootDir: string;
4
+ componentPaths?: string[];
5
+ excludePaths?: string[];
6
+ thresholds?: Partial<DNAThresholds>;
7
+ verbose?: boolean;
8
+ }
9
+ export interface AnalysisResult {
10
+ profile: StylingDNAProfile;
11
+ stats: {
12
+ totalFiles: number;
13
+ componentFiles: number;
14
+ filesAnalyzed: number;
15
+ duration: number;
16
+ genesAnalyzed: number;
17
+ };
18
+ errors: string[];
19
+ }
20
+ export declare class DNAAnalyzer {
21
+ private readonly config;
22
+ private readonly thresholds;
23
+ private extractors;
24
+ private healthCalculator;
25
+ private mutationDetector;
26
+ private initialized;
27
+ constructor(config: DNAAnalyzerConfig);
28
+ initialize(): Promise<void>;
29
+ analyze(files?: Map<string, string>): Promise<AnalysisResult>;
30
+ private discoverFiles;
31
+ private walk;
32
+ private detectFramework;
33
+ }
34
+ //# sourceMappingURL=dna-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dna-analyzer.d.ts","sourceRoot":"","sources":["../../src/dna/dna-analyzer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAA8C,aAAa,EAAE,MAAM,YAAY,CAAC;AAM/G,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IACtH,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,UAAU,CAA6C;IAC/D,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,iBAAiB;IAO/B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;YA0BrD,aAAa;YAUb,IAAI;IASlB,OAAO,CAAC,eAAe;CAQxB"}
@@ -0,0 +1,110 @@
1
+ import * as fs from 'node:fs/promises';
2
+ import * as path from 'node:path';
3
+ import { DNA_VERSION, DEFAULT_DNA_STORE_CONFIG, DEFAULT_DNA_THRESHOLDS } from './types.js';
4
+ import { createAllGeneExtractors } from './gene-extractors/index.js';
5
+ import { HealthCalculator } from './health-calculator.js';
6
+ import { MutationDetector } from './mutation-detector.js';
7
+ export class DNAAnalyzer {
8
+ config;
9
+ thresholds;
10
+ extractors = new Map();
11
+ healthCalculator;
12
+ mutationDetector;
13
+ initialized = false;
14
+ constructor(config) {
15
+ this.config = { componentPaths: DEFAULT_DNA_STORE_CONFIG.componentPaths, excludePaths: DEFAULT_DNA_STORE_CONFIG.excludePaths, ...config };
16
+ this.thresholds = { ...DEFAULT_DNA_THRESHOLDS, ...config.thresholds };
17
+ this.healthCalculator = new HealthCalculator(this.thresholds);
18
+ this.mutationDetector = new MutationDetector(this.thresholds);
19
+ }
20
+ async initialize() {
21
+ if (this.initialized)
22
+ return;
23
+ this.extractors = createAllGeneExtractors();
24
+ this.initialized = true;
25
+ }
26
+ async analyze(files) {
27
+ if (!this.initialized)
28
+ await this.initialize();
29
+ const startTime = Date.now();
30
+ const errors = [];
31
+ const fileMap = files ?? await this.discoverFiles();
32
+ const genes = {};
33
+ for (const [geneId, extractor] of this.extractors) {
34
+ try {
35
+ genes[geneId] = await extractor.analyze(fileMap);
36
+ }
37
+ catch (e) {
38
+ errors.push(`Error analyzing ${geneId}: ${e instanceof Error ? e.message : String(e)}`);
39
+ genes[geneId] = { id: geneId, name: extractor.geneName, description: extractor.geneDescription, dominant: null, alleles: [], confidence: 0, consistency: 0, exemplars: [] };
40
+ }
41
+ }
42
+ const mutations = this.mutationDetector.detectMutations(genes, fileMap);
43
+ const healthScore = this.healthCalculator.calculateHealthScore(genes, mutations);
44
+ const geneticDiversity = this.healthCalculator.calculateGeneticDiversity(genes);
45
+ const dominantFramework = this.detectFramework(genes, fileMap);
46
+ let componentCount = 0;
47
+ const firstGene = Object.values(genes)[0];
48
+ if (firstGene)
49
+ componentCount = firstGene.alleles.reduce((s, a) => s + a.fileCount, 0);
50
+ const summary = { totalComponentsAnalyzed: componentCount, totalFilesAnalyzed: fileMap.size, healthScore, geneticDiversity, dominantFramework, lastUpdated: new Date().toISOString() };
51
+ const profile = { version: DNA_VERSION, generatedAt: new Date().toISOString(), projectRoot: this.config.rootDir, summary, genes, mutations, evolution: [] };
52
+ return { profile, stats: { totalFiles: fileMap.size, componentFiles: componentCount, filesAnalyzed: fileMap.size, duration: Date.now() - startTime, genesAnalyzed: this.extractors.size }, errors };
53
+ }
54
+ async discoverFiles() {
55
+ const fileMap = new Map();
56
+ const exts = ['.tsx', '.jsx', '.vue', '.svelte'];
57
+ for (const cp of this.config.componentPaths ?? []) {
58
+ const fp = path.join(this.config.rootDir, cp);
59
+ try {
60
+ await this.walk(fp, async (f) => { if (exts.some(e => f.endsWith(e))) {
61
+ const rel = path.relative(this.config.rootDir, f);
62
+ try {
63
+ fileMap.set(rel, await fs.readFile(f, 'utf-8'));
64
+ }
65
+ catch { }
66
+ } });
67
+ }
68
+ catch { }
69
+ }
70
+ return fileMap;
71
+ }
72
+ async walk(dir, cb) {
73
+ const entries = await fs.readdir(dir, { withFileTypes: true });
74
+ for (const e of entries) {
75
+ const fp = path.join(dir, e.name);
76
+ if (e.isDirectory() && e.name !== 'node_modules' && !e.name.startsWith('.'))
77
+ await this.walk(fp, cb);
78
+ else if (e.isFile())
79
+ await cb(fp);
80
+ }
81
+ }
82
+ detectFramework(genes, files) {
83
+ const scores = { tailwind: 0, 'css-modules': 0, 'styled-components': 0, emotion: 0, 'vanilla-css': 0, scss: 0, mixed: 0 };
84
+ for (const g of Object.values(genes))
85
+ for (const a of g.alleles) {
86
+ if (a.id.startsWith('tailwind'))
87
+ scores.tailwind += a.frequency * a.fileCount;
88
+ if (a.id.includes('styled'))
89
+ scores['styled-components'] += a.frequency * a.fileCount;
90
+ }
91
+ for (const c of files.values()) {
92
+ if (/className\s*=\s*["'`][^"'`]*\b(flex|p-|m-|bg-)/.test(c))
93
+ scores.tailwind++;
94
+ if (/styled-components/.test(c))
95
+ scores['styled-components'] += 2;
96
+ if (/@emotion/.test(c))
97
+ scores.emotion += 2;
98
+ if (/\.module\.css/.test(c))
99
+ scores['css-modules'] += 2;
100
+ }
101
+ let max = 0, dom = 'vanilla-css';
102
+ for (const [f, s] of Object.entries(scores))
103
+ if (s > max) {
104
+ max = s;
105
+ dom = f;
106
+ }
107
+ return Object.values(scores).filter(s => s > max * 0.3).length > 1 ? 'mixed' : dom;
108
+ }
109
+ }
110
+ //# sourceMappingURL=dna-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dna-analyzer.js","sourceRoot":"","sources":["../../src/dna/dna-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAC3F,OAAO,EAAE,uBAAuB,EAA0B,MAAM,4BAA4B,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAgB1D,MAAM,OAAO,WAAW;IACL,MAAM,CAAoB;IAC1B,UAAU,CAAgB;IACnC,UAAU,GAAmC,IAAI,GAAG,EAAE,CAAC;IACvD,gBAAgB,CAAmB;IACnC,gBAAgB,CAAmB;IACnC,WAAW,GAAG,KAAK,CAAC;IAE5B,YAAY,MAAyB;QACnC,IAAI,CAAC,MAAM,GAAG,EAAE,cAAc,EAAE,wBAAwB,CAAC,cAAc,EAAE,YAAY,EAAE,wBAAwB,CAAC,YAAY,EAAE,GAAG,MAAM,EAAE,CAAC;QAC1I,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,sBAAsB,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QACtE,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9D,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAC7B,IAAI,CAAC,UAAU,GAAG,uBAAuB,EAAE,CAAC;QAC5C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAA2B;QACvC,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,KAAK,IAAI,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QACpD,MAAM,KAAK,GAAyB,EAA0B,CAAC;QAE/D,KAAK,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClD,IAAI,CAAC;gBAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAAC,CAAC;YACzD,OAAO,CAAC,EAAE,CAAC;gBAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,MAAM,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;YAAC,CAAC;QACrR,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACxE,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACjF,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;QAChF,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC/D,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,SAAS;YAAE,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAEvF,MAAM,OAAO,GAAe,EAAE,uBAAuB,EAAE,cAAc,EAAE,kBAAkB,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QACnM,MAAM,OAAO,GAAsB,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;QAE/K,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC;IACtM,CAAC;IAEO,KAAK,CAAC,aAAa;QACzB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC1C,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACjD,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,EAAE,CAAC;YAClD,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC;gBAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAAC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBAAC,IAAI,CAAC;wBAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAA,CAAC;gBAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACrN,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,EAAgC;QAC9D,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;iBAChG,IAAI,CAAC,CAAC,MAAM,EAAE;gBAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,KAA2B,EAAE,KAA0B;QAC7E,MAAM,MAAM,GAAqC,EAAE,QAAQ,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAC5J,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gBAAC,IAAI,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;oBAAE,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;gBAAC,IAAI,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAAE,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;YAAC,CAAC;QAC1O,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAAC,IAAI,gDAAgD,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;YAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;YAAC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAC7R,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAqB,aAAa,CAAC;QACnD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;gBAAC,GAAG,GAAG,CAAC,CAAC;gBAAC,GAAG,GAAG,CAAqB,CAAC;YAAC,CAAC;QACnG,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACrF,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import type { StylingDNAProfile, DNAStoreConfig } from './types.js';
2
+ export type DNAStoreEvents = 'saved' | 'loaded' | 'error';
3
+ export declare class DNAStore {
4
+ private readonly config;
5
+ private profile;
6
+ constructor(config?: Partial<DNAStoreConfig>);
7
+ initialize(): Promise<void>;
8
+ load(): Promise<StylingDNAProfile | null>;
9
+ save(profile: StylingDNAProfile): Promise<void>;
10
+ getProfile(): StylingDNAProfile | null;
11
+ getConfig(): DNAStoreConfig;
12
+ }
13
+ //# sourceMappingURL=dna-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dna-store.d.ts","sourceRoot":"","sources":["../../src/dna/dna-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAkB,MAAM,YAAY,CAAC;AAGpF,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE1D,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,OAAO,CAAkC;gBAErC,MAAM,GAAE,OAAO,CAAC,cAAc,CAAM;IAE1C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,IAAI,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IASzC,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBrD,UAAU,IAAI,iBAAiB,GAAG,IAAI;IACtC,SAAS,IAAI,cAAc;CAC5B"}
@@ -0,0 +1,43 @@
1
+ import * as fs from 'node:fs/promises';
2
+ import * as path from 'node:path';
3
+ import { DEFAULT_DNA_STORE_CONFIG } from './types.js';
4
+ export class DNAStore {
5
+ config;
6
+ profile = null;
7
+ constructor(config = {}) { this.config = { ...DEFAULT_DNA_STORE_CONFIG, ...config }; }
8
+ async initialize() {
9
+ const dnaDir = path.join(this.config.rootDir, '.drift', 'dna');
10
+ await fs.mkdir(dnaDir, { recursive: true });
11
+ await this.load();
12
+ }
13
+ async load() {
14
+ const filePath = path.join(this.config.rootDir, '.drift', 'dna', 'styling.json');
15
+ try {
16
+ const content = await fs.readFile(filePath, 'utf-8');
17
+ this.profile = JSON.parse(content);
18
+ return this.profile;
19
+ }
20
+ catch {
21
+ return null;
22
+ }
23
+ }
24
+ async save(profile) {
25
+ const dnaDir = path.join(this.config.rootDir, '.drift', 'dna');
26
+ await fs.mkdir(dnaDir, { recursive: true });
27
+ const filePath = path.join(dnaDir, 'styling.json');
28
+ if (this.profile) {
29
+ const entry = {
30
+ timestamp: new Date().toISOString(),
31
+ healthScore: profile.summary.healthScore,
32
+ geneticDiversity: profile.summary.geneticDiversity,
33
+ changes: [],
34
+ };
35
+ profile.evolution = [...(this.profile.evolution ?? []), entry].slice(-50);
36
+ }
37
+ this.profile = profile;
38
+ await fs.writeFile(filePath, JSON.stringify(profile, null, 2));
39
+ }
40
+ getProfile() { return this.profile; }
41
+ getConfig() { return this.config; }
42
+ }
43
+ //# sourceMappingURL=dna-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dna-store.js","sourceRoot":"","sources":["../../src/dna/dna-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAItD,MAAM,OAAO,QAAQ;IACF,MAAM,CAAiB;IAChC,OAAO,GAA6B,IAAI,CAAC;IAEjD,YAAY,SAAkC,EAAE,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,wBAAwB,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;IAE/G,KAAK,CAAC,UAAU;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC/D,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;QACjF,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAsB,CAAC;YACxD,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAA0B;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC/D,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,KAAK,GAAmB;gBAC5B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW;gBACxC,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,gBAAgB;gBAClD,OAAO,EAAE,EAAE;aACZ,CAAC;YACF,OAAO,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,UAAU,KAA+B,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/D,SAAS,KAAqB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;CACpD"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Animation Approach Gene Extractor
3
+ *
4
+ * Detects how the codebase implements animations and transitions.
5
+ */
6
+ import { BaseGeneExtractor, type AlleleDefinition, type FileExtractionResult } from './base-extractor.js';
7
+ import type { GeneId } from '../types.js';
8
+ export declare class AnimationApproachExtractor extends BaseGeneExtractor {
9
+ readonly geneId: GeneId;
10
+ readonly geneName = "Animation Approach";
11
+ readonly geneDescription = "How animations and transitions are implemented";
12
+ getAlleleDefinitions(): AlleleDefinition[];
13
+ extractFromFile(filePath: string, content: string, imports: string[]): FileExtractionResult;
14
+ }
15
+ //# sourceMappingURL=animation-approach.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animation-approach.d.ts","sourceRoot":"","sources":["../../../src/dna/gene-extractors/animation-approach.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,KAAK,oBAAoB,EAAuB,MAAM,qBAAqB,CAAC;AAC/H,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,qBAAa,0BAA2B,SAAQ,iBAAiB;IAC/D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAwB;IAC/C,QAAQ,CAAC,QAAQ,wBAAwB;IACzC,QAAQ,CAAC,eAAe,oDAAoD;IAE5E,oBAAoB,IAAI,gBAAgB,EAAE;IAgD1C,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,oBAAoB;CAyC5F"}