shieldcortex 4.14.4 → 4.14.6
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 +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.html +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/pages/500.html +2 -2
- package/dist/cli/update.d.ts +13 -0
- package/dist/cli/update.js +282 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +13 -142
- package/package.json +1 -1
- package/plugins/openclaw/dist/openclaw.plugin.json +1 -1
- /package/dashboard/.next/standalone/dashboard/.next/static/{kgAuMJebOtUpqEJhiGbFi → 8hmVyzIpQ8NBf0ZTc4HPK}/_buildManifest.js +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{kgAuMJebOtUpqEJhiGbFi → 8hmVyzIpQ8NBf0ZTc4HPK}/_clientMiddlewareManifest.json +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{kgAuMJebOtUpqEJhiGbFi → 8hmVyzIpQ8NBf0ZTc4HPK}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `shieldcortex update` — animated, captured-output release flow.
|
|
3
|
+
*
|
|
4
|
+
* Replaces the v4.14.x wall-of-text update output with:
|
|
5
|
+
* - a header banner showing the version delta
|
|
6
|
+
* - one stage per concern (npm package, plugin, hooks, skill)
|
|
7
|
+
* - per-stage spinner + ✓/⚠/✗ + duration + condensed summary
|
|
8
|
+
* - npm and openclaw stdout/stderr captured; printed only on error
|
|
9
|
+
* - graceful fallback to plain text when not on a TTY (CI, piped output)
|
|
10
|
+
*
|
|
11
|
+
* Behaviour-preserving — every step does what the old inline flow did.
|
|
12
|
+
*/
|
|
13
|
+
import { spawnSync } from 'child_process';
|
|
14
|
+
import fs from 'fs';
|
|
15
|
+
import path from 'path';
|
|
16
|
+
import { homedir } from 'os';
|
|
17
|
+
import { fileURLToPath } from 'url';
|
|
18
|
+
// ── ANSI ────────────────────────────────────────────────────
|
|
19
|
+
const ANSI = {
|
|
20
|
+
reset: '\x1b[0m',
|
|
21
|
+
bold: '\x1b[1m',
|
|
22
|
+
dim: '\x1b[2m',
|
|
23
|
+
red: '\x1b[31m',
|
|
24
|
+
green: '\x1b[32m',
|
|
25
|
+
yellow: '\x1b[33m',
|
|
26
|
+
cyan: '\x1b[36m',
|
|
27
|
+
magenta: '\x1b[35m',
|
|
28
|
+
gray: '\x1b[90m',
|
|
29
|
+
};
|
|
30
|
+
const isTTY = Boolean(process.stdout.isTTY);
|
|
31
|
+
function paint(color, s) {
|
|
32
|
+
return isTTY ? `${ANSI[color]}${s}${ANSI.reset}` : s;
|
|
33
|
+
}
|
|
34
|
+
// ── Progress runner ─────────────────────────────────────────
|
|
35
|
+
const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
36
|
+
const LABEL_WIDTH = 24;
|
|
37
|
+
async function step(label, fn) {
|
|
38
|
+
const start = Date.now();
|
|
39
|
+
const padded = label.padEnd(LABEL_WIDTH);
|
|
40
|
+
let frame = 0;
|
|
41
|
+
let timer = null;
|
|
42
|
+
if (isTTY) {
|
|
43
|
+
process.stdout.write(` ${paint('cyan', SPINNER_FRAMES[0])} ${padded}`);
|
|
44
|
+
timer = setInterval(() => {
|
|
45
|
+
frame = (frame + 1) % SPINNER_FRAMES.length;
|
|
46
|
+
process.stdout.write(`\r ${paint('cyan', SPINNER_FRAMES[frame])} ${padded}`);
|
|
47
|
+
}, 80);
|
|
48
|
+
timer.unref();
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
process.stdout.write(` ◦ ${label}…\n`);
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
const raw = await fn();
|
|
55
|
+
if (timer)
|
|
56
|
+
clearInterval(timer);
|
|
57
|
+
const result = typeof raw === 'string' ? { status: 'ok', summary: raw } :
|
|
58
|
+
raw && typeof raw === 'object' ? raw :
|
|
59
|
+
{ status: 'ok' };
|
|
60
|
+
const elapsed = ((Date.now() - start) / 1000).toFixed(1) + 's';
|
|
61
|
+
const icon = result.status === 'ok' ? paint('green', '✓') :
|
|
62
|
+
result.status === 'warn' ? paint('yellow', '⚠') :
|
|
63
|
+
paint('gray', '·');
|
|
64
|
+
const summary = result.summary
|
|
65
|
+
? paint('gray', result.summary).padEnd(LABEL_WIDTH + 9)
|
|
66
|
+
: ''.padEnd(LABEL_WIDTH);
|
|
67
|
+
if (isTTY) {
|
|
68
|
+
process.stdout.write(`\r ${icon} ${padded} ${summary} ${paint('gray', elapsed)}\n`);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
process.stdout.write(` ${result.status === 'ok' ? '✓' : result.status === 'warn' ? '⚠' : '·'} ${label}: ${result.summary ?? 'done'} (${elapsed})\n`);
|
|
72
|
+
}
|
|
73
|
+
return result;
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
if (timer)
|
|
77
|
+
clearInterval(timer);
|
|
78
|
+
const elapsed = ((Date.now() - start) / 1000).toFixed(1) + 's';
|
|
79
|
+
const icon = paint('red', '✗');
|
|
80
|
+
if (isTTY) {
|
|
81
|
+
process.stdout.write(`\r ${icon} ${padded} ${paint('red', 'failed')} ${paint('gray', elapsed)}\n`);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
process.stdout.write(` ✗ ${label}: failed (${elapsed})\n`);
|
|
85
|
+
}
|
|
86
|
+
const e = err;
|
|
87
|
+
const captured = (e.stderr || '') + (e.stdout || '');
|
|
88
|
+
if (captured.trim()) {
|
|
89
|
+
process.stderr.write('\n' + paint('gray', '── output ─────────────────────────────────────────') + '\n');
|
|
90
|
+
process.stderr.write(captured.trim() + '\n');
|
|
91
|
+
process.stderr.write(paint('gray', '───────────────────────────────────────────────────') + '\n');
|
|
92
|
+
}
|
|
93
|
+
throw err;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function runQuiet(cmd, args, opts = {}) {
|
|
97
|
+
const result = spawnSync(cmd, args, {
|
|
98
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
99
|
+
encoding: 'utf-8',
|
|
100
|
+
timeout: opts.timeout,
|
|
101
|
+
env: opts.env ?? process.env,
|
|
102
|
+
shell: false,
|
|
103
|
+
});
|
|
104
|
+
if (result.error)
|
|
105
|
+
throw result.error;
|
|
106
|
+
if (typeof result.status === 'number' && result.status !== 0) {
|
|
107
|
+
const err = new Error(`exit ${result.status}: ${cmd} ${args.join(' ')}`);
|
|
108
|
+
err.stdout = result.stdout;
|
|
109
|
+
err.stderr = result.stderr;
|
|
110
|
+
throw err;
|
|
111
|
+
}
|
|
112
|
+
return { stdout: result.stdout || '', stderr: result.stderr || '' };
|
|
113
|
+
}
|
|
114
|
+
// ── Header / footer ─────────────────────────────────────────
|
|
115
|
+
function header(currentVersion, latestVersion) {
|
|
116
|
+
process.stdout.write('\n');
|
|
117
|
+
process.stdout.write(` ${paint('magenta', '◆')} ${paint('bold', 'ShieldCortex')}\n`);
|
|
118
|
+
if (latestVersion && latestVersion !== currentVersion) {
|
|
119
|
+
process.stdout.write(` ${paint('gray', `v${currentVersion}`)} ${paint('cyan', '→')} ${paint('green', `v${latestVersion}`)}\n\n`);
|
|
120
|
+
}
|
|
121
|
+
else if (latestVersion) {
|
|
122
|
+
process.stdout.write(` ${paint('green', `v${currentVersion}`)} ${paint('gray', '· already on latest')}\n\n`);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
process.stdout.write(` ${paint('green', `v${currentVersion}`)}\n\n`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
function footer(totalMs, mainUpdated) {
|
|
129
|
+
const elapsed = (totalMs / 1000).toFixed(1) + 's';
|
|
130
|
+
process.stdout.write(`\n ${paint('gray', '──────────────────────────────────────────────────────────────')}\n`);
|
|
131
|
+
if (mainUpdated) {
|
|
132
|
+
process.stdout.write(` ${paint('green', '✓')} ${paint('bold', 'done')} ${paint('gray', `in ${elapsed}`)} ${paint('cyan', '·')} ${paint('yellow', 'restart Claude Code / OpenClaw gateway')}\n\n`);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
process.stdout.write(` ${paint('green', '✓')} ${paint('bold', 'done')} ${paint('gray', `in ${elapsed} · already on latest`)}\n\n`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// ── Steps ───────────────────────────────────────────────────
|
|
139
|
+
function readPackageVersion() {
|
|
140
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
141
|
+
const pkgPath = path.resolve(path.dirname(__filename), '..', '..', 'package.json');
|
|
142
|
+
return JSON.parse(fs.readFileSync(pkgPath, 'utf-8')).version ?? 'unknown';
|
|
143
|
+
}
|
|
144
|
+
async function fetchLatestVersion() {
|
|
145
|
+
try {
|
|
146
|
+
const { stdout } = runQuiet('npm', ['view', 'shieldcortex', 'version'], { timeout: 10000 });
|
|
147
|
+
return stdout.trim() || null;
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
async function stepNpmPackage(currentVersion, latestVersion) {
|
|
154
|
+
if (!latestVersion) {
|
|
155
|
+
const result = await step('npm package', async () => ({ status: 'warn', summary: 'registry unreachable' }));
|
|
156
|
+
return { updated: false, result };
|
|
157
|
+
}
|
|
158
|
+
if (latestVersion === currentVersion) {
|
|
159
|
+
const result = await step('npm package', async () => `v${currentVersion} (current)`);
|
|
160
|
+
return { updated: false, result };
|
|
161
|
+
}
|
|
162
|
+
const result = await step('npm package', async () => {
|
|
163
|
+
runQuiet('npm', ['install', '-g', 'shieldcortex@latest', '--silent', '--no-audit', '--no-fund'], { timeout: 180000 });
|
|
164
|
+
return `v${currentVersion} → v${latestVersion}`;
|
|
165
|
+
});
|
|
166
|
+
return { updated: true, result };
|
|
167
|
+
}
|
|
168
|
+
async function stepOpenClawPlugin(home) {
|
|
169
|
+
const extDir = path.join(home, '.openclaw', 'extensions', 'shieldcortex-realtime');
|
|
170
|
+
const npmDir = path.join(home, '.openclaw', 'npm', 'node_modules', '@drakon-systems', 'shieldcortex-realtime');
|
|
171
|
+
if (!fs.existsSync(extDir) && !fs.existsSync(npmDir)) {
|
|
172
|
+
return await step('OpenClaw plugin', async () => ({ status: 'skip', summary: 'not installed' }));
|
|
173
|
+
}
|
|
174
|
+
return await step('OpenClaw plugin', async () => {
|
|
175
|
+
try {
|
|
176
|
+
fs.rmSync(extDir, { recursive: true, force: true });
|
|
177
|
+
}
|
|
178
|
+
catch { /* ignore */ }
|
|
179
|
+
try {
|
|
180
|
+
runQuiet('openclaw', ['plugins', 'install', '--force', '@drakon-systems/shieldcortex-realtime@latest'], { timeout: 60000, env: { ...process.env, HOME: home } });
|
|
181
|
+
return '@latest installed';
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
// Don't propagate — surface as warn instead of failing the whole flow.
|
|
185
|
+
return { status: 'warn', summary: 'reinstall failed (run manually)' };
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
async function stepOpenClawSkill(home) {
|
|
190
|
+
const skillDirs = [
|
|
191
|
+
path.join(home, '.openclaw', 'workspace', 'skills', 'shieldcortex'),
|
|
192
|
+
path.join(home, '.openclaw', 'skills', 'shieldcortex'),
|
|
193
|
+
path.join(home, 'clawd', 'skills', 'shieldcortex'),
|
|
194
|
+
path.join(home, 'friday', 'skills', 'shieldcortex'),
|
|
195
|
+
];
|
|
196
|
+
if (!skillDirs.find((d) => fs.existsSync(d))) {
|
|
197
|
+
return await step('OpenClaw skill', async () => ({ status: 'skip', summary: 'not installed' }));
|
|
198
|
+
}
|
|
199
|
+
return await step('OpenClaw skill', async () => {
|
|
200
|
+
try {
|
|
201
|
+
runQuiet('openclaw', ['skills', 'install', 'shieldcortex', '--force'], {
|
|
202
|
+
timeout: 60000,
|
|
203
|
+
env: { ...process.env, HOME: home },
|
|
204
|
+
});
|
|
205
|
+
return '@latest installed';
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
return { status: 'warn', summary: 'reinstall failed (run manually)' };
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
async function stepClaudeHooks() {
|
|
213
|
+
return await step('Claude Code hooks', async () => {
|
|
214
|
+
// setupHooks logs its own progress; capture it so we can summarise.
|
|
215
|
+
const logBuffer = [];
|
|
216
|
+
const origLog = console.log;
|
|
217
|
+
const origWarn = console.warn;
|
|
218
|
+
console.log = (...args) => { logBuffer.push(args.map(String).join(' ')); };
|
|
219
|
+
console.warn = (...args) => { logBuffer.push(args.map(String).join(' ')); };
|
|
220
|
+
try {
|
|
221
|
+
const { setupHooks } = await import('../setup/settings-hooks.js');
|
|
222
|
+
setupHooks();
|
|
223
|
+
}
|
|
224
|
+
finally {
|
|
225
|
+
console.log = origLog;
|
|
226
|
+
console.warn = origWarn;
|
|
227
|
+
}
|
|
228
|
+
const added = logBuffer.filter((l) => l.includes('+ Hook:')).length;
|
|
229
|
+
const migrated = logBuffer.filter((l) => l.includes('migrated from npx')).length;
|
|
230
|
+
const timeoutsUpdated = logBuffer.filter((l) => l.includes('timeout')).length;
|
|
231
|
+
if (added === 0 && migrated === 0 && timeoutsUpdated === 0) {
|
|
232
|
+
return 'all canonical';
|
|
233
|
+
}
|
|
234
|
+
const parts = [];
|
|
235
|
+
if (added > 0)
|
|
236
|
+
parts.push(`${added} added`);
|
|
237
|
+
if (migrated > 0)
|
|
238
|
+
parts.push(`${migrated} migrated`);
|
|
239
|
+
if (timeoutsUpdated > 0)
|
|
240
|
+
parts.push(`${timeoutsUpdated} timeout fix`);
|
|
241
|
+
return parts.join(', ');
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
// ── 4.11.0 boundary notice (preserved from old flow) ────────
|
|
245
|
+
function maybePrint411Notice(currentVersion, mainUpdated) {
|
|
246
|
+
if (!mainUpdated || !/^\d+\.\d+\.\d+/.test(currentVersion))
|
|
247
|
+
return;
|
|
248
|
+
const [maj, min] = currentVersion.split('.').map(Number);
|
|
249
|
+
if (!(maj < 4 || (maj === 4 && min < 11)))
|
|
250
|
+
return;
|
|
251
|
+
process.stdout.write('\n');
|
|
252
|
+
process.stdout.write(` ${paint('yellow', '!')} ${paint('bold', 'v4.11.0 default behaviour changes')}\n`);
|
|
253
|
+
process.stdout.write(' • Proactive recall on prompt submit is now OFF by default.\n');
|
|
254
|
+
process.stdout.write(' • Tool-call interceptor no longer blocks critical/high writes with approval prompts.\n');
|
|
255
|
+
process.stdout.write(' • SessionStart preamble OFF; memory cap reduced 15 → 5.\n');
|
|
256
|
+
process.stdout.write(' • PreCompact thresholds raised; auto-memories cap 5 → 2.\n');
|
|
257
|
+
process.stdout.write(` ${paint('gray', 'restore pre-4.11 with: ')}${paint('cyan', 'shieldcortex config --restore-4.10-defaults')}\n`);
|
|
258
|
+
process.stdout.write(` ${paint('gray', 'changelog: ')}${paint('cyan', 'https://github.com/Drakon-Systems-Ltd/ShieldCortex/blob/main/CHANGELOG.md')}\n\n`);
|
|
259
|
+
}
|
|
260
|
+
// ── Public entry ────────────────────────────────────────────
|
|
261
|
+
export async function runUpdate() {
|
|
262
|
+
const home = homedir();
|
|
263
|
+
const currentVersion = readPackageVersion();
|
|
264
|
+
const flowStart = Date.now();
|
|
265
|
+
// Header — show current version immediately, then update with latest once we know it.
|
|
266
|
+
// (We resolve `latest` before drawing the arrow so the banner is correct.)
|
|
267
|
+
const latestVersion = await fetchLatestVersion();
|
|
268
|
+
header(currentVersion, latestVersion);
|
|
269
|
+
let mainUpdated = false;
|
|
270
|
+
try {
|
|
271
|
+
const npmStep = await stepNpmPackage(currentVersion, latestVersion);
|
|
272
|
+
mainUpdated = npmStep.updated;
|
|
273
|
+
}
|
|
274
|
+
catch {
|
|
275
|
+
// npm failure already surfaced by step(); continue with reconcile.
|
|
276
|
+
}
|
|
277
|
+
await stepOpenClawPlugin(home);
|
|
278
|
+
await stepOpenClawSkill(home);
|
|
279
|
+
await stepClaudeHooks();
|
|
280
|
+
footer(Date.now() - flowStart, mainUpdated);
|
|
281
|
+
maybePrint411Notice(currentVersion, mainUpdated);
|
|
282
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -23,6 +23,9 @@
|
|
|
23
23
|
* shieldcortex quickstart --yes # Install across all detected integrations
|
|
24
24
|
* shieldcortex setup # Configure Claude for proactive memory use
|
|
25
25
|
* shieldcortex install # Alias for setup
|
|
26
|
+
* shieldcortex install --with-stop-hook # Opt in to the Stop hook (sampled per-turn extraction)
|
|
27
|
+
* shieldcortex install --with-session-end # Opt in to the SessionEnd hook (final extraction on session exit)
|
|
28
|
+
* shieldcortex install --with-stop-hook --with-session-end # Both at once
|
|
26
29
|
* shieldcortex hook pre-compact # Run pre-compact hook (for settings.json)
|
|
27
30
|
* shieldcortex hook session-start # Run session-start hook (for settings.json)
|
|
28
31
|
* shieldcortex hook session-end # Run session-end hook (for settings.json)
|
package/dist/index.js
CHANGED
|
@@ -23,6 +23,9 @@
|
|
|
23
23
|
* shieldcortex quickstart --yes # Install across all detected integrations
|
|
24
24
|
* shieldcortex setup # Configure Claude for proactive memory use
|
|
25
25
|
* shieldcortex install # Alias for setup
|
|
26
|
+
* shieldcortex install --with-stop-hook # Opt in to the Stop hook (sampled per-turn extraction)
|
|
27
|
+
* shieldcortex install --with-session-end # Opt in to the SessionEnd hook (final extraction on session exit)
|
|
28
|
+
* shieldcortex install --with-stop-hook --with-session-end # Both at once
|
|
26
29
|
* shieldcortex hook pre-compact # Run pre-compact hook (for settings.json)
|
|
27
30
|
* shieldcortex hook session-start # Run session-start hook (for settings.json)
|
|
28
31
|
* shieldcortex hook session-end # Run session-end hook (for settings.json)
|
|
@@ -475,6 +478,9 @@ ${bold}COMMANDS${reset}
|
|
|
475
478
|
${cyan}iron-dome${reset} <action> Manage behaviour protection layer
|
|
476
479
|
${cyan}audit${reset} [options] Run a full security audit
|
|
477
480
|
${cyan}setup${reset} Install ShieldCortex into your project
|
|
481
|
+
Flags: --with-stop-hook (sampled per-turn extraction)
|
|
482
|
+
--with-session-end (extraction on session exit)
|
|
483
|
+
Pass either to opt in; re-run without to opt out.
|
|
478
484
|
${cyan}uninstall${reset} Remove ShieldCortex from your project
|
|
479
485
|
${cyan}openclaw${reset} <action> Manage OpenClaw hook integration
|
|
480
486
|
${cyan}copilot${reset} <action> Set up VS Code / Cursor MCP integration
|
|
@@ -493,6 +499,7 @@ ${bold}EXAMPLES${reset}
|
|
|
493
499
|
shieldcortex scan-skill ~/.claude/skills/my-skill/SKILL.md
|
|
494
500
|
shieldcortex dashboard
|
|
495
501
|
shieldcortex worker
|
|
502
|
+
shieldcortex install --with-stop-hook --with-session-end
|
|
496
503
|
shieldcortex cortex preflight --task "deploy site"
|
|
497
504
|
shieldcortex license activate sc_pro_...
|
|
498
505
|
shieldcortex config --cloud-enable --cloud-api-key <key>
|
|
@@ -612,149 +619,13 @@ ${bold}DOCS${reset}
|
|
|
612
619
|
await handleStatusCommand();
|
|
613
620
|
return;
|
|
614
621
|
}
|
|
615
|
-
// Handle "update" subcommand
|
|
622
|
+
// Handle "update" subcommand — delegated to ./cli/update.ts which renders
|
|
623
|
+
// a progress-style flow (animated spinners on TTY, captured npm/openclaw
|
|
624
|
+
// output, per-step timings, version-delta header). Same underlying steps
|
|
625
|
+
// as the previous inline implementation.
|
|
616
626
|
if (process.argv[2] === 'update') {
|
|
617
|
-
const {
|
|
618
|
-
|
|
619
|
-
const { homedir } = await import('os');
|
|
620
|
-
const home = homedir();
|
|
621
|
-
const pkgPath = new URL('../package.json', import.meta.url);
|
|
622
|
-
const currentVersion = JSON.parse(fs.readFileSync(pkgPath, 'utf-8')).version ?? 'unknown';
|
|
623
|
-
console.log(`Current version: v${currentVersion}`);
|
|
624
|
-
console.log('Checking for updates...');
|
|
625
|
-
// Step 1 — update the npm package if a newer version exists.
|
|
626
|
-
let mainUpdated = false;
|
|
627
|
-
try {
|
|
628
|
-
const latest = execSync('npm view shieldcortex version', { encoding: 'utf-8', timeout: 10000 }).trim();
|
|
629
|
-
if (latest === currentVersion) {
|
|
630
|
-
console.log(`✓ Main package already on v${latest}`);
|
|
631
|
-
}
|
|
632
|
-
else {
|
|
633
|
-
console.log(`New version available: v${latest}`);
|
|
634
|
-
console.log('Updating npm package...');
|
|
635
|
-
execSync('npm install -g shieldcortex@latest', { stdio: 'inherit', timeout: 120000 });
|
|
636
|
-
console.log(`✓ Updated to v${latest}`);
|
|
637
|
-
mainUpdated = true;
|
|
638
|
-
}
|
|
639
|
-
}
|
|
640
|
-
catch (error) {
|
|
641
|
-
console.error(`npm update failed: ${error.message}`);
|
|
642
|
-
console.error('Try manually: npm install -g shieldcortex@latest');
|
|
643
|
-
// Continue — plugin + skill may still have their own updates available.
|
|
644
|
-
}
|
|
645
|
-
// Step 2 — always reconcile the OpenClaw plugin. Plugin and skill have their
|
|
646
|
-
// own release cadences; skipping them when main is current caused v4.9 → v4.10
|
|
647
|
-
// users to be stuck on v4.9 of the plugin until they manually removed the
|
|
648
|
-
// extension dir and re-ran `openclaw plugins install`.
|
|
649
|
-
//
|
|
650
|
-
// OpenClaw 2026.5.5 added a guard that refuses `plugins install` when the
|
|
651
|
-
// plugin is already present at ~/.openclaw/npm/node_modules/<scope>/<name>
|
|
652
|
-
// and tells the caller to use `update` or `--force`. Our reconcile always
|
|
653
|
-
// *wants* to overwrite — that's the entire point of the step — so we pass
|
|
654
|
-
// --force unconditionally. Works for fresh installs too (no-op when no
|
|
655
|
-
// existing plugin to replace).
|
|
656
|
-
try {
|
|
657
|
-
const extDir = path.join(home, '.openclaw', 'extensions', 'shieldcortex-realtime');
|
|
658
|
-
const npmDir = path.join(home, '.openclaw', 'npm', 'node_modules', '@drakon-systems', 'shieldcortex-realtime');
|
|
659
|
-
if (fs.existsSync(extDir) || fs.existsSync(npmDir)) {
|
|
660
|
-
console.log('Reconciling OpenClaw plugin...');
|
|
661
|
-
// Best-effort cleanup of the legacy extensions/ path so 2026.5.x doesn't
|
|
662
|
-
// see two install records. The npm/node_modules/ path is owned by the
|
|
663
|
-
// OpenClaw installer and `--force` will replace it.
|
|
664
|
-
try {
|
|
665
|
-
fs.rmSync(extDir, { recursive: true, force: true });
|
|
666
|
-
}
|
|
667
|
-
catch { /* ignore */ }
|
|
668
|
-
try {
|
|
669
|
-
execSync('openclaw plugins install --force @drakon-systems/shieldcortex-realtime@latest', {
|
|
670
|
-
stdio: 'inherit',
|
|
671
|
-
timeout: 60000,
|
|
672
|
-
env: { ...process.env, HOME: home },
|
|
673
|
-
});
|
|
674
|
-
console.log('✓ OpenClaw plugin reconciled');
|
|
675
|
-
}
|
|
676
|
-
catch {
|
|
677
|
-
console.warn('⚠ OpenClaw plugin reinstall failed — run manually:');
|
|
678
|
-
console.warn(' openclaw plugins install --force @drakon-systems/shieldcortex-realtime');
|
|
679
|
-
}
|
|
680
|
-
}
|
|
681
|
-
}
|
|
682
|
-
catch {
|
|
683
|
-
// OpenClaw not installed — skip silently
|
|
684
|
-
}
|
|
685
|
-
// Step 3 — always reconcile the OpenClaw / ClawHub skill.
|
|
686
|
-
try {
|
|
687
|
-
const skillDirs = [
|
|
688
|
-
path.join(home, '.openclaw', 'workspace', 'skills', 'shieldcortex'),
|
|
689
|
-
path.join(home, '.openclaw', 'skills', 'shieldcortex'),
|
|
690
|
-
path.join(home, 'clawd', 'skills', 'shieldcortex'),
|
|
691
|
-
path.join(home, 'friday', 'skills', 'shieldcortex'),
|
|
692
|
-
];
|
|
693
|
-
const existingSkill = skillDirs.find(d => fs.existsSync(d));
|
|
694
|
-
if (existingSkill) {
|
|
695
|
-
console.log('Reconciling OpenClaw skill...');
|
|
696
|
-
try {
|
|
697
|
-
execSync('openclaw skills install shieldcortex --force', {
|
|
698
|
-
stdio: 'inherit',
|
|
699
|
-
timeout: 60000,
|
|
700
|
-
env: { ...process.env, HOME: home },
|
|
701
|
-
});
|
|
702
|
-
console.log('✓ OpenClaw skill reconciled');
|
|
703
|
-
}
|
|
704
|
-
catch {
|
|
705
|
-
console.warn('⚠ OpenClaw skill update failed — run manually:');
|
|
706
|
-
console.warn(' openclaw skills install shieldcortex --force');
|
|
707
|
-
}
|
|
708
|
-
}
|
|
709
|
-
}
|
|
710
|
-
catch {
|
|
711
|
-
// Skill update is best-effort
|
|
712
|
-
}
|
|
713
|
-
// Step 4 — migrate Claude Code hooks if needed.
|
|
714
|
-
try {
|
|
715
|
-
const { setupHooks } = await import('./setup/settings-hooks.js');
|
|
716
|
-
setupHooks();
|
|
717
|
-
}
|
|
718
|
-
catch {
|
|
719
|
-
// Hook migration is best-effort
|
|
720
|
-
}
|
|
721
|
-
if (mainUpdated) {
|
|
722
|
-
console.log('Restart Claude Code / OpenClaw gateway to use the new version.');
|
|
723
|
-
}
|
|
724
|
-
// One-time notice for users crossing the v4.11.0 default-changes boundary.
|
|
725
|
-
// `currentVersion` was captured pre-update, so any main-updated run that
|
|
726
|
-
// came from <4.11.0 has the migration message shown once.
|
|
727
|
-
try {
|
|
728
|
-
const crossed4_11 = mainUpdated && /^\d+\.\d+\.\d+/.test(currentVersion) && (() => {
|
|
729
|
-
const [maj, min] = currentVersion.split('.').map(Number);
|
|
730
|
-
return maj < 4 || (maj === 4 && min < 11);
|
|
731
|
-
})();
|
|
732
|
-
if (crossed4_11) {
|
|
733
|
-
console.log('');
|
|
734
|
-
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
735
|
-
console.log(' ShieldCortex v4.11.0 — default behaviour changes');
|
|
736
|
-
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
737
|
-
console.log('');
|
|
738
|
-
console.log(' • Proactive recall on prompt submit is now OFF by default.');
|
|
739
|
-
console.log(' • Tool-call interceptor no longer blocks critical/high');
|
|
740
|
-
console.log(' severity writes with an approval prompt (defence still');
|
|
741
|
-
console.log(' denies on failurePolicy).');
|
|
742
|
-
console.log(' • SessionStart preamble instruction block is now OFF.');
|
|
743
|
-
console.log(' • SessionStart memory cap reduced 15 → 5.');
|
|
744
|
-
console.log(' • PreCompact thresholds raised; auto-memories cap 5 → 2.');
|
|
745
|
-
console.log('');
|
|
746
|
-
console.log(' Why: fleet evidence showed per-turn memory-injection tax');
|
|
747
|
-
console.log(' was net-negative on fast agent loops. The defence pipeline');
|
|
748
|
-
console.log(' stays on; only the memory-injection side is now opt-in.');
|
|
749
|
-
console.log('');
|
|
750
|
-
console.log(' To restore pre-v4.11.0 behaviour:');
|
|
751
|
-
console.log(' shieldcortex config --restore-4.10-defaults');
|
|
752
|
-
console.log('');
|
|
753
|
-
console.log(' See CHANGELOG: https://github.com/Drakon-Systems-Ltd/ShieldCortex/blob/main/CHANGELOG.md');
|
|
754
|
-
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
755
|
-
}
|
|
756
|
-
}
|
|
757
|
-
catch { /* notice is best-effort */ }
|
|
627
|
+
const { runUpdate } = await import('./cli/update.js');
|
|
628
|
+
await runUpdate();
|
|
758
629
|
return;
|
|
759
630
|
}
|
|
760
631
|
// Handle "graph" subcommand
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "shieldcortex",
|
|
3
|
-
"version": "4.14.
|
|
3
|
+
"version": "4.14.6",
|
|
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",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "shieldcortex-realtime",
|
|
3
|
-
"version": "4.14.
|
|
3
|
+
"version": "4.14.6",
|
|
4
4
|
"name": "ShieldCortex Real-time Scanner",
|
|
5
5
|
"description": "Real-time defence scanning on LLM input, memory extraction on LLM output, and active tool call interception with approval gating.",
|
|
6
6
|
"kind": null,
|
|
File without changes
|
|
File without changes
|