shieldcortex 4.31.2 → 4.32.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +78 -2
- package/dashboard/.next/standalone/dashboard/.next/BUILD_ID +1 -1
- package/dashboard/.next/standalone/dashboard/.next/build-manifest.json +2 -2
- package/dashboard/.next/standalone/dashboard/.next/prerender-manifest.json +3 -3
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/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/dashboard/.next/standalone/dashboard/.next/server/server-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/server-reference-manifest.json +1 -1
- package/dist/api/control.d.ts +2 -0
- package/dist/api/control.js +119 -2
- package/dist/api/routes/memories.js +19 -14
- package/dist/api/routes/system.js +2 -3
- package/dist/api/visualization-server.d.ts +13 -1
- package/dist/api/visualization-server.js +57 -1
- package/dist/audit/env-scanner.js +5 -2
- package/dist/audit/index.d.ts +4 -1
- package/dist/audit/index.js +2 -1
- package/dist/audit/mcp-config-scanner.d.ts +23 -0
- package/dist/audit/mcp-config-scanner.js +110 -0
- package/dist/audit/mcp-tools-scanner.d.ts +112 -0
- package/dist/audit/mcp-tools-scanner.js +299 -0
- package/dist/cli/audit.d.ts +1 -0
- package/dist/cli/audit.js +12 -1
- package/dist/cli/doctor.js +4 -1
- package/dist/cli/mcp.d.ts +13 -0
- package/dist/cli/mcp.js +0 -0
- package/dist/cli/remember.d.ts +75 -0
- package/dist/cli/remember.js +195 -0
- package/dist/cli/repair.d.ts +8 -0
- package/dist/cli/repair.js +34 -0
- package/dist/cli/update.js +34 -0
- package/dist/cloud/config.d.ts +23 -1
- package/dist/cloud/config.js +453 -193
- package/dist/cloud/quarantine-sync.d.ts +12 -2
- package/dist/cloud/quarantine-sync.js +28 -6
- package/dist/cloud/sync-queue.d.ts +21 -2
- package/dist/cloud/sync-queue.js +124 -29
- package/dist/database/better-sqlite3-guard.d.ts +21 -2
- package/dist/database/better-sqlite3-guard.js +29 -5
- package/dist/database/init.js +68 -16
- package/dist/database/inline-schema.js +35 -1
- package/dist/database/migrations.js +104 -8
- package/dist/database/schema.sql +39 -1
- package/dist/defence/audit/queries.d.ts +10 -2
- package/dist/defence/audit/queries.js +30 -4
- package/dist/defence/audit/retention.d.ts +50 -0
- package/dist/defence/audit/retention.js +161 -0
- package/dist/defence/credential-leak/entropy.d.ts +11 -0
- package/dist/defence/credential-leak/entropy.js +27 -0
- package/dist/defence/credential-leak/index.js +27 -1
- package/dist/defence/credential-leak/patterns.d.ts +9 -0
- package/dist/defence/credential-leak/patterns.js +21 -0
- package/dist/defence/custom-patterns/store.js +8 -1
- package/dist/defence/custom-rules/store.d.ts +18 -0
- package/dist/defence/custom-rules/store.js +63 -0
- package/dist/defence/firewall/confusables.d.ts +30 -0
- package/dist/defence/firewall/confusables.js +87 -0
- package/dist/defence/firewall/encoding-detector.js +23 -9
- package/dist/defence/firewall/index.d.ts +11 -1
- package/dist/defence/firewall/index.js +34 -1
- package/dist/defence/firewall/instruction-detector.js +18 -7
- package/dist/defence/firewall/markdown-image-detector.d.ts +34 -0
- package/dist/defence/firewall/markdown-image-detector.js +83 -0
- package/dist/defence/fragmentation/entity-extractor.js +17 -6
- package/dist/defence/index.d.ts +5 -0
- package/dist/defence/index.js +8 -0
- package/dist/defence/iron-dome/index.js +7 -1
- package/dist/defence/pipeline.js +62 -10
- package/dist/defence/scan-windows.d.ts +41 -0
- package/dist/defence/scan-windows.js +61 -0
- package/dist/defence/semantic/attack-corpus.d.ts +22 -0
- package/dist/defence/semantic/attack-corpus.js +75 -0
- package/dist/defence/semantic/index.d.ts +67 -0
- package/dist/defence/semantic/index.js +138 -0
- package/dist/defence/skill-scanner/deep-scan.js +35 -15
- package/dist/defence/skill-scanner/patterns.d.ts +1 -1
- package/dist/defence/skill-scanner/patterns.js +8 -7
- package/dist/defence/tool-response-scanner.d.ts +21 -5
- package/dist/defence/tool-response-scanner.js +111 -22
- package/dist/defence/types.d.ts +11 -1
- package/dist/index.d.ts +29 -0
- package/dist/index.js +112 -21
- package/dist/memory/consolidate.js +1 -1
- package/dist/memory/decay.js +3 -1
- package/dist/memory/embedding.d.ts +18 -2
- package/dist/memory/embedding.js +32 -11
- package/dist/memory/expiry.js +1 -1
- package/dist/memory/search-recall.js +107 -49
- package/dist/memory/search.d.ts +19 -3
- package/dist/memory/search.js +25 -10
- package/dist/memory/store.d.ts +13 -2
- package/dist/memory/store.js +115 -11
- package/dist/scan-only.d.ts +64 -0
- package/dist/scan-only.js +173 -0
- package/dist/server.d.ts +5 -0
- package/dist/server.js +6 -4
- package/dist/setup/claude-md.js +39 -34
- package/dist/setup/codex.js +9 -2
- package/dist/setup/copilot.js +160 -47
- package/dist/setup/json-config.d.ts +99 -0
- package/dist/setup/json-config.js +167 -0
- package/dist/setup/migrate.js +1 -1
- package/dist/setup/native-binding.d.ts +75 -0
- package/dist/setup/native-binding.js +146 -0
- package/dist/setup/settings-hooks.js +8 -13
- package/dist/setup/uninstall.js +1 -21
- package/dist/tools/context.d.ts +8 -8
- package/dist/tools/forget.d.ts +9 -8
- package/dist/tools/forget.js +17 -4
- package/dist/tools/recall.d.ts +13 -13
- package/dist/tools/remember.d.ts +16 -16
- package/dist/tools/remember.js +19 -8
- package/dist/worker/brain-worker.d.ts +1 -0
- package/dist/worker/brain-worker.js +79 -16
- package/dist/worker/types.d.ts +8 -0
- package/dist/worker/types.js +8 -0
- package/dist/xray/dir-scanner.d.ts +18 -0
- package/dist/xray/dir-scanner.js +23 -1
- package/dist/xray/file-scanner.js +16 -1
- package/dist/xray/findings-store.js +9 -1
- package/dist/xray/index.d.ts +2 -0
- package/dist/xray/index.js +10 -1
- package/dist/xray/npm-inspector.d.ts +31 -0
- package/dist/xray/npm-inspector.js +135 -29
- package/dist/xray/patterns.d.ts +1 -1
- package/dist/xray/patterns.js +20 -23
- package/dist/xray/sarif.d.ts +78 -0
- package/dist/xray/sarif.js +166 -0
- package/dist/xray/watch.d.ts +1 -0
- package/dist/xray/watch.js +10 -1
- package/hooks/openclaw/cortex-memory/handler.ts +122 -18
- package/hooks/openclaw/cortex-memory/runtime.mjs +10 -4
- package/package.json +10 -3
- package/scripts/postinstall.mjs +8 -3
- package/dist/memory/embedding-cache.d.ts +0 -20
- package/dist/memory/embedding-cache.js +0 -91
- /package/dashboard/.next/standalone/dashboard/.next/static/{_j4TeMpss-w79QtNNWqZw → tjJ3X8xQ-2_WQTPGF3zCA}/_buildManifest.js +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{_j4TeMpss-w79QtNNWqZw → tjJ3X8xQ-2_WQTPGF3zCA}/_clientMiddlewareManifest.json +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{_j4TeMpss-w79QtNNWqZw → tjJ3X8xQ-2_WQTPGF3zCA}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `shieldcortex remember "<title>" --content "<text>" [options]` (Phase 15c)
|
|
3
|
+
*
|
|
4
|
+
* A real, non-hanging CLI write command. The historical gotcha — "remember CLI
|
|
5
|
+
* hangs, avoid until fixed" — was that no such subcommand existed; any lookalike
|
|
6
|
+
* path blocked on a stdio/TTY transport. This command writes a memory directly
|
|
7
|
+
* through the SAME store path the MCP `remember` tool uses (executeRemember), so
|
|
8
|
+
* the defence pipeline + project scoping + dedupe all apply, then EXITS cleanly.
|
|
9
|
+
*
|
|
10
|
+
* Anti-hang contract: content comes from `--content`, else from PIPED stdin.
|
|
11
|
+
* If neither is present (an interactive TTY with no flag), we print usage and
|
|
12
|
+
* exit non-zero rather than blocking on a read that would never resolve.
|
|
13
|
+
*
|
|
14
|
+
* Layering:
|
|
15
|
+
* - `runRemember` is the pure core: takes resolved options, returns a
|
|
16
|
+
* structured result. No argv, no process.exit, no stdin — fully testable.
|
|
17
|
+
* - `resolveRememberContent` isolates the stdin/TTY decision so the anti-hang
|
|
18
|
+
* behaviour can be asserted without a real terminal.
|
|
19
|
+
* - `handleRememberCommand` is the thin CLI wrapper: parse argv, resolve
|
|
20
|
+
* content, run, print, drain cloud sync, close DB, exit.
|
|
21
|
+
*/
|
|
22
|
+
import { type RememberInput } from '../tools/remember.js';
|
|
23
|
+
type Importance = 'low' | 'medium' | 'high';
|
|
24
|
+
export interface RememberOptions {
|
|
25
|
+
title: string;
|
|
26
|
+
content: string;
|
|
27
|
+
category?: string;
|
|
28
|
+
importance?: Importance;
|
|
29
|
+
tags?: string[];
|
|
30
|
+
project?: string;
|
|
31
|
+
/** Flat source type — defaults to a `cli` source so interactive writes stay uncapped. */
|
|
32
|
+
sourceType?: RememberInput['sourceType'];
|
|
33
|
+
sourceIdentifier?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface RememberResult {
|
|
36
|
+
success: boolean;
|
|
37
|
+
memory?: {
|
|
38
|
+
id: number;
|
|
39
|
+
title: string;
|
|
40
|
+
salience: number;
|
|
41
|
+
type: string;
|
|
42
|
+
category: string;
|
|
43
|
+
};
|
|
44
|
+
error?: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Pure write core. Delegates entirely to executeRemember so the defence
|
|
48
|
+
* pipeline, project auto-scoping, dedupe and salience handling are reused
|
|
49
|
+
* verbatim — there is no second implementation to drift.
|
|
50
|
+
*/
|
|
51
|
+
export declare function runRemember(opts: RememberOptions): Promise<RememberResult>;
|
|
52
|
+
/**
|
|
53
|
+
* Resolve the memory content from the flag or piped stdin WITHOUT ever blocking
|
|
54
|
+
* on a TTY. `readStdin` is injected so this is unit-testable.
|
|
55
|
+
*
|
|
56
|
+
* Precedence: explicit --content > piped stdin > usage error.
|
|
57
|
+
*/
|
|
58
|
+
export declare function resolveRememberContent(args: {
|
|
59
|
+
contentFlag: string | undefined;
|
|
60
|
+
isTTY: boolean;
|
|
61
|
+
readStdin: () => Promise<string>;
|
|
62
|
+
}): Promise<{
|
|
63
|
+
ok: true;
|
|
64
|
+
content: string;
|
|
65
|
+
} | {
|
|
66
|
+
ok: false;
|
|
67
|
+
usage: boolean;
|
|
68
|
+
}>;
|
|
69
|
+
/**
|
|
70
|
+
* CLI entry point. Parses argv, resolves content (flag or piped stdin, never a
|
|
71
|
+
* TTY block), runs the write, prints a concise human or --json result, drains
|
|
72
|
+
* any in-flight cloud sync, closes the DB to release handles, and exits.
|
|
73
|
+
*/
|
|
74
|
+
export declare function handleRememberCommand(args: string[]): Promise<void>;
|
|
75
|
+
export {};
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `shieldcortex remember "<title>" --content "<text>" [options]` (Phase 15c)
|
|
3
|
+
*
|
|
4
|
+
* A real, non-hanging CLI write command. The historical gotcha — "remember CLI
|
|
5
|
+
* hangs, avoid until fixed" — was that no such subcommand existed; any lookalike
|
|
6
|
+
* path blocked on a stdio/TTY transport. This command writes a memory directly
|
|
7
|
+
* through the SAME store path the MCP `remember` tool uses (executeRemember), so
|
|
8
|
+
* the defence pipeline + project scoping + dedupe all apply, then EXITS cleanly.
|
|
9
|
+
*
|
|
10
|
+
* Anti-hang contract: content comes from `--content`, else from PIPED stdin.
|
|
11
|
+
* If neither is present (an interactive TTY with no flag), we print usage and
|
|
12
|
+
* exit non-zero rather than blocking on a read that would never resolve.
|
|
13
|
+
*
|
|
14
|
+
* Layering:
|
|
15
|
+
* - `runRemember` is the pure core: takes resolved options, returns a
|
|
16
|
+
* structured result. No argv, no process.exit, no stdin — fully testable.
|
|
17
|
+
* - `resolveRememberContent` isolates the stdin/TTY decision so the anti-hang
|
|
18
|
+
* behaviour can be asserted without a real terminal.
|
|
19
|
+
* - `handleRememberCommand` is the thin CLI wrapper: parse argv, resolve
|
|
20
|
+
* content, run, print, drain cloud sync, close DB, exit.
|
|
21
|
+
*/
|
|
22
|
+
import { executeRemember } from '../tools/remember.js';
|
|
23
|
+
import { closeDatabase, initDatabase } from '../database/init.js';
|
|
24
|
+
// CLI importance vocabulary → the MCP tool's importance scale. The CLI exposes
|
|
25
|
+
// the friendlier low/medium/high; the tool maps low:0.3, normal:0.5, high:0.8.
|
|
26
|
+
const IMPORTANCE_TO_TOOL = {
|
|
27
|
+
low: 'low',
|
|
28
|
+
medium: 'normal',
|
|
29
|
+
high: 'high',
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Pure write core. Delegates entirely to executeRemember so the defence
|
|
33
|
+
* pipeline, project auto-scoping, dedupe and salience handling are reused
|
|
34
|
+
* verbatim — there is no second implementation to drift.
|
|
35
|
+
*/
|
|
36
|
+
export async function runRemember(opts) {
|
|
37
|
+
const input = {
|
|
38
|
+
title: opts.title,
|
|
39
|
+
content: opts.content,
|
|
40
|
+
category: opts.category,
|
|
41
|
+
importance: opts.importance ? IMPORTANCE_TO_TOOL[opts.importance] : undefined,
|
|
42
|
+
tags: opts.tags,
|
|
43
|
+
project: opts.project,
|
|
44
|
+
// Default to a `cli` source. addMemory only runs the trust/defence pipeline
|
|
45
|
+
// when a source is present, so passing one ensures malicious content is
|
|
46
|
+
// actually scanned (and a `cli` source stays uncapped, unlike `hook`).
|
|
47
|
+
sourceType: opts.sourceType ?? 'cli',
|
|
48
|
+
sourceIdentifier: opts.sourceIdentifier ?? 'shieldcortex-remember-cli',
|
|
49
|
+
};
|
|
50
|
+
const result = await executeRemember(input);
|
|
51
|
+
if (!result.success) {
|
|
52
|
+
return { success: false, error: result.error };
|
|
53
|
+
}
|
|
54
|
+
const m = result.memory;
|
|
55
|
+
return {
|
|
56
|
+
success: true,
|
|
57
|
+
memory: { id: m.id, title: m.title, salience: m.salience, type: m.type, category: m.category },
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Resolve the memory content from the flag or piped stdin WITHOUT ever blocking
|
|
62
|
+
* on a TTY. `readStdin` is injected so this is unit-testable.
|
|
63
|
+
*
|
|
64
|
+
* Precedence: explicit --content > piped stdin > usage error.
|
|
65
|
+
*/
|
|
66
|
+
export async function resolveRememberContent(args) {
|
|
67
|
+
if (args.contentFlag !== undefined) {
|
|
68
|
+
return { ok: true, content: args.contentFlag };
|
|
69
|
+
}
|
|
70
|
+
// No --content. Only read stdin if it is actually piped — never on a TTY,
|
|
71
|
+
// which would hang waiting for input that never comes. THIS is the anti-hang.
|
|
72
|
+
if (!args.isTTY) {
|
|
73
|
+
const piped = await args.readStdin();
|
|
74
|
+
return { ok: true, content: piped };
|
|
75
|
+
}
|
|
76
|
+
return { ok: false, usage: true };
|
|
77
|
+
}
|
|
78
|
+
/** Read all of process.stdin to EOF. Only called when stdin is piped. */
|
|
79
|
+
function readPipedStdin() {
|
|
80
|
+
return new Promise((resolve, reject) => {
|
|
81
|
+
let data = '';
|
|
82
|
+
process.stdin.setEncoding('utf-8');
|
|
83
|
+
process.stdin.on('data', (chunk) => {
|
|
84
|
+
data += chunk;
|
|
85
|
+
});
|
|
86
|
+
process.stdin.on('end', () => resolve(data));
|
|
87
|
+
process.stdin.on('error', reject);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
function parseFlag(args, name) {
|
|
91
|
+
const idx = args.indexOf(name);
|
|
92
|
+
if (idx === -1 || idx === args.length - 1)
|
|
93
|
+
return undefined;
|
|
94
|
+
return args[idx + 1];
|
|
95
|
+
}
|
|
96
|
+
function printUsage() {
|
|
97
|
+
console.error('Usage: shieldcortex remember "<title>" --content "<text>" [options]');
|
|
98
|
+
console.error(' echo "<text>" | shieldcortex remember "<title>"');
|
|
99
|
+
console.error('');
|
|
100
|
+
console.error('Options:');
|
|
101
|
+
console.error(' --content <text> Memory content (or pipe it via stdin)');
|
|
102
|
+
console.error(' --category <category> architecture|pattern|preference|error|context|');
|
|
103
|
+
console.error(' learning|todo|note|relationship|custom');
|
|
104
|
+
console.error(' --importance <level> low | medium | high');
|
|
105
|
+
console.error(' --tags <a,b,c> Comma-separated tags');
|
|
106
|
+
console.error(' --project <name> Project scope (auto-detected if omitted)');
|
|
107
|
+
console.error(' --json Emit a structured JSON result');
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* CLI entry point. Parses argv, resolves content (flag or piped stdin, never a
|
|
111
|
+
* TTY block), runs the write, prints a concise human or --json result, drains
|
|
112
|
+
* any in-flight cloud sync, closes the DB to release handles, and exits.
|
|
113
|
+
*/
|
|
114
|
+
export async function handleRememberCommand(args) {
|
|
115
|
+
const json = args.includes('--json');
|
|
116
|
+
// First positional (not a flag, not a flag value) is the title.
|
|
117
|
+
let title;
|
|
118
|
+
for (let i = 0; i < args.length; i++) {
|
|
119
|
+
const a = args[i];
|
|
120
|
+
if (a.startsWith('--')) {
|
|
121
|
+
// Skip the value of value-taking flags so it can't be misread as the title.
|
|
122
|
+
if (['--content', '--category', '--importance', '--tags', '--project'].includes(a))
|
|
123
|
+
i++;
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
title = a;
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
if (!title) {
|
|
130
|
+
printUsage();
|
|
131
|
+
process.exit(2);
|
|
132
|
+
}
|
|
133
|
+
const importanceRaw = parseFlag(args, '--importance');
|
|
134
|
+
let importance;
|
|
135
|
+
if (importanceRaw !== undefined) {
|
|
136
|
+
if (importanceRaw === 'low' || importanceRaw === 'medium' || importanceRaw === 'high') {
|
|
137
|
+
importance = importanceRaw;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
console.error(`Invalid --importance "${importanceRaw}". Use: low | medium | high.`);
|
|
141
|
+
process.exit(2);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
const resolved = await resolveRememberContent({
|
|
145
|
+
contentFlag: parseFlag(args, '--content'),
|
|
146
|
+
isTTY: Boolean(process.stdin.isTTY),
|
|
147
|
+
readStdin: readPipedStdin,
|
|
148
|
+
});
|
|
149
|
+
if (!resolved.ok) {
|
|
150
|
+
console.error('No content provided. Pass --content "<text>" or pipe text via stdin.');
|
|
151
|
+
console.error('');
|
|
152
|
+
printUsage();
|
|
153
|
+
process.exit(2);
|
|
154
|
+
}
|
|
155
|
+
const tagsRaw = parseFlag(args, '--tags');
|
|
156
|
+
const tags = tagsRaw
|
|
157
|
+
? tagsRaw.split(',').map((t) => t.trim()).filter(Boolean)
|
|
158
|
+
: undefined;
|
|
159
|
+
// Initialise the DB explicitly — executeRemember assumes an initialised store.
|
|
160
|
+
initDatabase();
|
|
161
|
+
let exitCode = 0;
|
|
162
|
+
try {
|
|
163
|
+
const result = await runRemember({
|
|
164
|
+
title,
|
|
165
|
+
content: resolved.content,
|
|
166
|
+
category: parseFlag(args, '--category'),
|
|
167
|
+
importance,
|
|
168
|
+
tags,
|
|
169
|
+
project: parseFlag(args, '--project'),
|
|
170
|
+
});
|
|
171
|
+
if (json) {
|
|
172
|
+
console.log(JSON.stringify(result));
|
|
173
|
+
}
|
|
174
|
+
else if (result.success && result.memory) {
|
|
175
|
+
const m = result.memory;
|
|
176
|
+
console.log(`Remembered "${m.title}" (id ${m.id}, ${m.category}, salience ${(m.salience * 100).toFixed(0)}%).`);
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
console.error(`Not remembered: ${result.error ?? 'unknown error'}`);
|
|
180
|
+
}
|
|
181
|
+
exitCode = result.success ? 0 : 1;
|
|
182
|
+
}
|
|
183
|
+
finally {
|
|
184
|
+
// Clean exit — release any open handles so the process does not linger.
|
|
185
|
+
try {
|
|
186
|
+
const { flushPendingCloudSync } = await import('../cloud/sync.js');
|
|
187
|
+
await flushPendingCloudSync(8000);
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
// Cloud sync drain is best-effort; never block exit on it.
|
|
191
|
+
}
|
|
192
|
+
closeDatabase();
|
|
193
|
+
}
|
|
194
|
+
process.exit(exitCode);
|
|
195
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `shieldcortex repair` — fix a broken install in place.
|
|
3
|
+
*
|
|
4
|
+
* Today it heals the better-sqlite3 native binding (the #1 post-update breakage
|
|
5
|
+
* on arm64 / newer-than-prebuilt Node): verify → rebuild in the install dir →
|
|
6
|
+
* re-verify, then print the exact remediation if it still can't load.
|
|
7
|
+
*/
|
|
8
|
+
export declare function runRepair(): Promise<void>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `shieldcortex repair` — fix a broken install in place.
|
|
3
|
+
*
|
|
4
|
+
* Today it heals the better-sqlite3 native binding (the #1 post-update breakage
|
|
5
|
+
* on arm64 / newer-than-prebuilt Node): verify → rebuild in the install dir →
|
|
6
|
+
* re-verify, then print the exact remediation if it still can't load.
|
|
7
|
+
*/
|
|
8
|
+
import { ensureNativeBinding } from '../setup/native-binding.js';
|
|
9
|
+
const isTTY = Boolean(process.stdout.isTTY);
|
|
10
|
+
const c = (code, s) => (isTTY ? `\x1b[${code}m${s}\x1b[0m` : s);
|
|
11
|
+
export async function runRepair() {
|
|
12
|
+
process.stdout.write(`\n ${c('35', '◆')} ${c('1', 'ShieldCortex repair')}\n\n`);
|
|
13
|
+
process.stdout.write(` ${c('90', 'Checking the native database engine (better-sqlite3)…')}\n`);
|
|
14
|
+
const r = await ensureNativeBinding();
|
|
15
|
+
if (r.status === 'ok') {
|
|
16
|
+
process.stdout.write(` ${c('32', '✓')} Database engine: healthy (no rebuild needed)\n\n`);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (r.status === 'healed') {
|
|
20
|
+
process.stdout.write(` ${c('32', '✓')} Database engine: rebuilt and verified\n`);
|
|
21
|
+
process.stdout.write(` ${c('90', 'Restart Claude Code / the OpenClaw gateway so running processes reload it.')}\n\n`);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
// failed
|
|
25
|
+
process.stdout.write(` ${c('31', '✗')} Database engine: still cannot load after a rebuild\n`);
|
|
26
|
+
if (r.error)
|
|
27
|
+
process.stdout.write(` ${c('90', r.error.split('\n')[0])}\n`);
|
|
28
|
+
process.stdout.write(`\n ${c('1', 'Fix it manually:')}\n`);
|
|
29
|
+
for (const line of (r.remediation ?? '').split('\n')) {
|
|
30
|
+
process.stdout.write(` ${c('33', line)}\n`);
|
|
31
|
+
}
|
|
32
|
+
process.stdout.write('\n');
|
|
33
|
+
process.exitCode = 1;
|
|
34
|
+
}
|
package/dist/cli/update.js
CHANGED
|
@@ -210,6 +210,29 @@ async function stepNpmPackage(currentVersion, latestVersion, force) {
|
|
|
210
210
|
});
|
|
211
211
|
return { updated: true, result };
|
|
212
212
|
}
|
|
213
|
+
/**
|
|
214
|
+
* Verify the better-sqlite3 native binding loads and self-heal it if not.
|
|
215
|
+
*
|
|
216
|
+
* `npm install -g` reports success on its exit code even when the native
|
|
217
|
+
* binding never built for this platform/ABI (common on arm64 / a Node newer
|
|
218
|
+
* than the prebuilds) — leaving the package installed-but-broken. This step
|
|
219
|
+
* runs AFTER the install completes (not nested inside it), rebuilds the binding
|
|
220
|
+
* in the correct install dir if it's missing, and reports honestly.
|
|
221
|
+
*/
|
|
222
|
+
async function stepVerifyEngine() {
|
|
223
|
+
let remediation = null;
|
|
224
|
+
await step('Database engine', async () => {
|
|
225
|
+
const { ensureNativeBinding } = await import('../setup/native-binding.js');
|
|
226
|
+
const r = await ensureNativeBinding();
|
|
227
|
+
if (r.status === 'ok')
|
|
228
|
+
return 'native binding OK';
|
|
229
|
+
if (r.status === 'healed')
|
|
230
|
+
return 'rebuilt native binding';
|
|
231
|
+
remediation = r.remediation ?? null;
|
|
232
|
+
return { status: 'warn', summary: 'binding failed — run `shieldcortex repair`' };
|
|
233
|
+
});
|
|
234
|
+
return { remediation };
|
|
235
|
+
}
|
|
213
236
|
/**
|
|
214
237
|
* Is the realtime plugin registered with OpenClaw's plugin registry?
|
|
215
238
|
*
|
|
@@ -395,10 +418,21 @@ export async function runUpdate() {
|
|
|
395
418
|
catch {
|
|
396
419
|
// npm failure already surfaced by step(); continue with reconcile.
|
|
397
420
|
}
|
|
421
|
+
// Verify (and self-heal) the native DB binding after the install completes.
|
|
422
|
+
// Runs unconditionally: a pre-existing broken binding heals on any update.
|
|
423
|
+
const engineResult = await stepVerifyEngine();
|
|
398
424
|
await stepOpenClawPlugin(home);
|
|
399
425
|
await stepOpenClawSkill(home);
|
|
400
426
|
await stepClaudeHooks();
|
|
401
427
|
footer(Date.now() - flowStart, mainUpdated);
|
|
428
|
+
// If the binding couldn't be auto-healed, print the exact copy-paste fix.
|
|
429
|
+
if (engineResult.remediation) {
|
|
430
|
+
process.stdout.write(`\n ${paint('yellow', '⚠')} ${paint('bold', 'Database engine could not be rebuilt automatically.')}\n`);
|
|
431
|
+
for (const line of engineResult.remediation.split('\n')) {
|
|
432
|
+
process.stdout.write(` ${paint('gray', line)}\n`);
|
|
433
|
+
}
|
|
434
|
+
process.stdout.write('\n');
|
|
435
|
+
}
|
|
402
436
|
maybePrint411Notice(currentVersion, mainUpdated);
|
|
403
437
|
await maybePrintDashboardHint();
|
|
404
438
|
}
|
package/dist/cloud/config.d.ts
CHANGED
|
@@ -41,9 +41,31 @@ export declare function setCloudIronDomeCache(data: Record<string, unknown>): vo
|
|
|
41
41
|
*/
|
|
42
42
|
export declare function getCloudIronDomeCache(): Record<string, unknown> | null;
|
|
43
43
|
/**
|
|
44
|
-
*
|
|
44
|
+
* Record a successful cloud sync. Always updates the in-memory timestamp;
|
|
45
|
+
* persists to config.json at most once per 60s (time-debounced). Callers
|
|
46
|
+
* (sync.ts / sync-queue.ts / memory-sync.ts) are unchanged — the debounce is
|
|
47
|
+
* internal.
|
|
45
48
|
*/
|
|
46
49
|
export declare function updateLastSyncAt(): void;
|
|
50
|
+
/**
|
|
51
|
+
* Force-persist the latest in-memory lastSyncAt regardless of the debounce
|
|
52
|
+
* window, so the final sync timestamp isn't lost if the process exits inside
|
|
53
|
+
* the debounce window. Safe no-op if nothing is pending.
|
|
54
|
+
*
|
|
55
|
+
* Available for a shutdown path (not currently wired): the existing
|
|
56
|
+
* SIGINT/SIGTERM/exit handlers (src/index.ts, src/api/visualization-server.ts)
|
|
57
|
+
* are MCP-server / dashboard lifecycle concerns and don't obviously own the
|
|
58
|
+
* cloud-sync clock, so wiring is left to whichever shutdown owner adopts it
|
|
59
|
+
* rather than bolted onto an unrelated handler. Losing at most one debounced
|
|
60
|
+
* timestamp on abrupt exit is non-critical (the next sync re-stamps it).
|
|
61
|
+
*/
|
|
62
|
+
export declare function flushLastSyncAt(): void;
|
|
63
|
+
/**
|
|
64
|
+
* Returns the most recent sync timestamp, preferring the in-memory value (which
|
|
65
|
+
* may be ahead of disk inside the debounce window) and falling back to the
|
|
66
|
+
* persisted config value.
|
|
67
|
+
*/
|
|
68
|
+
export declare function getLastSyncAt(): string | null;
|
|
47
69
|
export type DefenceMode = 'strict' | 'balanced' | 'permissive';
|
|
48
70
|
/**
|
|
49
71
|
* Returns the persisted defence mode, defaulting to 'balanced'.
|