@lokascript/semantic 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.
- package/LICENSE +21 -0
- package/README.md +686 -0
- package/dist/browser-ar.ar.global.js +2 -0
- package/dist/browser-core.core.global.js +2 -0
- package/dist/browser-de.de.global.js +2 -0
- package/dist/browser-east-asian.east-asian.global.js +2 -0
- package/dist/browser-en-tr.en-tr.global.js +2 -0
- package/dist/browser-en.en.global.js +2 -0
- package/dist/browser-es-en.es-en.global.js +2 -0
- package/dist/browser-es.es.global.js +2 -0
- package/dist/browser-fr.fr.global.js +2 -0
- package/dist/browser-id.id.global.js +2 -0
- package/dist/browser-ja.ja.global.js +2 -0
- package/dist/browser-ko.ko.global.js +2 -0
- package/dist/browser-lazy.lazy.global.js +2 -0
- package/dist/browser-priority.priority.global.js +2 -0
- package/dist/browser-pt.pt.global.js +2 -0
- package/dist/browser-qu.qu.global.js +2 -0
- package/dist/browser-sw.sw.global.js +2 -0
- package/dist/browser-tr.tr.global.js +2 -0
- package/dist/browser-western.western.global.js +2 -0
- package/dist/browser-zh.zh.global.js +2 -0
- package/dist/browser.global.js +3 -0
- package/dist/browser.global.js.map +1 -0
- package/dist/index.cjs +35051 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +3426 -0
- package/dist/index.d.ts +3426 -0
- package/dist/index.js +34890 -0
- package/dist/index.js.map +1 -0
- package/dist/languages/ar.d.ts +78 -0
- package/dist/languages/ar.js +1622 -0
- package/dist/languages/ar.js.map +1 -0
- package/dist/languages/de.d.ts +38 -0
- package/dist/languages/de.js +1168 -0
- package/dist/languages/de.js.map +1 -0
- package/dist/languages/en.d.ts +44 -0
- package/dist/languages/en.js +3491 -0
- package/dist/languages/en.js.map +1 -0
- package/dist/languages/es.d.ts +52 -0
- package/dist/languages/es.js +1493 -0
- package/dist/languages/es.js.map +1 -0
- package/dist/languages/fr.d.ts +37 -0
- package/dist/languages/fr.js +1159 -0
- package/dist/languages/fr.js.map +1 -0
- package/dist/languages/id.d.ts +35 -0
- package/dist/languages/id.js +1152 -0
- package/dist/languages/id.js.map +1 -0
- package/dist/languages/ja.d.ts +53 -0
- package/dist/languages/ja.js +1430 -0
- package/dist/languages/ja.js.map +1 -0
- package/dist/languages/ko.d.ts +51 -0
- package/dist/languages/ko.js +1729 -0
- package/dist/languages/ko.js.map +1 -0
- package/dist/languages/pt.d.ts +37 -0
- package/dist/languages/pt.js +1127 -0
- package/dist/languages/pt.js.map +1 -0
- package/dist/languages/qu.d.ts +36 -0
- package/dist/languages/qu.js +1143 -0
- package/dist/languages/qu.js.map +1 -0
- package/dist/languages/sw.d.ts +35 -0
- package/dist/languages/sw.js +1147 -0
- package/dist/languages/sw.js.map +1 -0
- package/dist/languages/tr.d.ts +45 -0
- package/dist/languages/tr.js +1529 -0
- package/dist/languages/tr.js.map +1 -0
- package/dist/languages/zh.d.ts +58 -0
- package/dist/languages/zh.js +1257 -0
- package/dist/languages/zh.js.map +1 -0
- package/dist/types-C4dcj53L.d.ts +600 -0
- package/package.json +202 -0
- package/src/__test-utils__/index.ts +7 -0
- package/src/__test-utils__/test-helpers.ts +8 -0
- package/src/__types__/test-helpers.ts +122 -0
- package/src/analysis/index.ts +479 -0
- package/src/ast-builder/command-mappers.ts +1133 -0
- package/src/ast-builder/expression-parser/index.ts +41 -0
- package/src/ast-builder/expression-parser/parser.ts +563 -0
- package/src/ast-builder/expression-parser/tokenizer.ts +394 -0
- package/src/ast-builder/expression-parser/types.ts +208 -0
- package/src/ast-builder/index.ts +536 -0
- package/src/ast-builder/value-converters.ts +172 -0
- package/src/bridge.ts +275 -0
- package/src/browser-ar.ts +162 -0
- package/src/browser-core.ts +231 -0
- package/src/browser-de.ts +162 -0
- package/src/browser-east-asian.ts +173 -0
- package/src/browser-en-tr.ts +165 -0
- package/src/browser-en.ts +157 -0
- package/src/browser-es-en.ts +200 -0
- package/src/browser-es.ts +170 -0
- package/src/browser-fr.ts +162 -0
- package/src/browser-id.ts +162 -0
- package/src/browser-ja.ts +162 -0
- package/src/browser-ko.ts +162 -0
- package/src/browser-lazy.ts +189 -0
- package/src/browser-priority.ts +214 -0
- package/src/browser-pt.ts +162 -0
- package/src/browser-qu.ts +162 -0
- package/src/browser-sw.ts +162 -0
- package/src/browser-tr.ts +162 -0
- package/src/browser-western.ts +181 -0
- package/src/browser-zh.ts +162 -0
- package/src/browser.ts +268 -0
- package/src/cache/index.ts +14 -0
- package/src/cache/semantic-cache.ts +344 -0
- package/src/core-bridge.ts +372 -0
- package/src/explicit/converter.ts +258 -0
- package/src/explicit/index.ts +18 -0
- package/src/explicit/parser.ts +236 -0
- package/src/explicit/renderer.ts +424 -0
- package/src/generators/command-schemas.ts +1636 -0
- package/src/generators/event-handler-generator.ts +109 -0
- package/src/generators/index.ts +117 -0
- package/src/generators/language-profiles.ts +139 -0
- package/src/generators/pattern-generator.ts +537 -0
- package/src/generators/profiles/arabic.ts +131 -0
- package/src/generators/profiles/bengali.ts +132 -0
- package/src/generators/profiles/chinese.ts +124 -0
- package/src/generators/profiles/english.ts +113 -0
- package/src/generators/profiles/french.ts +125 -0
- package/src/generators/profiles/german.ts +126 -0
- package/src/generators/profiles/hindi.ts +146 -0
- package/src/generators/profiles/index.ts +46 -0
- package/src/generators/profiles/indonesian.ts +125 -0
- package/src/generators/profiles/italian.ts +139 -0
- package/src/generators/profiles/japanese.ts +149 -0
- package/src/generators/profiles/korean.ts +127 -0
- package/src/generators/profiles/marker-templates.ts +288 -0
- package/src/generators/profiles/ms.ts +130 -0
- package/src/generators/profiles/polish.ts +249 -0
- package/src/generators/profiles/portuguese.ts +115 -0
- package/src/generators/profiles/quechua.ts +113 -0
- package/src/generators/profiles/russian.ts +260 -0
- package/src/generators/profiles/spanish.ts +130 -0
- package/src/generators/profiles/swahili.ts +129 -0
- package/src/generators/profiles/thai.ts +132 -0
- package/src/generators/profiles/tl.ts +128 -0
- package/src/generators/profiles/turkish.ts +124 -0
- package/src/generators/profiles/types.ts +165 -0
- package/src/generators/profiles/ukrainian.ts +270 -0
- package/src/generators/profiles/vietnamese.ts +133 -0
- package/src/generators/schema-error-codes.ts +160 -0
- package/src/generators/schema-validator.ts +391 -0
- package/src/index.ts +429 -0
- package/src/language-building-schema.ts +3170 -0
- package/src/language-loader.ts +394 -0
- package/src/languages/_all.ts +65 -0
- package/src/languages/ar.ts +15 -0
- package/src/languages/bn.ts +16 -0
- package/src/languages/de.ts +15 -0
- package/src/languages/en.ts +29 -0
- package/src/languages/es.ts +15 -0
- package/src/languages/fr.ts +15 -0
- package/src/languages/hi.ts +26 -0
- package/src/languages/id.ts +15 -0
- package/src/languages/index.ts +18 -0
- package/src/languages/it.ts +15 -0
- package/src/languages/ja.ts +15 -0
- package/src/languages/ko.ts +15 -0
- package/src/languages/ms.ts +16 -0
- package/src/languages/pl.ts +18 -0
- package/src/languages/pt.ts +15 -0
- package/src/languages/qu.ts +15 -0
- package/src/languages/ru.ts +26 -0
- package/src/languages/sw.ts +15 -0
- package/src/languages/th.ts +16 -0
- package/src/languages/tl.ts +16 -0
- package/src/languages/tr.ts +15 -0
- package/src/languages/uk.ts +26 -0
- package/src/languages/vi.ts +16 -0
- package/src/languages/zh.ts +15 -0
- package/src/parser/index.ts +15 -0
- package/src/parser/pattern-matcher.ts +1181 -0
- package/src/parser/semantic-parser.ts +573 -0
- package/src/parser/utils/index.ts +35 -0
- package/src/parser/utils/marker-resolution.ts +111 -0
- package/src/parser/utils/possessive-keywords.ts +43 -0
- package/src/parser/utils/role-positioning.ts +70 -0
- package/src/parser/utils/type-validation.ts +134 -0
- package/src/patterns/add/ar.ts +71 -0
- package/src/patterns/add/bn.ts +70 -0
- package/src/patterns/add/hi.ts +69 -0
- package/src/patterns/add/index.ts +87 -0
- package/src/patterns/add/it.ts +61 -0
- package/src/patterns/add/ja.ts +93 -0
- package/src/patterns/add/ko.ts +74 -0
- package/src/patterns/add/ms.ts +30 -0
- package/src/patterns/add/pl.ts +62 -0
- package/src/patterns/add/ru.ts +62 -0
- package/src/patterns/add/th.ts +49 -0
- package/src/patterns/add/tl.ts +30 -0
- package/src/patterns/add/tr.ts +71 -0
- package/src/patterns/add/uk.ts +62 -0
- package/src/patterns/add/vi.ts +61 -0
- package/src/patterns/add/zh.ts +71 -0
- package/src/patterns/builders.ts +207 -0
- package/src/patterns/decrement/bn.ts +70 -0
- package/src/patterns/decrement/de.ts +42 -0
- package/src/patterns/decrement/hi.ts +68 -0
- package/src/patterns/decrement/index.ts +79 -0
- package/src/patterns/decrement/it.ts +69 -0
- package/src/patterns/decrement/ms.ts +30 -0
- package/src/patterns/decrement/pl.ts +58 -0
- package/src/patterns/decrement/ru.ts +58 -0
- package/src/patterns/decrement/th.ts +49 -0
- package/src/patterns/decrement/tl.ts +30 -0
- package/src/patterns/decrement/tr.ts +48 -0
- package/src/patterns/decrement/uk.ts +58 -0
- package/src/patterns/decrement/vi.ts +61 -0
- package/src/patterns/decrement/zh.ts +32 -0
- package/src/patterns/en.ts +302 -0
- package/src/patterns/event-handler/ar.ts +151 -0
- package/src/patterns/event-handler/bn.ts +72 -0
- package/src/patterns/event-handler/de.ts +117 -0
- package/src/patterns/event-handler/en.ts +117 -0
- package/src/patterns/event-handler/es.ts +136 -0
- package/src/patterns/event-handler/fr.ts +117 -0
- package/src/patterns/event-handler/hi.ts +64 -0
- package/src/patterns/event-handler/id.ts +117 -0
- package/src/patterns/event-handler/index.ts +119 -0
- package/src/patterns/event-handler/it.ts +54 -0
- package/src/patterns/event-handler/ja.ts +118 -0
- package/src/patterns/event-handler/ko.ts +133 -0
- package/src/patterns/event-handler/ms.ts +30 -0
- package/src/patterns/event-handler/pl.ts +62 -0
- package/src/patterns/event-handler/pt.ts +117 -0
- package/src/patterns/event-handler/qu.ts +66 -0
- package/src/patterns/event-handler/ru.ts +62 -0
- package/src/patterns/event-handler/shared.ts +270 -0
- package/src/patterns/event-handler/sw.ts +117 -0
- package/src/patterns/event-handler/th.ts +53 -0
- package/src/patterns/event-handler/tl.ts +30 -0
- package/src/patterns/event-handler/tr.ts +170 -0
- package/src/patterns/event-handler/uk.ts +62 -0
- package/src/patterns/event-handler/vi.ts +61 -0
- package/src/patterns/event-handler/zh.ts +150 -0
- package/src/patterns/get/ar.ts +49 -0
- package/src/patterns/get/bn.ts +47 -0
- package/src/patterns/get/de.ts +32 -0
- package/src/patterns/get/hi.ts +52 -0
- package/src/patterns/get/index.ts +83 -0
- package/src/patterns/get/it.ts +56 -0
- package/src/patterns/get/ja.ts +53 -0
- package/src/patterns/get/ko.ts +53 -0
- package/src/patterns/get/ms.ts +30 -0
- package/src/patterns/get/pl.ts +57 -0
- package/src/patterns/get/ru.ts +57 -0
- package/src/patterns/get/th.ts +29 -0
- package/src/patterns/get/tl.ts +30 -0
- package/src/patterns/get/uk.ts +57 -0
- package/src/patterns/get/vi.ts +48 -0
- package/src/patterns/grammar-transformed/index.ts +39 -0
- package/src/patterns/grammar-transformed/ja.ts +1713 -0
- package/src/patterns/grammar-transformed/ko.ts +1311 -0
- package/src/patterns/grammar-transformed/tr.ts +1067 -0
- package/src/patterns/hide/ar.ts +67 -0
- package/src/patterns/hide/bn.ts +47 -0
- package/src/patterns/hide/de.ts +36 -0
- package/src/patterns/hide/hi.ts +61 -0
- package/src/patterns/hide/index.ts +91 -0
- package/src/patterns/hide/it.ts +56 -0
- package/src/patterns/hide/ja.ts +69 -0
- package/src/patterns/hide/ko.ts +69 -0
- package/src/patterns/hide/ms.ts +30 -0
- package/src/patterns/hide/pl.ts +57 -0
- package/src/patterns/hide/ru.ts +57 -0
- package/src/patterns/hide/th.ts +29 -0
- package/src/patterns/hide/tl.ts +30 -0
- package/src/patterns/hide/tr.ts +65 -0
- package/src/patterns/hide/uk.ts +57 -0
- package/src/patterns/hide/vi.ts +56 -0
- package/src/patterns/hide/zh.ts +68 -0
- package/src/patterns/increment/bn.ts +70 -0
- package/src/patterns/increment/de.ts +36 -0
- package/src/patterns/increment/hi.ts +68 -0
- package/src/patterns/increment/index.ts +79 -0
- package/src/patterns/increment/it.ts +69 -0
- package/src/patterns/increment/ms.ts +30 -0
- package/src/patterns/increment/pl.ts +58 -0
- package/src/patterns/increment/ru.ts +58 -0
- package/src/patterns/increment/th.ts +49 -0
- package/src/patterns/increment/tl.ts +30 -0
- package/src/patterns/increment/tr.ts +52 -0
- package/src/patterns/increment/uk.ts +58 -0
- package/src/patterns/increment/vi.ts +61 -0
- package/src/patterns/increment/zh.ts +32 -0
- package/src/patterns/index.ts +84 -0
- package/src/patterns/languages/en/control-flow.ts +93 -0
- package/src/patterns/languages/en/fetch.ts +62 -0
- package/src/patterns/languages/en/index.ts +42 -0
- package/src/patterns/languages/en/repeat.ts +67 -0
- package/src/patterns/languages/en/set.ts +48 -0
- package/src/patterns/languages/en/swap.ts +38 -0
- package/src/patterns/languages/en/temporal.ts +57 -0
- package/src/patterns/put/ar.ts +74 -0
- package/src/patterns/put/bn.ts +53 -0
- package/src/patterns/put/en.ts +74 -0
- package/src/patterns/put/es.ts +74 -0
- package/src/patterns/put/hi.ts +69 -0
- package/src/patterns/put/id.ts +96 -0
- package/src/patterns/put/index.ts +99 -0
- package/src/patterns/put/it.ts +56 -0
- package/src/patterns/put/ja.ts +75 -0
- package/src/patterns/put/ko.ts +67 -0
- package/src/patterns/put/ms.ts +30 -0
- package/src/patterns/put/pl.ts +81 -0
- package/src/patterns/put/ru.ts +85 -0
- package/src/patterns/put/th.ts +32 -0
- package/src/patterns/put/tl.ts +30 -0
- package/src/patterns/put/tr.ts +67 -0
- package/src/patterns/put/uk.ts +85 -0
- package/src/patterns/put/vi.ts +72 -0
- package/src/patterns/put/zh.ts +62 -0
- package/src/patterns/registry.ts +163 -0
- package/src/patterns/remove/ar.ts +71 -0
- package/src/patterns/remove/bn.ts +68 -0
- package/src/patterns/remove/hi.ts +69 -0
- package/src/patterns/remove/index.ts +87 -0
- package/src/patterns/remove/it.ts +69 -0
- package/src/patterns/remove/ja.ts +74 -0
- package/src/patterns/remove/ko.ts +78 -0
- package/src/patterns/remove/ms.ts +30 -0
- package/src/patterns/remove/pl.ts +62 -0
- package/src/patterns/remove/ru.ts +62 -0
- package/src/patterns/remove/th.ts +49 -0
- package/src/patterns/remove/tl.ts +30 -0
- package/src/patterns/remove/tr.ts +78 -0
- package/src/patterns/remove/uk.ts +62 -0
- package/src/patterns/remove/vi.ts +61 -0
- package/src/patterns/remove/zh.ts +72 -0
- package/src/patterns/set/ar.ts +84 -0
- package/src/patterns/set/bn.ts +53 -0
- package/src/patterns/set/de.ts +84 -0
- package/src/patterns/set/es.ts +92 -0
- package/src/patterns/set/fr.ts +88 -0
- package/src/patterns/set/hi.ts +56 -0
- package/src/patterns/set/id.ts +84 -0
- package/src/patterns/set/index.ts +107 -0
- package/src/patterns/set/it.ts +56 -0
- package/src/patterns/set/ja.ts +86 -0
- package/src/patterns/set/ko.ts +85 -0
- package/src/patterns/set/ms.ts +30 -0
- package/src/patterns/set/pl.ts +57 -0
- package/src/patterns/set/pt.ts +84 -0
- package/src/patterns/set/ru.ts +57 -0
- package/src/patterns/set/th.ts +31 -0
- package/src/patterns/set/tl.ts +30 -0
- package/src/patterns/set/tr.ts +107 -0
- package/src/patterns/set/uk.ts +57 -0
- package/src/patterns/set/vi.ts +53 -0
- package/src/patterns/set/zh.ts +84 -0
- package/src/patterns/show/ar.ts +67 -0
- package/src/patterns/show/bn.ts +47 -0
- package/src/patterns/show/de.ts +32 -0
- package/src/patterns/show/fr.ts +32 -0
- package/src/patterns/show/hi.ts +61 -0
- package/src/patterns/show/index.ts +95 -0
- package/src/patterns/show/it.ts +56 -0
- package/src/patterns/show/ja.ts +69 -0
- package/src/patterns/show/ko.ts +73 -0
- package/src/patterns/show/ms.ts +30 -0
- package/src/patterns/show/pl.ts +57 -0
- package/src/patterns/show/ru.ts +57 -0
- package/src/patterns/show/th.ts +29 -0
- package/src/patterns/show/tl.ts +30 -0
- package/src/patterns/show/tr.ts +65 -0
- package/src/patterns/show/uk.ts +57 -0
- package/src/patterns/show/vi.ts +56 -0
- package/src/patterns/show/zh.ts +68 -0
- package/src/patterns/take/ar.ts +51 -0
- package/src/patterns/take/index.ts +31 -0
- package/src/patterns/toggle/ar.ts +61 -0
- package/src/patterns/toggle/bn.ts +70 -0
- package/src/patterns/toggle/en.ts +61 -0
- package/src/patterns/toggle/es.ts +61 -0
- package/src/patterns/toggle/hi.ts +80 -0
- package/src/patterns/toggle/index.ts +95 -0
- package/src/patterns/toggle/it.ts +69 -0
- package/src/patterns/toggle/ja.ts +156 -0
- package/src/patterns/toggle/ko.ts +113 -0
- package/src/patterns/toggle/ms.ts +30 -0
- package/src/patterns/toggle/pl.ts +62 -0
- package/src/patterns/toggle/ru.ts +62 -0
- package/src/patterns/toggle/th.ts +50 -0
- package/src/patterns/toggle/tl.ts +30 -0
- package/src/patterns/toggle/tr.ts +88 -0
- package/src/patterns/toggle/uk.ts +62 -0
- package/src/patterns/toggle/vi.ts +61 -0
- package/src/patterns/toggle/zh.ts +99 -0
- package/src/public-api.ts +286 -0
- package/src/registry.ts +441 -0
- package/src/tokenizers/arabic.ts +723 -0
- package/src/tokenizers/base.ts +1300 -0
- package/src/tokenizers/bengali.ts +289 -0
- package/src/tokenizers/chinese.ts +481 -0
- package/src/tokenizers/english.ts +416 -0
- package/src/tokenizers/french.ts +326 -0
- package/src/tokenizers/german.ts +324 -0
- package/src/tokenizers/hindi.ts +319 -0
- package/src/tokenizers/index.ts +127 -0
- package/src/tokenizers/indonesian.ts +306 -0
- package/src/tokenizers/italian.ts +458 -0
- package/src/tokenizers/japanese.ts +447 -0
- package/src/tokenizers/korean.ts +642 -0
- package/src/tokenizers/morphology/arabic-normalizer.ts +242 -0
- package/src/tokenizers/morphology/french-normalizer.ts +268 -0
- package/src/tokenizers/morphology/german-normalizer.ts +256 -0
- package/src/tokenizers/morphology/index.ts +46 -0
- package/src/tokenizers/morphology/italian-normalizer.ts +329 -0
- package/src/tokenizers/morphology/japanese-normalizer.ts +288 -0
- package/src/tokenizers/morphology/korean-normalizer.ts +428 -0
- package/src/tokenizers/morphology/polish-normalizer.ts +264 -0
- package/src/tokenizers/morphology/portuguese-normalizer.ts +310 -0
- package/src/tokenizers/morphology/spanish-normalizer.ts +327 -0
- package/src/tokenizers/morphology/turkish-normalizer.ts +412 -0
- package/src/tokenizers/morphology/types.ts +211 -0
- package/src/tokenizers/ms.ts +198 -0
- package/src/tokenizers/polish.ts +354 -0
- package/src/tokenizers/portuguese.ts +304 -0
- package/src/tokenizers/quechua.ts +339 -0
- package/src/tokenizers/russian.ts +375 -0
- package/src/tokenizers/spanish.ts +403 -0
- package/src/tokenizers/swahili.ts +303 -0
- package/src/tokenizers/thai.ts +236 -0
- package/src/tokenizers/tl.ts +198 -0
- package/src/tokenizers/turkish.ts +411 -0
- package/src/tokenizers/ukrainian.ts +369 -0
- package/src/tokenizers/vietnamese.ts +410 -0
- package/src/types/grammar-types.ts +617 -0
- package/src/types/unified-profile.ts +267 -0
- package/src/types.ts +709 -0
- package/src/utils/confidence-calculator.ts +147 -0
- package/src/validators/command-validator.ts +380 -0
- package/src/validators/index.ts +15 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Confidence Calculator Utility
|
|
3
|
+
*
|
|
4
|
+
* Provides standalone confidence calculation for translations.
|
|
5
|
+
* Exposes the pattern matcher's confidence scoring for use in scripts.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { tokenize } from '../tokenizers';
|
|
9
|
+
import { getPatternsForLanguage } from '../registry';
|
|
10
|
+
import { patternMatcher } from '../parser/pattern-matcher';
|
|
11
|
+
import type { SemanticNode, ActionType } from '../types';
|
|
12
|
+
|
|
13
|
+
export interface ConfidenceResult {
|
|
14
|
+
/** Confidence score from 0-1 */
|
|
15
|
+
confidence: number;
|
|
16
|
+
/** Whether the input parsed successfully */
|
|
17
|
+
parseSuccess: boolean;
|
|
18
|
+
/** Pattern ID that matched, if any */
|
|
19
|
+
patternId?: string;
|
|
20
|
+
/** The action type (command) that was parsed */
|
|
21
|
+
action?: ActionType;
|
|
22
|
+
/** Number of tokens consumed during matching */
|
|
23
|
+
tokensConsumed?: number;
|
|
24
|
+
/** Error message if parsing failed */
|
|
25
|
+
error?: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Calculate confidence score for a hyperscript translation.
|
|
30
|
+
*
|
|
31
|
+
* Uses the pattern matcher to determine how well the input matches
|
|
32
|
+
* available patterns for the given language.
|
|
33
|
+
*
|
|
34
|
+
* @param hyperscript - The hyperscript code to analyze
|
|
35
|
+
* @param language - The language code (e.g., 'ja', 'es', 'en')
|
|
36
|
+
* @returns Confidence result with score and match details
|
|
37
|
+
*/
|
|
38
|
+
export function calculateTranslationConfidence(
|
|
39
|
+
hyperscript: string,
|
|
40
|
+
language: string
|
|
41
|
+
): ConfidenceResult {
|
|
42
|
+
try {
|
|
43
|
+
// Tokenize the input
|
|
44
|
+
const tokens = tokenize(hyperscript, language);
|
|
45
|
+
|
|
46
|
+
// Get patterns for this language
|
|
47
|
+
const patterns = getPatternsForLanguage(language);
|
|
48
|
+
|
|
49
|
+
if (patterns.length === 0) {
|
|
50
|
+
return {
|
|
51
|
+
confidence: 0,
|
|
52
|
+
parseSuccess: false,
|
|
53
|
+
error: `No patterns available for language: ${language}`,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Sort patterns by priority (descending)
|
|
58
|
+
const sortedPatterns = [...patterns].sort((a, b) => b.priority - a.priority);
|
|
59
|
+
|
|
60
|
+
// Try to match event handler patterns first (they wrap commands)
|
|
61
|
+
const eventPatterns = sortedPatterns.filter(p => p.command === 'on');
|
|
62
|
+
const eventMatch = patternMatcher.matchBest(tokens, eventPatterns);
|
|
63
|
+
|
|
64
|
+
if (eventMatch) {
|
|
65
|
+
return {
|
|
66
|
+
confidence: eventMatch.confidence,
|
|
67
|
+
parseSuccess: true,
|
|
68
|
+
patternId: eventMatch.pattern.id,
|
|
69
|
+
action: eventMatch.pattern.command,
|
|
70
|
+
tokensConsumed: eventMatch.consumedTokens,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Reset tokens for command matching
|
|
75
|
+
tokens.reset(tokens.mark());
|
|
76
|
+
|
|
77
|
+
// Try command patterns
|
|
78
|
+
const commandPatterns = sortedPatterns.filter(p => p.command !== 'on');
|
|
79
|
+
const commandMatch = patternMatcher.matchBest(tokens, commandPatterns);
|
|
80
|
+
|
|
81
|
+
if (commandMatch) {
|
|
82
|
+
return {
|
|
83
|
+
confidence: commandMatch.confidence,
|
|
84
|
+
parseSuccess: true,
|
|
85
|
+
patternId: commandMatch.pattern.id,
|
|
86
|
+
action: commandMatch.pattern.command,
|
|
87
|
+
tokensConsumed: commandMatch.consumedTokens,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return {
|
|
92
|
+
confidence: 0,
|
|
93
|
+
parseSuccess: false,
|
|
94
|
+
error: `Could not match any patterns for: ${hyperscript}`,
|
|
95
|
+
};
|
|
96
|
+
} catch (error) {
|
|
97
|
+
return {
|
|
98
|
+
confidence: 0,
|
|
99
|
+
parseSuccess: false,
|
|
100
|
+
error: error instanceof Error ? error.message : String(error),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export interface ParseWithConfidenceResult {
|
|
106
|
+
node: SemanticNode | null;
|
|
107
|
+
confidence: number;
|
|
108
|
+
error: string | undefined;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Calculate confidence and parse to a semantic node in one call.
|
|
113
|
+
* Returns both the parsed node and the confidence score.
|
|
114
|
+
*/
|
|
115
|
+
export function parseWithConfidence(
|
|
116
|
+
hyperscript: string,
|
|
117
|
+
language: string
|
|
118
|
+
): ParseWithConfidenceResult {
|
|
119
|
+
// Use the confidence calculator for the score
|
|
120
|
+
const confidenceResult = calculateTranslationConfidence(hyperscript, language);
|
|
121
|
+
|
|
122
|
+
if (!confidenceResult.parseSuccess) {
|
|
123
|
+
return {
|
|
124
|
+
node: null,
|
|
125
|
+
confidence: 0,
|
|
126
|
+
error: confidenceResult.error,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Also do the full parse to get the semantic node
|
|
131
|
+
// (import parse here to avoid circular dependency)
|
|
132
|
+
try {
|
|
133
|
+
const { parse } = require('../parser/semantic-parser');
|
|
134
|
+
const node = parse(hyperscript, language);
|
|
135
|
+
return {
|
|
136
|
+
node,
|
|
137
|
+
confidence: confidenceResult.confidence,
|
|
138
|
+
error: undefined,
|
|
139
|
+
};
|
|
140
|
+
} catch (error) {
|
|
141
|
+
return {
|
|
142
|
+
node: null,
|
|
143
|
+
confidence: confidenceResult.confidence,
|
|
144
|
+
error: error instanceof Error ? error.message : String(error),
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
}
|
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-Command Semantic Validation
|
|
3
|
+
*
|
|
4
|
+
* Validates semantic parse results against command schemas.
|
|
5
|
+
* Ensures that role assignments match expected types and constraints.
|
|
6
|
+
*
|
|
7
|
+
* Design Philosophy:
|
|
8
|
+
* - Command schemas are the source of truth for validation rules
|
|
9
|
+
* - Validation happens AFTER pattern matching, BEFORE AST conversion
|
|
10
|
+
* - Provides detailed error messages for debugging
|
|
11
|
+
* - Supports confidence scoring for ambiguous parses
|
|
12
|
+
*
|
|
13
|
+
* Integration with core validators:
|
|
14
|
+
* - Uses patterns from @lokascript/core's lightweight-validators where applicable
|
|
15
|
+
* - Type validation follows same patterns as runtime validation
|
|
16
|
+
* - Can be extended with custom validators using the same API
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import type { SemanticParseResult, SemanticValue, SemanticRole, ActionType } from '../types';
|
|
20
|
+
import type { CommandSchema } from '../generators/command-schemas';
|
|
21
|
+
import {
|
|
22
|
+
toggleSchema,
|
|
23
|
+
addSchema,
|
|
24
|
+
removeSchema,
|
|
25
|
+
putSchema,
|
|
26
|
+
setSchema,
|
|
27
|
+
showSchema,
|
|
28
|
+
hideSchema,
|
|
29
|
+
onSchema,
|
|
30
|
+
triggerSchema,
|
|
31
|
+
waitSchema,
|
|
32
|
+
fetchSchema,
|
|
33
|
+
incrementSchema,
|
|
34
|
+
decrementSchema,
|
|
35
|
+
appendSchema,
|
|
36
|
+
} from '../generators/command-schemas';
|
|
37
|
+
|
|
38
|
+
// =============================================================================
|
|
39
|
+
// Types
|
|
40
|
+
// =============================================================================
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Validation error with detailed context.
|
|
44
|
+
*/
|
|
45
|
+
export interface ValidationError {
|
|
46
|
+
/** Error code for programmatic handling */
|
|
47
|
+
code: 'MISSING_REQUIRED_ROLE' | 'INVALID_TYPE' | 'UNKNOWN_ROLE' | 'CONSTRAINT_VIOLATION';
|
|
48
|
+
/** Human-readable message */
|
|
49
|
+
message: string;
|
|
50
|
+
/** The role that failed validation */
|
|
51
|
+
role?: SemanticRole;
|
|
52
|
+
/** Expected types */
|
|
53
|
+
expected?: string[];
|
|
54
|
+
/** Actual value */
|
|
55
|
+
actual?: SemanticValue;
|
|
56
|
+
/** Severity: 'error' blocks execution, 'warning' is logged */
|
|
57
|
+
severity: 'error' | 'warning';
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Result of command validation.
|
|
62
|
+
*/
|
|
63
|
+
export interface ValidationResult {
|
|
64
|
+
/** Whether validation passed */
|
|
65
|
+
valid: boolean;
|
|
66
|
+
/** Validation errors (if any) */
|
|
67
|
+
errors: ValidationError[];
|
|
68
|
+
/** Warnings (non-blocking issues) */
|
|
69
|
+
warnings: ValidationError[];
|
|
70
|
+
/** Confidence adjustment (-1 to +1) based on validation */
|
|
71
|
+
confidenceAdjustment: number;
|
|
72
|
+
/** Suggested fixes for errors */
|
|
73
|
+
suggestions: string[];
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// =============================================================================
|
|
77
|
+
// Schema Registry
|
|
78
|
+
// =============================================================================
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Maps action types to their schemas.
|
|
82
|
+
*/
|
|
83
|
+
const schemaRegistry = new Map<ActionType, CommandSchema>([
|
|
84
|
+
['toggle', toggleSchema],
|
|
85
|
+
['add', addSchema],
|
|
86
|
+
['remove', removeSchema],
|
|
87
|
+
['put', putSchema],
|
|
88
|
+
['set', setSchema],
|
|
89
|
+
['show', showSchema],
|
|
90
|
+
['hide', hideSchema],
|
|
91
|
+
['on', onSchema],
|
|
92
|
+
['trigger', triggerSchema],
|
|
93
|
+
['wait', waitSchema],
|
|
94
|
+
['fetch', fetchSchema],
|
|
95
|
+
['increment', incrementSchema],
|
|
96
|
+
['decrement', decrementSchema],
|
|
97
|
+
['append', appendSchema],
|
|
98
|
+
]);
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Get schema for an action type.
|
|
102
|
+
*/
|
|
103
|
+
export function getSchema(action: ActionType): CommandSchema | undefined {
|
|
104
|
+
return schemaRegistry.get(action);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Register a custom schema.
|
|
109
|
+
*/
|
|
110
|
+
export function registerSchema(action: ActionType, schema: CommandSchema): void {
|
|
111
|
+
schemaRegistry.set(action, schema);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// =============================================================================
|
|
115
|
+
// Type Validation
|
|
116
|
+
// =============================================================================
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Helper to get the string value from a semantic value (if it has one).
|
|
120
|
+
*/
|
|
121
|
+
function getStringValue(value: SemanticValue): string | undefined {
|
|
122
|
+
if (value.type === 'literal' && typeof value.value === 'string') {
|
|
123
|
+
return value.value;
|
|
124
|
+
}
|
|
125
|
+
if (value.type === 'selector') {
|
|
126
|
+
return value.value;
|
|
127
|
+
}
|
|
128
|
+
if (value.type === 'reference') {
|
|
129
|
+
return value.value;
|
|
130
|
+
}
|
|
131
|
+
// PropertyPathValue and ExpressionValue don't have a direct string value
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Check if a semantic value matches expected types.
|
|
137
|
+
*/
|
|
138
|
+
function valueMatchesType(
|
|
139
|
+
value: SemanticValue,
|
|
140
|
+
expectedTypes: Array<'selector' | 'literal' | 'reference' | 'expression'>
|
|
141
|
+
): boolean {
|
|
142
|
+
// Handle null/undefined
|
|
143
|
+
if (value === null || value === undefined) {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Type-specific checks
|
|
148
|
+
for (const expectedType of expectedTypes) {
|
|
149
|
+
switch (expectedType) {
|
|
150
|
+
case 'selector':
|
|
151
|
+
// Selectors are strings starting with ., #, or [
|
|
152
|
+
if (value.type === 'selector') {
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
// Check if literal/reference looks like a selector
|
|
156
|
+
const selectorStr = getStringValue(value);
|
|
157
|
+
if (
|
|
158
|
+
selectorStr &&
|
|
159
|
+
(selectorStr.startsWith('.') ||
|
|
160
|
+
selectorStr.startsWith('#') ||
|
|
161
|
+
selectorStr.startsWith('['))
|
|
162
|
+
) {
|
|
163
|
+
return true;
|
|
164
|
+
}
|
|
165
|
+
break;
|
|
166
|
+
|
|
167
|
+
case 'literal':
|
|
168
|
+
// Literals include strings, numbers, booleans
|
|
169
|
+
if (value.type === 'literal') {
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
// PropertyPathValue is also a valid value (e.g., "my value")
|
|
173
|
+
if (value.type === 'property-path') {
|
|
174
|
+
return true;
|
|
175
|
+
}
|
|
176
|
+
break;
|
|
177
|
+
|
|
178
|
+
case 'reference':
|
|
179
|
+
// References are special keywords (me, you, it, etc.)
|
|
180
|
+
if (value.type === 'reference') {
|
|
181
|
+
return true;
|
|
182
|
+
}
|
|
183
|
+
// PropertyPathValue represents a reference with property access
|
|
184
|
+
if (value.type === 'property-path') {
|
|
185
|
+
return true;
|
|
186
|
+
}
|
|
187
|
+
// Check if it looks like a reference
|
|
188
|
+
const refStr = getStringValue(value);
|
|
189
|
+
if (
|
|
190
|
+
refStr &&
|
|
191
|
+
['me', 'you', 'it', 'my', 'its', 'result', 'event', 'target'].includes(
|
|
192
|
+
refStr.toLowerCase()
|
|
193
|
+
)
|
|
194
|
+
) {
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
break;
|
|
198
|
+
|
|
199
|
+
case 'expression':
|
|
200
|
+
// Expressions are complex computed values
|
|
201
|
+
if (value.type === 'expression') {
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
// PropertyPathValue is essentially an expression
|
|
205
|
+
if (value.type === 'property-path') {
|
|
206
|
+
return true;
|
|
207
|
+
}
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// =============================================================================
|
|
216
|
+
// Validation Logic
|
|
217
|
+
// =============================================================================
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Validate a semantic parse result against its command schema.
|
|
221
|
+
*
|
|
222
|
+
* @param result - The semantic parse result to validate
|
|
223
|
+
* @returns Validation result with errors, warnings, and confidence adjustment
|
|
224
|
+
*/
|
|
225
|
+
export function validateSemanticResult(result: SemanticParseResult): ValidationResult {
|
|
226
|
+
const errors: ValidationError[] = [];
|
|
227
|
+
const warnings: ValidationError[] = [];
|
|
228
|
+
const suggestions: string[] = [];
|
|
229
|
+
let confidenceAdjustment = 0;
|
|
230
|
+
|
|
231
|
+
// Get schema for this action
|
|
232
|
+
const schema = getSchema(result.action);
|
|
233
|
+
if (!schema) {
|
|
234
|
+
// No schema means we can't validate - pass through with warning
|
|
235
|
+
warnings.push({
|
|
236
|
+
code: 'UNKNOWN_ROLE',
|
|
237
|
+
message: `No schema found for action '${result.action}'. Skipping validation.`,
|
|
238
|
+
severity: 'warning',
|
|
239
|
+
});
|
|
240
|
+
return {
|
|
241
|
+
valid: true,
|
|
242
|
+
errors,
|
|
243
|
+
warnings,
|
|
244
|
+
confidenceAdjustment: -0.1, // Slight penalty for unknown command
|
|
245
|
+
suggestions,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// Create a map of assigned roles
|
|
250
|
+
const assignedRoles = new Map<SemanticRole, SemanticValue>();
|
|
251
|
+
for (const arg of result.arguments) {
|
|
252
|
+
if (arg.role) {
|
|
253
|
+
assignedRoles.set(arg.role, arg);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// Validate each role spec
|
|
258
|
+
for (const roleSpec of schema.roles) {
|
|
259
|
+
const assignedValue = assignedRoles.get(roleSpec.role);
|
|
260
|
+
|
|
261
|
+
// Check required roles
|
|
262
|
+
if (roleSpec.required && !assignedValue) {
|
|
263
|
+
// Check if there's a default
|
|
264
|
+
if (roleSpec.default) {
|
|
265
|
+
// Has default - just a warning
|
|
266
|
+
warnings.push({
|
|
267
|
+
code: 'MISSING_REQUIRED_ROLE',
|
|
268
|
+
message: `Role '${roleSpec.role}' not provided, using default.`,
|
|
269
|
+
role: roleSpec.role,
|
|
270
|
+
severity: 'warning',
|
|
271
|
+
});
|
|
272
|
+
} else {
|
|
273
|
+
// No default - error
|
|
274
|
+
errors.push({
|
|
275
|
+
code: 'MISSING_REQUIRED_ROLE',
|
|
276
|
+
message: `Required role '${roleSpec.role}' (${roleSpec.description}) is missing.`,
|
|
277
|
+
role: roleSpec.role,
|
|
278
|
+
expected: roleSpec.expectedTypes,
|
|
279
|
+
severity: 'error',
|
|
280
|
+
});
|
|
281
|
+
suggestions.push(`Add ${roleSpec.description.toLowerCase()} to the command.`);
|
|
282
|
+
confidenceAdjustment -= 0.2;
|
|
283
|
+
}
|
|
284
|
+
continue;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// Validate type if value is provided
|
|
288
|
+
if (assignedValue && !valueMatchesType(assignedValue, roleSpec.expectedTypes)) {
|
|
289
|
+
warnings.push({
|
|
290
|
+
code: 'INVALID_TYPE',
|
|
291
|
+
message: `Role '${roleSpec.role}' expected ${roleSpec.expectedTypes.join(' or ')}, got ${assignedValue.type}.`,
|
|
292
|
+
role: roleSpec.role,
|
|
293
|
+
expected: roleSpec.expectedTypes,
|
|
294
|
+
actual: assignedValue,
|
|
295
|
+
severity: 'warning',
|
|
296
|
+
});
|
|
297
|
+
confidenceAdjustment -= 0.1;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
// Check for unknown roles
|
|
302
|
+
for (const arg of result.arguments) {
|
|
303
|
+
if (arg.role) {
|
|
304
|
+
const isKnownRole = schema.roles.some(spec => spec.role === arg.role);
|
|
305
|
+
if (!isKnownRole) {
|
|
306
|
+
warnings.push({
|
|
307
|
+
code: 'UNKNOWN_ROLE',
|
|
308
|
+
message: `Role '${arg.role}' is not recognized for command '${result.action}'.`,
|
|
309
|
+
role: arg.role,
|
|
310
|
+
severity: 'warning',
|
|
311
|
+
});
|
|
312
|
+
confidenceAdjustment -= 0.05;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
// Boost confidence if all required roles are properly typed
|
|
318
|
+
const allRequiredPresent = schema.roles
|
|
319
|
+
.filter(spec => spec.required && !spec.default)
|
|
320
|
+
.every(spec => assignedRoles.has(spec.role));
|
|
321
|
+
if (allRequiredPresent && errors.length === 0) {
|
|
322
|
+
confidenceAdjustment += 0.1;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
return {
|
|
326
|
+
valid: errors.length === 0,
|
|
327
|
+
errors,
|
|
328
|
+
warnings,
|
|
329
|
+
confidenceAdjustment: Math.max(-1, Math.min(1, confidenceAdjustment)),
|
|
330
|
+
suggestions,
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* Apply validation to a parse result and adjust confidence.
|
|
336
|
+
*
|
|
337
|
+
* @param result - The semantic parse result
|
|
338
|
+
* @returns Updated result with adjusted confidence
|
|
339
|
+
*/
|
|
340
|
+
export function validateAndAdjustConfidence(
|
|
341
|
+
result: SemanticParseResult
|
|
342
|
+
): SemanticParseResult & { validation: ValidationResult } {
|
|
343
|
+
const validation = validateSemanticResult(result);
|
|
344
|
+
|
|
345
|
+
return {
|
|
346
|
+
...result,
|
|
347
|
+
confidence: Math.max(0, Math.min(1, result.confidence + validation.confidenceAdjustment)),
|
|
348
|
+
validation,
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
// =============================================================================
|
|
353
|
+
// Relationship to Core Validators
|
|
354
|
+
// =============================================================================
|
|
355
|
+
//
|
|
356
|
+
// This semantic validator is distinct from but complementary to core validators:
|
|
357
|
+
//
|
|
358
|
+
// 1. @lokascript/core/validation/lightweight-validators.ts
|
|
359
|
+
// - Runtime type validation (v.string(), v.object(), etc.)
|
|
360
|
+
// - Zod-replacement for validating runtime input shapes
|
|
361
|
+
// - Used: command inputs, API payloads, configuration
|
|
362
|
+
//
|
|
363
|
+
// 2. @lokascript/core/validation/command-pattern-validator.ts
|
|
364
|
+
// - Class structure validation
|
|
365
|
+
// - Checks command classes follow TypeScript patterns
|
|
366
|
+
// - Used: CI/CD, development tooling
|
|
367
|
+
//
|
|
368
|
+
// 3. @lokascript/semantic/validators/command-validator.ts (this file)
|
|
369
|
+
// - Semantic role validation
|
|
370
|
+
// - Checks parse results against command schemas
|
|
371
|
+
// - Used: semantic parser confidence scoring, debugging
|
|
372
|
+
//
|
|
373
|
+
// Future integration opportunity: Use lightweight-validators for type checking
|
|
374
|
+
// in valueMatchesType() for consistency with core validation patterns.
|
|
375
|
+
//
|
|
376
|
+
// =============================================================================
|
|
377
|
+
// Exports
|
|
378
|
+
// =============================================================================
|
|
379
|
+
|
|
380
|
+
export { schemaRegistry };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic Validators
|
|
3
|
+
*
|
|
4
|
+
* Validates semantic parse results for correctness and type safety.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export {
|
|
8
|
+
validateSemanticResult,
|
|
9
|
+
validateAndAdjustConfidence,
|
|
10
|
+
getSchema,
|
|
11
|
+
registerSchema,
|
|
12
|
+
schemaRegistry,
|
|
13
|
+
type ValidationError,
|
|
14
|
+
type ValidationResult,
|
|
15
|
+
} from './command-validator';
|