shieldcortex 4.32.2 → 4.32.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dashboard/.next/standalone/dashboard/.next/BUILD_ID +1 -1
- package/dashboard/.next/standalone/dashboard/.next/build-manifest.json +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory/replay/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory/replay.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/pages/404.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/pages/500.html +2 -2
- package/dist/cli/repair.js +11 -0
- package/dist/cloud/config.js +50 -7
- package/dist/index.js +9 -0
- package/dist/setup/native-binding.d.ts +31 -3
- package/dist/setup/native-binding.js +63 -27
- package/dist/worker/brain-worker.js +15 -15
- package/package.json +2 -1
- /package/dashboard/.next/standalone/dashboard/.next/static/{GB6HKJh2I4wJe8Eixqm8C → RpQu_A3G4318MjcmJbRga}/_buildManifest.js +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{GB6HKJh2I4wJe8Eixqm8C → RpQu_A3G4318MjcmJbRga}/_clientMiddlewareManifest.json +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{GB6HKJh2I4wJe8Eixqm8C → RpQu_A3G4318MjcmJbRga}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
1
|
+
<!DOCTYPE html><!--RpQu_A3G4318MjcmJbRga--><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\":\"RpQu_A3G4318MjcmJbRga\",\"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><!--RpQu_A3G4318MjcmJbRga--><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\":\"RpQu_A3G4318MjcmJbRga\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/102f894cc892994d.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/417032eeb2cd875f.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\na:[]\n"])</script></body></html>
|
package/dist/cli/repair.js
CHANGED
|
@@ -25,6 +25,17 @@ export async function runRepair() {
|
|
|
25
25
|
process.stdout.write(` ${c('31', '✗')} Database engine: still cannot load after a rebuild\n`);
|
|
26
26
|
if (r.error)
|
|
27
27
|
process.stdout.write(` ${c('90', r.error.split('\n')[0])}\n`);
|
|
28
|
+
// Surface the REAL build error, not just the load failure. `rebuildOutput` is
|
|
29
|
+
// from the forced `--build-from-source` attempt, so it carries the actual
|
|
30
|
+
// compiler/node-gyp output (e.g. "g++: command not found") — the bit that
|
|
31
|
+
// tells the user WHY, instead of npm's misleading "rebuilt successfully".
|
|
32
|
+
const buildTail = (r.rebuildOutput ?? '').trim();
|
|
33
|
+
if (buildTail) {
|
|
34
|
+
const lines = buildTail.split('\n').slice(-12);
|
|
35
|
+
process.stdout.write(`\n ${c('90', 'Build output (last lines):')}\n`);
|
|
36
|
+
for (const line of lines)
|
|
37
|
+
process.stdout.write(` ${c('90', line)}\n`);
|
|
38
|
+
}
|
|
28
39
|
process.stdout.write(`\n ${c('1', 'Fix it manually:')}\n`);
|
|
29
40
|
for (const line of (r.remediation ?? '').split('\n')) {
|
|
30
41
|
process.stdout.write(` ${c('33', line)}\n`);
|
package/dist/cloud/config.js
CHANGED
|
@@ -112,7 +112,7 @@ function writeConfigSignature(jsonContent) {
|
|
|
112
112
|
catch { /* best-effort */ }
|
|
113
113
|
}
|
|
114
114
|
/**
|
|
115
|
-
* Verify a parsed config object's integrity.
|
|
115
|
+
* Verify a parsed config object's integrity, returning a three-way verdict.
|
|
116
116
|
*
|
|
117
117
|
* Two on-disk formats are supported for backward compatibility:
|
|
118
118
|
* - **Embedded (new, v4.32+):** the object carries a top-level `_sig` field;
|
|
@@ -123,16 +123,37 @@ function writeConfigSignature(jsonContent) {
|
|
|
123
123
|
* install that hasn't been rewritten yet never false-tampers. The next
|
|
124
124
|
* write upgrades it to the embedded format.
|
|
125
125
|
*
|
|
126
|
+
* **`'self-heal'`** — an embedded `_sig` is present but does NOT match, AND the
|
|
127
|
+
* legacy whole-file `.config-sig` still validates over the exact bytes on disk.
|
|
128
|
+
* That combination means the file content is provably authentic — only the
|
|
129
|
+
* embedded sig drifted (e.g. it was written by an older version whose canonical
|
|
130
|
+
* form differed, leaving the legacy sig behind). This is NOT tampering: both
|
|
131
|
+
* schemes HMAC with the same secret `.integrity-key` (0600), so an attacker who
|
|
132
|
+
* can't read that key can forge neither, and any edit to the body invalidates
|
|
133
|
+
* BOTH signatures. The caller re-signs silently rather than crying tampering and
|
|
134
|
+
* forcing strict mode. (Observed on a Mac after a cross-version config write.)
|
|
135
|
+
*
|
|
126
136
|
* `rawFileContent` is the literal bytes read from disk (needed for the legacy
|
|
127
137
|
* whole-file signature). On a missing legacy sig file we adopt the current
|
|
128
138
|
* content as trusted (first run after upgrade), matching prior behaviour.
|
|
129
139
|
*/
|
|
130
|
-
function
|
|
140
|
+
function checkConfigIntegrity(parsed, rawFileContent) {
|
|
131
141
|
try {
|
|
132
142
|
if (typeof parsed._sig === 'string') {
|
|
133
143
|
// Embedded scheme: recompute over the canonical body (object minus _sig).
|
|
134
144
|
const computed = signConfig(canonicalBodyForSig(parsed));
|
|
135
|
-
|
|
145
|
+
if (constantTimeEqualHex(parsed._sig, computed))
|
|
146
|
+
return 'valid';
|
|
147
|
+
// Embedded sig mismatch — is the file otherwise authentic? If a legacy
|
|
148
|
+
// whole-file sig still validates these exact bytes, the content is intact
|
|
149
|
+
// and only the embedded sig is stale: heal, don't alarm.
|
|
150
|
+
const sigFile = getSigFile();
|
|
151
|
+
if (existsSync(sigFile)) {
|
|
152
|
+
const legacySig = readFileSync(sigFile, 'utf-8').trim();
|
|
153
|
+
if (constantTimeEqualHex(legacySig, signConfig(rawFileContent)))
|
|
154
|
+
return 'self-heal';
|
|
155
|
+
}
|
|
156
|
+
return 'tampered';
|
|
136
157
|
}
|
|
137
158
|
// Legacy scheme: separate .config-sig file signed over the whole file.
|
|
138
159
|
const sigFile = getSigFile();
|
|
@@ -141,14 +162,14 @@ function verifyConfigIntegrity(parsed, rawFileContent) {
|
|
|
141
162
|
// legacy sig so a subsequent read (before the next write upgrades it)
|
|
142
163
|
// still verifies. Matches the prior behaviour to avoid a false tamper.
|
|
143
164
|
writeConfigSignature(rawFileContent);
|
|
144
|
-
return
|
|
165
|
+
return 'valid';
|
|
145
166
|
}
|
|
146
167
|
const storedSig = readFileSync(sigFile, 'utf-8').trim();
|
|
147
168
|
const computedSig = signConfig(rawFileContent);
|
|
148
|
-
return constantTimeEqualHex(storedSig, computedSig);
|
|
169
|
+
return constantTimeEqualHex(storedSig, computedSig) ? 'valid' : 'tampered';
|
|
149
170
|
}
|
|
150
171
|
catch {
|
|
151
|
-
return
|
|
172
|
+
return 'tampered';
|
|
152
173
|
}
|
|
153
174
|
}
|
|
154
175
|
/** Returns true if config file tampering was detected. */
|
|
@@ -321,7 +342,8 @@ function readRawConfigState() {
|
|
|
321
342
|
return { data: {}, parseFailed: true };
|
|
322
343
|
}
|
|
323
344
|
// Verify HMAC integrity (embedded `_sig`, else legacy `.config-sig`).
|
|
324
|
-
|
|
345
|
+
const verdict = checkConfigIntegrity(data, content);
|
|
346
|
+
if (verdict === 'tampered') {
|
|
325
347
|
configTampered = true;
|
|
326
348
|
console.error('[ShieldCortex] WARNING: Config file integrity check failed — possible tampering detected. Falling back to strict mode.');
|
|
327
349
|
// Force strict mode on tampered config
|
|
@@ -330,6 +352,27 @@ function readRawConfigState() {
|
|
|
330
352
|
// `_sig` is an integrity artefact, never config data — strip it so it
|
|
331
353
|
// can't leak into CloudConfig or get re-serialised as a normal field.
|
|
332
354
|
delete data._sig;
|
|
355
|
+
if (verdict === 'self-heal') {
|
|
356
|
+
// The bytes are authentic (legacy whole-file sig still validates) — only
|
|
357
|
+
// the embedded `_sig` drifted. Re-sign silently to converge on the
|
|
358
|
+
// embedded-only format and drop the stale legacy sig. This is a one-shot:
|
|
359
|
+
// after the rewrite the embedded sig matches, so subsequent reads return
|
|
360
|
+
// 'valid'. The rewrite changes the file's mtime, so skip the (now stale)
|
|
361
|
+
// cache population below and return the parsed data directly.
|
|
362
|
+
//
|
|
363
|
+
// Deliberately calls writeRawConfig DIRECTLY rather than via
|
|
364
|
+
// mutateRawConfig (the usual sole-writer rule): we're already inside the
|
|
365
|
+
// read, the content is parsed AND cryptographically authenticated (so the
|
|
366
|
+
// {}-wipe-on-parse-fail risk mutateRawConfig guards against cannot apply),
|
|
367
|
+
// and routing back through mutateRawConfig would re-enter readRawConfigState
|
|
368
|
+
// — re-hitting this same 'self-heal' verdict before the write lands and
|
|
369
|
+
// recursing. The direct write is what keeps it one-shot.
|
|
370
|
+
try {
|
|
371
|
+
writeRawConfig({ ...data });
|
|
372
|
+
}
|
|
373
|
+
catch { /* best-effort: a failed heal just re-checks on the next read */ }
|
|
374
|
+
return { data, parseFailed: false };
|
|
375
|
+
}
|
|
333
376
|
// Populate the mtime cache from the parsed (sig-stripped) object, keyed on
|
|
334
377
|
// the mtime captured BEFORE the read (matches the bytes actually parsed).
|
|
335
378
|
if (mtimeMsForCache !== null) {
|
package/dist/index.js
CHANGED
|
@@ -183,6 +183,15 @@ function parseArgs() {
|
|
|
183
183
|
* Start MCP server for Claude Code integration
|
|
184
184
|
*/
|
|
185
185
|
async function startMcpServer(dbPath) {
|
|
186
|
+
// MCP stdio contract: stdout is the JSON-RPC channel — NOTHING else may write
|
|
187
|
+
// to it, or the client's transport hits a non-JSON byte and reports
|
|
188
|
+
// "Connection closed". Route any stray console.log (ours, a lazily-imported
|
|
189
|
+
// module's, or a dependency's — notably the in-process brain worker started
|
|
190
|
+
// below) to stderr. The SDK's StdioServerTransport writes JSON-RPC via
|
|
191
|
+
// process.stdout.write directly, so it is unaffected. Defence-in-depth: each
|
|
192
|
+
// module also logs to stderr in its own right, but this guarantees the stream
|
|
193
|
+
// stays clean even if a future code path forgets.
|
|
194
|
+
console.log = (...args) => { console.error(...args); };
|
|
186
195
|
// Lazy-load heavy server/worker/embedding modules — only the actual MCP
|
|
187
196
|
// server path needs them, so they stay out of fast CLI/hook startup.
|
|
188
197
|
const { createServer } = await import('./server.js');
|
|
@@ -13,6 +13,14 @@
|
|
|
13
13
|
* successfully" — a no-op. So this module resolves the install dir from the
|
|
14
14
|
* running code's own location and rebuilds there.
|
|
15
15
|
*
|
|
16
|
+
* The second trap (observed on clawdbot1): even in the right dir, a plain
|
|
17
|
+
* `npm rebuild` can report "rebuilt dependencies successfully" while the binary
|
|
18
|
+
* never built — no matching prebuilt, and the source build silently no-op'd or
|
|
19
|
+
* its failure was swallowed. So when a plain rebuild doesn't heal, we escalate
|
|
20
|
+
* to `--build-from-source --foreground-scripts`, which forces a real compile and
|
|
21
|
+
* streams the build output — surfacing the ACTUAL error (almost always a missing
|
|
22
|
+
* C/C++ toolchain) instead of a misleading success.
|
|
23
|
+
*
|
|
16
24
|
* Used by: `shieldcortex update` (verify+heal step), `shieldcortex repair`,
|
|
17
25
|
* `shieldcortex doctor` (correct remediation text), and the postinstall guidance.
|
|
18
26
|
*/
|
|
@@ -33,7 +41,9 @@ export interface EnsureResult {
|
|
|
33
41
|
/** Injection seam so the heal orchestration is testable without a real failure. */
|
|
34
42
|
export interface BindingDeps {
|
|
35
43
|
verify: () => VerifyResult;
|
|
36
|
-
rebuild: (dir: string
|
|
44
|
+
rebuild: (dir: string, opts?: {
|
|
45
|
+
fromSource?: boolean;
|
|
46
|
+
}) => Promise<{
|
|
37
47
|
ok: boolean;
|
|
38
48
|
output: string;
|
|
39
49
|
}>;
|
|
@@ -56,20 +66,38 @@ export declare function verifyNativeBinding(): VerifyResult;
|
|
|
56
66
|
/**
|
|
57
67
|
* Run `npm rebuild better-sqlite3` in the install dir. Async (the rebuild can
|
|
58
68
|
* take tens of seconds) so callers can keep a spinner alive. Never throws.
|
|
69
|
+
*
|
|
70
|
+
* With `{ fromSource: true }` it forces a real compile (`--build-from-source`)
|
|
71
|
+
* and streams the build-script output (`--foreground-scripts`) so a failed
|
|
72
|
+
* compile surfaces its real error rather than npm's misleading
|
|
73
|
+
* "rebuilt dependencies successfully".
|
|
59
74
|
*/
|
|
60
|
-
export declare function rebuildNativeBinding(installDir: string
|
|
75
|
+
export declare function rebuildNativeBinding(installDir: string, opts?: {
|
|
76
|
+
fromSource?: boolean;
|
|
77
|
+
}): Promise<{
|
|
61
78
|
ok: boolean;
|
|
62
79
|
output: string;
|
|
63
80
|
}>;
|
|
64
81
|
/**
|
|
65
82
|
* The correct copy-paste remediation — the install-dir `cd` is the bit users
|
|
66
83
|
* miss (a bare `npm rebuild better-sqlite3` from $HOME is a silent no-op).
|
|
84
|
+
*
|
|
85
|
+
* Uses `--build-from-source` because by the time we surface this, a plain
|
|
86
|
+
* rebuild has already failed to heal: forcing a source compile is both what
|
|
87
|
+
* actually produces the binary (when no prebuilt matches this Node/arch) and
|
|
88
|
+
* what reveals the real error if it can't.
|
|
67
89
|
*/
|
|
68
|
-
export declare function nativeBindingRemediation(installDir: string
|
|
90
|
+
export declare function nativeBindingRemediation(installDir: string): string;
|
|
69
91
|
/**
|
|
70
92
|
* Verify the binding; if it fails, rebuild in the install dir and re-verify.
|
|
71
93
|
* - 'ok' — loaded first try (no rebuild).
|
|
72
94
|
* - 'healed' — rebuilt and now loads.
|
|
73
95
|
* - 'failed' — still broken after a rebuild; `remediation` carries the fix.
|
|
96
|
+
*
|
|
97
|
+
* Two rebuild attempts when needed: first a plain `npm rebuild` (fast, uses a
|
|
98
|
+
* matching prebuilt if one exists), then — only if that didn't heal it — a
|
|
99
|
+
* forced `--build-from-source` compile. The forced build is what surfaces the
|
|
100
|
+
* real error (and `rebuildOutput` in the failed result carries IT, not the
|
|
101
|
+
* earlier misleading "rebuilt dependencies successfully").
|
|
74
102
|
*/
|
|
75
103
|
export declare function ensureNativeBinding(deps?: Partial<BindingDeps>): Promise<EnsureResult>;
|
|
@@ -13,6 +13,14 @@
|
|
|
13
13
|
* successfully" — a no-op. So this module resolves the install dir from the
|
|
14
14
|
* running code's own location and rebuilds there.
|
|
15
15
|
*
|
|
16
|
+
* The second trap (observed on clawdbot1): even in the right dir, a plain
|
|
17
|
+
* `npm rebuild` can report "rebuilt dependencies successfully" while the binary
|
|
18
|
+
* never built — no matching prebuilt, and the source build silently no-op'd or
|
|
19
|
+
* its failure was swallowed. So when a plain rebuild doesn't heal, we escalate
|
|
20
|
+
* to `--build-from-source --foreground-scripts`, which forces a real compile and
|
|
21
|
+
* streams the build output — surfacing the ACTUAL error (almost always a missing
|
|
22
|
+
* C/C++ toolchain) instead of a misleading success.
|
|
23
|
+
*
|
|
16
24
|
* Used by: `shieldcortex update` (verify+heal step), `shieldcortex repair`,
|
|
17
25
|
* `shieldcortex doctor` (correct remediation text), and the postinstall guidance.
|
|
18
26
|
*/
|
|
@@ -52,8 +60,13 @@ export function verifyNativeBinding() {
|
|
|
52
60
|
/**
|
|
53
61
|
* Run `npm rebuild better-sqlite3` in the install dir. Async (the rebuild can
|
|
54
62
|
* take tens of seconds) so callers can keep a spinner alive. Never throws.
|
|
63
|
+
*
|
|
64
|
+
* With `{ fromSource: true }` it forces a real compile (`--build-from-source`)
|
|
65
|
+
* and streams the build-script output (`--foreground-scripts`) so a failed
|
|
66
|
+
* compile surfaces its real error rather than npm's misleading
|
|
67
|
+
* "rebuilt dependencies successfully".
|
|
55
68
|
*/
|
|
56
|
-
export function rebuildNativeBinding(installDir) {
|
|
69
|
+
export function rebuildNativeBinding(installDir, opts = {}) {
|
|
57
70
|
return new Promise((resolve) => {
|
|
58
71
|
let output = '';
|
|
59
72
|
let settled = false;
|
|
@@ -61,9 +74,12 @@ export function rebuildNativeBinding(installDir) {
|
|
|
61
74
|
settled = true;
|
|
62
75
|
resolve({ ok, output });
|
|
63
76
|
} };
|
|
77
|
+
const args = ['rebuild', 'better-sqlite3', '--no-audit', '--no-fund'];
|
|
78
|
+
if (opts.fromSource)
|
|
79
|
+
args.push('--build-from-source', '--foreground-scripts');
|
|
64
80
|
let child;
|
|
65
81
|
try {
|
|
66
|
-
child = spawn('npm',
|
|
82
|
+
child = spawn('npm', args, {
|
|
67
83
|
cwd: installDir,
|
|
68
84
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
69
85
|
shell: false,
|
|
@@ -90,40 +106,52 @@ export function rebuildNativeBinding(installDir) {
|
|
|
90
106
|
});
|
|
91
107
|
}
|
|
92
108
|
/**
|
|
93
|
-
* Platform-aware build-toolchain hint
|
|
109
|
+
* Platform-aware build-toolchain hint.
|
|
110
|
+
*
|
|
111
|
+
* Always emitted in the failed-remediation path: by the time we're generating
|
|
112
|
+
* remediation, BOTH a plain rebuild and a forced source build have failed to
|
|
113
|
+
* heal the binding, and on Linux/macOS the overwhelmingly common cause is a
|
|
114
|
+
* missing C/C++ toolchain. The old version gated this on recognising error text
|
|
115
|
+
* in the rebuild output — which silently suppressed the hint in exactly the
|
|
116
|
+
* worst case (a rebuild that reported success but never built the binary),
|
|
117
|
+
* leaving the user with no idea they needed to install a compiler.
|
|
94
118
|
*/
|
|
95
|
-
function toolchainHint(
|
|
96
|
-
const out = (rebuildOutput ?? '').toLowerCase();
|
|
97
|
-
const needsToolchain = !rebuildOutput || /gyp|python|make|g\+\+|cc1plus|no such file|command not found/.test(out);
|
|
98
|
-
if (!needsToolchain)
|
|
99
|
-
return '';
|
|
119
|
+
function toolchainHint() {
|
|
100
120
|
if (process.platform === 'darwin') {
|
|
101
|
-
return 'If
|
|
121
|
+
return 'If it fails for lack of a compiler: xcode-select --install';
|
|
102
122
|
}
|
|
103
123
|
if (process.platform === 'win32') {
|
|
104
|
-
return 'If
|
|
124
|
+
return 'If it fails for lack of a compiler: install the "Desktop development with C++" workload (Visual Studio Build Tools).';
|
|
105
125
|
}
|
|
106
|
-
return 'If
|
|
126
|
+
return 'If it fails for lack of a compiler: sudo apt-get install -y python3 make g++ (Debian/Ubuntu; or your distro\'s build-essential).';
|
|
107
127
|
}
|
|
108
128
|
/**
|
|
109
129
|
* The correct copy-paste remediation — the install-dir `cd` is the bit users
|
|
110
130
|
* miss (a bare `npm rebuild better-sqlite3` from $HOME is a silent no-op).
|
|
131
|
+
*
|
|
132
|
+
* Uses `--build-from-source` because by the time we surface this, a plain
|
|
133
|
+
* rebuild has already failed to heal: forcing a source compile is both what
|
|
134
|
+
* actually produces the binary (when no prebuilt matches this Node/arch) and
|
|
135
|
+
* what reveals the real error if it can't.
|
|
111
136
|
*/
|
|
112
|
-
export function nativeBindingRemediation(installDir
|
|
113
|
-
|
|
114
|
-
`cd "${installDir}" && npm rebuild better-sqlite3`,
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
lines.push(hint);
|
|
119
|
-
lines.push('Then restart Claude Code / the OpenClaw gateway so processes reload the binding.');
|
|
120
|
-
return lines.join('\n');
|
|
137
|
+
export function nativeBindingRemediation(installDir) {
|
|
138
|
+
return [
|
|
139
|
+
`cd "${installDir}" && npm rebuild better-sqlite3 --build-from-source`,
|
|
140
|
+
toolchainHint(),
|
|
141
|
+
'Then restart Claude Code / the OpenClaw gateway so processes reload the binding.',
|
|
142
|
+
].join('\n');
|
|
121
143
|
}
|
|
122
144
|
/**
|
|
123
145
|
* Verify the binding; if it fails, rebuild in the install dir and re-verify.
|
|
124
146
|
* - 'ok' — loaded first try (no rebuild).
|
|
125
147
|
* - 'healed' — rebuilt and now loads.
|
|
126
148
|
* - 'failed' — still broken after a rebuild; `remediation` carries the fix.
|
|
149
|
+
*
|
|
150
|
+
* Two rebuild attempts when needed: first a plain `npm rebuild` (fast, uses a
|
|
151
|
+
* matching prebuilt if one exists), then — only if that didn't heal it — a
|
|
152
|
+
* forced `--build-from-source` compile. The forced build is what surfaces the
|
|
153
|
+
* real error (and `rebuildOutput` in the failed result carries IT, not the
|
|
154
|
+
* earlier misleading "rebuilt dependencies successfully").
|
|
127
155
|
*/
|
|
128
156
|
export async function ensureNativeBinding(deps = {}) {
|
|
129
157
|
const verify = deps.verify ?? verifyNativeBinding;
|
|
@@ -133,14 +161,22 @@ export async function ensureNativeBinding(deps = {}) {
|
|
|
133
161
|
if (first.ok)
|
|
134
162
|
return { status: 'ok' };
|
|
135
163
|
const dir = installDir();
|
|
136
|
-
|
|
137
|
-
const
|
|
138
|
-
|
|
139
|
-
|
|
164
|
+
// Attempt 1: a plain rebuild (matches a prebuilt for this platform/ABI if any).
|
|
165
|
+
const normal = await rebuild(dir);
|
|
166
|
+
const afterNormal = verify();
|
|
167
|
+
if (afterNormal.ok)
|
|
168
|
+
return { status: 'healed', rebuildOutput: normal.output };
|
|
169
|
+
// Attempt 2: force a source compile. A plain rebuild can report success while
|
|
170
|
+
// never producing the binary; this forces the build and captures the real
|
|
171
|
+
// error so the failed remediation is honest about what went wrong.
|
|
172
|
+
const sourceBuild = await rebuild(dir, { fromSource: true });
|
|
173
|
+
const afterSource = verify();
|
|
174
|
+
if (afterSource.ok)
|
|
175
|
+
return { status: 'healed', rebuildOutput: sourceBuild.output };
|
|
140
176
|
return {
|
|
141
177
|
status: 'failed',
|
|
142
|
-
error:
|
|
143
|
-
rebuildOutput:
|
|
144
|
-
remediation: nativeBindingRemediation(dir
|
|
178
|
+
error: afterSource.error ?? afterNormal.error ?? first.error,
|
|
179
|
+
rebuildOutput: sourceBuild.output,
|
|
180
|
+
remediation: nativeBindingRemediation(dir),
|
|
145
181
|
};
|
|
146
182
|
}
|
|
@@ -112,17 +112,17 @@ export class BrainWorker {
|
|
|
112
112
|
*/
|
|
113
113
|
start() {
|
|
114
114
|
if (this.isRunning) {
|
|
115
|
-
console.
|
|
115
|
+
console.error('[BrainWorker] Already running');
|
|
116
116
|
return;
|
|
117
117
|
}
|
|
118
118
|
this.isRunning = true;
|
|
119
|
-
console.
|
|
120
|
-
console.
|
|
119
|
+
console.error(`[BrainWorker] Starting background worker (profile=${this.config.profile} pid=${process.pid})`);
|
|
120
|
+
console.error(`[BrainWorker] Light tick interval: ${this.config.lightTickIntervalMs / 1000}s`);
|
|
121
121
|
if (this.config.profile === 'full') {
|
|
122
|
-
console.
|
|
122
|
+
console.error(`[BrainWorker] Medium tick interval: ${this.config.mediumTickIntervalMs / 1000}s`);
|
|
123
123
|
}
|
|
124
124
|
else {
|
|
125
|
-
console.
|
|
125
|
+
console.error('[BrainWorker] MCP profile — medium tick + cloud sync disabled');
|
|
126
126
|
}
|
|
127
127
|
// Light tick — every 5 min (full) or every 15 min (mcp)
|
|
128
128
|
this.lightTimer = setInterval(() => this.lightTick(), this.config.lightTickIntervalMs);
|
|
@@ -158,7 +158,7 @@ export class BrainWorker {
|
|
|
158
158
|
*/
|
|
159
159
|
stop() {
|
|
160
160
|
if (!this.isRunning) {
|
|
161
|
-
console.
|
|
161
|
+
console.error('[BrainWorker] Not running');
|
|
162
162
|
return;
|
|
163
163
|
}
|
|
164
164
|
this.isRunning = false;
|
|
@@ -174,7 +174,7 @@ export class BrainWorker {
|
|
|
174
174
|
clearTimeout(this.initialLightTickTimer);
|
|
175
175
|
this.initialLightTickTimer = null;
|
|
176
176
|
}
|
|
177
|
-
console.
|
|
177
|
+
console.error('[BrainWorker] Stopped');
|
|
178
178
|
}
|
|
179
179
|
/**
|
|
180
180
|
* Check if the worker is currently running
|
|
@@ -202,7 +202,7 @@ export class BrainWorker {
|
|
|
202
202
|
const stats = getMemoryStats();
|
|
203
203
|
const decision = shouldTriggerPredictiveConsolidation(stats, this.config);
|
|
204
204
|
if (decision.shouldRun) {
|
|
205
|
-
console.
|
|
205
|
+
console.error(`[BrainWorker] Predictive consolidation triggered: ${decision.reason}`);
|
|
206
206
|
result.predictiveConsolidation = consolidate();
|
|
207
207
|
this.lastConsolidation = new Date();
|
|
208
208
|
this.stats.consolidations++;
|
|
@@ -221,7 +221,7 @@ export class BrainWorker {
|
|
|
221
221
|
try {
|
|
222
222
|
const pressurePurged = purgeAuditUnderSizePressure();
|
|
223
223
|
if (pressurePurged > 0) {
|
|
224
|
-
console.
|
|
224
|
+
console.error(`[BrainWorker] Audit size-pressure valve purged ${pressurePurged} rows`);
|
|
225
225
|
}
|
|
226
226
|
const now = result.timestamp.getTime();
|
|
227
227
|
const dueForPurge = this.lastAuditPurge === null ||
|
|
@@ -230,7 +230,7 @@ export class BrainWorker {
|
|
|
230
230
|
const purged = purgeOldAuditEntries();
|
|
231
231
|
this.lastAuditPurge = result.timestamp;
|
|
232
232
|
if (purged > 0) {
|
|
233
|
-
console.
|
|
233
|
+
console.error(`[BrainWorker] Audit retention purged ${purged} entries older than 90d`);
|
|
234
234
|
}
|
|
235
235
|
}
|
|
236
236
|
}
|
|
@@ -248,7 +248,7 @@ export class BrainWorker {
|
|
|
248
248
|
try {
|
|
249
249
|
const retryResult = await processRetryQueue(this.config.profile === 'mcp' ? { maxRows: MCP_RETRY_QUEUE_BUDGET } : {});
|
|
250
250
|
if (retryResult.processed > 0) {
|
|
251
|
-
console.
|
|
251
|
+
console.error(`[BrainWorker] Sync retry queue: processed ${retryResult.processed} ` +
|
|
252
252
|
`(${retryResult.succeeded} ok, ${retryResult.failed} retry, ${retryResult.permanentlyFailed} failed)`);
|
|
253
253
|
}
|
|
254
254
|
}
|
|
@@ -284,7 +284,7 @@ export class BrainWorker {
|
|
|
284
284
|
emitWorkerLightTick(result);
|
|
285
285
|
// Log summary
|
|
286
286
|
if (result.activationsPruned > 0 || result.predictiveConsolidation) {
|
|
287
|
-
console.
|
|
287
|
+
console.error(`[BrainWorker] Light tick: pruned ${result.activationsPruned} activations` +
|
|
288
288
|
(result.predictiveConsolidation
|
|
289
289
|
? `, consolidated ${result.predictiveConsolidation.consolidated}`
|
|
290
290
|
: ''));
|
|
@@ -328,7 +328,7 @@ export class BrainWorker {
|
|
|
328
328
|
// Emit medium tick event
|
|
329
329
|
emitWorkerMediumTick(result);
|
|
330
330
|
// Log summary
|
|
331
|
-
console.
|
|
331
|
+
console.error(`[BrainWorker] Medium tick: scanned ${result.memoriesScanned} memories, ` +
|
|
332
332
|
`discovered ${result.linksDiscovered} links, ` +
|
|
333
333
|
`found ${result.contradictionsFound} contradictions`);
|
|
334
334
|
}
|
|
@@ -351,7 +351,7 @@ export class BrainWorker {
|
|
|
351
351
|
}
|
|
352
352
|
const entityCount = db.prepare('SELECT COUNT(*) as c FROM entities').get().c;
|
|
353
353
|
const tripleCount = db.prepare('SELECT COUNT(*) as c FROM triples').get().c;
|
|
354
|
-
console.
|
|
354
|
+
console.error(`[brain-worker] Graph: ${entityCount} entities, ${tripleCount} triples${orphans.length > 0 ? `, pruned ${orphans.length} orphans` : ''}`);
|
|
355
355
|
}
|
|
356
356
|
catch (e) {
|
|
357
357
|
console.error('[brain-worker] Graph maintenance failed:', e);
|
|
@@ -360,7 +360,7 @@ export class BrainWorker {
|
|
|
360
360
|
try {
|
|
361
361
|
const purged = purgeOldEntries();
|
|
362
362
|
if (purged > 0) {
|
|
363
|
-
console.
|
|
363
|
+
console.error(`[BrainWorker] Purged ${purged} old sync queue entries`);
|
|
364
364
|
}
|
|
365
365
|
}
|
|
366
366
|
catch (e) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "shieldcortex",
|
|
3
|
-
"version": "4.32.
|
|
3
|
+
"version": "4.32.4",
|
|
4
4
|
"description": "Trustworthy memory and security for AI agents. Recall debugging, review queue, OpenClaw session capture, and memory poisoning defence for Claude Code, Codex, OpenClaw, LangChain, and MCP agents.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -66,6 +66,7 @@
|
|
|
66
66
|
"bench:smoke": "SHIELDCORTEX_SKIP_EMBEDDINGS=1 tsx benchmark/longmemeval/run.ts --quiet",
|
|
67
67
|
"audit:security": "npm audit --audit-level=moderate",
|
|
68
68
|
"prepack": "node scripts/ensure-bin-executable.mjs",
|
|
69
|
+
"release:clawhub": "node scripts/clawhub-sync.mjs",
|
|
69
70
|
"version": "node scripts/sync-plugin-version.mjs && git add plugins/openclaw/package.json plugins/openclaw/openclaw.plugin.json",
|
|
70
71
|
"prepublishOnly": "node scripts/sync-plugin-version.mjs --check && npm run build && npm run test:dist"
|
|
71
72
|
},
|
|
File without changes
|
|
File without changes
|