shieldcortex 4.31.2 → 4.32.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (353) hide show
  1. package/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/doctor.js +4 -1
  239. package/dist/cli/mcp.d.ts +13 -0
  240. package/dist/cli/mcp.js +0 -0
  241. package/dist/cli/remember.d.ts +75 -0
  242. package/dist/cli/remember.js +195 -0
  243. package/dist/cli/repair.d.ts +8 -0
  244. package/dist/cli/repair.js +34 -0
  245. package/dist/cli/update.js +34 -0
  246. package/dist/cloud/config.d.ts +23 -1
  247. package/dist/cloud/config.js +453 -193
  248. package/dist/cloud/quarantine-sync.d.ts +12 -2
  249. package/dist/cloud/quarantine-sync.js +28 -6
  250. package/dist/cloud/sync-queue.d.ts +21 -2
  251. package/dist/cloud/sync-queue.js +124 -29
  252. package/dist/database/better-sqlite3-guard.d.ts +21 -2
  253. package/dist/database/better-sqlite3-guard.js +29 -5
  254. package/dist/database/init.js +68 -16
  255. package/dist/database/inline-schema.js +35 -1
  256. package/dist/database/migrations.js +104 -8
  257. package/dist/database/schema.sql +39 -1
  258. package/dist/defence/audit/queries.d.ts +10 -2
  259. package/dist/defence/audit/queries.js +30 -4
  260. package/dist/defence/audit/retention.d.ts +50 -0
  261. package/dist/defence/audit/retention.js +161 -0
  262. package/dist/defence/credential-leak/entropy.d.ts +11 -0
  263. package/dist/defence/credential-leak/entropy.js +27 -0
  264. package/dist/defence/credential-leak/index.js +27 -1
  265. package/dist/defence/credential-leak/patterns.d.ts +9 -0
  266. package/dist/defence/credential-leak/patterns.js +21 -0
  267. package/dist/defence/custom-patterns/store.js +8 -1
  268. package/dist/defence/custom-rules/store.d.ts +18 -0
  269. package/dist/defence/custom-rules/store.js +63 -0
  270. package/dist/defence/firewall/confusables.d.ts +30 -0
  271. package/dist/defence/firewall/confusables.js +87 -0
  272. package/dist/defence/firewall/encoding-detector.js +23 -9
  273. package/dist/defence/firewall/index.d.ts +11 -1
  274. package/dist/defence/firewall/index.js +34 -1
  275. package/dist/defence/firewall/instruction-detector.js +18 -7
  276. package/dist/defence/firewall/markdown-image-detector.d.ts +34 -0
  277. package/dist/defence/firewall/markdown-image-detector.js +83 -0
  278. package/dist/defence/fragmentation/entity-extractor.js +17 -6
  279. package/dist/defence/index.d.ts +5 -0
  280. package/dist/defence/index.js +8 -0
  281. package/dist/defence/iron-dome/index.js +7 -1
  282. package/dist/defence/pipeline.js +62 -10
  283. package/dist/defence/scan-windows.d.ts +41 -0
  284. package/dist/defence/scan-windows.js +61 -0
  285. package/dist/defence/semantic/attack-corpus.d.ts +22 -0
  286. package/dist/defence/semantic/attack-corpus.js +75 -0
  287. package/dist/defence/semantic/index.d.ts +67 -0
  288. package/dist/defence/semantic/index.js +138 -0
  289. package/dist/defence/skill-scanner/deep-scan.js +35 -15
  290. package/dist/defence/skill-scanner/patterns.d.ts +1 -1
  291. package/dist/defence/skill-scanner/patterns.js +8 -7
  292. package/dist/defence/tool-response-scanner.d.ts +21 -5
  293. package/dist/defence/tool-response-scanner.js +111 -22
  294. package/dist/defence/types.d.ts +11 -1
  295. package/dist/index.d.ts +29 -0
  296. package/dist/index.js +112 -21
  297. package/dist/memory/consolidate.js +1 -1
  298. package/dist/memory/decay.js +3 -1
  299. package/dist/memory/embedding.d.ts +18 -2
  300. package/dist/memory/embedding.js +32 -11
  301. package/dist/memory/expiry.js +1 -1
  302. package/dist/memory/search-recall.js +107 -49
  303. package/dist/memory/search.d.ts +19 -3
  304. package/dist/memory/search.js +25 -10
  305. package/dist/memory/store.d.ts +13 -2
  306. package/dist/memory/store.js +115 -11
  307. package/dist/scan-only.d.ts +64 -0
  308. package/dist/scan-only.js +173 -0
  309. package/dist/server.d.ts +5 -0
  310. package/dist/server.js +6 -4
  311. package/dist/setup/claude-md.js +39 -34
  312. package/dist/setup/codex.js +9 -2
  313. package/dist/setup/copilot.js +160 -47
  314. package/dist/setup/json-config.d.ts +99 -0
  315. package/dist/setup/json-config.js +167 -0
  316. package/dist/setup/migrate.js +1 -1
  317. package/dist/setup/native-binding.d.ts +75 -0
  318. package/dist/setup/native-binding.js +146 -0
  319. package/dist/setup/settings-hooks.js +8 -13
  320. package/dist/setup/uninstall.js +1 -21
  321. package/dist/tools/context.d.ts +8 -8
  322. package/dist/tools/forget.d.ts +9 -8
  323. package/dist/tools/forget.js +17 -4
  324. package/dist/tools/recall.d.ts +13 -13
  325. package/dist/tools/remember.d.ts +16 -16
  326. package/dist/tools/remember.js +19 -8
  327. package/dist/worker/brain-worker.d.ts +1 -0
  328. package/dist/worker/brain-worker.js +79 -16
  329. package/dist/worker/types.d.ts +8 -0
  330. package/dist/worker/types.js +8 -0
  331. package/dist/xray/dir-scanner.d.ts +18 -0
  332. package/dist/xray/dir-scanner.js +23 -1
  333. package/dist/xray/file-scanner.js +16 -1
  334. package/dist/xray/findings-store.js +9 -1
  335. package/dist/xray/index.d.ts +2 -0
  336. package/dist/xray/index.js +10 -1
  337. package/dist/xray/npm-inspector.d.ts +31 -0
  338. package/dist/xray/npm-inspector.js +135 -29
  339. package/dist/xray/patterns.d.ts +1 -1
  340. package/dist/xray/patterns.js +20 -23
  341. package/dist/xray/sarif.d.ts +78 -0
  342. package/dist/xray/sarif.js +166 -0
  343. package/dist/xray/watch.d.ts +1 -0
  344. package/dist/xray/watch.js +10 -1
  345. package/hooks/openclaw/cortex-memory/handler.ts +122 -18
  346. package/hooks/openclaw/cortex-memory/runtime.mjs +10 -4
  347. package/package.json +10 -3
  348. package/scripts/postinstall.mjs +8 -3
  349. package/dist/memory/embedding-cache.d.ts +0 -20
  350. package/dist/memory/embedding-cache.js +0 -91
  351. /package/dashboard/.next/standalone/dashboard/.next/static/{_j4TeMpss-w79QtNNWqZw → tjJ3X8xQ-2_WQTPGF3zCA}/_buildManifest.js +0 -0
  352. /package/dashboard/.next/standalone/dashboard/.next/static/{_j4TeMpss-w79QtNNWqZw → tjJ3X8xQ-2_WQTPGF3zCA}/_clientMiddlewareManifest.json +0 -0
  353. /package/dashboard/.next/standalone/dashboard/.next/static/{_j4TeMpss-w79QtNNWqZw → tjJ3X8xQ-2_WQTPGF3zCA}/_ssgManifest.js +0 -0
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Self-healing for the better-sqlite3 native binding.
3
+ *
4
+ * better-sqlite3 ships prebuilt binaries for common platform/ABI combos; when
5
+ * none matches (e.g. a newer Node than the prebuilds, or arm64 with no prebuilt)
6
+ * it must compile from source, which needs a C/C++ toolchain. If that hasn't
7
+ * happened the binding is missing and every DB operation fails with
8
+ * "Could not locate the bindings file".
9
+ *
10
+ * The trap (observed on an arm64 fleet box): `npm rebuild better-sqlite3` only
11
+ * works when run IN THE PACKAGE'S INSTALL DIR. Run from anywhere else (e.g. the
12
+ * user's home dir) it matches nothing and reports "rebuilt dependencies
13
+ * successfully" — a no-op. So this module resolves the install dir from the
14
+ * running code's own location and rebuilds there.
15
+ *
16
+ * Used by: `shieldcortex update` (verify+heal step), `shieldcortex repair`,
17
+ * `shieldcortex doctor` (correct remediation text), and the postinstall guidance.
18
+ */
19
+ import path from 'path';
20
+ import { spawn } from 'child_process';
21
+ import { fileURLToPath } from 'url';
22
+ import { createRequire } from 'module';
23
+ const require = createRequire(import.meta.url);
24
+ /**
25
+ * The package's own install root — the directory whose `package.json` is this
26
+ * package, and which contains `node_modules/better-sqlite3`. Derived from the
27
+ * running module's location, NOT `npm root -g` (which points at the wrong tree
28
+ * when the package was installed under a custom prefix or via a registry shim).
29
+ *
30
+ * From `dist/setup/native-binding.js` → `../../` is the package root.
31
+ */
32
+ export function resolveSelfInstallDir() {
33
+ const here = path.dirname(fileURLToPath(import.meta.url));
34
+ return path.resolve(here, '..', '..');
35
+ }
36
+ /**
37
+ * Smoke-test the native binding: load it, open an in-memory DB, run a probe.
38
+ * Synchronous (the load is sync) and never throws — returns a verdict.
39
+ */
40
+ export function verifyNativeBinding() {
41
+ try {
42
+ const Database = require('better-sqlite3');
43
+ const db = new Database(':memory:');
44
+ db.exec('CREATE TABLE _sc_probe(x)');
45
+ db.close();
46
+ return { ok: true };
47
+ }
48
+ catch (err) {
49
+ return { ok: false, error: err instanceof Error ? err.message : String(err) };
50
+ }
51
+ }
52
+ /**
53
+ * Run `npm rebuild better-sqlite3` in the install dir. Async (the rebuild can
54
+ * take tens of seconds) so callers can keep a spinner alive. Never throws.
55
+ */
56
+ export function rebuildNativeBinding(installDir) {
57
+ return new Promise((resolve) => {
58
+ let output = '';
59
+ let settled = false;
60
+ const finish = (ok) => { if (!settled) {
61
+ settled = true;
62
+ resolve({ ok, output });
63
+ } };
64
+ let child;
65
+ try {
66
+ child = spawn('npm', ['rebuild', 'better-sqlite3', '--no-audit', '--no-fund'], {
67
+ cwd: installDir,
68
+ stdio: ['ignore', 'pipe', 'pipe'],
69
+ shell: false,
70
+ });
71
+ }
72
+ catch (err) {
73
+ return resolve({ ok: false, output: err instanceof Error ? err.message : String(err) });
74
+ }
75
+ const timer = setTimeout(() => {
76
+ try {
77
+ child.kill('SIGTERM');
78
+ }
79
+ catch { /* already dead */ }
80
+ output += '\n[timed out after 180s]';
81
+ finish(false);
82
+ }, 180_000);
83
+ timer.unref();
84
+ child.stdout?.setEncoding('utf-8');
85
+ child.stderr?.setEncoding('utf-8');
86
+ child.stdout?.on('data', (c) => { output += c; });
87
+ child.stderr?.on('data', (c) => { output += c; });
88
+ child.on('error', (err) => { clearTimeout(timer); output += String(err?.message ?? err); finish(false); });
89
+ child.on('close', (code) => { clearTimeout(timer); finish(code === 0); });
90
+ });
91
+ }
92
+ /**
93
+ * Platform-aware build-toolchain hint, tailored by error text when available.
94
+ */
95
+ function toolchainHint(rebuildOutput) {
96
+ const out = (rebuildOutput ?? '').toLowerCase();
97
+ const needsToolchain = !rebuildOutput || /gyp|python|make|g\+\+|cc1plus|no such file|command not found/.test(out);
98
+ if (!needsToolchain)
99
+ return '';
100
+ if (process.platform === 'darwin') {
101
+ return 'If the rebuild fails for lack of a compiler: xcode-select --install';
102
+ }
103
+ if (process.platform === 'win32') {
104
+ return 'If the rebuild fails for lack of a compiler: install the "Desktop development with C++" workload (Visual Studio Build Tools).';
105
+ }
106
+ return 'If the rebuild fails for lack of a compiler: sudo apt-get install -y python3 make g++ (or your distro\'s build-essential).';
107
+ }
108
+ /**
109
+ * The correct copy-paste remediation — the install-dir `cd` is the bit users
110
+ * miss (a bare `npm rebuild better-sqlite3` from $HOME is a silent no-op).
111
+ */
112
+ export function nativeBindingRemediation(installDir, rebuildOutput) {
113
+ const lines = [
114
+ `cd "${installDir}" && npm rebuild better-sqlite3`,
115
+ ];
116
+ const hint = toolchainHint(rebuildOutput);
117
+ if (hint)
118
+ lines.push(hint);
119
+ lines.push('Then restart Claude Code / the OpenClaw gateway so processes reload the binding.');
120
+ return lines.join('\n');
121
+ }
122
+ /**
123
+ * Verify the binding; if it fails, rebuild in the install dir and re-verify.
124
+ * - 'ok' — loaded first try (no rebuild).
125
+ * - 'healed' — rebuilt and now loads.
126
+ * - 'failed' — still broken after a rebuild; `remediation` carries the fix.
127
+ */
128
+ export async function ensureNativeBinding(deps = {}) {
129
+ const verify = deps.verify ?? verifyNativeBinding;
130
+ const rebuild = deps.rebuild ?? rebuildNativeBinding;
131
+ const installDir = deps.installDir ?? resolveSelfInstallDir;
132
+ const first = verify();
133
+ if (first.ok)
134
+ return { status: 'ok' };
135
+ const dir = installDir();
136
+ const rebuilt = await rebuild(dir);
137
+ const after = verify();
138
+ if (after.ok)
139
+ return { status: 'healed', rebuildOutput: rebuilt.output };
140
+ return {
141
+ status: 'failed',
142
+ error: after.error ?? first.error,
143
+ rebuildOutput: rebuilt.output,
144
+ remediation: nativeBindingRemediation(dir, rebuilt.output),
145
+ };
146
+ }
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * Auto-configure Claude Code hooks in ~/.claude/settings.json.
3
3
  */
4
- import fs from 'fs';
5
4
  import path from 'path';
6
5
  import os from 'os';
7
6
  import { setAutoMemoryEnableConfig } from '../cloud/config.js';
7
+ import { readJsonConfigOrAbort, writeJsonConfigWithBackup } from './json-config.js';
8
8
  const SETTINGS_PATH = path.join(os.homedir(), '.claude', 'settings.json');
9
9
  const CORTEX_HOOKS = {
10
10
  PreCompact: {
@@ -52,21 +52,16 @@ const SESSION_END_HOOK = {
52
52
  function hasCortexHook(entries) {
53
53
  return entries.some((e) => e.hooks?.some((h) => typeof h.command === 'string' && h.command.includes('shieldcortex')));
54
54
  }
55
+ // Reads settings.json. A missing file yields {} (fresh install); a file that
56
+ // EXISTS but won't parse THROWS — setupHooks() must surface that and abort
57
+ // rather than write a hooks-only file over the user's permissions/env/model
58
+ // settings. Mirrors uninstall.ts's "aborting to avoid corruption" discipline.
55
59
  function readSettings() {
56
- if (!fs.existsSync(SETTINGS_PATH)) {
57
- return {};
58
- }
59
- try {
60
- return JSON.parse(fs.readFileSync(SETTINGS_PATH, 'utf-8'));
61
- }
62
- catch {
63
- return {};
64
- }
60
+ return readJsonConfigOrAbort(SETTINGS_PATH);
65
61
  }
62
+ // Backs up an existing settings.json before overwriting it.
66
63
  function writeSettings(settings) {
67
- const dir = path.dirname(SETTINGS_PATH);
68
- fs.mkdirSync(dir, { recursive: true });
69
- fs.writeFileSync(SETTINGS_PATH, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
64
+ writeJsonConfigWithBackup(SETTINGS_PATH, settings);
70
65
  }
71
66
  /**
72
67
  * Migrate stale `npx shieldcortex hook ...` commands to `shieldcortex hook ...`.
@@ -12,6 +12,7 @@ import os from 'os';
12
12
  import readline from 'readline';
13
13
  import { uninstallService } from '../service/install.js';
14
14
  import { uninstallOpenClawHook } from './openclaw.js';
15
+ import { looksLikeShieldcortex } from './json-config.js';
15
16
  /**
16
17
  * Check if the current process is running in an agent context.
17
18
  * Agents (sub-agents) should not be able to uninstall ShieldCortex.
@@ -128,27 +129,6 @@ export function removeClaudeMdBlock() {
128
129
  fs.writeFileSync(CLAUDE_MD_PATH, newContent, 'utf-8');
129
130
  console.log('CLAUDE.md: removed ShieldCortex memory instructions block.');
130
131
  }
131
- /**
132
- * Ownership check: an mcpServers entry "looks like ShieldCortex" if its
133
- * command path or args contain a shieldcortex / shield-cortex token.
134
- * `mcpServers.memory` is a generic key — the official upstream
135
- * `@modelcontextprotocol/server-memory` registers under the same name —
136
- * so we MUST verify ownership before deletion or risk clobbering an
137
- * unrelated MCP server the user installed.
138
- */
139
- function looksLikeShieldcortex(entry) {
140
- if (!entry || typeof entry !== 'object')
141
- return false;
142
- const e = entry;
143
- const tokens = [];
144
- if (typeof e.command === 'string')
145
- tokens.push(e.command);
146
- if (Array.isArray(e.args))
147
- for (const a of e.args)
148
- if (typeof a === 'string')
149
- tokens.push(a);
150
- return tokens.some((t) => /shield[-]?cortex/i.test(t));
151
- }
152
132
  /**
153
133
  * Remove the ShieldCortex MCP server entry from ~/.claude.json.
154
134
  *
@@ -15,27 +15,27 @@ export declare const getContextSchema: z.ZodObject<{
15
15
  type: z.ZodEnum<["user", "cli", "hook", "email", "web", "agent", "file", "api", "tool_response"]>;
16
16
  identifier: z.ZodString;
17
17
  }, "strip", z.ZodTypeAny, {
18
- type: "user" | "cli" | "hook" | "agent" | "api" | "email" | "web" | "file" | "tool_response";
18
+ type: "user" | "cli" | "hook" | "email" | "web" | "agent" | "file" | "api" | "tool_response";
19
19
  identifier: string;
20
20
  }, {
21
- type: "user" | "cli" | "hook" | "agent" | "api" | "email" | "web" | "file" | "tool_response";
21
+ type: "user" | "cli" | "hook" | "email" | "web" | "agent" | "file" | "api" | "tool_response";
22
22
  identifier: string;
23
23
  }>>;
24
24
  }, "strip", z.ZodTypeAny, {
25
- format: "summary" | "detailed" | "raw";
25
+ format: "summary" | "raw" | "detailed";
26
26
  source?: {
27
- type: "user" | "cli" | "hook" | "agent" | "api" | "email" | "web" | "file" | "tool_response";
27
+ type: "user" | "cli" | "hook" | "email" | "web" | "agent" | "file" | "api" | "tool_response";
28
28
  identifier: string;
29
29
  } | undefined;
30
30
  project?: string | undefined;
31
31
  query?: string | undefined;
32
32
  }, {
33
33
  source?: {
34
- type: "user" | "cli" | "hook" | "agent" | "api" | "email" | "web" | "file" | "tool_response";
34
+ type: "user" | "cli" | "hook" | "email" | "web" | "agent" | "file" | "api" | "tool_response";
35
35
  identifier: string;
36
36
  } | undefined;
37
37
  project?: string | undefined;
38
- format?: "summary" | "detailed" | "raw" | undefined;
38
+ format?: "summary" | "raw" | "detailed" | undefined;
39
39
  query?: string | undefined;
40
40
  }>;
41
41
  export type GetContextInput = z.infer<typeof getContextSchema>;
@@ -86,11 +86,11 @@ export declare const consolidateSchema: z.ZodObject<{
86
86
  force: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
87
87
  dryRun: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
88
88
  }, "strip", z.ZodTypeAny, {
89
- dryRun: boolean;
90
89
  force: boolean;
90
+ dryRun: boolean;
91
91
  }, {
92
- dryRun?: boolean | undefined;
93
92
  force?: boolean | undefined;
93
+ dryRun?: boolean | undefined;
94
94
  }>;
95
95
  export declare function executeConsolidate(input: {
96
96
  force?: boolean;
@@ -17,38 +17,38 @@ export declare const forgetSchema: z.ZodObject<{
17
17
  type: z.ZodEnum<["user", "cli", "hook", "email", "web", "agent", "file", "api", "tool_response"]>;
18
18
  identifier: z.ZodString;
19
19
  }, "strip", z.ZodTypeAny, {
20
- type: "user" | "cli" | "hook" | "agent" | "api" | "email" | "web" | "file" | "tool_response";
20
+ type: "user" | "cli" | "hook" | "email" | "web" | "agent" | "file" | "api" | "tool_response";
21
21
  identifier: string;
22
22
  }, {
23
- type: "user" | "cli" | "hook" | "agent" | "api" | "email" | "web" | "file" | "tool_response";
23
+ type: "user" | "cli" | "hook" | "email" | "web" | "agent" | "file" | "api" | "tool_response";
24
24
  identifier: string;
25
25
  }>>;
26
26
  }, "strip", z.ZodTypeAny, {
27
- dryRun: boolean;
28
27
  confirm: boolean;
28
+ dryRun: boolean;
29
29
  source?: {
30
- type: "user" | "cli" | "hook" | "agent" | "api" | "email" | "web" | "file" | "tool_response";
30
+ type: "user" | "cli" | "hook" | "email" | "web" | "agent" | "file" | "api" | "tool_response";
31
31
  identifier: string;
32
32
  } | undefined;
33
33
  project?: string | undefined;
34
34
  id?: number | undefined;
35
- category?: "architecture" | "pattern" | "preference" | "error" | "context" | "learning" | "todo" | "note" | "relationship" | "custom" | undefined;
35
+ category?: "context" | "pattern" | "architecture" | "preference" | "error" | "learning" | "todo" | "note" | "relationship" | "custom" | undefined;
36
36
  query?: string | undefined;
37
37
  olderThan?: number | undefined;
38
38
  belowSalience?: number | undefined;
39
39
  }, {
40
40
  source?: {
41
- type: "user" | "cli" | "hook" | "agent" | "api" | "email" | "web" | "file" | "tool_response";
41
+ type: "user" | "cli" | "hook" | "email" | "web" | "agent" | "file" | "api" | "tool_response";
42
42
  identifier: string;
43
43
  } | undefined;
44
44
  project?: string | undefined;
45
45
  id?: number | undefined;
46
- category?: "architecture" | "pattern" | "preference" | "error" | "context" | "learning" | "todo" | "note" | "relationship" | "custom" | undefined;
46
+ category?: "context" | "pattern" | "architecture" | "preference" | "error" | "learning" | "todo" | "note" | "relationship" | "custom" | undefined;
47
47
  query?: string | undefined;
48
+ confirm?: boolean | undefined;
48
49
  olderThan?: number | undefined;
49
50
  belowSalience?: number | undefined;
50
51
  dryRun?: boolean | undefined;
51
- confirm?: boolean | undefined;
52
52
  }>;
53
53
  export type ForgetInput = z.infer<typeof forgetSchema>;
54
54
  /**
@@ -57,6 +57,7 @@ export type ForgetInput = z.infer<typeof forgetSchema>;
57
57
  export declare function executeForget(input: ForgetInput): Promise<{
58
58
  success: boolean;
59
59
  deleted?: number;
60
+ denied?: number;
60
61
  wouldDelete?: number;
61
62
  memories?: {
62
63
  id: number;
@@ -131,14 +131,27 @@ export async function executeForget(input) {
131
131
  error: error.toUserMessage(),
132
132
  };
133
133
  }
134
- // Execute deletion within a transaction for atomicity
134
+ // Execute deletion within a transaction for atomicity. Route every
135
+ // affected id through deleteMemory(id, source) — NOT a raw bulk DELETE —
136
+ // so each row gets the same enforcement as the single-ID path: delete-ACL
137
+ // check (+ access-denial audit on refusal), graph cleanup, cloud-sync
138
+ // delete, and the dashboard `memory_deleted` event. A low-trust / non-owner
139
+ // caller therefore can't mass-delete protected memories. better-sqlite3 is
140
+ // synchronous, so the per-row loop stays inside one transaction atomically.
141
+ const deletedMemories = [];
135
142
  withTransaction(() => {
136
- db.prepare(`DELETE FROM memories WHERE ${whereClause}`).run(...params);
143
+ for (const memory of affected) {
144
+ if (deleteMemory(memory.id, source)) {
145
+ deletedMemories.push(memory);
146
+ }
147
+ }
137
148
  });
149
+ const denied = affected.length - deletedMemories.length;
138
150
  return {
139
151
  success: true,
140
- deleted: affected.length,
141
- memories: affected,
152
+ deleted: deletedMemories.length,
153
+ ...(denied > 0 ? { denied } : {}),
154
+ memories: deletedMemories,
142
155
  };
143
156
  }
144
157
  catch (error) {
@@ -20,10 +20,10 @@ export declare const recallSchema: z.ZodObject<{
20
20
  type: z.ZodEnum<["user", "cli", "hook", "email", "web", "agent", "file", "api", "tool_response"]>;
21
21
  identifier: z.ZodString;
22
22
  }, "strip", z.ZodTypeAny, {
23
- type: "user" | "cli" | "hook" | "agent" | "api" | "email" | "web" | "file" | "tool_response";
23
+ type: "user" | "cli" | "hook" | "email" | "web" | "agent" | "file" | "api" | "tool_response";
24
24
  identifier: string;
25
25
  }, {
26
- type: "user" | "cli" | "hook" | "agent" | "api" | "email" | "web" | "file" | "tool_response";
26
+ type: "user" | "cli" | "hook" | "email" | "web" | "agent" | "file" | "api" | "tool_response";
27
27
  identifier: string;
28
28
  }>>;
29
29
  }, "strip", z.ZodTypeAny, {
@@ -31,26 +31,26 @@ export declare const recallSchema: z.ZodObject<{
31
31
  limit: number;
32
32
  includeDecayed: boolean;
33
33
  includeGlobal: boolean;
34
+ type?: "short_term" | "long_term" | "episodic" | undefined;
34
35
  source?: {
35
- type: "user" | "cli" | "hook" | "agent" | "api" | "email" | "web" | "file" | "tool_response";
36
+ type: "user" | "cli" | "hook" | "email" | "web" | "agent" | "file" | "api" | "tool_response";
36
37
  identifier: string;
37
38
  } | undefined;
38
39
  project?: string | undefined;
39
- type?: "short_term" | "long_term" | "episodic" | undefined;
40
- category?: "architecture" | "pattern" | "preference" | "error" | "context" | "learning" | "todo" | "note" | "relationship" | "custom" | undefined;
40
+ category?: "context" | "pattern" | "architecture" | "preference" | "error" | "learning" | "todo" | "note" | "relationship" | "custom" | undefined;
41
41
  tags?: string[] | undefined;
42
42
  query?: string | undefined;
43
43
  }, {
44
+ type?: "short_term" | "long_term" | "episodic" | undefined;
44
45
  source?: {
45
- type: "user" | "cli" | "hook" | "agent" | "api" | "email" | "web" | "file" | "tool_response";
46
+ type: "user" | "cli" | "hook" | "email" | "web" | "agent" | "file" | "api" | "tool_response";
46
47
  identifier: string;
47
48
  } | undefined;
48
49
  project?: string | undefined;
49
50
  mode?: "search" | "important" | "recent" | undefined;
50
- type?: "short_term" | "long_term" | "episodic" | undefined;
51
- category?: "architecture" | "pattern" | "preference" | "error" | "context" | "learning" | "todo" | "note" | "relationship" | "custom" | undefined;
52
- tags?: string[] | undefined;
53
51
  limit?: number | undefined;
52
+ category?: "context" | "pattern" | "architecture" | "preference" | "error" | "learning" | "todo" | "note" | "relationship" | "custom" | undefined;
53
+ tags?: string[] | undefined;
54
54
  query?: string | undefined;
55
55
  includeDecayed?: boolean | undefined;
56
56
  includeGlobal?: boolean | undefined;
@@ -87,22 +87,22 @@ export declare const getMemorySchema: z.ZodObject<{
87
87
  type: z.ZodEnum<["user", "cli", "hook", "email", "web", "agent", "file", "api", "tool_response"]>;
88
88
  identifier: z.ZodString;
89
89
  }, "strip", z.ZodTypeAny, {
90
- type: "user" | "cli" | "hook" | "agent" | "api" | "email" | "web" | "file" | "tool_response";
90
+ type: "user" | "cli" | "hook" | "email" | "web" | "agent" | "file" | "api" | "tool_response";
91
91
  identifier: string;
92
92
  }, {
93
- type: "user" | "cli" | "hook" | "agent" | "api" | "email" | "web" | "file" | "tool_response";
93
+ type: "user" | "cli" | "hook" | "email" | "web" | "agent" | "file" | "api" | "tool_response";
94
94
  identifier: string;
95
95
  }>>;
96
96
  }, "strip", z.ZodTypeAny, {
97
97
  id: number;
98
98
  source?: {
99
- type: "user" | "cli" | "hook" | "agent" | "api" | "email" | "web" | "file" | "tool_response";
99
+ type: "user" | "cli" | "hook" | "email" | "web" | "agent" | "file" | "api" | "tool_response";
100
100
  identifier: string;
101
101
  } | undefined;
102
102
  }, {
103
103
  id: number;
104
104
  source?: {
105
- type: "user" | "cli" | "hook" | "agent" | "api" | "email" | "web" | "file" | "tool_response";
105
+ type: "user" | "cli" | "hook" | "email" | "web" | "agent" | "file" | "api" | "tool_response";
106
106
  identifier: string;
107
107
  } | undefined;
108
108
  }>;
@@ -21,10 +21,10 @@ export declare const rememberSchema: z.ZodObject<{
21
21
  type: z.ZodEnum<["user", "cli", "hook", "email", "web", "agent", "file", "api", "tool_response"]>;
22
22
  identifier: z.ZodString;
23
23
  }, "strip", z.ZodTypeAny, {
24
- type: "user" | "cli" | "hook" | "agent" | "api" | "email" | "web" | "file" | "tool_response";
24
+ type: "user" | "cli" | "hook" | "email" | "web" | "agent" | "file" | "api" | "tool_response";
25
25
  identifier: string;
26
26
  }, {
27
- type: "user" | "cli" | "hook" | "agent" | "api" | "email" | "web" | "file" | "tool_response";
27
+ type: "user" | "cli" | "hook" | "email" | "web" | "agent" | "file" | "api" | "tool_response";
28
28
  identifier: string;
29
29
  }>>;
30
30
  sourceType: z.ZodOptional<z.ZodEnum<["user", "cli", "hook", "email", "web", "agent", "file", "api", "tool_response"]>>;
@@ -35,43 +35,43 @@ export declare const rememberSchema: z.ZodObject<{
35
35
  }, "strip", z.ZodTypeAny, {
36
36
  title: string;
37
37
  content: string;
38
+ type?: "short_term" | "long_term" | "episodic" | undefined;
38
39
  scope?: "project" | "global" | undefined;
39
40
  transferable?: boolean | undefined;
40
41
  source?: {
41
- type: "user" | "cli" | "hook" | "agent" | "api" | "email" | "web" | "file" | "tool_response";
42
+ type: "user" | "cli" | "hook" | "email" | "web" | "agent" | "file" | "api" | "tool_response";
42
43
  identifier: string;
43
44
  } | undefined;
44
45
  project?: string | undefined;
45
- type?: "short_term" | "long_term" | "episodic" | undefined;
46
- category?: "architecture" | "pattern" | "preference" | "error" | "context" | "learning" | "todo" | "note" | "relationship" | "custom" | undefined;
47
- tags?: string[] | undefined;
48
46
  sourceIdentifier?: string | undefined;
47
+ category?: "context" | "pattern" | "architecture" | "preference" | "error" | "learning" | "todo" | "note" | "relationship" | "custom" | undefined;
48
+ tags?: string[] | undefined;
49
+ sourceType?: "user" | "cli" | "hook" | "email" | "web" | "agent" | "file" | "api" | "tool_response" | undefined;
49
50
  sessionId?: string | undefined;
50
- sourceType?: "user" | "cli" | "hook" | "agent" | "api" | "email" | "web" | "file" | "tool_response" | undefined;
51
- memoryPurpose?: "project" | "user" | "feedback" | "reference" | undefined;
51
+ memoryPurpose?: "user" | "project" | "feedback" | "reference" | undefined;
52
52
  memoryScope?: "private" | "team" | undefined;
53
- importance?: "critical" | "low" | "high" | "normal" | undefined;
53
+ importance?: "low" | "high" | "critical" | "normal" | undefined;
54
54
  agentId?: string | undefined;
55
55
  workspaceDir?: string | undefined;
56
56
  }, {
57
57
  title: string;
58
58
  content: string;
59
+ type?: "short_term" | "long_term" | "episodic" | undefined;
59
60
  scope?: "project" | "global" | undefined;
60
61
  transferable?: boolean | undefined;
61
62
  source?: {
62
- type: "user" | "cli" | "hook" | "agent" | "api" | "email" | "web" | "file" | "tool_response";
63
+ type: "user" | "cli" | "hook" | "email" | "web" | "agent" | "file" | "api" | "tool_response";
63
64
  identifier: string;
64
65
  } | undefined;
65
66
  project?: string | undefined;
66
- type?: "short_term" | "long_term" | "episodic" | undefined;
67
- category?: "architecture" | "pattern" | "preference" | "error" | "context" | "learning" | "todo" | "note" | "relationship" | "custom" | undefined;
68
- tags?: string[] | undefined;
69
67
  sourceIdentifier?: string | undefined;
68
+ category?: "context" | "pattern" | "architecture" | "preference" | "error" | "learning" | "todo" | "note" | "relationship" | "custom" | undefined;
69
+ tags?: string[] | undefined;
70
+ sourceType?: "user" | "cli" | "hook" | "email" | "web" | "agent" | "file" | "api" | "tool_response" | undefined;
70
71
  sessionId?: string | undefined;
71
- sourceType?: "user" | "cli" | "hook" | "agent" | "api" | "email" | "web" | "file" | "tool_response" | undefined;
72
- memoryPurpose?: "project" | "user" | "feedback" | "reference" | undefined;
72
+ memoryPurpose?: "user" | "project" | "feedback" | "reference" | undefined;
73
73
  memoryScope?: "private" | "team" | undefined;
74
- importance?: "critical" | "low" | "high" | "normal" | undefined;
74
+ importance?: "low" | "high" | "critical" | "normal" | undefined;
75
75
  agentId?: string | undefined;
76
76
  workspaceDir?: string | undefined;
77
77
  }>;
@@ -4,7 +4,7 @@
4
4
  * Store memories with automatic salience detection and categorization.
5
5
  */
6
6
  import { z } from 'zod';
7
- import { addMemory, searchMemories, detectRelationships, createMemoryLink, getLastTruncationInfo } from '../memory/store.js';
7
+ import { addMemory, updateMemory, searchMemories, detectRelationships, createMemoryLink, getLastTruncationInfo } from '../memory/store.js';
8
8
  import { calculateSalience, analyzeSalienceFactors, explainSalience } from '../memory/salience.js';
9
9
  import { formatErrorForMcp } from '../errors.js';
10
10
  import { resolveProject } from '../context/project-context.js';
@@ -92,18 +92,29 @@ export async function executeRemember(input) {
92
92
  project: resolvedProject ?? undefined,
93
93
  limit: 3,
94
94
  });
95
- // If very similar memory exists, update instead
95
+ // If a very similar memory exists, genuinely UPDATE it with the new
96
+ // content rather than silently discarding the new write. The previous
97
+ // behaviour reported "Updated existing similar memory" but never persisted
98
+ // anything — so a richer follow-up was lost while the report implied a
99
+ // successful update (Phase 17 A4).
96
100
  if (existing.length > 0 && existing[0].relevanceScore > 0.9) {
97
101
  const existingMemory = existing[0].memory;
102
+ const contentChanged = existingMemory.content !== content;
103
+ const updated = contentChanged
104
+ ? updateMemory(existingMemory.id, { content, title })
105
+ : existingMemory;
106
+ const target = updated ?? existingMemory;
98
107
  return {
99
108
  success: true,
100
109
  memory: {
101
- id: existingMemory.id,
102
- title: existingMemory.title,
103
- salience: existingMemory.salience,
104
- type: existingMemory.type,
105
- category: existingMemory.category,
106
- reason: 'Updated existing similar memory',
110
+ id: target.id,
111
+ title: target.title,
112
+ salience: target.salience,
113
+ type: target.type,
114
+ category: target.category,
115
+ reason: contentChanged
116
+ ? 'Updated existing similar memory with new content'
117
+ : 'Existing similar memory already up to date',
107
118
  },
108
119
  };
109
120
  }
@@ -26,6 +26,7 @@ export declare class BrainWorker {
26
26
  private lastLightTick;
27
27
  private lastMediumTick;
28
28
  private lastConsolidation;
29
+ private lastAuditPurge;
29
30
  /**
30
31
  * Create a new BrainWorker
31
32
  *