@lokascript/framework 2.0.0 → 2.1.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 (126) hide show
  1. package/dist/aot/index.d.ts +1 -0
  2. package/dist/aot/index.d.ts.map +1 -1
  3. package/dist/aot/registry-bridge.d.ts +27 -0
  4. package/dist/aot/registry-bridge.d.ts.map +1 -0
  5. package/dist/api/create-dsl.d.ts.map +1 -1
  6. package/dist/api/dispatcher.d.ts +22 -0
  7. package/dist/api/dispatcher.d.ts.map +1 -1
  8. package/dist/api/domain-registry.d.ts +41 -0
  9. package/dist/api/domain-registry.d.ts.map +1 -1
  10. package/dist/api/index.js +1351 -21
  11. package/dist/api/index.js.map +1 -1
  12. package/dist/core/index.js +114 -10
  13. package/dist/core/index.js.map +1 -1
  14. package/dist/core/pattern-matching/index.js +74 -10
  15. package/dist/core/pattern-matching/index.js.map +1 -1
  16. package/dist/core/pattern-matching/pattern-matcher.d.ts.map +1 -1
  17. package/dist/core/types.d.ts +80 -2
  18. package/dist/core/types.d.ts.map +1 -1
  19. package/dist/core/types.js +40 -0
  20. package/dist/core/types.js.map +1 -1
  21. package/dist/feedback/confidence-gate.d.ts +28 -0
  22. package/dist/feedback/confidence-gate.d.ts.map +1 -0
  23. package/dist/feedback/feedback-formatter.d.ts +21 -0
  24. package/dist/feedback/feedback-formatter.d.ts.map +1 -0
  25. package/dist/feedback/index.d.ts +11 -0
  26. package/dist/feedback/index.d.ts.map +1 -0
  27. package/dist/feedback/pattern-tracker.d.ts +47 -0
  28. package/dist/feedback/pattern-tracker.d.ts.map +1 -0
  29. package/dist/feedback/types.d.ts +113 -0
  30. package/dist/feedback/types.d.ts.map +1 -0
  31. package/dist/generation/index.js +2 -1
  32. package/dist/generation/index.js.map +1 -1
  33. package/dist/index.cjs +2685 -71
  34. package/dist/index.cjs.map +1 -1
  35. package/dist/index.d.ts +6 -2
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +2652 -71
  38. package/dist/index.js.map +1 -1
  39. package/dist/ir/explicit-parser.d.ts +31 -0
  40. package/dist/ir/explicit-parser.d.ts.map +1 -0
  41. package/dist/ir/explicit-renderer.d.ts +17 -0
  42. package/dist/ir/explicit-renderer.d.ts.map +1 -0
  43. package/dist/ir/from-interchange.d.ts +51 -0
  44. package/dist/ir/from-interchange.d.ts.map +1 -0
  45. package/dist/ir/index.d.ts +29 -0
  46. package/dist/ir/index.d.ts.map +1 -0
  47. package/dist/ir/index.js +1557 -0
  48. package/dist/ir/index.js.map +1 -0
  49. package/dist/ir/json-schema.d.ts +40 -0
  50. package/dist/ir/json-schema.d.ts.map +1 -0
  51. package/dist/ir/protocol-json.d.ts +73 -0
  52. package/dist/ir/protocol-json.d.ts.map +1 -0
  53. package/dist/ir/references.d.ts +19 -0
  54. package/dist/ir/references.d.ts.map +1 -0
  55. package/dist/ir/types.d.ts +141 -0
  56. package/dist/ir/types.d.ts.map +1 -0
  57. package/dist/parsing/index.js +74 -10
  58. package/dist/parsing/index.js.map +1 -1
  59. package/dist/prompts/index.d.ts +9 -0
  60. package/dist/prompts/index.d.ts.map +1 -0
  61. package/dist/prompts/prompt-generator.d.ts +49 -0
  62. package/dist/prompts/prompt-generator.d.ts.map +1 -0
  63. package/dist/prompts/types.d.ts +64 -0
  64. package/dist/prompts/types.d.ts.map +1 -0
  65. package/dist/schema/command-schema.d.ts +17 -0
  66. package/dist/schema/command-schema.d.ts.map +1 -1
  67. package/dist/schema/index.js.map +1 -1
  68. package/dist/testing/index.js +3 -0
  69. package/dist/testing/index.js.map +1 -1
  70. package/dist/training/index.d.ts +11 -0
  71. package/dist/training/index.d.ts.map +1 -0
  72. package/dist/training/jsonl-writer.d.ts +42 -0
  73. package/dist/training/jsonl-writer.d.ts.map +1 -0
  74. package/dist/training/schema-synthesizer.d.ts +20 -0
  75. package/dist/training/schema-synthesizer.d.ts.map +1 -0
  76. package/dist/training/types.d.ts +73 -0
  77. package/dist/training/types.d.ts.map +1 -0
  78. package/package.json +5 -1
  79. package/src/aot/index.ts +1 -0
  80. package/src/aot/registry-bridge.test.ts +104 -0
  81. package/src/aot/registry-bridge.ts +66 -0
  82. package/src/api/create-dsl.test.ts +306 -0
  83. package/src/api/create-dsl.ts +21 -0
  84. package/src/api/dispatcher.test.ts +66 -0
  85. package/src/api/dispatcher.ts +77 -9
  86. package/src/api/domain-registry.ts +120 -4
  87. package/src/core/pattern-matching/pattern-matcher.test.ts +131 -0
  88. package/src/core/pattern-matching/pattern-matcher.ts +102 -19
  89. package/src/core/types.ts +145 -2
  90. package/src/feedback/confidence-gate.test.ts +111 -0
  91. package/src/feedback/confidence-gate.ts +70 -0
  92. package/src/feedback/feedback-formatter.test.ts +198 -0
  93. package/src/feedback/feedback-formatter.ts +298 -0
  94. package/src/feedback/index.ts +24 -0
  95. package/src/feedback/pattern-tracker.test.ts +198 -0
  96. package/src/feedback/pattern-tracker.ts +140 -0
  97. package/src/feedback/types.ts +149 -0
  98. package/src/generation/pattern-generator.ts +2 -2
  99. package/src/index.ts +22 -0
  100. package/src/integration/llm-lse-integration.test.ts +457 -0
  101. package/src/ir/explicit-parser.test.ts +306 -0
  102. package/src/ir/explicit-parser.ts +419 -0
  103. package/src/ir/explicit-renderer.test.ts +144 -0
  104. package/src/ir/explicit-renderer.ts +146 -0
  105. package/src/ir/from-interchange.test.ts +853 -0
  106. package/src/ir/from-interchange.ts +594 -0
  107. package/src/ir/index.ts +66 -0
  108. package/src/ir/json-schema.test.ts +281 -0
  109. package/src/ir/json-schema.ts +299 -0
  110. package/src/ir/protocol-json.test.ts +1185 -0
  111. package/src/ir/protocol-json.ts +745 -0
  112. package/src/ir/references.test.ts +38 -0
  113. package/src/ir/references.ts +33 -0
  114. package/src/ir/round-trip.test.ts +557 -0
  115. package/src/ir/types.ts +181 -0
  116. package/src/prompts/index.ts +15 -0
  117. package/src/prompts/prompt-generator.test.ts +386 -0
  118. package/src/prompts/prompt-generator.ts +531 -0
  119. package/src/prompts/types.ts +89 -0
  120. package/src/schema/command-schema.ts +19 -0
  121. package/src/training/index.ts +13 -0
  122. package/src/training/jsonl-writer.test.ts +138 -0
  123. package/src/training/jsonl-writer.ts +67 -0
  124. package/src/training/schema-synthesizer.test.ts +250 -0
  125. package/src/training/schema-synthesizer.ts +306 -0
  126. package/src/training/types.ts +103 -0
@@ -266,7 +266,7 @@ var _PatternMatcher = class _PatternMatcher {
266
266
  * a token and the immediately following pattern token fails, the matcher
267
267
  * resets to before the optional role and retries the failed token.
268
268
  */
269
- matchTokenSequence(tokens, patternTokens, captured) {
269
+ matchTokenSequence(tokens, patternTokens, captured, parentStopMarkers) {
270
270
  const firstPatternToken = patternTokens[0];
271
271
  const patternExpectsConjunction = firstPatternToken?.type === "literal" && (firstPatternToken.value === "and" || firstPatternToken.value === "then" || firstPatternToken.alternatives?.includes("and") || firstPatternToken.alternatives?.includes("then"));
272
272
  if (this.currentProfile?.code === "ar" && !patternExpectsConjunction) {
@@ -290,6 +290,9 @@ var _PatternMatcher = class _PatternMatcher {
290
290
  );
291
291
  if (patternToken.type === "role" && patternToken.greedy) {
292
292
  const stopMarkers = this.collectStopMarkers(patternTokens, i + 1);
293
+ if (parentStopMarkers) {
294
+ for (const m of parentStopMarkers) stopMarkers.add(m);
295
+ }
293
296
  const values = [];
294
297
  while (!tokens.isAtEnd()) {
295
298
  const nextToken = tokens.peek();
@@ -309,8 +312,58 @@ var _PatternMatcher = class _PatternMatcher {
309
312
  return false;
310
313
  }
311
314
  }
315
+ if (patternToken.type === "group") {
316
+ const siblingStopMarkers = this.collectStopMarkers(patternTokens, i + 1);
317
+ if (parentStopMarkers) {
318
+ for (const m of parentStopMarkers) siblingStopMarkers.add(m);
319
+ }
320
+ const groupMatched = this.matchGroupToken(
321
+ tokens,
322
+ patternToken,
323
+ captured,
324
+ siblingStopMarkers
325
+ );
326
+ if (groupMatched) {
327
+ prevOptionalMark = null;
328
+ prevOptionalRole = null;
329
+ continue;
330
+ }
331
+ if (this.isOptional(patternToken)) {
332
+ continue;
333
+ }
334
+ return false;
335
+ }
312
336
  const isOptionalRole = patternToken.type === "role" && patternToken.optional === true;
313
337
  const markBefore = isOptionalRole ? tokens.mark() : null;
338
+ const isRoleToken = patternToken.type === "role";
339
+ if (isRoleToken && !isOptionalRole) {
340
+ const nextPT = i + 1 < patternTokens.length ? patternTokens[i + 1] : null;
341
+ if (nextPT?.type === "literal") {
342
+ const currentToken = tokens.peek();
343
+ if (currentToken && this.getMatchType(currentToken, nextPT.value) !== "none") {
344
+ this.logger.debug(
345
+ " >> MARKER-STEAL GUARD: current token matches next literal, skipping role"
346
+ );
347
+ this.logger.debug(" >> Token match FAILED");
348
+ if (this.isOptional(patternToken)) {
349
+ continue;
350
+ }
351
+ if (prevOptionalMark && prevOptionalRole) {
352
+ this.logger.debug(" >> BACKTRACKING: undoing optional role", prevOptionalRole);
353
+ tokens.reset(prevOptionalMark);
354
+ captured.delete(prevOptionalRole);
355
+ prevOptionalMark = null;
356
+ prevOptionalRole = null;
357
+ const retryMatched = this.matchPatternToken(tokens, patternToken, captured);
358
+ this.logger.debug(" >> Backtrack retry result:", retryMatched);
359
+ if (retryMatched) {
360
+ continue;
361
+ }
362
+ }
363
+ return false;
364
+ }
365
+ }
366
+ }
314
367
  const matched = this.matchPatternToken(tokens, patternToken, captured);
315
368
  this.logger.debug(" >> Match result:", matched);
316
369
  if (matched) {
@@ -431,7 +484,7 @@ var _PatternMatcher = class _PatternMatcher {
431
484
  const possessiveValue = this.tryMatchPossessiveExpression(tokens);
432
485
  if (possessiveValue) {
433
486
  if (patternToken.expectedTypes && patternToken.expectedTypes.length > 0) {
434
- if (!patternToken.expectedTypes.includes(possessiveValue.type) && !patternToken.expectedTypes.includes("expression")) {
487
+ if (!isTypeCompatible(possessiveValue.type, patternToken.expectedTypes)) {
435
488
  return patternToken.optional || false;
436
489
  }
437
490
  }
@@ -441,7 +494,7 @@ var _PatternMatcher = class _PatternMatcher {
441
494
  const methodCallValue = this.tryMatchMethodCallExpression(tokens);
442
495
  if (methodCallValue) {
443
496
  if (patternToken.expectedTypes && patternToken.expectedTypes.length > 0) {
444
- if (!patternToken.expectedTypes.includes(methodCallValue.type) && !patternToken.expectedTypes.includes("expression")) {
497
+ if (!isTypeCompatible(methodCallValue.type, patternToken.expectedTypes)) {
445
498
  return patternToken.optional || false;
446
499
  }
447
500
  }
@@ -461,7 +514,7 @@ var _PatternMatcher = class _PatternMatcher {
461
514
  const propertyAccessValue = this.tryMatchPropertyAccessExpression(tokens);
462
515
  if (propertyAccessValue) {
463
516
  if (patternToken.expectedTypes && patternToken.expectedTypes.length > 0) {
464
- if (!patternToken.expectedTypes.includes(propertyAccessValue.type) && !patternToken.expectedTypes.includes("expression")) {
517
+ if (!isTypeCompatible(propertyAccessValue.type, patternToken.expectedTypes)) {
465
518
  return patternToken.optional || false;
466
519
  }
467
520
  }
@@ -781,10 +834,15 @@ var _PatternMatcher = class _PatternMatcher {
781
834
  * (e.g., a value like 'hello') to sit between groups without blocking later
782
835
  * marker matches.
783
836
  */
784
- matchGroupToken(tokens, patternToken, captured) {
837
+ matchGroupToken(tokens, patternToken, captured, parentStopMarkers) {
785
838
  const mark = tokens.mark();
786
839
  const capturedBefore = new Set(captured.keys());
787
- const success = this.matchTokenSequence(tokens, patternToken.tokens, captured);
840
+ const success = this.matchTokenSequence(
841
+ tokens,
842
+ patternToken.tokens,
843
+ captured,
844
+ parentStopMarkers
845
+ );
788
846
  if (success) return true;
789
847
  tokens.reset(mark);
790
848
  for (const role of captured.keys()) {
@@ -806,7 +864,12 @@ var _PatternMatcher = class _PatternMatcher {
806
864
  "- skipping intervening tokens"
807
865
  );
808
866
  for (let s = 0; s < offset; s++) tokens.advance();
809
- const retrySuccess = this.matchTokenSequence(tokens, patternToken.tokens, captured);
867
+ const retrySuccess = this.matchTokenSequence(
868
+ tokens,
869
+ patternToken.tokens,
870
+ captured,
871
+ parentStopMarkers
872
+ );
810
873
  if (retrySuccess) return true;
811
874
  tokens.reset(mark);
812
875
  for (const role of captured.keys()) {
@@ -873,7 +936,7 @@ var _PatternMatcher = class _PatternMatcher {
873
936
  break;
874
937
  }
875
938
  }
876
- break;
939
+ if (!pt.optional) break;
877
940
  }
878
941
  }
879
942
  return markers;
@@ -883,8 +946,9 @@ var _PatternMatcher = class _PatternMatcher {
883
946
  */
884
947
  isStopMarker(token, stopMarkers) {
885
948
  if (stopMarkers.size === 0) return false;
886
- const value = (token.normalized || token.value).toLowerCase();
887
- return stopMarkers.has(value);
949
+ if (stopMarkers.has(token.value.toLowerCase())) return true;
950
+ if (token.normalized && stopMarkers.has(token.normalized.toLowerCase())) return true;
951
+ return false;
888
952
  }
889
953
  /**
890
954
  * Convert a language token to a semantic value.