@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,262 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { ValidationPipeline } from '../validation/validation-pipeline.js';
3
+ function createSchema() {
4
+ return {
5
+ root: {
6
+ name: 'order',
7
+ type: 'Order',
8
+ fields: {
9
+ amount: { type: 'number', description: '订单金额' },
10
+ status: { type: 'string', description: '订单状态' },
11
+ remark: { type: 'string', description: '备注' },
12
+ paid: { type: 'boolean', description: '是否支付' },
13
+ items: { type: 'array', isCollection: true, elementType: 'object' },
14
+ tags: { type: 'array', isCollection: true, elementType: 'string' },
15
+ },
16
+ methods: {},
17
+ },
18
+ variables: { user: { type: 'object' } },
19
+ beans: { discountService: { type: 'DiscountService' } },
20
+ types: { Admin: { className: 'com.example.Admin' } },
21
+ functions: {},
22
+ };
23
+ }
24
+ class MockEvaluator {
25
+ validExpressions;
26
+ constructor(validExpressions = []) {
27
+ this.validExpressions = new Set(validExpressions);
28
+ }
29
+ async parse(expression) {
30
+ if (this.validExpressions.has(expression)) {
31
+ return { valid: true, errors: [] };
32
+ }
33
+ return {
34
+ valid: false,
35
+ errors: [
36
+ {
37
+ message: `Syntax error in: ${expression}`,
38
+ position: 0,
39
+ code: 'SYNTAX',
40
+ },
41
+ ],
42
+ };
43
+ }
44
+ getContextSchema() {
45
+ return createSchema();
46
+ }
47
+ }
48
+ describe('ValidationPipeline', () => {
49
+ const pipeline = new ValidationPipeline();
50
+ const schema = createSchema();
51
+ // ===== VL-G07: Parse Check =====
52
+ describe('VL-G07: Parse Check', () => {
53
+ it('should pass valid expressions', async () => {
54
+ const result = await pipeline.validate('#order.amount > 1000', schema);
55
+ expect(result.stages.parse.passed).toBe(true);
56
+ });
57
+ it('should fail empty expression', async () => {
58
+ const result = await pipeline.validate('', schema);
59
+ expect(result.stages.parse.passed).toBe(false);
60
+ expect(result.errors.some(e => e.code === 'PARSE-EMPTY')).toBe(true);
61
+ });
62
+ it('should detect JS === operator', async () => {
63
+ const result = await pipeline.validate('#order.amount === 1000', schema);
64
+ expect(result.errors.some(e => e.code === 'PARSE-JS_OPERATOR')).toBe(true);
65
+ });
66
+ it('should detect JS !== operator', async () => {
67
+ const result = await pipeline.validate("#order.status !== 'done'", schema);
68
+ expect(result.errors.some(e => e.code === 'PARSE-JS_OPERATOR')).toBe(true);
69
+ });
70
+ it('should detect JS && operator', async () => {
71
+ const result = await pipeline.validate('#order.amount > 100 && #order.paid', schema);
72
+ expect(result.errors.some(e => e.code === 'PARSE-JS_LOGIC')).toBe(true);
73
+ });
74
+ it('should detect JS || operator', async () => {
75
+ const result = await pipeline.validate('#order.vip || #order.admin', schema);
76
+ expect(result.errors.some(e => e.code === 'PARSE-JS_LOGIC')).toBe(true);
77
+ });
78
+ it('should detect unbalanced parentheses', async () => {
79
+ const result = await pipeline.validate('(#order.amount > 100', schema);
80
+ expect(result.errors.some(e => e.code === 'PARSE-UNBALANCED_PARENS')).toBe(true);
81
+ });
82
+ it('should pass balanced complex expressions', async () => {
83
+ const result = await pipeline.validate("(#order.amount > 100) and (#order.status == 'done')", schema);
84
+ expect(result.stages.parse.passed).toBe(true);
85
+ });
86
+ it('should pass balanced brackets', async () => {
87
+ const result = await pipeline.validate('#order.items.?[#this.amount > 100]', schema);
88
+ expect(result.stages.parse.passed).toBe(true);
89
+ });
90
+ });
91
+ // ===== VL-G08: Type Check =====
92
+ describe('VL-G08: Type Check', () => {
93
+ it('should pass valid type operations', async () => {
94
+ const result = await pipeline.validate('#order.amount > 100', schema);
95
+ expect(result.stages.type.passed).toBe(true);
96
+ });
97
+ it('should warn on string-number comparison', async () => {
98
+ const result = await pipeline.validate("'hello' > 100", schema);
99
+ expect(result.stages.type.warnings.length).toBeGreaterThan(0);
100
+ });
101
+ it('should warn on boolean-number comparison', async () => {
102
+ const result = await pipeline.validate('#order.paid > 5', schema);
103
+ expect(result.stages.type.warnings.length).toBeGreaterThan(0);
104
+ });
105
+ });
106
+ // ===== VL-G09: Semantic Check =====
107
+ describe('VL-G09: Semantic Check', () => {
108
+ it('should pass semantically valid expressions', async () => {
109
+ const result = await pipeline.validate('#order.amount > 100', schema);
110
+ expect(result.stages.semantic.passed).toBe(true);
111
+ });
112
+ it('should warn on self-comparison', async () => {
113
+ const result = await pipeline.validate('#order.amount == #order.amount', schema);
114
+ expect(result.stages.semantic.warnings.length).toBeGreaterThan(0);
115
+ });
116
+ it('should warn on double negation', async () => {
117
+ const result = await pipeline.validate('!!#order.paid', schema);
118
+ expect(result.stages.semantic.warnings.length).toBeGreaterThan(0);
119
+ });
120
+ it('should pass valid negation', async () => {
121
+ const result = await pipeline.validate('!#order.paid', schema);
122
+ expect(result.stages.semantic.passed).toBe(true);
123
+ });
124
+ });
125
+ // ===== VL-G10: Context Check =====
126
+ describe('VL-G10: Context Check', () => {
127
+ it('should pass context-valid expressions', async () => {
128
+ const result = await pipeline.validate('#order.amount > 100', schema);
129
+ expect(result.stages.context.passed).toBe(true);
130
+ });
131
+ it('should warn on unknown field', async () => {
132
+ const result = await pipeline.validate('#order.unknown > 100', schema);
133
+ expect(result.stages.context.warnings.length).toBeGreaterThan(0);
134
+ });
135
+ it('should warn on unknown bean reference', async () => {
136
+ const result = await pipeline.validate('@unknownService', schema);
137
+ expect(result.stages.context.warnings.length).toBeGreaterThan(0);
138
+ });
139
+ it('should warn without ContextSchema', async () => {
140
+ const result = await pipeline.validate('#order.amount > 100');
141
+ expect(result.stages.context.warnings.some(w => w.code === 'CTX-NO_SCHEMA')).toBe(true);
142
+ });
143
+ it('should pass known bean reference', async () => {
144
+ // @discountService is in the schema
145
+ const result = await pipeline.validate('@discountService', schema);
146
+ expect(result.valid).toBe(true);
147
+ });
148
+ it('should detect unknown variable', async () => {
149
+ const result = await pipeline.validate('#unknown > 100', schema);
150
+ expect(result.stages.context.warnings.length).toBeGreaterThan(0);
151
+ });
152
+ });
153
+ // ===== VL-G11: Full Validation Flow =====
154
+ describe('VL-G11: Full Validation Flow', () => {
155
+ it('should validate a correct expression fully', async () => {
156
+ const result = await pipeline.validate("#order.amount > 1000 and #order.tags.contains('VIP')", schema);
157
+ expect(result.valid).toBe(true);
158
+ expect(result.errors).toHaveLength(0);
159
+ });
160
+ it('should collect all errors from all stages', async () => {
161
+ const result = await pipeline.validate('#order.amount === 1000 && #order.unknown > 100', schema);
162
+ expect(result.errors.length).toBeGreaterThan(1);
163
+ expect(result.valid).toBe(false);
164
+ });
165
+ it('should mark errors as requiring LLM re-generation', async () => {
166
+ const result = await pipeline.validate('#order.amount === 1000', schema);
167
+ const parseErrors = result.errors.filter(e => e.stage === 'parse');
168
+ expect(parseErrors.some(e => e.requiresLLM)).toBe(true);
169
+ });
170
+ });
171
+ // ===== VL-G12: Custom Evaluator =====
172
+ describe('VL-G12: Custom SpelEvaluator', () => {
173
+ it('should use provided evaluator for parse validation', async () => {
174
+ const evaluator = new MockEvaluator(['#order.amount > 1000']);
175
+ const pipeline = new ValidationPipeline(evaluator);
176
+ const result = await pipeline.validate('#order.amount > 1000', schema);
177
+ expect(result.stages.parse.passed).toBe(true);
178
+ });
179
+ it('should report parse errors from evaluator', async () => {
180
+ const evaluator = new MockEvaluator();
181
+ const pipeline = new ValidationPipeline(evaluator);
182
+ const result = await pipeline.validate('#invalid expression!', schema);
183
+ expect(result.stages.parse.passed).toBe(false);
184
+ expect(result.stages.parse.errors.length).toBeGreaterThan(0);
185
+ });
186
+ it('should set evaluator after construction', async () => {
187
+ const pipeline = new ValidationPipeline();
188
+ pipeline.setEvaluator(new MockEvaluator(['#order.amount > 1000']));
189
+ const result = await pipeline.validate('#order.amount > 1000', schema);
190
+ expect(result.stages.parse.passed).toBe(true);
191
+ });
192
+ });
193
+ // ===== Edge Cases & Integration =====
194
+ describe('edge cases', () => {
195
+ it('should fail expression that is whitespace only after trim', async () => {
196
+ const result = await pipeline.validate(' ', schema);
197
+ expect(result.stages.parse.passed).toBe(false);
198
+ expect(result.errors.some(e => e.code === 'PARSE-EMPTY')).toBe(true);
199
+ });
200
+ it('should detect unbalanced curly braces', async () => {
201
+ const result = await pipeline.validate('#order.amount > 100}', schema);
202
+ expect(result.stages.parse.passed).toBe(false);
203
+ expect(result.errors.some(e => e.code === 'PARSE-UNBALANCED_PARENS')).toBe(true);
204
+ });
205
+ it('should handle instanceof with unknown type in ContextSchema', async () => {
206
+ // T() type validation is not part of the context check, so it should pass
207
+ const result = await pipeline.validate('#order instanceof T(com.example.Unknown)', schema);
208
+ expect(result.stages.parse.passed).toBe(true);
209
+ });
210
+ it('should recognize declared function reference in expression', async () => {
211
+ const schemaWithFunc = {
212
+ ...schema,
213
+ functions: {
214
+ calculateDiscount: {
215
+ returnType: 'number',
216
+ params: [{ name: 'price', type: 'number' }],
217
+ },
218
+ },
219
+ };
220
+ const result = await pipeline.validate('#calculateDiscount(100)', schemaWithFunc);
221
+ // The context check recognizes #calculateDiscount, which is in functions
222
+ expect(result.stages.context.passed).toBe(true);
223
+ });
224
+ it('should pass all four stages simultaneously', async () => {
225
+ const result = await pipeline.validate("#order.amount > 100 and #order.status == 'active'", schema);
226
+ expect(result.stages.parse.passed).toBe(true);
227
+ expect(result.stages.type.passed).toBe(true);
228
+ expect(result.stages.semantic.passed).toBe(true);
229
+ expect(result.stages.context.passed).toBe(true);
230
+ expect(result.valid).toBe(true);
231
+ expect(result.errors).toHaveLength(0);
232
+ expect(result.warnings).toHaveLength(0);
233
+ });
234
+ it('should collect multiple warnings from different stages', async () => {
235
+ const result = await pipeline.validate("'hello' > 100 and #order.paid == #order.paid", schema);
236
+ // Type stage: string-number comparison
237
+ expect(result.stages.type.warnings.some(w => w.code === 'TYPE-STR_NUM_CMP')).toBe(true);
238
+ // Semantic stage: self-comparison
239
+ expect(result.stages.semantic.warnings.some(w => w.code === 'SEM-SELF_COMPARE')).toBe(true);
240
+ // Total warnings should be at least 2
241
+ expect(result.warnings.length).toBeGreaterThanOrEqual(2);
242
+ });
243
+ it('should handle evaluator that throws an error during parse', async () => {
244
+ class ThrowingEvaluator {
245
+ async parse(_expression) {
246
+ throw new Error('Parser engine failure');
247
+ }
248
+ getContextSchema() {
249
+ return null;
250
+ }
251
+ }
252
+ const evaluator = new ThrowingEvaluator();
253
+ const pipeline = new ValidationPipeline(evaluator);
254
+ const result = await pipeline.validate('#anything', createSchema());
255
+ expect(result.stages.parse.passed).toBe(false);
256
+ expect(result.stages.parse.errors.length).toBeGreaterThan(0);
257
+ expect(result.errors.some(e => e.code === 'PARSE-EXCEPTION')).toBe(true);
258
+ expect(result.errors.some(e => e.message.includes('Parser engine failure'))).toBe(true);
259
+ });
260
+ });
261
+ });
262
+ //# sourceMappingURL=validation-pipeline.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-pipeline.test.js","sourceRoot":"","sources":["../../src/__tests__/validation-pipeline.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import type { ContextSchema } from '../SpelEvaluator.js';
2
+ /**
3
+ * ContextExtractor — builds a ContextSchema from plain data structures.
4
+ *
5
+ * Decoupled from any concrete SpEL implementation, accepts only:
6
+ * - rootObject: any object (for extracting property types)
7
+ * - variables: Record<string, { type: string; value?: unknown }>
8
+ * - beans: string[]
9
+ * - types: string[]
10
+ */
11
+ export declare class ContextExtractor {
12
+ /**
13
+ * Extract ContextSchema from plain data structures (no spel-ts dependency)
14
+ */
15
+ extract(context: {
16
+ rootObject?: unknown;
17
+ rootName?: string;
18
+ variables?: Record<string, {
19
+ type: string;
20
+ value?: unknown;
21
+ description?: string;
22
+ nullable?: boolean;
23
+ }>;
24
+ beans?: Array<{
25
+ name: string;
26
+ type: string;
27
+ description?: string;
28
+ singleton?: boolean;
29
+ }>;
30
+ types?: Array<{
31
+ name: string;
32
+ className?: string;
33
+ description?: string;
34
+ }>;
35
+ functions?: Array<{
36
+ name: string;
37
+ returnType: string;
38
+ params: Array<{
39
+ name: string;
40
+ type: string;
41
+ }>;
42
+ description?: string;
43
+ }>;
44
+ }): ContextSchema;
45
+ /**
46
+ * Extract root object schema
47
+ */
48
+ private extractRoot;
49
+ /**
50
+ * Extract object fields
51
+ */
52
+ private extractFields;
53
+ /**
54
+ * Infer SpEL type
55
+ */
56
+ private inferSpelType;
57
+ /**
58
+ * Generate field description
59
+ */
60
+ private generateDescription;
61
+ /**
62
+ * Safely get example value
63
+ */
64
+ private safeExample;
65
+ /**
66
+ * Extract variables
67
+ */
68
+ private extractVariables;
69
+ /**
70
+ * Extract beans
71
+ */
72
+ private extractBeans;
73
+ /**
74
+ * Extract types
75
+ */
76
+ private extractTypes;
77
+ /**
78
+ * Extract functions
79
+ */
80
+ private extractFunctions;
81
+ }
82
+ //# sourceMappingURL=context-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-extractor.d.ts","sourceRoot":"","sources":["../../src/context/context-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAOd,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;GAQG;AACH,qBAAa,gBAAgB;IAC3B;;OAEG;IACI,OAAO,CAAC,OAAO,EAAE;QACtB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAChB,MAAM,EACN;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,OAAO,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE,CAC5E,CAAC;QACF,KAAK,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;QACzF,KAAK,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC1E,SAAS,CAAC,EAAE,KAAK,CAAC;YAChB,IAAI,EAAE,MAAM,CAAC;YACb,UAAU,EAAE,MAAM,CAAC;YACnB,MAAM,EAAE,KAAK,CAAC;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAA;aAAE,CAAC,CAAC;YAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;SACtB,CAAC,CAAC;KACJ,GAAG,aAAa;IAYjB;;OAEG;IACH,OAAO,CAAC,WAAW;IAkBnB;;OAEG;IACH,OAAO,CAAC,aAAa;IA4BrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;OAEG;IACH,OAAO,CAAC,WAAW;IAMnB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoBxB;;OAEG;IACH,OAAO,CAAC,YAAY;IAgBpB;;OAEG;IACH,OAAO,CAAC,YAAY;IAepB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAoBzB"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * ContextExtractor — builds a ContextSchema from plain data structures.
3
+ *
4
+ * Decoupled from any concrete SpEL implementation, accepts only:
5
+ * - rootObject: any object (for extracting property types)
6
+ * - variables: Record<string, { type: string; value?: unknown }>
7
+ * - beans: string[]
8
+ * - types: string[]
9
+ */
10
+ export class ContextExtractor {
11
+ /**
12
+ * Extract ContextSchema from plain data structures (no spel-ts dependency)
13
+ */
14
+ extract(context) {
15
+ const schema = {
16
+ root: this.extractRoot(context),
17
+ variables: this.extractVariables(context),
18
+ beans: this.extractBeans(context),
19
+ types: this.extractTypes(context),
20
+ functions: this.extractFunctions(context),
21
+ };
22
+ return schema;
23
+ }
24
+ /**
25
+ * Extract root object schema
26
+ */
27
+ extractRoot(context) {
28
+ const { rootObject, rootName } = context;
29
+ if (rootObject === null || rootObject === undefined)
30
+ return null;
31
+ const name = rootName ?? 'root';
32
+ const type = typeof rootObject === 'object'
33
+ ? (rootObject?.constructor?.name ?? 'Object')
34
+ : typeof rootObject;
35
+ const fields = this.extractFields(rootObject);
36
+ return { name, type, fields, methods: {} };
37
+ }
38
+ /**
39
+ * Extract object fields
40
+ */
41
+ extractFields(obj) {
42
+ if (obj === null || obj === undefined || typeof obj !== 'object') {
43
+ return {};
44
+ }
45
+ const fields = {};
46
+ for (const key of Object.keys(obj)) {
47
+ try {
48
+ const value = obj[key];
49
+ const fieldType = this.inferSpelType(value);
50
+ fields[key] = {
51
+ type: fieldType,
52
+ description: this.generateDescription(key, fieldType),
53
+ isCollection: Array.isArray(value),
54
+ elementType: Array.isArray(value) && value.length > 0 ? typeof value[0] : undefined,
55
+ nullable: value === null,
56
+ example: this.safeExample(value),
57
+ };
58
+ }
59
+ catch {
60
+ // Skip inaccessible properties
61
+ }
62
+ }
63
+ return fields;
64
+ }
65
+ /**
66
+ * Infer SpEL type
67
+ */
68
+ inferSpelType(value) {
69
+ if (value === null || value === undefined)
70
+ return 'string';
71
+ if (typeof value === 'string')
72
+ return 'string';
73
+ if (typeof value === 'number')
74
+ return 'number';
75
+ if (typeof value === 'boolean')
76
+ return 'boolean';
77
+ if (value instanceof Date)
78
+ return 'date';
79
+ if (Array.isArray(value))
80
+ return 'array';
81
+ if (typeof value === 'object')
82
+ return 'object';
83
+ return 'string';
84
+ }
85
+ /**
86
+ * Generate field description
87
+ */
88
+ generateDescription(key, type) {
89
+ return `Field '${key}' of type ${type}`;
90
+ }
91
+ /**
92
+ * Safely get example value
93
+ */
94
+ safeExample(value) {
95
+ if (value === null)
96
+ return null;
97
+ if (typeof value === 'object')
98
+ return undefined;
99
+ return value;
100
+ }
101
+ /**
102
+ * Extract variables
103
+ */
104
+ extractVariables(context) {
105
+ const variables = {};
106
+ if (!context.variables)
107
+ return variables;
108
+ for (const [name, vdef] of Object.entries(context.variables)) {
109
+ variables[name] = {
110
+ type: vdef.type,
111
+ description: vdef.description ?? `Variable '#${name}'`,
112
+ nullable: vdef.nullable ?? false,
113
+ value: vdef.value,
114
+ };
115
+ }
116
+ return variables;
117
+ }
118
+ /**
119
+ * Extract beans
120
+ */
121
+ extractBeans(context) {
122
+ const beans = {};
123
+ if (!context.beans)
124
+ return beans;
125
+ for (const bdef of context.beans) {
126
+ beans[bdef.name] = {
127
+ type: bdef.type,
128
+ description: bdef.description,
129
+ singleton: bdef.singleton,
130
+ };
131
+ }
132
+ return beans;
133
+ }
134
+ /**
135
+ * Extract types
136
+ */
137
+ extractTypes(context) {
138
+ const types = {};
139
+ if (!context.types)
140
+ return types;
141
+ for (const tdef of context.types) {
142
+ types[tdef.name] = {
143
+ className: tdef.className,
144
+ description: tdef.description,
145
+ };
146
+ }
147
+ return types;
148
+ }
149
+ /**
150
+ * Extract functions
151
+ */
152
+ extractFunctions(context) {
153
+ const functions = {};
154
+ if (!context.functions)
155
+ return functions;
156
+ for (const fdef of context.functions) {
157
+ functions[fdef.name] = {
158
+ returnType: fdef.returnType,
159
+ params: fdef.params,
160
+ description: fdef.description,
161
+ };
162
+ }
163
+ return functions;
164
+ }
165
+ }
166
+ //# sourceMappingURL=context-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-extractor.js","sourceRoot":"","sources":["../../src/context/context-extractor.ts"],"names":[],"mappings":"AAUA;;;;;;;;GAQG;AACH,MAAM,OAAO,gBAAgB;IAC3B;;OAEG;IACI,OAAO,CAAC,OAed;QACC,MAAM,MAAM,GAAkB;YAC5B,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;YAC/B,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;YACzC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YACjC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YACjC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;SAC1C,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,OAGnB;QACC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QACzC,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QAEjE,MAAM,IAAI,GAAG,QAAQ,IAAI,MAAM,CAAC;QAChC,MAAM,IAAI,GACR,OAAO,UAAU,KAAK,QAAQ;YAC5B,CAAC,CAAC,CAAE,UAAkB,EAAE,WAAW,EAAE,IAAI,IAAI,QAAQ,CAAC;YACtD,CAAC,CAAC,OAAO,UAAU,CAAC;QAExB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,UAAqC,CAAC,CAAC;QAEzE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC7C,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,GAA4B;QAChD,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YACjE,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,MAAM,GAAgC,EAAE,CAAC;QAE/C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,KAAK,GAAI,GAAW,CAAC,GAAG,CAAC,CAAC;gBAChC,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAE5C,MAAM,CAAC,GAAG,CAAC,GAAG;oBACZ,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,SAAS,CAAC;oBACrD,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;oBAClC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;oBACnF,QAAQ,EAAE,KAAK,KAAK,IAAI;oBACxB,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;iBACjC,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,+BAA+B;YACjC,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,KAAc;QAClC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAC;QAC3D,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC/C,IAAI,OAAO,KAAK,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACjD,IAAI,KAAK,YAAY,IAAI;YAAE,OAAO,MAAM,CAAC;QACzC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC;QACzC,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC/C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,GAAW,EAAE,IAAY;QACnD,OAAO,UAAU,GAAG,aAAa,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,KAAc;QAChC,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAChC,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,OAKxB;QACC,MAAM,SAAS,GAAmC,EAAE,CAAC;QACrD,IAAI,CAAC,OAAO,CAAC,SAAS;YAAE,OAAO,SAAS,CAAC;QAEzC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7D,SAAS,CAAC,IAAI,CAAC,GAAG;gBAChB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,cAAc,IAAI,GAAG;gBACtD,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;gBAChC,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC;QACJ,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,OAEpB;QACC,MAAM,KAAK,GAA+B,EAAE,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAEjC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,OAEpB;QACC,MAAM,KAAK,GAA+B,EAAE,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAEjC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACjB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,OAOxB;QACC,MAAM,SAAS,GAAmC,EAAE,CAAC;QACrD,IAAI,CAAC,OAAO,CAAC,SAAS;YAAE,OAAO,SAAS,CAAC;QAEzC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACrC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACrB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B,CAAC;QACJ,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ import type { ContextSchema } from '../SpelEvaluator.js';
2
+ /**
3
+ * SchemaFormatter — formats ContextSchema into readable text.
4
+ *
5
+ * Two formats:
6
+ * 1. formatForLLM(): optimized for LLM prompts (compact, key info first)
7
+ * 2. formatForHuman(): human-readable format (complete, indent-friendly)
8
+ */
9
+ export declare class SchemaFormatter {
10
+ /**
11
+ * LLM-optimized format — compact, injected into the User part of the prompt
12
+ */
13
+ formatForLLM(schema: ContextSchema): string;
14
+ /**
15
+ * Human-readable format
16
+ */
17
+ formatForHuman(schema: ContextSchema): string;
18
+ private formatFieldForLLM;
19
+ }
20
+ //# sourceMappingURL=schema-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-formatter.d.ts","sourceRoot":"","sources":["../../src/context/schema-formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,qBAAqB,CAAC;AAEtE;;;;;;GAMG;AACH,qBAAa,eAAe;IAC1B;;OAEG;IACI,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM;IA2DlD;;OAEG;IACI,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM;IA6BpD,OAAO,CAAC,iBAAiB;CAqB1B"}