shieldcortex 4.37.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/defence/trust/read-guard.d.ts +45 -0
- package/dist/defence/trust/read-guard.js +76 -0
- package/dist/memory/consolidate.d.ts +2 -1
- package/dist/memory/consolidate.js +7 -2
- package/dist/server.js +25 -9
- 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/{Xdk3QuQEKommHIbMSem56 → PR51g0pS7Wp0zLzu2q6mQ}/_buildManifest.js +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{Xdk3QuQEKommHIbMSem56 → PR51g0pS7Wp0zLzu2q6mQ}/_clientMiddlewareManifest.json +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{Xdk3QuQEKommHIbMSem56 → PR51g0pS7Wp0zLzu2q6mQ}/_ssgManifest.js +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
2
|
-
@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/d878b929b21636c4.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[57043,[\"/_next/static/chunks/102f894cc892994d.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"default\"]\n3:I[27657,[\"/_next/static/chunks/102f894cc892994d.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"default\"]\n4:I[56978,[\"/_next/static/chunks/102f894cc892994d.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[56978,[\"/_next/static/chunks/102f894cc892994d.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"ViewportBoundary\"]\n9:I[56978,[\"/_next/static/chunks/102f894cc892994d.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"MetadataBoundary\"]\nb:I[30687,[\"/_next/static/chunks/102f894cc892994d.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"
|
|
1
|
+
<!DOCTYPE html><!--PR51g0pS7Wp0zLzu2q6mQ--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/d878b929b21636c4.js"/><script src="/_next/static/chunks/f70f563804550a9c.js" async=""></script><script src="/_next/static/chunks/43d761df92da7cb6.js" async=""></script><script src="/_next/static/chunks/e281719dbabcca1d.js" async=""></script><script src="/_next/static/chunks/9e56d1f8f4d7adcb.js" async=""></script><script src="/_next/static/chunks/turbopack-768a6a8b9db952e0.js" async=""></script><script src="/_next/static/chunks/102f894cc892994d.js" async=""></script><script src="/_next/static/chunks/417032eeb2cd875f.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: Internal Server Error.</title><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
|
|
2
|
+
@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/d878b929b21636c4.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[57043,[\"/_next/static/chunks/102f894cc892994d.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"default\"]\n3:I[27657,[\"/_next/static/chunks/102f894cc892994d.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"default\"]\n4:I[56978,[\"/_next/static/chunks/102f894cc892994d.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[56978,[\"/_next/static/chunks/102f894cc892994d.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"ViewportBoundary\"]\n9:I[56978,[\"/_next/static/chunks/102f894cc892994d.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"MetadataBoundary\"]\nb:I[30687,[\"/_next/static/chunks/102f894cc892994d.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"PR51g0pS7Wp0zLzu2q6mQ\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/102f894cc892994d.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/417032eeb2cd875f.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\na:[]\n"])</script></body></html>
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP read-path access guard.
|
|
3
|
+
*
|
|
4
|
+
* The `.mjs` prompt/session hooks already filter recalled rows before injecting
|
|
5
|
+
* them into the prompt. The MCP read TOOLS (`get_memory`, `get_related`,
|
|
6
|
+
* `get_context`, and `recall`) returned rows without applying the access-control
|
|
7
|
+
* engine consistently — so a low-trust / compromised caller could pull RESTRICTED
|
|
8
|
+
* or other-source memories verbatim. This guard closes that path by applying the
|
|
9
|
+
* SAME `checkAccess('read')` tiers the search path uses:
|
|
10
|
+
*
|
|
11
|
+
* - quarantined rows (trustScore === 0) are ALWAYS dropped (pending review);
|
|
12
|
+
* - when a caller source is present, rows the caller cannot read are dropped
|
|
13
|
+
* (RESTRICTED isolation below trust 0.7, own-only below 0.5);
|
|
14
|
+
* - owner / high-trust callers pass through in full (chosen policy — no content
|
|
15
|
+
* redaction on the MCP path; that is the prompt-hook surface's job).
|
|
16
|
+
*
|
|
17
|
+
* No source → only quarantined rows are dropped (callers that don't resolve an
|
|
18
|
+
* identity get no source-relative ACL). In practice the MCP server always
|
|
19
|
+
* resolves a source via resolveToolSource before calling the read tools.
|
|
20
|
+
*/
|
|
21
|
+
import type { DefenceSource } from '../types.js';
|
|
22
|
+
import type { Memory, ContextSummary } from '../../memory/types.js';
|
|
23
|
+
/** Filter recalled memories (camelCase Memory) to those the caller may read. */
|
|
24
|
+
export declare function guardReadMemories(memories: Memory[], source: DefenceSource | undefined): Memory[];
|
|
25
|
+
/**
|
|
26
|
+
* Filter raw snake_case DB rows (e.g. the export path's `SELECT *`) to those the
|
|
27
|
+
* caller may read. Same policy as guardReadMemories, different field casing.
|
|
28
|
+
*/
|
|
29
|
+
export declare function guardReadRows<T extends Record<string, unknown>>(rows: T[], source: DefenceSource | undefined): T[];
|
|
30
|
+
/**
|
|
31
|
+
* Sensitivity-only guard for SHARED-CONTEXT bootstrap surfaces (get_context,
|
|
32
|
+
* start_session, the memory:// resources, restore_context, detect_contradictions).
|
|
33
|
+
*
|
|
34
|
+
* These surfaces feed the prompt / a broadly-shared project summary, so they must
|
|
35
|
+
* NEVER surface RESTRICTED or quarantined rows to ANYONE (matching the .mjs
|
|
36
|
+
* prompt hooks) — but, unlike the per-caller fetch tools, they do NOT apply the
|
|
37
|
+
* source-relative own-only tier, so a low-trust subagent still receives the
|
|
38
|
+
* INTERNAL project context it legitimately needs. Credential isolation without
|
|
39
|
+
* the availability blackout.
|
|
40
|
+
*/
|
|
41
|
+
export declare function guardReadBySensitivity(memories: Memory[]): Memory[];
|
|
42
|
+
/** Apply the sensitivity guard to every memory list in a context summary. */
|
|
43
|
+
export declare function guardContextSummary(summary: ContextSummary): ContextSummary;
|
|
44
|
+
/** Guard a single memory; returns null if the caller may not read it. */
|
|
45
|
+
export declare function guardReadMemory(memory: Memory | null | undefined, source: DefenceSource | undefined): Memory | null;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP read-path access guard.
|
|
3
|
+
*
|
|
4
|
+
* The `.mjs` prompt/session hooks already filter recalled rows before injecting
|
|
5
|
+
* them into the prompt. The MCP read TOOLS (`get_memory`, `get_related`,
|
|
6
|
+
* `get_context`, and `recall`) returned rows without applying the access-control
|
|
7
|
+
* engine consistently — so a low-trust / compromised caller could pull RESTRICTED
|
|
8
|
+
* or other-source memories verbatim. This guard closes that path by applying the
|
|
9
|
+
* SAME `checkAccess('read')` tiers the search path uses:
|
|
10
|
+
*
|
|
11
|
+
* - quarantined rows (trustScore === 0) are ALWAYS dropped (pending review);
|
|
12
|
+
* - when a caller source is present, rows the caller cannot read are dropped
|
|
13
|
+
* (RESTRICTED isolation below trust 0.7, own-only below 0.5);
|
|
14
|
+
* - owner / high-trust callers pass through in full (chosen policy — no content
|
|
15
|
+
* redaction on the MCP path; that is the prompt-hook surface's job).
|
|
16
|
+
*
|
|
17
|
+
* No source → only quarantined rows are dropped (callers that don't resolve an
|
|
18
|
+
* identity get no source-relative ACL). In practice the MCP server always
|
|
19
|
+
* resolves a source via resolveToolSource before calling the read tools.
|
|
20
|
+
*/
|
|
21
|
+
import { checkAccess } from './access-control.js';
|
|
22
|
+
/**
|
|
23
|
+
* Core read decision, shared by the camelCase (Memory) and snake_case (raw row)
|
|
24
|
+
* guards so the policy lives in exactly one place.
|
|
25
|
+
*/
|
|
26
|
+
function callerCanRead(id, storedSource, sensitivityLevel, trustScore, source) {
|
|
27
|
+
// Quarantined memories are never surfaced through a normal read.
|
|
28
|
+
if (trustScore === 0)
|
|
29
|
+
return false;
|
|
30
|
+
// Without a caller identity we cannot make a source-relative decision;
|
|
31
|
+
// surface everything else (the server resolves a source in practice).
|
|
32
|
+
if (!source)
|
|
33
|
+
return true;
|
|
34
|
+
return checkAccess({ id, source: storedSource, sensitivity_level: sensitivityLevel }, source, 'read').canRead;
|
|
35
|
+
}
|
|
36
|
+
/** Filter recalled memories (camelCase Memory) to those the caller may read. */
|
|
37
|
+
export function guardReadMemories(memories, source) {
|
|
38
|
+
return memories.filter((m) => callerCanRead(m.id, m.source, m.sensitivityLevel, m.trustScore, source));
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Filter raw snake_case DB rows (e.g. the export path's `SELECT *`) to those the
|
|
42
|
+
* caller may read. Same policy as guardReadMemories, different field casing.
|
|
43
|
+
*/
|
|
44
|
+
export function guardReadRows(rows, source) {
|
|
45
|
+
return rows.filter((r) => callerCanRead(Number(r.id), r.source ?? null, r.sensitivity_level ?? null, Number(r.trust_score ?? 1), source));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Sensitivity-only guard for SHARED-CONTEXT bootstrap surfaces (get_context,
|
|
49
|
+
* start_session, the memory:// resources, restore_context, detect_contradictions).
|
|
50
|
+
*
|
|
51
|
+
* These surfaces feed the prompt / a broadly-shared project summary, so they must
|
|
52
|
+
* NEVER surface RESTRICTED or quarantined rows to ANYONE (matching the .mjs
|
|
53
|
+
* prompt hooks) — but, unlike the per-caller fetch tools, they do NOT apply the
|
|
54
|
+
* source-relative own-only tier, so a low-trust subagent still receives the
|
|
55
|
+
* INTERNAL project context it legitimately needs. Credential isolation without
|
|
56
|
+
* the availability blackout.
|
|
57
|
+
*/
|
|
58
|
+
export function guardReadBySensitivity(memories) {
|
|
59
|
+
return memories.filter((m) => m.trustScore !== 0 && m.sensitivityLevel !== 'RESTRICTED');
|
|
60
|
+
}
|
|
61
|
+
/** Apply the sensitivity guard to every memory list in a context summary. */
|
|
62
|
+
export function guardContextSummary(summary) {
|
|
63
|
+
return {
|
|
64
|
+
...summary,
|
|
65
|
+
recentMemories: guardReadBySensitivity(summary.recentMemories),
|
|
66
|
+
keyDecisions: guardReadBySensitivity(summary.keyDecisions),
|
|
67
|
+
activePatterns: guardReadBySensitivity(summary.activePatterns),
|
|
68
|
+
pendingItems: guardReadBySensitivity(summary.pendingItems),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/** Guard a single memory; returns null if the caller may not read it. */
|
|
72
|
+
export function guardReadMemory(memory, source) {
|
|
73
|
+
if (!memory)
|
|
74
|
+
return null;
|
|
75
|
+
return guardReadMemories([memory], source)[0] ?? null;
|
|
76
|
+
}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* - Cleans up decayed/irrelevant memories
|
|
8
8
|
* - Merges similar memories to reduce redundancy
|
|
9
9
|
*/
|
|
10
|
+
import type { DefenceSource } from '../defence/types.js';
|
|
10
11
|
import { Memory, MemoryConfig, ConsolidationResult, ContextSummary } from './types.js';
|
|
11
12
|
/**
|
|
12
13
|
* Run full consolidation process
|
|
@@ -147,7 +148,7 @@ export declare function getSuggestedContext(currentContext: string, project?: st
|
|
|
147
148
|
/**
|
|
148
149
|
* Export memories as JSON (for backup/transfer)
|
|
149
150
|
*/
|
|
150
|
-
export declare function exportMemories(project?: string): string;
|
|
151
|
+
export declare function exportMemories(project?: string, source?: DefenceSource): string;
|
|
151
152
|
/**
|
|
152
153
|
* Import memories from JSON
|
|
153
154
|
*/
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { getDatabase, withTransaction } from '../database/init.js';
|
|
11
11
|
import { expireQuarantineItems } from '../defence/quarantine/auto-expire.js';
|
|
12
|
+
import { guardReadRows } from '../defence/trust/read-guard.js';
|
|
12
13
|
import { DEFAULT_CONFIG, } from './types.js';
|
|
13
14
|
import { getMemoriesByType, getRecentMemories, promoteMemory, deleteMemory, searchMemories, getMemoryStats, updateDecayScores, addMemory, rowToMemory, } from './store.js';
|
|
14
15
|
import { processDecay, } from './decay.js';
|
|
@@ -794,7 +795,7 @@ export async function getSuggestedContext(currentContext, project, limit = 5) {
|
|
|
794
795
|
/**
|
|
795
796
|
* Export memories as JSON (for backup/transfer)
|
|
796
797
|
*/
|
|
797
|
-
export function exportMemories(project) {
|
|
798
|
+
export function exportMemories(project, source) {
|
|
798
799
|
const db = getDatabase();
|
|
799
800
|
let sql = 'SELECT * FROM memories';
|
|
800
801
|
const params = [];
|
|
@@ -804,7 +805,11 @@ export function exportMemories(project) {
|
|
|
804
805
|
}
|
|
805
806
|
sql += ' ORDER BY created_at ASC';
|
|
806
807
|
const rows = db.prepare(sql).all(...params);
|
|
807
|
-
|
|
808
|
+
// Read ACL: a bulk export is the sharpest exfil vector, so apply the same
|
|
809
|
+
// read guard as the per-tool paths — drop quarantined + rows the caller may
|
|
810
|
+
// not read (RESTRICTED isolation / own-only for low trust). With no caller
|
|
811
|
+
// source, only quarantined rows are dropped.
|
|
812
|
+
return JSON.stringify(guardReadRows(rows, source), null, 2);
|
|
808
813
|
}
|
|
809
814
|
/**
|
|
810
815
|
* Import memories from JSON
|
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';
|
|
@@ -25,6 +25,7 @@ import { scanExistingMemories } from './defence/scanner/index.js';
|
|
|
25
25
|
import { resolveToolSource as resolveToolSourceImpl } from './defence/trust/resolve-tool-source.js';
|
|
26
26
|
import { scanToolResponse, shouldScanToolResponse } from './defence/tool-response-scanner.js';
|
|
27
27
|
import { UNTRUSTED_TOOL_TAG } from './defence/tool-response-enforce.js';
|
|
28
|
+
import { guardReadBySensitivity, guardContextSummary } from './defence/trust/read-guard.js';
|
|
28
29
|
import { getToolResponseScanConfig } from './cloud/config.js';
|
|
29
30
|
import { checkKillPhrase } from './defence/iron-dome/index.js';
|
|
30
31
|
import { isKillSwitchActive, getKillSwitchMeta, assertOperationAllowed, activateKillSwitch, deactivateKillSwitch, KillSwitchError, } from './api/control.js';
|
|
@@ -410,8 +411,10 @@ Returns: architecture decisions, patterns, pending items, recent activity.`, {
|
|
|
410
411
|
// Export memories
|
|
411
412
|
server.tool('export_memories', 'Export memories as JSON for backup.', {
|
|
412
413
|
project: z.string().optional().describe('Project scope. Auto-detected if not provided. Use "*" for all projects.'),
|
|
414
|
+
source: sourceParam,
|
|
413
415
|
}, { title: 'Export Memories', readOnlyHint: true, destructiveHint: false, idempotentHint: true }, withKillSwitchGuard('memory_read', withResponseScan('export_memories', async (args) => {
|
|
414
|
-
const
|
|
416
|
+
const source = resolveToolSource(args.source, 'export_memories');
|
|
417
|
+
const result = executeExport({ ...args, source });
|
|
415
418
|
return {
|
|
416
419
|
content: [{
|
|
417
420
|
type: 'text',
|
|
@@ -456,8 +459,14 @@ Returns: architecture decisions, patterns, pending items, recent activity.`, {
|
|
|
456
459
|
// Get Related Memories
|
|
457
460
|
server.tool('get_related', 'Get memories related to a specific memory. Shows connections and relationships.', {
|
|
458
461
|
id: z.number().describe('Memory ID to find relationships for'),
|
|
462
|
+
source: sourceParam,
|
|
459
463
|
}, { title: 'Get Related Memories', readOnlyHint: true, destructiveHint: false, idempotentHint: true }, withKillSwitchGuard('memory_read', withResponseScan('get_related', async (args) => {
|
|
460
|
-
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;
|
|
461
470
|
if (related.length === 0) {
|
|
462
471
|
return { content: [{ type: 'text', text: 'No related memories found.' }] };
|
|
463
472
|
}
|
|
@@ -536,7 +545,10 @@ but you can use this tool to check for new contradictions at any time.`, {
|
|
|
536
545
|
category: args.category,
|
|
537
546
|
minScore: args.minScore,
|
|
538
547
|
limit: args.limit,
|
|
539
|
-
})
|
|
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);
|
|
540
552
|
if (contradictions.length === 0) {
|
|
541
553
|
return { content: [{ type: 'text', text: 'No contradictions detected.' }] };
|
|
542
554
|
}
|
|
@@ -942,7 +954,8 @@ Runs injection detection (40+ patterns) and credential leak scanning (25+ provid
|
|
|
942
954
|
if (isKillSwitchActive()) {
|
|
943
955
|
return { contents: [{ uri: 'memory://context', mimeType: 'text/plain', text: '[KILL SWITCH ACTIVE] Memory access blocked.' }] };
|
|
944
956
|
}
|
|
945
|
-
|
|
957
|
+
// Shared-context resource: strip RESTRICTED + quarantined (sensitivity guard).
|
|
958
|
+
const summary = guardContextSummary(await generateContextSummary());
|
|
946
959
|
return {
|
|
947
960
|
contents: [{
|
|
948
961
|
uri: 'memory://context',
|
|
@@ -956,7 +969,8 @@ Runs injection detection (40+ patterns) and credential leak scanning (25+ provid
|
|
|
956
969
|
if (isKillSwitchActive()) {
|
|
957
970
|
return { contents: [{ uri: 'memory://important', mimeType: 'text/plain', text: '[KILL SWITCH ACTIVE] Memory access blocked.' }] };
|
|
958
971
|
}
|
|
959
|
-
|
|
972
|
+
// Shared-context resource: strip RESTRICTED + quarantined before exposing content.
|
|
973
|
+
const memories = guardReadBySensitivity(getHighPriorityMemories(20));
|
|
960
974
|
const text = memories.map(m => `## ${m.title}\n${m.content}\n*${m.category} | ${(m.salience * 100).toFixed(0)}% salience*\n`).join('\n');
|
|
961
975
|
return {
|
|
962
976
|
contents: [{
|
|
@@ -971,7 +985,8 @@ Runs injection detection (40+ patterns) and credential leak scanning (25+ provid
|
|
|
971
985
|
if (isKillSwitchActive()) {
|
|
972
986
|
return { contents: [{ uri: 'memory://recent', mimeType: 'text/plain', text: '[KILL SWITCH ACTIVE] Memory access blocked.' }] };
|
|
973
987
|
}
|
|
974
|
-
|
|
988
|
+
// Shared-context resource: strip RESTRICTED + quarantined before exposing content.
|
|
989
|
+
const memories = guardReadBySensitivity(getRecentMemories(15));
|
|
975
990
|
const text = memories.map(m => `- **${m.title}** (${m.category}): ${m.content.slice(0, 100)}...`).join('\n');
|
|
976
991
|
return {
|
|
977
992
|
contents: [{
|
|
@@ -991,7 +1006,8 @@ Runs injection detection (40+ patterns) and credential leak scanning (25+ provid
|
|
|
991
1006
|
messages: [{ role: 'user', content: { type: 'text', text: '[KILL SWITCH ACTIVE] Context restoration blocked. Use iron_dome_resume to resume.' } }],
|
|
992
1007
|
};
|
|
993
1008
|
}
|
|
994
|
-
|
|
1009
|
+
// Shared-context prompt: strip RESTRICTED + quarantined (sensitivity guard).
|
|
1010
|
+
const summary = guardContextSummary(await generateContextSummary());
|
|
995
1011
|
const context = formatContextSummary(summary);
|
|
996
1012
|
return {
|
|
997
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
|