@agentix-e/nl2spel 0.0.0 → 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 (134) hide show
  1. package/README.md +69 -39
  2. package/dist/SpelEvaluator.d.ts +124 -0
  3. package/dist/SpelEvaluator.d.ts.map +1 -0
  4. package/dist/SpelEvaluator.js +2 -0
  5. package/dist/SpelEvaluator.js.map +1 -0
  6. package/dist/__tests__/auto-fixer.test.d.ts +2 -0
  7. package/dist/__tests__/auto-fixer.test.d.ts.map +1 -0
  8. package/dist/__tests__/auto-fixer.test.js +285 -0
  9. package/dist/__tests__/auto-fixer.test.js.map +1 -0
  10. package/dist/__tests__/chinese-number-parser.test.d.ts +2 -0
  11. package/dist/__tests__/chinese-number-parser.test.d.ts.map +1 -0
  12. package/dist/__tests__/chinese-number-parser.test.js +106 -0
  13. package/dist/__tests__/chinese-number-parser.test.js.map +1 -0
  14. package/dist/__tests__/context-extractor.test.d.ts +2 -0
  15. package/dist/__tests__/context-extractor.test.d.ts.map +1 -0
  16. package/dist/__tests__/context-extractor.test.js +347 -0
  17. package/dist/__tests__/context-extractor.test.js.map +1 -0
  18. package/dist/__tests__/coverage-gaps.test.d.ts +2 -0
  19. package/dist/__tests__/coverage-gaps.test.d.ts.map +1 -0
  20. package/dist/__tests__/coverage-gaps.test.js +578 -0
  21. package/dist/__tests__/coverage-gaps.test.js.map +1 -0
  22. package/dist/__tests__/intent-classifier.test.d.ts +2 -0
  23. package/dist/__tests__/intent-classifier.test.d.ts.map +1 -0
  24. package/dist/__tests__/intent-classifier.test.js +384 -0
  25. package/dist/__tests__/intent-classifier.test.js.map +1 -0
  26. package/dist/__tests__/nl2spel-engine.test.d.ts +2 -0
  27. package/dist/__tests__/nl2spel-engine.test.d.ts.map +1 -0
  28. package/dist/__tests__/nl2spel-engine.test.js +344 -0
  29. package/dist/__tests__/nl2spel-engine.test.js.map +1 -0
  30. package/dist/__tests__/pattern-matcher.test.d.ts +2 -0
  31. package/dist/__tests__/pattern-matcher.test.d.ts.map +1 -0
  32. package/dist/__tests__/pattern-matcher.test.js +754 -0
  33. package/dist/__tests__/pattern-matcher.test.js.map +1 -0
  34. package/dist/__tests__/prompt-builder.test.d.ts +2 -0
  35. package/dist/__tests__/prompt-builder.test.d.ts.map +1 -0
  36. package/dist/__tests__/prompt-builder.test.js +99 -0
  37. package/dist/__tests__/prompt-builder.test.js.map +1 -0
  38. package/dist/__tests__/provider-registry.test.d.ts +2 -0
  39. package/dist/__tests__/provider-registry.test.d.ts.map +1 -0
  40. package/dist/__tests__/provider-registry.test.js +240 -0
  41. package/dist/__tests__/provider-registry.test.js.map +1 -0
  42. package/dist/__tests__/schema-formatter.test.d.ts +2 -0
  43. package/dist/__tests__/schema-formatter.test.d.ts.map +1 -0
  44. package/dist/__tests__/schema-formatter.test.js +298 -0
  45. package/dist/__tests__/schema-formatter.test.js.map +1 -0
  46. package/dist/__tests__/self-correction-loop.test.d.ts +2 -0
  47. package/dist/__tests__/self-correction-loop.test.d.ts.map +1 -0
  48. package/dist/__tests__/self-correction-loop.test.js +253 -0
  49. package/dist/__tests__/self-correction-loop.test.js.map +1 -0
  50. package/dist/__tests__/strategy-router.test.d.ts +2 -0
  51. package/dist/__tests__/strategy-router.test.d.ts.map +1 -0
  52. package/dist/__tests__/strategy-router.test.js +493 -0
  53. package/dist/__tests__/strategy-router.test.js.map +1 -0
  54. package/dist/__tests__/template-engine.test.d.ts +2 -0
  55. package/dist/__tests__/template-engine.test.d.ts.map +1 -0
  56. package/dist/__tests__/template-engine.test.js +367 -0
  57. package/dist/__tests__/template-engine.test.js.map +1 -0
  58. package/dist/__tests__/validation-pipeline.test.d.ts +2 -0
  59. package/dist/__tests__/validation-pipeline.test.d.ts.map +1 -0
  60. package/dist/__tests__/validation-pipeline.test.js +262 -0
  61. package/dist/__tests__/validation-pipeline.test.js.map +1 -0
  62. package/dist/context/context-extractor.d.ts +82 -0
  63. package/dist/context/context-extractor.d.ts.map +1 -0
  64. package/dist/context/context-extractor.js +166 -0
  65. package/dist/context/context-extractor.js.map +1 -0
  66. package/dist/context/schema-formatter.d.ts +20 -0
  67. package/dist/context/schema-formatter.d.ts.map +1 -0
  68. package/dist/context/schema-formatter.js +104 -0
  69. package/dist/context/schema-formatter.js.map +1 -0
  70. package/dist/engine/nl2spel-engine.d.ts +144 -0
  71. package/dist/engine/nl2spel-engine.d.ts.map +1 -0
  72. package/dist/engine/nl2spel-engine.js +125 -0
  73. package/dist/engine/nl2spel-engine.js.map +1 -0
  74. package/dist/index.d.ts +28 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +24 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/pattern/builtin-patterns.d.ts +12 -0
  79. package/dist/pattern/builtin-patterns.d.ts.map +1 -0
  80. package/dist/pattern/builtin-patterns.js +812 -0
  81. package/dist/pattern/builtin-patterns.js.map +1 -0
  82. package/dist/pattern/pattern-definition.d.ts +49 -0
  83. package/dist/pattern/pattern-definition.d.ts.map +1 -0
  84. package/dist/pattern/pattern-definition.js +2 -0
  85. package/dist/pattern/pattern-definition.js.map +1 -0
  86. package/dist/pattern/pattern-matcher.d.ts +55 -0
  87. package/dist/pattern/pattern-matcher.d.ts.map +1 -0
  88. package/dist/pattern/pattern-matcher.js +216 -0
  89. package/dist/pattern/pattern-matcher.js.map +1 -0
  90. package/dist/provider/llm-provider.d.ts +146 -0
  91. package/dist/provider/llm-provider.d.ts.map +1 -0
  92. package/dist/provider/llm-provider.js +2 -0
  93. package/dist/provider/llm-provider.js.map +1 -0
  94. package/dist/provider/provider-registry.d.ts +28 -0
  95. package/dist/provider/provider-registry.d.ts.map +1 -0
  96. package/dist/provider/provider-registry.js +65 -0
  97. package/dist/provider/provider-registry.js.map +1 -0
  98. package/dist/strategy/strategy-router.d.ts +79 -0
  99. package/dist/strategy/strategy-router.d.ts.map +1 -0
  100. package/dist/strategy/strategy-router.js +182 -0
  101. package/dist/strategy/strategy-router.js.map +1 -0
  102. package/dist/template/intent-classifier.d.ts +56 -0
  103. package/dist/template/intent-classifier.d.ts.map +1 -0
  104. package/dist/template/intent-classifier.js +251 -0
  105. package/dist/template/intent-classifier.js.map +1 -0
  106. package/dist/template/nl-intent.d.ts +38 -0
  107. package/dist/template/nl-intent.d.ts.map +1 -0
  108. package/dist/template/nl-intent.js +39 -0
  109. package/dist/template/nl-intent.js.map +1 -0
  110. package/dist/template/prompts/prompt-builder.d.ts +20 -0
  111. package/dist/template/prompts/prompt-builder.d.ts.map +1 -0
  112. package/dist/template/prompts/prompt-builder.js +243 -0
  113. package/dist/template/prompts/prompt-builder.js.map +1 -0
  114. package/dist/template/template-engine.d.ts +27 -0
  115. package/dist/template/template-engine.d.ts.map +1 -0
  116. package/dist/template/template-engine.js +378 -0
  117. package/dist/template/template-engine.js.map +1 -0
  118. package/dist/utils/chinese-number-parser.d.ts +30 -0
  119. package/dist/utils/chinese-number-parser.d.ts.map +1 -0
  120. package/dist/utils/chinese-number-parser.js +92 -0
  121. package/dist/utils/chinese-number-parser.js.map +1 -0
  122. package/dist/validation/auto-fixer.d.ts +14 -0
  123. package/dist/validation/auto-fixer.d.ts.map +1 -0
  124. package/dist/validation/auto-fixer.js +111 -0
  125. package/dist/validation/auto-fixer.js.map +1 -0
  126. package/dist/validation/self-correction-loop.d.ts +46 -0
  127. package/dist/validation/self-correction-loop.d.ts.map +1 -0
  128. package/dist/validation/self-correction-loop.js +141 -0
  129. package/dist/validation/self-correction-loop.js.map +1 -0
  130. package/dist/validation/validation-pipeline.d.ts +81 -0
  131. package/dist/validation/validation-pipeline.d.ts.map +1 -0
  132. package/dist/validation/validation-pipeline.js +306 -0
  133. package/dist/validation/validation-pipeline.js.map +1 -0
  134. package/package.json +36 -7
@@ -0,0 +1,46 @@
1
+ import type { LLMPrompt, LLMResponse } from '../provider/llm-provider.js';
2
+ import { ValidationPipeline } from './validation-pipeline.js';
3
+ import { AutoFixer } from './auto-fixer.js';
4
+ import type { ContextSchema } from '../SpelEvaluator.js';
5
+ export interface SelfCorrectionResult {
6
+ /** Final expression */
7
+ expression: string;
8
+ /** Whether validation passed */
9
+ valid: boolean;
10
+ /** Original LLM output */
11
+ originalOutput: string;
12
+ /** Number of correction attempts */
13
+ correctionAttempts: number;
14
+ /** Log of each correction round */
15
+ corrections: CorrectionLog[];
16
+ /** Total latency (ms) */
17
+ totalLatencyMs: number;
18
+ }
19
+ export interface CorrectionLog {
20
+ attempt: number;
21
+ expression: string;
22
+ valid: boolean;
23
+ errorCount: number;
24
+ warningCount: number;
25
+ autoFixed: boolean;
26
+ autoFixChanges: string[];
27
+ }
28
+ export interface SelfCorrectionConfig {
29
+ /** Maximum correction attempts (default 3) */
30
+ maxAttempts?: number;
31
+ /** Minimum confidence threshold (default 0.7) */
32
+ minConfidence?: number;
33
+ /** Whether AutoFix is enabled (default true) */
34
+ enableAutoFix?: boolean;
35
+ }
36
+ export declare class SelfCorrectionLoop {
37
+ private readonly pipeline;
38
+ private readonly autoFixer;
39
+ private readonly config;
40
+ constructor(config?: SelfCorrectionConfig, pipeline?: ValidationPipeline, autoFixer?: AutoFixer);
41
+ /**
42
+ * Execute the self-correction loop
43
+ */
44
+ correct(expression: string, contextSchema: ContextSchema, generateFn: (prompt: LLMPrompt) => Promise<LLMResponse>, originalPrompt: LLMPrompt): Promise<SelfCorrectionResult>;
45
+ }
46
+ //# sourceMappingURL=self-correction-loop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-correction-loop.d.ts","sourceRoot":"","sources":["../../src/validation/self-correction-loop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,SAAS,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAyB,MAAM,0BAA0B,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,WAAW,oBAAoB;IACnC,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;IAEnB,gCAAgC;IAChC,KAAK,EAAE,OAAO,CAAC;IAEf,0BAA0B;IAC1B,cAAc,EAAE,MAAM,CAAC;IAEvB,oCAAoC;IACpC,kBAAkB,EAAE,MAAM,CAAC;IAE3B,mCAAmC;IACnC,WAAW,EAAE,aAAa,EAAE,CAAC;IAE7B,yBAAyB;IACzB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;gBAG5C,MAAM,GAAE,oBAAyB,EACjC,QAAQ,CAAC,EAAE,kBAAkB,EAC7B,SAAS,CAAC,EAAE,SAAS;IAWvB;;OAEG;IACU,OAAO,CAClB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,WAAW,CAAC,EACvD,cAAc,EAAE,SAAS,GACxB,OAAO,CAAC,oBAAoB,CAAC;CAwIjC"}
@@ -0,0 +1,141 @@
1
+ import { ValidationPipeline } from './validation-pipeline.js';
2
+ import { AutoFixer } from './auto-fixer.js';
3
+ export class SelfCorrectionLoop {
4
+ pipeline;
5
+ autoFixer;
6
+ config;
7
+ constructor(config = {}, pipeline, autoFixer) {
8
+ this.config = {
9
+ maxAttempts: config.maxAttempts ?? 3,
10
+ minConfidence: config.minConfidence ?? 0.7,
11
+ enableAutoFix: config.enableAutoFix ?? true,
12
+ };
13
+ this.pipeline = pipeline ?? new ValidationPipeline();
14
+ this.autoFixer = autoFixer ?? new AutoFixer();
15
+ }
16
+ /**
17
+ * Execute the self-correction loop
18
+ */
19
+ async correct(expression, contextSchema, generateFn, originalPrompt) {
20
+ const startTime = Date.now();
21
+ const corrections = [];
22
+ let currentExpression = expression;
23
+ let valid = false;
24
+ // Attempt 0: directly validate original output
25
+ const initialResult = await this.pipeline.validate(currentExpression, contextSchema);
26
+ if (initialResult.valid) {
27
+ return {
28
+ expression: currentExpression,
29
+ valid: true,
30
+ originalOutput: expression,
31
+ correctionAttempts: 0,
32
+ corrections,
33
+ totalLatencyMs: Date.now() - startTime,
34
+ };
35
+ }
36
+ // Attempt 0.5: try AutoFix
37
+ if (this.config.enableAutoFix && initialResult.errors.length > 0) {
38
+ const autoFixResult = this.autoFixer.fix(currentExpression);
39
+ if (autoFixResult.wasFixed) {
40
+ currentExpression = autoFixResult.expression;
41
+ corrections.push({
42
+ attempt: 0,
43
+ expression: currentExpression,
44
+ valid: false,
45
+ errorCount: initialResult.errors.length,
46
+ warningCount: initialResult.warnings.length,
47
+ autoFixed: true,
48
+ autoFixChanges: autoFixResult.changes,
49
+ });
50
+ // Validate AutoFix result
51
+ const afterFix = await this.pipeline.validate(currentExpression, contextSchema);
52
+ if (afterFix.valid) {
53
+ return {
54
+ expression: currentExpression,
55
+ valid: true,
56
+ originalOutput: expression,
57
+ correctionAttempts: 1,
58
+ corrections,
59
+ totalLatencyMs: Date.now() - startTime,
60
+ };
61
+ }
62
+ // AutoFix not sufficient, continue to LLM correction
63
+ corrections.push({
64
+ attempt: 0,
65
+ expression: currentExpression,
66
+ valid: afterFix.valid,
67
+ errorCount: afterFix.errors.length,
68
+ warningCount: afterFix.warnings.length,
69
+ autoFixed: false,
70
+ autoFixChanges: [],
71
+ });
72
+ }
73
+ }
74
+ // Attempts 1..N: LLM regeneration
75
+ for (let attempt = 1; attempt <= this.config.maxAttempts; attempt++) {
76
+ const lastValidation = await this.pipeline.validate(currentExpression, contextSchema);
77
+ // Build correction prompt
78
+ const errorDescriptions = lastValidation.errors
79
+ .map(e => `- [${e.code}] ${e.message}`)
80
+ .join('\n');
81
+ const correctionPrompt = {
82
+ ...originalPrompt,
83
+ user: [
84
+ originalPrompt.user,
85
+ '',
86
+ '---',
87
+ 'The previous generated expression was INVALID. Please fix it:',
88
+ `Expression: ${currentExpression}`,
89
+ `Errors:\n${errorDescriptions}`,
90
+ '---',
91
+ 'Generate ONLY the corrected SpEL expression, nothing else.',
92
+ ].join('\n'),
93
+ };
94
+ try {
95
+ const response = await generateFn(correctionPrompt);
96
+ currentExpression = response.text.trim();
97
+ // Apply AutoFix again
98
+ if (this.config.enableAutoFix) {
99
+ const afResult = this.autoFixer.fix(currentExpression);
100
+ if (afResult.wasFixed) {
101
+ currentExpression = afResult.expression;
102
+ }
103
+ }
104
+ const currentValidation = await this.pipeline.validate(currentExpression, contextSchema);
105
+ corrections.push({
106
+ attempt,
107
+ expression: currentExpression,
108
+ valid: currentValidation.valid,
109
+ errorCount: currentValidation.errors.length,
110
+ warningCount: currentValidation.warnings.length,
111
+ autoFixed: false,
112
+ autoFixChanges: [],
113
+ });
114
+ if (currentValidation.valid) {
115
+ valid = true;
116
+ break;
117
+ }
118
+ }
119
+ catch (err) {
120
+ corrections.push({
121
+ attempt,
122
+ expression: currentExpression,
123
+ valid: false,
124
+ errorCount: 1,
125
+ warningCount: 0,
126
+ autoFixed: false,
127
+ autoFixChanges: [],
128
+ });
129
+ }
130
+ }
131
+ return {
132
+ expression: currentExpression,
133
+ valid,
134
+ originalOutput: expression,
135
+ correctionAttempts: corrections.filter(c => c.attempt > 0).length,
136
+ corrections,
137
+ totalLatencyMs: Date.now() - startTime,
138
+ };
139
+ }
140
+ }
141
+ //# sourceMappingURL=self-correction-loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-correction-loop.js","sourceRoot":"","sources":["../../src/validation/self-correction-loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ import type { ContextSchema, SpelEvaluator } from '../SpelEvaluator.js';
2
+ export interface ValidationResult {
3
+ /** Whether all validation stages passed */
4
+ valid: boolean;
5
+ /** Stage results */
6
+ stages: {
7
+ parse: StageResult;
8
+ type: StageResult;
9
+ semantic: StageResult;
10
+ context: StageResult;
11
+ };
12
+ /** All errors */
13
+ errors: ValidationError[];
14
+ /** All warnings */
15
+ warnings: ValidationWarning[];
16
+ }
17
+ export interface StageResult {
18
+ passed: boolean;
19
+ errors: ValidationError[];
20
+ warnings: ValidationWarning[];
21
+ }
22
+ export interface ValidationError {
23
+ code: string;
24
+ message: string;
25
+ /** Error position in expression */
26
+ position?: number;
27
+ /** Stage the error belongs to */
28
+ stage: 'parse' | 'type' | 'semantic' | 'context';
29
+ /** Whether LLM regeneration is needed */
30
+ requiresLLM?: boolean;
31
+ }
32
+ export interface ValidationWarning {
33
+ code: string;
34
+ message: string;
35
+ /** Warning position in expression */
36
+ position?: number;
37
+ /** Stage the warning belongs to */
38
+ stage: 'parse' | 'type' | 'semantic' | 'context';
39
+ }
40
+ /**
41
+ * ValidationPipeline — four-stage validation pipeline.
42
+ *
43
+ * 1. Parse: syntax validity (depends on SpelEvaluator)
44
+ * 2. Type: type checking (operator-operand type matching)
45
+ * 3. Semantic: semantic reasonableness (is the expression meaningful)
46
+ * 4. Context: context references (do all references exist in ContextSchema)
47
+ */
48
+ export declare class ValidationPipeline {
49
+ private evaluator;
50
+ constructor(evaluator?: SpelEvaluator | null);
51
+ setEvaluator(evaluator: SpelEvaluator): void;
52
+ /**
53
+ * Run the full validation pipeline
54
+ */
55
+ validate(expression: string, contextSchema?: ContextSchema): Promise<ValidationResult>;
56
+ /**
57
+ * Stage 1: Parse Check — syntax validation
58
+ */
59
+ private validateParse;
60
+ /**
61
+ * Stage 2: Type Check — type validation
62
+ */
63
+ private validateTypes;
64
+ /**
65
+ * Stage 3: Semantic Check — semantic reasonableness validation
66
+ */
67
+ private validateSemantic;
68
+ /**
69
+ * Stage 4: Context Check — context reference validation
70
+ */
71
+ private validateContext;
72
+ /**
73
+ * Check if parentheses are balanced
74
+ */
75
+ private hasBalancedParentheses;
76
+ /**
77
+ * Extract all identifier references from expression
78
+ */
79
+ private extractReferences;
80
+ }
81
+ //# sourceMappingURL=validation-pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-pipeline.d.ts","sourceRoot":"","sources":["../../src/validation/validation-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAMxE,MAAM,WAAW,gBAAgB;IAC/B,2CAA2C;IAC3C,KAAK,EAAE,OAAO,CAAC;IAEf,oBAAoB;IACpB,MAAM,EAAE;QACN,KAAK,EAAE,WAAW,CAAC;QACnB,IAAI,EAAE,WAAW,CAAC;QAClB,QAAQ,EAAE,WAAW,CAAC;QACtB,OAAO,EAAE,WAAW,CAAC;KACtB,CAAC;IAEF,iBAAiB;IACjB,MAAM,EAAE,eAAe,EAAE,CAAC;IAE1B,mBAAmB;IACnB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IACjD,yCAAyC;IACzC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;CAClD;AAMD;;;;;;;GAOG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,SAAS,CAAuB;gBAE5B,SAAS,GAAE,aAAa,GAAG,IAAW;IAI3C,YAAY,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI;IAInD;;OAEG;IACU,QAAQ,CACnB,UAAU,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,gBAAgB,CAAC;IA0C5B;;OAEG;YACW,aAAa;IAsF3B;;OAEG;IACH,OAAO,CAAC,aAAa;IAyCrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA8BxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAyEvB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAgB9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAoB1B"}
@@ -0,0 +1,306 @@
1
+ // ============================================================
2
+ // ValidationPipeline
3
+ // ============================================================
4
+ /**
5
+ * ValidationPipeline — four-stage validation pipeline.
6
+ *
7
+ * 1. Parse: syntax validity (depends on SpelEvaluator)
8
+ * 2. Type: type checking (operator-operand type matching)
9
+ * 3. Semantic: semantic reasonableness (is the expression meaningful)
10
+ * 4. Context: context references (do all references exist in ContextSchema)
11
+ */
12
+ export class ValidationPipeline {
13
+ evaluator;
14
+ constructor(evaluator = null) {
15
+ this.evaluator = evaluator;
16
+ }
17
+ setEvaluator(evaluator) {
18
+ this.evaluator = evaluator;
19
+ }
20
+ /**
21
+ * Run the full validation pipeline
22
+ */
23
+ async validate(expression, contextSchema) {
24
+ const errors = [];
25
+ const warnings = [];
26
+ // Stage 1: Parse Check
27
+ const parseStage = await this.validateParse(expression);
28
+ // Stage 2: Type Check
29
+ const typeStage = this.validateTypes(expression, contextSchema);
30
+ // Stage 3: Semantic Check
31
+ const semanticStage = this.validateSemantic(expression);
32
+ // Stage 4: Context Check
33
+ const contextStage = this.validateContext(expression, contextSchema);
34
+ errors.push(...parseStage.errors, ...typeStage.errors, ...semanticStage.errors, ...contextStage.errors);
35
+ warnings.push(...parseStage.warnings, ...typeStage.warnings, ...semanticStage.warnings, ...contextStage.warnings);
36
+ return {
37
+ valid: parseStage.passed && typeStage.passed && semanticStage.passed && contextStage.passed,
38
+ stages: {
39
+ parse: parseStage,
40
+ type: typeStage,
41
+ semantic: semanticStage,
42
+ context: contextStage,
43
+ },
44
+ errors,
45
+ warnings,
46
+ };
47
+ }
48
+ /**
49
+ * Stage 1: Parse Check — syntax validation
50
+ */
51
+ async validateParse(expression) {
52
+ const errors = [];
53
+ const warnings = [];
54
+ // Basic empty expression check
55
+ if (!expression || expression.trim().length === 0) {
56
+ errors.push({
57
+ code: 'PARSE-EMPTY',
58
+ message: 'Expression is empty',
59
+ stage: 'parse',
60
+ requiresLLM: true,
61
+ });
62
+ return { passed: false, errors, warnings };
63
+ }
64
+ // Parentheses balance check
65
+ if (!this.hasBalancedParentheses(expression)) {
66
+ errors.push({
67
+ code: 'PARSE-UNBALANCED_PARENS',
68
+ message: 'Unbalanced parentheses in expression',
69
+ stage: 'parse',
70
+ requiresLLM: true,
71
+ });
72
+ }
73
+ // Illegal character check
74
+ if (expression.includes('===') || expression.includes('!==')) {
75
+ errors.push({
76
+ code: 'PARSE-JS_OPERATOR',
77
+ message: 'JavaScript operators detected (=== or !==), use == or != in SpEL',
78
+ stage: 'parse',
79
+ requiresLLM: true,
80
+ });
81
+ }
82
+ // Check for JS-style logical operators
83
+ if (expression.includes('&&')) {
84
+ errors.push({
85
+ code: 'PARSE-JS_LOGIC',
86
+ message: 'JavaScript && detected, use "and" in SpEL',
87
+ stage: 'parse',
88
+ requiresLLM: true,
89
+ });
90
+ }
91
+ if (expression.includes('||')) {
92
+ errors.push({
93
+ code: 'PARSE-JS_LOGIC',
94
+ message: 'JavaScript || detected, use "or" in SpEL',
95
+ stage: 'parse',
96
+ requiresLLM: true,
97
+ });
98
+ }
99
+ // If an evaluator is configured, perform actual syntax parsing
100
+ if (this.evaluator) {
101
+ try {
102
+ const parseResult = await this.evaluator.parse(expression);
103
+ if (!parseResult.valid) {
104
+ for (const pe of parseResult.errors) {
105
+ errors.push({
106
+ code: `PARSE-${pe.code ?? 'SYNTAX'}`,
107
+ message: pe.message,
108
+ position: pe.position,
109
+ stage: 'parse',
110
+ requiresLLM: true,
111
+ });
112
+ }
113
+ }
114
+ }
115
+ catch (err) {
116
+ errors.push({
117
+ code: 'PARSE-EXCEPTION',
118
+ message: `Parse threw exception: ${err.message}`,
119
+ stage: 'parse',
120
+ requiresLLM: true,
121
+ });
122
+ }
123
+ }
124
+ return {
125
+ passed: errors.length === 0,
126
+ errors,
127
+ warnings,
128
+ };
129
+ }
130
+ /**
131
+ * Stage 2: Type Check — type validation
132
+ */
133
+ validateTypes(expression, contextSchema) {
134
+ const errors = [];
135
+ const warnings = [];
136
+ // Check string vs number comparison (may require full ContextSchema support)
137
+ // Here we do basic heuristic checks
138
+ // Check if string literals are used with numeric operators
139
+ const strNumMismatch = /'(?:\\.|[^'\\])*'\s*(?:>|<|>=|<=)\s*\d+/;
140
+ if (strNumMismatch.test(expression)) {
141
+ warnings.push({
142
+ code: 'TYPE-STR_NUM_CMP',
143
+ message: 'String literal compared with number using arithmetic operator',
144
+ stage: 'type',
145
+ });
146
+ }
147
+ // If ContextSchema is provided, do deeper checks
148
+ if (contextSchema?.root) {
149
+ for (const [fieldName, field] of Object.entries(contextSchema.root.fields)) {
150
+ if (field.type === 'boolean') {
151
+ // Check boolean field compared with number
152
+ const boolNumPattern = new RegExp(`#\\w+\\.${fieldName}\\s*(?:>|<|>=|<=)\\s*\\d+`);
153
+ if (boolNumPattern.test(expression)) {
154
+ warnings.push({
155
+ code: 'TYPE-BOOL_NUM_CMP',
156
+ message: `Boolean field '${fieldName}' compared with number`,
157
+ stage: 'type',
158
+ });
159
+ }
160
+ }
161
+ }
162
+ }
163
+ return {
164
+ passed: errors.length === 0,
165
+ errors,
166
+ warnings,
167
+ };
168
+ }
169
+ /**
170
+ * Stage 3: Semantic Check — semantic reasonableness validation
171
+ */
172
+ validateSemantic(expression) {
173
+ const errors = [];
174
+ const warnings = [];
175
+ // Check for tautology/contradiction like `x == x`
176
+ const selfCompare = /(#\w+(?:\.\w+)*)\s*==\s*\1/;
177
+ if (selfCompare.test(expression)) {
178
+ warnings.push({
179
+ code: 'SEM-SELF_COMPARE',
180
+ message: 'Self-comparison detected: expression is always true',
181
+ stage: 'semantic',
182
+ });
183
+ }
184
+ // Check for double negation (`!!`)
185
+ if (expression.includes('!!')) {
186
+ warnings.push({
187
+ code: 'SEM-DOUBLE_NEGATION',
188
+ message: 'Double negation detected, consider simplifying',
189
+ stage: 'semantic',
190
+ });
191
+ }
192
+ return {
193
+ passed: errors.length === 0,
194
+ errors,
195
+ warnings,
196
+ };
197
+ }
198
+ /**
199
+ * Stage 4: Context Check — context reference validation
200
+ */
201
+ validateContext(expression, contextSchema) {
202
+ const errors = [];
203
+ const warnings = [];
204
+ if (!contextSchema) {
205
+ warnings.push({
206
+ code: 'CTX-NO_SCHEMA',
207
+ message: 'No ContextSchema provided, skipping context validation',
208
+ stage: 'context',
209
+ });
210
+ return { passed: true, errors, warnings };
211
+ }
212
+ // Extract all references from expression
213
+ const refs = this.extractReferences(expression);
214
+ // Validate root references
215
+ if (contextSchema.root) {
216
+ const rootName = contextSchema.root.name;
217
+ for (const ref of refs) {
218
+ if (ref.startsWith(`#${rootName}`)) {
219
+ const parts = ref.split('.');
220
+ const field = parts[1];
221
+ if (field && !(field in contextSchema.root.fields)) {
222
+ warnings.push({
223
+ code: 'CTX-UNKNOWN_FIELD',
224
+ message: `Field '${field}' not found in root '${rootName}'`,
225
+ stage: 'context',
226
+ });
227
+ }
228
+ }
229
+ }
230
+ }
231
+ // Validate variable references
232
+ for (const ref of refs) {
233
+ if (ref.startsWith('#') && !ref.includes('.')) {
234
+ const varName = ref.slice(1);
235
+ const isRoot = contextSchema.root?.name === varName;
236
+ const isVariable = varName in contextSchema.variables;
237
+ const isFunction = varName in contextSchema.functions;
238
+ if (!isRoot && !isVariable && !isFunction) {
239
+ warnings.push({
240
+ code: 'CTX-UNKNOWN_REF',
241
+ message: `Unknown reference '${ref}'`,
242
+ stage: 'context',
243
+ });
244
+ }
245
+ }
246
+ }
247
+ // Validate Bean references
248
+ const beanMatch = expression.match(/@(\w+)/g);
249
+ if (beanMatch && contextSchema.beans) {
250
+ for (const b of beanMatch) {
251
+ const beanName = b.slice(1);
252
+ if (!(beanName in contextSchema.beans)) {
253
+ warnings.push({
254
+ code: 'CTX-UNKNOWN_BEAN',
255
+ message: `Bean '${beanName}' not found in ContextSchema`,
256
+ stage: 'context',
257
+ });
258
+ }
259
+ }
260
+ }
261
+ return {
262
+ passed: errors.length === 0,
263
+ errors,
264
+ warnings,
265
+ };
266
+ }
267
+ /**
268
+ * Check if parentheses are balanced
269
+ */
270
+ hasBalancedParentheses(expression) {
271
+ const stack = [];
272
+ const pairs = { '(': ')', '[': ']', '{': '}' };
273
+ for (const ch of expression) {
274
+ if (ch in pairs) {
275
+ stack.push(ch);
276
+ }
277
+ else if (ch === ')' || ch === ']' || ch === '}') {
278
+ const last = stack.pop();
279
+ if (!last || pairs[last] !== ch)
280
+ return false;
281
+ }
282
+ }
283
+ return stack.length === 0;
284
+ }
285
+ /**
286
+ * Extract all identifier references from expression
287
+ */
288
+ extractReferences(expression) {
289
+ const refs = [];
290
+ // #root.field pattern
291
+ const varMatch = expression.matchAll(/#(\w+(?:\.\w+(?:\.\w+)?)?)/g);
292
+ for (const m of varMatch) {
293
+ refs.push(`#${m[1]}`);
294
+ }
295
+ // #variable pattern
296
+ const simpleMatch = expression.matchAll(/#(\w+)(?!\w*\()/g);
297
+ for (const m of simpleMatch) {
298
+ const ref = `#${m[1]}`;
299
+ if (!refs.includes(ref)) {
300
+ refs.push(ref);
301
+ }
302
+ }
303
+ return refs;
304
+ }
305
+ }
306
+ //# sourceMappingURL=validation-pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-pipeline.js","sourceRoot":"","sources":["../../src/validation/validation-pipeline.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,39 @@
1
1
  {
2
2
  "name": "@agentix-e/nl2spel",
3
- "version": "0.0.0",
4
- "description": "OIDC trusted publishing setup package for @agentix-e/nl2spel",
5
- "keywords": [
6
- "oidc",
7
- "trusted-publishing",
8
- "setup"
9
- ]
3
+ "version": "1.0.0",
4
+ "description": "Natural Language SpEL Expression Generation Engine — Core",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "files": ["dist", "README.md"],
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "test": "vitest run",
18
+ "test:watch": "vitest",
19
+ "lint": "tsc --noEmit",
20
+ "typecheck": "tsc --noEmit",
21
+ "clean": "rm -rf dist"
22
+ },
23
+ "dependencies": {},
24
+ "devDependencies": {
25
+ "typescript": "^5.7.3",
26
+ "vitest": "^2.1.8"
27
+ },
28
+ "keywords": ["spel", "nlp", "expression-language", "spring", "nl2code", "agentix"],
29
+ "license": "MIT",
30
+ "author": "Agentix-E",
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "https://github.com/AgentiX-E/nl2spel.git",
34
+ "directory": "packages/nl2spel"
35
+ },
36
+ "publishConfig": {
37
+ "access": "public"
38
+ }
10
39
  }