@nahisaho/musubix-core 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/bin/musubix.js +18 -0
  2. package/dist/__tests__/index.test.d.ts +2 -0
  3. package/dist/__tests__/index.test.d.ts.map +1 -0
  4. package/dist/__tests__/index.test.js +27 -0
  5. package/dist/__tests__/index.test.js.map +1 -0
  6. package/dist/auth/auth-manager.d.ts +320 -0
  7. package/dist/auth/auth-manager.d.ts.map +1 -0
  8. package/dist/auth/auth-manager.js +580 -0
  9. package/dist/auth/auth-manager.js.map +1 -0
  10. package/dist/cli/base.d.ts +58 -0
  11. package/dist/cli/base.d.ts.map +1 -0
  12. package/dist/cli/base.js +93 -0
  13. package/dist/cli/base.js.map +1 -0
  14. package/dist/cli/commands/help.d.ts +17 -0
  15. package/dist/cli/commands/help.d.ts.map +1 -0
  16. package/dist/cli/commands/help.js +228 -0
  17. package/dist/cli/commands/help.js.map +1 -0
  18. package/dist/cli/commands/index.d.ts +14 -0
  19. package/dist/cli/commands/index.d.ts.map +1 -0
  20. package/dist/cli/commands/index.js +25 -0
  21. package/dist/cli/commands/index.js.map +1 -0
  22. package/dist/cli/commands/init.d.ts +38 -0
  23. package/dist/cli/commands/init.d.ts.map +1 -0
  24. package/dist/cli/commands/init.js +258 -0
  25. package/dist/cli/commands/init.js.map +1 -0
  26. package/dist/cli/index.d.ts +9 -0
  27. package/dist/cli/index.d.ts.map +1 -0
  28. package/dist/cli/index.js +9 -0
  29. package/dist/cli/index.js.map +1 -0
  30. package/dist/codegen/coding-standards.d.ts +250 -0
  31. package/dist/codegen/coding-standards.d.ts.map +1 -0
  32. package/dist/codegen/coding-standards.js +976 -0
  33. package/dist/codegen/coding-standards.js.map +1 -0
  34. package/dist/codegen/coverage-reporter.d.ts +264 -0
  35. package/dist/codegen/coverage-reporter.d.ts.map +1 -0
  36. package/dist/codegen/coverage-reporter.js +697 -0
  37. package/dist/codegen/coverage-reporter.js.map +1 -0
  38. package/dist/codegen/dependency-analyzer.d.ts +271 -0
  39. package/dist/codegen/dependency-analyzer.d.ts.map +1 -0
  40. package/dist/codegen/dependency-analyzer.js +661 -0
  41. package/dist/codegen/dependency-analyzer.js.map +1 -0
  42. package/dist/codegen/generator.d.ts +275 -0
  43. package/dist/codegen/generator.d.ts.map +1 -0
  44. package/dist/codegen/generator.js +781 -0
  45. package/dist/codegen/generator.js.map +1 -0
  46. package/dist/codegen/index.d.ts +18 -0
  47. package/dist/codegen/index.d.ts.map +1 -0
  48. package/dist/codegen/index.js +27 -0
  49. package/dist/codegen/index.js.map +1 -0
  50. package/dist/codegen/integration-test-generator.d.ts +312 -0
  51. package/dist/codegen/integration-test-generator.d.ts.map +1 -0
  52. package/dist/codegen/integration-test-generator.js +765 -0
  53. package/dist/codegen/integration-test-generator.js.map +1 -0
  54. package/dist/codegen/pattern-conformance.d.ts +309 -0
  55. package/dist/codegen/pattern-conformance.d.ts.map +1 -0
  56. package/dist/codegen/pattern-conformance.js +590 -0
  57. package/dist/codegen/pattern-conformance.js.map +1 -0
  58. package/dist/codegen/quality-metrics.d.ts +235 -0
  59. package/dist/codegen/quality-metrics.d.ts.map +1 -0
  60. package/dist/codegen/quality-metrics.js +439 -0
  61. package/dist/codegen/quality-metrics.js.map +1 -0
  62. package/dist/codegen/security-scanner.d.ts +179 -0
  63. package/dist/codegen/security-scanner.d.ts.map +1 -0
  64. package/dist/codegen/security-scanner.js +495 -0
  65. package/dist/codegen/security-scanner.js.map +1 -0
  66. package/dist/codegen/static-analyzer.d.ts +188 -0
  67. package/dist/codegen/static-analyzer.d.ts.map +1 -0
  68. package/dist/codegen/static-analyzer.js +490 -0
  69. package/dist/codegen/static-analyzer.js.map +1 -0
  70. package/dist/codegen/unit-test-generator.d.ts +289 -0
  71. package/dist/codegen/unit-test-generator.d.ts.map +1 -0
  72. package/dist/codegen/unit-test-generator.js +634 -0
  73. package/dist/codegen/unit-test-generator.js.map +1 -0
  74. package/dist/design/adr-generator.d.ts +227 -0
  75. package/dist/design/adr-generator.d.ts.map +1 -0
  76. package/dist/design/adr-generator.js +423 -0
  77. package/dist/design/adr-generator.js.map +1 -0
  78. package/dist/design/c4-generator.d.ts +267 -0
  79. package/dist/design/c4-generator.d.ts.map +1 -0
  80. package/dist/design/c4-generator.js +453 -0
  81. package/dist/design/c4-generator.js.map +1 -0
  82. package/dist/design/framework-optimizer.d.ts +190 -0
  83. package/dist/design/framework-optimizer.d.ts.map +1 -0
  84. package/dist/design/framework-optimizer.js +589 -0
  85. package/dist/design/framework-optimizer.js.map +1 -0
  86. package/dist/design/index.d.ts +12 -0
  87. package/dist/design/index.d.ts.map +1 -0
  88. package/dist/design/index.js +13 -0
  89. package/dist/design/index.js.map +1 -0
  90. package/dist/design/pattern-detector.d.ts +270 -0
  91. package/dist/design/pattern-detector.d.ts.map +1 -0
  92. package/dist/design/pattern-detector.js +621 -0
  93. package/dist/design/pattern-detector.js.map +1 -0
  94. package/dist/design/solid-validator.d.ts +188 -0
  95. package/dist/design/solid-validator.d.ts.map +1 -0
  96. package/dist/design/solid-validator.js +579 -0
  97. package/dist/design/solid-validator.js.map +1 -0
  98. package/dist/error/data-persistence.d.ts +311 -0
  99. package/dist/error/data-persistence.d.ts.map +1 -0
  100. package/dist/error/data-persistence.js +586 -0
  101. package/dist/error/data-persistence.js.map +1 -0
  102. package/dist/error/graceful-degradation.d.ts +309 -0
  103. package/dist/error/graceful-degradation.d.ts.map +1 -0
  104. package/dist/error/graceful-degradation.js +510 -0
  105. package/dist/error/graceful-degradation.js.map +1 -0
  106. package/dist/error/index.d.ts +11 -0
  107. package/dist/error/index.d.ts.map +1 -0
  108. package/dist/error/index.js +19 -0
  109. package/dist/error/index.js.map +1 -0
  110. package/dist/explanation/explanation-generator.d.ts +228 -0
  111. package/dist/explanation/explanation-generator.d.ts.map +1 -0
  112. package/dist/explanation/explanation-generator.js +662 -0
  113. package/dist/explanation/explanation-generator.js.map +1 -0
  114. package/dist/explanation/index.d.ts +11 -0
  115. package/dist/explanation/index.d.ts.map +1 -0
  116. package/dist/explanation/index.js +19 -0
  117. package/dist/explanation/index.js.map +1 -0
  118. package/dist/explanation/reasoning-chain.d.ts +314 -0
  119. package/dist/explanation/reasoning-chain.d.ts.map +1 -0
  120. package/dist/explanation/reasoning-chain.js +414 -0
  121. package/dist/explanation/reasoning-chain.js.map +1 -0
  122. package/dist/explanation/visual-explanation.d.ts +315 -0
  123. package/dist/explanation/visual-explanation.d.ts.map +1 -0
  124. package/dist/explanation/visual-explanation.js +667 -0
  125. package/dist/explanation/visual-explanation.js.map +1 -0
  126. package/dist/index.d.ts +33 -0
  127. package/dist/index.d.ts.map +1 -0
  128. package/dist/index.js +47 -0
  129. package/dist/index.js.map +1 -0
  130. package/dist/requirements/decomposer.d.ts +235 -0
  131. package/dist/requirements/decomposer.d.ts.map +1 -0
  132. package/dist/requirements/decomposer.js +587 -0
  133. package/dist/requirements/decomposer.js.map +1 -0
  134. package/dist/requirements/related-finder.d.ts +261 -0
  135. package/dist/requirements/related-finder.d.ts.map +1 -0
  136. package/dist/requirements/related-finder.js +629 -0
  137. package/dist/requirements/related-finder.js.map +1 -0
  138. package/dist/traceability/impact.d.ts +196 -0
  139. package/dist/traceability/impact.d.ts.map +1 -0
  140. package/dist/traceability/impact.js +438 -0
  141. package/dist/traceability/impact.js.map +1 -0
  142. package/dist/traceability/index.d.ts +9 -0
  143. package/dist/traceability/index.d.ts.map +1 -0
  144. package/dist/traceability/index.js +10 -0
  145. package/dist/traceability/index.js.map +1 -0
  146. package/dist/traceability/manager.d.ts +266 -0
  147. package/dist/traceability/manager.d.ts.map +1 -0
  148. package/dist/traceability/manager.js +412 -0
  149. package/dist/traceability/manager.js.map +1 -0
  150. package/dist/types/common.d.ts +294 -0
  151. package/dist/types/common.d.ts.map +1 -0
  152. package/dist/types/common.js +15 -0
  153. package/dist/types/common.js.map +1 -0
  154. package/dist/types/ears.d.ts +158 -0
  155. package/dist/types/ears.d.ts.map +1 -0
  156. package/dist/types/ears.js +33 -0
  157. package/dist/types/ears.js.map +1 -0
  158. package/dist/types/errors.d.ts +176 -0
  159. package/dist/types/errors.d.ts.map +1 -0
  160. package/dist/types/errors.js +55 -0
  161. package/dist/types/errors.js.map +1 -0
  162. package/dist/types/index.d.ts +10 -0
  163. package/dist/types/index.d.ts.map +1 -0
  164. package/dist/types/index.js +10 -0
  165. package/dist/types/index.js.map +1 -0
  166. package/dist/utils/data-protector.d.ts +122 -0
  167. package/dist/utils/data-protector.d.ts.map +1 -0
  168. package/dist/utils/data-protector.js +275 -0
  169. package/dist/utils/data-protector.js.map +1 -0
  170. package/dist/utils/error-handler.d.ts +101 -0
  171. package/dist/utils/error-handler.d.ts.map +1 -0
  172. package/dist/utils/error-handler.js +324 -0
  173. package/dist/utils/error-handler.js.map +1 -0
  174. package/dist/utils/i18n-manager.d.ts +259 -0
  175. package/dist/utils/i18n-manager.d.ts.map +1 -0
  176. package/dist/utils/i18n-manager.js +554 -0
  177. package/dist/utils/i18n-manager.js.map +1 -0
  178. package/dist/utils/index.d.ts +10 -0
  179. package/dist/utils/index.d.ts.map +1 -0
  180. package/dist/utils/index.js +10 -0
  181. package/dist/utils/index.js.map +1 -0
  182. package/dist/utils/logger.d.ts +120 -0
  183. package/dist/utils/logger.d.ts.map +1 -0
  184. package/dist/utils/logger.js +237 -0
  185. package/dist/utils/logger.js.map +1 -0
  186. package/dist/utils/performance-profiler.d.ts +251 -0
  187. package/dist/utils/performance-profiler.d.ts.map +1 -0
  188. package/dist/utils/performance-profiler.js +458 -0
  189. package/dist/utils/performance-profiler.js.map +1 -0
  190. package/dist/utils/scalability-optimizer.d.ts +294 -0
  191. package/dist/utils/scalability-optimizer.d.ts.map +1 -0
  192. package/dist/utils/scalability-optimizer.js +606 -0
  193. package/dist/utils/scalability-optimizer.js.map +1 -0
  194. package/dist/utils/structured-logger.d.ts +294 -0
  195. package/dist/utils/structured-logger.d.ts.map +1 -0
  196. package/dist/utils/structured-logger.js +630 -0
  197. package/dist/utils/structured-logger.js.map +1 -0
  198. package/dist/utils/version-compatibility.d.ts +217 -0
  199. package/dist/utils/version-compatibility.d.ts.map +1 -0
  200. package/dist/utils/version-compatibility.js +443 -0
  201. package/dist/utils/version-compatibility.js.map +1 -0
  202. package/dist/validators/ears-validator.d.ts +182 -0
  203. package/dist/validators/ears-validator.d.ts.map +1 -0
  204. package/dist/validators/ears-validator.js +357 -0
  205. package/dist/validators/ears-validator.js.map +1 -0
  206. package/dist/validators/index.d.ts +8 -0
  207. package/dist/validators/index.d.ts.map +1 -0
  208. package/dist/validators/index.js +9 -0
  209. package/dist/validators/index.js.map +1 -0
  210. package/dist/version.d.ts +8 -0
  211. package/dist/version.d.ts.map +1 -0
  212. package/dist/version.js +8 -0
  213. package/dist/version.js.map +1 -0
  214. package/package.json +100 -0
@@ -0,0 +1,182 @@
1
+ /**
2
+ * EARS Validator
3
+ *
4
+ * Validates requirements against EARS (Easy Approach to Requirements Syntax) patterns
5
+ *
6
+ * @packageDocumentation
7
+ * @module validators/ears-validator
8
+ *
9
+ * @see REQ-RA-001 - EARS Pattern Recognition
10
+ * @see Article II - Requirements First
11
+ */
12
+ /**
13
+ * Validation issue
14
+ */
15
+ export interface ValidationIssue {
16
+ /** Issue code (same as ruleId) */
17
+ code?: string;
18
+ /** Rule ID */
19
+ ruleId?: string;
20
+ /** Issue message */
21
+ message: string;
22
+ /** Severity */
23
+ severity: 'error' | 'warning' | 'info';
24
+ /** Location if applicable */
25
+ location?: string;
26
+ }
27
+ /**
28
+ * EARS Pattern types
29
+ */
30
+ export type EARSPatternType = 'ubiquitous' | 'event-driven' | 'state-driven' | 'unwanted' | 'optional' | 'complex';
31
+ /**
32
+ * EARS Pattern match
33
+ */
34
+ export interface EARSPatternMatch {
35
+ /** Pattern type */
36
+ type: EARSPatternType;
37
+ /** Match confidence (0-1) */
38
+ confidence: number;
39
+ /** Extracted components */
40
+ components: EARSComponents;
41
+ /** Original text */
42
+ original: string;
43
+ /** Suggested rewrite (if needed) */
44
+ suggestion?: string;
45
+ }
46
+ /**
47
+ * EARS Components extracted from requirement
48
+ */
49
+ export interface EARSComponents {
50
+ /** System or actor */
51
+ system?: string;
52
+ /** Trigger condition (event-driven) */
53
+ trigger?: string;
54
+ /** State condition (state-driven) */
55
+ state?: string;
56
+ /** Precondition (unwanted behavior) */
57
+ condition?: string;
58
+ /** Feature flag (optional) */
59
+ feature?: string;
60
+ /** Action/behavior */
61
+ action?: string;
62
+ /** Response/result */
63
+ response?: string;
64
+ }
65
+ /**
66
+ * EARS validation options
67
+ */
68
+ export interface EARSValidatorOptions {
69
+ /** Minimum confidence threshold */
70
+ confidenceThreshold: number;
71
+ /** Allow complex patterns */
72
+ allowComplex: boolean;
73
+ /** Strict mode (require exact pattern match) */
74
+ strictMode: boolean;
75
+ /** Suggest rewrites for non-conforming requirements */
76
+ suggestRewrites: boolean;
77
+ }
78
+ /**
79
+ * Default validation options
80
+ */
81
+ export declare const DEFAULT_EARS_OPTIONS: EARSValidatorOptions;
82
+ /**
83
+ * EARS Validator
84
+ *
85
+ * Validates and analyzes requirements using EARS patterns
86
+ */
87
+ export declare class EARSValidator {
88
+ private options;
89
+ constructor(options?: Partial<EARSValidatorOptions>);
90
+ /**
91
+ * Validate a single requirement
92
+ */
93
+ validateRequirement(requirement: string): EARSValidationResult;
94
+ /**
95
+ * Validate multiple requirements
96
+ */
97
+ validateRequirements(requirements: string[]): EARSBatchValidationResult;
98
+ /**
99
+ * Match requirement against EARS patterns
100
+ */
101
+ private matchPattern;
102
+ /**
103
+ * Match complex (combined) patterns
104
+ */
105
+ private matchComplexPattern;
106
+ /**
107
+ * Calculate confidence score for pattern match
108
+ */
109
+ private calculateConfidence;
110
+ /**
111
+ * Check quality of matched requirement
112
+ */
113
+ private checkQuality;
114
+ /**
115
+ * Generate rewrite suggestions for non-conforming requirements
116
+ */
117
+ private generateRewrites;
118
+ /**
119
+ * Extract action from text
120
+ */
121
+ private extractAction;
122
+ /**
123
+ * Analyze pattern distribution
124
+ */
125
+ private analyzeDistribution;
126
+ /**
127
+ * Aggregate issues from all results
128
+ */
129
+ private aggregateIssues;
130
+ /**
131
+ * Get pattern description
132
+ */
133
+ static getPatternDescription(type: EARSPatternType): string;
134
+ /**
135
+ * Get all pattern descriptions
136
+ */
137
+ static getAllPatterns(): Array<{
138
+ type: EARSPatternType;
139
+ description: string;
140
+ }>;
141
+ }
142
+ /**
143
+ * EARS Validation Result
144
+ */
145
+ export interface EARSValidationResult {
146
+ /** Is valid EARS format */
147
+ valid: boolean;
148
+ /** Pattern match details */
149
+ patternMatch: EARSPatternMatch | null;
150
+ /** Quality issues */
151
+ issues: ValidationIssue[];
152
+ /** Rewrite suggestions */
153
+ suggestions: string[];
154
+ }
155
+ /**
156
+ * EARS Batch Validation Result
157
+ */
158
+ export interface EARSBatchValidationResult {
159
+ /** Total requirements */
160
+ total: number;
161
+ /** Valid requirements */
162
+ valid: number;
163
+ /** Invalid requirements */
164
+ invalid: number;
165
+ /** Coverage ratio */
166
+ coverage: number;
167
+ /** Individual results */
168
+ results: Array<{
169
+ index: number;
170
+ requirement: string;
171
+ result: EARSValidationResult;
172
+ }>;
173
+ /** Pattern distribution */
174
+ patternDistribution: Record<EARSPatternType, number>;
175
+ /** Aggregated issues */
176
+ overallIssues: Map<string, number>;
177
+ }
178
+ /**
179
+ * Create EARS validator instance
180
+ */
181
+ export declare function createEARSValidator(options?: Partial<EARSValidatorOptions>): EARSValidator;
182
+ //# sourceMappingURL=ears-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ears-validator.d.ts","sourceRoot":"","sources":["../../src/validators/ears-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,357 @@
1
+ /**
2
+ * EARS Validator
3
+ *
4
+ * Validates requirements against EARS (Easy Approach to Requirements Syntax) patterns
5
+ *
6
+ * @packageDocumentation
7
+ * @module validators/ears-validator
8
+ *
9
+ * @see REQ-RA-001 - EARS Pattern Recognition
10
+ * @see Article II - Requirements First
11
+ */
12
+ /**
13
+ * Default validation options
14
+ */
15
+ export const DEFAULT_EARS_OPTIONS = {
16
+ confidenceThreshold: 0.7,
17
+ allowComplex: true,
18
+ strictMode: false,
19
+ suggestRewrites: true,
20
+ };
21
+ /**
22
+ * Pattern definitions for EARS
23
+ */
24
+ const EARS_PATTERNS = [
25
+ {
26
+ type: 'ubiquitous',
27
+ regex: /^(?:the\s+)?(.+?)\s+shall\s+(.+)$/i,
28
+ extract: (match) => ({
29
+ system: match[1]?.trim(),
30
+ action: match[2]?.trim(),
31
+ }),
32
+ description: 'The <system> shall <action>',
33
+ },
34
+ {
35
+ type: 'event-driven',
36
+ regex: /^when\s+(.+?),?\s+(?:the\s+)?(.+?)\s+shall\s+(.+)$/i,
37
+ extract: (match) => ({
38
+ trigger: match[1]?.trim(),
39
+ system: match[2]?.trim(),
40
+ action: match[3]?.trim(),
41
+ }),
42
+ description: 'When <trigger>, the <system> shall <action>',
43
+ },
44
+ {
45
+ type: 'state-driven',
46
+ regex: /^while\s+(.+?),?\s+(?:the\s+)?(.+?)\s+shall\s+(.+)$/i,
47
+ extract: (match) => ({
48
+ state: match[1]?.trim(),
49
+ system: match[2]?.trim(),
50
+ action: match[3]?.trim(),
51
+ }),
52
+ description: 'While <state>, the <system> shall <action>',
53
+ },
54
+ {
55
+ type: 'unwanted',
56
+ regex: /^if\s+(.+?),?\s+(?:then\s+)?(?:the\s+)?(.+?)\s+shall\s+(.+)$/i,
57
+ extract: (match) => ({
58
+ condition: match[1]?.trim(),
59
+ system: match[2]?.trim(),
60
+ action: match[3]?.trim(),
61
+ }),
62
+ description: 'If <condition>, then the <system> shall <action>',
63
+ },
64
+ {
65
+ type: 'optional',
66
+ regex: /^where\s+(.+?),?\s+(?:the\s+)?(.+?)\s+shall\s+(.+)$/i,
67
+ extract: (match) => ({
68
+ feature: match[1]?.trim(),
69
+ system: match[2]?.trim(),
70
+ action: match[3]?.trim(),
71
+ }),
72
+ description: 'Where <feature>, the <system> shall <action>',
73
+ },
74
+ ];
75
+ /**
76
+ * EARS Validator
77
+ *
78
+ * Validates and analyzes requirements using EARS patterns
79
+ */
80
+ export class EARSValidator {
81
+ options;
82
+ constructor(options) {
83
+ this.options = { ...DEFAULT_EARS_OPTIONS, ...options };
84
+ }
85
+ /**
86
+ * Validate a single requirement
87
+ */
88
+ validateRequirement(requirement) {
89
+ const trimmed = requirement.trim();
90
+ if (!trimmed) {
91
+ return {
92
+ valid: false,
93
+ patternMatch: null,
94
+ issues: [{
95
+ severity: 'error',
96
+ message: 'Requirement text is empty',
97
+ ruleId: 'ears-empty',
98
+ }],
99
+ suggestions: ['Provide a non-empty requirement text'],
100
+ };
101
+ }
102
+ // Try to match EARS patterns
103
+ const match = this.matchPattern(trimmed);
104
+ if (match && match.confidence >= this.options.confidenceThreshold) {
105
+ return {
106
+ valid: true,
107
+ patternMatch: match,
108
+ issues: this.checkQuality(match),
109
+ suggestions: [],
110
+ };
111
+ }
112
+ // No pattern match - provide suggestions
113
+ const issues = [{
114
+ severity: this.options.strictMode ? 'error' : 'warning',
115
+ message: 'Requirement does not match any EARS pattern',
116
+ ruleId: 'ears-no-pattern',
117
+ }];
118
+ const suggestions = this.options.suggestRewrites
119
+ ? this.generateRewrites(trimmed)
120
+ : [];
121
+ return {
122
+ valid: !this.options.strictMode,
123
+ patternMatch: match,
124
+ issues,
125
+ suggestions,
126
+ };
127
+ }
128
+ /**
129
+ * Validate multiple requirements
130
+ */
131
+ validateRequirements(requirements) {
132
+ const results = requirements.map((req, index) => ({
133
+ index,
134
+ requirement: req,
135
+ result: this.validateRequirement(req),
136
+ }));
137
+ const valid = results.filter((r) => r.result.valid);
138
+ const invalid = results.filter((r) => !r.result.valid);
139
+ // Analyze pattern distribution
140
+ const patternDistribution = this.analyzeDistribution(results);
141
+ return {
142
+ total: requirements.length,
143
+ valid: valid.length,
144
+ invalid: invalid.length,
145
+ coverage: requirements.length > 0 ? valid.length / requirements.length : 0,
146
+ results,
147
+ patternDistribution,
148
+ overallIssues: this.aggregateIssues(results),
149
+ };
150
+ }
151
+ /**
152
+ * Match requirement against EARS patterns
153
+ */
154
+ matchPattern(text) {
155
+ let bestMatch = null;
156
+ let bestConfidence = 0;
157
+ for (const pattern of EARS_PATTERNS) {
158
+ const match = text.match(pattern.regex);
159
+ if (match) {
160
+ const components = pattern.extract(match);
161
+ const confidence = this.calculateConfidence(components, pattern.type);
162
+ if (confidence > bestConfidence) {
163
+ bestConfidence = confidence;
164
+ bestMatch = {
165
+ type: pattern.type,
166
+ confidence,
167
+ components,
168
+ original: text,
169
+ };
170
+ }
171
+ }
172
+ }
173
+ // Check for complex patterns
174
+ if (!bestMatch && this.options.allowComplex) {
175
+ bestMatch = this.matchComplexPattern(text);
176
+ }
177
+ return bestMatch;
178
+ }
179
+ /**
180
+ * Match complex (combined) patterns
181
+ */
182
+ matchComplexPattern(text) {
183
+ // Complex: When + While combination
184
+ const complexRegex = /^when\s+(.+?)\s+(?:and\s+)?while\s+(.+?),?\s+(?:the\s+)?(.+?)\s+shall\s+(.+)$/i;
185
+ const match = text.match(complexRegex);
186
+ if (match) {
187
+ return {
188
+ type: 'complex',
189
+ confidence: 0.85,
190
+ components: {
191
+ trigger: match[1]?.trim(),
192
+ state: match[2]?.trim(),
193
+ system: match[3]?.trim(),
194
+ action: match[4]?.trim(),
195
+ },
196
+ original: text,
197
+ };
198
+ }
199
+ return null;
200
+ }
201
+ /**
202
+ * Calculate confidence score for pattern match
203
+ */
204
+ calculateConfidence(components, _type) {
205
+ let confidence = 0.5; // Base confidence for pattern match
206
+ // Check component quality
207
+ if (components.system && components.system.length > 2) {
208
+ confidence += 0.15;
209
+ }
210
+ if (components.action && components.action.length > 5) {
211
+ confidence += 0.2;
212
+ }
213
+ // Bonus for well-formed components
214
+ if (components.action?.includes(' ')) {
215
+ confidence += 0.1; // Action has multiple words
216
+ }
217
+ // Cap at 1.0
218
+ return Math.min(confidence, 1.0);
219
+ }
220
+ /**
221
+ * Check quality of matched requirement
222
+ */
223
+ checkQuality(match) {
224
+ const issues = [];
225
+ const { components } = match;
226
+ // Check for vague terms
227
+ const vagueTerms = ['appropriate', 'adequate', 'etc', 'and/or', 'as needed'];
228
+ const text = match.original.toLowerCase();
229
+ for (const term of vagueTerms) {
230
+ if (text.includes(term)) {
231
+ issues.push({
232
+ severity: 'warning',
233
+ message: `Requirement contains vague term: "${term}"`,
234
+ ruleId: 'ears-vague-term',
235
+ });
236
+ }
237
+ }
238
+ // Check system name
239
+ if (components.system && components.system.length < 3) {
240
+ issues.push({
241
+ severity: 'warning',
242
+ message: 'System name is too short',
243
+ ruleId: 'ears-short-system',
244
+ });
245
+ }
246
+ // Check action specificity
247
+ if (components.action) {
248
+ const actionWords = components.action.split(/\s+/).length;
249
+ if (actionWords < 2) {
250
+ issues.push({
251
+ severity: 'info',
252
+ message: 'Action could be more specific',
253
+ ruleId: 'ears-vague-action',
254
+ });
255
+ }
256
+ }
257
+ // Check for measurability
258
+ const hasMetric = /\d+|percent|seconds?|minutes?|hours?|ms|milliseconds?/i.test(text);
259
+ if (!hasMetric && match.type !== 'ubiquitous') {
260
+ issues.push({
261
+ severity: 'info',
262
+ message: 'Consider adding measurable criteria',
263
+ ruleId: 'ears-no-metric',
264
+ });
265
+ }
266
+ return issues;
267
+ }
268
+ /**
269
+ * Generate rewrite suggestions for non-conforming requirements
270
+ */
271
+ generateRewrites(text) {
272
+ const suggestions = [];
273
+ const lowerText = text.toLowerCase();
274
+ // Detect potential pattern and suggest
275
+ if (lowerText.includes('when') || lowerText.includes('upon')) {
276
+ suggestions.push(`Event-driven: "When <trigger>, the system shall ${this.extractAction(text)}"`);
277
+ }
278
+ if (lowerText.includes('while') || lowerText.includes('during')) {
279
+ suggestions.push(`State-driven: "While <state>, the system shall ${this.extractAction(text)}"`);
280
+ }
281
+ if (lowerText.includes('if') || lowerText.includes('in case')) {
282
+ suggestions.push(`Unwanted behavior: "If <condition>, then the system shall ${this.extractAction(text)}"`);
283
+ }
284
+ // Default ubiquitous suggestion
285
+ if (suggestions.length === 0) {
286
+ suggestions.push(`Ubiquitous: "The system shall ${this.extractAction(text)}"`);
287
+ }
288
+ return suggestions;
289
+ }
290
+ /**
291
+ * Extract action from text
292
+ */
293
+ extractAction(text) {
294
+ // Try to find verb phrase
295
+ const verbMatch = text.match(/(?:should|must|will|shall|can|may)\s+(.+?)(?:\.|$)/i);
296
+ if (verbMatch) {
297
+ return verbMatch[1].trim();
298
+ }
299
+ // Return cleaned text as action
300
+ return text.replace(/^(?:the\s+)?system\s+/i, '').trim() || '<action>';
301
+ }
302
+ /**
303
+ * Analyze pattern distribution
304
+ */
305
+ analyzeDistribution(results) {
306
+ const distribution = {
307
+ 'ubiquitous': 0,
308
+ 'event-driven': 0,
309
+ 'state-driven': 0,
310
+ 'unwanted': 0,
311
+ 'optional': 0,
312
+ 'complex': 0,
313
+ };
314
+ for (const { result } of results) {
315
+ if (result.patternMatch) {
316
+ distribution[result.patternMatch.type]++;
317
+ }
318
+ }
319
+ return distribution;
320
+ }
321
+ /**
322
+ * Aggregate issues from all results
323
+ */
324
+ aggregateIssues(results) {
325
+ const issueCount = new Map();
326
+ for (const { result } of results) {
327
+ for (const issue of result.issues) {
328
+ const key = issue.ruleId ?? issue.message;
329
+ issueCount.set(key, (issueCount.get(key) ?? 0) + 1);
330
+ }
331
+ }
332
+ return issueCount;
333
+ }
334
+ /**
335
+ * Get pattern description
336
+ */
337
+ static getPatternDescription(type) {
338
+ const pattern = EARS_PATTERNS.find((p) => p.type === type);
339
+ return pattern?.description ?? 'Unknown pattern';
340
+ }
341
+ /**
342
+ * Get all pattern descriptions
343
+ */
344
+ static getAllPatterns() {
345
+ return EARS_PATTERNS.map((p) => ({
346
+ type: p.type,
347
+ description: p.description,
348
+ }));
349
+ }
350
+ }
351
+ /**
352
+ * Create EARS validator instance
353
+ */
354
+ export function createEARSValidator(options) {
355
+ return new EARSValidator(options);
356
+ }
357
+ //# sourceMappingURL=ears-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ears-validator.js","sourceRoot":"","sources":["../../src/validators/ears-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Validators Module
3
+ *
4
+ * @packageDocumentation
5
+ * @module validators
6
+ */
7
+ export { EARSValidator, createEARSValidator, type EARSPatternType, type EARSPatternMatch, type EARSValidatorOptions, type EARSBatchValidationResult, DEFAULT_EARS_OPTIONS, } from './ears-validator.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validators/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,oBAAoB,GACrB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Validators Module
3
+ *
4
+ * @packageDocumentation
5
+ * @module validators
6
+ */
7
+ export { EARSValidator, createEARSValidator, DEFAULT_EARS_OPTIONS, } from './ears-validator.js';
8
+ // Note: EARSComponents and EARSValidationResult are exported from types module
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validators/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,aAAa,EACb,mBAAmB,EAKnB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAE7B,+EAA+E"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * MUSUBIX Version
3
+ *
4
+ * @packageDocumentation
5
+ * @module @musubix/core/version
6
+ */
7
+ export declare const VERSION = "1.0.0";
8
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,OAAO,UAAU,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * MUSUBIX Version
3
+ *
4
+ * @packageDocumentation
5
+ * @module @musubix/core/version
6
+ */
7
+ export const VERSION = '1.0.0';
8
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}