@atlaskit/editor-plugin-autocomplete 3.6.0 → 3.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/CANONICAL_FIX__DO_NOT_USE_ME_A/package.json +1 -8
  2. package/CANONICAL_FIX__DO_NOT_USE_ME_B/package.json +1 -8
  3. package/CANONICAL_FIX__DO_NOT_USE_ME_C/package.json +1 -8
  4. package/CHANGELOG.md +21 -0
  5. package/autocompletePlugin/package.json +1 -8
  6. package/autocompletePluginType/package.json +1 -8
  7. package/dist/cjs/pm-plugins/autocomplete-plugin.js +20 -2
  8. package/dist/cjs/pm-plugins/local-slow-lane-client.js +3 -1
  9. package/dist/cjs/pm-plugins/text-predictor.js +18 -4
  10. package/dist/es2019/pm-plugins/autocomplete-plugin.js +20 -2
  11. package/dist/es2019/pm-plugins/local-slow-lane-client.js +3 -1
  12. package/dist/es2019/pm-plugins/text-predictor.js +17 -3
  13. package/dist/esm/pm-plugins/autocomplete-plugin.js +20 -2
  14. package/dist/esm/pm-plugins/local-slow-lane-client.js +3 -1
  15. package/dist/esm/pm-plugins/text-predictor.js +18 -4
  16. package/dist/types/pm-plugins/local-slow-lane-client.d.ts +2 -2
  17. package/dist/types/pm-plugins/text-predictor.d.ts +4 -1
  18. package/package.json +2 -2
  19. package/src/pm-plugins/autocomplete-plugin/package.json +1 -8
  20. package/src/pm-plugins/autocomplete-plugin.ts +18 -2
  21. package/src/pm-plugins/local-slow-lane-client.ts +10 -17
  22. package/src/pm-plugins/slow-lane-client/package.json +1 -8
  23. package/src/pm-plugins/text-predictor/package.json +1 -8
  24. package/src/pm-plugins/text-predictor.ts +15 -6
  25. package/dist/types-ts4.5/analytics/ufo.d.ts +0 -38
  26. package/dist/types-ts4.5/autocompletePlugin.d.ts +0 -2
  27. package/dist/types-ts4.5/autocompletePluginType.d.ts +0 -10
  28. package/dist/types-ts4.5/entry-points/autocompletePlugin.d.ts +0 -1
  29. package/dist/types-ts4.5/entry-points/autocompletePluginType.d.ts +0 -1
  30. package/dist/types-ts4.5/entry-points/src-pm-plugins-autocomplete-plugin.d.ts +0 -2
  31. package/dist/types-ts4.5/entry-points/src-pm-plugins-slow-lane-client.d.ts +0 -2
  32. package/dist/types-ts4.5/entry-points/src-pm-plugins-text-predictor.d.ts +0 -2
  33. package/dist/types-ts4.5/index.d.ts +0 -2
  34. package/dist/types-ts4.5/pm-plugins/autocomplete-plugin.d.ts +0 -49
  35. package/dist/types-ts4.5/pm-plugins/debug-mode.d.ts +0 -27
  36. package/dist/types-ts4.5/pm-plugins/ghost-text-decoration.d.ts +0 -7
  37. package/dist/types-ts4.5/pm-plugins/local-slow-lane-client.d.ts +0 -241
  38. package/dist/types-ts4.5/pm-plugins/scoring-pipeline.d.ts +0 -43
  39. package/dist/types-ts4.5/pm-plugins/slow-lane-client.d.ts +0 -46
  40. package/dist/types-ts4.5/pm-plugins/text-predictor.d.ts +0 -88
@@ -4,12 +4,5 @@
4
4
  "module": "../dist/esm/pm-plugins/autocomplete-plugin.js",
5
5
  "module:es2019": "../dist/es2019/pm-plugins/autocomplete-plugin.js",
6
6
  "sideEffects": false,
7
- "types": "../dist/types/pm-plugins/autocomplete-plugin.d.ts",
8
- "typesVersions": {
9
- ">=4.5 <5.9": {
10
- "*": [
11
- "../dist/types-ts4.5/pm-plugins/autocomplete-plugin.d.ts"
12
- ]
13
- }
14
- }
7
+ "types": "../dist/types/pm-plugins/autocomplete-plugin.d.ts"
15
8
  }
@@ -4,12 +4,5 @@
4
4
  "module": "../dist/esm/pm-plugins/slow-lane-client.js",
5
5
  "module:es2019": "../dist/es2019/pm-plugins/slow-lane-client.js",
6
6
  "sideEffects": false,
7
- "types": "../dist/types/pm-plugins/slow-lane-client.d.ts",
8
- "typesVersions": {
9
- ">=4.5 <5.9": {
10
- "*": [
11
- "../dist/types-ts4.5/pm-plugins/slow-lane-client.d.ts"
12
- ]
13
- }
14
- }
7
+ "types": "../dist/types/pm-plugins/slow-lane-client.d.ts"
15
8
  }
@@ -4,12 +4,5 @@
4
4
  "module": "../dist/esm/pm-plugins/text-predictor.js",
5
5
  "module:es2019": "../dist/es2019/pm-plugins/text-predictor.js",
6
6
  "sideEffects": false,
7
- "types": "../dist/types/pm-plugins/text-predictor.d.ts",
8
- "typesVersions": {
9
- ">=4.5 <5.9": {
10
- "*": [
11
- "../dist/types-ts4.5/pm-plugins/text-predictor.d.ts"
12
- ]
13
- }
14
- }
7
+ "types": "../dist/types/pm-plugins/text-predictor.d.ts"
15
8
  }
package/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # @atlaskit/editor-plugin-autocomplete
2
2
 
3
+ ## 3.6.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [`8ed22a585196f`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/8ed22a585196f) -
8
+ [ux] Fixes a bug where autocomplete suggestions were shown when the cursor was positioned in the
9
+ middle of an existing word. Suggestions are now suppressed unless the cursor is at the trailing
10
+ edge of a token.
11
+ - Updated dependencies
12
+
13
+ ## 3.6.1
14
+
15
+ ### Patch Changes
16
+
17
+ - [`2d57d65205edd`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/2d57d65205edd) -
18
+ [ASIMO] Add `isLocalLLM` attribute to `load-vectors` and `load-vocabulary` UFO experiences.
19
+
20
+ Both experiences now include an `isLocalLLM: boolean` attribute on every event (start, succeed,
21
+ fail) so analysts can segment loading performance and reliability by whether the user is on the
22
+ local on-device model setup vs the standard network-based slow-lane backend.
23
+
3
24
  ## 3.6.0
4
25
 
5
26
  ### Minor Changes
@@ -4,12 +4,5 @@
4
4
  "module": "../dist/esm/entry-points/autocompletePlugin.js",
5
5
  "module:es2019": "../dist/es2019/entry-points/autocompletePlugin.js",
6
6
  "sideEffects": false,
7
- "types": "../dist/types/entry-points/autocompletePlugin.d.ts",
8
- "typesVersions": {
9
- ">=4.5 <5.9": {
10
- "*": [
11
- "../dist/types-ts4.5/entry-points/autocompletePlugin.d.ts"
12
- ]
13
- }
14
- }
7
+ "types": "../dist/types/entry-points/autocompletePlugin.d.ts"
15
8
  }
@@ -4,12 +4,5 @@
4
4
  "module": "../dist/esm/entry-points/autocompletePluginType.js",
5
5
  "module:es2019": "../dist/es2019/entry-points/autocompletePluginType.js",
6
6
  "sideEffects": false,
7
- "types": "../dist/types/entry-points/autocompletePluginType.d.ts",
8
- "typesVersions": {
9
- ">=4.5 <5.9": {
10
- "*": [
11
- "../dist/types-ts4.5/entry-points/autocompletePluginType.d.ts"
12
- ]
13
- }
14
- }
7
+ "types": "../dist/types/entry-points/autocompletePluginType.d.ts"
15
8
  }
@@ -435,11 +435,25 @@ var createAutocompletePlugin = exports.createAutocompletePlugin = function creat
435
435
  }
436
436
  debounceTimer = setTimeout(function () {
437
437
  try {
438
+ var _nodeAfter$text;
438
439
  var state = view.state;
439
440
  var selection = state.selection;
440
441
  if (!selection.empty) {
441
442
  return;
442
443
  }
444
+
445
+ // Suppress suggestions when the cursor is mid-word — only offer
446
+ // completions when the cursor is at the trailing edge of a token.
447
+ // nodeAfter correctly handles inline atoms (mentions, emojis) where
448
+ // parentOffset and textContent indices diverge.
449
+ var nodeAfter = selection.$from.nodeAfter;
450
+ var charAfterCursor = nodeAfter !== null && nodeAfter !== void 0 && nodeAfter.isText ? (_nodeAfter$text = nodeAfter.text) === null || _nodeAfter$text === void 0 ? void 0 : _nodeAfter$text[0] : undefined;
451
+ // Only suppress for Unicode letters, digits, and underscore — hyphens,
452
+ // apostrophes, and similar punctuation are valid left-edge boundaries
453
+ // and should not block suggestions (e.g. cursor before '-' in compound-word).
454
+ if (charAfterCursor && /(?:[0-9A-Z_a-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088F\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5C\u0C5D\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDC-\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C8A\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7DC\uA7F1-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDDC0-\uDDF3\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD40-\uDD59\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDD40-\uDD65\uDD6F-\uDD85\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDEC2-\uDEC7\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDF70-\uDF81\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61\uDF80-\uDF89\uDF8B\uDF8E\uDF90-\uDFB5\uDFB7\uDFD1\uDFD3]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDED0-\uDEE3\uDF00-\uDF1A\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8\uDFC0-\uDFE0\uDFF0-\uDFF9]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDDB0-\uDDDB\uDDE0-\uDDE9\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDF50-\uDF59\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD80E\uD80F\uD81C-\uD822\uD840-\uD868\uD86A-\uD86D\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD88C][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46\uDC60-\uDFFF]|\uD810[\uDC00-\uDFFA]|\uD811[\uDC00-\uDE46]|\uD818[\uDD00-\uDD1D\uDD30-\uDD39]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDD40-\uDD6C\uDD70-\uDD79\uDE40-\uDE96\uDEA0-\uDEB8\uDEBB-\uDED3\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3\uDFF2-\uDFF6]|\uD823[\uDC00-\uDCD5\uDCFF-\uDD1E\uDD80-\uDDF2]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD833[\uDCF0-\uDCF9]|\uD834[\uDEC0-\uDED3\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDCD0-\uDCEB\uDCF0-\uDCF9\uDDD0-\uDDED\uDDF0-\uDDFA\uDEC0-\uDEDE\uDEE0-\uDEE2\uDEE4\uDEE5\uDEE7-\uDEED\uDEF0-\uDEF4\uDEFE\uDEFF\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEAD\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD88D[\uDC00-\uDC79])/.test(charAfterCursor)) {
455
+ return;
456
+ }
443
457
  var textBefore = getTextBeforeCursor(state);
444
458
 
445
459
  // Suppress re-showing the same suggestion the user just dismissed.
@@ -583,13 +597,17 @@ var createAutocompletePlugin = exports.createAutocompletePlugin = function creat
583
597
  return false;
584
598
  },
585
599
  focus: function focus() {
586
- (0, _textPredictor.loadDefaultVocabulary)().catch(function (error) {
600
+ var _options$useLocalMode, _options$useLocalMode2;
601
+ (0, _textPredictor.loadDefaultVocabulary)({
602
+ isLocalLLM: (_options$useLocalMode = options === null || options === void 0 ? void 0 : options.useLocalModel) !== null && _options$useLocalMode !== void 0 ? _options$useLocalMode : false
603
+ }).catch(function (error) {
587
604
  (0, _monitoring.logException)(error, {
588
605
  location: 'editor-plugin-autocomplete/loadDefaultVocabulary'
589
606
  });
590
607
  });
591
608
  (0, _textPredictor.loadVectorsAsync)({
592
- getBinaryUrl: options === null || options === void 0 ? void 0 : options.getVectorsBinaryUrl
609
+ getBinaryUrl: options === null || options === void 0 ? void 0 : options.getVectorsBinaryUrl,
610
+ isLocalLLM: (_options$useLocalMode2 = options === null || options === void 0 ? void 0 : options.useLocalModel) !== null && _options$useLocalMode2 !== void 0 ? _options$useLocalMode2 : false
593
611
  }).catch(function (error) {
594
612
  (0, _monitoring.logException)(error, {
595
613
  location: 'editor-plugin-autocomplete/loadVectorsAsync'
@@ -765,7 +765,9 @@ var createLocalSlowLaneClient = exports.createLocalSlowLaneClient = function cre
765
765
  if (lower.includes('loading chunk') || lower.includes('dynamically imported module') || lower.includes('dynamic import')) {
766
766
  return 'module_load_failed';
767
767
  }
768
- if (lower.includes('out of memory') || /\boom\b/.test(lower) || lower.includes('allocation') || lower.includes('exceeds') || lower.includes('buffer size') || lower.includes('not enough memory')) {
768
+ if (lower.includes('out of memory') ||
769
+ // eslint-disable-next-line require-unicode-regexp
770
+ /\boom\b/.test(lower) || lower.includes('allocation') || lower.includes('exceeds') || lower.includes('buffer size') || lower.includes('not enough memory')) {
769
771
  return 'insufficient_memory';
770
772
  }
771
773
  // Pre-flight already returns missing_shader_f16 when the feature is absent,
@@ -733,7 +733,8 @@ var unwrapJsonModule = function unwrapJsonModule(mod, shape) {
733
733
  };
734
734
  var loadVectorsAsync = exports.loadVectorsAsync = /*#__PURE__*/function () {
735
735
  var _ref6 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(options) {
736
- var url, _wordIndexOuter$index, res, buffer, float32, wordIndexModule, wordIndexOuter, wordIndex, nWords, dim, _t, _t2;
736
+ var _options$isLocalLLM;
737
+ var isLocalLLM, url, _wordIndexOuter$index, res, buffer, float32, wordIndexModule, wordIndexOuter, wordIndex, nWords, dim, _t, _t2;
737
738
  return _regenerator.default.wrap(function (_context) {
738
739
  while (1) switch (_context.prev = _context.next) {
739
740
  case 0:
@@ -751,8 +752,11 @@ var loadVectorsAsync = exports.loadVectorsAsync = /*#__PURE__*/function () {
751
752
  console.warn('[text-predictor] loadVectorsAsync called without a getBinaryUrl — vectors will not load. Pass getVectorsBinaryUrl via plugin options.');
752
753
  return _context.abrupt("return");
753
754
  case 2:
755
+ isLocalLLM = (_options$isLocalLLM = options === null || options === void 0 ? void 0 : options.isLocalLLM) !== null && _options$isLocalLLM !== void 0 ? _options$isLocalLLM : false;
754
756
  vectorsLoadStarted = true;
755
- (0, _ufo.startExp)(_ufo.EXPERIENCE_NAME.LOAD_VECTORS, 'singleton');
757
+ (0, _ufo.startExp)(_ufo.EXPERIENCE_NAME.LOAD_VECTORS, 'singleton', {
758
+ isLocalLLM: isLocalLLM
759
+ });
756
760
  _context.prev = 3;
757
761
  _context.next = 4;
758
762
  return options.getBinaryUrl();
@@ -765,6 +769,7 @@ var loadVectorsAsync = exports.loadVectorsAsync = /*#__PURE__*/function () {
765
769
  _t = _context["catch"](3);
766
770
  vectorsLoadStarted = false;
767
771
  (0, _ufo.failExp)(_ufo.EXPERIENCE_NAME.LOAD_VECTORS, 'singleton', {
772
+ isLocalLLM: isLocalLLM,
768
773
  errorType: 'resolve_url'
769
774
  });
770
775
  // eslint-disable-next-line no-console
@@ -782,6 +787,7 @@ var loadVectorsAsync = exports.loadVectorsAsync = /*#__PURE__*/function () {
782
787
  }
783
788
  vectorsLoadStarted = false;
784
789
  (0, _ufo.failExp)(_ufo.EXPERIENCE_NAME.LOAD_VECTORS, 'singleton', {
790
+ isLocalLLM: isLocalLLM,
785
791
  status: res.status,
786
792
  errorType: 'http_error'
787
793
  });
@@ -816,6 +822,7 @@ var loadVectorsAsync = exports.loadVectorsAsync = /*#__PURE__*/function () {
816
822
  dim: dim
817
823
  };
818
824
  (0, _ufo.succeedExp)(_ufo.EXPERIENCE_NAME.LOAD_VECTORS, 'singleton', {
825
+ isLocalLLM: isLocalLLM,
819
826
  wordCount: nWords,
820
827
  dim: dim,
821
828
  sizeBytes: float32.byteLength
@@ -835,6 +842,7 @@ var loadVectorsAsync = exports.loadVectorsAsync = /*#__PURE__*/function () {
835
842
  _t2 = _context["catch"](6);
836
843
  vectorsLoadStarted = false;
837
844
  (0, _ufo.failExp)(_ufo.EXPERIENCE_NAME.LOAD_VECTORS, 'singleton', {
845
+ isLocalLLM: isLocalLLM,
838
846
  errorType: 'network'
839
847
  });
840
848
  // eslint-disable-next-line no-console
@@ -853,19 +861,23 @@ var initVectors = exports.initVectors = function initVectors(store) {
853
861
  vectorStore = store;
854
862
  };
855
863
  var vocabularyLoadPromise;
856
- var loadDefaultVocabulary = exports.loadDefaultVocabulary = function loadDefaultVocabulary() {
864
+ var loadDefaultVocabulary = exports.loadDefaultVocabulary = function loadDefaultVocabulary(options) {
865
+ var _options$isLocalLLM2;
857
866
  if (isInitialized) {
858
867
  return Promise.resolve();
859
868
  }
860
869
  if (vocabularyLoadPromise) {
861
870
  return vocabularyLoadPromise;
862
871
  }
872
+ var isLocalLLM = (_options$isLocalLLM2 = options === null || options === void 0 ? void 0 : options.isLocalLLM) !== null && _options$isLocalLLM2 !== void 0 ? _options$isLocalLLM2 : false;
863
873
  vocabularyLoadPromise = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
864
874
  var _yield$Promise$all, _yield$Promise$all2, vocabularyModule, l3VocabularyModule, vocabularyData, l3VocabularyData, terms, _t3;
865
875
  return _regenerator.default.wrap(function (_context2) {
866
876
  while (1) switch (_context2.prev = _context2.next) {
867
877
  case 0:
868
- (0, _ufo.startExp)(_ufo.EXPERIENCE_NAME.LOAD_VOCABULARY, 'singleton');
878
+ (0, _ufo.startExp)(_ufo.EXPERIENCE_NAME.LOAD_VOCABULARY, 'singleton', {
879
+ isLocalLLM: isLocalLLM
880
+ });
869
881
  _context2.prev = 1;
870
882
  _context2.next = 2;
871
883
  return Promise.all([Promise.resolve().then(function () {
@@ -904,6 +916,7 @@ var loadDefaultVocabulary = exports.loadDefaultVocabulary = function loadDefault
904
916
  terms: terms
905
917
  });
906
918
  (0, _ufo.succeedExp)(_ufo.EXPERIENCE_NAME.LOAD_VOCABULARY, 'singleton', {
919
+ isLocalLLM: isLocalLLM,
907
920
  l2WordCount: terms.length,
908
921
  l3WordCount: l3VocabularyData.length
909
922
  });
@@ -913,6 +926,7 @@ var loadDefaultVocabulary = exports.loadDefaultVocabulary = function loadDefault
913
926
  _context2.prev = 4;
914
927
  _t3 = _context2["catch"](1);
915
928
  (0, _ufo.failExp)(_ufo.EXPERIENCE_NAME.LOAD_VOCABULARY, 'singleton', {
929
+ isLocalLLM: isLocalLLM,
916
930
  errorType: 'parse_error'
917
931
  });
918
932
  // Allow a later call to retry the load rather than caching the failure.
@@ -415,6 +415,7 @@ export const createAutocompletePlugin = (options, api) => {
415
415
  }
416
416
  debounceTimer = setTimeout(() => {
417
417
  try {
418
+ var _nodeAfter$text;
418
419
  const {
419
420
  state
420
421
  } = view;
@@ -424,6 +425,19 @@ export const createAutocompletePlugin = (options, api) => {
424
425
  if (!selection.empty) {
425
426
  return;
426
427
  }
428
+
429
+ // Suppress suggestions when the cursor is mid-word — only offer
430
+ // completions when the cursor is at the trailing edge of a token.
431
+ // nodeAfter correctly handles inline atoms (mentions, emojis) where
432
+ // parentOffset and textContent indices diverge.
433
+ const nodeAfter = selection.$from.nodeAfter;
434
+ const charAfterCursor = nodeAfter !== null && nodeAfter !== void 0 && nodeAfter.isText ? (_nodeAfter$text = nodeAfter.text) === null || _nodeAfter$text === void 0 ? void 0 : _nodeAfter$text[0] : undefined;
435
+ // Only suppress for Unicode letters, digits, and underscore — hyphens,
436
+ // apostrophes, and similar punctuation are valid left-edge boundaries
437
+ // and should not block suggestions (e.g. cursor before '-' in compound-word).
438
+ if (charAfterCursor && /[\p{L}\p{N}_]/u.test(charAfterCursor)) {
439
+ return;
440
+ }
427
441
  const textBefore = getTextBeforeCursor(state);
428
442
 
429
443
  // Suppress re-showing the same suggestion the user just dismissed.
@@ -570,13 +584,17 @@ export const createAutocompletePlugin = (options, api) => {
570
584
  return false;
571
585
  },
572
586
  focus: () => {
573
- loadDefaultVocabulary().catch(error => {
587
+ var _options$useLocalMode, _options$useLocalMode2;
588
+ loadDefaultVocabulary({
589
+ isLocalLLM: (_options$useLocalMode = options === null || options === void 0 ? void 0 : options.useLocalModel) !== null && _options$useLocalMode !== void 0 ? _options$useLocalMode : false
590
+ }).catch(error => {
574
591
  logException(error, {
575
592
  location: 'editor-plugin-autocomplete/loadDefaultVocabulary'
576
593
  });
577
594
  });
578
595
  loadVectorsAsync({
579
- getBinaryUrl: options === null || options === void 0 ? void 0 : options.getVectorsBinaryUrl
596
+ getBinaryUrl: options === null || options === void 0 ? void 0 : options.getVectorsBinaryUrl,
597
+ isLocalLLM: (_options$useLocalMode2 = options === null || options === void 0 ? void 0 : options.useLocalModel) !== null && _options$useLocalMode2 !== void 0 ? _options$useLocalMode2 : false
580
598
  }).catch(error => {
581
599
  logException(error, {
582
600
  location: 'editor-plugin-autocomplete/loadVectorsAsync'
@@ -586,7 +586,9 @@ export const createLocalSlowLaneClient = (config = {}) => {
586
586
  if (lower.includes('loading chunk') || lower.includes('dynamically imported module') || lower.includes('dynamic import')) {
587
587
  return 'module_load_failed';
588
588
  }
589
- if (lower.includes('out of memory') || /\boom\b/u.test(lower) || lower.includes('allocation') || lower.includes('exceeds') || lower.includes('buffer size') || lower.includes('not enough memory')) {
589
+ if (lower.includes('out of memory') ||
590
+ // eslint-disable-next-line require-unicode-regexp
591
+ /\boom\b/.test(lower) || lower.includes('allocation') || lower.includes('exceeds') || lower.includes('buffer size') || lower.includes('not enough memory')) {
590
592
  return 'insufficient_memory';
591
593
  }
592
594
  // Pre-flight already returns missing_shader_f16 when the feature is absent,
@@ -587,6 +587,7 @@ const unwrapJsonModule = (mod, shape) => {
587
587
  return null;
588
588
  };
589
589
  export const loadVectorsAsync = async options => {
590
+ var _options$isLocalLLM;
590
591
  if (vectorStore || vectorsLoadStarted) {
591
592
  return;
592
593
  }
@@ -595,14 +596,18 @@ export const loadVectorsAsync = async options => {
595
596
  console.warn('[text-predictor] loadVectorsAsync called without a getBinaryUrl — vectors will not load. Pass getVectorsBinaryUrl via plugin options.');
596
597
  return;
597
598
  }
599
+ const isLocalLLM = (_options$isLocalLLM = options === null || options === void 0 ? void 0 : options.isLocalLLM) !== null && _options$isLocalLLM !== void 0 ? _options$isLocalLLM : false;
598
600
  vectorsLoadStarted = true;
599
- startExp(EXPERIENCE_NAME.LOAD_VECTORS, 'singleton');
601
+ startExp(EXPERIENCE_NAME.LOAD_VECTORS, 'singleton', {
602
+ isLocalLLM
603
+ });
600
604
  let url;
601
605
  try {
602
606
  url = await options.getBinaryUrl();
603
607
  } catch (e) {
604
608
  vectorsLoadStarted = false;
605
609
  failExp(EXPERIENCE_NAME.LOAD_VECTORS, 'singleton', {
610
+ isLocalLLM,
606
611
  errorType: 'resolve_url'
607
612
  });
608
613
  // eslint-disable-next-line no-console
@@ -615,6 +620,7 @@ export const loadVectorsAsync = async options => {
615
620
  if (!res.ok) {
616
621
  vectorsLoadStarted = false;
617
622
  failExp(EXPERIENCE_NAME.LOAD_VECTORS, 'singleton', {
623
+ isLocalLLM,
618
624
  status: res.status,
619
625
  errorType: 'http_error'
620
626
  });
@@ -643,6 +649,7 @@ export const loadVectorsAsync = async options => {
643
649
  dim
644
650
  };
645
651
  succeedExp(EXPERIENCE_NAME.LOAD_VECTORS, 'singleton', {
652
+ isLocalLLM,
646
653
  wordCount: nWords,
647
654
  dim,
648
655
  sizeBytes: float32.byteLength
@@ -658,6 +665,7 @@ export const loadVectorsAsync = async options => {
658
665
  } catch (e) {
659
666
  vectorsLoadStarted = false;
660
667
  failExp(EXPERIENCE_NAME.LOAD_VECTORS, 'singleton', {
668
+ isLocalLLM,
661
669
  errorType: 'network'
662
670
  });
663
671
  // eslint-disable-next-line no-console
@@ -668,15 +676,19 @@ export const initVectors = store => {
668
676
  vectorStore = store;
669
677
  };
670
678
  let vocabularyLoadPromise;
671
- export const loadDefaultVocabulary = () => {
679
+ export const loadDefaultVocabulary = options => {
680
+ var _options$isLocalLLM2;
672
681
  if (isInitialized) {
673
682
  return Promise.resolve();
674
683
  }
675
684
  if (vocabularyLoadPromise) {
676
685
  return vocabularyLoadPromise;
677
686
  }
687
+ const isLocalLLM = (_options$isLocalLLM2 = options === null || options === void 0 ? void 0 : options.isLocalLLM) !== null && _options$isLocalLLM2 !== void 0 ? _options$isLocalLLM2 : false;
678
688
  vocabularyLoadPromise = (async () => {
679
- startExp(EXPERIENCE_NAME.LOAD_VOCABULARY, 'singleton');
689
+ startExp(EXPERIENCE_NAME.LOAD_VOCABULARY, 'singleton', {
690
+ isLocalLLM
691
+ });
680
692
  try {
681
693
  // The L2 vocabulary and L3 word list are code-split into their own async
682
694
  // chunks so they stay out of the editor's main bundle.
@@ -701,11 +713,13 @@ export const loadDefaultVocabulary = () => {
701
713
  terms
702
714
  });
703
715
  succeedExp(EXPERIENCE_NAME.LOAD_VOCABULARY, 'singleton', {
716
+ isLocalLLM,
704
717
  l2WordCount: terms.length,
705
718
  l3WordCount: l3VocabularyData.length
706
719
  });
707
720
  } catch (e) {
708
721
  failExp(EXPERIENCE_NAME.LOAD_VOCABULARY, 'singleton', {
722
+ isLocalLLM,
709
723
  errorType: 'parse_error'
710
724
  });
711
725
  // Allow a later call to retry the load rather than caching the failure.
@@ -428,11 +428,25 @@ export var createAutocompletePlugin = function createAutocompletePlugin(options,
428
428
  }
429
429
  debounceTimer = setTimeout(function () {
430
430
  try {
431
+ var _nodeAfter$text;
431
432
  var state = view.state;
432
433
  var selection = state.selection;
433
434
  if (!selection.empty) {
434
435
  return;
435
436
  }
437
+
438
+ // Suppress suggestions when the cursor is mid-word — only offer
439
+ // completions when the cursor is at the trailing edge of a token.
440
+ // nodeAfter correctly handles inline atoms (mentions, emojis) where
441
+ // parentOffset and textContent indices diverge.
442
+ var nodeAfter = selection.$from.nodeAfter;
443
+ var charAfterCursor = nodeAfter !== null && nodeAfter !== void 0 && nodeAfter.isText ? (_nodeAfter$text = nodeAfter.text) === null || _nodeAfter$text === void 0 ? void 0 : _nodeAfter$text[0] : undefined;
444
+ // Only suppress for Unicode letters, digits, and underscore — hyphens,
445
+ // apostrophes, and similar punctuation are valid left-edge boundaries
446
+ // and should not block suggestions (e.g. cursor before '-' in compound-word).
447
+ if (charAfterCursor && /(?:[0-9A-Z_a-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088F\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5C\u0C5D\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDC-\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C8A\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7DC\uA7F1-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDDC0-\uDDF3\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD40-\uDD59\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDD40-\uDD65\uDD6F-\uDD85\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDEC2-\uDEC7\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDF70-\uDF81\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61\uDF80-\uDF89\uDF8B\uDF8E\uDF90-\uDFB5\uDFB7\uDFD1\uDFD3]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDED0-\uDEE3\uDF00-\uDF1A\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8\uDFC0-\uDFE0\uDFF0-\uDFF9]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDDB0-\uDDDB\uDDE0-\uDDE9\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDF50-\uDF59\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD80E\uD80F\uD81C-\uD822\uD840-\uD868\uD86A-\uD86D\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD88C][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46\uDC60-\uDFFF]|\uD810[\uDC00-\uDFFA]|\uD811[\uDC00-\uDE46]|\uD818[\uDD00-\uDD1D\uDD30-\uDD39]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDD40-\uDD6C\uDD70-\uDD79\uDE40-\uDE96\uDEA0-\uDEB8\uDEBB-\uDED3\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3\uDFF2-\uDFF6]|\uD823[\uDC00-\uDCD5\uDCFF-\uDD1E\uDD80-\uDDF2]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD833[\uDCF0-\uDCF9]|\uD834[\uDEC0-\uDED3\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDCD0-\uDCEB\uDCF0-\uDCF9\uDDD0-\uDDED\uDDF0-\uDDFA\uDEC0-\uDEDE\uDEE0-\uDEE2\uDEE4\uDEE5\uDEE7-\uDEED\uDEF0-\uDEF4\uDEFE\uDEFF\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEAD\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD88D[\uDC00-\uDC79])/.test(charAfterCursor)) {
448
+ return;
449
+ }
436
450
  var textBefore = getTextBeforeCursor(state);
437
451
 
438
452
  // Suppress re-showing the same suggestion the user just dismissed.
@@ -576,13 +590,17 @@ export var createAutocompletePlugin = function createAutocompletePlugin(options,
576
590
  return false;
577
591
  },
578
592
  focus: function focus() {
579
- loadDefaultVocabulary().catch(function (error) {
593
+ var _options$useLocalMode, _options$useLocalMode2;
594
+ loadDefaultVocabulary({
595
+ isLocalLLM: (_options$useLocalMode = options === null || options === void 0 ? void 0 : options.useLocalModel) !== null && _options$useLocalMode !== void 0 ? _options$useLocalMode : false
596
+ }).catch(function (error) {
580
597
  logException(error, {
581
598
  location: 'editor-plugin-autocomplete/loadDefaultVocabulary'
582
599
  });
583
600
  });
584
601
  loadVectorsAsync({
585
- getBinaryUrl: options === null || options === void 0 ? void 0 : options.getVectorsBinaryUrl
602
+ getBinaryUrl: options === null || options === void 0 ? void 0 : options.getVectorsBinaryUrl,
603
+ isLocalLLM: (_options$useLocalMode2 = options === null || options === void 0 ? void 0 : options.useLocalModel) !== null && _options$useLocalMode2 !== void 0 ? _options$useLocalMode2 : false
586
604
  }).catch(function (error) {
587
605
  logException(error, {
588
606
  location: 'editor-plugin-autocomplete/loadVectorsAsync'
@@ -755,7 +755,9 @@ export var createLocalSlowLaneClient = function createLocalSlowLaneClient() {
755
755
  if (lower.includes('loading chunk') || lower.includes('dynamically imported module') || lower.includes('dynamic import')) {
756
756
  return 'module_load_failed';
757
757
  }
758
- if (lower.includes('out of memory') || /\boom\b/.test(lower) || lower.includes('allocation') || lower.includes('exceeds') || lower.includes('buffer size') || lower.includes('not enough memory')) {
758
+ if (lower.includes('out of memory') ||
759
+ // eslint-disable-next-line require-unicode-regexp
760
+ /\boom\b/.test(lower) || lower.includes('allocation') || lower.includes('exceeds') || lower.includes('buffer size') || lower.includes('not enough memory')) {
759
761
  return 'insufficient_memory';
760
762
  }
761
763
  // Pre-flight already returns missing_shader_f16 when the feature is absent,
@@ -729,7 +729,8 @@ var unwrapJsonModule = function unwrapJsonModule(mod, shape) {
729
729
  };
730
730
  export var loadVectorsAsync = /*#__PURE__*/function () {
731
731
  var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(options) {
732
- var url, _wordIndexOuter$index, res, buffer, float32, wordIndexModule, wordIndexOuter, wordIndex, nWords, dim, _t, _t2;
732
+ var _options$isLocalLLM;
733
+ var isLocalLLM, url, _wordIndexOuter$index, res, buffer, float32, wordIndexModule, wordIndexOuter, wordIndex, nWords, dim, _t, _t2;
733
734
  return _regeneratorRuntime.wrap(function (_context) {
734
735
  while (1) switch (_context.prev = _context.next) {
735
736
  case 0:
@@ -747,8 +748,11 @@ export var loadVectorsAsync = /*#__PURE__*/function () {
747
748
  console.warn('[text-predictor] loadVectorsAsync called without a getBinaryUrl — vectors will not load. Pass getVectorsBinaryUrl via plugin options.');
748
749
  return _context.abrupt("return");
749
750
  case 2:
751
+ isLocalLLM = (_options$isLocalLLM = options === null || options === void 0 ? void 0 : options.isLocalLLM) !== null && _options$isLocalLLM !== void 0 ? _options$isLocalLLM : false;
750
752
  vectorsLoadStarted = true;
751
- startExp(EXPERIENCE_NAME.LOAD_VECTORS, 'singleton');
753
+ startExp(EXPERIENCE_NAME.LOAD_VECTORS, 'singleton', {
754
+ isLocalLLM: isLocalLLM
755
+ });
752
756
  _context.prev = 3;
753
757
  _context.next = 4;
754
758
  return options.getBinaryUrl();
@@ -761,6 +765,7 @@ export var loadVectorsAsync = /*#__PURE__*/function () {
761
765
  _t = _context["catch"](3);
762
766
  vectorsLoadStarted = false;
763
767
  failExp(EXPERIENCE_NAME.LOAD_VECTORS, 'singleton', {
768
+ isLocalLLM: isLocalLLM,
764
769
  errorType: 'resolve_url'
765
770
  });
766
771
  // eslint-disable-next-line no-console
@@ -778,6 +783,7 @@ export var loadVectorsAsync = /*#__PURE__*/function () {
778
783
  }
779
784
  vectorsLoadStarted = false;
780
785
  failExp(EXPERIENCE_NAME.LOAD_VECTORS, 'singleton', {
786
+ isLocalLLM: isLocalLLM,
781
787
  status: res.status,
782
788
  errorType: 'http_error'
783
789
  });
@@ -810,6 +816,7 @@ export var loadVectorsAsync = /*#__PURE__*/function () {
810
816
  dim: dim
811
817
  };
812
818
  succeedExp(EXPERIENCE_NAME.LOAD_VECTORS, 'singleton', {
819
+ isLocalLLM: isLocalLLM,
813
820
  wordCount: nWords,
814
821
  dim: dim,
815
822
  sizeBytes: float32.byteLength
@@ -829,6 +836,7 @@ export var loadVectorsAsync = /*#__PURE__*/function () {
829
836
  _t2 = _context["catch"](6);
830
837
  vectorsLoadStarted = false;
831
838
  failExp(EXPERIENCE_NAME.LOAD_VECTORS, 'singleton', {
839
+ isLocalLLM: isLocalLLM,
832
840
  errorType: 'network'
833
841
  });
834
842
  // eslint-disable-next-line no-console
@@ -847,19 +855,23 @@ export var initVectors = function initVectors(store) {
847
855
  vectorStore = store;
848
856
  };
849
857
  var vocabularyLoadPromise;
850
- export var loadDefaultVocabulary = function loadDefaultVocabulary() {
858
+ export var loadDefaultVocabulary = function loadDefaultVocabulary(options) {
859
+ var _options$isLocalLLM2;
851
860
  if (isInitialized) {
852
861
  return Promise.resolve();
853
862
  }
854
863
  if (vocabularyLoadPromise) {
855
864
  return vocabularyLoadPromise;
856
865
  }
866
+ var isLocalLLM = (_options$isLocalLLM2 = options === null || options === void 0 ? void 0 : options.isLocalLLM) !== null && _options$isLocalLLM2 !== void 0 ? _options$isLocalLLM2 : false;
857
867
  vocabularyLoadPromise = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
858
868
  var _yield$Promise$all, _yield$Promise$all2, vocabularyModule, l3VocabularyModule, vocabularyData, l3VocabularyData, terms, _t3;
859
869
  return _regeneratorRuntime.wrap(function (_context2) {
860
870
  while (1) switch (_context2.prev = _context2.next) {
861
871
  case 0:
862
- startExp(EXPERIENCE_NAME.LOAD_VOCABULARY, 'singleton');
872
+ startExp(EXPERIENCE_NAME.LOAD_VOCABULARY, 'singleton', {
873
+ isLocalLLM: isLocalLLM
874
+ });
863
875
  _context2.prev = 1;
864
876
  _context2.next = 2;
865
877
  return Promise.all([import( /* webpackChunkName: "@atlaskit-internal_editor-plugin-autocomplete-vocabulary-10k" */'./data/vocabulary_10k.json'), import( /* webpackChunkName: "@atlaskit-internal_editor-plugin-autocomplete-l3-vocabulary" */'./data/l3_vocabulary.json')]);
@@ -894,6 +906,7 @@ export var loadDefaultVocabulary = function loadDefaultVocabulary() {
894
906
  terms: terms
895
907
  });
896
908
  succeedExp(EXPERIENCE_NAME.LOAD_VOCABULARY, 'singleton', {
909
+ isLocalLLM: isLocalLLM,
897
910
  l2WordCount: terms.length,
898
911
  l3WordCount: l3VocabularyData.length
899
912
  });
@@ -903,6 +916,7 @@ export var loadDefaultVocabulary = function loadDefaultVocabulary() {
903
916
  _context2.prev = 4;
904
917
  _t3 = _context2["catch"](1);
905
918
  failExp(EXPERIENCE_NAME.LOAD_VOCABULARY, 'singleton', {
919
+ isLocalLLM: isLocalLLM,
906
920
  errorType: 'parse_error'
907
921
  });
908
922
  // Allow a later call to retry the load rather than caching the failure.
@@ -96,10 +96,10 @@ export interface LocalSlowLaneClient {
96
96
  export type LocalSlowLaneLoadErrorReason = 'webgpu_unavailable' | 'webgpu_no_adapter' | 'missing_shader_f16' | 'insufficient_memory' | 'model_download_failed' | 'module_load_failed' | 'init_failed';
97
97
  /** Snapshot of the machine's WebGPU support, used to explain hardware limits. */
98
98
  export interface WebGpuCapabilities {
99
- /** GPU architecture reported by the adapter (e.g. "metal-3", "rdna2"). */
100
- architecture?: string;
101
99
  /** Whether `navigator.gpu.requestAdapter()` returned a usable adapter. */
102
100
  adapterAvailable?: boolean;
101
+ /** GPU architecture reported by the adapter (e.g. "metal-3", "rdna2"). */
102
+ architecture?: string;
103
103
  /** Whether `navigator.gpu` exists at all. */
104
104
  available: boolean;
105
105
  /** Largest single GPU buffer the adapter allows, in MB. */
@@ -82,7 +82,10 @@ export declare const ingestDocumentPage: (pageContent: string | undefined) => vo
82
82
  export declare const predict: (textBefore: string) => string | null;
83
83
  export declare const loadVectorsAsync: (options?: {
84
84
  getBinaryUrl?: () => Promise<string>;
85
+ isLocalLLM?: boolean;
85
86
  }) => Promise<void>;
86
87
  export declare const initVectors: (store: VectorStore) => void;
87
- export declare const loadDefaultVocabulary: () => Promise<void>;
88
+ export declare const loadDefaultVocabulary: (options?: {
89
+ isLocalLLM?: boolean;
90
+ }) => Promise<void>;
88
91
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-autocomplete",
3
- "version": "3.6.0",
3
+ "version": "3.6.2",
4
4
  "description": "Client-side text autocomplete plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -35,7 +35,7 @@
35
35
  "wink-nlp": "^2.4.0"
36
36
  },
37
37
  "peerDependencies": {
38
- "@atlaskit/editor-common": "^115.15.0",
38
+ "@atlaskit/editor-common": "^115.16.0",
39
39
  "@atlaskit/editor-plugin-analytics": "^11.0.0",
40
40
  "react": "^18.2.0"
41
41
  },