shieldcortex 4.12.11 → 4.12.12

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 (353) 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/prerender-manifest.json +3 -3
  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.nft.json +1 -1
  7. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/cloud/page_client-reference-manifest.js +1 -1
  8. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/capture/page.js.nft.json +1 -1
  9. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/capture/page_client-reference-manifest.js +1 -1
  10. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/graph/page.js.nft.json +1 -1
  11. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/graph/page_client-reference-manifest.js +1 -1
  12. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page.js.nft.json +1 -1
  13. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page_client-reference-manifest.js +1 -1
  14. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/recall/page.js.nft.json +1 -1
  15. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/recall/page_client-reference-manifest.js +1 -1
  16. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/review/page.js.nft.json +1 -1
  17. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/review/page_client-reference-manifest.js +1 -1
  18. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/timeline/page.js.nft.json +1 -1
  19. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/timeline/page_client-reference-manifest.js +1 -1
  20. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/overview/page.js.nft.json +1 -1
  21. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/overview/page_client-reference-manifest.js +1 -1
  22. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/audit/page.js.nft.json +1 -1
  23. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/audit/page_client-reference-manifest.js +1 -1
  24. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/intercepts/page.js.nft.json +1 -1
  25. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/intercepts/page_client-reference-manifest.js +1 -1
  26. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/iron-dome/page.js.nft.json +1 -1
  27. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/iron-dome/page_client-reference-manifest.js +1 -1
  28. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/page.js.nft.json +1 -1
  29. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/page_client-reference-manifest.js +1 -1
  30. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/policies/page.js.nft.json +1 -1
  31. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/policies/page_client-reference-manifest.js +1 -1
  32. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/quarantine/page.js.nft.json +1 -1
  33. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/quarantine/page_client-reference-manifest.js +1 -1
  34. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
  35. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  36. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/page.js.nft.json +1 -1
  37. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/page_client-reference-manifest.js +1 -1
  38. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/xray/page.js.nft.json +1 -1
  39. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/xray/page_client-reference-manifest.js +1 -1
  40. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/xray/page.js.nft.json +1 -1
  41. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/xray/page_client-reference-manifest.js +1 -1
  42. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.html +2 -2
  43. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.rsc +1 -1
  44. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  45. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  46. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  47. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  48. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  49. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  50. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.html +1 -1
  51. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.rsc +2 -2
  52. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  53. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  54. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  55. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  56. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  57. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  58. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.html +1 -1
  59. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.rsc +6 -6
  60. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin/__PAGE__.segment.rsc +1 -1
  61. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin.segment.rsc +1 -1
  62. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
  63. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_full.segment.rsc +6 -6
  64. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  65. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_index.segment.rsc +2 -2
  66. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
  67. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.html +1 -1
  68. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.rsc +6 -6
  69. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud/__PAGE__.segment.rsc +1 -1
  70. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud.segment.rsc +1 -1
  71. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
  72. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_full.segment.rsc +6 -6
  73. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_head.segment.rsc +1 -1
  74. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_index.segment.rsc +2 -2
  75. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_tree.segment.rsc +2 -2
  76. package/dashboard/.next/standalone/dashboard/.next/server/app/index.html +1 -1
  77. package/dashboard/.next/standalone/dashboard/.next/server/app/index.rsc +2 -2
  78. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  79. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_full.segment.rsc +2 -2
  80. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_head.segment.rsc +1 -1
  81. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_index.segment.rsc +2 -2
  82. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  83. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.html +1 -1
  84. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.meta +1 -1
  85. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.rsc +7 -7
  86. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture/__PAGE__.segment.rsc +2 -2
  87. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture.segment.rsc +1 -1
  88. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  89. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
  90. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_full.segment.rsc +7 -7
  91. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_head.segment.rsc +1 -1
  92. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_index.segment.rsc +2 -2
  93. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_tree.segment.rsc +2 -2
  94. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.html +1 -1
  95. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.rsc +6 -6
  96. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph/__PAGE__.segment.rsc +1 -1
  97. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph.segment.rsc +1 -1
  98. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  99. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
  100. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_full.segment.rsc +6 -6
  101. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_head.segment.rsc +1 -1
  102. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_index.segment.rsc +2 -2
  103. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_tree.segment.rsc +2 -2
  104. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.html +1 -1
  105. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.rsc +6 -6
  106. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall/__PAGE__.segment.rsc +1 -1
  107. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall.segment.rsc +1 -1
  108. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  109. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
  110. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_full.segment.rsc +6 -6
  111. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_head.segment.rsc +1 -1
  112. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_index.segment.rsc +2 -2
  113. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_tree.segment.rsc +2 -2
  114. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.html +1 -1
  115. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.rsc +6 -6
  116. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review/__PAGE__.segment.rsc +1 -1
  117. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review.segment.rsc +1 -1
  118. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  119. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
  120. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_full.segment.rsc +6 -6
  121. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_head.segment.rsc +1 -1
  122. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_index.segment.rsc +2 -2
  123. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_tree.segment.rsc +2 -2
  124. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.html +1 -1
  125. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.rsc +6 -6
  126. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline/__PAGE__.segment.rsc +1 -1
  127. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline.segment.rsc +1 -1
  128. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  129. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
  130. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_full.segment.rsc +6 -6
  131. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_head.segment.rsc +1 -1
  132. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_index.segment.rsc +2 -2
  133. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_tree.segment.rsc +2 -2
  134. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.html +1 -1
  135. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.rsc +7 -7
  136. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory/__PAGE__.segment.rsc +2 -2
  137. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  138. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
  139. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_full.segment.rsc +7 -7
  140. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_head.segment.rsc +1 -1
  141. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_index.segment.rsc +2 -2
  142. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_tree.segment.rsc +2 -2
  143. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.html +1 -1
  144. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.rsc +7 -7
  145. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview/__PAGE__.segment.rsc +2 -2
  146. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview.segment.rsc +1 -1
  147. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
  148. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_full.segment.rsc +7 -7
  149. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_head.segment.rsc +1 -1
  150. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_index.segment.rsc +2 -2
  151. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_tree.segment.rsc +2 -2
  152. package/dashboard/.next/standalone/dashboard/.next/server/app/page_client-reference-manifest.js +1 -1
  153. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.html +1 -1
  154. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.rsc +6 -6
  155. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit/__PAGE__.segment.rsc +1 -1
  156. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit.segment.rsc +1 -1
  157. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  158. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
  159. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_full.segment.rsc +6 -6
  160. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_head.segment.rsc +1 -1
  161. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_index.segment.rsc +2 -2
  162. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_tree.segment.rsc +2 -2
  163. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.html +1 -1
  164. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.rsc +6 -6
  165. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts/__PAGE__.segment.rsc +1 -1
  166. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts.segment.rsc +1 -1
  167. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  168. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
  169. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_full.segment.rsc +6 -6
  170. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_head.segment.rsc +1 -1
  171. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_index.segment.rsc +2 -2
  172. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_tree.segment.rsc +2 -2
  173. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.html +1 -1
  174. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.rsc +6 -6
  175. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome/__PAGE__.segment.rsc +1 -1
  176. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome.segment.rsc +1 -1
  177. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  178. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
  179. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_full.segment.rsc +6 -6
  180. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_head.segment.rsc +1 -1
  181. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_index.segment.rsc +2 -2
  182. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_tree.segment.rsc +2 -2
  183. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.html +1 -1
  184. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.rsc +6 -6
  185. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies/__PAGE__.segment.rsc +1 -1
  186. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies.segment.rsc +1 -1
  187. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  188. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
  189. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_full.segment.rsc +6 -6
  190. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_head.segment.rsc +1 -1
  191. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_index.segment.rsc +2 -2
  192. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_tree.segment.rsc +2 -2
  193. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.html +1 -1
  194. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.rsc +6 -6
  195. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine/__PAGE__.segment.rsc +1 -1
  196. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine.segment.rsc +1 -1
  197. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  198. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
  199. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_full.segment.rsc +6 -6
  200. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_head.segment.rsc +1 -1
  201. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_index.segment.rsc +2 -2
  202. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_tree.segment.rsc +2 -2
  203. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.html +1 -1
  204. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.rsc +7 -7
  205. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection/__PAGE__.segment.rsc +2 -2
  206. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  207. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
  208. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_full.segment.rsc +7 -7
  209. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_head.segment.rsc +1 -1
  210. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_index.segment.rsc +2 -2
  211. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_tree.segment.rsc +2 -2
  212. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.html +1 -1
  213. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.rsc +7 -7
  214. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings/__PAGE__.segment.rsc +2 -2
  215. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings.segment.rsc +1 -1
  216. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
  217. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_full.segment.rsc +7 -7
  218. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  219. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  220. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  221. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.html +1 -1
  222. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.rsc +6 -6
  223. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray/__PAGE__.segment.rsc +1 -1
  224. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray.segment.rsc +1 -1
  225. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +1 -1
  226. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
  227. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_full.segment.rsc +6 -6
  228. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_head.segment.rsc +1 -1
  229. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_index.segment.rsc +2 -2
  230. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_tree.segment.rsc +2 -2
  231. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.html +1 -1
  232. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.rsc +6 -6
  233. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain/__PAGE__.segment.rsc +1 -1
  234. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +1 -1
  235. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
  236. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_full.segment.rsc +6 -6
  237. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_head.segment.rsc +1 -1
  238. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_index.segment.rsc +2 -2
  239. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_tree.segment.rsc +2 -2
  240. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.html +1 -1
  241. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.rsc +7 -7
  242. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray/__PAGE__.segment.rsc +2 -2
  243. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray.segment.rsc +1 -1
  244. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +5 -5
  245. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_full.segment.rsc +7 -7
  246. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_head.segment.rsc +1 -1
  247. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_index.segment.rsc +2 -2
  248. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_tree.segment.rsc +2 -2
  249. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__c2b92077._.js +3 -0
  250. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_01f6ceb0._.js +3 -0
  251. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_11878109._.js +3 -0
  252. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_1bfd1423._.js +1 -1
  253. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_35a9932a._.js +3 -0
  254. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_35c9f22e._.js +3 -0
  255. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_37f17371._.js +3 -0
  256. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_836b4a04._.js +3 -0
  257. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_9770c429._.js +3 -0
  258. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_9dd626ed._.js +3 -0
  259. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_c219bf07._.js +8 -2
  260. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_e94d2da2._.js +3 -0
  261. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/{dashboard_d5fc66fc._.js → dashboard_fefd3b85._.js} +2 -2
  262. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_components_protection_ProtectionOverview_tsx_54554a97._.js +3 -1
  263. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_components_xray_XRayOverview_tsx_ceba698e._.js +1 -1
  264. package/dashboard/.next/standalone/dashboard/.next/server/pages/404.html +1 -1
  265. package/dashboard/.next/standalone/dashboard/.next/server/pages/500.html +2 -2
  266. package/dashboard/.next/standalone/dashboard/.next/server/server-reference-manifest.js +1 -1
  267. package/dashboard/.next/standalone/dashboard/.next/server/server-reference-manifest.json +1 -1
  268. package/dashboard/.next/standalone/dashboard/.next/static/chunks/079a5be036130e37.js +1 -0
  269. package/dashboard/.next/standalone/dashboard/.next/static/chunks/1770a8ce7abb2437.js +1 -0
  270. package/dashboard/.next/standalone/dashboard/.next/static/chunks/1a074f8ddc7cd385.js +1 -0
  271. package/dashboard/.next/standalone/dashboard/.next/static/chunks/24da99d1341bd573.css +3 -0
  272. package/dashboard/.next/standalone/dashboard/.next/static/chunks/2aa8afb655c1c2e5.js +1 -0
  273. package/dashboard/.next/standalone/dashboard/.next/static/chunks/385ec610bad1acc5.js +1 -0
  274. package/dashboard/.next/standalone/dashboard/.next/static/chunks/3d53807a9a943ce7.js +15 -0
  275. package/dashboard/.next/standalone/dashboard/.next/static/chunks/4f57582c2d186438.js +1 -0
  276. package/dashboard/.next/standalone/dashboard/.next/static/chunks/7fca141efba9d353.js +1 -0
  277. package/dashboard/.next/standalone/dashboard/.next/static/chunks/8593e1796c9d043d.js +1 -0
  278. package/dashboard/.next/standalone/dashboard/.next/static/chunks/c288964c4c00982a.js +3 -0
  279. package/dist/api/routes/admin.js +295 -8
  280. package/dist/api/visualization-server.js +5 -0
  281. package/dist/audit/index.d.ts +2 -1
  282. package/dist/audit/index.js +1 -1
  283. package/dist/audit/memory-scanner.d.ts +66 -1
  284. package/dist/audit/memory-scanner.js +441 -28
  285. package/dist/cli/review-copilot.d.ts +1 -0
  286. package/dist/cli/review-copilot.js +197 -0
  287. package/dist/cloud/cli.js +3 -1
  288. package/dist/cloud/config.d.ts +17 -0
  289. package/dist/cloud/config.js +110 -25
  290. package/dist/database/init.js +37 -0
  291. package/dist/database/schema.sql +20 -0
  292. package/dist/defence/explainer/index.d.ts +5 -0
  293. package/dist/defence/explainer/index.js +28 -0
  294. package/dist/defence/explainer/prompt.d.ts +2 -0
  295. package/dist/defence/explainer/prompt.js +49 -0
  296. package/dist/defence/explainer/schema.d.ts +3 -0
  297. package/dist/defence/explainer/schema.js +204 -0
  298. package/dist/defence/explainer/types.d.ts +26 -0
  299. package/dist/defence/explainer/types.js +1 -0
  300. package/dist/defence/judge/annotate.d.ts +8 -0
  301. package/dist/defence/judge/annotate.js +107 -0
  302. package/dist/defence/judge/annotations-store.d.ts +4 -0
  303. package/dist/defence/judge/annotations-store.js +67 -0
  304. package/dist/defence/judge/decision.d.ts +10 -0
  305. package/dist/defence/judge/decision.js +165 -0
  306. package/dist/defence/judge/fallback.d.ts +4 -0
  307. package/dist/defence/judge/fallback.js +19 -0
  308. package/dist/defence/judge/grouping.d.ts +4 -0
  309. package/dist/defence/judge/grouping.js +52 -0
  310. package/dist/defence/judge/index.d.ts +9 -0
  311. package/dist/defence/judge/index.js +34 -0
  312. package/dist/defence/judge/prompt.d.ts +3 -0
  313. package/dist/defence/judge/prompt.js +49 -0
  314. package/dist/defence/judge/runner.d.ts +3 -0
  315. package/dist/defence/judge/runner.js +160 -0
  316. package/dist/defence/judge/schema.d.ts +15 -0
  317. package/dist/defence/judge/schema.js +118 -0
  318. package/dist/defence/judge/telemetry.d.ts +28 -0
  319. package/dist/defence/judge/telemetry.js +43 -0
  320. package/dist/defence/judge/types.d.ts +67 -0
  321. package/dist/defence/judge/types.js +1 -0
  322. package/dist/defence/judge/worker.d.ts +1 -0
  323. package/dist/defence/judge/worker.js +106 -0
  324. package/dist/defence/quarantine/review.js +16 -7
  325. package/dist/index.d.ts +1 -0
  326. package/dist/index.js +10 -1
  327. package/dist/lib.d.ts +9 -1
  328. package/dist/lib.js +7 -1
  329. package/dist/license/gate.d.ts +1 -1
  330. package/dist/license/gate.js +6 -0
  331. package/package.json +4 -1
  332. package/plugins/openclaw/dist/openclaw.plugin.json +1 -1
  333. package/scripts/ensure-bin-executable.mjs +17 -0
  334. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__4a575c8d._.js +0 -3
  335. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_0734b815._.js +0 -3
  336. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_21edaee1._.js +0 -3
  337. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_354daf70._.js +0 -3
  338. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_8481163e._.js +0 -3
  339. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_a3053031._.js +0 -3
  340. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_a38f5767._.js +0 -3
  341. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_f6813b70._.js +0 -3
  342. package/dashboard/.next/standalone/dashboard/.next/static/chunks/1482af194911d5e7.js +0 -1
  343. package/dashboard/.next/standalone/dashboard/.next/static/chunks/2c2a280eeaed7ed2.js +0 -1
  344. package/dashboard/.next/standalone/dashboard/.next/static/chunks/2f92786ac35bbdb9.js +0 -1
  345. package/dashboard/.next/standalone/dashboard/.next/static/chunks/90f35860c69b2f0b.js +0 -9
  346. package/dashboard/.next/standalone/dashboard/.next/static/chunks/915d5a8cf2d0807e.css +0 -3
  347. package/dashboard/.next/standalone/dashboard/.next/static/chunks/927fe0465516b94a.js +0 -1
  348. package/dashboard/.next/standalone/dashboard/.next/static/chunks/99a618b860658c5c.js +0 -1
  349. package/dashboard/.next/standalone/dashboard/.next/static/chunks/b31e08a78b0cb6fb.js +0 -1
  350. package/dashboard/.next/standalone/dashboard/.next/static/chunks/c2ccb1c0ed7b2af2.js +0 -1
  351. /package/dashboard/.next/standalone/dashboard/.next/static/{Azzglh6qPGDH5Kl8B76tx → 5HSptYF0HaABlloA3Hir3}/_buildManifest.js +0 -0
  352. /package/dashboard/.next/standalone/dashboard/.next/static/{Azzglh6qPGDH5Kl8B76tx → 5HSptYF0HaABlloA3Hir3}/_clientMiddlewareManifest.json +0 -0
  353. /package/dashboard/.next/standalone/dashboard/.next/static/{Azzglh6qPGDH5Kl8B76tx → 5HSptYF0HaABlloA3Hir3}/_ssgManifest.js +0 -0
@@ -7,10 +7,12 @@
7
7
  * - ~/.shieldcortex/ memory database
8
8
  * - Cursor/Windsurf persistent memory locations
9
9
  */
10
+ import { createHash } from 'crypto';
10
11
  import { existsSync, readdirSync, readFileSync, statSync } from 'fs';
11
- import { join } from 'path';
12
+ import { basename, dirname, join } from 'path';
12
13
  import { homedir } from 'os';
13
14
  import { runDefencePipeline } from '../defence/pipeline.js';
15
+ import { getDatabase, withTransaction } from '../database/init.js';
14
16
  const LEARN_MORE = 'https://shieldcortex.ai/docs/threats/memory-poisoning';
15
17
  // ── ShieldCortex Own-Hook Whitelist ──
16
18
  /**
@@ -23,7 +25,7 @@ const SHIELDCORTEX_OWN_PATHS = [
23
25
  'cortex-memory/handler.js',
24
26
  'shieldcortex-realtime',
25
27
  ];
26
- function isShieldCortexOwnPath(filePath) {
28
+ export function isShieldCortexOwnMemoryPath(filePath) {
27
29
  const normalised = filePath.replace(/\\/g, '/');
28
30
  return SHIELDCORTEX_OWN_PATHS.some(p => normalised.includes(p));
29
31
  }
@@ -31,18 +33,240 @@ function isShieldCortexOwnPath(filePath) {
31
33
  const MAX_FILE_SIZE = 1024 * 1024;
32
34
  /** Maximum number of memory files to scan */
33
35
  const MAX_FILES = 200;
34
- /** Source for pipeline scans */
36
+ /** Source for legacy CLI audit output */
35
37
  const AUDIT_SOURCE = { type: 'cli', identifier: 'shieldcortex-audit' };
38
+ function fileId(filePath) {
39
+ return createHash('sha256').update(filePath).digest('hex').slice(0, 16);
40
+ }
41
+ function severityToRisk(severity) {
42
+ if (severity === 'critical')
43
+ return 'CRITICAL';
44
+ if (severity === 'high')
45
+ return 'HIGH';
46
+ if (severity === 'medium')
47
+ return 'MEDIUM';
48
+ if (severity === 'low')
49
+ return 'LOW';
50
+ return 'SAFE';
51
+ }
52
+ function riskRank(risk) {
53
+ switch (risk) {
54
+ case 'CRITICAL': return 5;
55
+ case 'HIGH': return 4;
56
+ case 'MEDIUM': return 3;
57
+ case 'LOW': return 2;
58
+ case 'SAFE': return 1;
59
+ }
60
+ }
61
+ function mergeRisk(current, next) {
62
+ return riskRank(next) > riskRank(current) ? next : current;
63
+ }
64
+ function excerpt(content, max = 4000) {
65
+ return content.length <= max ? content : `${content.slice(0, max)}\n[truncated]`;
66
+ }
67
+ function evidenceFromFinding(finding) {
68
+ if (!finding.matchedText)
69
+ return null;
70
+ const snippet = finding.matchedText.trim();
71
+ if (!snippet)
72
+ return null;
73
+ return { snippet: snippet.slice(0, 240), reason: finding.title };
74
+ }
75
+ function dedupeEvidence(evidence) {
76
+ const seen = new Set();
77
+ return evidence.filter((entry) => {
78
+ const key = `${entry.reason}:${entry.snippet}`;
79
+ if (seen.has(key))
80
+ return false;
81
+ seen.add(key);
82
+ return true;
83
+ }).slice(0, 6);
84
+ }
85
+ function shouldQueueMemoryFile(file) {
86
+ return file.firewallResult !== 'ALLOW' || riskRank(file.risk) >= riskRank('MEDIUM');
87
+ }
88
+ function queueFirewallResult(file) {
89
+ return file.firewallResult === 'BLOCK' ? 'BLOCK' : 'QUARANTINE';
90
+ }
91
+ function riskToAnomalyScore(risk) {
92
+ switch (risk) {
93
+ case 'CRITICAL': return 1;
94
+ case 'HIGH': return 0.8;
95
+ case 'MEDIUM': return 0.55;
96
+ case 'LOW': return 0.2;
97
+ case 'SAFE': return 0;
98
+ }
99
+ }
100
+ function buildQuarantineTitle(file) {
101
+ return `Memory file: ${basename(file.path)}`;
102
+ }
103
+ function buildQuarantineContent(file) {
104
+ const evidence = file.evidence
105
+ .map((entry) => `- ${entry.reason}: ${entry.snippet}`)
106
+ .join('\n');
107
+ const findings = file.findings
108
+ .map((finding) => `- ${finding.severity.toUpperCase()}: ${finding.title} - ${finding.description}`)
109
+ .join('\n');
110
+ return [
111
+ `Path: ${file.path}`,
112
+ `Source: ${file.source}`,
113
+ `Risk: ${file.risk}`,
114
+ `Firewall result: ${file.firewallResult}`,
115
+ `Reason: ${file.reason}`,
116
+ file.threatIndicators.length > 0 ? `Threat indicators: ${file.threatIndicators.join(', ')}` : '',
117
+ evidence ? `Evidence:\n${evidence}` : '',
118
+ findings ? `Findings:\n${findings}` : '',
119
+ file.contentExcerpt ? `Content excerpt:\n${file.contentExcerpt}` : 'Content excerpt: empty file',
120
+ ].filter(Boolean).join('\n\n');
121
+ }
122
+ export function queueMemoryFileScanFindings(result) {
123
+ return withTransaction(() => {
124
+ const db = getDatabase();
125
+ const queue = {
126
+ created: 0,
127
+ updated: 0,
128
+ skippedSafe: 0,
129
+ skippedReviewed: 0,
130
+ items: [],
131
+ };
132
+ const reviewedSameContent = db.prepare(`
133
+ SELECT id, status
134
+ FROM quarantine
135
+ WHERE source_type = 'memory_file'
136
+ AND source_identifier = ?
137
+ AND original_content = ?
138
+ AND status IN ('approved', 'rejected', 'expired')
139
+ ORDER BY created_at DESC
140
+ LIMIT 1
141
+ `);
142
+ const pendingForPath = db.prepare(`
143
+ SELECT id
144
+ FROM quarantine
145
+ WHERE source_type = 'memory_file'
146
+ AND source_identifier = ?
147
+ AND status = 'pending'
148
+ ORDER BY created_at DESC
149
+ LIMIT 1
150
+ `);
151
+ const updatePending = db.prepare(`
152
+ UPDATE quarantine
153
+ SET original_title = ?,
154
+ original_content = ?,
155
+ reason = ?,
156
+ threat_indicators = ?,
157
+ anomaly_score = ?,
158
+ firewall_result = ?,
159
+ audit_id = ?
160
+ WHERE id = ?
161
+ AND status = 'pending'
162
+ `);
163
+ const insertPending = db.prepare(`
164
+ INSERT INTO quarantine (
165
+ original_title,
166
+ original_content,
167
+ project,
168
+ source_type,
169
+ source_identifier,
170
+ reason,
171
+ threat_indicators,
172
+ anomaly_score,
173
+ firewall_result,
174
+ audit_id,
175
+ status
176
+ ) VALUES (?, ?, NULL, 'memory_file', ?, ?, ?, ?, ?, ?, 'pending')
177
+ `);
178
+ for (const file of result.files) {
179
+ if (!shouldQueueMemoryFile(file)) {
180
+ queue.skippedSafe += 1;
181
+ queue.items.push({
182
+ fileId: file.id,
183
+ path: file.path,
184
+ quarantineId: null,
185
+ status: 'skipped_safe',
186
+ });
187
+ continue;
188
+ }
189
+ const title = buildQuarantineTitle(file);
190
+ const content = buildQuarantineContent(file);
191
+ const reason = file.reason || 'Memory file scan finding';
192
+ const threatIndicators = JSON.stringify(file.threatIndicators);
193
+ const anomalyScore = file.anomalyScore || riskToAnomalyScore(file.risk);
194
+ const firewallResult = queueFirewallResult(file);
195
+ const reviewed = reviewedSameContent.get(file.path, content);
196
+ if (reviewed) {
197
+ queue.skippedReviewed += 1;
198
+ queue.items.push({
199
+ fileId: file.id,
200
+ path: file.path,
201
+ quarantineId: reviewed.id,
202
+ status: 'skipped_reviewed',
203
+ });
204
+ continue;
205
+ }
206
+ const pending = pendingForPath.get(file.path);
207
+ if (pending) {
208
+ updatePending.run(title, content, reason, threatIndicators, anomalyScore, firewallResult, file.auditId, pending.id);
209
+ queue.updated += 1;
210
+ queue.items.push({
211
+ fileId: file.id,
212
+ path: file.path,
213
+ quarantineId: pending.id,
214
+ status: 'updated',
215
+ });
216
+ continue;
217
+ }
218
+ const inserted = insertPending.run(title, content, file.path, reason, threatIndicators, anomalyScore, firewallResult, file.auditId);
219
+ queue.created += 1;
220
+ queue.items.push({
221
+ fileId: file.id,
222
+ path: file.path,
223
+ quarantineId: Number(inserted.lastInsertRowid),
224
+ status: 'created',
225
+ });
226
+ }
227
+ return queue;
228
+ });
229
+ }
36
230
  /**
37
231
  * Find memory-related files across known AI agent locations.
38
232
  */
39
- function discoverMemoryFiles() {
40
- const home = homedir();
41
- const files = [];
42
- const addIfFile = (p) => {
233
+ export function discoverMemoryFiles(options = {}) {
234
+ const home = options.homeDir ?? homedir();
235
+ const cwd = options.cwd ?? process.cwd();
236
+ const maxFiles = options.maxFiles ?? MAX_FILES;
237
+ const maxFileSize = options.maxFileSize ?? MAX_FILE_SIZE;
238
+ const files = new Map();
239
+ const addDiscoveredFile = (p, source, stat = statSync(p)) => {
240
+ const key = `${stat.dev}:${stat.ino}`;
241
+ if (!files.has(key)) {
242
+ files.set(key, { path: p, source });
243
+ }
244
+ };
245
+ const resolveActualPath = (p) => {
246
+ try {
247
+ const dir = dirname(p);
248
+ const base = basename(p);
249
+ const entries = readdirSync(dir);
250
+ const exact = entries.find((entry) => entry === base);
251
+ if (exact)
252
+ return join(dir, exact);
253
+ const caseInsensitive = entries.find((entry) => entry.toLowerCase() === base.toLowerCase());
254
+ return caseInsensitive ? join(dir, caseInsensitive) : p;
255
+ }
256
+ catch {
257
+ return p;
258
+ }
259
+ };
260
+ const addIfFile = (p, source) => {
43
261
  try {
44
- if (existsSync(p) && statSync(p).isFile() && statSync(p).size <= MAX_FILE_SIZE) {
45
- files.push(p);
262
+ if (files.size >= maxFiles)
263
+ return;
264
+ if (!existsSync(p))
265
+ return;
266
+ const actual = resolveActualPath(p);
267
+ const stat = statSync(actual);
268
+ if (stat.isFile() && stat.size <= maxFileSize) {
269
+ addDiscoveredFile(actual, source, stat);
46
270
  }
47
271
  }
48
272
  catch { /* ignore */ }
@@ -53,22 +277,23 @@ function discoverMemoryFiles() {
53
277
  'CachedData', 'CachedExtensions', 'CachedExtensionVSIXs',
54
278
  'User', 'Code', 'globalStorage', 'workspaceStorage',
55
279
  ]);
56
- const walkDir = (dir, patterns, maxDepth = 3) => {
280
+ const walkDir = (dir, patterns, maxDepth = 3, source = 'Memory file') => {
57
281
  const walk = (d, depth) => {
58
- if (depth > maxDepth || files.length >= MAX_FILES)
282
+ if (depth > maxDepth || files.size >= maxFiles)
59
283
  return;
60
284
  try {
61
285
  if (!existsSync(d))
62
286
  return;
63
287
  const entries = readdirSync(d, { withFileTypes: true });
64
288
  for (const entry of entries) {
65
- if (files.length >= MAX_FILES)
289
+ if (files.size >= maxFiles)
66
290
  return;
67
291
  const full = join(d, entry.name);
68
292
  if (entry.isFile() && patterns.some(p => p.test(entry.name))) {
69
293
  try {
70
- if (statSync(full).size <= MAX_FILE_SIZE)
71
- files.push(full);
294
+ const stat = statSync(full);
295
+ if (stat.size <= maxFileSize)
296
+ addDiscoveredFile(full, source, stat);
72
297
  }
73
298
  catch { /* ignore */ }
74
299
  }
@@ -82,23 +307,33 @@ function discoverMemoryFiles() {
82
307
  walk(dir, 0);
83
308
  };
84
309
  // Claude Code project memories
85
- walkDir(join(home, '.claude', 'projects'), [/\.md$/], 4);
86
- // Claude Code global CLAUDE.md
87
- addIfFile(join(home, '.claude', 'CLAUDE.md'));
310
+ walkDir(join(home, '.claude', 'projects'), [/\.md$/], 4, 'Claude project memory');
311
+ // Claude Code global memories
312
+ addIfFile(join(home, '.claude', 'CLAUDE.md'), 'Claude global memory');
313
+ addIfFile(join(home, '.claude', 'memory.md'), 'Claude global memory');
314
+ addIfFile(join(home, '.claude', 'MEMORY.md'), 'Claude global memory');
315
+ addIfFile(join(home, '.claude', '.memory.md'), 'Claude global memory');
316
+ walkDir(join(home, '.claude', 'memories'), [/\.md$/], 5, 'Claude global memory');
88
317
  // Note: settings.json is excluded — it contains legitimate permission
89
318
  // patterns that trigger false positives in the defence pipeline.
90
319
  // Cursor — only scan known memory/rules locations, NOT extensions
91
- addIfFile(join(home, '.cursor', 'rules', 'global.md'));
92
- walkDir(join(home, '.cursor', 'rules'), [/\.md$/, /\.mdc$/], 2);
93
- walkDir(join(home, '.cursor', 'memories'), [/\.md$/, /\.json$/], 2);
320
+ addIfFile(join(home, '.cursor', 'rules', 'global.md'), 'Cursor rule memory');
321
+ walkDir(join(home, '.cursor', 'rules'), [/\.md$/, /\.mdc$/], 2, 'Cursor rule memory');
322
+ walkDir(join(home, '.cursor', 'memories'), [/\.md$/, /\.json$/], 2, 'Cursor memory');
94
323
  // Windsurf — known memory locations
95
- walkDir(join(home, '.windsurf', 'memories'), [/\.md$/, /\.json$/], 2);
96
- walkDir(join(home, '.windsurf', 'rules'), [/\.md$/, /\.mdc$/], 2);
324
+ walkDir(join(home, '.windsurf', 'memories'), [/\.md$/, /\.json$/], 2, 'Windsurf memory');
325
+ walkDir(join(home, '.windsurf', 'rules'), [/\.md$/, /\.mdc$/], 2, 'Windsurf rule memory');
97
326
  // CWD-relative project memory files
98
- const cwd = process.cwd();
99
- addIfFile(join(cwd, 'CLAUDE.md'));
100
- walkDir(join(cwd, '.claude', 'commands'), [/\.md$/], 2);
101
- return files;
327
+ addIfFile(join(cwd, 'CLAUDE.md'), 'Project Claude memory');
328
+ addIfFile(join(cwd, 'memory.md'), 'Project memory');
329
+ addIfFile(join(cwd, 'MEMORY.md'), 'Project memory');
330
+ addIfFile(join(cwd, '.memory.md'), 'Project memory');
331
+ addIfFile(join(cwd, '.claude', 'memory.md'), 'Project Claude memory');
332
+ addIfFile(join(cwd, '.claude', 'MEMORY.md'), 'Project Claude memory');
333
+ addIfFile(join(cwd, '.claude', '.memory.md'), 'Project Claude memory');
334
+ walkDir(join(cwd, '.claude', 'memories'), [/\.md$/], 5, 'Project Claude memory');
335
+ walkDir(join(cwd, '.claude', 'commands'), [/\.md$/], 2, 'Project Claude command memory');
336
+ return [...files.values()];
102
337
  }
103
338
  /**
104
339
  * Scan a single memory file through the defence pipeline.
@@ -190,6 +425,184 @@ function scanMemoryFile(filePath) {
190
425
  return true;
191
426
  });
192
427
  }
428
+ function scanMemoryFileDetailed(file) {
429
+ let content;
430
+ let sizeBytes = 0;
431
+ let modifiedAt = null;
432
+ try {
433
+ const stat = statSync(file.path);
434
+ sizeBytes = stat.size;
435
+ modifiedAt = stat.mtime.toISOString();
436
+ content = readFileSync(file.path, 'utf-8');
437
+ }
438
+ catch {
439
+ return null;
440
+ }
441
+ if (!content.trim()) {
442
+ return {
443
+ id: fileId(file.path),
444
+ path: file.path,
445
+ source: file.source,
446
+ sizeBytes,
447
+ modifiedAt,
448
+ contentExcerpt: '',
449
+ auditId: null,
450
+ anomalyScore: 0,
451
+ firewallResult: 'ALLOW',
452
+ risk: 'SAFE',
453
+ reason: 'Empty memory file.',
454
+ threatIndicators: [],
455
+ evidence: [],
456
+ findings: [],
457
+ };
458
+ }
459
+ let firewallResult = 'ALLOW';
460
+ let risk = 'SAFE';
461
+ let reason = 'No threats detected.';
462
+ let threatIndicators = [];
463
+ let evidence = [];
464
+ let auditId = null;
465
+ let anomalyScore = 0;
466
+ const findings = [];
467
+ try {
468
+ const auditSource = { type: 'cli', identifier: `memory-file:${file.path}` };
469
+ const result = runDefencePipeline(content, `audit:${file.path}`, auditSource);
470
+ auditId = result.auditId;
471
+ anomalyScore = result.firewall.anomalyScore;
472
+ firewallResult = result.firewall.result;
473
+ reason = result.firewall.reason;
474
+ threatIndicators = result.firewall.threatIndicators;
475
+ if (firewallResult === 'BLOCK') {
476
+ risk = 'CRITICAL';
477
+ findings.push({
478
+ scanner: 'memory',
479
+ severity: 'critical',
480
+ title: 'Blocked content in memory file',
481
+ description: `Defence pipeline blocked this file: ${result.firewall.reason}`,
482
+ filePath: file.path,
483
+ matchedText: result.firewall.blockedPatterns.join(', ').slice(0, 120),
484
+ learnMoreUrl: LEARN_MORE,
485
+ });
486
+ }
487
+ else if (firewallResult === 'QUARANTINE') {
488
+ risk = 'HIGH';
489
+ findings.push({
490
+ scanner: 'memory',
491
+ severity: 'high',
492
+ title: 'Suspicious content in memory file',
493
+ description: `Defence pipeline flagged this file for quarantine: ${result.firewall.reason}`,
494
+ filePath: file.path,
495
+ matchedText: result.firewall.blockedPatterns.join(', ').slice(0, 120),
496
+ learnMoreUrl: LEARN_MORE,
497
+ });
498
+ }
499
+ for (const indicator of result.firewall.threatIndicators) {
500
+ if (indicator === 'instruction_injection') {
501
+ findings.push({
502
+ scanner: 'memory',
503
+ severity: 'critical',
504
+ title: 'Prompt injection detected in memory',
505
+ description: 'This memory file contains instruction injection patterns that could hijack agent behaviour.',
506
+ filePath: file.path,
507
+ learnMoreUrl: LEARN_MORE,
508
+ });
509
+ risk = mergeRisk(risk, 'CRITICAL');
510
+ }
511
+ else if (indicator === 'privilege_escalation') {
512
+ findings.push({
513
+ scanner: 'memory',
514
+ severity: 'high',
515
+ title: 'Privilege escalation in memory',
516
+ description: 'This memory file references sensitive system paths or elevated permissions.',
517
+ filePath: file.path,
518
+ learnMoreUrl: LEARN_MORE,
519
+ });
520
+ risk = mergeRisk(risk, 'HIGH');
521
+ }
522
+ }
523
+ if (result.credentialScan && result.credentialScan.findings.length > 0) {
524
+ for (const cf of result.credentialScan.findings) {
525
+ const severity = cf.severity === 'critical' ? 'critical' : cf.severity === 'high' ? 'high' : 'medium';
526
+ findings.push({
527
+ scanner: 'memory',
528
+ severity,
529
+ title: `Credential leaked in memory: ${cf.provider || cf.type}`,
530
+ description: `A ${cf.type} credential was found stored in agent memory. This could be exfiltrated by a malicious prompt.`,
531
+ filePath: file.path,
532
+ matchedText: cf.match,
533
+ learnMoreUrl: 'https://shieldcortex.ai/docs/threats/credential-leak',
534
+ });
535
+ risk = mergeRisk(risk, severityToRisk(severity));
536
+ }
537
+ }
538
+ evidence = [
539
+ ...result.firewall.blockedPatterns.map((snippet) => ({
540
+ snippet: snippet.slice(0, 240),
541
+ reason: 'Matched deterministic defence pattern',
542
+ })),
543
+ ...findings.map(evidenceFromFinding).filter((entry) => Boolean(entry)),
544
+ ];
545
+ }
546
+ catch {
547
+ firewallResult = 'BLOCK';
548
+ risk = 'CRITICAL';
549
+ reason = 'Pipeline error — fail-closed for security';
550
+ threatIndicators = ['pipeline_error'];
551
+ anomalyScore = 1;
552
+ }
553
+ return {
554
+ id: fileId(file.path),
555
+ path: file.path,
556
+ source: file.source,
557
+ sizeBytes,
558
+ modifiedAt,
559
+ contentExcerpt: excerpt(content),
560
+ auditId,
561
+ anomalyScore,
562
+ firewallResult,
563
+ risk,
564
+ reason,
565
+ threatIndicators,
566
+ evidence: dedupeEvidence(evidence),
567
+ findings,
568
+ };
569
+ }
570
+ export function scanMemoryFilesDetailed(options = {}) {
571
+ const start = Date.now();
572
+ const discovered = discoverMemoryFiles(options)
573
+ .filter((file) => !isShieldCortexOwnMemoryPath(file.path));
574
+ const files = discovered
575
+ .map(scanMemoryFileDetailed)
576
+ .filter((file) => Boolean(file))
577
+ .sort((a, b) => riskRank(b.risk) - riskRank(a.risk) || a.path.localeCompare(b.path));
578
+ const summary = files.reduce((acc, file) => {
579
+ acc.total += 1;
580
+ if (file.risk === 'SAFE' || file.risk === 'LOW')
581
+ acc.safe += 1;
582
+ else
583
+ acc.flagged += 1;
584
+ if (file.risk === 'CRITICAL')
585
+ acc.critical += 1;
586
+ if (file.risk === 'HIGH')
587
+ acc.high += 1;
588
+ if (file.risk === 'MEDIUM')
589
+ acc.medium += 1;
590
+ return acc;
591
+ }, {
592
+ total: 0,
593
+ safe: 0,
594
+ flagged: 0,
595
+ critical: 0,
596
+ high: 0,
597
+ medium: 0,
598
+ });
599
+ return {
600
+ scannedAt: new Date().toISOString(),
601
+ summary,
602
+ files,
603
+ durationMs: Date.now() - start,
604
+ };
605
+ }
193
606
  /**
194
607
  * Run the memory scanner.
195
608
  */
@@ -209,9 +622,9 @@ export function scanMemories() {
209
622
  const allFindings = [];
210
623
  for (const file of files) {
211
624
  // Skip ShieldCortex's own hook/plugin files to avoid false positives (#14)
212
- if (isShieldCortexOwnPath(file))
625
+ if (isShieldCortexOwnMemoryPath(file.path))
213
626
  continue;
214
- allFindings.push(...scanMemoryFile(file));
627
+ allFindings.push(...scanMemoryFile(file.path));
215
628
  }
216
629
  return {
217
630
  name: 'Memory Scanner',
@@ -0,0 +1 @@
1
+ export declare function handleReviewCopilotCommand(args: string[], dbPath?: string): Promise<void>;