shieldcortex 4.33.1 → 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/integrations/openclaw-plugin-state.d.ts +29 -0
- package/dist/integrations/openclaw-plugin-state.js +57 -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/setup/openclaw.js +18 -7
- 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/{gvx-eW7HASm7hftjfMdZh → bUb5MH6iktj_Ue6clRY9Y}/_buildManifest.js +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{gvx-eW7HASm7hftjfMdZh → bUb5MH6iktj_Ue6clRY9Y}/_clientMiddlewareManifest.json +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{gvx-eW7HASm7hftjfMdZh → 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) {
|
|
@@ -40,6 +40,35 @@ export interface EoverrideRiskPin {
|
|
|
40
40
|
* Pure — takes a parsed manifest object so it can be unit-tested without disk.
|
|
41
41
|
*/
|
|
42
42
|
export declare function findEoverrideRiskPins(manifest: unknown): EoverrideRiskPin[];
|
|
43
|
+
/**
|
|
44
|
+
* Find LATENT EOVERRIDE pins: packages present as BOTH a managed-peer
|
|
45
|
+
* dependency pin AND a managed override, REGARDLESS of whether the versions
|
|
46
|
+
* currently match.
|
|
47
|
+
*
|
|
48
|
+
* findEoverrideRiskPins only catches a *current* mismatch, but the field
|
|
49
|
+
* failure on edith (2026-06-14) proved the mismatch is created DURING
|
|
50
|
+
* `openclaw plugins install`: OpenClaw refreshes the override from its bundled
|
|
51
|
+
* workspace (hono 4.12.18 → 4.12.21) while preserving the stale dependency pin
|
|
52
|
+
* via `nextDependencies[x] = dependencies[x] ?? spec`. At rest the manifest
|
|
53
|
+
* looked clean, so repair stripped nothing and its own reinstall threw
|
|
54
|
+
* EOVERRIDE. Any co-present pin is therefore a latent landmine — the dep pin
|
|
55
|
+
* and the override are maintained by independent mechanisms that drift on the
|
|
56
|
+
* next override bump. Stripping the dep pin lets the reinstall re-derive it at
|
|
57
|
+
* the (current) override version, so they converge.
|
|
58
|
+
*
|
|
59
|
+
* Pure — takes a parsed manifest object so it can be unit-tested without disk.
|
|
60
|
+
*/
|
|
61
|
+
export declare function findLatentEoverridePins(manifest: unknown): string[];
|
|
62
|
+
/**
|
|
63
|
+
* Remove the named managed-peer pins from a project manifest's `dependencies`
|
|
64
|
+
* AND its `openclaw.managedPeerDependencies` tracking list, in place, returning
|
|
65
|
+
* the same object. Overrides are deliberately left untouched — OpenClaw owns
|
|
66
|
+
* those and the override must remain to govern the re-derived version. This is
|
|
67
|
+
* the proven manual remediation: with the dep pin gone, the next install
|
|
68
|
+
* re-derives it at the current override version instead of preserving a stale
|
|
69
|
+
* value.
|
|
70
|
+
*/
|
|
71
|
+
export declare function stripManagedPinsFromManifest(manifest: Record<string, unknown>, names: string[]): Record<string, unknown>;
|
|
43
72
|
/** True when openclaw.json explicitly disables the realtime plugin
|
|
44
73
|
* (`plugins.entries.shieldcortex-realtime.enabled === false`) — the state
|
|
45
74
|
* OpenClaw leaves it in after an install failure auto-disables it. */
|
|
@@ -173,6 +173,63 @@ export function findEoverrideRiskPins(manifest) {
|
|
|
173
173
|
}
|
|
174
174
|
return risks;
|
|
175
175
|
}
|
|
176
|
+
/**
|
|
177
|
+
* Find LATENT EOVERRIDE pins: packages present as BOTH a managed-peer
|
|
178
|
+
* dependency pin AND a managed override, REGARDLESS of whether the versions
|
|
179
|
+
* currently match.
|
|
180
|
+
*
|
|
181
|
+
* findEoverrideRiskPins only catches a *current* mismatch, but the field
|
|
182
|
+
* failure on edith (2026-06-14) proved the mismatch is created DURING
|
|
183
|
+
* `openclaw plugins install`: OpenClaw refreshes the override from its bundled
|
|
184
|
+
* workspace (hono 4.12.18 → 4.12.21) while preserving the stale dependency pin
|
|
185
|
+
* via `nextDependencies[x] = dependencies[x] ?? spec`. At rest the manifest
|
|
186
|
+
* looked clean, so repair stripped nothing and its own reinstall threw
|
|
187
|
+
* EOVERRIDE. Any co-present pin is therefore a latent landmine — the dep pin
|
|
188
|
+
* and the override are maintained by independent mechanisms that drift on the
|
|
189
|
+
* next override bump. Stripping the dep pin lets the reinstall re-derive it at
|
|
190
|
+
* the (current) override version, so they converge.
|
|
191
|
+
*
|
|
192
|
+
* Pure — takes a parsed manifest object so it can be unit-tested without disk.
|
|
193
|
+
*/
|
|
194
|
+
export function findLatentEoverridePins(manifest) {
|
|
195
|
+
if (!manifest || typeof manifest !== 'object')
|
|
196
|
+
return [];
|
|
197
|
+
const m = manifest;
|
|
198
|
+
const deps = m.dependencies && typeof m.dependencies === 'object' ? m.dependencies : {};
|
|
199
|
+
const overrides = m.overrides && typeof m.overrides === 'object' ? m.overrides : {};
|
|
200
|
+
const latent = [];
|
|
201
|
+
for (const [name, depV] of Object.entries(deps)) {
|
|
202
|
+
if (typeof depV === 'string' && typeof overrides[name] === 'string')
|
|
203
|
+
latent.push(name);
|
|
204
|
+
}
|
|
205
|
+
return latent;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Remove the named managed-peer pins from a project manifest's `dependencies`
|
|
209
|
+
* AND its `openclaw.managedPeerDependencies` tracking list, in place, returning
|
|
210
|
+
* the same object. Overrides are deliberately left untouched — OpenClaw owns
|
|
211
|
+
* those and the override must remain to govern the re-derived version. This is
|
|
212
|
+
* the proven manual remediation: with the dep pin gone, the next install
|
|
213
|
+
* re-derives it at the current override version instead of preserving a stale
|
|
214
|
+
* value.
|
|
215
|
+
*/
|
|
216
|
+
export function stripManagedPinsFromManifest(manifest, names) {
|
|
217
|
+
if (!manifest || typeof manifest !== 'object' || names.length === 0)
|
|
218
|
+
return manifest;
|
|
219
|
+
const deps = manifest.dependencies;
|
|
220
|
+
if (deps && typeof deps === 'object') {
|
|
221
|
+
for (const n of names)
|
|
222
|
+
delete deps[n];
|
|
223
|
+
}
|
|
224
|
+
const oc = manifest.openclaw;
|
|
225
|
+
if (oc && typeof oc === 'object') {
|
|
226
|
+
const mpd = oc.managedPeerDependencies;
|
|
227
|
+
if (Array.isArray(mpd)) {
|
|
228
|
+
oc.managedPeerDependencies = mpd.filter((x) => !names.includes(x));
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return manifest;
|
|
232
|
+
}
|
|
176
233
|
/** True when openclaw.json explicitly disables the realtime plugin
|
|
177
234
|
* (`plugins.entries.shieldcortex-realtime.enabled === false`) — the state
|
|
178
235
|
* OpenClaw leaves it in after an install failure auto-disables it. */
|
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
|
}));
|