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.
- package/dashboard/.next/standalone/dashboard/.next/BUILD_ID +1 -1
- package/dashboard/.next/standalone/dashboard/.next/build-manifest.json +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory/replay/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory/replay.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/pages/404.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/pages/500.html +2 -2
- package/dist/cloud/cli.js +26 -1
- package/dist/defence/firewall/markdown-image-detector.d.ts +15 -0
- package/dist/defence/firewall/markdown-image-detector.js +30 -0
- package/dist/defence/tool-response-enforce.d.ts +57 -0
- package/dist/defence/tool-response-enforce.js +107 -0
- package/dist/defence/tool-response-scanner.d.ts +6 -3
- package/dist/defence/tool-response-scanner.js +56 -6
- package/dist/defence/trust/read-guard.d.ts +45 -0
- package/dist/defence/trust/read-guard.js +76 -0
- package/dist/defence/types.d.ts +9 -0
- package/dist/memory/consolidate.d.ts +2 -1
- package/dist/memory/consolidate.js +7 -2
- package/dist/server.d.ts +6 -0
- package/dist/server.js +77 -11
- package/dist/tools/context.d.ts +2 -0
- package/dist/tools/context.js +15 -4
- package/dist/tools/recall.d.ts +15 -0
- package/dist/tools/recall.js +31 -3
- package/package.json +1 -1
- /package/dashboard/.next/standalone/dashboard/.next/static/{_JsmCyMaqewdhBNXZu1me → PR51g0pS7Wp0zLzu2q6mQ}/_buildManifest.js +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{_JsmCyMaqewdhBNXZu1me → PR51g0pS7Wp0zLzu2q6mQ}/_clientMiddlewareManifest.json +0 -0
- /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,
|
|
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
|
-
//
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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: [{
|
package/dist/tools/context.d.ts
CHANGED
|
@@ -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;
|
package/dist/tools/context.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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,
|
package/dist/tools/recall.d.ts
CHANGED
|
@@ -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
|
+
};
|
package/dist/tools/recall.js
CHANGED
|
@@ -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
|
-
|
|
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.
|
|
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",
|
|
File without changes
|
|
File without changes
|