logixia 2.0.0 → 2.0.6

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 (239) hide show
  1. package/README.md +172 -2597
  2. package/dist/async-context-2mbUKhcl.mjs +132 -0
  3. package/dist/async-context-2mbUKhcl.mjs.map +1 -0
  4. package/dist/async-context-DUFMDYAr.js +148 -0
  5. package/dist/async-context-DUFMDYAr.js.map +1 -0
  6. package/dist/{azure-monitor.transport-CrvfHd9C.js → azure-monitor.transport-Bu4S2I2q.js} +32 -20
  7. package/dist/azure-monitor.transport-Bu4S2I2q.js.map +1 -0
  8. package/dist/{azure-monitor.transport-Cn_3Usvu.d.ts → azure-monitor.transport-Bvf7Xegt.d.ts} +3 -6
  9. package/dist/azure-monitor.transport-Bvf7Xegt.d.ts.map +1 -0
  10. package/dist/{azure-monitor.transport-CHnjVRF-.mjs → azure-monitor.transport-C1RWAumT.mjs} +27 -15
  11. package/dist/azure-monitor.transport-C1RWAumT.mjs.map +1 -0
  12. package/dist/{azure-monitor.transport-D7Da4RAb.d.mts → azure-monitor.transport-CbSHOnNX.d.mts} +3 -6
  13. package/dist/azure-monitor.transport-CbSHOnNX.d.mts.map +1 -0
  14. package/dist/azure.d.mts +1 -2
  15. package/dist/azure.d.ts +1 -2
  16. package/dist/azure.js +3 -6
  17. package/dist/azure.mjs +1 -6
  18. package/dist/{batch-buffer-PGvSgbmd.mjs → batch-buffer-BvXLDPlV.mjs} +21 -7
  19. package/dist/batch-buffer-BvXLDPlV.mjs.map +1 -0
  20. package/dist/{batch-buffer-BY-mRWIK.js → batch-buffer-C7Am4Mw-.js} +53 -40
  21. package/dist/batch-buffer-C7Am4Mw-.js.map +1 -0
  22. package/dist/browser.d.mts +47 -27
  23. package/dist/browser.d.mts.map +1 -1
  24. package/dist/browser.d.ts +47 -27
  25. package/dist/browser.d.ts.map +1 -1
  26. package/dist/browser.js +464 -62
  27. package/dist/browser.js.map +1 -1
  28. package/dist/browser.mjs +465 -65
  29. package/dist/browser.mjs.map +1 -1
  30. package/dist/{builder-0gEzRopq.mjs → builder-DhNhvOkt.mjs} +307 -246
  31. package/dist/builder-DhNhvOkt.mjs.map +1 -0
  32. package/dist/{builder-D44QktIo.js → builder-yFvJrz7o.js} +435 -399
  33. package/dist/builder-yFvJrz7o.js.map +1 -0
  34. package/dist/cli/index.js +216 -125
  35. package/dist/cloudwatch.d.mts +1 -2
  36. package/dist/cloudwatch.d.ts +1 -2
  37. package/dist/cloudwatch.js +3 -7
  38. package/dist/cloudwatch.mjs +1 -7
  39. package/dist/{cloudwatch.transport-DsEq633o.d.ts → cloudwatch.transport-CQyT6U91.d.ts} +2 -6
  40. package/dist/cloudwatch.transport-CQyT6U91.d.ts.map +1 -0
  41. package/dist/{cloudwatch.transport-BO1ahxw-.js → cloudwatch.transport-Ch1Uae-0.js} +61 -36
  42. package/dist/cloudwatch.transport-Ch1Uae-0.js.map +1 -0
  43. package/dist/{cloudwatch.transport-UlyZFWMn.d.mts → cloudwatch.transport-CjVrI6S4.d.mts} +2 -6
  44. package/dist/cloudwatch.transport-CjVrI6S4.d.mts.map +1 -0
  45. package/dist/{cloudwatch.transport-DZ6ies7g.mjs → cloudwatch.transport-DZqF2xZO.mjs} +54 -28
  46. package/dist/cloudwatch.transport-DZqF2xZO.mjs.map +1 -0
  47. package/dist/{coerce.utils-Cu6IUTgX.mjs → coerce.utils-B_rEudCn.mjs} +3 -4
  48. package/dist/{coerce.utils-Cu6IUTgX.mjs.map → coerce.utils-B_rEudCn.mjs.map} +1 -1
  49. package/dist/{coerce.utils-B-LilukN.js → coerce.utils-C1C5sIX0.js} +8 -10
  50. package/dist/{coerce.utils-B-LilukN.js.map → coerce.utils-C1C5sIX0.js.map} +1 -1
  51. package/dist/correlation.d.mts +15 -69
  52. package/dist/correlation.d.mts.map +1 -1
  53. package/dist/correlation.d.ts +15 -69
  54. package/dist/correlation.d.ts.map +1 -1
  55. package/dist/correlation.js +69 -20
  56. package/dist/correlation.js.map +1 -1
  57. package/dist/correlation.mjs +67 -17
  58. package/dist/correlation.mjs.map +1 -1
  59. package/dist/{entry-fields-BvOLFlJ4.js → entry-fields-BSLkzw18.js} +16 -13
  60. package/dist/entry-fields-BSLkzw18.js.map +1 -0
  61. package/dist/{entry-fields-BJkuPnIg.mjs → entry-fields-J1OBi24o.mjs} +11 -7
  62. package/dist/entry-fields-J1OBi24o.mjs.map +1 -0
  63. package/dist/gcp.d.mts +1 -2
  64. package/dist/gcp.d.ts +1 -2
  65. package/dist/gcp.js +3 -7
  66. package/dist/gcp.mjs +1 -7
  67. package/dist/{gcp.transport-B7oc97sG.d.ts → gcp.transport-BCIvdFV-.d.ts} +5 -8
  68. package/dist/gcp.transport-BCIvdFV-.d.ts.map +1 -0
  69. package/dist/{gcp.transport-GrJurKo8.d.mts → gcp.transport-D9SdLPwP.d.mts} +5 -8
  70. package/dist/gcp.transport-D9SdLPwP.d.mts.map +1 -0
  71. package/dist/{gcp.transport-DBX5TPIy.mjs → gcp.transport-DVCmnA3b.mjs} +59 -16
  72. package/dist/gcp.transport-DVCmnA3b.mjs.map +1 -0
  73. package/dist/{gcp.transport-CHV8MGgz.js → gcp.transport-Dy2Lf8FI.js} +64 -22
  74. package/dist/gcp.transport-Dy2Lf8FI.js.map +1 -0
  75. package/dist/http-shapes-BnBkJcid.d.mts +32 -0
  76. package/dist/http-shapes-BnBkJcid.d.mts.map +1 -0
  77. package/dist/http-shapes-BnBkJcid.d.ts +32 -0
  78. package/dist/http-shapes-BnBkJcid.d.ts.map +1 -0
  79. package/dist/{index-3mw5gaCw.d.mts → index-BSTtFcQ6.d.mts} +142 -13
  80. package/dist/index-BSTtFcQ6.d.mts.map +1 -0
  81. package/dist/{index-DhIoploR.d.ts → index-CFDGkI8n.d.ts} +142 -13
  82. package/dist/index-CFDGkI8n.d.ts.map +1 -0
  83. package/dist/index.d.mts +114 -217
  84. package/dist/index.d.mts.map +1 -1
  85. package/dist/index.d.ts +113 -216
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +182 -279
  88. package/dist/index.js.map +1 -1
  89. package/dist/index.mjs +160 -256
  90. package/dist/index.mjs.map +1 -1
  91. package/dist/internal-log-Bg4V1cPg.mjs +170 -0
  92. package/dist/internal-log-Bg4V1cPg.mjs.map +1 -0
  93. package/dist/internal-log-By4Govmu.js +223 -0
  94. package/dist/internal-log-By4Govmu.js.map +1 -0
  95. package/dist/{logitron-logger-UVeN-mQm.d.ts → logitron-logger-D22Yb61K.d.mts} +121 -100
  96. package/dist/logitron-logger-D22Yb61K.d.mts.map +1 -0
  97. package/dist/{logitron-logger-BFDSO8Io.d.mts → logitron-logger-D_MYYrQt.d.ts} +121 -100
  98. package/dist/logitron-logger-D_MYYrQt.d.ts.map +1 -0
  99. package/dist/middleware.d.mts +13 -28
  100. package/dist/middleware.d.mts.map +1 -1
  101. package/dist/middleware.d.ts +13 -28
  102. package/dist/middleware.d.ts.map +1 -1
  103. package/dist/middleware.js +20 -81
  104. package/dist/middleware.js.map +1 -1
  105. package/dist/middleware.mjs +17 -79
  106. package/dist/middleware.mjs.map +1 -1
  107. package/dist/nest.d.mts +37 -48
  108. package/dist/nest.d.mts.map +1 -1
  109. package/dist/nest.d.ts +37 -48
  110. package/dist/nest.d.ts.map +1 -1
  111. package/dist/nest.js +124 -135
  112. package/dist/nest.js.map +1 -1
  113. package/dist/nest.mjs +69 -78
  114. package/dist/nest.mjs.map +1 -1
  115. package/dist/{transport.manager-BiuCAJd2.mjs → otel-Dt5riXuE.mjs} +275 -117
  116. package/dist/otel-Dt5riXuE.mjs.map +1 -0
  117. package/dist/{transport.manager-CXbKKdVE.js → otel-DyeH6DVR.js} +373 -178
  118. package/dist/otel-DyeH6DVR.js.map +1 -0
  119. package/dist/own-property-BWkibepN.js +40 -0
  120. package/dist/own-property-BWkibepN.js.map +1 -0
  121. package/dist/own-property-CjFw9qwZ.mjs +29 -0
  122. package/dist/own-property-CjFw9qwZ.mjs.map +1 -0
  123. package/dist/{trace.utils-CvXgaiQT.mjs → request-trace-BgNykH9M.mjs} +40 -9
  124. package/dist/request-trace-BgNykH9M.mjs.map +1 -0
  125. package/dist/{trace.utils-DpBOLDtq.js → request-trace-ByujsUZk.js} +117 -77
  126. package/dist/request-trace-ByujsUZk.js.map +1 -0
  127. package/dist/rolldown-runtime-D3PmRqjj.mjs +4 -0
  128. package/dist/{safe-stringify-DJ66tW5I.mjs → safe-stringify-B5p5ktFe.mjs} +39 -15
  129. package/dist/safe-stringify-B5p5ktFe.mjs.map +1 -0
  130. package/dist/{safe-stringify-DWo3aZp_.js → safe-stringify-J3sh-7YM.js} +59 -36
  131. package/dist/safe-stringify-J3sh-7YM.js.map +1 -0
  132. package/dist/{search-C4V0OMEn.js → search-CRjhHxe9.js} +319 -92
  133. package/dist/search-CRjhHxe9.js.map +1 -0
  134. package/dist/{search-CNh9uVwR.d.ts → search-DA3ft3X5.d.mts} +5 -22
  135. package/dist/search-DA3ft3X5.d.mts.map +1 -0
  136. package/dist/{search-BFbu_oVn.mjs → search-DAXKE-P9.mjs} +289 -62
  137. package/dist/search-DAXKE-P9.mjs.map +1 -0
  138. package/dist/{search-DXANsQ2n.d.mts → search-DEl3Pe47.d.ts} +5 -22
  139. package/dist/search-DEl3Pe47.d.ts.map +1 -0
  140. package/dist/search.d.mts +2 -4
  141. package/dist/search.d.ts +2 -4
  142. package/dist/search.js +3 -4
  143. package/dist/search.mjs +1 -4
  144. package/dist/secret-config-CmK2wVkr.js +272 -0
  145. package/dist/secret-config-CmK2wVkr.js.map +1 -0
  146. package/dist/secret-config-Dhb6pqTU.mjs +210 -0
  147. package/dist/secret-config-Dhb6pqTU.mjs.map +1 -0
  148. package/dist/{slack.transport-CXjQYOes.d.ts → slack.transport-BDyENuR0.d.mts} +56 -9
  149. package/dist/slack.transport-BDyENuR0.d.mts.map +1 -0
  150. package/dist/{slack.transport-Bzw7sucI.mjs → slack.transport-BTEwsREY.mjs} +263 -31
  151. package/dist/slack.transport-BTEwsREY.mjs.map +1 -0
  152. package/dist/{slack.transport-BZzoXDPn.d.mts → slack.transport-C6E0l4kw.d.ts} +56 -9
  153. package/dist/slack.transport-C6E0l4kw.d.ts.map +1 -0
  154. package/dist/{slack.transport-BfJRouB2.js → slack.transport-UbYvOdKx.js} +286 -42
  155. package/dist/slack.transport-UbYvOdKx.js.map +1 -0
  156. package/dist/testing.d.mts +13 -11
  157. package/dist/testing.d.mts.map +1 -1
  158. package/dist/testing.d.ts +13 -11
  159. package/dist/testing.d.ts.map +1 -1
  160. package/dist/testing.js +41 -7
  161. package/dist/testing.js.map +1 -1
  162. package/dist/testing.mjs +40 -6
  163. package/dist/testing.mjs.map +1 -1
  164. package/dist/{transport.types-CGoHpWQR.d.ts → transport.types-CzJq4IrF.d.mts} +14 -5
  165. package/dist/transport.types-CzJq4IrF.d.mts.map +1 -0
  166. package/dist/{transport.types-BMnurPcc.d.mts → transport.types-CzJq4IrF.d.ts} +14 -5
  167. package/dist/transport.types-CzJq4IrF.d.ts.map +1 -0
  168. package/dist/transports.d.mts +39 -41
  169. package/dist/transports.d.mts.map +1 -1
  170. package/dist/transports.d.ts +39 -41
  171. package/dist/transports.d.ts.map +1 -1
  172. package/dist/transports.js +19 -22
  173. package/dist/transports.mjs +7 -13
  174. package/dist/worker-entry.js +438 -107
  175. package/dist/worker.d.mts +1 -2
  176. package/dist/worker.d.ts +1 -2
  177. package/dist/worker.js +3 -4
  178. package/dist/worker.mjs +1 -4
  179. package/dist/{worker.transport-JvGPog3C.d.mts → worker.transport-B9mCQSM1.d.ts} +7 -6
  180. package/dist/worker.transport-B9mCQSM1.d.ts.map +1 -0
  181. package/dist/{worker.transport-CdzSZJmw.d.ts → worker.transport-Bl8lFRck.d.mts} +7 -6
  182. package/dist/worker.transport-Bl8lFRck.d.mts.map +1 -0
  183. package/dist/{worker.transport-lPxO2MVL.mjs → worker.transport-BmmOKb1-.mjs} +43 -10
  184. package/dist/worker.transport-BmmOKb1-.mjs.map +1 -0
  185. package/dist/{worker.transport-BdPxu3PN.js → worker.transport-DxxbqQCG.js} +48 -15
  186. package/dist/worker.transport-DxxbqQCG.js.map +1 -0
  187. package/package.json +51 -75
  188. package/dist/async-context-BzJrbfQs.mjs +0 -72
  189. package/dist/async-context-BzJrbfQs.mjs.map +0 -1
  190. package/dist/async-context-DyQQYq3I.js +0 -92
  191. package/dist/async-context-DyQQYq3I.js.map +0 -1
  192. package/dist/azure-monitor.transport-CHnjVRF-.mjs.map +0 -1
  193. package/dist/azure-monitor.transport-Cn_3Usvu.d.ts.map +0 -1
  194. package/dist/azure-monitor.transport-CrvfHd9C.js.map +0 -1
  195. package/dist/azure-monitor.transport-D7Da4RAb.d.mts.map +0 -1
  196. package/dist/batch-buffer-BY-mRWIK.js.map +0 -1
  197. package/dist/batch-buffer-PGvSgbmd.mjs.map +0 -1
  198. package/dist/builder-0gEzRopq.mjs.map +0 -1
  199. package/dist/builder-D44QktIo.js.map +0 -1
  200. package/dist/chunk-DLSkYcPk.mjs +0 -7
  201. package/dist/chunk-nOFOJqeH.js +0 -30
  202. package/dist/cloudwatch.transport-BO1ahxw-.js.map +0 -1
  203. package/dist/cloudwatch.transport-DZ6ies7g.mjs.map +0 -1
  204. package/dist/cloudwatch.transport-DsEq633o.d.ts.map +0 -1
  205. package/dist/cloudwatch.transport-UlyZFWMn.d.mts.map +0 -1
  206. package/dist/entry-fields-BJkuPnIg.mjs.map +0 -1
  207. package/dist/entry-fields-BvOLFlJ4.js.map +0 -1
  208. package/dist/gcp.transport-B7oc97sG.d.ts.map +0 -1
  209. package/dist/gcp.transport-CHV8MGgz.js.map +0 -1
  210. package/dist/gcp.transport-DBX5TPIy.mjs.map +0 -1
  211. package/dist/gcp.transport-GrJurKo8.d.mts.map +0 -1
  212. package/dist/index-3mw5gaCw.d.mts.map +0 -1
  213. package/dist/index-DhIoploR.d.ts.map +0 -1
  214. package/dist/internal-log-BUJYMZbE.js +0 -70
  215. package/dist/internal-log-BUJYMZbE.js.map +0 -1
  216. package/dist/internal-log-Cm8SOWSV.mjs +0 -52
  217. package/dist/internal-log-Cm8SOWSV.mjs.map +0 -1
  218. package/dist/logitron-logger-BFDSO8Io.d.mts.map +0 -1
  219. package/dist/logitron-logger-UVeN-mQm.d.ts.map +0 -1
  220. package/dist/safe-stringify-DJ66tW5I.mjs.map +0 -1
  221. package/dist/safe-stringify-DWo3aZp_.js.map +0 -1
  222. package/dist/search-BFbu_oVn.mjs.map +0 -1
  223. package/dist/search-C4V0OMEn.js.map +0 -1
  224. package/dist/search-CNh9uVwR.d.ts.map +0 -1
  225. package/dist/search-DXANsQ2n.d.mts.map +0 -1
  226. package/dist/slack.transport-BZzoXDPn.d.mts.map +0 -1
  227. package/dist/slack.transport-BfJRouB2.js.map +0 -1
  228. package/dist/slack.transport-Bzw7sucI.mjs.map +0 -1
  229. package/dist/slack.transport-CXjQYOes.d.ts.map +0 -1
  230. package/dist/trace.utils-CvXgaiQT.mjs.map +0 -1
  231. package/dist/trace.utils-DpBOLDtq.js.map +0 -1
  232. package/dist/transport.manager-BiuCAJd2.mjs.map +0 -1
  233. package/dist/transport.manager-CXbKKdVE.js.map +0 -1
  234. package/dist/transport.types-BMnurPcc.d.mts.map +0 -1
  235. package/dist/transport.types-CGoHpWQR.d.ts.map +0 -1
  236. package/dist/worker.transport-BdPxu3PN.js.map +0 -1
  237. package/dist/worker.transport-CdzSZJmw.d.ts.map +0 -1
  238. package/dist/worker.transport-JvGPog3C.d.mts.map +0 -1
  239. package/dist/worker.transport-lPxO2MVL.mjs.map +0 -1
@@ -1,6 +1,5 @@
1
- const require_coerce_utils = require('./coerce.utils-B-LilukN.js');
2
-
3
- //#region src/utils/csv.utils.ts
1
+ const require_coerce_utils = require("./coerce.utils-C1C5sIX0.js");
2
+ // src/utils/csv.utils.ts
4
3
  const CSV_FORMULA_PREFIX = /^[=+\-@\t\r]/;
5
4
  /**
6
5
  * Render one CSV field. String values that a spreadsheet would treat as a
@@ -17,9 +16,7 @@ function csvField(value, alwaysQuote = false) {
17
16
  if (alwaysQuote || /[",\r\n]/.test(str)) return `"${str.replace(/"/g, "\"\"")}"`;
18
17
  return str;
19
18
  }
20
-
21
- //#endregion
22
- //#region src/search/core/basic-log-indexer.ts
19
+ // src/search/core/basic-log-indexer.ts
23
20
  /**
24
21
  * Basic log indexer implementation
25
22
  */
@@ -220,9 +217,68 @@ var BasicLogIndexer = class {
220
217
  }));
221
218
  }
222
219
  };
223
-
224
- //#endregion
225
- //#region src/search/core/basic-search-engine.ts
220
+ // src/search/core/user-id.ts
221
+ const STOPWORDS = /* @__PURE__ */ new Set([
222
+ "is",
223
+ "was",
224
+ "are",
225
+ "the",
226
+ "a",
227
+ "an",
228
+ "of",
229
+ "for",
230
+ "do",
231
+ "did",
232
+ "does",
233
+ "in",
234
+ "on",
235
+ "at",
236
+ "with",
237
+ "who",
238
+ "what",
239
+ "from",
240
+ "that",
241
+ "and",
242
+ "or",
243
+ "to",
244
+ "has",
245
+ "have",
246
+ "had",
247
+ "by",
248
+ "as",
249
+ "my",
250
+ "me",
251
+ "all",
252
+ "any",
253
+ "it",
254
+ "be",
255
+ "not",
256
+ "no",
257
+ "when",
258
+ "where",
259
+ "which",
260
+ "logs"
261
+ ]);
262
+ const EXPLICIT = /\buser[\s_]?id(?:\s+is|\s*[:=])?\s*["']?([\w-]+)/i;
263
+ const WITH_DIGIT = /\buser\s+["']?([\w-]*\d[\w-]*)/i;
264
+ /**
265
+ * Extract a user id from natural-language text. An id must either contain a digit
266
+ * or follow explicit "user id" / "userId:" syntax and not be a stopword, so phrases
267
+ * like "what did user do yesterday" never produce a filter.
268
+ */
269
+ function extractUserId(query) {
270
+ const explicit = EXPLICIT.exec(query);
271
+ if ((explicit === null || explicit === void 0 ? void 0 : explicit[1]) && !STOPWORDS.has(explicit[1].toLowerCase())) return {
272
+ id: explicit[1],
273
+ span: explicit[0]
274
+ };
275
+ const digit = WITH_DIGIT.exec(query);
276
+ if (digit === null || digit === void 0 ? void 0 : digit[1]) return {
277
+ id: digit[1],
278
+ span: digit[0]
279
+ };
280
+ }
281
+ // src/search/core/basic-search-engine.ts
226
282
  /**
227
283
  * Basic search engine implementation
228
284
  */
@@ -271,8 +327,9 @@ var BasicSearchEngine = class {
271
327
  * Perform a full-text search across logs
272
328
  */
273
329
  async search(query, filters, options) {
274
- const filteredLogs = this.applyFilters(this.logs, filters);
275
- const results = this.performTextSearch(filteredLogs, query, options);
330
+ const textCache = /* @__PURE__ */ new Map();
331
+ const filteredLogs = this.applyFilters(this.logs, filters, textCache);
332
+ const results = this.performTextSearch(filteredLogs, query, options, textCache);
276
333
  this.addToSearchHistory(query);
277
334
  const sorted = this.applySorting(results, options === null || options === void 0 ? void 0 : options.sortBy, options === null || options === void 0 ? void 0 : options.sortOrder);
278
335
  const paginated = this.applyPagination(sorted, options === null || options === void 0 ? void 0 : options.offset, options === null || options === void 0 ? void 0 : options.limit);
@@ -284,7 +341,7 @@ var BasicSearchEngine = class {
284
341
  */
285
342
  async naturalLanguageSearch(query) {
286
343
  const parsed = await this.parseNaturalLanguageQuery(query);
287
- return this.search(parsed.originalQuery, parsed.filters, {
344
+ return this.search(parsed.textQuery ?? parsed.originalQuery, parsed.filters, {
288
345
  semanticSearch: true,
289
346
  includeContext: true
290
347
  });
@@ -401,17 +458,34 @@ var BasicSearchEngine = class {
401
458
  async parseNaturalLanguageQuery(query) {
402
459
  const filters = {};
403
460
  const lowerQuery = query.toLowerCase();
461
+ let remainder = query;
462
+ const consume = (re) => {
463
+ remainder = remainder.replace(re, " ");
464
+ };
404
465
  const levels = [];
405
- if (lowerQuery.includes("error")) levels.push("error");
406
- if (lowerQuery.includes("warn")) levels.push("warn");
407
- if (lowerQuery.includes("info")) levels.push("info");
408
- if (levels.length > 0) filters.levels = levels;
466
+ if (/\berrors?\b/i.test(query)) levels.push("error");
467
+ if (/\bwarn(?:ing)?s?\b/i.test(query)) levels.push("warn");
468
+ if (/\binfo\b/i.test(query)) levels.push("info");
469
+ if (levels.length > 0) {
470
+ filters.levels = levels;
471
+ consume(/\b(?:errors?|warn(?:ing)?s?|info)\b/gi);
472
+ }
409
473
  const timeRange = this.extractTimeRange(query);
410
- if (timeRange) filters.timeRange = timeRange;
411
- const serviceMatch = query.match(/from\s+(?:the\s+)?(\w+)\s+service/i);
412
- if (serviceMatch === null || serviceMatch === void 0 ? void 0 : serviceMatch[1]) filters.services = [serviceMatch[1]];
413
- const userMatch = query.match(/user\s+(?:id\s+)?(\w+)/i);
414
- if (userMatch === null || userMatch === void 0 ? void 0 : userMatch[1]) filters.userIds = [userMatch[1]];
474
+ if (timeRange) {
475
+ filters.timeRange = timeRange;
476
+ consume(/\b(?:last|past)\s+(?:\d+\s+)?(?:second|minute|hour|day)s?\b/gi);
477
+ consume(/\btoday\b/gi);
478
+ }
479
+ const serviceMatch = query.match(/from\s+(?:the\s+)?([\w-]+)\s+service/i);
480
+ if (serviceMatch === null || serviceMatch === void 0 ? void 0 : serviceMatch[1]) {
481
+ filters.services = [serviceMatch[1]];
482
+ consume(/from\s+(?:the\s+)?[\w-]+\s+service/gi);
483
+ }
484
+ const userMatch = extractUserId(query);
485
+ if (userMatch) {
486
+ filters.userIds = [userMatch.id];
487
+ remainder = remainder.replace(userMatch.span, " ");
488
+ }
415
489
  let intent = "general_search";
416
490
  if (lowerQuery.includes("error")) intent = "find_errors";
417
491
  if (lowerQuery.includes("trace") || lowerQuery.includes("request")) intent = "trace_request";
@@ -419,6 +493,7 @@ var BasicSearchEngine = class {
419
493
  if (lowerQuery.includes("slow") || lowerQuery.includes("performance")) intent = "performance_analysis";
420
494
  return {
421
495
  originalQuery: query,
496
+ textQuery: remainder.split(/\s+/).map(trimPunctuation).filter((w) => w && !NL_FILLER_WORDS.has(w.toLowerCase())).join(" "),
422
497
  intent,
423
498
  entities: [],
424
499
  filters,
@@ -454,18 +529,29 @@ var BasicSearchEngine = class {
454
529
  async deletePreset(presetId) {
455
530
  this.presets.delete(presetId);
456
531
  }
457
- applyFilters(logs, filters) {
532
+ applyFilters(logs, filters, textCache) {
458
533
  if (!filters) return logs;
534
+ const range = filters.timeRange ? resolveTimeRange(filters.timeRange) : void 0;
535
+ const excludes = (filters.excludePatterns ?? []).filter(Boolean).map((p) => p.toLowerCase());
459
536
  return logs.filter((log) => {
460
537
  if (filters.levels && !filters.levels.includes(log.level)) return false;
461
538
  if (filters.services && !filters.services.includes(log.appName)) return false;
462
539
  if (filters.traceIds && log.traceId && !filters.traceIds.includes(log.traceId)) return false;
463
- if (filters.timeRange) {
540
+ if (range) {
464
541
  const logTime = new Date(log.timestamp).getTime();
465
- if (logTime < (typeof filters.timeRange.start === "number" ? filters.timeRange.start : filters.timeRange.start.getTime())) return false;
466
- if (filters.timeRange.end) {
467
- if (logTime > (typeof filters.timeRange.end === "number" ? filters.timeRange.end : filters.timeRange.end.getTime())) return false;
468
- }
542
+ if (logTime < range.start) return false;
543
+ if (range.end !== void 0 && logTime > range.end) return false;
544
+ }
545
+ if (filters.userIds && !matchesAny(extractPayloadId(log, USER_ID_KEYS), filters.userIds)) return false;
546
+ if (filters.sessionIds && !matchesAny(extractPayloadId(log, SESSION_ID_KEYS), filters.sessionIds)) return false;
547
+ if (filters.minSeverity !== void 0 && levelSeverity(log.level) < filters.minSeverity) return false;
548
+ if (excludes.length > 0) {
549
+ const text = this.lowerSearchableText(log, textCache);
550
+ if (excludes.some((p) => text.includes(p))) return false;
551
+ }
552
+ if (filters.customFields) for (const [key, expected] of Object.entries(filters.customFields)) {
553
+ const actual = getPath(log, key);
554
+ if (!fieldMatches(actual === void 0 ? getPath(log.payload, key) : actual, expected)) return false;
469
555
  }
470
556
  if (filters.hasError !== void 0) {
471
557
  const hasError = log.level === "error" || !!log.error;
@@ -475,7 +561,7 @@ var BasicSearchEngine = class {
475
561
  return true;
476
562
  });
477
563
  }
478
- performTextSearch(logs, query, options) {
564
+ performTextSearch(logs, query, options, textCache) {
479
565
  if (!query) return logs.map((log) => ({
480
566
  log,
481
567
  score: 1
@@ -483,7 +569,7 @@ var BasicSearchEngine = class {
483
569
  const queryTerms = query.toLowerCase().split(/\s+/);
484
570
  const results = [];
485
571
  for (const log of logs) {
486
- const searchableText = this.getSearchableText(log).toLowerCase();
572
+ const searchableText = this.lowerSearchableText(log, textCache);
487
573
  let score = 0;
488
574
  const highlights = [];
489
575
  const matchedTerms = [];
@@ -507,6 +593,14 @@ var BasicSearchEngine = class {
507
593
  }
508
594
  return results;
509
595
  }
596
+ lowerSearchableText(log, cache) {
597
+ let text = cache.get(log);
598
+ if (text === void 0) {
599
+ text = this.getSearchableText(log).toLowerCase();
600
+ cache.set(log, text);
601
+ }
602
+ return text;
603
+ }
510
604
  getSearchableText(log) {
511
605
  const payloadText = log.payload ? require_coerce_utils.safeToString(log.payload) : "";
512
606
  return [
@@ -541,11 +635,7 @@ var BasicSearchEngine = class {
541
635
  case "level":
542
636
  comparison = a.log.level.localeCompare(b.log.level);
543
637
  break;
544
- case "score":
545
- case "relevance":
546
- default:
547
- comparison = a.score - b.score;
548
- break;
638
+ default: comparison = a.score - b.score;
549
639
  }
550
640
  return sortOrder === "asc" ? comparison : -comparison;
551
641
  });
@@ -582,7 +672,7 @@ var BasicSearchEngine = class {
582
672
  const words1 = new Set(text1.toLowerCase().split(/\s+/));
583
673
  const words2 = new Set(text2.toLowerCase().split(/\s+/));
584
674
  const intersection = new Set([...words1].filter((x) => words2.has(x)));
585
- const union = new Set([...words1, ...words2]);
675
+ const union = /* @__PURE__ */ new Set([...words1, ...words2]);
586
676
  return union.size > 0 ? intersection.size / union.size : 0;
587
677
  }
588
678
  findMatchedPatterns(log1, log2) {
@@ -602,9 +692,20 @@ var BasicSearchEngine = class {
602
692
  }
603
693
  extractTimeRange(query) {
604
694
  const lowerQuery = query.toLowerCase();
605
- if (lowerQuery.includes("last hour") || lowerQuery.includes("past hour")) return { start: /* @__PURE__ */ new Date(Date.now() - 3600 * 1e3) };
606
- const hoursMatch = query.match(/last\s+(\d+)\s+hours?/i);
607
- if (hoursMatch) return { start: /* @__PURE__ */ new Date(Date.now() - Number.parseInt(hoursMatch[1] ?? "0") * 60 * 60 * 1e3) };
695
+ const relativeMatch = lowerQuery.match(/\b(?:last|past)\s+(?:(\d+)\s+)?(seconds?|minutes?|hours?|days?)\b/);
696
+ if (relativeMatch === null || relativeMatch === void 0 ? void 0 : relativeMatch[2]) {
697
+ const relative = {
698
+ value: relativeMatch[1] ? Number.parseInt(relativeMatch[1], 10) : 1,
699
+ unit: `${relativeMatch[2].replace(/s$/, "")}s`
700
+ };
701
+ return {
702
+ start: resolveTimeRange({
703
+ start: 0,
704
+ relative
705
+ }).start,
706
+ relative
707
+ };
708
+ }
608
709
  if (lowerQuery.includes("today")) {
609
710
  const today = /* @__PURE__ */ new Date();
610
711
  today.setHours(0, 0, 0, 0);
@@ -629,9 +730,136 @@ var BasicSearchEngine = class {
629
730
  return `preset_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`;
630
731
  }
631
732
  };
632
-
633
- //#endregion
634
- //#region src/search/engines/correlation-engine.ts
733
+ const UNIT_MS = {
734
+ seconds: 1e3,
735
+ minutes: 6e4,
736
+ hours: 36e5,
737
+ days: 864e5
738
+ };
739
+ const LEVEL_SEVERITY = {
740
+ trace: 0,
741
+ verbose: 1,
742
+ debug: 1,
743
+ info: 2,
744
+ log: 2,
745
+ warn: 3,
746
+ warning: 3,
747
+ error: 4,
748
+ fatal: 5,
749
+ critical: 5
750
+ };
751
+ const USER_ID_KEYS = [
752
+ "userId",
753
+ "user_id",
754
+ "userid"
755
+ ];
756
+ const SESSION_ID_KEYS = [
757
+ "sessionId",
758
+ "session_id",
759
+ "sessionid"
760
+ ];
761
+ const NL_FILLER_WORDS = /* @__PURE__ */ new Set([
762
+ "show",
763
+ "me",
764
+ "find",
765
+ "get",
766
+ "list",
767
+ "search",
768
+ "display",
769
+ "all",
770
+ "any",
771
+ "the",
772
+ "a",
773
+ "an",
774
+ "in",
775
+ "of",
776
+ "for",
777
+ "from",
778
+ "with",
779
+ "during",
780
+ "within",
781
+ "over",
782
+ "logs",
783
+ "log",
784
+ "entries",
785
+ "entry",
786
+ "messages",
787
+ "message",
788
+ "events",
789
+ "event",
790
+ "recent",
791
+ "and",
792
+ "only",
793
+ "please",
794
+ "last",
795
+ "past"
796
+ ]);
797
+ /** Strip leading and trailing non-word characters. */
798
+ function trimPunctuation(word) {
799
+ const isWord = (c) => c !== void 0 && /\w/.test(c);
800
+ let start = 0;
801
+ let end = word.length;
802
+ while (start < end && !isWord(word[start])) start++;
803
+ while (end > start && !isWord(word[end - 1])) end--;
804
+ return word.slice(start, end);
805
+ }
806
+ /** Severity rank of a level name; higher is more severe. Unknown levels rank as info. */
807
+ function levelSeverity(level) {
808
+ if (typeof level !== "string") return LEVEL_SEVERITY["info"];
809
+ return LEVEL_SEVERITY[level.toLowerCase()] ?? LEVEL_SEVERITY["info"];
810
+ }
811
+ function resolveTimeRange(range) {
812
+ const toMs = (v) => typeof v === "number" ? v : v.getTime();
813
+ if (range.relative) {
814
+ const { value, unit } = range.relative;
815
+ return {
816
+ start: Date.now() - value * UNIT_MS[unit],
817
+ end: range.end === void 0 ? void 0 : toMs(range.end)
818
+ };
819
+ }
820
+ return {
821
+ start: toMs(range.start),
822
+ end: range.end === void 0 ? void 0 : toMs(range.end)
823
+ };
824
+ }
825
+ function getPath(obj, path) {
826
+ let cur = obj;
827
+ for (const part of path.split(".")) {
828
+ if (cur === null || typeof cur !== "object") return void 0;
829
+ cur = cur[part];
830
+ }
831
+ return cur;
832
+ }
833
+ function deepEqual(a, b) {
834
+ if (a === b) return true;
835
+ if (typeof a !== "object" || typeof b !== "object" || a === null || b === null) return false;
836
+ if (Array.isArray(a) !== Array.isArray(b)) return false;
837
+ const ka = Object.keys(a);
838
+ const kb = Object.keys(b);
839
+ if (ka.length !== kb.length) return false;
840
+ return ka.every((k) => deepEqual(a[k], b[k]));
841
+ }
842
+ /**
843
+ * Type-aware equality: primitives by ===, except a numeric string matches a numeric
844
+ * log value; objects and arrays by deep equality. A missing field never matches.
845
+ */
846
+ function fieldMatches(actual, expected) {
847
+ if (actual === void 0) return false;
848
+ if (typeof actual === "number" && typeof expected === "string" && expected.trim() !== "") return Number(expected) === actual;
849
+ return deepEqual(actual, expected);
850
+ }
851
+ function extractPayloadId(log, keys) {
852
+ const payload = log.payload;
853
+ if (!payload) return void 0;
854
+ for (const key of keys) {
855
+ const v = payload[key];
856
+ if (v !== void 0 && v !== null) return String(v);
857
+ }
858
+ }
859
+ function matchesAny(value, allowed) {
860
+ return value !== void 0 && allowed.includes(value);
861
+ }
862
+ // src/search/engines/correlation-engine.ts
635
863
  /**
636
864
  * Correlation engine for log analysis
637
865
  */
@@ -640,7 +868,7 @@ var CorrelationEngine = class {
640
868
  this.options = options;
641
869
  this.options = {
642
870
  maxCorrelationDistance: 100,
643
- temporalWindowMs: 300 * 1e3,
871
+ temporalWindowMs: 3e5,
644
872
  minSimilarityScore: .3,
645
873
  ...options
646
874
  };
@@ -897,9 +1125,10 @@ var CorrelationEngine = class {
897
1125
  };
898
1126
  }
899
1127
  };
900
-
901
- //#endregion
902
- //#region src/search/engines/nlp-search-engine.ts
1128
+ // src/search/engines/nlp-search-engine.ts
1129
+ /**
1130
+ * Advanced search engine with Natural Language Processing capabilities
1131
+ */
903
1132
  /**
904
1133
  * NLP-enhanced search engine
905
1134
  */
@@ -940,7 +1169,7 @@ var NLPSearchEngine = class extends BasicSearchEngine {
940
1169
  return this.search(cleanQuery, parsed.filters, options);
941
1170
  }
942
1171
  initializePatterns() {
943
- this.intentPatterns = new Map([
1172
+ this.intentPatterns = /* @__PURE__ */ new Map([
944
1173
  ["find_errors", [
945
1174
  /show.*errors?/i,
946
1175
  /find.*errors?/i,
@@ -984,10 +1213,9 @@ var NLPSearchEngine = class extends BasicSearchEngine {
984
1213
  /after.*occurred/i
985
1214
  ]]
986
1215
  ]);
987
- this.entityPatterns = new Map([
1216
+ this.entityPatterns = /* @__PURE__ */ new Map([
988
1217
  ["level", /(error|warn|warning|info|debug|trace|verbose)/i],
989
1218
  ["service", /(?:from|in)\s+(?:the\s+)?(\w+)\s+(?:service|app|application)/i],
990
- ["user_id", /user\s+(?:id\s+)?['"]?(\w+)['"]?/i],
991
1219
  ["trace_id", /trace\s+(?:id\s+)?['"]?([\w-]+)['"]?/i],
992
1220
  ["time", /(?:last|past|previous)\s+(\d+)\s+(second|minute|hour|day|week)s?/i],
993
1221
  ["error_type", /(\w+Error|\w+Exception)/i]
@@ -1008,6 +1236,12 @@ var NLPSearchEngine = class extends BasicSearchEngine {
1008
1236
  }
1009
1237
  extractEntities(query) {
1010
1238
  const entities = [];
1239
+ const userId = extractUserId(query);
1240
+ if (userId) entities.push({
1241
+ type: "user_id",
1242
+ value: userId.id,
1243
+ confidence: .8
1244
+ });
1011
1245
  for (const [type, pattern] of this.entityPatterns.entries()) {
1012
1246
  const matches = query.matchAll(new RegExp(pattern, "gi"));
1013
1247
  for (const match of matches) {
@@ -1038,8 +1272,6 @@ var NLPSearchEngine = class extends BasicSearchEngine {
1038
1272
  case "trace_id":
1039
1273
  if (!filters.traceIds) filters.traceIds = [];
1040
1274
  filters.traceIds.push(entity.value);
1041
- break;
1042
- case "error_type": break;
1043
1275
  }
1044
1276
  }
1045
1277
  extractAdvancedTimeRange(query) {
@@ -1067,9 +1299,9 @@ var NLPSearchEngine = class extends BasicSearchEngine {
1067
1299
  const value = Number.parseInt(match[1] ?? "0");
1068
1300
  const multiplier = {
1069
1301
  seconds: 1e3,
1070
- minutes: 60 * 1e3,
1071
- hours: 3600 * 1e3,
1072
- days: 1440 * 60 * 1e3
1302
+ minutes: 6e4,
1303
+ hours: 36e5,
1304
+ days: 864e5
1073
1305
  }[unit];
1074
1306
  return {
1075
1307
  start: new Date(Date.now() - value * multiplier),
@@ -1182,9 +1414,7 @@ var NLPSearchEngine = class extends BasicSearchEngine {
1182
1414
  return cleanQuery || query;
1183
1415
  }
1184
1416
  };
1185
-
1186
- //#endregion
1187
- //#region src/search/engines/pattern-recognition-engine.ts
1417
+ // src/search/engines/pattern-recognition-engine.ts
1188
1418
  const STACK_FRAME_TAIL = /:\d+:\d+\)?$/;
1189
1419
  /** True when any line is a real stack frame, e.g. ` at fn (/app/file.js:10:5)`. */
1190
1420
  function hasStackFrame(message) {
@@ -1379,9 +1609,7 @@ var PatternRecognitionEngine = class {
1379
1609
  return normalizedMessage === pattern.pattern;
1380
1610
  }
1381
1611
  };
1382
-
1383
- //#endregion
1384
- //#region src/search/search-manager.ts
1612
+ // src/search/search-manager.ts
1385
1613
  /**
1386
1614
  * Main search manager class
1387
1615
  */
@@ -1613,42 +1841,41 @@ var SearchManager = class {
1613
1841
  }, obj);
1614
1842
  }
1615
1843
  };
1616
-
1617
- //#endregion
1618
- Object.defineProperty(exports, 'BasicLogIndexer', {
1619
- enumerable: true,
1620
- get: function () {
1621
- return BasicLogIndexer;
1622
- }
1844
+ Object.defineProperty(exports, "BasicLogIndexer", {
1845
+ enumerable: true,
1846
+ get: function() {
1847
+ return BasicLogIndexer;
1848
+ }
1623
1849
  });
1624
- Object.defineProperty(exports, 'BasicSearchEngine', {
1625
- enumerable: true,
1626
- get: function () {
1627
- return BasicSearchEngine;
1628
- }
1850
+ Object.defineProperty(exports, "BasicSearchEngine", {
1851
+ enumerable: true,
1852
+ get: function() {
1853
+ return BasicSearchEngine;
1854
+ }
1629
1855
  });
1630
- Object.defineProperty(exports, 'CorrelationEngine', {
1631
- enumerable: true,
1632
- get: function () {
1633
- return CorrelationEngine;
1634
- }
1856
+ Object.defineProperty(exports, "CorrelationEngine", {
1857
+ enumerable: true,
1858
+ get: function() {
1859
+ return CorrelationEngine;
1860
+ }
1635
1861
  });
1636
- Object.defineProperty(exports, 'NLPSearchEngine', {
1637
- enumerable: true,
1638
- get: function () {
1639
- return NLPSearchEngine;
1640
- }
1862
+ Object.defineProperty(exports, "NLPSearchEngine", {
1863
+ enumerable: true,
1864
+ get: function() {
1865
+ return NLPSearchEngine;
1866
+ }
1641
1867
  });
1642
- Object.defineProperty(exports, 'PatternRecognitionEngine', {
1643
- enumerable: true,
1644
- get: function () {
1645
- return PatternRecognitionEngine;
1646
- }
1868
+ Object.defineProperty(exports, "PatternRecognitionEngine", {
1869
+ enumerable: true,
1870
+ get: function() {
1871
+ return PatternRecognitionEngine;
1872
+ }
1647
1873
  });
1648
- Object.defineProperty(exports, 'SearchManager', {
1649
- enumerable: true,
1650
- get: function () {
1651
- return SearchManager;
1652
- }
1874
+ Object.defineProperty(exports, "SearchManager", {
1875
+ enumerable: true,
1876
+ get: function() {
1877
+ return SearchManager;
1878
+ }
1653
1879
  });
1654
- //# sourceMappingURL=search-C4V0OMEn.js.map
1880
+
1881
+ //# sourceMappingURL=search-CRjhHxe9.js.map