shieldcortex 4.14.5 → 4.14.7
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 +293 -0
- package/dist/index.js +6 -142
- package/package.json +1 -1
- package/plugins/openclaw/dist/openclaw.plugin.json +1 -1
- /package/dashboard/.next/standalone/dashboard/.next/static/{RHfuwoIq5pzG6Uy6aaXYY → Hq1SmPcGwjp99yjqygsOt}/_buildManifest.js +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{RHfuwoIq5pzG6Uy6aaXYY → Hq1SmPcGwjp99yjqygsOt}/_clientMiddlewareManifest.json +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{RHfuwoIq5pzG6Uy6aaXYY → Hq1SmPcGwjp99yjqygsOt}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,293 @@
|
|
|
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, force) {
|
|
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 && !force) {
|
|
159
|
+
const result = await step('npm package', async () => `v${currentVersion} (current)`);
|
|
160
|
+
return { updated: false, result };
|
|
161
|
+
}
|
|
162
|
+
if (latestVersion === currentVersion && force) {
|
|
163
|
+
const result = await step('npm package', async () => {
|
|
164
|
+
runQuiet('npm', ['install', '-g', 'shieldcortex@latest', '--silent', '--no-audit', '--no-fund'], { timeout: 180000 });
|
|
165
|
+
return `v${currentVersion} (reinstalled)`;
|
|
166
|
+
});
|
|
167
|
+
return { updated: true, result };
|
|
168
|
+
}
|
|
169
|
+
const result = await step('npm package', async () => {
|
|
170
|
+
runQuiet('npm', ['install', '-g', 'shieldcortex@latest', '--silent', '--no-audit', '--no-fund'], { timeout: 180000 });
|
|
171
|
+
return `v${currentVersion} → v${latestVersion}`;
|
|
172
|
+
});
|
|
173
|
+
return { updated: true, result };
|
|
174
|
+
}
|
|
175
|
+
async function stepOpenClawPlugin(home) {
|
|
176
|
+
const extDir = path.join(home, '.openclaw', 'extensions', 'shieldcortex-realtime');
|
|
177
|
+
const npmDir = path.join(home, '.openclaw', 'npm', 'node_modules', '@drakon-systems', 'shieldcortex-realtime');
|
|
178
|
+
if (!fs.existsSync(extDir) && !fs.existsSync(npmDir)) {
|
|
179
|
+
return await step('OpenClaw plugin', async () => ({ status: 'skip', summary: 'not installed' }));
|
|
180
|
+
}
|
|
181
|
+
return await step('OpenClaw plugin', async () => {
|
|
182
|
+
try {
|
|
183
|
+
fs.rmSync(extDir, { recursive: true, force: true });
|
|
184
|
+
}
|
|
185
|
+
catch { /* ignore */ }
|
|
186
|
+
try {
|
|
187
|
+
runQuiet('openclaw', ['plugins', 'install', '--force', '@drakon-systems/shieldcortex-realtime@latest'], { timeout: 60000, env: { ...process.env, HOME: home } });
|
|
188
|
+
return '@latest installed';
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
// Don't propagate — surface as warn instead of failing the whole flow.
|
|
192
|
+
return { status: 'warn', summary: 'reinstall failed (run manually)' };
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
async function stepOpenClawSkill(home) {
|
|
197
|
+
const skillDirs = [
|
|
198
|
+
path.join(home, '.openclaw', 'workspace', 'skills', 'shieldcortex'),
|
|
199
|
+
path.join(home, '.openclaw', 'skills', 'shieldcortex'),
|
|
200
|
+
path.join(home, 'clawd', 'skills', 'shieldcortex'),
|
|
201
|
+
path.join(home, 'friday', 'skills', 'shieldcortex'),
|
|
202
|
+
];
|
|
203
|
+
if (!skillDirs.find((d) => fs.existsSync(d))) {
|
|
204
|
+
return await step('OpenClaw skill', async () => ({ status: 'skip', summary: 'not installed' }));
|
|
205
|
+
}
|
|
206
|
+
return await step('OpenClaw skill', async () => {
|
|
207
|
+
try {
|
|
208
|
+
runQuiet('openclaw', ['skills', 'install', 'shieldcortex', '--force'], {
|
|
209
|
+
timeout: 60000,
|
|
210
|
+
env: { ...process.env, HOME: home },
|
|
211
|
+
});
|
|
212
|
+
return '@latest installed';
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
return { status: 'warn', summary: 'reinstall failed (run manually)' };
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
async function stepClaudeHooks() {
|
|
220
|
+
return await step('Claude Code hooks', async () => {
|
|
221
|
+
// setupHooks logs its own progress; capture it so we can summarise.
|
|
222
|
+
const logBuffer = [];
|
|
223
|
+
const origLog = console.log;
|
|
224
|
+
const origWarn = console.warn;
|
|
225
|
+
console.log = (...args) => { logBuffer.push(args.map(String).join(' ')); };
|
|
226
|
+
console.warn = (...args) => { logBuffer.push(args.map(String).join(' ')); };
|
|
227
|
+
try {
|
|
228
|
+
const { setupHooks } = await import('../setup/settings-hooks.js');
|
|
229
|
+
setupHooks();
|
|
230
|
+
}
|
|
231
|
+
finally {
|
|
232
|
+
console.log = origLog;
|
|
233
|
+
console.warn = origWarn;
|
|
234
|
+
}
|
|
235
|
+
const added = logBuffer.filter((l) => l.includes('+ Hook:')).length;
|
|
236
|
+
const migrated = logBuffer.filter((l) => l.includes('migrated from npx')).length;
|
|
237
|
+
const timeoutsUpdated = logBuffer.filter((l) => l.includes('timeout')).length;
|
|
238
|
+
if (added === 0 && migrated === 0 && timeoutsUpdated === 0) {
|
|
239
|
+
return 'all canonical';
|
|
240
|
+
}
|
|
241
|
+
const parts = [];
|
|
242
|
+
if (added > 0)
|
|
243
|
+
parts.push(`${added} added`);
|
|
244
|
+
if (migrated > 0)
|
|
245
|
+
parts.push(`${migrated} migrated`);
|
|
246
|
+
if (timeoutsUpdated > 0)
|
|
247
|
+
parts.push(`${timeoutsUpdated} timeout fix`);
|
|
248
|
+
return parts.join(', ');
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
// ── 4.11.0 boundary notice (preserved from old flow) ────────
|
|
252
|
+
function maybePrint411Notice(currentVersion, mainUpdated) {
|
|
253
|
+
if (!mainUpdated || !/^\d+\.\d+\.\d+/.test(currentVersion))
|
|
254
|
+
return;
|
|
255
|
+
const [maj, min] = currentVersion.split('.').map(Number);
|
|
256
|
+
if (!(maj < 4 || (maj === 4 && min < 11)))
|
|
257
|
+
return;
|
|
258
|
+
process.stdout.write('\n');
|
|
259
|
+
process.stdout.write(` ${paint('yellow', '!')} ${paint('bold', 'v4.11.0 default behaviour changes')}\n`);
|
|
260
|
+
process.stdout.write(' • Proactive recall on prompt submit is now OFF by default.\n');
|
|
261
|
+
process.stdout.write(' • Tool-call interceptor no longer blocks critical/high writes with approval prompts.\n');
|
|
262
|
+
process.stdout.write(' • SessionStart preamble OFF; memory cap reduced 15 → 5.\n');
|
|
263
|
+
process.stdout.write(' • PreCompact thresholds raised; auto-memories cap 5 → 2.\n');
|
|
264
|
+
process.stdout.write(` ${paint('gray', 'restore pre-4.11 with: ')}${paint('cyan', 'shieldcortex config --restore-4.10-defaults')}\n`);
|
|
265
|
+
process.stdout.write(` ${paint('gray', 'changelog: ')}${paint('cyan', 'https://github.com/Drakon-Systems-Ltd/ShieldCortex/blob/main/CHANGELOG.md')}\n\n`);
|
|
266
|
+
}
|
|
267
|
+
// ── Public entry ────────────────────────────────────────────
|
|
268
|
+
export async function runUpdate() {
|
|
269
|
+
const home = homedir();
|
|
270
|
+
const currentVersion = readPackageVersion();
|
|
271
|
+
const flowStart = Date.now();
|
|
272
|
+
const force = process.argv.includes('--force') || process.argv.includes('-f');
|
|
273
|
+
// Header — show current version immediately, then update with latest once we know it.
|
|
274
|
+
// (We resolve `latest` before drawing the arrow so the banner is correct.)
|
|
275
|
+
const latestVersion = await fetchLatestVersion();
|
|
276
|
+
header(currentVersion, latestVersion);
|
|
277
|
+
if (force) {
|
|
278
|
+
process.stdout.write(` ${paint('yellow', '!')} ${paint('gray', '--force: reinstall everything regardless of version')}\n\n`);
|
|
279
|
+
}
|
|
280
|
+
let mainUpdated = false;
|
|
281
|
+
try {
|
|
282
|
+
const npmStep = await stepNpmPackage(currentVersion, latestVersion, force);
|
|
283
|
+
mainUpdated = npmStep.updated;
|
|
284
|
+
}
|
|
285
|
+
catch {
|
|
286
|
+
// npm failure already surfaced by step(); continue with reconcile.
|
|
287
|
+
}
|
|
288
|
+
await stepOpenClawPlugin(home);
|
|
289
|
+
await stepOpenClawSkill(home);
|
|
290
|
+
await stepClaudeHooks();
|
|
291
|
+
footer(Date.now() - flowStart, mainUpdated);
|
|
292
|
+
maybePrint411Notice(currentVersion, mainUpdated);
|
|
293
|
+
}
|
package/dist/index.js
CHANGED
|
@@ -619,149 +619,13 @@ ${bold}DOCS${reset}
|
|
|
619
619
|
await handleStatusCommand();
|
|
620
620
|
return;
|
|
621
621
|
}
|
|
622
|
-
// 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.
|
|
623
626
|
if (process.argv[2] === 'update') {
|
|
624
|
-
const {
|
|
625
|
-
|
|
626
|
-
const { homedir } = await import('os');
|
|
627
|
-
const home = homedir();
|
|
628
|
-
const pkgPath = new URL('../package.json', import.meta.url);
|
|
629
|
-
const currentVersion = JSON.parse(fs.readFileSync(pkgPath, 'utf-8')).version ?? 'unknown';
|
|
630
|
-
console.log(`Current version: v${currentVersion}`);
|
|
631
|
-
console.log('Checking for updates...');
|
|
632
|
-
// Step 1 — update the npm package if a newer version exists.
|
|
633
|
-
let mainUpdated = false;
|
|
634
|
-
try {
|
|
635
|
-
const latest = execSync('npm view shieldcortex version', { encoding: 'utf-8', timeout: 10000 }).trim();
|
|
636
|
-
if (latest === currentVersion) {
|
|
637
|
-
console.log(`✓ Main package already on v${latest}`);
|
|
638
|
-
}
|
|
639
|
-
else {
|
|
640
|
-
console.log(`New version available: v${latest}`);
|
|
641
|
-
console.log('Updating npm package...');
|
|
642
|
-
execSync('npm install -g shieldcortex@latest', { stdio: 'inherit', timeout: 120000 });
|
|
643
|
-
console.log(`✓ Updated to v${latest}`);
|
|
644
|
-
mainUpdated = true;
|
|
645
|
-
}
|
|
646
|
-
}
|
|
647
|
-
catch (error) {
|
|
648
|
-
console.error(`npm update failed: ${error.message}`);
|
|
649
|
-
console.error('Try manually: npm install -g shieldcortex@latest');
|
|
650
|
-
// Continue — plugin + skill may still have their own updates available.
|
|
651
|
-
}
|
|
652
|
-
// Step 2 — always reconcile the OpenClaw plugin. Plugin and skill have their
|
|
653
|
-
// own release cadences; skipping them when main is current caused v4.9 → v4.10
|
|
654
|
-
// users to be stuck on v4.9 of the plugin until they manually removed the
|
|
655
|
-
// extension dir and re-ran `openclaw plugins install`.
|
|
656
|
-
//
|
|
657
|
-
// OpenClaw 2026.5.5 added a guard that refuses `plugins install` when the
|
|
658
|
-
// plugin is already present at ~/.openclaw/npm/node_modules/<scope>/<name>
|
|
659
|
-
// and tells the caller to use `update` or `--force`. Our reconcile always
|
|
660
|
-
// *wants* to overwrite — that's the entire point of the step — so we pass
|
|
661
|
-
// --force unconditionally. Works for fresh installs too (no-op when no
|
|
662
|
-
// existing plugin to replace).
|
|
663
|
-
try {
|
|
664
|
-
const extDir = path.join(home, '.openclaw', 'extensions', 'shieldcortex-realtime');
|
|
665
|
-
const npmDir = path.join(home, '.openclaw', 'npm', 'node_modules', '@drakon-systems', 'shieldcortex-realtime');
|
|
666
|
-
if (fs.existsSync(extDir) || fs.existsSync(npmDir)) {
|
|
667
|
-
console.log('Reconciling OpenClaw plugin...');
|
|
668
|
-
// Best-effort cleanup of the legacy extensions/ path so 2026.5.x doesn't
|
|
669
|
-
// see two install records. The npm/node_modules/ path is owned by the
|
|
670
|
-
// OpenClaw installer and `--force` will replace it.
|
|
671
|
-
try {
|
|
672
|
-
fs.rmSync(extDir, { recursive: true, force: true });
|
|
673
|
-
}
|
|
674
|
-
catch { /* ignore */ }
|
|
675
|
-
try {
|
|
676
|
-
execSync('openclaw plugins install --force @drakon-systems/shieldcortex-realtime@latest', {
|
|
677
|
-
stdio: 'inherit',
|
|
678
|
-
timeout: 60000,
|
|
679
|
-
env: { ...process.env, HOME: home },
|
|
680
|
-
});
|
|
681
|
-
console.log('✓ OpenClaw plugin reconciled');
|
|
682
|
-
}
|
|
683
|
-
catch {
|
|
684
|
-
console.warn('⚠ OpenClaw plugin reinstall failed — run manually:');
|
|
685
|
-
console.warn(' openclaw plugins install --force @drakon-systems/shieldcortex-realtime');
|
|
686
|
-
}
|
|
687
|
-
}
|
|
688
|
-
}
|
|
689
|
-
catch {
|
|
690
|
-
// OpenClaw not installed — skip silently
|
|
691
|
-
}
|
|
692
|
-
// Step 3 — always reconcile the OpenClaw / ClawHub skill.
|
|
693
|
-
try {
|
|
694
|
-
const skillDirs = [
|
|
695
|
-
path.join(home, '.openclaw', 'workspace', 'skills', 'shieldcortex'),
|
|
696
|
-
path.join(home, '.openclaw', 'skills', 'shieldcortex'),
|
|
697
|
-
path.join(home, 'clawd', 'skills', 'shieldcortex'),
|
|
698
|
-
path.join(home, 'friday', 'skills', 'shieldcortex'),
|
|
699
|
-
];
|
|
700
|
-
const existingSkill = skillDirs.find(d => fs.existsSync(d));
|
|
701
|
-
if (existingSkill) {
|
|
702
|
-
console.log('Reconciling OpenClaw skill...');
|
|
703
|
-
try {
|
|
704
|
-
execSync('openclaw skills install shieldcortex --force', {
|
|
705
|
-
stdio: 'inherit',
|
|
706
|
-
timeout: 60000,
|
|
707
|
-
env: { ...process.env, HOME: home },
|
|
708
|
-
});
|
|
709
|
-
console.log('✓ OpenClaw skill reconciled');
|
|
710
|
-
}
|
|
711
|
-
catch {
|
|
712
|
-
console.warn('⚠ OpenClaw skill update failed — run manually:');
|
|
713
|
-
console.warn(' openclaw skills install shieldcortex --force');
|
|
714
|
-
}
|
|
715
|
-
}
|
|
716
|
-
}
|
|
717
|
-
catch {
|
|
718
|
-
// Skill update is best-effort
|
|
719
|
-
}
|
|
720
|
-
// Step 4 — migrate Claude Code hooks if needed.
|
|
721
|
-
try {
|
|
722
|
-
const { setupHooks } = await import('./setup/settings-hooks.js');
|
|
723
|
-
setupHooks();
|
|
724
|
-
}
|
|
725
|
-
catch {
|
|
726
|
-
// Hook migration is best-effort
|
|
727
|
-
}
|
|
728
|
-
if (mainUpdated) {
|
|
729
|
-
console.log('Restart Claude Code / OpenClaw gateway to use the new version.');
|
|
730
|
-
}
|
|
731
|
-
// One-time notice for users crossing the v4.11.0 default-changes boundary.
|
|
732
|
-
// `currentVersion` was captured pre-update, so any main-updated run that
|
|
733
|
-
// came from <4.11.0 has the migration message shown once.
|
|
734
|
-
try {
|
|
735
|
-
const crossed4_11 = mainUpdated && /^\d+\.\d+\.\d+/.test(currentVersion) && (() => {
|
|
736
|
-
const [maj, min] = currentVersion.split('.').map(Number);
|
|
737
|
-
return maj < 4 || (maj === 4 && min < 11);
|
|
738
|
-
})();
|
|
739
|
-
if (crossed4_11) {
|
|
740
|
-
console.log('');
|
|
741
|
-
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
742
|
-
console.log(' ShieldCortex v4.11.0 — default behaviour changes');
|
|
743
|
-
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
744
|
-
console.log('');
|
|
745
|
-
console.log(' • Proactive recall on prompt submit is now OFF by default.');
|
|
746
|
-
console.log(' • Tool-call interceptor no longer blocks critical/high');
|
|
747
|
-
console.log(' severity writes with an approval prompt (defence still');
|
|
748
|
-
console.log(' denies on failurePolicy).');
|
|
749
|
-
console.log(' • SessionStart preamble instruction block is now OFF.');
|
|
750
|
-
console.log(' • SessionStart memory cap reduced 15 → 5.');
|
|
751
|
-
console.log(' • PreCompact thresholds raised; auto-memories cap 5 → 2.');
|
|
752
|
-
console.log('');
|
|
753
|
-
console.log(' Why: fleet evidence showed per-turn memory-injection tax');
|
|
754
|
-
console.log(' was net-negative on fast agent loops. The defence pipeline');
|
|
755
|
-
console.log(' stays on; only the memory-injection side is now opt-in.');
|
|
756
|
-
console.log('');
|
|
757
|
-
console.log(' To restore pre-v4.11.0 behaviour:');
|
|
758
|
-
console.log(' shieldcortex config --restore-4.10-defaults');
|
|
759
|
-
console.log('');
|
|
760
|
-
console.log(' See CHANGELOG: https://github.com/Drakon-Systems-Ltd/ShieldCortex/blob/main/CHANGELOG.md');
|
|
761
|
-
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
762
|
-
}
|
|
763
|
-
}
|
|
764
|
-
catch { /* notice is best-effort */ }
|
|
627
|
+
const { runUpdate } = await import('./cli/update.js');
|
|
628
|
+
await runUpdate();
|
|
765
629
|
return;
|
|
766
630
|
}
|
|
767
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.7",
|
|
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.7",
|
|
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
|