shieldcortex 4.25.0 → 4.25.1
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/inspect.js +86 -0
- package/dist/setup/claude-md.d.ts +1 -0
- package/dist/setup/claude-md.js +1 -1
- package/package.json +1 -1
- package/plugins/openclaw/dist/openclaw.plugin.json +1 -1
- package/scripts/lib/recall-log.mjs +163 -0
- package/scripts/prompt-recall-hook.mjs +118 -4
- /package/dashboard/.next/standalone/dashboard/.next/static/{7iaOcy1kc6vGZ8eXyOttR → EItbSW_ccG_F0ufC_s7dD}/_buildManifest.js +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{7iaOcy1kc6vGZ8eXyOttR → EItbSW_ccG_F0ufC_s7dD}/_clientMiddlewareManifest.json +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{7iaOcy1kc6vGZ8eXyOttR → EItbSW_ccG_F0ufC_s7dD}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
1
|
+
<!DOCTYPE html><!--EItbSW_ccG_F0ufC_s7dD--><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/aee9601911b790ca.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/aee9601911b790ca.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/aee9601911b790ca.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"EItbSW_ccG_F0ufC_s7dD\",\"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/aee9601911b790ca.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><!--EItbSW_ccG_F0ufC_s7dD--><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\":\"EItbSW_ccG_F0ufC_s7dD\",\"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/inspect.js
CHANGED
|
@@ -107,6 +107,83 @@ async function cmdLastPrecompact(args) {
|
|
|
107
107
|
printEntry(historyIndex, entry);
|
|
108
108
|
return 0;
|
|
109
109
|
}
|
|
110
|
+
function fmtRank(rank) {
|
|
111
|
+
if (typeof rank !== 'number' || !Number.isFinite(rank))
|
|
112
|
+
return ' ----';
|
|
113
|
+
return rank.toFixed(2).padStart(7);
|
|
114
|
+
}
|
|
115
|
+
function fmtEff(eff) {
|
|
116
|
+
if (typeof eff !== 'number' || !Number.isFinite(eff))
|
|
117
|
+
return '----';
|
|
118
|
+
return eff.toFixed(2);
|
|
119
|
+
}
|
|
120
|
+
function printRecallEntry(index, entry) {
|
|
121
|
+
const candidates = entry.candidates ?? [];
|
|
122
|
+
const injected = candidates.filter((c) => c.injected);
|
|
123
|
+
const dropped = candidates.filter((c) => !c.injected);
|
|
124
|
+
console.log(`${bold}Slot ${index}: ${entry.ranAt ?? '(unknown time)'} ${dim}${relativeTime(entry.ranAt)}${reset}`);
|
|
125
|
+
const promptDisplay = entry.prompt ? `"${entry.prompt}"` : '(no prompt)';
|
|
126
|
+
console.log(` Prompt: ${cyan}${promptDisplay}${reset}`);
|
|
127
|
+
const meta = [
|
|
128
|
+
entry.project ? `project=${entry.project}` : null,
|
|
129
|
+
entry.sessionId ? `session=${entry.sessionId.slice(0, 8)}` : null,
|
|
130
|
+
entry.minSalience != null ? `min_sal=${entry.minSalience.toFixed(2)}` : null,
|
|
131
|
+
].filter(Boolean).join(', ');
|
|
132
|
+
if (meta)
|
|
133
|
+
console.log(` ${dim}${meta}${reset}`);
|
|
134
|
+
console.log(` Candidates: ${candidates.length} considered, ${green}${injected.length} injected${reset}, ${dim}${dropped.length} dropped${reset}`);
|
|
135
|
+
if (injected.length > 0) {
|
|
136
|
+
console.log(`\n ${green}INJECTED${reset}`);
|
|
137
|
+
for (const c of injected) {
|
|
138
|
+
const src = (c.source ?? '?').padEnd(15);
|
|
139
|
+
console.log(` [#${String(c.id ?? '?').padEnd(5)}] ${cyan}${src}${reset} rank=${fmtRank(c.ftsRank)} eff=${fmtEff(c.effectiveSalience)} ${(c.title ?? '').slice(0, 70)}`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
if (dropped.length > 0) {
|
|
143
|
+
console.log(`\n ${red}DROPPED${reset}`);
|
|
144
|
+
for (const c of dropped) {
|
|
145
|
+
const src = (c.source ?? '?').padEnd(15);
|
|
146
|
+
const reason = c.dropReason ? ` ${yellow}(${c.dropReason})${reset}` : '';
|
|
147
|
+
console.log(` ${dim}[#${String(c.id ?? '?').padEnd(5)}]${reset} ${dim}${src}${reset} rank=${fmtRank(c.ftsRank)} eff=${fmtEff(c.effectiveSalience)} ${dim}${(c.title ?? '').slice(0, 70)}${reset}${reason}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
console.log('');
|
|
151
|
+
}
|
|
152
|
+
async function cmdLastRecall(args) {
|
|
153
|
+
const all = args.includes('--all');
|
|
154
|
+
const historyArg = parseFlag(args, '--history');
|
|
155
|
+
const historyIndex = historyArg !== undefined ? parseInt(historyArg, 10) : 0;
|
|
156
|
+
const { readRecallLog, listRecallLogs, RECALL_RING_SIZE } =
|
|
157
|
+
// @ts-expect-error — importing a .mjs hook util that has no .d.ts
|
|
158
|
+
await import('../../scripts/lib/recall-log.mjs');
|
|
159
|
+
if (all) {
|
|
160
|
+
const entries = listRecallLogs();
|
|
161
|
+
if (entries.length === 0) {
|
|
162
|
+
console.log(`${dim}No recall runs logged yet. The recall ring buffer fills as the UserPromptSubmit hook fires with proactiveRecall=true.${reset}`);
|
|
163
|
+
return 0;
|
|
164
|
+
}
|
|
165
|
+
console.log(`${bold}${entries.length} recall run(s) in ring buffer${reset}\n`);
|
|
166
|
+
for (const { index, entry } of entries)
|
|
167
|
+
printRecallEntry(index, entry);
|
|
168
|
+
return 0;
|
|
169
|
+
}
|
|
170
|
+
if (!Number.isFinite(historyIndex) || historyIndex < 0 || historyIndex >= RECALL_RING_SIZE) {
|
|
171
|
+
console.error(`--history must be 0..${RECALL_RING_SIZE - 1}. Got: ${historyArg ?? '<missing>'}`);
|
|
172
|
+
return 2;
|
|
173
|
+
}
|
|
174
|
+
const entry = readRecallLog(historyIndex);
|
|
175
|
+
if (!entry) {
|
|
176
|
+
if (historyIndex === 0) {
|
|
177
|
+
console.log(`${dim}No recall runs logged yet. The recall ring buffer fills as the UserPromptSubmit hook fires with proactiveRecall=true.${reset}`);
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
console.log(`${dim}No recall run at history slot ${historyIndex}.${reset}`);
|
|
181
|
+
}
|
|
182
|
+
return 0;
|
|
183
|
+
}
|
|
184
|
+
printRecallEntry(historyIndex, entry);
|
|
185
|
+
return 0;
|
|
186
|
+
}
|
|
110
187
|
function printHelp() {
|
|
111
188
|
console.log('Usage: shieldcortex inspect <subcommand>');
|
|
112
189
|
console.log('');
|
|
@@ -114,6 +191,12 @@ function printHelp() {
|
|
|
114
191
|
console.log(' last-precompact [--history N | --all] Show extractor candidates from the last precompact run');
|
|
115
192
|
console.log(' --history N (0=newest, up to 9) — show slot N');
|
|
116
193
|
console.log(' --all — show every entry in the ring buffer (newest first)');
|
|
194
|
+
console.log('');
|
|
195
|
+
console.log(' last-recall [--history N | --all] Show recall candidates from the last prompt-recall run');
|
|
196
|
+
console.log(' (requires proactiveRecall=true; logs prompt + per-candidate');
|
|
197
|
+
console.log(' FTS rank + effective salience + drop reason).');
|
|
198
|
+
console.log(' Note: prompts are stored locally at ~/.shieldcortex/recall-log/');
|
|
199
|
+
console.log(' — same trust boundary as memories.db.');
|
|
117
200
|
}
|
|
118
201
|
export async function handleInspectCommand(args) {
|
|
119
202
|
const sub = args[0];
|
|
@@ -122,6 +205,9 @@ export async function handleInspectCommand(args) {
|
|
|
122
205
|
case 'last-precompact':
|
|
123
206
|
code = await cmdLastPrecompact(args.slice(1));
|
|
124
207
|
break;
|
|
208
|
+
case 'last-recall':
|
|
209
|
+
code = await cmdLastRecall(args.slice(1));
|
|
210
|
+
break;
|
|
125
211
|
case undefined:
|
|
126
212
|
case '--help':
|
|
127
213
|
case '-h':
|
package/dist/setup/claude-md.js
CHANGED
|
@@ -122,7 +122,7 @@ function isIdealMcpEntry(entry, ideal) {
|
|
|
122
122
|
return false;
|
|
123
123
|
return e.args.every((v, i) => v === ideal.args[i]);
|
|
124
124
|
}
|
|
125
|
-
function setupGlobalMcp() {
|
|
125
|
+
export function setupGlobalMcp() {
|
|
126
126
|
// Claude Code reads user-scope MCP servers from ~/.claude.json
|
|
127
127
|
const mcpPath = path.join(os.homedir(), '.claude.json');
|
|
128
128
|
const ideal = resolveMcpCommand();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "shieldcortex",
|
|
3
|
-
"version": "4.25.
|
|
3
|
+
"version": "4.25.1",
|
|
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.25.
|
|
3
|
+
"version": "4.25.1",
|
|
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,
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recall ring buffer (v4.25.1).
|
|
3
|
+
*
|
|
4
|
+
* Each prompt-recall hook run logs "what prompt fired, what candidates did
|
|
5
|
+
* we consider, which were injected, which were dropped, and why?" Operators
|
|
6
|
+
* read it via `shieldcortex inspect last-recall` when diagnosing why a
|
|
7
|
+
* particular memory surfaced (or didn't) for a particular prompt.
|
|
8
|
+
*
|
|
9
|
+
* Designed to gather the data needed to scope v4.26.x recall-quality fixes
|
|
10
|
+
* from real fleet usage instead of one-anecdote guesses. See the v4.25.1
|
|
11
|
+
* plan for the diagnostic context (Jarvis's "Google Slides memory for a
|
|
12
|
+
* ShieldCortex-versions prompt" report, 2026-05-27).
|
|
13
|
+
*
|
|
14
|
+
* Ring buffer at `~/.shieldcortex/recall-log/{0..9}.json` — index 0 is the
|
|
15
|
+
* most recent. On every write we rotate (delete 9, rename 8→9, …, 0→1) and
|
|
16
|
+
* atomically write the new run to index 0 via a temp-file + rename so a
|
|
17
|
+
* crash mid-rotation never leaves a torn JSON file.
|
|
18
|
+
*
|
|
19
|
+
* Size cap: 10 files × ~15KB each (~150KB max). Each entry is slightly
|
|
20
|
+
* larger than precompact because it carries the prompt + per-candidate
|
|
21
|
+
* FTS rank / effective salience metadata.
|
|
22
|
+
*
|
|
23
|
+
* Best-effort — never throws into the caller. The hook must not block recall
|
|
24
|
+
* on a missing ~/.shieldcortex directory or a transient EBUSY.
|
|
25
|
+
*
|
|
26
|
+
* Trust boundary: identical to ~/.shieldcortex/memories.db (already stores
|
|
27
|
+
* raw memory content). Prompts are capped at 200 chars and the upstream
|
|
28
|
+
* sanitiser (scripts/lib/prompt-sanitiser.mjs) has already stripped
|
|
29
|
+
* framework metadata + fenced JSON before we see the prompt.
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync } from 'fs';
|
|
33
|
+
import { homedir } from 'os';
|
|
34
|
+
import { join } from 'path';
|
|
35
|
+
|
|
36
|
+
const RING_SIZE = 10;
|
|
37
|
+
|
|
38
|
+
// Resolved per-call so tests can swap HOME between cases. Read
|
|
39
|
+
// `process.env.HOME` directly rather than going through `os.homedir()`
|
|
40
|
+
// because jest's ESM VM loader doesn't reliably reflect HOME mutations
|
|
41
|
+
// through homedir() (same gotcha as precompact-log.mjs).
|
|
42
|
+
function logDir() {
|
|
43
|
+
return join(process.env.HOME || homedir(), '.shieldcortex', 'recall-log');
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function logPath(index) {
|
|
47
|
+
return join(logDir(), `${index}.json`);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function ensureDir() {
|
|
51
|
+
const dir = logDir();
|
|
52
|
+
if (!existsSync(dir)) {
|
|
53
|
+
mkdirSync(dir, { recursive: true });
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Rotate the ring buffer one slot. Oldest entry (index 9) is unlinked,
|
|
59
|
+
* remaining entries shift up by one. Safe to call when slots are missing.
|
|
60
|
+
*/
|
|
61
|
+
function rotate() {
|
|
62
|
+
try {
|
|
63
|
+
unlinkSync(logPath(RING_SIZE - 1));
|
|
64
|
+
} catch {
|
|
65
|
+
// No file at the oldest slot — fine.
|
|
66
|
+
}
|
|
67
|
+
for (let i = RING_SIZE - 2; i >= 0; i--) {
|
|
68
|
+
const from = logPath(i);
|
|
69
|
+
const to = logPath(i + 1);
|
|
70
|
+
if (existsSync(from)) {
|
|
71
|
+
try {
|
|
72
|
+
renameSync(from, to);
|
|
73
|
+
} catch {
|
|
74
|
+
// Best-effort — skip if EBUSY/EACCES.
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Atomically write a recall run entry to slot 0 (the newest slot).
|
|
82
|
+
* Rotates the ring beforehand.
|
|
83
|
+
*
|
|
84
|
+
* @param {{
|
|
85
|
+
* ranAt?: string,
|
|
86
|
+
* prompt?: string,
|
|
87
|
+
* promptHash?: string,
|
|
88
|
+
* sessionId?: string,
|
|
89
|
+
* project?: string,
|
|
90
|
+
* minSalience?: number,
|
|
91
|
+
* candidates: Array<{
|
|
92
|
+
* id?: number,
|
|
93
|
+
* title?: string,
|
|
94
|
+
* category?: string,
|
|
95
|
+
* memoryPurpose?: string,
|
|
96
|
+
* salience?: number,
|
|
97
|
+
* ftsRank?: number | null,
|
|
98
|
+
* source?: 'fts' | 'category-boost',
|
|
99
|
+
* effectiveSalience?: number,
|
|
100
|
+
* injected?: boolean,
|
|
101
|
+
* dropReason?: string | null,
|
|
102
|
+
* }>,
|
|
103
|
+
* injectedCount?: number,
|
|
104
|
+
* finalContextChars?: number,
|
|
105
|
+
* }} entry
|
|
106
|
+
*/
|
|
107
|
+
export function writeRecallLog(entry) {
|
|
108
|
+
try {
|
|
109
|
+
ensureDir();
|
|
110
|
+
rotate();
|
|
111
|
+
const payload = {
|
|
112
|
+
ranAt: entry.ranAt ?? new Date().toISOString(),
|
|
113
|
+
prompt: entry.prompt ?? null,
|
|
114
|
+
promptHash: entry.promptHash ?? null,
|
|
115
|
+
sessionId: entry.sessionId ?? null,
|
|
116
|
+
project: entry.project ?? null,
|
|
117
|
+
minSalience: entry.minSalience ?? null,
|
|
118
|
+
candidates: Array.isArray(entry.candidates) ? entry.candidates : [],
|
|
119
|
+
injectedCount: entry.injectedCount ?? null,
|
|
120
|
+
finalContextChars: entry.finalContextChars ?? null,
|
|
121
|
+
};
|
|
122
|
+
const target = logPath(0);
|
|
123
|
+
const tmp = `${target}.tmp`;
|
|
124
|
+
writeFileSync(tmp, JSON.stringify(payload, null, 2), 'utf8');
|
|
125
|
+
renameSync(tmp, target);
|
|
126
|
+
} catch {
|
|
127
|
+
// Best-effort. The hook continues without a log entry rather than
|
|
128
|
+
// blocking recall on a disk error.
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Read a recall log entry by ring index.
|
|
134
|
+
*
|
|
135
|
+
* @param {number} index — 0 = newest, RING_SIZE-1 = oldest
|
|
136
|
+
* @returns {object | null} parsed entry, or null if missing/corrupt
|
|
137
|
+
*/
|
|
138
|
+
export function readRecallLog(index = 0) {
|
|
139
|
+
try {
|
|
140
|
+
const raw = readFileSync(logPath(index), 'utf8');
|
|
141
|
+
return JSON.parse(raw);
|
|
142
|
+
} catch {
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Read all present recall log entries, newest first. Missing slots are
|
|
149
|
+
* skipped (no nulls in the returned array).
|
|
150
|
+
*
|
|
151
|
+
* @returns {Array<{ index: number, entry: object }>}
|
|
152
|
+
*/
|
|
153
|
+
export function listRecallLogs() {
|
|
154
|
+
const out = [];
|
|
155
|
+
for (let i = 0; i < RING_SIZE; i++) {
|
|
156
|
+
const entry = readRecallLog(i);
|
|
157
|
+
if (entry) out.push({ index: i, entry });
|
|
158
|
+
}
|
|
159
|
+
return out;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
export const RECALL_RING_SIZE = RING_SIZE;
|
|
163
|
+
export { logDir as getRecallLogDir };
|
|
@@ -19,6 +19,8 @@ import { sanitisePromptForRecall } from './lib/prompt-sanitiser.mjs';
|
|
|
19
19
|
import { recordSessionEvent } from './lib/session-capture.mjs';
|
|
20
20
|
import { truncatePreservingWords } from './lib/truncate.mjs';
|
|
21
21
|
import { compareRecallResults } from './lib/recall-rank.mjs';
|
|
22
|
+
import { computeEffectiveSalience } from './lib/salience.mjs';
|
|
23
|
+
import { writeRecallLog } from './lib/recall-log.mjs';
|
|
22
24
|
|
|
23
25
|
// ==================== CONFIG ====================
|
|
24
26
|
|
|
@@ -102,6 +104,10 @@ function recallRelevant(db, project, prompt) {
|
|
|
102
104
|
for (const row of ftsRows) {
|
|
103
105
|
if (!seen.has(row.id)) {
|
|
104
106
|
seen.add(row.id);
|
|
107
|
+
// v4.25.1: tag with source so the recall ring buffer can show
|
|
108
|
+
// operators which path surfaced a given candidate. _-prefixed so
|
|
109
|
+
// it doesn't collide with any future SELECT column.
|
|
110
|
+
row._source = 'fts';
|
|
105
111
|
results.push(row);
|
|
106
112
|
}
|
|
107
113
|
}
|
|
@@ -139,6 +145,7 @@ function recallRelevant(db, project, prompt) {
|
|
|
139
145
|
for (const row of catRows) {
|
|
140
146
|
if (!seen.has(row.id)) {
|
|
141
147
|
seen.add(row.id);
|
|
148
|
+
row._source = 'category-boost';
|
|
142
149
|
results.push(row);
|
|
143
150
|
}
|
|
144
151
|
}
|
|
@@ -149,7 +156,10 @@ function recallRelevant(db, project, prompt) {
|
|
|
149
156
|
// sort discarded the relevance signal from the FTS5 query above — high-
|
|
150
157
|
// salience-but-off-topic memories bubbled to the top of the recall preamble.
|
|
151
158
|
results.sort(compareRecallResults);
|
|
152
|
-
|
|
159
|
+
// v4.25.1: return the full sorted set alongside the sliced top-N so the
|
|
160
|
+
// recall ring buffer can log which candidates were considered but didn't
|
|
161
|
+
// make the cut. The top-N is the existing public contract.
|
|
162
|
+
return { topN: results.slice(0, MAX_RESULTS), fullSet: results };
|
|
153
163
|
}
|
|
154
164
|
|
|
155
165
|
// ==================== DEDUPE STATE ====================
|
|
@@ -192,6 +202,69 @@ function hashContent(s) {
|
|
|
192
202
|
return createHash('sha256').update(s).digest('hex').slice(0, 16);
|
|
193
203
|
}
|
|
194
204
|
|
|
205
|
+
// ==================== RECALL LOG (v4.25.1) ====================
|
|
206
|
+
//
|
|
207
|
+
// Per-run dump of "what prompt fired, which memories were considered, which
|
|
208
|
+
// were injected, which were dropped, and why" to ~/.shieldcortex/recall-log/.
|
|
209
|
+
// Operators read this via `shieldcortex inspect last-recall`. Best-effort —
|
|
210
|
+
// never throws into the caller. Designed to gather diagnostic data so we
|
|
211
|
+
// can scope v4.26.x recall-quality fixes from real fleet usage.
|
|
212
|
+
|
|
213
|
+
const RECALL_LOG_PROMPT_CAP = 200;
|
|
214
|
+
|
|
215
|
+
function buildLogCandidates({ fullSet, topN, injected, dedupHashes }) {
|
|
216
|
+
const injectedIds = new Set(injected.map((m) => m.id));
|
|
217
|
+
const topNIds = new Set(topN.map((m) => m.id));
|
|
218
|
+
return fullSet.map((row) => {
|
|
219
|
+
const wasInjected = injectedIds.has(row.id);
|
|
220
|
+
let dropReason = null;
|
|
221
|
+
if (!wasInjected) {
|
|
222
|
+
if (topNIds.has(row.id) && dedupHashes.has(hashContent(row.content))) {
|
|
223
|
+
dropReason = 'dedupe';
|
|
224
|
+
} else if (!topNIds.has(row.id)) {
|
|
225
|
+
dropReason = 'outside_top_n';
|
|
226
|
+
} else {
|
|
227
|
+
// In top-N, not deduped, not injected — early exit on empty memories
|
|
228
|
+
// before the dedupe filter ran. Mark as not-injected-no-reason so the
|
|
229
|
+
// CLI can distinguish from an active drop.
|
|
230
|
+
dropReason = 'not_injected';
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return {
|
|
234
|
+
id: row.id ?? null,
|
|
235
|
+
title: row.title ?? null,
|
|
236
|
+
category: row.category ?? null,
|
|
237
|
+
memoryPurpose: row.memory_purpose ?? null,
|
|
238
|
+
salience: typeof row.salience === 'number' ? row.salience : null,
|
|
239
|
+
ftsRank: typeof row.rank === 'number' ? row.rank : null,
|
|
240
|
+
source: row._source ?? null,
|
|
241
|
+
effectiveSalience: computeEffectiveSalience(row),
|
|
242
|
+
injected: wasInjected,
|
|
243
|
+
dropReason,
|
|
244
|
+
};
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
function logRecallRun({ prompt, sessionId, project, fullSet, topN, injected, dedupHashes, context }) {
|
|
249
|
+
try {
|
|
250
|
+
const promptCapped = prompt.length > RECALL_LOG_PROMPT_CAP
|
|
251
|
+
? prompt.slice(0, RECALL_LOG_PROMPT_CAP) + '…'
|
|
252
|
+
: prompt;
|
|
253
|
+
writeRecallLog({
|
|
254
|
+
prompt: promptCapped,
|
|
255
|
+
promptHash: hashContent(prompt),
|
|
256
|
+
sessionId: sessionId ?? null,
|
|
257
|
+
project: project ?? null,
|
|
258
|
+
minSalience: MIN_SALIENCE,
|
|
259
|
+
candidates: buildLogCandidates({ fullSet, topN, injected, dedupHashes }),
|
|
260
|
+
injectedCount: injected.length,
|
|
261
|
+
finalContextChars: context ? context.length : 0,
|
|
262
|
+
});
|
|
263
|
+
} catch {
|
|
264
|
+
// Best-effort — recall must not block on log write failures.
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
195
268
|
// ==================== FORMAT ====================
|
|
196
269
|
|
|
197
270
|
function formatRecallContext(memories) {
|
|
@@ -280,10 +353,26 @@ process.stdin.on('end', () => {
|
|
|
280
353
|
}
|
|
281
354
|
|
|
282
355
|
const db = new Database(dbPath, { readonly: true, timeout: 2000 });
|
|
283
|
-
|
|
356
|
+
const { topN, fullSet } = recallRelevant(db, project, prompt);
|
|
284
357
|
db.close();
|
|
358
|
+
let memories = topN;
|
|
285
359
|
|
|
286
360
|
if (memories.length === 0) {
|
|
361
|
+
// v4.25.1: still log no-candidate runs ONLY when the FTS step actually
|
|
362
|
+
// ran (fullSet has something filtered out before the slice). Pure
|
|
363
|
+
// empties (no FTS match at all) skip the log — saves disk + signal.
|
|
364
|
+
if (fullSet.length > 0) {
|
|
365
|
+
logRecallRun({
|
|
366
|
+
prompt,
|
|
367
|
+
sessionId,
|
|
368
|
+
project,
|
|
369
|
+
fullSet,
|
|
370
|
+
topN: [],
|
|
371
|
+
injected: [],
|
|
372
|
+
dedupHashes: new Set(),
|
|
373
|
+
context: null,
|
|
374
|
+
});
|
|
375
|
+
}
|
|
287
376
|
process.exit(0);
|
|
288
377
|
}
|
|
289
378
|
|
|
@@ -292,13 +381,26 @@ process.stdin.on('end', () => {
|
|
|
292
381
|
// "near-identical recall in adjacent turns" failure Jarvis flagged.
|
|
293
382
|
let dedupState = null;
|
|
294
383
|
let sessionRing = [];
|
|
384
|
+
let dedupHashes = new Set();
|
|
295
385
|
if (sessionId) {
|
|
296
386
|
dedupState = loadDedupState();
|
|
297
387
|
const entry = dedupState[sessionId] ?? { ring: [], touched: Date.now() };
|
|
298
388
|
sessionRing = Array.isArray(entry.ring) ? entry.ring : [];
|
|
299
|
-
|
|
300
|
-
memories = memories.filter((m) => !
|
|
389
|
+
dedupHashes = new Set(sessionRing);
|
|
390
|
+
memories = memories.filter((m) => !dedupHashes.has(hashContent(m.content)));
|
|
301
391
|
if (memories.length === 0) {
|
|
392
|
+
// v4.25.1: log even when every top-N candidate was dedupe-suppressed.
|
|
393
|
+
// This is the most interesting case for diagnosing recall noise.
|
|
394
|
+
logRecallRun({
|
|
395
|
+
prompt,
|
|
396
|
+
sessionId,
|
|
397
|
+
project,
|
|
398
|
+
fullSet,
|
|
399
|
+
topN,
|
|
400
|
+
injected: [],
|
|
401
|
+
dedupHashes,
|
|
402
|
+
context: null,
|
|
403
|
+
});
|
|
302
404
|
process.exit(0);
|
|
303
405
|
}
|
|
304
406
|
}
|
|
@@ -334,6 +436,18 @@ process.stdin.on('end', () => {
|
|
|
334
436
|
},
|
|
335
437
|
};
|
|
336
438
|
|
|
439
|
+
// v4.25.1: log the recall run (best-effort, never blocks output)
|
|
440
|
+
logRecallRun({
|
|
441
|
+
prompt,
|
|
442
|
+
sessionId,
|
|
443
|
+
project,
|
|
444
|
+
fullSet,
|
|
445
|
+
topN,
|
|
446
|
+
injected: memories,
|
|
447
|
+
dedupHashes,
|
|
448
|
+
context,
|
|
449
|
+
});
|
|
450
|
+
|
|
337
451
|
console.log(JSON.stringify(output));
|
|
338
452
|
console.error(`[shieldcortex] Proactive recall: ${memories.length} memories for "${project}"`);
|
|
339
453
|
|
|
File without changes
|
|
File without changes
|