@lokascript/compilation-service 2.9.4 → 2.11.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/dist/index.cjs CHANGED
@@ -2334,6 +2334,37 @@ function parseTakeCommand(ctx, identifierNode) {
2334
2334
  }
2335
2335
  return CommandNodeBuilder.fromIdentifier(identifierNode).withArgs(...args).withModifiers(modifiers).endingAt(ctx.getPosition()).build();
2336
2336
  }
2337
+ function consumeViewTransitionTail(ctx, args) {
2338
+ if (!ctx.check("using")) {
2339
+ return false;
2340
+ }
2341
+ ctx.advance();
2342
+ if (!ctx.match("view")) {
2343
+ throw new Error("expected 'view transition' after 'using'");
2344
+ }
2345
+ if (!ctx.match("transition")) {
2346
+ throw new Error("expected 'transition' after 'using view'");
2347
+ }
2348
+ args.push(ctx.createIdentifier("using"));
2349
+ args.push(ctx.createIdentifier("view"));
2350
+ args.push(ctx.createIdentifier("transition"));
2351
+ return true;
2352
+ }
2353
+ function parseProcessCommand(ctx, identifierNode) {
2354
+ if (!ctx.check("partials")) {
2355
+ return null;
2356
+ }
2357
+ const args = [];
2358
+ consumeKeywordToArgs(ctx, "partials", args);
2359
+ if (consumeKeywordToArgs(ctx, KEYWORDS$1.IN, args)) {
2360
+ const contentArg = parseOneArgument(ctx, ["using"]);
2361
+ if (contentArg) {
2362
+ args.push(contentArg);
2363
+ }
2364
+ }
2365
+ consumeViewTransitionTail(ctx, args);
2366
+ return CommandNodeBuilder.fromIdentifier(identifierNode).withArgs(...args).endingAt(ctx.getPosition()).build();
2367
+ }
2337
2368
  function parseAddCommand(ctx, commandToken) {
2338
2369
  const args = [];
2339
2370
  if (ctx.match("{")) {
@@ -2432,6 +2463,7 @@ function parseSwapCommand(ctx, identifierNode) {
2432
2463
  args.push(contentExpr);
2433
2464
  }
2434
2465
  }
2466
+ consumeViewTransitionTail(ctx, args);
2435
2467
  return CommandNodeBuilder.fromIdentifier(identifierNode).withArgs(...args).endingAt(ctx.getPosition()).build();
2436
2468
  }
2437
2469
  function parseWaitCommand(ctx, commandToken) {
@@ -2875,6 +2907,8 @@ function parseCompoundCommand(ctx, identifierNode) {
2875
2907
  case "swap":
2876
2908
  case "morph":
2877
2909
  return parseSwapCommand(ctx, identifierNode);
2910
+ case "process":
2911
+ return parseProcessCommand(ctx, identifierNode) ?? parseRegularCommand(ctx, identifierNode);
2878
2912
  default:
2879
2913
  return parseRegularCommand(ctx, identifierNode);
2880
2914
  }
@@ -3186,6 +3220,9 @@ function parseTellCommand(ctx, identifierNode) {
3186
3220
  if (!target) {
3187
3221
  throw new Error("tell command requires a target expression");
3188
3222
  }
3223
+ if (ctx.check(KEYWORDS$1.TO)) {
3224
+ ctx.advance();
3225
+ }
3189
3226
  const commands = [];
3190
3227
  while (!ctx.isAtEnd()) {
3191
3228
  if (ctx.checkIsCommand()) {
@@ -3203,7 +3240,11 @@ function parseTellCommand(ctx, identifierNode) {
3203
3240
  if (ctx.match(KEYWORDS$1.AND) || ctx.match(KEYWORDS$1.THEN)) {
3204
3241
  continue;
3205
3242
  }
3206
- if (ctx.check(KEYWORDS$1.ELSE) || ctx.check(KEYWORDS$1.END)) {
3243
+ if (ctx.check(KEYWORDS$1.ELSE)) {
3244
+ break;
3245
+ }
3246
+ if (ctx.check(KEYWORDS$1.END)) {
3247
+ ctx.advance();
3207
3248
  break;
3208
3249
  }
3209
3250
  if (ctx.checkIsCommand()) {
@@ -3417,6 +3458,12 @@ function createChildContext(parent, element) {
3417
3458
  function isHTMLElement$2(value) {
3418
3459
  return value !== null && typeof value === "object" && "nodeType" in value && value.nodeType === 1 && "tagName" in value && typeof value.tagName === "string" && "classList" in value;
3419
3460
  }
3461
+ function isInsertableNode(value) {
3462
+ if (value === null || typeof value !== "object")
3463
+ return false;
3464
+ const nodeType = value.nodeType;
3465
+ return nodeType === 1 || nodeType === 3 || nodeType === 11;
3466
+ }
3420
3467
  function isNodeList(value) {
3421
3468
  return value !== null && typeof value === "object" && "length" in value && typeof value.length === "number" && (Symbol.iterator in value || typeof value.item === "function");
3422
3469
  }
@@ -4286,6 +4333,11 @@ function evaluateLiteral(node) {
4286
4333
  }
4287
4334
  async function evaluateIdentifier(node, context) {
4288
4335
  const name = node.name;
4336
+ if (name.startsWith("$")) {
4337
+ notifyGlobalRead(name.slice(1), context);
4338
+ } else if (node.scope === "global") {
4339
+ notifyGlobalRead(name, context);
4340
+ }
4289
4341
  if (name === "me" || name === "my" || name === "I") {
4290
4342
  return getExpr(context, "me").evaluate(context);
4291
4343
  }
@@ -4305,7 +4357,6 @@ async function evaluateIdentifier(node, context) {
4305
4357
  return getExpr(context, "document").evaluate(context);
4306
4358
  }
4307
4359
  if (node.scope === "global" && context.globals?.has(name)) {
4308
- notifyGlobalRead(name, context);
4309
4360
  return context.globals.get(name);
4310
4361
  }
4311
4362
  if (node.scope === "element") {
@@ -4316,12 +4367,9 @@ async function evaluateIdentifier(node, context) {
4316
4367
  return context.locals.get(name);
4317
4368
  }
4318
4369
  if (context.globals && context.globals.has(name)) {
4319
- if (name.startsWith("$"))
4320
- notifyGlobalRead(name.slice(1), context);
4321
4370
  return context.globals.get(name);
4322
4371
  }
4323
4372
  if (name.startsWith("$") && context.globals && context.globals.has(name.slice(1))) {
4324
- notifyGlobalRead(name.slice(1), context);
4325
4373
  return context.globals.get(name.slice(1));
4326
4374
  }
4327
4375
  if (context[name] !== void 0) {
@@ -6028,7 +6076,7 @@ function command(config2) {
6028
6076
  };
6029
6077
  }
6030
6078
  function commandMeta(metadata) {
6031
- return { isBlocking: false, hasBody: false, version: "1.0.0", ...metadata };
6079
+ return { ...metadata };
6032
6080
  }
6033
6081
  function createFactory(CommandClass) {
6034
6082
  return () => new CommandClass();
@@ -6580,7 +6628,7 @@ function insertContent(target, content, position) {
6580
6628
  insertReplace(target, content);
6581
6629
  return;
6582
6630
  }
6583
- if (isHTMLElement$2(content)) {
6631
+ if (isInsertableNode(content)) {
6584
6632
  insertElement(target, content, position);
6585
6633
  } else {
6586
6634
  insertText(target, content, position);
@@ -6590,7 +6638,7 @@ function insertContentSemantic(target, content, position) {
6590
6638
  insertContent(target, content, toInsertPosition(position));
6591
6639
  }
6592
6640
  function insertReplace(target, content) {
6593
- if (isHTMLElement$2(content)) {
6641
+ if (isInsertableNode(content)) {
6594
6642
  target.innerHTML = "";
6595
6643
  target.appendChild(content);
6596
6644
  } else {
@@ -6634,6 +6682,52 @@ function insertText(target, content, position) {
6634
6682
  target.insertAdjacentText(domPosition, content);
6635
6683
  }
6636
6684
  }
6685
+ function moveOrInsert(parent, element, ref) {
6686
+ const p = parent;
6687
+ if (typeof p.moveBefore === "function" && element.isConnected && parent.isConnected) {
6688
+ try {
6689
+ p.moveBefore(element, ref);
6690
+ return;
6691
+ } catch {
6692
+ }
6693
+ }
6694
+ parent.insertBefore(element, ref);
6695
+ }
6696
+ function insertElementsInOrder(target, elements, position) {
6697
+ switch (position) {
6698
+ case "beforeend":
6699
+ for (const el of elements)
6700
+ moveOrInsert(target, el, null);
6701
+ break;
6702
+ case "afterbegin":
6703
+ for (let i = elements.length - 1; i >= 0; i--) {
6704
+ moveOrInsert(target, elements[i], target.firstChild);
6705
+ }
6706
+ break;
6707
+ case "beforebegin": {
6708
+ const parent = target.parentElement;
6709
+ if (!parent)
6710
+ return;
6711
+ for (const el of elements)
6712
+ moveOrInsert(parent, el, target);
6713
+ break;
6714
+ }
6715
+ case "afterend": {
6716
+ const parent = target.parentElement;
6717
+ if (!parent)
6718
+ return;
6719
+ for (let i = elements.length - 1; i >= 0; i--) {
6720
+ moveOrInsert(parent, elements[i], target.nextSibling);
6721
+ }
6722
+ break;
6723
+ }
6724
+ case "replace":
6725
+ target.innerHTML = "";
6726
+ for (const el of elements)
6727
+ moveOrInsert(target, el, null);
6728
+ break;
6729
+ }
6730
+ }
6637
6731
  function removeElement(element) {
6638
6732
  if (element.parentNode) {
6639
6733
  element.remove();
@@ -7379,7 +7473,8 @@ function toMorphlexOptions(options) {
7379
7473
  function getStartViewTransition() {
7380
7474
  if (typeof document === "undefined")
7381
7475
  return void 0;
7382
- return document.startViewTransition;
7476
+ const fn = document.startViewTransition;
7477
+ return typeof fn === "function" ? fn.bind(document) : void 0;
7383
7478
  }
7384
7479
  function isViewTransitionsSupported() {
7385
7480
  return typeof getStartViewTransition() === "function";
@@ -13236,6 +13331,43 @@ function getPatternsForLanguage(code) {
13236
13331
  function getPatternsForLanguageAndCommand(language, command2) {
13237
13332
  return getPatternsForLanguage(language).filter((p) => p.command === command2).sort((a, b) => b.priority - a.priority);
13238
13333
  }
13334
+ function resolveMarkerForRole(roleSpec, profile) {
13335
+ const overrideMarker = roleSpec.markerOverride?.[profile.code];
13336
+ const defaultMarker = profile.roleMarkers[roleSpec.role];
13337
+ if (overrideMarker !== void 0) {
13338
+ const alternatives = legacyMarkerAlternatives(roleSpec, profile.code, overrideMarker);
13339
+ return {
13340
+ primary: overrideMarker,
13341
+ ...alternatives && { alternatives },
13342
+ position: defaultMarker?.position ?? "before",
13343
+ isOverride: true
13344
+ };
13345
+ }
13346
+ if (defaultMarker && defaultMarker.primary) {
13347
+ const result = {
13348
+ primary: defaultMarker.primary,
13349
+ position: defaultMarker.position,
13350
+ isOverride: false
13351
+ };
13352
+ if (defaultMarker.alternatives) {
13353
+ result.alternatives = defaultMarker.alternatives;
13354
+ }
13355
+ return result;
13356
+ }
13357
+ return null;
13358
+ }
13359
+ function legacyMarkerAlternatives(roleSpec, languageCode, overrideMarker) {
13360
+ const legacy = roleSpec.markerLegacy?.[languageCode];
13361
+ if (!legacy?.length) return void 0;
13362
+ const alternatives = [...new Set(legacy)].filter((a) => a && a !== overrideMarker);
13363
+ return alternatives.length ? alternatives : void 0;
13364
+ }
13365
+ function schemaMarkerAlternatives(roleSpec, languageCode, marker) {
13366
+ const legacy = roleSpec.markerLegacy?.[languageCode] ?? [];
13367
+ const variants = roleSpec.methodCarrier ? [] : roleSpec.markerVariants?.[languageCode] ?? [];
13368
+ const alternatives = [.../* @__PURE__ */ new Set([...legacy, ...variants])].filter((a) => a && a !== marker);
13369
+ return alternatives.length ? alternatives : void 0;
13370
+ }
13239
13371
  function getPutPatternsBn() {
13240
13372
  return [
13241
13373
  // SOV verb-final positional put: `{patient} <posWord> {destination} \u0995\u09c7 \u09b0\u09be\u0996\u09c1\u09a8`
@@ -16819,43 +16951,6 @@ function sortRolesByWordOrder(roles, wordOrder) {
16819
16951
  return aPos - bPos;
16820
16952
  });
16821
16953
  }
16822
- function resolveMarkerForRole(roleSpec, profile) {
16823
- const overrideMarker = roleSpec.markerOverride?.[profile.code];
16824
- const defaultMarker = profile.roleMarkers[roleSpec.role];
16825
- if (overrideMarker !== void 0) {
16826
- const alternatives = legacyMarkerAlternatives(roleSpec, profile.code, overrideMarker);
16827
- return {
16828
- primary: overrideMarker,
16829
- ...alternatives && { alternatives },
16830
- position: defaultMarker?.position ?? "before",
16831
- isOverride: true
16832
- };
16833
- }
16834
- if (defaultMarker && defaultMarker.primary) {
16835
- const result = {
16836
- primary: defaultMarker.primary,
16837
- position: defaultMarker.position,
16838
- isOverride: false
16839
- };
16840
- if (defaultMarker.alternatives) {
16841
- result.alternatives = defaultMarker.alternatives;
16842
- }
16843
- return result;
16844
- }
16845
- return null;
16846
- }
16847
- function legacyMarkerAlternatives(roleSpec, languageCode, overrideMarker) {
16848
- const legacy = roleSpec.markerLegacy?.[languageCode];
16849
- if (!legacy?.length) return void 0;
16850
- const alternatives = [...new Set(legacy)].filter((a) => a && a !== overrideMarker);
16851
- return alternatives.length ? alternatives : void 0;
16852
- }
16853
- function schemaMarkerAlternatives(roleSpec, languageCode, marker) {
16854
- const legacy = roleSpec.markerLegacy?.[languageCode] ?? [];
16855
- const variants = roleSpec.methodCarrier ? [] : roleSpec.markerVariants?.[languageCode] ?? [];
16856
- const alternatives = [.../* @__PURE__ */ new Set([...legacy, ...variants])].filter((a) => a && a !== marker);
16857
- return alternatives.length ? alternatives : void 0;
16858
- }
16859
16954
  function resolveRoleMarker(roleSpec, profile) {
16860
16955
  let marker;
16861
16956
  let alternatives;
@@ -16888,6 +16983,44 @@ function appendOptionalScope(tokens, extraction, commandSchema) {
16888
16983
  });
16889
16984
  extraction.scope = { fromRole: "scope" };
16890
16985
  }
16986
+ function appendOptionalViewTransition(tokens, extraction, commandSchema, languageCode) {
16987
+ appendOptionalTailRole(tokens, extraction, commandSchema, languageCode, "manner", {
16988
+ requireMarker: true
16989
+ });
16990
+ }
16991
+ function appendOptionalRecipient(tokens, extraction, commandSchema, languageCode) {
16992
+ appendOptionalTailRole(tokens, extraction, commandSchema, languageCode, "recipient", {
16993
+ requireMarker: false
16994
+ });
16995
+ }
16996
+ function appendOptionalTailRole(tokens, extraction, commandSchema, languageCode, role, opts) {
16997
+ const spec = commandSchema.roles.find((r) => r.role === role && !r.required);
16998
+ if (!spec) return;
16999
+ const marker = spec.markerOverride?.[languageCode];
17000
+ if (opts.requireMarker && !marker) return;
17001
+ tokens.push({
17002
+ type: "group",
17003
+ optional: true,
17004
+ tokens: [
17005
+ ...(marker ? marker.split(/\s+/) : []).map((word) => ({
17006
+ type: "literal",
17007
+ value: word
17008
+ })),
17009
+ {
17010
+ type: "role",
17011
+ role,
17012
+ optional: true,
17013
+ expectedTypes: spec.expectedTypes,
17014
+ // Load-bearing, same as on the generated command patterns: it exempts
17015
+ // the trailing slot from the matcher's verb guard, keeps the uncaptured
17016
+ // slot out of `scoreRoleCoverage`'s denominator, and (for `keyword`)
17017
+ // normalizes the captured value type to the EN reference's `literal`.
17018
+ ...spec.valueShape !== void 0 ? { valueShape: spec.valueShape } : {}
17019
+ }
17020
+ ]
17021
+ });
17022
+ extraction[role] = { fromRole: role };
17023
+ }
16891
17024
  function generateSOVEventHandlerPattern(commandSchema, profile, keyword, eventMarker, config2) {
16892
17025
  const tokens = [];
16893
17026
  tokens.push({ type: "role", role: "event", optional: false });
@@ -16982,6 +17115,15 @@ function generateSOVPatientFirstEventHandlerPattern(commandSchema, profile, keyw
16982
17115
  tokens.push(
16983
17116
  ...swapsOperands ? eventHandlerPatientGroup(commandSchema, trailingMarker) : eventHandlerDestinationGroup(commandSchema, trailingMarker)
16984
17117
  );
17118
+ const extraction = {
17119
+ action: { value: commandSchema.action },
17120
+ event: { fromRole: "event" },
17121
+ [frontedRole]: { fromRole: frontedRole },
17122
+ ...swapsOperands ? {} : eventHandlerDestinationExtraction(commandSchema),
17123
+ ...eventHandlerSourceExtraction(commandSchema)
17124
+ };
17125
+ appendOptionalRecipient(tokens, extraction, commandSchema, profile.code);
17126
+ appendOptionalViewTransition(tokens, extraction, commandSchema, profile.code);
16985
17127
  return {
16986
17128
  id: `${commandSchema.action}-event-${profile.code}-sov-patient-first`,
16987
17129
  language: profile.code,
@@ -16991,13 +17133,71 @@ function generateSOVPatientFirstEventHandlerPattern(commandSchema, profile, keyw
16991
17133
  format: `{patient} ${patientMarker?.primary || ""} {event} ${eventMarker.primary} ${keyword.primary}`,
16992
17134
  tokens
16993
17135
  },
16994
- extraction: {
16995
- action: { value: commandSchema.action },
16996
- event: { fromRole: "event" },
16997
- [frontedRole]: { fromRole: frontedRole },
16998
- ...swapsOperands ? {} : eventHandlerDestinationExtraction(commandSchema),
16999
- ...eventHandlerSourceExtraction(commandSchema)
17136
+ extraction
17137
+ };
17138
+ }
17139
+ function generateSOVPatientFirstSourceFrontedEventHandlerPattern(commandSchema, profile, keyword, eventMarker, config2) {
17140
+ const sourceSpec = commandSchema.roles.find((r) => r.role === "source");
17141
+ if (!sourceSpec) return null;
17142
+ const { marker: sourceMarker, alternatives: sourceAlts } = resolveRoleMarker(sourceSpec, profile);
17143
+ const patientMarker = profile.roleMarkers.patient;
17144
+ if (!sourceMarker) return null;
17145
+ if (sourceMarker === eventMarker.primary || sourceMarker === patientMarker?.primary) return null;
17146
+ const tokens = [];
17147
+ tokens.push({ type: "role", role: "patient", optional: false });
17148
+ if (patientMarker) {
17149
+ tokens.push(
17150
+ patientMarker.alternatives ? {
17151
+ type: "literal",
17152
+ value: patientMarker.primary,
17153
+ alternatives: patientMarker.alternatives
17154
+ } : { type: "literal", value: patientMarker.primary }
17155
+ );
17156
+ }
17157
+ tokens.push({
17158
+ type: "role",
17159
+ role: "source",
17160
+ optional: false,
17161
+ ...sourceSpec.expectedTypes ? { expectedTypes: sourceSpec.expectedTypes } : {},
17162
+ ...sourceSpec.valueShape !== void 0 ? { valueShape: sourceSpec.valueShape } : {}
17163
+ });
17164
+ for (const word of sourceMarker.split(/\s+/)) {
17165
+ tokens.push(
17166
+ sourceAlts && sourceMarker.split(/\s+/).length === 1 ? { type: "literal", value: word, alternatives: sourceAlts } : { type: "literal", value: word }
17167
+ );
17168
+ }
17169
+ tokens.push({ type: "role", role: "event", optional: false });
17170
+ if (eventMarker.position === "after") {
17171
+ const markerWords = eventMarker.primary.split(/\s+/);
17172
+ if (markerWords.length > 1) {
17173
+ for (const word of markerWords) tokens.push({ type: "literal", value: word });
17174
+ } else {
17175
+ tokens.push(
17176
+ eventMarker.alternatives ? { type: "literal", value: eventMarker.primary, alternatives: eventMarker.alternatives } : { type: "literal", value: eventMarker.primary }
17177
+ );
17000
17178
  }
17179
+ }
17180
+ tokens.push(
17181
+ keyword.alternatives ? { type: "literal", value: keyword.primary, alternatives: keyword.alternatives } : { type: "literal", value: keyword.primary }
17182
+ );
17183
+ const extraction = {
17184
+ action: { value: commandSchema.action },
17185
+ event: { fromRole: "event" },
17186
+ patient: { fromRole: "patient" },
17187
+ source: { fromRole: "source" }
17188
+ };
17189
+ appendOptionalRecipient(tokens, extraction, commandSchema, profile.code);
17190
+ appendOptionalViewTransition(tokens, extraction, commandSchema, profile.code);
17191
+ return {
17192
+ id: `${commandSchema.action}-event-${profile.code}-sov-source-fronted`,
17193
+ language: profile.code,
17194
+ command: "on",
17195
+ priority: (config2.basePriority ?? 100) + 48,
17196
+ template: {
17197
+ format: `{patient} ${patientMarker?.primary || ""} {source} ${sourceMarker} {event} ${eventMarker.primary} ${keyword.primary}`,
17198
+ tokens
17199
+ },
17200
+ extraction
17001
17201
  };
17002
17202
  }
17003
17203
  function generateSOVPatientFirstWithDestEventHandlerPattern(commandSchema, profile, keyword, eventMarker, config2) {
@@ -17431,6 +17631,16 @@ function generateVSOVerbFirstEventHandlerPattern(commandSchema, profile, keyword
17431
17631
  });
17432
17632
  }
17433
17633
  }
17634
+ const extraction = {
17635
+ action: { value: commandSchema.action },
17636
+ event: { fromRole: "event" },
17637
+ [swapsOperands ? "destination" : "patient"]: {
17638
+ fromRole: swapsOperands ? "destination" : "patient"
17639
+ },
17640
+ ...swapsOperands ? {} : eventHandlerDestinationExtraction(commandSchema),
17641
+ ...eventHandlerSourceExtraction(commandSchema)
17642
+ };
17643
+ appendOptionalViewTransition(tokens, extraction, commandSchema, profile.code);
17434
17644
  return {
17435
17645
  id: `${commandSchema.action}-event-${profile.code}-vso-verb-first`,
17436
17646
  language: profile.code,
@@ -17441,15 +17651,7 @@ function generateVSOVerbFirstEventHandlerPattern(commandSchema, profile, keyword
17441
17651
  format: `${keyword.primary} {patient} ${destMarker?.primary || ""} {destination?} ${eventMarker.primary} {event}`,
17442
17652
  tokens
17443
17653
  },
17444
- extraction: {
17445
- action: { value: commandSchema.action },
17446
- event: { fromRole: "event" },
17447
- [swapsOperands ? "destination" : "patient"]: {
17448
- fromRole: swapsOperands ? "destination" : "patient"
17449
- },
17450
- ...swapsOperands ? {} : eventHandlerDestinationExtraction(commandSchema),
17451
- ...eventHandlerSourceExtraction(commandSchema)
17452
- }
17654
+ extraction
17453
17655
  };
17454
17656
  }
17455
17657
  function generateVSOVerbFirstTwoRoleEventHandlerPattern(commandSchema, profile, keyword, eventMarker, config2) {
@@ -17883,6 +18085,14 @@ function generateEventHandlerPatterns(commandSchema, profile, config2 = defaultC
17883
18085
  config2
17884
18086
  )
17885
18087
  );
18088
+ const sourceFronted = generateSOVPatientFirstSourceFrontedEventHandlerPattern(
18089
+ commandSchema,
18090
+ profile,
18091
+ keyword,
18092
+ eventMarker,
18093
+ config2
18094
+ );
18095
+ if (sourceFronted) patterns.push(sourceFronted);
17886
18096
  const destMarkerCheck = profile.roleMarkers.destination;
17887
18097
  if (destMarkerCheck && destMarkerCheck.primary !== eventMarker.primary) {
17888
18098
  patterns.push(
@@ -18042,7 +18252,11 @@ function buildRoleToken(roleSpec, profile) {
18042
18252
  type: "role",
18043
18253
  role: roleSpec.role,
18044
18254
  optional: !roleSpec.required,
18045
- expectedTypes: roleSpec.expectedTypes
18255
+ expectedTypes: roleSpec.expectedTypes,
18256
+ // The matcher reads this too \u2014 a `'keyword'`-shaped slot holds a fixed
18257
+ // keyword phrase (`using view transition`) and must not be skipped by the
18258
+ // trailing-slot verb guard.
18259
+ ...roleSpec.valueShape !== void 0 ? { valueShape: roleSpec.valueShape } : {}
18046
18260
  };
18047
18261
  const prefixLiteral = roleSpec.valuePrefixLiteral?.[profile.code];
18048
18262
  const pushPrefixed = () => {
@@ -21082,7 +21296,7 @@ function fillSchemaDefaults(node) {
21082
21296
  const roles = node.roles;
21083
21297
  for (const spec of schema.roles) {
21084
21298
  if (spec.default !== void 0 && !roles.has(spec.role)) {
21085
- roles.set(spec.role, { ...spec.default });
21299
+ roles.set(spec.role, { ...spec.default, implicit: true });
21086
21300
  }
21087
21301
  }
21088
21302
  }
@@ -24632,7 +24846,7 @@ function getGetPatternsBn() {
24632
24846
  tokens: [
24633
24847
  { type: "role", role: "source" },
24634
24848
  { type: "literal", value: "\u09A5\u09C7\u0995\u09C7" },
24635
- { type: "literal", value: "\u09AA\u09BE\u09A8", alternatives: ["\u09A8\u09BF\u09A8"] }
24849
+ { type: "literal", value: "\u09AA\u09BE\u09A8" }
24636
24850
  ]
24637
24851
  },
24638
24852
  extraction: {
@@ -24648,7 +24862,7 @@ function getGetPatternsBn() {
24648
24862
  template: {
24649
24863
  format: "\u09AA\u09BE\u09A8 {source}",
24650
24864
  tokens: [
24651
- { type: "literal", value: "\u09AA\u09BE\u09A8", alternatives: ["\u09A8\u09BF\u09A8"] },
24865
+ { type: "literal", value: "\u09AA\u09BE\u09A8" },
24652
24866
  { type: "role", role: "source" }
24653
24867
  ]
24654
24868
  },
@@ -24732,7 +24946,7 @@ function getGetPatternsIt() {
24732
24946
  template: {
24733
24947
  format: "ottenere {patient} da {source}",
24734
24948
  tokens: [
24735
- { type: "literal", value: "ottenere", alternatives: ["ottieni", "get", "prendere"] },
24949
+ { type: "literal", value: "ottenere", alternatives: ["ottieni", "get"] },
24736
24950
  { type: "role", role: "patient" },
24737
24951
  {
24738
24952
  type: "group",
@@ -24822,7 +25036,7 @@ function getGetPatternsRu() {
24822
25036
  template: {
24823
25037
  format: "\u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C {patient} \u0438\u0437 {source}",
24824
25038
  tokens: [
24825
- { type: "literal", value: "\u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C", alternatives: ["\u043F\u043E\u043B\u0443\u0447\u0438", "\u0432\u0437\u044F\u0442\u044C", "\u0432\u043E\u0437\u044C\u043C\u0438"] },
25039
+ { type: "literal", value: "\u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C", alternatives: ["\u043F\u043E\u043B\u0443\u0447\u0438"] },
24826
25040
  { type: "role", role: "patient" },
24827
25041
  {
24828
25042
  type: "group",
@@ -24847,7 +25061,7 @@ function getGetPatternsRu() {
24847
25061
  template: {
24848
25062
  format: "\u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C {patient}",
24849
25063
  tokens: [
24850
- { type: "literal", value: "\u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C", alternatives: ["\u043F\u043E\u043B\u0443\u0447\u0438", "\u0432\u0437\u044F\u0442\u044C", "\u0432\u043E\u0437\u044C\u043C\u0438"] },
25064
+ { type: "literal", value: "\u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C", alternatives: ["\u043F\u043E\u043B\u0443\u0447\u0438"] },
24851
25065
  { type: "role", role: "patient" }
24852
25066
  ]
24853
25067
  },
@@ -24888,7 +25102,7 @@ function getGetPatternsUk() {
24888
25102
  template: {
24889
25103
  format: "\u043E\u0442\u0440\u0438\u043C\u0430\u0442\u0438 {patient} \u0437 {source}",
24890
25104
  tokens: [
24891
- { type: "literal", value: "\u043E\u0442\u0440\u0438\u043C\u0430\u0442\u0438", alternatives: ["\u043E\u0442\u0440\u0438\u043C\u0430\u0439", "\u0432\u0437\u044F\u0442\u0438", "\u0432\u0456\u0437\u044C\u043C\u0438"] },
25105
+ { type: "literal", value: "\u043E\u0442\u0440\u0438\u043C\u0430\u0442\u0438", alternatives: ["\u043E\u0442\u0440\u0438\u043C\u0430\u0439"] },
24892
25106
  { type: "role", role: "patient" },
24893
25107
  {
24894
25108
  type: "group",
@@ -24913,7 +25127,7 @@ function getGetPatternsUk() {
24913
25127
  template: {
24914
25128
  format: "\u043E\u0442\u0440\u0438\u043C\u0430\u0442\u0438 {patient}",
24915
25129
  tokens: [
24916
- { type: "literal", value: "\u043E\u0442\u0440\u0438\u043C\u0430\u0442\u0438", alternatives: ["\u043E\u0442\u0440\u0438\u043C\u0430\u0439", "\u0432\u0437\u044F\u0442\u0438", "\u0432\u0456\u0437\u044C\u043C\u0438"] },
25130
+ { type: "literal", value: "\u043E\u0442\u0440\u0438\u043C\u0430\u0442\u0438", alternatives: ["\u043E\u0442\u0440\u0438\u043C\u0430\u0439"] },
24917
25131
  { type: "role", role: "patient" }
24918
25132
  ]
24919
25133
  },
@@ -24933,7 +25147,7 @@ function getGetPatternsVi() {
24933
25147
  template: {
24934
25148
  format: "l\u1EA5y gi\xE1 tr\u1ECB c\u1EE7a {target}",
24935
25149
  tokens: [
24936
- { type: "literal", value: "l\u1EA5y gi\xE1 tr\u1ECB", alternatives: ["nh\u1EADn", "l\u1EA5y"] },
25150
+ { type: "literal", value: "l\u1EA5y gi\xE1 tr\u1ECB", alternatives: ["nh\u1EADn"] },
24937
25151
  { type: "group", optional: true, tokens: [{ type: "literal", value: "c\u1EE7a" }] },
24938
25152
  { type: "role", role: "patient" }
24939
25153
  ]
@@ -24944,13 +25158,17 @@ function getGetPatternsVi() {
24944
25158
  },
24945
25159
  {
24946
25160
  id: "get-vi-simple",
25161
+ // Head was `l\u1ea5y` (alt `l\u1ea5y gi\u00e1 tr\u1ecb`) \u2014 but bare `l\u1ea5y` is vi's TAKE verb,
25162
+ // so this pattern claimed every `l\u1ea5y .active t\u1eeb \u2026`. vi's get verb is the
25163
+ // three-word `l\u1ea5y gi\u00e1 tr\u1ecb` ("take the value of"), which is what the i18n
25164
+ // transformer renders; the bare form has no valid `get` surface.
24947
25165
  language: "vi",
24948
25166
  command: "get",
24949
25167
  priority: 90,
24950
25168
  template: {
24951
- format: "l\u1EA5y {target}",
25169
+ format: "l\u1EA5y gi\xE1 tr\u1ECB {target}",
24952
25170
  tokens: [
24953
- { type: "literal", value: "l\u1EA5y", alternatives: ["nh\u1EADn", "l\u1EA5y gi\xE1 tr\u1ECB"] },
25171
+ { type: "literal", value: "l\u1EA5y gi\xE1 tr\u1ECB", alternatives: ["nh\u1EADn"] },
24954
25172
  { type: "role", role: "patient" }
24955
25173
  ]
24956
25174
  },
@@ -26726,7 +26944,7 @@ function makePickVariantPattern(language, spec) {
26726
26944
  tokens
26727
26945
  },
26728
26946
  extraction: {
26729
- method: { position: 1 },
26947
+ method: { position: 1, transform: retypePickUnitWord },
26730
26948
  patient: { position: 2 },
26731
26949
  source: {
26732
26950
  marker: spec.srcMarker,
@@ -26758,7 +26976,7 @@ function makePickVerbFinalPattern(language, spec) {
26758
26976
  },
26759
26977
  extraction: {
26760
26978
  source: { position: 0 },
26761
- method: { position: 2 },
26979
+ method: { position: 2, transform: retypePickUnitWord },
26762
26980
  patient: { position: 3 }
26763
26981
  }
26764
26982
  };
@@ -28268,7 +28486,7 @@ function createRuntimeInstance(options) {
28268
28486
  return new Runtime(options);
28269
28487
  }
28270
28488
  function getVersion() {
28271
- return "2.0.0";
28489
+ return VERSION$1;
28272
28490
  }
28273
28491
  function toCompileError(error) {
28274
28492
  return {
@@ -29384,7 +29602,7 @@ async function semanticNodeToRuntimeAST(node) {
29384
29602
  const fw = await getFramework();
29385
29603
  return fw.semanticNodeToRuntimeAST(node);
29386
29604
  }
29387
- var COMMAND_NAMES, COMMAND_MANIFEST, KEYWORDS$1, COMMAND_TERMINATORS, COMMANDS, COMPOUND_COMMANDS, CONTROL_FLOW_COMMANDS, PUT_OPERATIONS, PUT_OPERATION_KEYWORDS, HYPERSCRIPT_KEYWORDS, CommandClassification, CSS_FUNCTIONS, CONTEXT_VARS$1, LOGICAL_OPERATORS$1, COMPARISON_OPERATORS, DOM_EVENTS, TOKENIZER_KEYWORDS, TokenKind, MATHEMATICAL_OPERATORS, TIME_UNITS$1, isDebugEnabled$1, DEBUG, debug, debugEnabled, debugEventTarget, stats, DEFAULT_CONFIDENCE_THRESHOLD$1, SemanticIntegrationAdapter, STOP_TOKENS, STOP_DELIMITERS, CORE_FRAGMENT, PARSER_COMPARISON_FRAGMENT, ASSIGNMENT_FRAGMENT, PARSER_TABLE, FEATURE_REGISTRY, NODE_EVALUATORS, NODE_WRITERS, GLOBAL_WRITE_HOOKS, GLOBAL_READ_HOOKS, LOCAL_WRITE_HOOKS, LOCAL_READ_HOOKS, ParserExtensionRegistry, SINGLETON, WINDOW_KEY, MULTI_WORD_PATTERNS, DEFAULT_BOUNDARY_KEYWORDS, CommandNodeBuilder, OPERAND_INTRODUCERS, CONTEXT_POSSESSIVES, SWAP_STRATEGY_KEYWORDS, ELEMENT_PRONOUNS, GO_KEYWORDS, URL_HARD_STOPS, STRING_POSTFIX_UNITS, STRING_POSTFIX_BP, Parser, HookRegistry, sharedGlobals, elementScopes, ExpressionTypeRegistry, expressionTypeRegistry, BOOLEAN_ATTRIBUTES, SPECIAL_DOM_PROPERTIES, NUMBER_WORDS, conversionConfig, defaultConversions, TYPE_ALIASES, asExpression, isExpression, asyncExpression, conversionExpressions, UNSAFE_PROPS, possessiveExpression, myExpression, itsExpression$1, yourExpression, ofExpression, attributeExpression, attributeWithValueExpression, classReferenceExpression, idReferenceExpression, propertiesExpressions, NotSyncEvaluable, cachedFullRegistry, RAW_ARG_BUILTINS, CSS_PSEUDO_CLASSES, PSEUDO_CLASS_COLON_RE, BARE_REF_ESCAPE_RE, QUERY_REF_INTERP_RE, CleanupRegistry, EventSourceRegistry, ContextProviderRegistry, canonicalEvaluator, ContextBridge, CommandAdapterV2, CommandRegistryV2, defaultRegistry, RegistryIntegration, eventRecursionDepth, RuntimeBase, meExpression, youExpression, itExpression, itsExpression, resultExpression, querySelectorExpression, querySelectorAllExpression, idExpression, classExpression, closestExpression, parentExpression, windowExpression, documentExpression, elementWithSelectorExpression, styleRefExpression, possessiveStyleRefExpression, ofStyleRefExpression, referencesExpressions, isProduction, skipValidation, addDescribeToValidator, v, z, LRUCache, HyperscriptCache, globalCache, PerformanceTracker, performanceTracker, cleanupInterval, ComparisonInputSchema, PatternMatchingInputSchema, equalsExpression, strictEqualsExpression, notEqualsExpression, strictNotEqualsExpression, lessThanExpression, lessThanOrEqualExpression, greaterThanExpression, greaterThanOrEqualExpression, andExpression, orExpression, notExpression, isEmptyExpression, noExpression, isNotEmptyExpression, existsExpression, doesNotExistExpression, containsExpression, doesNotContainExpression, startsWithExpression, endsWithExpression, betweenExpression, matchesExpression, hasExpression, doesNotHaveExpression, logicalExpressions, BaseExpressionImpl, StringLiteralInputSchema, NumberLiteralInputSchema, BooleanLiteralInputSchema, BinaryOperationInputSchema, StringLiteralExpression, NumberLiteralExpression, BooleanLiteralExpression, AdditionExpression$1, StringConcatenationExpression, MultiplicationExpression$1, specialExpressions, firstExpression, lastExpression, atExpression, nextExpression, previousExpression, DOCUMENT_POSITION_PRECEDING, DOCUMENT_POSITION_FOLLOWING, nextWithinExpression, previousWithinExpression, positionalExpressions, AdditionExpression2, SubtractionExpression, MultiplicationExpression2, DivisionExpression, ModuloExpression, PowerExpression, mathematicalExpressions, index$3, KEYWORD_PREPOSITIONS, VisibilityCommandBase, HideCommand, createHideCommand, ShowCommand, createShowCommand, SMART_ELEMENT_TAGS, DOMModificationBase, AddCommand, createAddCommand, positionMap, RemoveCommand, createRemoveCommand, PATTERN, BOOL_PROPS, ToggleCommand, createToggleCommand, PutCommand, createPutCommand, HTML_ESCAPE, MakeCommand, createMakeCommand, EmptyCommand, createEmptyCommand, OpenCommand, createOpenCommand, CloseCommand, createCloseCommand, SelectCommand, createSelectCommand, ResetCommand, createResetCommand, SUPPORTS_MOVE_BEFORE, ELEMENT_NODE_TYPE, TEXT_NODE_TYPE, IS_PARENT_NODE_TYPE, Operation, candidateNodes, candidateElements, candidateElementsWithIds, unmatchedNodes, unmatchedElements, whitespaceNodes, _idArrayMap, _idSetMap, _options, _Morph_instances, morphOneToMany_fn, morphOneToOne_fn, morphMatchingElements_fn, morphNonMatchingElements_fn, morphOtherNode_fn, visitAttributes_fn, visitTextArea_fn, replaceNode_fn, removeNode_fn, mapIdArraysForEach_fn, mapIdArrays_fn, mapIdSets_fn, Morph, morphAdapter, queue, processing, STRATEGY_KEYWORDS, SwapCommand, MorphCommand, createSwapCommand, createMorphCommand, CRITICAL_LAYOUT_ELEMENTS, STRUCTURAL_SEMANTIC_ELEMENTS, WARNING_ELEMENTS, DEFAULT_VALIDATION_CONFIG, globalConfig, STYLES, SEVERITY_ICONS, SEVERITY_LABELS, STRATEGY_MAP, ProcessPartialsCommand, createProcessPartialsCommand, WaitCommand, createWaitCommand, customResponseTypes, DEFAULT_FETCH_THROWS_ON, fetchThrowsOnPatterns, FetchCommand, createFetchCommand, SetCommand, createSetCommand, GetCommand, createGetCommand, NumericModifyCommand, createIncrementCommand, ClearCommand, createClearCommand, LogCommand, createLogCommand, EventDispatchCommand, createTriggerCommand, GoCommand, createGoCommand, KEYWORDS, HistoryCommand, createPushUrlCommand, ScrollCommand, createScrollCommand, ConditionalCommand, createConditionalCommand, createIfCommand, RepeatCommand, createRepeatCommand, ControlFlowSignalBase, BreakCommand, createBreakCommand, ContinueCommand, createContinueCommand, HaltCommand, createHaltCommand, ReturnCommand, createReturnCommand, ExitCommand, createExitCommand, ThrowCommand, createThrowCommand, CallCommand, createCallCommand, FocusCommand, createFocusCommand, BlurCommand, createBlurCommand, PseudoCommand, ContentInsertionCommand, AppendCommand, createAppendCommand, PrependCommand, createPrependCommand, TransitionCommand, createTransitionCommand, MeasureCommand, createMeasureCommand, SettleCommand, createSettleCommand, StartViewTransitionCommand, createStartViewTransitionCommand, TakeCommand, createTakeCommand, JsCommand, createJsCommand, AsyncCommand, createAsyncCommand, DefaultCommand, createDefaultCommand, TellCommand, createTellCommand, CopyCommand, createCopyCommand, PickCommand, createPickCommand, BeepCommand, createBeepCommand, BreakpointCommand, createBreakpointCommand, InstallCommand, RenderCommand, COMMAND_FACTORIES, Runtime, DEFAULT_REFERENCES, STRUCTURAL_ROLES, CHAIN_KEYWORDS, VERSION_HEADER_RE, VALID_KINDS, VALID_VALUE_TYPES$1, VALID_CHAIN_TYPES, VALID_ASYNC_VARIANTS, VALID_DIAGNOSTIC_LEVELS, DebugLogger, _PatternMatcher$1, PatternMatcher$1, patternMatcher$1, defaultConfig$1, GrammarTransformer, InMemoryDictionary, NullDictionary, InMemoryProfileProvider, NullProfileProvider, StringLiteralExtractor, NumberExtractor, IdentifierExtractor, UnicodeIdentifierExtractor, LatinExtendedIdentifierExtractor, SELECTOR_BODY_CHAR, PARTICLE_SCRIPT_CHAR, CssSelectorExtractor$1, WhitespaceExtractor, VALID_VALUE_TYPES, SCROLL_MARKERS, URL_MARKERS, PARTIALS_IN_MARKERS, DSLRegistry, MultilingualDSLImpl, DomainRegistry, COMMENT_PATTERN, CrossDomainDispatcher, DomainAwareScanner, AOTOrchestrator, TokenStreamImpl, DEFAULT_OPERATORS$1, OperatorExtractor$1, DEFAULT_PUNCTUATION$1, PunctuationExtractor$1, SIMPLE_TOKENIZER_OPERATOR_SET, MARKER_CONCEPT_NORMALIZEDS, ENGLISH_DOM_EVENT_NAMES, _BaseTokenizer, BaseTokenizer, BaseMorphologicalNormalizer, PatternTracker, MultiStatementParserImpl, index$2, __defProp2, __getOwnPropNames2, __esm2, __export2, SchemaErrorCodes, SchemaErrorMessages, SchemaErrorSuggestions, init_schema_error_codes, schema_validator_exports, MULTI_TYPE_PATIENT_COMMANDS, NO_REQUIRED_ROLES_COMMANDS, init_schema_validator, toggleSchema, addSchema, removeSchema, putSchema, setSchema, bindSchema, liveSchema, eventsourceSchema, socketSchema, workerSchema, interceptSchema, showSchema, hideSchema, onSchema, triggerSchema, waitSchema, fetchSchema, incrementSchema, decrementSchema, appendSchema, prependSchema, logSchema, getCommandSchema, takeSchema, makeSchema, haltSchema, settleSchema, throwSchema, sendSchema, ifSchema, unlessSchema, elseSchema, repeatSchema, forSchema, whileSchema, continueSchema, URL_MARKER_ALL_LANGS, goSchema, transitionSchema, cloneSchema, focusSchema, blurSchema, emptySchema, openSchema, closeSchema, selectSchema, clearSchema, resetSchema, breakpointSchema, callSchema, returnSchema, jsSchema, asyncSchema, tellSchema, defaultSchema, initSchema, behaviorSchema, installSchema, measureSchema, swapSchema, morphSchema, beepSchema, breakSchema, copySchema, exitSchema, pickSchema, scrollSchema, PARTIALS_IN_MARKER_ALL_LANGS, pushSchema, replaceSchema, processSchema, renderSchema, commandSchemas, init_command_schemas, tokenizers, profiles, patternCache, patternGenerator, registeredPatterns, init_registry, arabic_exports, arabicProfile, init_arabic, bengali_exports, bengaliProfile, init_bengali, german_exports, germanProfile, init_german, english_exports, englishProfile, init_english, spanish_exports, spanishProfile, init_spanish, french_exports, frenchProfile, init_french, he_exports, hebrewProfile, init_he, hindi_exports, hindiProfile, init_hindi, indonesian_exports, indonesianProfile, init_indonesian, italian_exports, italianProfile, init_italian, japanese_exports, japaneseProfile, init_japanese, korean_exports, koreanProfile, init_korean, ms_exports, malayProfile, init_ms, polish_exports, polishProfile, init_polish, portuguese_exports, portugueseProfile, init_portuguese, quechua_exports, quechuaProfile, init_quechua, russian_exports, russianProfile, init_russian, swahili_exports, swahiliProfile, init_swahili, thai_exports, thaiProfile, init_thai, tl_exports, tagalogProfile, init_tl, turkish_exports, turkishProfile, init_turkish, ukrainian_exports, ukrainianProfile, init_ukrainian, vietnamese_exports, vietnameseProfile, init_vietnamese, chinese_exports, chineseProfile, init_chinese, PUT_POSITIONAL, PUT_AT_END, init_put, init_token_utils, init_char_classifiers, init_base_tokenizer, init_base, DEFAULT_OPERATORS, OperatorExtractor2, DEFAULT_PUNCTUATION, PunctuationExtractor2, init_generic_extractors, CssSelectorExtractor2, init_css_selector, EventModifierExtractor, init_event_modifier, URL_PREFIXES, UrlExtractor, init_url, VariableRefExtractor, init_variable_ref, JapaneseKeywordExtractor, init_japanese_keyword, SINGLE_CHAR_PARTICLES, MULTI_CHAR_PARTICLES, JapaneseParticleExtractor, init_japanese_particle, TEMPORAL_EVENT_SUFFIXES, KoreanKeywordExtractor, init_korean_keyword, SINGLE_CHAR_PARTICLES2, MULTI_CHAR_PARTICLES2, KoreanParticleExtractor, init_korean_particle, ChineseKeywordExtractor, init_chinese_keyword, SINGLE_CHAR_PARTICLES3, MULTI_CHAR_PARTICLES3, ChineseParticleExtractor, init_chinese_particle, isVietnameseLetter, isVietnameseIdentifierChar, PREPOSITIONS, VietnameseKeywordExtractor, init_vietnamese_keyword, isArabic, PREPOSITIONS2, ArabicKeywordExtractor, init_arabic_keyword, isArabic2, PROCLITICS, NON_PROCLITIC_WORDS, ArabicProcliticExtractor, init_arabic_proclitic, isArabic3, TEMPORAL_MARKERS, ArabicTemporalExtractor, init_arabic_temporal, CyrillicKeywordExtractor, RUSSIAN_PREPOSITIONS, UKRAINIAN_PREPOSITIONS, init_cyrillic_keyword, HindiKeywordExtractor, init_hindi_keyword, SINGLE_POSTPOSITIONS, COMPOUND_POSTPOSITIONS, HindiParticleExtractor, init_hindi_particle, BengaliKeywordExtractor, init_bengali_keyword, SINGLE_POSTPOSITIONS2, BengaliParticleExtractor, init_bengali_particle, ThaiKeywordExtractor, init_thai_keyword, MalayKeywordExtractor, init_malay_keyword, PREPOSITIONS3, TagalogKeywordExtractor, init_tagalog_keyword, PREPOSITIONS4, isPolishLetter, isPolishIdentifierChar, PolishKeywordExtractor, init_polish_keyword, PREPOSITIONS5, isIndonesianLetter, isIndonesianIdentifierChar, IndonesianKeywordExtractor, init_indonesian_keyword, PREPOSITIONS6, isSwahiliLetter, isSwahiliIdentifierChar, SwahiliKeywordExtractor, init_swahili_keyword, POSTPOSITIONS, CASE_SUFFIXES, TurkishKeywordExtractor, init_turkish_keyword, SUFFIXES, POSTPOSITIONS2, AGGLUTINATIVE_MARKERS, QuechuaKeywordExtractor, init_quechua_keyword, isHebrew, PREPOSITIONS7, CONJUNCTIONS, HebrewKeywordExtractor, init_hebrew_keyword, isHebrew2, PROCLITIC_PREFIXES, EVENT_MARKER_PREFIXES, EVENT_NAMES, HebrewProcliticExtractor, init_hebrew_proclitic, AsciiIdentifierExtractor, init_ascii_identifier, init_extractors, init_extractor_helpers, EnglishKeywordExtractor, init_english_keyword, english_exports2, ENGLISH_EXTRAS, EnglishTokenizer, englishTokenizer, init_english2, init_types, JAPANESE_SUFFIX_RULES, SURU_PATTERNS, JapaneseMorphologicalNormalizer, init_japanese_normalizer, japanese_exports2, PARTICLES, JAPANESE_EXTRAS, JapaneseTokenizer, japaneseTokenizer, init_japanese2, KOREAN_SUFFIX_RULES, HADA_PATTERNS, KoreanMorphologicalNormalizer, init_korean_normalizer, korean_exports2, PARTICLES2, KOREAN_EXTRAS, KoreanTokenizer, koreanTokenizer, init_korean2, COMBINED_PREFIXES, SINGLE_PREFIXES, VERB_PREFIXES, SUFFIXES2, ArabicMorphologicalNormalizer, init_arabic_normalizer, arabic_exports2, CONJUNCTIONS2, PREPOSITIONS8, ARABIC_EXTRAS, ArabicTokenizer, arabicTokenizer, init_arabic2, AR_ENDINGS, ER_ENDINGS, IR_ENDINGS, ALL_ENDINGS, SpanishMorphologicalNormalizer, init_spanish_normalizer, isSpanishLetter, isSpanishIdentifierChar, PREPOSITIONS9, SpanishKeywordExtractor, init_spanish_keyword, spanish_exports2, PREPOSITIONS10, SPANISH_EXTRAS, SpanishTokenizer, spanishTokenizer, init_spanish2, TURKISH_SUFFIX_RULES, TurkishMorphologicalNormalizer, init_turkish_normalizer, turkish_exports2, POSTPOSITIONS3, CASE_SUFFIXES2, TURKISH_EXTRAS, TurkishTokenizer, turkishTokenizer, init_turkish2, chinese_exports2, PARTICLES3, CHINESE_EXTRAS, ChineseTokenizer, chineseTokenizer, init_chinese2, REFLEXIVE_SUFFIXES, AR_ENDINGS2, ER_ENDINGS2, IR_ENDINGS2, ALL_ENDINGS2, PortugueseMorphologicalNormalizer, init_portuguese_normalizer, isPortugueseLetter, isPortugueseIdentifierChar, PREPOSITIONS11, PortugueseKeywordExtractor, init_portuguese_keyword, portuguese_exports2, PREPOSITIONS12, PORTUGUESE_EXTRAS, PortugueseTokenizer, portugueseTokenizer, init_portuguese2, REFLEXIVE_SUFFIXES2, ER_ENDINGS3, IR_ENDINGS3, RE_ENDINGS, ALL_ENDINGS3, FrenchMorphologicalNormalizer, init_french_normalizer, isFrenchLetter, isFrenchIdentifierChar, PREPOSITIONS13, FrenchKeywordExtractor, init_french_keyword, french_exports2, FRENCH_EXTRAS, FrenchTokenizer, frenchTokenizer, init_french2, SEPARABLE_PREFIXES, VERB_ENDINGS, ELN_ERN_ENDINGS, ALL_ENDINGS4, GermanMorphologicalNormalizer, init_german_normalizer, isGermanLetter, isGermanIdentifierChar, PREPOSITIONS14, GermanKeywordExtractor, init_german_keyword, german_exports2, GERMAN_EXTRAS, GermanTokenizer, germanTokenizer, init_german2, indonesian_exports2, PREPOSITIONS15, INDONESIAN_EXTRAS, IndonesianTokenizer, indonesianTokenizer, init_indonesian2, QUECHUA_SUFFIX_RULES, QuechuaMorphologicalNormalizer, quechuaMorphologicalNormalizer, init_quechua_normalizer, quechua_exports2, QuechuaStringLiteralExtractor, SUFFIXES3, QUECHUA_EXTRAS, QuechuaTokenizer, quechuaTokenizer, init_quechua2, swahili_exports2, PREPOSITIONS16, SWAHILI_EXTRAS, SwahiliTokenizer, swahiliTokenizer, init_swahili2, REFLEXIVE_SUFFIXES3, ARE_ENDINGS, ERE_ENDINGS, IRE_ENDINGS, ALL_ENDINGS5, ItalianMorphologicalNormalizer, init_italian_normalizer, RomanceKeywordExtractor, ITALIAN_PREPOSITIONS, init_romance_language_keyword, italian_exports2, PREPOSITIONS17, ITALIAN_EXTRAS, ItalianTokenizer, italianTokenizer, init_italian2, vietnamese_exports2, VIETNAMESE_EXTRAS, VietnameseTokenizer, vietnameseTokenizer, init_vietnamese2, IMPERATIVE_TO_INFINITIVE, PolishMorphologicalNormalizer, init_polish_normalizer, polish_exports2, PREPOSITIONS18, POLISH_EXTRAS, PolishTokenizer, polishTokenizer, init_polish2, IMPERATIVE_TO_INFINITIVE2, RussianMorphologicalNormalizer, init_russian_normalizer, russian_exports2, PREPOSITIONS19, RUSSIAN_EXTRAS, RussianTokenizer, russianTokenizer, init_russian2, IMPERATIVE_TO_INFINITIVE3, UkrainianMorphologicalNormalizer, init_ukrainian_normalizer, ukrainian_exports2, PREPOSITIONS20, UKRAINIAN_EXTRAS, UkrainianTokenizer, ukrainianTokenizer, init_ukrainian2, he_exports2, PREPOSITIONS21, HEBREW_EXTRAS, HebrewTokenizer, hebrewTokenizer, init_he2, SUFFIX_RULES, HindiMorphologicalNormalizer, init_hindi_normalizer, hindi_exports2, SINGLE_POSTPOSITIONS3, HINDI_EXTRAS, HindiTokenizer, hindiTokenizer, init_hindi2, SUFFIX_RULES2, BengaliMorphologicalNormalizer, bengaliMorphologicalNormalizer, init_bengali_normalizer, bengali_exports2, SINGLE_POSTPOSITIONS4, BENGALI_EXTRAS, BengaliTokenizer, bengaliTokenizer, init_bengali2, thai_exports2, THAI_EXTRAS, ThaiTokenizer, thaiTokenizer, init_thai2, ms_exports2, MALAY_EXTRAS, MalayTokenizer, malayTokenizer, init_ms2, COMBINED_PREFIXES2, SINGLE_PREFIXES2, INFIXES, SUFFIXES4, TagalogMorphologicalNormalizer, tagalogMorphologicalNormalizer, init_tagalog_normalizer, tl_exports2, TAGALOG_EXTRAS, TagalogTokenizer, tagalogTokenizer, init_tl2, eventNameTranslations, eventNameLocalizations, eventLocalizationDenylist, init_event_handler, init_role_positioning, init_marker_resolution, init_event_handlers_sov, init_event_handlers_vso, defaultConfig, init_pattern_generator, fetchWithResponseTypeEnglish, fetchWithOptionsAndResponseTypeEnglish, fetchWithOptionsEnglish, fetchSimpleEnglish, fetchPatternsEn, init_fetch, pickVariantEnglish, pickPatternsEn, init_pick, swapSimpleEnglish, swapElementEnglish, swapStrategyOfEnglish, swapStrategyEnglish, swapPatternsEn, init_swap, init_toggle, VERB_FIRST_REPEAT_TIMES, SOV_REPEAT_TIMES, FOR_IN_HEADS, WHILE_HEADS, VERB_FIRST_UNTIL_HEADS, repeatUntilHeadQuMidClause, SOV_UNTIL_HEADS, repeatUntilHeadQu, SOV_FOR_BINDING_HEADS, BY_LANG, addPattern, init_repeat, init_wait, en_exports, repeatUntilEventFromEnglish, repeatUntilEventEnglish, repeatTimesEnglish, repeatForeverEnglish, setPossessiveEnglish, forEnglish, ifEnglish, unlessEnglish, temporalInEnglish, temporalAfterEnglish, init_en, DEFAULT_CONFIDENCE_THRESHOLD, HIGH_CONFIDENCE_THRESHOLD, CONTEXT_VARS, LOGICAL_OPERATORS, BOOLEAN_LITERALS, COMPARISON_KEYWORDS, POSITIONAL_KEYWORDS, TIME_UNITS, POSSESSIVE_CONTEXT_TYPES, POSTFIX_STOP_WORDS, POSITIONAL_CALL_KEYWORDS, ExpressionParser, waitMapper, putMapper, goMapper, RANGE_METHODS, COUNT_METHODS, REGEX_METHODS, pickMapper, mappers, ASTBuilder, KNOWN_PROFILES, PROPERTY_NAME_LEXICON, CONNECTIVE_LEXICON, OF_POSSESSIVE_MARKERS, ROLE_CONCEPT_TO_ENGLISH_LOCATIVE, LOCATIVE_SURFACES, ENGLISH_LOCATIVE_SENSES, POSITIONAL_KEYWORDS2, POSITIONAL_HEAD_DUALS, COMMAND_ACTION_KEYWORDS, AMBIGUOUS_SENSES, SENSE_PREDICATE_NORMALIZED, CONVERSION_TYPE_NAMES, CURATED_END_KEYWORDS, MAX_FOLD_TOKENS, KEY_RE, FUSED_PAIR_RE, OPTIONAL_ROLE_WEIGHT, DEFAULT_PARTIAL_CREDIT, MAX_STEM_PENALTY, STEM_PENALTY_FLOOR, VSO_VERB_BOOST, MAX_PREPOSITION_ADJUSTMENT, ARABIC_VERBS, PREFERRED_PREPOSITIONS, DefaultConfidenceModel, defaultConfidenceModel, BAREKEYWORD_BLOCK_ACTIONS, _PatternMatcher2, PatternMatcher, patternMatcher, OPENER_ACTIONS, PASCAL_CASE_NAME, OPENER_NORMS, TARGET_REFERENCES, ROLE_CONCEPTS, TRIGGER_SIGNATURE_LANGS, DEF_NAME, FEATURE_ACTIONS, OPAQUE_BODY_FEATURES, NAMED_FEATURES, HANDLER_BODY_FEATURES, DEF_BODY_FEATURES, SOV_KEYWORD_SEARCH_LIMIT, INTERCEPT_SOV_KEYWORD_LIMIT, MODIFIER_KEYWORDS, ONCE_SEQUENCES, DURATION_RE, EXCLUDED_FIRST_KINDS, BLOCK_HEADER_ACTIONS, BLOCK_NEEDS_TRAILING_END, SemanticRendererImpl, semanticRenderer, hyperscriptSchemaLookup, BLOCK_BODY_ACTIONS, NON_VALUE_KEYWORDS, POSITIONAL_VALUE_KEYWORDS, WAITABLE_EVENT_WORDS, SemanticParseError, MAX_UNCONSUMED_SPAN_CHARS, COVERAGE_RESIDUE_NORMALIZED, NORMALIZE_CHILD_FIELDS, _SemanticParserImpl, SemanticParserImpl, semanticParser, SemanticCache2, semanticCache, LANGUAGE_IMPORTERS, SUPPORTED_LANGUAGES, VERB_INITIAL_SPECS, VERB_FINAL_SPECS, repeatUntilEventFromEnglish2, repeatUntilEventEnglish2, repeatPatternsEn, setPossessiveEnglish2, setPatternsEn, forEnglish2, ifEnglish2, unlessEnglish2, controlFlowPatternsEn, temporalInEnglish2, temporalAfterEnglish2, temporalPatternsEn, allEnglishOnlyPatterns, PATTERN_LOADERS, _generatedPatternsPerLanguage, handcraftedLanguages, patternCache2, _allPatterns, schemaRegistry, DEFAULT_CONFIG, HIGH_FREQUENCY_TRIGGERS, THROTTLE_RECOMMENDED_TRIGGERS, _devModeEnabled, _devModeConfig, VERSION, index$1, HistorySwapBehavior, BoostedBehavior, DEFAULT_EVENT_TYPE, DEFAULT_LANGUAGE$1, compileSyncFn, compileAsyncFn, getRuntimeFn, configRef, RingBuffer, HISTORY_CAPACITY, DebugController, DEFAULT_LANGUAGE, ASTCache, astCache, semanticAnalyzerInstance, bridgeInstance, config, _defaultRuntime, _debugController, hyperscript, lokascript, OP_TABLE, Lexer, Tokens, MAX_HISTORY_SIZE$5, DefInputSchema, TypedDefFeatureImplementation, enhancedDefImplementation, MAX_HISTORY_SIZE$4, EnhancedOnInputSchema, TypedOnFeatureImplementation, enhancedOnImplementation, MAX_HISTORY_SIZE$3, BehaviorsInputSchema, TypedBehaviorsFeatureImplementation, enhancedBehaviorsImplementation, MAX_HISTORY_SIZE$2, SocketsInputSchema, TypedSocketsFeatureImplementation, enhancedSocketsImplementation, MAX_HISTORY_SIZE$1, WebWorkerInputSchema, TypedWebWorkerFeatureImplementation, enhancedWebWorkerImplementation, MAX_HISTORY_SIZE, EventSourceInputSchema, TypedEventSourceFeatureImplementation, enhancedEventSourceImplementation, INTERCHANGE_ADAPTER, POS, DiagnosticSeverity, SymbolKind, CompletionItemKind, _semanticModule, SemanticGrammarBridge, bridge, _fw, index;
29605
+ var COMMAND_NAMES, COMMAND_MANIFEST, KEYWORDS$1, COMMAND_TERMINATORS, COMMANDS, COMPOUND_COMMANDS, CONTROL_FLOW_COMMANDS, PUT_OPERATIONS, PUT_OPERATION_KEYWORDS, HYPERSCRIPT_KEYWORDS, CommandClassification, CSS_FUNCTIONS, CONTEXT_VARS$1, LOGICAL_OPERATORS$1, COMPARISON_OPERATORS, DOM_EVENTS, TOKENIZER_KEYWORDS, TokenKind, MATHEMATICAL_OPERATORS, TIME_UNITS$1, isDebugEnabled$1, DEBUG, debug, debugEnabled, debugEventTarget, stats, DEFAULT_CONFIDENCE_THRESHOLD$1, SemanticIntegrationAdapter, STOP_TOKENS, STOP_DELIMITERS, CORE_FRAGMENT, PARSER_COMPARISON_FRAGMENT, ASSIGNMENT_FRAGMENT, PARSER_TABLE, FEATURE_REGISTRY, NODE_EVALUATORS, NODE_WRITERS, GLOBAL_WRITE_HOOKS, GLOBAL_READ_HOOKS, LOCAL_WRITE_HOOKS, LOCAL_READ_HOOKS, ParserExtensionRegistry, SINGLETON, WINDOW_KEY, MULTI_WORD_PATTERNS, DEFAULT_BOUNDARY_KEYWORDS, CommandNodeBuilder, OPERAND_INTRODUCERS, CONTEXT_POSSESSIVES, SWAP_STRATEGY_KEYWORDS, ELEMENT_PRONOUNS, GO_KEYWORDS, URL_HARD_STOPS, STRING_POSTFIX_UNITS, STRING_POSTFIX_BP, Parser, HookRegistry, sharedGlobals, elementScopes, ExpressionTypeRegistry, expressionTypeRegistry, BOOLEAN_ATTRIBUTES, SPECIAL_DOM_PROPERTIES, NUMBER_WORDS, conversionConfig, defaultConversions, TYPE_ALIASES, asExpression, isExpression, asyncExpression, conversionExpressions, UNSAFE_PROPS, possessiveExpression, myExpression, itsExpression$1, yourExpression, ofExpression, attributeExpression, attributeWithValueExpression, classReferenceExpression, idReferenceExpression, propertiesExpressions, NotSyncEvaluable, cachedFullRegistry, RAW_ARG_BUILTINS, CSS_PSEUDO_CLASSES, PSEUDO_CLASS_COLON_RE, BARE_REF_ESCAPE_RE, QUERY_REF_INTERP_RE, CleanupRegistry, EventSourceRegistry, ContextProviderRegistry, canonicalEvaluator, ContextBridge, CommandAdapterV2, CommandRegistryV2, defaultRegistry, RegistryIntegration, eventRecursionDepth, RuntimeBase, meExpression, youExpression, itExpression, itsExpression, resultExpression, querySelectorExpression, querySelectorAllExpression, idExpression, classExpression, closestExpression, parentExpression, windowExpression, documentExpression, elementWithSelectorExpression, styleRefExpression, possessiveStyleRefExpression, ofStyleRefExpression, referencesExpressions, isProduction, skipValidation, addDescribeToValidator, v, z, LRUCache, HyperscriptCache, globalCache, PerformanceTracker, performanceTracker, cleanupInterval, ComparisonInputSchema, PatternMatchingInputSchema, equalsExpression, strictEqualsExpression, notEqualsExpression, strictNotEqualsExpression, lessThanExpression, lessThanOrEqualExpression, greaterThanExpression, greaterThanOrEqualExpression, andExpression, orExpression, notExpression, isEmptyExpression, noExpression, isNotEmptyExpression, existsExpression, doesNotExistExpression, containsExpression, doesNotContainExpression, startsWithExpression, endsWithExpression, betweenExpression, matchesExpression, hasExpression, doesNotHaveExpression, logicalExpressions, BaseExpressionImpl, StringLiteralInputSchema, NumberLiteralInputSchema, BooleanLiteralInputSchema, BinaryOperationInputSchema, StringLiteralExpression, NumberLiteralExpression, BooleanLiteralExpression, AdditionExpression$1, StringConcatenationExpression, MultiplicationExpression$1, specialExpressions, firstExpression, lastExpression, atExpression, nextExpression, previousExpression, DOCUMENT_POSITION_PRECEDING, DOCUMENT_POSITION_FOLLOWING, nextWithinExpression, previousWithinExpression, positionalExpressions, AdditionExpression2, SubtractionExpression, MultiplicationExpression2, DivisionExpression, ModuloExpression, PowerExpression, mathematicalExpressions, index$3, KEYWORD_PREPOSITIONS, VisibilityCommandBase, HideCommand, createHideCommand, ShowCommand, createShowCommand, SMART_ELEMENT_TAGS, DOMModificationBase, AddCommand, createAddCommand, positionMap, RemoveCommand, createRemoveCommand, PATTERN, BOOL_PROPS, ToggleCommand, createToggleCommand, PutCommand, createPutCommand, HTML_ESCAPE, MakeCommand, createMakeCommand, EmptyCommand, createEmptyCommand, OpenCommand, createOpenCommand, CloseCommand, createCloseCommand, SelectCommand, createSelectCommand, ResetCommand, createResetCommand, SUPPORTS_MOVE_BEFORE, ELEMENT_NODE_TYPE, TEXT_NODE_TYPE, IS_PARENT_NODE_TYPE, Operation, candidateNodes, candidateElements, candidateElementsWithIds, unmatchedNodes, unmatchedElements, whitespaceNodes, _idArrayMap, _idSetMap, _options, _Morph_instances, morphOneToMany_fn, morphOneToOne_fn, morphMatchingElements_fn, morphNonMatchingElements_fn, morphOtherNode_fn, visitAttributes_fn, visitTextArea_fn, replaceNode_fn, removeNode_fn, mapIdArraysForEach_fn, mapIdArrays_fn, mapIdSets_fn, Morph, morphAdapter, queue, processing, STRATEGY_KEYWORDS, SwapCommand, MorphCommand, createSwapCommand, createMorphCommand, CRITICAL_LAYOUT_ELEMENTS, STRUCTURAL_SEMANTIC_ELEMENTS, WARNING_ELEMENTS, DEFAULT_VALIDATION_CONFIG, globalConfig, STYLES, SEVERITY_ICONS, SEVERITY_LABELS, STRATEGY_MAP, ProcessPartialsCommand, createProcessPartialsCommand, WaitCommand, createWaitCommand, customResponseTypes, DEFAULT_FETCH_THROWS_ON, fetchThrowsOnPatterns, FetchCommand, createFetchCommand, SetCommand, createSetCommand, GetCommand, createGetCommand, NumericModifyCommand, createIncrementCommand, ClearCommand, createClearCommand, LogCommand, createLogCommand, EventDispatchCommand, createTriggerCommand, GoCommand, createGoCommand, KEYWORDS, HistoryCommand, createPushUrlCommand, ScrollCommand, createScrollCommand, ConditionalCommand, createConditionalCommand, createIfCommand, RepeatCommand, createRepeatCommand, ControlFlowSignalBase, BreakCommand, createBreakCommand, ContinueCommand, createContinueCommand, HaltCommand, createHaltCommand, ReturnCommand, createReturnCommand, ExitCommand, createExitCommand, ThrowCommand, createThrowCommand, CallCommand, createCallCommand, FocusCommand, createFocusCommand, BlurCommand, createBlurCommand, PseudoCommand, ContentInsertionCommand, AppendCommand, createAppendCommand, PrependCommand, createPrependCommand, TransitionCommand, createTransitionCommand, MeasureCommand, createMeasureCommand, SettleCommand, createSettleCommand, StartViewTransitionCommand, createStartViewTransitionCommand, TakeCommand, createTakeCommand, JsCommand, createJsCommand, AsyncCommand, createAsyncCommand, DefaultCommand, createDefaultCommand, TellCommand, createTellCommand, CopyCommand, createCopyCommand, PickCommand, createPickCommand, BeepCommand, createBeepCommand, BreakpointCommand, createBreakpointCommand, InstallCommand, RenderCommand, COMMAND_FACTORIES, Runtime, VERSION$1, DEFAULT_REFERENCES, STRUCTURAL_ROLES, CHAIN_KEYWORDS, VERSION_HEADER_RE, VALID_KINDS, VALID_VALUE_TYPES$1, VALID_CHAIN_TYPES, VALID_ASYNC_VARIANTS, VALID_DIAGNOSTIC_LEVELS, DebugLogger, _PatternMatcher$1, PatternMatcher$1, patternMatcher$1, defaultConfig$1, GrammarTransformer, InMemoryDictionary, NullDictionary, InMemoryProfileProvider, NullProfileProvider, StringLiteralExtractor, NumberExtractor, IdentifierExtractor, UnicodeIdentifierExtractor, LatinExtendedIdentifierExtractor, SELECTOR_BODY_CHAR, PARTICLE_SCRIPT_CHAR, CssSelectorExtractor$1, WhitespaceExtractor, VALID_VALUE_TYPES, SCROLL_MARKERS, URL_MARKERS, PARTIALS_IN_MARKERS, DSLRegistry, MultilingualDSLImpl, DomainRegistry, COMMENT_PATTERN, CrossDomainDispatcher, DomainAwareScanner, AOTOrchestrator, TokenStreamImpl, DEFAULT_OPERATORS$1, OperatorExtractor$1, DEFAULT_PUNCTUATION$1, PunctuationExtractor$1, SIMPLE_TOKENIZER_OPERATOR_SET, MARKER_CONCEPT_NORMALIZEDS, ENGLISH_DOM_EVENT_NAMES, _BaseTokenizer, BaseTokenizer, BaseMorphologicalNormalizer, PatternTracker, MultiStatementParserImpl, index$2, __defProp2, __getOwnPropNames2, __esm2, __export2, SchemaErrorCodes, SchemaErrorMessages, SchemaErrorSuggestions, init_schema_error_codes, schema_validator_exports, MULTI_TYPE_PATIENT_COMMANDS, NO_REQUIRED_ROLES_COMMANDS, init_schema_validator, toggleSchema, addSchema, removeSchema, putSchema, setSchema, bindSchema, liveSchema, eventsourceSchema, socketSchema, workerSchema, interceptSchema, showSchema, hideSchema, onSchema, triggerSchema, waitSchema, fetchSchema, incrementSchema, decrementSchema, appendSchema, prependSchema, logSchema, getCommandSchema, takeSchema, makeSchema, haltSchema, settleSchema, throwSchema, sendSchema, ifSchema, unlessSchema, elseSchema, repeatSchema, forSchema, whileSchema, continueSchema, URL_MARKER_ALL_LANGS, goSchema, transitionSchema, cloneSchema, focusSchema, blurSchema, emptySchema, openSchema, closeSchema, selectSchema, clearSchema, resetSchema, breakpointSchema, callSchema, returnSchema, jsSchema, asyncSchema, tellSchema, defaultSchema, initSchema, behaviorSchema, installSchema, measureSchema, USING_VIEW_MARKER_ALL_LANGS, VIEW_TRANSITION_MANNER_ROLE, swapSchema, morphSchema, beepSchema, breakSchema, copySchema, exitSchema, pickSchema, scrollSchema, PARTIALS_IN_MARKER_ALL_LANGS, pushSchema, replaceSchema, processSchema, renderSchema, commandSchemas, init_command_schemas, tokenizers, profiles, patternCache, patternGenerator, registeredPatterns, init_registry, arabic_exports, arabicProfile, init_arabic, bengali_exports, bengaliProfile, init_bengali, german_exports, germanProfile, init_german, english_exports, englishProfile, init_english, spanish_exports, spanishProfile, init_spanish, french_exports, frenchProfile, init_french, he_exports, hebrewProfile, init_he, hindi_exports, hindiProfile, init_hindi, indonesian_exports, indonesianProfile, init_indonesian, italian_exports, italianProfile, init_italian, japanese_exports, japaneseProfile, init_japanese, korean_exports, koreanProfile, init_korean, ms_exports, malayProfile, init_ms, polish_exports, polishProfile, init_polish, portuguese_exports, portugueseProfile, init_portuguese, quechua_exports, quechuaProfile, init_quechua, russian_exports, russianProfile, init_russian, swahili_exports, swahiliProfile, init_swahili, thai_exports, thaiProfile, init_thai, tl_exports, tagalogProfile, init_tl, turkish_exports, turkishProfile, init_turkish, ukrainian_exports, ukrainianProfile, init_ukrainian, vietnamese_exports, vietnameseProfile, init_vietnamese, chinese_exports, chineseProfile, init_chinese, ROLE_MARKER_CONCEPTS, init_marker_resolution, PUT_POSITIONAL, PUT_AT_END, init_put, init_token_utils, init_char_classifiers, init_base_tokenizer, init_base, DEFAULT_OPERATORS, OperatorExtractor2, DEFAULT_PUNCTUATION, PunctuationExtractor2, init_generic_extractors, CssSelectorExtractor2, init_css_selector, EventModifierExtractor, init_event_modifier, URL_PREFIXES, UrlExtractor, init_url, VariableRefExtractor, init_variable_ref, JapaneseKeywordExtractor, init_japanese_keyword, SINGLE_CHAR_PARTICLES, MULTI_CHAR_PARTICLES, JapaneseParticleExtractor, init_japanese_particle, TEMPORAL_EVENT_SUFFIXES, KoreanKeywordExtractor, init_korean_keyword, SINGLE_CHAR_PARTICLES2, MULTI_CHAR_PARTICLES2, KoreanParticleExtractor, init_korean_particle, ChineseKeywordExtractor, init_chinese_keyword, SINGLE_CHAR_PARTICLES3, MULTI_CHAR_PARTICLES3, ChineseParticleExtractor, init_chinese_particle, isVietnameseLetter, isVietnameseIdentifierChar, PREPOSITIONS, VietnameseKeywordExtractor, init_vietnamese_keyword, isArabic, PREPOSITIONS2, ArabicKeywordExtractor, init_arabic_keyword, isArabic2, PROCLITICS, NON_PROCLITIC_WORDS, ArabicProcliticExtractor, init_arabic_proclitic, isArabic3, TEMPORAL_MARKERS, ArabicTemporalExtractor, init_arabic_temporal, CyrillicKeywordExtractor, RUSSIAN_PREPOSITIONS, UKRAINIAN_PREPOSITIONS, init_cyrillic_keyword, HindiKeywordExtractor, init_hindi_keyword, SINGLE_POSTPOSITIONS, COMPOUND_POSTPOSITIONS, HindiParticleExtractor, init_hindi_particle, BengaliKeywordExtractor, init_bengali_keyword, SINGLE_POSTPOSITIONS2, BengaliParticleExtractor, init_bengali_particle, ThaiKeywordExtractor, init_thai_keyword, MalayKeywordExtractor, init_malay_keyword, PREPOSITIONS3, TagalogKeywordExtractor, init_tagalog_keyword, PREPOSITIONS4, isPolishLetter, isPolishIdentifierChar, PolishKeywordExtractor, init_polish_keyword, PREPOSITIONS5, isIndonesianLetter, isIndonesianIdentifierChar, IndonesianKeywordExtractor, init_indonesian_keyword, PREPOSITIONS6, isSwahiliLetter, isSwahiliIdentifierChar, SwahiliKeywordExtractor, init_swahili_keyword, POSTPOSITIONS, CASE_SUFFIXES, TurkishKeywordExtractor, init_turkish_keyword, SUFFIXES, POSTPOSITIONS2, AGGLUTINATIVE_MARKERS, QuechuaKeywordExtractor, init_quechua_keyword, isHebrew, PREPOSITIONS7, CONJUNCTIONS, HebrewKeywordExtractor, init_hebrew_keyword, isHebrew2, PROCLITIC_PREFIXES, EVENT_MARKER_PREFIXES, EVENT_NAMES, HebrewProcliticExtractor, init_hebrew_proclitic, AsciiIdentifierExtractor, init_ascii_identifier, init_extractors, init_extractor_helpers, EnglishKeywordExtractor, init_english_keyword, english_exports2, ENGLISH_EXTRAS, EnglishTokenizer, englishTokenizer, init_english2, init_types, JAPANESE_SUFFIX_RULES, SURU_PATTERNS, JapaneseMorphologicalNormalizer, init_japanese_normalizer, japanese_exports2, PARTICLES, JAPANESE_EXTRAS, JapaneseTokenizer, japaneseTokenizer, init_japanese2, KOREAN_SUFFIX_RULES, HADA_PATTERNS, KoreanMorphologicalNormalizer, init_korean_normalizer, korean_exports2, PARTICLES2, KOREAN_EXTRAS, KoreanTokenizer, koreanTokenizer, init_korean2, COMBINED_PREFIXES, SINGLE_PREFIXES, VERB_PREFIXES, SUFFIXES2, ArabicMorphologicalNormalizer, init_arabic_normalizer, arabic_exports2, CONJUNCTIONS2, PREPOSITIONS8, ARABIC_EXTRAS, ArabicTokenizer, arabicTokenizer, init_arabic2, AR_ENDINGS, ER_ENDINGS, IR_ENDINGS, ALL_ENDINGS, SpanishMorphologicalNormalizer, init_spanish_normalizer, isSpanishLetter, isSpanishIdentifierChar, PREPOSITIONS9, SpanishKeywordExtractor, init_spanish_keyword, spanish_exports2, PREPOSITIONS10, SPANISH_EXTRAS, SpanishTokenizer, spanishTokenizer, init_spanish2, TURKISH_SUFFIX_RULES, TurkishMorphologicalNormalizer, init_turkish_normalizer, turkish_exports2, POSTPOSITIONS3, CASE_SUFFIXES2, TURKISH_EXTRAS, TurkishTokenizer, turkishTokenizer, init_turkish2, chinese_exports2, PARTICLES3, CHINESE_EXTRAS, ChineseTokenizer, chineseTokenizer, init_chinese2, REFLEXIVE_SUFFIXES, AR_ENDINGS2, ER_ENDINGS2, IR_ENDINGS2, ALL_ENDINGS2, PortugueseMorphologicalNormalizer, init_portuguese_normalizer, isPortugueseLetter, isPortugueseIdentifierChar, PREPOSITIONS11, PortugueseKeywordExtractor, init_portuguese_keyword, portuguese_exports2, PREPOSITIONS12, PORTUGUESE_EXTRAS, PortugueseTokenizer, portugueseTokenizer, init_portuguese2, REFLEXIVE_SUFFIXES2, ER_ENDINGS3, IR_ENDINGS3, RE_ENDINGS, ALL_ENDINGS3, FrenchMorphologicalNormalizer, init_french_normalizer, isFrenchLetter, isFrenchIdentifierChar, PREPOSITIONS13, FrenchKeywordExtractor, init_french_keyword, french_exports2, FRENCH_EXTRAS, FrenchTokenizer, frenchTokenizer, init_french2, SEPARABLE_PREFIXES, VERB_ENDINGS, ELN_ERN_ENDINGS, ALL_ENDINGS4, GermanMorphologicalNormalizer, init_german_normalizer, isGermanLetter, isGermanIdentifierChar, PREPOSITIONS14, GermanKeywordExtractor, init_german_keyword, german_exports2, GERMAN_EXTRAS, GermanTokenizer, germanTokenizer, init_german2, indonesian_exports2, PREPOSITIONS15, INDONESIAN_EXTRAS, IndonesianTokenizer, indonesianTokenizer, init_indonesian2, QUECHUA_SUFFIX_RULES, QuechuaMorphologicalNormalizer, quechuaMorphologicalNormalizer, init_quechua_normalizer, quechua_exports2, QuechuaStringLiteralExtractor, SUFFIXES3, QUECHUA_EXTRAS, QuechuaTokenizer, quechuaTokenizer, init_quechua2, swahili_exports2, PREPOSITIONS16, SWAHILI_EXTRAS, SwahiliTokenizer, swahiliTokenizer, init_swahili2, REFLEXIVE_SUFFIXES3, ARE_ENDINGS, ERE_ENDINGS, IRE_ENDINGS, ALL_ENDINGS5, ItalianMorphologicalNormalizer, init_italian_normalizer, RomanceKeywordExtractor, ITALIAN_PREPOSITIONS, init_romance_language_keyword, italian_exports2, PREPOSITIONS17, ITALIAN_EXTRAS, ItalianTokenizer, italianTokenizer, init_italian2, vietnamese_exports2, VIETNAMESE_EXTRAS, VietnameseTokenizer, vietnameseTokenizer, init_vietnamese2, IMPERATIVE_TO_INFINITIVE, PolishMorphologicalNormalizer, init_polish_normalizer, polish_exports2, PREPOSITIONS18, POLISH_EXTRAS, PolishTokenizer, polishTokenizer, init_polish2, IMPERATIVE_TO_INFINITIVE2, RussianMorphologicalNormalizer, init_russian_normalizer, russian_exports2, PREPOSITIONS19, RUSSIAN_EXTRAS, RussianTokenizer, russianTokenizer, init_russian2, IMPERATIVE_TO_INFINITIVE3, UkrainianMorphologicalNormalizer, init_ukrainian_normalizer, ukrainian_exports2, PREPOSITIONS20, UKRAINIAN_EXTRAS, UkrainianTokenizer, ukrainianTokenizer, init_ukrainian2, he_exports2, PREPOSITIONS21, HEBREW_EXTRAS, HebrewTokenizer, hebrewTokenizer, init_he2, SUFFIX_RULES, HindiMorphologicalNormalizer, init_hindi_normalizer, hindi_exports2, SINGLE_POSTPOSITIONS3, HINDI_EXTRAS, HindiTokenizer, hindiTokenizer, init_hindi2, SUFFIX_RULES2, BengaliMorphologicalNormalizer, bengaliMorphologicalNormalizer, init_bengali_normalizer, bengali_exports2, SINGLE_POSTPOSITIONS4, BENGALI_EXTRAS, BengaliTokenizer, bengaliTokenizer, init_bengali2, thai_exports2, THAI_EXTRAS, ThaiTokenizer, thaiTokenizer, init_thai2, ms_exports2, MALAY_EXTRAS, MalayTokenizer, malayTokenizer, init_ms2, COMBINED_PREFIXES2, SINGLE_PREFIXES2, INFIXES, SUFFIXES4, TagalogMorphologicalNormalizer, tagalogMorphologicalNormalizer, init_tagalog_normalizer, tl_exports2, TAGALOG_EXTRAS, TagalogTokenizer, tagalogTokenizer, init_tl2, eventNameTranslations, eventNameLocalizations, eventLocalizationDenylist, init_event_handler, init_role_positioning, init_event_handlers_sov, init_event_handlers_vso, defaultConfig, init_pattern_generator, fetchWithResponseTypeEnglish, fetchWithOptionsAndResponseTypeEnglish, fetchWithOptionsEnglish, fetchSimpleEnglish, fetchPatternsEn, init_fetch, pickVariantEnglish, pickPatternsEn, init_pick, VIEW_TRANSITION_TAIL, swapSimpleEnglish, swapElementEnglish, swapStrategyOfEnglish, swapStrategyEnglish, swapPatternsEn, init_swap, init_toggle, VERB_FIRST_REPEAT_TIMES, SOV_REPEAT_TIMES, FOR_IN_HEADS, WHILE_HEADS, VERB_FIRST_UNTIL_HEADS, repeatUntilHeadQuMidClause, SOV_UNTIL_HEADS, repeatUntilHeadQu, SOV_FOR_BINDING_HEADS, BY_LANG, addPattern, init_repeat, init_wait, en_exports, repeatUntilEventFromEnglish, repeatUntilEventEnglish, repeatTimesEnglish, repeatForeverEnglish, setPossessiveEnglish, forEnglish, ifEnglish, unlessEnglish, temporalInEnglish, temporalAfterEnglish, init_en, DEFAULT_CONFIDENCE_THRESHOLD, HIGH_CONFIDENCE_THRESHOLD, CONTEXT_VARS, LOGICAL_OPERATORS, BOOLEAN_LITERALS, COMPARISON_KEYWORDS, POSITIONAL_KEYWORDS, TIME_UNITS, POSSESSIVE_CONTEXT_TYPES, POSTFIX_STOP_WORDS, POSITIONAL_CALL_KEYWORDS, ExpressionParser, waitMapper, putMapper, goMapper, RANGE_METHODS, COUNT_METHODS, REGEX_METHODS, pickMapper, mappers, ASTBuilder, KNOWN_PROFILES, PROPERTY_NAME_LEXICON, CONNECTIVE_LEXICON, OF_POSSESSIVE_MARKERS, ROLE_CONCEPT_TO_ENGLISH_LOCATIVE, LOCATIVE_SURFACES, ENGLISH_LOCATIVE_SENSES, POSITIONAL_KEYWORDS2, POSITIONAL_HEAD_DUALS, COMMAND_ACTION_KEYWORDS, AMBIGUOUS_SENSES, SENSE_PREDICATE_NORMALIZED, CONVERSION_TYPE_NAMES, CURATED_END_KEYWORDS, MAX_FOLD_TOKENS, KEY_RE, FUSED_PAIR_RE, OPTIONAL_ROLE_WEIGHT, DEFAULT_PARTIAL_CREDIT, MAX_STEM_PENALTY, STEM_PENALTY_FLOOR, VSO_VERB_BOOST, MAX_PREPOSITION_ADJUSTMENT, ARABIC_VERBS, PREFERRED_PREPOSITIONS, DefaultConfidenceModel, defaultConfidenceModel, BAREKEYWORD_BLOCK_ACTIONS, _PatternMatcher2, PatternMatcher, patternMatcher, OPENER_ACTIONS, PASCAL_CASE_NAME, OPENER_NORMS, TARGET_REFERENCES, ROLE_CONCEPTS, TRIGGER_SIGNATURE_LANGS, DEF_NAME, FEATURE_ACTIONS, OPAQUE_BODY_FEATURES, NAMED_FEATURES, HANDLER_BODY_FEATURES, DEF_BODY_FEATURES, SOV_KEYWORD_SEARCH_LIMIT, INTERCEPT_SOV_KEYWORD_LIMIT, MODIFIER_KEYWORDS, ONCE_SEQUENCES, DURATION_RE, EXCLUDED_FIRST_KINDS, BLOCK_HEADER_ACTIONS, BLOCK_NEEDS_TRAILING_END, SemanticRendererImpl, semanticRenderer, hyperscriptSchemaLookup, BLOCK_BODY_ACTIONS, NON_VALUE_KEYWORDS, POSITIONAL_VALUE_KEYWORDS, WAITABLE_EVENT_WORDS, SemanticParseError, MAX_UNCONSUMED_SPAN_CHARS, COVERAGE_RESIDUE_NORMALIZED, NORMALIZE_CHILD_FIELDS, _SemanticParserImpl, SemanticParserImpl, semanticParser, SemanticCache2, semanticCache, LANGUAGE_IMPORTERS, SUPPORTED_LANGUAGES, PICK_UNIT_WORDS, retypePickUnitWord, VERB_INITIAL_SPECS, VERB_FINAL_SPECS, repeatUntilEventFromEnglish2, repeatUntilEventEnglish2, repeatPatternsEn, setPossessiveEnglish2, setPatternsEn, forEnglish2, ifEnglish2, unlessEnglish2, controlFlowPatternsEn, temporalInEnglish2, temporalAfterEnglish2, temporalPatternsEn, allEnglishOnlyPatterns, PATTERN_LOADERS, _generatedPatternsPerLanguage, handcraftedLanguages, patternCache2, _allPatterns, schemaRegistry, DEFAULT_CONFIG, HIGH_FREQUENCY_TRIGGERS, THROTTLE_RECOMMENDED_TRIGGERS, _devModeEnabled, _devModeConfig, VERSION, index$1, HistorySwapBehavior, BoostedBehavior, DEFAULT_EVENT_TYPE, DEFAULT_LANGUAGE$1, compileSyncFn, compileAsyncFn, getRuntimeFn, configRef, RingBuffer, HISTORY_CAPACITY, DebugController, DEFAULT_LANGUAGE, ASTCache, astCache, semanticAnalyzerInstance, bridgeInstance, config, _defaultRuntime, _debugController, hyperscript, lokascript, OP_TABLE, Lexer, Tokens, MAX_HISTORY_SIZE$5, DefInputSchema, TypedDefFeatureImplementation, enhancedDefImplementation, MAX_HISTORY_SIZE$4, EnhancedOnInputSchema, TypedOnFeatureImplementation, enhancedOnImplementation, MAX_HISTORY_SIZE$3, BehaviorsInputSchema, TypedBehaviorsFeatureImplementation, enhancedBehaviorsImplementation, MAX_HISTORY_SIZE$2, SocketsInputSchema, TypedSocketsFeatureImplementation, enhancedSocketsImplementation, MAX_HISTORY_SIZE$1, WebWorkerInputSchema, TypedWebWorkerFeatureImplementation, enhancedWebWorkerImplementation, MAX_HISTORY_SIZE, EventSourceInputSchema, TypedEventSourceFeatureImplementation, enhancedEventSourceImplementation, INTERCHANGE_ADAPTER, POS, DiagnosticSeverity, SymbolKind, CompletionItemKind, _semanticModule, SemanticGrammarBridge, bridge, _fw, index;
29388
29606
  var init_dist = __esm({
29389
29607
  "../core/dist/index.mjs"() {
29390
29608
  "use strict";
@@ -32510,15 +32728,15 @@ var init_dist = __esm({
32510
32728
  braceDepth--;
32511
32729
  }
32512
32730
  }
32513
- const valueString = this.originalInput && valueStart >= 0 && valueEnd > valueStart ? this.originalInput.slice(valueStart, valueEnd) : valueTokens.join("");
32731
+ const valueString2 = this.originalInput && valueStart >= 0 && valueEnd > valueStart ? this.originalInput.slice(valueStart, valueEnd) : valueTokens.join("");
32514
32732
  const value = hasTemplateExpression ? {
32515
32733
  type: "templateLiteral",
32516
- value: valueString,
32734
+ value: valueString2,
32517
32735
  start: pos2.start,
32518
32736
  end: this.getPosition().end,
32519
32737
  line: pos2.line,
32520
32738
  column: pos2.column
32521
- } : this.createLiteral(valueString, valueString);
32739
+ } : this.createLiteral(valueString2, valueString2);
32522
32740
  properties.push({ key, value });
32523
32741
  if (this.check(";")) {
32524
32742
  this.advance();
@@ -33383,7 +33601,8 @@ var init_dist = __esm({
33383
33601
  "closest",
33384
33602
  "js",
33385
33603
  "tell",
33386
- "fetch"
33604
+ "fetch",
33605
+ "process"
33387
33606
  ];
33388
33607
  if (this.semanticAdapter && !skipSemanticParsing.includes(commandName.toLowerCase())) {
33389
33608
  const remainingInput = this.getRemainingInput();
@@ -35587,7 +35806,7 @@ var init_dist = __esm({
35587
35806
  return {
35588
35807
  description: this.impl.metadata?.description || "",
35589
35808
  examples: this.impl.metadata?.examples || [],
35590
- syntax: Array.isArray(syntax) ? syntax.join(" | ") : syntax || ""
35809
+ syntax: typeof syntax === "string" ? syntax : syntax ? syntax.join(" | ") : ""
35591
35810
  };
35592
35811
  }
35593
35812
  async execute(context, ...args) {
@@ -35655,10 +35874,8 @@ var init_dist = __esm({
35655
35874
  }
35656
35875
  }
35657
35876
  validate(input) {
35658
- if (this.impl.validate) {
35659
- return this.impl.validate(input);
35660
- }
35661
- return { isValid: true, errors: [], suggestions: [] };
35877
+ const isValid = this.impl.validate ? this.impl.validate(input) : true;
35878
+ return { isValid, errors: [], suggestions: [] };
35662
35879
  }
35663
35880
  };
35664
35881
  CommandRegistryV2 = class {
@@ -40243,7 +40460,11 @@ var init_dist = __esm({
40243
40460
  } else {
40244
40461
  for (const t of targets) {
40245
40462
  const content = this.parseValue(value);
40246
- insertContentSemantic(t, content, position);
40463
+ if (Array.isArray(content)) {
40464
+ insertElementsInOrder(t, content, toInsertPosition(position));
40465
+ } else {
40466
+ insertContentSemantic(t, content, position);
40467
+ }
40247
40468
  }
40248
40469
  }
40249
40470
  return targets;
@@ -40275,6 +40496,11 @@ var init_dist = __esm({
40275
40496
  parseValue(v2) {
40276
40497
  if (isHTMLElement$2(v2))
40277
40498
  return v2;
40499
+ if (Array.isArray(v2) && v2.length > 0 && v2.every(isHTMLElement$2)) {
40500
+ return v2;
40501
+ }
40502
+ if (isInsertableNode(v2))
40503
+ return v2;
40278
40504
  return v2 == null ? "" : String(v2);
40279
40505
  }
40280
40506
  looksLikeCss(s) {
@@ -41261,7 +41487,7 @@ var init_dist = __esm({
41261
41487
  };
41262
41488
  }
41263
41489
  }
41264
- let useViewTransition = false;
41490
+ let useViewTransition = raw.modifiers?.viewTransition !== void 0;
41265
41491
  if (usingIndex !== -1) {
41266
41492
  const afterUsing = argKeywords.slice(usingIndex + 1);
41267
41493
  if (afterUsing.includes("view") && afterUsing.includes("transition")) {
@@ -41457,7 +41683,7 @@ var init_dist = __esm({
41457
41683
  const withIndex = argKeywords.findIndex((k) => k === "with");
41458
41684
  const overIndex = argKeywords.findIndex((k) => k === "over");
41459
41685
  const usingIndex = argKeywords.findIndex((k) => k === "using");
41460
- let useViewTransition = false;
41686
+ let useViewTransition = raw.modifiers?.viewTransition !== void 0;
41461
41687
  if (usingIndex !== -1) {
41462
41688
  const afterUsing = argKeywords.slice(usingIndex + 1);
41463
41689
  if (afterUsing.includes("view") && afterUsing.includes("transition")) {
@@ -41533,7 +41759,11 @@ var init_dist = __esm({
41533
41759
  })();
41534
41760
  _classThis.metadata = commandMeta({
41535
41761
  description: "Morph content into target elements (intelligent diffing, preserves state)",
41536
- syntax: ["morph <target> with <content>", "morph over <target> with <content>"],
41762
+ syntax: [
41763
+ "morph <target> with <content>",
41764
+ "morph over <target> with <content>",
41765
+ "morph <target> with <content> using view transition"
41766
+ ],
41537
41767
  examples: ["morph #target with it", "morph over #modal with fetchedContent"],
41538
41768
  sideEffects: ["dom-mutation"],
41539
41769
  category: "dom",
@@ -41672,24 +41902,32 @@ var init_dist = __esm({
41672
41902
  if (!args || args.length === 0) {
41673
41903
  throw new Error("process partials command requires content argument");
41674
41904
  }
41675
- const evaluatedArgs = [];
41676
- const argStrings = [];
41677
- for (const arg of args) {
41678
- const evaluated = await evaluator.evaluate(arg, context);
41679
- evaluatedArgs.push(evaluated);
41680
- if (typeof evaluated === "string") {
41681
- argStrings.push(evaluated.toLowerCase());
41682
- }
41683
- }
41684
- const partialsIndex = argStrings.findIndex((s) => s === "partials");
41905
+ const keywordOf = (node) => {
41906
+ const n = node;
41907
+ if (!n || typeof n !== "object")
41908
+ return null;
41909
+ if (n.type === "identifier" && typeof n.name === "string")
41910
+ return n.name.toLowerCase();
41911
+ if (n.type === "literal" && typeof n.value === "string")
41912
+ return n.value.toLowerCase();
41913
+ return null;
41914
+ };
41915
+ const keywords = args.map(keywordOf);
41916
+ const partialsIndex = keywords.indexOf("partials");
41917
+ const inIndex = keywords.indexOf("in");
41918
+ let contentNode;
41685
41919
  if (partialsIndex === -1) {
41686
- throw new Error('process command expects "partials" keyword: process partials in <content>');
41687
- }
41688
- const inIndex = argStrings.findIndex((s) => s === "in");
41689
- if (inIndex === -1 || inIndex <= partialsIndex) {
41690
- throw new Error('process partials command expects "in" keyword: process partials in <content>');
41920
+ if (inIndex !== -1) {
41921
+ throw new Error('process command expects "partials" keyword: process partials in <content>');
41922
+ }
41923
+ contentNode = args[0];
41924
+ } else {
41925
+ if (inIndex === -1 || inIndex <= partialsIndex) {
41926
+ throw new Error('process partials command expects "in" keyword: process partials in <content>');
41927
+ }
41928
+ contentNode = args[inIndex + 1];
41691
41929
  }
41692
- const contentArg = evaluatedArgs[inIndex + 1];
41930
+ const contentArg = contentNode ? await evaluator.evaluate(contentNode, context) : void 0;
41693
41931
  let html;
41694
41932
  if (typeof contentArg === "string") {
41695
41933
  html = contentArg;
@@ -41700,10 +41938,10 @@ var init_dist = __esm({
41700
41938
  } else {
41701
41939
  throw new Error("process partials: content must be an HTML string or element");
41702
41940
  }
41703
- const usingIndex = argStrings.findIndex((s) => s === "using");
41704
- let useViewTransition = false;
41941
+ let useViewTransition = raw.modifiers?.viewTransition !== void 0;
41942
+ const usingIndex = keywords.indexOf("using");
41705
41943
  if (usingIndex !== -1) {
41706
- const remaining = argStrings.slice(usingIndex + 1).join(" ");
41944
+ const remaining = keywords.slice(usingIndex + 1);
41707
41945
  if (remaining.includes("view") && remaining.includes("transition")) {
41708
41946
  useViewTransition = true;
41709
41947
  }
@@ -46737,6 +46975,7 @@ var init_dist = __esm({
46737
46975
  return this.registry;
46738
46976
  }
46739
46977
  };
46978
+ VERSION$1 = "2.10.0";
46740
46979
  DEFAULT_REFERENCES = /* @__PURE__ */ new Set([
46741
46980
  "me",
46742
46981
  "you",
@@ -48497,14 +48736,26 @@ var init_dist = __esm({
48497
48736
  }
48498
48737
  translate(input, fromLanguage, toLanguage) {
48499
48738
  if (isExplicitSyntax$1(input)) return input;
48500
- for (const language of [fromLanguage, toLanguage]) {
48501
- if (!this.profileProvider.getProfile(language)) {
48502
- throw new Error(
48503
- `translate() requires a grammar profile for language "${language}", but none is configured. Set 'grammarProfile' on the LanguageConfig for "${language}" in createMultilingualDSL() (parse/validate/compile do not need it), or inject a custom 'profileProvider'.`
48504
- );
48739
+ let node;
48740
+ try {
48741
+ node = this.parseWithConfidence(input, fromLanguage).node;
48742
+ } catch (parseError) {
48743
+ if (this.hasGrammarProfile(fromLanguage) && this.hasGrammarProfile(toLanguage)) {
48744
+ return this.transformer.transform(input, fromLanguage, toLanguage);
48505
48745
  }
48746
+ throw parseError;
48747
+ }
48748
+ const rendered = this.registry.getSupportedLanguages().includes(toLanguage) ? this.render(node, toLanguage) : null;
48749
+ if (rendered != null) return rendered;
48750
+ if (this.hasGrammarProfile(fromLanguage) && this.hasGrammarProfile(toLanguage)) {
48751
+ return this.transformer.transform(input, fromLanguage, toLanguage);
48506
48752
  }
48507
- return this.transformer.transform(input, fromLanguage, toLanguage);
48753
+ throw new Error(
48754
+ `translate() could not render action "${node.action}" in language "${toLanguage}": no custom renderer, domain renderer, or schema pattern covers it, and no grammar profile is configured for the transformer fallback. Either add "${toLanguage}" to the DSL's languages/renderer, or set 'grammarProfile' on its LanguageConfig in createMultilingualDSL() (parse/validate/compile do not need it).`
48755
+ );
48756
+ }
48757
+ hasGrammarProfile(language) {
48758
+ return this.profileProvider.getProfile(language) != null;
48508
48759
  }
48509
48760
  compile(input, language) {
48510
48761
  if (!this.codeGenerator) {
@@ -50726,7 +50977,6 @@ ${body}
50726
50977
  category: "dom-class",
50727
50978
  primaryRole: "patient",
50728
50979
  // `toggle .active on #btn for 2s` \u2192 args ['.active'], modifiers { on, for }.
50729
- // NOTE: `duration` is read here but not declared in `roles` below.
50730
50980
  ast: { args: ["patient"], modifiers: { on: "destination", for: "duration" } },
50731
50981
  roles: [
50732
50982
  {
@@ -50736,7 +50986,13 @@ ${body}
50736
50986
  expectedTypes: ["selector"],
50737
50987
  selectorKinds: ["class", "attribute"],
50738
50988
  svoPosition: 1,
50739
- sovPosition: 2
50989
+ sovPosition: 2,
50990
+ // zh: the transformer emits `\u5207\u6362 \u628a .active` (the profile's \u628a patient
50991
+ // marker), but natural zh writes `\u5207\u6362 .active` bare \u2014 the handcrafted
50992
+ // patterns' form. Optional accepts both; without it the generated
50993
+ // pattern REQUIRED \u628a and the slim bundles could not parse the bare
50994
+ // form at all. Same treatment as go's destination.
50995
+ markerOptional: { zh: true }
50740
50996
  },
50741
50997
  {
50742
50998
  role: "destination",
@@ -51074,6 +51330,8 @@ ${body}
51074
51330
  markerOverride: {
51075
51331
  en: "",
51076
51332
  // No marker before destination in English: "set :x to 5"
51333
+ es: "",
51334
+ // "establecer x a 5" - no marker before variable (profile default `en` matched nothing)
51077
51335
  ja: "\u3092",
51078
51336
  // "x \u3092 10 \u306b \u8a2d\u5b9a" - variable gets object marker
51079
51337
  ko: "\uB97C",
@@ -51096,9 +51354,19 @@ ${body}
51096
51354
  // generated hi set patterns carried the swapped markers and matched no
51097
51355
  // corpus, so the whole hi set-family (set-text/inner-html/style/attribute)
51098
51356
  // fell to the bare-event fallback (S6 set-trio).
51099
- hi: "\u0915\u094B"
51357
+ hi: "\u0915\u094B",
51100
51358
  // target (destination) gets \u0915\u094b
51101
- }
51359
+ // zh: the transformer emits the verb-first BA form `\u8bbe\u7f6e \u628a X \u5230 V`
51360
+ // (\u628a before the variable), while natural zh writes `\u8bbe\u7f6e X \u4e3a V`
51361
+ // (unmarked). \u628a as the marker, optional below, accepts both. The
51362
+ // profile default \u5728 matched neither form, so the generated zh set
51363
+ // patterns were dead weight and the slim bundles (schema-generated
51364
+ // patterns only) could not parse set at all.
51365
+ zh: "\u628A"
51366
+ },
51367
+ // Accept the unmarked natural form alongside the transformer's \u628a form
51368
+ // (same treatment as go's destination).
51369
+ markerOptional: { zh: true }
51102
51370
  },
51103
51371
  {
51104
51372
  role: "patient",
@@ -51141,8 +51409,14 @@ ${body}
51141
51409
  // "x \u0995\u09c7 10 \u09a4\u09c7 \u09b8\u09c7\u099f" - destination marker on value
51142
51410
  qu: "man",
51143
51411
  // "x ta 10 man churay" - destination marker on value
51144
- hi: "\u092E\u0947\u0902"
51412
+ hi: "\u092E\u0947\u0902",
51145
51413
  // value (patient) gets \u092e\u0947\u0902 \u2014 see the destination note above
51414
+ // zh: the transformer/corpus form marks the value with \u5230 (`\u8bbe\u7f6e \u628a X
51415
+ // \u5230 V`); natural zh uses \u4e3a (`\u8bbe\u7f6e X \u4e3a V`). \u5230 is the override,
51416
+ // the \u4e3a-family rides along as variants (all merged as alternatives
51417
+ // by schemaMarkerAlternatives). Profile default \u628a was the PATIENT
51418
+ // marker, which never precedes set's value in either form.
51419
+ zh: "\u5230"
51146
51420
  },
51147
51421
  // Turkish dative is allomorphic under vowel harmony: the i18n transformer
51148
51422
  // emits `e` for quoted-string values (`"red" e`) but `-ya` for a value
@@ -51155,7 +51429,11 @@ ${body}
51155
51429
  // not parse as a bare command while `t\u0131klama da @disabled i do\u011fru ya
51156
51430
  // ayarla` did. See STRUCTURAL_ARCS_ROADMAP.md (tr set-attribute).
51157
51431
  markerVariants: {
51158
- tr: ["e", "a", "ye", "ya"]
51432
+ tr: ["e", "a", "ye", "ya"],
51433
+ // Natural zh value markers (`\u8bbe\u7f6e X \u4e3a V`), simplified + traditional +
51434
+ // resultative \u2014 the handcrafted set-zh-full alternatives, kept parseable
51435
+ // alongside the transformer's \u5230 override above.
51436
+ zh: ["\u4E3A", "\u70BA", "\u6210"]
51159
51437
  }
51160
51438
  },
51161
51439
  {
@@ -51817,8 +52095,8 @@ ${body}
51817
52095
  description: "Take content from a source element",
51818
52096
  category: "dom-content",
51819
52097
  primaryRole: "patient",
51820
- // `take .active from #parent` \u2192 args ['.active'], modifiers { from: '#parent' }.
51821
- ast: { args: ["patient"], modifiers: { from: "source" } },
52098
+ // `take .active from #parent for me` \u2192 args ['.active'], modifiers { from, for }.
52099
+ ast: { args: ["patient"], modifiers: { from: "source", for: "recipient" } },
51822
52100
  roles: [
51823
52101
  {
51824
52102
  role: "patient",
@@ -51841,6 +52119,38 @@ ${body}
51841
52119
  expectedTypes: ["selector", "reference"],
51842
52120
  svoPosition: 2,
51843
52121
  sovPosition: 1
52122
+ },
52123
+ {
52124
+ role: "recipient",
52125
+ description: "The element the class moves ONTO (`take .active from .tab for me`)",
52126
+ required: false,
52127
+ // References only, deliberately. Upstream accepts an element expression,
52128
+ // but the 23 non-en corpus surfaces carry the recipient as a BARE
52129
+ // trailing pronoun (i18n renders `\u2026 von .tab-button ich`), so this slot
52130
+ // is marker-less almost everywhere and a selector-typed slot would
52131
+ // swallow the second selector of `take .active from .a .b`. English is
52132
+ // unaffected: `take` is on the core parser's skipSemanticParsing list,
52133
+ // so the traditional parser owns `for <anything>` there.
52134
+ expectedTypes: ["reference"],
52135
+ svoPosition: 3,
52136
+ sovPosition: 3,
52137
+ // NO default. The runtime already defaults the recipient to `me`
52138
+ // (commands/animation/take.ts), and a schema default would emit an
52139
+ // explicit `for me` modifier on every take \u2014 re-smuggling the exact
52140
+ // "absent means absent" semantics #859 removed from `source`.
52141
+ //
52142
+ // Shape-anchored on `reference`: without it this optional slot weighs
52143
+ // into every take pattern's denominator in `scoreRoleCoverage`, dropping
52144
+ // plain `take .active from .tab-button` from 1.0 to ~0.69 \u2014 the toggle-es
52145
+ // regression class the R1 role-set flip ratchet exists to catch.
52146
+ valueShape: "reference",
52147
+ // en only. The other 23 languages render the recipient unmarked, so a
52148
+ // marker there would never match their corpus rows; where the marker-less
52149
+ // slot proves inert they stay uncaptured and the pattern lands in the
52150
+ // baseline's `roleLossyPatterns` as named R1 burn-down tail. A language
52151
+ // gets a real particle here ONLY if the empty slot perturbs its other
52152
+ // parses (toggle's ja \u9593 / ko \ub3d9\uc548 case).
52153
+ markerOverride: { en: "for" }
51844
52154
  }
51845
52155
  ]
51846
52156
  };
@@ -52905,6 +53215,47 @@ ${body}
52905
53215
  }
52906
53216
  ]
52907
53217
  };
53218
+ USING_VIEW_MARKER_ALL_LANGS = {
53219
+ en: "using view",
53220
+ es: "using view",
53221
+ pt: "using view",
53222
+ fr: "using view",
53223
+ de: "using view",
53224
+ it: "using view",
53225
+ ja: "using view",
53226
+ ko: "using view",
53227
+ zh: "using view",
53228
+ ar: "using view",
53229
+ he: "using view",
53230
+ hi: "using view",
53231
+ bn: "using view",
53232
+ tr: "using view",
53233
+ ru: "using view",
53234
+ uk: "using view",
53235
+ pl: "using view",
53236
+ id: "using view",
53237
+ vi: "using view",
53238
+ th: "using view",
53239
+ ms: "using view",
53240
+ tl: "using view",
53241
+ sw: "using view",
53242
+ qu: "using view"
53243
+ };
53244
+ VIEW_TRANSITION_MANNER_ROLE = {
53245
+ role: "manner",
53246
+ description: "Run the swap inside a `document.startViewTransition()` (`using view transition`)",
53247
+ required: false,
53248
+ // Both types, because the SAME word tokenizes differently per language and
53249
+ // the difference is an accident of vocabulary: `transition` is a command
53250
+ // keyword in en/fr (it is also their verb) and a bare identifier everywhere
53251
+ // else, which types it `literal` in the first group and `expression` in the
53252
+ // second. Measured: with `['literal']` alone only en and fr captured the
53253
+ // tail. Widening is safe precisely because the slot is marker-guarded \u2014
53254
+ // nothing reaches it until `using view` has matched.
53255
+ expectedTypes: ["literal", "expression"],
53256
+ valueShape: "keyword",
53257
+ markerOverride: USING_VIEW_MARKER_ALL_LANGS
53258
+ };
52908
53259
  swapSchema = {
52909
53260
  action: "swap",
52910
53261
  description: "Swap DOM content using various strategies (innerHTML, outerHTML, delete, etc.)",
@@ -52925,7 +53276,11 @@ ${body}
52925
53276
  // work. Preserved verbatim by the Arc F migration (a faithful migration must
52926
53277
  // not change output) and pinned as two `drift` exemptions; this is the
52927
53278
  // behavior fix those entries were waiting for.
52928
- ast: { args: ["method", "destination", "patient"] },
53279
+ //
53280
+ // `manner` is the exception to "keyword-positional args": it rides as
53281
+ // `modifiers.viewTransition`, which SwapCommand.parseInput reads for presence
53282
+ // alongside its existing flat-args `using`/`view`/`transition` scan.
53283
+ ast: { args: ["method", "destination", "patient"], modifiers: { viewTransition: "manner" } },
52929
53284
  roles: [
52930
53285
  {
52931
53286
  role: "method",
@@ -53020,6 +53375,11 @@ ${body}
53020
53375
  ar: "\u0628\u0640",
53021
53376
  tl: "nang"
53022
53377
  }
53378
+ },
53379
+ {
53380
+ ...VIEW_TRANSITION_MANNER_ROLE,
53381
+ svoPosition: 4,
53382
+ sovPosition: 4
53023
53383
  }
53024
53384
  ]
53025
53385
  };
@@ -53030,7 +53390,15 @@ ${body}
53030
53390
  primaryRole: "patient",
53031
53391
  // `morph #list to it` \u2192 args [content], modifiers { on: element }.
53032
53392
  // Content is source or destination; the element being morphed is the patient.
53033
- ast: { args: [["source", "destination"]], modifiers: { on: "patient" } },
53393
+ //
53394
+ // `manner` rides as `modifiers.viewTransition`, same as swap/process \u2014
53395
+ // MorphCommand.parseInput reads it for presence alongside its existing
53396
+ // flat-args `using`/`view`/`transition` scan (the traditional-parser path,
53397
+ // which owns English because morph sits on SKIP_SEMANTIC_COMMANDS).
53398
+ ast: {
53399
+ args: [["source", "destination"]],
53400
+ modifiers: { on: "patient", viewTransition: "manner" }
53401
+ },
53034
53402
  roles: [
53035
53403
  {
53036
53404
  role: "patient",
@@ -53051,6 +53419,18 @@ ${body}
53051
53419
  sovPosition: 2,
53052
53420
  markerOverride: { en: "to" }
53053
53421
  // "morph #target to it"
53422
+ },
53423
+ {
53424
+ // `morph #target to it using view transition` \u2014 the same tail as swap and
53425
+ // process, closed here for the same reason (#870's third-schema filing):
53426
+ // without the role the semantic parser matched morph at confidence 1.0
53427
+ // and stranded the tail, so every semantic-only consumer (multilingual
53428
+ // bundles, the bridge, `translate()`) silently dropped the animation
53429
+ // request in all 24 languages. Morph has NO hand-written patterns in any
53430
+ // language, so this schema role is the whole fix on the pattern side.
53431
+ ...VIEW_TRANSITION_MANNER_ROLE,
53432
+ svoPosition: 3,
53433
+ sovPosition: 3
53054
53434
  }
53055
53435
  ]
53056
53436
  };
@@ -53237,6 +53617,13 @@ ${body}
53237
53617
  description: "Process hx-partial markup in HTML content",
53238
53618
  category: "dom-content",
53239
53619
  primaryRole: "patient",
53620
+ // `process partials in it` \u2192 args ['it']; the optional tail rides as
53621
+ // `modifiers.viewTransition`, which ProcessPartialsCommand.parseInput has
53622
+ // read since #861 (`raw.modifiers?.viewTransition !== undefined`). Without a
53623
+ // descriptor this schema fell through to `buildGenericCommand`, whose
53624
+ // modifier list is fixed (destination/duration/method/style) and would have
53625
+ // dropped a captured `manner` on the floor.
53626
+ ast: { args: ["patient"], modifiers: { viewTransition: "manner" } },
53240
53627
  roles: [
53241
53628
  {
53242
53629
  role: "patient",
@@ -53246,6 +53633,11 @@ ${body}
53246
53633
  svoPosition: 1,
53247
53634
  sovPosition: 1,
53248
53635
  markerOverride: PARTIALS_IN_MARKER_ALL_LANGS
53636
+ },
53637
+ {
53638
+ ...VIEW_TRANSITION_MANNER_ROLE,
53639
+ svoPosition: 2,
53640
+ sovPosition: 2
53249
53641
  }
53250
53642
  ]
53251
53643
  };
@@ -54674,7 +55066,9 @@ ${body}
54674
55066
  trigger: { primary: "d\xE9clencher", normalized: "trigger" },
54675
55067
  send: { primary: "envoyer", alternatives: ["envoie"], normalized: "send" },
54676
55068
  focus: { primary: "focaliser", alternatives: ["concentrer"], normalized: "focus" },
54677
- blur: { primary: "d\xE9focaliser", normalized: "blur" },
55069
+ // `d\u00e9focaliser` is an unattested infinitive; French pedagogy writes
55070
+ // `perte de focus` for the event (2026-07 terminology review).
55071
+ blur: { primary: "perte de focus", alternatives: ["d\xE9focaliser"], normalized: "blur" },
54678
55072
  // Phase 1 (v0.9.90): DOM / form state / debug
54679
55073
  // `vide` (adjective, "empty") is the i18n transformer's `is empty` predicate
54680
55074
  // form; `vider` is the verb ("to empty"). Accept both so the emptiness check
@@ -54687,7 +55081,13 @@ ${body}
54687
55081
  reset: { primary: "r\xE9initialiser", alternatives: ["reinitialiser"], normalized: "reset" },
54688
55082
  breakpoint: { primary: "point-arr\xEAt", alternatives: ["point-arret"], normalized: "breakpoint" },
54689
55083
  go: { primary: "aller", alternatives: ["naviguer", "va"], normalized: "go" },
54690
- scroll: { primary: "d\xE9filer", alternatives: ["faire-d\xE9filer"], normalized: "scroll" },
55084
+ // MDN fr and the OQLF standardize the noun `d\u00e9filement` for the event; the
55085
+ // infinitive stays as an alternative.
55086
+ scroll: {
55087
+ primary: "d\xE9filement",
55088
+ alternatives: ["defilement", "d\xE9filer", "faire-d\xE9filer"],
55089
+ normalized: "scroll"
55090
+ },
54691
55091
  push: { primary: "pousser", normalized: "push" },
54692
55092
  replace: { primary: "remplacer", normalized: "replace" },
54693
55093
  process: { primary: "traiter", normalized: "process" },
@@ -54753,9 +55153,15 @@ ${body}
54753
55153
  after: { primary: "apr\xE8s", normalized: "after" },
54754
55154
  // Common event names (for event handler patterns)
54755
55155
  click: { primary: "clic", alternatives: ["clique"], normalized: "click" },
54756
- // `resize` event (window-resize): dict emits redimensionner; register it so the
54757
- // event types as literal="resize" (matching en) instead of expression.
54758
- resize: { primary: "redimensionner", normalized: "resize" },
55156
+ // `resize` event (window-resize): the noun `redimensionnement` is the
55157
+ // attested event form ("lors du redimensionnement de la fen\u00eatre"). The dict
55158
+ // still emits redimensionner, kept as an alternative so the event keeps
55159
+ // typing as literal="resize" (matching en) instead of expression.
55160
+ resize: {
55161
+ primary: "redimensionnement",
55162
+ alternatives: ["redimensionner"],
55163
+ normalized: "resize"
55164
+ },
54759
55165
  hover: { primary: "survol", alternatives: ["survoler"], normalized: "hover" },
54760
55166
  submit: { primary: "soumission", alternatives: ["soumettre"], normalized: "submit" },
54761
55167
  input: { primary: "saisie", alternatives: ["entr\xE9e"], normalized: "input" },
@@ -58493,9 +58899,17 @@ ${body}
58493
58899
  on: { primary: "\xFCzerinde", alternatives: ["zaman"], normalized: "on" },
58494
58900
  trigger: { primary: "tetikle", normalized: "trigger" },
58495
58901
  send: { primary: "g\xF6nder", normalized: "send" },
58496
- // DOM focus
58497
- focus: { primary: "odak", alternatives: ["odaklanma"], normalized: "focus" },
58498
- blur: { primary: "bulan\u0131k", alternatives: ["bulan\u0131kl\u0131k", "bulanik"], normalized: "blur" },
58902
+ // DOM focus. `odaklanma` (the act of focusing) leads over the static state
58903
+ // noun `odak` \u2014 Turkish event prose says "odaklanma olay\u0131". `bulan\u0131k` was
58904
+ // the optical blur (CSS filters, image processing), never the DOM event;
58905
+ // native usage is `odak kayb\u0131` (loss of focus). 2026-07 terminology-review
58906
+ // corrections; old forms stay as parse alternatives.
58907
+ focus: { primary: "odaklanma", alternatives: ["odak"], normalized: "focus" },
58908
+ blur: {
58909
+ primary: "odak kayb\u0131",
58910
+ alternatives: ["odak kaybi", "bulan\u0131k", "bulan\u0131kl\u0131k", "bulanik"],
58911
+ normalized: "blur"
58912
+ },
58499
58913
  // Phase 1 (v0.9.90): DOM / form state / debug
58500
58914
  empty: { primary: "bo\u015Falt", alternatives: ["bosalt", "bo\u015F"], normalized: "empty" },
58501
58915
  open: { primary: "a\xE7", alternatives: ["ac"], normalized: "open" },
@@ -58516,7 +58930,9 @@ ${body}
58516
58930
  },
58517
58931
  hover: { primary: "\xFCzerine gelme", alternatives: ["\xFCzerinde gezinme"], normalized: "hover" },
58518
58932
  submit: { primary: "g\xF6nderme", normalized: "submit" },
58519
- input: { primary: "giri\u015F", alternatives: ["girdi", "giris"], normalized: "input" },
58933
+ // `giri\u015f` reads as entry/login (giri\u015f yapma) and can imply an auth event;
58934
+ // the data-input term is `girdi` ("Girdi (Input) Eventleri").
58935
+ input: { primary: "girdi", alternatives: ["giri\u015F", "giris"], normalized: "input" },
58520
58936
  change: { primary: "de\u011Fi\u015Fiklik", alternatives: ["de\u011Fi\u015Fim", "degisim"], normalized: "change" },
58521
58937
  // `load` event: the i18n dict emits y\u00fckle for `load`. Without this keyword the
58522
58938
  // SOV reorder's mid-stream `y\u00fckle de` (on load) tokenized as the `install`
@@ -58526,7 +58942,13 @@ ${body}
58526
58942
  load: { primary: "y\xFCkle", normalized: "load" },
58527
58943
  // Navigation
58528
58944
  go: { primary: "git", normalized: "go" },
58529
- scroll: { primary: "kayd\u0131r", alternatives: ["kaydir"], normalized: "scroll" },
58945
+ // `kayd\u0131r` is the bare imperative; the attested event noun is `kayd\u0131rma`
58946
+ // ("kayd\u0131rma olay\u0131"). The imperative stays as an alternative.
58947
+ scroll: {
58948
+ primary: "kayd\u0131rma",
58949
+ alternatives: ["kaydirma", "kayd\u0131r", "kaydir"],
58950
+ normalized: "scroll"
58951
+ },
58530
58952
  push: { primary: "itele", alternatives: ["push"], normalized: "push" },
58531
58953
  replace: { primary: "de\u011Fi\u015Ftir_url", alternatives: ["degistir_url"], normalized: "replace" },
58532
58954
  process: { primary: "i\u015Fle", alternatives: ["isle"], normalized: "process" },
@@ -59469,6 +59891,20 @@ ${body}
59469
59891
  };
59470
59892
  }
59471
59893
  });
59894
+ init_marker_resolution = __esm2({
59895
+ "src/parser/utils/marker-resolution.ts"() {
59896
+ ROLE_MARKER_CONCEPTS = /* @__PURE__ */ new Set([
59897
+ "destination",
59898
+ "source",
59899
+ "patient",
59900
+ "object",
59901
+ "event",
59902
+ "eventmarker",
59903
+ "manner",
59904
+ "instrument"
59905
+ ]);
59906
+ }
59907
+ });
59472
59908
  init_put = __esm2({
59473
59909
  "src/patterns/put.ts"() {
59474
59910
  PUT_POSITIONAL = [
@@ -70505,10 +70941,6 @@ ${body}
70505
70941
  "src/parser/utils/role-positioning.ts"() {
70506
70942
  }
70507
70943
  });
70508
- init_marker_resolution = __esm2({
70509
- "src/parser/utils/marker-resolution.ts"() {
70510
- }
70511
- });
70512
70944
  init_event_handlers_sov = __esm2({
70513
70945
  "src/generators/event-handlers-sov.ts"() {
70514
70946
  init_command_schemas();
@@ -70662,6 +71094,21 @@ ${body}
70662
71094
  });
70663
71095
  init_swap = __esm2({
70664
71096
  "src/patterns/languages/en/swap.ts"() {
71097
+ VIEW_TRANSITION_TAIL = {
71098
+ type: "group",
71099
+ optional: true,
71100
+ tokens: [
71101
+ { type: "literal", value: "using" },
71102
+ { type: "literal", value: "view" },
71103
+ {
71104
+ type: "role",
71105
+ role: "manner",
71106
+ optional: true,
71107
+ expectedTypes: ["literal", "expression"],
71108
+ valueShape: "keyword"
71109
+ }
71110
+ ]
71111
+ };
70665
71112
  swapSimpleEnglish = {
70666
71113
  id: "swap-en-handcrafted",
70667
71114
  language: "en",
@@ -70669,11 +71116,12 @@ ${body}
70669
71116
  priority: 110,
70670
71117
  // Higher than generated patterns
70671
71118
  template: {
70672
- format: "swap {method} {destination}",
71119
+ format: "swap {method} {destination} [using view {manner}]",
70673
71120
  tokens: [
70674
71121
  { type: "literal", value: "swap" },
70675
71122
  { type: "role", role: "method" },
70676
- { type: "role", role: "destination" }
71123
+ { type: "role", role: "destination" },
71124
+ VIEW_TRANSITION_TAIL
70677
71125
  ]
70678
71126
  },
70679
71127
  extraction: {
@@ -70687,12 +71135,13 @@ ${body}
70687
71135
  command: "swap",
70688
71136
  priority: 120,
70689
71137
  template: {
70690
- format: "swap {destination} with {patient}",
71138
+ format: "swap {destination} with {patient} [using view {manner}]",
70691
71139
  tokens: [
70692
71140
  { type: "literal", value: "swap" },
70693
71141
  { type: "role", role: "destination" },
70694
71142
  { type: "literal", value: "with" },
70695
- { type: "role", role: "patient" }
71143
+ { type: "role", role: "patient" },
71144
+ VIEW_TRANSITION_TAIL
70696
71145
  ]
70697
71146
  },
70698
71147
  extraction: {}
@@ -70703,14 +71152,15 @@ ${body}
70703
71152
  command: "swap",
70704
71153
  priority: 140,
70705
71154
  template: {
70706
- format: "swap {method} of {destination} with {patient}",
71155
+ format: "swap {method} of {destination} with {patient} [using view {manner}]",
70707
71156
  tokens: [
70708
71157
  { type: "literal", value: "swap" },
70709
71158
  { type: "role", role: "method" },
70710
71159
  { type: "literal", value: "of" },
70711
71160
  { type: "role", role: "destination" },
70712
71161
  { type: "literal", value: "with" },
70713
- { type: "role", role: "patient" }
71162
+ { type: "role", role: "patient" },
71163
+ VIEW_TRANSITION_TAIL
70714
71164
  ]
70715
71165
  },
70716
71166
  extraction: {}
@@ -70721,13 +71171,14 @@ ${body}
70721
71171
  command: "swap",
70722
71172
  priority: 130,
70723
71173
  template: {
70724
- format: "swap {method} {destination} with {patient}",
71174
+ format: "swap {method} {destination} with {patient} [using view {manner}]",
70725
71175
  tokens: [
70726
71176
  { type: "literal", value: "swap" },
70727
71177
  { type: "role", role: "method" },
70728
71178
  { type: "role", role: "destination" },
70729
71179
  { type: "literal", value: "with" },
70730
- { type: "role", role: "patient" }
71180
+ { type: "role", role: "patient" },
71181
+ VIEW_TRANSITION_TAIL
70731
71182
  ]
70732
71183
  },
70733
71184
  extraction: {}
@@ -72329,6 +72780,7 @@ ${body}
72329
72780
  vi: vietnameseProfile,
72330
72781
  zh: chineseProfile
72331
72782
  });
72783
+ init_marker_resolution();
72332
72784
  init_command_schemas();
72333
72785
  init_english();
72334
72786
  init_command_schemas();
@@ -72579,7 +73031,8 @@ ${body}
72579
73031
  const hasDefault = (role) => {
72580
73032
  return pattern.extraction?.[role]?.default !== void 0;
72581
73033
  };
72582
- const schemaRoles = commandSchemas[pattern.command]?.roles;
73034
+ const wrappedAction = pattern.command === "on" ? pattern.extraction?.action?.value : void 0;
73035
+ const schemaRoles = commandSchemas[wrappedAction ?? pattern.command]?.roles;
72583
73036
  const isShapeAnchored = (role) => schemaRoles?.find((r) => r.role === role)?.valueShape !== void 0;
72584
73037
  for (const token of pattern.template.tokens) {
72585
73038
  if (token.type === "role") {
@@ -72972,7 +73425,7 @@ ${body}
72972
73425
  return patternToken.optional || false;
72973
73426
  }
72974
73427
  }
72975
- if (patternToken.optional && nextPatternToken === void 0 && patternToken.role !== "event" && patternToken.role !== "action" && token.kind === "keyword") {
73428
+ if (patternToken.optional && nextPatternToken === void 0 && patternToken.role !== "event" && patternToken.role !== "action" && patternToken.valueShape !== "keyword" && token.kind === "keyword") {
72976
73429
  const verbNorm = (token.normalized ?? token.value).toLowerCase();
72977
73430
  if (verbNorm in commandSchemas) {
72978
73431
  return true;
@@ -73127,7 +73580,14 @@ ${body}
73127
73580
  }
73128
73581
  }
73129
73582
  }
73130
- captured.set(patternToken.role, value);
73583
+ if (patternToken.valueShape === "keyword" && value.type === "expression") {
73584
+ captured.set(
73585
+ patternToken.role,
73586
+ createLiteral(String(value.raw ?? ""))
73587
+ );
73588
+ } else {
73589
+ captured.set(patternToken.role, value);
73590
+ }
73131
73591
  tokens.advance();
73132
73592
  if (patternToken.role === "event") {
73133
73593
  const filterTok = tokens.peek();
@@ -73716,17 +74176,7 @@ ${body}
73716
74176
  * so this never blocks a genuine `my value` / `its style` possessive.
73717
74177
  */
73718
74178
  isRoleMarkerConcept(normalized2) {
73719
- const markerConcepts = /* @__PURE__ */ new Set([
73720
- "destination",
73721
- "source",
73722
- "patient",
73723
- "object",
73724
- "event",
73725
- "eventmarker",
73726
- "manner",
73727
- "instrument"
73728
- ]);
73729
- return markerConcepts.has(normalized2.toLowerCase());
74179
+ return ROLE_MARKER_CONCEPTS.has(normalized2.toLowerCase());
73730
74180
  }
73731
74181
  /**
73732
74182
  * Does `token` look like an EVENT name for the `event` role? Events are bare
@@ -74112,7 +74562,7 @@ ${body}
74112
74562
  */
74113
74563
  matchGroupToken(tokens, patternToken, captured, nextPatternToken) {
74114
74564
  const mark = tokens.mark();
74115
- const capturedBefore = new Set(captured.keys());
74565
+ const capturedBefore = new Map(captured);
74116
74566
  const success = this.matchTokenSequence(
74117
74567
  tokens,
74118
74568
  patternToken.tokens,
@@ -74126,6 +74576,11 @@ ${body}
74126
74576
  captured.delete(role);
74127
74577
  }
74128
74578
  }
74579
+ for (const [role, value] of capturedBefore) {
74580
+ if (captured.get(role) !== value) {
74581
+ captured.set(role, value);
74582
+ }
74583
+ }
74129
74584
  return patternToken.optional || false;
74130
74585
  }
74131
74586
  return true;
@@ -74227,7 +74682,7 @@ ${body}
74227
74682
  } else if (rule.value !== void 0) {
74228
74683
  captured.set(role, { type: "literal", value: rule.value });
74229
74684
  } else if (rule.default) {
74230
- captured.set(role, rule.default);
74685
+ captured.set(role, { ...rule.default, implicit: true });
74231
74686
  }
74232
74687
  }
74233
74688
  }
@@ -74397,6 +74852,7 @@ ${body}
74397
74852
  init_base();
74398
74853
  init_registry();
74399
74854
  init_command_schemas();
74855
+ init_marker_resolution();
74400
74856
  init_registry();
74401
74857
  OPENER_ACTIONS = ["if", "unless", "repeat", "for", "while"];
74402
74858
  PASCAL_CASE_NAME = /^[A-Z][A-Za-z0-9_]*$/;
@@ -74529,14 +74985,20 @@ ${body}
74529
74985
  return parts.join(" ");
74530
74986
  }
74531
74987
  /**
74532
- * Join a statement list the way a block body reads: ` then ` between siblings,
74533
- * but a single space immediately after a loop/tell block header (whose body
74534
- * follows directly). Shared by renderConditional's branches; renderCompound
74535
- * keeps its own copy because it also handles the multi-handler and bind-feature
74536
- * cases.
74988
+ * Join a statement list the way a block body reads: the target language's `then`
74989
+ * between siblings, but a single space immediately after a loop/tell block header
74990
+ * (whose body follows directly). Used by renderConditional's branches;
74991
+ * renderCompound keeps its own copy because it also handles the multi-handler
74992
+ * and bind-feature cases.
74993
+ *
74994
+ * The chain word is localized (`this.keyword(language, 'then')`) for the same
74995
+ * reason renderCompound localizes it: a hardcoded English `then` leaks into every
74996
+ * non-en block body (`\u3082\u3057 \u2026 \u524a\u9664 then \u8ffd\u52a0`), which no target-language tokenizer
74997
+ * recognizes as a connector.
74537
74998
  */
74538
74999
  joinStatements(statements, language) {
74539
75000
  const rendered = statements.map((s) => this.render(s, language));
75001
+ const thenKw = this.keyword(language, "then");
74540
75002
  let out = rendered[0] ?? "";
74541
75003
  for (let i = 1; i < rendered.length; i++) {
74542
75004
  const prev = statements[i - 1];
@@ -74544,7 +75006,7 @@ ${body}
74544
75006
  if (prev.kind === "command" && BLOCK_NEEDS_TRAILING_END.has(prev.action)) {
74545
75007
  out += ` ${this.keyword(language, "end")}`;
74546
75008
  }
74547
- out += (afterBlockHeader ? " " : " then ") + rendered[i];
75009
+ out += (afterBlockHeader ? " " : ` ${thenKw} `) + rendered[i];
74548
75010
  }
74549
75011
  return out;
74550
75012
  }
@@ -74717,6 +75179,7 @@ ${body}
74717
75179
  if (!roleToken) continue;
74718
75180
  const roleValue = node.roles.get(roleName);
74719
75181
  if (roleValue?.type !== "reference" || roleValue.value !== "me") continue;
75182
+ if (!roleValue.implicit) continue;
74720
75183
  if (roleName === "destination") {
74721
75184
  const patient = node.roles.get("patient");
74722
75185
  if (patient?.type === "literal" && patient.dataType === "string") continue;
@@ -75564,7 +76027,7 @@ ${body}
75564
76027
  }
75565
76028
  let eventModifiers = patternMatcher.extractEventModifiers(tokens);
75566
76029
  const sourceValue = match.captured.get("source");
75567
- if (sourceValue && match.pattern.id.includes("source") && !(sourceValue.type === "reference" && sourceValue.value === "me")) {
76030
+ if (sourceValue && match.pattern.id.endsWith("source") && !(sourceValue.type === "reference" && sourceValue.value === "me")) {
75568
76031
  eventModifiers = { ...eventModifiers ?? {}, from: sourceValue };
75569
76032
  }
75570
76033
  const additionalEvents = this.extractOrConjunctionEvents(tokens, language);
@@ -75714,13 +76177,18 @@ ${body}
75714
76177
  if (!spec) return true;
75715
76178
  return spec.expectedTypes.length > 0 && !spec.expectedTypes.includes(valType(val));
75716
76179
  };
76180
+ const isMarkerConceptJunk = (role, val) => role === "patient" && !!schema && !schema.roles.some((r) => r.role === "patient") && valType(val) === "literal" && ROLE_MARKER_CONCEPTS.has(
76181
+ String(val.value ?? "").toLowerCase()
76182
+ );
75717
76183
  const preservesFused = !!first && first.kind === "command" && Object.entries(roles).every(([role, val]) => {
75718
- if (isIgnorableFusedRole(role, val)) return true;
76184
+ if (isIgnorableFusedRole(role, val) || isMarkerConceptJunk(role, val)) return true;
75719
76185
  const rv = first.roles.get(mapRole(role));
75720
76186
  if (rv !== void 0 && valType(rv) === valType(val)) return true;
75721
76187
  if (role === "patient" && actionName === "pick" && valType(val) === "literal") {
75722
76188
  const mv = first.roles.get("method");
75723
- return mv !== void 0 && valType(mv) === "literal" && String(mv.value) === String(val.value);
76189
+ const mvType = valType(mv);
76190
+ const mvSurface = mvType === "literal" ? String(mv.value) : mvType === "expression" ? String(mv.raw) : void 0;
76191
+ return mvSurface !== void 0 && mvSurface === String(val.value);
75724
76192
  }
75725
76193
  return false;
75726
76194
  });
@@ -75730,7 +76198,12 @@ ${body}
75730
76198
  // the swap can never swallow a body command. The body-swallowing
75731
76199
  // generated repeat matches none of these ids.
75732
76200
  /^repeat-.*-(times|for-in|while-head|until-head)$/.test(reparsePid);
75733
- if (reparsed.length === 1 && first && first.kind === "command" && first.action === actionName && preservesFused && headOnlyOk && first.roles.size > Object.keys(roles).length) {
76201
+ if (reparsed.length === 1 && first && first.kind === "command" && first.action === actionName && preservesFused && headOnlyOk && // Strictly-more: the re-parse must recover something the fused
76202
+ // capture lacked. Junk marker captures are excluded from the
76203
+ // count \u2014 a fused shape whose ONLY role is a swallowed marker
76204
+ // (scroll: `destination:literal="destination"`) would otherwise
76205
+ // tie 1 > 1 and veto its own repair.
76206
+ first.roles.size > Object.entries(roles).filter(([r, v2]) => !isMarkerConceptJunk(r, v2)).length) {
75734
76207
  commandNode = first;
75735
76208
  while (tokens.position() < clauseEnd) tokens.advance();
75736
76209
  } else {
@@ -78817,6 +79290,12 @@ ${body}
78817
79290
  init_event_handler();
78818
79291
  init_wait();
78819
79292
  init_repeat();
79293
+ PICK_UNIT_WORDS = /* @__PURE__ */ new Set(["character", "characters", "item", "items"]);
79294
+ retypePickUnitWord = (raw) => {
79295
+ if (PICK_UNIT_WORDS.has(raw)) return { type: "expression", raw };
79296
+ const n = Number(raw);
79297
+ return createLiteral(raw !== "" && !Number.isNaN(n) ? n : raw);
79298
+ };
78820
79299
  VERB_INITIAL_SPECS = {
78821
79300
  ar: { srcMarker: "\u0645\u0646" },
78822
79301
  de: { srcMarker: "von", srcAlternatives: ["aus"] },
@@ -90504,6 +90983,7 @@ __export(index_exports, {
90504
90983
  extractOperations: () => extractOperations,
90505
90984
  generateCacheKey: () => generateCacheKey,
90506
90985
  jsonToSemanticNode: () => import_ir.jsonToSemanticNode,
90986
+ scoreNodes: () => import_fidelity.scoreNodes,
90507
90987
  validateSemanticJSON: () => import_ir.validateSemanticJSON
90508
90988
  });
90509
90989
  module.exports = __toCommonJS(index_exports);
@@ -90760,6 +91240,9 @@ function generateSummary(trigger, opDiffs) {
90760
91240
  return parts.join(". ");
90761
91241
  }
90762
91242
 
91243
+ // src/scoring/score.ts
91244
+ var import_fidelity = require("@lokascript/semantic/fidelity");
91245
+
90763
91246
  // src/input/detect.ts
90764
91247
  function detectFormat(input) {
90765
91248
  const trimmed = input.trim();
@@ -90816,6 +91299,23 @@ function normalize(request) {
90816
91299
  return normalizeNatural(input, request.language ?? "en");
90817
91300
  }
90818
91301
  }
91302
+ function liftNodeDiagnostics(node, diagnostics) {
91303
+ const nodeDiags = node.diagnostics;
91304
+ if (!Array.isArray(nodeDiags)) return;
91305
+ for (const d of nodeDiags) {
91306
+ if (d.severity !== "warning" && d.severity !== "error") continue;
91307
+ const diag = {
91308
+ severity: d.severity,
91309
+ // Parser codes are kebab-case; this surface uses UPPER_SNAKE (PARSE_ERROR &c).
91310
+ code: (d.code ?? "PARSE_DIAGNOSTIC").replace(/-/g, "_").toUpperCase(),
91311
+ message: d.message ?? "parser diagnostic"
91312
+ };
91313
+ if (d.code === "unconsumed-input") {
91314
+ diag.suggestion = "Dropped tokens were parsed but bound to no role \u2014 usually a missing role marker (e.g. 'to'/'on'/'from' before the target), so the role fell back to a default like `me`. Compare the returned roles against your intent.";
91315
+ }
91316
+ diagnostics.push(diag);
91317
+ }
91318
+ }
90819
91319
  function normalizeNatural(code, language) {
90820
91320
  const diagnostics = [];
90821
91321
  try {
@@ -90836,6 +91336,7 @@ function normalizeNatural(code, language) {
90836
91336
  });
90837
91337
  return { node: null, confidence: result.confidence, format: "natural", diagnostics };
90838
91338
  }
91339
+ liftNodeDiagnostics(result.node, diagnostics);
90839
91340
  return {
90840
91341
  node: result.node,
90841
91342
  confidence: result.confidence,
@@ -90893,6 +91394,66 @@ function normalizeJSON(input) {
90893
91394
  };
90894
91395
  }
90895
91396
 
91397
+ // src/validation/inert-shapes.ts
91398
+ var QUANTIFIER = /^(all|every|each)\.(\S+)$/;
91399
+ var PREDICATE_AS_CLASS = /(^|\s)\.(has|is|contains|matches|includes)(\s|$)/;
91400
+ function valueString(v2) {
91401
+ return String(v2.value ?? v2.raw ?? "");
91402
+ }
91403
+ function checkInertShapes(node) {
91404
+ const out = [];
91405
+ walk(node, out);
91406
+ return out;
91407
+ }
91408
+ function walk(node, out) {
91409
+ if (!node || typeof node !== "object") return;
91410
+ const n = node;
91411
+ if (n.roles && typeof n.roles.entries === "function") {
91412
+ for (const [role, raw] of n.roles.entries()) {
91413
+ const v2 = raw ?? {};
91414
+ const s = valueString(v2);
91415
+ const q = v2.type === "expression" ? QUANTIFIER.exec(s) : null;
91416
+ if (q && (role === "destination" || role === "source")) {
91417
+ out.push({
91418
+ severity: "warning",
91419
+ code: "INERT_QUANTIFIER_TARGET",
91420
+ message: `${role} parsed as property access "${s}" \u2014 "${q[1]}" is an undefined identifier at runtime, so this ${role} will not resolve.`,
91421
+ suggestion: `Selectors already address every match: write the bare selector (e.g. ".${q[2]}") without "${q[1]}".`
91422
+ });
91423
+ continue;
91424
+ }
91425
+ if (role === "condition" && v2.type === "expression" && PREDICATE_AS_CLASS.test(s)) {
91426
+ const word = PREDICATE_AS_CLASS.exec(s)?.[2];
91427
+ out.push({
91428
+ severity: "warning",
91429
+ code: "HALF_PARSED_CONDITION",
91430
+ message: `condition parsed ".${word}" as a class selector (full condition: "${s}") \u2014 it will evaluate falsy and the body will never run.`,
91431
+ suggestion: "For class tests use `matches`: `if #box matches .danger`."
91432
+ });
91433
+ continue;
91434
+ }
91435
+ if (v2.type === "selector" && s.startsWith("<")) {
91436
+ out.push({
91437
+ severity: "warning",
91438
+ code: "UNSUPPORTED_QUERY_LITERAL",
91439
+ message: `${role} selector "${s}" uses query-literal syntax, which this parser does not support \u2014 at runtime it is an invalid CSS selector and matches nothing.`,
91440
+ suggestion: `Use a plain CSS selector instead (e.g. "${s.replace(/^<|\/?>$/g, "")}").`
91441
+ });
91442
+ continue;
91443
+ }
91444
+ if (n.action === "set" && v2.type === "property-path" && v2.property === "text") {
91445
+ out.push({
91446
+ severity: "warning",
91447
+ code: "INERT_PROPERTY_WRITE",
91448
+ message: `set targets property "text" \u2014 on most elements this is not a DOM property, so the write usually changes nothing visible.`,
91449
+ suggestion: 'Use `textContent` (`set the textContent of #el to \u2026`) or `put "\u2026" into #el`.'
91450
+ });
91451
+ }
91452
+ }
91453
+ }
91454
+ if (Array.isArray(n.body)) for (const child of n.body) walk(child, out);
91455
+ }
91456
+
90896
91457
  // src/validation/gates.ts
90897
91458
  var _validators = null;
90898
91459
  function initValidation(validators) {
@@ -90949,6 +91510,7 @@ function runValidationGates(node, confidence, confidenceThreshold) {
90949
91510
  }
90950
91511
  }
90951
91512
  }
91513
+ diagnostics.push(...checkInertShapes(node));
90952
91514
  return { pass: true, diagnostics, adjustedConfidence };
90953
91515
  }
90954
91516
  function nodeToParseResult(node) {
@@ -93401,9 +93963,17 @@ var CompilationService = class _CompilationService {
93401
93963
  }
93402
93964
  try {
93403
93965
  const result = this.translateFn(request.code, request.from, request.to);
93966
+ let verification;
93967
+ if (request.verify !== false) {
93968
+ verification = this.scoreFidelity({
93969
+ reference: { code: request.code, language: request.from },
93970
+ candidate: { code: result, language: request.to }
93971
+ });
93972
+ }
93404
93973
  return {
93405
93974
  ok: true,
93406
93975
  code: result,
93976
+ ...verification !== void 0 ? { verification } : {},
93407
93977
  diagnostics: []
93408
93978
  };
93409
93979
  } catch (error) {
@@ -93627,6 +94197,41 @@ var CompilationService = class _CompilationService {
93627
94197
  diagnostics
93628
94198
  };
93629
94199
  }
94200
+ /**
94201
+ * Score a candidate against a reference for structural fidelity — the
94202
+ * multilingual ratchet's scorers (docs/FIDELITY.md) applied to one pair of
94203
+ * inputs. Sides accept any input format and may be in different languages;
94204
+ * see src/scoring/score.ts for signal semantics. Complementary to diff():
94205
+ * diff answers "identical, and where not?", this answers "how faithful, and
94206
+ * what exactly is missing or hallucinated?".
94207
+ */
94208
+ scoreFidelity(request) {
94209
+ const diagnostics = [];
94210
+ const threshold = request.confidence ?? this.confidenceThreshold;
94211
+ const normRef = normalize({ ...request.reference, confidence: request.confidence });
94212
+ diagnostics.push(
94213
+ ...normRef.diagnostics.map((d) => ({ ...d, message: `[reference] ${d.message}` }))
94214
+ );
94215
+ const normCand = normalize({ ...request.candidate, confidence: request.confidence });
94216
+ diagnostics.push(
94217
+ ...normCand.diagnostics.map((d) => ({ ...d, message: `[candidate] ${d.message}` }))
94218
+ );
94219
+ if (!normRef.node || !normCand.node) {
94220
+ return { ok: false, diagnostics };
94221
+ }
94222
+ const gateRef = runValidationGates(normRef.node, normRef.confidence, threshold);
94223
+ const gateCand = runValidationGates(normCand.node, normCand.confidence, threshold);
94224
+ diagnostics.push(
94225
+ ...gateRef.diagnostics.map((d) => ({ ...d, message: `[reference] ${d.message}` }))
94226
+ );
94227
+ diagnostics.push(
94228
+ ...gateCand.diagnostics.map((d) => ({ ...d, message: `[candidate] ${d.message}` }))
94229
+ );
94230
+ if (!gateRef.pass || !gateCand.pass) {
94231
+ return { ok: false, diagnostics };
94232
+ }
94233
+ return { ok: true, diagnostics, ...(0, import_fidelity.scoreNodes)(normRef.node, normCand.node) };
94234
+ }
93630
94235
  /**
93631
94236
  * Generate a target-specific output from LSE (bracket syntax or protocol JSON).
93632
94237
  *
@@ -93839,6 +94444,7 @@ var import_ir = require("@lokascript/framework/ir");
93839
94444
  extractOperations,
93840
94445
  generateCacheKey,
93841
94446
  jsonToSemanticNode,
94447
+ scoreNodes,
93842
94448
  validateSemanticJSON
93843
94449
  });
93844
94450
  //# sourceMappingURL=index.cjs.map