shieldcortex 4.21.1 → 4.22.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 +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/dist/cli/doctor.d.ts +17 -0
- package/dist/cli/doctor.js +118 -40
- package/dist/defence/firewall/instruction-detector.js +11 -0
- package/dist/defence/iron-dome/injection-scanner.d.ts +1 -1
- package/dist/defence/iron-dome/injection-scanner.js +7 -0
- package/package.json +1 -1
- package/plugins/openclaw/dist/openclaw.plugin.json +1 -1
- package/scripts/lib/extract-memorable-segments.mjs +17 -2
- package/scripts/lib/truncate.mjs +41 -0
- package/scripts/prompt-recall-hook.mjs +2 -3
- package/scripts/session-start-hook.mjs +2 -3
- /package/dashboard/.next/standalone/dashboard/.next/static/{dti3rfTls2KoJI3WNUFPO → 5nUUmABg3RHg14H9hp3nz}/_buildManifest.js +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{dti3rfTls2KoJI3WNUFPO → 5nUUmABg3RHg14H9hp3nz}/_clientMiddlewareManifest.json +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{dti3rfTls2KoJI3WNUFPO → 5nUUmABg3RHg14H9hp3nz}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
1
|
+
<!DOCTYPE html><!--5nUUmABg3RHg14H9hp3nz--><html lang="en" class="dark" data-theme="terminal"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/a7d5d0791c8c6223.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/chunks/3e48f207fc7388ce.css" data-precedence="next"/><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/4ddb24d8ce3b8617.js" async=""></script><script src="/_next/static/chunks/417032eeb2cd875f.js" async=""></script><script src="/_next/static/chunks/d334b69bff7779be.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>ShieldCortex</title><meta name="description" content="AI Memory Security Dashboard — Defence pipeline, audit logs, quarantine review"/><script>
|
|
2
2
|
try {
|
|
3
3
|
var t = localStorage.getItem('sc-theme');
|
|
4
4
|
if (t !== 'glass' && t !== 'terminal') t = 'terminal';
|
|
@@ -6,4 +6,4 @@ try {
|
|
|
6
6
|
} catch (e) {
|
|
7
7
|
document.documentElement.dataset.theme = 'terminal';
|
|
8
8
|
}
|
|
9
|
-
</script><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased bg-slate-950"><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>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@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:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</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[36111,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"Providers\"]\n3:I[57043,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"default\"]\n4:I[10445,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\",\"/_next/static/chunks/d334b69bff7779be.js\"],\"default\"]\n5:I[27657,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"default\"]\n6:I[56978,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\n9:I[56978,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"ViewportBoundary\"]\nb:I[56978,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"MetadataBoundary\"]\nd:I[30687,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"default\"]\n:HL[\"/_next/static/chunks/a7d5d0791c8c6223.css\",\"style\"]\n:HL[\"/_next/static/chunks/3e48f207fc7388ce.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"
|
|
9
|
+
</script><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased bg-slate-950"><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>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@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:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</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[36111,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"Providers\"]\n3:I[57043,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"default\"]\n4:I[10445,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\",\"/_next/static/chunks/d334b69bff7779be.js\"],\"default\"]\n5:I[27657,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"default\"]\n6:I[56978,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\n9:I[56978,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"ViewportBoundary\"]\nb:I[56978,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"MetadataBoundary\"]\nd:I[30687,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"default\"]\n:HL[\"/_next/static/chunks/a7d5d0791c8c6223.css\",\"style\"]\n:HL[\"/_next/static/chunks/3e48f207fc7388ce.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"5nUUmABg3RHg14H9hp3nz\",\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/a7d5d0791c8c6223.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/3e48f207fc7388ce.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/417032eeb2cd875f.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark\",\"data-theme\":\"terminal\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\ntry {\\n var t = localStorage.getItem('sc-theme');\\n if (t !== 'glass' \u0026\u0026 t !== 'terminal') t = 'terminal';\\n document.documentElement.dataset.theme = t;\\n} catch (e) {\\n document.documentElement.dataset.theme = 'terminal';\\n}\\n\"}}]}],[\"$\",\"body\",null,{\"className\":\"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased bg-slate-950\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$4\",\"errorStyles\":[],\"errorScripts\":[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/d334b69bff7779be.js\",\"async\":true}]],\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"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,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@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\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@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\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L9\",null,{\"children\":\"$La\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lc\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$d\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"8:null\nc:[[\"$\",\"title\",\"0\",{\"children\":\"ShieldCortex\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"AI Memory Security Dashboard — Defence pipeline, audit logs, quarantine review\"}]]\n"])</script></body></html>
|
|
@@ -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><!--5nUUmABg3RHg14H9hp3nz--><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\":\"5nUUmABg3RHg14H9hp3nz\",\"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>
|
package/dist/cli/doctor.d.ts
CHANGED
|
@@ -83,4 +83,21 @@ export declare function checkLockFile(scDir?: string): Promise<CheckResult>;
|
|
|
83
83
|
* `~/.openclaw/npm/node_modules`.
|
|
84
84
|
*/
|
|
85
85
|
export declare function checkOpenClawPluginPackage(npmModulesDir?: string): Promise<CheckResult>;
|
|
86
|
+
/**
|
|
87
|
+
* Defence canary — synthetic probe that proves the defence pipeline is alive
|
|
88
|
+
* and catching things. Without this check, the pipeline runs silently and
|
|
89
|
+
* "no warnings" is indistinguishable from "no protection." Field feedback
|
|
90
|
+
* (edith, jarvis, 2026-05-24) called the layer "unprovable from inside the
|
|
91
|
+
* session." This makes it provable.
|
|
92
|
+
*
|
|
93
|
+
* Runs a synthetic payload through `runDefencePipeline()` and asserts the
|
|
94
|
+
* firewall blocked it AND the specific `defence_canary_test` pattern fired.
|
|
95
|
+
* Tagged `source.identifier='cli:doctor:canary'` so audit-log consumers can
|
|
96
|
+
* exclude probe runs from real threat counts.
|
|
97
|
+
*
|
|
98
|
+
* Safe by construction: the marker `__SHIELDCORTEX_CANARY_PROBE_v1__` is
|
|
99
|
+
* intentionally non-natural (double-underscore + internal version tag) and
|
|
100
|
+
* can never collide with legitimate content.
|
|
101
|
+
*/
|
|
102
|
+
export declare function checkDefenceCanary(): Promise<CheckResult>;
|
|
86
103
|
export declare function runDoctor(): Promise<void>;
|
package/dist/cli/doctor.js
CHANGED
|
@@ -772,69 +772,146 @@ export async function checkOpenClawPluginPackage(npmModulesDir = path.join(os.ho
|
|
|
772
772
|
};
|
|
773
773
|
}
|
|
774
774
|
}
|
|
775
|
-
//
|
|
776
|
-
//
|
|
777
|
-
//
|
|
778
|
-
//
|
|
779
|
-
//
|
|
775
|
+
// Visibility-first model (v4.21.2+): OpenClaw discovers bare packages via
|
|
776
|
+
// TWO independent vectors — `openclaw.extensions` in package.json AND a
|
|
777
|
+
// root `openclaw.plugin.json`. If EITHER is present, OpenClaw registers
|
|
778
|
+
// the bare copy under `pluginId: shieldcortex-realtime` — same id as the
|
|
779
|
+
// dedicated `@drakon-systems/shieldcortex-realtime` plugin — and emits
|
|
780
|
+
// `duplicate plugin id detected; global plugin will be overridden by
|
|
781
|
+
// global plugin` on every session. v4.21.1 closed the second vector by
|
|
782
|
+
// dropping the root manifest from the bare tarball; v4.20.0 closed the
|
|
783
|
+
// first by dropping `openclaw.extensions`. A v4.21.1+ bare copy has
|
|
784
|
+
// neither vector — it's fully invisible to discovery.
|
|
780
785
|
//
|
|
781
|
-
// INFO when the bare
|
|
782
|
-
//
|
|
783
|
-
//
|
|
786
|
+
// INFO when the bare is invisible (no discovery vectors). WARN when any
|
|
787
|
+
// vector is present and OpenClaw will register a duplicate — version
|
|
788
|
+
// alignment doesn't help (both copies share the pluginId regardless).
|
|
784
789
|
const bareVersion = readPkgVersion(barePkgJson);
|
|
785
790
|
const realtimePkgJson = path.join(npmModulesDir, '@drakon-systems', 'shieldcortex-realtime', 'package.json');
|
|
786
791
|
const realtimeVersion = readPkgVersion(realtimePkgJson);
|
|
787
792
|
const realtimePeerRange = readShieldcortexPeerRange(realtimePkgJson);
|
|
788
793
|
const rootManifestPresent = fs.existsSync(path.join(barePkgDir, 'openclaw.plugin.json'));
|
|
794
|
+
const bareDiscoverable = extEntry !== null || rootManifestPresent;
|
|
789
795
|
const inRange = bareVersion !== null &&
|
|
790
796
|
realtimePeerRange !== null &&
|
|
791
797
|
semver.satisfies(bareVersion, realtimePeerRange);
|
|
792
|
-
if (
|
|
798
|
+
if (!bareDiscoverable) {
|
|
799
|
+
// Post-v4.21.1 architecture: bare exists but has zero discovery vectors.
|
|
800
|
+
// OpenClaw cannot see it; the duplicate-plugin-id warning cannot fire.
|
|
801
|
+
if (realtimeVersion !== null) {
|
|
802
|
+
const rangeNote = realtimePeerRange ? ` (range ${realtimePeerRange})` : '';
|
|
803
|
+
const peerNote = inRange
|
|
804
|
+
? ''
|
|
805
|
+
: ` — note: bare version does not satisfy realtime's peer range, but ` +
|
|
806
|
+
`realtime imports resolve to this copy so behaviour may differ from intent`;
|
|
807
|
+
return {
|
|
808
|
+
label,
|
|
809
|
+
status: 'info',
|
|
810
|
+
message: `bare \`shieldcortex@${bareVersion ?? '?'}\` invisible to OpenClaw discovery ` +
|
|
811
|
+
`(no \`openclaw.extensions\` field, no root \`openclaw.plugin.json\`); ` +
|
|
812
|
+
`peer of @drakon-systems/shieldcortex-realtime@${realtimeVersion}${rangeNote}` +
|
|
813
|
+
peerNote,
|
|
814
|
+
};
|
|
815
|
+
}
|
|
793
816
|
return {
|
|
794
817
|
label,
|
|
795
818
|
status: 'info',
|
|
796
|
-
message: `bare \`shieldcortex@${bareVersion}\`
|
|
797
|
-
|
|
798
|
-
`
|
|
819
|
+
message: `bare \`shieldcortex@${bareVersion ?? '?'}\` invisible to OpenClaw discovery ` +
|
|
820
|
+
`(no \`openclaw.extensions\`, no root manifest); realtime sibling not present — ` +
|
|
821
|
+
`harmless leftover, safe to remove`,
|
|
799
822
|
};
|
|
800
823
|
}
|
|
801
|
-
//
|
|
802
|
-
//
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
824
|
+
// bareDiscoverable === true: OpenClaw will pick this up and collide with
|
|
825
|
+
// the dedicated realtime plugin. Always WARN; explain which vector(s).
|
|
826
|
+
const vectors = [];
|
|
827
|
+
if (extEntry !== null)
|
|
828
|
+
vectors.push('`openclaw.extensions` declared in package.json');
|
|
829
|
+
if (rootManifestPresent)
|
|
830
|
+
vectors.push('root `openclaw.plugin.json` present');
|
|
831
|
+
const vectorList = vectors.join(' and ');
|
|
832
|
+
if (realtimeVersion !== null) {
|
|
833
|
+
const rangeNote = realtimePeerRange
|
|
834
|
+
? `; realtime peer range ${realtimePeerRange}` +
|
|
835
|
+
(inRange ? ' satisfied' : ' NOT satisfied')
|
|
836
|
+
: '';
|
|
810
837
|
return {
|
|
811
838
|
label,
|
|
812
|
-
status: '
|
|
813
|
-
message: `bare \`shieldcortex@${bareVersion}\` is
|
|
814
|
-
|
|
839
|
+
status: 'warn',
|
|
840
|
+
message: `bare \`shieldcortex@${bareVersion ?? '?'}\` is discoverable by OpenClaw ` +
|
|
841
|
+
`(${vectorList}) — will collide with ` +
|
|
842
|
+
`@drakon-systems/shieldcortex-realtime@${realtimeVersion} on every session and ` +
|
|
843
|
+
`emit \`duplicate plugin id detected\`${rangeNote}`,
|
|
844
|
+
fix: `Bump the bare copy to v4.21.1 or later — v4.21.1+ ships without any OpenClaw ` +
|
|
845
|
+
`discovery vectors: \`cd ~/.openclaw/npm && npm install shieldcortex@latest && shieldcortex doctor\``,
|
|
815
846
|
};
|
|
816
847
|
}
|
|
817
|
-
|
|
818
|
-
realtimeVersion !== null &&
|
|
819
|
-
realtimePeerRange !== null &&
|
|
820
|
-
!inRange;
|
|
848
|
+
// Bare discoverable, no realtime sibling — the original "misplaced bare" case.
|
|
821
849
|
return {
|
|
822
850
|
label,
|
|
823
851
|
status: 'warn',
|
|
824
|
-
message:
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
'and OpenClaw will auto-discover it; the supported package is @drakon-systems/shieldcortex-realtime',
|
|
830
|
-
fix: outOfRange
|
|
831
|
-
? `Update the realtime plugin to refresh the peer dep: ` +
|
|
832
|
-
`\`openclaw plugins update @drakon-systems/shieldcortex-realtime\` ` +
|
|
833
|
-
`(rm of the bare copy alone does not stick — peer-resolution restores it from cache)`
|
|
834
|
-
: `Remove ${barePkgDir.replace(os.homedir(), '~')} (the dedicated realtime plugin handles ` +
|
|
835
|
-
`OpenClaw integration; the bare main package should not live here)`,
|
|
852
|
+
message: `bare \`shieldcortex@${bareVersion ?? '?'}\` present in OpenClaw plugin dir ` +
|
|
853
|
+
`with active discovery vector (${vectorList}); the supported package is ` +
|
|
854
|
+
`@drakon-systems/shieldcortex-realtime`,
|
|
855
|
+
fix: `Remove ${barePkgDir.replace(os.homedir(), '~')} (the dedicated realtime plugin handles ` +
|
|
856
|
+
`OpenClaw integration; the bare main package should not live here)`,
|
|
836
857
|
};
|
|
837
858
|
}
|
|
859
|
+
// ── Check: Defence canary (#48) ──────────────────────
|
|
860
|
+
/**
|
|
861
|
+
* Defence canary — synthetic probe that proves the defence pipeline is alive
|
|
862
|
+
* and catching things. Without this check, the pipeline runs silently and
|
|
863
|
+
* "no warnings" is indistinguishable from "no protection." Field feedback
|
|
864
|
+
* (edith, jarvis, 2026-05-24) called the layer "unprovable from inside the
|
|
865
|
+
* session." This makes it provable.
|
|
866
|
+
*
|
|
867
|
+
* Runs a synthetic payload through `runDefencePipeline()` and asserts the
|
|
868
|
+
* firewall blocked it AND the specific `defence_canary_test` pattern fired.
|
|
869
|
+
* Tagged `source.identifier='cli:doctor:canary'` so audit-log consumers can
|
|
870
|
+
* exclude probe runs from real threat counts.
|
|
871
|
+
*
|
|
872
|
+
* Safe by construction: the marker `__SHIELDCORTEX_CANARY_PROBE_v1__` is
|
|
873
|
+
* intentionally non-natural (double-underscore + internal version tag) and
|
|
874
|
+
* can never collide with legitimate content.
|
|
875
|
+
*/
|
|
876
|
+
export async function checkDefenceCanary() {
|
|
877
|
+
const label = 'Defence canary';
|
|
878
|
+
const canaryPayload = 'benign-context-prefix __SHIELDCORTEX_CANARY_PROBE_v1__ benign-context-suffix';
|
|
879
|
+
const start = Date.now();
|
|
880
|
+
try {
|
|
881
|
+
const { runDefencePipeline } = await import('../defence/pipeline.js');
|
|
882
|
+
const result = runDefencePipeline(canaryPayload, 'Defence canary probe', {
|
|
883
|
+
type: 'cli',
|
|
884
|
+
identifier: 'cli:doctor:canary',
|
|
885
|
+
});
|
|
886
|
+
const elapsed = Date.now() - start;
|
|
887
|
+
const blocked = result.firewall?.blockedPatterns ?? [];
|
|
888
|
+
const caught = result.allowed === false && blocked.includes('defence_canary');
|
|
889
|
+
if (caught) {
|
|
890
|
+
return {
|
|
891
|
+
label,
|
|
892
|
+
status: 'pass',
|
|
893
|
+
message: `caught (${elapsed}ms, pattern: defence_canary)`,
|
|
894
|
+
};
|
|
895
|
+
}
|
|
896
|
+
return {
|
|
897
|
+
label,
|
|
898
|
+
status: 'fail',
|
|
899
|
+
message: `canary payload was NOT caught by the firewall (${elapsed}ms) — defence pipeline ` +
|
|
900
|
+
`is not detecting known-malicious markers. This is a positive failure: the pipeline ` +
|
|
901
|
+
`should always catch this synthetic probe.`,
|
|
902
|
+
fix: `Check the injection scanner registration in src/defence/iron-dome/injection-scanner.ts ` +
|
|
903
|
+
`for the \`defence_canary_test\` pattern; rebuild with \`npm run build:ts\`. ` +
|
|
904
|
+
`If the pattern is present and the canary still slips, the firewall layer is bypassed.`,
|
|
905
|
+
};
|
|
906
|
+
}
|
|
907
|
+
catch (err) {
|
|
908
|
+
return {
|
|
909
|
+
label,
|
|
910
|
+
status: 'warn',
|
|
911
|
+
message: `canary probe could not run (${err.message}) — pipeline status unknown`,
|
|
912
|
+
};
|
|
913
|
+
}
|
|
914
|
+
}
|
|
838
915
|
/** Read a package's `version` field; returns null on any failure. */
|
|
839
916
|
function readPkgVersion(pkgJson) {
|
|
840
917
|
try {
|
|
@@ -1159,6 +1236,7 @@ export async function runDoctor() {
|
|
|
1159
1236
|
checkLockFile,
|
|
1160
1237
|
checkOpenClawResidue,
|
|
1161
1238
|
checkOpenClawPluginPackage,
|
|
1239
|
+
checkDefenceCanary,
|
|
1162
1240
|
checkModelCache,
|
|
1163
1241
|
];
|
|
1164
1242
|
for (const check of checks) {
|
|
@@ -129,6 +129,17 @@ const PATTERN_GROUPS = [
|
|
|
129
129
|
/\bcomplete\s+this\s+request\.\s*(?:call|invoke|use)\s+this\s+tool\b/i,
|
|
130
130
|
],
|
|
131
131
|
},
|
|
132
|
+
{
|
|
133
|
+
// Defence canary — synthetic probe used by `shieldcortex doctor` to verify
|
|
134
|
+
// the firewall is actually catching things. Marker is intentionally
|
|
135
|
+
// non-natural so it cannot collide with legitimate content. See
|
|
136
|
+
// src/defence/iron-dome/injection-scanner.ts for the parallel registration.
|
|
137
|
+
name: 'defence_canary',
|
|
138
|
+
weight: 1.0,
|
|
139
|
+
patterns: [
|
|
140
|
+
/__SHIELDCORTEX_CANARY_PROBE_v1__/,
|
|
141
|
+
],
|
|
142
|
+
},
|
|
132
143
|
];
|
|
133
144
|
// Maximum content length to scan (prevents ReDOS on very long inputs)
|
|
134
145
|
const MAX_SCAN_LENGTH = 50000;
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* (emails, form submissions, API responses, web pages).
|
|
7
7
|
*/
|
|
8
8
|
export type InjectionSeverity = 'low' | 'medium' | 'high' | 'critical';
|
|
9
|
-
export type InjectionCategory = 'fake_system_message' | 'authority_claim' | 'urgency_secrecy' | 'credential_extraction' | 'instruction_injection' | 'encoding_trick' | 'role_manipulation' | 'context_escape';
|
|
9
|
+
export type InjectionCategory = 'fake_system_message' | 'authority_claim' | 'urgency_secrecy' | 'credential_extraction' | 'instruction_injection' | 'encoding_trick' | 'role_manipulation' | 'context_escape' | 'canary';
|
|
10
10
|
export interface InjectionDetection {
|
|
11
11
|
category: InjectionCategory | string;
|
|
12
12
|
severity: InjectionSeverity;
|
|
@@ -44,6 +44,13 @@ pattern('role_manipulation', 'high', 'constraint_removal', 'Attempts to remove s
|
|
|
44
44
|
// ── Context escape ──
|
|
45
45
|
pattern('context_escape', 'high', 'conversation_reset', 'Attempts to reset the conversation or start a new context', /(?:(?:new|fresh|clean)\s+conversation|conversation\s+(?:reset|restart)|start(?:ing)?\s+(?:over|fresh|new\s+(?:session|conversation))|clear\s+(?:context|history|memory|conversation))/gi);
|
|
46
46
|
pattern('context_escape', 'medium', 'output_format_hijack', 'Attempts to control the output format for injection', /(?:respond\s+(?:only\s+)?with|your\s+(?:only\s+)?(?:response|output|reply)\s+(?:should|must|will)\s+be|output\s+(?:exactly|only|nothing\s+(?:but|except))|say\s+(?:only|exactly|nothing\s+(?:but|except)))\s+/gi);
|
|
47
|
+
// ── Defence canary (synthetic probe — `shieldcortex doctor`) ──
|
|
48
|
+
// Matches a unique marker emitted only by the doctor's canary check. Lets the
|
|
49
|
+
// CLI prove the firewall layer is alive without depending on operator vibes or
|
|
50
|
+
// real attack telemetry. Safe by construction: the marker is intentionally
|
|
51
|
+
// non-natural (double-underscore + internal version tag) so it cannot collide
|
|
52
|
+
// with legitimate content.
|
|
53
|
+
pattern('canary', 'critical', 'defence_canary_test', 'Synthetic canary probe emitted by `shieldcortex doctor` to verify the pipeline catches known-malicious markers. Safe by construction.', /__SHIELDCORTEX_CANARY_PROBE_v1__/g);
|
|
47
54
|
let externalPatterns = [];
|
|
48
55
|
/**
|
|
49
56
|
* Register cloud-synced patterns for injection scanning.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "shieldcortex",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.22.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",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "shieldcortex-realtime",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.22.0",
|
|
4
4
|
"name": "ShieldCortex Real-time Scanner",
|
|
5
5
|
"description": "Real-time defence scanning on LLM input, memory extraction on LLM output, and active tool call interception with approval gating.",
|
|
6
6
|
"kind": null,
|
|
@@ -128,7 +128,21 @@ function detectExplicitRequest(text) {
|
|
|
128
128
|
return patterns.some((pattern) => pattern.test(text));
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
|
|
131
|
+
/**
|
|
132
|
+
* Compute a 0-1 salience score from keyword + structural signals.
|
|
133
|
+
*
|
|
134
|
+
* @param {string} text
|
|
135
|
+
* @param {object} [opts]
|
|
136
|
+
* @param {boolean} [opts.autoExtractMode=false] — when true, cap the result
|
|
137
|
+
* at AUTO_EXTRACT_SALIENCE_CAP (0.6) so auto-extracted segments never
|
|
138
|
+
* compete with explicit `remember()` calls for top-rank in recall.
|
|
139
|
+
* v4.22.0: keyword bonuses can stack to 1.85 pre-cap, so without the cap
|
|
140
|
+
* most auto-extracts hit the 1.0 ceiling and dominate recall with
|
|
141
|
+
* low-signal fragments.
|
|
142
|
+
* @returns {number} salience in [0, 1] (or [0, 0.6] under autoExtractMode)
|
|
143
|
+
*/
|
|
144
|
+
export function calculateSalience(text, opts = {}) {
|
|
145
|
+
const { autoExtractMode = false } = opts;
|
|
132
146
|
let score = 0.25;
|
|
133
147
|
if (detectExplicitRequest(text)) score += 0.5;
|
|
134
148
|
if (detectKeywords(text, ARCHITECTURE_KEYWORDS)) score += 0.4;
|
|
@@ -139,7 +153,8 @@ export function calculateSalience(text) {
|
|
|
139
153
|
if (detectKeywords(text, PREFERENCE_KEYWORDS)) score += 0.25;
|
|
140
154
|
if (detectCodeReferences(text)) score += 0.15;
|
|
141
155
|
if (detectKeywords(text, EMOTIONAL_MARKERS)) score += 0.2;
|
|
142
|
-
|
|
156
|
+
const ceiling = autoExtractMode ? AUTO_EXTRACT_SALIENCE_CAP : 1.0;
|
|
157
|
+
return Math.min(ceiling, score);
|
|
143
158
|
}
|
|
144
159
|
|
|
145
160
|
export function suggestCategory(text) {
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Truncate `text` to at most `maxChars`, backing off to the last word- or
|
|
3
|
+
* sentence-boundary within `lookback` chars. Avoids cuts mid-word like
|
|
4
|
+
* "with website-policy URLs added to evidence where m..." that show up in
|
|
5
|
+
* recall preambles when content gets hard-sliced.
|
|
6
|
+
*
|
|
7
|
+
* Used by:
|
|
8
|
+
* - scripts/session-start-hook.mjs (SessionStart preamble, 200-char limit)
|
|
9
|
+
* - scripts/prompt-recall-hook.mjs (UserPromptSubmit recall, 150-char limit)
|
|
10
|
+
*
|
|
11
|
+
* Field context (edith, jarvis 2026-05-24): both reported the recall surface
|
|
12
|
+
* as "noisy" with one specific complaint about content cut mid-word. This is
|
|
13
|
+
* the surgical fix for the truncation half of that complaint; salience
|
|
14
|
+
* calibration is handled separately in extract-memorable-segments.mjs.
|
|
15
|
+
*
|
|
16
|
+
* @param {unknown} text — any value; non-strings are returned unchanged
|
|
17
|
+
* @param {number} maxChars — hard ceiling on output length (excluding the
|
|
18
|
+
* trailing ellipsis character)
|
|
19
|
+
* @param {number} [lookback=20] — how far back from `maxChars` to search for
|
|
20
|
+
* a clean boundary before giving up and hard-cutting
|
|
21
|
+
* @returns {string} truncated text with a trailing `…` (single Unicode char)
|
|
22
|
+
* if truncation occurred, otherwise the original text unchanged
|
|
23
|
+
*/
|
|
24
|
+
export function truncatePreservingWords(text, maxChars, lookback = 20) {
|
|
25
|
+
if (typeof text !== 'string') return text;
|
|
26
|
+
if (text.length <= maxChars) return text;
|
|
27
|
+
const slice = text.slice(0, maxChars);
|
|
28
|
+
const minIdx = Math.max(0, maxChars - lookback);
|
|
29
|
+
const lastBoundary = Math.max(
|
|
30
|
+
slice.lastIndexOf(' '),
|
|
31
|
+
slice.lastIndexOf('. '),
|
|
32
|
+
slice.lastIndexOf(', '),
|
|
33
|
+
slice.lastIndexOf('; '),
|
|
34
|
+
slice.lastIndexOf(': '),
|
|
35
|
+
slice.lastIndexOf('\n'),
|
|
36
|
+
slice.lastIndexOf('? '),
|
|
37
|
+
slice.lastIndexOf('! '),
|
|
38
|
+
);
|
|
39
|
+
const cutAt = lastBoundary >= minIdx ? lastBoundary : maxChars;
|
|
40
|
+
return slice.slice(0, cutAt).trimEnd() + '…';
|
|
41
|
+
}
|
|
@@ -16,6 +16,7 @@ import { homedir } from 'os';
|
|
|
16
16
|
import { deriveProjectKey } from './lib/project-key.mjs';
|
|
17
17
|
import { sanitisePromptForRecall } from './lib/prompt-sanitiser.mjs';
|
|
18
18
|
import { recordSessionEvent } from './lib/session-capture.mjs';
|
|
19
|
+
import { truncatePreservingWords } from './lib/truncate.mjs';
|
|
19
20
|
|
|
20
21
|
// ==================== CONFIG ====================
|
|
21
22
|
|
|
@@ -134,9 +135,7 @@ function formatRecallContext(memories) {
|
|
|
134
135
|
|
|
135
136
|
const lines = ['🧠 Recalled from memory:'];
|
|
136
137
|
for (const m of memories) {
|
|
137
|
-
const content = m.content
|
|
138
|
-
? m.content.slice(0, MAX_CONTENT_LENGTH) + '...'
|
|
139
|
-
: m.content;
|
|
138
|
+
const content = truncatePreservingWords(m.content, MAX_CONTENT_LENGTH);
|
|
140
139
|
lines.push(`- **${m.title}**: ${content}`);
|
|
141
140
|
}
|
|
142
141
|
return lines.join('\n');
|
|
@@ -23,6 +23,7 @@ import { existsSync, readFileSync } from 'fs';
|
|
|
23
23
|
import { join } from 'path';
|
|
24
24
|
import { homedir } from 'os';
|
|
25
25
|
import { deriveProjectKey } from './lib/project-key.mjs';
|
|
26
|
+
import { truncatePreservingWords } from './lib/truncate.mjs';
|
|
26
27
|
|
|
27
28
|
const NEW_DB_DIR = join(homedir(), '.shieldcortex');
|
|
28
29
|
const LEGACY_DB_DIR = join(homedir(), '.claude-cortex');
|
|
@@ -135,9 +136,7 @@ function formatContext(memories, project) {
|
|
|
135
136
|
for (const mem of byCategory[cat]) {
|
|
136
137
|
const salience = Math.round(mem.salience * 100);
|
|
137
138
|
lines.push(`- **${mem.title}** (${salience}% salience)`);
|
|
138
|
-
const content = mem.content
|
|
139
|
-
? mem.content.slice(0, 200) + '...'
|
|
140
|
-
: mem.content;
|
|
139
|
+
const content = truncatePreservingWords(mem.content, 200);
|
|
141
140
|
lines.push(` ${content}`);
|
|
142
141
|
}
|
|
143
142
|
lines.push('');
|
|
File without changes
|
|
File without changes
|