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