shieldcortex 4.17.0 → 4.18.1

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 (405) hide show
  1. package/README.md +49 -0
  2. package/dashboard/.next/standalone/dashboard/.next/BUILD_ID +1 -1
  3. package/dashboard/.next/standalone/dashboard/.next/app-path-routes-manifest.json +1 -0
  4. package/dashboard/.next/standalone/dashboard/.next/build-manifest.json +4 -4
  5. package/dashboard/.next/standalone/dashboard/.next/prerender-manifest.json +27 -3
  6. package/dashboard/.next/standalone/dashboard/.next/routes-manifest.json +6 -0
  7. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/admin/page/build-manifest.json +2 -2
  8. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/admin/page/next-font-manifest.json +2 -2
  9. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/admin/page.js.nft.json +1 -1
  10. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/admin/page_client-reference-manifest.js +1 -1
  11. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/cloud/page/build-manifest.json +2 -2
  12. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/cloud/page/next-font-manifest.json +2 -2
  13. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/cloud/page.js.nft.json +1 -1
  14. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/cloud/page_client-reference-manifest.js +1 -1
  15. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/capture/page/build-manifest.json +2 -2
  16. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/capture/page/next-font-manifest.json +2 -2
  17. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/capture/page.js.nft.json +1 -1
  18. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/capture/page_client-reference-manifest.js +1 -1
  19. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/graph/page/build-manifest.json +2 -2
  20. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/graph/page/next-font-manifest.json +2 -2
  21. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/graph/page.js.nft.json +1 -1
  22. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/graph/page_client-reference-manifest.js +1 -1
  23. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page/build-manifest.json +2 -2
  24. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page/next-font-manifest.json +2 -2
  25. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page.js.nft.json +1 -1
  26. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page_client-reference-manifest.js +1 -1
  27. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/recall/page/build-manifest.json +2 -2
  28. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/recall/page/next-font-manifest.json +2 -2
  29. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/recall/page.js.nft.json +1 -1
  30. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/recall/page_client-reference-manifest.js +1 -1
  31. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/replay/page/app-paths-manifest.json +3 -0
  32. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/replay/page/build-manifest.json +18 -0
  33. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/replay/page/next-font-manifest.json +11 -0
  34. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/replay/page/react-loadable-manifest.json +1 -0
  35. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/replay/page/server-reference-manifest.json +4 -0
  36. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/replay/page.js +18 -0
  37. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/replay/page.js.map +5 -0
  38. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/replay/page.js.nft.json +1 -0
  39. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/replay/page_client-reference-manifest.js +2 -0
  40. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/review/page/build-manifest.json +2 -2
  41. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/review/page/next-font-manifest.json +2 -2
  42. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/review/page.js.nft.json +1 -1
  43. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/review/page_client-reference-manifest.js +1 -1
  44. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/timeline/page/build-manifest.json +2 -2
  45. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/timeline/page/next-font-manifest.json +2 -2
  46. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/timeline/page.js.nft.json +1 -1
  47. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/timeline/page_client-reference-manifest.js +1 -1
  48. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/overview/page/build-manifest.json +2 -2
  49. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/overview/page/next-font-manifest.json +2 -2
  50. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/overview/page.js.nft.json +1 -1
  51. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/overview/page_client-reference-manifest.js +1 -1
  52. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/audit/page/build-manifest.json +2 -2
  53. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/audit/page/next-font-manifest.json +2 -2
  54. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/audit/page.js.nft.json +1 -1
  55. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/audit/page_client-reference-manifest.js +1 -1
  56. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/intercepts/page/build-manifest.json +2 -2
  57. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/intercepts/page/next-font-manifest.json +2 -2
  58. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/intercepts/page.js.nft.json +1 -1
  59. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/intercepts/page_client-reference-manifest.js +1 -1
  60. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/iron-dome/page/build-manifest.json +2 -2
  61. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/iron-dome/page/next-font-manifest.json +2 -2
  62. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/iron-dome/page.js.nft.json +1 -1
  63. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/iron-dome/page_client-reference-manifest.js +1 -1
  64. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/page/build-manifest.json +2 -2
  65. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/page/next-font-manifest.json +2 -2
  66. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/page.js.nft.json +1 -1
  67. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/page_client-reference-manifest.js +1 -1
  68. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/policies/page/build-manifest.json +2 -2
  69. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/policies/page/next-font-manifest.json +2 -2
  70. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/policies/page.js.nft.json +1 -1
  71. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/policies/page_client-reference-manifest.js +1 -1
  72. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/quarantine/page/build-manifest.json +2 -2
  73. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/quarantine/page/next-font-manifest.json +2 -2
  74. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/quarantine/page.js.nft.json +1 -1
  75. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/quarantine/page_client-reference-manifest.js +1 -1
  76. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/settings/page/build-manifest.json +2 -2
  77. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/settings/page/next-font-manifest.json +2 -2
  78. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
  79. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  80. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/page/build-manifest.json +2 -2
  81. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/page/next-font-manifest.json +2 -2
  82. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/page.js.nft.json +1 -1
  83. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/page_client-reference-manifest.js +1 -1
  84. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/xray/page/build-manifest.json +2 -2
  85. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/xray/page/next-font-manifest.json +2 -2
  86. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/xray/page.js.nft.json +1 -1
  87. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/xray/page_client-reference-manifest.js +1 -1
  88. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/xray/page/build-manifest.json +2 -2
  89. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/xray/page/next-font-manifest.json +2 -2
  90. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/xray/page.js.nft.json +1 -1
  91. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/xray/page_client-reference-manifest.js +1 -1
  92. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error/page/build-manifest.json +2 -2
  93. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error/page.js.nft.json +1 -1
  94. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  95. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.html +2 -2
  96. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.rsc +1 -1
  97. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  98. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  99. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  100. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  101. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  102. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found/page/build-manifest.json +2 -2
  103. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found/page/next-font-manifest.json +2 -2
  104. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found/page.js.nft.json +1 -1
  105. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  106. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.html +2 -2
  107. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.rsc +3 -3
  108. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  109. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  110. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  111. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  112. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  113. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_tree.segment.rsc +3 -3
  114. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.html +1 -1
  115. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.rsc +11 -11
  116. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin/__PAGE__.segment.rsc +1 -1
  117. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin.segment.rsc +1 -1
  118. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -7
  119. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_full.segment.rsc +11 -11
  120. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  121. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_index.segment.rsc +3 -3
  122. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_tree.segment.rsc +5 -5
  123. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.html +1 -1
  124. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.rsc +11 -11
  125. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud/__PAGE__.segment.rsc +1 -1
  126. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud.segment.rsc +1 -1
  127. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -7
  128. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_full.segment.rsc +11 -11
  129. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_head.segment.rsc +1 -1
  130. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_index.segment.rsc +3 -3
  131. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_tree.segment.rsc +5 -5
  132. package/dashboard/.next/standalone/dashboard/.next/server/app/index.html +1 -1
  133. package/dashboard/.next/standalone/dashboard/.next/server/app/index.rsc +5 -5
  134. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  135. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_full.segment.rsc +5 -5
  136. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_head.segment.rsc +1 -1
  137. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_index.segment.rsc +3 -3
  138. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_tree.segment.rsc +5 -5
  139. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.html +1 -1
  140. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.rsc +11 -11
  141. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture/__PAGE__.segment.rsc +1 -1
  142. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture.segment.rsc +1 -1
  143. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  144. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -7
  145. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_full.segment.rsc +11 -11
  146. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_head.segment.rsc +1 -1
  147. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_index.segment.rsc +3 -3
  148. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_tree.segment.rsc +5 -5
  149. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.html +1 -1
  150. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.rsc +11 -11
  151. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph/__PAGE__.segment.rsc +1 -1
  152. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph.segment.rsc +1 -1
  153. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  154. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -7
  155. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_full.segment.rsc +11 -11
  156. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_head.segment.rsc +1 -1
  157. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_index.segment.rsc +3 -3
  158. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_tree.segment.rsc +5 -5
  159. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.html +1 -1
  160. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.rsc +11 -11
  161. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall/__PAGE__.segment.rsc +1 -1
  162. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall.segment.rsc +1 -1
  163. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  164. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -7
  165. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_full.segment.rsc +11 -11
  166. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_head.segment.rsc +1 -1
  167. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_index.segment.rsc +3 -3
  168. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_tree.segment.rsc +5 -5
  169. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.html +9 -0
  170. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.meta +17 -0
  171. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.rsc +31 -0
  172. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory/replay/__PAGE__.segment.rsc +9 -0
  173. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory/replay.segment.rsc +4 -0
  174. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +4 -0
  175. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk.segment.rsc +10 -0
  176. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_full.segment.rsc +31 -0
  177. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_head.segment.rsc +5 -0
  178. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_index.segment.rsc +8 -0
  179. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_tree.segment.rsc +5 -0
  180. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.html +1 -1
  181. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.rsc +11 -11
  182. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review/__PAGE__.segment.rsc +1 -1
  183. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review.segment.rsc +1 -1
  184. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  185. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -7
  186. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_full.segment.rsc +11 -11
  187. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_head.segment.rsc +1 -1
  188. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_index.segment.rsc +3 -3
  189. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_tree.segment.rsc +5 -5
  190. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.html +1 -1
  191. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.rsc +11 -11
  192. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline/__PAGE__.segment.rsc +1 -1
  193. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline.segment.rsc +1 -1
  194. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  195. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -7
  196. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_full.segment.rsc +11 -11
  197. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_head.segment.rsc +1 -1
  198. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_index.segment.rsc +3 -3
  199. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_tree.segment.rsc +5 -5
  200. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.html +2 -2
  201. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.rsc +13 -13
  202. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory/__PAGE__.segment.rsc +2 -2
  203. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  204. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -7
  205. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_full.segment.rsc +13 -13
  206. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_head.segment.rsc +1 -1
  207. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_index.segment.rsc +3 -3
  208. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_tree.segment.rsc +5 -5
  209. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.html +2 -2
  210. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.rsc +12 -12
  211. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview/__PAGE__.segment.rsc +2 -2
  212. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview.segment.rsc +1 -1
  213. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -7
  214. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_full.segment.rsc +12 -12
  215. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_head.segment.rsc +1 -1
  216. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_index.segment.rsc +3 -3
  217. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_tree.segment.rsc +5 -5
  218. package/dashboard/.next/standalone/dashboard/.next/server/app/page/build-manifest.json +2 -2
  219. package/dashboard/.next/standalone/dashboard/.next/server/app/page/next-font-manifest.json +2 -2
  220. package/dashboard/.next/standalone/dashboard/.next/server/app/page.js.nft.json +1 -1
  221. package/dashboard/.next/standalone/dashboard/.next/server/app/page_client-reference-manifest.js +1 -1
  222. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.html +1 -1
  223. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.rsc +11 -11
  224. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit/__PAGE__.segment.rsc +1 -1
  225. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit.segment.rsc +1 -1
  226. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  227. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -7
  228. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_full.segment.rsc +11 -11
  229. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_head.segment.rsc +1 -1
  230. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_index.segment.rsc +3 -3
  231. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_tree.segment.rsc +5 -5
  232. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.html +1 -1
  233. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.rsc +11 -11
  234. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts/__PAGE__.segment.rsc +1 -1
  235. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts.segment.rsc +1 -1
  236. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  237. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -7
  238. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_full.segment.rsc +11 -11
  239. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_head.segment.rsc +1 -1
  240. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_index.segment.rsc +3 -3
  241. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_tree.segment.rsc +5 -5
  242. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.html +1 -1
  243. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.rsc +11 -11
  244. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome/__PAGE__.segment.rsc +1 -1
  245. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome.segment.rsc +1 -1
  246. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  247. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -7
  248. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_full.segment.rsc +11 -11
  249. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_head.segment.rsc +1 -1
  250. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_index.segment.rsc +3 -3
  251. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_tree.segment.rsc +5 -5
  252. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.html +1 -1
  253. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.rsc +11 -11
  254. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies/__PAGE__.segment.rsc +1 -1
  255. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies.segment.rsc +1 -1
  256. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  257. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -7
  258. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_full.segment.rsc +11 -11
  259. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_head.segment.rsc +1 -1
  260. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_index.segment.rsc +3 -3
  261. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_tree.segment.rsc +5 -5
  262. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.html +1 -1
  263. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.rsc +11 -11
  264. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine/__PAGE__.segment.rsc +1 -1
  265. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine.segment.rsc +1 -1
  266. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  267. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -7
  268. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_full.segment.rsc +11 -11
  269. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_head.segment.rsc +1 -1
  270. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_index.segment.rsc +3 -3
  271. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_tree.segment.rsc +5 -5
  272. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.html +2 -2
  273. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.rsc +13 -13
  274. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection/__PAGE__.segment.rsc +2 -2
  275. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  276. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -7
  277. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_full.segment.rsc +13 -13
  278. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_head.segment.rsc +1 -1
  279. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_index.segment.rsc +3 -3
  280. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_tree.segment.rsc +5 -5
  281. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.html +2 -2
  282. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.rsc +13 -13
  283. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings/__PAGE__.segment.rsc +2 -2
  284. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings.segment.rsc +1 -1
  285. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -7
  286. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_full.segment.rsc +13 -13
  287. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  288. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_index.segment.rsc +3 -3
  289. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_tree.segment.rsc +5 -5
  290. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.html +1 -1
  291. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.rsc +11 -11
  292. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray/__PAGE__.segment.rsc +1 -1
  293. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray.segment.rsc +1 -1
  294. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +1 -1
  295. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -7
  296. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_full.segment.rsc +11 -11
  297. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_head.segment.rsc +1 -1
  298. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_index.segment.rsc +3 -3
  299. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_tree.segment.rsc +5 -5
  300. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.html +1 -1
  301. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.rsc +11 -11
  302. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain/__PAGE__.segment.rsc +1 -1
  303. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +1 -1
  304. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -7
  305. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_full.segment.rsc +11 -11
  306. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_head.segment.rsc +1 -1
  307. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_index.segment.rsc +3 -3
  308. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_tree.segment.rsc +5 -5
  309. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.html +2 -2
  310. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.rsc +12 -12
  311. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray/__PAGE__.segment.rsc +2 -2
  312. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray.segment.rsc +1 -1
  313. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -7
  314. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_full.segment.rsc +12 -12
  315. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_head.segment.rsc +1 -1
  316. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_index.segment.rsc +3 -3
  317. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_tree.segment.rsc +5 -5
  318. package/dashboard/.next/standalone/dashboard/.next/server/app-paths-manifest.json +1 -0
  319. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/52d24__next-internal_server_app_(dashboard)_memory_replay_page_actions_b95fee26.js +3 -0
  320. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/{9f1d4_@tanstack_68dcbde9._.js → 9f1d4_@tanstack_785e068c._.js} +2 -2
  321. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/{dashboard_25b568c3._.js → 9f1d4_next_c9fe89e1._.js} +2 -2
  322. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/{[root-of-the-server]__2de25d56._.js → [root-of-the-server]__60b060b2._.js} +2 -2
  323. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__7f43774d._.js +3 -0
  324. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__801e783f._.js +3 -0
  325. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__8930a320._.js +3 -0
  326. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_11e120e8._.js +3 -0
  327. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_2373e047._.js +3 -0
  328. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_283c47c0._.js +3 -0
  329. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_2e20858e._.js +4 -0
  330. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_45d60d74._.js +3 -0
  331. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_5ca514a1._.js +3 -0
  332. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_5ccb6514._.js +3 -0
  333. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_609078b2._.js +3 -0
  334. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/{dashboard_91003e6d._.js → dashboard_92148040._.js} +2 -2
  335. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_c33b336f._.js +3 -0
  336. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_fac483f8._.js +3 -0
  337. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_app_(dashboard)_memory_replay_page_tsx_d2b20535._.js +3 -0
  338. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_components_protection_ProtectionOverview_tsx_54554a97._.js +1 -1
  339. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_d191b6dc._.js +1 -1
  340. package/dashboard/.next/standalone/dashboard/.next/server/middleware-build-manifest.js +2 -2
  341. package/dashboard/.next/standalone/dashboard/.next/server/next-font-manifest.js +1 -1
  342. package/dashboard/.next/standalone/dashboard/.next/server/next-font-manifest.json +46 -42
  343. package/dashboard/.next/standalone/dashboard/.next/server/pages/404.html +2 -2
  344. package/dashboard/.next/standalone/dashboard/.next/server/pages/500.html +2 -2
  345. package/dashboard/.next/standalone/dashboard/.next/server/server-reference-manifest.js +1 -1
  346. package/dashboard/.next/standalone/dashboard/.next/server/server-reference-manifest.json +1 -1
  347. package/dashboard/.next/standalone/dashboard/.next/static/chunks/0fa2c109e0d6d832.js +1 -0
  348. package/dashboard/.next/standalone/dashboard/.next/static/chunks/2d55e8cb58d80df0.js +1 -0
  349. package/dashboard/.next/standalone/dashboard/.next/static/chunks/349dace3a1c9af01.js +1 -0
  350. package/dashboard/.next/standalone/dashboard/.next/static/chunks/3505433bf7977a34.js +1 -0
  351. package/dashboard/.next/standalone/dashboard/.next/static/chunks/4d0b86f6afedd8b5.js +3 -0
  352. package/dashboard/.next/standalone/dashboard/.next/static/chunks/a7d5d0791c8c6223.css +2 -0
  353. package/dashboard/.next/standalone/dashboard/.next/static/chunks/b2a6e883eaa58507.js +1 -0
  354. package/dashboard/.next/standalone/dashboard/.next/static/chunks/bcfaf98940462e7d.js +1 -0
  355. package/dashboard/.next/standalone/dashboard/.next/static/chunks/d52895fa7c120f49.css +1 -0
  356. package/dashboard/.next/standalone/dashboard/.next/static/chunks/f70f563804550a9c.js +1 -0
  357. package/dashboard/.next/standalone/dashboard/.next/static/chunks/{turbopack-79214717b23f7452.js → turbopack-768a6a8b9db952e0.js} +2 -2
  358. package/dashboard/.next/standalone/dashboard/.next/static/media/4fa387ec64143e14-s.c36e1862.woff2 +0 -0
  359. package/dashboard/.next/standalone/dashboard/.next/static/media/53b9e256198e5412-s.853d50a3.woff2 +0 -0
  360. package/dashboard/.next/standalone/dashboard/.next/static/media/5ce348bf30bf5439-s.ebceb24d.woff2 +0 -0
  361. package/dashboard/.next/standalone/dashboard/.next/static/media/6306c77e7c8268e4-s.ff4a2084.woff2 +0 -0
  362. package/dashboard/.next/standalone/dashboard/.next/static/media/7178b3e590c64307-s.55554cd0.woff2 +0 -0
  363. package/dashboard/.next/standalone/dashboard/.next/static/media/797e433ab948586e-s.p.479bea2b.woff2 +0 -0
  364. package/dashboard/.next/standalone/dashboard/.next/static/media/7d817b4c03b0c5f1-s.f377b9c4.woff2 +0 -0
  365. package/dashboard/.next/standalone/dashboard/.next/static/media/8a480f0b521d4e75-s.ea323500.woff2 +0 -0
  366. package/dashboard/.next/standalone/dashboard/.next/static/media/bbc41e54d2fcbd21-s.d1207556.woff2 +0 -0
  367. package/dashboard/.next/standalone/dashboard/.next/static/media/caa3a2e1cccd8315-s.p.3b6cae6d.woff2 +0 -0
  368. package/dashboard/.next/standalone/dashboard/.next/static/media/fef07dbb0973bf53-s.518e079e.woff2 +0 -0
  369. package/dist/api/routes/sessions.js +128 -6
  370. package/dist/cli/import-jsonl.js +3 -8
  371. package/dist/sessions/glob.d.ts +38 -0
  372. package/dist/sessions/glob.js +183 -0
  373. package/dist/sessions/import-jsonl.d.ts +9 -5
  374. package/dist/sessions/import-jsonl.js +89 -35
  375. package/package.json +1 -1
  376. package/plugins/openclaw/dist/openclaw.plugin.json +1 -1
  377. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__521be65c._.js +0 -3
  378. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__52bd7a9f._.js +0 -3
  379. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__6f881a23._.js +0 -3
  380. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_1c5148b9._.js +0 -3
  381. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_204d1c9e._.js +0 -3
  382. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_415e5b1b._.js +0 -3
  383. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_442a0173._.js +0 -3
  384. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_64f63df9._.js +0 -3
  385. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_7cb6f257._.js +0 -3
  386. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_9b8695d8._.js +0 -3
  387. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_c343baff._.js +0 -3
  388. package/dashboard/.next/standalone/dashboard/.next/static/chunks/2473c16c0c2f6b5f.css +0 -2
  389. package/dashboard/.next/standalone/dashboard/.next/static/chunks/5f18f98891076bc5.js +0 -1
  390. package/dashboard/.next/standalone/dashboard/.next/static/chunks/b053d5f11418d645.js +0 -3
  391. package/dashboard/.next/standalone/dashboard/.next/static/chunks/bf725d638cce46d4.css +0 -1
  392. package/dashboard/.next/standalone/dashboard/.next/static/chunks/d05e311dfccb5729.js +0 -1
  393. package/dashboard/.next/standalone/dashboard/.next/static/chunks/d9ad4c35fc865415.js +0 -1
  394. package/dashboard/.next/standalone/dashboard/.next/static/chunks/e804a1fda2839550.js +0 -1
  395. package/dashboard/.next/standalone/dashboard/.next/static/chunks/e9f4b8da354f1005.js +0 -1
  396. package/dashboard/.next/standalone/dashboard/.next/static/chunks/fe6075d947234b5d.js +0 -1
  397. package/dashboard/.next/standalone/dashboard/.next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
  398. package/dashboard/.next/standalone/dashboard/.next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
  399. package/dashboard/.next/standalone/dashboard/.next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
  400. package/dashboard/.next/standalone/dashboard/.next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
  401. package/dashboard/.next/standalone/dashboard/.next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
  402. package/dashboard/.next/standalone/dashboard/.next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
  403. /package/dashboard/.next/standalone/dashboard/.next/static/{9C0MR5ahRDqnfBA64wKCY → rBhx3Fsm2AhFxbr_xAimw}/_buildManifest.js +0 -0
  404. /package/dashboard/.next/standalone/dashboard/.next/static/{9C0MR5ahRDqnfBA64wKCY → rBhx3Fsm2AhFxbr_xAimw}/_clientMiddlewareManifest.json +0 -0
  405. /package/dashboard/.next/standalone/dashboard/.next/static/{9C0MR5ahRDqnfBA64wKCY → rBhx3Fsm2AhFxbr_xAimw}/_ssgManifest.js +0 -0
@@ -13,9 +13,12 @@
13
13
  * Pagination cap chosen to match `routes/memories.ts`: 200 max for lists,
14
14
  * 500 max for the event stream (replay needs more events at once).
15
15
  */
16
+ import { homedir, tmpdir } from 'os';
17
+ import { isAbsolute, join, normalize, resolve, sep } from 'path';
16
18
  import { getDatabase } from '../../database/init.js';
17
19
  import { getTimeline } from '../../sessions/timeline.js';
18
20
  import { importJsonlTranscript } from '../../sessions/import-jsonl.js';
21
+ import { expandGlob, isGlobPattern } from '../../sessions/glob.js';
19
22
  const SESSIONS_DEFAULT_LIMIT = 50;
20
23
  const SESSIONS_MAX_LIMIT = 200;
21
24
  const EVENTS_DEFAULT_LIMIT = 100;
@@ -133,16 +136,79 @@ export function registerSessionRoutes(app, requireNotLocked) {
133
136
  res.status(500).json({ error: err.message });
134
137
  }
135
138
  });
136
- // ── POST /api/sessions/import-jsonl — body: { path } ────────────────
137
- app.post('/api/sessions/import-jsonl', requireNotLocked, (req, res) => {
139
+ // ── POST /api/sessions/import-jsonl ────────────────────────────────
140
+ //
141
+ // Body forms:
142
+ // { path: "/abs/path/to/file.jsonl" } — import one file
143
+ // { path: "/glob/pattern/*.jsonl" } — import all matching files
144
+ // { } or { path: null } — default: ~/.claude/projects/**/*.jsonl
145
+ //
146
+ // Default glob exists so the dashboard's "Import JSONL" button has a
147
+ // useful zero-arg action. The CLI exposes the same behaviour.
148
+ app.post('/api/sessions/import-jsonl', requireNotLocked, async (req, res) => {
138
149
  try {
139
150
  const body = (req.body ?? {});
140
- if (typeof body.path !== 'string' || body.path.length === 0) {
141
- res.status(400).json({ error: 'path required (string)' });
151
+ const explicit = typeof body.path === 'string' && body.path.length > 0 ? body.path : null;
152
+ const target = explicit ?? join(homedir(), '.claude', 'projects', '**', '*.jsonl');
153
+ let files;
154
+ try {
155
+ files = await resolveImportFiles(target);
156
+ }
157
+ catch (err) {
158
+ // Path-traversal rejection from resolveImportFiles → 400 (caller error),
159
+ // not 500 (server bug). Any other error rethrows.
160
+ if (err instanceof Error && /must be under/i.test(err.message)) {
161
+ res.status(400).json({ error: err.message });
162
+ return;
163
+ }
164
+ throw err;
165
+ }
166
+ if (files.length === 0) {
167
+ res.status(404).json({ error: `no JSONL files matched: ${target}` });
168
+ return;
169
+ }
170
+ let eventCount = 0;
171
+ let skipped = 0;
172
+ let malformed = 0;
173
+ let imported = 0;
174
+ let failed = 0;
175
+ let lastSessionId = null;
176
+ const errors = [];
177
+ for (const file of files) {
178
+ try {
179
+ const r = importJsonlTranscript(file);
180
+ eventCount += r.eventCount;
181
+ skipped += r.skipped;
182
+ malformed += r.malformed;
183
+ if (r.sessionId)
184
+ lastSessionId = r.sessionId;
185
+ imported++;
186
+ }
187
+ catch (err) {
188
+ failed++;
189
+ errors.push({ path: file, error: err.message });
190
+ }
191
+ }
192
+ // Special case: a single literal path that doesn't exist → 404. The
193
+ // glob path already 404'd above when nothing matched; this covers
194
+ // the "user typed a wrong path" UX.
195
+ if (files.length === 1 &&
196
+ imported === 0 &&
197
+ errors.length === 1 &&
198
+ /not found|ENOENT/i.test(errors[0].error)) {
199
+ res.status(404).json({ error: errors[0].error });
142
200
  return;
143
201
  }
144
- const result = importJsonlTranscript(body.path);
145
- res.json(result);
202
+ res.json({
203
+ filesMatched: files.length,
204
+ filesImported: imported,
205
+ filesFailed: failed,
206
+ eventCount,
207
+ skipped,
208
+ malformed,
209
+ sessionId: files.length === 1 ? lastSessionId : null,
210
+ errors: errors.slice(0, 10), // cap at 10 to keep response small
211
+ });
146
212
  }
147
213
  catch (err) {
148
214
  const message = err.message;
@@ -151,3 +217,59 @@ export function registerSessionRoutes(app, requireNotLocked) {
151
217
  }
152
218
  });
153
219
  }
220
+ /**
221
+ * Resolve `target` into a list of absolute file paths, ensuring every
222
+ * result is rooted under a user-trusted directory. The dashboard binds to
223
+ * `localhost` by default, but constraining imports is a useful
224
+ * defence-in-depth measure when the dashboard is exposed via a tunnel,
225
+ * docker port-map, or a careless reverse proxy. A stray POST with
226
+ * `{ path: "/etc/secret.jsonl" }` should never read that file.
227
+ *
228
+ * Allowed roots:
229
+ * - the user's home directory (where `~/.claude/projects/...` lives)
230
+ * - the OS temp directory (where ad-hoc downloads + the test suite write)
231
+ *
232
+ * Both are per-user trust domains. Symlinks that point outside slip past
233
+ * this check because we don't `realpath()` for perf reasons — the user
234
+ * owns these trees, so a hostile symlink is a separate threat model.
235
+ */
236
+ async function resolveImportFiles(target) {
237
+ const roots = trustedRoots();
238
+ // Expand `~` then make absolute. `path.normalize` collapses `..` so a
239
+ // pattern like `~/../etc/passwd` resolves to `/etc/passwd` *before* the
240
+ // under-root check below catches it.
241
+ const expanded = expandHome(target, homedir());
242
+ const absolute = isAbsolute(expanded) ? expanded : resolve(process.cwd(), expanded);
243
+ const normalized = normalize(absolute);
244
+ if (!isUnderTrustedRoot(normalized, roots)) {
245
+ throw new Error(`path must be under home or temp directory: ${target}`);
246
+ }
247
+ if (!isGlobPattern(normalized))
248
+ return [normalized];
249
+ // Defence in depth: `**` walks symlinked subtrees, so re-filter the
250
+ // expansion. A symlink that escapes the trusted roots gets dropped here.
251
+ return expandGlob(normalized).filter((p) => isUnderTrustedRoot(normalize(p), roots));
252
+ }
253
+ function trustedRoots() {
254
+ // Deduplicate — on some macOS configs `tmpdir()` is a subdir of `homedir()`.
255
+ const seen = new Set();
256
+ const entries = [];
257
+ for (const root of [homedir(), tmpdir()]) {
258
+ const n = normalize(root);
259
+ if (seen.has(n))
260
+ continue;
261
+ seen.add(n);
262
+ entries.push({ root: n, withSep: n.endsWith(sep) ? n : n + sep });
263
+ }
264
+ return { entries };
265
+ }
266
+ function isUnderTrustedRoot(p, roots) {
267
+ return roots.entries.some((r) => p === r.root || p.startsWith(r.withSep));
268
+ }
269
+ function expandHome(p, home) {
270
+ if (p === '~')
271
+ return home;
272
+ if (p.startsWith('~/') || p.startsWith('~\\'))
273
+ return join(home, p.slice(2));
274
+ return p;
275
+ }
@@ -9,10 +9,10 @@
9
9
  * Initialises the DB before importing so the call works from any cwd
10
10
  * (the importer relies on the singleton `getDatabase()`).
11
11
  */
12
- import { glob } from 'fs/promises';
13
12
  import { homedir } from 'os';
14
13
  import { join } from 'path';
15
14
  import { existsSync } from 'fs';
15
+ import { expandGlob, isGlobPattern } from '../sessions/glob.js';
16
16
  export async function handleImportJsonlCommand(args) {
17
17
  if (args.includes('--help') || args.includes('-h')) {
18
18
  printHelp();
@@ -74,15 +74,10 @@ Examples:
74
74
  `);
75
75
  }
76
76
  async function resolveFiles(target) {
77
- // No glob characters → treat as literal path
78
- if (!/[*?[\]]/.test(target)) {
77
+ if (!isGlobPattern(target)) {
79
78
  if (!existsSync(target))
80
79
  return [];
81
80
  return [target];
82
81
  }
83
- const matches = [];
84
- for await (const entry of glob(target)) {
85
- matches.push(entry);
86
- }
87
- return matches.sort();
82
+ return expandGlob(target).sort();
88
83
  }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Minimal portable glob expansion for the session-capture import flow.
3
+ *
4
+ * Node 22 added `fs.promises.glob`, but ShieldCortex's `engines.node`
5
+ * still declares `>=18.0.0` — using fs/promises.glob would break the
6
+ * CI matrix (Node 20) and any production deployment running an LTS
7
+ * earlier than 22. This module implements the narrow subset of glob
8
+ * semantics the importer actually needs:
9
+ *
10
+ * - Literal paths (no wildcards) — return as-is, caller checks existence.
11
+ * - Shell wildcards `*` `?` `[]` within a single directory segment.
12
+ * - `**` for any-depth recursion (only between `/`-separated segments;
13
+ * `**` inside a filename is treated as a regular `*` `*`).
14
+ *
15
+ * No braces, no extglob, no negation. The JSONL importer doesn't need
16
+ * those and pulling in a full glob package would inflate the install
17
+ * footprint for a single feature.
18
+ */
19
+ export interface ExpandGlobOptions {
20
+ /**
21
+ * Cap on the number of returned matches. Stops walking once hit so
22
+ * pathological globs against `/` don't lock up the API process.
23
+ */
24
+ maxMatches?: number;
25
+ }
26
+ /**
27
+ * Returns `true` when the pattern contains any glob metacharacter the
28
+ * walker treats specially. Used by callers to short-circuit literal
29
+ * paths and skip the walker entirely.
30
+ */
31
+ export declare function isGlobPattern(pattern: string): boolean;
32
+ /**
33
+ * Expand a glob pattern to absolute file paths. Synchronous because
34
+ * the importer's callsites are already synchronous and the result is
35
+ * always small enough that I/O is not the bottleneck (sessions live
36
+ * on local disk under `~/.claude/projects/`).
37
+ */
38
+ export declare function expandGlob(pattern: string, options?: ExpandGlobOptions): string[];
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Minimal portable glob expansion for the session-capture import flow.
3
+ *
4
+ * Node 22 added `fs.promises.glob`, but ShieldCortex's `engines.node`
5
+ * still declares `>=18.0.0` — using fs/promises.glob would break the
6
+ * CI matrix (Node 20) and any production deployment running an LTS
7
+ * earlier than 22. This module implements the narrow subset of glob
8
+ * semantics the importer actually needs:
9
+ *
10
+ * - Literal paths (no wildcards) — return as-is, caller checks existence.
11
+ * - Shell wildcards `*` `?` `[]` within a single directory segment.
12
+ * - `**` for any-depth recursion (only between `/`-separated segments;
13
+ * `**` inside a filename is treated as a regular `*` `*`).
14
+ *
15
+ * No braces, no extglob, no negation. The JSONL importer doesn't need
16
+ * those and pulling in a full glob package would inflate the install
17
+ * footprint for a single feature.
18
+ */
19
+ import { readdirSync, statSync } from 'fs';
20
+ import { join, sep, isAbsolute } from 'path';
21
+ import { homedir } from 'os';
22
+ const DEFAULT_MAX_MATCHES = 10_000;
23
+ /**
24
+ * Returns `true` when the pattern contains any glob metacharacter the
25
+ * walker treats specially. Used by callers to short-circuit literal
26
+ * paths and skip the walker entirely.
27
+ */
28
+ export function isGlobPattern(pattern) {
29
+ return /[*?[\]]/.test(pattern);
30
+ }
31
+ /**
32
+ * Expand a glob pattern to absolute file paths. Synchronous because
33
+ * the importer's callsites are already synchronous and the result is
34
+ * always small enough that I/O is not the bottleneck (sessions live
35
+ * on local disk under `~/.claude/projects/`).
36
+ */
37
+ export function expandGlob(pattern, options = {}) {
38
+ const max = options.maxMatches ?? DEFAULT_MAX_MATCHES;
39
+ const expanded = expandHome(pattern);
40
+ if (!isGlobPattern(expanded)) {
41
+ return [expanded];
42
+ }
43
+ const segments = expanded.split(/[\\/]+/);
44
+ // Determine the literal prefix — everything up to the first segment
45
+ // that has a wildcard. Walking starts from there.
46
+ let prefix = isAbsolute(expanded) ? sep : '';
47
+ let i = 0;
48
+ for (; i < segments.length; i++) {
49
+ if (isGlobPattern(segments[i]))
50
+ break;
51
+ prefix = prefix === sep ? sep + segments[i] : prefix ? join(prefix, segments[i]) : segments[i];
52
+ }
53
+ if (prefix === '')
54
+ prefix = '.';
55
+ const remaining = segments.slice(i);
56
+ const matches = [];
57
+ walk(prefix, remaining, matches, max);
58
+ return matches.sort();
59
+ }
60
+ /** Recursive matcher. */
61
+ function walk(currentDir, segments, out, max) {
62
+ if (out.length >= max)
63
+ return;
64
+ if (segments.length === 0)
65
+ return;
66
+ const [head, ...rest] = segments;
67
+ // `**` — match any number of directory levels (including zero).
68
+ if (head === '**') {
69
+ // Zero levels: continue at currentDir with `rest`.
70
+ walk(currentDir, rest, out, max);
71
+ // One-or-more: recurse into every subdirectory with the same `**`.
72
+ let entries = [];
73
+ try {
74
+ entries = readdirSync(currentDir, { withFileTypes: true });
75
+ }
76
+ catch {
77
+ return;
78
+ }
79
+ for (const entry of entries) {
80
+ if (out.length >= max)
81
+ return;
82
+ if (entry.isDirectory()) {
83
+ walk(join(currentDir, String(entry.name)), segments, out, max);
84
+ }
85
+ }
86
+ return;
87
+ }
88
+ const regex = segmentToRegex(head);
89
+ const isLastSegment = rest.length === 0;
90
+ let entries = [];
91
+ try {
92
+ entries = readdirSync(currentDir, { withFileTypes: true });
93
+ }
94
+ catch {
95
+ return;
96
+ }
97
+ for (const entry of entries) {
98
+ if (out.length >= max)
99
+ return;
100
+ const name = String(entry.name);
101
+ if (!regex.test(name))
102
+ continue;
103
+ const full = join(currentDir, name);
104
+ if (isLastSegment) {
105
+ // Only files match a leaf glob — directories aren't useful for the importer.
106
+ if (entry.isFile())
107
+ out.push(full);
108
+ else if (entry.isSymbolicLink()) {
109
+ // Resolve symlinks lazily — a broken link just gets skipped.
110
+ try {
111
+ if (statSync(full).isFile())
112
+ out.push(full);
113
+ }
114
+ catch {
115
+ // ignore
116
+ }
117
+ }
118
+ }
119
+ else if (entry.isDirectory() || entry.isSymbolicLink()) {
120
+ walk(full, rest, out, max);
121
+ }
122
+ }
123
+ }
124
+ /** Convert a single shell-glob path segment to a regex. */
125
+ function segmentToRegex(segment) {
126
+ let pattern = '^';
127
+ let inCharClass = false;
128
+ for (let i = 0; i < segment.length; i++) {
129
+ const c = segment[i];
130
+ if (inCharClass) {
131
+ if (c === ']') {
132
+ inCharClass = false;
133
+ pattern += ']';
134
+ }
135
+ else if (c === '\\') {
136
+ pattern += '\\\\';
137
+ }
138
+ else {
139
+ pattern += escapeForRegex(c);
140
+ }
141
+ continue;
142
+ }
143
+ switch (c) {
144
+ case '*':
145
+ pattern += '[^/\\\\]*';
146
+ break;
147
+ case '?':
148
+ pattern += '[^/\\\\]';
149
+ break;
150
+ case '[':
151
+ inCharClass = true;
152
+ pattern += '[';
153
+ break;
154
+ case '.':
155
+ case '+':
156
+ case '(':
157
+ case ')':
158
+ case '{':
159
+ case '}':
160
+ case '|':
161
+ case '^':
162
+ case '$':
163
+ pattern += '\\' + c;
164
+ break;
165
+ default:
166
+ pattern += c;
167
+ }
168
+ }
169
+ pattern += '$';
170
+ return new RegExp(pattern);
171
+ }
172
+ function escapeForRegex(c) {
173
+ return /[.*+?^${}()|[\]\\]/.test(c) ? '\\' + c : c;
174
+ }
175
+ /** Expand a leading `~` to the user's home directory. */
176
+ function expandHome(p) {
177
+ if (p === '~')
178
+ return homedir();
179
+ if (p.startsWith('~/') || p.startsWith('~\\')) {
180
+ return join(homedir(), p.slice(2));
181
+ }
182
+ return p;
183
+ }
@@ -75,11 +75,15 @@ export interface ImportResult {
75
75
  */
76
76
  export declare function parseTranscriptLine(line: unknown): SessionEventInput[];
77
77
  /**
78
- * Import one JSONL file. Wraps the whole import in a single transaction
79
- * so a mid-file error rolls back cleanly better-sqlite3's transaction
80
- * helper restores DB state if the callback throws. Malformed lines do
81
- * NOT throw they're counted and skipped so a single bad row never
82
- * blocks the rest of the file.
78
+ * Import one JSONL file. Streams the file in 64 KB chunks via `readSync`
79
+ * and a `StringDecoder` (which handles UTF-8 sequences that span chunk
80
+ * boundaries) so a 500 MB transcript archive doesn't load into a single
81
+ * string. Parsed rows flush to SQLite in {@link FLUSH_BATCH_ROWS}-sized
82
+ * transactional batches.
83
+ *
84
+ * Malformed lines do NOT throw — they're counted and skipped so a single
85
+ * bad row never blocks the rest of the file. Idempotent on re-import via
86
+ * the `INSERT OR IGNORE` + `idx_session_events_dedupe` UNIQUE index.
83
87
  */
84
88
  export declare function importJsonlTranscript(path: string): ImportResult;
85
89
  export {};
@@ -28,7 +28,8 @@
28
28
  * - Things we WILL preserve: prompts, assistant text, tool name +
29
29
  * args + result, and timestamps.
30
30
  */
31
- import { readFileSync, existsSync } from 'fs';
31
+ import { openSync, readSync, closeSync, existsSync } from 'fs';
32
+ import { StringDecoder } from 'string_decoder';
32
33
  import { createHash } from 'crypto';
33
34
  import { getDatabase } from '../database/init.js';
34
35
  /**
@@ -122,27 +123,57 @@ const INSERT_OR_IGNORE_SQL = `
122
123
  (session_id, project, ts, kind, actor, payload, duration_ms, audit_id, content_hash)
123
124
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
124
125
  `;
126
+ /** 64 KB read chunks — small enough to bound peak memory on huge transcripts, big enough to keep syscall overhead negligible. */
127
+ const READ_CHUNK_BYTES = 64 * 1024;
125
128
  /**
126
- * Import one JSONL file. Wraps the whole import in a single transaction
127
- * so a mid-file error rolls back cleanly better-sqlite3's transaction
128
- * helper restores DB state if the callback throws. Malformed lines do
129
- * NOT throw they're counted and skipped so a single bad row never
130
- * blocks the rest of the file.
129
+ * Flush rows to disk in transaction batches of this size. The full file is
130
+ * NOT held in memory; instead we keep at most one chunk-worth of parsed
131
+ * rows pending. Mid-file failure leaves earlier chunks committed, which is
132
+ * fine because `INSERT OR IGNORE` makes a re-run idempotent.
133
+ */
134
+ const FLUSH_BATCH_ROWS = 2000;
135
+ /**
136
+ * Import one JSONL file. Streams the file in 64 KB chunks via `readSync`
137
+ * and a `StringDecoder` (which handles UTF-8 sequences that span chunk
138
+ * boundaries) so a 500 MB transcript archive doesn't load into a single
139
+ * string. Parsed rows flush to SQLite in {@link FLUSH_BATCH_ROWS}-sized
140
+ * transactional batches.
141
+ *
142
+ * Malformed lines do NOT throw — they're counted and skipped so a single
143
+ * bad row never blocks the rest of the file. Idempotent on re-import via
144
+ * the `INSERT OR IGNORE` + `idx_session_events_dedupe` UNIQUE index.
131
145
  */
132
146
  export function importJsonlTranscript(path) {
133
147
  if (!existsSync(path)) {
134
148
  throw new Error(`JSONL transcript not found: ${path}`);
135
149
  }
136
- const raw = readFileSync(path, 'utf-8');
137
- const lines = raw.split(/\r?\n/);
138
- const rows = [];
150
+ const db = getDatabase();
151
+ const stmt = db.prepare(INSERT_OR_IGNORE_SQL);
152
+ const countStmt = db.prepare('SELECT COUNT(*) AS c FROM session_events');
153
+ const flush = db.transaction((batch) => {
154
+ for (const row of batch) {
155
+ stmt.run(row.session_id, row.project ?? null, row.ts, row.kind, row.actor ?? null, typeof row.payload === 'string' ? row.payload : JSON.stringify(row.payload ?? null), row.duration_ms ?? null, row.audit_id ?? null, row.content_hash);
156
+ }
157
+ });
139
158
  let sessionId = null;
159
+ let eventCount = 0;
140
160
  let skipped = 0;
141
161
  let malformed = 0;
142
- for (const rawLine of lines) {
143
- const trimmed = rawLine.trim();
162
+ let inserted = 0;
163
+ const pending = [];
164
+ const drain = () => {
165
+ if (pending.length === 0)
166
+ return;
167
+ const before = countStmt.get().c;
168
+ flush(pending);
169
+ const after = countStmt.get().c;
170
+ inserted += after - before;
171
+ pending.length = 0;
172
+ };
173
+ const processLine = (line) => {
174
+ const trimmed = line.trim();
144
175
  if (trimmed.length === 0)
145
- continue; // blank lines aren't skipped they're just whitespace
176
+ return; // blank not counted as skipped
146
177
  let parsed;
147
178
  try {
148
179
  parsed = JSON.parse(trimmed);
@@ -150,44 +181,67 @@ export function importJsonlTranscript(path) {
150
181
  catch {
151
182
  malformed++;
152
183
  skipped++;
153
- continue;
184
+ return;
154
185
  }
155
186
  const events = parseTranscriptLine(parsed);
156
187
  if (events.length === 0) {
157
188
  skipped++;
158
- continue;
189
+ return;
159
190
  }
160
191
  if (sessionId === null && events[0]?.session_id) {
161
192
  sessionId = events[0].session_id;
162
193
  }
163
194
  for (const event of events) {
164
- rows.push({
165
- ...event,
166
- content_hash: hashEvent(event.kind, event.payload),
167
- });
195
+ pending.push({ ...event, content_hash: hashEvent(event.kind, event.payload) });
196
+ eventCount++;
197
+ }
198
+ };
199
+ const fd = openSync(path, 'r');
200
+ try {
201
+ const buf = Buffer.alloc(READ_CHUNK_BYTES);
202
+ const decoder = new StringDecoder('utf8');
203
+ let leftover = '';
204
+ let position = 0;
205
+ while (true) {
206
+ const bytesRead = readSync(fd, buf, 0, READ_CHUNK_BYTES, position);
207
+ if (bytesRead === 0)
208
+ break;
209
+ position += bytesRead;
210
+ // StringDecoder buffers partial UTF-8 sequences across chunk boundaries.
211
+ const text = leftover + decoder.write(buf.subarray(0, bytesRead));
212
+ const lastNewline = text.lastIndexOf('\n');
213
+ if (lastNewline === -1) {
214
+ leftover = text;
215
+ continue;
216
+ }
217
+ const complete = text.slice(0, lastNewline);
218
+ leftover = text.slice(lastNewline + 1);
219
+ for (const rawLine of complete.split('\n')) {
220
+ processLine(rawLine.endsWith('\r') ? rawLine.slice(0, -1) : rawLine);
221
+ }
222
+ if (pending.length >= FLUSH_BATCH_ROWS)
223
+ drain();
224
+ }
225
+ // Anything decoder still has buffered (impossible for valid UTF-8, but
226
+ // handle the malformed-bytes-at-EOF case gracefully).
227
+ const tail = leftover + decoder.end();
228
+ if (tail.length > 0) {
229
+ for (const rawLine of tail.split('\n')) {
230
+ processLine(rawLine.endsWith('\r') ? rawLine.slice(0, -1) : rawLine);
231
+ }
168
232
  }
169
233
  }
170
- if (rows.length === 0) {
171
- return { sessionId, eventCount: 0, skipped, malformed };
234
+ finally {
235
+ closeSync(fd);
172
236
  }
173
- const db = getDatabase();
174
- const stmt = db.prepare(INSERT_OR_IGNORE_SQL);
175
- const before = db.prepare('SELECT COUNT(*) AS c FROM session_events').get().c;
176
- const tx = db.transaction((batch) => {
177
- for (const row of batch) {
178
- stmt.run(row.session_id, row.project ?? null, row.ts, row.kind, row.actor ?? null, typeof row.payload === 'string' ? row.payload : JSON.stringify(row.payload ?? null), row.duration_ms ?? null, row.audit_id ?? null, row.content_hash);
179
- }
180
- });
181
- tx(rows);
182
- const after = db.prepare('SELECT COUNT(*) AS c FROM session_events').get().c;
183
- const inserted = after - before;
237
+ drain();
184
238
  // `eventCount` reflects the total events parsed from this file regardless
185
- // of whether the dedupe index dropped them. Caller can compare to
186
- // `inserted` (via row count diff) to see how many were duplicates.
239
+ // of whether the dedupe index dropped them. Duplicates surface in `skipped`
240
+ // so callers see one consistent "anything not inserted" tally.
187
241
  return {
188
242
  sessionId,
189
- eventCount: rows.length,
190
- skipped: skipped + (rows.length - inserted),
243
+ eventCount,
244
+ skipped: skipped + (eventCount - inserted),
191
245
  malformed,
192
246
  };
193
247
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shieldcortex",
3
- "version": "4.17.0",
3
+ "version": "4.18.1",
4
4
  "description": "Trustworthy memory and security for AI agents. Recall debugging, review queue, OpenClaw session capture, and memory poisoning defence for Claude Code, Codex, OpenClaw, LangChain, and MCP agents.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "id": "shieldcortex-realtime",
3
- "version": "4.17.0",
3
+ "version": "4.18.1",
4
4
  "name": "ShieldCortex Real-time Scanner",
5
5
  "description": "Real-time defence scanning on LLM input, memory extraction on LLM output, and active tool call interception with approval gating.",
6
6
  "kind": null,
@@ -1,3 +0,0 @@
1
- module.exports=[18622,(a,b,c)=>{b.exports=a.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},14865,(a,b,c)=>{"use strict";b.exports=a.r(18622)},16306,(a,b,c)=>{"use strict";b.exports=a.r(14865).vendored["react-ssr"].ReactJsxRuntime},98419,(a,b,c)=>{"use strict";b.exports=a.r(14865).vendored["react-ssr"].React},17878,a=>{"use strict";var b=a.i(16306),c=a.i(15896),d=a.i(30112),e=a.i(98416),f=a.i(16347),g=class extends f.Subscribable{constructor(a={}){super(),this.config=a,this.#a=new Map}#a;build(a,b,e){let f=b.queryKey,g=b.queryHash??(0,c.hashQueryKeyByOptions)(f,b),h=this.get(g);return h||(h=new d.Query({client:a,queryKey:f,queryHash:g,options:a.defaultQueryOptions(b),state:e,defaultOptions:a.getQueryDefaults(f)}),this.add(h)),h}add(a){this.#a.has(a.queryHash)||(this.#a.set(a.queryHash,a),this.notify({type:"added",query:a}))}remove(a){let b=this.#a.get(a.queryHash);b&&(a.destroy(),b===a&&this.#a.delete(a.queryHash),this.notify({type:"removed",query:a}))}clear(){e.notifyManager.batch(()=>{this.getAll().forEach(a=>{this.remove(a)})})}get(a){return this.#a.get(a)}getAll(){return[...this.#a.values()]}find(a){let b={exact:!0,...a};return this.getAll().find(a=>(0,c.matchQuery)(b,a))}findAll(a={}){let b=this.getAll();return Object.keys(a).length>0?b.filter(b=>(0,c.matchQuery)(a,b)):b}notify(a){e.notifyManager.batch(()=>{this.listeners.forEach(b=>{b(a)})})}onFocus(){e.notifyManager.batch(()=>{this.getAll().forEach(a=>{a.onFocus()})})}onOnline(){e.notifyManager.batch(()=>{this.getAll().forEach(a=>{a.onOnline()})})}},h=a.i(46674),i=f,j=class extends i.Subscribable{constructor(a={}){super(),this.config=a,this.#b=new Set,this.#c=new Map,this.#d=0}#b;#c;#d;build(a,b,c){let d=new h.Mutation({client:a,mutationCache:this,mutationId:++this.#d,options:a.defaultMutationOptions(b),state:c});return this.add(d),d}add(a){this.#b.add(a);let b=k(a);if("string"==typeof b){let c=this.#c.get(b);c?c.push(a):this.#c.set(b,[a])}this.notify({type:"added",mutation:a})}remove(a){if(this.#b.delete(a)){let b=k(a);if("string"==typeof b){let c=this.#c.get(b);if(c)if(c.length>1){let b=c.indexOf(a);-1!==b&&c.splice(b,1)}else c[0]===a&&this.#c.delete(b)}}this.notify({type:"removed",mutation:a})}canRun(a){let b=k(a);if("string"!=typeof b)return!0;{let c=this.#c.get(b),d=c?.find(a=>"pending"===a.state.status);return!d||d===a}}runNext(a){let b=k(a);if("string"!=typeof b)return Promise.resolve();{let c=this.#c.get(b)?.find(b=>b!==a&&b.state.isPaused);return c?.continue()??Promise.resolve()}}clear(){e.notifyManager.batch(()=>{this.#b.forEach(a=>{this.notify({type:"removed",mutation:a})}),this.#b.clear(),this.#c.clear()})}getAll(){return Array.from(this.#b)}find(a){let b={exact:!0,...a};return this.getAll().find(a=>(0,c.matchMutation)(b,a))}findAll(a={}){return this.getAll().filter(b=>(0,c.matchMutation)(a,b))}notify(a){e.notifyManager.batch(()=>{this.listeners.forEach(b=>{b(a)})})}resumePausedMutations(){let a=this.getAll().filter(a=>a.state.isPaused);return e.notifyManager.batch(()=>Promise.all(a.map(a=>a.continue().catch(c.noop))))}};function k(a){return a.options.scope?.id}var l=a.i(7903),m=a.i(59643);function n(a){return{onFetch:(b,d)=>{let e=b.options,f=b.fetchOptions?.meta?.fetchMore?.direction,g=b.state.data?.pages||[],h=b.state.data?.pageParams||[],i={pages:[],pageParams:[]},j=0,k=async()=>{let d=!1,k=(0,c.ensureQueryFn)(b.options,b.fetchOptions),l=async(a,e,f)=>{let g;if(d)return Promise.reject();if(null==e&&a.pages.length)return Promise.resolve(a);let h=(g={client:b.client,queryKey:b.queryKey,pageParam:e,direction:f?"backward":"forward",meta:b.options.meta},(0,c.addConsumeAwareSignal)(g,()=>b.signal,()=>d=!0),g),i=await k(h),{maxPages:j}=b.options,l=f?c.addToStart:c.addToEnd;return{pages:l(a.pages,i,j),pageParams:l(a.pageParams,e,j)}};if(f&&g.length){let a="backward"===f,b={pages:g,pageParams:h},c=(a?function(a,{pages:b,pageParams:c}){return b.length>0?a.getPreviousPageParam?.(b[0],b,c[0],c):void 0}:o)(e,b);i=await l(b,c,a)}else{let b=a??g.length;do{let a=0===j?h[0]??e.initialPageParam:o(e,i);if(j>0&&null==a)break;i=await l(i,a),j++}while(j<b)}return i};b.options.persister?b.fetchFn=()=>b.options.persister?.(k,{client:b.client,queryKey:b.queryKey,meta:b.options.meta,signal:b.signal},d):b.fetchFn=k}}}function o(a,{pages:b,pageParams:c}){let d=b.length-1;return b.length>0?a.getNextPageParam(b[d],b,c[d],c):void 0}var p=class{#e;#f;#g;#h;#i;#j;#k;#l;constructor(a={}){this.#e=a.queryCache||new g,this.#f=a.mutationCache||new j,this.#g=a.defaultOptions||{},this.#h=new Map,this.#i=new Map,this.#j=0}mount(){this.#j++,1===this.#j&&(this.#k=l.focusManager.subscribe(async a=>{a&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#l=m.onlineManager.subscribe(async a=>{a&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#j--,0===this.#j&&(this.#k?.(),this.#k=void 0,this.#l?.(),this.#l=void 0)}isFetching(a){return this.#e.findAll({...a,fetchStatus:"fetching"}).length}isMutating(a){return this.#f.findAll({...a,status:"pending"}).length}getQueryData(a){let b=this.defaultQueryOptions({queryKey:a});return this.#e.get(b.queryHash)?.state.data}ensureQueryData(a){let b=this.defaultQueryOptions(a),d=this.#e.build(this,b),e=d.state.data;return void 0===e?this.fetchQuery(a):(a.revalidateIfStale&&d.isStaleByTime((0,c.resolveStaleTime)(b.staleTime,d))&&this.prefetchQuery(b),Promise.resolve(e))}getQueriesData(a){return this.#e.findAll(a).map(({queryKey:a,state:b})=>[a,b.data])}setQueryData(a,b,d){let e=this.defaultQueryOptions({queryKey:a}),f=this.#e.get(e.queryHash),g=f?.state.data,h=(0,c.functionalUpdate)(b,g);if(void 0!==h)return this.#e.build(this,e).setData(h,{...d,manual:!0})}setQueriesData(a,b,c){return e.notifyManager.batch(()=>this.#e.findAll(a).map(({queryKey:a})=>[a,this.setQueryData(a,b,c)]))}getQueryState(a){let b=this.defaultQueryOptions({queryKey:a});return this.#e.get(b.queryHash)?.state}removeQueries(a){let b=this.#e;e.notifyManager.batch(()=>{b.findAll(a).forEach(a=>{b.remove(a)})})}resetQueries(a,b){let c=this.#e;return e.notifyManager.batch(()=>(c.findAll(a).forEach(a=>{a.reset()}),this.refetchQueries({type:"active",...a},b)))}cancelQueries(a,b={}){let d={revert:!0,...b};return Promise.all(e.notifyManager.batch(()=>this.#e.findAll(a).map(a=>a.cancel(d)))).then(c.noop).catch(c.noop)}invalidateQueries(a,b={}){return e.notifyManager.batch(()=>(this.#e.findAll(a).forEach(a=>{a.invalidate()}),a?.refetchType==="none")?Promise.resolve():this.refetchQueries({...a,type:a?.refetchType??a?.type??"active"},b))}refetchQueries(a,b={}){let d={...b,cancelRefetch:b.cancelRefetch??!0};return Promise.all(e.notifyManager.batch(()=>this.#e.findAll(a).filter(a=>!a.isDisabled()&&!a.isStatic()).map(a=>{let b=a.fetch(void 0,d);return d.throwOnError||(b=b.catch(c.noop)),"paused"===a.state.fetchStatus?Promise.resolve():b}))).then(c.noop)}fetchQuery(a){let b=this.defaultQueryOptions(a);void 0===b.retry&&(b.retry=!1);let d=this.#e.build(this,b);return d.isStaleByTime((0,c.resolveStaleTime)(b.staleTime,d))?d.fetch(b):Promise.resolve(d.state.data)}prefetchQuery(a){return this.fetchQuery(a).then(c.noop).catch(c.noop)}fetchInfiniteQuery(a){return a.behavior=n(a.pages),this.fetchQuery(a)}prefetchInfiniteQuery(a){return this.fetchInfiniteQuery(a).then(c.noop).catch(c.noop)}ensureInfiniteQueryData(a){return a.behavior=n(a.pages),this.ensureQueryData(a)}resumePausedMutations(){return m.onlineManager.isOnline()?this.#f.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#f}getDefaultOptions(){return this.#g}setDefaultOptions(a){this.#g=a}setQueryDefaults(a,b){this.#h.set((0,c.hashKey)(a),{queryKey:a,defaultOptions:b})}getQueryDefaults(a){let b=[...this.#h.values()],d={};return b.forEach(b=>{(0,c.partialMatchKey)(a,b.queryKey)&&Object.assign(d,b.defaultOptions)}),d}setMutationDefaults(a,b){this.#i.set((0,c.hashKey)(a),{mutationKey:a,defaultOptions:b})}getMutationDefaults(a){let b=[...this.#i.values()],d={};return b.forEach(b=>{(0,c.partialMatchKey)(a,b.mutationKey)&&Object.assign(d,b.defaultOptions)}),d}defaultQueryOptions(a){if(a._defaulted)return a;let b={...this.#g.queries,...this.getQueryDefaults(a.queryKey),...a,_defaulted:!0};return b.queryHash||(b.queryHash=(0,c.hashQueryKeyByOptions)(b.queryKey,b)),void 0===b.refetchOnReconnect&&(b.refetchOnReconnect="always"!==b.networkMode),void 0===b.throwOnError&&(b.throwOnError=!!b.suspense),!b.networkMode&&b.persister&&(b.networkMode="offlineFirst"),b.queryFn===c.skipToken&&(b.enabled=!1),b}defaultMutationOptions(a){return a?._defaulted?a:{...this.#g.mutations,...a?.mutationKey&&this.getMutationDefaults(a.mutationKey),...a,_defaulted:!0}}clear(){this.#e.clear(),this.#f.clear()}},q=a.i(14220),r=a.i(98419);function s({children:a}){let[c]=(0,r.useState)(()=>new p({defaultOptions:{queries:{staleTime:5e3,refetchOnWindowFocus:!1}}}));return(0,b.jsx)(q.QueryClientProvider,{client:c,children:a})}a.s(["Providers",()=>s],17878)}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__521be65c._.js.map