@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.
Files changed (435) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +686 -0
  3. package/dist/browser-ar.ar.global.js +2 -0
  4. package/dist/browser-core.core.global.js +2 -0
  5. package/dist/browser-de.de.global.js +2 -0
  6. package/dist/browser-east-asian.east-asian.global.js +2 -0
  7. package/dist/browser-en-tr.en-tr.global.js +2 -0
  8. package/dist/browser-en.en.global.js +2 -0
  9. package/dist/browser-es-en.es-en.global.js +2 -0
  10. package/dist/browser-es.es.global.js +2 -0
  11. package/dist/browser-fr.fr.global.js +2 -0
  12. package/dist/browser-id.id.global.js +2 -0
  13. package/dist/browser-ja.ja.global.js +2 -0
  14. package/dist/browser-ko.ko.global.js +2 -0
  15. package/dist/browser-lazy.lazy.global.js +2 -0
  16. package/dist/browser-priority.priority.global.js +2 -0
  17. package/dist/browser-pt.pt.global.js +2 -0
  18. package/dist/browser-qu.qu.global.js +2 -0
  19. package/dist/browser-sw.sw.global.js +2 -0
  20. package/dist/browser-tr.tr.global.js +2 -0
  21. package/dist/browser-western.western.global.js +2 -0
  22. package/dist/browser-zh.zh.global.js +2 -0
  23. package/dist/browser.global.js +3 -0
  24. package/dist/browser.global.js.map +1 -0
  25. package/dist/index.cjs +35051 -0
  26. package/dist/index.cjs.map +1 -0
  27. package/dist/index.d.cts +3426 -0
  28. package/dist/index.d.ts +3426 -0
  29. package/dist/index.js +34890 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/languages/ar.d.ts +78 -0
  32. package/dist/languages/ar.js +1622 -0
  33. package/dist/languages/ar.js.map +1 -0
  34. package/dist/languages/de.d.ts +38 -0
  35. package/dist/languages/de.js +1168 -0
  36. package/dist/languages/de.js.map +1 -0
  37. package/dist/languages/en.d.ts +44 -0
  38. package/dist/languages/en.js +3491 -0
  39. package/dist/languages/en.js.map +1 -0
  40. package/dist/languages/es.d.ts +52 -0
  41. package/dist/languages/es.js +1493 -0
  42. package/dist/languages/es.js.map +1 -0
  43. package/dist/languages/fr.d.ts +37 -0
  44. package/dist/languages/fr.js +1159 -0
  45. package/dist/languages/fr.js.map +1 -0
  46. package/dist/languages/id.d.ts +35 -0
  47. package/dist/languages/id.js +1152 -0
  48. package/dist/languages/id.js.map +1 -0
  49. package/dist/languages/ja.d.ts +53 -0
  50. package/dist/languages/ja.js +1430 -0
  51. package/dist/languages/ja.js.map +1 -0
  52. package/dist/languages/ko.d.ts +51 -0
  53. package/dist/languages/ko.js +1729 -0
  54. package/dist/languages/ko.js.map +1 -0
  55. package/dist/languages/pt.d.ts +37 -0
  56. package/dist/languages/pt.js +1127 -0
  57. package/dist/languages/pt.js.map +1 -0
  58. package/dist/languages/qu.d.ts +36 -0
  59. package/dist/languages/qu.js +1143 -0
  60. package/dist/languages/qu.js.map +1 -0
  61. package/dist/languages/sw.d.ts +35 -0
  62. package/dist/languages/sw.js +1147 -0
  63. package/dist/languages/sw.js.map +1 -0
  64. package/dist/languages/tr.d.ts +45 -0
  65. package/dist/languages/tr.js +1529 -0
  66. package/dist/languages/tr.js.map +1 -0
  67. package/dist/languages/zh.d.ts +58 -0
  68. package/dist/languages/zh.js +1257 -0
  69. package/dist/languages/zh.js.map +1 -0
  70. package/dist/types-C4dcj53L.d.ts +600 -0
  71. package/package.json +202 -0
  72. package/src/__test-utils__/index.ts +7 -0
  73. package/src/__test-utils__/test-helpers.ts +8 -0
  74. package/src/__types__/test-helpers.ts +122 -0
  75. package/src/analysis/index.ts +479 -0
  76. package/src/ast-builder/command-mappers.ts +1133 -0
  77. package/src/ast-builder/expression-parser/index.ts +41 -0
  78. package/src/ast-builder/expression-parser/parser.ts +563 -0
  79. package/src/ast-builder/expression-parser/tokenizer.ts +394 -0
  80. package/src/ast-builder/expression-parser/types.ts +208 -0
  81. package/src/ast-builder/index.ts +536 -0
  82. package/src/ast-builder/value-converters.ts +172 -0
  83. package/src/bridge.ts +275 -0
  84. package/src/browser-ar.ts +162 -0
  85. package/src/browser-core.ts +231 -0
  86. package/src/browser-de.ts +162 -0
  87. package/src/browser-east-asian.ts +173 -0
  88. package/src/browser-en-tr.ts +165 -0
  89. package/src/browser-en.ts +157 -0
  90. package/src/browser-es-en.ts +200 -0
  91. package/src/browser-es.ts +170 -0
  92. package/src/browser-fr.ts +162 -0
  93. package/src/browser-id.ts +162 -0
  94. package/src/browser-ja.ts +162 -0
  95. package/src/browser-ko.ts +162 -0
  96. package/src/browser-lazy.ts +189 -0
  97. package/src/browser-priority.ts +214 -0
  98. package/src/browser-pt.ts +162 -0
  99. package/src/browser-qu.ts +162 -0
  100. package/src/browser-sw.ts +162 -0
  101. package/src/browser-tr.ts +162 -0
  102. package/src/browser-western.ts +181 -0
  103. package/src/browser-zh.ts +162 -0
  104. package/src/browser.ts +268 -0
  105. package/src/cache/index.ts +14 -0
  106. package/src/cache/semantic-cache.ts +344 -0
  107. package/src/core-bridge.ts +372 -0
  108. package/src/explicit/converter.ts +258 -0
  109. package/src/explicit/index.ts +18 -0
  110. package/src/explicit/parser.ts +236 -0
  111. package/src/explicit/renderer.ts +424 -0
  112. package/src/generators/command-schemas.ts +1636 -0
  113. package/src/generators/event-handler-generator.ts +109 -0
  114. package/src/generators/index.ts +117 -0
  115. package/src/generators/language-profiles.ts +139 -0
  116. package/src/generators/pattern-generator.ts +537 -0
  117. package/src/generators/profiles/arabic.ts +131 -0
  118. package/src/generators/profiles/bengali.ts +132 -0
  119. package/src/generators/profiles/chinese.ts +124 -0
  120. package/src/generators/profiles/english.ts +113 -0
  121. package/src/generators/profiles/french.ts +125 -0
  122. package/src/generators/profiles/german.ts +126 -0
  123. package/src/generators/profiles/hindi.ts +146 -0
  124. package/src/generators/profiles/index.ts +46 -0
  125. package/src/generators/profiles/indonesian.ts +125 -0
  126. package/src/generators/profiles/italian.ts +139 -0
  127. package/src/generators/profiles/japanese.ts +149 -0
  128. package/src/generators/profiles/korean.ts +127 -0
  129. package/src/generators/profiles/marker-templates.ts +288 -0
  130. package/src/generators/profiles/ms.ts +130 -0
  131. package/src/generators/profiles/polish.ts +249 -0
  132. package/src/generators/profiles/portuguese.ts +115 -0
  133. package/src/generators/profiles/quechua.ts +113 -0
  134. package/src/generators/profiles/russian.ts +260 -0
  135. package/src/generators/profiles/spanish.ts +130 -0
  136. package/src/generators/profiles/swahili.ts +129 -0
  137. package/src/generators/profiles/thai.ts +132 -0
  138. package/src/generators/profiles/tl.ts +128 -0
  139. package/src/generators/profiles/turkish.ts +124 -0
  140. package/src/generators/profiles/types.ts +165 -0
  141. package/src/generators/profiles/ukrainian.ts +270 -0
  142. package/src/generators/profiles/vietnamese.ts +133 -0
  143. package/src/generators/schema-error-codes.ts +160 -0
  144. package/src/generators/schema-validator.ts +391 -0
  145. package/src/index.ts +429 -0
  146. package/src/language-building-schema.ts +3170 -0
  147. package/src/language-loader.ts +394 -0
  148. package/src/languages/_all.ts +65 -0
  149. package/src/languages/ar.ts +15 -0
  150. package/src/languages/bn.ts +16 -0
  151. package/src/languages/de.ts +15 -0
  152. package/src/languages/en.ts +29 -0
  153. package/src/languages/es.ts +15 -0
  154. package/src/languages/fr.ts +15 -0
  155. package/src/languages/hi.ts +26 -0
  156. package/src/languages/id.ts +15 -0
  157. package/src/languages/index.ts +18 -0
  158. package/src/languages/it.ts +15 -0
  159. package/src/languages/ja.ts +15 -0
  160. package/src/languages/ko.ts +15 -0
  161. package/src/languages/ms.ts +16 -0
  162. package/src/languages/pl.ts +18 -0
  163. package/src/languages/pt.ts +15 -0
  164. package/src/languages/qu.ts +15 -0
  165. package/src/languages/ru.ts +26 -0
  166. package/src/languages/sw.ts +15 -0
  167. package/src/languages/th.ts +16 -0
  168. package/src/languages/tl.ts +16 -0
  169. package/src/languages/tr.ts +15 -0
  170. package/src/languages/uk.ts +26 -0
  171. package/src/languages/vi.ts +16 -0
  172. package/src/languages/zh.ts +15 -0
  173. package/src/parser/index.ts +15 -0
  174. package/src/parser/pattern-matcher.ts +1181 -0
  175. package/src/parser/semantic-parser.ts +573 -0
  176. package/src/parser/utils/index.ts +35 -0
  177. package/src/parser/utils/marker-resolution.ts +111 -0
  178. package/src/parser/utils/possessive-keywords.ts +43 -0
  179. package/src/parser/utils/role-positioning.ts +70 -0
  180. package/src/parser/utils/type-validation.ts +134 -0
  181. package/src/patterns/add/ar.ts +71 -0
  182. package/src/patterns/add/bn.ts +70 -0
  183. package/src/patterns/add/hi.ts +69 -0
  184. package/src/patterns/add/index.ts +87 -0
  185. package/src/patterns/add/it.ts +61 -0
  186. package/src/patterns/add/ja.ts +93 -0
  187. package/src/patterns/add/ko.ts +74 -0
  188. package/src/patterns/add/ms.ts +30 -0
  189. package/src/patterns/add/pl.ts +62 -0
  190. package/src/patterns/add/ru.ts +62 -0
  191. package/src/patterns/add/th.ts +49 -0
  192. package/src/patterns/add/tl.ts +30 -0
  193. package/src/patterns/add/tr.ts +71 -0
  194. package/src/patterns/add/uk.ts +62 -0
  195. package/src/patterns/add/vi.ts +61 -0
  196. package/src/patterns/add/zh.ts +71 -0
  197. package/src/patterns/builders.ts +207 -0
  198. package/src/patterns/decrement/bn.ts +70 -0
  199. package/src/patterns/decrement/de.ts +42 -0
  200. package/src/patterns/decrement/hi.ts +68 -0
  201. package/src/patterns/decrement/index.ts +79 -0
  202. package/src/patterns/decrement/it.ts +69 -0
  203. package/src/patterns/decrement/ms.ts +30 -0
  204. package/src/patterns/decrement/pl.ts +58 -0
  205. package/src/patterns/decrement/ru.ts +58 -0
  206. package/src/patterns/decrement/th.ts +49 -0
  207. package/src/patterns/decrement/tl.ts +30 -0
  208. package/src/patterns/decrement/tr.ts +48 -0
  209. package/src/patterns/decrement/uk.ts +58 -0
  210. package/src/patterns/decrement/vi.ts +61 -0
  211. package/src/patterns/decrement/zh.ts +32 -0
  212. package/src/patterns/en.ts +302 -0
  213. package/src/patterns/event-handler/ar.ts +151 -0
  214. package/src/patterns/event-handler/bn.ts +72 -0
  215. package/src/patterns/event-handler/de.ts +117 -0
  216. package/src/patterns/event-handler/en.ts +117 -0
  217. package/src/patterns/event-handler/es.ts +136 -0
  218. package/src/patterns/event-handler/fr.ts +117 -0
  219. package/src/patterns/event-handler/hi.ts +64 -0
  220. package/src/patterns/event-handler/id.ts +117 -0
  221. package/src/patterns/event-handler/index.ts +119 -0
  222. package/src/patterns/event-handler/it.ts +54 -0
  223. package/src/patterns/event-handler/ja.ts +118 -0
  224. package/src/patterns/event-handler/ko.ts +133 -0
  225. package/src/patterns/event-handler/ms.ts +30 -0
  226. package/src/patterns/event-handler/pl.ts +62 -0
  227. package/src/patterns/event-handler/pt.ts +117 -0
  228. package/src/patterns/event-handler/qu.ts +66 -0
  229. package/src/patterns/event-handler/ru.ts +62 -0
  230. package/src/patterns/event-handler/shared.ts +270 -0
  231. package/src/patterns/event-handler/sw.ts +117 -0
  232. package/src/patterns/event-handler/th.ts +53 -0
  233. package/src/patterns/event-handler/tl.ts +30 -0
  234. package/src/patterns/event-handler/tr.ts +170 -0
  235. package/src/patterns/event-handler/uk.ts +62 -0
  236. package/src/patterns/event-handler/vi.ts +61 -0
  237. package/src/patterns/event-handler/zh.ts +150 -0
  238. package/src/patterns/get/ar.ts +49 -0
  239. package/src/patterns/get/bn.ts +47 -0
  240. package/src/patterns/get/de.ts +32 -0
  241. package/src/patterns/get/hi.ts +52 -0
  242. package/src/patterns/get/index.ts +83 -0
  243. package/src/patterns/get/it.ts +56 -0
  244. package/src/patterns/get/ja.ts +53 -0
  245. package/src/patterns/get/ko.ts +53 -0
  246. package/src/patterns/get/ms.ts +30 -0
  247. package/src/patterns/get/pl.ts +57 -0
  248. package/src/patterns/get/ru.ts +57 -0
  249. package/src/patterns/get/th.ts +29 -0
  250. package/src/patterns/get/tl.ts +30 -0
  251. package/src/patterns/get/uk.ts +57 -0
  252. package/src/patterns/get/vi.ts +48 -0
  253. package/src/patterns/grammar-transformed/index.ts +39 -0
  254. package/src/patterns/grammar-transformed/ja.ts +1713 -0
  255. package/src/patterns/grammar-transformed/ko.ts +1311 -0
  256. package/src/patterns/grammar-transformed/tr.ts +1067 -0
  257. package/src/patterns/hide/ar.ts +67 -0
  258. package/src/patterns/hide/bn.ts +47 -0
  259. package/src/patterns/hide/de.ts +36 -0
  260. package/src/patterns/hide/hi.ts +61 -0
  261. package/src/patterns/hide/index.ts +91 -0
  262. package/src/patterns/hide/it.ts +56 -0
  263. package/src/patterns/hide/ja.ts +69 -0
  264. package/src/patterns/hide/ko.ts +69 -0
  265. package/src/patterns/hide/ms.ts +30 -0
  266. package/src/patterns/hide/pl.ts +57 -0
  267. package/src/patterns/hide/ru.ts +57 -0
  268. package/src/patterns/hide/th.ts +29 -0
  269. package/src/patterns/hide/tl.ts +30 -0
  270. package/src/patterns/hide/tr.ts +65 -0
  271. package/src/patterns/hide/uk.ts +57 -0
  272. package/src/patterns/hide/vi.ts +56 -0
  273. package/src/patterns/hide/zh.ts +68 -0
  274. package/src/patterns/increment/bn.ts +70 -0
  275. package/src/patterns/increment/de.ts +36 -0
  276. package/src/patterns/increment/hi.ts +68 -0
  277. package/src/patterns/increment/index.ts +79 -0
  278. package/src/patterns/increment/it.ts +69 -0
  279. package/src/patterns/increment/ms.ts +30 -0
  280. package/src/patterns/increment/pl.ts +58 -0
  281. package/src/patterns/increment/ru.ts +58 -0
  282. package/src/patterns/increment/th.ts +49 -0
  283. package/src/patterns/increment/tl.ts +30 -0
  284. package/src/patterns/increment/tr.ts +52 -0
  285. package/src/patterns/increment/uk.ts +58 -0
  286. package/src/patterns/increment/vi.ts +61 -0
  287. package/src/patterns/increment/zh.ts +32 -0
  288. package/src/patterns/index.ts +84 -0
  289. package/src/patterns/languages/en/control-flow.ts +93 -0
  290. package/src/patterns/languages/en/fetch.ts +62 -0
  291. package/src/patterns/languages/en/index.ts +42 -0
  292. package/src/patterns/languages/en/repeat.ts +67 -0
  293. package/src/patterns/languages/en/set.ts +48 -0
  294. package/src/patterns/languages/en/swap.ts +38 -0
  295. package/src/patterns/languages/en/temporal.ts +57 -0
  296. package/src/patterns/put/ar.ts +74 -0
  297. package/src/patterns/put/bn.ts +53 -0
  298. package/src/patterns/put/en.ts +74 -0
  299. package/src/patterns/put/es.ts +74 -0
  300. package/src/patterns/put/hi.ts +69 -0
  301. package/src/patterns/put/id.ts +96 -0
  302. package/src/patterns/put/index.ts +99 -0
  303. package/src/patterns/put/it.ts +56 -0
  304. package/src/patterns/put/ja.ts +75 -0
  305. package/src/patterns/put/ko.ts +67 -0
  306. package/src/patterns/put/ms.ts +30 -0
  307. package/src/patterns/put/pl.ts +81 -0
  308. package/src/patterns/put/ru.ts +85 -0
  309. package/src/patterns/put/th.ts +32 -0
  310. package/src/patterns/put/tl.ts +30 -0
  311. package/src/patterns/put/tr.ts +67 -0
  312. package/src/patterns/put/uk.ts +85 -0
  313. package/src/patterns/put/vi.ts +72 -0
  314. package/src/patterns/put/zh.ts +62 -0
  315. package/src/patterns/registry.ts +163 -0
  316. package/src/patterns/remove/ar.ts +71 -0
  317. package/src/patterns/remove/bn.ts +68 -0
  318. package/src/patterns/remove/hi.ts +69 -0
  319. package/src/patterns/remove/index.ts +87 -0
  320. package/src/patterns/remove/it.ts +69 -0
  321. package/src/patterns/remove/ja.ts +74 -0
  322. package/src/patterns/remove/ko.ts +78 -0
  323. package/src/patterns/remove/ms.ts +30 -0
  324. package/src/patterns/remove/pl.ts +62 -0
  325. package/src/patterns/remove/ru.ts +62 -0
  326. package/src/patterns/remove/th.ts +49 -0
  327. package/src/patterns/remove/tl.ts +30 -0
  328. package/src/patterns/remove/tr.ts +78 -0
  329. package/src/patterns/remove/uk.ts +62 -0
  330. package/src/patterns/remove/vi.ts +61 -0
  331. package/src/patterns/remove/zh.ts +72 -0
  332. package/src/patterns/set/ar.ts +84 -0
  333. package/src/patterns/set/bn.ts +53 -0
  334. package/src/patterns/set/de.ts +84 -0
  335. package/src/patterns/set/es.ts +92 -0
  336. package/src/patterns/set/fr.ts +88 -0
  337. package/src/patterns/set/hi.ts +56 -0
  338. package/src/patterns/set/id.ts +84 -0
  339. package/src/patterns/set/index.ts +107 -0
  340. package/src/patterns/set/it.ts +56 -0
  341. package/src/patterns/set/ja.ts +86 -0
  342. package/src/patterns/set/ko.ts +85 -0
  343. package/src/patterns/set/ms.ts +30 -0
  344. package/src/patterns/set/pl.ts +57 -0
  345. package/src/patterns/set/pt.ts +84 -0
  346. package/src/patterns/set/ru.ts +57 -0
  347. package/src/patterns/set/th.ts +31 -0
  348. package/src/patterns/set/tl.ts +30 -0
  349. package/src/patterns/set/tr.ts +107 -0
  350. package/src/patterns/set/uk.ts +57 -0
  351. package/src/patterns/set/vi.ts +53 -0
  352. package/src/patterns/set/zh.ts +84 -0
  353. package/src/patterns/show/ar.ts +67 -0
  354. package/src/patterns/show/bn.ts +47 -0
  355. package/src/patterns/show/de.ts +32 -0
  356. package/src/patterns/show/fr.ts +32 -0
  357. package/src/patterns/show/hi.ts +61 -0
  358. package/src/patterns/show/index.ts +95 -0
  359. package/src/patterns/show/it.ts +56 -0
  360. package/src/patterns/show/ja.ts +69 -0
  361. package/src/patterns/show/ko.ts +73 -0
  362. package/src/patterns/show/ms.ts +30 -0
  363. package/src/patterns/show/pl.ts +57 -0
  364. package/src/patterns/show/ru.ts +57 -0
  365. package/src/patterns/show/th.ts +29 -0
  366. package/src/patterns/show/tl.ts +30 -0
  367. package/src/patterns/show/tr.ts +65 -0
  368. package/src/patterns/show/uk.ts +57 -0
  369. package/src/patterns/show/vi.ts +56 -0
  370. package/src/patterns/show/zh.ts +68 -0
  371. package/src/patterns/take/ar.ts +51 -0
  372. package/src/patterns/take/index.ts +31 -0
  373. package/src/patterns/toggle/ar.ts +61 -0
  374. package/src/patterns/toggle/bn.ts +70 -0
  375. package/src/patterns/toggle/en.ts +61 -0
  376. package/src/patterns/toggle/es.ts +61 -0
  377. package/src/patterns/toggle/hi.ts +80 -0
  378. package/src/patterns/toggle/index.ts +95 -0
  379. package/src/patterns/toggle/it.ts +69 -0
  380. package/src/patterns/toggle/ja.ts +156 -0
  381. package/src/patterns/toggle/ko.ts +113 -0
  382. package/src/patterns/toggle/ms.ts +30 -0
  383. package/src/patterns/toggle/pl.ts +62 -0
  384. package/src/patterns/toggle/ru.ts +62 -0
  385. package/src/patterns/toggle/th.ts +50 -0
  386. package/src/patterns/toggle/tl.ts +30 -0
  387. package/src/patterns/toggle/tr.ts +88 -0
  388. package/src/patterns/toggle/uk.ts +62 -0
  389. package/src/patterns/toggle/vi.ts +61 -0
  390. package/src/patterns/toggle/zh.ts +99 -0
  391. package/src/public-api.ts +286 -0
  392. package/src/registry.ts +441 -0
  393. package/src/tokenizers/arabic.ts +723 -0
  394. package/src/tokenizers/base.ts +1300 -0
  395. package/src/tokenizers/bengali.ts +289 -0
  396. package/src/tokenizers/chinese.ts +481 -0
  397. package/src/tokenizers/english.ts +416 -0
  398. package/src/tokenizers/french.ts +326 -0
  399. package/src/tokenizers/german.ts +324 -0
  400. package/src/tokenizers/hindi.ts +319 -0
  401. package/src/tokenizers/index.ts +127 -0
  402. package/src/tokenizers/indonesian.ts +306 -0
  403. package/src/tokenizers/italian.ts +458 -0
  404. package/src/tokenizers/japanese.ts +447 -0
  405. package/src/tokenizers/korean.ts +642 -0
  406. package/src/tokenizers/morphology/arabic-normalizer.ts +242 -0
  407. package/src/tokenizers/morphology/french-normalizer.ts +268 -0
  408. package/src/tokenizers/morphology/german-normalizer.ts +256 -0
  409. package/src/tokenizers/morphology/index.ts +46 -0
  410. package/src/tokenizers/morphology/italian-normalizer.ts +329 -0
  411. package/src/tokenizers/morphology/japanese-normalizer.ts +288 -0
  412. package/src/tokenizers/morphology/korean-normalizer.ts +428 -0
  413. package/src/tokenizers/morphology/polish-normalizer.ts +264 -0
  414. package/src/tokenizers/morphology/portuguese-normalizer.ts +310 -0
  415. package/src/tokenizers/morphology/spanish-normalizer.ts +327 -0
  416. package/src/tokenizers/morphology/turkish-normalizer.ts +412 -0
  417. package/src/tokenizers/morphology/types.ts +211 -0
  418. package/src/tokenizers/ms.ts +198 -0
  419. package/src/tokenizers/polish.ts +354 -0
  420. package/src/tokenizers/portuguese.ts +304 -0
  421. package/src/tokenizers/quechua.ts +339 -0
  422. package/src/tokenizers/russian.ts +375 -0
  423. package/src/tokenizers/spanish.ts +403 -0
  424. package/src/tokenizers/swahili.ts +303 -0
  425. package/src/tokenizers/thai.ts +236 -0
  426. package/src/tokenizers/tl.ts +198 -0
  427. package/src/tokenizers/turkish.ts +411 -0
  428. package/src/tokenizers/ukrainian.ts +369 -0
  429. package/src/tokenizers/vietnamese.ts +410 -0
  430. package/src/types/grammar-types.ts +617 -0
  431. package/src/types/unified-profile.ts +267 -0
  432. package/src/types.ts +709 -0
  433. package/src/utils/confidence-calculator.ts +147 -0
  434. package/src/validators/command-validator.ts +380 -0
  435. package/src/validators/index.ts +15 -0
package/src/types.ts ADDED
@@ -0,0 +1,709 @@
1
+ /**
2
+ * Semantic-First Multilingual Hyperscript Types
3
+ *
4
+ * This module defines the canonical semantic representation that all languages
5
+ * parse to and render from. The semantic layer is language-neutral - it captures
6
+ * the MEANING of hyperscript commands independent of surface syntax.
7
+ */
8
+
9
+ // Re-export the SemanticRole type from local grammar-types for consistency
10
+ export type {
11
+ SemanticRole,
12
+ WordOrder,
13
+ AdpositionType,
14
+ MorphologyType,
15
+ GrammaticalMarker,
16
+ LanguageProfile,
17
+ } from './types/grammar-types';
18
+
19
+ import type { SemanticRole } from './types/grammar-types';
20
+
21
+ // =============================================================================
22
+ // Action Types
23
+ // =============================================================================
24
+
25
+ /**
26
+ * Canonical action names (English-based internally, but not visible to users)
27
+ * These map to hyperscript commands and are used in the semantic AST.
28
+ */
29
+ export type ActionType =
30
+ // Class/Attribute operations
31
+ | 'toggle'
32
+ | 'add'
33
+ | 'remove'
34
+ // Content operations
35
+ | 'put'
36
+ | 'append'
37
+ | 'prepend'
38
+ | 'take'
39
+ | 'make'
40
+ | 'clone'
41
+ | 'swap'
42
+ | 'morph'
43
+ // Variable operations
44
+ | 'set'
45
+ | 'get'
46
+ | 'increment'
47
+ | 'decrement'
48
+ | 'log'
49
+ // Visibility
50
+ | 'show'
51
+ | 'hide'
52
+ | 'transition'
53
+ // Events
54
+ | 'on'
55
+ | 'trigger'
56
+ | 'send'
57
+ // DOM focus
58
+ | 'focus'
59
+ | 'blur'
60
+ // Navigation
61
+ | 'go'
62
+ // Async
63
+ | 'wait'
64
+ | 'fetch'
65
+ | 'settle'
66
+ // Animation/Measurement
67
+ | 'measure'
68
+ // Behavior system
69
+ | 'install'
70
+ // Control flow
71
+ | 'if'
72
+ | 'unless'
73
+ | 'else'
74
+ | 'repeat'
75
+ | 'for'
76
+ | 'while'
77
+ | 'continue'
78
+ | 'halt'
79
+ | 'throw'
80
+ | 'call'
81
+ | 'return'
82
+ // Advanced
83
+ | 'js'
84
+ | 'async'
85
+ | 'tell'
86
+ | 'default'
87
+ | 'init'
88
+ | 'behavior'
89
+ // Meta (for compound nodes)
90
+ | 'compound';
91
+
92
+ // =============================================================================
93
+ // Semantic Values
94
+ // =============================================================================
95
+
96
+ /**
97
+ * A semantic value represents a typed piece of data in a semantic node.
98
+ * Values are language-neutral - they capture what something IS, not how it's written.
99
+ */
100
+ export type SemanticValue =
101
+ | LiteralValue
102
+ | SelectorValue
103
+ | ReferenceValue
104
+ | PropertyPathValue
105
+ | ExpressionValue;
106
+
107
+ export interface LiteralValue {
108
+ readonly type: 'literal';
109
+ readonly value: string | number | boolean;
110
+ readonly dataType?: 'string' | 'number' | 'boolean' | 'duration';
111
+ }
112
+
113
+ export interface SelectorValue {
114
+ readonly type: 'selector';
115
+ readonly value: string; // The CSS selector: #id, .class, [attr], etc.
116
+ readonly selectorKind: 'id' | 'class' | 'attribute' | 'element' | 'complex';
117
+ }
118
+
119
+ export interface ReferenceValue {
120
+ readonly type: 'reference';
121
+ readonly value: 'me' | 'you' | 'it' | 'result' | 'event' | 'target' | 'body';
122
+ }
123
+
124
+ export interface PropertyPathValue {
125
+ readonly type: 'property-path';
126
+ readonly object: SemanticValue;
127
+ readonly property: string;
128
+ }
129
+
130
+ export interface ExpressionValue {
131
+ readonly type: 'expression';
132
+ /** Raw expression string for complex expressions that need further parsing */
133
+ readonly raw: string;
134
+ }
135
+
136
+ // =============================================================================
137
+ // Semantic Nodes
138
+ // =============================================================================
139
+
140
+ /**
141
+ * Base interface for all semantic nodes.
142
+ * Semantic nodes capture the MEANING of hyperscript constructs.
143
+ */
144
+ export interface SemanticNode {
145
+ readonly kind: 'command' | 'event-handler' | 'conditional' | 'compound' | 'loop';
146
+ readonly action: ActionType;
147
+ readonly roles: ReadonlyMap<SemanticRole, SemanticValue>;
148
+ readonly metadata?: SemanticMetadata;
149
+ }
150
+
151
+ /**
152
+ * Metadata about the source of a semantic node.
153
+ * Useful for debugging, error messages, and round-trip conversion.
154
+ */
155
+ export interface SemanticMetadata {
156
+ readonly sourceLanguage?: string;
157
+ readonly sourceText?: string;
158
+ readonly sourcePosition?: SourcePosition;
159
+ readonly patternId?: string;
160
+ }
161
+
162
+ export interface SourcePosition {
163
+ readonly start: number;
164
+ readonly end: number;
165
+ readonly line?: number;
166
+ readonly column?: number;
167
+ }
168
+
169
+ /**
170
+ * A command semantic node - represents a single hyperscript command.
171
+ */
172
+ export interface CommandSemanticNode extends SemanticNode {
173
+ readonly kind: 'command';
174
+ }
175
+
176
+ /**
177
+ * An event handler semantic node - represents "on [event] [commands]".
178
+ */
179
+ export interface EventHandlerSemanticNode extends SemanticNode {
180
+ readonly kind: 'event-handler';
181
+ readonly action: 'on';
182
+ readonly body: SemanticNode[];
183
+ readonly eventModifiers?: EventModifiers;
184
+ /**
185
+ * Event parameter names for destructuring.
186
+ * E.g., for "on click(clientX, clientY)", this would be ['clientX', 'clientY']
187
+ */
188
+ readonly parameterNames?: readonly string[];
189
+ }
190
+
191
+ export interface EventModifiers {
192
+ readonly once?: boolean;
193
+ readonly debounce?: number;
194
+ readonly throttle?: number;
195
+ readonly queue?: 'first' | 'last' | 'all' | 'none';
196
+ readonly from?: SemanticValue; // Event source filter
197
+ }
198
+
199
+ /**
200
+ * A conditional semantic node - represents "if [condition] then [body] else [body]".
201
+ */
202
+ export interface ConditionalSemanticNode extends SemanticNode {
203
+ readonly kind: 'conditional';
204
+ readonly action: 'if';
205
+ readonly thenBranch: SemanticNode[];
206
+ readonly elseBranch?: SemanticNode[];
207
+ }
208
+
209
+ /**
210
+ * A compound semantic node - represents multiple chained statements.
211
+ */
212
+ export interface CompoundSemanticNode extends SemanticNode {
213
+ readonly kind: 'compound';
214
+ readonly statements: SemanticNode[];
215
+ readonly chainType: 'then' | 'and' | 'async';
216
+ }
217
+
218
+ /**
219
+ * Loop variant discriminant for different loop types.
220
+ */
221
+ export type LoopVariant =
222
+ | 'forever' // repeat forever
223
+ | 'times' // repeat 5 times
224
+ | 'for' // for item in collection
225
+ | 'while' // while condition
226
+ | 'until'; // until condition
227
+
228
+ /**
229
+ * A loop semantic node - represents repeat/for/while loops.
230
+ */
231
+ export interface LoopSemanticNode extends SemanticNode {
232
+ readonly kind: 'loop';
233
+ readonly action: 'repeat' | 'for' | 'while';
234
+ /** The type of loop (forever, times, for, while, until) */
235
+ readonly loopVariant: LoopVariant;
236
+ /** Commands to execute in each iteration */
237
+ readonly body: SemanticNode[];
238
+ /** Loop variable name for 'for' loops (e.g., 'item' in 'for item in list') */
239
+ readonly loopVariable?: string;
240
+ /** Index variable name if specified (e.g., 'i' in 'for item with index i') */
241
+ readonly indexVariable?: string;
242
+ }
243
+
244
+ // =============================================================================
245
+ // Language Patterns
246
+ // =============================================================================
247
+
248
+ /**
249
+ * A pattern defines how a semantic structure appears in a specific language.
250
+ * Patterns enable bidirectional conversion: parse (natural → semantic) and
251
+ * render (semantic → natural).
252
+ */
253
+ export interface LanguagePattern {
254
+ /** Unique identifier for this pattern */
255
+ readonly id: string;
256
+
257
+ /** ISO 639-1 language code */
258
+ readonly language: string;
259
+
260
+ /** Which command this pattern matches */
261
+ readonly command: ActionType;
262
+
263
+ /** Priority for disambiguation (higher = checked first) */
264
+ readonly priority: number;
265
+
266
+ /** The pattern template with role placeholders */
267
+ readonly template: PatternTemplate;
268
+
269
+ /** Rules for extracting semantic roles from matched tokens */
270
+ readonly extraction: ExtractionRules;
271
+
272
+ /** Optional constraints on when this pattern applies */
273
+ readonly constraints?: PatternConstraints;
274
+ }
275
+
276
+ /**
277
+ * A pattern template defines the expected token sequence.
278
+ *
279
+ * Template syntax:
280
+ * - Literal tokens: "toggle", "を", "على"
281
+ * - Role placeholders: {patient}, {target}, {destination}
282
+ * - Optional groups: [on {target}]
283
+ * - Alternatives in extraction (not in template string)
284
+ *
285
+ * Example templates:
286
+ * - English: "toggle {patient} [on {target}]"
287
+ * - Japanese: "{target} の {patient} を 切り替え"
288
+ * - Arabic: "بدّل {patient} [على {target}]"
289
+ */
290
+ export interface PatternTemplate {
291
+ /** Human-readable template string */
292
+ readonly format: string;
293
+
294
+ /** Parsed token sequence for matching */
295
+ readonly tokens: PatternToken[];
296
+ }
297
+
298
+ export type PatternToken = LiteralPatternToken | RolePatternToken | GroupPatternToken;
299
+
300
+ export interface LiteralPatternToken {
301
+ readonly type: 'literal';
302
+ readonly value: string;
303
+ /** Alternative spellings/forms that also match */
304
+ readonly alternatives?: string[];
305
+ }
306
+
307
+ export interface RolePatternToken {
308
+ readonly type: 'role';
309
+ readonly role: SemanticRole;
310
+ readonly optional?: boolean;
311
+ /** Expected value types (for validation) */
312
+ readonly expectedTypes?: Array<SemanticValue['type']>;
313
+ }
314
+
315
+ export interface GroupPatternToken {
316
+ readonly type: 'group';
317
+ readonly tokens: PatternToken[];
318
+ readonly optional?: boolean;
319
+ }
320
+
321
+ /**
322
+ * Rules for extracting semantic values from matched tokens.
323
+ */
324
+ export interface ExtractionRules {
325
+ readonly [role: string]: ExtractionRule;
326
+ }
327
+
328
+ export interface ExtractionRule {
329
+ /** Position-based extraction (0-indexed from pattern start) */
330
+ readonly position?: number;
331
+ /** Marker-based extraction (find value after this marker) */
332
+ readonly marker?: string;
333
+ /** Alternative markers that also work */
334
+ readonly markerAlternatives?: string[];
335
+ /** Transform the extracted value */
336
+ readonly transform?: (raw: string) => SemanticValue;
337
+ /** Default value if not found (for optional roles) */
338
+ readonly default?: SemanticValue;
339
+ }
340
+
341
+ /**
342
+ * Additional constraints on pattern applicability.
343
+ */
344
+ export interface PatternConstraints {
345
+ /** Required roles that must be present */
346
+ readonly requiredRoles?: SemanticRole[];
347
+ /** Roles that must NOT be present */
348
+ readonly forbiddenRoles?: SemanticRole[];
349
+ /** Valid selector types for the patient role */
350
+ readonly validPatientTypes?: Array<SelectorValue['selectorKind']>;
351
+ /** Pattern IDs this conflicts with */
352
+ readonly conflictsWith?: string[];
353
+ }
354
+
355
+ // =============================================================================
356
+ // Token Stream (for pattern matching)
357
+ // =============================================================================
358
+
359
+ /**
360
+ * A token from language-specific tokenization.
361
+ */
362
+ export interface LanguageToken {
363
+ readonly value: string;
364
+ readonly kind: TokenKind;
365
+ readonly position: SourcePosition;
366
+ /** Normalized form from explicit keyword map (e.g., 切り替え → toggle) */
367
+ readonly normalized?: string;
368
+ /** Morphologically normalized stem (e.g., 切り替えた → 切り替え) */
369
+ readonly stem?: string;
370
+ /** Confidence in the morphological stem (0.0-1.0) */
371
+ readonly stemConfidence?: number;
372
+ /** Additional metadata for specific token types (e.g., event modifier data) */
373
+ readonly metadata?: Record<string, unknown>;
374
+ }
375
+
376
+ export type TokenKind =
377
+ | 'keyword' // Command or modifier keyword
378
+ | 'selector' // CSS selector (#id, .class, [attr])
379
+ | 'literal' // String or number literal
380
+ | 'particle' // Grammatical particle (を, に, من)
381
+ | 'conjunction' // Grammatical conjunction (Arabic و/ف proclitics)
382
+ | 'event-modifier' // Event modifier (.once, .debounce(300), .throttle(100))
383
+ | 'identifier' // Variable or property name
384
+ | 'operator' // Comparison or logical operator
385
+ | 'punctuation' // Brackets, quotes, etc.
386
+ | 'url'; // URL/path (/path, https://...)
387
+
388
+ /**
389
+ * A stream of tokens with navigation capabilities.
390
+ */
391
+ export interface TokenStream {
392
+ readonly tokens: readonly LanguageToken[];
393
+ readonly language: string;
394
+
395
+ /** Look at token at current position + offset without consuming */
396
+ peek(offset?: number): LanguageToken | null;
397
+
398
+ /** Consume and return current token, advance position */
399
+ advance(): LanguageToken;
400
+
401
+ /** Check if we've consumed all tokens */
402
+ isAtEnd(): boolean;
403
+
404
+ /** Save current position for backtracking */
405
+ mark(): StreamMark;
406
+
407
+ /** Restore to a saved position */
408
+ reset(mark: StreamMark): void;
409
+
410
+ /** Get current position */
411
+ position(): number;
412
+ }
413
+
414
+ export interface StreamMark {
415
+ readonly position: number;
416
+ }
417
+
418
+ // =============================================================================
419
+ // Pattern Matching Results
420
+ // =============================================================================
421
+
422
+ /**
423
+ * Result of successfully matching a pattern.
424
+ */
425
+ export interface PatternMatchResult {
426
+ readonly pattern: LanguagePattern;
427
+ readonly captured: ReadonlyMap<SemanticRole, SemanticValue>;
428
+ readonly consumedTokens: number;
429
+ readonly confidence: number; // 0-1, how well the pattern matched
430
+ }
431
+
432
+ /**
433
+ * Error when pattern matching fails.
434
+ */
435
+ export interface PatternMatchError {
436
+ readonly message: string;
437
+ readonly position: SourcePosition;
438
+ readonly expectedPatterns?: string[];
439
+ readonly partialMatch?: Partial<PatternMatchResult>;
440
+ }
441
+
442
+ // =============================================================================
443
+ // Tokenizer Interface
444
+ // =============================================================================
445
+
446
+ /**
447
+ * Language-specific tokenizer interface.
448
+ * Each language implements its own tokenizer to handle:
449
+ * - Word boundaries (spaces for English, particles for Japanese)
450
+ * - Character sets (ASCII, CJK, Arabic, etc.)
451
+ * - Special markers (particles, prefixes, suffixes)
452
+ */
453
+ export interface LanguageTokenizer {
454
+ readonly language: string;
455
+ readonly direction: 'ltr' | 'rtl';
456
+
457
+ /** Convert input string to token stream */
458
+ tokenize(input: string): TokenStream;
459
+
460
+ /** Classify a single token */
461
+ classifyToken(token: string): TokenKind;
462
+ }
463
+
464
+ // =============================================================================
465
+ // Semantic Parser Interface
466
+ // =============================================================================
467
+
468
+ /**
469
+ * Main parser interface - converts natural language to semantic nodes.
470
+ */
471
+ export interface SemanticParser {
472
+ /** Parse input in specified language to semantic node */
473
+ parse(input: string, language: string): SemanticNode;
474
+
475
+ /** Check if input can be parsed in the specified language */
476
+ canParse(input: string, language: string): boolean;
477
+
478
+ /** Get all supported languages */
479
+ supportedLanguages(): string[];
480
+ }
481
+
482
+ // =============================================================================
483
+ // Semantic Renderer Interface
484
+ // =============================================================================
485
+
486
+ /**
487
+ * Renderer interface - converts semantic nodes to natural language.
488
+ */
489
+ export interface SemanticRenderer {
490
+ /** Render semantic node in specified language */
491
+ render(node: SemanticNode, language: string): string;
492
+
493
+ /** Render semantic node in explicit mode */
494
+ renderExplicit(node: SemanticNode): string;
495
+
496
+ /** Get all supported languages */
497
+ supportedLanguages(): string[];
498
+ }
499
+
500
+ // =============================================================================
501
+ // Helper Functions
502
+ // =============================================================================
503
+
504
+ /**
505
+ * Create a selector semantic value from a CSS selector string.
506
+ */
507
+ export function createSelector(value: string): SelectorValue {
508
+ let selectorKind: SelectorValue['selectorKind'] = 'complex';
509
+
510
+ if (value.startsWith('#') && !value.includes(' ')) {
511
+ selectorKind = 'id';
512
+ } else if (value.startsWith('.') && !value.includes(' ')) {
513
+ selectorKind = 'class';
514
+ } else if (value.startsWith('[') && value.endsWith(']')) {
515
+ selectorKind = 'attribute';
516
+ } else if (/^[a-z][a-z0-9]*$/i.test(value)) {
517
+ selectorKind = 'element';
518
+ }
519
+
520
+ return { type: 'selector', value, selectorKind };
521
+ }
522
+
523
+ /**
524
+ * Create a literal semantic value.
525
+ */
526
+ export function createLiteral(
527
+ value: string | number | boolean,
528
+ dataType?: LiteralValue['dataType']
529
+ ): LiteralValue {
530
+ const result: LiteralValue = { type: 'literal', value };
531
+ if (dataType !== undefined) {
532
+ return { type: 'literal', value, dataType };
533
+ }
534
+ return result;
535
+ }
536
+
537
+ /**
538
+ * Create a reference semantic value.
539
+ */
540
+ export function createReference(value: ReferenceValue['value']): ReferenceValue {
541
+ return { type: 'reference', value };
542
+ }
543
+
544
+ /**
545
+ * Create a property path semantic value.
546
+ */
547
+ export function createPropertyPath(object: SemanticValue, property: string): PropertyPathValue {
548
+ return { type: 'property-path', object, property };
549
+ }
550
+
551
+ /**
552
+ * Create a semantic node with the given action and roles.
553
+ */
554
+ export function createCommandNode(
555
+ action: ActionType,
556
+ roles: Record<string, SemanticValue>,
557
+ metadata?: SemanticMetadata
558
+ ): CommandSemanticNode {
559
+ const node: CommandSemanticNode = {
560
+ kind: 'command',
561
+ action,
562
+ roles: new Map(Object.entries(roles) as [SemanticRole, SemanticValue][]),
563
+ };
564
+ if (metadata !== undefined) {
565
+ return { ...node, metadata };
566
+ }
567
+ return node;
568
+ }
569
+
570
+ /**
571
+ * Create an event handler semantic node.
572
+ */
573
+ export function createEventHandler(
574
+ event: SemanticValue,
575
+ body: SemanticNode[],
576
+ modifiers?: EventModifiers,
577
+ metadata?: SemanticMetadata,
578
+ parameterNames?: string[]
579
+ ): EventHandlerSemanticNode {
580
+ const roles = new Map<SemanticRole, SemanticValue>();
581
+ roles.set('event', event);
582
+
583
+ const node: EventHandlerSemanticNode = {
584
+ kind: 'event-handler',
585
+ action: 'on',
586
+ roles,
587
+ body,
588
+ };
589
+
590
+ if (modifiers !== undefined) {
591
+ (node as { eventModifiers?: EventModifiers }).eventModifiers = modifiers;
592
+ }
593
+ if (metadata !== undefined) {
594
+ (node as { metadata?: SemanticMetadata }).metadata = metadata;
595
+ }
596
+ if (parameterNames !== undefined && parameterNames.length > 0) {
597
+ (node as { parameterNames?: readonly string[] }).parameterNames = parameterNames;
598
+ }
599
+
600
+ return node;
601
+ }
602
+
603
+ /**
604
+ * Create a compound semantic node (for chained statements).
605
+ */
606
+ export function createCompoundNode(
607
+ statements: SemanticNode[],
608
+ chainType: 'then' | 'and' | 'async' = 'then',
609
+ metadata?: SemanticMetadata
610
+ ): CompoundSemanticNode {
611
+ const node: CompoundSemanticNode = {
612
+ kind: 'compound',
613
+ action: 'compound' as ActionType, // Compound doesn't have a specific action
614
+ roles: new Map(),
615
+ statements,
616
+ chainType,
617
+ };
618
+ if (metadata !== undefined) {
619
+ (node as { metadata?: SemanticMetadata }).metadata = metadata;
620
+ }
621
+ return node;
622
+ }
623
+
624
+ /**
625
+ * Create a conditional semantic node (if/else).
626
+ */
627
+ export function createConditionalNode(
628
+ condition: SemanticValue,
629
+ thenBranch: SemanticNode[],
630
+ elseBranch?: SemanticNode[],
631
+ metadata?: SemanticMetadata
632
+ ): ConditionalSemanticNode {
633
+ const roles = new Map<SemanticRole, SemanticValue>();
634
+ roles.set('condition' as SemanticRole, condition);
635
+
636
+ const node: ConditionalSemanticNode = {
637
+ kind: 'conditional',
638
+ action: 'if',
639
+ roles,
640
+ thenBranch,
641
+ };
642
+ if (elseBranch !== undefined) {
643
+ (node as { elseBranch?: SemanticNode[] }).elseBranch = elseBranch;
644
+ }
645
+ if (metadata !== undefined) {
646
+ (node as { metadata?: SemanticMetadata }).metadata = metadata;
647
+ }
648
+ return node;
649
+ }
650
+
651
+ /**
652
+ * Create a loop semantic node.
653
+ */
654
+ export function createLoopNode(
655
+ action: 'repeat' | 'for' | 'while',
656
+ loopVariant: LoopVariant,
657
+ roles: Record<string, SemanticValue>,
658
+ body: SemanticNode[],
659
+ options?: {
660
+ loopVariable?: string;
661
+ indexVariable?: string;
662
+ metadata?: SemanticMetadata;
663
+ }
664
+ ): LoopSemanticNode {
665
+ const node: LoopSemanticNode = {
666
+ kind: 'loop',
667
+ action,
668
+ loopVariant,
669
+ roles: new Map(Object.entries(roles) as [SemanticRole, SemanticValue][]),
670
+ body,
671
+ };
672
+
673
+ if (options?.loopVariable) {
674
+ (node as { loopVariable?: string }).loopVariable = options.loopVariable;
675
+ }
676
+ if (options?.indexVariable) {
677
+ (node as { indexVariable?: string }).indexVariable = options.indexVariable;
678
+ }
679
+ if (options?.metadata) {
680
+ (node as { metadata?: SemanticMetadata }).metadata = options.metadata;
681
+ }
682
+
683
+ return node;
684
+ }
685
+
686
+ // =============================================================================
687
+ // Semantic Parse Result (for validation)
688
+ // =============================================================================
689
+
690
+ /**
691
+ * Argument with semantic role attached.
692
+ */
693
+ export type SemanticArgument = SemanticValue & {
694
+ role?: SemanticRole;
695
+ };
696
+
697
+ /**
698
+ * Result of semantic parsing (used by command validator).
699
+ */
700
+ export interface SemanticParseResult {
701
+ /** The action/command type */
702
+ readonly action: ActionType;
703
+ /** Confidence score (0-1) */
704
+ readonly confidence: number;
705
+ /** Source language code */
706
+ readonly language: string;
707
+ /** Parsed arguments with roles */
708
+ readonly arguments: SemanticArgument[];
709
+ }