shieldcortex 4.14.11 → 4.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/dashboard/.next/standalone/dashboard/.next/BUILD_ID +1 -1
- package/dashboard/.next/standalone/dashboard/.next/build-manifest.json +2 -2
- package/dashboard/.next/standalone/dashboard/.next/prerender-manifest.json +3 -3
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/pages/404.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/pages/500.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/server-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/server-reference-manifest.json +1 -1
- package/dist/cli/migrate-legacy.d.ts +18 -0
- package/dist/cli/migrate-legacy.js +96 -0
- package/dist/cloud/cli.js +25 -1
- package/dist/cloud/config.d.ts +19 -0
- package/dist/cloud/config.js +72 -0
- package/dist/database/init.js +21 -0
- package/dist/database/schema.sql +1 -0
- package/dist/database/seed-firewall-rules.d.ts +21 -0
- package/dist/database/seed-firewall-rules.js +105 -0
- package/dist/defence/custom-rules/store.d.ts +4 -1
- package/dist/defence/custom-rules/store.js +7 -3
- package/dist/defence/firewall/instruction-detector.js +15 -0
- package/dist/defence/pipeline.js +19 -13
- package/dist/defence/types.d.ts +1 -1
- package/dist/memory/ranker/graph-rank.d.ts +39 -0
- package/dist/memory/ranker/graph-rank.js +186 -0
- package/dist/memory/ranker/index.d.ts +74 -0
- package/dist/memory/ranker/index.js +170 -0
- package/dist/memory/ranker/rrf.d.ts +41 -0
- package/dist/memory/ranker/rrf.js +54 -0
- package/dist/memory/search-recall.js +196 -65
- package/dist/memory/types.d.ts +18 -0
- package/dist/memory/types.js +6 -0
- package/hooks/openclaw/cortex-memory/HOOK.md +37 -0
- package/package.json +3 -1
- package/plugins/openclaw/dist/openclaw.plugin.json +1 -1
- package/scripts/lib/extract-memorable-segments.mjs +555 -0
- package/scripts/lib/save-memory.mjs +198 -13
- package/scripts/pre-compact-hook.mjs +19 -375
- package/scripts/session-end-hook.mjs +16 -307
- package/scripts/stop-hook.mjs +28 -159
- /package/dashboard/.next/standalone/dashboard/.next/static/{InYbgmj1l661AgpmCj6zr → 6WjF0Utj3STrFgg7vZVPK}/_buildManifest.js +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{InYbgmj1l661AgpmCj6zr → 6WjF0Utj3STrFgg7vZVPK}/_clientMiddlewareManifest.json +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{InYbgmj1l661AgpmCj6zr → 6WjF0Utj3STrFgg7vZVPK}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
1
|
+
<!DOCTYPE html><!--6WjF0Utj3STrFgg7vZVPK--><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/2473c16c0c2f6b5f.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/chunks/bf725d638cce46d4.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/d878b929b21636c4.js"/><script src="/_next/static/chunks/d9ad4c35fc865415.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-79214717b23f7452.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/2473c16c0c2f6b5f.css\",\"style\"]\n:HL[\"/_next/static/chunks/bf725d638cce46d4.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/2473c16c0c2f6b5f.css\",\"style\"]\n:HL[\"/_next/static/chunks/bf725d638cce46d4.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"6WjF0Utj3STrFgg7vZVPK\",\"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/2473c16c0c2f6b5f.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/bf725d638cce46d4.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><!--6WjF0Utj3STrFgg7vZVPK--><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/d9ad4c35fc865415.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-79214717b23f7452.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\":\"6WjF0Utj3STrFgg7vZVPK\",\"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>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"
|
|
1
|
+
self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"50IBPSPmdPYtE7HYOD5EnTtXGu3VRtn/m36sitpikkw=\"\n}"
|
|
@@ -25,6 +25,24 @@ interface MigrationReport {
|
|
|
25
25
|
}
|
|
26
26
|
export declare function migrateLegacy(options?: MigrateOptions): MigrationReport;
|
|
27
27
|
export declare function handleMemoriesCommand(args: string[]): Promise<void>;
|
|
28
|
+
interface PurgeMalformedOptions {
|
|
29
|
+
dbPath?: string;
|
|
30
|
+
backupDir?: string;
|
|
31
|
+
dryRun: boolean;
|
|
32
|
+
}
|
|
33
|
+
interface PurgeMatch {
|
|
34
|
+
id: number;
|
|
35
|
+
title: string;
|
|
36
|
+
reason: string;
|
|
37
|
+
}
|
|
38
|
+
interface PurgeReport {
|
|
39
|
+
dryRun: boolean;
|
|
40
|
+
scanned: number;
|
|
41
|
+
matched: PurgeMatch[];
|
|
42
|
+
deleted: number;
|
|
43
|
+
backupPath?: string;
|
|
44
|
+
}
|
|
45
|
+
export declare function purgeMalformed(opts: PurgeMalformedOptions): Promise<PurgeReport>;
|
|
28
46
|
interface RepairOptions {
|
|
29
47
|
/** Path to memories.db (defaults to ~/.shieldcortex/memories.db) */
|
|
30
48
|
dbPath?: string;
|
|
@@ -275,6 +275,15 @@ function printUsage() {
|
|
|
275
275
|
console.log(' to their canonical owner-repo key (#42). DRY-RUN BY DEFAULT.');
|
|
276
276
|
console.log(' Backup auto-saved before any rewrite; per-rewrite log written');
|
|
277
277
|
console.log(' to ~/.shieldcortex/logs/project-key-repair-<ts>.json.');
|
|
278
|
+
console.log('');
|
|
279
|
+
console.log(' purge --malformed [--dry-run] [--execute]');
|
|
280
|
+
console.log(' [--backup-dir <path>]');
|
|
281
|
+
console.log(' Scan the memories table and delete rows that match the');
|
|
282
|
+
console.log(' hardened chunker rejection rules — imperative tool-call');
|
|
283
|
+
console.log(' directives, bare-imperative starts (negation drop), email-');
|
|
284
|
+
console.log(' body bleed, path-label fragments, etc. Use --dry-run to');
|
|
285
|
+
console.log(' preview matches; --execute writes a full DB copy to the');
|
|
286
|
+
console.log(' backup dir (default ~/.shieldcortex/backups/) before delete.');
|
|
278
287
|
}
|
|
279
288
|
export async function handleMemoriesCommand(args) {
|
|
280
289
|
const sub = args[0];
|
|
@@ -300,9 +309,96 @@ export async function handleMemoriesCommand(args) {
|
|
|
300
309
|
await runRepairProjectKeys(args.slice(1));
|
|
301
310
|
return;
|
|
302
311
|
}
|
|
312
|
+
if (sub === 'purge') {
|
|
313
|
+
await runPurge(args.slice(1));
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
303
316
|
printUsage();
|
|
304
317
|
process.exit(1);
|
|
305
318
|
}
|
|
319
|
+
export async function purgeMalformed(opts) {
|
|
320
|
+
const dbPath = opts.dbPath ?? DEFAULT_TARGET;
|
|
321
|
+
const backupDir = opts.backupDir ?? path.join(os.homedir(), '.shieldcortex', 'backups');
|
|
322
|
+
if (!fs.existsSync(dbPath)) {
|
|
323
|
+
throw new Error(`memories DB not found at ${dbPath}`);
|
|
324
|
+
}
|
|
325
|
+
// @ts-expect-error -- importing a .mjs hook util
|
|
326
|
+
const mod = await import('../../scripts/lib/extract-memorable-segments.mjs');
|
|
327
|
+
const shouldRejectCandidate = mod.shouldRejectCandidate;
|
|
328
|
+
const db = new Database(dbPath);
|
|
329
|
+
db.pragma('busy_timeout = 10000');
|
|
330
|
+
const matches = [];
|
|
331
|
+
let scanned = 0;
|
|
332
|
+
try {
|
|
333
|
+
const rows = db.prepare('SELECT id, title, content FROM memories').all();
|
|
334
|
+
scanned = rows.length;
|
|
335
|
+
for (const row of rows) {
|
|
336
|
+
const verdict = shouldRejectCandidate({ title: row.title ?? '', content: row.content ?? '' });
|
|
337
|
+
if (verdict.rejected) {
|
|
338
|
+
matches.push({ id: row.id, title: row.title ?? '', reason: verdict.reason });
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
const report = {
|
|
342
|
+
dryRun: opts.dryRun,
|
|
343
|
+
scanned,
|
|
344
|
+
matched: matches,
|
|
345
|
+
deleted: 0,
|
|
346
|
+
};
|
|
347
|
+
if (opts.dryRun || matches.length === 0) {
|
|
348
|
+
return report;
|
|
349
|
+
}
|
|
350
|
+
// Write a full DB backup before any delete.
|
|
351
|
+
fs.mkdirSync(backupDir, { recursive: true });
|
|
352
|
+
const stamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
353
|
+
const backupPath = path.join(backupDir, `memories-purge-${stamp}.db`);
|
|
354
|
+
db.exec(`VACUUM INTO '${backupPath.replace(/'/g, "''")}'`);
|
|
355
|
+
report.backupPath = backupPath;
|
|
356
|
+
const placeholders = matches.map(() => '?').join(',');
|
|
357
|
+
const txn = db.transaction(() => {
|
|
358
|
+
const r = db.prepare(`DELETE FROM memories WHERE id IN (${placeholders})`).run(...matches.map(m => m.id));
|
|
359
|
+
report.deleted = r.changes;
|
|
360
|
+
});
|
|
361
|
+
txn();
|
|
362
|
+
return report;
|
|
363
|
+
}
|
|
364
|
+
finally {
|
|
365
|
+
db.close();
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
async function runPurge(args) {
|
|
369
|
+
if (!args.includes('--malformed')) {
|
|
370
|
+
console.error('Usage: shieldcortex memories purge --malformed [--dry-run] [--execute] [--backup-dir <path>]');
|
|
371
|
+
process.exit(1);
|
|
372
|
+
}
|
|
373
|
+
// Default to dry-run unless --execute is explicitly passed. --dry-run is
|
|
374
|
+
// accepted for symmetry / scriptability.
|
|
375
|
+
const execute = args.includes('--execute');
|
|
376
|
+
const dryRun = !execute;
|
|
377
|
+
const backupDir = flagValue(args, '--backup-dir');
|
|
378
|
+
const report = await purgeMalformed({ dryRun, backupDir });
|
|
379
|
+
const banner = report.dryRun ? '[DRY RUN] ' : '';
|
|
380
|
+
console.log(`${banner}Scanned ${report.scanned} memories; flagged ${report.matched.length}.`);
|
|
381
|
+
if (report.matched.length > 0) {
|
|
382
|
+
console.log('');
|
|
383
|
+
console.log('Matches:');
|
|
384
|
+
for (const m of report.matched.slice(0, 50)) {
|
|
385
|
+
console.log(` #${String(m.id).padStart(5)} ${m.reason.padEnd(28)} ${m.title.slice(0, 80)}`);
|
|
386
|
+
}
|
|
387
|
+
if (report.matched.length > 50) {
|
|
388
|
+
console.log(` … and ${report.matched.length - 50} more`);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
if (report.dryRun && report.matched.length > 0) {
|
|
392
|
+
console.log('');
|
|
393
|
+
console.log('Re-run with --execute to delete (a full DB backup is written first).');
|
|
394
|
+
}
|
|
395
|
+
else if (!report.dryRun) {
|
|
396
|
+
console.log('');
|
|
397
|
+
console.log(`Deleted: ${report.deleted}`);
|
|
398
|
+
if (report.backupPath)
|
|
399
|
+
console.log(`Backup: ${report.backupPath}`);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
306
402
|
function parseMapFlags(args) {
|
|
307
403
|
const map = {};
|
|
308
404
|
for (let i = 0; i < args.length; i++) {
|
package/dist/cloud/cli.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { getCloudConfig, setCloudConfig, getDefenceMode, setDefenceMode, getVerifyConfig, setVerifyConfig, getReviewCopilotConfig, getOpenClawAutoMemory, setOpenClawAutoMemory, isProactiveRecallEnabled, setProactiveRecall, restore410Defaults, } from './config.js';
|
|
1
|
+
import { getCloudConfig, setCloudConfig, getDefenceMode, setDefenceMode, getVerifyConfig, setVerifyConfig, getReviewCopilotConfig, getOpenClawAutoMemory, setOpenClawAutoMemory, isProactiveRecallEnabled, setProactiveRecall, restore410Defaults, getRankerConfig, setRankerConfig, } from './config.js';
|
|
2
|
+
const VALID_RANKER_ENGINES = ['rrf', 'legacy'];
|
|
2
3
|
import { syncAllGraphToCloud } from './graph-sync.js';
|
|
3
4
|
import { syncAllMemoriesToCloud } from './memory-sync.js';
|
|
4
5
|
import { isFeatureEnabled } from '../license/gate.js';
|
|
@@ -13,6 +14,8 @@ export function handleCloudConfig(args) {
|
|
|
13
14
|
const verify = getVerifyConfig();
|
|
14
15
|
const reviewCopilot = getReviewCopilotConfig();
|
|
15
16
|
const openclawAutoMemory = getOpenClawAutoMemory();
|
|
17
|
+
const ranker = getRankerConfig();
|
|
18
|
+
const rankerOverridden = !!process.env.SHIELDCORTEX_RANKER;
|
|
16
19
|
console.log('\nShieldCortex Configuration:');
|
|
17
20
|
console.log(` Defence Mode: ${mode}`);
|
|
18
21
|
console.log(` Cloud Enabled: ${config.cloudEnabled ? 'Yes' : 'No'}`);
|
|
@@ -23,6 +26,7 @@ export function handleCloudConfig(args) {
|
|
|
23
26
|
console.log(` Local AI Explainer: ${reviewCopilot.enabled ? 'Enabled' : 'Disabled'} (${reviewCopilot.modelId})`);
|
|
24
27
|
console.log(` OpenClaw Auto-Memory: ${openclawAutoMemory ? 'Enabled' : 'Disabled'}`);
|
|
25
28
|
console.log(` Proactive Recall: ${isProactiveRecallEnabled() ? 'Enabled' : 'Disabled'}`);
|
|
29
|
+
console.log(` Retrieval Ranker: ${ranker.engine}${rankerOverridden ? ' (env override)' : ''} (k=${ranker.rrfK}, weights fts=${ranker.weights.fts} vector=${ranker.weights.vector} graph=${ranker.weights.graph})`);
|
|
26
30
|
console.log('');
|
|
27
31
|
return;
|
|
28
32
|
}
|
|
@@ -130,6 +134,25 @@ export function handleCloudConfig(args) {
|
|
|
130
134
|
console.log('if you need that behaviour.');
|
|
131
135
|
changed = true;
|
|
132
136
|
}
|
|
137
|
+
const rankerIdx = args.indexOf('--ranker');
|
|
138
|
+
if (rankerIdx !== -1) {
|
|
139
|
+
const value = args[rankerIdx + 1];
|
|
140
|
+
if (!value) {
|
|
141
|
+
console.error('Missing value for --ranker. Use rrf or legacy.');
|
|
142
|
+
process.exit(1);
|
|
143
|
+
}
|
|
144
|
+
const engine = value.toLowerCase();
|
|
145
|
+
if (!VALID_RANKER_ENGINES.includes(engine)) {
|
|
146
|
+
console.error(`Invalid ranker engine: ${value}. Must be one of: ${VALID_RANKER_ENGINES.join(', ')}`);
|
|
147
|
+
process.exit(1);
|
|
148
|
+
}
|
|
149
|
+
setRankerConfig({ engine: engine });
|
|
150
|
+
console.log(`Ranker engine set to: ${engine}`);
|
|
151
|
+
if (process.env.SHIELDCORTEX_RANKER) {
|
|
152
|
+
console.log('Note: SHIELDCORTEX_RANKER env var is set and will override config.json at runtime.');
|
|
153
|
+
}
|
|
154
|
+
changed = true;
|
|
155
|
+
}
|
|
133
156
|
const proactiveRecallIdx = args.indexOf('--proactive-recall');
|
|
134
157
|
if (proactiveRecallIdx !== -1) {
|
|
135
158
|
const value = args[proactiveRecallIdx + 1];
|
|
@@ -159,6 +182,7 @@ export function handleCloudConfig(args) {
|
|
|
159
182
|
console.log(' --cloud-status Show current configuration');
|
|
160
183
|
console.log(' --openclaw-auto-memory <true|false> Extract memories from OpenClaw LLM output (default: off)');
|
|
161
184
|
console.log(' --proactive-recall <true|false> Inject SC memory into prompts (default: off — adds latency)');
|
|
185
|
+
console.log(' --ranker <rrf|legacy> Hybrid retrieval engine (default: rrf; SHIELDCORTEX_RANKER env overrides)');
|
|
162
186
|
console.log(' --restore-4.10-defaults Restore pre-v4.11.0 defaults (recall on, strict interceptor, minimal preamble)');
|
|
163
187
|
console.log('');
|
|
164
188
|
console.log('LLM Verification:');
|
package/dist/cloud/config.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { RankerConfig } from '../memory/types.js';
|
|
1
2
|
export interface CloudConfig {
|
|
2
3
|
cloudApiKey: string | null;
|
|
3
4
|
cloudBaseUrl: string;
|
|
@@ -76,6 +77,24 @@ export declare function getReviewCopilotConfig(): ReviewCopilotConfig;
|
|
|
76
77
|
* Persists local Review Copilot config.
|
|
77
78
|
*/
|
|
78
79
|
export declare function setReviewCopilotConfig(updates: Partial<ReviewCopilotConfig>): void;
|
|
80
|
+
/**
|
|
81
|
+
* Resolved ranker configuration.
|
|
82
|
+
*
|
|
83
|
+
* Resolution order (env wins so it can be flipped per-process without
|
|
84
|
+
* editing config.json):
|
|
85
|
+
* 1. `SHIELDCORTEX_RANKER` env var (`rrf` | `legacy`)
|
|
86
|
+
* 2. `ranker.engine` in `~/.shieldcortex/config.json`
|
|
87
|
+
* 3. Default (`rrf`)
|
|
88
|
+
*
|
|
89
|
+
* `rrfK` and `weights` only come from config.json (no env override) —
|
|
90
|
+
* tuning these is a deliberate config change, not a per-process knob.
|
|
91
|
+
*/
|
|
92
|
+
export declare function getRankerConfig(): RankerConfig;
|
|
93
|
+
/**
|
|
94
|
+
* Persists ranker config to `~/.shieldcortex/config.json`. Only the
|
|
95
|
+
* fields supplied in `updates` are written; other fields are preserved.
|
|
96
|
+
*/
|
|
97
|
+
export declare function setRankerConfig(updates: Partial<RankerConfig>): void;
|
|
79
98
|
export interface OpenClawMemoryConfig {
|
|
80
99
|
autoMemory: boolean;
|
|
81
100
|
dedupe: boolean;
|
package/dist/cloud/config.js
CHANGED
|
@@ -390,6 +390,78 @@ export function setReviewCopilotConfig(updates) {
|
|
|
390
390
|
};
|
|
391
391
|
writeRawConfig(raw);
|
|
392
392
|
}
|
|
393
|
+
// ── Ranker Config ─────────────────────────────────────
|
|
394
|
+
const DEFAULT_RANKER_CONFIG = {
|
|
395
|
+
engine: 'rrf',
|
|
396
|
+
rrfK: 60,
|
|
397
|
+
weights: { fts: 0.4, vector: 0.6, graph: 0.3 },
|
|
398
|
+
};
|
|
399
|
+
const VALID_RANKER_ENGINES = ['rrf', 'legacy'];
|
|
400
|
+
function parseEngine(value) {
|
|
401
|
+
if (typeof value !== 'string')
|
|
402
|
+
return null;
|
|
403
|
+
const normalized = value.trim().toLowerCase();
|
|
404
|
+
return VALID_RANKER_ENGINES.includes(normalized)
|
|
405
|
+
? normalized
|
|
406
|
+
: null;
|
|
407
|
+
}
|
|
408
|
+
function parseWeights(value) {
|
|
409
|
+
if (!value || typeof value !== 'object')
|
|
410
|
+
return null;
|
|
411
|
+
const v = value;
|
|
412
|
+
const fts = typeof v.fts === 'number' ? v.fts : null;
|
|
413
|
+
const vector = typeof v.vector === 'number' ? v.vector : null;
|
|
414
|
+
const graph = typeof v.graph === 'number' ? v.graph : null;
|
|
415
|
+
if (fts === null || vector === null || graph === null)
|
|
416
|
+
return null;
|
|
417
|
+
return { fts, vector, graph };
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Resolved ranker configuration.
|
|
421
|
+
*
|
|
422
|
+
* Resolution order (env wins so it can be flipped per-process without
|
|
423
|
+
* editing config.json):
|
|
424
|
+
* 1. `SHIELDCORTEX_RANKER` env var (`rrf` | `legacy`)
|
|
425
|
+
* 2. `ranker.engine` in `~/.shieldcortex/config.json`
|
|
426
|
+
* 3. Default (`rrf`)
|
|
427
|
+
*
|
|
428
|
+
* `rrfK` and `weights` only come from config.json (no env override) —
|
|
429
|
+
* tuning these is a deliberate config change, not a per-process knob.
|
|
430
|
+
*/
|
|
431
|
+
export function getRankerConfig() {
|
|
432
|
+
const raw = readRawConfig();
|
|
433
|
+
const fileRanker = raw.ranker && typeof raw.ranker === 'object'
|
|
434
|
+
? raw.ranker
|
|
435
|
+
: null;
|
|
436
|
+
const envEngine = parseEngine(process.env.SHIELDCORTEX_RANKER);
|
|
437
|
+
const fileEngine = fileRanker ? parseEngine(fileRanker.engine) : null;
|
|
438
|
+
const engine = envEngine ?? fileEngine ?? DEFAULT_RANKER_CONFIG.engine;
|
|
439
|
+
const fileK = fileRanker && typeof fileRanker.rrfK === 'number' && fileRanker.rrfK > 0
|
|
440
|
+
? fileRanker.rrfK
|
|
441
|
+
: null;
|
|
442
|
+
const rrfK = fileK ?? DEFAULT_RANKER_CONFIG.rrfK;
|
|
443
|
+
const fileWeights = fileRanker ? parseWeights(fileRanker.weights) : null;
|
|
444
|
+
const weights = fileWeights ?? DEFAULT_RANKER_CONFIG.weights;
|
|
445
|
+
return { engine, rrfK, weights };
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Persists ranker config to `~/.shieldcortex/config.json`. Only the
|
|
449
|
+
* fields supplied in `updates` are written; other fields are preserved.
|
|
450
|
+
*/
|
|
451
|
+
export function setRankerConfig(updates) {
|
|
452
|
+
const raw = readRawConfig();
|
|
453
|
+
const existing = raw.ranker && typeof raw.ranker === 'object'
|
|
454
|
+
? raw.ranker
|
|
455
|
+
: {};
|
|
456
|
+
if (updates.engine !== undefined)
|
|
457
|
+
existing.engine = updates.engine;
|
|
458
|
+
if (updates.rrfK !== undefined)
|
|
459
|
+
existing.rrfK = updates.rrfK;
|
|
460
|
+
if (updates.weights !== undefined)
|
|
461
|
+
existing.weights = updates.weights;
|
|
462
|
+
raw.ranker = existing;
|
|
463
|
+
writeRawConfig(raw);
|
|
464
|
+
}
|
|
393
465
|
const DEFAULT_OPENCLAW_MEMORY_CONFIG = {
|
|
394
466
|
autoMemory: true,
|
|
395
467
|
dedupe: true,
|
package/dist/database/init.js
CHANGED
|
@@ -8,6 +8,7 @@ import { homedir } from 'os';
|
|
|
8
8
|
import { fileURLToPath } from 'url';
|
|
9
9
|
import { execSync } from 'child_process';
|
|
10
10
|
import { randomUUID } from 'crypto';
|
|
11
|
+
import { seedDefaultFirewallRules } from './seed-firewall-rules.js';
|
|
11
12
|
const _currentFile = fileURLToPath(import.meta.url);
|
|
12
13
|
const _currentDir = dirname(_currentFile);
|
|
13
14
|
let db = null;
|
|
@@ -907,10 +908,12 @@ function runMigrations(database) {
|
|
|
907
908
|
condition_value TEXT NOT NULL,
|
|
908
909
|
action TEXT NOT NULL CHECK(action IN ('block', 'allow', 'quarantine')),
|
|
909
910
|
enabled INTEGER NOT NULL DEFAULT 1,
|
|
911
|
+
built_in INTEGER NOT NULL DEFAULT 0,
|
|
910
912
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
911
913
|
);
|
|
912
914
|
CREATE INDEX IF NOT EXISTS idx_firewall_rules_priority ON firewall_rules(priority);
|
|
913
915
|
CREATE INDEX IF NOT EXISTS idx_firewall_rules_enabled ON firewall_rules(enabled);
|
|
916
|
+
CREATE INDEX IF NOT EXISTS idx_firewall_rules_built_in ON firewall_rules(built_in);
|
|
914
917
|
|
|
915
918
|
CREATE TABLE IF NOT EXISTS rate_limits (
|
|
916
919
|
source_key TEXT PRIMARY KEY,
|
|
@@ -922,6 +925,24 @@ function runMigrations(database) {
|
|
|
922
925
|
catch {
|
|
923
926
|
// Tables may already exist - safe to ignore
|
|
924
927
|
}
|
|
928
|
+
// Migration: built_in column on pre-existing firewall_rules (added in v4.15)
|
|
929
|
+
try {
|
|
930
|
+
const cols = database.prepare("PRAGMA table_info(firewall_rules)").all();
|
|
931
|
+
if (!cols.some(c => c.name === 'built_in')) {
|
|
932
|
+
database.exec('ALTER TABLE firewall_rules ADD COLUMN built_in INTEGER NOT NULL DEFAULT 0');
|
|
933
|
+
database.exec('CREATE INDEX IF NOT EXISTS idx_firewall_rules_built_in ON firewall_rules(built_in)');
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
catch {
|
|
937
|
+
// Best-effort migration; pipeline handles missing column gracefully.
|
|
938
|
+
}
|
|
939
|
+
// Seed default built-in firewall rules on first init.
|
|
940
|
+
try {
|
|
941
|
+
seedDefaultFirewallRules(database);
|
|
942
|
+
}
|
|
943
|
+
catch {
|
|
944
|
+
// Seeder runs idempotently; failures here should never block startup.
|
|
945
|
+
}
|
|
925
946
|
}
|
|
926
947
|
/**
|
|
927
948
|
* Get the current database instance
|
package/dist/database/schema.sql
CHANGED
|
@@ -301,6 +301,7 @@ CREATE TABLE IF NOT EXISTS firewall_rules (
|
|
|
301
301
|
condition_value TEXT NOT NULL,
|
|
302
302
|
action TEXT NOT NULL CHECK(action IN ('block', 'allow', 'quarantine')),
|
|
303
303
|
enabled INTEGER NOT NULL DEFAULT 1,
|
|
304
|
+
built_in INTEGER NOT NULL DEFAULT 0,
|
|
304
305
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
305
306
|
);
|
|
306
307
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default firewall rule seeder.
|
|
3
|
+
*
|
|
4
|
+
* The `firewall_rules` table starts empty in production. The defence
|
|
5
|
+
* pipeline's PATTERN_GROUPS catch most threats inline (instruction
|
|
6
|
+
* injection, hidden instructions, etc.), but seeding the table with
|
|
7
|
+
* built-in rules makes them visible in the dashboard and gives operators
|
|
8
|
+
* a place to disable, edit, or extend them.
|
|
9
|
+
*
|
|
10
|
+
* Built-in rows are marked `built_in=1` and excluded from the user
|
|
11
|
+
* `MAX_RULES=25` cap (see custom-rules/store.ts). They are evaluated
|
|
12
|
+
* regardless of license tier — the Pro `custom_firewall_rules` gate
|
|
13
|
+
* applies only to user-added rules with `built_in=0`.
|
|
14
|
+
*
|
|
15
|
+
* Idempotent: running the seeder again is a no-op when built-in rules
|
|
16
|
+
* are already present. Operators wanting to re-seed after a built-in
|
|
17
|
+
* update should `DELETE FROM firewall_rules WHERE built_in = 1` first.
|
|
18
|
+
*/
|
|
19
|
+
import type Database from 'better-sqlite3';
|
|
20
|
+
export declare function seedDefaultFirewallRules(db: Database.Database): void;
|
|
21
|
+
export declare function listBuiltInRuleNames(): string[];
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default firewall rule seeder.
|
|
3
|
+
*
|
|
4
|
+
* The `firewall_rules` table starts empty in production. The defence
|
|
5
|
+
* pipeline's PATTERN_GROUPS catch most threats inline (instruction
|
|
6
|
+
* injection, hidden instructions, etc.), but seeding the table with
|
|
7
|
+
* built-in rules makes them visible in the dashboard and gives operators
|
|
8
|
+
* a place to disable, edit, or extend them.
|
|
9
|
+
*
|
|
10
|
+
* Built-in rows are marked `built_in=1` and excluded from the user
|
|
11
|
+
* `MAX_RULES=25` cap (see custom-rules/store.ts). They are evaluated
|
|
12
|
+
* regardless of license tier — the Pro `custom_firewall_rules` gate
|
|
13
|
+
* applies only to user-added rules with `built_in=0`.
|
|
14
|
+
*
|
|
15
|
+
* Idempotent: running the seeder again is a no-op when built-in rules
|
|
16
|
+
* are already present. Operators wanting to re-seed after a built-in
|
|
17
|
+
* update should `DELETE FROM firewall_rules WHERE built_in = 1` first.
|
|
18
|
+
*/
|
|
19
|
+
const BUILT_IN_RULES = [
|
|
20
|
+
{
|
|
21
|
+
name: 'builtin:instruction_injection',
|
|
22
|
+
priority: 10,
|
|
23
|
+
condition_type: 'regex',
|
|
24
|
+
condition_value: '\\[SYSTEM:|<<SYS>>|\\[INST\\]|<\\|im_start\\|>|<\\|system\\|>|##SYSTEM##',
|
|
25
|
+
action: 'quarantine',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: 'builtin:hidden_instruction',
|
|
29
|
+
priority: 11,
|
|
30
|
+
condition_type: 'regex',
|
|
31
|
+
condition_value: 'ignore\\s+(all\\s+)?previous\\s+(instructions?|prompts?)|forget\\s+everything|disregard\\s+(all\\s+)?(previous|above|prior)|override\\s+(previous|all|system)',
|
|
32
|
+
action: 'quarantine',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: 'builtin:imperative_tool_call',
|
|
36
|
+
priority: 12,
|
|
37
|
+
condition_type: 'regex',
|
|
38
|
+
condition_value: '\\b(?:call|invoke|use)\\s+(?:the\\s+)?[A-Za-z][\\w-]*\\s+tool\\b|\\b(?:call|invoke|use)\\s+this\\s+tool\\s+now\\b',
|
|
39
|
+
action: 'quarantine',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'builtin:memory_manipulation',
|
|
43
|
+
priority: 15,
|
|
44
|
+
condition_type: 'regex',
|
|
45
|
+
condition_value: 'save\\s+(this\\s+)?to\\s+memory|remember\\s+this\\s+(instruction|command|rule)|store\\s+this\\s+instruction|inject\\s+(into\\s+)?memory',
|
|
46
|
+
action: 'quarantine',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'builtin:command_injection',
|
|
50
|
+
priority: 5,
|
|
51
|
+
condition_type: 'regex',
|
|
52
|
+
condition_value: '\\beval\\s*\\(|\\bexec\\s*\\(|\\bsystem\\s*\\(|\\bexecute\\s+(this\\s+)?(command|code|script)|\\b__import__\\s*\\(|\\bsubprocess\\b',
|
|
53
|
+
action: 'quarantine',
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: 'builtin:delimiter_attack',
|
|
57
|
+
priority: 18,
|
|
58
|
+
condition_type: 'regex',
|
|
59
|
+
condition_value: '<\\/?(system|admin|root)\\s*>|<!--[\\s\\S]{0,200}?(instruction|command|system|ignore|inject|override)[\\s\\S]{0,200}?-->',
|
|
60
|
+
action: 'quarantine',
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
name: 'builtin:credential_leak_aws',
|
|
64
|
+
priority: 1,
|
|
65
|
+
condition_type: 'regex',
|
|
66
|
+
condition_value: 'AKIA[0-9A-Z]{16}',
|
|
67
|
+
action: 'block',
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'builtin:credential_leak_jwt',
|
|
71
|
+
priority: 2,
|
|
72
|
+
condition_type: 'regex',
|
|
73
|
+
condition_value: 'eyJ[A-Za-z0-9_-]{10,}\\.eyJ[A-Za-z0-9_-]{10,}\\.[A-Za-z0-9_-]{10,}',
|
|
74
|
+
action: 'block',
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: 'builtin:credential_leak_private_key',
|
|
78
|
+
priority: 3,
|
|
79
|
+
condition_type: 'regex',
|
|
80
|
+
condition_value: '-----BEGIN (?:RSA |EC |OPENSSH |DSA |PGP )?PRIVATE KEY-----',
|
|
81
|
+
action: 'block',
|
|
82
|
+
},
|
|
83
|
+
];
|
|
84
|
+
export function seedDefaultFirewallRules(db) {
|
|
85
|
+
// Confirm the column exists (older DBs may pre-date the migration).
|
|
86
|
+
const cols = db.prepare("PRAGMA table_info(firewall_rules)").all();
|
|
87
|
+
if (!cols.some(c => c.name === 'built_in'))
|
|
88
|
+
return;
|
|
89
|
+
const existing = db.prepare('SELECT COUNT(*) AS c FROM firewall_rules WHERE built_in = 1').get();
|
|
90
|
+
if (existing.c > 0)
|
|
91
|
+
return;
|
|
92
|
+
const insert = db.prepare(`
|
|
93
|
+
INSERT INTO firewall_rules (name, priority, condition_type, condition_value, action, enabled, built_in)
|
|
94
|
+
VALUES (?, ?, ?, ?, ?, 1, 1)
|
|
95
|
+
`);
|
|
96
|
+
const txn = db.transaction((rules) => {
|
|
97
|
+
for (const rule of rules) {
|
|
98
|
+
insert.run(rule.name, rule.priority, rule.condition_type, rule.condition_value, rule.action);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
txn(BUILT_IN_RULES);
|
|
102
|
+
}
|
|
103
|
+
export function listBuiltInRuleNames() {
|
|
104
|
+
return BUILT_IN_RULES.map(r => r.name);
|
|
105
|
+
}
|
|
@@ -9,9 +9,12 @@ export interface FirewallRule {
|
|
|
9
9
|
condition_value: string;
|
|
10
10
|
action: 'block' | 'allow' | 'quarantine';
|
|
11
11
|
enabled: number;
|
|
12
|
+
built_in: number;
|
|
12
13
|
created_at: string;
|
|
13
14
|
}
|
|
14
|
-
export declare function listFirewallRules(
|
|
15
|
+
export declare function listFirewallRules(opts?: {
|
|
16
|
+
includeBuiltin?: boolean;
|
|
17
|
+
}): FirewallRule[];
|
|
15
18
|
export declare function getFirewallRule(id: number): FirewallRule | undefined;
|
|
16
19
|
export declare function createFirewallRule(rule: {
|
|
17
20
|
name: string;
|