shieldcortex 4.40.0 → 4.42.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 (349) hide show
  1. package/dashboard/.next/standalone/dashboard/.next/BUILD_ID +1 -1
  2. package/dashboard/.next/standalone/dashboard/.next/build-manifest.json +2 -2
  3. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/admin/page.js +2 -2
  4. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/admin/page.js.nft.json +1 -1
  5. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/admin/page_client-reference-manifest.js +1 -1
  6. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/cloud/page.js +2 -2
  7. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/cloud/page.js.nft.json +1 -1
  8. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/cloud/page_client-reference-manifest.js +1 -1
  9. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/capture/page.js +2 -2
  10. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/capture/page.js.nft.json +1 -1
  11. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/capture/page_client-reference-manifest.js +1 -1
  12. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/graph/page.js +2 -2
  13. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/graph/page.js.nft.json +1 -1
  14. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/graph/page_client-reference-manifest.js +1 -1
  15. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page/react-loadable-manifest.json +1 -1
  16. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page.js +2 -2
  17. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page.js.nft.json +1 -1
  18. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page_client-reference-manifest.js +1 -1
  19. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/recall/page.js +2 -2
  20. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/recall/page.js.nft.json +1 -1
  21. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/recall/page_client-reference-manifest.js +1 -1
  22. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/replay/page.js +2 -2
  23. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/replay/page.js.nft.json +1 -1
  24. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/replay/page_client-reference-manifest.js +1 -1
  25. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/review/page.js +2 -2
  26. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/review/page.js.nft.json +1 -1
  27. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/review/page_client-reference-manifest.js +1 -1
  28. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/timeline/page.js +2 -2
  29. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/timeline/page.js.nft.json +1 -1
  30. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/timeline/page_client-reference-manifest.js +1 -1
  31. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/overview/page.js +2 -2
  32. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/overview/page.js.nft.json +1 -1
  33. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/overview/page_client-reference-manifest.js +1 -1
  34. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/audit/page.js +2 -2
  35. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/audit/page.js.nft.json +1 -1
  36. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/audit/page_client-reference-manifest.js +1 -1
  37. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/intercepts/page.js +2 -2
  38. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/intercepts/page.js.nft.json +1 -1
  39. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/intercepts/page_client-reference-manifest.js +1 -1
  40. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/iron-dome/page.js +2 -2
  41. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/iron-dome/page.js.nft.json +1 -1
  42. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/iron-dome/page_client-reference-manifest.js +1 -1
  43. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/page.js +2 -2
  44. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/page.js.nft.json +1 -1
  45. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/page_client-reference-manifest.js +1 -1
  46. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/policies/page.js +2 -2
  47. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/policies/page.js.nft.json +1 -1
  48. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/policies/page_client-reference-manifest.js +1 -1
  49. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/quarantine/page.js +2 -2
  50. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/quarantine/page.js.nft.json +1 -1
  51. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/quarantine/page_client-reference-manifest.js +1 -1
  52. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/settings/page.js +2 -2
  53. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
  54. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  55. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/page.js +2 -2
  56. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/page.js.nft.json +1 -1
  57. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/page_client-reference-manifest.js +1 -1
  58. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/xray/page.js +2 -2
  59. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/xray/page.js.nft.json +1 -1
  60. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/xray/page_client-reference-manifest.js +1 -1
  61. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/xray/page.js +2 -2
  62. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/xray/page.js.nft.json +1 -1
  63. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/xray/page_client-reference-manifest.js +1 -1
  64. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.html +2 -2
  65. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.rsc +1 -1
  66. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  67. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  68. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  69. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  70. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  71. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found/page.js +1 -1
  72. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found/page.js.nft.json +1 -1
  73. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  74. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.html +1 -1
  75. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.rsc +15 -14
  76. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +15 -14
  77. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_head.segment.rsc +3 -3
  78. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_index.segment.rsc +7 -6
  79. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  80. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  81. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  82. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.html +1 -1
  83. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.rsc +21 -22
  84. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin/__PAGE__.segment.rsc +1 -1
  85. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin.segment.rsc +1 -1
  86. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
  87. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_full.segment.rsc +21 -22
  88. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  89. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_index.segment.rsc +7 -6
  90. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
  91. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.html +1 -1
  92. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.rsc +21 -22
  93. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud/__PAGE__.segment.rsc +1 -1
  94. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud.segment.rsc +1 -1
  95. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
  96. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_full.segment.rsc +21 -22
  97. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_head.segment.rsc +1 -1
  98. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_index.segment.rsc +7 -6
  99. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_tree.segment.rsc +2 -2
  100. package/dashboard/.next/standalone/dashboard/.next/server/app/index.html +1 -1
  101. package/dashboard/.next/standalone/dashboard/.next/server/app/index.rsc +16 -15
  102. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  103. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_full.segment.rsc +16 -15
  104. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_head.segment.rsc +1 -1
  105. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_index.segment.rsc +7 -6
  106. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  107. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.html +1 -1
  108. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.rsc +22 -24
  109. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture/__PAGE__.segment.rsc +1 -1
  110. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture.segment.rsc +1 -1
  111. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  112. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
  113. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_full.segment.rsc +22 -24
  114. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_head.segment.rsc +1 -1
  115. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_index.segment.rsc +7 -6
  116. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_tree.segment.rsc +2 -2
  117. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.html +1 -1
  118. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.rsc +22 -24
  119. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph/__PAGE__.segment.rsc +1 -1
  120. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph.segment.rsc +1 -1
  121. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  122. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
  123. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_full.segment.rsc +22 -24
  124. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_head.segment.rsc +1 -1
  125. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_index.segment.rsc +7 -6
  126. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_tree.segment.rsc +2 -2
  127. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.html +1 -1
  128. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.rsc +22 -24
  129. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall/__PAGE__.segment.rsc +1 -1
  130. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall.segment.rsc +1 -1
  131. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  132. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
  133. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_full.segment.rsc +22 -24
  134. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_head.segment.rsc +1 -1
  135. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_index.segment.rsc +7 -6
  136. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_tree.segment.rsc +2 -2
  137. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.html +1 -1
  138. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.rsc +17 -17
  139. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory/replay/__PAGE__.segment.rsc +2 -2
  140. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory/replay.segment.rsc +1 -1
  141. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  142. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
  143. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_full.segment.rsc +17 -17
  144. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_head.segment.rsc +1 -1
  145. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_index.segment.rsc +7 -6
  146. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_tree.segment.rsc +2 -2
  147. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.html +1 -1
  148. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.rsc +22 -24
  149. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review/__PAGE__.segment.rsc +1 -1
  150. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review.segment.rsc +1 -1
  151. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  152. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
  153. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_full.segment.rsc +22 -24
  154. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_head.segment.rsc +1 -1
  155. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_index.segment.rsc +7 -6
  156. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_tree.segment.rsc +2 -2
  157. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.html +1 -1
  158. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.rsc +22 -24
  159. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline/__PAGE__.segment.rsc +1 -1
  160. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline.segment.rsc +1 -1
  161. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  162. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
  163. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_full.segment.rsc +22 -24
  164. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_head.segment.rsc +1 -1
  165. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_index.segment.rsc +7 -6
  166. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_tree.segment.rsc +2 -2
  167. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.html +1 -1
  168. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.rsc +25 -26
  169. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory/__PAGE__.segment.rsc +2 -2
  170. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  171. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
  172. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_full.segment.rsc +25 -26
  173. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_head.segment.rsc +1 -1
  174. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_index.segment.rsc +7 -6
  175. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_tree.segment.rsc +2 -2
  176. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.html +1 -1
  177. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.rsc +26 -26
  178. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview/__PAGE__.segment.rsc +2 -2
  179. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview.segment.rsc +1 -1
  180. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
  181. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_full.segment.rsc +26 -26
  182. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_head.segment.rsc +1 -1
  183. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_index.segment.rsc +7 -6
  184. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_tree.segment.rsc +2 -2
  185. package/dashboard/.next/standalone/dashboard/.next/server/app/page.js +1 -1
  186. package/dashboard/.next/standalone/dashboard/.next/server/app/page.js.nft.json +1 -1
  187. package/dashboard/.next/standalone/dashboard/.next/server/app/page_client-reference-manifest.js +1 -1
  188. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.html +1 -1
  189. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.rsc +22 -24
  190. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit/__PAGE__.segment.rsc +1 -1
  191. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit.segment.rsc +1 -1
  192. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  193. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
  194. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_full.segment.rsc +22 -24
  195. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_head.segment.rsc +1 -1
  196. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_index.segment.rsc +7 -6
  197. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_tree.segment.rsc +2 -2
  198. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.html +1 -1
  199. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.rsc +22 -26
  200. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts/__PAGE__.segment.rsc +1 -1
  201. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts.segment.rsc +1 -1
  202. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  203. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
  204. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_full.segment.rsc +22 -26
  205. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_head.segment.rsc +1 -1
  206. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_index.segment.rsc +7 -6
  207. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_tree.segment.rsc +2 -2
  208. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.html +1 -1
  209. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.rsc +22 -26
  210. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome/__PAGE__.segment.rsc +1 -1
  211. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome.segment.rsc +1 -1
  212. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  213. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
  214. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_full.segment.rsc +22 -26
  215. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_head.segment.rsc +1 -1
  216. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_index.segment.rsc +7 -6
  217. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_tree.segment.rsc +2 -2
  218. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.html +1 -1
  219. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.rsc +22 -26
  220. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies/__PAGE__.segment.rsc +1 -1
  221. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies.segment.rsc +1 -1
  222. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  223. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
  224. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_full.segment.rsc +22 -26
  225. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_head.segment.rsc +1 -1
  226. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_index.segment.rsc +7 -6
  227. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_tree.segment.rsc +2 -2
  228. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.html +1 -1
  229. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.rsc +22 -26
  230. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine/__PAGE__.segment.rsc +1 -1
  231. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine.segment.rsc +1 -1
  232. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  233. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
  234. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_full.segment.rsc +22 -26
  235. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_head.segment.rsc +1 -1
  236. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_index.segment.rsc +7 -6
  237. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_tree.segment.rsc +2 -2
  238. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.html +1 -1
  239. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.rsc +24 -23
  240. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection/__PAGE__.segment.rsc +2 -2
  241. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  242. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
  243. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_full.segment.rsc +24 -23
  244. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_head.segment.rsc +1 -1
  245. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_index.segment.rsc +7 -6
  246. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_tree.segment.rsc +2 -2
  247. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.html +1 -1
  248. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.rsc +24 -23
  249. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings/__PAGE__.segment.rsc +2 -2
  250. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings.segment.rsc +1 -1
  251. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
  252. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_full.segment.rsc +24 -23
  253. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  254. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_index.segment.rsc +7 -6
  255. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  256. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.html +1 -1
  257. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.rsc +22 -24
  258. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray/__PAGE__.segment.rsc +1 -1
  259. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray.segment.rsc +1 -1
  260. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +1 -1
  261. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
  262. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_full.segment.rsc +22 -24
  263. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_head.segment.rsc +1 -1
  264. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_index.segment.rsc +7 -6
  265. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_tree.segment.rsc +2 -2
  266. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.html +1 -1
  267. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.rsc +21 -22
  268. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain/__PAGE__.segment.rsc +1 -1
  269. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +1 -1
  270. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
  271. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_full.segment.rsc +21 -22
  272. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_head.segment.rsc +1 -1
  273. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_index.segment.rsc +7 -6
  274. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_tree.segment.rsc +2 -2
  275. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.html +1 -1
  276. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.rsc +23 -24
  277. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray/__PAGE__.segment.rsc +2 -2
  278. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray.segment.rsc +1 -1
  279. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
  280. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_full.segment.rsc +23 -24
  281. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_head.segment.rsc +1 -1
  282. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_index.segment.rsc +7 -6
  283. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_tree.segment.rsc +2 -2
  284. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__618ebef2._.js +3 -0
  285. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__71aebd22._.js +3 -0
  286. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/{[root-of-the-server]__801e783f._.js → [root-of-the-server]__83e0e1ef._.js} +2 -2
  287. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/{[root-of-the-server]__8930a320._.js → [root-of-the-server]__b16387ef._.js} +2 -2
  288. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_01e81e69._.js +1 -1
  289. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_1b261cd5._.js +1 -1
  290. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/{dashboard_5ca514a1._.js → dashboard_3956b0fc._.js} +2 -2
  291. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_44a1539a._.js +1 -1
  292. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_4835c323._.js +1 -1
  293. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_599483f2._.js +1 -1
  294. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_609078b2._.js +1 -1
  295. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_987d0aa0._.js +3 -0
  296. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_a6877bbc._.js +1 -1
  297. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_c219bf07._.js +4 -4
  298. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_48aa48e3._.js +3 -0
  299. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_73b12760._.js +3 -0
  300. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_app_(dashboard)_overview_page_tsx_8c105626._.js +1 -1
  301. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_components_xray_XRayOverview_tsx_ceba698e._.js +1 -1
  302. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_lib_e099bffc._.js +3 -0
  303. package/dashboard/.next/standalone/dashboard/.next/server/pages/404.html +1 -1
  304. package/dashboard/.next/standalone/dashboard/.next/server/pages/500.html +2 -2
  305. package/dashboard/.next/standalone/dashboard/.next/static/chunks/0813ee664e620e80.js +1 -0
  306. package/dashboard/.next/standalone/dashboard/.next/static/chunks/3459bf5a60cec027.js +1 -0
  307. package/dashboard/.next/standalone/dashboard/.next/static/chunks/{8a5b61fd5e1bbcfa.js → 367944cb40d1e6d7.js} +1 -1
  308. package/dashboard/.next/standalone/dashboard/.next/static/chunks/38b428b85257d41d.js +1 -0
  309. package/dashboard/.next/standalone/dashboard/.next/static/chunks/{8eabb856fd0e50b7.js → 38fa196371b9e90b.js} +1 -1
  310. package/dashboard/.next/standalone/dashboard/.next/static/chunks/41c550a60ee25280.js +1 -0
  311. package/dashboard/.next/standalone/dashboard/.next/static/chunks/67b5f6f3d4c911c7.js +1 -0
  312. package/dashboard/.next/standalone/dashboard/.next/static/chunks/{4ddb24d8ce3b8617.js → 699fd12fecbe2007.js} +1 -1
  313. package/dashboard/.next/standalone/dashboard/.next/static/chunks/75f14b915412d5cf.js +1 -0
  314. package/dashboard/.next/standalone/dashboard/.next/static/chunks/9299edebc536e6de.js +1 -0
  315. package/dashboard/.next/standalone/dashboard/.next/static/chunks/9b02aba35b7ce4b7.js +15 -0
  316. package/dashboard/.next/standalone/dashboard/.next/static/chunks/9dd510e6693ca6ac.js +1 -0
  317. package/dashboard/.next/standalone/dashboard/.next/static/chunks/d25030e49454bb56.css +1 -0
  318. package/dashboard/.next/standalone/dashboard/.next/static/chunks/dcfd5a3eb20885c2.js +1 -0
  319. package/dashboard/.next/standalone/dashboard/.next/static/chunks/e18095d552836b96.js +1 -0
  320. package/dashboard/.next/standalone/dashboard/.next/static/chunks/ea9275fe0f92b82c.js +1 -0
  321. package/dist/api/events.js +2 -0
  322. package/dist/api/redact-response.d.ts +15 -0
  323. package/dist/api/redact-response.js +19 -0
  324. package/dist/api/routes/memories.js +86 -21
  325. package/dist/api/visualization-server.js +15 -4
  326. package/dist/defence/trust/read-guard.d.ts +42 -0
  327. package/dist/defence/trust/read-guard.js +120 -0
  328. package/package.json +1 -1
  329. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__7d500b5a._.js +0 -3
  330. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__bea9887b._.js +0 -3
  331. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_14d63e36._.js +0 -3
  332. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_92148040._.js +0 -3
  333. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_861871f9._.js +0 -3
  334. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_components_de7ac4f9._.js +0 -3
  335. package/dashboard/.next/standalone/dashboard/.next/static/chunks/1600063be806f47c.js +0 -1
  336. package/dashboard/.next/standalone/dashboard/.next/static/chunks/2d55e8cb58d80df0.js +0 -1
  337. package/dashboard/.next/standalone/dashboard/.next/static/chunks/3729c748a4361c1f.js +0 -1
  338. package/dashboard/.next/standalone/dashboard/.next/static/chunks/61aaa0c660c32b96.js +0 -1
  339. package/dashboard/.next/standalone/dashboard/.next/static/chunks/69074f4a9b09c31d.js +0 -1
  340. package/dashboard/.next/standalone/dashboard/.next/static/chunks/881477f5d01c1d9b.js +0 -1
  341. package/dashboard/.next/standalone/dashboard/.next/static/chunks/98ae91e0a6f5d317.css +0 -1
  342. package/dashboard/.next/standalone/dashboard/.next/static/chunks/a95dbcc1842ad9d7.js +0 -1
  343. package/dashboard/.next/standalone/dashboard/.next/static/chunks/cfbc41857d998b74.js +0 -15
  344. package/dashboard/.next/standalone/dashboard/.next/static/chunks/d2837977142371d5.js +0 -1
  345. package/dashboard/.next/standalone/dashboard/.next/static/chunks/de9f5ba8bc67d4d9.js +0 -1
  346. package/dashboard/.next/standalone/dashboard/.next/static/chunks/e8884e7f3b85fd0b.js +0 -1
  347. /package/dashboard/.next/standalone/dashboard/.next/static/{UA_86bJ-tNIyDXr-i0gK6 → 4z2JAhKnao1A-q8Eo4wzd}/_buildManifest.js +0 -0
  348. /package/dashboard/.next/standalone/dashboard/.next/static/{UA_86bJ-tNIyDXr-i0gK6 → 4z2JAhKnao1A-q8Eo4wzd}/_clientMiddlewareManifest.json +0 -0
  349. /package/dashboard/.next/standalone/dashboard/.next/static/{UA_86bJ-tNIyDXr-i0gK6 → 4z2JAhKnao1A-q8Eo4wzd}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,87927,e=>{"use strict";let t="shieldcortex.graph.intensity",r=new Set(["subtle","moderate","strong"]);function a(e){let a=e??window.localStorage;if(!a)return"moderate";let l=a.getItem(t);return"string"==typeof l&&r.has(l)?l:"moderate"}function l(e,r){let a=r??window.localStorage;a&&(a.setItem(t,e),"u">typeof CustomEvent&&window.dispatchEvent(new CustomEvent("shieldcortex:intensity-changed",{detail:e})))}function n(){return!!window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}e.s(["INTENSITY",0,{subtle:{breathPeriod:6e3,breathAmp:.03,particleCap:20,decayCreate:.98,decayRecall:.96},moderate:{breathPeriod:3e3,breathAmp:.08,particleCap:60,decayCreate:.96,decayRecall:.93},strong:{breathPeriod:1600,breathAmp:.14,particleCap:120,decayCreate:.94,decayRecall:.9}},"REDUCED_INTENSITY",0,{breathPeriod:1/0,breathAmp:0,particleCap:0,decayCreate:0,decayRecall:0},"isReducedMotion",()=>n,"loadIntensity",()=>a,"saveIntensity",()=>l])},68595,e=>{"use strict";var t=e.i(27493),r=e.i(4),a=e.i(6847),l=e.i(17278),n=e.i(16467),s=e.i(95659),i=e.i(74133);let o=(e,t,r)=>Math.min(r,Math.max(t,e)),c="#7dd3fc";function d(e){return"string"==typeof e?e:e.id}var u=e.i(87927);class h{level;settings;knownNodes=new Set;phase=new Map;spikeEnergy=new Map;recallEnergy=new Map;breathOffset=new Map;now;lastFrameAt=0;constructor(e){this.level=e.intensity,this.settings=u.INTENSITY[e.intensity],this.now=e.now??("u">typeof performance?()=>performance.now():Date.now)}setIntensity(e){this.level=e,this.settings=u.INTENSITY[e]}observeNodes(e){for(let t of e)this.knownNodes.has(t)||(this.knownNodes.add(t),this.phase.set(t,function(e){let t=0x811c9dc5;for(let r=0;r<e.length;r++)t^=e.charCodeAt(r),t=0x1000193*t>>>0;return t/0x100000000}(t)*Math.PI*2))}dispatch(e){this.knownNodes.has(e.entityId)&&("memory.created"===e.type&&this.spikeEnergy.set(e.entityId,1),"memory.accessed"===e.type&&this.recallEnergy.set(e.entityId,1))}onFrame(e){this.lastFrameAt=e;let{breathPeriod:t,breathAmp:r}=this.settings,a=2*Math.PI/t;for(let t of this.knownNodes){let l=this.phase.get(t)??0;this.breathOffset.set(t,Math.sin(a*e+l)*r)}let l=this.settings.decayCreate;for(let[e,t]of this.spikeEnergy){let r=t*l;r<.001?this.spikeEnergy.delete(e):this.spikeEnergy.set(e,r)}let n=this.settings.decayRecall;for(let[e,t]of this.recallEnergy){let r=t*n;r<.001?this.recallEnergy.delete(e):this.recallEnergy.set(e,r)}}getEnergy(e){return this.knownNodes.has(e)?(this.breathOffset.get(e)??0)+(this.spikeEnergy.get(e)??0):0}getRecallEnergy(e){return this.knownNodes.has(e)?this.recallEnergy.get(e)??0:0}pickParticleEdges(e,t,r){let a=r??this.settings.particleCap;if(a<=0||0===e.length)return[];let l=e=>"string"==typeof e?e:e.id,n=e.map(e=>{let r=l(e.source),a=l(e.target);return{link:e,score:Math.max(Math.max(this.getEnergy(r),this.getRecallEnergy(r)),Math.max(this.getEnergy(a),this.getRecallEnergy(a))),anchorAdjacent:+(null!==t&&(r===t||a===t))}});return n.sort((e,t)=>t.score!==e.score?t.score-e.score:t.anchorAdjacent-e.anchorAdjacent),n.slice(0,a).map(e=>e.link)}}function m({driver:e}){let[a,l]=(0,r.useState)("");return"1"===window.localStorage.getItem("SHIELDCORTEX_DEBUG_PULSE")&&e?(0,t.jsxs)("div",{style:{position:"absolute",bottom:8,right:8,padding:8,background:"#0a0d14cc",color:"#e2e8f0",fontSize:12,border:"1px solid #1e293b",zIndex:10},children:[(0,t.jsx)("div",{style:{marginBottom:4,opacity:.6},children:"pulse debug"}),(0,t.jsx)("input",{value:a,onChange:e=>l(e.target.value),placeholder:"entity id",style:{width:140,background:"#06070d",color:"#e2e8f0",border:"1px solid #1e293b",padding:"2px 4px"}}),(0,t.jsxs)("div",{style:{display:"flex",gap:4,marginTop:4},children:[(0,t.jsx)("button",{onClick:()=>e.dispatch({type:"memory.created",entityId:a}),children:"created"}),(0,t.jsx)("button",{onClick:()=>e.dispatch({type:"memory.accessed",entityId:a}),children:"accessed"})]})]}):null}var f=e.i(22534),p=e.i(35372);let y=f.default.env.NEXT_PUBLIC_API_URL||"http://localhost:3001";var g=e.i(53655);let x=(0,i.default)(()=>e.A(23531),{loadableGenerated:{modules:[23272]},ssr:!1}),b=e=>g.REGIONS[(0,g.regionForCluster)(e)].hex;function v({clusters:e,allTriples:a,totalEntities:l,totalConnections:n,width:s,height:i,onSelectEntity:f,selectedEntityId:g}){let v=(0,r.useRef)(void 0),C=(0,r.useRef)(null),j=(0,r.useRef)(1),S=(0,r.useRef)(null),[k,w]=(0,r.useState)(null),[N,M]=(0,r.useState)(null),[E,I]=(0,r.useState)(null),[P,R]=(0,r.useState)("moderate"),T=(0,r.useMemo)(()=>(0,u.isReducedMotion)(),[]),A=(0,r.useMemo)(()=>T?u.REDUCED_INTENSITY:u.INTENSITY[P],[T,P]),F=(0,r.useMemo)(()=>(function(e){let t=new Map;for(let r of e)for(let e of r.entities)t.set(e.id,r.type);return t})(e),[e]),$=(0,r.useMemo)(()=>{let t=function(e,t){let r=new Map;for(let a of e){let e=t.get(a.source),l=t.get(a.target);if(e&&l&&e!==l){let t=[e,l].sort().join("::");r.set(t,(r.get(t)||0)+1)}}return r}(a,F),r=e.map((t,r)=>{let a=r/e.length*Math.PI*2-Math.PI/2;return{id:`cluster::${t.type}`,name:t.type,type:t.type,memoryCount:t.entities.reduce((e,t)=>e+t.memoryCount,0),colour:b(t.type),isCluster:!0,clusterType:t.type,entityCount:t.entities.length,x:150*Math.cos(a),y:150*Math.sin(a)}}),l=[];for(let[e,r]of t.entries()){let[t,a]=e.split("::");r>5&&l.push({source:`cluster::${t}`,target:`cluster::${a}`,weight:Math.min(r/100,1)})}return{nodes:r,links:l}},[e,a,F]),_=(0,r.useMemo)(()=>{if(!N)return null;let t=e.find(e=>e.type===N);if(!t)return null;let r=t.entities.slice(0,100),l=new Set(r.map(e=>e.id)),n=r.map(e=>({id:e.id,name:e.name,type:e.type,memoryCount:e.memoryCount,colour:b(e.type)})),s=new Map;for(let e of a){if(l.has(e.source)&&!l.has(e.target)){let t=F.get(e.target);t&&t!==N&&s.set(t,(s.get(t)||0)+1)}if(l.has(e.target)&&!l.has(e.source)){let t=F.get(e.source);t&&t!==N&&s.set(t,(s.get(t)||0)+1)}}for(let[e,t]of s.entries())t>2&&n.push({id:`ghost::${e}`,name:e,type:e,memoryCount:t,colour:b(e),isCluster:!0,clusterType:e,entityCount:t});let i=[],o=new Set;for(let e of a){let t=l.has(e.source),r=l.has(e.target);if(t&&r){let t=`${e.source}::${e.target}`;o.has(t)||(o.add(t),i.push({source:e.source,target:e.target,predicate:e.predicate}))}else if(t&&!r){let t=F.get(e.target);if(t&&t!==N&&s.has(t)){let r=`${e.source}::ghost::${t}`;o.has(r)||(o.add(r),i.push({source:e.source,target:`ghost::${t}`}))}}else if(r&&!t){let t=F.get(e.source);if(t&&t!==N&&s.has(t)){let r=`ghost::${t}::${e.target}`;o.has(r)||(o.add(r),i.push({source:`ghost::${t}`,target:e.target}))}}}return{nodes:n,links:i}},[N,e,a,F]),D=N&&_?_:$,B=(0,r.useMemo)(()=>{let e=new Map;for(let t of D.links){let r="object"==typeof t.source?String(t.source.id):String(t.source),a="object"==typeof t.target?String(t.target.id):String(t.target);e.set(r,(e.get(r)??0)+1),e.set(a,(e.get(a)??0)+1)}return e},[D.links]);(0,r.useEffect)(()=>{let e=(0,u.loadIntensity)();R(e);let t=new h({intensity:e});w(t);let r=e=>{let r=e.detail;("subtle"===r||"moderate"===r||"strong"===r)&&(R(r),t.setIntensity(r))};return window.addEventListener("shieldcortex:intensity-changed",r),()=>{window.removeEventListener("shieldcortex:intensity-changed",r)}},[]),(0,r.useEffect)(()=>{k?.observeNodes(D.nodes.map(e=>e.id))},[k,D.nodes]),function(e,t=!0){let{subscribe:a,isConnected:l}=(0,p.useMemoryWebSocketContext)(),n=(0,r.useRef)(null);(0,r.useEffect)(()=>{if(e&&t)return a(t=>{if(!t?.type||!t.data)return;let r="memory_created"===t.type?"memory.created":"memory_accessed"===t.type?"memory.accessed":null;if(r)for(let a of t.data.entity_ids??[])e.dispatch({type:r,entityId:String(a)})})},[e,t,a]),(0,r.useEffect)(()=>{if(!e||!t||l)return;let r=!1,a=setInterval(()=>{let t=n.current;fetch(`${y}/api/memories?mode=recent&limit=50`,{credentials:"include"}).then(e=>e.ok?e.json():null).then(a=>{if(!a||r)return;let l=a.memories??[];for(let r of l)if(!t||!r.created_at||!(r.created_at<=t))for(let t of r.entity_ids??[])e.dispatch({type:"memory.created",entityId:String(t)});l[0]?.created_at&&(n.current=l[0].created_at)}).catch(()=>{})},1e4);return()=>{r=!0,clearInterval(a)}},[e,t,l])}(k,!0),(0,r.useEffect)(()=>{let e=function(e,t){if(0===e.length)return null;let r=new Set(e.map(e=>e.id)),a=new Map;for(let e of t){let t=d(e.source),l=d(e.target);r.has(t)&&a.set(t,(a.get(t)??0)+1),r.has(l)&&a.set(l,(a.get(l)??0)+1)}let l=null,n=0;for(let t of e){let e=t.memoryCount*(a.get(t.id)??0);0!==e&&(null===l||e>n||e===n&&0>t.name.localeCompare(l.name))&&(l=t,n=e)}if(l)return l.id;let s=0;for(let t of e)0!==t.memoryCount&&(null===l||t.memoryCount>s||t.memoryCount===s&&0>t.name.localeCompare(l.name))&&(l=t,s=t.memoryCount);return l?.id??null}(D.nodes.map(e=>({id:e.id,name:e.name,memoryCount:e.memoryCount})),D.links);e!==E&&(!function(e,t,r){let a=e.find(e=>e.id===t);if(a){if(r&&r!==t){let t=e.find(e=>e.id===r);t&&(t.fx=null,t.fy=null)}a.fx=0,a.fy=0}}(D.nodes,e??"",E),I(e))},[D.nodes,D.links,E]),(0,r.useEffect)(()=>{let e=v.current;e&&(N?(e.d3Force("charge")?.strength(-80),e.d3Force("link")?.distance(40),e.d3Force("center")?.strength(.05)):(e.d3Force("charge")?.strength(-2e3),e.d3Force("link")?.distance(180),e.d3Force("center")?.strength(.03)))},[N,D]);let O=(0,r.useRef)(!1);(0,r.useEffect)(()=>{if(O.current||!D.nodes.length)return;O.current=!0;let e=setTimeout(()=>v.current?.zoomToFit(600*!T,40),1500);return()=>clearTimeout(e)},[D.nodes.length,T]);let L=(0,r.useCallback)(({k:e})=>{j.current=e},[]),z=(0,r.useMemo)(()=>(function(e,t={}){let r=new Map;return{handleNodeDragEnd(e){void 0!==e.x&&void 0!==e.y&&(e.fx=e.x,e.fy=e.y)},handleNodeClick(a,l){if(l.shiftKey&&null!==a.fx&&void 0!==a.fx)return a.fx=null,a.fy=null,t.onUnpin?.(String(a.id)),r.delete(String(a.id)),"unpin";let n=String(a.id),s=performance.now(),i=r.get(n)??0;return(r.set(n,s),s-i<=300)?(void 0!==a.x&&void 0!==a.y&&(e.current?.centerAt(a.x,a.y,600),e.current?.zoom(2,600)),r.delete(n),"double-click"):"single-click"},handleBackgroundDoubleClick(t){t(),e.current?.zoomToFit(600,80)}}})(v),[]),G=(0,r.useCallback)((e,t)=>{"single-click"===z.handleNodeClick(e,t)&&(e.isCluster?(M((e.clusterType||e.type).replace("ghost::","")),f?.(null)):f?.({id:e.id,name:e.name,type:e.type,memoryCount:e.memoryCount}))},[z,f]),U=(0,r.useCallback)(()=>{N&&(M(null),f?.(null))},[N,f]),q=(0,r.useCallback)(()=>{z.handleBackgroundDoubleClick(()=>{M(null),f?.(null)})},[z,f]),W=(0,r.useCallback)(e=>{let t=e?String(e.id):null;if(C.current=t,!t){S.current=null;return}let r=new Set([t]);for(let e of D.links){let a="object"==typeof e.source?String(e.source.id):String(e.source),l="object"==typeof e.target?String(e.target.id):String(e.target);a===t?r.add(l):l===t&&r.add(a)}S.current=r},[D.links]),K=(0,r.useCallback)((e,t,r)=>{if(void 0===e.x||void 0===e.y)return;let a=String(e.id),l=a===C.current,n=null!=g&&a===g,s=j.current;if(t.save(),n&&!e.isCluster){let r=.8+Math.min(.4*Math.log2((e.memoryCount||1)+1),2.5),a=t.createRadialGradient(e.x,e.y,r,e.x,e.y,8*r);a.addColorStop(0,"#ffffff18"),a.addColorStop(1,"#ffffff00"),t.beginPath(),t.arc(e.x,e.y,8*r,0,2*Math.PI),t.fillStyle=a,t.fill()}if(e.isCluster){!function(e,t,r,a){let l=t.entityCount||5,n=Math.min(15+3*Math.sqrt(l),60),s=3*n,i=e.createRadialGradient(t.x,t.y,.5*n,t.x,t.y,s);i.addColorStop(0,t.colour+"15"),i.addColorStop(.4,t.colour+"08"),i.addColorStop(1,t.colour+"00"),e.beginPath(),e.arc(t.x,t.y,s,0,2*Math.PI),e.fillStyle=i,e.fill();let o=e.createRadialGradient(t.x,t.y,0,t.x,t.y,.8*n);o.addColorStop(0,t.colour+"28"),o.addColorStop(.6,t.colour+"10"),o.addColorStop(1,t.colour+"02"),e.beginPath(),e.arc(t.x,t.y,.8*n,0,2*Math.PI),e.fillStyle=o,e.fill();let c=Math.min(l,40),d=t.id.charCodeAt(t.id.length-1);for(let r=0;r<c;r++){let a=(d+137.508*r)%360*(Math.PI/180),l=.1*n+.85*n*Math.pow((7*d+31*r)%100/100,.6),s=t.x+Math.cos(a)*l,i=t.y+Math.sin(a)*l,o=.5+(17*r+d)%4*.3;e.beginPath(),e.arc(s,i,o,0,2*Math.PI),e.fillStyle=t.colour+(r<5?"dd":r<15?"88":"44"),e.fill()}a&&(e.beginPath(),e.arc(t.x,t.y,n,0,2*Math.PI),e.strokeStyle=t.colour+"50",e.lineWidth=1.5,e.setLineDash([4,4]),e.stroke(),e.setLineDash([]));let u=Math.max(13/Math.max(r,.3),8);e.font=`600 ${u}px Inter, system-ui, sans-serif`,e.textAlign="center",e.textBaseline="top",e.fillStyle=t.colour+"bb",e.fillText(t.name,t.x,t.y+n+8);let h=Math.max(10/Math.max(r,.3),6);e.font=`400 ${h}px Inter, system-ui, sans-serif`,e.fillStyle="#ffffff30",e.fillText(`${l} entities`,t.x,t.y+n+8+u+3)}(t,e,s,l),t.restore();return}let i=S.current;i&&!i.has(a)&&(t.globalAlpha=.18);let o=k?.getEnergy(a)??0,c=k?.getRecallEnergy(a)??0,d=.8+Math.min(.4*Math.log2((e.memoryCount??0)+1),2.5);if(!function(e,t={}){var r;let a,{ctx:l,node:n,intensity:s,energy:i,recallEnergy:o,isAnchor:c,isSelected:d,baseRadius:u}=e;if(void 0===n.x||void 0===n.y)return;let h=(a=(r={baseRadius:u,energy:i,breathAmp:s.breathAmp}).baseRadius*(1+r.energy*r.breathAmp),Math.max(.2*r.baseRadius,a));t._paintHook?.({nodeId:n.id,radius:h,energy:i,recallEnergy:o});let m=h*(c?5:3.5),f=l.createRadialGradient(n.x,n.y,.2*h,n.x,n.y,m);if(f.addColorStop(0,n.colour+(c?"40":d?"50":"20")),f.addColorStop(1,n.colour+"00"),l.beginPath(),l.arc(n.x,n.y,m,0,2*Math.PI),l.fillStyle=f,l.fill(),o>.05&&(l.beginPath(),l.arc(n.x,n.y,1.6*h,0,2*Math.PI),l.strokeStyle="#a78bfa",l.globalAlpha=Math.min(.7,o),l.lineWidth=1.5,l.stroke(),l.globalAlpha=1),c){l.beginPath(),l.arc(n.x,n.y,h,0,2*Math.PI),l.fillStyle="#d9faf5",l.fill(),l.lineWidth=1.5,l.strokeStyle="#00e5cc",l.stroke();return}l.beginPath(),l.arc(n.x,n.y,h,0,2*Math.PI),l.fillStyle=n.colour,l.fill(),d&&(l.lineWidth=1.5,l.strokeStyle="#ffffff",l.stroke())}({ctx:t,globalScale:r,node:e,intensity:A,energy:o,recallEnergy:c,isAnchor:a===E,isSelected:n,isHovered:l,baseRadius:d}),l&&!n&&a!==E){let r=d*(1+o*A.breathAmp);t.beginPath(),t.arc(e.x,e.y,r,0,2*Math.PI),t.strokeStyle=e.colour,t.lineWidth=.7,t.stroke()}let u=e.memoryCount||1,h=B.get(a)??0,m=i?.has(a)??!1;if(n||l||m||s>=3||s>=1.5&&(u>30||h>3)||s>=.8&&h>6){let r=d*(1+o*A.breathAmp),a=Math.max((n?11:l?10:8)/Math.max(s,.4),5);t.font=`${a}px Inter, system-ui, sans-serif`,t.textAlign="center",t.textBaseline="top";let i=2.5/Math.max(s,.4),c=t.measureText(e.name).width,u=e.y+r+1.5,h=e.x-c/2-i;t.fillStyle="rgba(6,10,20,0.6)","function"==typeof t.roundRect?(t.beginPath(),t.roundRect(h,u,c+2*i,a+i,i),t.fill()):t.fillRect(h,u,c+2*i,a+i),t.fillStyle=n?"#ffffff":l?"#f4f7ff":"#dde6ffcc",t.fillText(e.name,e.x,u+i/2)}t.restore()},[g,E,A,k,B]),Y=(0,r.useCallback)((e,t)=>{let r=e.source,a=e.target;if("object"!=typeof r||"object"!=typeof a||void 0===r.x||void 0===r.y||void 0===a.x||void 0===a.y)return;let l=String(r.id),n=String(a.id),s=k?.getEnergy(l)??0,i=k?.getEnergy(n)??0,d=C.current,u=!d||l===d||n===d;t.save(),u||(t.globalAlpha=.08),function(e){let{ctx:t,link:r,srcEnergy:a,dstEnergy:l}=e,n=r.source,s=r.target;if(void 0===n.x||void 0===n.y||void 0===s.x||void 0===s.y)return;let i=t.globalCompositeOperation;t.globalCompositeOperation="lighter";let d=t.createLinearGradient(n.x,n.y,s.x,s.y);d.addColorStop(0,n.colour??c),d.addColorStop(1,s.colour??c),t.strokeStyle=d,t.globalAlpha=o(.35+.6*Math.max(a,l),0,1),t.lineWidth=o(1+.8*Math.max(a,l),.5,3),t.beginPath(),t.moveTo(n.x,n.y),t.lineTo(s.x,s.y),t.stroke(),t.globalAlpha=1,t.globalCompositeOperation=i}({ctx:t,link:{source:{x:r.x,y:r.y,colour:r.colour,id:l},target:{x:a.x,y:a.y,colour:a.colour,id:n}},srcEnergy:s,dstEnergy:i}),t.restore()},[k]),H=(0,r.useRef)(new Set),Q=(0,r.useCallback)(()=>{if(!k)return;k.onFrame(performance.now());let e=k.pickParticleEdges(D.links.map(e=>({source:String(e.source),target:String(e.target)})),E),t=new Set;for(let r of e)t.add(`${r.source}::${r.target}`);H.current=t},[k,D.links,E]);if(s<10||i<10)return null;let X=N?e.find(e=>e.type===N):null;return(0,t.jsxs)("div",{className:"relative h-full w-full",children:[N&&(0,t.jsxs)("button",{type:"button",onClick:U,className:"absolute left-4 top-4 z-20 flex items-center gap-2 rounded-lg border border-[var(--sc-border)] bg-[var(--sc-bg-deep)]/90 px-3 py-1.5 text-xs text-[var(--sc-text-secondary)] backdrop-blur-sm transition-colors hover:border-[var(--sc-text-muted)] hover:text-[var(--sc-text-primary)]",children:[(0,t.jsx)("span",{children:"←"}),(0,t.jsx)("span",{children:"All clusters"})]}),X&&(0,t.jsxs)("div",{className:"absolute right-4 top-4 z-20 flex items-center gap-2 rounded-lg border border-[var(--sc-border)] bg-[var(--sc-bg-deep)]/90 px-3 py-1.5 backdrop-blur-sm",children:[(0,t.jsx)("span",{className:"h-2.5 w-2.5 rounded-full",style:{backgroundColor:X.colour}}),(0,t.jsx)("span",{className:"text-xs font-semibold text-[var(--sc-text-primary)]",children:X.type}),(0,t.jsxs)("span",{className:"text-xs text-[var(--sc-text-muted)]",children:[X.entities.length," entities"]})]}),(0,t.jsxs)("div",{onDoubleClick:q,style:{position:"relative"},children:[(0,t.jsx)(x,{ref:v,graphData:D,width:s,height:i,backgroundColor:"rgba(0,0,0,0)",nodeCanvasObjectMode:()=>"replace",nodeCanvasObject:K,nodePointerAreaPaint:(e,t,r)=>{let a;void 0!==e.x&&void 0!==e.y&&(a=e.isCluster?Math.min(15+3*Math.sqrt(e.entityCount||5),60):4+Math.min(.5*Math.log2((e.memoryCount||1)+1),3),r.beginPath(),r.arc(e.x,e.y,a,0,2*Math.PI),r.fillStyle=t,r.fill())},linkCanvasObjectMode:()=>"replace",linkCanvasObject:Y,linkDirectionalParticles:e=>{let t="object"==typeof e.source?e.source.id:String(e.source),r="object"==typeof e.target?e.target.id:String(e.target);return 2*!!H.current.has(`${t}::${r}`)},linkDirectionalParticleWidth:1.2,linkDirectionalParticleSpeed:.005,onNodeClick:G,onNodeDragEnd:e=>z.handleNodeDragEnd(e),onNodeHover:W,onBackgroundClick:U,onZoom:L,onRenderFramePre:Q,d3AlphaDecay:.01,d3VelocityDecay:.3,cooldownTicks:300,warmupTicks:80,nodeRelSize:1,enableNodeDrag:!0,enableZoomInteraction:!0,onEngineStop:()=>{!O.current&&D.nodes.length&&(O.current=!0,v.current?.zoomToFit(600*!T,40))}}),(0,t.jsx)(m,{driver:k})]}),(0,t.jsxs)("div",{className:"absolute bottom-3 left-0 right-0 z-10 flex items-center justify-center gap-4 text-[11px] text-[var(--sc-text-muted)]",children:[(0,t.jsxs)("span",{children:[l.toLocaleString()," entities"]}),(0,t.jsx)("span",{className:"text-[var(--sc-border)]",children:"·"}),(0,t.jsxs)("span",{children:[n.toLocaleString()," connections"]}),(0,t.jsx)("span",{className:"text-[var(--sc-border)]",children:"·"}),(0,t.jsxs)("span",{children:[e.length," clusters"]}),X&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{className:"text-[var(--sc-border)]",children:"·"}),(0,t.jsxs)("span",{style:{color:X.colour},children:[X.entities.length," ",N," entities"]})]})]})]})}let C={tool:"cyan",concept:"coral",project:"amber",service:"cyan",person:"cyan"},j={architecture:"cyan",error:"coral",decision:"amber",learning:"cyan",preference:"muted"};function S({entity:e,relatedEntities:r,recentMemories:a,onNavigate:l}){return(0,t.jsxs)("div",{className:"flex flex-col gap-4 overflow-y-auto",children:[(0,t.jsx)(n.GlassCard,{className:"p-4",children:(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)("span",{className:"mt-1 h-3 w-3 shrink-0 rounded-full",style:{backgroundColor:"coral"===C[e.type]?"#ff4d4d":"amber"===C[e.type]?"#f5a623":"#00e5cc"}}),(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsx)("h2",{className:"truncate text-lg font-semibold text-[var(--sc-text-primary)]",children:e.label}),(0,t.jsxs)("div",{className:"mt-1 flex items-center gap-2",children:[(0,t.jsx)(s.Badge,{variant:C[e.type]||"muted",children:e.type}),(0,t.jsxs)("span",{className:"text-xs text-[var(--sc-text-muted)]",children:[e.memoryCount," ",1===e.memoryCount?"memory":"memories"]})]})]})]})}),r.length>0&&(0,t.jsxs)("div",{children:[(0,t.jsx)("h3",{className:"mb-2 text-[11px] font-semibold uppercase tracking-wider text-[var(--sc-text-muted)]",children:"Related Entities"}),(0,t.jsx)(n.GlassCard,{className:"divide-y divide-[var(--sc-border)] p-0",children:r.map(e=>(0,t.jsxs)("button",{onClick:()=>l(e.id),className:"flex w-full items-center justify-between px-4 py-2.5 text-left transition-colors hover:bg-[var(--sc-surface-interactive)]",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,t.jsx)("span",{className:"h-2 w-2 shrink-0 rounded-full",style:{backgroundColor:"coral"===C[e.type]?"#ff4d4d":"amber"===C[e.type]?"#f5a623":"#00e5cc"}}),(0,t.jsx)("span",{className:"truncate text-sm text-[var(--sc-text-primary)]",children:e.label})]}),(0,t.jsx)("span",{className:"shrink-0 text-xs tabular-nums text-[var(--sc-text-muted)]",children:e.memoryCount})]},e.id))})]}),a.length>0&&(0,t.jsxs)("div",{children:[(0,t.jsx)("h3",{className:"mb-2 text-[11px] font-semibold uppercase tracking-wider text-[var(--sc-text-muted)]",children:"Recent Memories"}),(0,t.jsx)("div",{className:"flex flex-col gap-2",children:a.slice(0,8).map(e=>(0,t.jsxs)(n.GlassCard,{className:"p-3",children:[(0,t.jsx)("p",{className:"truncate text-sm text-[var(--sc-text-primary)]",children:e.title}),(0,t.jsxs)("div",{className:"mt-1.5 flex items-center gap-2",children:[(0,t.jsx)(s.Badge,{variant:j[e.category]||"muted",className:"text-[10px]",children:e.category}),(0,t.jsx)("span",{className:"text-[10px] text-[var(--sc-text-muted)]",children:new Date(e.created_at).toLocaleDateString("en-GB",{day:"2-digit",month:"2-digit",year:"numeric"})})]})]},e.id))})]})]})}var k=e.i(45688),w=e.i(88969);let N=f.default.env.NEXT_PUBLIC_API_URL||"http://localhost:3001",M={tool:"#00e5cc",concept:"#ff4d4d",project:"#f59e0b",file:"#5a6480",service:"#a78bfa",person:"#34d399",language:"#a78bfa",pattern:"#fb923c"};function E(){var e,i;let[o,c]=(0,r.useState)(null),[d,u]=(0,r.useState)(""),[h,m]=(0,r.useState)(!1),f=function(e,t=300){let[a,l]=(0,r.useState)(e);return(0,r.useEffect)(()=>{let r=setTimeout(()=>{l(e)},t);return()=>{clearTimeout(r)}},[e,t]),a}(d,250),p=(0,r.useRef)(null),[y,g]=(0,r.useState)({width:600,height:500});(0,r.useEffect)(()=>{let e=p.current;if(!e)return;let t=new ResizeObserver(e=>{for(let t of e){let{width:e,height:r}=t.contentRect;g({width:Math.floor(e),height:Math.max(Math.floor(r),500)})}});return t.observe(e),()=>t.disconnect()},[]);let{data:x,isLoading:b}=(0,k.useQuery)({queryKey:["graph","full"],queryFn:async()=>{let[e,t]=await Promise.all([(0,w.authFetch)(`${N}/api/graph/entities?limit=2000`),(0,w.authFetch)(`${N}/api/graph/triples?limit=10000`)]);if(!e.ok||!t.ok)throw Error("Failed to fetch graph data");let[r,a]=await Promise.all([e.json(),t.json()]),l=(r.entities||[]).map(e=>({id:String(e.id),name:e.name,type:e.type,memoryCount:e.memoryCount??e.memory_count??0})),n=(a.triples||[]).map(e=>({source:String(e.subject_id),target:String(e.object_id),predicate:e.predicate})),s=new Map;for(let e of l){let t=s.get(e.type)||[];t.push(e),s.set(e.type,t)}return{entities:l,triples:n,clusters:Array.from(s.entries()).map(([e,t])=>({type:e,entities:t.sort((e,t)=>t.memoryCount-e.memoryCount),colour:M[e]||"#8892b0"})).sort((e,t)=>t.entities.length-e.entities.length),totalConnections:n.length}},staleTime:6e4}),{data:C}=(e=o?.id??null,(0,k.useQuery)({queryKey:["graph","neighbourhood",e],queryFn:async()=>{if(!e)return null;let t=await (0,w.authFetch)(`${N}/api/graph/entities/${e}/neighbourhood`);if(!t.ok)throw Error("Failed to fetch neighbourhood");let r=await t.json(),a={id:String(r.focal.id),name:r.focal.name,type:r.focal.type,memoryCount:r.focal.memoryCount,isFocal:!0},l=new Map;for(let e of(l.set(a.id,a),r.neighbours))l.set(String(e.id),{id:String(e.id),name:e.name,type:e.type,memoryCount:e.memoryCount});let n=r.triples.map(e=>({source:String(e.subject_id),target:String(e.object_id),predicate:e.predicate}));return{nodes:Array.from(l.values()),links:n,focal:a,totalConnections:r.totalConnections}},enabled:null!==e,staleTime:15e3})),{data:j}=(i=o?.id??null,(0,k.useQuery)({queryKey:["graph","memories",i],queryFn:async()=>{if(!i)return[];let e=await (0,w.authFetch)(`${N}/api/graph/entities/${i}/memories`);if(!e.ok)throw Error("Failed to fetch memories");return(await e.json()).memories||[]},enabled:null!==i,staleTime:15e3})),{data:E}=(0,k.useQuery)({queryKey:["graph","search",f],queryFn:async()=>{let e=await (0,w.authFetch)(`${N}/api/graph/search?q=${encodeURIComponent(f)}&limit=8`);if(!e.ok)throw Error("Search failed");return((await e.json()).entities||[]).map(e=>({id:String(e.id),name:e.name,type:e.type,memoryCount:e.memoryCount}))},enabled:f.trim().length>0,staleTime:1e4}),I=(0,r.useCallback)(e=>{c(e)},[]),P=(0,r.useCallback)(e=>{let t=x?.entities.find(t=>t.id===e);t&&c(t)},[x]),R=(0,r.useCallback)(e=>{let t=x?.entities.find(t=>t.id===e);t&&c(t),u(""),m(!1)},[x]),T=(0,r.useMemo)(()=>C?C.nodes.filter(e=>!e.isFocal).sort((e,t)=>t.memoryCount-e.memoryCount).slice(0,15).map(e=>({id:e.id,label:e.name,type:e.type,memoryCount:e.memoryCount})):[],[C]),A=o?{id:o.id,label:o.name,type:o.type,memoryCount:o.memoryCount}:null,F=null!==o;return(0,t.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,t.jsx)("div",{className:"flex items-center gap-3",children:(0,t.jsxs)("div",{className:"relative flex-1",children:[(0,t.jsx)(a.Search,{className:"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-[var(--sc-text-muted)]"}),(0,t.jsx)("input",{type:"text",value:d,onChange:e=>{u(e.target.value),m(!0)},onFocus:()=>d.trim()&&m(!0),placeholder:"Search entities...",className:"glass-card w-full py-2.5 pl-10 pr-10 text-sm text-[var(--sc-text-primary)] placeholder:text-[var(--sc-text-muted)] focus:outline-none focus:ring-1 focus:ring-[var(--sc-cyan)]/40"}),d&&(0,t.jsx)("button",{type:"button",onClick:()=>{u(""),m(!1)},className:"absolute right-3 top-1/2 -translate-y-1/2 text-[var(--sc-text-muted)] hover:text-[var(--sc-text-primary)]",children:(0,t.jsx)(l.X,{className:"h-4 w-4"})}),h&&E&&E.length>0&&(0,t.jsx)("div",{className:"absolute left-0 right-0 top-full z-50 mt-1 glass-card-strong overflow-hidden py-1",children:E.map(e=>(0,t.jsxs)("button",{type:"button",onClick:()=>R(e.id),className:"flex w-full items-center justify-between px-4 py-2 text-left transition-colors hover:bg-[var(--sc-surface-interactive)]",children:[(0,t.jsx)("span",{className:"truncate text-sm text-[var(--sc-text-primary)]",children:e.name}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(s.Badge,{variant:"muted",className:"text-[10px]",children:e.type}),(0,t.jsx)("span",{className:"text-xs tabular-nums text-[var(--sc-text-muted)]",children:e.memoryCount})]})]},e.id))})]})}),(0,t.jsxs)("div",{className:`grid gap-4 ${F?"grid-cols-1 md:grid-cols-[1fr_340px]":"grid-cols-1"}`,children:[(0,t.jsxs)(n.GlassCard,{className:"relative min-h-[500px] overflow-hidden border-0 p-0",children:[b&&(0,t.jsx)("div",{className:"absolute inset-0 z-10 flex items-center justify-center bg-[var(--sc-bg-deep)]/60",children:(0,t.jsx)("div",{className:"h-6 w-6 animate-spin rounded-full border-2 border-[var(--sc-cyan)] border-t-transparent"})}),(0,t.jsx)("div",{ref:p,className:"h-full w-full",style:{minHeight:500},children:x&&(0,t.jsx)(v,{clusters:x.clusters,allTriples:x.triples,totalEntities:x.entities.length,totalConnections:x.totalConnections,width:y.width,height:y.height,onSelectEntity:I,selectedEntityId:o?.id})})]}),F&&A&&(0,t.jsx)("div",{className:"min-h-[500px]",children:(0,t.jsx)(S,{entity:A,relatedEntities:T,recentMemories:j??[],onNavigate:P})})]})]})}e.s(["default",()=>E],68595)},13213,e=>{e.n(e.i(68595))},23531,e=>{e.v(t=>Promise.all(["static/chunks/364656baa57adaa7.js"].map(t=>e.l(t))).then(()=>t(23272)))}]);
@@ -41,6 +41,8 @@ export function emitMemoryUpdated(memory) {
41
41
  memoryEvents.emit('memory_updated', { memory });
42
42
  }
43
43
  export function emitMemoryDeleted(memoryId, title) {
44
+ // The bare `title` is masked centrally when broadcast (deepRedactRestrictedContent
45
+ // scrubs every title-keyed string), so no per-emit redaction is needed here.
44
46
  memoryEvents.emit('memory_deleted', { memoryId, title });
45
47
  }
46
48
  export function emitConsolidation(result, promotedMemories = [], deletedMemories = []) {
@@ -0,0 +1,15 @@
1
+ import type { Request, Response, NextFunction } from 'express';
2
+ /**
3
+ * Express middleware: deep-redact RESTRICTED (credential-class) memory content
4
+ * from every JSON response the visualization API sends.
5
+ *
6
+ * The dashboard renders in a BROWSER, so a raw credential reaching the DOM is a
7
+ * leak vector (screenshots, screen-shares, disk cache). Memories surface at many
8
+ * nesting depths across the API (`{ memories: [...] }`, recall `results[].memory`,
9
+ * openclaw `sessions[].memories[]`, review-queue `sections.stale[]`,
10
+ * `contradictions[].memoryA`), so a single response interceptor that walks the
11
+ * whole tree is the only way to guarantee none is missed. The row itself stays
12
+ * intact (title/metadata) so the owner can still see/manage it; full content
13
+ * remains available via the CLI, which is not a browser surface.
14
+ */
15
+ export declare function redactRestrictedResponses(_req: Request, res: Response, next: NextFunction): void;
@@ -0,0 +1,19 @@
1
+ import { deepRedactRestrictedContent } from '../defence/trust/read-guard.js';
2
+ /**
3
+ * Express middleware: deep-redact RESTRICTED (credential-class) memory content
4
+ * from every JSON response the visualization API sends.
5
+ *
6
+ * The dashboard renders in a BROWSER, so a raw credential reaching the DOM is a
7
+ * leak vector (screenshots, screen-shares, disk cache). Memories surface at many
8
+ * nesting depths across the API (`{ memories: [...] }`, recall `results[].memory`,
9
+ * openclaw `sessions[].memories[]`, review-queue `sections.stale[]`,
10
+ * `contradictions[].memoryA`), so a single response interceptor that walks the
11
+ * whole tree is the only way to guarantee none is missed. The row itself stays
12
+ * intact (title/metadata) so the owner can still see/manage it; full content
13
+ * remains available via the CLI, which is not a browser surface.
14
+ */
15
+ export function redactRestrictedResponses(_req, res, next) {
16
+ const originalJson = res.json.bind(res);
17
+ res.json = ((body) => originalJson(deepRedactRestrictedContent(body)));
18
+ next();
19
+ }
@@ -1,13 +1,40 @@
1
1
  import { homedir } from 'os';
2
2
  import { join } from 'path';
3
3
  import { existsSync, readdirSync, readFileSync } from 'fs';
4
- import { getDatabase } from '../../database/init.js';
4
+ import { getDatabase, withTransaction } from '../../database/init.js';
5
5
  import { searchMemories, getRecentMemories, getHighPriorityMemories, countMemories, countHighPriorityMemories, getMemoryStats, getMemoryById, addMemory, deleteMemory, accessMemory, updateMemory, mergeMemories, promoteMemory, createMemoryLink, rowToMemory, enrichMemory, } from '../../memory/store.js';
6
6
  import { calculateDecayedScore } from '../../memory/decay.js';
7
7
  import { consolidate, findDuplicateMemoryPairs, formatContextSummary, generateContextSummary, } from '../../memory/consolidate.js';
8
8
  import { getActivationStats, getActiveMemories } from '../../memory/activation.js';
9
9
  import { detectContradictions, getContradictionsFor } from '../../memory/contradiction.js';
10
10
  import { emitConsolidation } from '../events.js';
11
+ import { guardDashboardContextSummary, RESTRICTED_CONTENT_PLACEHOLDER } from '../../defence/trust/read-guard.js';
12
+ /** Upper bound on memories a single bulk-review call may touch (actions are reversible). */
13
+ const MAX_BULK_REVIEW = 1000;
14
+ /**
15
+ * Resolve a review action keyword into the `updateMemory` field updates. Shared
16
+ * by the single PATCH /api/memories/:id/review route and the bulk endpoint so the
17
+ * action vocabulary lives in one place. Returns null for an unknown action.
18
+ */
19
+ function buildReviewUpdates(action, opts) {
20
+ const reviewActor = typeof opts.reviewedBy === 'string' && opts.reviewedBy.trim() ? opts.reviewedBy.trim() : 'dashboard';
21
+ const map = {
22
+ archive: { status: 'archived', reviewedBy: reviewActor },
23
+ suppress: { status: 'suppressed', reviewedBy: reviewActor },
24
+ restore: { status: 'active', reviewedBy: reviewActor },
25
+ pin: { pinned: true, reviewedBy: reviewActor },
26
+ unpin: { pinned: false, reviewedBy: reviewActor },
27
+ canonicalize: { status: 'canonical', pinned: true, reviewedBy: reviewActor },
28
+ excludeCloud: { cloudExcluded: true, reviewedBy: reviewActor },
29
+ includeCloud: { cloudExcluded: false, reviewedBy: reviewActor },
30
+ rescopeProject: { scope: 'project', project: opts.project ?? null, reviewedBy: reviewActor },
31
+ rescopeGlobal: { scope: 'global', project: null, reviewedBy: reviewActor },
32
+ };
33
+ const updates = map[action];
34
+ if (!updates)
35
+ return null;
36
+ return { ...updates, ...(opts.scope ? { scope: opts.scope } : {}) };
37
+ }
11
38
  export function registerMemoryRoutes(app, deps) {
12
39
  const { requireNotLocked, requireIronDomeAction } = deps;
13
40
  function deriveLocalOpenClawSessionId(memory) {
@@ -251,6 +278,10 @@ export function registerMemoryRoutes(app, deps) {
251
278
  total = countMemories(project, filters);
252
279
  }
253
280
  const hasMore = offset + limit < total;
281
+ // RESTRICTED content is redacted globally by the response interceptor; no
282
+ // per-row dropping here (the dashboard is a management surface — low-trust
283
+ // rows must stay visible to be triaged, and dropping post-slice would also
284
+ // desync total/hasMore).
254
285
  const paginatedMemories = memories.slice(offset, offset + limit);
255
286
  // Batch-load entity_ids per memory so the constellation graph client
256
287
  // can map list rows to graph nodes without an N+1 fetch.
@@ -963,7 +994,10 @@ export function registerMemoryRoutes(app, deps) {
963
994
  app.get('/api/context', requireNotLocked, async (req, res) => {
964
995
  try {
965
996
  const project = typeof req.query.project === 'string' ? req.query.project : undefined;
966
- const summary = await generateContextSummary(project);
997
+ // Redact RESTRICTED content BEFORE formatting — the `formatted` string bakes
998
+ // content in, so the response interceptor (which only walks structured JSON)
999
+ // cannot reach it. Guarding the summary first covers both fields.
1000
+ const summary = guardDashboardContextSummary(await generateContextSummary(project));
967
1001
  res.json({
968
1002
  summary,
969
1003
  formatted: formatContextSummary(summary),
@@ -1151,7 +1185,11 @@ export function registerMemoryRoutes(app, deps) {
1151
1185
  const updates = {};
1152
1186
  if (title !== undefined)
1153
1187
  updates.title = title.trim();
1154
- if (content !== undefined)
1188
+ // Never persist the redaction placeholder as real content. RESTRICTED content
1189
+ // is withheld from the browser, so a dashboard edit form can only echo the
1190
+ // placeholder back — writing it would silently destroy the real secret. Drop
1191
+ // a content update that is exactly the placeholder (true edits are unaffected).
1192
+ if (content !== undefined && content !== RESTRICTED_CONTENT_PLACEHOLDER)
1155
1193
  updates.content = content;
1156
1194
  if (category !== undefined)
1157
1195
  updates.category = category;
@@ -1193,26 +1231,10 @@ export function registerMemoryRoutes(app, deps) {
1193
1231
  if (Number.isNaN(id)) {
1194
1232
  return res.status(400).json({ error: 'Invalid memory ID' });
1195
1233
  }
1196
- const reviewActor = typeof reviewedBy === 'string' && reviewedBy.trim() ? reviewedBy.trim() : 'dashboard';
1197
- const actionMap = {
1198
- archive: { status: 'archived', reviewedBy: reviewActor },
1199
- suppress: { status: 'suppressed', reviewedBy: reviewActor },
1200
- restore: { status: 'active', reviewedBy: reviewActor },
1201
- pin: { pinned: true, reviewedBy: reviewActor },
1202
- unpin: { pinned: false, reviewedBy: reviewActor },
1203
- canonicalize: { status: 'canonical', pinned: true, reviewedBy: reviewActor },
1204
- excludeCloud: { cloudExcluded: true, reviewedBy: reviewActor },
1205
- includeCloud: { cloudExcluded: false, reviewedBy: reviewActor },
1206
- rescopeProject: { scope: 'project', project: project ?? null, reviewedBy: reviewActor },
1207
- rescopeGlobal: { scope: 'global', project: null, reviewedBy: reviewActor },
1208
- };
1209
- if (!action || !actionMap[action]) {
1234
+ const updates = buildReviewUpdates(action ?? '', { reviewedBy, project, scope });
1235
+ if (!updates) {
1210
1236
  return res.status(400).json({ error: 'Unsupported review action' });
1211
1237
  }
1212
- const updates = {
1213
- ...actionMap[action],
1214
- ...(scope ? { scope } : {}),
1215
- };
1216
1238
  const updated = updateMemory(id, updates);
1217
1239
  if (!updated) {
1218
1240
  return res.status(404).json({ error: 'Memory not found' });
@@ -1223,6 +1245,49 @@ export function registerMemoryRoutes(app, deps) {
1223
1245
  res.status(500).json({ error: error.message });
1224
1246
  }
1225
1247
  });
1248
+ // Bulk review: apply one reversible review action to many memories at once, so
1249
+ // the dashboard's large triage queues (Never Used, Noisy Auto, …) can be cleared
1250
+ // without one round-trip per card. Mirrors the quarantine bulk-approve pattern.
1251
+ // Reversible actions only (archive/suppress/restore/pin/…) — there is no bulk
1252
+ // delete here. Best-effort with a per-row failure list; capped at MAX_BULK_REVIEW.
1253
+ app.post('/api/memories/review/bulk', requireNotLocked, requireIronDomeAction({
1254
+ action: 'modify_records',
1255
+ channel: 'dashboard',
1256
+ sourceIdentifier: 'dashboard:memory-review-bulk',
1257
+ enforceAmber: true,
1258
+ }), (req, res) => {
1259
+ try {
1260
+ const { ids, action, reviewedBy, project, scope } = req.body;
1261
+ if (!Array.isArray(ids) || ids.length === 0) {
1262
+ return res.status(400).json({ error: 'ids must be a non-empty array' });
1263
+ }
1264
+ const numericIds = Array.from(new Set(ids.filter((x) => Number.isInteger(x))));
1265
+ if (numericIds.length === 0) {
1266
+ return res.status(400).json({ error: 'ids must contain integers' });
1267
+ }
1268
+ if (numericIds.length > MAX_BULK_REVIEW) {
1269
+ return res.status(400).json({ error: `Too many ids (max ${MAX_BULK_REVIEW}) — narrow the selection.` });
1270
+ }
1271
+ const updates = buildReviewUpdates(action ?? '', { reviewedBy, project, scope });
1272
+ if (!updates) {
1273
+ return res.status(400).json({ error: 'Unsupported review action' });
1274
+ }
1275
+ let updated = 0;
1276
+ const failed = [];
1277
+ withTransaction(() => {
1278
+ for (const id of numericIds) {
1279
+ if (updateMemory(id, updates))
1280
+ updated += 1;
1281
+ else
1282
+ failed.push(id);
1283
+ }
1284
+ });
1285
+ res.json({ success: true, updated, total: numericIds.length, failed });
1286
+ }
1287
+ catch (error) {
1288
+ res.status(500).json({ error: error.message });
1289
+ }
1290
+ });
1226
1291
  app.post('/api/memories/:id/quarantine', requireNotLocked, requireIronDomeAction({
1227
1292
  action: 'modify_records',
1228
1293
  channel: 'dashboard',
@@ -16,6 +16,8 @@ import { getDatabase, initDatabase, checkpointWal } from '../database/init.js';
16
16
  import { DEFAULT_CONFIG } from '../memory/types.js';
17
17
  import { getRecentMemories, getMemoryStats, rowToMemory, updateDecayScores } from '../memory/store.js';
18
18
  import { calculateDecayedScore } from '../memory/decay.js';
19
+ import { deepRedactRestrictedContent, redactRestrictedForDisplay } from '../defence/trust/read-guard.js';
20
+ import { redactRestrictedResponses } from './redact-response.js';
19
21
  import { memoryEvents, emitDecayTick, getUnprocessedEvents, markEventsProcessed, cleanupOldEvents, } from './events.js';
20
22
  import { BrainWorker } from '../worker/brain-worker.js';
21
23
  import { isKillSwitchActive, getKillSwitchMeta, activateKillSwitch, deactivateKillSwitch } from './control.js';
@@ -300,6 +302,11 @@ export function startVisualizationServer(dbPath) {
300
302
  }
301
303
  next();
302
304
  });
305
+ // ── RESTRICTED content redaction ────────────────────────
306
+ // Deep-redact RESTRICTED (credential-class) memory content from every JSON
307
+ // response — the dashboard is a browser surface, so the secret must never reach
308
+ // the DOM. The row stays visible so the owner can manage it. See the middleware.
309
+ app.use(redactRestrictedResponses);
303
310
  // Token handshake — dashboard claims on load (survives page refresh)
304
311
  app.get('/api/auth/session-token', (_req, res) => {
305
312
  const token = getSessionToken();
@@ -778,9 +785,11 @@ export function startVisualizationServer(dbPath) {
778
785
  ws.on('pong', () => { ws.isAlive = true; });
779
786
  clients.add(ws);
780
787
  console.log(`[WS] Client connected. Total: ${clients.size}`);
781
- // Send initial state
788
+ // Send initial state. The WS feed renders in the same browser surface as the
789
+ // REST API but does not pass through the res.json interceptor, so redact
790
+ // RESTRICTED content here explicitly.
782
791
  const stats = getMemoryStats();
783
- const memories = getRecentMemories(100);
792
+ const memories = redactRestrictedForDisplay(getRecentMemories(100));
784
793
  const memoriesWithDecay = memories.map(m => ({
785
794
  ...m,
786
795
  decayedScore: calculateDecayedScore(m),
@@ -811,9 +820,11 @@ export function startVisualizationServer(dbPath) {
811
820
  catch { /* already closing */ }
812
821
  });
813
822
  });
814
- // Broadcast events to all connected clients
823
+ // Broadcast events to all connected clients. memory_created/updated/accessed
824
+ // events carry the full memory in `data.memory`, so redact RESTRICTED content
825
+ // before it leaves over the WS (mirrors the REST response interceptor).
815
826
  function broadcast(event) {
816
- const message = JSON.stringify(event);
827
+ const message = JSON.stringify(deepRedactRestrictedContent(event));
817
828
  for (const client of clients) {
818
829
  try {
819
830
  if (client.readyState === WebSocket.OPEN) {
@@ -43,3 +43,45 @@ export declare function guardReadBySensitivity(memories: Memory[]): Memory[];
43
43
  export declare function guardContextSummary(summary: ContextSummary): ContextSummary;
44
44
  /** Guard a single memory; returns null if the caller may not read it. */
45
45
  export declare function guardReadMemory(memory: Memory | null | undefined, source: DefenceSource | undefined): Memory | null;
46
+ /**
47
+ * Dashboard / HTTP visualization-API read guard.
48
+ *
49
+ * The dashboard is the OWNER's surface, but it renders in a BROWSER — so raw
50
+ * RESTRICTED (credential-class) content there is a leak vector (screenshots,
51
+ * screen-shares, the browser's disk cache). Policy (REDACT, don't drop):
52
+ *
53
+ * - RESTRICTED rows are KEPT (so the owner sees the memory exists and can
54
+ * review/delete it) but their `content` is replaced with a placeholder;
55
+ * - because sensitivity is classified on TITLE + CONTENT together, a secret can
56
+ * also live in the title or metadata — so credential SPANS in those fields are
57
+ * masked too (a benign label like "AWS deploy key" is left intact);
58
+ * - low-trust / trust-0 rows are NOT dropped: the dashboard is a management
59
+ * surface (its Review queue exists to triage exactly these), so the owner must
60
+ * see them. Only RESTRICTED *content* is withheld, never whole rows.
61
+ *
62
+ * RESTRICTED full content remains available via the CLI (`recall`/`get_memory`),
63
+ * which is not a browser-render surface. Dropping quarantined rows is the MCP
64
+ * read-boundary's job (a subagent caller), not the owner's dashboard.
65
+ */
66
+ export declare const RESTRICTED_CONTENT_PLACEHOLDER = "\uD83D\uDD12 [RESTRICTED content withheld \u2014 view via CLI]";
67
+ /** Redact RESTRICTED memories for display (content withheld; title/metadata secret-scrubbed). */
68
+ export declare function redactRestrictedForDisplay(memories: Memory[]): Memory[];
69
+ /** Apply the dashboard redaction to every memory list in a context summary (used before formatting). */
70
+ export declare function guardDashboardContextSummary(summary: ContextSummary): ContextSummary;
71
+ /**
72
+ * Deep-walk an arbitrary HTTP-response payload and redact every RESTRICTED memory
73
+ * object it contains (withhold `content`; mask credential spans in `title` and
74
+ * string `metadata`), returning a redacted COPY (the input is never mutated —
75
+ * payloads often reference the live row cache).
76
+ *
77
+ * This is the comprehensive backstop for the visualization API: memories surface
78
+ * at many different nesting depths (`{ memories: [...] }`, recall
79
+ * `results[].memory`, openclaw `sessions[].memories[]`, review-queue
80
+ * `sections.stale[]`, `contradictions[].memoryA`), so guarding each route by hand
81
+ * would inevitably miss one. A single response interceptor that walks the whole
82
+ * tree cannot. It does NOT reach content already baked into a pre-rendered string
83
+ * (e.g. `/api/context`'s `formatted`) or bare title fields stripped of their
84
+ * sensitivity label (the contradictions endpoints, the `memory_deleted` event) —
85
+ * those are scrubbed at their own surface.
86
+ */
87
+ export declare function deepRedactRestrictedContent<T>(value: T, seen?: WeakSet<object>): T;
@@ -19,6 +19,7 @@
19
19
  * resolves a source via resolveToolSource before calling the read tools.
20
20
  */
21
21
  import { checkAccess } from './access-control.js';
22
+ import { redactContent } from '../sensitivity/redaction.js';
22
23
  /**
23
24
  * Core read decision, shared by the camelCase (Memory) and snake_case (raw row)
24
25
  * guards so the policy lives in exactly one place.
@@ -74,3 +75,122 @@ export function guardReadMemory(memory, source) {
74
75
  return null;
75
76
  return guardReadMemories([memory], source)[0] ?? null;
76
77
  }
78
+ /**
79
+ * Dashboard / HTTP visualization-API read guard.
80
+ *
81
+ * The dashboard is the OWNER's surface, but it renders in a BROWSER — so raw
82
+ * RESTRICTED (credential-class) content there is a leak vector (screenshots,
83
+ * screen-shares, the browser's disk cache). Policy (REDACT, don't drop):
84
+ *
85
+ * - RESTRICTED rows are KEPT (so the owner sees the memory exists and can
86
+ * review/delete it) but their `content` is replaced with a placeholder;
87
+ * - because sensitivity is classified on TITLE + CONTENT together, a secret can
88
+ * also live in the title or metadata — so credential SPANS in those fields are
89
+ * masked too (a benign label like "AWS deploy key" is left intact);
90
+ * - low-trust / trust-0 rows are NOT dropped: the dashboard is a management
91
+ * surface (its Review queue exists to triage exactly these), so the owner must
92
+ * see them. Only RESTRICTED *content* is withheld, never whole rows.
93
+ *
94
+ * RESTRICTED full content remains available via the CLI (`recall`/`get_memory`),
95
+ * which is not a browser-render surface. Dropping quarantined rows is the MCP
96
+ * read-boundary's job (a subagent caller), not the owner's dashboard.
97
+ */
98
+ export const RESTRICTED_CONTENT_PLACEHOLDER = '🔒 [RESTRICTED content withheld — view via CLI]';
99
+ /** Mask credential spans in a string (no-op if it carries no secret); pass-through for non-strings. */
100
+ function scrubSecretSpans(value) {
101
+ return typeof value === 'string' ? redactContent(value) : value;
102
+ }
103
+ /**
104
+ * Redact a single RESTRICTED memory for display: withhold `content`, mask
105
+ * credential spans in `title` and string `metadata` values. Returns a fresh copy
106
+ * (never mutates the input — rows may be live cache objects). Non-RESTRICTED rows
107
+ * pass through unchanged.
108
+ */
109
+ function redactRestrictedMemory(m) {
110
+ // Always mask credential spans in the title (benign titles are untouched —
111
+ // redactContent only rewrites known credential patterns). A secret can be
112
+ // classified RESTRICTED via the title alone, and titles are shown for
113
+ // manageability, so this closes the secret-in-title leak without hiding labels.
114
+ const title = redactContent(m.title);
115
+ if (m.sensitivityLevel !== 'RESTRICTED') {
116
+ return title === m.title ? m : { ...m, title };
117
+ }
118
+ const metadata = m.metadata && typeof m.metadata === 'object' && !Array.isArray(m.metadata)
119
+ ? Object.fromEntries(Object.entries(m.metadata).map(([k, v]) => [k, scrubSecretSpans(v)]))
120
+ : m.metadata;
121
+ return {
122
+ ...m,
123
+ content: RESTRICTED_CONTENT_PLACEHOLDER,
124
+ title,
125
+ metadata: metadata,
126
+ };
127
+ }
128
+ /** Redact RESTRICTED memories for display (content withheld; title/metadata secret-scrubbed). */
129
+ export function redactRestrictedForDisplay(memories) {
130
+ return memories.map(redactRestrictedMemory);
131
+ }
132
+ /** Apply the dashboard redaction to every memory list in a context summary (used before formatting). */
133
+ export function guardDashboardContextSummary(summary) {
134
+ return {
135
+ ...summary,
136
+ recentMemories: redactRestrictedForDisplay(summary.recentMemories),
137
+ keyDecisions: redactRestrictedForDisplay(summary.keyDecisions),
138
+ activePatterns: redactRestrictedForDisplay(summary.activePatterns),
139
+ pendingItems: redactRestrictedForDisplay(summary.pendingItems),
140
+ };
141
+ }
142
+ /**
143
+ * Returns true for a serialized-memory object — one carrying a sensitivity label
144
+ * and a content field, in either camelCase (Memory) or snake_case (raw DB row).
145
+ */
146
+ function isRedactableMemoryObject(o) {
147
+ const level = (o.sensitivityLevel ?? o.sensitivity_level);
148
+ return level === 'RESTRICTED' && typeof o.content === 'string';
149
+ }
150
+ /**
151
+ * Deep-walk an arbitrary HTTP-response payload and redact every RESTRICTED memory
152
+ * object it contains (withhold `content`; mask credential spans in `title` and
153
+ * string `metadata`), returning a redacted COPY (the input is never mutated —
154
+ * payloads often reference the live row cache).
155
+ *
156
+ * This is the comprehensive backstop for the visualization API: memories surface
157
+ * at many different nesting depths (`{ memories: [...] }`, recall
158
+ * `results[].memory`, openclaw `sessions[].memories[]`, review-queue
159
+ * `sections.stale[]`, `contradictions[].memoryA`), so guarding each route by hand
160
+ * would inevitably miss one. A single response interceptor that walks the whole
161
+ * tree cannot. It does NOT reach content already baked into a pre-rendered string
162
+ * (e.g. `/api/context`'s `formatted`) or bare title fields stripped of their
163
+ * sensitivity label (the contradictions endpoints, the `memory_deleted` event) —
164
+ * those are scrubbed at their own surface.
165
+ */
166
+ export function deepRedactRestrictedContent(value, seen = new WeakSet()) {
167
+ if (value === null || typeof value !== 'object')
168
+ return value;
169
+ if (seen.has(value))
170
+ return value; // cycle guard
171
+ seen.add(value);
172
+ if (Array.isArray(value)) {
173
+ return value.map((item) => deepRedactRestrictedContent(item, seen));
174
+ }
175
+ const obj = value;
176
+ const copy = {};
177
+ for (const key of Object.keys(obj)) {
178
+ copy[key] = deepRedactRestrictedContent(obj[key], seen);
179
+ // Mask credential spans in any title-bearing string field, wherever it sits —
180
+ // titles are emitted bare (no sensitivity label) on recall/graph/contradictions
181
+ // /memory_deleted surfaces, so this closes those leaks centrally. redactContent
182
+ // only rewrites known credential patterns, so benign titles pass through.
183
+ if (/title/i.test(key) && typeof copy[key] === 'string') {
184
+ copy[key] = redactContent(copy[key]);
185
+ }
186
+ }
187
+ if (isRedactableMemoryObject(copy)) {
188
+ copy.content = RESTRICTED_CONTENT_PLACEHOLDER;
189
+ if (copy.metadata && typeof copy.metadata === 'object' && !Array.isArray(copy.metadata)) {
190
+ const md = copy.metadata;
191
+ for (const k of Object.keys(md))
192
+ md[k] = scrubSecretSpans(md[k]);
193
+ }
194
+ }
195
+ return copy;
196
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shieldcortex",
3
- "version": "4.40.0",
3
+ "version": "4.42.0",
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,3 +0,0 @@
1
- module.exports=[89578,a=>{a.v({className:"geist_a71539c9-module__T19VSG__className",variable:"geist_a71539c9-module__T19VSG__variable"})},35214,a=>{a.v({className:"geist_mono_8d43a2aa-module__8Li5zG__className",variable:"geist_mono_8d43a2aa-module__8Li5zG__variable"})},35733,a=>{"use strict";a.s(["Providers",()=>b]);let b=(0,a.i(13358).registerClientReference)(function(){throw Error("Attempted to call Providers() from the server but Providers is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/dashboard/src/components/Providers.tsx <module evaluation>","Providers")},88153,a=>{"use strict";a.s(["Providers",()=>b]);let b=(0,a.i(13358).registerClientReference)(function(){throw Error("Attempted to call Providers() from the server but Providers is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/dashboard/src/components/Providers.tsx","Providers")},88098,a=>{"use strict";a.i(35733);var b=a.i(88153);a.n(b)},82726,a=>{"use strict";var b=a.i(31696),c=a.i(89578);let d={className:c.default.className,style:{fontFamily:"'Geist', 'Geist Fallback'",fontStyle:"normal"}};null!=c.default.variable&&(d.variable=c.default.variable);var e=a.i(35214);let f={className:e.default.className,style:{fontFamily:"'Geist Mono', 'Geist Mono Fallback'",fontStyle:"normal"}};null!=e.default.variable&&(f.variable=e.default.variable);var g=a.i(88098);function h({children:a}){return(0,b.jsx)("html",{lang:"en",className:"dark","data-theme":"glass",suppressHydrationWarning:!0,children:(0,b.jsx)("body",{className:`${d.variable} ${f.variable} antialiased bg-slate-950`,children:(0,b.jsx)(g.Providers,{children:a})})})}a.s(["default",()=>h,"metadata",0,{title:"ShieldCortex",description:"AI Memory Security Dashboard — Defence pipeline, audit logs, quarantine review"}],82726)}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__7d500b5a._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[53731,(a,b,c)=>{"use strict";b.exports=a.r(14865).vendored.contexts.HooksClientContext},69136,(a,b,c)=>{"use strict";b.exports=a.r(14865).vendored.contexts.ServerInsertedHtml},56704,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},20635,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/action-async-storage.external.js",()=>require("next/dist/server/app-render/action-async-storage.external.js"))},32319,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},54935,(a,b,c)=>{"use strict";b.exports=a.r(14865).vendored.contexts.AppRouterContext},18780,(a,b,c)=>{"use strict";b.exports=a.r(14865).vendored["react-ssr"].ReactDOM},90382,(a,b,c)=>{"use strict";b.exports=a.r(14865).vendored["react-ssr"].ReactServerDOMTurbopackClient},66397,a=>{"use strict";let b=(0,a.i(70694).default)("scan-search",[["path",{d:"M3 7V5a2 2 0 0 1 2-2h2",key:"aa7l1z"}],["path",{d:"M17 3h2a2 2 0 0 1 2 2v2",key:"4qcy5o"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2h-2",key:"6vwrx8"}],["path",{d:"M7 21H5a2 2 0 0 1-2-2v-2",key:"ioqczr"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["path",{d:"m16 16-1.9-1.9",key:"1dq9hf"}]]);a.s(["ScanSearch",()=>b],66397)},22524,a=>{"use strict";let b=(0,a.i(70694).default)("shield-check",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);a.s(["ShieldCheck",()=>b],22524)},76625,a=>{"use strict";let b=(0,a.i(70694).default)("database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);a.s(["Database",()=>b],76625)},98472,a=>{"use strict";let b=(0,a.i(70694).default)("shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]);a.s(["Shield",()=>b],98472)},66807,a=>{"use strict";var b=a.i(98419),c=a.i(46674),d=a.i(98416),e=a.i(16347),f=a.i(15896),g=class extends e.Subscribable{#a;#b=void 0;#c;#d;constructor(a,b){super(),this.#a=a,this.setOptions(b),this.bindMethods(),this.#e()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(a){let b=this.options;this.options=this.#a.defaultMutationOptions(a),(0,f.shallowEqualObjects)(this.options,b)||this.#a.getMutationCache().notify({type:"observerOptionsUpdated",mutation:this.#c,observer:this}),b?.mutationKey&&this.options.mutationKey&&(0,f.hashKey)(b.mutationKey)!==(0,f.hashKey)(this.options.mutationKey)?this.reset():this.#c?.state.status==="pending"&&this.#c.setOptions(this.options)}onUnsubscribe(){this.hasListeners()||this.#c?.removeObserver(this)}onMutationUpdate(a){this.#e(),this.#f(a)}getCurrentResult(){return this.#b}reset(){this.#c?.removeObserver(this),this.#c=void 0,this.#e(),this.#f()}mutate(a,b){return this.#d=b,this.#c?.removeObserver(this),this.#c=this.#a.getMutationCache().build(this.#a,this.options),this.#c.addObserver(this),this.#c.execute(a)}#e(){let a=this.#c?.state??(0,c.getDefaultState)();this.#b={...a,isPending:"pending"===a.status,isSuccess:"success"===a.status,isError:"error"===a.status,isIdle:"idle"===a.status,mutate:this.mutate,reset:this.reset}}#f(a){d.notifyManager.batch(()=>{if(this.#d&&this.hasListeners()){let b=this.#b.variables,c=this.#b.context,d={client:this.#a,meta:this.options.meta,mutationKey:this.options.mutationKey};if(a?.type==="success"){try{this.#d.onSuccess?.(a.data,b,c,d)}catch(a){Promise.reject(a)}try{this.#d.onSettled?.(a.data,null,b,c,d)}catch(a){Promise.reject(a)}}else if(a?.type==="error"){try{this.#d.onError?.(a.error,b,c,d)}catch(a){Promise.reject(a)}try{this.#d.onSettled?.(void 0,a.error,b,c,d)}catch(a){Promise.reject(a)}}}this.listeners.forEach(a=>{a(this.#b)})})}},h=a.i(14220);function i(a,c){let e=(0,h.useQueryClient)(c),[i]=b.useState(()=>new g(e,a));b.useEffect(()=>{i.setOptions(a)},[i,a]);let j=b.useSyncExternalStore(b.useCallback(a=>i.subscribe(d.notifyManager.batchCalls(a)),[i]),()=>i.getCurrentResult(),()=>i.getCurrentResult()),k=b.useCallback((a,b)=>{i.mutate(a,b).catch(f.noop)},[i]);if(j.error&&(0,f.shouldThrowError)(i.options.throwOnError,[j.error]))throw j.error;return{...j,mutate:k,mutateAsync:j.mutate}}a.s(["useMutation",()=>i],66807)},79155,a=>{"use strict";let b=(0,a.i(70694).default)("shield-alert",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]]);a.s(["ShieldAlert",()=>b],79155)},14126,a=>{"use strict";let b=(0,a.i(70694).default)("sparkles",[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]]);a.s(["Sparkles",()=>b],14126)},70694,a=>{"use strict";var b=a.i(98419);let c=a=>{let b=a.replace(/^([A-Z])|[\s-_]+(\w)/g,(a,b,c)=>c?c.toUpperCase():b.toLowerCase());return b.charAt(0).toUpperCase()+b.slice(1)},d=(...a)=>a.filter((a,b,c)=>!!a&&""!==a.trim()&&c.indexOf(a)===b).join(" ").trim();var e={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let f=(0,b.forwardRef)(({color:a="currentColor",size:c=24,strokeWidth:f=2,absoluteStrokeWidth:g,className:h="",children:i,iconNode:j,...k},l)=>(0,b.createElement)("svg",{ref:l,...e,width:c,height:c,stroke:a,strokeWidth:g?24*Number(f)/Number(c):f,className:d("lucide",h),...!i&&!(a=>{for(let b in a)if(b.startsWith("aria-")||"role"===b||"title"===b)return!0})(k)&&{"aria-hidden":"true"},...k},[...j.map(([a,c])=>(0,b.createElement)(a,c)),...Array.isArray(i)?i:[i]])),g=(a,e)=>{let g=(0,b.forwardRef)(({className:g,...h},i)=>(0,b.createElement)(f,{ref:i,iconNode:e,className:d(`lucide-${c(a).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,`lucide-${a}`,g),...h}));return g.displayName=c(a),g};a.s(["default",()=>g],70694)},73683,(a,b,c)=>{"use strict";function d(a){if("function"!=typeof WeakMap)return null;var b=new WeakMap,c=new WeakMap;return(d=function(a){return a?c:b})(a)}c._=function(a,b){if(!b&&a&&a.__esModule)return a;if(null===a||"object"!=typeof a&&"function"!=typeof a)return{default:a};var c=d(b);if(c&&c.has(a))return c.get(a);var e={__proto__:null},f=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var g in a)if("default"!==g&&Object.prototype.hasOwnProperty.call(a,g)){var h=f?Object.getOwnPropertyDescriptor(a,g):null;h&&(h.get||h.set)?Object.defineProperty(e,g,h):e[g]=a[g]}return e.default=a,c&&c.set(a,e),e}},64575,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={DEFAULT_SEGMENT_KEY:function(){return l},NOT_FOUND_SEGMENT_KEY:function(){return m},PAGE_SEGMENT_KEY:function(){return k},addSearchParamsIfPageSegment:function(){return i},computeSelectedLayoutSegment:function(){return j},getSegmentValue:function(){return f},getSelectedLayoutSegmentPath:function(){return function a(b,c,d=!0,e=[]){let g;if(d)g=b[1][c];else{let a=b[1];g=a.children??Object.values(a)[0]}if(!g)return e;let h=f(g[0]);return!h||h.startsWith(k)?e:(e.push(h),a(g,c,!1,e))}},isGroupSegment:function(){return g},isParallelRouteSegment:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});function f(a){return Array.isArray(a)?a[1]:a}function g(a){return"("===a[0]&&a.endsWith(")")}function h(a){return a.startsWith("@")&&"@children"!==a}function i(a,b){if(a.includes(k)){let a=JSON.stringify(b);return"{}"!==a?k+"?"+a:k}return a}function j(a,b){if(!a||0===a.length)return null;let c="children"===b?a[0]:a[a.length-1];return c===l?null:c}let k="__PAGE__",l="__DEFAULT__",m="/_not-found"},88904,a=>{"use strict";let b=(0,a.i(70694).default)("activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);a.s(["Activity",()=>b],88904)},68839,a=>{"use strict";let b;var c=a.i(98419);let d=a=>{let b,c=new Set,d=(a,d)=>{let e="function"==typeof a?a(b):a;if(!Object.is(e,b)){let a=b;b=(null!=d?d:"object"!=typeof e||null===e)?e:Object.assign({},b,e),c.forEach(c=>c(b,a))}},e=()=>b,f={setState:d,getState:e,getInitialState:()=>g,subscribe:a=>(c.add(a),()=>c.delete(a))},g=b=a(d,e,f);return f},e=a=>{let b=a?d(a):d,e=a=>(function(a,b=a=>a){let d=c.default.useSyncExternalStore(a.subscribe,c.default.useCallback(()=>b(a.getState()),[a,b]),c.default.useCallback(()=>b(a.getInitialState()),[a,b]));return c.default.useDebugValue(d),d})(b,a);return Object.assign(e,b),e},f=(b=a=>({selectedMemory:null,setSelectedMemory:b=>a({selectedMemory:b}),selectedAuditEntry:null,setSelectedAuditEntry:b=>a({selectedAuditEntry:b}),viewMode:"overview",setViewMode:b=>a({viewMode:b}),typeFilter:null,categoryFilter:null,projectFilter:null,setTypeFilter:b=>a({typeFilter:b}),setCategoryFilter:b=>a({categoryFilter:b}),setProjectFilter:b=>a({projectFilter:b}),reviewFocus:null,setReviewFocus:b=>a({reviewFocus:b}),recentEvents:[],addEvent:b=>a(a=>({recentEvents:[b,...a.recentEvents].slice(0,50)})),clearEvents:()=>a({recentEvents:[]}),cameraPosition:[0,0,12],setCameraPosition:b=>a({cameraPosition:b}),showLeftSidebar:!0,showRightSidebar:!0,toggleLeftSidebar:()=>a(a=>({showLeftSidebar:!a.showLeftSidebar})),toggleRightSidebar:()=>a(a=>({showRightSidebar:!a.showRightSidebar})),searchQuery:"",setSearchQuery:b=>a({searchQuery:b}),sidebarPinned:!1,toggleSidebarPinned:()=>a(a=>({sidebarPinned:!a.sidebarPinned})),activeTab:{},setActiveTab:(b,c)=>a(a=>({activeTab:{...a.activeTab,[b]:c}}))}))?e(b):e;a.s(["useDashboardStore",0,f],68839)},40145,a=>{"use strict";let b=(0,a.i(70694).default)("settings",[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);a.s(["Settings",()=>b],40145)},6476,a=>{"use strict";let b=(0,a.i(70694).default)("brain",[["path",{d:"M12 18V5",key:"adv99a"}],["path",{d:"M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4",key:"1e3is1"}],["path",{d:"M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5",key:"1gqd8o"}],["path",{d:"M17.997 5.125a4 4 0 0 1 2.526 5.77",key:"iwvgf7"}],["path",{d:"M18 18a4 4 0 0 0 2-7.464",key:"efp6ie"}],["path",{d:"M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517",key:"1gq6am"}],["path",{d:"M6 18a4 4 0 0 1-2-7.464",key:"k1g0md"}],["path",{d:"M6.003 5.125a4 4 0 0 0-2.526 5.77",key:"q97ue3"}]]);a.s(["Brain",()=>b],6476)}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__bea9887b._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[74150,35031,79030,a=>{"use strict";let b=(0,a.i(70694).default)("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);a.s(["CheckCircle2",()=>b],74150);var c=a.i(40458),d=a.i(66807),e=a.i(14220),f=a.i(86044);let g=process.env.NEXT_PUBLIC_API_URL||"http://localhost:3001";async function h(){let a=await (0,f.authFetch)(`${g}/api/license/status`);if(!a.ok)throw Error("Failed to fetch license status");return a.json()}async function i(a){let b=await (0,f.authFetch)(`${g}/api/license/activate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:a})});if(!b.ok)throw Error((await b.json().catch(()=>({error:"Activation failed"}))).error||"Activation failed");return b.json()}async function j(){let a=await (0,f.authFetch)(`${g}/api/license/deactivate`,{method:"POST"});if(!a.ok)throw Error("Failed to deactivate license");return a.json()}function k(){return(0,c.useQuery)({queryKey:["license-status"],queryFn:h,refetchInterval:6e4,retry:2})}function l(){let a=(0,e.useQueryClient)();return(0,d.useMutation)({mutationFn:a=>i(a),onSuccess:()=>{a.invalidateQueries({queryKey:["license-status"]})}})}function m(){let a=(0,e.useQueryClient)();return(0,d.useMutation)({mutationFn:j,onSuccess:()=>{a.invalidateQueries({queryKey:["license-status"]})}})}a.s(["useActivateLicense",()=>l,"useDeactivateLicense",()=>m,"useLicenseStatus",()=>k],35031),a.s(["PLAN_PRICING",0,{pro:{label:"Pro",price:"£29/mo"},team:{label:"Team",price:"£99/mo"}},"TIER_BG",0,{free:"bg-[var(--sc-surface-interactive)]",pro:"bg-[var(--sc-cyan)]/10",team:"bg-[var(--sc-coral)]/10",enterprise:"bg-[var(--sc-amber)]/10"},"TIER_COLOURS",0,{free:"text-[var(--sc-text-muted)]",pro:"text-[var(--sc-cyan)]",team:"text-[var(--sc-coral)]",enterprise:"text-[var(--sc-amber)]"},"TIER_LABELS",0,{free:"Free",pro:"Pro",team:"Team",enterprise:"Enterprise"}],79030)},47520,a=>{"use strict";let b=(0,a.i(70694).default)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);a.s(["AlertTriangle",()=>b],47520)},23808,a=>{"use strict";var b=a.i(16306),c=a.i(64565),d=a.i(98419);let e={coral:"border border-[var(--term-electric)] text-[var(--term-electric-fg)] bg-transparent hover:bg-[var(--term-electric)]/10",cyan:"border border-[var(--term-neon)] text-[var(--term-neon-fg)] bg-transparent hover:bg-[var(--term-neon)]/10",ghost:"border border-transparent text-[var(--term-text-muted)] bg-transparent hover:text-[var(--term-text)] hover:border-[var(--term-border)]",outline:"border border-[var(--term-border)] text-[var(--term-text-dim)] bg-transparent hover:border-[var(--term-text-muted)] hover:text-[var(--term-text)]"},f={sm:"px-2 py-1 text-xs",md:"px-3 py-1.5 text-sm",lg:"px-4 py-2 text-sm"},g={coral:"theme-glass:border-0 theme-glass:bg-gradient-to-br theme-glass:from-[var(--sc-coral)] theme-glass:to-[var(--sc-coral-dark)] theme-glass:text-white theme-glass:hover:shadow-[0_8px_30px_var(--sc-glow-coral-mid)]",cyan:"theme-glass:border-0 theme-glass:bg-[var(--sc-cyan)] theme-glass:text-[var(--sc-bg-deep)] theme-glass:hover:bg-[var(--sc-cyan-mid)]",ghost:"theme-glass:bg-transparent theme-glass:text-[var(--sc-text-secondary)] theme-glass:hover:bg-[var(--sc-surface-interactive)]",outline:"theme-glass:bg-transparent theme-glass:border theme-glass:border-[var(--sc-border)] theme-glass:text-[var(--sc-text-secondary)]"},h={sm:"theme-glass:px-3 theme-glass:py-1.5 theme-glass:text-xs theme-glass:rounded-lg",md:"theme-glass:px-4 theme-glass:py-2 theme-glass:text-sm theme-glass:rounded-xl",lg:"theme-glass:px-6 theme-glass:py-3 theme-glass:text-sm theme-glass:rounded-xl"},i=(0,d.forwardRef)(({variant:a="coral",size:d="md",glow:i=!1,pulse:j=!1,className:k,children:l,...m},n)=>(0,b.jsxs)("button",{ref:n,className:(0,c.cn)("inline-flex items-center justify-center gap-2 rounded-md font-mono transition-colors","focus-visible:outline-1 focus-visible:outline-offset-2 focus-visible:outline-[var(--term-electric)]",j?"disabled:pointer-events-none":"disabled:pointer-events-none disabled:opacity-50",e[a],f[d],"theme-glass:font-semibold theme-glass:transition-all theme-glass:hover:-translate-y-0.5",g[a],h[d],i&&"coral"===a&&"theme-glass:glow-coral-subtle",i&&"cyan"===a&&"theme-glass:glow-cyan-subtle",j&&"theme-glass:glow-cyan-pulse",k),type:"button",...m,children:[(0,b.jsxs)("span",{className:"inline-flex items-center gap-2 theme-glass:hidden",children:[j&&(0,b.jsx)("span",{className:"cli-cursor","aria-hidden":!0}),(0,b.jsx)("span",{className:"text-[var(--term-text-muted)]","aria-hidden":!0,children:"["}),(0,b.jsx)("span",{className:"leading-none",children:l}),(0,b.jsx)("span",{className:"text-[var(--term-text-muted)]","aria-hidden":!0,children:"]"})]}),(0,b.jsx)("span",{className:"hidden theme-glass:inline-flex items-center gap-2",children:l})]}));i.displayName="Button",a.s(["Button",0,i])},32322,a=>{"use strict";let b=(0,a.i(70694).default)("lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);a.s(["Lock",()=>b],32322)},79151,a=>{"use strict";var b=a.i(16306),c=a.i(64565),d=a.i(32322);function e({tabs:a,activeTab:e,onChange:f,className:g}){return(0,b.jsx)("div",{className:(0,c.cn)("flex items-center gap-4 overflow-x-auto border-b border-[var(--term-border)] px-1 scrollbar-hide","theme-glass:gap-1 theme-glass:rounded-xl theme-glass:border-0 theme-glass:bg-[var(--sc-bg-surface)] theme-glass:p-1",g),role:"tablist",children:a.map(a=>{let g=a.id===e;return(0,b.jsxs)("button",{type:"button",role:"tab","aria-selected":g?"true":"false",onClick:()=>f(a.id),className:(0,c.cn)("relative flex shrink-0 items-center gap-2 px-1 py-2 text-xs font-mono transition-colors","focus-visible:outline-1 focus-visible:outline-offset-2 focus-visible:outline-[var(--term-electric)]",g?"text-[var(--term-electric-fg)]":"text-[var(--term-text-muted)] hover:text-[var(--term-text)]","theme-glass:font-medium theme-glass:font-sans theme-glass:rounded-lg theme-glass:px-3 theme-glass:py-2 sm:theme-glass:px-4 sm:theme-glass:text-sm",g&&"theme-glass:bg-[var(--sc-bg-elevated)] theme-glass:text-[var(--sc-text-primary)]",!g&&"theme-glass:hover:text-[var(--sc-text-secondary)]"),children:[a.icon,(0,b.jsx)("span",{children:a.label}),a.locked&&(0,b.jsx)(d.Lock,{size:11,className:"text-[var(--term-warn)] theme-glass:text-[var(--sc-coral)]"}),void 0!==a.count&&a.count>0&&(0,b.jsxs)("span",{className:"text-[var(--term-text-muted)] theme-glass:ml-0.5 theme-glass:rounded-full theme-glass:bg-[var(--sc-coral)]/15 theme-glass:px-1.5 theme-glass:py-0.5 theme-glass:text-[10px] theme-glass:font-bold theme-glass:text-[var(--sc-coral)]",children:[(0,b.jsxs)("span",{className:"theme-glass:hidden",children:["(",a.count,")"]}),(0,b.jsx)("span",{className:"hidden theme-glass:inline",children:a.count})]}),g&&(0,b.jsx)("span",{"aria-hidden":!0,className:"absolute -bottom-px left-0 right-0 h-px bg-[var(--term-electric)] theme-glass:hidden"})]},a.id)})})}function f({eyebrow:a,title:d,subtitle:f,actions:g,tabs:h,activeTab:i,onTabChange:j,className:k}){return(0,b.jsxs)("div",{className:(0,c.cn)("space-y-3 theme-glass:space-y-4",k),children:[(0,b.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between sm:gap-4 theme-glass:gap-3",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsxs)("div",{className:"theme-glass:hidden",children:[a&&(0,b.jsxs)("p",{className:"text-[11px] uppercase tracking-wider text-[var(--term-text-muted)]",children:[(0,b.jsx)("span",{className:"text-[var(--term-electric-fg)]",children:"›"})," ",a]}),(0,b.jsxs)("h1",{className:"mt-1 flex items-baseline flex-wrap gap-2 text-base font-mono text-[var(--term-text)] sm:text-lg",children:[(0,b.jsx)("span",{className:"text-[var(--term-electric-fg)]","aria-hidden":!0,children:"$"}),(0,b.jsx)("span",{children:"shieldcortex"}),(0,b.jsx)("span",{className:"text-[var(--term-text-dim)]",children:d.toLowerCase()}),(0,b.jsx)("span",{className:"cli-cursor text-[var(--term-electric-fg)]","aria-hidden":!0})]}),f&&(0,b.jsxs)("p",{className:"mt-1 text-xs text-[var(--term-text-muted)]",children:[(0,b.jsx)("span",{"aria-hidden":!0,children:"#"})," ",f]})]}),(0,b.jsxs)("div",{className:"hidden theme-glass:block",children:[a&&(0,b.jsx)("p",{className:"text-[10px] font-semibold uppercase tracking-[0.2em] text-[var(--sc-coral)] sm:text-[11px]",children:a}),(0,b.jsx)("h1",{className:"mt-1 text-xl font-bold text-[var(--sc-text-primary)] sm:text-2xl",children:d}),f&&(0,b.jsx)("p",{className:"mt-1 text-xs text-[var(--sc-text-secondary)] sm:text-sm",children:f})]})]}),g&&(0,b.jsx)("div",{className:"flex shrink-0 items-center gap-2",children:g})]}),h&&i&&j&&(0,b.jsx)(e,{tabs:h,activeTab:i,onChange:j})]})}a.s(["PageHeader",()=>f],79151)},60210,a=>{"use strict";var b=a.i(16306),c=a.i(64565);let d={critical:"text-[var(--term-danger)]",high:"text-[var(--term-danger)]",medium:"text-[var(--term-warn)]",low:"text-[var(--term-electric-fg)]",safe:"text-[var(--term-neon-fg)]",info:"text-[var(--term-text-muted)]",coral:"text-[var(--term-electric-fg)]",cyan:"text-[var(--term-neon-fg)]",amber:"text-[var(--term-warn)]",muted:"text-[var(--term-text-muted)]"},e={critical:"bg-[var(--term-danger)]",high:"bg-[var(--term-danger)]",medium:"bg-[var(--term-warn)]",low:"bg-[var(--term-electric)]",safe:"bg-[var(--term-neon)]",info:"bg-[var(--term-text-muted)]",coral:"bg-[var(--term-electric)]",cyan:"bg-[var(--term-neon)]",amber:"bg-[var(--term-warn)]",muted:"bg-[var(--term-text-muted)]"},f={critical:"theme-glass:bg-[var(--sc-coral)]/15 theme-glass:border-[var(--sc-coral)]/30",high:"theme-glass:bg-[var(--sc-coral-mid)]/15 theme-glass:border-[var(--sc-coral-mid)]/30",medium:"theme-glass:bg-[var(--sc-amber)]/15 theme-glass:border-[var(--sc-amber)]/30",low:"theme-glass:bg-[var(--sc-cyan-mid)]/15 theme-glass:border-[var(--sc-cyan-mid)]/30",safe:"theme-glass:bg-[var(--sc-cyan)]/15 theme-glass:border-[var(--sc-cyan)]/30",info:"theme-glass:bg-[var(--sc-text-muted)]/15 theme-glass:border-[var(--sc-text-muted)]/30",coral:"theme-glass:bg-[var(--sc-coral)]/15 theme-glass:border-[var(--sc-coral)]/30",cyan:"theme-glass:bg-[var(--sc-cyan)]/15 theme-glass:border-[var(--sc-cyan)]/30",amber:"theme-glass:bg-[var(--sc-amber)]/15 theme-glass:border-[var(--sc-amber)]/30",muted:"theme-glass:bg-[var(--sc-surface-interactive)] theme-glass:border-[var(--sc-border)]"};function g({children:a,variant:g="muted",className:h,dot:i=!1,pulse:j=!1}){return(0,b.jsxs)("span",{className:(0,c.cn)("inline-flex items-center gap-1.5 px-1 text-[11px] font-semibold uppercase tracking-wider whitespace-nowrap",d[g],"theme-glass:rounded-full theme-glass:border theme-glass:px-2.5 theme-glass:py-0.5",f[g],h),children:[i&&(0,b.jsx)("span",{className:(0,c.cn)("h-1.5 w-1.5 rounded-full",e[g],j&&"animate-pulse"),"aria-hidden":!0}),(0,b.jsx)("span",{"aria-hidden":!0,className:"text-[var(--term-text-muted)] theme-glass:hidden",children:"["}),(0,b.jsx)("span",{children:a}),(0,b.jsx)("span",{"aria-hidden":!0,className:"text-[var(--term-text-muted)] theme-glass:hidden",children:"]"})]})}function h(a){let b=a.toUpperCase();return"CRITICAL"===b?"critical":"HIGH"===b?"high":"MEDIUM"===b?"medium":"LOW"===b?"low":"SAFE"===b?"safe":"info"}a.s(["Badge",()=>g,"riskVariant",()=>h])},77115,a=>{"use strict";let b=(0,a.i(70694).default)("clock-3",[["path",{d:"M12 6v6h4",key:"135r8i"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);a.s(["Clock3",()=>b],77115)},6750,a=>{"use strict";let b=(0,a.i(70694).default)("file-text",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);a.s(["FileText",()=>b],6750)},38883,a=>{"use strict";var b=a.i(40458),c=a.i(66807),d=a.i(14220),e=a.i(86044),f=a.i(4708),g=a.i(76614);let h=process.env.NEXT_PUBLIC_API_URL||"http://localhost:3001";async function i(a){let b=new URLSearchParams;a?.startTime&&b.set("startTime",a.startTime),a?.endTime&&b.set("endTime",a.endTime),a?.source&&b.set("source",a.source),a?.firewallResult&&b.set("firewallResult",a.firewallResult),a?.project&&b.set("project",a.project),a?.limit&&b.set("limit",a.limit.toString());let c=await (0,e.authFetch)(`${h}/api/v1/audit?${b}`);if(!c.ok)throw Error(await (0,e.readApiError)(c,"Failed to fetch audit logs"));return c.json()}async function j(a,b){let c=new URLSearchParams({timeRange:a});b&&c.set("project",b);let d=await (0,e.authFetch)(`${h}/api/v1/audit/stats?${c}`);if(!d.ok)throw Error(await (0,e.readApiError)(d,"Failed to fetch audit stats"));return d.json()}async function k(a="pending",b=50,c,d){let f=new URLSearchParams({status:a,limit:b.toString()});c&&f.set("project",c),d&&f.set("sourceType",d);let g=await (0,e.authFetch)(`${h}/api/v1/quarantine?${f}`);if(!g.ok)throw Error(await (0,e.readApiError)(g,"Failed to fetch quarantine"));return g.json()}async function l(a){let b=await (0,e.authFetch)(`${h}/api/v1/quarantine/${a}/approve`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({reviewedBy:"dashboard"})});if(!b.ok)throw Error(await (0,e.readApiError)(b,"Failed to approve quarantined item"));return b.json()}async function m(a,b){let c=await (0,e.authFetch)(`${h}/api/v1/quarantine/${a}/reject`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({reviewedBy:"dashboard",notes:b})});if(!c.ok)throw Error(await (0,e.readApiError)(c,"Failed to reject quarantined item"));return c.json()}async function n(a){let b=await (0,e.authFetch)(`${h}/api/v1/quarantine/bulk-approve`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:a,reviewedBy:"dashboard"})});if(!b.ok)throw Error(await (0,e.readApiError)(b,"Failed to bulk approve quarantined items"));return b.json()}async function o(a){let b=await (0,e.authFetch)(`${h}/api/v1/quarantine/bulk-reject`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:a,reviewedBy:"dashboard"})});if(!b.ok)throw Error(await (0,e.readApiError)(b,"Failed to bulk reject quarantined items"));return b.json()}async function p(){let a=await (0,e.authFetch)(`${h}/api/v1/review-copilot/status`);if(!a.ok)throw Error(await (0,e.readApiError)(a,"Failed to fetch Local AI status"));return a.json()}async function q(a){let b=await (0,e.authFetch)(`${h}/api/v1/quarantine/${a}/annotate`,{method:"POST",headers:{"Content-Type":"application/json"}});if(!b.ok)throw Error(await (0,e.readApiError)(b,"Failed to explain quarantined item"));return b.json()}async function r(a){let b=await (0,e.authFetch)(`${h}/api/v1/quarantine/annotate-pending`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!b.ok)throw Error(await (0,e.readApiError)(b,"Failed to explain pending quarantine"));return b.json()}function s(a){let{isConnected:c}=(0,g.useWebSocketStatus)();return(0,b.useQuery)({queryKey:["audit-logs",a],queryFn:()=>i(a),refetchInterval:(0,f.wsGatedInterval)(c,3e4),retry:2})}function t(a="24h",c){let{isConnected:d}=(0,g.useWebSocketStatus)();return(0,b.useQuery)({queryKey:["audit-stats",a,c],queryFn:()=>j(a,c),refetchInterval:(0,f.wsGatedInterval)(d,3e4),retry:2})}function u(a="pending",c=50,d,e){let{isConnected:h}=(0,g.useWebSocketStatus)();return(0,b.useQuery)({queryKey:["quarantine",a,c,d,e],queryFn:()=>k(a,c,d,e),refetchInterval:(0,f.wsGatedInterval)(h,3e4),retry:2})}function v(){return(0,b.useQuery)({queryKey:["review-copilot-status"],queryFn:p,refetchInterval:3e4,retry:2})}function w(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:l,onSuccess:()=>{a.invalidateQueries({queryKey:["quarantine"]}),a.invalidateQueries({queryKey:["audit-stats"]}),a.invalidateQueries({queryKey:["memories"]}),a.invalidateQueries({queryKey:["stats"]}),a.invalidateQueries({queryKey:["review-queue"]}),a.invalidateQueries({queryKey:["openclaw-sessions"]}),a.invalidateQueries({queryKey:["quality"]})}})}function x(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:({id:a,notes:b})=>m(a,b),onSuccess:()=>{a.invalidateQueries({queryKey:["quarantine"]}),a.invalidateQueries({queryKey:["audit-stats"]}),a.invalidateQueries({queryKey:["review-queue"]})}})}function y(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:n,onSuccess:()=>{a.invalidateQueries({queryKey:["quarantine"]}),a.invalidateQueries({queryKey:["audit-stats"]}),a.invalidateQueries({queryKey:["memories"]}),a.invalidateQueries({queryKey:["stats"]}),a.invalidateQueries({queryKey:["review-queue"]}),a.invalidateQueries({queryKey:["openclaw-sessions"]}),a.invalidateQueries({queryKey:["quality"]})}})}function z(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:o,onSuccess:()=>{a.invalidateQueries({queryKey:["quarantine"]}),a.invalidateQueries({queryKey:["audit-stats"]}),a.invalidateQueries({queryKey:["review-queue"]})}})}function A(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:q,onSuccess:()=>{a.invalidateQueries({queryKey:["quarantine"]}),a.invalidateQueries({queryKey:["review-copilot-status"]})}})}function B(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:r,onSuccess:()=>{a.invalidateQueries({queryKey:["quarantine"]}),a.invalidateQueries({queryKey:["review-copilot-status"]})}})}a.s(["useAnnotatePendingQuarantine",()=>B,"useAnnotateQuarantine",()=>A,"useApproveQuarantine",()=>w,"useAuditLogs",()=>s,"useAuditStats",()=>t,"useBulkApproveQuarantine",()=>y,"useBulkRejectQuarantine",()=>z,"useQuarantine",()=>u,"useRejectQuarantine",()=>x,"useReviewCopilotStatus",()=>v])}];
2
-
3
- //# sourceMappingURL=dashboard_14d63e36._.js.map