shieldcortex 4.32.8 → 4.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dashboard/.next/standalone/dashboard/.next/BUILD_ID +1 -1
- package/dashboard/.next/standalone/dashboard/.next/build-manifest.json +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory/replay/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory/replay.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/pages/404.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/pages/500.html +2 -2
- package/dist/cli/doctor.d.ts +14 -0
- package/dist/cli/doctor.js +49 -1
- package/dist/integrations/openclaw-plugin-state.d.ts +34 -0
- package/dist/integrations/openclaw-plugin-state.js +96 -0
- package/dist/setup/openclaw.d.ts +19 -24
- package/dist/setup/openclaw.js +133 -0
- package/package.json +1 -1
- /package/dashboard/.next/standalone/dashboard/.next/static/{OwQtYee505rozMz8JgDp4 → n_D87wgpC0kwuD-UXDe81}/_buildManifest.js +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{OwQtYee505rozMz8JgDp4 → n_D87wgpC0kwuD-UXDe81}/_clientMiddlewareManifest.json +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{OwQtYee505rozMz8JgDp4 → n_D87wgpC0kwuD-UXDe81}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
1
|
+
<!DOCTYPE html><!--n_D87wgpC0kwuD_UXDe81--><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\":\"n_D87wgpC0kwuD-UXDe81\",\"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><!--n_D87wgpC0kwuD_UXDe81--><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\":\"n_D87wgpC0kwuD-UXDe81\",\"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/doctor.d.ts
CHANGED
|
@@ -140,6 +140,20 @@ export declare function checkBrainWorker(): Promise<CheckResult>;
|
|
|
140
140
|
* DB, point the user at `repair-project-keys`.
|
|
141
141
|
*/
|
|
142
142
|
export declare function checkProjectKeyConsistency(): Promise<CheckResult>;
|
|
143
|
+
/**
|
|
144
|
+
* Detects the OpenClaw `EOVERRIDE` trap that silently disables the realtime
|
|
145
|
+
* plugin on `openclaw update` (upstream openclaw/openclaw#91772).
|
|
146
|
+
*
|
|
147
|
+
* OpenClaw pins a plugin's shared deps in its generated project manifest's
|
|
148
|
+
* `dependencies` (managed peers) but NEVER advances them, while it imports its
|
|
149
|
+
* bundled workspace `overrides` afresh each release. When the two drift to
|
|
150
|
+
* different versions for the same package, npm's `assertRootOverrides` throws
|
|
151
|
+
* `EOVERRIDE` and OpenClaw disables the plugin (`enabled:false`) — so threat
|
|
152
|
+
* telemetry silently stops. This surfaces both the pre-failure drift (so it can
|
|
153
|
+
* be healed BEFORE the next update breaks it) and the already-disabled state.
|
|
154
|
+
* The fix is `shieldcortex openclaw repair`.
|
|
155
|
+
*/
|
|
156
|
+
export declare function checkOpenClawManagedPinDrift(home?: string): Promise<CheckResult>;
|
|
143
157
|
/**
|
|
144
158
|
* The cortex-memory hook is installed by FILE COPY into
|
|
145
159
|
* `~/.openclaw/hooks/cortex-memory/` (see src/setup/openclaw.ts). A package
|
package/dist/cli/doctor.js
CHANGED
|
@@ -12,7 +12,7 @@ import { getLicense, getTrialStatus } from '../license/index.js';
|
|
|
12
12
|
import { isDatabaseInitialized, getDatabase } from '../database/init.js';
|
|
13
13
|
import { shouldShowProUpsell, UPSELL_CONSTANTS } from './upsell.js';
|
|
14
14
|
import { getUpsellState, markUpsellShown } from './upsell-state.js';
|
|
15
|
-
import { resolveRealtimePluginInstallPath, readInstalledRealtimePluginVersion } from '../integrations/openclaw-plugin-state.js';
|
|
15
|
+
import { resolveRealtimePluginInstallPath, readInstalledRealtimePluginVersion, readRealtimeProjectManifest, findEoverrideRiskPins, isRealtimePluginDisabledInConfig, } from '../integrations/openclaw-plugin-state.js';
|
|
16
16
|
import { resolveSelfInstallDir } from '../setup/native-binding.js';
|
|
17
17
|
import { MCP_LIGHT_TICK_INTERVAL_MS } from '../worker/types.js';
|
|
18
18
|
const require = createRequire(import.meta.url);
|
|
@@ -1356,6 +1356,53 @@ async function checkHookTimeouts() {
|
|
|
1356
1356
|
return { label: 'Hook timeouts', status: 'info', message: `check skipped — ${msg}` };
|
|
1357
1357
|
}
|
|
1358
1358
|
}
|
|
1359
|
+
// ── Check: OpenClaw managed-pin drift / disabled realtime plugin ─────────────
|
|
1360
|
+
/**
|
|
1361
|
+
* Detects the OpenClaw `EOVERRIDE` trap that silently disables the realtime
|
|
1362
|
+
* plugin on `openclaw update` (upstream openclaw/openclaw#91772).
|
|
1363
|
+
*
|
|
1364
|
+
* OpenClaw pins a plugin's shared deps in its generated project manifest's
|
|
1365
|
+
* `dependencies` (managed peers) but NEVER advances them, while it imports its
|
|
1366
|
+
* bundled workspace `overrides` afresh each release. When the two drift to
|
|
1367
|
+
* different versions for the same package, npm's `assertRootOverrides` throws
|
|
1368
|
+
* `EOVERRIDE` and OpenClaw disables the plugin (`enabled:false`) — so threat
|
|
1369
|
+
* telemetry silently stops. This surfaces both the pre-failure drift (so it can
|
|
1370
|
+
* be healed BEFORE the next update breaks it) and the already-disabled state.
|
|
1371
|
+
* The fix is `shieldcortex openclaw repair`.
|
|
1372
|
+
*/
|
|
1373
|
+
export async function checkOpenClawManagedPinDrift(home = os.homedir()) {
|
|
1374
|
+
const label = 'OpenClaw plugin pins';
|
|
1375
|
+
if (!fs.existsSync(path.join(home, '.openclaw'))) {
|
|
1376
|
+
return { label, status: 'info', message: 'skipped (OpenClaw not detected)' };
|
|
1377
|
+
}
|
|
1378
|
+
const manifest = readRealtimeProjectManifest(home);
|
|
1379
|
+
if (!manifest) {
|
|
1380
|
+
return { label, status: 'info', message: 'skipped (realtime plugin not installed)' };
|
|
1381
|
+
}
|
|
1382
|
+
const disabled = isRealtimePluginDisabledInConfig(home);
|
|
1383
|
+
const risks = findEoverrideRiskPins(manifest);
|
|
1384
|
+
if (disabled) {
|
|
1385
|
+
const detail = risks.length
|
|
1386
|
+
? ` (manifest still has a version-drifted pin: ${risks.map((r) => r.name).join(', ')})`
|
|
1387
|
+
: '';
|
|
1388
|
+
return {
|
|
1389
|
+
label,
|
|
1390
|
+
status: 'fail',
|
|
1391
|
+
message: `realtime plugin is DISABLED in OpenClaw config${detail} — threat telemetry is not flowing`,
|
|
1392
|
+
fix: 'Run `shieldcortex openclaw repair` to reconcile the managed pins, reinstall, and re-enable the plugin.',
|
|
1393
|
+
};
|
|
1394
|
+
}
|
|
1395
|
+
if (risks.length > 0) {
|
|
1396
|
+
const list = risks.map((r) => `${r.name} (dep ${r.dependencyVersion} ≠ override ${r.overrideVersion})`).join(', ');
|
|
1397
|
+
return {
|
|
1398
|
+
label,
|
|
1399
|
+
status: 'warn',
|
|
1400
|
+
message: `managed-pin drift will EOVERRIDE on the next \`openclaw update\`: ${list}`,
|
|
1401
|
+
fix: 'Run `shieldcortex openclaw repair` now to reconcile the pins before an update disables the plugin.',
|
|
1402
|
+
};
|
|
1403
|
+
}
|
|
1404
|
+
return { label, status: 'pass', message: 'no managed-pin drift; plugin enabled' };
|
|
1405
|
+
}
|
|
1359
1406
|
// ── Check: OpenClaw hook freshness (Task 6b) ─────────────
|
|
1360
1407
|
/**
|
|
1361
1408
|
* The cortex-memory hook is installed by FILE COPY into
|
|
@@ -1502,6 +1549,7 @@ export async function runDoctor() {
|
|
|
1502
1549
|
checkOpenClawPluginVersion,
|
|
1503
1550
|
checkOpenClawPluginPackage,
|
|
1504
1551
|
checkOpenClawDuplicateInstalls,
|
|
1552
|
+
checkOpenClawManagedPinDrift,
|
|
1505
1553
|
checkDefenceCanary,
|
|
1506
1554
|
checkModelCache,
|
|
1507
1555
|
];
|
|
@@ -10,3 +10,37 @@ export declare function resolveRealtimePluginInstallPath(home: string): string |
|
|
|
10
10
|
* plugin is neither installed nor registered.
|
|
11
11
|
*/
|
|
12
12
|
export declare function readInstalledRealtimePluginVersion(home: string): string | null;
|
|
13
|
+
/**
|
|
14
|
+
* The OpenClaw managed-project ROOT for the realtime plugin (the dir whose
|
|
15
|
+
* package.json carries the managed dependencies/overrides), or null.
|
|
16
|
+
*
|
|
17
|
+
* The recorded install path may point at the project root OR the nested package
|
|
18
|
+
* dir depending on layout, so we walk up to the direct child of `npm/projects`
|
|
19
|
+
* rather than assuming a fixed depth.
|
|
20
|
+
*/
|
|
21
|
+
export declare function resolveRealtimeProjectDir(home: string): string | null;
|
|
22
|
+
/** Read+parse the realtime managed-project manifest, or null. */
|
|
23
|
+
export declare function readRealtimeProjectManifest(home: string): Record<string, unknown> | null;
|
|
24
|
+
/** A package pinned in BOTH `dependencies` and `overrides` at DIFFERENT
|
|
25
|
+
* versions — the exact shape that makes npm's `assertRootOverrides` throw
|
|
26
|
+
* `EOVERRIDE` on the next `openclaw plugins install` / `openclaw update`. */
|
|
27
|
+
export interface EoverrideRiskPin {
|
|
28
|
+
name: string;
|
|
29
|
+
dependencyVersion: string;
|
|
30
|
+
overrideVersion: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Find EOVERRIDE-risk pins in an OpenClaw managed-project manifest: packages
|
|
34
|
+
* present as BOTH a direct dependency (a managed peer pin) AND a managed
|
|
35
|
+
* override, with mismatched versions. OpenClaw never advances the dependency
|
|
36
|
+
* pin while its bundled workspace overrides advance each release, so they drift
|
|
37
|
+
* apart and npm refuses the install — disabling the plugin. Same-version
|
|
38
|
+
* co-presence is accepted by npm and is NOT reported (only the drift is).
|
|
39
|
+
*
|
|
40
|
+
* Pure — takes a parsed manifest object so it can be unit-tested without disk.
|
|
41
|
+
*/
|
|
42
|
+
export declare function findEoverrideRiskPins(manifest: unknown): EoverrideRiskPin[];
|
|
43
|
+
/** True when openclaw.json explicitly disables the realtime plugin
|
|
44
|
+
* (`plugins.entries.shieldcortex-realtime.enabled === false`) — the state
|
|
45
|
+
* OpenClaw leaves it in after an install failure auto-disables it. */
|
|
46
|
+
export declare function isRealtimePluginDisabledInConfig(home: string): boolean;
|
|
@@ -89,3 +89,99 @@ export function readInstalledRealtimePluginVersion(home) {
|
|
|
89
89
|
return null;
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
|
+
// ── Managed-project manifest (the EOVERRIDE-drift surface) ──────────────────
|
|
93
|
+
//
|
|
94
|
+
// OpenClaw installs each plugin into its own npm "project" under
|
|
95
|
+
// `~/.openclaw/npm/projects/<name>-<hash>/`, whose generated package.json holds
|
|
96
|
+
// the managed `dependencies` (peer pins), `overrides` (imported from OpenClaw's
|
|
97
|
+
// bundled pnpm-workspace.yaml), and an `openclaw.managedPeerDependencies` block.
|
|
98
|
+
// That manifest — NOT the plugin's published package.json — is where the
|
|
99
|
+
// EOVERRIDE trap lives.
|
|
100
|
+
const PROJECTS_SUBDIR = path.join('.openclaw', 'npm', 'projects');
|
|
101
|
+
/**
|
|
102
|
+
* The OpenClaw managed-project ROOT for the realtime plugin (the dir whose
|
|
103
|
+
* package.json carries the managed dependencies/overrides), or null.
|
|
104
|
+
*
|
|
105
|
+
* The recorded install path may point at the project root OR the nested package
|
|
106
|
+
* dir depending on layout, so we walk up to the direct child of `npm/projects`
|
|
107
|
+
* rather than assuming a fixed depth.
|
|
108
|
+
*/
|
|
109
|
+
export function resolveRealtimeProjectDir(home) {
|
|
110
|
+
const projects = path.join(home, PROJECTS_SUBDIR);
|
|
111
|
+
const installPath = resolveRealtimePluginInstallPath(home);
|
|
112
|
+
if (installPath) {
|
|
113
|
+
let cur = installPath;
|
|
114
|
+
for (let i = 0; i < 8; i++) {
|
|
115
|
+
if (path.dirname(cur) === projects) {
|
|
116
|
+
return fs.existsSync(path.join(cur, 'package.json')) ? cur : null;
|
|
117
|
+
}
|
|
118
|
+
const parent = path.dirname(cur);
|
|
119
|
+
if (parent === cur)
|
|
120
|
+
break;
|
|
121
|
+
cur = parent;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Fallback: scan the projects dir for the realtime project root.
|
|
125
|
+
try {
|
|
126
|
+
for (const dir of fs.readdirSync(projects)) {
|
|
127
|
+
if (dir.includes(PLUGIN_ID) && fs.existsSync(path.join(projects, dir, 'package.json'))) {
|
|
128
|
+
return path.join(projects, dir);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
// no projects dir
|
|
134
|
+
}
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
/** Read+parse the realtime managed-project manifest, or null. */
|
|
138
|
+
export function readRealtimeProjectManifest(home) {
|
|
139
|
+
const dir = resolveRealtimeProjectDir(home);
|
|
140
|
+
if (!dir)
|
|
141
|
+
return null;
|
|
142
|
+
try {
|
|
143
|
+
return JSON.parse(fs.readFileSync(path.join(dir, 'package.json'), 'utf-8'));
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Find EOVERRIDE-risk pins in an OpenClaw managed-project manifest: packages
|
|
151
|
+
* present as BOTH a direct dependency (a managed peer pin) AND a managed
|
|
152
|
+
* override, with mismatched versions. OpenClaw never advances the dependency
|
|
153
|
+
* pin while its bundled workspace overrides advance each release, so they drift
|
|
154
|
+
* apart and npm refuses the install — disabling the plugin. Same-version
|
|
155
|
+
* co-presence is accepted by npm and is NOT reported (only the drift is).
|
|
156
|
+
*
|
|
157
|
+
* Pure — takes a parsed manifest object so it can be unit-tested without disk.
|
|
158
|
+
*/
|
|
159
|
+
export function findEoverrideRiskPins(manifest) {
|
|
160
|
+
if (!manifest || typeof manifest !== 'object')
|
|
161
|
+
return [];
|
|
162
|
+
const m = manifest;
|
|
163
|
+
const deps = m.dependencies && typeof m.dependencies === 'object' ? m.dependencies : {};
|
|
164
|
+
const overrides = m.overrides && typeof m.overrides === 'object' ? m.overrides : {};
|
|
165
|
+
const risks = [];
|
|
166
|
+
for (const [name, depV] of Object.entries(deps)) {
|
|
167
|
+
const ovV = overrides[name];
|
|
168
|
+
// Only string↔string mismatches are the EOVERRIDE trap. Nested override
|
|
169
|
+
// objects ({".": "x"}) aren't how OpenClaw pins these, so skip non-strings.
|
|
170
|
+
if (typeof depV === 'string' && typeof ovV === 'string' && depV !== ovV) {
|
|
171
|
+
risks.push({ name, dependencyVersion: depV, overrideVersion: ovV });
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return risks;
|
|
175
|
+
}
|
|
176
|
+
/** True when openclaw.json explicitly disables the realtime plugin
|
|
177
|
+
* (`plugins.entries.shieldcortex-realtime.enabled === false`) — the state
|
|
178
|
+
* OpenClaw leaves it in after an install failure auto-disables it. */
|
|
179
|
+
export function isRealtimePluginDisabledInConfig(home) {
|
|
180
|
+
try {
|
|
181
|
+
const cfg = JSON.parse(fs.readFileSync(path.join(home, '.openclaw', 'openclaw.json'), 'utf-8'));
|
|
182
|
+
return cfg.plugins?.entries?.[PLUGIN_ID]?.enabled === false;
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
}
|
package/dist/setup/openclaw.d.ts
CHANGED
|
@@ -88,33 +88,28 @@ export interface OpenClawInstallOptions {
|
|
|
88
88
|
export declare function installOpenClawHook(options?: OpenClawInstallOptions): Promise<void>;
|
|
89
89
|
export declare function uninstallOpenClawHook(): Promise<void>;
|
|
90
90
|
export declare function openClawHookStatus(): Promise<void>;
|
|
91
|
+
export type ManagedPinRepairStatus = 'not-installed' | 'clean' | 'healed' | 'failed';
|
|
92
|
+
export interface ManagedPinRepairResult {
|
|
93
|
+
status: ManagedPinRepairStatus;
|
|
94
|
+
message: string;
|
|
95
|
+
}
|
|
91
96
|
/**
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
* Diagnoses and fixes the duplicate-plugin-id mess that `shieldcortex doctor`'s
|
|
95
|
-
* "OpenClaw dup installs" check surfaces. Two distinct cases:
|
|
96
|
-
*
|
|
97
|
-
* 1. **Sticky hooks/ duplicate** — when a copy sits at `~/.openclaw/hooks/
|
|
98
|
-
* shieldcortex-realtime/`, plain `rm -rf` reverts on the next
|
|
99
|
-
* `openclaw plugins update` because OpenClaw's hook-pack install
|
|
100
|
-
* tracking re-creates it. The only reliable purge is a full
|
|
101
|
-
* `openclaw plugins uninstall` + `plugins install @latest` round-trip,
|
|
102
|
-
* which clears every tracking record at once. Customer-side config
|
|
103
|
-
* under `~/.openclaw/openclaw.json` → `plugins.entries.shieldcortex-
|
|
104
|
-
* realtime` (interceptor severity actions, cloudApiKey, autoMemory
|
|
105
|
-
* thresholds, the enabled flag, allowlist membership) is wiped by
|
|
106
|
-
* `plugins uninstall`, so this function snapshots it first and
|
|
107
|
-
* restores it after reinstall.
|
|
108
|
-
*
|
|
109
|
-
* 2. **Extensions/ leftovers** — legacy install locations and
|
|
110
|
-
* `.trash-*` / `*.disabled-*` directories. No sticky state — a simple
|
|
111
|
-
* `rm -rf` suffices.
|
|
97
|
+
* Heal the OpenClaw `EOVERRIDE` trap that silently disables the realtime plugin
|
|
98
|
+
* on `openclaw update` (upstream openclaw/openclaw#91772).
|
|
112
99
|
*
|
|
113
|
-
*
|
|
100
|
+
* OpenClaw pins shared deps in the plugin's generated project manifest's
|
|
101
|
+
* `dependencies` (managed peers) but never advances them, while it re-imports
|
|
102
|
+
* its bundled workspace `overrides` each release. When the two drift to
|
|
103
|
+
* different versions for the same package, npm's `assertRootOverrides` throws
|
|
104
|
+
* and OpenClaw disables the plugin. The heal: strip the drifted dependency pins
|
|
105
|
+
* (OpenClaw's reinstall re-derives them at the override version, so they match),
|
|
106
|
+
* advance the stale `shieldcortex` lib pin to the running version, re-enable the
|
|
107
|
+
* plugin if it was auto-disabled, and reinstall so the manifest recomputes
|
|
108
|
+
* consistently. Validated by hand on a real box; mirrors that exact sequence.
|
|
114
109
|
*
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
* can recover manually.
|
|
110
|
+
* Returns a structured result; prints progress so `shieldcortex openclaw repair`
|
|
111
|
+
* reads coherently.
|
|
118
112
|
*/
|
|
113
|
+
export declare function repairOpenClawManagedPins(homeArg?: string): Promise<ManagedPinRepairResult>;
|
|
119
114
|
export declare function repairOpenClawPlugin(): Promise<void>;
|
|
120
115
|
export declare function handleOpenClawCommand(subcommand: string, extraArgs?: string[]): Promise<void>;
|
package/dist/setup/openclaw.js
CHANGED
|
@@ -10,6 +10,7 @@ import path from 'path';
|
|
|
10
10
|
import os from 'os';
|
|
11
11
|
import { execSync, spawnSync } from 'child_process';
|
|
12
12
|
import { fileURLToPath, pathToFileURL } from 'url';
|
|
13
|
+
import { resolveRealtimeProjectDir, readRealtimeProjectManifest, findEoverrideRiskPins, isRealtimePluginDisabledInConfig, } from '../integrations/openclaw-plugin-state.js';
|
|
13
14
|
const __filename = fileURLToPath(import.meta.url);
|
|
14
15
|
const __dirname = path.dirname(__filename);
|
|
15
16
|
const HOOK_NAME = 'cortex-memory';
|
|
@@ -1104,6 +1105,119 @@ export async function openClawHookStatus() {
|
|
|
1104
1105
|
* written to `~/.openclaw/openclaw.json.repair-backup-<ts>` so the user
|
|
1105
1106
|
* can recover manually.
|
|
1106
1107
|
*/
|
|
1108
|
+
/** This package's own version (the shieldcortex lib the realtime plugin should
|
|
1109
|
+
* run against), read from the package root. */
|
|
1110
|
+
function readSelfVersion() {
|
|
1111
|
+
try {
|
|
1112
|
+
const root = path.resolve(__dirname, '..', '..');
|
|
1113
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf-8'));
|
|
1114
|
+
return typeof pkg.version === 'string' ? pkg.version : null;
|
|
1115
|
+
}
|
|
1116
|
+
catch {
|
|
1117
|
+
return null;
|
|
1118
|
+
}
|
|
1119
|
+
}
|
|
1120
|
+
/**
|
|
1121
|
+
* Heal the OpenClaw `EOVERRIDE` trap that silently disables the realtime plugin
|
|
1122
|
+
* on `openclaw update` (upstream openclaw/openclaw#91772).
|
|
1123
|
+
*
|
|
1124
|
+
* OpenClaw pins shared deps in the plugin's generated project manifest's
|
|
1125
|
+
* `dependencies` (managed peers) but never advances them, while it re-imports
|
|
1126
|
+
* its bundled workspace `overrides` each release. When the two drift to
|
|
1127
|
+
* different versions for the same package, npm's `assertRootOverrides` throws
|
|
1128
|
+
* and OpenClaw disables the plugin. The heal: strip the drifted dependency pins
|
|
1129
|
+
* (OpenClaw's reinstall re-derives them at the override version, so they match),
|
|
1130
|
+
* advance the stale `shieldcortex` lib pin to the running version, re-enable the
|
|
1131
|
+
* plugin if it was auto-disabled, and reinstall so the manifest recomputes
|
|
1132
|
+
* consistently. Validated by hand on a real box; mirrors that exact sequence.
|
|
1133
|
+
*
|
|
1134
|
+
* Returns a structured result; prints progress so `shieldcortex openclaw repair`
|
|
1135
|
+
* reads coherently.
|
|
1136
|
+
*/
|
|
1137
|
+
export async function repairOpenClawManagedPins(homeArg) {
|
|
1138
|
+
const home = homeArg ?? resolveUserHome();
|
|
1139
|
+
const pluginId = 'shieldcortex-realtime';
|
|
1140
|
+
const pluginSpec = '@drakon-systems/shieldcortex-realtime@latest';
|
|
1141
|
+
const projectDir = resolveRealtimeProjectDir(home);
|
|
1142
|
+
const manifest = readRealtimeProjectManifest(home);
|
|
1143
|
+
if (!projectDir || !manifest) {
|
|
1144
|
+
return { status: 'not-installed', message: 'Realtime plugin not installed; no managed pins to reconcile.' };
|
|
1145
|
+
}
|
|
1146
|
+
const risks = findEoverrideRiskPins(manifest);
|
|
1147
|
+
const disabled = isRealtimePluginDisabledInConfig(home);
|
|
1148
|
+
const selfVersion = readSelfVersion();
|
|
1149
|
+
const deps = (typeof manifest.dependencies === 'object' && manifest.dependencies
|
|
1150
|
+
? manifest.dependencies
|
|
1151
|
+
: {});
|
|
1152
|
+
const staleShieldcortex = typeof deps.shieldcortex === 'string' && !!selfVersion && deps.shieldcortex !== selfVersion;
|
|
1153
|
+
if (risks.length === 0 && !disabled && !staleShieldcortex) {
|
|
1154
|
+
return { status: 'clean', message: 'Realtime plugin pins are consistent and the plugin is enabled. Nothing to reconcile.' };
|
|
1155
|
+
}
|
|
1156
|
+
console.log('Reconciling OpenClaw managed plugin pins (EOVERRIDE guard):');
|
|
1157
|
+
if (risks.length)
|
|
1158
|
+
console.log(` - version-drifted pins: ${risks.map((r) => `${r.name} (${r.dependencyVersion}→${r.overrideVersion})`).join(', ')}`);
|
|
1159
|
+
if (staleShieldcortex)
|
|
1160
|
+
console.log(` - stale shieldcortex lib pin: ${String(deps.shieldcortex)} → ${selfVersion}`);
|
|
1161
|
+
if (disabled)
|
|
1162
|
+
console.log(' - plugin is disabled in config (auto-disabled after a failed update)');
|
|
1163
|
+
// 1. Backup the project manifest before touching it.
|
|
1164
|
+
const manifestPath = path.join(projectDir, 'package.json');
|
|
1165
|
+
const ts = new Date().toISOString().replace(/[:.]/g, '-');
|
|
1166
|
+
try {
|
|
1167
|
+
fs.writeFileSync(`${manifestPath}.repair-backup-${ts}`, JSON.stringify(manifest, null, 2));
|
|
1168
|
+
console.log(` - safety backup: ${`${manifestPath}.repair-backup-${ts}`.replace(home, '~')}`);
|
|
1169
|
+
}
|
|
1170
|
+
catch { /* best-effort */ }
|
|
1171
|
+
// 2. Strip drifted pins (reinstall re-derives them at the override version)
|
|
1172
|
+
// and advance the stale shieldcortex pin.
|
|
1173
|
+
for (const r of risks)
|
|
1174
|
+
delete deps[r.name];
|
|
1175
|
+
if (staleShieldcortex && selfVersion)
|
|
1176
|
+
deps.shieldcortex = selfVersion;
|
|
1177
|
+
manifest.dependencies = deps;
|
|
1178
|
+
try {
|
|
1179
|
+
fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + '\n');
|
|
1180
|
+
}
|
|
1181
|
+
catch (err) {
|
|
1182
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
1183
|
+
return { status: 'failed', message: `Could not write the project manifest (${msg}). Backup left at ${manifestPath}.repair-backup-${ts}.` };
|
|
1184
|
+
}
|
|
1185
|
+
// 3. Resolve the openclaw binary.
|
|
1186
|
+
let openclawBin;
|
|
1187
|
+
try {
|
|
1188
|
+
openclawBin = execSync('which openclaw', { encoding: 'utf-8', timeout: 5000 }).trim();
|
|
1189
|
+
if (!openclawBin || !fs.existsSync(openclawBin))
|
|
1190
|
+
throw new Error('not on PATH');
|
|
1191
|
+
}
|
|
1192
|
+
catch {
|
|
1193
|
+
return { status: 'failed', message: 'Manifest reconciled, but `openclaw` is not on PATH to reinstall. Run `openclaw plugins install --force ' + pluginSpec + '` then `openclaw gateway restart`.' };
|
|
1194
|
+
}
|
|
1195
|
+
const spawnEnv = { ...process.env, HOME: home };
|
|
1196
|
+
// 4. Re-enable if it was auto-disabled.
|
|
1197
|
+
if (disabled) {
|
|
1198
|
+
spawnSync(openclawBin, ['plugins', 'enable', pluginId], { encoding: 'utf-8', env: spawnEnv, timeout: 30000 });
|
|
1199
|
+
}
|
|
1200
|
+
// 5. Reinstall so OpenClaw recomputes a consistent manifest (re-derives the
|
|
1201
|
+
// stripped pins at the override version — no more drift).
|
|
1202
|
+
console.log(` - reinstalling: openclaw plugins install --force ${pluginSpec}`);
|
|
1203
|
+
const reinstall = spawnSync(openclawBin, ['plugins', 'install', '--force', pluginSpec], { encoding: 'utf-8', env: spawnEnv, timeout: 180000 });
|
|
1204
|
+
if (reinstall.status !== 0) {
|
|
1205
|
+
const out = `${reinstall.stderr ?? ''}${reinstall.stdout ?? ''}`.trim().split('\n').slice(-4).join('\n');
|
|
1206
|
+
return { status: 'failed', message: `Reinstall failed after reconciling the manifest:\n${out}\nManifest backup: ${manifestPath}.repair-backup-${ts}` };
|
|
1207
|
+
}
|
|
1208
|
+
// 6. Verify no residual drift.
|
|
1209
|
+
const after = readRealtimeProjectManifest(home);
|
|
1210
|
+
const residual = after ? findEoverrideRiskPins(after) : [];
|
|
1211
|
+
if (residual.length > 0) {
|
|
1212
|
+
return { status: 'failed', message: `Reinstall succeeded but pins still drift: ${residual.map((r) => r.name).join(', ')}. Backup: ${manifestPath}.repair-backup-${ts}` };
|
|
1213
|
+
}
|
|
1214
|
+
const parts = [`Reconciled ${risks.length} drifted pin(s)`];
|
|
1215
|
+
if (staleShieldcortex)
|
|
1216
|
+
parts.push(`advanced shieldcortex to ${selfVersion}`);
|
|
1217
|
+
if (disabled)
|
|
1218
|
+
parts.push('re-enabled the plugin');
|
|
1219
|
+
return { status: 'healed', message: `${parts.join(', ')}. Restart to load it: openclaw gateway restart` };
|
|
1220
|
+
}
|
|
1107
1221
|
export async function repairOpenClawPlugin() {
|
|
1108
1222
|
const home = resolveUserHome();
|
|
1109
1223
|
const openclawDir = path.join(home, '.openclaw');
|
|
@@ -1113,6 +1227,25 @@ export async function repairOpenClawPlugin() {
|
|
|
1113
1227
|
console.log('OpenClaw not detected (~/.openclaw missing). Nothing to repair.');
|
|
1114
1228
|
return;
|
|
1115
1229
|
}
|
|
1230
|
+
// First concern: reconcile managed-pin drift / re-enable a plugin that
|
|
1231
|
+
// OpenClaw auto-disabled after an EOVERRIDE on update (openclaw#91772).
|
|
1232
|
+
try {
|
|
1233
|
+
const pinResult = await repairOpenClawManagedPins(home);
|
|
1234
|
+
if (pinResult.status === 'healed') {
|
|
1235
|
+
console.log(` ✓ ${pinResult.message}`);
|
|
1236
|
+
console.log('');
|
|
1237
|
+
}
|
|
1238
|
+
else if (pinResult.status === 'failed') {
|
|
1239
|
+
console.log(` ✗ ${pinResult.message}`);
|
|
1240
|
+
console.log('');
|
|
1241
|
+
}
|
|
1242
|
+
// 'clean' / 'not-installed' → stay quiet and fall through to the dup check.
|
|
1243
|
+
}
|
|
1244
|
+
catch (err) {
|
|
1245
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
1246
|
+
console.log(` ✗ managed-pin reconcile errored — ${msg}`);
|
|
1247
|
+
console.log('');
|
|
1248
|
+
}
|
|
1116
1249
|
// Find duplicate install locations (same scan as the doctor check).
|
|
1117
1250
|
const dupCandidates = [];
|
|
1118
1251
|
for (const subdir of ['extensions', 'hooks']) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "shieldcortex",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.33.0",
|
|
4
4
|
"description": "Trustworthy memory and security for AI agents. Recall debugging, review queue, OpenClaw session capture, and memory poisoning defence for Claude Code, Codex, OpenClaw, LangChain, and MCP agents.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
File without changes
|
|
File without changes
|