@aibloom/core 0.2.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 (62) hide show
  1. package/README.md +16 -0
  2. package/dist/design-docs/ConflictDetector.d.ts +21 -0
  3. package/dist/design-docs/ConflictDetector.d.ts.map +1 -0
  4. package/dist/design-docs/ConflictDetector.js +221 -0
  5. package/dist/design-docs/ConflictDetector.js.map +1 -0
  6. package/dist/design-docs/DesignDocParser.d.ts +17 -0
  7. package/dist/design-docs/DesignDocParser.d.ts.map +1 -0
  8. package/dist/design-docs/DesignDocParser.js +112 -0
  9. package/dist/design-docs/DesignDocParser.js.map +1 -0
  10. package/dist/design-docs/DesignSystemSynthesizer.d.ts +9 -0
  11. package/dist/design-docs/DesignSystemSynthesizer.d.ts.map +1 -0
  12. package/dist/design-docs/DesignSystemSynthesizer.js +141 -0
  13. package/dist/design-docs/DesignSystemSynthesizer.js.map +1 -0
  14. package/dist/design-docs/FusionOptionGenerator.d.ts +11 -0
  15. package/dist/design-docs/FusionOptionGenerator.d.ts.map +1 -0
  16. package/dist/design-docs/FusionOptionGenerator.js +157 -0
  17. package/dist/design-docs/FusionOptionGenerator.js.map +1 -0
  18. package/dist/design-docs/StyleFingerprintExtractor.d.ts +32 -0
  19. package/dist/design-docs/StyleFingerprintExtractor.d.ts.map +1 -0
  20. package/dist/design-docs/StyleFingerprintExtractor.js +365 -0
  21. package/dist/design-docs/StyleFingerprintExtractor.js.map +1 -0
  22. package/dist/design-docs/TokenNormalizer.d.ts +13 -0
  23. package/dist/design-docs/TokenNormalizer.d.ts.map +1 -0
  24. package/dist/design-docs/TokenNormalizer.js +97 -0
  25. package/dist/design-docs/TokenNormalizer.js.map +1 -0
  26. package/dist/errors.d.ts +7 -0
  27. package/dist/errors.d.ts.map +1 -0
  28. package/dist/errors.js +11 -0
  29. package/dist/errors.js.map +1 -0
  30. package/dist/framework/FrameworkAdapter.d.ts +10 -0
  31. package/dist/framework/FrameworkAdapter.d.ts.map +1 -0
  32. package/dist/framework/FrameworkAdapter.js +2 -0
  33. package/dist/framework/FrameworkAdapter.js.map +1 -0
  34. package/dist/framework/package.d.ts +8 -0
  35. package/dist/framework/package.d.ts.map +1 -0
  36. package/dist/framework/package.js +32 -0
  37. package/dist/framework/package.js.map +1 -0
  38. package/dist/index.d.ts +15 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +15 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/json.d.ts +5 -0
  43. package/dist/json.d.ts.map +1 -0
  44. package/dist/json.js +43 -0
  45. package/dist/json.js.map +1 -0
  46. package/dist/safety/FileChangeApplier.d.ts +8 -0
  47. package/dist/safety/FileChangeApplier.d.ts.map +1 -0
  48. package/dist/safety/FileChangeApplier.js +73 -0
  49. package/dist/safety/FileChangeApplier.js.map +1 -0
  50. package/dist/state/ProjectStateStore.d.ts +16 -0
  51. package/dist/state/ProjectStateStore.d.ts.map +1 -0
  52. package/dist/state/ProjectStateStore.js +164 -0
  53. package/dist/state/ProjectStateStore.js.map +1 -0
  54. package/dist/state/RunRecordStore.d.ts +10 -0
  55. package/dist/state/RunRecordStore.d.ts.map +1 -0
  56. package/dist/state/RunRecordStore.js +39 -0
  57. package/dist/state/RunRecordStore.js.map +1 -0
  58. package/dist/tasks/TaskStore.d.ts +12 -0
  59. package/dist/tasks/TaskStore.d.ts.map +1 -0
  60. package/dist/tasks/TaskStore.js +48 -0
  61. package/dist/tasks/TaskStore.js.map +1 -0
  62. package/package.json +24 -0
package/README.md ADDED
@@ -0,0 +1,16 @@
1
+ # @aibloom/core
2
+
3
+ Workflow engine, orchestrator, state machine, and design pipeline core for Aibloom.
4
+
5
+ ## Modules
6
+
7
+ - **State** — State machine with validated transitions, project state store, run record store
8
+ - **Design Docs** — DESIGN.md parser, style fingerprint extractor, token normalizer, conflict detector, fusion option generator, design system synthesizer
9
+ - **Page Planner** — Structured page shape and implementation plan generation
10
+ - **Verification** — Document existence checks and compliance reporting
11
+
12
+ ## Usage
13
+
14
+ ```ts
15
+ import { VibeUIOrchestrator } from "@aibloom/core";
16
+ ```
@@ -0,0 +1,21 @@
1
+ import { type StyleFingerprint, type StyleConflictReport } from "@aibloom/schemas";
2
+ /**
3
+ * Detects design conflicts between multiple StyleFingerprints.
4
+ * Checks 10 dimensions: theme, canvas, accent, typography, radius,
5
+ * elevation, layout, imagery, motion, anti-patterns.
6
+ */
7
+ export declare class ConflictDetector {
8
+ detect(fingerprints: StyleFingerprint[]): StyleConflictReport;
9
+ private conflict;
10
+ private defaultRecommendation;
11
+ private pairs;
12
+ private haveDifferentValues;
13
+ private detectDisplayConflict;
14
+ private elevationSeverity;
15
+ private detectAntiPatternContradictions;
16
+ private computeCompatibilityScore;
17
+ private buildSummary;
18
+ private findSafeFusions;
19
+ private recommendOptions;
20
+ }
21
+ //# sourceMappingURL=ConflictDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConflictDetector.d.ts","sourceRoot":"","sources":["../../src/design-docs/ConflictDetector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,gBAAgB,EAAuB,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAExH;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,mBAAmB;IAqG7D,OAAO,CAAC,QAAQ;IAkBhB,OAAO,CAAC,qBAAqB;IAiB7B,OAAO,CAAC,KAAK;IAUb,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,qBAAqB;IAiB7B,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,+BAA+B;IAqBvC,OAAO,CAAC,yBAAyB;IASjC,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,gBAAgB;CAgBzB"}
@@ -0,0 +1,221 @@
1
+ import { SCHEMA_VERSION } from "@aibloom/schemas";
2
+ /**
3
+ * Detects design conflicts between multiple StyleFingerprints.
4
+ * Checks 10 dimensions: theme, canvas, accent, typography, radius,
5
+ * elevation, layout, imagery, motion, anti-patterns.
6
+ */
7
+ export class ConflictDetector {
8
+ detect(fingerprints) {
9
+ if (fingerprints.length < 2) {
10
+ return {
11
+ schemaVersion: SCHEMA_VERSION,
12
+ compatibilityScore: 100,
13
+ fusionRisk: "low",
14
+ summary: "Single reference — no conflicts to detect.",
15
+ conflicts: [],
16
+ safeFusions: [],
17
+ nonNegotiableConflicts: [],
18
+ recommendedOptions: [],
19
+ };
20
+ }
21
+ const conflicts = [];
22
+ const pairs = this.pairs(fingerprints);
23
+ for (const [a, b] of pairs) {
24
+ const refs = [a.id, b.id];
25
+ // 1. Theme
26
+ if (a.theme && b.theme && a.theme !== b.theme) {
27
+ conflicts.push(this.conflict("theme", refs, "weak-conflict", a.theme, b.theme, 1));
28
+ }
29
+ // 2. Canvas
30
+ if (this.haveDifferentValues(a.colorSystem.canvas, b.colorSystem.canvas)) {
31
+ conflicts.push(this.conflict("canvas", refs, "strong-conflict", "canvas color", "canvas color", 2));
32
+ }
33
+ // 3. Accent
34
+ if (this.haveDifferentValues(a.colorSystem.accent, b.colorSystem.accent)) {
35
+ conflicts.push(this.conflict("accent", refs, "strong-conflict", a.colorSystem.accent[0] ?? "?", b.colorSystem.accent[0] ?? "?", 3));
36
+ }
37
+ // 4. Typography
38
+ if (a.typography.display && b.typography.display) {
39
+ const displayConflict = this.detectDisplayConflict(a, b);
40
+ if (displayConflict)
41
+ conflicts.push(displayConflict);
42
+ }
43
+ // 5. Radius
44
+ if (a.shapeLanguage.cardRadius && b.shapeLanguage.cardRadius
45
+ && a.shapeLanguage.cardRadius !== b.shapeLanguage.cardRadius) {
46
+ conflicts.push(this.conflict("radius", refs, "strong-conflict", a.shapeLanguage.cardRadius, b.shapeLanguage.cardRadius, 2));
47
+ }
48
+ // 6. Elevation
49
+ if (a.shapeLanguage.shadowStyle !== b.shapeLanguage.shadowStyle) {
50
+ const severity = this.elevationSeverity(a.shapeLanguage.shadowStyle, b.shapeLanguage.shadowStyle);
51
+ conflicts.push(this.conflict("elevation", refs, "strong-conflict", a.shapeLanguage.shadowStyle, b.shapeLanguage.shadowStyle, severity));
52
+ }
53
+ // 7. Layout
54
+ if (a.layoutLanguage.heroPattern && b.layoutLanguage.heroPattern
55
+ && a.layoutLanguage.heroPattern !== b.layoutLanguage.heroPattern) {
56
+ conflicts.push(this.conflict("layout", refs, "weak-conflict", a.layoutLanguage.heroPattern, b.layoutLanguage.heroPattern, 1));
57
+ }
58
+ // 8. Imagery
59
+ if (this.haveDifferentValues(a.imagery.allowed, b.imagery.allowed)) {
60
+ conflicts.push(this.conflict("imagery", refs, "weak-conflict", "imagery rules", "imagery rules", 1));
61
+ }
62
+ // 9. Components
63
+ if (this.haveDifferentValues(a.componentLanguage, b.componentLanguage)) {
64
+ conflicts.push(this.conflict("components", refs, "weak-conflict", "component language", "component language", 1));
65
+ }
66
+ // 10. Motion
67
+ if (a.motion.inferredTone !== b.motion.inferredTone) {
68
+ conflicts.push(this.conflict("motion", refs, "compatible", a.motion.inferredTone, b.motion.inferredTone, 0));
69
+ }
70
+ // 11. Anti-patterns contradiction
71
+ const apConflicts = this.detectAntiPatternContradictions(a, b);
72
+ conflicts.push(...apConflicts);
73
+ }
74
+ const score = this.computeCompatibilityScore(conflicts);
75
+ const risk = score >= 70 ? "low" : score >= 40 ? "medium" : "high";
76
+ return {
77
+ schemaVersion: SCHEMA_VERSION,
78
+ compatibilityScore: score,
79
+ fusionRisk: risk,
80
+ summary: this.buildSummary(conflicts, score),
81
+ conflicts,
82
+ safeFusions: this.findSafeFusions(fingerprints),
83
+ nonNegotiableConflicts: conflicts
84
+ .filter((c) => c.severity >= 3)
85
+ .map((c) => ({ description: c.explanation, refA: c.references[0], refB: c.references[1] })),
86
+ recommendedOptions: this.recommendOptions(conflicts, fingerprints),
87
+ };
88
+ }
89
+ conflict(dimension, references, relation, valA, valB, severity) {
90
+ return {
91
+ dimension,
92
+ references,
93
+ relation,
94
+ severity,
95
+ explanation: `${dimension}: "${valA}" vs "${valB}"`,
96
+ recommendation: this.defaultRecommendation(dimension),
97
+ };
98
+ }
99
+ defaultRecommendation(dimension) {
100
+ const recs = {
101
+ theme: "Ensure both can be light, or choose one theme direction.",
102
+ canvas: "Choose one canvas color as primary, or split by page type.",
103
+ accent: "Select one primary accent color. The other can be used sparingly as decorative.",
104
+ typography: "Cannot mix two display type systems. Choose one as primary.",
105
+ radius: "Use one radius system consistently across the project.",
106
+ elevation: "Shadow and no-shadow cannot coexist globally. Split by page type.",
107
+ layout: "Hero patterns can differ by page type.",
108
+ imagery: "Imagery styles can differ by page context.",
109
+ components: "Component language can be unified, choosing the stronger convention where they differ.",
110
+ motion: "Motion tones can coexist when used contextually.",
111
+ "anti-patterns": "Resolve contradictory rules by choosing the stricter or more relevant constraint.",
112
+ };
113
+ return recs[dimension] ?? "Choose one approach or split by context.";
114
+ }
115
+ pairs(list) {
116
+ const result = [];
117
+ for (let i = 0; i < list.length; i++) {
118
+ for (let j = i + 1; j < list.length; j++) {
119
+ result.push([list[i], list[j]]);
120
+ }
121
+ }
122
+ return result;
123
+ }
124
+ haveDifferentValues(a, b) {
125
+ if (a.length === 0 && b.length === 0)
126
+ return false;
127
+ const setA = new Set(a.map((v) => v.toLowerCase()));
128
+ const setB = new Set(b.map((v) => v.toLowerCase()));
129
+ return !a.every((v) => setB.has(v.toLowerCase()))
130
+ || !b.every((v) => setA.has(v.toLowerCase()));
131
+ }
132
+ detectDisplayConflict(a, b) {
133
+ const aFamily = a.typography.display.family.toLowerCase();
134
+ const bFamily = b.typography.display.family.toLowerCase();
135
+ const aTone = a.typography.display.tone.toLowerCase();
136
+ const bTone = b.typography.display.tone.toLowerCase();
137
+ if (aFamily === bFamily && aTone === bTone)
138
+ return null;
139
+ // Serif vs condensed/brutalist is a strong conflict
140
+ if ((/serif|editorial/i.test(aTone) && /condensed|brutalist|bold/i.test(bTone))
141
+ || (/serif|editorial/i.test(bTone) && /condensed|brutalist|bold/i.test(aTone))) {
142
+ return this.conflict("typography", [a.id, b.id], "strong-conflict", aFamily, bFamily, 3);
143
+ }
144
+ return this.conflict("typography", [a.id, b.id], "weak-conflict", aFamily, bFamily, 1);
145
+ }
146
+ elevationSeverity(a, b) {
147
+ if ((a === "none" && b !== "none") || (b === "none" && a !== "none"))
148
+ return 3;
149
+ if (a === b)
150
+ return 0;
151
+ return 2;
152
+ }
153
+ detectAntiPatternContradictions(a, b) {
154
+ const conflicts = [];
155
+ for (const ap of a.antiPatterns) {
156
+ // Check if B's Do's recommend what A has as anti-pattern
157
+ const apLower = ap.toLowerCase();
158
+ for (const comp of b.componentLanguage) {
159
+ if (comp.toLowerCase().includes(apLower.replace(/don['']?t\s*/, ""))) {
160
+ conflicts.push({
161
+ dimension: "anti-patterns",
162
+ references: [a.id, b.id],
163
+ relation: "mutually-exclusive",
164
+ severity: 3,
165
+ explanation: `${a.name} forbids: "${ap}", but ${b.name} recommends similar patterns.`,
166
+ recommendation: "Choose which reference's constraint to follow.",
167
+ });
168
+ }
169
+ }
170
+ }
171
+ return conflicts;
172
+ }
173
+ computeCompatibilityScore(conflicts) {
174
+ // Start at 100, deduct based on severity
175
+ let score = 100;
176
+ for (const c of conflicts) {
177
+ score -= c.severity * 10;
178
+ }
179
+ return Math.max(0, Math.min(100, score));
180
+ }
181
+ buildSummary(conflicts, score) {
182
+ const strongConflicts = conflicts.filter((c) => c.severity >= 3);
183
+ const dimensions = [...new Set(strongConflicts.map((c) => c.dimension))];
184
+ if (score >= 80)
185
+ return "High compatibility. Minor differences that can be merged automatically.";
186
+ if (score >= 50)
187
+ return `Moderate compatibility. Notable conflicts in: ${dimensions.join(", ")}. User choice recommended.`;
188
+ return `Low compatibility (score: ${score}). Strong conflicts in: ${dimensions.join(", ")}. User must choose fusion strategy.`;
189
+ }
190
+ findSafeFusions(fingerprints) {
191
+ const safe = [];
192
+ const shared = new Set();
193
+ for (const fp of fingerprints) {
194
+ for (const ap of fp.antiPatterns) {
195
+ if (shared.has(ap.toLowerCase())) {
196
+ safe.push(ap);
197
+ }
198
+ shared.add(ap.toLowerCase());
199
+ }
200
+ }
201
+ if (safe.length === 0)
202
+ safe.push("No shared anti-patterns detected — fusion may require manual guidance.");
203
+ return safe;
204
+ }
205
+ recommendOptions(conflicts, fingerprints) {
206
+ const options = [];
207
+ const score = this.computeCompatibilityScore(conflicts);
208
+ options.push("primary-plus-accent");
209
+ if (fingerprints.length === 2)
210
+ options.push("page-type-split");
211
+ if (score < 60) {
212
+ options.push("new-derived-system");
213
+ options.push("reject-and-restart");
214
+ }
215
+ else {
216
+ options.push("layered-fusion");
217
+ }
218
+ return options;
219
+ }
220
+ }
221
+ //# sourceMappingURL=ConflictDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConflictDetector.js","sourceRoot":"","sources":["../../src/design-docs/ConflictDetector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type DesignReferenceDocument } from "@aibloom/schemas";
2
+ interface ParseInput {
3
+ path: string;
4
+ name?: string;
5
+ sourceType: "refero" | "figma-export" | "manual" | "unknown";
6
+ }
7
+ /**
8
+ * Parses a Markdown DESIGN.md into a structured DesignReferenceDocument.
9
+ * Handles headings, paragraphs, tables, and fenced code blocks.
10
+ */
11
+ export declare class DesignDocParser {
12
+ parse(input: ParseInput): Promise<DesignReferenceDocument>;
13
+ private extractTitle;
14
+ private extractSections;
15
+ }
16
+ export {};
17
+ //# sourceMappingURL=DesignDocParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DesignDocParser.d.ts","sourceRoot":"","sources":["../../src/design-docs/DesignDocParser.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAUhF,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,QAAQ,GAAG,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC;CAC9D;AAED;;;GAGG;AACH,qBAAa,eAAe;IACpB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAoBhE,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,eAAe;CAwFxB"}
@@ -0,0 +1,112 @@
1
+ import fs from "node:fs/promises";
2
+ import { SCHEMA_VERSION } from "@aibloom/schemas";
3
+ /**
4
+ * Parses a Markdown DESIGN.md into a structured DesignReferenceDocument.
5
+ * Handles headings, paragraphs, tables, and fenced code blocks.
6
+ */
7
+ export class DesignDocParser {
8
+ async parse(input) {
9
+ const rawText = await fs.readFile(input.path, "utf-8");
10
+ const sections = this.extractSections(rawText);
11
+ const id = input.name
12
+ ? `ref-${input.name.toLowerCase().replace(/\s+/g, "-")}`
13
+ : `ref-${Date.now()}`;
14
+ return {
15
+ schemaVersion: SCHEMA_VERSION,
16
+ id,
17
+ name: input.name ?? this.extractTitle(rawText) ?? "unnamed",
18
+ sourceType: input.sourceType,
19
+ originalPath: input.path,
20
+ sections,
21
+ rawText,
22
+ importedAt: new Date().toISOString(),
23
+ };
24
+ }
25
+ extractTitle(raw) {
26
+ const match = raw.match(/^#\s+(.+)$/m);
27
+ return match ? match[1].trim() : null;
28
+ }
29
+ extractSections(raw) {
30
+ const lines = raw.split("\n");
31
+ const sections = [];
32
+ let currentSection = null;
33
+ let inCodeBlock = false;
34
+ let codeBlockContent = "";
35
+ let tableBuffer = [];
36
+ function flushSection() {
37
+ if (currentSection) {
38
+ // Flush any pending table
39
+ if (tableBuffer.length > 0) {
40
+ currentSection.tables.push(tableBuffer.join("\n"));
41
+ tableBuffer = [];
42
+ }
43
+ sections.push(currentSection);
44
+ }
45
+ }
46
+ function flushTable() {
47
+ if (tableBuffer.length > 0 && currentSection) {
48
+ currentSection.tables.push(tableBuffer.join("\n"));
49
+ tableBuffer = [];
50
+ }
51
+ }
52
+ for (let i = 0; i < lines.length; i++) {
53
+ const line = lines[i];
54
+ // Handle code blocks
55
+ if (line.trimStart().startsWith("```")) {
56
+ if (!inCodeBlock) {
57
+ inCodeBlock = true;
58
+ codeBlockContent = "";
59
+ flushTable();
60
+ continue;
61
+ }
62
+ else {
63
+ inCodeBlock = false;
64
+ if (currentSection) {
65
+ currentSection.codeBlocks.push(codeBlockContent);
66
+ }
67
+ continue;
68
+ }
69
+ }
70
+ if (inCodeBlock) {
71
+ codeBlockContent += line + "\n";
72
+ continue;
73
+ }
74
+ // Detect headings
75
+ const headingMatch = line.match(/^(#{1,6})\s+(.+)$/);
76
+ if (headingMatch) {
77
+ flushSection();
78
+ currentSection = {
79
+ heading: headingMatch[2].trim(),
80
+ level: headingMatch[1].length,
81
+ content: "",
82
+ tables: [],
83
+ codeBlocks: [],
84
+ };
85
+ continue;
86
+ }
87
+ // Detect table rows (line contains | and starts with |)
88
+ if (line.trimStart().startsWith("|")) {
89
+ // Check if it's a separator row (|---|...|)
90
+ if (/^\|[\s\-:]+\|/.test(line)) {
91
+ tableBuffer.push(line);
92
+ continue;
93
+ }
94
+ tableBuffer.push(line);
95
+ continue;
96
+ }
97
+ else {
98
+ flushTable();
99
+ }
100
+ // Regular content
101
+ if (currentSection && line.trim()) {
102
+ currentSection.content += line + "\n";
103
+ }
104
+ else if (currentSection) {
105
+ currentSection.content += "\n";
106
+ }
107
+ }
108
+ flushSection();
109
+ return sections;
110
+ }
111
+ }
112
+ //# sourceMappingURL=DesignDocParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DesignDocParser.js","sourceRoot":"","sources":["../../src/design-docs/DesignDocParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type StyleFingerprint, type FusionDecision, type SynthesizedDesignSystem } from "@aibloom/schemas";
2
+ /**
3
+ * Synthesizes a project-level DESIGN.md from resolved fingerprints and a fusion decision.
4
+ * Produces: DESIGN.md content, DESIGN_FUSION_BRIEF.md content, and a source map.
5
+ */
6
+ export declare class DesignSystemSynthesizer {
7
+ synthesize(fingerprints: StyleFingerprint[], fusionDecision: FusionDecision): SynthesizedDesignSystem;
8
+ }
9
+ //# sourceMappingURL=DesignSystemSynthesizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DesignSystemSynthesizer.d.ts","sourceRoot":"","sources":["../../src/design-docs/DesignSystemSynthesizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,KAAK,uBAAuB,EAA6B,MAAM,kBAAkB,CAAC;AAEvJ;;;GAGG;AACH,qBAAa,uBAAuB;IAClC,UAAU,CACR,YAAY,EAAE,gBAAgB,EAAE,EAChC,cAAc,EAAE,cAAc,GAC7B,uBAAuB;CAuJ3B"}
@@ -0,0 +1,141 @@
1
+ import { SCHEMA_VERSION } from "@aibloom/schemas";
2
+ /**
3
+ * Synthesizes a project-level DESIGN.md from resolved fingerprints and a fusion decision.
4
+ * Produces: DESIGN.md content, DESIGN_FUSION_BRIEF.md content, and a source map.
5
+ */
6
+ export class DesignSystemSynthesizer {
7
+ synthesize(fingerprints, fusionDecision) {
8
+ const primary = fingerprints.find((f) => fusionDecision.finalReferenceRoles[f.id] === "primary");
9
+ const secondary = fingerprints.filter((f) => fusionDecision.finalReferenceRoles[f.id] === "secondary");
10
+ const decisions = [];
11
+ let decisionCounter = 0;
12
+ function record(dimension, finalRule, sourceIds, treatment) {
13
+ decisions.push({
14
+ decisionId: `DS-${String(++decisionCounter).padStart(3, "0")}`,
15
+ dimension,
16
+ finalRule,
17
+ sourceReferenceIds: sourceIds,
18
+ treatment,
19
+ rationale: `Fusion strategy: ${fusionDecision.selectedStrategy}`,
20
+ });
21
+ }
22
+ // Build the project DESIGN.md content
23
+ let content = "# Project Design System\n\n";
24
+ content += `Generated from: ${fingerprints.map((f) => f.name).join(", ")}\n`;
25
+ content += `Fusion strategy: ${fusionDecision.selectedStrategy}\n`;
26
+ content += `User instruction: ${fusionDecision.userInstruction}\n\n`;
27
+ // Personality
28
+ content += "## 1. Personality\n\n";
29
+ const personality = primary?.personality ?? fingerprints.flatMap((f) => f.personality);
30
+ content += `- ${personality.join(", ")}\n\n`;
31
+ record("personality", personality.join(", "), primary ? [primary.id] : fingerprints.map((f) => f.id), "adopted");
32
+ // Visual Metaphor
33
+ if (primary?.visualMetaphor) {
34
+ content += "## 2. Visual Metaphor\n\n";
35
+ content += `${primary.visualMetaphor}\n\n`;
36
+ record("visual-metaphor", primary.visualMetaphor, [primary.id], "adopted");
37
+ }
38
+ // Color System
39
+ content += "## 3. Color System\n\n";
40
+ if (primary) {
41
+ content += "| Role | Hex | Usage |\n|------|-----|-------|\n";
42
+ for (const hex of primary.colorSystem.canvas) {
43
+ content += `| Canvas | ${hex} | Page background |\n`;
44
+ record("canvas", hex, [primary.id], "adopted");
45
+ }
46
+ for (const hex of primary.colorSystem.accent) {
47
+ content += `| Accent | ${hex} | Primary CTA |\n`;
48
+ record("accent", hex, [primary.id], "adopted");
49
+ }
50
+ for (const hex of primary.colorSystem.text) {
51
+ content += `| Text | ${hex} | Body text |\n`;
52
+ }
53
+ if (secondary.length > 0) {
54
+ for (const s of secondary) {
55
+ for (const hex of s.colorSystem.accent) {
56
+ content += `| Accent Alt | ${hex} | Secondary accent (from ${s.name}) |\n`;
57
+ record("accent-alt", hex, [s.id], "adapted");
58
+ }
59
+ }
60
+ }
61
+ }
62
+ else {
63
+ // Derived: pull from all
64
+ for (const fp of fingerprints) {
65
+ content += `### From ${fp.name}\n\n`;
66
+ content += `| Role | Hex | Usage |\n|------|-----|-------|\n`;
67
+ for (const hex of fp.colorSystem.accent) {
68
+ content += `| Accent | ${hex} | CTA |\n`;
69
+ }
70
+ for (const hex of fp.colorSystem.canvas) {
71
+ content += `| Canvas | ${hex} | Background |\n`;
72
+ }
73
+ }
74
+ }
75
+ content += "\n";
76
+ // Typography
77
+ content += "## 4. Typography\n\n";
78
+ if (primary?.typography.display) {
79
+ content += `### Display\n- Family: ${primary.typography.display.family}\n`;
80
+ content += `- Substitutes: ${primary.typography.display.substitutes.join(", ")}\n`;
81
+ content += `- Sizes: ${primary.typography.display.sizes.join(", ")}\n\n`;
82
+ record("typography-display", primary.typography.display.family, [primary.id], "adopted");
83
+ }
84
+ if (primary?.typography.body) {
85
+ content += `### Body\n- Family: ${primary.typography.body.family}\n`;
86
+ content += `- Substitutes: ${primary.typography.body.substitutes.join(", ")}\n`;
87
+ content += `- Sizes: ${primary.typography.body.sizes.join(", ")}\n\n`;
88
+ record("typography-body", primary.typography.body.family, [primary.id], "adopted");
89
+ }
90
+ // Shape
91
+ content += "## 5. Shape & Surface\n\n";
92
+ if (primary) {
93
+ content += `- Card radius: ${primary.shapeLanguage.cardRadius ?? "16px"}\n`;
94
+ content += `- Button radius: ${primary.shapeLanguage.buttonRadius ?? "8px"}\n`;
95
+ content += `- Shadow: ${primary.shapeLanguage.shadowStyle}\n\n`;
96
+ record("radius", primary.shapeLanguage.cardRadius ?? "16px", [primary.id], "adopted");
97
+ record("elevation", primary.shapeLanguage.shadowStyle, [primary.id], "adopted");
98
+ }
99
+ // Anti-patterns
100
+ content += "## 6. Anti-patterns\n\n";
101
+ const allAntiPatterns = [...new Set(fingerprints.flatMap((f) => f.antiPatterns))];
102
+ for (const ap of allAntiPatterns) {
103
+ content += `- ${ap}\n`;
104
+ }
105
+ record("anti-patterns", `${allAntiPatterns.length} rules`, fingerprints.map((f) => f.id), "derived");
106
+ // Hard Constraints
107
+ content += "\n## 7. Hard Constraints\n\n";
108
+ const allConstraints = [...new Set(fingerprints.flatMap((f) => f.hardConstraints))];
109
+ for (const hc of allConstraints) {
110
+ content += `- ${hc}\n`;
111
+ }
112
+ // Page-type strategy
113
+ if (fusionDecision.selectedStrategy === "page-type-split") {
114
+ content += "\n## 8. Page-type Strategy\n\n";
115
+ const roles = fusionDecision.finalReferenceRoles;
116
+ for (const [refId, role] of Object.entries(roles)) {
117
+ const fp = fingerprints.find((f) => f.id === refId);
118
+ if (fp) {
119
+ content += `- ${role === "primary" ? "Dashboard/App" : "Marketing/Landing"}: ${fp.name} style\n`;
120
+ }
121
+ }
122
+ content += `\nUser notes: ${fusionDecision.userInstruction}\n`;
123
+ }
124
+ // Source Map Summary
125
+ content += "\n## 9. Source Map\n\n";
126
+ content += "| Decision ID | Dimension | Rule | Source | Treatment |\n";
127
+ content += "|-------------|-----------|------|--------|-----------|\n";
128
+ for (const d of decisions) {
129
+ content += `| ${d.decisionId} | ${d.dimension} | ${d.finalRule.slice(0, 60)} | ${d.sourceReferenceIds.join(", ")} | ${d.treatment} |\n`;
130
+ }
131
+ return {
132
+ schemaVersion: SCHEMA_VERSION,
133
+ designPath: "/DESIGN.md",
134
+ fusionBriefPath: "/docs/design-references/design-fusion-brief.md",
135
+ sourceMapPath: "/docs/ui/design-source-map.md",
136
+ decisions,
137
+ content,
138
+ };
139
+ }
140
+ }
141
+ //# sourceMappingURL=DesignSystemSynthesizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DesignSystemSynthesizer.js","sourceRoot":"","sources":["../../src/design-docs/DesignSystemSynthesizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { StyleFingerprint, StyleConflictReport, FusionOption } from "@aibloom/schemas";
2
+ /**
3
+ * Generates 3-5 user-selectable fusion options when multiple design references
4
+ * have conflicts. Supports: primary-accent, page-type-split, layered-fusion,
5
+ * contextual-fusion, new-derived-system.
6
+ */
7
+ export declare class FusionOptionGenerator {
8
+ generate(fingerprints: StyleFingerprint[], conflictReport: StyleConflictReport): FusionOption[];
9
+ private buildOption;
10
+ }
11
+ //# sourceMappingURL=FusionOptionGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FusionOptionGenerator.d.ts","sourceRoot":"","sources":["../../src/design-docs/FusionOptionGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE5F;;;;GAIG;AACH,qBAAa,qBAAqB;IAChC,QAAQ,CACN,YAAY,EAAE,gBAAgB,EAAE,EAChC,cAAc,EAAE,mBAAmB,GAClC,YAAY,EAAE;IA8IjB,OAAO,CAAC,WAAW;CAyBpB"}