shieldcortex 4.16.0 → 4.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (419) 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/349dace3a1c9af01.js +1 -0
  349. package/dashboard/.next/standalone/dashboard/.next/static/chunks/3505433bf7977a34.js +1 -0
  350. package/dashboard/.next/standalone/dashboard/.next/static/chunks/4d0b86f6afedd8b5.js +3 -0
  351. package/dashboard/.next/standalone/dashboard/.next/static/chunks/a681787c6c10e4bd.css +1 -0
  352. package/dashboard/.next/standalone/dashboard/.next/static/chunks/a7d5d0791c8c6223.css +2 -0
  353. package/dashboard/.next/standalone/dashboard/.next/static/chunks/afe4beed85ba4fec.js +1 -0
  354. package/dashboard/.next/standalone/dashboard/.next/static/chunks/b2a6e883eaa58507.js +1 -0
  355. package/dashboard/.next/standalone/dashboard/.next/static/chunks/bcfaf98940462e7d.js +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.d.ts +19 -0
  370. package/dist/api/routes/sessions.js +213 -0
  371. package/dist/api/visualization-server.js +2 -0
  372. package/dist/cli/import-jsonl.d.ts +12 -0
  373. package/dist/cli/import-jsonl.js +83 -0
  374. package/dist/database/init.js +44 -0
  375. package/dist/database/schema.sql +31 -0
  376. package/dist/index.js +8 -0
  377. package/dist/sessions/capture.d.ts +45 -0
  378. package/dist/sessions/capture.js +59 -0
  379. package/dist/sessions/glob.d.ts +38 -0
  380. package/dist/sessions/glob.js +183 -0
  381. package/dist/sessions/import-jsonl.d.ts +85 -0
  382. package/dist/sessions/import-jsonl.js +193 -0
  383. package/dist/sessions/timeline.d.ts +28 -0
  384. package/dist/sessions/timeline.js +52 -0
  385. package/package.json +1 -1
  386. package/plugins/openclaw/dist/openclaw.plugin.json +1 -1
  387. package/scripts/lib/session-capture.mjs +102 -0
  388. package/scripts/pre-compact-hook.mjs +19 -0
  389. package/scripts/prompt-recall-hook.mjs +30 -4
  390. package/scripts/session-end-hook.mjs +19 -0
  391. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__521be65c._.js +0 -3
  392. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__52bd7a9f._.js +0 -3
  393. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__6f881a23._.js +0 -3
  394. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_1c5148b9._.js +0 -3
  395. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_204d1c9e._.js +0 -3
  396. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_415e5b1b._.js +0 -3
  397. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_442a0173._.js +0 -3
  398. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_64f63df9._.js +0 -3
  399. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_7cb6f257._.js +0 -3
  400. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_9b8695d8._.js +0 -3
  401. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_c343baff._.js +0 -3
  402. package/dashboard/.next/standalone/dashboard/.next/static/chunks/2473c16c0c2f6b5f.css +0 -2
  403. package/dashboard/.next/standalone/dashboard/.next/static/chunks/5f18f98891076bc5.js +0 -1
  404. package/dashboard/.next/standalone/dashboard/.next/static/chunks/b053d5f11418d645.js +0 -3
  405. package/dashboard/.next/standalone/dashboard/.next/static/chunks/bf725d638cce46d4.css +0 -1
  406. package/dashboard/.next/standalone/dashboard/.next/static/chunks/d05e311dfccb5729.js +0 -1
  407. package/dashboard/.next/standalone/dashboard/.next/static/chunks/d9ad4c35fc865415.js +0 -1
  408. package/dashboard/.next/standalone/dashboard/.next/static/chunks/e804a1fda2839550.js +0 -1
  409. package/dashboard/.next/standalone/dashboard/.next/static/chunks/e9f4b8da354f1005.js +0 -1
  410. package/dashboard/.next/standalone/dashboard/.next/static/chunks/fe6075d947234b5d.js +0 -1
  411. package/dashboard/.next/standalone/dashboard/.next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
  412. package/dashboard/.next/standalone/dashboard/.next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
  413. package/dashboard/.next/standalone/dashboard/.next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
  414. package/dashboard/.next/standalone/dashboard/.next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
  415. package/dashboard/.next/standalone/dashboard/.next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
  416. package/dashboard/.next/standalone/dashboard/.next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
  417. /package/dashboard/.next/standalone/dashboard/.next/static/{6WjF0Utj3STrFgg7vZVPK → 5ueRnXG92g_vRzyK9j89H}/_buildManifest.js +0 -0
  418. /package/dashboard/.next/standalone/dashboard/.next/static/{6WjF0Utj3STrFgg7vZVPK → 5ueRnXG92g_vRzyK9j89H}/_clientMiddlewareManifest.json +0 -0
  419. /package/dashboard/.next/standalone/dashboard/.next/static/{6WjF0Utj3STrFgg7vZVPK → 5ueRnXG92g_vRzyK9j89H}/_ssgManifest.js +0 -0
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Session capture — write side.
3
+ *
4
+ * Hooks (`scripts/prompt-recall-hook.mjs`, `scripts/stop-hook.mjs`,
5
+ * `scripts/session-end-hook.mjs`, etc.) call `recordEvent()` or the
6
+ * batched `recordEvents()` to persist turn-by-turn events into the
7
+ * `session_events` table. The timeline reader in `./timeline.ts`
8
+ * then reassembles them into the replay stream.
9
+ *
10
+ * Distinct from the summary `sessions` table (one row per session)
11
+ * and from `defence_audit` (one row per scan). Captures every event
12
+ * with enough fidelity to scrub/replay.
13
+ */
14
+ /**
15
+ * Six kinds the schema CHECK constraint enforces. Keeping these in
16
+ * sync with `schema.sql` is load-bearing — adding a new kind requires
17
+ * both a schema migration and a code update here.
18
+ */
19
+ export type SessionEventKind = 'prompt' | 'response' | 'tool_call' | 'tool_result' | 'tool_error' | 'hook_fire';
20
+ export interface SessionEventInput {
21
+ session_id: string;
22
+ /** ISO-8601 timestamp string. Caller-supplied so import order is preserved. */
23
+ ts: string;
24
+ kind: SessionEventKind;
25
+ /**
26
+ * Payload — object (auto-serialised to JSON) or string (stored as-is).
27
+ * Strings are kept verbatim so JSONL importers can pass through raw
28
+ * content without double-encoding.
29
+ */
30
+ payload: unknown;
31
+ project?: string | null;
32
+ actor?: string | null;
33
+ duration_ms?: number | null;
34
+ audit_id?: number | null;
35
+ }
36
+ /** Insert one event row. Returns the new row id. */
37
+ export declare function recordEvent(input: SessionEventInput): number;
38
+ /**
39
+ * Batched insert wrapped in a single transaction. Used when a hook
40
+ * fires and produces several events at once (e.g. stop-hook emitting
41
+ * a `response` plus N tool_call/tool_result pairs from the just-
42
+ * finished turn). All-or-nothing: a CHECK violation rolls back the
43
+ * lot, so the table never holds half a turn.
44
+ */
45
+ export declare function recordEvents(inputs: readonly SessionEventInput[]): number[];
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Session capture — write side.
3
+ *
4
+ * Hooks (`scripts/prompt-recall-hook.mjs`, `scripts/stop-hook.mjs`,
5
+ * `scripts/session-end-hook.mjs`, etc.) call `recordEvent()` or the
6
+ * batched `recordEvents()` to persist turn-by-turn events into the
7
+ * `session_events` table. The timeline reader in `./timeline.ts`
8
+ * then reassembles them into the replay stream.
9
+ *
10
+ * Distinct from the summary `sessions` table (one row per session)
11
+ * and from `defence_audit` (one row per scan). Captures every event
12
+ * with enough fidelity to scrub/replay.
13
+ */
14
+ import { getDatabase } from '../database/init.js';
15
+ /**
16
+ * Serialise payload to text. Objects/arrays go through JSON.stringify;
17
+ * strings pass through. This keeps the column NOT NULL constraint
18
+ * satisfied even for empty-object payloads and matches the timeline
19
+ * reader's `JSON.parse` with raw-string fallback.
20
+ */
21
+ function serialisePayload(payload) {
22
+ if (typeof payload === 'string')
23
+ return payload;
24
+ return JSON.stringify(payload ?? null);
25
+ }
26
+ const INSERT_SQL = `
27
+ INSERT INTO session_events
28
+ (session_id, project, ts, kind, actor, payload, duration_ms, audit_id)
29
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
30
+ `;
31
+ /** Insert one event row. Returns the new row id. */
32
+ export function recordEvent(input) {
33
+ const db = getDatabase();
34
+ const stmt = db.prepare(INSERT_SQL);
35
+ const result = stmt.run(input.session_id, input.project ?? null, input.ts, input.kind, input.actor ?? null, serialisePayload(input.payload), input.duration_ms ?? null, input.audit_id ?? null);
36
+ return Number(result.lastInsertRowid);
37
+ }
38
+ /**
39
+ * Batched insert wrapped in a single transaction. Used when a hook
40
+ * fires and produces several events at once (e.g. stop-hook emitting
41
+ * a `response` plus N tool_call/tool_result pairs from the just-
42
+ * finished turn). All-or-nothing: a CHECK violation rolls back the
43
+ * lot, so the table never holds half a turn.
44
+ */
45
+ export function recordEvents(inputs) {
46
+ if (inputs.length === 0)
47
+ return [];
48
+ const db = getDatabase();
49
+ const stmt = db.prepare(INSERT_SQL);
50
+ const ids = [];
51
+ const tx = db.transaction((rows) => {
52
+ for (const row of rows) {
53
+ const result = stmt.run(row.session_id, row.project ?? null, row.ts, row.kind, row.actor ?? null, serialisePayload(row.payload), row.duration_ms ?? null, row.audit_id ?? null);
54
+ ids.push(Number(result.lastInsertRowid));
55
+ }
56
+ });
57
+ tx(inputs);
58
+ return ids;
59
+ }
@@ -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
+ }
@@ -0,0 +1,85 @@
1
+ /**
2
+ * JSONL transcript importer for Claude Code session files.
3
+ *
4
+ * Claude Code writes session transcripts to `~/.claude/projects/<slug>/
5
+ * <session-uuid>.jsonl`. Each line is a JSON object. Conversation lines
6
+ * have shape `{type, sessionId, timestamp, message: {role, content}}`
7
+ * where `content` is an Anthropic SDK content-block array
8
+ * (`text|thinking|tool_use|tool_result`).
9
+ *
10
+ * Mapping to `session_events.kind`:
11
+ *
12
+ * user.text → prompt
13
+ * assistant.text → response
14
+ * assistant.tool_use → tool_call
15
+ * user.tool_result → tool_result
16
+ * thinking → (skipped — not user-replayable in v1)
17
+ *
18
+ * Non-conversation lines (`ai-title`, `attachment`, `system`,
19
+ * `queue-operation`, etc.) are skipped. Idempotent on re-import: each
20
+ * row carries a sha256 `content_hash` of `kind|payload`, and the
21
+ * `idx_session_events_dedupe` UNIQUE index drops collisions silently
22
+ * via `INSERT OR IGNORE`.
23
+ *
24
+ * Lossy by design — agentmemory documents the same scope:
25
+ * - Anthropic-internal cache markers, partial-message frames, and
26
+ * non-string tool_result encodings beyond plain text are not
27
+ * preserved.
28
+ * - Things we WILL preserve: prompts, assistant text, tool name +
29
+ * args + result, and timestamps.
30
+ */
31
+ import type { SessionEventInput } from './capture.js';
32
+ export interface TranscriptLine {
33
+ type?: string;
34
+ sessionId?: string;
35
+ timestamp?: string;
36
+ message?: {
37
+ role?: 'user' | 'assistant';
38
+ content?: ContentBlock[];
39
+ };
40
+ }
41
+ type ContentBlock = {
42
+ type: 'text';
43
+ text?: string;
44
+ } | {
45
+ type: 'thinking';
46
+ thinking?: string;
47
+ } | {
48
+ type: 'tool_use';
49
+ id?: string;
50
+ name?: string;
51
+ input?: unknown;
52
+ } | {
53
+ type: 'tool_result';
54
+ tool_use_id?: string;
55
+ content?: unknown;
56
+ } | {
57
+ type: string;
58
+ [key: string]: unknown;
59
+ };
60
+ export interface ImportResult {
61
+ sessionId: string | null;
62
+ eventCount: number;
63
+ /** Lines that produced zero events — non-conversation types + parse errors. */
64
+ skipped: number;
65
+ /** Lines whose JSON parsed but were rejected (missing required fields, unknown block types). */
66
+ malformed: number;
67
+ }
68
+ /**
69
+ * Pure mapper: one transcript line → 0..N `SessionEventInput`s.
70
+ *
71
+ * Exported so unit tests can exercise the mapping in isolation without
72
+ * standing up a database. Returns `[]` for any line that doesn't yield
73
+ * replayable events (thinking blocks, ai-title, missing fields, etc.) —
74
+ * the caller treats an empty array as "skipped".
75
+ */
76
+ export declare function parseTranscriptLine(line: unknown): SessionEventInput[];
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.
83
+ */
84
+ export declare function importJsonlTranscript(path: string): ImportResult;
85
+ export {};
@@ -0,0 +1,193 @@
1
+ /**
2
+ * JSONL transcript importer for Claude Code session files.
3
+ *
4
+ * Claude Code writes session transcripts to `~/.claude/projects/<slug>/
5
+ * <session-uuid>.jsonl`. Each line is a JSON object. Conversation lines
6
+ * have shape `{type, sessionId, timestamp, message: {role, content}}`
7
+ * where `content` is an Anthropic SDK content-block array
8
+ * (`text|thinking|tool_use|tool_result`).
9
+ *
10
+ * Mapping to `session_events.kind`:
11
+ *
12
+ * user.text → prompt
13
+ * assistant.text → response
14
+ * assistant.tool_use → tool_call
15
+ * user.tool_result → tool_result
16
+ * thinking → (skipped — not user-replayable in v1)
17
+ *
18
+ * Non-conversation lines (`ai-title`, `attachment`, `system`,
19
+ * `queue-operation`, etc.) are skipped. Idempotent on re-import: each
20
+ * row carries a sha256 `content_hash` of `kind|payload`, and the
21
+ * `idx_session_events_dedupe` UNIQUE index drops collisions silently
22
+ * via `INSERT OR IGNORE`.
23
+ *
24
+ * Lossy by design — agentmemory documents the same scope:
25
+ * - Anthropic-internal cache markers, partial-message frames, and
26
+ * non-string tool_result encodings beyond plain text are not
27
+ * preserved.
28
+ * - Things we WILL preserve: prompts, assistant text, tool name +
29
+ * args + result, and timestamps.
30
+ */
31
+ import { readFileSync, existsSync } from 'fs';
32
+ import { createHash } from 'crypto';
33
+ import { getDatabase } from '../database/init.js';
34
+ /**
35
+ * Pure mapper: one transcript line → 0..N `SessionEventInput`s.
36
+ *
37
+ * Exported so unit tests can exercise the mapping in isolation without
38
+ * standing up a database. Returns `[]` for any line that doesn't yield
39
+ * replayable events (thinking blocks, ai-title, missing fields, etc.) —
40
+ * the caller treats an empty array as "skipped".
41
+ */
42
+ export function parseTranscriptLine(line) {
43
+ if (!line || typeof line !== 'object')
44
+ return [];
45
+ const l = line;
46
+ // Only conversation lines yield events.
47
+ if (l.type !== 'user' && l.type !== 'assistant')
48
+ return [];
49
+ if (typeof l.sessionId !== 'string' || l.sessionId.length === 0)
50
+ return [];
51
+ if (typeof l.timestamp !== 'string' || l.timestamp.length === 0)
52
+ return [];
53
+ const content = l.message?.content;
54
+ if (!Array.isArray(content) || content.length === 0)
55
+ return [];
56
+ const events = [];
57
+ for (const block of content) {
58
+ const event = blockToEvent(block, l);
59
+ if (event)
60
+ events.push(event);
61
+ }
62
+ return events;
63
+ }
64
+ function blockToEvent(block, line) {
65
+ const session_id = line.sessionId;
66
+ const ts = line.timestamp;
67
+ if (block.type === 'thinking')
68
+ return null;
69
+ if (block.type === 'text' && line.type === 'user') {
70
+ const text = typeof block.text === 'string' ? block.text : '';
71
+ if (!text)
72
+ return null;
73
+ return { session_id, ts, kind: 'prompt', payload: { text } };
74
+ }
75
+ if (block.type === 'text' && line.type === 'assistant') {
76
+ const text = typeof block.text === 'string' ? block.text : '';
77
+ if (!text)
78
+ return null;
79
+ return {
80
+ session_id,
81
+ ts,
82
+ kind: 'response',
83
+ payload: { text },
84
+ actor: 'assistant',
85
+ };
86
+ }
87
+ if (block.type === 'tool_use' && line.type === 'assistant') {
88
+ const toolBlock = block;
89
+ return {
90
+ session_id,
91
+ ts,
92
+ kind: 'tool_call',
93
+ payload: {
94
+ tool_use_id: toolBlock.id ?? null,
95
+ name: toolBlock.name ?? null,
96
+ input: toolBlock.input ?? null,
97
+ },
98
+ actor: 'assistant',
99
+ };
100
+ }
101
+ if (block.type === 'tool_result' && line.type === 'user') {
102
+ const tr = block;
103
+ return {
104
+ session_id,
105
+ ts,
106
+ kind: 'tool_result',
107
+ payload: {
108
+ tool_use_id: tr.tool_use_id ?? null,
109
+ content: tr.content ?? null,
110
+ },
111
+ };
112
+ }
113
+ return null;
114
+ }
115
+ /** SHA-256 of `kind|payload-as-canonical-json`. 64-char hex string. */
116
+ function hashEvent(kind, payload) {
117
+ const canonical = typeof payload === 'string' ? payload : JSON.stringify(payload ?? null);
118
+ return createHash('sha256').update(`${kind}|${canonical}`).digest('hex');
119
+ }
120
+ const INSERT_OR_IGNORE_SQL = `
121
+ INSERT OR IGNORE INTO session_events
122
+ (session_id, project, ts, kind, actor, payload, duration_ms, audit_id, content_hash)
123
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
124
+ `;
125
+ /**
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.
131
+ */
132
+ export function importJsonlTranscript(path) {
133
+ if (!existsSync(path)) {
134
+ throw new Error(`JSONL transcript not found: ${path}`);
135
+ }
136
+ const raw = readFileSync(path, 'utf-8');
137
+ const lines = raw.split(/\r?\n/);
138
+ const rows = [];
139
+ let sessionId = null;
140
+ let skipped = 0;
141
+ let malformed = 0;
142
+ for (const rawLine of lines) {
143
+ const trimmed = rawLine.trim();
144
+ if (trimmed.length === 0)
145
+ continue; // blank lines aren't skipped — they're just whitespace
146
+ let parsed;
147
+ try {
148
+ parsed = JSON.parse(trimmed);
149
+ }
150
+ catch {
151
+ malformed++;
152
+ skipped++;
153
+ continue;
154
+ }
155
+ const events = parseTranscriptLine(parsed);
156
+ if (events.length === 0) {
157
+ skipped++;
158
+ continue;
159
+ }
160
+ if (sessionId === null && events[0]?.session_id) {
161
+ sessionId = events[0].session_id;
162
+ }
163
+ for (const event of events) {
164
+ rows.push({
165
+ ...event,
166
+ content_hash: hashEvent(event.kind, event.payload),
167
+ });
168
+ }
169
+ }
170
+ if (rows.length === 0) {
171
+ return { sessionId, eventCount: 0, skipped, malformed };
172
+ }
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;
184
+ // `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.
187
+ return {
188
+ sessionId,
189
+ eventCount: rows.length,
190
+ skipped: skipped + (rows.length - inserted),
191
+ malformed,
192
+ };
193
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Session capture — read side.
3
+ *
4
+ * `getTimeline(sessionId)` returns every event for a session, sorted
5
+ * by `ts` ascending, with payload JSON.parse'd back into a JS value
6
+ * (or surfaced as a raw string when the payload was deliberately
7
+ * stored as plain text). Powers the dashboard replay scrubber.
8
+ *
9
+ * Kept deliberately minimal — pagination, filtering by kind, and
10
+ * cross-session timelines belong on the API route (`./api/routes/
11
+ * sessions.ts`) above, not in this reader.
12
+ */
13
+ import type { SessionEventKind } from './capture.js';
14
+ export interface SessionEventRow {
15
+ id: number;
16
+ session_id: string;
17
+ project: string | null;
18
+ ts: string;
19
+ kind: SessionEventKind;
20
+ actor: string | null;
21
+ /** Parsed JSON (object/array/primitive) or raw string fall-through. */
22
+ payload: unknown;
23
+ duration_ms: number | null;
24
+ audit_id: number | null;
25
+ created_at: string;
26
+ }
27
+ /** All events for a session, in `ts` ascending order. */
28
+ export declare function getTimeline(sessionId: string): SessionEventRow[];
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Session capture — read side.
3
+ *
4
+ * `getTimeline(sessionId)` returns every event for a session, sorted
5
+ * by `ts` ascending, with payload JSON.parse'd back into a JS value
6
+ * (or surfaced as a raw string when the payload was deliberately
7
+ * stored as plain text). Powers the dashboard replay scrubber.
8
+ *
9
+ * Kept deliberately minimal — pagination, filtering by kind, and
10
+ * cross-session timelines belong on the API route (`./api/routes/
11
+ * sessions.ts`) above, not in this reader.
12
+ */
13
+ import { getDatabase } from '../database/init.js';
14
+ /**
15
+ * Reverse of `capture.serialisePayload`: try JSON.parse, fall back to
16
+ * the raw string if the payload was stored as plain text. We don't
17
+ * throw on un-parseable — the importer may legitimately ingest non-JSON
18
+ * tool output, and a replay viewer that crashes on bad data is useless.
19
+ */
20
+ function deserialisePayload(text) {
21
+ try {
22
+ return JSON.parse(text);
23
+ }
24
+ catch {
25
+ return text;
26
+ }
27
+ }
28
+ function hydrate(row) {
29
+ return {
30
+ id: row.id,
31
+ session_id: row.session_id,
32
+ project: row.project,
33
+ ts: row.ts,
34
+ kind: row.kind,
35
+ actor: row.actor,
36
+ payload: deserialisePayload(row.payload),
37
+ duration_ms: row.duration_ms,
38
+ audit_id: row.audit_id,
39
+ created_at: row.created_at,
40
+ };
41
+ }
42
+ /** All events for a session, in `ts` ascending order. */
43
+ export function getTimeline(sessionId) {
44
+ const db = getDatabase();
45
+ const rows = db
46
+ .prepare(`SELECT id, session_id, project, ts, kind, actor, payload, duration_ms, audit_id, created_at
47
+ FROM session_events
48
+ WHERE session_id = ?
49
+ ORDER BY ts ASC, id ASC`)
50
+ .all(sessionId);
51
+ return rows.map(hydrate);
52
+ }