shieldcortex 4.12.11 → 4.12.13

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 (354) 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/index.js +6 -3
  333. package/plugins/openclaw/dist/openclaw.plugin.json +2 -1
  334. package/scripts/ensure-bin-executable.mjs +17 -0
  335. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__4a575c8d._.js +0 -3
  336. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_0734b815._.js +0 -3
  337. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_21edaee1._.js +0 -3
  338. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_354daf70._.js +0 -3
  339. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_8481163e._.js +0 -3
  340. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_a3053031._.js +0 -3
  341. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_a38f5767._.js +0 -3
  342. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_f6813b70._.js +0 -3
  343. package/dashboard/.next/standalone/dashboard/.next/static/chunks/1482af194911d5e7.js +0 -1
  344. package/dashboard/.next/standalone/dashboard/.next/static/chunks/2c2a280eeaed7ed2.js +0 -1
  345. package/dashboard/.next/standalone/dashboard/.next/static/chunks/2f92786ac35bbdb9.js +0 -1
  346. package/dashboard/.next/standalone/dashboard/.next/static/chunks/90f35860c69b2f0b.js +0 -9
  347. package/dashboard/.next/standalone/dashboard/.next/static/chunks/915d5a8cf2d0807e.css +0 -3
  348. package/dashboard/.next/standalone/dashboard/.next/static/chunks/927fe0465516b94a.js +0 -1
  349. package/dashboard/.next/standalone/dashboard/.next/static/chunks/99a618b860658c5c.js +0 -1
  350. package/dashboard/.next/standalone/dashboard/.next/static/chunks/b31e08a78b0cb6fb.js +0 -1
  351. package/dashboard/.next/standalone/dashboard/.next/static/chunks/c2ccb1c0ed7b2af2.js +0 -1
  352. /package/dashboard/.next/standalone/dashboard/.next/static/{Azzglh6qPGDH5Kl8B76tx → ZozFsMrOVzVLH6CQW3jPr}/_buildManifest.js +0 -0
  353. /package/dashboard/.next/standalone/dashboard/.next/static/{Azzglh6qPGDH5Kl8B76tx → ZozFsMrOVzVLH6CQW3jPr}/_clientMiddlewareManifest.json +0 -0
  354. /package/dashboard/.next/standalone/dashboard/.next/static/{Azzglh6qPGDH5Kl8B76tx → ZozFsMrOVzVLH6CQW3jPr}/_ssgManifest.js +0 -0
@@ -4,10 +4,88 @@ import { queryAgentOperations, queryAgentRegistry, queryAgentTimeline, queryAudi
4
4
  import { approveQuarantineItem, approveQuarantineItems, rejectQuarantineItem, rejectQuarantineItems, } from '../../defence/quarantine/review.js';
5
5
  import { getLicense, getLicenseTier, getTrialStatus, activateLicense, deactivateLicense } from '../../license/store.js';
6
6
  import { listFeatures } from '../../license/gate.js';
7
+ import { isFeatureEnabled } from '../../license/gate.js';
7
8
  import { validateOnceNow } from '../../license/validate.js';
8
9
  import { existsSync, readFileSync, readdirSync } from 'fs';
9
10
  import { join } from 'path';
10
11
  import { homedir } from 'os';
12
+ function parseAnnotationJson(value) {
13
+ if (typeof value !== 'string' || !value.trim())
14
+ return null;
15
+ try {
16
+ return JSON.parse(value);
17
+ }
18
+ catch {
19
+ return null;
20
+ }
21
+ }
22
+ function readTailLines(path, count) {
23
+ try {
24
+ if (!existsSync(path))
25
+ return [];
26
+ return readFileSync(path, 'utf-8').trim().split('\n').filter(Boolean).slice(-count);
27
+ }
28
+ catch {
29
+ return [];
30
+ }
31
+ }
32
+ function isModelCacheReady(cacheDir) {
33
+ try {
34
+ return existsSync(cacheDir) && readdirSync(cacheDir).length > 0;
35
+ }
36
+ catch {
37
+ return false;
38
+ }
39
+ }
40
+ const LOCAL_AI_SUBJECT_KINDS = new Set([
41
+ 'memory',
42
+ 'memory_file',
43
+ 'xray_finding',
44
+ 'quarantine_item',
45
+ 'audit_event',
46
+ 'generic',
47
+ ]);
48
+ function cleanString(value, max) {
49
+ if (typeof value !== 'string')
50
+ return undefined;
51
+ const trimmed = value.trim();
52
+ return trimmed ? trimmed.slice(0, max) : undefined;
53
+ }
54
+ function cleanStringArray(value, maxItems, maxLength) {
55
+ if (!Array.isArray(value))
56
+ return undefined;
57
+ return value
58
+ .map((item) => cleanString(item, maxLength))
59
+ .filter((item) => Boolean(item))
60
+ .slice(0, maxItems);
61
+ }
62
+ function cleanMetadata(value) {
63
+ if (!value || typeof value !== 'object' || Array.isArray(value))
64
+ return undefined;
65
+ const entries = Object.entries(value).slice(0, 40);
66
+ return Object.fromEntries(entries);
67
+ }
68
+ function parseLocalAiSubject(value) {
69
+ if (!value || typeof value !== 'object')
70
+ return null;
71
+ const body = value;
72
+ const kind = body.kind;
73
+ const title = cleanString(body.title, 240);
74
+ const content = cleanString(body.content, 20_000);
75
+ if (typeof kind !== 'string' || !LOCAL_AI_SUBJECT_KINDS.has(kind))
76
+ return null;
77
+ if (!title || !content)
78
+ return null;
79
+ return {
80
+ kind: kind,
81
+ title,
82
+ content,
83
+ project: cleanString(body.project, 160) ?? null,
84
+ source: cleanString(body.source, 240) ?? null,
85
+ signals: cleanStringArray(body.signals, 20, 120),
86
+ metadata: cleanMetadata(body.metadata),
87
+ };
88
+ }
11
89
  export function registerAdminRoutes(app, deps) {
12
90
  const { brainWorker, requireNotLocked, requireProFeature, requireIronDomeAction } = deps;
13
91
  app.get('/api/v1/audit', (req, res) => {
@@ -175,27 +253,236 @@ export function registerAdminRoutes(app, deps) {
175
253
  app.get('/api/v1/quarantine', (req, res) => {
176
254
  try {
177
255
  const db = getDatabase();
178
- const status = req.query.status ?? 'pending';
256
+ const status = typeof req.query.status === 'string' && req.query.status.trim()
257
+ ? req.query.status.trim()
258
+ : 'pending';
179
259
  const limit = parseInt(req.query.limit, 10) || 50;
180
- const project = req.query.project;
181
- const sql = project
182
- ? 'SELECT * FROM quarantine WHERE status = ? AND project = ? ORDER BY created_at DESC LIMIT ?'
183
- : 'SELECT * FROM quarantine WHERE status = ? ORDER BY created_at DESC LIMIT ?';
184
- const params = project ? [status, project, limit] : [status, limit];
185
- const rows = db.prepare(sql).all(...params);
260
+ const project = typeof req.query.project === 'string' && req.query.project.trim()
261
+ ? req.query.project.trim()
262
+ : undefined;
263
+ const sourceType = typeof req.query.sourceType === 'string' && req.query.sourceType.trim()
264
+ ? req.query.sourceType.trim()
265
+ : undefined;
266
+ const clauses = ['status = ?'];
267
+ const params = [status];
268
+ if (project) {
269
+ clauses.push('project = ?');
270
+ params.push(project);
271
+ }
272
+ if (sourceType) {
273
+ clauses.push('source_type = ?');
274
+ params.push(sourceType);
275
+ }
276
+ const whereSql = clauses.join(' AND ');
277
+ const rows = db.prepare(`SELECT * FROM quarantine WHERE ${whereSql} ORDER BY created_at DESC LIMIT ?`)
278
+ .all(...params, limit);
279
+ const countSql = `SELECT COUNT(*) as count FROM quarantine WHERE ${whereSql}`;
280
+ const countParams = params;
281
+ const countRow = db.prepare(countSql).get(...countParams);
282
+ const annotationByItem = new Map();
283
+ const ids = rows
284
+ .map((row) => Number(row.id))
285
+ .filter((id) => Number.isInteger(id) && id > 0);
286
+ if (ids.length > 0) {
287
+ const placeholders = ids.map(() => '?').join(',');
288
+ const annotationRows = db.prepare(`
289
+ SELECT qa.item_id, qa.annotation_json
290
+ FROM quarantine_annotations qa
291
+ JOIN (
292
+ SELECT item_id, MAX(generated_at) AS generated_at
293
+ FROM quarantine_annotations
294
+ WHERE item_id IN (${placeholders})
295
+ GROUP BY item_id
296
+ ) latest
297
+ ON latest.item_id = qa.item_id
298
+ AND latest.generated_at = qa.generated_at
299
+ `).all(...ids);
300
+ for (const annotationRow of annotationRows) {
301
+ annotationByItem.set(annotationRow.item_id, parseAnnotationJson(annotationRow.annotation_json));
302
+ }
303
+ }
186
304
  res.json({
187
305
  items: rows.map((row) => ({
188
306
  ...row,
189
307
  title: row.original_title,
190
308
  content: row.original_content,
309
+ annotation: annotationByItem.get(Number(row.id)) ?? null,
191
310
  })),
192
- total: rows.length,
311
+ total: countRow?.count ?? rows.length,
193
312
  });
194
313
  }
195
314
  catch (error) {
196
315
  res.status(500).json({ error: error.message });
197
316
  }
198
317
  });
318
+ app.get('/api/v1/review-copilot/status', async (_req, res) => {
319
+ try {
320
+ const { getReviewCopilotConfig } = await import('../../cloud/config.js');
321
+ const config = getReviewCopilotConfig();
322
+ const cacheReady = isModelCacheReady(config.modelCacheDir);
323
+ const recentTelemetry = readTailLines(config.telemetryPath, 10)
324
+ .map((line) => {
325
+ try {
326
+ return JSON.parse(line);
327
+ }
328
+ catch {
329
+ return null;
330
+ }
331
+ })
332
+ .filter(Boolean);
333
+ res.json({
334
+ enabled: config.enabled,
335
+ featureEnabled: isFeatureEnabled('local_ai_explainer'),
336
+ modelId: config.modelId,
337
+ modelCacheDir: config.modelCacheDir,
338
+ modelCached: cacheReady,
339
+ telemetryPath: config.telemetryPath,
340
+ inferenceTimeoutMs: config.inferenceTimeoutMs,
341
+ workerHeapMB: config.workerHeapMB,
342
+ recentTelemetry,
343
+ });
344
+ }
345
+ catch (error) {
346
+ res.status(500).json({ error: error.message });
347
+ }
348
+ });
349
+ app.get('/api/v1/local-ai/status', async (_req, res) => {
350
+ try {
351
+ const { getReviewCopilotConfig } = await import('../../cloud/config.js');
352
+ const config = getReviewCopilotConfig();
353
+ const cacheReady = isModelCacheReady(config.modelCacheDir);
354
+ const recentTelemetry = readTailLines(config.telemetryPath, 10)
355
+ .map((line) => {
356
+ try {
357
+ return JSON.parse(line);
358
+ }
359
+ catch {
360
+ return null;
361
+ }
362
+ })
363
+ .filter(Boolean);
364
+ res.json({
365
+ enabled: config.enabled,
366
+ featureEnabled: isFeatureEnabled('local_ai_explainer'),
367
+ modelId: config.modelId,
368
+ modelCacheDir: config.modelCacheDir,
369
+ modelCached: cacheReady,
370
+ telemetryPath: config.telemetryPath,
371
+ inferenceTimeoutMs: config.inferenceTimeoutMs,
372
+ workerHeapMB: config.workerHeapMB,
373
+ recentTelemetry,
374
+ });
375
+ }
376
+ catch (error) {
377
+ res.status(500).json({ error: error.message });
378
+ }
379
+ });
380
+ app.post('/api/v1/local-ai/explain', requireNotLocked, requireProFeature('local_ai_explainer'), async (req, res) => {
381
+ try {
382
+ const subject = parseLocalAiSubject(req.body);
383
+ if (!subject) {
384
+ return res.status(400).json({ error: 'Invalid explanation subject' });
385
+ }
386
+ const { getReviewCopilotConfig } = await import('../../cloud/config.js');
387
+ const config = getReviewCopilotConfig();
388
+ if (!config.enabled) {
389
+ return res.status(409).json({ error: 'Local AI Explainer is disabled', code: 'LOCAL_AI_EXPLAINER_DISABLED' });
390
+ }
391
+ if (!isModelCacheReady(config.modelCacheDir)) {
392
+ return res.status(409).json({ error: 'Local AI Explainer model is not cached', code: 'LOCAL_AI_EXPLAINER_MODEL_NOT_CACHED' });
393
+ }
394
+ const { explainLocalAiSubject } = await import('../../defence/explainer/index.js');
395
+ const explanation = await explainLocalAiSubject(subject);
396
+ res.json({ success: true, explanation });
397
+ }
398
+ catch (error) {
399
+ res.status(500).json({ error: error.message });
400
+ }
401
+ });
402
+ app.post('/api/v1/memory-files/scan', requireNotLocked, requireProFeature('memory_file_scan'), async (_req, res) => {
403
+ try {
404
+ const { queueMemoryFileScanFindings, scanMemoryFilesDetailed } = await import('../../audit/memory-scanner.js');
405
+ const result = scanMemoryFilesDetailed();
406
+ const quarantine = queueMemoryFileScanFindings(result);
407
+ res.json({
408
+ success: true,
409
+ scannedAt: result.scannedAt,
410
+ summary: result.summary,
411
+ quarantine,
412
+ files: result.files,
413
+ });
414
+ }
415
+ catch (error) {
416
+ res.status(500).json({ error: error.message });
417
+ }
418
+ });
419
+ app.get('/api/v1/quarantine/:id/annotation', (req, res) => {
420
+ try {
421
+ const id = parseInt(req.params.id, 10);
422
+ if (!Number.isInteger(id) || id <= 0) {
423
+ return res.status(400).json({ error: 'Invalid quarantine id' });
424
+ }
425
+ const db = getDatabase();
426
+ const row = db.prepare(`
427
+ SELECT annotation_json
428
+ FROM quarantine_annotations
429
+ WHERE item_id = ?
430
+ ORDER BY generated_at DESC
431
+ LIMIT 1
432
+ `).get(id);
433
+ res.json({ annotation: row ? parseAnnotationJson(row.annotation_json) : null });
434
+ }
435
+ catch (error) {
436
+ res.status(500).json({ error: error.message });
437
+ }
438
+ });
439
+ app.post('/api/v1/quarantine/:id/annotate', requireNotLocked, requireProFeature('local_ai_explainer'), async (req, res) => {
440
+ try {
441
+ const id = parseInt(req.params.id, 10);
442
+ if (!Number.isInteger(id) || id <= 0) {
443
+ return res.status(400).json({ error: 'Invalid quarantine id' });
444
+ }
445
+ const { getReviewCopilotConfig } = await import('../../cloud/config.js');
446
+ const config = getReviewCopilotConfig();
447
+ if (!config.enabled) {
448
+ return res.status(409).json({ error: 'Local AI Explainer is disabled', code: 'LOCAL_AI_EXPLAINER_DISABLED' });
449
+ }
450
+ if (!isModelCacheReady(config.modelCacheDir)) {
451
+ return res.status(409).json({ error: 'Local AI Explainer model is not cached', code: 'LOCAL_AI_EXPLAINER_MODEL_NOT_CACHED' });
452
+ }
453
+ const { annotateQuarantineItem } = await import('../../defence/judge/annotate.js');
454
+ const annotation = await annotateQuarantineItem(id);
455
+ res.json({ success: Boolean(annotation), annotation });
456
+ }
457
+ catch (error) {
458
+ res.status(500).json({ error: error.message });
459
+ }
460
+ });
461
+ app.post('/api/v1/quarantine/annotate-pending', requireNotLocked, requireProFeature('local_ai_explainer'), async (req, res) => {
462
+ try {
463
+ const limit = Number(req.body?.limit ?? 25);
464
+ if (!Number.isInteger(limit) || limit < 1 || limit > 100) {
465
+ return res.status(400).json({ error: 'limit must be an integer between 1 and 100' });
466
+ }
467
+ const { getReviewCopilotConfig } = await import('../../cloud/config.js');
468
+ const config = getReviewCopilotConfig();
469
+ if (!config.enabled) {
470
+ return res.status(409).json({ error: 'Local AI Explainer is disabled', code: 'LOCAL_AI_EXPLAINER_DISABLED' });
471
+ }
472
+ if (!isModelCacheReady(config.modelCacheDir)) {
473
+ return res.status(409).json({ error: 'Local AI Explainer model is not cached', code: 'LOCAL_AI_EXPLAINER_MODEL_NOT_CACHED' });
474
+ }
475
+ const project = typeof req.body?.project === 'string' && req.body.project.trim()
476
+ ? req.body.project.trim()
477
+ : undefined;
478
+ const { annotatePendingQuarantineItems } = await import('../../defence/judge/annotate.js');
479
+ const result = await annotatePendingQuarantineItems({ limit, project });
480
+ res.json({ success: true, ...result });
481
+ }
482
+ catch (error) {
483
+ res.status(500).json({ error: error.message });
484
+ }
485
+ });
199
486
  app.post('/api/v1/quarantine/:id/approve', requireNotLocked, requireIronDomeAction({
200
487
  action: 'modify_records',
201
488
  channel: 'dashboard',
@@ -103,6 +103,11 @@ export function startVisualizationServer(dbPath) {
103
103
  // Auth middleware: require Bearer token on all requests except public paths
104
104
  const publicPaths = ['/api/health', '/api/auth/session-token'];
105
105
  app.use((req, res, next) => {
106
+ // Dashboard pages and static assets must load before the client can fetch
107
+ // its API session token. Protect API routes, not the Next.js shell.
108
+ if (!req.path.startsWith('/api/')) {
109
+ return next();
110
+ }
106
111
  // Allow OPTIONS/HEAD for CORS preflight
107
112
  if (['OPTIONS', 'HEAD'].includes(req.method)) {
108
113
  return next();
@@ -4,7 +4,8 @@
4
4
  * `npx shieldcortex audit` — comprehensive security scanner for
5
5
  * AI agent environments.
6
6
  */
7
- export { scanMemories } from './memory-scanner.js';
7
+ export { discoverMemoryFiles, isShieldCortexOwnMemoryPath, queueMemoryFileScanFindings, scanMemories, scanMemoryFilesDetailed, } from './memory-scanner.js';
8
+ export type { DetailedMemoryFileScanResult, DiscoveredMemoryFile, MemoryFileDiscoveryOptions, MemoryFileEvidence, MemoryFileQuarantineQueueItem, MemoryFileQuarantineQueueResult, MemoryFileRisk, MemoryFileScanRecord, MemoryFileScanSummary, } from './memory-scanner.js';
8
9
  export { scanMcpConfigs } from './mcp-config-scanner.js';
9
10
  export { scanEnvFiles } from './env-scanner.js';
10
11
  export { scanRulesFiles } from './rules-file-scanner.js';
@@ -4,7 +4,7 @@
4
4
  * `npx shieldcortex audit` — comprehensive security scanner for
5
5
  * AI agent environments.
6
6
  */
7
- export { scanMemories } from './memory-scanner.js';
7
+ export { discoverMemoryFiles, isShieldCortexOwnMemoryPath, queueMemoryFileScanFindings, scanMemories, scanMemoryFilesDetailed, } from './memory-scanner.js';
8
8
  export { scanMcpConfigs } from './mcp-config-scanner.js';
9
9
  export { scanEnvFiles } from './env-scanner.js';
10
10
  export { scanRulesFiles } from './rules-file-scanner.js';
@@ -7,7 +7,72 @@
7
7
  * - ~/.shieldcortex/ memory database
8
8
  * - Cursor/Windsurf persistent memory locations
9
9
  */
10
- import type { ScannerResult } from './types.js';
10
+ import type { AuditFinding, ScannerResult } from './types.js';
11
+ export declare function isShieldCortexOwnMemoryPath(filePath: string): boolean;
12
+ export type MemoryFileRisk = 'SAFE' | 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL';
13
+ export interface MemoryFileEvidence {
14
+ snippet: string;
15
+ reason: string;
16
+ }
17
+ export interface DiscoveredMemoryFile {
18
+ path: string;
19
+ source: string;
20
+ }
21
+ export interface MemoryFileScanRecord {
22
+ id: string;
23
+ path: string;
24
+ source: string;
25
+ sizeBytes: number;
26
+ modifiedAt: string | null;
27
+ contentExcerpt: string;
28
+ auditId: number | null;
29
+ anomalyScore: number;
30
+ firewallResult: 'ALLOW' | 'QUARANTINE' | 'BLOCK';
31
+ risk: MemoryFileRisk;
32
+ reason: string;
33
+ threatIndicators: string[];
34
+ evidence: MemoryFileEvidence[];
35
+ findings: AuditFinding[];
36
+ }
37
+ export interface MemoryFileScanSummary {
38
+ total: number;
39
+ safe: number;
40
+ flagged: number;
41
+ critical: number;
42
+ high: number;
43
+ medium: number;
44
+ }
45
+ export interface DetailedMemoryFileScanResult {
46
+ scannedAt: string;
47
+ summary: MemoryFileScanSummary;
48
+ files: MemoryFileScanRecord[];
49
+ durationMs: number;
50
+ }
51
+ export interface MemoryFileQuarantineQueueItem {
52
+ fileId: string;
53
+ path: string;
54
+ quarantineId: number | null;
55
+ status: 'created' | 'updated' | 'skipped_safe' | 'skipped_reviewed';
56
+ }
57
+ export interface MemoryFileQuarantineQueueResult {
58
+ created: number;
59
+ updated: number;
60
+ skippedSafe: number;
61
+ skippedReviewed: number;
62
+ items: MemoryFileQuarantineQueueItem[];
63
+ }
64
+ export interface MemoryFileDiscoveryOptions {
65
+ homeDir?: string;
66
+ cwd?: string;
67
+ maxFiles?: number;
68
+ maxFileSize?: number;
69
+ }
70
+ export declare function queueMemoryFileScanFindings(result: DetailedMemoryFileScanResult): MemoryFileQuarantineQueueResult;
71
+ /**
72
+ * Find memory-related files across known AI agent locations.
73
+ */
74
+ export declare function discoverMemoryFiles(options?: MemoryFileDiscoveryOptions): DiscoveredMemoryFile[];
75
+ export declare function scanMemoryFilesDetailed(options?: MemoryFileDiscoveryOptions): DetailedMemoryFileScanResult;
11
76
  /**
12
77
  * Run the memory scanner.
13
78
  */