@mytechtoday/augment-extensions 1.3.0 → 1.4.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 (232) hide show
  1. package/LICENSE +22 -22
  2. package/README.md +105 -6
  3. package/augment-extensions/domain-rules/software-architecture/README.md +143 -143
  4. package/augment-extensions/domain-rules/software-architecture/examples/banking-layered.md +961 -961
  5. package/augment-extensions/domain-rules/software-architecture/examples/ecommerce-microservices.md +990 -990
  6. package/augment-extensions/domain-rules/software-architecture/examples/iot-eventdriven.md +882 -882
  7. package/augment-extensions/domain-rules/software-architecture/examples/monolith-to-microservices-migration.md +703 -703
  8. package/augment-extensions/domain-rules/software-architecture/examples/serverless-imageprocessing.md +957 -957
  9. package/augment-extensions/domain-rules/software-architecture/examples/trading-eventdriven.md +747 -747
  10. package/augment-extensions/domain-rules/software-architecture/module.json +119 -119
  11. package/augment-extensions/domain-rules/software-architecture/rules/challenges-solutions.md +763 -763
  12. package/augment-extensions/domain-rules/software-architecture/rules/definitions-terminology.md +409 -409
  13. package/augment-extensions/domain-rules/software-architecture/rules/design-principles.md +684 -684
  14. package/augment-extensions/domain-rules/software-architecture/rules/evaluation-testing.md +1381 -1381
  15. package/augment-extensions/domain-rules/software-architecture/rules/event-driven-architecture.md +616 -616
  16. package/augment-extensions/domain-rules/software-architecture/rules/fundamentals.md +306 -306
  17. package/augment-extensions/domain-rules/software-architecture/rules/industry-architectures.md +554 -554
  18. package/augment-extensions/domain-rules/software-architecture/rules/layered-architecture.md +776 -776
  19. package/augment-extensions/domain-rules/software-architecture/rules/microservices-architecture.md +503 -503
  20. package/augment-extensions/domain-rules/software-architecture/rules/modeling-documentation.md +1199 -1199
  21. package/augment-extensions/domain-rules/software-architecture/rules/monolithic-architecture.md +351 -351
  22. package/augment-extensions/domain-rules/software-architecture/rules/principles.md +556 -556
  23. package/augment-extensions/domain-rules/software-architecture/rules/quality-attributes.md +797 -797
  24. package/augment-extensions/domain-rules/software-architecture/rules/scalability-performance.md +1345 -1345
  25. package/augment-extensions/domain-rules/software-architecture/rules/security-architecture.md +1039 -1039
  26. package/augment-extensions/domain-rules/software-architecture/rules/serverless-architecture.md +711 -711
  27. package/augment-extensions/domain-rules/software-architecture/rules/skills-development.md +568 -568
  28. package/augment-extensions/domain-rules/software-architecture/rules/tools-methodologies.md +961 -961
  29. package/augment-extensions/visual-design/CHANGELOG.md +132 -132
  30. package/augment-extensions/visual-design/README.md +255 -255
  31. package/augment-extensions/visual-design/__tests__/README.md +119 -119
  32. package/augment-extensions/visual-design/__tests__/style-selector.test.ts +172 -172
  33. package/augment-extensions/visual-design/__tests__/vendor-styles.test.ts +214 -214
  34. package/augment-extensions/visual-design/domains/other/ai-prompt-helper.ts +157 -157
  35. package/augment-extensions/visual-design/domains/other/dotnet-application.ts +156 -156
  36. package/augment-extensions/visual-design/domains/other/linux-platform.ts +156 -156
  37. package/augment-extensions/visual-design/domains/other/mobile-application.ts +157 -157
  38. package/augment-extensions/visual-design/domains/other/motion-picture.ts +156 -156
  39. package/augment-extensions/visual-design/domains/other/os-application.ts +156 -156
  40. package/augment-extensions/visual-design/domains/other/print-campaigns.ts +158 -158
  41. package/augment-extensions/visual-design/domains/other/web-app.ts +157 -157
  42. package/augment-extensions/visual-design/domains/other/website.ts +161 -161
  43. package/augment-extensions/visual-design/domains/other/windows-platform.ts +156 -156
  44. package/augment-extensions/visual-design/domains/web-page-styles/amazon-cloudscape.ts +506 -506
  45. package/augment-extensions/visual-design/domains/web-page-styles/google-modern.ts +615 -615
  46. package/augment-extensions/visual-design/domains/web-page-styles/microsoft-fluent.ts +531 -531
  47. package/augment-extensions/visual-design/examples/README.md +97 -97
  48. package/augment-extensions/visual-design/examples/ai-prompt-generation.md +233 -233
  49. package/augment-extensions/visual-design/examples/basic-usage.md +216 -216
  50. package/augment-extensions/visual-design/examples/domain-workflows.md +257 -257
  51. package/augment-extensions/visual-design/examples/vendor-comparison.md +247 -247
  52. package/augment-extensions/visual-design/module.json +78 -78
  53. package/augment-extensions/visual-design/style-selector.ts +177 -177
  54. package/augment-extensions/visual-design/types.ts +302 -302
  55. package/augment-extensions/visual-design/visual-design-core.ts +469 -469
  56. package/augment-extensions/workflows/adr-support/README.md +227 -227
  57. package/augment-extensions/workflows/adr-support/__tests__/adr-validator.test.ts +203 -203
  58. package/augment-extensions/workflows/adr-support/adr-validator.ts +162 -162
  59. package/augment-extensions/workflows/adr-support/examples/complete-lifecycle-example.md +449 -449
  60. package/augment-extensions/workflows/adr-support/examples/integration-example.md +580 -580
  61. package/augment-extensions/workflows/adr-support/examples/superseding-example.md +436 -436
  62. package/augment-extensions/workflows/adr-support/module.json +112 -112
  63. package/augment-extensions/workflows/adr-support/rules/adr-creation.md +372 -372
  64. package/augment-extensions/workflows/adr-support/rules/beads-integration.md +443 -443
  65. package/augment-extensions/workflows/adr-support/rules/conflict-detection.md +486 -486
  66. package/augment-extensions/workflows/adr-support/rules/decision-detection.md +362 -362
  67. package/augment-extensions/workflows/adr-support/rules/lifecycle-management.md +427 -427
  68. package/augment-extensions/workflows/adr-support/rules/openspec-integration.md +465 -465
  69. package/augment-extensions/workflows/adr-support/rules/template-selection.md +405 -405
  70. package/augment-extensions/workflows/adr-support/rules/validation-rules.md +543 -543
  71. package/augment-extensions/workflows/adr-support/schemas/adr-config.json +191 -191
  72. package/augment-extensions/workflows/adr-support/schemas/adr-metadata.json +172 -172
  73. package/augment-extensions/workflows/adr-support/templates/business-case.md +235 -235
  74. package/augment-extensions/workflows/adr-support/templates/madr-elaborate.md +197 -197
  75. package/augment-extensions/workflows/adr-support/templates/madr-simple.md +68 -68
  76. package/augment-extensions/workflows/adr-support/templates/nygard.md +84 -84
  77. package/augment-extensions/writing-standards/screenplay/rules/file-organization.md +213 -213
  78. package/augment-extensions/writing-standards/screenplay/utils/__tests__/file-organization.test.ts +169 -169
  79. package/augment-extensions/writing-standards/screenplay/utils/file-organization.ts +165 -165
  80. package/cli/dist/commands/agent.d.ts +37 -0
  81. package/cli/dist/commands/agent.d.ts.map +1 -0
  82. package/cli/dist/commands/agent.js +222 -0
  83. package/cli/dist/commands/agent.js.map +1 -0
  84. package/cli/dist/commands/beads.d.ts +64 -0
  85. package/cli/dist/commands/beads.d.ts.map +1 -0
  86. package/cli/dist/commands/beads.js +377 -0
  87. package/cli/dist/commands/beads.js.map +1 -0
  88. package/cli/dist/commands/change.d.ts +54 -0
  89. package/cli/dist/commands/change.d.ts.map +1 -0
  90. package/cli/dist/commands/change.js +243 -0
  91. package/cli/dist/commands/change.js.map +1 -0
  92. package/cli/dist/commands/clean.d.ts +15 -0
  93. package/cli/dist/commands/clean.d.ts.map +1 -0
  94. package/cli/dist/commands/clean.js +63 -0
  95. package/cli/dist/commands/clean.js.map +1 -0
  96. package/cli/dist/commands/clone.d.ts +15 -0
  97. package/cli/dist/commands/clone.d.ts.map +1 -0
  98. package/cli/dist/commands/clone.js +49 -0
  99. package/cli/dist/commands/clone.js.map +1 -0
  100. package/cli/dist/commands/config.d.ts +33 -0
  101. package/cli/dist/commands/config.d.ts.map +1 -0
  102. package/cli/dist/commands/config.js +166 -0
  103. package/cli/dist/commands/config.js.map +1 -0
  104. package/cli/dist/commands/context.d.ts +38 -0
  105. package/cli/dist/commands/context.d.ts.map +1 -0
  106. package/cli/dist/commands/context.js +205 -0
  107. package/cli/dist/commands/context.js.map +1 -0
  108. package/cli/dist/commands/create.d.ts +18 -0
  109. package/cli/dist/commands/create.d.ts.map +1 -0
  110. package/cli/dist/commands/create.js +178 -0
  111. package/cli/dist/commands/create.js.map +1 -0
  112. package/cli/dist/commands/diff.d.ts +19 -0
  113. package/cli/dist/commands/diff.d.ts.map +1 -0
  114. package/cli/dist/commands/diff.js +104 -0
  115. package/cli/dist/commands/diff.js.map +1 -0
  116. package/cli/dist/commands/doctor.d.ts +14 -0
  117. package/cli/dist/commands/doctor.d.ts.map +1 -0
  118. package/cli/dist/commands/doctor.js +62 -0
  119. package/cli/dist/commands/doctor.js.map +1 -0
  120. package/cli/dist/commands/export.d.ts +28 -0
  121. package/cli/dist/commands/export.d.ts.map +1 -0
  122. package/cli/dist/commands/export.js +135 -0
  123. package/cli/dist/commands/export.js.map +1 -0
  124. package/cli/dist/commands/import.d.ts +23 -0
  125. package/cli/dist/commands/import.d.ts.map +1 -0
  126. package/cli/dist/commands/import.js +118 -0
  127. package/cli/dist/commands/import.js.map +1 -0
  128. package/cli/dist/commands/prompt.d.ts +45 -0
  129. package/cli/dist/commands/prompt.d.ts.map +1 -0
  130. package/cli/dist/commands/prompt.js +223 -0
  131. package/cli/dist/commands/prompt.js.map +1 -0
  132. package/cli/dist/commands/spec.d.ts +57 -0
  133. package/cli/dist/commands/spec.d.ts.map +1 -0
  134. package/cli/dist/commands/spec.js +279 -0
  135. package/cli/dist/commands/spec.js.map +1 -0
  136. package/cli/dist/commands/stats.d.ts +18 -0
  137. package/cli/dist/commands/stats.d.ts.map +1 -0
  138. package/cli/dist/commands/stats.js +85 -0
  139. package/cli/dist/commands/stats.js.map +1 -0
  140. package/cli/dist/commands/task.d.ts +65 -0
  141. package/cli/dist/commands/task.d.ts.map +1 -0
  142. package/cli/dist/commands/task.js +282 -0
  143. package/cli/dist/commands/task.js.map +1 -0
  144. package/cli/dist/commands/template.d.ts +17 -0
  145. package/cli/dist/commands/template.d.ts.map +1 -0
  146. package/cli/dist/commands/template.js +55 -0
  147. package/cli/dist/commands/template.js.map +1 -0
  148. package/cli/dist/utils/agent-config.d.ts +129 -0
  149. package/cli/dist/utils/agent-config.d.ts.map +1 -0
  150. package/cli/dist/utils/agent-config.js +297 -0
  151. package/cli/dist/utils/agent-config.js.map +1 -0
  152. package/cli/dist/utils/auto-sync.js +19 -19
  153. package/cli/dist/utils/beads-graph.d.ts +17 -0
  154. package/cli/dist/utils/beads-graph.d.ts.map +1 -0
  155. package/cli/dist/utils/beads-graph.js +150 -0
  156. package/cli/dist/utils/beads-graph.js.map +1 -0
  157. package/cli/dist/utils/beads-integration.d.ts +112 -0
  158. package/cli/dist/utils/beads-integration.d.ts.map +1 -0
  159. package/cli/dist/utils/beads-integration.js +312 -0
  160. package/cli/dist/utils/beads-integration.js.map +1 -0
  161. package/cli/dist/utils/beads-reporter.d.ts +17 -0
  162. package/cli/dist/utils/beads-reporter.d.ts.map +1 -0
  163. package/cli/dist/utils/beads-reporter.js +160 -0
  164. package/cli/dist/utils/beads-reporter.js.map +1 -0
  165. package/cli/dist/utils/cache-manager.d.ts +55 -0
  166. package/cli/dist/utils/cache-manager.d.ts.map +1 -0
  167. package/cli/dist/utils/cache-manager.js +150 -0
  168. package/cli/dist/utils/cache-manager.js.map +1 -0
  169. package/cli/dist/utils/change-manager.d.ts +70 -0
  170. package/cli/dist/utils/change-manager.d.ts.map +1 -0
  171. package/cli/dist/utils/change-manager.js +412 -0
  172. package/cli/dist/utils/change-manager.js.map +1 -0
  173. package/cli/dist/utils/config-manager-enhanced.d.ts +66 -0
  174. package/cli/dist/utils/config-manager-enhanced.d.ts.map +1 -0
  175. package/cli/dist/utils/config-manager-enhanced.js +77 -0
  176. package/cli/dist/utils/config-manager-enhanced.js.map +1 -0
  177. package/cli/dist/utils/context-manager.d.ts +96 -0
  178. package/cli/dist/utils/context-manager.d.ts.map +1 -0
  179. package/cli/dist/utils/context-manager.js +258 -0
  180. package/cli/dist/utils/context-manager.js.map +1 -0
  181. package/cli/dist/utils/diff-engine.d.ts +78 -0
  182. package/cli/dist/utils/diff-engine.d.ts.map +1 -0
  183. package/cli/dist/utils/diff-engine.js +233 -0
  184. package/cli/dist/utils/diff-engine.js.map +1 -0
  185. package/cli/dist/utils/export-system.d.ts +101 -0
  186. package/cli/dist/utils/export-system.d.ts.map +1 -0
  187. package/cli/dist/utils/export-system.js +289 -0
  188. package/cli/dist/utils/export-system.js.map +1 -0
  189. package/cli/dist/utils/health-checker.d.ts +66 -0
  190. package/cli/dist/utils/health-checker.d.ts.map +1 -0
  191. package/cli/dist/utils/health-checker.js +285 -0
  192. package/cli/dist/utils/health-checker.js.map +1 -0
  193. package/cli/dist/utils/import-system.d.ts +74 -0
  194. package/cli/dist/utils/import-system.d.ts.map +1 -0
  195. package/cli/dist/utils/import-system.js +317 -0
  196. package/cli/dist/utils/import-system.js.map +1 -0
  197. package/cli/dist/utils/module-cloner.d.ts +40 -0
  198. package/cli/dist/utils/module-cloner.d.ts.map +1 -0
  199. package/cli/dist/utils/module-cloner.js +136 -0
  200. package/cli/dist/utils/module-cloner.js.map +1 -0
  201. package/cli/dist/utils/prompt-manager.d.ts +90 -0
  202. package/cli/dist/utils/prompt-manager.d.ts.map +1 -0
  203. package/cli/dist/utils/prompt-manager.js +302 -0
  204. package/cli/dist/utils/prompt-manager.js.map +1 -0
  205. package/cli/dist/utils/spec-manager.d.ts +65 -0
  206. package/cli/dist/utils/spec-manager.d.ts.map +1 -0
  207. package/cli/dist/utils/spec-manager.js +329 -0
  208. package/cli/dist/utils/spec-manager.js.map +1 -0
  209. package/cli/dist/utils/stats-collector.d.ts +74 -0
  210. package/cli/dist/utils/stats-collector.d.ts.map +1 -0
  211. package/cli/dist/utils/stats-collector.js +164 -0
  212. package/cli/dist/utils/stats-collector.js.map +1 -0
  213. package/cli/dist/utils/template-engine.d.ts +47 -0
  214. package/cli/dist/utils/template-engine.d.ts.map +1 -0
  215. package/cli/dist/utils/template-engine.js +204 -0
  216. package/cli/dist/utils/template-engine.js.map +1 -0
  217. package/package.json +12 -3
  218. package/augment-extensions/workflows/openspec/README.md +0 -96
  219. package/augment-extensions/workflows/openspec/examples/complete-change-example.md +0 -244
  220. package/augment-extensions/workflows/openspec/module.json +0 -54
  221. package/augment-extensions/workflows/openspec/rules/best-practices.md +0 -272
  222. package/augment-extensions/workflows/openspec/rules/manual-setup.md +0 -231
  223. package/augment-extensions/workflows/openspec/rules/spec-format.md +0 -236
  224. package/augment-extensions/workflows/openspec/rules/workflow.md +0 -214
  225. package/cli/dist/utils/__tests__/adr-validator.example.d.ts +0 -6
  226. package/cli/dist/utils/__tests__/adr-validator.example.d.ts.map +0 -1
  227. package/cli/dist/utils/__tests__/adr-validator.example.js +0 -148
  228. package/cli/dist/utils/__tests__/adr-validator.example.js.map +0 -1
  229. package/cli/dist/utils/adr-validator.d.ts +0 -65
  230. package/cli/dist/utils/adr-validator.d.ts.map +0 -1
  231. package/cli/dist/utils/adr-validator.js +0 -203
  232. package/cli/dist/utils/adr-validator.js.map +0 -1
@@ -1,177 +1,177 @@
1
- /**
2
- * Style Selector - Vendor Priority and Fallback Logic
3
- *
4
- * This module implements the default fallback chain for vendor style selection:
5
- * 1. Google Modern (Material 3 Expressive) - Primary
6
- * 2. Microsoft Fluent 2 - Secondary
7
- * 3. Amazon Cloudscape - Tertiary
8
- *
9
- * The priority chain can be overridden via .augment/extensions.json configuration.
10
- */
11
-
12
- import { VendorStyle, DomainStyle, StylePreferences, StyleSelector } from './types';
13
- import { GOOGLE_MODERN } from './domains/web-page-styles/google-modern';
14
- import { MICROSOFT_FLUENT } from './domains/web-page-styles/microsoft-fluent';
15
- import { AMAZON_CLOUDSCAPE } from './domains/web-page-styles/amazon-cloudscape';
16
-
17
- // ============================================================================
18
- // Default Vendor Priority Chain
19
- // ============================================================================
20
-
21
- /**
22
- * Default vendor priority order:
23
- * 1. Google (Material 3 Expressive)
24
- * 2. Microsoft (Fluent 2)
25
- * 3. Amazon (Cloudscape)
26
- */
27
- export const DEFAULT_VENDOR_PRIORITY: string[] = ['google', 'microsoft', 'amazon'];
28
-
29
- /**
30
- * Vendor style registry
31
- * Maps vendor names to their corresponding VendorStyle implementations
32
- */
33
- const VENDOR_STYLES: Record<string, VendorStyle> = {
34
- google: GOOGLE_MODERN,
35
- microsoft: MICROSOFT_FLUENT,
36
- amazon: AMAZON_CLOUDSCAPE
37
- };
38
-
39
- // ============================================================================
40
- // Style Selector Implementation
41
- // ============================================================================
42
-
43
- /**
44
- * Creates a style selector with configurable vendor priority
45
- *
46
- * @param vendorPriority - Optional custom vendor priority order
47
- * @returns StyleSelector instance
48
- */
49
- export function createStyleSelector(
50
- vendorPriority: string[] = DEFAULT_VENDOR_PRIORITY
51
- ): StyleSelector {
52
- return {
53
- vendorPriority,
54
- fallbackChain: vendorPriority,
55
-
56
- /**
57
- * Selects a vendor style based on preferences and fallback chain
58
- *
59
- * @param preferences - Optional style preferences
60
- * @returns Selected VendorStyle or DomainStyle
61
- */
62
- selectStyle(preferences?: StylePreferences): VendorStyle | DomainStyle {
63
- // If vendor preference is specified, try to use it
64
- if (preferences?.vendor) {
65
- const preferredStyle = VENDOR_STYLES[preferences.vendor.toLowerCase()];
66
- if (preferredStyle) {
67
- return preferredStyle;
68
- }
69
- console.warn(
70
- `Vendor "${preferences.vendor}" not found. Falling back to priority chain.`
71
- );
72
- }
73
-
74
- // Use fallback chain to select vendor
75
- for (const vendor of this.fallbackChain) {
76
- const style = VENDOR_STYLES[vendor.toLowerCase()];
77
- if (style) {
78
- return style;
79
- }
80
- }
81
-
82
- // Ultimate fallback: return Google Modern
83
- console.warn('No vendor found in fallback chain. Using Google Modern as default.');
84
- return GOOGLE_MODERN;
85
- }
86
- };
87
- }
88
-
89
- /**
90
- * Default style selector instance
91
- * Uses the default vendor priority: google → microsoft → amazon
92
- */
93
- export const defaultStyleSelector = createStyleSelector();
94
-
95
- /**
96
- * Selects a vendor style using the default priority chain
97
- *
98
- * @param preferences - Optional style preferences
99
- * @returns Selected VendorStyle
100
- */
101
- export function selectVendorStyle(preferences?: StylePreferences): VendorStyle {
102
- return defaultStyleSelector.selectStyle(preferences) as VendorStyle;
103
- }
104
-
105
- /**
106
- * Gets a specific vendor style by name
107
- *
108
- * @param vendor - Vendor name ('google', 'microsoft', or 'amazon')
109
- * @returns VendorStyle or undefined if not found
110
- */
111
- export function getVendorStyle(vendor: string): VendorStyle | undefined {
112
- return VENDOR_STYLES[vendor.toLowerCase()];
113
- }
114
-
115
- /**
116
- * Gets all available vendor styles
117
- *
118
- * @returns Array of all VendorStyle implementations
119
- */
120
- export function getAllVendorStyles(): VendorStyle[] {
121
- return Object.values(VENDOR_STYLES);
122
- }
123
-
124
- /**
125
- * Checks if a vendor style exists
126
- *
127
- * @param vendor - Vendor name to check
128
- * @returns true if vendor exists, false otherwise
129
- */
130
- export function hasVendorStyle(vendor: string): boolean {
131
- return vendor.toLowerCase() in VENDOR_STYLES;
132
- }
133
-
134
- // ============================================================================
135
- // Usage Examples for AI Agents
136
- // ============================================================================
137
-
138
- /**
139
- * EXAMPLE 1: Use default priority chain
140
- *
141
- * ```typescript
142
- * import { selectVendorStyle } from './style-selector';
143
- *
144
- * const style = selectVendorStyle();
145
- * // Returns GOOGLE_MODERN (first in priority chain)
146
- * ```
147
- *
148
- * EXAMPLE 2: Specify vendor preference
149
- *
150
- * ```typescript
151
- * import { selectVendorStyle } from './style-selector';
152
- *
153
- * const style = selectVendorStyle({ vendor: 'microsoft' });
154
- * // Returns MICROSOFT_FLUENT
155
- * ```
156
- *
157
- * EXAMPLE 3: Custom priority chain
158
- *
159
- * ```typescript
160
- * import { createStyleSelector } from './style-selector';
161
- *
162
- * const selector = createStyleSelector(['amazon', 'microsoft', 'google']);
163
- * const style = selector.selectStyle();
164
- * // Returns AMAZON_CLOUDSCAPE (first in custom chain)
165
- * ```
166
- */
167
-
168
- export default {
169
- createStyleSelector,
170
- defaultStyleSelector,
171
- selectVendorStyle,
172
- getVendorStyle,
173
- getAllVendorStyles,
174
- hasVendorStyle,
175
- DEFAULT_VENDOR_PRIORITY
176
- };
177
-
1
+ /**
2
+ * Style Selector - Vendor Priority and Fallback Logic
3
+ *
4
+ * This module implements the default fallback chain for vendor style selection:
5
+ * 1. Google Modern (Material 3 Expressive) - Primary
6
+ * 2. Microsoft Fluent 2 - Secondary
7
+ * 3. Amazon Cloudscape - Tertiary
8
+ *
9
+ * The priority chain can be overridden via .augment/extensions.json configuration.
10
+ */
11
+
12
+ import { VendorStyle, DomainStyle, StylePreferences, StyleSelector } from './types';
13
+ import { GOOGLE_MODERN } from './domains/web-page-styles/google-modern';
14
+ import { MICROSOFT_FLUENT } from './domains/web-page-styles/microsoft-fluent';
15
+ import { AMAZON_CLOUDSCAPE } from './domains/web-page-styles/amazon-cloudscape';
16
+
17
+ // ============================================================================
18
+ // Default Vendor Priority Chain
19
+ // ============================================================================
20
+
21
+ /**
22
+ * Default vendor priority order:
23
+ * 1. Google (Material 3 Expressive)
24
+ * 2. Microsoft (Fluent 2)
25
+ * 3. Amazon (Cloudscape)
26
+ */
27
+ export const DEFAULT_VENDOR_PRIORITY: string[] = ['google', 'microsoft', 'amazon'];
28
+
29
+ /**
30
+ * Vendor style registry
31
+ * Maps vendor names to their corresponding VendorStyle implementations
32
+ */
33
+ const VENDOR_STYLES: Record<string, VendorStyle> = {
34
+ google: GOOGLE_MODERN,
35
+ microsoft: MICROSOFT_FLUENT,
36
+ amazon: AMAZON_CLOUDSCAPE
37
+ };
38
+
39
+ // ============================================================================
40
+ // Style Selector Implementation
41
+ // ============================================================================
42
+
43
+ /**
44
+ * Creates a style selector with configurable vendor priority
45
+ *
46
+ * @param vendorPriority - Optional custom vendor priority order
47
+ * @returns StyleSelector instance
48
+ */
49
+ export function createStyleSelector(
50
+ vendorPriority: string[] = DEFAULT_VENDOR_PRIORITY
51
+ ): StyleSelector {
52
+ return {
53
+ vendorPriority,
54
+ fallbackChain: vendorPriority,
55
+
56
+ /**
57
+ * Selects a vendor style based on preferences and fallback chain
58
+ *
59
+ * @param preferences - Optional style preferences
60
+ * @returns Selected VendorStyle or DomainStyle
61
+ */
62
+ selectStyle(preferences?: StylePreferences): VendorStyle | DomainStyle {
63
+ // If vendor preference is specified, try to use it
64
+ if (preferences?.vendor) {
65
+ const preferredStyle = VENDOR_STYLES[preferences.vendor.toLowerCase()];
66
+ if (preferredStyle) {
67
+ return preferredStyle;
68
+ }
69
+ console.warn(
70
+ `Vendor "${preferences.vendor}" not found. Falling back to priority chain.`
71
+ );
72
+ }
73
+
74
+ // Use fallback chain to select vendor
75
+ for (const vendor of this.fallbackChain) {
76
+ const style = VENDOR_STYLES[vendor.toLowerCase()];
77
+ if (style) {
78
+ return style;
79
+ }
80
+ }
81
+
82
+ // Ultimate fallback: return Google Modern
83
+ console.warn('No vendor found in fallback chain. Using Google Modern as default.');
84
+ return GOOGLE_MODERN;
85
+ }
86
+ };
87
+ }
88
+
89
+ /**
90
+ * Default style selector instance
91
+ * Uses the default vendor priority: google → microsoft → amazon
92
+ */
93
+ export const defaultStyleSelector = createStyleSelector();
94
+
95
+ /**
96
+ * Selects a vendor style using the default priority chain
97
+ *
98
+ * @param preferences - Optional style preferences
99
+ * @returns Selected VendorStyle
100
+ */
101
+ export function selectVendorStyle(preferences?: StylePreferences): VendorStyle {
102
+ return defaultStyleSelector.selectStyle(preferences) as VendorStyle;
103
+ }
104
+
105
+ /**
106
+ * Gets a specific vendor style by name
107
+ *
108
+ * @param vendor - Vendor name ('google', 'microsoft', or 'amazon')
109
+ * @returns VendorStyle or undefined if not found
110
+ */
111
+ export function getVendorStyle(vendor: string): VendorStyle | undefined {
112
+ return VENDOR_STYLES[vendor.toLowerCase()];
113
+ }
114
+
115
+ /**
116
+ * Gets all available vendor styles
117
+ *
118
+ * @returns Array of all VendorStyle implementations
119
+ */
120
+ export function getAllVendorStyles(): VendorStyle[] {
121
+ return Object.values(VENDOR_STYLES);
122
+ }
123
+
124
+ /**
125
+ * Checks if a vendor style exists
126
+ *
127
+ * @param vendor - Vendor name to check
128
+ * @returns true if vendor exists, false otherwise
129
+ */
130
+ export function hasVendorStyle(vendor: string): boolean {
131
+ return vendor.toLowerCase() in VENDOR_STYLES;
132
+ }
133
+
134
+ // ============================================================================
135
+ // Usage Examples for AI Agents
136
+ // ============================================================================
137
+
138
+ /**
139
+ * EXAMPLE 1: Use default priority chain
140
+ *
141
+ * ```typescript
142
+ * import { selectVendorStyle } from './style-selector';
143
+ *
144
+ * const style = selectVendorStyle();
145
+ * // Returns GOOGLE_MODERN (first in priority chain)
146
+ * ```
147
+ *
148
+ * EXAMPLE 2: Specify vendor preference
149
+ *
150
+ * ```typescript
151
+ * import { selectVendorStyle } from './style-selector';
152
+ *
153
+ * const style = selectVendorStyle({ vendor: 'microsoft' });
154
+ * // Returns MICROSOFT_FLUENT
155
+ * ```
156
+ *
157
+ * EXAMPLE 3: Custom priority chain
158
+ *
159
+ * ```typescript
160
+ * import { createStyleSelector } from './style-selector';
161
+ *
162
+ * const selector = createStyleSelector(['amazon', 'microsoft', 'google']);
163
+ * const style = selector.selectStyle();
164
+ * // Returns AMAZON_CLOUDSCAPE (first in custom chain)
165
+ * ```
166
+ */
167
+
168
+ export default {
169
+ createStyleSelector,
170
+ defaultStyleSelector,
171
+ selectVendorStyle,
172
+ getVendorStyle,
173
+ getAllVendorStyles,
174
+ hasVendorStyle,
175
+ DEFAULT_VENDOR_PRIORITY
176
+ };
177
+