shieldcortex 4.4.1 → 4.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -11
- package/dashboard/.next/standalone/dashboard/.next/BUILD_ID +1 -1
- package/dashboard/.next/standalone/dashboard/.next/app-path-routes-manifest.json +19 -0
- package/dashboard/.next/standalone/dashboard/.next/build-manifest.json +8 -6
- package/dashboard/.next/standalone/dashboard/.next/prerender-manifest.json +459 -3
- package/dashboard/.next/standalone/dashboard/.next/routes-manifest.json +114 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/admin/page/app-paths-manifest.json +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/admin/page/build-manifest.json +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/admin/page/next-font-manifest.json +11 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/admin/page/react-loadable-manifest.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/admin/page/server-reference-manifest.json +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/admin/page.js +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/admin/page.js.map +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/admin/page.js.nft.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/admin/page_client-reference-manifest.js +2 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/cloud/page/app-paths-manifest.json +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/cloud/page/build-manifest.json +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/cloud/page/next-font-manifest.json +11 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/cloud/page/react-loadable-manifest.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/cloud/page/server-reference-manifest.json +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/cloud/page.js +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/cloud/page.js.map +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/cloud/page.js.nft.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/cloud/page_client-reference-manifest.js +2 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/capture/page/app-paths-manifest.json +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/capture/page/build-manifest.json +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/capture/page/next-font-manifest.json +11 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/capture/page/react-loadable-manifest.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/capture/page/server-reference-manifest.json +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/capture/page.js +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/capture/page.js.map +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/capture/page.js.nft.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/capture/page_client-reference-manifest.js +2 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/graph/page/app-paths-manifest.json +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/graph/page/build-manifest.json +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/graph/page/next-font-manifest.json +11 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/graph/page/react-loadable-manifest.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/graph/page/server-reference-manifest.json +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/graph/page.js +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/graph/page.js.map +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/graph/page.js.nft.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/graph/page_client-reference-manifest.js +2 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page/app-paths-manifest.json +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page/build-manifest.json +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page/next-font-manifest.json +11 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page/react-loadable-manifest.json +8 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page/server-reference-manifest.json +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page.js +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page.js.map +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page.js.nft.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page_client-reference-manifest.js +2 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/recall/page/app-paths-manifest.json +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/recall/page/build-manifest.json +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/recall/page/next-font-manifest.json +11 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/recall/page/react-loadable-manifest.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/recall/page/server-reference-manifest.json +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/recall/page.js +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/recall/page.js.map +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/recall/page.js.nft.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/recall/page_client-reference-manifest.js +2 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/review/page/app-paths-manifest.json +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/review/page/build-manifest.json +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/review/page/next-font-manifest.json +11 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/review/page/react-loadable-manifest.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/review/page/server-reference-manifest.json +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/review/page.js +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/review/page.js.map +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/review/page.js.nft.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/review/page_client-reference-manifest.js +2 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/timeline/page/app-paths-manifest.json +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/timeline/page/build-manifest.json +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/timeline/page/next-font-manifest.json +11 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/timeline/page/react-loadable-manifest.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/timeline/page/server-reference-manifest.json +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/timeline/page.js +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/timeline/page.js.map +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/timeline/page.js.nft.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/timeline/page_client-reference-manifest.js +2 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/overview/page/app-paths-manifest.json +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/overview/page/build-manifest.json +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/overview/page/next-font-manifest.json +11 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/overview/page/react-loadable-manifest.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/overview/page/server-reference-manifest.json +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/overview/page.js +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/overview/page.js.map +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/overview/page.js.nft.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/overview/page_client-reference-manifest.js +2 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/audit/page/app-paths-manifest.json +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/audit/page/build-manifest.json +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/audit/page/next-font-manifest.json +11 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/audit/page/react-loadable-manifest.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/audit/page/server-reference-manifest.json +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/audit/page.js +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/audit/page.js.map +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/audit/page.js.nft.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/audit/page_client-reference-manifest.js +2 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/intercepts/page/app-paths-manifest.json +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/intercepts/page/build-manifest.json +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/intercepts/page/next-font-manifest.json +11 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/intercepts/page/react-loadable-manifest.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/intercepts/page/server-reference-manifest.json +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/intercepts/page.js +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/intercepts/page.js.map +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/intercepts/page.js.nft.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/intercepts/page_client-reference-manifest.js +2 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/iron-dome/page/app-paths-manifest.json +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/iron-dome/page/build-manifest.json +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/iron-dome/page/next-font-manifest.json +11 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/iron-dome/page/react-loadable-manifest.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/iron-dome/page/server-reference-manifest.json +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/iron-dome/page.js +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/iron-dome/page.js.map +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/iron-dome/page.js.nft.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/iron-dome/page_client-reference-manifest.js +2 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/page/app-paths-manifest.json +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/page/build-manifest.json +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/page/next-font-manifest.json +11 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/page/react-loadable-manifest.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/page/server-reference-manifest.json +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/page.js +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/page.js.map +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/page.js.nft.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/page_client-reference-manifest.js +2 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/policies/page/app-paths-manifest.json +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/policies/page/build-manifest.json +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/policies/page/next-font-manifest.json +11 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/policies/page/react-loadable-manifest.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/policies/page/server-reference-manifest.json +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/policies/page.js +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/policies/page.js.map +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/policies/page.js.nft.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/policies/page_client-reference-manifest.js +2 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/quarantine/page/app-paths-manifest.json +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/quarantine/page/build-manifest.json +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/quarantine/page/next-font-manifest.json +11 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/quarantine/page/react-loadable-manifest.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/quarantine/page/server-reference-manifest.json +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/quarantine/page.js +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/quarantine/page.js.map +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/quarantine/page.js.nft.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/quarantine/page_client-reference-manifest.js +2 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/settings/page/app-paths-manifest.json +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/settings/page/build-manifest.json +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/settings/page/next-font-manifest.json +11 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/settings/page/react-loadable-manifest.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/settings/page/server-reference-manifest.json +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/settings/page.js +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/settings/page.js.map +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +2 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/page/app-paths-manifest.json +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/page/build-manifest.json +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/page/next-font-manifest.json +11 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/page/react-loadable-manifest.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/page/server-reference-manifest.json +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/page.js +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/page.js.map +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/page.js.nft.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/page_client-reference-manifest.js +2 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/xray/page/app-paths-manifest.json +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/xray/page/build-manifest.json +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/xray/page/next-font-manifest.json +11 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/xray/page/react-loadable-manifest.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/xray/page/server-reference-manifest.json +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/xray/page.js +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/xray/page.js.map +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/xray/page.js.nft.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/xray/page_client-reference-manifest.js +2 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/xray/page/app-paths-manifest.json +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/xray/page/build-manifest.json +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/xray/page/next-font-manifest.json +11 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/xray/page/react-loadable-manifest.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/xray/page/server-reference-manifest.json +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/xray/page.js +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/xray/page.js.map +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/xray/page.js.nft.json +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/xray/page_client-reference-manifest.js +2 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error/page/build-manifest.json +6 -4
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error/page.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.rsc +7 -7
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
- 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/page/build-manifest.json +6 -4
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found/page.js +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found/page_client-reference-manifest.js +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 +10 -11
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +10 -11
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_head.segment.rsc +3 -3
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_index.segment.rsc +6 -7
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -3
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.html +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.meta +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin/__PAGE__.segment.rsc +6 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_full.segment.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_head.segment.rsc +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_index.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_tree.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.html +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.meta +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud/__PAGE__.segment.rsc +6 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_full.segment.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_head.segment.rsc +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_index.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_tree.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.meta +2 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.rsc +15 -19
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/__PAGE__.segment.rsc +5 -8
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_full.segment.rsc +15 -19
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_head.segment.rsc +3 -3
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_index.segment.rsc +6 -7
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_tree.segment.rsc +2 -3
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.html +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.meta +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture/__PAGE__.segment.rsc +6 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_full.segment.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_head.segment.rsc +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_index.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_tree.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.html +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.meta +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph/__PAGE__.segment.rsc +6 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_full.segment.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_head.segment.rsc +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_index.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_tree.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.html +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.meta +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall/__PAGE__.segment.rsc +6 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_full.segment.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_head.segment.rsc +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_index.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_tree.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.html +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.meta +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review/__PAGE__.segment.rsc +6 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_full.segment.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_head.segment.rsc +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_index.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_tree.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.html +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.meta +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline/__PAGE__.segment.rsc +6 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_full.segment.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_head.segment.rsc +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_index.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_tree.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.html +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.meta +16 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.rsc +24 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory/__PAGE__.segment.rsc +9 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_full.segment.rsc +24 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_head.segment.rsc +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_index.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_tree.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.html +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.meta +16 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.rsc +24 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview/__PAGE__.segment.rsc +9 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_full.segment.rsc +24 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_head.segment.rsc +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_index.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_tree.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/page/build-manifest.json +6 -4
- package/dashboard/.next/standalone/dashboard/.next/server/app/page/react-loadable-manifest.json +1 -15
- package/dashboard/.next/standalone/dashboard/.next/server/app/page.js +4 -3
- package/dashboard/.next/standalone/dashboard/.next/server/app/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.html +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.meta +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit/__PAGE__.segment.rsc +6 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_full.segment.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_head.segment.rsc +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_index.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_tree.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.html +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.meta +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts/__PAGE__.segment.rsc +6 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_full.segment.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_head.segment.rsc +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_index.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_tree.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.html +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.meta +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome/__PAGE__.segment.rsc +6 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_full.segment.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_head.segment.rsc +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_index.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_tree.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.html +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.meta +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies/__PAGE__.segment.rsc +6 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_full.segment.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_head.segment.rsc +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_index.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_tree.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.html +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.meta +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine/__PAGE__.segment.rsc +6 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_full.segment.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_head.segment.rsc +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_index.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_tree.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.html +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.meta +16 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection/__PAGE__.segment.rsc +6 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_full.segment.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_head.segment.rsc +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_index.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_tree.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.html +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.meta +16 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings/__PAGE__.segment.rsc +6 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_full.segment.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_head.segment.rsc +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_index.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_tree.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.html +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.meta +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray/__PAGE__.segment.rsc +6 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_full.segment.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_head.segment.rsc +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_index.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_tree.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.html +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.meta +18 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain/__PAGE__.segment.rsc +6 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_full.segment.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_head.segment.rsc +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_index.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_tree.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.html +1 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.meta +16 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray/__PAGE__.segment.rsc +6 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_full.segment.rsc +21 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_head.segment.rsc +5 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_index.segment.rsc +7 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_tree.segment.rsc +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/app-paths-manifest.json +19 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/52d24__next-internal_server_app_(dashboard)_memory_capture_page_actions_63edc13b.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/52d24__next-internal_server_app_(dashboard)_memory_graph_page_actions_dbea2941.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/52d24__next-internal_server_app_(dashboard)_memory_recall_page_actions_862f5d2a.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/52d24__next-internal_server_app_(dashboard)_memory_review_page_actions_a92d5b10.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/52d24__next-internal_server_app_(dashboard)_memory_timeline_page_actions_ca9ce9e1.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/52d24__next-internal_server_app_(dashboard)_protection_audit_page_actions_f7691378.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/52d24__next-internal_server_app_(dashboard)_protection_policies_page_actions_cf89da5c.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/52d24__next-internal_server_app_(dashboard)_supply-chain_page_actions_dde2608a.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/52d24__next-internal_server_app_(dashboard)_supply-chain_xray_page_actions_25d3be0c.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/87dda_server_app_(dashboard)_protection_intercepts_page_actions_6ddf5b47.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/87dda_server_app_(dashboard)_protection_quarantine_page_actions_6f4f062b.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/9f1d4_next_c9fe89e1._.js +6 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/9f1d4_next_dist_0984e28b._.js +6 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/9f1d4_next_dist_d7bbb1c6._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/9f1d4_next_dist_esm_8b94d72c._.js +6 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/9f1d4_next_dist_esm_build_templates_app-page_f7d4354e.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/9f1d4_next_dist_fe6a9400._.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/9f1d4_sonner_dist_index_mjs_8c2eff75._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__453bd501._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__4b8693ea._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__5304568b._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__883523b7._.js +3 -3
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__b789489c._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__c95102dd._.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__fb5796ae._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/acce3_next-internal_server_app_(dashboard)_protection_iron-dome_page_actions_0aea67c8.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_024efb58._.js +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_0734b815._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_0934dafc._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_0d9fbcc0._.js +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_0e714544._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/{dashboard_f4cc9ff7._.js → dashboard_18059cf9._.js} +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_1bfd1423._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_21edaee1._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_254480da._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_25af784d._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_2ae2cdd9._.js +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_2f2b5522._.js +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_315f952f._.js +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_341cc376._.js +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_354daf70._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_42c76551._.js +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_537e8679._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_5a44c25a._.js +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_5b25ee34._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_5ebb1380._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_62f8f1fa._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_65d138f7._.js +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_71fe2c0e._.js +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_7cf5447f._.js +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_80a74456._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_8481163e._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_86b2b751._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_8c581cd9._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_91d25d41._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_992cf6c5._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_9f4c00b5._.js +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard__next-internal_server_app_(dashboard)_admin_page_actions_f99f8aba.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard__next-internal_server_app_(dashboard)_cloud_page_actions_5ff04aeb.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard__next-internal_server_app_(dashboard)_memory_page_actions_4529165f.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard__next-internal_server_app_(dashboard)_overview_page_actions_4a244b02.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard__next-internal_server_app_(dashboard)_protection_page_actions_4229fd3d.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard__next-internal_server_app_(dashboard)_settings_page_actions_aa1f9866.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard__next-internal_server_app_(dashboard)_xray_page_actions_c6ca6ce9.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_a0a7f554._.js +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_a3053031._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_a38f5767._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_a3cc94bf._.js +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_b1850b4f._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_b4e15446._.js +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_bc44a6f5._.js +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_c06ef3e8._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_c219bf07._.js +11 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_cb692f5d._.js +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_ccbe7478._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_d2ab3dee._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_d5fc66fc._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_dd1ddeb1._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/{dashboard_1cd9d700._.js → dashboard_dd70a70e._.js} +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_ebc28872._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_f6813b70._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_f89c6dde._.js +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_fa4d9b7f._.js +4 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_fb667e64._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_29acd7a4._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_app_(dashboard)_error_tsx_2301e8fd._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_components_protection_ProtectionOverview_tsx_54554a97._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_components_settings_SettingsView_tsx_16dc83a7._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_components_xray_XRayOverview_tsx_ceba698e._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_lib_3f1490a1._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/middleware-build-manifest.js +6 -4
- package/dashboard/.next/standalone/dashboard/.next/server/next-font-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/next-font-manifest.json +76 -0
- 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/dashboard/.next/standalone/dashboard/.next/server/server-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/server-reference-manifest.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/102f894cc892994d.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/1482af194911d5e7.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/2c2a280eeaed7ed2.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/302ad459a0e5c4ba.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/344b86872b9c4525.js +9 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/364656baa57adaa7.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/417032eeb2cd875f.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/43d761df92da7cb6.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/4ddb24d8ce3b8617.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/5274a6127d41c42c.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/52843253e4b833a5.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/{e007ff86847a4042.js → 8a5b61fd5e1bbcfa.js} +1 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/8eaf3adbd52b96d5.css +3 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/927fe0465516b94a.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/99a618b860658c5c.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/9e56d1f8f4d7adcb.js +4 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/a18776eadc9ef21a.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/abc5967c868b0fe9.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/b31e08a78b0cb6fb.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/b4b3fb5729bead7e.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/c2ccb1c0ed7b2af2.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/cbc2e6ffcad6e91c.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/d2f861595d6a41df.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/{215ce64499260c25.js → d334b69bff7779be.js} +1 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/d878b929b21636c4.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/d9ad4c35fc865415.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/e281719dbabcca1d.js +2 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/turbopack-79214717b23f7452.js +4 -0
- package/dashboard/.next/standalone/dashboard/package.json +1 -0
- package/dist/api/events.d.ts +1 -1
- package/dist/api/routes/admin.js +101 -7
- package/dist/api/routes/graph.js +3 -2
- package/dist/api/routes/memories.js +24 -5
- package/dist/api/routes/system.js +11 -1
- package/dist/api/routes/xray-findings.d.ts +4 -0
- package/dist/api/routes/xray-findings.js +57 -0
- package/dist/api/routes/xray.d.ts +4 -0
- package/dist/api/routes/xray.js +358 -0
- package/dist/api/visualization-server.js +23 -1
- package/dist/xray/activity.d.ts +87 -0
- package/dist/xray/activity.js +256 -0
- package/dist/xray/dir-scanner.js +48 -2
- package/dist/xray/file-scanner.js +42 -19
- package/dist/xray/findings-store.d.ts +56 -0
- package/dist/xray/findings-store.js +173 -0
- package/dist/xray/guidance.d.ts +26 -0
- package/dist/xray/guidance.js +180 -0
- package/dist/xray/index.js +21 -0
- package/dist/xray/preinstall.js +79 -0
- package/dist/xray/types.d.ts +19 -0
- package/dist/xray/watch.js +83 -5
- package/package.json +1 -1
- package/plugins/openclaw/dist/openclaw.plugin.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/9f1d4_next_dist_e83b0b39._.js +0 -6
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__1837adce._.js +0 -3
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__3b976911._.js +0 -3
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__536fb178._.js +0 -3
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__dd62b66f._.js +0 -3
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__e7b9112f._.js +0 -3
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_19978329._.js +0 -3
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_3051539d._.js +0 -11
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/2473c16c0c2f6b5f.css +0 -2
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/3c430292ca8ddc5f.css +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/4c20fb97ba4556e7.js +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/64ee9622541d967c.js +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/6ba7a5c1a80a6791.js +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/7d08316952ccdcef.js +0 -5
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/a2549232b06fdb76.js +0 -842
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/b3ac7aa47461e043.js +0 -3
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/d3d8171bf50ef87e.js +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/da64d159c042f5ae.js +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/e8456c3e5fe1c1d8.js +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/ec55aacd8af83909.js +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/f772b169c536121a.js +0 -9
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/turbopack-c2d84e7d37269ac1.js +0 -4
- /package/dashboard/.next/standalone/dashboard/.next/static/{iirFNn01-fptKDNjFObe- → jgtHmh7zpEVcqlYNM0gvu}/_buildManifest.js +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{iirFNn01-fptKDNjFObe- → jgtHmh7zpEVcqlYNM0gvu}/_clientMiddlewareManifest.json +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{iirFNn01-fptKDNjFObe- → jgtHmh7zpEVcqlYNM0gvu}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import os from 'os';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
const XRAY_DIR = path.join(os.homedir(), '.shieldcortex');
|
|
5
|
+
const HISTORY_FILE = path.join(XRAY_DIR, 'xray-history.json');
|
|
6
|
+
const ACTIVITY_FILE = path.join(XRAY_DIR, 'xray-activity.jsonl');
|
|
7
|
+
const WATCH_SESSIONS_FILE = path.join(XRAY_DIR, 'xray-watch-sessions.json');
|
|
8
|
+
const HISTORY_LIMIT = 25;
|
|
9
|
+
const ACTIVITY_LIMIT = 100;
|
|
10
|
+
const WATCH_SESSION_LIMIT = 20;
|
|
11
|
+
const ACTIVE_WATCH_THRESHOLD_MS = 90 * 1000;
|
|
12
|
+
const STALE_WATCH_RETENTION_MS = 24 * 60 * 60 * 1000;
|
|
13
|
+
const ENDED_WATCH_RETENTION_MS = 7 * 24 * 60 * 60 * 1000;
|
|
14
|
+
function ensureXRayDir() {
|
|
15
|
+
if (!fs.existsSync(XRAY_DIR)) {
|
|
16
|
+
fs.mkdirSync(XRAY_DIR, { recursive: true });
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function makeId() {
|
|
20
|
+
return `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
21
|
+
}
|
|
22
|
+
export function serializeXRayResult(result) {
|
|
23
|
+
return {
|
|
24
|
+
target: result.target,
|
|
25
|
+
trustScore: result.trustScore,
|
|
26
|
+
riskLevel: result.riskLevel,
|
|
27
|
+
findings: result.findings,
|
|
28
|
+
filesScanned: result.filesScanned,
|
|
29
|
+
scannedAt: result.scannedAt.toISOString(),
|
|
30
|
+
deepScan: result.deepScan,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export function createHistoryEntry(result, targetType) {
|
|
34
|
+
return {
|
|
35
|
+
id: makeId(),
|
|
36
|
+
target: result.target,
|
|
37
|
+
targetType,
|
|
38
|
+
deepScan: result.deepScan,
|
|
39
|
+
trustScore: result.trustScore,
|
|
40
|
+
riskLevel: result.riskLevel,
|
|
41
|
+
filesScanned: result.filesScanned,
|
|
42
|
+
findingCount: result.findings.length,
|
|
43
|
+
scannedAt: result.scannedAt.toISOString(),
|
|
44
|
+
result: serializeXRayResult(result),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export function readHistory() {
|
|
48
|
+
try {
|
|
49
|
+
const raw = fs.readFileSync(HISTORY_FILE, 'utf-8');
|
|
50
|
+
const parsed = JSON.parse(raw);
|
|
51
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export function getHistoryEntry(id) {
|
|
58
|
+
return readHistory().find((entry) => entry.id === id) ?? null;
|
|
59
|
+
}
|
|
60
|
+
export function appendHistory(entry) {
|
|
61
|
+
ensureXRayDir();
|
|
62
|
+
const existing = readHistory();
|
|
63
|
+
fs.writeFileSync(HISTORY_FILE, JSON.stringify([entry, ...existing].slice(0, HISTORY_LIMIT), null, 2));
|
|
64
|
+
}
|
|
65
|
+
export function appendActivity(entry) {
|
|
66
|
+
ensureXRayDir();
|
|
67
|
+
const fullEntry = { id: makeId(), ...entry };
|
|
68
|
+
fs.appendFileSync(ACTIVITY_FILE, `${JSON.stringify(fullEntry)}\n`);
|
|
69
|
+
return fullEntry;
|
|
70
|
+
}
|
|
71
|
+
export function readActivity(limit = 25) {
|
|
72
|
+
try {
|
|
73
|
+
const lines = fs.readFileSync(ACTIVITY_FILE, 'utf-8')
|
|
74
|
+
.split('\n')
|
|
75
|
+
.map((line) => line.trim())
|
|
76
|
+
.filter(Boolean)
|
|
77
|
+
.slice(-ACTIVITY_LIMIT);
|
|
78
|
+
const entries = lines
|
|
79
|
+
.map((line) => {
|
|
80
|
+
try {
|
|
81
|
+
return JSON.parse(line);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
})
|
|
87
|
+
.filter((entry) => entry !== null);
|
|
88
|
+
return entries.reverse().slice(0, limit);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return [];
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function normalizeWatchSession(entry) {
|
|
95
|
+
const heartbeatAge = Date.now() - new Date(entry.lastHeartbeatAt).getTime();
|
|
96
|
+
const active = entry.active && heartbeatAge <= ACTIVE_WATCH_THRESHOLD_MS && entry.endedAt === null;
|
|
97
|
+
const state = entry.endedAt
|
|
98
|
+
? 'ended'
|
|
99
|
+
: active
|
|
100
|
+
? 'active'
|
|
101
|
+
: 'stale';
|
|
102
|
+
return {
|
|
103
|
+
...entry,
|
|
104
|
+
active,
|
|
105
|
+
state,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
function loadWatchSessions() {
|
|
109
|
+
try {
|
|
110
|
+
const raw = fs.readFileSync(WATCH_SESSIONS_FILE, 'utf-8');
|
|
111
|
+
const parsed = JSON.parse(raw);
|
|
112
|
+
if (!Array.isArray(parsed))
|
|
113
|
+
return [];
|
|
114
|
+
return parsed.map((entry) => entry);
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return [];
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function writeWatchSessions(entries) {
|
|
121
|
+
ensureXRayDir();
|
|
122
|
+
fs.writeFileSync(WATCH_SESSIONS_FILE, JSON.stringify(entries.slice(0, WATCH_SESSION_LIMIT), null, 2));
|
|
123
|
+
}
|
|
124
|
+
function shouldRetainWatchSession(entry) {
|
|
125
|
+
const now = Date.now();
|
|
126
|
+
if (entry.state === 'active')
|
|
127
|
+
return true;
|
|
128
|
+
if (entry.state === 'stale') {
|
|
129
|
+
return now - new Date(entry.lastHeartbeatAt).getTime() <= STALE_WATCH_RETENTION_MS;
|
|
130
|
+
}
|
|
131
|
+
if (entry.state === 'ended' && entry.endedAt) {
|
|
132
|
+
return now - new Date(entry.endedAt).getTime() <= ENDED_WATCH_RETENTION_MS;
|
|
133
|
+
}
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
function cleanupWatchSessions(entries) {
|
|
137
|
+
return entries
|
|
138
|
+
.map((entry) => normalizeWatchSession(entry))
|
|
139
|
+
.filter((entry) => shouldRetainWatchSession(entry))
|
|
140
|
+
.slice(0, WATCH_SESSION_LIMIT);
|
|
141
|
+
}
|
|
142
|
+
export function readWatchSessions() {
|
|
143
|
+
const cleaned = cleanupWatchSessions(loadWatchSessions());
|
|
144
|
+
if (cleaned.length > 0 || fs.existsSync(WATCH_SESSIONS_FILE)) {
|
|
145
|
+
writeWatchSessions(cleaned);
|
|
146
|
+
}
|
|
147
|
+
return cleaned;
|
|
148
|
+
}
|
|
149
|
+
export function startWatchSession(root, deepScan) {
|
|
150
|
+
const now = new Date().toISOString();
|
|
151
|
+
const entry = {
|
|
152
|
+
id: makeId(),
|
|
153
|
+
root,
|
|
154
|
+
deepScan,
|
|
155
|
+
startedAt: now,
|
|
156
|
+
lastHeartbeatAt: now,
|
|
157
|
+
endedAt: null,
|
|
158
|
+
active: true,
|
|
159
|
+
state: 'active',
|
|
160
|
+
changesDetected: 0,
|
|
161
|
+
findingsDetected: 0,
|
|
162
|
+
highestRiskLevel: 'SAFE',
|
|
163
|
+
lastEventAt: null,
|
|
164
|
+
lastEventSummary: null,
|
|
165
|
+
};
|
|
166
|
+
const existing = readWatchSessions().filter((session) => session.root !== root || !session.active);
|
|
167
|
+
writeWatchSessions([entry, ...existing]);
|
|
168
|
+
return entry;
|
|
169
|
+
}
|
|
170
|
+
function updateWatchSessionEntry(sessionId, updater) {
|
|
171
|
+
let updated = null;
|
|
172
|
+
const next = readWatchSessions().map((entry) => {
|
|
173
|
+
if (entry.id !== sessionId)
|
|
174
|
+
return entry;
|
|
175
|
+
updated = normalizeWatchSession(updater(entry));
|
|
176
|
+
return updated;
|
|
177
|
+
});
|
|
178
|
+
if (updated) {
|
|
179
|
+
writeWatchSessions(next);
|
|
180
|
+
}
|
|
181
|
+
return updated;
|
|
182
|
+
}
|
|
183
|
+
export function heartbeatWatchSession(sessionId) {
|
|
184
|
+
return updateWatchSessionEntry(sessionId, (entry) => ({
|
|
185
|
+
...entry,
|
|
186
|
+
active: true,
|
|
187
|
+
state: 'active',
|
|
188
|
+
lastHeartbeatAt: new Date().toISOString(),
|
|
189
|
+
endedAt: null,
|
|
190
|
+
}));
|
|
191
|
+
}
|
|
192
|
+
const RISK_RANK = {
|
|
193
|
+
SAFE: 0,
|
|
194
|
+
LOW: 1,
|
|
195
|
+
MEDIUM: 2,
|
|
196
|
+
HIGH: 3,
|
|
197
|
+
CRITICAL: 4,
|
|
198
|
+
};
|
|
199
|
+
export function recordWatchSessionEvent(sessionId, payload) {
|
|
200
|
+
return updateWatchSessionEntry(sessionId, (entry) => {
|
|
201
|
+
const nextRisk = RISK_RANK[payload.riskLevel] > RISK_RANK[entry.highestRiskLevel]
|
|
202
|
+
? payload.riskLevel
|
|
203
|
+
: entry.highestRiskLevel;
|
|
204
|
+
return {
|
|
205
|
+
...entry,
|
|
206
|
+
active: true,
|
|
207
|
+
state: 'active',
|
|
208
|
+
lastHeartbeatAt: new Date().toISOString(),
|
|
209
|
+
changesDetected: entry.changesDetected + 1,
|
|
210
|
+
findingsDetected: entry.findingsDetected + payload.findingsDetected,
|
|
211
|
+
highestRiskLevel: nextRisk,
|
|
212
|
+
lastEventAt: payload.scannedAt ?? new Date().toISOString(),
|
|
213
|
+
lastEventSummary: payload.summary,
|
|
214
|
+
};
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
export function endWatchSession(sessionId) {
|
|
218
|
+
const now = new Date().toISOString();
|
|
219
|
+
return updateWatchSessionEntry(sessionId, (entry) => ({
|
|
220
|
+
...entry,
|
|
221
|
+
active: false,
|
|
222
|
+
state: 'ended',
|
|
223
|
+
lastHeartbeatAt: now,
|
|
224
|
+
endedAt: now,
|
|
225
|
+
}));
|
|
226
|
+
}
|
|
227
|
+
// ── Watch IPC (JSONL file for cross-process broadcast) ───────
|
|
228
|
+
export const DETECTION_EVENTS_FILE = path.join(XRAY_DIR, 'xray-detection-events.jsonl');
|
|
229
|
+
const MAX_EVENTS_FILE_SIZE = 512 * 1024;
|
|
230
|
+
export function emitDetectionEvent(event) {
|
|
231
|
+
try {
|
|
232
|
+
const stat = fs.statSync(DETECTION_EVENTS_FILE);
|
|
233
|
+
if (stat.size > MAX_EVENTS_FILE_SIZE) {
|
|
234
|
+
fs.writeFileSync(DETECTION_EVENTS_FILE, '');
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
catch { /* File doesn't exist yet */ }
|
|
238
|
+
const line = JSON.stringify({ ...event, timestamp: new Date().toISOString() }) + '\n';
|
|
239
|
+
fs.appendFileSync(DETECTION_EVENTS_FILE, line);
|
|
240
|
+
}
|
|
241
|
+
export function readAndClearDetectionEvents() {
|
|
242
|
+
try {
|
|
243
|
+
if (!fs.existsSync(DETECTION_EVENTS_FILE))
|
|
244
|
+
return [];
|
|
245
|
+
const tmp = DETECTION_EVENTS_FILE + '.processing';
|
|
246
|
+
fs.renameSync(DETECTION_EVENTS_FILE, tmp);
|
|
247
|
+
const data = fs.readFileSync(tmp, 'utf-8').trim();
|
|
248
|
+
fs.unlinkSync(tmp);
|
|
249
|
+
if (!data)
|
|
250
|
+
return [];
|
|
251
|
+
return data.split('\n').filter(Boolean).map((line) => JSON.parse(line));
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
return [];
|
|
255
|
+
}
|
|
256
|
+
}
|
package/dist/xray/dir-scanner.js
CHANGED
|
@@ -13,13 +13,56 @@ import { calculateTrustScore } from './trust-score.js';
|
|
|
13
13
|
const SKIP_DIRS = new Set([
|
|
14
14
|
'node_modules', '.git', '.svn', '.hg', 'dist', 'build', '.next',
|
|
15
15
|
'__pycache__', '.tox', '.venv', 'venv', '.cache', 'coverage',
|
|
16
|
+
'Caches', 'CacheStorage', 'IndexedDB', 'GPUCache',
|
|
16
17
|
]);
|
|
18
|
+
/** Absolute path prefixes to never scan — system/OS files that always produce false positives. */
|
|
19
|
+
const SKIP_PATH_PREFIXES = [
|
|
20
|
+
'/System/',
|
|
21
|
+
'/Library/',
|
|
22
|
+
'/usr/',
|
|
23
|
+
'/bin/',
|
|
24
|
+
'/sbin/',
|
|
25
|
+
'/private/var/',
|
|
26
|
+
'/System/Volumes/Preboot/',
|
|
27
|
+
'/System/Volumes/Data/private/',
|
|
28
|
+
];
|
|
29
|
+
/** Path segments that indicate non-code data we should skip. */
|
|
30
|
+
const SKIP_PATH_SEGMENTS = [
|
|
31
|
+
'/Library/Caches/',
|
|
32
|
+
'/Library/Application Support/Google/Chrome/',
|
|
33
|
+
'/Library/Application Support/Firefox/',
|
|
34
|
+
'/Library/Application Support/Arc/',
|
|
35
|
+
'/Library/Containers/',
|
|
36
|
+
'/Library/News/',
|
|
37
|
+
'/Library/Mail/',
|
|
38
|
+
'/Library/Messages/',
|
|
39
|
+
'/Library/Safari/',
|
|
40
|
+
'/Library/Cookies/',
|
|
41
|
+
'/Library/Saved Application State/',
|
|
42
|
+
'/Library/WebKit/',
|
|
43
|
+
'/.Trash/',
|
|
44
|
+
];
|
|
17
45
|
/** Maximum number of files to scan per directory. */
|
|
18
46
|
const MAX_FILES = 5000;
|
|
47
|
+
/** Check if a full file path should be excluded from scanning. */
|
|
48
|
+
function isExcludedPath(filePath) {
|
|
49
|
+
for (const prefix of SKIP_PATH_PREFIXES) {
|
|
50
|
+
if (filePath.startsWith(prefix))
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
for (const segment of SKIP_PATH_SEGMENTS) {
|
|
54
|
+
if (filePath.includes(segment))
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
19
59
|
// ── Directory walker ────────────────────────────────────────
|
|
20
60
|
function walkDir(dirPath, files, depth = 0) {
|
|
21
61
|
if (depth > 20 || files.length >= MAX_FILES)
|
|
22
62
|
return;
|
|
63
|
+
// Skip entire system/cache directory trees early
|
|
64
|
+
if (isExcludedPath(dirPath + '/'))
|
|
65
|
+
return;
|
|
23
66
|
let entries;
|
|
24
67
|
try {
|
|
25
68
|
entries = fs.readdirSync(dirPath, { withFileTypes: true });
|
|
@@ -30,13 +73,16 @@ function walkDir(dirPath, files, depth = 0) {
|
|
|
30
73
|
for (const entry of entries) {
|
|
31
74
|
if (files.length >= MAX_FILES)
|
|
32
75
|
break;
|
|
76
|
+
const fullPath = path.join(dirPath, entry.name);
|
|
33
77
|
if (entry.isDirectory()) {
|
|
34
78
|
if (!SKIP_DIRS.has(entry.name) && !entry.name.startsWith('.')) {
|
|
35
|
-
walkDir(
|
|
79
|
+
walkDir(fullPath, files, depth + 1);
|
|
36
80
|
}
|
|
37
81
|
}
|
|
38
82
|
else if (entry.isFile()) {
|
|
39
|
-
|
|
83
|
+
if (!isExcludedPath(fullPath)) {
|
|
84
|
+
files.push(fullPath);
|
|
85
|
+
}
|
|
40
86
|
}
|
|
41
87
|
}
|
|
42
88
|
}
|
|
@@ -41,7 +41,9 @@ function hasZeroWidthUnicode(content) {
|
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
43
|
function checkPolyglot(buf) {
|
|
44
|
-
//
|
|
44
|
+
// Only check magic bytes at file start (first 8 bytes) to avoid false positives
|
|
45
|
+
// from coincidental byte sequences in large binary files
|
|
46
|
+
const head = buf.subarray(0, 8);
|
|
45
47
|
const signatures = [
|
|
46
48
|
{ name: 'PDF', magic: Buffer.from('%PDF') },
|
|
47
49
|
{ name: 'ZIP/JAR', magic: Buffer.from([0x50, 0x4b, 0x03, 0x04]) },
|
|
@@ -49,20 +51,39 @@ function checkPolyglot(buf) {
|
|
|
49
51
|
{ name: 'PE/EXE', magic: Buffer.from([0x4d, 0x5a]) },
|
|
50
52
|
{ name: 'GZIP', magic: Buffer.from([0x1f, 0x8b]) },
|
|
51
53
|
];
|
|
52
|
-
|
|
54
|
+
// Identify the primary format from the file header
|
|
55
|
+
let primaryFormat = null;
|
|
53
56
|
for (const sig of signatures) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
+
if (head.subarray(0, sig.magic.length).equals(sig.magic)) {
|
|
58
|
+
primaryFormat = sig.name;
|
|
59
|
+
break;
|
|
57
60
|
}
|
|
58
61
|
}
|
|
59
|
-
if (
|
|
62
|
+
if (!primaryFormat)
|
|
63
|
+
return null;
|
|
64
|
+
// Check for a SECOND format signature embedded after the first 64 bytes
|
|
65
|
+
// (a real polyglot embeds another format, not just coincidental bytes)
|
|
66
|
+
const searchStart = 64;
|
|
67
|
+
if (buf.length < searchStart + 4)
|
|
68
|
+
return null;
|
|
69
|
+
const rest = buf.subarray(searchStart);
|
|
70
|
+
const embedded = [];
|
|
71
|
+
for (const sig of signatures) {
|
|
72
|
+
if (sig.name === primaryFormat)
|
|
73
|
+
continue;
|
|
74
|
+
// Look for the signature at a plausible offset (not random noise)
|
|
75
|
+
const idx = rest.indexOf(sig.magic);
|
|
76
|
+
if (idx >= 0 && idx < 1024) {
|
|
77
|
+
embedded.push(sig.name);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (embedded.length > 0) {
|
|
60
81
|
return {
|
|
61
82
|
severity: 'high',
|
|
62
83
|
category: 'steganography',
|
|
63
84
|
title: 'Polyglot file detected',
|
|
64
|
-
description: `File
|
|
65
|
-
evidence:
|
|
85
|
+
description: `File starts as ${primaryFormat} but also contains ${embedded.join(', ')} signatures, indicating a polyglot that may hide payloads.`,
|
|
86
|
+
evidence: `${primaryFormat} + ${embedded.join(', ')}`,
|
|
66
87
|
};
|
|
67
88
|
}
|
|
68
89
|
return null;
|
|
@@ -309,17 +330,19 @@ export async function scanFile(filePath, deep) {
|
|
|
309
330
|
});
|
|
310
331
|
}
|
|
311
332
|
}
|
|
312
|
-
// Long single-line detection —
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
333
|
+
// Long single-line detection — only for code/JSON files (binary blobs always have long "lines")
|
|
334
|
+
if (CODE_EXTENSIONS.has(ext) || JSON_EXTENSIONS.has(ext)) {
|
|
335
|
+
const lines = content.split('\n');
|
|
336
|
+
const longLines = lines.filter(l => l.length > 2000);
|
|
337
|
+
if (longLines.length > 0 && lines.length < 10) {
|
|
338
|
+
findings.push({
|
|
339
|
+
category: 'obfuscation',
|
|
340
|
+
title: `Minified/packed code (${longLines.length} lines over 2000 chars)`,
|
|
341
|
+
description: 'File appears to contain minified or packed code which may hide malicious content',
|
|
342
|
+
severity: 'low',
|
|
343
|
+
file: filePath,
|
|
344
|
+
});
|
|
345
|
+
}
|
|
323
346
|
}
|
|
324
347
|
}
|
|
325
348
|
catch {
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* X-Ray Findings Store
|
|
3
|
+
*
|
|
4
|
+
* Persistent storage for actionable X-Ray findings.
|
|
5
|
+
* Tracks finding lifecycle: new -> reviewed -> ignored/resolved/quarantined
|
|
6
|
+
*/
|
|
7
|
+
import type { XRayFinding, ActionableXRayFinding, FindingStatus } from './types.js';
|
|
8
|
+
export interface FindingsStore {
|
|
9
|
+
addFindings(sourceId: string, sourceKind: 'scan' | 'watch', target: string, rawFindings: XRayFinding[]): ActionableXRayFinding[];
|
|
10
|
+
getFinding(id: string): ActionableXRayFinding | null;
|
|
11
|
+
listFindings(filters?: {
|
|
12
|
+
status?: FindingStatus;
|
|
13
|
+
target?: string;
|
|
14
|
+
severity?: string;
|
|
15
|
+
limit?: number;
|
|
16
|
+
}): ActionableXRayFinding[];
|
|
17
|
+
updateFindingStatus(id: string, status: FindingStatus, note?: string): ActionableXRayFinding | null;
|
|
18
|
+
deleteFinding(id: string): boolean;
|
|
19
|
+
quarantineFile(id: string, note?: string): {
|
|
20
|
+
moved: boolean;
|
|
21
|
+
quarantinePath?: string;
|
|
22
|
+
error?: string;
|
|
23
|
+
};
|
|
24
|
+
getStats(): {
|
|
25
|
+
total: number;
|
|
26
|
+
new: number;
|
|
27
|
+
reviewed: number;
|
|
28
|
+
ignored: number;
|
|
29
|
+
resolved: number;
|
|
30
|
+
quarantined: number;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export declare function createFindingsStore(basePath?: string): FindingsStore;
|
|
34
|
+
export declare const addFindings: (sourceId: string, sourceKind: "scan" | "watch", target: string, rawFindings: XRayFinding[]) => ActionableXRayFinding[];
|
|
35
|
+
export declare const getFinding: (id: string) => ActionableXRayFinding | null;
|
|
36
|
+
export declare const listFindings: (filters?: {
|
|
37
|
+
status?: FindingStatus;
|
|
38
|
+
target?: string;
|
|
39
|
+
severity?: string;
|
|
40
|
+
limit?: number;
|
|
41
|
+
}) => ActionableXRayFinding[];
|
|
42
|
+
export declare const updateFindingStatus: (id: string, status: FindingStatus, note?: string) => ActionableXRayFinding | null;
|
|
43
|
+
export declare const deleteFinding: (id: string) => boolean;
|
|
44
|
+
export declare const quarantineFile: (id: string, note?: string) => {
|
|
45
|
+
moved: boolean;
|
|
46
|
+
quarantinePath?: string;
|
|
47
|
+
error?: string;
|
|
48
|
+
};
|
|
49
|
+
export declare const getStats: () => {
|
|
50
|
+
total: number;
|
|
51
|
+
new: number;
|
|
52
|
+
reviewed: number;
|
|
53
|
+
ignored: number;
|
|
54
|
+
resolved: number;
|
|
55
|
+
quarantined: number;
|
|
56
|
+
};
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* X-Ray Findings Store
|
|
3
|
+
*
|
|
4
|
+
* Persistent storage for actionable X-Ray findings.
|
|
5
|
+
* Tracks finding lifecycle: new -> reviewed -> ignored/resolved/quarantined
|
|
6
|
+
*/
|
|
7
|
+
import fs from 'fs';
|
|
8
|
+
import path from 'path';
|
|
9
|
+
import os from 'os';
|
|
10
|
+
import crypto from 'crypto';
|
|
11
|
+
const MAX_FINDINGS = 500;
|
|
12
|
+
const CLEANUP_AGE_MS = 30 * 24 * 60 * 60 * 1000; // 30 days
|
|
13
|
+
function defaultBasePath() {
|
|
14
|
+
return path.join(os.homedir(), '.shieldcortex');
|
|
15
|
+
}
|
|
16
|
+
function ensureDir(dir) {
|
|
17
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
18
|
+
}
|
|
19
|
+
function findingDedupeKey(target, f) {
|
|
20
|
+
return `${target}|${f.category}|${f.title}|${f.file ?? ''}|${f.line ?? ''}`;
|
|
21
|
+
}
|
|
22
|
+
export function createFindingsStore(basePath) {
|
|
23
|
+
const base = basePath ?? defaultBasePath();
|
|
24
|
+
const findingsFile = path.join(base, 'xray-findings.json');
|
|
25
|
+
const quarantineDir = path.join(base, 'quarantine', 'files');
|
|
26
|
+
function readFindings() {
|
|
27
|
+
try {
|
|
28
|
+
const data = fs.readFileSync(findingsFile, 'utf-8');
|
|
29
|
+
return JSON.parse(data);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function writeFindings(findings) {
|
|
36
|
+
ensureDir(base);
|
|
37
|
+
// Atomic write: write to temp file then rename (prevents corruption on crash)
|
|
38
|
+
const tmp = findingsFile + '.tmp';
|
|
39
|
+
fs.writeFileSync(tmp, JSON.stringify(findings.slice(0, MAX_FINDINGS), null, 2));
|
|
40
|
+
fs.renameSync(tmp, findingsFile);
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
addFindings(sourceId, sourceKind, target, rawFindings) {
|
|
44
|
+
const now = new Date().toISOString();
|
|
45
|
+
const existing = readFindings();
|
|
46
|
+
const existingKeys = new Set(existing.filter((f) => f.status === 'new').map((f) => findingDedupeKey(f.target, f)));
|
|
47
|
+
const newFindings = [];
|
|
48
|
+
for (const f of rawFindings) {
|
|
49
|
+
const key = findingDedupeKey(target, f);
|
|
50
|
+
if (existingKeys.has(key))
|
|
51
|
+
continue;
|
|
52
|
+
existingKeys.add(key);
|
|
53
|
+
newFindings.push({
|
|
54
|
+
...f,
|
|
55
|
+
id: crypto.randomUUID(),
|
|
56
|
+
sourceId,
|
|
57
|
+
sourceKind,
|
|
58
|
+
target,
|
|
59
|
+
status: 'new',
|
|
60
|
+
detectedAt: now,
|
|
61
|
+
updatedAt: now,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
// Cleanup: remove resolved/ignored findings older than 30 days
|
|
65
|
+
const cutoff = Date.now() - CLEANUP_AGE_MS;
|
|
66
|
+
const cleaned = existing.filter((f) => {
|
|
67
|
+
if (f.status === 'new' || f.status === 'reviewed')
|
|
68
|
+
return true;
|
|
69
|
+
return new Date(f.updatedAt).getTime() > cutoff;
|
|
70
|
+
});
|
|
71
|
+
const merged = [...newFindings, ...cleaned].slice(0, MAX_FINDINGS);
|
|
72
|
+
writeFindings(merged);
|
|
73
|
+
return newFindings;
|
|
74
|
+
},
|
|
75
|
+
getFinding(id) {
|
|
76
|
+
return readFindings().find((f) => f.id === id) ?? null;
|
|
77
|
+
},
|
|
78
|
+
listFindings(filters) {
|
|
79
|
+
let results = readFindings();
|
|
80
|
+
if (filters?.status)
|
|
81
|
+
results = results.filter((f) => f.status === filters.status);
|
|
82
|
+
if (filters?.target)
|
|
83
|
+
results = results.filter((f) => f.target.includes(filters.target));
|
|
84
|
+
if (filters?.severity)
|
|
85
|
+
results = results.filter((f) => f.severity === filters.severity);
|
|
86
|
+
if (filters?.limit)
|
|
87
|
+
results = results.slice(0, filters.limit);
|
|
88
|
+
return results;
|
|
89
|
+
},
|
|
90
|
+
updateFindingStatus(id, status, note) {
|
|
91
|
+
const findings = readFindings();
|
|
92
|
+
const idx = findings.findIndex((f) => f.id === id);
|
|
93
|
+
if (idx === -1)
|
|
94
|
+
return null;
|
|
95
|
+
findings[idx].status = status;
|
|
96
|
+
findings[idx].updatedAt = new Date().toISOString();
|
|
97
|
+
if (note)
|
|
98
|
+
findings[idx].resolutionNote = note;
|
|
99
|
+
writeFindings(findings);
|
|
100
|
+
return findings[idx];
|
|
101
|
+
},
|
|
102
|
+
deleteFinding(id) {
|
|
103
|
+
const findings = readFindings();
|
|
104
|
+
const filtered = findings.filter((f) => f.id !== id);
|
|
105
|
+
if (filtered.length === findings.length)
|
|
106
|
+
return false;
|
|
107
|
+
writeFindings(filtered);
|
|
108
|
+
return true;
|
|
109
|
+
},
|
|
110
|
+
quarantineFile(id, note) {
|
|
111
|
+
const finding = this.getFinding(id);
|
|
112
|
+
if (!finding)
|
|
113
|
+
return { moved: false, error: 'Finding not found' };
|
|
114
|
+
if (!finding.file)
|
|
115
|
+
return { moved: false, error: 'Finding has no file path' };
|
|
116
|
+
const sourcePath = path.isAbsolute(finding.file)
|
|
117
|
+
? finding.file
|
|
118
|
+
: path.resolve(finding.target, finding.file);
|
|
119
|
+
// Path traversal guard: resolved path must be under the scan target directory
|
|
120
|
+
let resolvedSource;
|
|
121
|
+
try {
|
|
122
|
+
resolvedSource = fs.realpathSync(sourcePath);
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
resolvedSource = path.resolve(sourcePath);
|
|
126
|
+
}
|
|
127
|
+
const resolvedTarget = path.resolve(finding.target);
|
|
128
|
+
if (!resolvedSource.startsWith(resolvedTarget) && !path.isAbsolute(finding.file)) {
|
|
129
|
+
return { moved: false, error: 'Path traversal blocked — file is outside the scan target directory' };
|
|
130
|
+
}
|
|
131
|
+
// Block quarantining system-critical files
|
|
132
|
+
const blocked = ['/etc/', '/usr/', '/System/', '/bin/', '/sbin/', '/.ssh/', '/private/etc/'];
|
|
133
|
+
if (blocked.some(p => resolvedSource.includes(p))) {
|
|
134
|
+
return { moved: false, error: 'Cannot quarantine system files' };
|
|
135
|
+
}
|
|
136
|
+
if (!fs.existsSync(sourcePath)) {
|
|
137
|
+
this.updateFindingStatus(id, 'quarantined', note || 'File not found — marked as quarantined');
|
|
138
|
+
return { moved: false, error: 'Source file does not exist' };
|
|
139
|
+
}
|
|
140
|
+
const destName = `${Date.now()}-${path.basename(sourcePath)}`;
|
|
141
|
+
const destPath = path.join(quarantineDir, destName);
|
|
142
|
+
try {
|
|
143
|
+
ensureDir(quarantineDir);
|
|
144
|
+
fs.renameSync(sourcePath, destPath);
|
|
145
|
+
this.updateFindingStatus(id, 'quarantined', note || `Moved to ${destPath}`);
|
|
146
|
+
return { moved: true, quarantinePath: destPath };
|
|
147
|
+
}
|
|
148
|
+
catch (err) {
|
|
149
|
+
return { moved: false, error: err.message };
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
getStats() {
|
|
153
|
+
const findings = readFindings();
|
|
154
|
+
return {
|
|
155
|
+
total: findings.length,
|
|
156
|
+
new: findings.filter((f) => f.status === 'new').length,
|
|
157
|
+
reviewed: findings.filter((f) => f.status === 'reviewed').length,
|
|
158
|
+
ignored: findings.filter((f) => f.status === 'ignored').length,
|
|
159
|
+
resolved: findings.filter((f) => f.status === 'resolved').length,
|
|
160
|
+
quarantined: findings.filter((f) => f.status === 'quarantined').length,
|
|
161
|
+
};
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
// Default singleton for convenience — uses ~/.shieldcortex/
|
|
166
|
+
const defaultStore = createFindingsStore();
|
|
167
|
+
export const addFindings = defaultStore.addFindings.bind(defaultStore);
|
|
168
|
+
export const getFinding = defaultStore.getFinding.bind(defaultStore);
|
|
169
|
+
export const listFindings = defaultStore.listFindings.bind(defaultStore);
|
|
170
|
+
export const updateFindingStatus = defaultStore.updateFindingStatus.bind(defaultStore);
|
|
171
|
+
export const deleteFinding = defaultStore.deleteFinding.bind(defaultStore);
|
|
172
|
+
export const quarantineFile = defaultStore.quarantineFile.bind(defaultStore);
|
|
173
|
+
export const getStats = defaultStore.getStats.bind(defaultStore);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* X-Ray Finding Guidance
|
|
3
|
+
*
|
|
4
|
+
* Human-readable explanations for each finding category.
|
|
5
|
+
* Tells users what a finding means, what to do about it,
|
|
6
|
+
* and whether it's likely a false positive.
|
|
7
|
+
*/
|
|
8
|
+
import type { XRayCategory } from './types.js';
|
|
9
|
+
export interface FindingGuidance {
|
|
10
|
+
/** Plain-language explanation of what this means */
|
|
11
|
+
whatItMeans: string;
|
|
12
|
+
/** What the user should do */
|
|
13
|
+
whatToDo: string;
|
|
14
|
+
/** When this is typically a false positive */
|
|
15
|
+
falsePositiveNote: string;
|
|
16
|
+
/** How serious this usually is: 'usually-safe' | 'investigate' | 'act-now' */
|
|
17
|
+
urgency: 'usually-safe' | 'investigate' | 'act-now';
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Get human-readable guidance for a finding.
|
|
21
|
+
*/
|
|
22
|
+
export declare function getGuidance(category: XRayCategory, severity: string): FindingGuidance;
|
|
23
|
+
/**
|
|
24
|
+
* Check if a file path looks like a system/cache file that commonly triggers false positives.
|
|
25
|
+
*/
|
|
26
|
+
export declare function isLikelySystemFile(filePath: string): boolean;
|