shieldcortex 4.33.2 → 4.34.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/api/routes/recall.js +5 -1
- package/dist/cli/stats-command.js +30 -0
- package/dist/memory/decay.d.ts +1 -0
- package/dist/memory/decay.js +10 -2
- package/dist/memory/lifecycle.js +6 -3
- package/dist/memory/metrics.d.ts +72 -0
- package/dist/memory/metrics.js +162 -0
- package/dist/memory/store.d.ts +1 -1
- package/dist/memory/store.js +8 -4
- package/dist/server.js +1 -1
- package/dist/tools/context.d.ts +3 -1
- package/dist/tools/context.js +13 -2
- package/package.json +1 -1
- package/scripts/prompt-recall-hook.mjs +6 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{6wRWKYDseKVJd5JfOCIDU → bUb5MH6iktj_Ue6clRY9Y}/_buildManifest.js +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{6wRWKYDseKVJd5JfOCIDU → bUb5MH6iktj_Ue6clRY9Y}/_clientMiddlewareManifest.json +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{6wRWKYDseKVJd5JfOCIDU → bUb5MH6iktj_Ue6clRY9Y}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
1
|
+
<!DOCTYPE html><!--bUb5MH6iktj_Ue6clRY9Y--><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/34d933785a17edf3.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/34d933785a17edf3.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/34d933785a17edf3.css\",\"style\"]\n:HL[\"/_next/static/chunks/aee9601911b790ca.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"bUb5MH6iktj_Ue6clRY9Y\",\"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/34d933785a17edf3.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><!--bUb5MH6iktj_Ue6clRY9Y--><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\":\"bUb5MH6iktj_Ue6clRY9Y\",\"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>
|
|
@@ -58,7 +58,11 @@ export function registerRecallRoutes(app, requireNotLocked) {
|
|
|
58
58
|
return false;
|
|
59
59
|
if (memory.status === 'archived' || memory.status === 'suppressed')
|
|
60
60
|
return false;
|
|
61
|
-
|
|
61
|
+
// Phase 1b: use EFFECTIVE (decayed) salience so this "near-miss" explainer
|
|
62
|
+
// matches real recall ranking — a stale-saturated row (raw 1.0) is no
|
|
63
|
+
// longer shown as a high-salience near-miss. decayedScore COALESCEs to
|
|
64
|
+
// raw salience in rowToMemory, so never-scored rows are unaffected.
|
|
65
|
+
return memory.decayedScore >= 0.65 || memory.pinned;
|
|
62
66
|
}).slice(0, 5).map((memory) => ({
|
|
63
67
|
id: memory.id,
|
|
64
68
|
title: memory.title,
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import { isDatabaseInitialized } from '../database/init.js';
|
|
5
5
|
import { getLifetimeStats } from '../defence/audit/queries.js';
|
|
6
6
|
import { getAuditStats } from '../defence/audit/queries.js';
|
|
7
|
+
import { getSalienceDistribution, getHookYield } from '../memory/metrics.js';
|
|
7
8
|
import { getLicense } from '../license/store.js';
|
|
8
9
|
import { getTrialStatus } from '../license/trial.js';
|
|
9
10
|
import { existsSync } from 'fs';
|
|
@@ -62,6 +63,35 @@ export async function runStatsCommand() {
|
|
|
62
63
|
console.log(row('Scans', last7d.totalOperations));
|
|
63
64
|
console.log(row('Blocked', last7d.blockedCount));
|
|
64
65
|
console.log(row('Quarantined', last7d.quarantinedCount));
|
|
66
|
+
// Phase 0 (measure-first): the salience-wall instrument. A high wall % means
|
|
67
|
+
// raw salience has saturated and stopped discriminating among survivors.
|
|
68
|
+
try {
|
|
69
|
+
const sal = getSalienceDistribution();
|
|
70
|
+
if (sal.total > 0) {
|
|
71
|
+
console.log(section('Memory Quality'));
|
|
72
|
+
console.log(row('Long-term memories', sal.wall.ltmTotal));
|
|
73
|
+
console.log(row('At salience wall (≥0.95)', `${sal.wall.ltmAtOrAbove095} (${sal.wall.ltmPct}%)`));
|
|
74
|
+
console.log(row('Fragments in wall', `${sal.fragments.atOrAbove095} (${sal.fragments.pctOfWall}%)`));
|
|
75
|
+
for (const w of sal.warnings)
|
|
76
|
+
console.log(` ${DIM}⚠ ${w}${RESET}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch { /* metrics are best-effort; never break the report */ }
|
|
80
|
+
// Phase 0: hook yield — fires vs extracted per hook. Surfaces the capture
|
|
81
|
+
// imbalance (e.g. pre-compact fires rarely vs stop firing every turn) and
|
|
82
|
+
// the recall-injection count ("is the store actually read into prompts?").
|
|
83
|
+
try {
|
|
84
|
+
const yld = getHookYield();
|
|
85
|
+
if (yld.totalFires > 0) {
|
|
86
|
+
console.log(section('Hook Activity (all-time)'));
|
|
87
|
+
for (const h of yld.hooks.slice(0, 6)) {
|
|
88
|
+
console.log(row(h.hook, `${n(h.fires)} fires · ${n(h.extracted)} extracted`));
|
|
89
|
+
}
|
|
90
|
+
const recall = yld.hooks.find((h) => h.hook === 'prompt-recall');
|
|
91
|
+
console.log(row('Recall injections', recall ? recall.extracted : 0));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch { /* best-effort */ }
|
|
65
95
|
const threats = last7d.threatBreakdown;
|
|
66
96
|
const threatEntries = Object.entries(threats).sort((a, b) => b[1] - a[1]).slice(0, 5);
|
|
67
97
|
if (threatEntries.length > 0) {
|
package/dist/memory/decay.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ export declare function calculateDecayedScore(memory: Memory, config?: MemoryCon
|
|
|
20
20
|
/**
|
|
21
21
|
* Calculate reinforcement boost when memory is accessed
|
|
22
22
|
*/
|
|
23
|
+
export declare const AUTO_EXTRACT_SALIENCE_CAP = 0.6;
|
|
23
24
|
export declare function calculateReinforcementBoost(memory: Memory, config?: MemoryConfig): number;
|
|
24
25
|
/**
|
|
25
26
|
* Determine if a memory should be promoted from short-term to long-term
|
package/dist/memory/decay.js
CHANGED
|
@@ -44,13 +44,21 @@ export function calculateDecayedScore(memory, config = DEFAULT_CONFIG) {
|
|
|
44
44
|
/**
|
|
45
45
|
* Calculate reinforcement boost when memory is accessed
|
|
46
46
|
*/
|
|
47
|
+
// Auto-extracted captures must never reinforce past the extraction cap — the
|
|
48
|
+
// salience ratchet (reinforcement-on-access) is exactly what drove the 0.6-capped
|
|
49
|
+
// auto memories up to the 1.0 wall (Phase 1a, 2026-06-14). Mirrors the canonical
|
|
50
|
+
// AUTO_EXTRACT_SALIENCE_CAP in scripts/lib/extract-memorable-segments.mjs:24 (a
|
|
51
|
+
// build-script .mjs outside the compiled src/ surface, so the value is mirrored).
|
|
52
|
+
export const AUTO_EXTRACT_SALIENCE_CAP = 0.6;
|
|
47
53
|
export function calculateReinforcementBoost(memory, config = DEFAULT_CONFIG) {
|
|
48
54
|
// Diminishing returns on reinforcement
|
|
49
55
|
const currentBoost = Math.min(0.5, (config.reinforcementFactor - 1) * Math.pow(0.9, memory.accessCount));
|
|
50
56
|
// New score after reinforcement
|
|
51
57
|
let newScore = memory.salience + currentBoost;
|
|
52
|
-
//
|
|
53
|
-
|
|
58
|
+
// Ceiling: 0.6 for auto-extracted captures (forward-only ratchet cap; lazily
|
|
59
|
+
// corrects a saturated legacy auto row on its next access), 1.0 otherwise.
|
|
60
|
+
const ceiling = memory.captureMethod === 'auto' ? AUTO_EXTRACT_SALIENCE_CAP : 1.0;
|
|
61
|
+
return Math.min(ceiling, newScore);
|
|
54
62
|
}
|
|
55
63
|
/**
|
|
56
64
|
* Determine if a memory should be promoted from short-term to long-term
|
package/dist/memory/lifecycle.js
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
*/
|
|
22
22
|
import { getDatabase } from '../database/init.js';
|
|
23
23
|
import { DEFAULT_CONFIG, } from './types.js';
|
|
24
|
-
import { calculateReinforcementBoost, calculateDecayedScore, } from './decay.js';
|
|
24
|
+
import { calculateReinforcementBoost, calculateDecayedScore, AUTO_EXTRACT_SALIENCE_CAP, } from './decay.js';
|
|
25
25
|
import { activateMemory as spreadActivation } from './activation.js';
|
|
26
26
|
import { jaccardSimilarity } from './similarity.js';
|
|
27
27
|
import { emitMemoryAccessed, emitMemoryUpdated, persistEvent, } from '../api/events.js';
|
|
@@ -108,12 +108,15 @@ export function accessMemory(id, config = DEFAULT_CONFIG, source) {
|
|
|
108
108
|
*/
|
|
109
109
|
export function reinforceFromSearch(memoryId) {
|
|
110
110
|
const db = getDatabase();
|
|
111
|
-
const memory = db.prepare('SELECT salience, access_count FROM memories WHERE id = ?').get(memoryId);
|
|
111
|
+
const memory = db.prepare('SELECT salience, access_count, capture_method FROM memories WHERE id = ?').get(memoryId);
|
|
112
112
|
if (!memory)
|
|
113
113
|
return;
|
|
114
114
|
// Small salience boost per search appearance (diminishing returns)
|
|
115
115
|
const boost = Math.max(0.005, 0.02 / (1 + memory.access_count * 0.1));
|
|
116
|
-
|
|
116
|
+
// Forward-only ratchet cap (Phase 1a): auto-extracted captures never reinforce
|
|
117
|
+
// past the 0.6 extraction cap; deliberate captures keep the 1.0 ceiling.
|
|
118
|
+
const ceiling = memory.capture_method === 'auto' ? AUTO_EXTRACT_SALIENCE_CAP : 1.0;
|
|
119
|
+
const newSalience = Math.min(ceiling, memory.salience + boost);
|
|
117
120
|
db.prepare(`
|
|
118
121
|
UPDATE memories
|
|
119
122
|
SET last_accessed = CURRENT_TIMESTAMP,
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory-quality metrics (Phase 0, measure-first).
|
|
3
|
+
*
|
|
4
|
+
* Read-only instruments that make memory-quality problems QUERYABLE before any
|
|
5
|
+
* model change — so a fix can be validated against the same number, not vibes.
|
|
6
|
+
* Nothing here mutates or deletes; every function is a pure read of the store.
|
|
7
|
+
*
|
|
8
|
+
* The headline instrument is `getSalienceDistribution`: it quantifies the
|
|
9
|
+
* "salience wall" (raw salience saturates at 1.0 for long-lived memories, so it
|
|
10
|
+
* stops discriminating) and the fragment pollution within that wall — the exact
|
|
11
|
+
* shape the edith field report exposed (43/43 long-term at ≥0.99, 81% of them
|
|
12
|
+
* mid-sentence fragments). Re-run it after a change to prove the wall spread and
|
|
13
|
+
* the fragments fell.
|
|
14
|
+
*/
|
|
15
|
+
import { getDatabase } from '../database/init.js';
|
|
16
|
+
type DB = ReturnType<typeof getDatabase>;
|
|
17
|
+
export interface SalienceBand {
|
|
18
|
+
/** Human label, e.g. "0.95–1.00". */
|
|
19
|
+
band: string;
|
|
20
|
+
count: number;
|
|
21
|
+
long_term: number;
|
|
22
|
+
short_term: number;
|
|
23
|
+
episodic: number;
|
|
24
|
+
}
|
|
25
|
+
export interface SalienceDistribution {
|
|
26
|
+
total: number;
|
|
27
|
+
bands: SalienceBand[];
|
|
28
|
+
/** The salience wall: how saturated long-term memory is. */
|
|
29
|
+
wall: {
|
|
30
|
+
ltmAtOrAbove095: number;
|
|
31
|
+
ltmTotal: number;
|
|
32
|
+
ltmPct: number;
|
|
33
|
+
};
|
|
34
|
+
/** Fragment pollution within the high-salience (≥0.95) cohort. */
|
|
35
|
+
fragments: {
|
|
36
|
+
atOrAbove095: number;
|
|
37
|
+
pctOfWall: number;
|
|
38
|
+
};
|
|
39
|
+
/** Human-readable WARN lines when a threshold is breached. */
|
|
40
|
+
warnings: string[];
|
|
41
|
+
}
|
|
42
|
+
export declare function looksLikeFragmentContent(content: unknown): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Compute the salience distribution + wall + fragment metrics for the store.
|
|
45
|
+
*
|
|
46
|
+
* @param db Optional better-sqlite3 handle (defaults to the live DB). Passing a
|
|
47
|
+
* handle keeps it unit-testable without touching the real store.
|
|
48
|
+
* @param project Optional project filter (NULL-project rows always included).
|
|
49
|
+
*/
|
|
50
|
+
export declare function getSalienceDistribution(db?: DB, project?: string): SalienceDistribution;
|
|
51
|
+
export interface HookYield {
|
|
52
|
+
hooks: Array<{
|
|
53
|
+
hook: string;
|
|
54
|
+
fires: number;
|
|
55
|
+
extracted: number;
|
|
56
|
+
avgPerFire: number;
|
|
57
|
+
}>;
|
|
58
|
+
totalFires: number;
|
|
59
|
+
totalExtracted: number;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Aggregate hook_invocations into a fires-vs-extracted yield per hook — the
|
|
63
|
+
* instrument behind EDITH's "pre-compact fired once vs 270 stop-fires" finding.
|
|
64
|
+
* Once the recall hook records an invocation (memories_extracted = injected
|
|
65
|
+
* count), the `prompt-recall` row becomes the cumulative "is the store actually
|
|
66
|
+
* being read into prompts?" signal. Pure read; tolerates a missing table.
|
|
67
|
+
*
|
|
68
|
+
* @param sinceIso Optional ISO-8601 lower bound on `invoked_at` (lexicographic,
|
|
69
|
+
* safe because telemetry writes ISO-8601 UTC). Omit for all-time.
|
|
70
|
+
*/
|
|
71
|
+
export declare function getHookYield(db?: DB, sinceIso?: string): HookYield;
|
|
72
|
+
export {};
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory-quality metrics (Phase 0, measure-first).
|
|
3
|
+
*
|
|
4
|
+
* Read-only instruments that make memory-quality problems QUERYABLE before any
|
|
5
|
+
* model change — so a fix can be validated against the same number, not vibes.
|
|
6
|
+
* Nothing here mutates or deletes; every function is a pure read of the store.
|
|
7
|
+
*
|
|
8
|
+
* The headline instrument is `getSalienceDistribution`: it quantifies the
|
|
9
|
+
* "salience wall" (raw salience saturates at 1.0 for long-lived memories, so it
|
|
10
|
+
* stops discriminating) and the fragment pollution within that wall — the exact
|
|
11
|
+
* shape the edith field report exposed (43/43 long-term at ≥0.99, 81% of them
|
|
12
|
+
* mid-sentence fragments). Re-run it after a change to prove the wall spread and
|
|
13
|
+
* the fragments fell.
|
|
14
|
+
*/
|
|
15
|
+
import { getDatabase } from '../database/init.js';
|
|
16
|
+
/** Salience band boundaries. The top boundary is 0.95 so the final band is the
|
|
17
|
+
* "wall" — the cohort that has ratcheted to (effectively) maximum salience. */
|
|
18
|
+
const BAND_EDGES = [0, 0.2, 0.4, 0.6, 0.8, 0.95, 1.0001];
|
|
19
|
+
const WALL_THRESHOLD = 0.95;
|
|
20
|
+
/** WARN thresholds (roadmap Phase 0): a store is unhealthy when most long-term
|
|
21
|
+
* memories have hit the wall, or when most of the wall is fragments. */
|
|
22
|
+
const WALL_LTM_PCT_WARN = 40;
|
|
23
|
+
const FRAGMENT_PCT_WARN = 30;
|
|
24
|
+
/**
|
|
25
|
+
* Measurement heuristic for "mid-sentence fragment": the content begins on a
|
|
26
|
+
* lowercase function word (sliced before the clause). Intentionally simpler
|
|
27
|
+
* than the ranking-time completeness factor in scripts/lib/salience.mjs — this
|
|
28
|
+
* is a histogram signal, not a recall gate, and "starts lowercase on a function
|
|
29
|
+
* word" captured ~81% of the edith fragment cohort. Kept local (no cross-module
|
|
30
|
+
* coupling into the hot path) and documented as an approximation.
|
|
31
|
+
*/
|
|
32
|
+
const FRAGMENT_LEAD_WORDS = new Set([
|
|
33
|
+
'and', 'or', 'but', 'nor', 'the', 'a', 'an', 'to', 'of', 'in', 'on', 'at',
|
|
34
|
+
'by', 'for', 'with', 'without', 'from', 'as', 'is', 'are', 'was', 'were',
|
|
35
|
+
'be', 'been', 'that', 'which', 'who', 'whose', 'because', 'so', 'if', 'when',
|
|
36
|
+
'while', 'than', 'then', 'into', 'onto', 'over', 'under', 'via', 'per',
|
|
37
|
+
'about', 'after', 'before', 'between', 'during',
|
|
38
|
+
]);
|
|
39
|
+
export function looksLikeFragmentContent(content) {
|
|
40
|
+
if (typeof content !== 'string')
|
|
41
|
+
return false;
|
|
42
|
+
const t = content.trim();
|
|
43
|
+
if (!t)
|
|
44
|
+
return false;
|
|
45
|
+
const firstLetter = t.match(/[A-Za-z]/);
|
|
46
|
+
if (!firstLetter || firstLetter[0] < 'a' || firstLetter[0] > 'z')
|
|
47
|
+
return false; // not a lowercase lead
|
|
48
|
+
// First word carrying letters (skip leading punctuation / em-dashes).
|
|
49
|
+
let first = '';
|
|
50
|
+
for (const w of t.split(/\s+/)) {
|
|
51
|
+
const c = w.toLowerCase().replace(/[^a-z']/g, '');
|
|
52
|
+
if (c) {
|
|
53
|
+
first = c;
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return FRAGMENT_LEAD_WORDS.has(first);
|
|
58
|
+
}
|
|
59
|
+
function bandLabel(lo, hi) {
|
|
60
|
+
const top = hi > 1 ? 1 : hi;
|
|
61
|
+
return `${lo.toFixed(2)}–${top.toFixed(2)}`;
|
|
62
|
+
}
|
|
63
|
+
function pct(n, d) {
|
|
64
|
+
return d > 0 ? Math.round((n / d) * 100) : 0;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Compute the salience distribution + wall + fragment metrics for the store.
|
|
68
|
+
*
|
|
69
|
+
* @param db Optional better-sqlite3 handle (defaults to the live DB). Passing a
|
|
70
|
+
* handle keeps it unit-testable without touching the real store.
|
|
71
|
+
* @param project Optional project filter (NULL-project rows always included).
|
|
72
|
+
*/
|
|
73
|
+
export function getSalienceDistribution(db = getDatabase(), project) {
|
|
74
|
+
const where = project ? 'WHERE (project = ? OR project IS NULL)' : '';
|
|
75
|
+
const args = project ? [project] : [];
|
|
76
|
+
const rows = db
|
|
77
|
+
.prepare(`SELECT type, salience, content FROM memories ${where}`)
|
|
78
|
+
.all(...args);
|
|
79
|
+
const bands = [];
|
|
80
|
+
for (let i = 0; i < BAND_EDGES.length - 1; i++) {
|
|
81
|
+
bands.push({ band: bandLabel(BAND_EDGES[i], BAND_EDGES[i + 1]), count: 0, long_term: 0, short_term: 0, episodic: 0 });
|
|
82
|
+
}
|
|
83
|
+
let ltmTotal = 0;
|
|
84
|
+
let ltmAtWall = 0;
|
|
85
|
+
let wallFragments = 0;
|
|
86
|
+
for (const r of rows) {
|
|
87
|
+
const s = typeof r.salience === 'number' ? r.salience : 0;
|
|
88
|
+
let bi = BAND_EDGES.findIndex((edge, i) => i > 0 && s < edge) - 1;
|
|
89
|
+
if (bi < 0)
|
|
90
|
+
bi = bands.length - 1; // clamp s>=1.0 into the top band
|
|
91
|
+
const band = bands[bi];
|
|
92
|
+
band.count++;
|
|
93
|
+
if (r.type === 'long_term')
|
|
94
|
+
band.long_term++;
|
|
95
|
+
else if (r.type === 'episodic')
|
|
96
|
+
band.episodic++;
|
|
97
|
+
else
|
|
98
|
+
band.short_term++;
|
|
99
|
+
if (r.type === 'long_term') {
|
|
100
|
+
ltmTotal++;
|
|
101
|
+
if (s >= WALL_THRESHOLD) {
|
|
102
|
+
ltmAtWall++;
|
|
103
|
+
if (looksLikeFragmentContent(r.content))
|
|
104
|
+
wallFragments++;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const ltmPct = pct(ltmAtWall, ltmTotal);
|
|
109
|
+
const fragPctOfWall = pct(wallFragments, ltmAtWall);
|
|
110
|
+
const warnings = [];
|
|
111
|
+
if (ltmPct > WALL_LTM_PCT_WARN) {
|
|
112
|
+
warnings.push(`Salience wall: ${ltmPct}% of long-term memories sit at salience ≥${WALL_THRESHOLD} (raw salience has stopped discriminating).`);
|
|
113
|
+
}
|
|
114
|
+
if (fragPctOfWall > FRAGMENT_PCT_WARN) {
|
|
115
|
+
warnings.push(`Fragment pollution: ${fragPctOfWall}% of the high-salience (≥${WALL_THRESHOLD}) cohort are mid-sentence fragments.`);
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
total: rows.length,
|
|
119
|
+
bands,
|
|
120
|
+
wall: { ltmAtOrAbove095: ltmAtWall, ltmTotal, ltmPct },
|
|
121
|
+
fragments: { atOrAbove095: wallFragments, pctOfWall: fragPctOfWall },
|
|
122
|
+
warnings,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Aggregate hook_invocations into a fires-vs-extracted yield per hook — the
|
|
127
|
+
* instrument behind EDITH's "pre-compact fired once vs 270 stop-fires" finding.
|
|
128
|
+
* Once the recall hook records an invocation (memories_extracted = injected
|
|
129
|
+
* count), the `prompt-recall` row becomes the cumulative "is the store actually
|
|
130
|
+
* being read into prompts?" signal. Pure read; tolerates a missing table.
|
|
131
|
+
*
|
|
132
|
+
* @param sinceIso Optional ISO-8601 lower bound on `invoked_at` (lexicographic,
|
|
133
|
+
* safe because telemetry writes ISO-8601 UTC). Omit for all-time.
|
|
134
|
+
*/
|
|
135
|
+
export function getHookYield(db = getDatabase(), sinceIso) {
|
|
136
|
+
let rows;
|
|
137
|
+
try {
|
|
138
|
+
const where = sinceIso ? 'WHERE invoked_at >= ?' : '';
|
|
139
|
+
const args = sinceIso ? [sinceIso] : [];
|
|
140
|
+
rows = db
|
|
141
|
+
.prepare(`SELECT hook_name, COUNT(*) AS fires, COALESCE(SUM(memories_extracted), 0) AS extracted
|
|
142
|
+
FROM hook_invocations ${where} GROUP BY hook_name`)
|
|
143
|
+
.all(...args);
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
// hook_invocations may not exist on a brand-new store.
|
|
147
|
+
return { hooks: [], totalFires: 0, totalExtracted: 0 };
|
|
148
|
+
}
|
|
149
|
+
const hooks = rows
|
|
150
|
+
.map((r) => ({
|
|
151
|
+
hook: r.hook_name,
|
|
152
|
+
fires: r.fires,
|
|
153
|
+
extracted: r.extracted,
|
|
154
|
+
avgPerFire: r.fires > 0 ? Math.round((r.extracted / r.fires) * 100) / 100 : 0,
|
|
155
|
+
}))
|
|
156
|
+
.sort((a, b) => b.fires - a.fires);
|
|
157
|
+
return {
|
|
158
|
+
hooks,
|
|
159
|
+
totalFires: hooks.reduce((n, h) => n + h.fires, 0),
|
|
160
|
+
totalExtracted: hooks.reduce((n, h) => n + h.extracted, 0),
|
|
161
|
+
};
|
|
162
|
+
}
|
package/dist/memory/store.d.ts
CHANGED
|
@@ -76,7 +76,7 @@ export declare function getMemoriesByType(type: MemoryType, limit?: number): Mem
|
|
|
76
76
|
* Get high-priority memories (for context injection)
|
|
77
77
|
*/
|
|
78
78
|
export declare function getHighPriorityMemories(limit?: number, project?: string, source?: DefenceSource, filters?: MemoryListFilters): Memory[];
|
|
79
|
-
/** Count high-priority (salience >= 0.6)
|
|
79
|
+
/** Count high-priority memories (effective salience >= 0.6) matching the filters. */
|
|
80
80
|
export declare function countHighPriorityMemories(project?: string, filters?: MemoryListFilters): number;
|
|
81
81
|
/**
|
|
82
82
|
* Get memory statistics
|
package/dist/memory/store.js
CHANGED
|
@@ -942,7 +942,11 @@ export function getMemoriesByType(type, limit = 50) {
|
|
|
942
942
|
*/
|
|
943
943
|
export function getHighPriorityMemories(limit = 10, project, source, filters) {
|
|
944
944
|
const db = getDatabase();
|
|
945
|
-
|
|
945
|
+
// Phase 1b: gate + order on EFFECTIVE salience (the decaying score), not raw
|
|
946
|
+
// salience. Raw salience is a one-way ratchet, so a stale long-lived row sits
|
|
947
|
+
// at 1.0 forever and used to top this no-re-rank path. COALESCE falls back to
|
|
948
|
+
// raw salience when decayed_score is unset (never-scored rows unaffected).
|
|
949
|
+
let sql = `SELECT * FROM memories WHERE COALESCE(decayed_score, salience) >= 0.6`;
|
|
946
950
|
const params = [];
|
|
947
951
|
if (project) {
|
|
948
952
|
sql += ' AND project = ?';
|
|
@@ -956,17 +960,17 @@ export function getHighPriorityMemories(limit = 10, project, source, filters) {
|
|
|
956
960
|
sql += ' AND category = ?';
|
|
957
961
|
params.push(filters.category);
|
|
958
962
|
}
|
|
959
|
-
sql += ' ORDER BY salience DESC, last_accessed DESC LIMIT ?';
|
|
963
|
+
sql += ' ORDER BY COALESCE(decayed_score, salience) DESC, last_accessed DESC LIMIT ?';
|
|
960
964
|
params.push(source ? limit * 2 : limit);
|
|
961
965
|
let rows = db.prepare(sql).all(...params);
|
|
962
966
|
if (source)
|
|
963
967
|
rows = filterRowsByAccess(rows, source);
|
|
964
968
|
return rows.slice(0, limit).map(rowToMemory);
|
|
965
969
|
}
|
|
966
|
-
/** Count high-priority (salience >= 0.6)
|
|
970
|
+
/** Count high-priority memories (effective salience >= 0.6) matching the filters. */
|
|
967
971
|
export function countHighPriorityMemories(project, filters) {
|
|
968
972
|
const db = getDatabase();
|
|
969
|
-
let sql = `SELECT COUNT(*) as count FROM memories WHERE salience >= 0.6`;
|
|
973
|
+
let sql = `SELECT COUNT(*) as count FROM memories WHERE COALESCE(decayed_score, salience) >= 0.6`;
|
|
970
974
|
const params = [];
|
|
971
975
|
if (project) {
|
|
972
976
|
sql += ' AND project = ?';
|
package/dist/server.js
CHANGED
|
@@ -361,7 +361,7 @@ Returns: architecture decisions, patterns, pending items, recent activity.`, {
|
|
|
361
361
|
return {
|
|
362
362
|
content: [{
|
|
363
363
|
type: 'text',
|
|
364
|
-
text: result.success ? formatStats(result.stats) : `Error: ${result.error}`
|
|
364
|
+
text: result.success ? formatStats(result.stats, result.salience) : `Error: ${result.error}`
|
|
365
365
|
}],
|
|
366
366
|
};
|
|
367
367
|
}));
|
package/dist/tools/context.d.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { z } from 'zod';
|
|
8
8
|
import { getMemoryStats } from '../memory/store.js';
|
|
9
|
+
import { type SalienceDistribution } from '../memory/metrics.js';
|
|
9
10
|
import { Memory, ContextSummary, ConsolidationResult } from '../memory/types.js';
|
|
10
11
|
export declare const getContextSchema: z.ZodObject<{
|
|
11
12
|
project: z.ZodOptional<z.ZodString>;
|
|
@@ -118,9 +119,10 @@ export declare function executeStats(input: {
|
|
|
118
119
|
}): {
|
|
119
120
|
success: boolean;
|
|
120
121
|
stats?: ReturnType<typeof getMemoryStats>;
|
|
122
|
+
salience?: SalienceDistribution;
|
|
121
123
|
error?: string;
|
|
122
124
|
};
|
|
123
|
-
export declare function formatStats(stats: ReturnType<typeof getMemoryStats
|
|
125
|
+
export declare function formatStats(stats: ReturnType<typeof getMemoryStats>, salience?: SalienceDistribution): string;
|
|
124
126
|
export declare const exportSchema: z.ZodObject<{
|
|
125
127
|
project: z.ZodOptional<z.ZodString>;
|
|
126
128
|
}, "strip", z.ZodTypeAny, {
|
package/dist/tools/context.js
CHANGED
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
import { z } from 'zod';
|
|
8
8
|
import { generateContextSummary, formatContextSummary, startSession, endSession, getSuggestedContext, consolidate, previewConsolidation, exportMemories, importMemories, } from '../memory/consolidate.js';
|
|
9
9
|
import { getMemoryStats } from '../memory/store.js';
|
|
10
|
+
import { getSalienceDistribution } from '../memory/metrics.js';
|
|
11
|
+
import { getDatabase } from '../database/init.js';
|
|
10
12
|
import { resolveProject } from '../context/project-context.js';
|
|
11
13
|
// Input schema for getting context
|
|
12
14
|
export const getContextSchema = z.object({
|
|
@@ -208,7 +210,9 @@ export function executeStats(input) {
|
|
|
208
210
|
const resolvedProject = resolveProject(input.project);
|
|
209
211
|
const projectFilter = resolvedProject ?? undefined;
|
|
210
212
|
const stats = getMemoryStats(projectFilter);
|
|
211
|
-
|
|
213
|
+
// Phase 0: include the salience-wall instrument so memory_stats surfaces it.
|
|
214
|
+
const salience = getSalienceDistribution(getDatabase(), projectFilter);
|
|
215
|
+
return { success: true, stats, salience };
|
|
212
216
|
}
|
|
213
217
|
catch (error) {
|
|
214
218
|
return {
|
|
@@ -217,7 +221,7 @@ export function executeStats(input) {
|
|
|
217
221
|
};
|
|
218
222
|
}
|
|
219
223
|
}
|
|
220
|
-
export function formatStats(stats) {
|
|
224
|
+
export function formatStats(stats, salience) {
|
|
221
225
|
const lines = [
|
|
222
226
|
'## Memory Statistics',
|
|
223
227
|
'',
|
|
@@ -233,6 +237,13 @@ export function formatStats(stats) {
|
|
|
233
237
|
for (const [category, count] of Object.entries(stats.byCategory)) {
|
|
234
238
|
lines.push(` - ${category}: ${count}`);
|
|
235
239
|
}
|
|
240
|
+
// Phase 0: the salience-wall instrument. Raw salience saturates for surviving
|
|
241
|
+
// memories, so a high wall % means the score has stopped discriminating.
|
|
242
|
+
if (salience) {
|
|
243
|
+
lines.push('', '### Memory Quality', ` - At salience wall (≥0.95): ${salience.wall.ltmAtOrAbove095}/${salience.wall.ltmTotal} long-term (${salience.wall.ltmPct}%)`, ` - Fragments in wall: ${salience.fragments.atOrAbove095} (${salience.fragments.pctOfWall}%)`);
|
|
244
|
+
for (const w of salience.warnings)
|
|
245
|
+
lines.push(` ⚠ ${w}`);
|
|
246
|
+
}
|
|
236
247
|
return lines.join('\n');
|
|
237
248
|
}
|
|
238
249
|
// Export/Import
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "shieldcortex",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.34.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",
|
|
@@ -22,6 +22,7 @@ import { truncatePreservingWords } from './lib/truncate.mjs';
|
|
|
22
22
|
import { compareRecallResults } from './lib/recall-rank.mjs';
|
|
23
23
|
import { computeEffectiveSalience } from './lib/salience.mjs';
|
|
24
24
|
import { writeRecallLog } from './lib/recall-log.mjs';
|
|
25
|
+
import { recordHookInvocation } from './lib/telemetry.mjs';
|
|
25
26
|
import { filterByRelevance, extractQueryTerms } from './lib/recall-relevance.mjs';
|
|
26
27
|
|
|
27
28
|
// ==================== CONFIG ====================
|
|
@@ -535,6 +536,11 @@ process.stdin.on('end', async () => {
|
|
|
535
536
|
UPDATE memories SET access_count = access_count + 1, last_accessed = datetime('now')
|
|
536
537
|
WHERE id IN (${placeholders})
|
|
537
538
|
`).run(...ids);
|
|
539
|
+
// Phase 0 measurement: record the recall injection in hook_invocations
|
|
540
|
+
// (reusing the connection we already opened). This is the cumulative
|
|
541
|
+
// "is the store actually read into prompts?" signal — fires = recalls
|
|
542
|
+
// that injected ≥1, memories_extracted = count injected. Best-effort.
|
|
543
|
+
recordHookInvocation(writeDb, { hookName: 'prompt-recall', memoriesExtracted: memories.length });
|
|
538
544
|
writeDb.close();
|
|
539
545
|
} catch {
|
|
540
546
|
// Non-critical — don't block on access count update
|
|
File without changes
|
|
File without changes
|