shieldcortex 4.36.0 → 4.38.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 (240) hide show
  1. package/dashboard/.next/standalone/dashboard/.next/BUILD_ID +1 -1
  2. package/dashboard/.next/standalone/dashboard/.next/build-manifest.json +2 -2
  3. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.html +2 -2
  4. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.rsc +1 -1
  5. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  6. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  7. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  8. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  9. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  10. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.html +1 -1
  11. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.rsc +1 -1
  12. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  13. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  14. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  15. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  16. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  17. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  18. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.html +1 -1
  19. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.rsc +1 -1
  20. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin/__PAGE__.segment.rsc +1 -1
  21. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin.segment.rsc +1 -1
  22. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  23. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_full.segment.rsc +1 -1
  24. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  25. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_index.segment.rsc +1 -1
  26. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_tree.segment.rsc +1 -1
  27. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.html +1 -1
  28. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.rsc +1 -1
  29. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud/__PAGE__.segment.rsc +1 -1
  30. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud.segment.rsc +1 -1
  31. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  32. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_full.segment.rsc +1 -1
  33. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_head.segment.rsc +1 -1
  34. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_index.segment.rsc +1 -1
  35. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_tree.segment.rsc +1 -1
  36. package/dashboard/.next/standalone/dashboard/.next/server/app/index.html +1 -1
  37. package/dashboard/.next/standalone/dashboard/.next/server/app/index.rsc +1 -1
  38. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  39. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_full.segment.rsc +1 -1
  40. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_head.segment.rsc +1 -1
  41. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_index.segment.rsc +1 -1
  42. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  43. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.html +1 -1
  44. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.rsc +1 -1
  45. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture/__PAGE__.segment.rsc +1 -1
  46. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture.segment.rsc +1 -1
  47. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  48. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  49. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_full.segment.rsc +1 -1
  50. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_head.segment.rsc +1 -1
  51. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_index.segment.rsc +1 -1
  52. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_tree.segment.rsc +1 -1
  53. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.html +1 -1
  54. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.rsc +1 -1
  55. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph/__PAGE__.segment.rsc +1 -1
  56. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph.segment.rsc +1 -1
  57. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  58. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  59. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_full.segment.rsc +1 -1
  60. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_head.segment.rsc +1 -1
  61. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_index.segment.rsc +1 -1
  62. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_tree.segment.rsc +1 -1
  63. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.html +1 -1
  64. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.rsc +1 -1
  65. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall/__PAGE__.segment.rsc +1 -1
  66. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall.segment.rsc +1 -1
  67. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  68. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  69. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_full.segment.rsc +1 -1
  70. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_head.segment.rsc +1 -1
  71. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_index.segment.rsc +1 -1
  72. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_tree.segment.rsc +1 -1
  73. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.html +1 -1
  74. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.rsc +1 -1
  75. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory/replay/__PAGE__.segment.rsc +1 -1
  76. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory/replay.segment.rsc +1 -1
  77. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  78. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  79. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_full.segment.rsc +1 -1
  80. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_head.segment.rsc +1 -1
  81. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_index.segment.rsc +1 -1
  82. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_tree.segment.rsc +1 -1
  83. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.html +1 -1
  84. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.rsc +1 -1
  85. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review/__PAGE__.segment.rsc +1 -1
  86. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review.segment.rsc +1 -1
  87. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  88. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  89. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_full.segment.rsc +1 -1
  90. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_head.segment.rsc +1 -1
  91. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_index.segment.rsc +1 -1
  92. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_tree.segment.rsc +1 -1
  93. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.html +1 -1
  94. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.rsc +1 -1
  95. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline/__PAGE__.segment.rsc +1 -1
  96. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline.segment.rsc +1 -1
  97. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  98. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  99. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_full.segment.rsc +1 -1
  100. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_head.segment.rsc +1 -1
  101. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_index.segment.rsc +1 -1
  102. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_tree.segment.rsc +1 -1
  103. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.html +1 -1
  104. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.rsc +1 -1
  105. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory/__PAGE__.segment.rsc +1 -1
  106. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  107. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  108. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_full.segment.rsc +1 -1
  109. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_head.segment.rsc +1 -1
  110. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_index.segment.rsc +1 -1
  111. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_tree.segment.rsc +1 -1
  112. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.html +1 -1
  113. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.rsc +1 -1
  114. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview/__PAGE__.segment.rsc +1 -1
  115. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview.segment.rsc +1 -1
  116. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  117. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_full.segment.rsc +1 -1
  118. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_head.segment.rsc +1 -1
  119. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_index.segment.rsc +1 -1
  120. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_tree.segment.rsc +1 -1
  121. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.html +1 -1
  122. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.rsc +1 -1
  123. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit/__PAGE__.segment.rsc +1 -1
  124. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit.segment.rsc +1 -1
  125. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  126. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  127. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_full.segment.rsc +1 -1
  128. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_head.segment.rsc +1 -1
  129. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_index.segment.rsc +1 -1
  130. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_tree.segment.rsc +1 -1
  131. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.html +1 -1
  132. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.rsc +1 -1
  133. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts/__PAGE__.segment.rsc +1 -1
  134. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts.segment.rsc +1 -1
  135. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  136. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  137. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_full.segment.rsc +1 -1
  138. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_head.segment.rsc +1 -1
  139. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_index.segment.rsc +1 -1
  140. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_tree.segment.rsc +1 -1
  141. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.html +1 -1
  142. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.rsc +1 -1
  143. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome/__PAGE__.segment.rsc +1 -1
  144. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome.segment.rsc +1 -1
  145. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  146. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  147. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_full.segment.rsc +1 -1
  148. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_head.segment.rsc +1 -1
  149. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_index.segment.rsc +1 -1
  150. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_tree.segment.rsc +1 -1
  151. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.html +1 -1
  152. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.rsc +1 -1
  153. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies/__PAGE__.segment.rsc +1 -1
  154. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies.segment.rsc +1 -1
  155. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  156. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  157. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_full.segment.rsc +1 -1
  158. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_head.segment.rsc +1 -1
  159. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_index.segment.rsc +1 -1
  160. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_tree.segment.rsc +1 -1
  161. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.html +1 -1
  162. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.rsc +1 -1
  163. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine/__PAGE__.segment.rsc +1 -1
  164. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine.segment.rsc +1 -1
  165. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  166. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  167. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_full.segment.rsc +1 -1
  168. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_head.segment.rsc +1 -1
  169. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_index.segment.rsc +1 -1
  170. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_tree.segment.rsc +1 -1
  171. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.html +1 -1
  172. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.rsc +1 -1
  173. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection/__PAGE__.segment.rsc +1 -1
  174. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  175. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  176. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_full.segment.rsc +1 -1
  177. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_head.segment.rsc +1 -1
  178. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_index.segment.rsc +1 -1
  179. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_tree.segment.rsc +1 -1
  180. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.html +1 -1
  181. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.rsc +1 -1
  182. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings/__PAGE__.segment.rsc +1 -1
  183. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings.segment.rsc +1 -1
  184. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  185. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_full.segment.rsc +1 -1
  186. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  187. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_index.segment.rsc +1 -1
  188. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  189. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.html +1 -1
  190. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.rsc +1 -1
  191. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray/__PAGE__.segment.rsc +1 -1
  192. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray.segment.rsc +1 -1
  193. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +1 -1
  194. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  195. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_full.segment.rsc +1 -1
  196. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_head.segment.rsc +1 -1
  197. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_index.segment.rsc +1 -1
  198. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_tree.segment.rsc +1 -1
  199. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.html +1 -1
  200. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.rsc +1 -1
  201. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain/__PAGE__.segment.rsc +1 -1
  202. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +1 -1
  203. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  204. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_full.segment.rsc +1 -1
  205. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_head.segment.rsc +1 -1
  206. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_index.segment.rsc +1 -1
  207. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_tree.segment.rsc +1 -1
  208. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.html +1 -1
  209. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.rsc +1 -1
  210. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray/__PAGE__.segment.rsc +1 -1
  211. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray.segment.rsc +1 -1
  212. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  213. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_full.segment.rsc +1 -1
  214. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_head.segment.rsc +1 -1
  215. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_index.segment.rsc +1 -1
  216. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_tree.segment.rsc +1 -1
  217. package/dashboard/.next/standalone/dashboard/.next/server/pages/404.html +1 -1
  218. package/dashboard/.next/standalone/dashboard/.next/server/pages/500.html +2 -2
  219. package/dist/cloud/cli.js +26 -1
  220. package/dist/defence/firewall/markdown-image-detector.d.ts +15 -0
  221. package/dist/defence/firewall/markdown-image-detector.js +30 -0
  222. package/dist/defence/tool-response-enforce.d.ts +57 -0
  223. package/dist/defence/tool-response-enforce.js +107 -0
  224. package/dist/defence/tool-response-scanner.d.ts +6 -3
  225. package/dist/defence/tool-response-scanner.js +56 -6
  226. package/dist/defence/trust/read-guard.d.ts +45 -0
  227. package/dist/defence/trust/read-guard.js +76 -0
  228. package/dist/defence/types.d.ts +9 -0
  229. package/dist/memory/consolidate.d.ts +2 -1
  230. package/dist/memory/consolidate.js +7 -2
  231. package/dist/server.d.ts +6 -0
  232. package/dist/server.js +77 -11
  233. package/dist/tools/context.d.ts +2 -0
  234. package/dist/tools/context.js +15 -4
  235. package/dist/tools/recall.d.ts +15 -0
  236. package/dist/tools/recall.js +31 -3
  237. package/package.json +1 -1
  238. /package/dashboard/.next/standalone/dashboard/.next/static/{_JsmCyMaqewdhBNXZu1me → PR51g0pS7Wp0zLzu2q6mQ}/_buildManifest.js +0 -0
  239. /package/dashboard/.next/standalone/dashboard/.next/static/{_JsmCyMaqewdhBNXZu1me → PR51g0pS7Wp0zLzu2q6mQ}/_clientMiddlewareManifest.json +0 -0
  240. /package/dashboard/.next/standalone/dashboard/.next/static/{_JsmCyMaqewdhBNXZu1me → PR51g0pS7Wp0zLzu2q6mQ}/_ssgManifest.js +0 -0
package/dist/server.d.ts CHANGED
@@ -5,6 +5,12 @@
5
5
  * Solves context compaction and memory persistence issues.
6
6
  */
7
7
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
8
+ /**
9
+ * Wrap an MCP tool handler to scan its response for threats.
10
+ * Advisory mode: appends a warning but never blocks.
11
+ * Enforce mode: can redact credential leaks.
12
+ */
13
+ export declare function withResponseScan(toolName: string, handler: (...args: any[]) => any): (...args: any[]) => any;
8
14
  /**
9
15
  * Check text for kill phrase and trigger kill switch if detected.
10
16
  * Returns true if kill switch was activated.
package/dist/server.js CHANGED
@@ -12,11 +12,11 @@ import { getCurrentVersion } from './api/version.js';
12
12
  import { initProjectContext, getActiveProject, setActiveProject, getProjectContextInfo, GLOBAL_PROJECT_SENTINEL, } from './context/project-context.js';
13
13
  // Import tools
14
14
  import { executeRemember, formatRememberResult } from './tools/remember.js';
15
- import { executeRecall, formatRecallResult, executeGetMemory, formatMemory } from './tools/recall.js';
15
+ import { executeRecall, formatRecallResult, executeGetMemory, executeGetRelated, formatMemory } from './tools/recall.js';
16
16
  import { executeForget, formatForgetResult } from './tools/forget.js';
17
17
  import { executeGetContext, executeStartSession, executeEndSession, executeConsolidate, executeStats, formatStats, executeExport, executeImport, } from './tools/context.js';
18
18
  import { generateContextSummary, formatContextSummary, fullCleanup } from './memory/consolidate.js';
19
- import { getHighPriorityMemories, getRecentMemories, getRelatedMemories, createMemoryLink } from './memory/store.js';
19
+ import { getHighPriorityMemories, getRecentMemories, createMemoryLink } from './memory/store.js';
20
20
  import { detectContradictions } from './memory/contradiction.js';
21
21
  import { handleGraphQuery, handleGraphEntities, handleGraphExplain } from './tools/graph.js';
22
22
  import { checkDatabaseSize } from './database/init.js';
@@ -24,6 +24,8 @@ import { queryAuditLogs, getAuditStats, getLifetimeStats } from './defence/audit
24
24
  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
+ import { UNTRUSTED_TOOL_TAG } from './defence/tool-response-enforce.js';
28
+ import { guardReadBySensitivity, guardContextSummary } from './defence/trust/read-guard.js';
27
29
  import { getToolResponseScanConfig } from './cloud/config.js';
28
30
  import { checkKillPhrase } from './defence/iron-dome/index.js';
29
31
  import { isKillSwitchActive, getKillSwitchMeta, assertOperationAllowed, activateKillSwitch, deactivateKillSwitch, KillSwitchError, } from './api/control.js';
@@ -45,7 +47,7 @@ const sourceParam = z.object({
45
47
  * Enforce mode: can redact credential leaks.
46
48
  */
47
49
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
48
- function withResponseScan(toolName, handler) {
50
+ export function withResponseScan(toolName, handler) {
49
51
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
52
  return async (...handlerArgs) => {
51
53
  const result = await handler(...handlerArgs);
@@ -61,8 +63,35 @@ function withResponseScan(toolName, handler) {
61
63
  const scan = scanToolResponse(toolName, textContent, config.toolResponseMode);
62
64
  if (scan.clean)
63
65
  return result;
64
- // Append warning to the response
66
+ // Enforce mode: swap the threatening text for the sanitised payload the
67
+ // scanner produced (injection withheld, secrets redacted, exfil stripped).
68
+ // Non-text blocks (e.g. images) are preserved. Advisory mode keeps the
69
+ // observe-only behaviour: leave the response intact, append a warning.
70
+ if (scan.mode === 'enforce' && scan.sanitisedContent !== null) {
71
+ const nonText = result.content.filter((c) => c.type !== 'text');
72
+ if (scan.blocked) {
73
+ // Whole payload withheld → surface as a tool error so the agent can tell
74
+ // "withheld by firewall" apart from "no results / empty".
75
+ return {
76
+ ...result,
77
+ content: [...nonText, { type: 'text', text: scan.sanitisedContent }],
78
+ isError: true,
79
+ };
80
+ }
81
+ // Redacted-and-delivered → cleaned payload + the untrusted-origin tag in a
82
+ // SEPARATE block, so redacted structured output (JSON/CSV) stays parseable.
83
+ return {
84
+ ...result,
85
+ content: [
86
+ ...nonText,
87
+ { type: 'text', text: scan.sanitisedContent },
88
+ { type: 'text', text: UNTRUSTED_TOOL_TAG },
89
+ ],
90
+ };
91
+ }
92
+ // Advisory: append warning to the response.
65
93
  return {
94
+ ...result,
66
95
  content: [
67
96
  ...result.content,
68
97
  {
@@ -382,8 +411,10 @@ Returns: architecture decisions, patterns, pending items, recent activity.`, {
382
411
  // Export memories
383
412
  server.tool('export_memories', 'Export memories as JSON for backup.', {
384
413
  project: z.string().optional().describe('Project scope. Auto-detected if not provided. Use "*" for all projects.'),
414
+ source: sourceParam,
385
415
  }, { title: 'Export Memories', readOnlyHint: true, destructiveHint: false, idempotentHint: true }, withKillSwitchGuard('memory_read', withResponseScan('export_memories', async (args) => {
386
- const result = executeExport(args);
416
+ const source = resolveToolSource(args.source, 'export_memories');
417
+ const result = executeExport({ ...args, source });
387
418
  return {
388
419
  content: [{
389
420
  type: 'text',
@@ -428,8 +459,14 @@ Returns: architecture decisions, patterns, pending items, recent activity.`, {
428
459
  // Get Related Memories
429
460
  server.tool('get_related', 'Get memories related to a specific memory. Shows connections and relationships.', {
430
461
  id: z.number().describe('Memory ID to find relationships for'),
462
+ source: sourceParam,
431
463
  }, { title: 'Get Related Memories', readOnlyHint: true, destructiveHint: false, idempotentHint: true }, withKillSwitchGuard('memory_read', withResponseScan('get_related', async (args) => {
432
- const related = getRelatedMemories(args.id);
464
+ const source = resolveToolSource(args.source, 'get_related');
465
+ const result = executeGetRelated({ id: args.id, source });
466
+ if (!result.success) {
467
+ return { content: [{ type: 'text', text: `Error: ${result.error}` }], isError: true };
468
+ }
469
+ const related = result.related;
433
470
  if (related.length === 0) {
434
471
  return { content: [{ type: 'text', text: 'No related memories found.' }] };
435
472
  }
@@ -508,7 +545,10 @@ but you can use this tool to check for new contradictions at any time.`, {
508
545
  category: args.category,
509
546
  minScore: args.minScore,
510
547
  limit: args.limit,
511
- });
548
+ }).filter(
549
+ // Drop a pair if either side is RESTRICTED/quarantined (don't leak a
550
+ // credential-class memory's title via a contradiction listing).
551
+ (c) => guardReadBySensitivity([c.memoryA, c.memoryB]).length === 2);
512
552
  if (contradictions.length === 0) {
513
553
  return { content: [{ type: 'text', text: 'No contradictions detected.' }] };
514
554
  }
@@ -688,6 +728,28 @@ Runs injection detection (40+ patterns) and credential leak scanning (25+ provid
688
728
  if (scan.auditId > 0) {
689
729
  lines.push(`**Audit ID:** ${scan.auditId}`);
690
730
  }
731
+ // Enforce mode produced an actioned payload — surface it so callers using
732
+ // this tool as a programmatic firewall receive the safe content, not just
733
+ // a verdict. Advisory scans leave sanitisedContent null (verdict only).
734
+ if (scan.sanitisedContent !== null) {
735
+ lines.push('');
736
+ lines.push(`### Enforcement (${scan.blocked ? 'BLOCKED' : 'REDACTED'})`);
737
+ for (const action of scan.enforceActions) {
738
+ lines.push(`- ${action}`);
739
+ }
740
+ if (!scan.blocked) {
741
+ lines.push(`- origin: ${UNTRUSTED_TOOL_TAG}`);
742
+ }
743
+ lines.push('');
744
+ lines.push('**Sanitised content (deliver this instead):**');
745
+ // Dynamic fence longer than any backtick run in the content, so content
746
+ // containing ``` cannot break out of the code block.
747
+ const longestRun = Math.max(0, ...(scan.sanitisedContent.match(/`+/g) || []).map((s) => s.length));
748
+ const fence = '`'.repeat(Math.max(3, longestRun + 1));
749
+ lines.push(fence);
750
+ lines.push(scan.sanitisedContent);
751
+ lines.push(fence);
752
+ }
691
753
  lines.push('');
692
754
  lines.push(scan.summary);
693
755
  return { content: [{ type: 'text', text: lines.join('\n') }] };
@@ -892,7 +954,8 @@ Runs injection detection (40+ patterns) and credential leak scanning (25+ provid
892
954
  if (isKillSwitchActive()) {
893
955
  return { contents: [{ uri: 'memory://context', mimeType: 'text/plain', text: '[KILL SWITCH ACTIVE] Memory access blocked.' }] };
894
956
  }
895
- const summary = await generateContextSummary();
957
+ // Shared-context resource: strip RESTRICTED + quarantined (sensitivity guard).
958
+ const summary = guardContextSummary(await generateContextSummary());
896
959
  return {
897
960
  contents: [{
898
961
  uri: 'memory://context',
@@ -906,7 +969,8 @@ Runs injection detection (40+ patterns) and credential leak scanning (25+ provid
906
969
  if (isKillSwitchActive()) {
907
970
  return { contents: [{ uri: 'memory://important', mimeType: 'text/plain', text: '[KILL SWITCH ACTIVE] Memory access blocked.' }] };
908
971
  }
909
- const memories = getHighPriorityMemories(20);
972
+ // Shared-context resource: strip RESTRICTED + quarantined before exposing content.
973
+ const memories = guardReadBySensitivity(getHighPriorityMemories(20));
910
974
  const text = memories.map(m => `## ${m.title}\n${m.content}\n*${m.category} | ${(m.salience * 100).toFixed(0)}% salience*\n`).join('\n');
911
975
  return {
912
976
  contents: [{
@@ -921,7 +985,8 @@ Runs injection detection (40+ patterns) and credential leak scanning (25+ provid
921
985
  if (isKillSwitchActive()) {
922
986
  return { contents: [{ uri: 'memory://recent', mimeType: 'text/plain', text: '[KILL SWITCH ACTIVE] Memory access blocked.' }] };
923
987
  }
924
- const memories = getRecentMemories(15);
988
+ // Shared-context resource: strip RESTRICTED + quarantined before exposing content.
989
+ const memories = guardReadBySensitivity(getRecentMemories(15));
925
990
  const text = memories.map(m => `- **${m.title}** (${m.category}): ${m.content.slice(0, 100)}...`).join('\n');
926
991
  return {
927
992
  contents: [{
@@ -941,7 +1006,8 @@ Runs injection detection (40+ patterns) and credential leak scanning (25+ provid
941
1006
  messages: [{ role: 'user', content: { type: 'text', text: '[KILL SWITCH ACTIVE] Context restoration blocked. Use iron_dome_resume to resume.' } }],
942
1007
  };
943
1008
  }
944
- const summary = await generateContextSummary();
1009
+ // Shared-context prompt: strip RESTRICTED + quarantined (sensitivity guard).
1010
+ const summary = guardContextSummary(await generateContextSummary());
945
1011
  const context = formatContextSummary(summary);
946
1012
  return {
947
1013
  messages: [{
@@ -8,6 +8,7 @@ import { z } from 'zod';
8
8
  import { getMemoryStats } from '../memory/store.js';
9
9
  import { type SalienceDistribution } from '../memory/metrics.js';
10
10
  import { Memory, ContextSummary, ConsolidationResult } from '../memory/types.js';
11
+ import type { DefenceSource } from '../defence/types.js';
11
12
  export declare const getContextSchema: z.ZodObject<{
12
13
  project: z.ZodOptional<z.ZodString>;
13
14
  query: z.ZodOptional<z.ZodString>;
@@ -132,6 +133,7 @@ export declare const exportSchema: z.ZodObject<{
132
133
  }>;
133
134
  export declare function executeExport(input: {
134
135
  project?: string;
136
+ source?: DefenceSource;
135
137
  }): {
136
138
  success: boolean;
137
139
  data?: string;
@@ -10,6 +10,7 @@ import { getMemoryStats } from '../memory/store.js';
10
10
  import { getSalienceDistribution } from '../memory/metrics.js';
11
11
  import { getDatabase } from '../database/init.js';
12
12
  import { resolveProject } from '../context/project-context.js';
13
+ import { guardReadBySensitivity, guardContextSummary } from '../defence/trust/read-guard.js';
13
14
  // Input schema for getting context
14
15
  export const getContextSchema = z.object({
15
16
  project: z.string().optional().describe('Project to get context for'),
@@ -29,12 +30,18 @@ export async function executeGetContext(input) {
29
30
  // Resolve project (auto-detect if not provided)
30
31
  const resolvedProject = resolveProject(input.project);
31
32
  const projectFilter = resolvedProject ?? undefined;
33
+ // Read guard: get_context is a SHARED-CONTEXT bootstrap surface that feeds
34
+ // the prompt, so strip RESTRICTED + quarantined for everyone (matching the
35
+ // .mjs prompt hooks) but keep INTERNAL project context available — a
36
+ // sensitivity guard, not the per-caller own-only ACL, so a low-trust
37
+ // subagent isn't blacked out from the context it needs. Owner-specific
38
+ // RESTRICTED retrieval is the explicit get_memory tool's job.
32
39
  // Generate context summary
33
- const summary = await generateContextSummary(projectFilter);
40
+ const summary = guardContextSummary(await generateContextSummary(projectFilter));
34
41
  // If there's a query, also get specifically relevant memories
35
42
  let relevantMemories = [];
36
43
  if (input.query) {
37
- relevantMemories = await getSuggestedContext(input.query, projectFilter, 5);
44
+ relevantMemories = guardReadBySensitivity(await getSuggestedContext(input.query, projectFilter, 5));
38
45
  }
39
46
  // Format based on requested format
40
47
  let context;
@@ -133,7 +140,10 @@ export async function executeStartSession(input) {
133
140
  const resolvedProject = resolveProject(input.project);
134
141
  const projectFilter = resolvedProject ?? undefined;
135
142
  const { sessionId, context } = await startSession(projectFilter);
136
- const formattedContext = formatContextSummary(context);
143
+ // Read guard: start_session is a shared-context bootstrap surface (sibling of
144
+ // get_context) — strip RESTRICTED + quarantined before formatting so the
145
+ // session preamble never leaks credential-class memories.
146
+ const formattedContext = formatContextSummary(guardContextSummary(context));
137
147
  return {
138
148
  success: true,
139
149
  sessionId,
@@ -257,7 +267,8 @@ export function executeExport(input) {
257
267
  // Resolve project (auto-detect if not provided)
258
268
  const resolvedProject = resolveProject(input.project);
259
269
  const projectFilter = resolvedProject ?? undefined;
260
- const data = exportMemories(projectFilter);
270
+ // Read ACL: filter the bulk dump to rows this caller may read.
271
+ const data = exportMemories(projectFilter, input.source);
261
272
  const memories = JSON.parse(data);
262
273
  return {
263
274
  success: true,
@@ -4,6 +4,7 @@
4
4
  * Search and retrieve memories using semantic search and filters.
5
5
  */
6
6
  import { z } from 'zod';
7
+ import { getRelatedMemories } from '../memory/store.js';
7
8
  import { Memory } from '../memory/types.js';
8
9
  import type { DefenceSource } from '../defence/types.js';
9
10
  export declare const recallSchema: z.ZodObject<{
@@ -114,3 +115,17 @@ export declare function executeGetMemory(input: {
114
115
  memory?: Memory;
115
116
  error?: string;
116
117
  };
118
+ /**
119
+ * Execute the get_related tool — related memories, ACL-filtered.
120
+ *
121
+ * Related links can cross trust/sensitivity boundaries, so the same read ACL
122
+ * applies: a caller only sees related memories it is permitted to read.
123
+ */
124
+ export declare function executeGetRelated(input: {
125
+ id: number;
126
+ source?: DefenceSource;
127
+ }): {
128
+ success: boolean;
129
+ related?: ReturnType<typeof getRelatedMemories>;
130
+ error?: string;
131
+ };
@@ -4,11 +4,12 @@
4
4
  * Search and retrieve memories using semantic search and filters.
5
5
  */
6
6
  import { z } from 'zod';
7
- import { searchMemories, recallWithEmbeddings, accessMemory, getRecentMemories, getHighPriorityMemories } from '../memory/store.js';
7
+ import { searchMemories, recallWithEmbeddings, accessMemory, getRecentMemories, getHighPriorityMemories, getRelatedMemories } from '../memory/store.js';
8
8
  import { formatTimeSinceAccess } from '../memory/decay.js';
9
9
  import { MemoryNotFoundError, formatErrorForMcp } from '../errors.js';
10
10
  import { resolveProject } from '../context/project-context.js';
11
11
  import { memoryFreshnessWarning } from '../memory/staleness.js';
12
+ import { guardReadMemories, guardReadMemory } from '../defence/trust/read-guard.js';
12
13
  const sourceSchema = z.object({
13
14
  type: z.enum(['user', 'cli', 'hook', 'email', 'web', 'agent', 'file', 'api', 'tool_response']),
14
15
  identifier: z.string(),
@@ -99,6 +100,11 @@ export async function executeRecall(input) {
99
100
  }
100
101
  break;
101
102
  }
103
+ // Read ACL: drop quarantined + rows this caller may not read (RESTRICTED
104
+ // isolation / own-only for low trust). Belt-and-braces — the recent/important
105
+ // store helpers + search already apply access control, but this keeps every
106
+ // recall mode uniform and never reinforces a row the caller can't see.
107
+ memories = guardReadMemories(memories, source);
102
108
  // Access each memory to reinforce it
103
109
  memories = memories.map(m => accessMemory(m.id, undefined, source) || m);
104
110
  // v4.0.0: Append staleness warnings to old memories
@@ -180,14 +186,36 @@ export const getMemorySchema = z.object({
180
186
  export function executeGetMemory(input) {
181
187
  try {
182
188
  const memory = accessMemory(input.id, undefined, input.source);
183
- if (!memory) {
189
+ // Read ACL: a caller that may not read this memory gets a not-found, never
190
+ // the content (don't reveal existence of RESTRICTED / other-source rows).
191
+ const allowed = guardReadMemory(memory, input.source);
192
+ if (!allowed) {
184
193
  const error = new MemoryNotFoundError(input.id);
185
194
  return {
186
195
  success: false,
187
196
  error: error.toUserMessage(),
188
197
  };
189
198
  }
190
- return { success: true, memory };
199
+ return { success: true, memory: allowed };
200
+ }
201
+ catch (error) {
202
+ return {
203
+ success: false,
204
+ error: formatErrorForMcp(error),
205
+ };
206
+ }
207
+ }
208
+ /**
209
+ * Execute the get_related tool — related memories, ACL-filtered.
210
+ *
211
+ * Related links can cross trust/sensitivity boundaries, so the same read ACL
212
+ * applies: a caller only sees related memories it is permitted to read.
213
+ */
214
+ export function executeGetRelated(input) {
215
+ try {
216
+ const related = getRelatedMemories(input.id);
217
+ const allowedIds = new Set(guardReadMemories(related.map((r) => r.memory), input.source).map((m) => m.id));
218
+ return { success: true, related: related.filter((r) => allowedIds.has(r.memory.id)) };
191
219
  }
192
220
  catch (error) {
193
221
  return {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shieldcortex",
3
- "version": "4.36.0",
3
+ "version": "4.38.0",
4
4
  "description": "Trustworthy memory and security for AI agents. Recall debugging, review queue, OpenClaw session capture, and memory poisoning defence for Claude Code, Codex, OpenClaw, LangChain, and MCP agents.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",