shieldcortex 4.31.2 → 4.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (346) hide show
  1. package/README.md +78 -2
  2. package/dashboard/.next/standalone/dashboard/.next/BUILD_ID +1 -1
  3. package/dashboard/.next/standalone/dashboard/.next/build-manifest.json +2 -2
  4. package/dashboard/.next/standalone/dashboard/.next/prerender-manifest.json +3 -3
  5. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.html +2 -2
  6. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.rsc +1 -1
  7. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  8. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  10. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  11. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  12. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.html +2 -2
  13. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.rsc +1 -1
  14. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  15. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  16. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  17. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  18. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  19. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  20. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.html +1 -1
  21. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.rsc +1 -1
  22. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin/__PAGE__.segment.rsc +1 -1
  23. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin.segment.rsc +1 -1
  24. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  25. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_full.segment.rsc +1 -1
  26. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  27. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_index.segment.rsc +1 -1
  28. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_tree.segment.rsc +1 -1
  29. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.html +1 -1
  30. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.rsc +1 -1
  31. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud/__PAGE__.segment.rsc +1 -1
  32. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud.segment.rsc +1 -1
  33. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  34. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_full.segment.rsc +1 -1
  35. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_head.segment.rsc +1 -1
  36. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_index.segment.rsc +1 -1
  37. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_tree.segment.rsc +1 -1
  38. package/dashboard/.next/standalone/dashboard/.next/server/app/index.html +1 -1
  39. package/dashboard/.next/standalone/dashboard/.next/server/app/index.rsc +1 -1
  40. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  41. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_full.segment.rsc +1 -1
  42. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_head.segment.rsc +1 -1
  43. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_index.segment.rsc +1 -1
  44. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  45. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.html +1 -1
  46. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.rsc +1 -1
  47. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture/__PAGE__.segment.rsc +1 -1
  48. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture.segment.rsc +1 -1
  49. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  50. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  51. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_full.segment.rsc +1 -1
  52. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_head.segment.rsc +1 -1
  53. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_index.segment.rsc +1 -1
  54. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_tree.segment.rsc +1 -1
  55. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.html +1 -1
  56. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.rsc +1 -1
  57. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph/__PAGE__.segment.rsc +1 -1
  58. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph.segment.rsc +1 -1
  59. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  60. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  61. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_full.segment.rsc +1 -1
  62. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_head.segment.rsc +1 -1
  63. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_index.segment.rsc +1 -1
  64. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_tree.segment.rsc +1 -1
  65. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.html +1 -1
  66. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.rsc +1 -1
  67. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall/__PAGE__.segment.rsc +1 -1
  68. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall.segment.rsc +1 -1
  69. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  70. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  71. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_full.segment.rsc +1 -1
  72. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_head.segment.rsc +1 -1
  73. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_index.segment.rsc +1 -1
  74. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_tree.segment.rsc +1 -1
  75. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.html +2 -2
  76. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.rsc +1 -1
  77. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory/replay/__PAGE__.segment.rsc +1 -1
  78. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory/replay.segment.rsc +1 -1
  79. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  80. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  81. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_full.segment.rsc +1 -1
  82. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_head.segment.rsc +1 -1
  83. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_index.segment.rsc +1 -1
  84. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_tree.segment.rsc +1 -1
  85. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.html +1 -1
  86. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.rsc +1 -1
  87. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review/__PAGE__.segment.rsc +1 -1
  88. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review.segment.rsc +1 -1
  89. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  90. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  91. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_full.segment.rsc +1 -1
  92. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_head.segment.rsc +1 -1
  93. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_index.segment.rsc +1 -1
  94. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_tree.segment.rsc +1 -1
  95. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.html +1 -1
  96. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.rsc +1 -1
  97. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline/__PAGE__.segment.rsc +1 -1
  98. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline.segment.rsc +1 -1
  99. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  100. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  101. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_full.segment.rsc +1 -1
  102. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_head.segment.rsc +1 -1
  103. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_index.segment.rsc +1 -1
  104. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_tree.segment.rsc +1 -1
  105. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.html +2 -2
  106. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.rsc +1 -1
  107. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory/__PAGE__.segment.rsc +1 -1
  108. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  109. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  110. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_full.segment.rsc +1 -1
  111. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_head.segment.rsc +1 -1
  112. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_index.segment.rsc +1 -1
  113. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_tree.segment.rsc +1 -1
  114. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.html +2 -2
  115. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.rsc +1 -1
  116. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview/__PAGE__.segment.rsc +1 -1
  117. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview.segment.rsc +1 -1
  118. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  119. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_full.segment.rsc +1 -1
  120. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_head.segment.rsc +1 -1
  121. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_index.segment.rsc +1 -1
  122. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_tree.segment.rsc +1 -1
  123. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.html +1 -1
  124. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.rsc +1 -1
  125. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit/__PAGE__.segment.rsc +1 -1
  126. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit.segment.rsc +1 -1
  127. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  128. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  129. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_full.segment.rsc +1 -1
  130. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_head.segment.rsc +1 -1
  131. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_index.segment.rsc +1 -1
  132. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_tree.segment.rsc +1 -1
  133. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.html +1 -1
  134. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.rsc +1 -1
  135. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts/__PAGE__.segment.rsc +1 -1
  136. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts.segment.rsc +1 -1
  137. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  138. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  139. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_full.segment.rsc +1 -1
  140. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_head.segment.rsc +1 -1
  141. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_index.segment.rsc +1 -1
  142. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_tree.segment.rsc +1 -1
  143. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.html +1 -1
  144. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.rsc +1 -1
  145. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome/__PAGE__.segment.rsc +1 -1
  146. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome.segment.rsc +1 -1
  147. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  148. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  149. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_full.segment.rsc +1 -1
  150. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_head.segment.rsc +1 -1
  151. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_index.segment.rsc +1 -1
  152. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_tree.segment.rsc +1 -1
  153. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.html +1 -1
  154. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.rsc +1 -1
  155. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies/__PAGE__.segment.rsc +1 -1
  156. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies.segment.rsc +1 -1
  157. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  158. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  159. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_full.segment.rsc +1 -1
  160. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_head.segment.rsc +1 -1
  161. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_index.segment.rsc +1 -1
  162. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_tree.segment.rsc +1 -1
  163. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.html +1 -1
  164. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.rsc +1 -1
  165. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine/__PAGE__.segment.rsc +1 -1
  166. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine.segment.rsc +1 -1
  167. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  168. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  169. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_full.segment.rsc +1 -1
  170. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_head.segment.rsc +1 -1
  171. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_index.segment.rsc +1 -1
  172. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_tree.segment.rsc +1 -1
  173. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.html +2 -2
  174. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.rsc +1 -1
  175. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection/__PAGE__.segment.rsc +1 -1
  176. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  177. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  178. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_full.segment.rsc +1 -1
  179. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_head.segment.rsc +1 -1
  180. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_index.segment.rsc +1 -1
  181. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_tree.segment.rsc +1 -1
  182. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.html +2 -2
  183. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.rsc +1 -1
  184. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings/__PAGE__.segment.rsc +1 -1
  185. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings.segment.rsc +1 -1
  186. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  187. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_full.segment.rsc +1 -1
  188. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  189. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_index.segment.rsc +1 -1
  190. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  191. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.html +1 -1
  192. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.rsc +1 -1
  193. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray/__PAGE__.segment.rsc +1 -1
  194. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray.segment.rsc +1 -1
  195. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +1 -1
  196. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  197. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_full.segment.rsc +1 -1
  198. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_head.segment.rsc +1 -1
  199. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_index.segment.rsc +1 -1
  200. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_tree.segment.rsc +1 -1
  201. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.html +1 -1
  202. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.rsc +1 -1
  203. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain/__PAGE__.segment.rsc +1 -1
  204. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +1 -1
  205. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  206. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_full.segment.rsc +1 -1
  207. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_head.segment.rsc +1 -1
  208. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_index.segment.rsc +1 -1
  209. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_tree.segment.rsc +1 -1
  210. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.html +2 -2
  211. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.rsc +1 -1
  212. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray/__PAGE__.segment.rsc +1 -1
  213. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray.segment.rsc +1 -1
  214. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  215. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_full.segment.rsc +1 -1
  216. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_head.segment.rsc +1 -1
  217. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_index.segment.rsc +1 -1
  218. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_tree.segment.rsc +1 -1
  219. package/dashboard/.next/standalone/dashboard/.next/server/pages/404.html +2 -2
  220. package/dashboard/.next/standalone/dashboard/.next/server/pages/500.html +2 -2
  221. package/dashboard/.next/standalone/dashboard/.next/server/server-reference-manifest.js +1 -1
  222. package/dashboard/.next/standalone/dashboard/.next/server/server-reference-manifest.json +1 -1
  223. package/dist/api/control.d.ts +2 -0
  224. package/dist/api/control.js +119 -2
  225. package/dist/api/routes/memories.js +19 -14
  226. package/dist/api/routes/system.js +2 -3
  227. package/dist/api/visualization-server.d.ts +13 -1
  228. package/dist/api/visualization-server.js +57 -1
  229. package/dist/audit/env-scanner.js +5 -2
  230. package/dist/audit/index.d.ts +4 -1
  231. package/dist/audit/index.js +2 -1
  232. package/dist/audit/mcp-config-scanner.d.ts +23 -0
  233. package/dist/audit/mcp-config-scanner.js +110 -0
  234. package/dist/audit/mcp-tools-scanner.d.ts +112 -0
  235. package/dist/audit/mcp-tools-scanner.js +299 -0
  236. package/dist/cli/audit.d.ts +1 -0
  237. package/dist/cli/audit.js +12 -1
  238. package/dist/cli/mcp.d.ts +13 -0
  239. package/dist/cli/mcp.js +0 -0
  240. package/dist/cli/remember.d.ts +75 -0
  241. package/dist/cli/remember.js +195 -0
  242. package/dist/cloud/config.d.ts +23 -1
  243. package/dist/cloud/config.js +453 -193
  244. package/dist/cloud/quarantine-sync.d.ts +12 -2
  245. package/dist/cloud/quarantine-sync.js +28 -6
  246. package/dist/cloud/sync-queue.d.ts +21 -2
  247. package/dist/cloud/sync-queue.js +124 -29
  248. package/dist/database/better-sqlite3-guard.d.ts +21 -2
  249. package/dist/database/better-sqlite3-guard.js +29 -5
  250. package/dist/database/init.js +68 -16
  251. package/dist/database/inline-schema.js +35 -1
  252. package/dist/database/migrations.js +104 -8
  253. package/dist/database/schema.sql +39 -1
  254. package/dist/defence/audit/queries.d.ts +10 -2
  255. package/dist/defence/audit/queries.js +30 -4
  256. package/dist/defence/audit/retention.d.ts +50 -0
  257. package/dist/defence/audit/retention.js +161 -0
  258. package/dist/defence/credential-leak/entropy.d.ts +11 -0
  259. package/dist/defence/credential-leak/entropy.js +27 -0
  260. package/dist/defence/credential-leak/index.js +27 -1
  261. package/dist/defence/credential-leak/patterns.d.ts +9 -0
  262. package/dist/defence/credential-leak/patterns.js +21 -0
  263. package/dist/defence/custom-patterns/store.js +8 -1
  264. package/dist/defence/custom-rules/store.d.ts +18 -0
  265. package/dist/defence/custom-rules/store.js +63 -0
  266. package/dist/defence/firewall/confusables.d.ts +30 -0
  267. package/dist/defence/firewall/confusables.js +87 -0
  268. package/dist/defence/firewall/encoding-detector.js +23 -9
  269. package/dist/defence/firewall/index.d.ts +11 -1
  270. package/dist/defence/firewall/index.js +34 -1
  271. package/dist/defence/firewall/instruction-detector.js +18 -7
  272. package/dist/defence/firewall/markdown-image-detector.d.ts +34 -0
  273. package/dist/defence/firewall/markdown-image-detector.js +83 -0
  274. package/dist/defence/fragmentation/entity-extractor.js +17 -6
  275. package/dist/defence/index.d.ts +5 -0
  276. package/dist/defence/index.js +8 -0
  277. package/dist/defence/iron-dome/index.js +7 -1
  278. package/dist/defence/pipeline.js +62 -10
  279. package/dist/defence/scan-windows.d.ts +41 -0
  280. package/dist/defence/scan-windows.js +61 -0
  281. package/dist/defence/semantic/attack-corpus.d.ts +22 -0
  282. package/dist/defence/semantic/attack-corpus.js +75 -0
  283. package/dist/defence/semantic/index.d.ts +67 -0
  284. package/dist/defence/semantic/index.js +138 -0
  285. package/dist/defence/skill-scanner/deep-scan.js +35 -15
  286. package/dist/defence/skill-scanner/patterns.d.ts +1 -1
  287. package/dist/defence/skill-scanner/patterns.js +8 -7
  288. package/dist/defence/tool-response-scanner.d.ts +21 -5
  289. package/dist/defence/tool-response-scanner.js +111 -22
  290. package/dist/defence/types.d.ts +11 -1
  291. package/dist/index.d.ts +29 -0
  292. package/dist/index.js +104 -20
  293. package/dist/memory/consolidate.js +1 -1
  294. package/dist/memory/decay.js +3 -1
  295. package/dist/memory/embedding.d.ts +18 -2
  296. package/dist/memory/embedding.js +32 -11
  297. package/dist/memory/expiry.js +1 -1
  298. package/dist/memory/search-recall.js +107 -49
  299. package/dist/memory/search.d.ts +19 -3
  300. package/dist/memory/search.js +25 -10
  301. package/dist/memory/store.d.ts +13 -2
  302. package/dist/memory/store.js +115 -11
  303. package/dist/scan-only.d.ts +64 -0
  304. package/dist/scan-only.js +173 -0
  305. package/dist/server.d.ts +5 -0
  306. package/dist/server.js +6 -4
  307. package/dist/setup/claude-md.js +39 -34
  308. package/dist/setup/codex.js +9 -2
  309. package/dist/setup/copilot.js +160 -47
  310. package/dist/setup/json-config.d.ts +99 -0
  311. package/dist/setup/json-config.js +167 -0
  312. package/dist/setup/migrate.js +1 -1
  313. package/dist/setup/settings-hooks.js +8 -13
  314. package/dist/setup/uninstall.js +1 -21
  315. package/dist/tools/context.d.ts +8 -8
  316. package/dist/tools/forget.d.ts +9 -8
  317. package/dist/tools/forget.js +17 -4
  318. package/dist/tools/recall.d.ts +13 -13
  319. package/dist/tools/remember.d.ts +16 -16
  320. package/dist/tools/remember.js +19 -8
  321. package/dist/worker/brain-worker.d.ts +1 -0
  322. package/dist/worker/brain-worker.js +79 -16
  323. package/dist/worker/types.d.ts +8 -0
  324. package/dist/worker/types.js +8 -0
  325. package/dist/xray/dir-scanner.d.ts +18 -0
  326. package/dist/xray/dir-scanner.js +23 -1
  327. package/dist/xray/file-scanner.js +16 -1
  328. package/dist/xray/findings-store.js +9 -1
  329. package/dist/xray/index.d.ts +2 -0
  330. package/dist/xray/index.js +10 -1
  331. package/dist/xray/npm-inspector.d.ts +31 -0
  332. package/dist/xray/npm-inspector.js +135 -29
  333. package/dist/xray/patterns.d.ts +1 -1
  334. package/dist/xray/patterns.js +20 -23
  335. package/dist/xray/sarif.d.ts +78 -0
  336. package/dist/xray/sarif.js +166 -0
  337. package/dist/xray/watch.d.ts +1 -0
  338. package/dist/xray/watch.js +10 -1
  339. package/hooks/openclaw/cortex-memory/handler.ts +122 -18
  340. package/hooks/openclaw/cortex-memory/runtime.mjs +10 -4
  341. package/package.json +10 -3
  342. package/dist/memory/embedding-cache.d.ts +0 -20
  343. package/dist/memory/embedding-cache.js +0 -91
  344. /package/dashboard/.next/standalone/dashboard/.next/static/{_j4TeMpss-w79QtNNWqZw → Ox9scglBehbbCk7DD8-Vn}/_buildManifest.js +0 -0
  345. /package/dashboard/.next/standalone/dashboard/.next/static/{_j4TeMpss-w79QtNNWqZw → Ox9scglBehbbCk7DD8-Vn}/_clientMiddlewareManifest.json +0 -0
  346. /package/dashboard/.next/standalone/dashboard/.next/static/{_j4TeMpss-w79QtNNWqZw → Ox9scglBehbbCk7DD8-Vn}/_ssgManifest.js +0 -0
@@ -0,0 +1,64 @@
1
+ /**
2
+ * shieldcortex/scan — edge-safe, scan-only entry point.
3
+ *
4
+ * This module runs the PURE defence detection layers (sanitise → trust →
5
+ * firewall → sensitivity → fragmentation → credential-leak) with NO static
6
+ * dependency on:
7
+ * - better-sqlite3 (the native binding)
8
+ * - @huggingface/transformers (the ~349MB ML stack)
9
+ * - the database layer, cloud sync, the events bus, or audit persistence
10
+ *
11
+ * It exists so CI runners, serverless/edge functions, and integrators who only
12
+ * need synchronous regex/heuristic scanning can `import { scan } from
13
+ * 'shieldcortex/scan'` without pulling a native build or the ML dependency.
14
+ *
15
+ * Differences vs the full `runDefencePipeline` (from 'shieldcortex/defence'):
16
+ * - No audit row is written (auditId is always 0 — a sentinel).
17
+ * - No cloud sync / defence events are emitted.
18
+ * - The DB-backed custom firewall rules and custom injection patterns layers
19
+ * are ABSENT. Scan-only callers have no local DB of rules to apply, so only
20
+ * the built-in detection layers run. To use custom rules/patterns, use the
21
+ * full pipeline (which requires the database) or the SaaS API.
22
+ * - Fragmentation is always null: that layer correlates entities ACROSS
23
+ * stored memories, which is impossible without a DB. A single, stateless
24
+ * scan can never assemble a multi-memory fragmentation signal, so the layer
25
+ * is a no-op here (matching `runDefencePipeline`'s own score-0 result when
26
+ * no prior entities exist in the DB).
27
+ *
28
+ * CommonJS note: this package is ESM-only. CJS consumers can reach this entry
29
+ * with a dynamic import: `const { scan } = await import('shieldcortex/scan')`.
30
+ * A dedicated CJS build is a deliberate non-goal for this phase.
31
+ *
32
+ * IMPORTANT — DO NOT add imports that transitively pull the DB/ML stack:
33
+ * - import `scoreSource` from './defence/trust/source-scorer.js' directly,
34
+ * NOT from './defence/trust/index.js' (that re-exports resolve-tool-source,
35
+ * which imports the audit logger → database/init → better-sqlite3).
36
+ * - do NOT import './defence/pipeline.js', './defence/audit/*',
37
+ * './defence/fragmentation/index.js', './api/events.js', './cloud/*',
38
+ * './database/*', './defence/custom-rules/*', or './defence/custom-patterns/*'.
39
+ * The src/__tests__/scan-only-entry.test.ts import-graph assertion enforces this
40
+ * against the compiled dist output.
41
+ */
42
+ import type { DefenceConfig, DefencePipelineResult, DefenceSource } from './defence/types.js';
43
+ export interface ScanOptions {
44
+ /** Optional title/context scanned alongside the content. */
45
+ title?: string;
46
+ /** Source attribution for trust scoring. Defaults to a generic user source. */
47
+ source?: DefenceSource;
48
+ /** Override the default defence config (mode, thresholds, etc.). */
49
+ config?: DefenceConfig;
50
+ }
51
+ /**
52
+ * Run the pure defence pipeline on a piece of content.
53
+ *
54
+ * Returns a `DefencePipelineResult`-shaped object with the verdict, indicators,
55
+ * and per-layer results — minus persistence (auditId is always 0, fragmentation
56
+ * is always null, no DB-backed custom rules are applied).
57
+ *
58
+ * Fail-closed: if any layer throws, the result defaults to BLOCK.
59
+ */
60
+ export declare function scan(content: string, options?: ScanOptions): DefencePipelineResult;
61
+ /** Alias for {@link scan}. */
62
+ export declare const scanText: typeof scan;
63
+ export type { DefencePipelineResult, DefenceSource, DefenceConfig } from './defence/types.js';
64
+ export { DEFAULT_DEFENCE_CONFIG } from './defence/types.js';
@@ -0,0 +1,173 @@
1
+ /**
2
+ * shieldcortex/scan — edge-safe, scan-only entry point.
3
+ *
4
+ * This module runs the PURE defence detection layers (sanitise → trust →
5
+ * firewall → sensitivity → fragmentation → credential-leak) with NO static
6
+ * dependency on:
7
+ * - better-sqlite3 (the native binding)
8
+ * - @huggingface/transformers (the ~349MB ML stack)
9
+ * - the database layer, cloud sync, the events bus, or audit persistence
10
+ *
11
+ * It exists so CI runners, serverless/edge functions, and integrators who only
12
+ * need synchronous regex/heuristic scanning can `import { scan } from
13
+ * 'shieldcortex/scan'` without pulling a native build or the ML dependency.
14
+ *
15
+ * Differences vs the full `runDefencePipeline` (from 'shieldcortex/defence'):
16
+ * - No audit row is written (auditId is always 0 — a sentinel).
17
+ * - No cloud sync / defence events are emitted.
18
+ * - The DB-backed custom firewall rules and custom injection patterns layers
19
+ * are ABSENT. Scan-only callers have no local DB of rules to apply, so only
20
+ * the built-in detection layers run. To use custom rules/patterns, use the
21
+ * full pipeline (which requires the database) or the SaaS API.
22
+ * - Fragmentation is always null: that layer correlates entities ACROSS
23
+ * stored memories, which is impossible without a DB. A single, stateless
24
+ * scan can never assemble a multi-memory fragmentation signal, so the layer
25
+ * is a no-op here (matching `runDefencePipeline`'s own score-0 result when
26
+ * no prior entities exist in the DB).
27
+ *
28
+ * CommonJS note: this package is ESM-only. CJS consumers can reach this entry
29
+ * with a dynamic import: `const { scan } = await import('shieldcortex/scan')`.
30
+ * A dedicated CJS build is a deliberate non-goal for this phase.
31
+ *
32
+ * IMPORTANT — DO NOT add imports that transitively pull the DB/ML stack:
33
+ * - import `scoreSource` from './defence/trust/source-scorer.js' directly,
34
+ * NOT from './defence/trust/index.js' (that re-exports resolve-tool-source,
35
+ * which imports the audit logger → database/init → better-sqlite3).
36
+ * - do NOT import './defence/pipeline.js', './defence/audit/*',
37
+ * './defence/fragmentation/index.js', './api/events.js', './cloud/*',
38
+ * './database/*', './defence/custom-rules/*', or './defence/custom-patterns/*'.
39
+ * The src/__tests__/scan-only-entry.test.ts import-graph assertion enforces this
40
+ * against the compiled dist output.
41
+ */
42
+ import { DEFAULT_DEFENCE_CONFIG } from './defence/types.js';
43
+ import { sanitiseInput } from './defence/input-sanitisation/index.js';
44
+ import { scoreSource } from './defence/trust/source-scorer.js';
45
+ import { analyzeFirewall } from './defence/firewall/index.js';
46
+ import { classifySensitivity } from './defence/sensitivity/index.js';
47
+ import { scanForCredentials } from './defence/credential-leak/index.js';
48
+ const DEFAULT_SOURCE = { type: 'user', identifier: 'scan-only' };
49
+ /**
50
+ * Run the pure defence pipeline on a piece of content.
51
+ *
52
+ * Returns a `DefencePipelineResult`-shaped object with the verdict, indicators,
53
+ * and per-layer results — minus persistence (auditId is always 0, fragmentation
54
+ * is always null, no DB-backed custom rules are applied).
55
+ *
56
+ * Fail-closed: if any layer throws, the result defaults to BLOCK.
57
+ */
58
+ export function scan(content, options = {}) {
59
+ const cfg = options.config ?? { ...DEFAULT_DEFENCE_CONFIG };
60
+ const title = options.title ?? '';
61
+ const source = options.source ?? DEFAULT_SOURCE;
62
+ try {
63
+ // 1. Input sanitisation (Layer 1) — strip dangerous bytes before analysis.
64
+ const sanitisation = sanitiseInput(content);
65
+ const cleanContent = sanitisation.sanitised;
66
+ // 2. Score trust.
67
+ const trust = scoreSource(source);
68
+ // 3. Run firewall on sanitised content, feeding back the strip categories so
69
+ // the encoding detector accounts for zero-width/bidi bytes the sanitiser
70
+ // already removed (same contract as runDefencePipeline).
71
+ const firewall = analyzeFirewall(cleanContent, title, source, trust.score, cfg, sanitisation.strippedCategories);
72
+ // Carry forward sanitisation threat indicators (deduped).
73
+ for (const indicator of sanitisation.threatIndicators) {
74
+ if (!firewall.threatIndicators.includes(indicator)) {
75
+ firewall.threatIndicators.push(indicator);
76
+ }
77
+ }
78
+ // 4. Classify sensitivity.
79
+ const sensitivity = classifySensitivity(cleanContent, title);
80
+ // 5. Fragmentation is omitted in scan-only: it correlates entities across
81
+ // stored memories, which requires a DB this entry deliberately avoids. With
82
+ // no prior memories there is nothing to correlate, so the layer is null —
83
+ // exactly what the full pipeline produces with an empty entity store.
84
+ // 6. Credential leak detection.
85
+ const credentialScan = scanForCredentials(cleanContent);
86
+ // 7. Determine final decision (mirrors runDefencePipeline's precedence,
87
+ // minus the DB-backed custom-rules/custom-patterns and fragmentation steps).
88
+ let allowed;
89
+ let reason;
90
+ const credentialBlocked = credentialScan.findings.some(f => f.action === 'blocked');
91
+ if (firewall.result === 'BLOCK') {
92
+ allowed = false;
93
+ reason = firewall.reason;
94
+ }
95
+ else if (credentialBlocked) {
96
+ allowed = false;
97
+ const blockedTypes = credentialScan.findings
98
+ .filter(f => f.action === 'blocked')
99
+ .map(f => (f.provider ? `${f.provider} ${f.type}` : f.type));
100
+ reason = `Blocked: credential leak detected (${blockedTypes.join(', ')})`;
101
+ firewall.result = 'BLOCK';
102
+ if (!firewall.threatIndicators.includes('credential_leak')) {
103
+ firewall.threatIndicators.push('credential_leak');
104
+ }
105
+ }
106
+ else if (firewall.result === 'QUARANTINE') {
107
+ allowed = false;
108
+ reason = `Quarantined: ${firewall.reason}`;
109
+ }
110
+ else if (sensitivity.level === 'RESTRICTED') {
111
+ allowed = false;
112
+ reason = `Blocked: content classified as RESTRICTED (${sensitivity.detectedPatterns.join(', ')})`;
113
+ firewall.result = 'BLOCK';
114
+ firewall.reason = reason;
115
+ if (!firewall.threatIndicators.includes('restricted_content')) {
116
+ firewall.threatIndicators.push('restricted_content');
117
+ }
118
+ }
119
+ else if (firewall.result !== 'ALLOW') {
120
+ allowed = false;
121
+ reason = `Unexpected firewall result: ${firewall.result}`;
122
+ }
123
+ else {
124
+ allowed = true;
125
+ reason = firewall.reason;
126
+ }
127
+ // Keep top-level reason and firewall.reason consistent for downstream callers.
128
+ firewall.reason = reason;
129
+ // Surface credential findings even when non-blocking.
130
+ if (credentialScan.leaked && !firewall.threatIndicators.includes('credential_leak')) {
131
+ firewall.threatIndicators.push('credential_leak');
132
+ }
133
+ return {
134
+ allowed,
135
+ firewall,
136
+ fragmentation: null,
137
+ sensitivity,
138
+ trust,
139
+ credentialScan: credentialScan.leaked ? credentialScan : undefined,
140
+ auditId: 0,
141
+ };
142
+ }
143
+ catch (err) {
144
+ // FAIL-CLOSED: on error, default to BLOCK for security.
145
+ console.error('[scan-only] Pipeline error, failing closed:', err);
146
+ return {
147
+ allowed: false,
148
+ firewall: {
149
+ result: 'BLOCK',
150
+ reason: 'Pipeline error — fail-closed for security',
151
+ threatIndicators: ['pipeline_error'],
152
+ anomalyScore: 1.0,
153
+ blockedPatterns: [],
154
+ },
155
+ fragmentation: null,
156
+ sensitivity: {
157
+ level: 'RESTRICTED',
158
+ confidence: 0,
159
+ detectedPatterns: [],
160
+ redactionRequired: true,
161
+ },
162
+ trust: {
163
+ score: 0,
164
+ source,
165
+ hierarchy: [],
166
+ },
167
+ auditId: 0,
168
+ };
169
+ }
170
+ }
171
+ /** Alias for {@link scan}. */
172
+ export const scanText = scan;
173
+ export { DEFAULT_DEFENCE_CONFIG } from './defence/types.js';
package/dist/server.d.ts CHANGED
@@ -5,6 +5,11 @@
5
5
  * Solves context compaction and memory persistence issues.
6
6
  */
7
7
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
8
+ /**
9
+ * Check text for kill phrase and trigger kill switch if detected.
10
+ * Returns true if kill switch was activated.
11
+ */
12
+ export declare function checkAndTriggerKillSwitch(text: string, source: string): boolean;
8
13
  /**
9
14
  * Create and configure the MCP server
10
15
  */
package/dist/server.js CHANGED
@@ -25,6 +25,7 @@ import { scanExistingMemories } from './defence/scanner/index.js';
25
25
  import { resolveToolSource as resolveToolSourceImpl } from './defence/trust/resolve-tool-source.js';
26
26
  import { scanToolResponse, shouldScanToolResponse } from './defence/tool-response-scanner.js';
27
27
  import { getToolResponseScanConfig } from './cloud/config.js';
28
+ import { checkKillPhrase } from './defence/iron-dome/index.js';
28
29
  import { isKillSwitchActive, getKillSwitchMeta, assertOperationAllowed, activateKillSwitch, deactivateKillSwitch, KillSwitchError, } from './api/control.js';
29
30
  // Shared source schema for access control on MCP tools.
30
31
  // NOTE: 'user' is intentionally NOT accepted from MCP callers. MCP tools are
@@ -123,13 +124,14 @@ function withKillSwitchGuard(kind, handler) {
123
124
  * Check text for kill phrase and trigger kill switch if detected.
124
125
  * Returns true if kill switch was activated.
125
126
  */
126
- function checkAndTriggerKillSwitch(text, source) {
127
+ export function checkAndTriggerKillSwitch(text, source) {
127
128
  if (isKillSwitchActive())
128
129
  return false; // already active
129
130
  try {
130
- // Lazy import to avoid circular deps
131
- const ironDome = require('./defence/iron-dome/index.js');
132
- const result = ironDome.checkKillPhrase(text);
131
+ // Statically imported (see top of file) — no circular dep:
132
+ // iron-dome/index does not import server.ts. try/catch is purely
133
+ // defensive against a kill-phrase check failing at runtime.
134
+ const result = checkKillPhrase(text);
133
135
  return result.triggered;
134
136
  }
135
137
  catch {
@@ -14,6 +14,7 @@ import os from 'os';
14
14
  import { execSync } from 'child_process';
15
15
  import { installOpenClawHook, findAllHooksDirs } from './openclaw.js';
16
16
  import { setupHooks } from './settings-hooks.js';
17
+ import { readJsonConfigOrAbort, writeJsonConfigWithBackup, looksLikeShieldcortex } from './json-config.js';
17
18
  const MARKER = '# ShieldCortex — Memory System';
18
19
  const INSTRUCTIONS = `
19
20
  ${MARKER}
@@ -132,41 +133,45 @@ export function setupGlobalMcp() {
132
133
  args: ideal.args,
133
134
  };
134
135
  const isStablePath = ideal.command !== 'npx';
135
- if (fs.existsSync(mcpPath)) {
136
- try {
137
- const existing = JSON.parse(fs.readFileSync(mcpPath, 'utf-8'));
138
- const servers = existing.mcpServers || {};
139
- const current = servers.memory;
140
- if (isIdealMcpEntry(current, idealEntry)) {
141
- console.log(`✓ MCP: global server already configured in ~/.claude.json (stable binary: ${isStablePath ? ideal.command : 'npx'})`);
142
- return;
143
- }
144
- // Detect whether this is a fresh add or an upgrade from the old
145
- // `npx -y shieldcortex` form so we log the right message.
146
- const currentIsShieldCortex = !!current && (current.command?.includes?.('shieldcortex') ||
147
- current.args?.some?.((a) => typeof a === 'string' && a.includes('shieldcortex')));
148
- existing.mcpServers = servers;
149
- existing.mcpServers.memory = idealEntry;
150
- fs.writeFileSync(mcpPath, JSON.stringify(existing, null, 2) + '\n', 'utf-8');
151
- if (currentIsShieldCortex && isStablePath) {
152
- console.log(`✓ MCP: upgraded shieldcortex server to stable binary path (${ideal.command})`);
153
- console.log(' Reason: `npx -y` resolution drift was causing periodic CLI session resets.');
154
- }
155
- else if (currentIsShieldCortex) {
156
- console.log('✓ MCP: refreshed shieldcortex server registration');
157
- }
158
- else {
159
- console.log(`✓ MCP: added shieldcortex server to ~/.claude.json (${ideal.command})`);
160
- }
161
- return;
162
- }
163
- catch {
164
- // Parse error fall through and create fresh below.
165
- }
136
+ // ~/.claude.json is Claude Code's PRIMARY state file. A parse failure on an
137
+ // EXISTING file MUST abort (readJsonConfigOrAbort throws) — never overwrite
138
+ // it with a `{ mcpServers: { memory } }` stub, which would wipe the user's
139
+ // entire Claude Code state. A missing file legitimately yields {}.
140
+ const existing = readJsonConfigOrAbort(mcpPath);
141
+ const fileExisted = fs.existsSync(mcpPath);
142
+ const servers = existing.mcpServers || {};
143
+ const current = servers.memory;
144
+ if (isIdealMcpEntry(current, idealEntry)) {
145
+ console.log(`✓ MCP: global server already configured in ~/.claude.json (stable binary: ${isStablePath ? ideal.command : 'npx'})`);
146
+ return;
147
+ }
148
+ // Ownership guard (mirrors uninstall.ts): `memory` is a generic key the
149
+ // upstream @modelcontextprotocol/server-memory also uses. If an existing
150
+ // entry is NOT ShieldCortex-owned, leave it alone rather than clobber it.
151
+ if (current && !looksLikeShieldcortex(current)) {
152
+ console.warn('⚠ MCP: ~/.claude.json mcpServers.memory does not look ShieldCortex-owned — leaving it alone.');
153
+ console.warn(' Remove or rename that entry if you want ShieldCortex to register under `memory`.');
154
+ return;
155
+ }
156
+ // Detect whether this is a fresh add or an upgrade from the old
157
+ // `npx -y shieldcortex` form so we log the right message.
158
+ const currentIsShieldCortex = !!current && looksLikeShieldcortex(current);
159
+ existing.mcpServers = servers;
160
+ existing.mcpServers.memory = idealEntry;
161
+ writeJsonConfigWithBackup(mcpPath, existing);
162
+ if (!fileExisted) {
163
+ console.log(`✓ MCP: created global server config at ~/.claude.json (${ideal.command})`);
164
+ }
165
+ else if (currentIsShieldCortex && isStablePath) {
166
+ console.log(`✓ MCP: upgraded shieldcortex server to stable binary path (${ideal.command})`);
167
+ console.log(' Reason: `npx -y` resolution drift was causing periodic CLI session resets.');
168
+ }
169
+ else if (currentIsShieldCortex) {
170
+ console.log('✓ MCP: refreshed shieldcortex server registration');
171
+ }
172
+ else {
173
+ console.log(`✓ MCP: added shieldcortex server to ~/.claude.json (${ideal.command})`);
166
174
  }
167
- const config = { mcpServers: { memory: idealEntry } };
168
- fs.writeFileSync(mcpPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
169
- console.log(`✓ MCP: created global server config at ~/.claude.json (${ideal.command})`);
170
175
  }
171
176
  export async function setupClaudeMd(options) {
172
177
  console.log('Setting up ShieldCortex...\n');
@@ -9,6 +9,7 @@ import fs from 'fs';
9
9
  import os from 'os';
10
10
  import path from 'path';
11
11
  import { fileURLToPath } from 'url';
12
+ import { resolveMcpServerCommand } from './json-config.js';
12
13
  const __filename = fileURLToPath(import.meta.url);
13
14
  const __dirname = path.dirname(__filename);
14
15
  const SERVER_NAME = 'shieldcortex-memory';
@@ -34,10 +35,16 @@ function escapeTomlString(value) {
34
35
  return value.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
35
36
  }
36
37
  function buildServerBlock() {
38
+ // Prefer the absolute global binary (`which shieldcortex`); fall back to
39
+ // `node <absolute dist/index.js>`. Never `npx -y` — see resolveMcpServerCommand
40
+ // (the v4.11.1 fix: a dynamically-re-resolved command thrashes the editor's
41
+ // MCP-config hash and resets the active session).
42
+ const { command, args } = resolveMcpServerCommand(MCP_ENTRY);
43
+ const argsToml = args.map((a) => `"${escapeTomlString(a)}"`).join(', ');
37
44
  return [
38
45
  `[mcp_servers.${SERVER_NAME}]`,
39
- 'command = "node"',
40
- `args = ["${escapeTomlString(MCP_ENTRY)}"]`,
46
+ `command = "${escapeTomlString(command)}"`,
47
+ `args = [${argsToml}]`,
41
48
  '',
42
49
  ].join('\n');
43
50
  }