sensemaking 0.15.4 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) hide show
  1. package/README.md +33 -5
  2. package/dist/cjs/cli/download.js +12 -11
  3. package/dist/cjs/cli/download.js.map +1 -1
  4. package/dist/cjs/cli/index.d.cts +1 -1
  5. package/dist/cjs/cli/index.d.ts +1 -1
  6. package/dist/cjs/cli/index.js +1 -1
  7. package/dist/cjs/cli/index.js.map +1 -1
  8. package/dist/cjs/cli/init.js +31 -5
  9. package/dist/cjs/cli/init.js.map +1 -1
  10. package/dist/cjs/cli/status.js +343 -99
  11. package/dist/cjs/cli/status.js.map +1 -1
  12. package/dist/cjs/commands/related.js +17 -13
  13. package/dist/cjs/commands/related.js.map +1 -1
  14. package/dist/cjs/commands/search.js +25 -96
  15. package/dist/cjs/commands/search.js.map +1 -1
  16. package/dist/cjs/commands/signals.d.cts +18 -0
  17. package/dist/cjs/commands/signals.d.ts +18 -0
  18. package/dist/cjs/commands/signals.js +299 -0
  19. package/dist/cjs/commands/signals.js.map +1 -0
  20. package/dist/cjs/commands/status.d.cts +2 -2
  21. package/dist/cjs/commands/status.d.ts +2 -2
  22. package/dist/cjs/commands/status.js +1 -1
  23. package/dist/cjs/commands/status.js.map +1 -1
  24. package/dist/cjs/config/access.d.cts +5 -2
  25. package/dist/cjs/config/access.d.ts +5 -2
  26. package/dist/cjs/config/access.js +30 -12
  27. package/dist/cjs/config/access.js.map +1 -1
  28. package/dist/cjs/config/index.d.cts +4 -1
  29. package/dist/cjs/config/index.d.ts +4 -1
  30. package/dist/cjs/config/index.js +12 -2
  31. package/dist/cjs/config/index.js.map +1 -1
  32. package/dist/cjs/config/load.d.cts +6 -1
  33. package/dist/cjs/config/load.d.ts +6 -1
  34. package/dist/cjs/config/load.js +83 -8
  35. package/dist/cjs/config/load.js.map +1 -1
  36. package/dist/cjs/config/resolve.js +1 -1
  37. package/dist/cjs/config/resolve.js.map +1 -1
  38. package/dist/cjs/config/signals.d.cts +4 -0
  39. package/dist/cjs/config/signals.d.ts +4 -0
  40. package/dist/cjs/config/signals.js +30 -0
  41. package/dist/cjs/config/signals.js.map +1 -0
  42. package/dist/cjs/config/types.d.cts +6 -4
  43. package/dist/cjs/config/types.d.ts +6 -4
  44. package/dist/cjs/config/types.js +1 -1
  45. package/dist/cjs/config/types.js.map +1 -1
  46. package/dist/cjs/config/validate.js +120 -11
  47. package/dist/cjs/config/validate.js.map +1 -1
  48. package/dist/cjs/db/open.d.cts +1 -1
  49. package/dist/cjs/db/open.d.ts +1 -1
  50. package/dist/cjs/db/open.js +6 -1
  51. package/dist/cjs/db/open.js.map +1 -1
  52. package/dist/cjs/db/reconcile.d.cts +1 -0
  53. package/dist/cjs/db/reconcile.d.ts +1 -0
  54. package/dist/cjs/db/reconcile.js +15 -0
  55. package/dist/cjs/db/reconcile.js.map +1 -1
  56. package/dist/cjs/embed/cohere.d.cts +2 -0
  57. package/dist/cjs/embed/cohere.d.ts +2 -0
  58. package/dist/cjs/embed/cohere.js +238 -0
  59. package/dist/cjs/embed/cohere.js.map +1 -0
  60. package/dist/cjs/embed/http.d.cts +2 -0
  61. package/dist/cjs/embed/http.d.ts +2 -0
  62. package/dist/cjs/embed/http.js +258 -0
  63. package/dist/cjs/embed/http.js.map +1 -0
  64. package/dist/cjs/embed/identity.d.cts +13 -0
  65. package/dist/cjs/embed/identity.d.ts +13 -0
  66. package/dist/cjs/embed/identity.js +194 -0
  67. package/dist/cjs/embed/identity.js.map +1 -0
  68. package/dist/cjs/embed/langfit.d.cts +6 -0
  69. package/dist/cjs/embed/langfit.d.ts +6 -0
  70. package/dist/cjs/embed/langfit.js +326 -0
  71. package/dist/cjs/embed/langfit.js.map +1 -0
  72. package/dist/cjs/embed/languages.d.cts +3 -0
  73. package/dist/cjs/embed/languages.d.ts +3 -0
  74. package/dist/cjs/embed/languages.js +98 -0
  75. package/dist/cjs/embed/languages.js.map +1 -0
  76. package/dist/cjs/embed/openai.d.cts +2 -0
  77. package/dist/cjs/embed/openai.d.ts +2 -0
  78. package/dist/cjs/embed/openai.js +268 -0
  79. package/dist/cjs/embed/openai.js.map +1 -0
  80. package/dist/cjs/embed/query.d.cts +21 -0
  81. package/dist/cjs/embed/query.d.ts +21 -0
  82. package/dist/cjs/embed/query.js +610 -0
  83. package/dist/cjs/embed/query.js.map +1 -0
  84. package/dist/cjs/embed/registry.d.cts +3 -0
  85. package/dist/cjs/embed/registry.d.ts +3 -0
  86. package/dist/cjs/embed/registry.js +114 -0
  87. package/dist/cjs/embed/registry.js.map +1 -0
  88. package/dist/cjs/embed/static.d.cts +2 -0
  89. package/dist/cjs/embed/static.d.ts +2 -0
  90. package/dist/cjs/embed/static.js +367 -0
  91. package/dist/cjs/embed/static.js.map +1 -0
  92. package/dist/cjs/embed/store.d.cts +8 -0
  93. package/dist/cjs/embed/store.d.ts +8 -0
  94. package/dist/cjs/embed/store.js +498 -0
  95. package/dist/cjs/embed/store.js.map +1 -0
  96. package/dist/cjs/embed/types.d.cts +8 -0
  97. package/dist/cjs/embed/types.d.ts +8 -0
  98. package/dist/cjs/embed/types.js +7 -0
  99. package/dist/cjs/embed/types.js.map +1 -0
  100. package/dist/cjs/errors.d.cts +1 -1
  101. package/dist/cjs/errors.d.ts +1 -1
  102. package/dist/cjs/errors.js.map +1 -1
  103. package/dist/cjs/features/embed.d.cts +4 -27
  104. package/dist/cjs/features/embed.d.ts +4 -27
  105. package/dist/cjs/features/embed.js +3 -969
  106. package/dist/cjs/features/embed.js.map +1 -1
  107. package/dist/cjs/index.d.cts +1 -1
  108. package/dist/cjs/index.d.ts +1 -1
  109. package/dist/cjs/index.js.map +1 -1
  110. package/dist/cjs/output.d.cts +2 -2
  111. package/dist/cjs/output.d.ts +2 -2
  112. package/dist/cjs/output.js +9 -2
  113. package/dist/cjs/output.js.map +1 -1
  114. package/dist/cjs/scan.js +8 -5
  115. package/dist/cjs/scan.js.map +1 -1
  116. package/dist/cjs/segment.js +67 -14
  117. package/dist/cjs/segment.js.map +1 -1
  118. package/dist/esm/cli/download.js +9 -8
  119. package/dist/esm/cli/download.js.map +1 -1
  120. package/dist/esm/cli/index.d.ts +1 -1
  121. package/dist/esm/cli/index.js +1 -1
  122. package/dist/esm/cli/index.js.map +1 -1
  123. package/dist/esm/cli/init.js +32 -6
  124. package/dist/esm/cli/init.js.map +1 -1
  125. package/dist/esm/cli/status.js +36 -8
  126. package/dist/esm/cli/status.js.map +1 -1
  127. package/dist/esm/commands/related.js +14 -10
  128. package/dist/esm/commands/related.js.map +1 -1
  129. package/dist/esm/commands/search.js +27 -78
  130. package/dist/esm/commands/search.js.map +1 -1
  131. package/dist/esm/commands/signals.d.ts +18 -0
  132. package/dist/esm/commands/signals.js +78 -0
  133. package/dist/esm/commands/signals.js.map +1 -0
  134. package/dist/esm/commands/status.d.ts +2 -2
  135. package/dist/esm/commands/status.js +2 -2
  136. package/dist/esm/commands/status.js.map +1 -1
  137. package/dist/esm/config/access.d.ts +5 -2
  138. package/dist/esm/config/access.js +31 -12
  139. package/dist/esm/config/access.js.map +1 -1
  140. package/dist/esm/config/index.d.ts +4 -1
  141. package/dist/esm/config/index.js +2 -1
  142. package/dist/esm/config/index.js.map +1 -1
  143. package/dist/esm/config/load.d.ts +6 -1
  144. package/dist/esm/config/load.js +67 -9
  145. package/dist/esm/config/load.js.map +1 -1
  146. package/dist/esm/config/resolve.js +2 -2
  147. package/dist/esm/config/resolve.js.map +1 -1
  148. package/dist/esm/config/signals.d.ts +4 -0
  149. package/dist/esm/config/signals.js +14 -0
  150. package/dist/esm/config/signals.js.map +1 -0
  151. package/dist/esm/config/types.d.ts +6 -4
  152. package/dist/esm/config/types.js +1 -1
  153. package/dist/esm/config/types.js.map +1 -1
  154. package/dist/esm/config/validate.js +58 -11
  155. package/dist/esm/config/validate.js.map +1 -1
  156. package/dist/esm/db/open.d.ts +1 -1
  157. package/dist/esm/db/open.js +7 -2
  158. package/dist/esm/db/open.js.map +1 -1
  159. package/dist/esm/db/reconcile.d.ts +1 -0
  160. package/dist/esm/db/reconcile.js +10 -0
  161. package/dist/esm/db/reconcile.js.map +1 -1
  162. package/dist/esm/embed/cohere.d.ts +2 -0
  163. package/dist/esm/embed/cohere.js +46 -0
  164. package/dist/esm/embed/cohere.js.map +1 -0
  165. package/dist/esm/embed/http.d.ts +2 -0
  166. package/dist/esm/embed/http.js +33 -0
  167. package/dist/esm/embed/http.js.map +1 -0
  168. package/dist/esm/embed/identity.d.ts +13 -0
  169. package/dist/esm/embed/identity.js +92 -0
  170. package/dist/esm/embed/identity.js.map +1 -0
  171. package/dist/esm/embed/langfit.d.ts +6 -0
  172. package/dist/esm/embed/langfit.js +44 -0
  173. package/dist/esm/embed/langfit.js.map +1 -0
  174. package/dist/esm/embed/languages.d.ts +3 -0
  175. package/dist/esm/embed/languages.js +80 -0
  176. package/dist/esm/embed/languages.js.map +1 -0
  177. package/dist/esm/embed/openai.d.ts +2 -0
  178. package/dist/esm/embed/openai.js +49 -0
  179. package/dist/esm/embed/openai.js.map +1 -0
  180. package/dist/esm/embed/query.d.ts +21 -0
  181. package/dist/esm/embed/query.js +181 -0
  182. package/dist/esm/embed/query.js.map +1 -0
  183. package/dist/esm/embed/registry.d.ts +3 -0
  184. package/dist/esm/embed/registry.js +45 -0
  185. package/dist/esm/embed/registry.js.map +1 -0
  186. package/dist/esm/embed/static.d.ts +2 -0
  187. package/dist/esm/embed/static.js +72 -0
  188. package/dist/esm/embed/static.js.map +1 -0
  189. package/dist/esm/embed/store.d.ts +8 -0
  190. package/dist/esm/embed/store.js +123 -0
  191. package/dist/esm/embed/store.js.map +1 -0
  192. package/dist/esm/embed/types.d.ts +8 -0
  193. package/dist/esm/embed/types.js +3 -0
  194. package/dist/esm/embed/types.js.map +1 -0
  195. package/dist/esm/errors.d.ts +1 -1
  196. package/dist/esm/errors.js.map +1 -1
  197. package/dist/esm/features/embed.d.ts +4 -27
  198. package/dist/esm/features/embed.js +0 -346
  199. package/dist/esm/features/embed.js.map +1 -1
  200. package/dist/esm/index.d.ts +1 -1
  201. package/dist/esm/index.js.map +1 -1
  202. package/dist/esm/output.d.ts +2 -2
  203. package/dist/esm/output.js +6 -2
  204. package/dist/esm/output.js.map +1 -1
  205. package/dist/esm/scan.js +7 -4
  206. package/dist/esm/scan.js.map +1 -1
  207. package/dist/esm/segment.js +49 -19
  208. package/dist/esm/segment.js.map +1 -1
  209. package/package.json +9 -1
  210. package/schema.json +14 -7
  211. package/skills/sense/SKILL.md +21 -5
  212. package/skills/sense-setup/EXAMPLES.md +6 -6
  213. package/skills/sense-setup/SKILL.md +6 -4
@@ -2,282 +2,32 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: Object.getOwnPropertyDescriptor(all, name).get
9
- });
10
- }
11
- _export(exports, {
12
- get MODEL_FILENAMES () {
13
- return MODEL_FILENAMES;
14
- },
15
- get downloadModel () {
16
- return downloadModel;
17
- },
18
- get embed () {
5
+ Object.defineProperty(exports, "embed", {
6
+ enumerable: true,
7
+ get: function() {
19
8
  return embed;
20
- },
21
- get embedPending () {
22
- return embedPending;
23
- },
24
- get hasEmbedding () {
25
- return hasEmbedding;
26
- },
27
- get hasModelFiles () {
28
- return hasModelFiles;
29
- },
30
- get isDownloadable () {
31
- return isDownloadable;
32
- },
33
- get modelDir () {
34
- return modelDir;
35
- },
36
- get modelPresent () {
37
- return modelPresent;
38
- },
39
- get semanticCandidates () {
40
- return semanticCandidates;
41
- },
42
- get similarNotes () {
43
- return similarNotes;
44
9
  }
45
10
  });
46
- var _nodefs = require("node:fs");
47
- var _nodeos = require("node:os");
48
- var _nodepath = require("node:path");
49
- var _indexts = require("../config/index.js");
50
- var _errorsts = require("../errors.js");
51
11
  var _fencests = require("../fences.js");
52
- var _progressts = require("../progress.js");
53
- var _scants = require("../scan.js");
54
12
  function _array_like_to_array(arr, len) {
55
13
  if (len == null || len > arr.length) len = arr.length;
56
14
  for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
57
15
  return arr2;
58
16
  }
59
- function _array_with_holes(arr) {
60
- if (Array.isArray(arr)) return arr;
61
- }
62
17
  function _array_without_holes(arr) {
63
18
  if (Array.isArray(arr)) return _array_like_to_array(arr);
64
19
  }
65
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
66
- try {
67
- var info = gen[key](arg);
68
- var value = info.value;
69
- } catch (error) {
70
- reject(error);
71
- return;
72
- }
73
- if (info.done) resolve(value);
74
- else Promise.resolve(value).then(_next, _throw);
75
- }
76
- function _async_to_generator(fn) {
77
- return function() {
78
- var self = this, args = arguments;
79
- return new Promise(function(resolve, reject) {
80
- var gen = fn.apply(self, args);
81
- function _next(value) {
82
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
83
- }
84
- function _throw(err) {
85
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
86
- }
87
- _next(undefined);
88
- });
89
- };
90
- }
91
- function _getRequireWildcardCache(nodeInterop) {
92
- if (typeof WeakMap !== "function") return null;
93
- var cacheBabelInterop = new WeakMap();
94
- var cacheNodeInterop = new WeakMap();
95
- return (_getRequireWildcardCache = function(nodeInterop) {
96
- return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
97
- })(nodeInterop);
98
- }
99
- function _interop_require_wildcard(obj, nodeInterop) {
100
- if (!nodeInterop && obj && obj.__esModule) return obj;
101
- if (obj === null || typeof obj !== "object" && typeof obj !== "function") return {
102
- default: obj
103
- };
104
- var cache = _getRequireWildcardCache(nodeInterop);
105
- if (cache && cache.has(obj)) return cache.get(obj);
106
- var newObj = {
107
- __proto__: null
108
- };
109
- var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
110
- for(var key in obj){
111
- if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
112
- var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
113
- if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);
114
- else newObj[key] = obj[key];
115
- }
116
- }
117
- newObj.default = obj;
118
- if (cache) cache.set(obj, newObj);
119
- return newObj;
120
- }
121
20
  function _iterable_to_array(iter) {
122
21
  if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) {
123
22
  return Array.from(iter);
124
23
  }
125
24
  }
126
- function _iterable_to_array_limit(arr, i) {
127
- var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
128
- if (_i == null) return;
129
- var _arr = [];
130
- var _n = true;
131
- var _d = false;
132
- var _s, _e;
133
- try {
134
- for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
135
- _arr.push(_s.value);
136
- if (i && _arr.length === i) break;
137
- }
138
- } catch (err) {
139
- _d = true;
140
- _e = err;
141
- } finally{
142
- try {
143
- if (!_n && _i["return"] != null) _i["return"]();
144
- } finally{
145
- if (_d) throw _e;
146
- }
147
- }
148
- return _arr;
149
- }
150
- function _non_iterable_rest() {
151
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
152
- }
153
25
  function _non_iterable_spread() {
154
26
  throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
155
27
  }
156
- function _sliced_to_array(arr, i) {
157
- return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
158
- }
159
28
  function _to_consumable_array(arr) {
160
29
  return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
161
30
  }
162
- function _ts_generator(thisArg, body) {
163
- var f, y, t, _ = {
164
- label: 0,
165
- sent: function() {
166
- if (t[0] & 1) throw t[1];
167
- return t[1];
168
- },
169
- trys: [],
170
- ops: []
171
- }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
172
- return d(g, "next", {
173
- value: verb(0)
174
- }), d(g, "throw", {
175
- value: verb(1)
176
- }), d(g, "return", {
177
- value: verb(2)
178
- }), typeof Symbol === "function" && d(g, Symbol.iterator, {
179
- value: function() {
180
- return this;
181
- }
182
- }), g;
183
- function verb(n) {
184
- return function(v) {
185
- return step([
186
- n,
187
- v
188
- ]);
189
- };
190
- }
191
- function step(op) {
192
- if (f) throw new TypeError("Generator is already executing.");
193
- while(g && (g = 0, op[0] && (_ = 0)), _)try {
194
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
195
- if (y = 0, t) op = [
196
- op[0] & 2,
197
- t.value
198
- ];
199
- switch(op[0]){
200
- case 0:
201
- case 1:
202
- t = op;
203
- break;
204
- case 4:
205
- _.label++;
206
- return {
207
- value: op[1],
208
- done: false
209
- };
210
- case 5:
211
- _.label++;
212
- y = op[1];
213
- op = [
214
- 0
215
- ];
216
- continue;
217
- case 7:
218
- op = _.ops.pop();
219
- _.trys.pop();
220
- continue;
221
- default:
222
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
223
- _ = 0;
224
- continue;
225
- }
226
- if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
227
- _.label = op[1];
228
- break;
229
- }
230
- if (op[0] === 6 && _.label < t[1]) {
231
- _.label = t[1];
232
- t = op;
233
- break;
234
- }
235
- if (t && _.label < t[2]) {
236
- _.label = t[2];
237
- _.ops.push(op);
238
- break;
239
- }
240
- if (t[2]) _.ops.pop();
241
- _.trys.pop();
242
- continue;
243
- }
244
- op = body.call(thisArg, _);
245
- } catch (e) {
246
- op = [
247
- 6,
248
- e
249
- ];
250
- y = 0;
251
- } finally{
252
- f = t = 0;
253
- }
254
- if (op[0] & 5) throw op[1];
255
- return {
256
- value: op[0] ? op[1] : void 0,
257
- done: true
258
- };
259
- }
260
- }
261
- function _ts_values(o) {
262
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
263
- if (m) {
264
- return m.call(o);
265
- }
266
- if (o && typeof o.length === "number") {
267
- return {
268
- next: function() {
269
- if (o && i >= o.length) {
270
- o = void 0;
271
- }
272
- return {
273
- value: o && o[i++],
274
- done: !o
275
- };
276
- }
277
- };
278
- }
279
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
280
- }
281
31
  function _unsupported_iterable_to_array(o, minLen) {
282
32
  if (!o) return;
283
33
  if (typeof o === "string") return _array_like_to_array(o, minLen);
@@ -286,14 +36,6 @@ function _unsupported_iterable_to_array(o, minLen) {
286
36
  if (n === "Map" || n === "Set") return Array.from(n);
287
37
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
288
38
  }
289
- // Heading-based chunks, int8 vectors with a per-vector scale, NULL vector = not yet embedded.
290
- // Reconcile writes dirty rows; embedding tops up on the next search, so staleness costs recall.
291
- // Storage lever fixed by the bake-off (BENCHMARKING.md): int8 at 256 dims is
292
- // quality-free vs f32-512 when fused. Queries stay f32 at the same dims.
293
- var STORE_DIMS = 256;
294
- // Seed chunks that participate in a `related` scan; see similarNotes for the measurement.
295
- var TARGET_CHUNK_CAP = 16;
296
- var BATCH = 64;
297
39
  // Deterministic, so embed time can re-derive text from stored line ranges. Heading-delimited,
298
40
  // preamble kept, whole body when no headings; the title/summary prefix mirrors bm25 weighting.
299
41
  //
@@ -359,712 +101,4 @@ var embed = {
359
101
  return file.embed;
360
102
  }
361
103
  };
362
- // --- static type: Model2Vec safetensors + pure-JS tokenizer, model cached in ~/.cache ---
363
- // Encode convention from model2vec/model.py: no special tokens, drop unk ids, mean-pool,
364
- // L2-normalize.
365
- var MODEL_FILES = [
366
- 'model.safetensors',
367
- 'tokenizer.json'
368
- ];
369
- var MODEL_FILENAMES = MODEL_FILES.join(' and ');
370
- // A Hugging Face repo id: one slash, HF's charset. Anything else is a path, used as one rather
371
- // than flattened into a cache key Windows would reject.
372
- var HF_MODEL_ID = /^[A-Za-z0-9][\w.-]*\/[A-Za-z0-9][\w.-]*$/;
373
- function isDownloadable(model) {
374
- return HF_MODEL_ID.test(model);
375
- }
376
- // Machine-wide, not per-tree: `.sense/` is the index a rebuild throws away, while a 124 MB
377
- // model is shared by every tree on the machine. Honors XDG_CACHE_HOME where it is set;
378
- // elsewhere ~/.cache, which is also where Hugging Face's own libraries keep theirs.
379
- function cacheRoot() {
380
- var xdg = process.env.XDG_CACHE_HOME;
381
- return (0, _nodepath.join)(xdg && xdg.length > 0 ? xdg : (0, _nodepath.join)((0, _nodeos.homedir)(), '.cache'), 'sensemaking', 'models');
382
- }
383
- function modelDir(model) {
384
- if (!HF_MODEL_ID.test(model)) return model;
385
- return (0, _nodepath.join)(cacheRoot(), model.replace(/\//g, '--'));
386
- }
387
- function hasModelFiles(model) {
388
- var dir = modelDir(model);
389
- return MODEL_FILES.every(function(file) {
390
- return (0, _nodefs.existsSync)((0, _nodepath.join)(dir, file));
391
- });
392
- }
393
- function modelPresent(cfg) {
394
- var e = (0, _indexts.embedConfig)(cfg);
395
- if (!e) return false;
396
- return e.type === 'api' || hasModelFiles(e.model);
397
- }
398
- function fetchToFile(url, dest) {
399
- return fetch(url).then(function(res) {
400
- return _async_to_generator(function() {
401
- var _tmp, _;
402
- return _ts_generator(this, function(_state) {
403
- switch(_state.label){
404
- case 0:
405
- if (!res.ok) throw new _errorsts.SenseError('EMBED_MODEL', "model download failed: ".concat(url, " -> HTTP ").concat(res.status));
406
- _tmp = [
407
- "".concat(dest, ".part")
408
- ];
409
- _ = Buffer.from;
410
- return [
411
- 4,
412
- res.arrayBuffer()
413
- ];
414
- case 1:
415
- _nodefs.writeFileSync.apply(void 0, _tmp.concat([
416
- _.apply(Buffer, [
417
- _state.sent()
418
- ])
419
- ]));
420
- (0, _nodefs.renameSync)("".concat(dest, ".part"), dest);
421
- return [
422
- 2
423
- ];
424
- }
425
- });
426
- })();
427
- });
428
- }
429
- function downloadModel(model, onFile) {
430
- return _async_to_generator(function() {
431
- var dir, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, file, err;
432
- return _ts_generator(this, function(_state) {
433
- switch(_state.label){
434
- case 0:
435
- if (!isDownloadable(model)) {
436
- throw new _errorsts.SenseError('EMBED_MODEL', 'embed.model "'.concat(model, '" is a local path, not a Hugging Face model id, so there is nothing to download; put model.safetensors and tokenizer.json in that directory, or name a model id like "minishlab/potion-retrieval-32M"'));
437
- }
438
- dir = modelDir(model);
439
- (0, _nodefs.mkdirSync)(dir, {
440
- recursive: true
441
- });
442
- _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
443
- _state.label = 1;
444
- case 1:
445
- _state.trys.push([
446
- 1,
447
- 6,
448
- 7,
449
- 8
450
- ]);
451
- _iterator = MODEL_FILES[Symbol.iterator]();
452
- _state.label = 2;
453
- case 2:
454
- if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
455
- 3,
456
- 5
457
- ];
458
- file = _step.value;
459
- if ((0, _nodefs.existsSync)((0, _nodepath.join)(dir, file))) return [
460
- 3,
461
- 4
462
- ];
463
- onFile === null || onFile === void 0 ? void 0 : onFile(file, dir);
464
- return [
465
- 4,
466
- fetchToFile("https://huggingface.co/".concat(model, "/resolve/main/").concat(file), (0, _nodepath.join)(dir, file))
467
- ];
468
- case 3:
469
- _state.sent();
470
- _state.label = 4;
471
- case 4:
472
- _iteratorNormalCompletion = true;
473
- return [
474
- 3,
475
- 2
476
- ];
477
- case 5:
478
- return [
479
- 3,
480
- 8
481
- ];
482
- case 6:
483
- err = _state.sent();
484
- _didIteratorError = true;
485
- _iteratorError = err;
486
- return [
487
- 3,
488
- 8
489
- ];
490
- case 7:
491
- try {
492
- if (!_iteratorNormalCompletion && _iterator.return != null) {
493
- _iterator.return();
494
- }
495
- } finally{
496
- if (_didIteratorError) {
497
- throw _iteratorError;
498
- }
499
- }
500
- return [
501
- 7
502
- ];
503
- case 8:
504
- return [
505
- 2,
506
- dir
507
- ];
508
- }
509
- });
510
- })();
511
- }
512
- function staticProvider(model) {
513
- return _async_to_generator(function() {
514
- var _ref, _tokenizerJson_model, _tokenizerJson_model_vocab, _tokenizerJson_model1, dir, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, file, fix, raw, headerLen, header, entry, spec, dims, dataStart, matrix, tokenizerJson, Tokenizer, tok, unkId;
515
- function one(text) {
516
- // The tokenizer yields undefined (not the unk id) for tokens outside the vocab; an
517
- // undefined id would index the matrix at NaN and poison the whole mean-pool -- and the
518
- // int8 conversion then stores the NaN vector as all zeros, silently. Keep integers only.
519
- var ids = tok.encode(text, {
520
- add_special_tokens: false
521
- }).ids.filter(function(id) {
522
- return Number.isInteger(id) && id !== unkId;
523
- });
524
- var v = new Float32Array(dims);
525
- if (ids.length === 0) return v;
526
- var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
527
- try {
528
- for(var _iterator = ids[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
529
- var id = _step.value;
530
- var off = id * dims;
531
- for(var d = 0; d < dims; d++)v[d] += matrix[off + d];
532
- }
533
- } catch (err) {
534
- _didIteratorError = true;
535
- _iteratorError = err;
536
- } finally{
537
- try {
538
- if (!_iteratorNormalCompletion && _iterator.return != null) {
539
- _iterator.return();
540
- }
541
- } finally{
542
- if (_didIteratorError) {
543
- throw _iteratorError;
544
- }
545
- }
546
- }
547
- var norm = 0;
548
- for(var d1 = 0; d1 < dims; d1++){
549
- v[d1] /= ids.length;
550
- norm += v[d1] * v[d1];
551
- }
552
- norm = Math.sqrt(norm) + 1e-32;
553
- for(var d2 = 0; d2 < dims; d2++)v[d2] /= norm;
554
- return v;
555
- }
556
- return _ts_generator(this, function(_state) {
557
- switch(_state.label){
558
- case 0:
559
- dir = modelDir(model);
560
- _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
561
- try {
562
- for(_iterator = MODEL_FILES[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
563
- file = _step.value;
564
- if (!(0, _nodefs.existsSync)((0, _nodepath.join)(dir, file))) {
565
- // A local path the caller controls gets told what is missing where; only a repo id can
566
- // be fixed by downloading.
567
- fix = isDownloadable(model) ? 'run `sense download`' : "expected ".concat(MODEL_FILENAMES, " in that directory");
568
- throw new _errorsts.SenseError('EMBED_MODEL_MISSING', "embed model ".concat(model, " is not available (looked in ").concat(dir, "); ").concat(fix));
569
- }
570
- }
571
- } catch (err) {
572
- _didIteratorError = true;
573
- _iteratorError = err;
574
- } finally{
575
- try {
576
- if (!_iteratorNormalCompletion && _iterator.return != null) {
577
- _iterator.return();
578
- }
579
- } finally{
580
- if (_didIteratorError) {
581
- throw _iteratorError;
582
- }
583
- }
584
- }
585
- raw = (0, _nodefs.readFileSync)((0, _nodepath.join)(dir, 'model.safetensors'));
586
- headerLen = Number(raw.readBigUInt64LE(0));
587
- header = JSON.parse(raw.subarray(8, 8 + headerLen).toString('utf8'));
588
- entry = Object.entries(header).find(function(param) {
589
- var _param = _sliced_to_array(param, 1), k = _param[0];
590
- return k !== '__metadata__';
591
- });
592
- if (!entry || entry[1].dtype !== 'F32') throw new _errorsts.SenseError('EMBED_MODEL', "".concat(model, ": expected an F32 safetensors matrix"));
593
- spec = entry[1];
594
- dims = spec.shape[1];
595
- dataStart = raw.byteOffset + 8 + headerLen + spec.data_offsets[0];
596
- matrix = dataStart % 4 === 0 ? new Float32Array(raw.buffer, dataStart, spec.shape[0] * dims) : new Float32Array(raw.buffer.slice(dataStart, dataStart + spec.shape[0] * dims * 4));
597
- tokenizerJson = JSON.parse((0, _nodefs.readFileSync)((0, _nodepath.join)(dir, 'tokenizer.json'), 'utf8'));
598
- return [
599
- 4,
600
- Promise.resolve().then(function() {
601
- return /*#__PURE__*/ _interop_require_wildcard(require("@huggingface/tokenizers"));
602
- })
603
- ];
604
- case 1:
605
- Tokenizer = _state.sent().Tokenizer;
606
- tok = new Tokenizer(tokenizerJson, {});
607
- unkId = (_ref = (_tokenizerJson_model1 = tokenizerJson.model) === null || _tokenizerJson_model1 === void 0 ? void 0 : (_tokenizerJson_model_vocab = _tokenizerJson_model1.vocab) === null || _tokenizerJson_model_vocab === void 0 ? void 0 : _tokenizerJson_model_vocab[(_tokenizerJson_model = tokenizerJson.model) === null || _tokenizerJson_model === void 0 ? void 0 : _tokenizerJson_model.unk_token]) !== null && _ref !== void 0 ? _ref : -1;
608
- return [
609
- 2,
610
- {
611
- id: "static:".concat(model),
612
- dims: dims,
613
- embed: function embed(texts) {
614
- return _async_to_generator(function() {
615
- return _ts_generator(this, function(_state) {
616
- return [
617
- 2,
618
- texts.map(one)
619
- ];
620
- });
621
- })();
622
- }
623
- }
624
- ];
625
- }
626
- });
627
- })();
628
- }
629
- // --- api type: one POST against any OpenAI-compatible /embeddings endpoint ---
630
- function apiProvider(model, url, keyEnv) {
631
- return _async_to_generator(function() {
632
- var base, headers, key, dims;
633
- function post(texts) {
634
- return _async_to_generator(function() {
635
- var res, body;
636
- return _ts_generator(this, function(_state) {
637
- switch(_state.label){
638
- case 0:
639
- return [
640
- 4,
641
- fetch("".concat(base, "/embeddings"), {
642
- method: 'POST',
643
- headers: headers,
644
- body: JSON.stringify({
645
- model: model,
646
- input: texts
647
- })
648
- })
649
- ];
650
- case 1:
651
- res = _state.sent();
652
- if (!res.ok) throw new _errorsts.SenseError('EMBED_MODEL', "".concat(base, "/embeddings -> HTTP ").concat(res.status));
653
- return [
654
- 4,
655
- res.json()
656
- ];
657
- case 2:
658
- body = _state.sent();
659
- return [
660
- 2,
661
- body.data.map(function(d) {
662
- return Float32Array.from(d.embedding);
663
- })
664
- ];
665
- }
666
- });
667
- })();
668
- }
669
- return _ts_generator(this, function(_state) {
670
- switch(_state.label){
671
- case 0:
672
- if (!url) throw new _errorsts.SenseError('EMBED_MODEL', 'features.embed.type "api" requires a url');
673
- base = url.replace(/\/+$/, '');
674
- headers = {
675
- 'content-type': 'application/json'
676
- };
677
- key = keyEnv ? process.env[keyEnv] : undefined;
678
- if (key) headers.authorization = "Bearer ".concat(key);
679
- return [
680
- 4,
681
- post([
682
- 'dimension probe'
683
- ])
684
- ];
685
- case 1:
686
- dims = _state.sent()[0].length;
687
- return [
688
- 2,
689
- {
690
- id: "api:".concat(base, ":").concat(model),
691
- dims: dims,
692
- embed: post
693
- }
694
- ];
695
- }
696
- });
697
- })();
698
- }
699
- var providers = new Map();
700
- function getProvider(cfg) {
701
- var _e_url;
702
- var e = (0, _indexts.embedConfig)(cfg);
703
- if (!e) throw new _errorsts.SenseError('EMBED_DISABLED', 'this tree has no embedding model: add an "embed" block naming one to sense.config.json, then run `sense download`');
704
- var sig = "".concat(e.type, ":").concat(e.model, ":").concat((_e_url = e.url) !== null && _e_url !== void 0 ? _e_url : '');
705
- var p = providers.get(sig);
706
- if (!p) {
707
- p = e.type === 'api' ? apiProvider(e.model, e.url, e.key) : staticProvider(e.model);
708
- providers.set(sig, p);
709
- }
710
- return p;
711
- }
712
- // Slice + re-normalize (Matryoshka); optionally round through int8 storage.
713
- function toStore(full, dims, int8) {
714
- var v = new Float32Array(dims);
715
- var norm = 0;
716
- for(var d = 0; d < dims; d++)norm += full[d] * full[d];
717
- norm = Math.sqrt(norm) + 1e-32;
718
- for(var d1 = 0; d1 < dims; d1++)v[d1] = full[d1] / norm;
719
- if (!int8) return {
720
- v: v,
721
- scale: 1
722
- };
723
- var max = 0;
724
- for(var d2 = 0; d2 < dims; d2++)max = Math.max(max, Math.abs(v[d2]));
725
- return {
726
- v: v,
727
- scale: max / 127 || 1
728
- };
729
- }
730
- function embedPending(db, cfg, baseDir) {
731
- return _async_to_generator(function() {
732
- var _loop, provider, dirty, storeDims, byPath, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, row, _byPath_get, list, jobs, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, _step_value, path, chunkIdxs, chunks, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, idx, update, report, i;
733
- return _ts_generator(this, function(_state) {
734
- switch(_state.label){
735
- case 0:
736
- _loop = function(i) {
737
- var batch, vectors;
738
- return _ts_generator(this, function(_state) {
739
- switch(_state.label){
740
- case 0:
741
- batch = jobs.slice(i, i + BATCH);
742
- return [
743
- 4,
744
- provider.embed(batch.map(function(j) {
745
- return j.text;
746
- }))
747
- ];
748
- case 1:
749
- vectors = _state.sent();
750
- db.exec('BEGIN');
751
- try {
752
- batch.forEach(function(job, j) {
753
- var _toStore = toStore(vectors[j], storeDims, true), v = _toStore.v, scale = _toStore.scale;
754
- var q = new Int8Array(storeDims);
755
- for(var d = 0; d < storeDims; d++)q[d] = Math.round(v[d] / scale);
756
- update.run(scale, Buffer.from(q.buffer), job.path, job.chunk);
757
- });
758
- db.exec('COMMIT');
759
- } catch (err) {
760
- db.exec('ROLLBACK');
761
- throw err;
762
- }
763
- report.tick(Math.min(i + BATCH, jobs.length));
764
- return [
765
- 2
766
- ];
767
- }
768
- });
769
- };
770
- return [
771
- 4,
772
- getProvider(cfg)
773
- ];
774
- case 1:
775
- provider = _state.sent();
776
- dirty = db.prepare('SELECT "path", chunk FROM embeddings WHERE vector IS NULL ORDER BY "path", chunk').all();
777
- if (dirty.length === 0) return [
778
- 2
779
- ];
780
- storeDims = Math.min(STORE_DIMS, provider.dims);
781
- byPath = new Map();
782
- _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
783
- try {
784
- for(_iterator = dirty[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
785
- row = _step.value;
786
- ;
787
- list = (_byPath_get = byPath.get(row.path)) !== null && _byPath_get !== void 0 ? _byPath_get : [];
788
- list.push(row.chunk);
789
- byPath.set(row.path, list);
790
- }
791
- } catch (err) {
792
- _didIteratorError = true;
793
- _iteratorError = err;
794
- } finally{
795
- try {
796
- if (!_iteratorNormalCompletion && _iterator.return != null) {
797
- _iterator.return();
798
- }
799
- } finally{
800
- if (_didIteratorError) {
801
- throw _iteratorError;
802
- }
803
- }
804
- }
805
- jobs = [];
806
- _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
807
- try {
808
- for(_iterator1 = byPath[Symbol.iterator](); !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
809
- _step_value = _sliced_to_array(_step1.value, 2), path = _step_value[0], chunkIdxs = _step_value[1];
810
- chunks = void 0;
811
- try {
812
- // presets/embed are irrelevant here -- re-deriving chunk text for a doc that already
813
- // has embeddings rows means the tree had an embedding model at reconcile time.
814
- chunks = (0, _scants.parseFile)({
815
- relPath: path,
816
- absPath: (0, _nodepath.join)(baseDir, path),
817
- mtimeMs: 0,
818
- ctimeMs: 0,
819
- size: 0,
820
- presets: [],
821
- embed: true
822
- }, [
823
- embed
824
- ]).doc.extracted.embed;
825
- } catch (unused) {
826
- continue; // vanished since reconcile; the next reconcile removes its rows
827
- }
828
- _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = undefined;
829
- try {
830
- for(_iterator2 = chunkIdxs[Symbol.iterator](); !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true){
831
- idx = _step2.value;
832
- if (chunks[idx]) jobs.push({
833
- path: path,
834
- chunk: idx,
835
- text: chunks[idx].text
836
- });
837
- }
838
- } catch (err) {
839
- _didIteratorError2 = true;
840
- _iteratorError2 = err;
841
- } finally{
842
- try {
843
- if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
844
- _iterator2.return();
845
- }
846
- } finally{
847
- if (_didIteratorError2) {
848
- throw _iteratorError2;
849
- }
850
- }
851
- }
852
- }
853
- } catch (err) {
854
- _didIteratorError1 = true;
855
- _iteratorError1 = err;
856
- } finally{
857
- try {
858
- if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
859
- _iterator1.return();
860
- }
861
- } finally{
862
- if (_didIteratorError1) {
863
- throw _iteratorError1;
864
- }
865
- }
866
- }
867
- update = db.prepare('UPDATE embeddings SET scale = ?, vector = ? WHERE "path" = ? AND chunk = ?');
868
- // The lazy build is the one long silence a first search hits (measured 23s at
869
- // 26k notes); progress makes it distinguishable from a hang.
870
- report = (0, _progressts.progress)('embedding chunks', jobs.length);
871
- i = 0;
872
- _state.label = 2;
873
- case 2:
874
- if (!(i < jobs.length)) return [
875
- 3,
876
- 5
877
- ];
878
- return [
879
- 5,
880
- _ts_values(_loop(i))
881
- ];
882
- case 3:
883
- _state.sent();
884
- _state.label = 4;
885
- case 4:
886
- i += BATCH;
887
- return [
888
- 3,
889
- 2
890
- ];
891
- case 5:
892
- report.finish();
893
- return [
894
- 2
895
- ];
896
- }
897
- });
898
- })();
899
- }
900
- // Dequantised int8 dot products land a little either side of a true cosine, so an identical
901
- // pair prints 1.001 and undermines a column whose whole job is being a bounded number.
902
- function asCosine(score) {
903
- return Math.round(Math.min(1, Math.max(-1, score)) * 1000) / 1000;
904
- }
905
- function semanticCandidates(db, cfg, terms, fetch1, allowed) {
906
- return _async_to_generator(function() {
907
- var _terms_match, baseDir, provider, storeDims, text, _toStore, qv, rows, best, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, row, q, dot, d, score, existing;
908
- return _ts_generator(this, function(_state) {
909
- switch(_state.label){
910
- case 0:
911
- baseDir = cfg.baseDir;
912
- if (!baseDir) throw new _errorsts.SenseError('EMBED_MODEL', 'semantic expansion needs a config with baseDir (use loadConfig/open)');
913
- return [
914
- 4,
915
- embedPending(db, cfg, baseDir)
916
- ];
917
- case 1:
918
- _state.sent();
919
- return [
920
- 4,
921
- getProvider(cfg)
922
- ];
923
- case 2:
924
- provider = _state.sent();
925
- storeDims = Math.min(STORE_DIMS, provider.dims);
926
- text = ((_terms_match = terms.match(RegExp("[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\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\\u066E-\\u066F\\u0671-\\u06D3\\u06D5\\u06E5-\\u06E6\\u06EE-\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\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\\u0971-\\u0980\\u0985-\\u098C\\u098F-\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC-\\u09DD\\u09DF-\\u09E1\\u09F0-\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F-\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32-\\u0A33\\u0A35-\\u0A36\\u0A38-\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2-\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0-\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F-\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32-\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C-\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99-\\u0B9A\\u0B9C\\u0B9E-\\u0B9F\\u0BA3-\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5C-\\u0C5D\\u0C60-\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDC-\\u0CDE\\u0CE0-\\u0CE1\\u0CF1-\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32-\\u0E33\\u0E40-\\u0E46\\u0E81-\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2-\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065-\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\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\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE-\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\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\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183-\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2-\\u2CF3\\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-\\u3006\\u3031-\\u3035\\u303B-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A-\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7DC\\uA7F1-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD-\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\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\\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\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC\\u{10000}-\\u{1000B}\\u{1000D}-\\u{10026}\\u{10028}-\\u{1003A}\\u{1003C}-\\u{1003D}\\u{1003F}-\\u{1004D}\\u{10050}-\\u{1005D}\\u{10080}-\\u{100FA}\\u{10280}-\\u{1029C}\\u{102A0}-\\u{102D0}\\u{10300}-\\u{1031F}\\u{1032D}-\\u{10340}\\u{10342}-\\u{10349}\\u{10350}-\\u{10375}\\u{10380}-\\u{1039D}\\u{103A0}-\\u{103C3}\\u{103C8}-\\u{103CF}\\u{10400}-\\u{1049D}\\u{104B0}-\\u{104D3}\\u{104D8}-\\u{104FB}\\u{10500}-\\u{10527}\\u{10530}-\\u{10563}\\u{10570}-\\u{1057A}\\u{1057C}-\\u{1058A}\\u{1058C}-\\u{10592}\\u{10594}-\\u{10595}\\u{10597}-\\u{105A1}\\u{105A3}-\\u{105B1}\\u{105B3}-\\u{105B9}\\u{105BB}-\\u{105BC}\\u{105C0}-\\u{105F3}\\u{10600}-\\u{10736}\\u{10740}-\\u{10755}\\u{10760}-\\u{10767}\\u{10780}-\\u{10785}\\u{10787}-\\u{107B0}\\u{107B2}-\\u{107BA}\\u{10800}-\\u{10805}\\u{10808}\\u{1080A}-\\u{10835}\\u{10837}-\\u{10838}\\u{1083C}\\u{1083F}-\\u{10855}\\u{10860}-\\u{10876}\\u{10880}-\\u{1089E}\\u{108E0}-\\u{108F2}\\u{108F4}-\\u{108F5}\\u{10900}-\\u{10915}\\u{10920}-\\u{10939}\\u{10940}-\\u{10959}\\u{10980}-\\u{109B7}\\u{109BE}-\\u{109BF}\\u{10A00}\\u{10A10}-\\u{10A13}\\u{10A15}-\\u{10A17}\\u{10A19}-\\u{10A35}\\u{10A60}-\\u{10A7C}\\u{10A80}-\\u{10A9C}\\u{10AC0}-\\u{10AC7}\\u{10AC9}-\\u{10AE4}\\u{10B00}-\\u{10B35}\\u{10B40}-\\u{10B55}\\u{10B60}-\\u{10B72}\\u{10B80}-\\u{10B91}\\u{10C00}-\\u{10C48}\\u{10C80}-\\u{10CB2}\\u{10CC0}-\\u{10CF2}\\u{10D00}-\\u{10D23}\\u{10D4A}-\\u{10D65}\\u{10D6F}-\\u{10D85}\\u{10E80}-\\u{10EA9}\\u{10EB0}-\\u{10EB1}\\u{10EC2}-\\u{10EC7}\\u{10F00}-\\u{10F1C}\\u{10F27}\\u{10F30}-\\u{10F45}\\u{10F70}-\\u{10F81}\\u{10FB0}-\\u{10FC4}\\u{10FE0}-\\u{10FF6}\\u{11003}-\\u{11037}\\u{11071}-\\u{11072}\\u{11075}\\u{11083}-\\u{110AF}\\u{110D0}-\\u{110E8}\\u{11103}-\\u{11126}\\u{11144}\\u{11147}\\u{11150}-\\u{11172}\\u{11176}\\u{11183}-\\u{111B2}\\u{111C1}-\\u{111C4}\\u{111DA}\\u{111DC}\\u{11200}-\\u{11211}\\u{11213}-\\u{1122B}\\u{1123F}-\\u{11240}\\u{11280}-\\u{11286}\\u{11288}\\u{1128A}-\\u{1128D}\\u{1128F}-\\u{1129D}\\u{1129F}-\\u{112A8}\\u{112B0}-\\u{112DE}\\u{11305}-\\u{1130C}\\u{1130F}-\\u{11310}\\u{11313}-\\u{11328}\\u{1132A}-\\u{11330}\\u{11332}-\\u{11333}\\u{11335}-\\u{11339}\\u{1133D}\\u{11350}\\u{1135D}-\\u{11361}\\u{11380}-\\u{11389}\\u{1138B}\\u{1138E}\\u{11390}-\\u{113B5}\\u{113B7}\\u{113D1}\\u{113D3}\\u{11400}-\\u{11434}\\u{11447}-\\u{1144A}\\u{1145F}-\\u{11461}\\u{11480}-\\u{114AF}\\u{114C4}-\\u{114C5}\\u{114C7}\\u{11580}-\\u{115AE}\\u{115D8}-\\u{115DB}\\u{11600}-\\u{1162F}\\u{11644}\\u{11680}-\\u{116AA}\\u{116B8}\\u{11700}-\\u{1171A}\\u{11740}-\\u{11746}\\u{11800}-\\u{1182B}\\u{118A0}-\\u{118DF}\\u{118FF}-\\u{11906}\\u{11909}\\u{1190C}-\\u{11913}\\u{11915}-\\u{11916}\\u{11918}-\\u{1192F}\\u{1193F}\\u{11941}\\u{119A0}-\\u{119A7}\\u{119AA}-\\u{119D0}\\u{119E1}\\u{119E3}\\u{11A00}\\u{11A0B}-\\u{11A32}\\u{11A3A}\\u{11A50}\\u{11A5C}-\\u{11A89}\\u{11A9D}\\u{11AB0}-\\u{11AF8}\\u{11BC0}-\\u{11BE0}\\u{11C00}-\\u{11C08}\\u{11C0A}-\\u{11C2E}\\u{11C40}\\u{11C72}-\\u{11C8F}\\u{11D00}-\\u{11D06}\\u{11D08}-\\u{11D09}\\u{11D0B}-\\u{11D30}\\u{11D46}\\u{11D60}-\\u{11D65}\\u{11D67}-\\u{11D68}\\u{11D6A}-\\u{11D89}\\u{11D98}\\u{11DB0}-\\u{11DDB}\\u{11EE0}-\\u{11EF2}\\u{11F02}\\u{11F04}-\\u{11F10}\\u{11F12}-\\u{11F33}\\u{11FB0}\\u{12000}-\\u{12399}\\u{12480}-\\u{12543}\\u{12F90}-\\u{12FF0}\\u{13000}-\\u{1342F}\\u{13441}-\\u{13446}\\u{13460}-\\u{143FA}\\u{14400}-\\u{14646}\\u{16100}-\\u{1611D}\\u{16800}-\\u{16A38}\\u{16A40}-\\u{16A5E}\\u{16A70}-\\u{16ABE}\\u{16AD0}-\\u{16AED}\\u{16B00}-\\u{16B2F}\\u{16B40}-\\u{16B43}\\u{16B63}-\\u{16B77}\\u{16B7D}-\\u{16B8F}\\u{16D40}-\\u{16D6C}\\u{16E40}-\\u{16E7F}\\u{16EA0}-\\u{16EB8}\\u{16EBB}-\\u{16ED3}\\u{16F00}-\\u{16F4A}\\u{16F50}\\u{16F93}-\\u{16F9F}\\u{16FE0}-\\u{16FE1}\\u{16FE3}\\u{16FF2}-\\u{16FF3}\\u{17000}-\\u{18CD5}\\u{18CFF}-\\u{18D1E}\\u{18D80}-\\u{18DF2}\\u{1AFF0}-\\u{1AFF3}\\u{1AFF5}-\\u{1AFFB}\\u{1AFFD}-\\u{1AFFE}\\u{1B000}-\\u{1B122}\\u{1B132}\\u{1B150}-\\u{1B152}\\u{1B155}\\u{1B164}-\\u{1B167}\\u{1B170}-\\u{1B2FB}\\u{1BC00}-\\u{1BC6A}\\u{1BC70}-\\u{1BC7C}\\u{1BC80}-\\u{1BC88}\\u{1BC90}-\\u{1BC99}\\u{1D400}-\\u{1D454}\\u{1D456}-\\u{1D49C}\\u{1D49E}-\\u{1D49F}\\u{1D4A2}\\u{1D4A5}-\\u{1D4A6}\\u{1D4A9}-\\u{1D4AC}\\u{1D4AE}-\\u{1D4B9}\\u{1D4BB}\\u{1D4BD}-\\u{1D4C3}\\u{1D4C5}-\\u{1D505}\\u{1D507}-\\u{1D50A}\\u{1D50D}-\\u{1D514}\\u{1D516}-\\u{1D51C}\\u{1D51E}-\\u{1D539}\\u{1D53B}-\\u{1D53E}\\u{1D540}-\\u{1D544}\\u{1D546}\\u{1D54A}-\\u{1D550}\\u{1D552}-\\u{1D6A5}\\u{1D6A8}-\\u{1D6C0}\\u{1D6C2}-\\u{1D6DA}\\u{1D6DC}-\\u{1D6FA}\\u{1D6FC}-\\u{1D714}\\u{1D716}-\\u{1D734}\\u{1D736}-\\u{1D74E}\\u{1D750}-\\u{1D76E}\\u{1D770}-\\u{1D788}\\u{1D78A}-\\u{1D7A8}\\u{1D7AA}-\\u{1D7C2}\\u{1D7C4}-\\u{1D7CB}\\u{1DF00}-\\u{1DF1E}\\u{1DF25}-\\u{1DF2A}\\u{1E030}-\\u{1E06D}\\u{1E100}-\\u{1E12C}\\u{1E137}-\\u{1E13D}\\u{1E14E}\\u{1E290}-\\u{1E2AD}\\u{1E2C0}-\\u{1E2EB}\\u{1E4D0}-\\u{1E4EB}\\u{1E5D0}-\\u{1E5ED}\\u{1E5F0}\\u{1E6C0}-\\u{1E6DE}\\u{1E6E0}-\\u{1E6E2}\\u{1E6E4}-\\u{1E6E5}\\u{1E6E7}-\\u{1E6ED}\\u{1E6F0}-\\u{1E6F4}\\u{1E6FE}-\\u{1E6FF}\\u{1E7E0}-\\u{1E7E6}\\u{1E7E8}-\\u{1E7EB}\\u{1E7ED}-\\u{1E7EE}\\u{1E7F0}-\\u{1E7FE}\\u{1E800}-\\u{1E8C4}\\u{1E900}-\\u{1E943}\\u{1E94B}\\u{1EE00}-\\u{1EE03}\\u{1EE05}-\\u{1EE1F}\\u{1EE21}-\\u{1EE22}\\u{1EE24}\\u{1EE27}\\u{1EE29}-\\u{1EE32}\\u{1EE34}-\\u{1EE37}\\u{1EE39}\\u{1EE3B}\\u{1EE42}\\u{1EE47}\\u{1EE49}\\u{1EE4B}\\u{1EE4D}-\\u{1EE4F}\\u{1EE51}-\\u{1EE52}\\u{1EE54}\\u{1EE57}\\u{1EE59}\\u{1EE5B}\\u{1EE5D}\\u{1EE5F}\\u{1EE61}-\\u{1EE62}\\u{1EE64}\\u{1EE67}-\\u{1EE6A}\\u{1EE6C}-\\u{1EE72}\\u{1EE74}-\\u{1EE77}\\u{1EE79}-\\u{1EE7C}\\u{1EE7E}\\u{1EE80}-\\u{1EE89}\\u{1EE8B}-\\u{1EE9B}\\u{1EEA1}-\\u{1EEA3}\\u{1EEA5}-\\u{1EEA9}\\u{1EEAB}-\\u{1EEBB}\\u{20000}-\\u{2A6DF}\\u{2A700}-\\u{2B81D}\\u{2B820}-\\u{2CEAD}\\u{2CEB0}-\\u{2EBE0}\\u{2EBF0}-\\u{2EE5D}\\u{2F800}-\\u{2FA1D}\\u{30000}-\\u{3134A}\\u{31350}-\\u{33479}\\u0030-\\u0039\\u00B2-\\u00B3\\u00B9\\u00BC-\\u00BE\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u09F4-\\u09F9\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0B72-\\u0B77\\u0BE6-\\u0BF2\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0CE6-\\u0CEF\\u0D58-\\u0D5E\\u0D66-\\u0D78\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F33\\u1040-\\u1049\\u1090-\\u1099\\u1369-\\u137C\\u16EE-\\u16F0\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19DA\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\u2070\\u2074-\\u2079\\u2080-\\u2089\\u2150-\\u2182\\u2185-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2CFD\\u3007\\u3021-\\u3029\\u3038-\\u303A\\u3192-\\u3195\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\uA620-\\uA629\\uA6E6-\\uA6EF\\uA830-\\uA835\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19\\u{10107}-\\u{10133}\\u{10140}-\\u{10178}\\u{1018A}-\\u{1018B}\\u{102E1}-\\u{102FB}\\u{10320}-\\u{10323}\\u{10341}\\u{1034A}\\u{103D1}-\\u{103D5}\\u{104A0}-\\u{104A9}\\u{10858}-\\u{1085F}\\u{10879}-\\u{1087F}\\u{108A7}-\\u{108AF}\\u{108FB}-\\u{108FF}\\u{10916}-\\u{1091B}\\u{109BC}-\\u{109BD}\\u{109C0}-\\u{109CF}\\u{109D2}-\\u{109FF}\\u{10A40}-\\u{10A48}\\u{10A7D}-\\u{10A7E}\\u{10A9D}-\\u{10A9F}\\u{10AEB}-\\u{10AEF}\\u{10B58}-\\u{10B5F}\\u{10B78}-\\u{10B7F}\\u{10BA9}-\\u{10BAF}\\u{10CFA}-\\u{10CFF}\\u{10D30}-\\u{10D39}\\u{10D40}-\\u{10D49}\\u{10E60}-\\u{10E7E}\\u{10F1D}-\\u{10F26}\\u{10F51}-\\u{10F54}\\u{10FC5}-\\u{10FCB}\\u{11052}-\\u{1106F}\\u{110F0}-\\u{110F9}\\u{11136}-\\u{1113F}\\u{111D0}-\\u{111D9}\\u{111E1}-\\u{111F4}\\u{112F0}-\\u{112F9}\\u{11450}-\\u{11459}\\u{114D0}-\\u{114D9}\\u{11650}-\\u{11659}\\u{116C0}-\\u{116C9}\\u{116D0}-\\u{116E3}\\u{11730}-\\u{1173B}\\u{118E0}-\\u{118F2}\\u{11950}-\\u{11959}\\u{11BF0}-\\u{11BF9}\\u{11C50}-\\u{11C6C}\\u{11D50}-\\u{11D59}\\u{11DA0}-\\u{11DA9}\\u{11DE0}-\\u{11DE9}\\u{11F50}-\\u{11F59}\\u{11FC0}-\\u{11FD4}\\u{12400}-\\u{1246E}\\u{16130}-\\u{16139}\\u{16A60}-\\u{16A69}\\u{16AC0}-\\u{16AC9}\\u{16B50}-\\u{16B59}\\u{16B5B}-\\u{16B61}\\u{16D70}-\\u{16D79}\\u{16E80}-\\u{16E96}\\u{16FF4}-\\u{16FF6}\\u{1CCF0}-\\u{1CCF9}\\u{1D2C0}-\\u{1D2D3}\\u{1D2E0}-\\u{1D2F3}\\u{1D360}-\\u{1D378}\\u{1D7CE}-\\u{1D7FF}\\u{1E140}-\\u{1E149}\\u{1E2F0}-\\u{1E2F9}\\u{1E4F0}-\\u{1E4F9}\\u{1E5F1}-\\u{1E5FA}\\u{1E8C7}-\\u{1E8CF}\\u{1E950}-\\u{1E959}\\u{1EC71}-\\u{1ECAB}\\u{1ECAD}-\\u{1ECAF}\\u{1ECB1}-\\u{1ECB4}\\u{1ED01}-\\u{1ED2D}\\u{1ED2F}-\\u{1ED3D}\\u{1F100}-\\u{1F10C}\\u{1FBF0}-\\u{1FBF9}]+", "gu"))) !== null && _terms_match !== void 0 ? _terms_match : []).filter(function(t) {
927
- return ![
928
- 'AND',
929
- 'OR',
930
- 'NOT',
931
- 'NEAR'
932
- ].includes(t);
933
- }).join(' ');
934
- return [
935
- 4,
936
- provider.embed([
937
- text
938
- ])
939
- ];
940
- case 3:
941
- _toStore = toStore.apply(void 0, [
942
- _state.sent()[0],
943
- storeDims,
944
- false
945
- ]), qv = _toStore.v;
946
- rows = db.prepare('SELECT "path", start_line, end_line, scale, vector FROM embeddings WHERE vector IS NOT NULL').all();
947
- best = new Map();
948
- _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
949
- try {
950
- for(_iterator = rows[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
951
- row = _step.value;
952
- if (allowed && !allowed.has(row.path)) continue;
953
- q = new Int8Array(row.vector.buffer, row.vector.byteOffset, Math.min(storeDims, row.vector.byteLength));
954
- dot = 0;
955
- for(d = 0; d < q.length; d++)dot += q[d] * qv[d];
956
- score = dot * row.scale;
957
- existing = best.get(row.path);
958
- if (!existing || score > existing.score) best.set(row.path, {
959
- score: score,
960
- lines: "L".concat(row.start_line, "-").concat(row.end_line)
961
- });
962
- }
963
- } catch (err) {
964
- _didIteratorError = true;
965
- _iteratorError = err;
966
- } finally{
967
- try {
968
- if (!_iteratorNormalCompletion && _iterator.return != null) {
969
- _iterator.return();
970
- }
971
- } finally{
972
- if (_didIteratorError) {
973
- throw _iteratorError;
974
- }
975
- }
976
- }
977
- return [
978
- 2,
979
- _to_consumable_array(best.entries()).sort(function(a, b) {
980
- return b[1].score - a[1].score;
981
- }).slice(0, fetch1).map(function(param) {
982
- var _param = _sliced_to_array(param, 2), path = _param[0], b = _param[1];
983
- return {
984
- path: path,
985
- lines: b.lines,
986
- similarity: asCosine(b.score)
987
- };
988
- })
989
- ];
990
- }
991
- });
992
- })();
993
- }
994
- function hasEmbedding(db, path) {
995
- var row = db.prepare('SELECT 1 AS ok FROM embeddings WHERE "path" = ? AND vector IS NOT NULL LIMIT 1').get(path);
996
- return row !== undefined;
997
- }
998
- function similarNotes(db, _cfg, path, opts) {
999
- // Cost is target_chunks x stored_chunks, so a heading-dense seed multiplies a full-corpus
1000
- // scan (12.7s at 201 chunks/note). Sample evenly, so late sections still get a vote.
1001
- var targetRows = db.prepare('SELECT scale, vector FROM embeddings WHERE "path" = ? AND vector IS NOT NULL ORDER BY chunk').all(path);
1002
- if (targetRows.length === 0) return [];
1003
- var step = Math.max(1, Math.ceil(targetRows.length / TARGET_CHUNK_CAP));
1004
- var target = targetRows.filter(function(_, i) {
1005
- return i % step === 0;
1006
- }).map(function(row) {
1007
- return {
1008
- v: new Int8Array(row.vector.buffer, row.vector.byteOffset, row.vector.byteLength),
1009
- scale: row.scale
1010
- };
1011
- });
1012
- var rows = db.prepare('SELECT "path", scale, vector FROM embeddings WHERE vector IS NOT NULL').all();
1013
- var best = new Map();
1014
- var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1015
- try {
1016
- for(var _iterator = rows[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1017
- var row = _step.value;
1018
- if (row.path === path || opts.exclude.has(row.path) || opts.allowed && !opts.allowed.has(row.path)) continue;
1019
- var other = new Int8Array(row.vector.buffer, row.vector.byteOffset, row.vector.byteLength);
1020
- var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
1021
- try {
1022
- for(var _iterator1 = target[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
1023
- var t = _step1.value;
1024
- var dot = 0;
1025
- var len = Math.min(t.v.length, other.length);
1026
- for(var d = 0; d < len; d++)dot += t.v[d] * other[d];
1027
- var score = dot * t.scale * row.scale;
1028
- var existing = best.get(row.path);
1029
- if (existing === undefined || score > existing) best.set(row.path, score);
1030
- }
1031
- } catch (err) {
1032
- _didIteratorError1 = true;
1033
- _iteratorError1 = err;
1034
- } finally{
1035
- try {
1036
- if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
1037
- _iterator1.return();
1038
- }
1039
- } finally{
1040
- if (_didIteratorError1) {
1041
- throw _iteratorError1;
1042
- }
1043
- }
1044
- }
1045
- }
1046
- } catch (err) {
1047
- _didIteratorError = true;
1048
- _iteratorError = err;
1049
- } finally{
1050
- try {
1051
- if (!_iteratorNormalCompletion && _iterator.return != null) {
1052
- _iterator.return();
1053
- }
1054
- } finally{
1055
- if (_didIteratorError) {
1056
- throw _iteratorError;
1057
- }
1058
- }
1059
- }
1060
- return _to_consumable_array(best.entries()).sort(function(a, b) {
1061
- return b[1] - a[1];
1062
- }).slice(0, opts.k).map(function(param) {
1063
- var _param = _sliced_to_array(param, 2), p = _param[0], score = _param[1];
1064
- return {
1065
- path: p,
1066
- similarity: asCosine(score)
1067
- };
1068
- });
1069
- }
1070
104
  /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }