shieldcortex 4.13.0 → 4.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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/doctor.d.ts +15 -0
- package/dist/cli/doctor.js +85 -0
- package/dist/cloud/config.d.ts +22 -0
- package/dist/cloud/config.js +38 -0
- package/dist/setup/settings-hooks.js +23 -2
- package/package.json +1 -1
- package/plugins/openclaw/dist/openclaw.plugin.json +1 -1
- package/scripts/lib/auto-memory-config.mjs +11 -3
- package/scripts/stop-hook.mjs +44 -5
- /package/dashboard/.next/standalone/dashboard/.next/static/{kiA_iEHG_1wWOEYFsD0Tj → 2JvJZkELhPQRzhTlgun1M}/_buildManifest.js +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{kiA_iEHG_1wWOEYFsD0Tj → 2JvJZkELhPQRzhTlgun1M}/_clientMiddlewareManifest.json +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{kiA_iEHG_1wWOEYFsD0Tj → 2JvJZkELhPQRzhTlgun1M}/_ssgManifest.js +0 -0
package/dist/cli/doctor.js
CHANGED
|
@@ -338,6 +338,90 @@ async function checkHooks() {
|
|
|
338
338
|
return { label: 'Hooks', status: 'warn', message: `check failed — ${msg}` };
|
|
339
339
|
}
|
|
340
340
|
}
|
|
341
|
+
// ── Check 4b: Auto-memory hook gates ──────────────────────
|
|
342
|
+
/**
|
|
343
|
+
* Surfaces the resolved on/off state of the opt-in Stop and SessionEnd
|
|
344
|
+
* auto-memory hooks. Pre-v4.13.1 these were triple-gated (install flag,
|
|
345
|
+
* runtime config, sampling) with the runtime gate failing silently —
|
|
346
|
+
* users who wired the hook saw zero captures and zero feedback (#41).
|
|
347
|
+
*
|
|
348
|
+
* The check looks at both layers:
|
|
349
|
+
* - settings.json: is the hook wired so Claude Code will fire it?
|
|
350
|
+
* - autoMemory.enableStop / enableSessionEnd: will the hook actually run?
|
|
351
|
+
*
|
|
352
|
+
* Both layers must agree for the hook to do work. v4.13.1 onwards, the
|
|
353
|
+
* install flag flips both — if they disagree here, the user edited one
|
|
354
|
+
* side by hand and should re-run setup.
|
|
355
|
+
*/
|
|
356
|
+
export async function checkAutoMemoryHooks() {
|
|
357
|
+
const settingsPath = path.join(os.homedir(), '.claude', 'settings.json');
|
|
358
|
+
let wiredStop = false;
|
|
359
|
+
let wiredSessionEnd = false;
|
|
360
|
+
try {
|
|
361
|
+
if (fs.existsSync(settingsPath)) {
|
|
362
|
+
const settings = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
|
|
363
|
+
const hooks = settings?.hooks || {};
|
|
364
|
+
const isCortexWired = (entries) => Array.isArray(entries) && entries.some((entry) => Array.isArray(entry?.hooks) && entry.hooks.some((h) => typeof h?.command === 'string' && h.command.includes('shieldcortex')));
|
|
365
|
+
wiredStop = isCortexWired(hooks.Stop);
|
|
366
|
+
wiredSessionEnd = isCortexWired(hooks.SessionEnd);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
catch { /* fall through — both stay false, user gets a clean info row */ }
|
|
370
|
+
// Lazy-import to avoid pulling cloud/config into doctor's static graph
|
|
371
|
+
// when the user hasn't configured anything yet.
|
|
372
|
+
let gateStop = false;
|
|
373
|
+
let gateSessionEnd = false;
|
|
374
|
+
let samplingTurns = 10;
|
|
375
|
+
try {
|
|
376
|
+
const cfg = await import('../cloud/config.js');
|
|
377
|
+
const enable = cfg.getAutoMemoryEnableConfig();
|
|
378
|
+
gateStop = enable.enableStop;
|
|
379
|
+
gateSessionEnd = enable.enableSessionEnd;
|
|
380
|
+
const raw = cfg.readRawConfig();
|
|
381
|
+
const am = raw.autoMemory && typeof raw.autoMemory === 'object'
|
|
382
|
+
? raw.autoMemory
|
|
383
|
+
: {};
|
|
384
|
+
if (typeof am.stopHookSamplingTurns === 'number' && am.stopHookSamplingTurns > 0) {
|
|
385
|
+
samplingTurns = Math.floor(am.stopHookSamplingTurns);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
catch { /* defaults already set */ }
|
|
389
|
+
const rowFor = (label, wired, gate, flag, extra) => {
|
|
390
|
+
if (!wired && !gate) {
|
|
391
|
+
return {
|
|
392
|
+
label,
|
|
393
|
+
status: 'info',
|
|
394
|
+
message: 'opt-in (not installed)',
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
if (wired && gate) {
|
|
398
|
+
return {
|
|
399
|
+
label,
|
|
400
|
+
status: 'pass',
|
|
401
|
+
message: extra ? `enabled (${extra})` : 'enabled',
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
if (wired && !gate) {
|
|
405
|
+
return {
|
|
406
|
+
label,
|
|
407
|
+
status: 'warn',
|
|
408
|
+
message: 'wired in settings.json but runtime gate is off — hook will exit silently every turn',
|
|
409
|
+
fix: `Run \`shieldcortex setup ${flag}\` to flip the gate, or set autoMemory.enableStop/enableSessionEnd=true in ~/.shieldcortex/config.json`,
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
// gate && !wired
|
|
413
|
+
return {
|
|
414
|
+
label,
|
|
415
|
+
status: 'warn',
|
|
416
|
+
message: 'runtime gate is on but hook is not wired in settings.json — hook will never fire',
|
|
417
|
+
fix: `Run \`shieldcortex setup ${flag}\` to wire the hook`,
|
|
418
|
+
};
|
|
419
|
+
};
|
|
420
|
+
return [
|
|
421
|
+
rowFor('Auto-memory: Stop hook', wiredStop, gateStop, '--with-stop-hook', `samples turn % ${samplingTurns} == 0`),
|
|
422
|
+
rowFor('Auto-memory: SessionEnd hook', wiredSessionEnd, gateSessionEnd, '--with-session-end'),
|
|
423
|
+
];
|
|
424
|
+
}
|
|
341
425
|
// ── Check 5: Process check ────────────────────────────────
|
|
342
426
|
async function checkProcesses() {
|
|
343
427
|
const results = [];
|
|
@@ -588,6 +672,7 @@ export async function runDoctor() {
|
|
|
588
672
|
checkWritePath, // Smoke test: real INSERT/SELECT/DELETE round-trip — catches silent schema drift
|
|
589
673
|
checkMemoryStats,
|
|
590
674
|
checkHooks,
|
|
675
|
+
checkAutoMemoryHooks,
|
|
591
676
|
checkProcesses,
|
|
592
677
|
checkDiskUsage,
|
|
593
678
|
checkLockFile,
|
package/dist/cloud/config.d.ts
CHANGED
|
@@ -116,6 +116,28 @@ export declare function setProactiveRecall(enabled: boolean): void;
|
|
|
116
116
|
* so the flip is a one-command undo.
|
|
117
117
|
*/
|
|
118
118
|
export declare function restore410Defaults(): void;
|
|
119
|
+
export interface AutoMemoryEnableConfig {
|
|
120
|
+
enableStop: boolean;
|
|
121
|
+
enableSessionEnd: boolean;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Returns the resolved on/off state of the opt-in auto-memory hooks.
|
|
125
|
+
*
|
|
126
|
+
* Default is false for both — preserves the OpenClaw-safe default that
|
|
127
|
+
* shipped in v4.13.0. The install flags (`--with-stop-hook` /
|
|
128
|
+
* `--with-session-end`) flip these to true so that wiring the hook in
|
|
129
|
+
* settings.json and enabling the runtime gate are a single user action.
|
|
130
|
+
*/
|
|
131
|
+
export declare function getAutoMemoryEnableConfig(): AutoMemoryEnableConfig;
|
|
132
|
+
/**
|
|
133
|
+
* Persists the on/off state of the opt-in auto-memory hooks.
|
|
134
|
+
*
|
|
135
|
+
* Lives in `autoMemory.enableStop` / `autoMemory.enableSessionEnd` under
|
|
136
|
+
* `~/.shieldcortex/config.json` — the same namespace `auto-memory-config.mjs`
|
|
137
|
+
* reads from at hook fire time. Single source of truth: install flag +
|
|
138
|
+
* runtime gate cannot disagree.
|
|
139
|
+
*/
|
|
140
|
+
export declare function setAutoMemoryEnableConfig(updates: Partial<AutoMemoryEnableConfig>): void;
|
|
119
141
|
export interface ToolResponseScanConfig {
|
|
120
142
|
scanToolResponses: boolean;
|
|
121
143
|
toolResponseMode: 'advisory' | 'enforce';
|
package/dist/cloud/config.js
CHANGED
|
@@ -499,6 +499,44 @@ export function restore410Defaults() {
|
|
|
499
499
|
};
|
|
500
500
|
writeRawConfig(raw);
|
|
501
501
|
}
|
|
502
|
+
/**
|
|
503
|
+
* Returns the resolved on/off state of the opt-in auto-memory hooks.
|
|
504
|
+
*
|
|
505
|
+
* Default is false for both — preserves the OpenClaw-safe default that
|
|
506
|
+
* shipped in v4.13.0. The install flags (`--with-stop-hook` /
|
|
507
|
+
* `--with-session-end`) flip these to true so that wiring the hook in
|
|
508
|
+
* settings.json and enabling the runtime gate are a single user action.
|
|
509
|
+
*/
|
|
510
|
+
export function getAutoMemoryEnableConfig() {
|
|
511
|
+
const raw = readRawConfig();
|
|
512
|
+
const am = raw.autoMemory && typeof raw.autoMemory === 'object'
|
|
513
|
+
? raw.autoMemory
|
|
514
|
+
: {};
|
|
515
|
+
return {
|
|
516
|
+
enableStop: am.enableStop === true,
|
|
517
|
+
enableSessionEnd: am.enableSessionEnd === true,
|
|
518
|
+
};
|
|
519
|
+
}
|
|
520
|
+
/**
|
|
521
|
+
* Persists the on/off state of the opt-in auto-memory hooks.
|
|
522
|
+
*
|
|
523
|
+
* Lives in `autoMemory.enableStop` / `autoMemory.enableSessionEnd` under
|
|
524
|
+
* `~/.shieldcortex/config.json` — the same namespace `auto-memory-config.mjs`
|
|
525
|
+
* reads from at hook fire time. Single source of truth: install flag +
|
|
526
|
+
* runtime gate cannot disagree.
|
|
527
|
+
*/
|
|
528
|
+
export function setAutoMemoryEnableConfig(updates) {
|
|
529
|
+
const raw = readRawConfig();
|
|
530
|
+
const existing = raw.autoMemory && typeof raw.autoMemory === 'object'
|
|
531
|
+
? raw.autoMemory
|
|
532
|
+
: {};
|
|
533
|
+
if (updates.enableStop !== undefined)
|
|
534
|
+
existing.enableStop = updates.enableStop;
|
|
535
|
+
if (updates.enableSessionEnd !== undefined)
|
|
536
|
+
existing.enableSessionEnd = updates.enableSessionEnd;
|
|
537
|
+
raw.autoMemory = existing;
|
|
538
|
+
writeRawConfig(raw);
|
|
539
|
+
}
|
|
502
540
|
const DEFAULT_TOOL_RESPONSE_SCAN_CONFIG = {
|
|
503
541
|
scanToolResponses: true,
|
|
504
542
|
toolResponseMode: 'advisory',
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import fs from 'fs';
|
|
5
5
|
import path from 'path';
|
|
6
6
|
import os from 'os';
|
|
7
|
+
import { setAutoMemoryEnableConfig } from '../cloud/config.js';
|
|
7
8
|
const SETTINGS_PATH = path.join(os.homedir(), '.claude', 'settings.json');
|
|
8
9
|
const CORTEX_HOOKS = {
|
|
9
10
|
PreCompact: {
|
|
@@ -123,7 +124,7 @@ export function setupHooks(options) {
|
|
|
123
124
|
if (!hasCortexHook(settings.hooks.SessionEnd)) {
|
|
124
125
|
settings.hooks.SessionEnd.push(SESSION_END_HOOK);
|
|
125
126
|
added++;
|
|
126
|
-
console.log(` + Hook: SessionEnd (opt-in —
|
|
127
|
+
console.log(` + Hook: SessionEnd (opt-in — flipping autoMemory.enableSessionEnd=true)`);
|
|
127
128
|
}
|
|
128
129
|
else {
|
|
129
130
|
console.log(` = Hook: SessionEnd (already configured)`);
|
|
@@ -137,7 +138,7 @@ export function setupHooks(options) {
|
|
|
137
138
|
if (!hasCortexHook(settings.hooks.Stop)) {
|
|
138
139
|
settings.hooks.Stop.push(STOP_HOOK);
|
|
139
140
|
added++;
|
|
140
|
-
console.log(` + Hook: Stop (opt-in —
|
|
141
|
+
console.log(` + Hook: Stop (opt-in — flipping autoMemory.enableStop=true)`);
|
|
141
142
|
}
|
|
142
143
|
else {
|
|
143
144
|
console.log(` = Hook: Stop (already configured)`);
|
|
@@ -151,4 +152,24 @@ export function setupHooks(options) {
|
|
|
151
152
|
else {
|
|
152
153
|
console.log('Hooks: all hooks already configured in ~/.claude/settings.json');
|
|
153
154
|
}
|
|
155
|
+
// Single source of truth: the install flag IS the runtime gate. Wiring the
|
|
156
|
+
// hook in settings.json without flipping autoMemory.enable* was the
|
|
157
|
+
// silent-amnesia failure mode in #41 — passing --with-stop-hook wrote the
|
|
158
|
+
// hook but the runtime gate (default false) made it bail on every fire.
|
|
159
|
+
// Always sync gate to install flag — including the false case, so removing
|
|
160
|
+
// a hook by re-running install without the flag also disables the gate.
|
|
161
|
+
if (options?.stopHook !== undefined || options?.sessionEnd !== undefined) {
|
|
162
|
+
const updates = {};
|
|
163
|
+
if (options.stopHook !== undefined)
|
|
164
|
+
updates.enableStop = options.stopHook;
|
|
165
|
+
if (options.sessionEnd !== undefined)
|
|
166
|
+
updates.enableSessionEnd = options.sessionEnd;
|
|
167
|
+
try {
|
|
168
|
+
setAutoMemoryEnableConfig(updates);
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
172
|
+
console.warn(`Hooks: could not update autoMemory enable config — ${msg}`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
154
175
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "shieldcortex",
|
|
3
|
-
"version": "4.13.
|
|
3
|
+
"version": "4.13.1",
|
|
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.13.
|
|
3
|
+
"version": "4.13.1",
|
|
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,
|
|
@@ -2,7 +2,14 @@ import { existsSync, readFileSync } from 'fs';
|
|
|
2
2
|
import { join } from 'path';
|
|
3
3
|
import { homedir } from 'os';
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
function getConfigPath() {
|
|
6
|
+
// Honour the same SHIELDCORTEX_CONFIG_DIR override that src/cloud/config.ts
|
|
7
|
+
// uses, so the runtime gate and the rest of the system always resolve to the
|
|
8
|
+
// same config file (and so tests can isolate via a temp dir).
|
|
9
|
+
const override = process.env.SHIELDCORTEX_CONFIG_DIR?.trim();
|
|
10
|
+
const dir = override || join(homedir(), '.shieldcortex');
|
|
11
|
+
return join(dir, 'config.json');
|
|
12
|
+
}
|
|
6
13
|
|
|
7
14
|
const DEFAULTS = Object.freeze({
|
|
8
15
|
maxTranscriptBytes: 1024 * 1024,
|
|
@@ -17,8 +24,9 @@ const DEFAULTS = Object.freeze({
|
|
|
17
24
|
export function getAutoMemoryConfig() {
|
|
18
25
|
let raw = {};
|
|
19
26
|
try {
|
|
20
|
-
|
|
21
|
-
|
|
27
|
+
const configPath = getConfigPath();
|
|
28
|
+
if (existsSync(configPath)) {
|
|
29
|
+
raw = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
22
30
|
}
|
|
23
31
|
} catch {
|
|
24
32
|
// fall through to defaults
|
package/scripts/stop-hook.mjs
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
19
|
import Database from 'better-sqlite3';
|
|
20
|
-
import { existsSync, mkdirSync, openSync, readSync, closeSync, statSync } from 'fs';
|
|
20
|
+
import { existsSync, mkdirSync, openSync, readSync, closeSync, statSync, writeFileSync } from 'fs';
|
|
21
21
|
import { join } from 'path';
|
|
22
22
|
import { homedir } from 'os';
|
|
23
23
|
import { saveAutoExtractedMemory } from './lib/save-memory.mjs';
|
|
@@ -25,6 +25,35 @@ import { readTranscriptText } from './lib/transcript-reader.mjs';
|
|
|
25
25
|
import { getAutoMemoryConfig } from './lib/auto-memory-config.mjs';
|
|
26
26
|
import { recordHookInvocation } from './lib/telemetry.mjs';
|
|
27
27
|
|
|
28
|
+
// Sentinel directory for once-per-session "disabled" log lines. Without this
|
|
29
|
+
// the stop hook bails silently on every turn when autoMemory.enableStop is
|
|
30
|
+
// false — the user-visible symptom is "ShieldCortex never captured anything"
|
|
31
|
+
// with zero feedback (filed in #41 as silent-amnesia). One sentinel file
|
|
32
|
+
// per session keeps the log to a single line for the lifetime of the session.
|
|
33
|
+
const SC_LOG_DIR = join(homedir(), '.shieldcortex', 'logs');
|
|
34
|
+
const STOP_DISABLED_SENTINEL_DIR = join(SC_LOG_DIR, 'stop-hook-disabled-sessions');
|
|
35
|
+
|
|
36
|
+
function logDisabledOnceForSession(sessionId, reason) {
|
|
37
|
+
// Always print the line — stderr is the existing channel for hook diagnostics
|
|
38
|
+
// (mirrors session-end-hook). Then plant a sentinel so subsequent fires in
|
|
39
|
+
// the same session stay quiet.
|
|
40
|
+
if (!sessionId) {
|
|
41
|
+
console.error(`[shieldcortex stop-hook] ${reason}`);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
mkdirSync(STOP_DISABLED_SENTINEL_DIR, { recursive: true });
|
|
46
|
+
const sentinel = join(STOP_DISABLED_SENTINEL_DIR, sessionId.replace(/[^a-zA-Z0-9_.-]/g, '_'));
|
|
47
|
+
if (existsSync(sentinel)) return;
|
|
48
|
+
writeFileSync(sentinel, new Date().toISOString(), { mode: 0o600 });
|
|
49
|
+
console.error(`[shieldcortex stop-hook] ${reason}`);
|
|
50
|
+
} catch {
|
|
51
|
+
// Sentinel write failed — fall back to printing once per fire rather than
|
|
52
|
+
// staying silent. Better noisy-but-discoverable than silent-amnesia.
|
|
53
|
+
console.error(`[shieldcortex stop-hook] ${reason}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
28
57
|
// ==================== DB ====================
|
|
29
58
|
|
|
30
59
|
const NEW_DB_DIR = join(homedir(), '.shieldcortex');
|
|
@@ -303,8 +332,15 @@ process.stdin.on('end', () => {
|
|
|
303
332
|
|
|
304
333
|
const autoMemConfig = getAutoMemoryConfig();
|
|
305
334
|
if (!autoMemConfig.enableStop) {
|
|
306
|
-
// Opt-in by config
|
|
307
|
-
//
|
|
335
|
+
// Opt-in by config. As of v4.13.1 the install flag (`--with-stop-hook`)
|
|
336
|
+
// flips this gate at install time so wiring the hook and enabling it are
|
|
337
|
+
// a single user action. If the gate is still false here, the user wired
|
|
338
|
+
// the hook by hand without setting autoMemory.enableStop=true. Log once
|
|
339
|
+
// per session so the failure is visible (was silent-amnesia in #41).
|
|
340
|
+
logDisabledOnceForSession(
|
|
341
|
+
hookData.session_id,
|
|
342
|
+
`disabled — set autoMemory.enableStop=true in ~/.shieldcortex/config.json (or re-run \`shieldcortex setup --with-stop-hook\`)`,
|
|
343
|
+
);
|
|
308
344
|
process.exit(0);
|
|
309
345
|
}
|
|
310
346
|
|
|
@@ -313,8 +349,11 @@ process.stdin.on('end', () => {
|
|
|
313
349
|
|
|
314
350
|
const turnCount = countAssistantTurns(hookData.transcript_path, windowBytes);
|
|
315
351
|
if (turnCount === 0 || turnCount % samplingTurns !== 0) {
|
|
316
|
-
// Off-sample.
|
|
317
|
-
//
|
|
352
|
+
// Off-sample. Surface the sampling decision to stderr so the
|
|
353
|
+
// "1-in-N turns" behaviour stops being invisible (was a discoverability
|
|
354
|
+
// gap flagged in #41) — and still record telemetry so the dashboard
|
|
355
|
+
// shows the hook is actually wired and active.
|
|
356
|
+
console.error(`[shieldcortex stop-hook] telemetry-only turn=${turnCount}/${samplingTurns}`);
|
|
318
357
|
if (existsSync(DB_PATH)) {
|
|
319
358
|
try {
|
|
320
359
|
const tdb = new Database(DB_PATH, { timeout: 1500 });
|
|
File without changes
|
|
File without changes
|