shieldcortex 4.40.0 → 4.42.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/dashboard/.next/standalone/dashboard/.next/BUILD_ID +1 -1
- package/dashboard/.next/standalone/dashboard/.next/build-manifest.json +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/admin/page.js +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/admin/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/admin/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/cloud/page.js +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/cloud/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/cloud/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/capture/page.js +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/capture/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/capture/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/graph/page.js +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/graph/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/graph/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page/react-loadable-manifest.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page.js +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/recall/page.js +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/recall/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/recall/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/replay/page.js +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/replay/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/replay/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/review/page.js +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/review/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/review/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/timeline/page.js +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/timeline/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/timeline/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/overview/page.js +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/overview/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/overview/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/audit/page.js +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/audit/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/audit/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/intercepts/page.js +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/intercepts/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/intercepts/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/iron-dome/page.js +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/iron-dome/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/iron-dome/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/page.js +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/policies/page.js +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/policies/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/policies/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/quarantine/page.js +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/quarantine/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/quarantine/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/settings/page.js +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/page.js +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/xray/page.js +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/xray/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/xray/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/xray/page.js +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/xray/page.js.nft.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/xray/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 +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found/page.js +1 -1
- 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 +15 -14
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +15 -14
- 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 +7 -6
- 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 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.rsc +21 -22
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_full.segment.rsc +21 -22
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_index.segment.rsc +7 -6
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.rsc +21 -22
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_full.segment.rsc +21 -22
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_index.segment.rsc +7 -6
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.rsc +16 -15
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_full.segment.rsc +16 -15
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_index.segment.rsc +7 -6
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.rsc +22 -24
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_full.segment.rsc +22 -24
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_index.segment.rsc +7 -6
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.rsc +22 -24
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_full.segment.rsc +22 -24
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_index.segment.rsc +7 -6
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.rsc +22 -24
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_full.segment.rsc +22 -24
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_index.segment.rsc +7 -6
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.rsc +17 -17
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory/replay/__PAGE__.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory/replay.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_full.segment.rsc +17 -17
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_index.segment.rsc +7 -6
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.rsc +22 -24
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_full.segment.rsc +22 -24
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_index.segment.rsc +7 -6
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.rsc +22 -24
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_full.segment.rsc +22 -24
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_index.segment.rsc +7 -6
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.rsc +25 -26
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory/__PAGE__.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_full.segment.rsc +25 -26
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_index.segment.rsc +7 -6
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.rsc +26 -26
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview/__PAGE__.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_full.segment.rsc +26 -26
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_index.segment.rsc +7 -6
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/page.js +1 -1
- 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 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.rsc +22 -24
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_full.segment.rsc +22 -24
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_index.segment.rsc +7 -6
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.rsc +22 -26
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_full.segment.rsc +22 -26
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_index.segment.rsc +7 -6
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.rsc +22 -26
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_full.segment.rsc +22 -26
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_index.segment.rsc +7 -6
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.rsc +22 -26
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_full.segment.rsc +22 -26
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_index.segment.rsc +7 -6
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.rsc +22 -26
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_full.segment.rsc +22 -26
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_index.segment.rsc +7 -6
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.rsc +24 -23
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection/__PAGE__.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_full.segment.rsc +24 -23
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_index.segment.rsc +7 -6
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.rsc +24 -23
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings/__PAGE__.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_full.segment.rsc +24 -23
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_index.segment.rsc +7 -6
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.rsc +22 -24
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_full.segment.rsc +22 -24
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_index.segment.rsc +7 -6
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.rsc +21 -22
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_full.segment.rsc +21 -22
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_index.segment.rsc +7 -6
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.rsc +23 -24
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray/__PAGE__.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +8 -10
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_full.segment.rsc +23 -24
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_index.segment.rsc +7 -6
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_tree.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__618ebef2._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__71aebd22._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/{[root-of-the-server]__801e783f._.js → [root-of-the-server]__83e0e1ef._.js} +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/{[root-of-the-server]__8930a320._.js → [root-of-the-server]__b16387ef._.js} +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_01e81e69._.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_1b261cd5._.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/{dashboard_5ca514a1._.js → dashboard_3956b0fc._.js} +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_44a1539a._.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_4835c323._.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_599483f2._.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_609078b2._.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_987d0aa0._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_a6877bbc._.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_c219bf07._.js +4 -4
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_48aa48e3._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_73b12760._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_app_(dashboard)_overview_page_tsx_8c105626._.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_components_xray_XRayOverview_tsx_ceba698e._.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_lib_e099bffc._.js +3 -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/static/chunks/0813ee664e620e80.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/3459bf5a60cec027.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/{8a5b61fd5e1bbcfa.js → 367944cb40d1e6d7.js} +1 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/38b428b85257d41d.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/{8eabb856fd0e50b7.js → 38fa196371b9e90b.js} +1 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/41c550a60ee25280.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/67b5f6f3d4c911c7.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/{4ddb24d8ce3b8617.js → 699fd12fecbe2007.js} +1 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/75f14b915412d5cf.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/9299edebc536e6de.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/9b02aba35b7ce4b7.js +15 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/9dd510e6693ca6ac.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/d25030e49454bb56.css +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/dcfd5a3eb20885c2.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/e18095d552836b96.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/ea9275fe0f92b82c.js +1 -0
- package/dist/api/events.js +2 -0
- package/dist/api/redact-response.d.ts +15 -0
- package/dist/api/redact-response.js +19 -0
- package/dist/api/routes/memories.js +86 -21
- package/dist/api/visualization-server.js +15 -4
- package/dist/defence/trust/read-guard.d.ts +42 -0
- package/dist/defence/trust/read-guard.js +120 -0
- package/package.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__7d500b5a._.js +0 -3
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__bea9887b._.js +0 -3
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_14d63e36._.js +0 -3
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_92148040._.js +0 -3
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_861871f9._.js +0 -3
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_components_de7ac4f9._.js +0 -3
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/1600063be806f47c.js +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/2d55e8cb58d80df0.js +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/3729c748a4361c1f.js +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/61aaa0c660c32b96.js +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/69074f4a9b09c31d.js +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/881477f5d01c1d9b.js +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/98ae91e0a6f5d317.css +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/a95dbcc1842ad9d7.js +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/cfbc41857d998b74.js +0 -15
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/d2837977142371d5.js +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/de9f5ba8bc67d4d9.js +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/e8884e7f3b85fd0b.js +0 -1
- /package/dashboard/.next/standalone/dashboard/.next/static/{UA_86bJ-tNIyDXr-i0gK6 → 4z2JAhKnao1A-q8Eo4wzd}/_buildManifest.js +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{UA_86bJ-tNIyDXr-i0gK6 → 4z2JAhKnao1A-q8Eo4wzd}/_clientMiddlewareManifest.json +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{UA_86bJ-tNIyDXr-i0gK6 → 4z2JAhKnao1A-q8Eo4wzd}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,87927,e=>{"use strict";let t="shieldcortex.graph.intensity",r=new Set(["subtle","moderate","strong"]);function a(e){let a=e??window.localStorage;if(!a)return"moderate";let l=a.getItem(t);return"string"==typeof l&&r.has(l)?l:"moderate"}function l(e,r){let a=r??window.localStorage;a&&(a.setItem(t,e),"u">typeof CustomEvent&&window.dispatchEvent(new CustomEvent("shieldcortex:intensity-changed",{detail:e})))}function n(){return!!window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}e.s(["INTENSITY",0,{subtle:{breathPeriod:6e3,breathAmp:.03,particleCap:20,decayCreate:.98,decayRecall:.96},moderate:{breathPeriod:3e3,breathAmp:.08,particleCap:60,decayCreate:.96,decayRecall:.93},strong:{breathPeriod:1600,breathAmp:.14,particleCap:120,decayCreate:.94,decayRecall:.9}},"REDUCED_INTENSITY",0,{breathPeriod:1/0,breathAmp:0,particleCap:0,decayCreate:0,decayRecall:0},"isReducedMotion",()=>n,"loadIntensity",()=>a,"saveIntensity",()=>l])},68595,e=>{"use strict";var t=e.i(27493),r=e.i(4),a=e.i(6847),l=e.i(17278),n=e.i(16467),s=e.i(95659),i=e.i(74133);let o=(e,t,r)=>Math.min(r,Math.max(t,e)),c="#7dd3fc";function d(e){return"string"==typeof e?e:e.id}var u=e.i(87927);class h{level;settings;knownNodes=new Set;phase=new Map;spikeEnergy=new Map;recallEnergy=new Map;breathOffset=new Map;now;lastFrameAt=0;constructor(e){this.level=e.intensity,this.settings=u.INTENSITY[e.intensity],this.now=e.now??("u">typeof performance?()=>performance.now():Date.now)}setIntensity(e){this.level=e,this.settings=u.INTENSITY[e]}observeNodes(e){for(let t of e)this.knownNodes.has(t)||(this.knownNodes.add(t),this.phase.set(t,function(e){let t=0x811c9dc5;for(let r=0;r<e.length;r++)t^=e.charCodeAt(r),t=0x1000193*t>>>0;return t/0x100000000}(t)*Math.PI*2))}dispatch(e){this.knownNodes.has(e.entityId)&&("memory.created"===e.type&&this.spikeEnergy.set(e.entityId,1),"memory.accessed"===e.type&&this.recallEnergy.set(e.entityId,1))}onFrame(e){this.lastFrameAt=e;let{breathPeriod:t,breathAmp:r}=this.settings,a=2*Math.PI/t;for(let t of this.knownNodes){let l=this.phase.get(t)??0;this.breathOffset.set(t,Math.sin(a*e+l)*r)}let l=this.settings.decayCreate;for(let[e,t]of this.spikeEnergy){let r=t*l;r<.001?this.spikeEnergy.delete(e):this.spikeEnergy.set(e,r)}let n=this.settings.decayRecall;for(let[e,t]of this.recallEnergy){let r=t*n;r<.001?this.recallEnergy.delete(e):this.recallEnergy.set(e,r)}}getEnergy(e){return this.knownNodes.has(e)?(this.breathOffset.get(e)??0)+(this.spikeEnergy.get(e)??0):0}getRecallEnergy(e){return this.knownNodes.has(e)?this.recallEnergy.get(e)??0:0}pickParticleEdges(e,t,r){let a=r??this.settings.particleCap;if(a<=0||0===e.length)return[];let l=e=>"string"==typeof e?e:e.id,n=e.map(e=>{let r=l(e.source),a=l(e.target);return{link:e,score:Math.max(Math.max(this.getEnergy(r),this.getRecallEnergy(r)),Math.max(this.getEnergy(a),this.getRecallEnergy(a))),anchorAdjacent:+(null!==t&&(r===t||a===t))}});return n.sort((e,t)=>t.score!==e.score?t.score-e.score:t.anchorAdjacent-e.anchorAdjacent),n.slice(0,a).map(e=>e.link)}}function m({driver:e}){let[a,l]=(0,r.useState)("");return"1"===window.localStorage.getItem("SHIELDCORTEX_DEBUG_PULSE")&&e?(0,t.jsxs)("div",{style:{position:"absolute",bottom:8,right:8,padding:8,background:"#0a0d14cc",color:"#e2e8f0",fontSize:12,border:"1px solid #1e293b",zIndex:10},children:[(0,t.jsx)("div",{style:{marginBottom:4,opacity:.6},children:"pulse debug"}),(0,t.jsx)("input",{value:a,onChange:e=>l(e.target.value),placeholder:"entity id",style:{width:140,background:"#06070d",color:"#e2e8f0",border:"1px solid #1e293b",padding:"2px 4px"}}),(0,t.jsxs)("div",{style:{display:"flex",gap:4,marginTop:4},children:[(0,t.jsx)("button",{onClick:()=>e.dispatch({type:"memory.created",entityId:a}),children:"created"}),(0,t.jsx)("button",{onClick:()=>e.dispatch({type:"memory.accessed",entityId:a}),children:"accessed"})]})]}):null}var f=e.i(22534),p=e.i(35372);let y=f.default.env.NEXT_PUBLIC_API_URL||"http://localhost:3001";var g=e.i(53655);let x=(0,i.default)(()=>e.A(23531),{loadableGenerated:{modules:[23272]},ssr:!1}),b=e=>g.REGIONS[(0,g.regionForCluster)(e)].hex;function v({clusters:e,allTriples:a,totalEntities:l,totalConnections:n,width:s,height:i,onSelectEntity:f,selectedEntityId:g}){let v=(0,r.useRef)(void 0),C=(0,r.useRef)(null),j=(0,r.useRef)(1),S=(0,r.useRef)(null),[k,w]=(0,r.useState)(null),[N,M]=(0,r.useState)(null),[E,I]=(0,r.useState)(null),[P,R]=(0,r.useState)("moderate"),T=(0,r.useMemo)(()=>(0,u.isReducedMotion)(),[]),A=(0,r.useMemo)(()=>T?u.REDUCED_INTENSITY:u.INTENSITY[P],[T,P]),F=(0,r.useMemo)(()=>(function(e){let t=new Map;for(let r of e)for(let e of r.entities)t.set(e.id,r.type);return t})(e),[e]),$=(0,r.useMemo)(()=>{let t=function(e,t){let r=new Map;for(let a of e){let e=t.get(a.source),l=t.get(a.target);if(e&&l&&e!==l){let t=[e,l].sort().join("::");r.set(t,(r.get(t)||0)+1)}}return r}(a,F),r=e.map((t,r)=>{let a=r/e.length*Math.PI*2-Math.PI/2;return{id:`cluster::${t.type}`,name:t.type,type:t.type,memoryCount:t.entities.reduce((e,t)=>e+t.memoryCount,0),colour:b(t.type),isCluster:!0,clusterType:t.type,entityCount:t.entities.length,x:150*Math.cos(a),y:150*Math.sin(a)}}),l=[];for(let[e,r]of t.entries()){let[t,a]=e.split("::");r>5&&l.push({source:`cluster::${t}`,target:`cluster::${a}`,weight:Math.min(r/100,1)})}return{nodes:r,links:l}},[e,a,F]),_=(0,r.useMemo)(()=>{if(!N)return null;let t=e.find(e=>e.type===N);if(!t)return null;let r=t.entities.slice(0,100),l=new Set(r.map(e=>e.id)),n=r.map(e=>({id:e.id,name:e.name,type:e.type,memoryCount:e.memoryCount,colour:b(e.type)})),s=new Map;for(let e of a){if(l.has(e.source)&&!l.has(e.target)){let t=F.get(e.target);t&&t!==N&&s.set(t,(s.get(t)||0)+1)}if(l.has(e.target)&&!l.has(e.source)){let t=F.get(e.source);t&&t!==N&&s.set(t,(s.get(t)||0)+1)}}for(let[e,t]of s.entries())t>2&&n.push({id:`ghost::${e}`,name:e,type:e,memoryCount:t,colour:b(e),isCluster:!0,clusterType:e,entityCount:t});let i=[],o=new Set;for(let e of a){let t=l.has(e.source),r=l.has(e.target);if(t&&r){let t=`${e.source}::${e.target}`;o.has(t)||(o.add(t),i.push({source:e.source,target:e.target,predicate:e.predicate}))}else if(t&&!r){let t=F.get(e.target);if(t&&t!==N&&s.has(t)){let r=`${e.source}::ghost::${t}`;o.has(r)||(o.add(r),i.push({source:e.source,target:`ghost::${t}`}))}}else if(r&&!t){let t=F.get(e.source);if(t&&t!==N&&s.has(t)){let r=`ghost::${t}::${e.target}`;o.has(r)||(o.add(r),i.push({source:`ghost::${t}`,target:e.target}))}}}return{nodes:n,links:i}},[N,e,a,F]),D=N&&_?_:$,B=(0,r.useMemo)(()=>{let e=new Map;for(let t of D.links){let r="object"==typeof t.source?String(t.source.id):String(t.source),a="object"==typeof t.target?String(t.target.id):String(t.target);e.set(r,(e.get(r)??0)+1),e.set(a,(e.get(a)??0)+1)}return e},[D.links]);(0,r.useEffect)(()=>{let e=(0,u.loadIntensity)();R(e);let t=new h({intensity:e});w(t);let r=e=>{let r=e.detail;("subtle"===r||"moderate"===r||"strong"===r)&&(R(r),t.setIntensity(r))};return window.addEventListener("shieldcortex:intensity-changed",r),()=>{window.removeEventListener("shieldcortex:intensity-changed",r)}},[]),(0,r.useEffect)(()=>{k?.observeNodes(D.nodes.map(e=>e.id))},[k,D.nodes]),function(e,t=!0){let{subscribe:a,isConnected:l}=(0,p.useMemoryWebSocketContext)(),n=(0,r.useRef)(null);(0,r.useEffect)(()=>{if(e&&t)return a(t=>{if(!t?.type||!t.data)return;let r="memory_created"===t.type?"memory.created":"memory_accessed"===t.type?"memory.accessed":null;if(r)for(let a of t.data.entity_ids??[])e.dispatch({type:r,entityId:String(a)})})},[e,t,a]),(0,r.useEffect)(()=>{if(!e||!t||l)return;let r=!1,a=setInterval(()=>{let t=n.current;fetch(`${y}/api/memories?mode=recent&limit=50`,{credentials:"include"}).then(e=>e.ok?e.json():null).then(a=>{if(!a||r)return;let l=a.memories??[];for(let r of l)if(!t||!r.created_at||!(r.created_at<=t))for(let t of r.entity_ids??[])e.dispatch({type:"memory.created",entityId:String(t)});l[0]?.created_at&&(n.current=l[0].created_at)}).catch(()=>{})},1e4);return()=>{r=!0,clearInterval(a)}},[e,t,l])}(k,!0),(0,r.useEffect)(()=>{let e=function(e,t){if(0===e.length)return null;let r=new Set(e.map(e=>e.id)),a=new Map;for(let e of t){let t=d(e.source),l=d(e.target);r.has(t)&&a.set(t,(a.get(t)??0)+1),r.has(l)&&a.set(l,(a.get(l)??0)+1)}let l=null,n=0;for(let t of e){let e=t.memoryCount*(a.get(t.id)??0);0!==e&&(null===l||e>n||e===n&&0>t.name.localeCompare(l.name))&&(l=t,n=e)}if(l)return l.id;let s=0;for(let t of e)0!==t.memoryCount&&(null===l||t.memoryCount>s||t.memoryCount===s&&0>t.name.localeCompare(l.name))&&(l=t,s=t.memoryCount);return l?.id??null}(D.nodes.map(e=>({id:e.id,name:e.name,memoryCount:e.memoryCount})),D.links);e!==E&&(!function(e,t,r){let a=e.find(e=>e.id===t);if(a){if(r&&r!==t){let t=e.find(e=>e.id===r);t&&(t.fx=null,t.fy=null)}a.fx=0,a.fy=0}}(D.nodes,e??"",E),I(e))},[D.nodes,D.links,E]),(0,r.useEffect)(()=>{let e=v.current;e&&(N?(e.d3Force("charge")?.strength(-80),e.d3Force("link")?.distance(40),e.d3Force("center")?.strength(.05)):(e.d3Force("charge")?.strength(-2e3),e.d3Force("link")?.distance(180),e.d3Force("center")?.strength(.03)))},[N,D]);let O=(0,r.useRef)(!1);(0,r.useEffect)(()=>{if(O.current||!D.nodes.length)return;O.current=!0;let e=setTimeout(()=>v.current?.zoomToFit(600*!T,40),1500);return()=>clearTimeout(e)},[D.nodes.length,T]);let L=(0,r.useCallback)(({k:e})=>{j.current=e},[]),z=(0,r.useMemo)(()=>(function(e,t={}){let r=new Map;return{handleNodeDragEnd(e){void 0!==e.x&&void 0!==e.y&&(e.fx=e.x,e.fy=e.y)},handleNodeClick(a,l){if(l.shiftKey&&null!==a.fx&&void 0!==a.fx)return a.fx=null,a.fy=null,t.onUnpin?.(String(a.id)),r.delete(String(a.id)),"unpin";let n=String(a.id),s=performance.now(),i=r.get(n)??0;return(r.set(n,s),s-i<=300)?(void 0!==a.x&&void 0!==a.y&&(e.current?.centerAt(a.x,a.y,600),e.current?.zoom(2,600)),r.delete(n),"double-click"):"single-click"},handleBackgroundDoubleClick(t){t(),e.current?.zoomToFit(600,80)}}})(v),[]),G=(0,r.useCallback)((e,t)=>{"single-click"===z.handleNodeClick(e,t)&&(e.isCluster?(M((e.clusterType||e.type).replace("ghost::","")),f?.(null)):f?.({id:e.id,name:e.name,type:e.type,memoryCount:e.memoryCount}))},[z,f]),U=(0,r.useCallback)(()=>{N&&(M(null),f?.(null))},[N,f]),q=(0,r.useCallback)(()=>{z.handleBackgroundDoubleClick(()=>{M(null),f?.(null)})},[z,f]),W=(0,r.useCallback)(e=>{let t=e?String(e.id):null;if(C.current=t,!t){S.current=null;return}let r=new Set([t]);for(let e of D.links){let a="object"==typeof e.source?String(e.source.id):String(e.source),l="object"==typeof e.target?String(e.target.id):String(e.target);a===t?r.add(l):l===t&&r.add(a)}S.current=r},[D.links]),K=(0,r.useCallback)((e,t,r)=>{if(void 0===e.x||void 0===e.y)return;let a=String(e.id),l=a===C.current,n=null!=g&&a===g,s=j.current;if(t.save(),n&&!e.isCluster){let r=.8+Math.min(.4*Math.log2((e.memoryCount||1)+1),2.5),a=t.createRadialGradient(e.x,e.y,r,e.x,e.y,8*r);a.addColorStop(0,"#ffffff18"),a.addColorStop(1,"#ffffff00"),t.beginPath(),t.arc(e.x,e.y,8*r,0,2*Math.PI),t.fillStyle=a,t.fill()}if(e.isCluster){!function(e,t,r,a){let l=t.entityCount||5,n=Math.min(15+3*Math.sqrt(l),60),s=3*n,i=e.createRadialGradient(t.x,t.y,.5*n,t.x,t.y,s);i.addColorStop(0,t.colour+"15"),i.addColorStop(.4,t.colour+"08"),i.addColorStop(1,t.colour+"00"),e.beginPath(),e.arc(t.x,t.y,s,0,2*Math.PI),e.fillStyle=i,e.fill();let o=e.createRadialGradient(t.x,t.y,0,t.x,t.y,.8*n);o.addColorStop(0,t.colour+"28"),o.addColorStop(.6,t.colour+"10"),o.addColorStop(1,t.colour+"02"),e.beginPath(),e.arc(t.x,t.y,.8*n,0,2*Math.PI),e.fillStyle=o,e.fill();let c=Math.min(l,40),d=t.id.charCodeAt(t.id.length-1);for(let r=0;r<c;r++){let a=(d+137.508*r)%360*(Math.PI/180),l=.1*n+.85*n*Math.pow((7*d+31*r)%100/100,.6),s=t.x+Math.cos(a)*l,i=t.y+Math.sin(a)*l,o=.5+(17*r+d)%4*.3;e.beginPath(),e.arc(s,i,o,0,2*Math.PI),e.fillStyle=t.colour+(r<5?"dd":r<15?"88":"44"),e.fill()}a&&(e.beginPath(),e.arc(t.x,t.y,n,0,2*Math.PI),e.strokeStyle=t.colour+"50",e.lineWidth=1.5,e.setLineDash([4,4]),e.stroke(),e.setLineDash([]));let u=Math.max(13/Math.max(r,.3),8);e.font=`600 ${u}px Inter, system-ui, sans-serif`,e.textAlign="center",e.textBaseline="top",e.fillStyle=t.colour+"bb",e.fillText(t.name,t.x,t.y+n+8);let h=Math.max(10/Math.max(r,.3),6);e.font=`400 ${h}px Inter, system-ui, sans-serif`,e.fillStyle="#ffffff30",e.fillText(`${l} entities`,t.x,t.y+n+8+u+3)}(t,e,s,l),t.restore();return}let i=S.current;i&&!i.has(a)&&(t.globalAlpha=.18);let o=k?.getEnergy(a)??0,c=k?.getRecallEnergy(a)??0,d=.8+Math.min(.4*Math.log2((e.memoryCount??0)+1),2.5);if(!function(e,t={}){var r;let a,{ctx:l,node:n,intensity:s,energy:i,recallEnergy:o,isAnchor:c,isSelected:d,baseRadius:u}=e;if(void 0===n.x||void 0===n.y)return;let h=(a=(r={baseRadius:u,energy:i,breathAmp:s.breathAmp}).baseRadius*(1+r.energy*r.breathAmp),Math.max(.2*r.baseRadius,a));t._paintHook?.({nodeId:n.id,radius:h,energy:i,recallEnergy:o});let m=h*(c?5:3.5),f=l.createRadialGradient(n.x,n.y,.2*h,n.x,n.y,m);if(f.addColorStop(0,n.colour+(c?"40":d?"50":"20")),f.addColorStop(1,n.colour+"00"),l.beginPath(),l.arc(n.x,n.y,m,0,2*Math.PI),l.fillStyle=f,l.fill(),o>.05&&(l.beginPath(),l.arc(n.x,n.y,1.6*h,0,2*Math.PI),l.strokeStyle="#a78bfa",l.globalAlpha=Math.min(.7,o),l.lineWidth=1.5,l.stroke(),l.globalAlpha=1),c){l.beginPath(),l.arc(n.x,n.y,h,0,2*Math.PI),l.fillStyle="#d9faf5",l.fill(),l.lineWidth=1.5,l.strokeStyle="#00e5cc",l.stroke();return}l.beginPath(),l.arc(n.x,n.y,h,0,2*Math.PI),l.fillStyle=n.colour,l.fill(),d&&(l.lineWidth=1.5,l.strokeStyle="#ffffff",l.stroke())}({ctx:t,globalScale:r,node:e,intensity:A,energy:o,recallEnergy:c,isAnchor:a===E,isSelected:n,isHovered:l,baseRadius:d}),l&&!n&&a!==E){let r=d*(1+o*A.breathAmp);t.beginPath(),t.arc(e.x,e.y,r,0,2*Math.PI),t.strokeStyle=e.colour,t.lineWidth=.7,t.stroke()}let u=e.memoryCount||1,h=B.get(a)??0,m=i?.has(a)??!1;if(n||l||m||s>=3||s>=1.5&&(u>30||h>3)||s>=.8&&h>6){let r=d*(1+o*A.breathAmp),a=Math.max((n?11:l?10:8)/Math.max(s,.4),5);t.font=`${a}px Inter, system-ui, sans-serif`,t.textAlign="center",t.textBaseline="top";let i=2.5/Math.max(s,.4),c=t.measureText(e.name).width,u=e.y+r+1.5,h=e.x-c/2-i;t.fillStyle="rgba(6,10,20,0.6)","function"==typeof t.roundRect?(t.beginPath(),t.roundRect(h,u,c+2*i,a+i,i),t.fill()):t.fillRect(h,u,c+2*i,a+i),t.fillStyle=n?"#ffffff":l?"#f4f7ff":"#dde6ffcc",t.fillText(e.name,e.x,u+i/2)}t.restore()},[g,E,A,k,B]),Y=(0,r.useCallback)((e,t)=>{let r=e.source,a=e.target;if("object"!=typeof r||"object"!=typeof a||void 0===r.x||void 0===r.y||void 0===a.x||void 0===a.y)return;let l=String(r.id),n=String(a.id),s=k?.getEnergy(l)??0,i=k?.getEnergy(n)??0,d=C.current,u=!d||l===d||n===d;t.save(),u||(t.globalAlpha=.08),function(e){let{ctx:t,link:r,srcEnergy:a,dstEnergy:l}=e,n=r.source,s=r.target;if(void 0===n.x||void 0===n.y||void 0===s.x||void 0===s.y)return;let i=t.globalCompositeOperation;t.globalCompositeOperation="lighter";let d=t.createLinearGradient(n.x,n.y,s.x,s.y);d.addColorStop(0,n.colour??c),d.addColorStop(1,s.colour??c),t.strokeStyle=d,t.globalAlpha=o(.35+.6*Math.max(a,l),0,1),t.lineWidth=o(1+.8*Math.max(a,l),.5,3),t.beginPath(),t.moveTo(n.x,n.y),t.lineTo(s.x,s.y),t.stroke(),t.globalAlpha=1,t.globalCompositeOperation=i}({ctx:t,link:{source:{x:r.x,y:r.y,colour:r.colour,id:l},target:{x:a.x,y:a.y,colour:a.colour,id:n}},srcEnergy:s,dstEnergy:i}),t.restore()},[k]),H=(0,r.useRef)(new Set),Q=(0,r.useCallback)(()=>{if(!k)return;k.onFrame(performance.now());let e=k.pickParticleEdges(D.links.map(e=>({source:String(e.source),target:String(e.target)})),E),t=new Set;for(let r of e)t.add(`${r.source}::${r.target}`);H.current=t},[k,D.links,E]);if(s<10||i<10)return null;let X=N?e.find(e=>e.type===N):null;return(0,t.jsxs)("div",{className:"relative h-full w-full",children:[N&&(0,t.jsxs)("button",{type:"button",onClick:U,className:"absolute left-4 top-4 z-20 flex items-center gap-2 rounded-lg border border-[var(--sc-border)] bg-[var(--sc-bg-deep)]/90 px-3 py-1.5 text-xs text-[var(--sc-text-secondary)] backdrop-blur-sm transition-colors hover:border-[var(--sc-text-muted)] hover:text-[var(--sc-text-primary)]",children:[(0,t.jsx)("span",{children:"←"}),(0,t.jsx)("span",{children:"All clusters"})]}),X&&(0,t.jsxs)("div",{className:"absolute right-4 top-4 z-20 flex items-center gap-2 rounded-lg border border-[var(--sc-border)] bg-[var(--sc-bg-deep)]/90 px-3 py-1.5 backdrop-blur-sm",children:[(0,t.jsx)("span",{className:"h-2.5 w-2.5 rounded-full",style:{backgroundColor:X.colour}}),(0,t.jsx)("span",{className:"text-xs font-semibold text-[var(--sc-text-primary)]",children:X.type}),(0,t.jsxs)("span",{className:"text-xs text-[var(--sc-text-muted)]",children:[X.entities.length," entities"]})]}),(0,t.jsxs)("div",{onDoubleClick:q,style:{position:"relative"},children:[(0,t.jsx)(x,{ref:v,graphData:D,width:s,height:i,backgroundColor:"rgba(0,0,0,0)",nodeCanvasObjectMode:()=>"replace",nodeCanvasObject:K,nodePointerAreaPaint:(e,t,r)=>{let a;void 0!==e.x&&void 0!==e.y&&(a=e.isCluster?Math.min(15+3*Math.sqrt(e.entityCount||5),60):4+Math.min(.5*Math.log2((e.memoryCount||1)+1),3),r.beginPath(),r.arc(e.x,e.y,a,0,2*Math.PI),r.fillStyle=t,r.fill())},linkCanvasObjectMode:()=>"replace",linkCanvasObject:Y,linkDirectionalParticles:e=>{let t="object"==typeof e.source?e.source.id:String(e.source),r="object"==typeof e.target?e.target.id:String(e.target);return 2*!!H.current.has(`${t}::${r}`)},linkDirectionalParticleWidth:1.2,linkDirectionalParticleSpeed:.005,onNodeClick:G,onNodeDragEnd:e=>z.handleNodeDragEnd(e),onNodeHover:W,onBackgroundClick:U,onZoom:L,onRenderFramePre:Q,d3AlphaDecay:.01,d3VelocityDecay:.3,cooldownTicks:300,warmupTicks:80,nodeRelSize:1,enableNodeDrag:!0,enableZoomInteraction:!0,onEngineStop:()=>{!O.current&&D.nodes.length&&(O.current=!0,v.current?.zoomToFit(600*!T,40))}}),(0,t.jsx)(m,{driver:k})]}),(0,t.jsxs)("div",{className:"absolute bottom-3 left-0 right-0 z-10 flex items-center justify-center gap-4 text-[11px] text-[var(--sc-text-muted)]",children:[(0,t.jsxs)("span",{children:[l.toLocaleString()," entities"]}),(0,t.jsx)("span",{className:"text-[var(--sc-border)]",children:"·"}),(0,t.jsxs)("span",{children:[n.toLocaleString()," connections"]}),(0,t.jsx)("span",{className:"text-[var(--sc-border)]",children:"·"}),(0,t.jsxs)("span",{children:[e.length," clusters"]}),X&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{className:"text-[var(--sc-border)]",children:"·"}),(0,t.jsxs)("span",{style:{color:X.colour},children:[X.entities.length," ",N," entities"]})]})]})]})}let C={tool:"cyan",concept:"coral",project:"amber",service:"cyan",person:"cyan"},j={architecture:"cyan",error:"coral",decision:"amber",learning:"cyan",preference:"muted"};function S({entity:e,relatedEntities:r,recentMemories:a,onNavigate:l}){return(0,t.jsxs)("div",{className:"flex flex-col gap-4 overflow-y-auto",children:[(0,t.jsx)(n.GlassCard,{className:"p-4",children:(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)("span",{className:"mt-1 h-3 w-3 shrink-0 rounded-full",style:{backgroundColor:"coral"===C[e.type]?"#ff4d4d":"amber"===C[e.type]?"#f5a623":"#00e5cc"}}),(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsx)("h2",{className:"truncate text-lg font-semibold text-[var(--sc-text-primary)]",children:e.label}),(0,t.jsxs)("div",{className:"mt-1 flex items-center gap-2",children:[(0,t.jsx)(s.Badge,{variant:C[e.type]||"muted",children:e.type}),(0,t.jsxs)("span",{className:"text-xs text-[var(--sc-text-muted)]",children:[e.memoryCount," ",1===e.memoryCount?"memory":"memories"]})]})]})]})}),r.length>0&&(0,t.jsxs)("div",{children:[(0,t.jsx)("h3",{className:"mb-2 text-[11px] font-semibold uppercase tracking-wider text-[var(--sc-text-muted)]",children:"Related Entities"}),(0,t.jsx)(n.GlassCard,{className:"divide-y divide-[var(--sc-border)] p-0",children:r.map(e=>(0,t.jsxs)("button",{onClick:()=>l(e.id),className:"flex w-full items-center justify-between px-4 py-2.5 text-left transition-colors hover:bg-[var(--sc-surface-interactive)]",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,t.jsx)("span",{className:"h-2 w-2 shrink-0 rounded-full",style:{backgroundColor:"coral"===C[e.type]?"#ff4d4d":"amber"===C[e.type]?"#f5a623":"#00e5cc"}}),(0,t.jsx)("span",{className:"truncate text-sm text-[var(--sc-text-primary)]",children:e.label})]}),(0,t.jsx)("span",{className:"shrink-0 text-xs tabular-nums text-[var(--sc-text-muted)]",children:e.memoryCount})]},e.id))})]}),a.length>0&&(0,t.jsxs)("div",{children:[(0,t.jsx)("h3",{className:"mb-2 text-[11px] font-semibold uppercase tracking-wider text-[var(--sc-text-muted)]",children:"Recent Memories"}),(0,t.jsx)("div",{className:"flex flex-col gap-2",children:a.slice(0,8).map(e=>(0,t.jsxs)(n.GlassCard,{className:"p-3",children:[(0,t.jsx)("p",{className:"truncate text-sm text-[var(--sc-text-primary)]",children:e.title}),(0,t.jsxs)("div",{className:"mt-1.5 flex items-center gap-2",children:[(0,t.jsx)(s.Badge,{variant:j[e.category]||"muted",className:"text-[10px]",children:e.category}),(0,t.jsx)("span",{className:"text-[10px] text-[var(--sc-text-muted)]",children:new Date(e.created_at).toLocaleDateString("en-GB",{day:"2-digit",month:"2-digit",year:"numeric"})})]})]},e.id))})]})]})}var k=e.i(45688),w=e.i(88969);let N=f.default.env.NEXT_PUBLIC_API_URL||"http://localhost:3001",M={tool:"#00e5cc",concept:"#ff4d4d",project:"#f59e0b",file:"#5a6480",service:"#a78bfa",person:"#34d399",language:"#a78bfa",pattern:"#fb923c"};function E(){var e,i;let[o,c]=(0,r.useState)(null),[d,u]=(0,r.useState)(""),[h,m]=(0,r.useState)(!1),f=function(e,t=300){let[a,l]=(0,r.useState)(e);return(0,r.useEffect)(()=>{let r=setTimeout(()=>{l(e)},t);return()=>{clearTimeout(r)}},[e,t]),a}(d,250),p=(0,r.useRef)(null),[y,g]=(0,r.useState)({width:600,height:500});(0,r.useEffect)(()=>{let e=p.current;if(!e)return;let t=new ResizeObserver(e=>{for(let t of e){let{width:e,height:r}=t.contentRect;g({width:Math.floor(e),height:Math.max(Math.floor(r),500)})}});return t.observe(e),()=>t.disconnect()},[]);let{data:x,isLoading:b}=(0,k.useQuery)({queryKey:["graph","full"],queryFn:async()=>{let[e,t]=await Promise.all([(0,w.authFetch)(`${N}/api/graph/entities?limit=2000`),(0,w.authFetch)(`${N}/api/graph/triples?limit=10000`)]);if(!e.ok||!t.ok)throw Error("Failed to fetch graph data");let[r,a]=await Promise.all([e.json(),t.json()]),l=(r.entities||[]).map(e=>({id:String(e.id),name:e.name,type:e.type,memoryCount:e.memoryCount??e.memory_count??0})),n=(a.triples||[]).map(e=>({source:String(e.subject_id),target:String(e.object_id),predicate:e.predicate})),s=new Map;for(let e of l){let t=s.get(e.type)||[];t.push(e),s.set(e.type,t)}return{entities:l,triples:n,clusters:Array.from(s.entries()).map(([e,t])=>({type:e,entities:t.sort((e,t)=>t.memoryCount-e.memoryCount),colour:M[e]||"#8892b0"})).sort((e,t)=>t.entities.length-e.entities.length),totalConnections:n.length}},staleTime:6e4}),{data:C}=(e=o?.id??null,(0,k.useQuery)({queryKey:["graph","neighbourhood",e],queryFn:async()=>{if(!e)return null;let t=await (0,w.authFetch)(`${N}/api/graph/entities/${e}/neighbourhood`);if(!t.ok)throw Error("Failed to fetch neighbourhood");let r=await t.json(),a={id:String(r.focal.id),name:r.focal.name,type:r.focal.type,memoryCount:r.focal.memoryCount,isFocal:!0},l=new Map;for(let e of(l.set(a.id,a),r.neighbours))l.set(String(e.id),{id:String(e.id),name:e.name,type:e.type,memoryCount:e.memoryCount});let n=r.triples.map(e=>({source:String(e.subject_id),target:String(e.object_id),predicate:e.predicate}));return{nodes:Array.from(l.values()),links:n,focal:a,totalConnections:r.totalConnections}},enabled:null!==e,staleTime:15e3})),{data:j}=(i=o?.id??null,(0,k.useQuery)({queryKey:["graph","memories",i],queryFn:async()=>{if(!i)return[];let e=await (0,w.authFetch)(`${N}/api/graph/entities/${i}/memories`);if(!e.ok)throw Error("Failed to fetch memories");return(await e.json()).memories||[]},enabled:null!==i,staleTime:15e3})),{data:E}=(0,k.useQuery)({queryKey:["graph","search",f],queryFn:async()=>{let e=await (0,w.authFetch)(`${N}/api/graph/search?q=${encodeURIComponent(f)}&limit=8`);if(!e.ok)throw Error("Search failed");return((await e.json()).entities||[]).map(e=>({id:String(e.id),name:e.name,type:e.type,memoryCount:e.memoryCount}))},enabled:f.trim().length>0,staleTime:1e4}),I=(0,r.useCallback)(e=>{c(e)},[]),P=(0,r.useCallback)(e=>{let t=x?.entities.find(t=>t.id===e);t&&c(t)},[x]),R=(0,r.useCallback)(e=>{let t=x?.entities.find(t=>t.id===e);t&&c(t),u(""),m(!1)},[x]),T=(0,r.useMemo)(()=>C?C.nodes.filter(e=>!e.isFocal).sort((e,t)=>t.memoryCount-e.memoryCount).slice(0,15).map(e=>({id:e.id,label:e.name,type:e.type,memoryCount:e.memoryCount})):[],[C]),A=o?{id:o.id,label:o.name,type:o.type,memoryCount:o.memoryCount}:null,F=null!==o;return(0,t.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,t.jsx)("div",{className:"flex items-center gap-3",children:(0,t.jsxs)("div",{className:"relative flex-1",children:[(0,t.jsx)(a.Search,{className:"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-[var(--sc-text-muted)]"}),(0,t.jsx)("input",{type:"text",value:d,onChange:e=>{u(e.target.value),m(!0)},onFocus:()=>d.trim()&&m(!0),placeholder:"Search entities...",className:"glass-card w-full py-2.5 pl-10 pr-10 text-sm text-[var(--sc-text-primary)] placeholder:text-[var(--sc-text-muted)] focus:outline-none focus:ring-1 focus:ring-[var(--sc-cyan)]/40"}),d&&(0,t.jsx)("button",{type:"button",onClick:()=>{u(""),m(!1)},className:"absolute right-3 top-1/2 -translate-y-1/2 text-[var(--sc-text-muted)] hover:text-[var(--sc-text-primary)]",children:(0,t.jsx)(l.X,{className:"h-4 w-4"})}),h&&E&&E.length>0&&(0,t.jsx)("div",{className:"absolute left-0 right-0 top-full z-50 mt-1 glass-card-strong overflow-hidden py-1",children:E.map(e=>(0,t.jsxs)("button",{type:"button",onClick:()=>R(e.id),className:"flex w-full items-center justify-between px-4 py-2 text-left transition-colors hover:bg-[var(--sc-surface-interactive)]",children:[(0,t.jsx)("span",{className:"truncate text-sm text-[var(--sc-text-primary)]",children:e.name}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(s.Badge,{variant:"muted",className:"text-[10px]",children:e.type}),(0,t.jsx)("span",{className:"text-xs tabular-nums text-[var(--sc-text-muted)]",children:e.memoryCount})]})]},e.id))})]})}),(0,t.jsxs)("div",{className:`grid gap-4 ${F?"grid-cols-1 md:grid-cols-[1fr_340px]":"grid-cols-1"}`,children:[(0,t.jsxs)(n.GlassCard,{className:"relative min-h-[500px] overflow-hidden border-0 p-0",children:[b&&(0,t.jsx)("div",{className:"absolute inset-0 z-10 flex items-center justify-center bg-[var(--sc-bg-deep)]/60",children:(0,t.jsx)("div",{className:"h-6 w-6 animate-spin rounded-full border-2 border-[var(--sc-cyan)] border-t-transparent"})}),(0,t.jsx)("div",{ref:p,className:"h-full w-full",style:{minHeight:500},children:x&&(0,t.jsx)(v,{clusters:x.clusters,allTriples:x.triples,totalEntities:x.entities.length,totalConnections:x.totalConnections,width:y.width,height:y.height,onSelectEntity:I,selectedEntityId:o?.id})})]}),F&&A&&(0,t.jsx)("div",{className:"min-h-[500px]",children:(0,t.jsx)(S,{entity:A,relatedEntities:T,recentMemories:j??[],onNavigate:P})})]})]})}e.s(["default",()=>E],68595)},13213,e=>{e.n(e.i(68595))},23531,e=>{e.v(t=>Promise.all(["static/chunks/364656baa57adaa7.js"].map(t=>e.l(t))).then(()=>t(23272)))}]);
|
package/dist/api/events.js
CHANGED
|
@@ -41,6 +41,8 @@ export function emitMemoryUpdated(memory) {
|
|
|
41
41
|
memoryEvents.emit('memory_updated', { memory });
|
|
42
42
|
}
|
|
43
43
|
export function emitMemoryDeleted(memoryId, title) {
|
|
44
|
+
// The bare `title` is masked centrally when broadcast (deepRedactRestrictedContent
|
|
45
|
+
// scrubs every title-keyed string), so no per-emit redaction is needed here.
|
|
44
46
|
memoryEvents.emit('memory_deleted', { memoryId, title });
|
|
45
47
|
}
|
|
46
48
|
export function emitConsolidation(result, promotedMemories = [], deletedMemories = []) {
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Request, Response, NextFunction } from 'express';
|
|
2
|
+
/**
|
|
3
|
+
* Express middleware: deep-redact RESTRICTED (credential-class) memory content
|
|
4
|
+
* from every JSON response the visualization API sends.
|
|
5
|
+
*
|
|
6
|
+
* The dashboard renders in a BROWSER, so a raw credential reaching the DOM is a
|
|
7
|
+
* leak vector (screenshots, screen-shares, disk cache). Memories surface at many
|
|
8
|
+
* nesting depths across the API (`{ memories: [...] }`, recall `results[].memory`,
|
|
9
|
+
* openclaw `sessions[].memories[]`, review-queue `sections.stale[]`,
|
|
10
|
+
* `contradictions[].memoryA`), so a single response interceptor that walks the
|
|
11
|
+
* whole tree is the only way to guarantee none is missed. The row itself stays
|
|
12
|
+
* intact (title/metadata) so the owner can still see/manage it; full content
|
|
13
|
+
* remains available via the CLI, which is not a browser surface.
|
|
14
|
+
*/
|
|
15
|
+
export declare function redactRestrictedResponses(_req: Request, res: Response, next: NextFunction): void;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { deepRedactRestrictedContent } from '../defence/trust/read-guard.js';
|
|
2
|
+
/**
|
|
3
|
+
* Express middleware: deep-redact RESTRICTED (credential-class) memory content
|
|
4
|
+
* from every JSON response the visualization API sends.
|
|
5
|
+
*
|
|
6
|
+
* The dashboard renders in a BROWSER, so a raw credential reaching the DOM is a
|
|
7
|
+
* leak vector (screenshots, screen-shares, disk cache). Memories surface at many
|
|
8
|
+
* nesting depths across the API (`{ memories: [...] }`, recall `results[].memory`,
|
|
9
|
+
* openclaw `sessions[].memories[]`, review-queue `sections.stale[]`,
|
|
10
|
+
* `contradictions[].memoryA`), so a single response interceptor that walks the
|
|
11
|
+
* whole tree is the only way to guarantee none is missed. The row itself stays
|
|
12
|
+
* intact (title/metadata) so the owner can still see/manage it; full content
|
|
13
|
+
* remains available via the CLI, which is not a browser surface.
|
|
14
|
+
*/
|
|
15
|
+
export function redactRestrictedResponses(_req, res, next) {
|
|
16
|
+
const originalJson = res.json.bind(res);
|
|
17
|
+
res.json = ((body) => originalJson(deepRedactRestrictedContent(body)));
|
|
18
|
+
next();
|
|
19
|
+
}
|
|
@@ -1,13 +1,40 @@
|
|
|
1
1
|
import { homedir } from 'os';
|
|
2
2
|
import { join } from 'path';
|
|
3
3
|
import { existsSync, readdirSync, readFileSync } from 'fs';
|
|
4
|
-
import { getDatabase } from '../../database/init.js';
|
|
4
|
+
import { getDatabase, withTransaction } from '../../database/init.js';
|
|
5
5
|
import { searchMemories, getRecentMemories, getHighPriorityMemories, countMemories, countHighPriorityMemories, getMemoryStats, getMemoryById, addMemory, deleteMemory, accessMemory, updateMemory, mergeMemories, promoteMemory, createMemoryLink, rowToMemory, enrichMemory, } from '../../memory/store.js';
|
|
6
6
|
import { calculateDecayedScore } from '../../memory/decay.js';
|
|
7
7
|
import { consolidate, findDuplicateMemoryPairs, formatContextSummary, generateContextSummary, } from '../../memory/consolidate.js';
|
|
8
8
|
import { getActivationStats, getActiveMemories } from '../../memory/activation.js';
|
|
9
9
|
import { detectContradictions, getContradictionsFor } from '../../memory/contradiction.js';
|
|
10
10
|
import { emitConsolidation } from '../events.js';
|
|
11
|
+
import { guardDashboardContextSummary, RESTRICTED_CONTENT_PLACEHOLDER } from '../../defence/trust/read-guard.js';
|
|
12
|
+
/** Upper bound on memories a single bulk-review call may touch (actions are reversible). */
|
|
13
|
+
const MAX_BULK_REVIEW = 1000;
|
|
14
|
+
/**
|
|
15
|
+
* Resolve a review action keyword into the `updateMemory` field updates. Shared
|
|
16
|
+
* by the single PATCH /api/memories/:id/review route and the bulk endpoint so the
|
|
17
|
+
* action vocabulary lives in one place. Returns null for an unknown action.
|
|
18
|
+
*/
|
|
19
|
+
function buildReviewUpdates(action, opts) {
|
|
20
|
+
const reviewActor = typeof opts.reviewedBy === 'string' && opts.reviewedBy.trim() ? opts.reviewedBy.trim() : 'dashboard';
|
|
21
|
+
const map = {
|
|
22
|
+
archive: { status: 'archived', reviewedBy: reviewActor },
|
|
23
|
+
suppress: { status: 'suppressed', reviewedBy: reviewActor },
|
|
24
|
+
restore: { status: 'active', reviewedBy: reviewActor },
|
|
25
|
+
pin: { pinned: true, reviewedBy: reviewActor },
|
|
26
|
+
unpin: { pinned: false, reviewedBy: reviewActor },
|
|
27
|
+
canonicalize: { status: 'canonical', pinned: true, reviewedBy: reviewActor },
|
|
28
|
+
excludeCloud: { cloudExcluded: true, reviewedBy: reviewActor },
|
|
29
|
+
includeCloud: { cloudExcluded: false, reviewedBy: reviewActor },
|
|
30
|
+
rescopeProject: { scope: 'project', project: opts.project ?? null, reviewedBy: reviewActor },
|
|
31
|
+
rescopeGlobal: { scope: 'global', project: null, reviewedBy: reviewActor },
|
|
32
|
+
};
|
|
33
|
+
const updates = map[action];
|
|
34
|
+
if (!updates)
|
|
35
|
+
return null;
|
|
36
|
+
return { ...updates, ...(opts.scope ? { scope: opts.scope } : {}) };
|
|
37
|
+
}
|
|
11
38
|
export function registerMemoryRoutes(app, deps) {
|
|
12
39
|
const { requireNotLocked, requireIronDomeAction } = deps;
|
|
13
40
|
function deriveLocalOpenClawSessionId(memory) {
|
|
@@ -251,6 +278,10 @@ export function registerMemoryRoutes(app, deps) {
|
|
|
251
278
|
total = countMemories(project, filters);
|
|
252
279
|
}
|
|
253
280
|
const hasMore = offset + limit < total;
|
|
281
|
+
// RESTRICTED content is redacted globally by the response interceptor; no
|
|
282
|
+
// per-row dropping here (the dashboard is a management surface — low-trust
|
|
283
|
+
// rows must stay visible to be triaged, and dropping post-slice would also
|
|
284
|
+
// desync total/hasMore).
|
|
254
285
|
const paginatedMemories = memories.slice(offset, offset + limit);
|
|
255
286
|
// Batch-load entity_ids per memory so the constellation graph client
|
|
256
287
|
// can map list rows to graph nodes without an N+1 fetch.
|
|
@@ -963,7 +994,10 @@ export function registerMemoryRoutes(app, deps) {
|
|
|
963
994
|
app.get('/api/context', requireNotLocked, async (req, res) => {
|
|
964
995
|
try {
|
|
965
996
|
const project = typeof req.query.project === 'string' ? req.query.project : undefined;
|
|
966
|
-
|
|
997
|
+
// Redact RESTRICTED content BEFORE formatting — the `formatted` string bakes
|
|
998
|
+
// content in, so the response interceptor (which only walks structured JSON)
|
|
999
|
+
// cannot reach it. Guarding the summary first covers both fields.
|
|
1000
|
+
const summary = guardDashboardContextSummary(await generateContextSummary(project));
|
|
967
1001
|
res.json({
|
|
968
1002
|
summary,
|
|
969
1003
|
formatted: formatContextSummary(summary),
|
|
@@ -1151,7 +1185,11 @@ export function registerMemoryRoutes(app, deps) {
|
|
|
1151
1185
|
const updates = {};
|
|
1152
1186
|
if (title !== undefined)
|
|
1153
1187
|
updates.title = title.trim();
|
|
1154
|
-
|
|
1188
|
+
// Never persist the redaction placeholder as real content. RESTRICTED content
|
|
1189
|
+
// is withheld from the browser, so a dashboard edit form can only echo the
|
|
1190
|
+
// placeholder back — writing it would silently destroy the real secret. Drop
|
|
1191
|
+
// a content update that is exactly the placeholder (true edits are unaffected).
|
|
1192
|
+
if (content !== undefined && content !== RESTRICTED_CONTENT_PLACEHOLDER)
|
|
1155
1193
|
updates.content = content;
|
|
1156
1194
|
if (category !== undefined)
|
|
1157
1195
|
updates.category = category;
|
|
@@ -1193,26 +1231,10 @@ export function registerMemoryRoutes(app, deps) {
|
|
|
1193
1231
|
if (Number.isNaN(id)) {
|
|
1194
1232
|
return res.status(400).json({ error: 'Invalid memory ID' });
|
|
1195
1233
|
}
|
|
1196
|
-
const
|
|
1197
|
-
|
|
1198
|
-
archive: { status: 'archived', reviewedBy: reviewActor },
|
|
1199
|
-
suppress: { status: 'suppressed', reviewedBy: reviewActor },
|
|
1200
|
-
restore: { status: 'active', reviewedBy: reviewActor },
|
|
1201
|
-
pin: { pinned: true, reviewedBy: reviewActor },
|
|
1202
|
-
unpin: { pinned: false, reviewedBy: reviewActor },
|
|
1203
|
-
canonicalize: { status: 'canonical', pinned: true, reviewedBy: reviewActor },
|
|
1204
|
-
excludeCloud: { cloudExcluded: true, reviewedBy: reviewActor },
|
|
1205
|
-
includeCloud: { cloudExcluded: false, reviewedBy: reviewActor },
|
|
1206
|
-
rescopeProject: { scope: 'project', project: project ?? null, reviewedBy: reviewActor },
|
|
1207
|
-
rescopeGlobal: { scope: 'global', project: null, reviewedBy: reviewActor },
|
|
1208
|
-
};
|
|
1209
|
-
if (!action || !actionMap[action]) {
|
|
1234
|
+
const updates = buildReviewUpdates(action ?? '', { reviewedBy, project, scope });
|
|
1235
|
+
if (!updates) {
|
|
1210
1236
|
return res.status(400).json({ error: 'Unsupported review action' });
|
|
1211
1237
|
}
|
|
1212
|
-
const updates = {
|
|
1213
|
-
...actionMap[action],
|
|
1214
|
-
...(scope ? { scope } : {}),
|
|
1215
|
-
};
|
|
1216
1238
|
const updated = updateMemory(id, updates);
|
|
1217
1239
|
if (!updated) {
|
|
1218
1240
|
return res.status(404).json({ error: 'Memory not found' });
|
|
@@ -1223,6 +1245,49 @@ export function registerMemoryRoutes(app, deps) {
|
|
|
1223
1245
|
res.status(500).json({ error: error.message });
|
|
1224
1246
|
}
|
|
1225
1247
|
});
|
|
1248
|
+
// Bulk review: apply one reversible review action to many memories at once, so
|
|
1249
|
+
// the dashboard's large triage queues (Never Used, Noisy Auto, …) can be cleared
|
|
1250
|
+
// without one round-trip per card. Mirrors the quarantine bulk-approve pattern.
|
|
1251
|
+
// Reversible actions only (archive/suppress/restore/pin/…) — there is no bulk
|
|
1252
|
+
// delete here. Best-effort with a per-row failure list; capped at MAX_BULK_REVIEW.
|
|
1253
|
+
app.post('/api/memories/review/bulk', requireNotLocked, requireIronDomeAction({
|
|
1254
|
+
action: 'modify_records',
|
|
1255
|
+
channel: 'dashboard',
|
|
1256
|
+
sourceIdentifier: 'dashboard:memory-review-bulk',
|
|
1257
|
+
enforceAmber: true,
|
|
1258
|
+
}), (req, res) => {
|
|
1259
|
+
try {
|
|
1260
|
+
const { ids, action, reviewedBy, project, scope } = req.body;
|
|
1261
|
+
if (!Array.isArray(ids) || ids.length === 0) {
|
|
1262
|
+
return res.status(400).json({ error: 'ids must be a non-empty array' });
|
|
1263
|
+
}
|
|
1264
|
+
const numericIds = Array.from(new Set(ids.filter((x) => Number.isInteger(x))));
|
|
1265
|
+
if (numericIds.length === 0) {
|
|
1266
|
+
return res.status(400).json({ error: 'ids must contain integers' });
|
|
1267
|
+
}
|
|
1268
|
+
if (numericIds.length > MAX_BULK_REVIEW) {
|
|
1269
|
+
return res.status(400).json({ error: `Too many ids (max ${MAX_BULK_REVIEW}) — narrow the selection.` });
|
|
1270
|
+
}
|
|
1271
|
+
const updates = buildReviewUpdates(action ?? '', { reviewedBy, project, scope });
|
|
1272
|
+
if (!updates) {
|
|
1273
|
+
return res.status(400).json({ error: 'Unsupported review action' });
|
|
1274
|
+
}
|
|
1275
|
+
let updated = 0;
|
|
1276
|
+
const failed = [];
|
|
1277
|
+
withTransaction(() => {
|
|
1278
|
+
for (const id of numericIds) {
|
|
1279
|
+
if (updateMemory(id, updates))
|
|
1280
|
+
updated += 1;
|
|
1281
|
+
else
|
|
1282
|
+
failed.push(id);
|
|
1283
|
+
}
|
|
1284
|
+
});
|
|
1285
|
+
res.json({ success: true, updated, total: numericIds.length, failed });
|
|
1286
|
+
}
|
|
1287
|
+
catch (error) {
|
|
1288
|
+
res.status(500).json({ error: error.message });
|
|
1289
|
+
}
|
|
1290
|
+
});
|
|
1226
1291
|
app.post('/api/memories/:id/quarantine', requireNotLocked, requireIronDomeAction({
|
|
1227
1292
|
action: 'modify_records',
|
|
1228
1293
|
channel: 'dashboard',
|
|
@@ -16,6 +16,8 @@ import { getDatabase, initDatabase, checkpointWal } from '../database/init.js';
|
|
|
16
16
|
import { DEFAULT_CONFIG } from '../memory/types.js';
|
|
17
17
|
import { getRecentMemories, getMemoryStats, rowToMemory, updateDecayScores } from '../memory/store.js';
|
|
18
18
|
import { calculateDecayedScore } from '../memory/decay.js';
|
|
19
|
+
import { deepRedactRestrictedContent, redactRestrictedForDisplay } from '../defence/trust/read-guard.js';
|
|
20
|
+
import { redactRestrictedResponses } from './redact-response.js';
|
|
19
21
|
import { memoryEvents, emitDecayTick, getUnprocessedEvents, markEventsProcessed, cleanupOldEvents, } from './events.js';
|
|
20
22
|
import { BrainWorker } from '../worker/brain-worker.js';
|
|
21
23
|
import { isKillSwitchActive, getKillSwitchMeta, activateKillSwitch, deactivateKillSwitch } from './control.js';
|
|
@@ -300,6 +302,11 @@ export function startVisualizationServer(dbPath) {
|
|
|
300
302
|
}
|
|
301
303
|
next();
|
|
302
304
|
});
|
|
305
|
+
// ── RESTRICTED content redaction ────────────────────────
|
|
306
|
+
// Deep-redact RESTRICTED (credential-class) memory content from every JSON
|
|
307
|
+
// response — the dashboard is a browser surface, so the secret must never reach
|
|
308
|
+
// the DOM. The row stays visible so the owner can manage it. See the middleware.
|
|
309
|
+
app.use(redactRestrictedResponses);
|
|
303
310
|
// Token handshake — dashboard claims on load (survives page refresh)
|
|
304
311
|
app.get('/api/auth/session-token', (_req, res) => {
|
|
305
312
|
const token = getSessionToken();
|
|
@@ -778,9 +785,11 @@ export function startVisualizationServer(dbPath) {
|
|
|
778
785
|
ws.on('pong', () => { ws.isAlive = true; });
|
|
779
786
|
clients.add(ws);
|
|
780
787
|
console.log(`[WS] Client connected. Total: ${clients.size}`);
|
|
781
|
-
// Send initial state
|
|
788
|
+
// Send initial state. The WS feed renders in the same browser surface as the
|
|
789
|
+
// REST API but does not pass through the res.json interceptor, so redact
|
|
790
|
+
// RESTRICTED content here explicitly.
|
|
782
791
|
const stats = getMemoryStats();
|
|
783
|
-
const memories = getRecentMemories(100);
|
|
792
|
+
const memories = redactRestrictedForDisplay(getRecentMemories(100));
|
|
784
793
|
const memoriesWithDecay = memories.map(m => ({
|
|
785
794
|
...m,
|
|
786
795
|
decayedScore: calculateDecayedScore(m),
|
|
@@ -811,9 +820,11 @@ export function startVisualizationServer(dbPath) {
|
|
|
811
820
|
catch { /* already closing */ }
|
|
812
821
|
});
|
|
813
822
|
});
|
|
814
|
-
// Broadcast events to all connected clients
|
|
823
|
+
// Broadcast events to all connected clients. memory_created/updated/accessed
|
|
824
|
+
// events carry the full memory in `data.memory`, so redact RESTRICTED content
|
|
825
|
+
// before it leaves over the WS (mirrors the REST response interceptor).
|
|
815
826
|
function broadcast(event) {
|
|
816
|
-
const message = JSON.stringify(event);
|
|
827
|
+
const message = JSON.stringify(deepRedactRestrictedContent(event));
|
|
817
828
|
for (const client of clients) {
|
|
818
829
|
try {
|
|
819
830
|
if (client.readyState === WebSocket.OPEN) {
|
|
@@ -43,3 +43,45 @@ export declare function guardReadBySensitivity(memories: Memory[]): Memory[];
|
|
|
43
43
|
export declare function guardContextSummary(summary: ContextSummary): ContextSummary;
|
|
44
44
|
/** Guard a single memory; returns null if the caller may not read it. */
|
|
45
45
|
export declare function guardReadMemory(memory: Memory | null | undefined, source: DefenceSource | undefined): Memory | null;
|
|
46
|
+
/**
|
|
47
|
+
* Dashboard / HTTP visualization-API read guard.
|
|
48
|
+
*
|
|
49
|
+
* The dashboard is the OWNER's surface, but it renders in a BROWSER — so raw
|
|
50
|
+
* RESTRICTED (credential-class) content there is a leak vector (screenshots,
|
|
51
|
+
* screen-shares, the browser's disk cache). Policy (REDACT, don't drop):
|
|
52
|
+
*
|
|
53
|
+
* - RESTRICTED rows are KEPT (so the owner sees the memory exists and can
|
|
54
|
+
* review/delete it) but their `content` is replaced with a placeholder;
|
|
55
|
+
* - because sensitivity is classified on TITLE + CONTENT together, a secret can
|
|
56
|
+
* also live in the title or metadata — so credential SPANS in those fields are
|
|
57
|
+
* masked too (a benign label like "AWS deploy key" is left intact);
|
|
58
|
+
* - low-trust / trust-0 rows are NOT dropped: the dashboard is a management
|
|
59
|
+
* surface (its Review queue exists to triage exactly these), so the owner must
|
|
60
|
+
* see them. Only RESTRICTED *content* is withheld, never whole rows.
|
|
61
|
+
*
|
|
62
|
+
* RESTRICTED full content remains available via the CLI (`recall`/`get_memory`),
|
|
63
|
+
* which is not a browser-render surface. Dropping quarantined rows is the MCP
|
|
64
|
+
* read-boundary's job (a subagent caller), not the owner's dashboard.
|
|
65
|
+
*/
|
|
66
|
+
export declare const RESTRICTED_CONTENT_PLACEHOLDER = "\uD83D\uDD12 [RESTRICTED content withheld \u2014 view via CLI]";
|
|
67
|
+
/** Redact RESTRICTED memories for display (content withheld; title/metadata secret-scrubbed). */
|
|
68
|
+
export declare function redactRestrictedForDisplay(memories: Memory[]): Memory[];
|
|
69
|
+
/** Apply the dashboard redaction to every memory list in a context summary (used before formatting). */
|
|
70
|
+
export declare function guardDashboardContextSummary(summary: ContextSummary): ContextSummary;
|
|
71
|
+
/**
|
|
72
|
+
* Deep-walk an arbitrary HTTP-response payload and redact every RESTRICTED memory
|
|
73
|
+
* object it contains (withhold `content`; mask credential spans in `title` and
|
|
74
|
+
* string `metadata`), returning a redacted COPY (the input is never mutated —
|
|
75
|
+
* payloads often reference the live row cache).
|
|
76
|
+
*
|
|
77
|
+
* This is the comprehensive backstop for the visualization API: memories surface
|
|
78
|
+
* at many different nesting depths (`{ memories: [...] }`, recall
|
|
79
|
+
* `results[].memory`, openclaw `sessions[].memories[]`, review-queue
|
|
80
|
+
* `sections.stale[]`, `contradictions[].memoryA`), so guarding each route by hand
|
|
81
|
+
* would inevitably miss one. A single response interceptor that walks the whole
|
|
82
|
+
* tree cannot. It does NOT reach content already baked into a pre-rendered string
|
|
83
|
+
* (e.g. `/api/context`'s `formatted`) or bare title fields stripped of their
|
|
84
|
+
* sensitivity label (the contradictions endpoints, the `memory_deleted` event) —
|
|
85
|
+
* those are scrubbed at their own surface.
|
|
86
|
+
*/
|
|
87
|
+
export declare function deepRedactRestrictedContent<T>(value: T, seen?: WeakSet<object>): T;
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
* resolves a source via resolveToolSource before calling the read tools.
|
|
20
20
|
*/
|
|
21
21
|
import { checkAccess } from './access-control.js';
|
|
22
|
+
import { redactContent } from '../sensitivity/redaction.js';
|
|
22
23
|
/**
|
|
23
24
|
* Core read decision, shared by the camelCase (Memory) and snake_case (raw row)
|
|
24
25
|
* guards so the policy lives in exactly one place.
|
|
@@ -74,3 +75,122 @@ export function guardReadMemory(memory, source) {
|
|
|
74
75
|
return null;
|
|
75
76
|
return guardReadMemories([memory], source)[0] ?? null;
|
|
76
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Dashboard / HTTP visualization-API read guard.
|
|
80
|
+
*
|
|
81
|
+
* The dashboard is the OWNER's surface, but it renders in a BROWSER — so raw
|
|
82
|
+
* RESTRICTED (credential-class) content there is a leak vector (screenshots,
|
|
83
|
+
* screen-shares, the browser's disk cache). Policy (REDACT, don't drop):
|
|
84
|
+
*
|
|
85
|
+
* - RESTRICTED rows are KEPT (so the owner sees the memory exists and can
|
|
86
|
+
* review/delete it) but their `content` is replaced with a placeholder;
|
|
87
|
+
* - because sensitivity is classified on TITLE + CONTENT together, a secret can
|
|
88
|
+
* also live in the title or metadata — so credential SPANS in those fields are
|
|
89
|
+
* masked too (a benign label like "AWS deploy key" is left intact);
|
|
90
|
+
* - low-trust / trust-0 rows are NOT dropped: the dashboard is a management
|
|
91
|
+
* surface (its Review queue exists to triage exactly these), so the owner must
|
|
92
|
+
* see them. Only RESTRICTED *content* is withheld, never whole rows.
|
|
93
|
+
*
|
|
94
|
+
* RESTRICTED full content remains available via the CLI (`recall`/`get_memory`),
|
|
95
|
+
* which is not a browser-render surface. Dropping quarantined rows is the MCP
|
|
96
|
+
* read-boundary's job (a subagent caller), not the owner's dashboard.
|
|
97
|
+
*/
|
|
98
|
+
export const RESTRICTED_CONTENT_PLACEHOLDER = '🔒 [RESTRICTED content withheld — view via CLI]';
|
|
99
|
+
/** Mask credential spans in a string (no-op if it carries no secret); pass-through for non-strings. */
|
|
100
|
+
function scrubSecretSpans(value) {
|
|
101
|
+
return typeof value === 'string' ? redactContent(value) : value;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Redact a single RESTRICTED memory for display: withhold `content`, mask
|
|
105
|
+
* credential spans in `title` and string `metadata` values. Returns a fresh copy
|
|
106
|
+
* (never mutates the input — rows may be live cache objects). Non-RESTRICTED rows
|
|
107
|
+
* pass through unchanged.
|
|
108
|
+
*/
|
|
109
|
+
function redactRestrictedMemory(m) {
|
|
110
|
+
// Always mask credential spans in the title (benign titles are untouched —
|
|
111
|
+
// redactContent only rewrites known credential patterns). A secret can be
|
|
112
|
+
// classified RESTRICTED via the title alone, and titles are shown for
|
|
113
|
+
// manageability, so this closes the secret-in-title leak without hiding labels.
|
|
114
|
+
const title = redactContent(m.title);
|
|
115
|
+
if (m.sensitivityLevel !== 'RESTRICTED') {
|
|
116
|
+
return title === m.title ? m : { ...m, title };
|
|
117
|
+
}
|
|
118
|
+
const metadata = m.metadata && typeof m.metadata === 'object' && !Array.isArray(m.metadata)
|
|
119
|
+
? Object.fromEntries(Object.entries(m.metadata).map(([k, v]) => [k, scrubSecretSpans(v)]))
|
|
120
|
+
: m.metadata;
|
|
121
|
+
return {
|
|
122
|
+
...m,
|
|
123
|
+
content: RESTRICTED_CONTENT_PLACEHOLDER,
|
|
124
|
+
title,
|
|
125
|
+
metadata: metadata,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/** Redact RESTRICTED memories for display (content withheld; title/metadata secret-scrubbed). */
|
|
129
|
+
export function redactRestrictedForDisplay(memories) {
|
|
130
|
+
return memories.map(redactRestrictedMemory);
|
|
131
|
+
}
|
|
132
|
+
/** Apply the dashboard redaction to every memory list in a context summary (used before formatting). */
|
|
133
|
+
export function guardDashboardContextSummary(summary) {
|
|
134
|
+
return {
|
|
135
|
+
...summary,
|
|
136
|
+
recentMemories: redactRestrictedForDisplay(summary.recentMemories),
|
|
137
|
+
keyDecisions: redactRestrictedForDisplay(summary.keyDecisions),
|
|
138
|
+
activePatterns: redactRestrictedForDisplay(summary.activePatterns),
|
|
139
|
+
pendingItems: redactRestrictedForDisplay(summary.pendingItems),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Returns true for a serialized-memory object — one carrying a sensitivity label
|
|
144
|
+
* and a content field, in either camelCase (Memory) or snake_case (raw DB row).
|
|
145
|
+
*/
|
|
146
|
+
function isRedactableMemoryObject(o) {
|
|
147
|
+
const level = (o.sensitivityLevel ?? o.sensitivity_level);
|
|
148
|
+
return level === 'RESTRICTED' && typeof o.content === 'string';
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Deep-walk an arbitrary HTTP-response payload and redact every RESTRICTED memory
|
|
152
|
+
* object it contains (withhold `content`; mask credential spans in `title` and
|
|
153
|
+
* string `metadata`), returning a redacted COPY (the input is never mutated —
|
|
154
|
+
* payloads often reference the live row cache).
|
|
155
|
+
*
|
|
156
|
+
* This is the comprehensive backstop for the visualization API: memories surface
|
|
157
|
+
* at many different nesting depths (`{ memories: [...] }`, recall
|
|
158
|
+
* `results[].memory`, openclaw `sessions[].memories[]`, review-queue
|
|
159
|
+
* `sections.stale[]`, `contradictions[].memoryA`), so guarding each route by hand
|
|
160
|
+
* would inevitably miss one. A single response interceptor that walks the whole
|
|
161
|
+
* tree cannot. It does NOT reach content already baked into a pre-rendered string
|
|
162
|
+
* (e.g. `/api/context`'s `formatted`) or bare title fields stripped of their
|
|
163
|
+
* sensitivity label (the contradictions endpoints, the `memory_deleted` event) —
|
|
164
|
+
* those are scrubbed at their own surface.
|
|
165
|
+
*/
|
|
166
|
+
export function deepRedactRestrictedContent(value, seen = new WeakSet()) {
|
|
167
|
+
if (value === null || typeof value !== 'object')
|
|
168
|
+
return value;
|
|
169
|
+
if (seen.has(value))
|
|
170
|
+
return value; // cycle guard
|
|
171
|
+
seen.add(value);
|
|
172
|
+
if (Array.isArray(value)) {
|
|
173
|
+
return value.map((item) => deepRedactRestrictedContent(item, seen));
|
|
174
|
+
}
|
|
175
|
+
const obj = value;
|
|
176
|
+
const copy = {};
|
|
177
|
+
for (const key of Object.keys(obj)) {
|
|
178
|
+
copy[key] = deepRedactRestrictedContent(obj[key], seen);
|
|
179
|
+
// Mask credential spans in any title-bearing string field, wherever it sits —
|
|
180
|
+
// titles are emitted bare (no sensitivity label) on recall/graph/contradictions
|
|
181
|
+
// /memory_deleted surfaces, so this closes those leaks centrally. redactContent
|
|
182
|
+
// only rewrites known credential patterns, so benign titles pass through.
|
|
183
|
+
if (/title/i.test(key) && typeof copy[key] === 'string') {
|
|
184
|
+
copy[key] = redactContent(copy[key]);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
if (isRedactableMemoryObject(copy)) {
|
|
188
|
+
copy.content = RESTRICTED_CONTENT_PLACEHOLDER;
|
|
189
|
+
if (copy.metadata && typeof copy.metadata === 'object' && !Array.isArray(copy.metadata)) {
|
|
190
|
+
const md = copy.metadata;
|
|
191
|
+
for (const k of Object.keys(md))
|
|
192
|
+
md[k] = scrubSecretSpans(md[k]);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return copy;
|
|
196
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "shieldcortex",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.42.0",
|
|
4
4
|
"description": "Trustworthy memory and security for AI agents. Recall debugging, review queue, OpenClaw session capture, and memory poisoning defence for Claude Code, Codex, OpenClaw, LangChain, and MCP agents.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[89578,a=>{a.v({className:"geist_a71539c9-module__T19VSG__className",variable:"geist_a71539c9-module__T19VSG__variable"})},35214,a=>{a.v({className:"geist_mono_8d43a2aa-module__8Li5zG__className",variable:"geist_mono_8d43a2aa-module__8Li5zG__variable"})},35733,a=>{"use strict";a.s(["Providers",()=>b]);let b=(0,a.i(13358).registerClientReference)(function(){throw Error("Attempted to call Providers() from the server but Providers is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/dashboard/src/components/Providers.tsx <module evaluation>","Providers")},88153,a=>{"use strict";a.s(["Providers",()=>b]);let b=(0,a.i(13358).registerClientReference)(function(){throw Error("Attempted to call Providers() from the server but Providers is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/dashboard/src/components/Providers.tsx","Providers")},88098,a=>{"use strict";a.i(35733);var b=a.i(88153);a.n(b)},82726,a=>{"use strict";var b=a.i(31696),c=a.i(89578);let d={className:c.default.className,style:{fontFamily:"'Geist', 'Geist Fallback'",fontStyle:"normal"}};null!=c.default.variable&&(d.variable=c.default.variable);var e=a.i(35214);let f={className:e.default.className,style:{fontFamily:"'Geist Mono', 'Geist Mono Fallback'",fontStyle:"normal"}};null!=e.default.variable&&(f.variable=e.default.variable);var g=a.i(88098);function h({children:a}){return(0,b.jsx)("html",{lang:"en",className:"dark","data-theme":"glass",suppressHydrationWarning:!0,children:(0,b.jsx)("body",{className:`${d.variable} ${f.variable} antialiased bg-slate-950`,children:(0,b.jsx)(g.Providers,{children:a})})})}a.s(["default",()=>h,"metadata",0,{title:"ShieldCortex",description:"AI Memory Security Dashboard — Defence pipeline, audit logs, quarantine review"}],82726)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__7d500b5a._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[53731,(a,b,c)=>{"use strict";b.exports=a.r(14865).vendored.contexts.HooksClientContext},69136,(a,b,c)=>{"use strict";b.exports=a.r(14865).vendored.contexts.ServerInsertedHtml},56704,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},20635,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/action-async-storage.external.js",()=>require("next/dist/server/app-render/action-async-storage.external.js"))},32319,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},54935,(a,b,c)=>{"use strict";b.exports=a.r(14865).vendored.contexts.AppRouterContext},18780,(a,b,c)=>{"use strict";b.exports=a.r(14865).vendored["react-ssr"].ReactDOM},90382,(a,b,c)=>{"use strict";b.exports=a.r(14865).vendored["react-ssr"].ReactServerDOMTurbopackClient},66397,a=>{"use strict";let b=(0,a.i(70694).default)("scan-search",[["path",{d:"M3 7V5a2 2 0 0 1 2-2h2",key:"aa7l1z"}],["path",{d:"M17 3h2a2 2 0 0 1 2 2v2",key:"4qcy5o"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2h-2",key:"6vwrx8"}],["path",{d:"M7 21H5a2 2 0 0 1-2-2v-2",key:"ioqczr"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["path",{d:"m16 16-1.9-1.9",key:"1dq9hf"}]]);a.s(["ScanSearch",()=>b],66397)},22524,a=>{"use strict";let b=(0,a.i(70694).default)("shield-check",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);a.s(["ShieldCheck",()=>b],22524)},76625,a=>{"use strict";let b=(0,a.i(70694).default)("database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);a.s(["Database",()=>b],76625)},98472,a=>{"use strict";let b=(0,a.i(70694).default)("shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]);a.s(["Shield",()=>b],98472)},66807,a=>{"use strict";var b=a.i(98419),c=a.i(46674),d=a.i(98416),e=a.i(16347),f=a.i(15896),g=class extends e.Subscribable{#a;#b=void 0;#c;#d;constructor(a,b){super(),this.#a=a,this.setOptions(b),this.bindMethods(),this.#e()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(a){let b=this.options;this.options=this.#a.defaultMutationOptions(a),(0,f.shallowEqualObjects)(this.options,b)||this.#a.getMutationCache().notify({type:"observerOptionsUpdated",mutation:this.#c,observer:this}),b?.mutationKey&&this.options.mutationKey&&(0,f.hashKey)(b.mutationKey)!==(0,f.hashKey)(this.options.mutationKey)?this.reset():this.#c?.state.status==="pending"&&this.#c.setOptions(this.options)}onUnsubscribe(){this.hasListeners()||this.#c?.removeObserver(this)}onMutationUpdate(a){this.#e(),this.#f(a)}getCurrentResult(){return this.#b}reset(){this.#c?.removeObserver(this),this.#c=void 0,this.#e(),this.#f()}mutate(a,b){return this.#d=b,this.#c?.removeObserver(this),this.#c=this.#a.getMutationCache().build(this.#a,this.options),this.#c.addObserver(this),this.#c.execute(a)}#e(){let a=this.#c?.state??(0,c.getDefaultState)();this.#b={...a,isPending:"pending"===a.status,isSuccess:"success"===a.status,isError:"error"===a.status,isIdle:"idle"===a.status,mutate:this.mutate,reset:this.reset}}#f(a){d.notifyManager.batch(()=>{if(this.#d&&this.hasListeners()){let b=this.#b.variables,c=this.#b.context,d={client:this.#a,meta:this.options.meta,mutationKey:this.options.mutationKey};if(a?.type==="success"){try{this.#d.onSuccess?.(a.data,b,c,d)}catch(a){Promise.reject(a)}try{this.#d.onSettled?.(a.data,null,b,c,d)}catch(a){Promise.reject(a)}}else if(a?.type==="error"){try{this.#d.onError?.(a.error,b,c,d)}catch(a){Promise.reject(a)}try{this.#d.onSettled?.(void 0,a.error,b,c,d)}catch(a){Promise.reject(a)}}}this.listeners.forEach(a=>{a(this.#b)})})}},h=a.i(14220);function i(a,c){let e=(0,h.useQueryClient)(c),[i]=b.useState(()=>new g(e,a));b.useEffect(()=>{i.setOptions(a)},[i,a]);let j=b.useSyncExternalStore(b.useCallback(a=>i.subscribe(d.notifyManager.batchCalls(a)),[i]),()=>i.getCurrentResult(),()=>i.getCurrentResult()),k=b.useCallback((a,b)=>{i.mutate(a,b).catch(f.noop)},[i]);if(j.error&&(0,f.shouldThrowError)(i.options.throwOnError,[j.error]))throw j.error;return{...j,mutate:k,mutateAsync:j.mutate}}a.s(["useMutation",()=>i],66807)},79155,a=>{"use strict";let b=(0,a.i(70694).default)("shield-alert",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]]);a.s(["ShieldAlert",()=>b],79155)},14126,a=>{"use strict";let b=(0,a.i(70694).default)("sparkles",[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]]);a.s(["Sparkles",()=>b],14126)},70694,a=>{"use strict";var b=a.i(98419);let c=a=>{let b=a.replace(/^([A-Z])|[\s-_]+(\w)/g,(a,b,c)=>c?c.toUpperCase():b.toLowerCase());return b.charAt(0).toUpperCase()+b.slice(1)},d=(...a)=>a.filter((a,b,c)=>!!a&&""!==a.trim()&&c.indexOf(a)===b).join(" ").trim();var e={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let f=(0,b.forwardRef)(({color:a="currentColor",size:c=24,strokeWidth:f=2,absoluteStrokeWidth:g,className:h="",children:i,iconNode:j,...k},l)=>(0,b.createElement)("svg",{ref:l,...e,width:c,height:c,stroke:a,strokeWidth:g?24*Number(f)/Number(c):f,className:d("lucide",h),...!i&&!(a=>{for(let b in a)if(b.startsWith("aria-")||"role"===b||"title"===b)return!0})(k)&&{"aria-hidden":"true"},...k},[...j.map(([a,c])=>(0,b.createElement)(a,c)),...Array.isArray(i)?i:[i]])),g=(a,e)=>{let g=(0,b.forwardRef)(({className:g,...h},i)=>(0,b.createElement)(f,{ref:i,iconNode:e,className:d(`lucide-${c(a).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,`lucide-${a}`,g),...h}));return g.displayName=c(a),g};a.s(["default",()=>g],70694)},73683,(a,b,c)=>{"use strict";function d(a){if("function"!=typeof WeakMap)return null;var b=new WeakMap,c=new WeakMap;return(d=function(a){return a?c:b})(a)}c._=function(a,b){if(!b&&a&&a.__esModule)return a;if(null===a||"object"!=typeof a&&"function"!=typeof a)return{default:a};var c=d(b);if(c&&c.has(a))return c.get(a);var e={__proto__:null},f=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var g in a)if("default"!==g&&Object.prototype.hasOwnProperty.call(a,g)){var h=f?Object.getOwnPropertyDescriptor(a,g):null;h&&(h.get||h.set)?Object.defineProperty(e,g,h):e[g]=a[g]}return e.default=a,c&&c.set(a,e),e}},64575,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={DEFAULT_SEGMENT_KEY:function(){return l},NOT_FOUND_SEGMENT_KEY:function(){return m},PAGE_SEGMENT_KEY:function(){return k},addSearchParamsIfPageSegment:function(){return i},computeSelectedLayoutSegment:function(){return j},getSegmentValue:function(){return f},getSelectedLayoutSegmentPath:function(){return function a(b,c,d=!0,e=[]){let g;if(d)g=b[1][c];else{let a=b[1];g=a.children??Object.values(a)[0]}if(!g)return e;let h=f(g[0]);return!h||h.startsWith(k)?e:(e.push(h),a(g,c,!1,e))}},isGroupSegment:function(){return g},isParallelRouteSegment:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});function f(a){return Array.isArray(a)?a[1]:a}function g(a){return"("===a[0]&&a.endsWith(")")}function h(a){return a.startsWith("@")&&"@children"!==a}function i(a,b){if(a.includes(k)){let a=JSON.stringify(b);return"{}"!==a?k+"?"+a:k}return a}function j(a,b){if(!a||0===a.length)return null;let c="children"===b?a[0]:a[a.length-1];return c===l?null:c}let k="__PAGE__",l="__DEFAULT__",m="/_not-found"},88904,a=>{"use strict";let b=(0,a.i(70694).default)("activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);a.s(["Activity",()=>b],88904)},68839,a=>{"use strict";let b;var c=a.i(98419);let d=a=>{let b,c=new Set,d=(a,d)=>{let e="function"==typeof a?a(b):a;if(!Object.is(e,b)){let a=b;b=(null!=d?d:"object"!=typeof e||null===e)?e:Object.assign({},b,e),c.forEach(c=>c(b,a))}},e=()=>b,f={setState:d,getState:e,getInitialState:()=>g,subscribe:a=>(c.add(a),()=>c.delete(a))},g=b=a(d,e,f);return f},e=a=>{let b=a?d(a):d,e=a=>(function(a,b=a=>a){let d=c.default.useSyncExternalStore(a.subscribe,c.default.useCallback(()=>b(a.getState()),[a,b]),c.default.useCallback(()=>b(a.getInitialState()),[a,b]));return c.default.useDebugValue(d),d})(b,a);return Object.assign(e,b),e},f=(b=a=>({selectedMemory:null,setSelectedMemory:b=>a({selectedMemory:b}),selectedAuditEntry:null,setSelectedAuditEntry:b=>a({selectedAuditEntry:b}),viewMode:"overview",setViewMode:b=>a({viewMode:b}),typeFilter:null,categoryFilter:null,projectFilter:null,setTypeFilter:b=>a({typeFilter:b}),setCategoryFilter:b=>a({categoryFilter:b}),setProjectFilter:b=>a({projectFilter:b}),reviewFocus:null,setReviewFocus:b=>a({reviewFocus:b}),recentEvents:[],addEvent:b=>a(a=>({recentEvents:[b,...a.recentEvents].slice(0,50)})),clearEvents:()=>a({recentEvents:[]}),cameraPosition:[0,0,12],setCameraPosition:b=>a({cameraPosition:b}),showLeftSidebar:!0,showRightSidebar:!0,toggleLeftSidebar:()=>a(a=>({showLeftSidebar:!a.showLeftSidebar})),toggleRightSidebar:()=>a(a=>({showRightSidebar:!a.showRightSidebar})),searchQuery:"",setSearchQuery:b=>a({searchQuery:b}),sidebarPinned:!1,toggleSidebarPinned:()=>a(a=>({sidebarPinned:!a.sidebarPinned})),activeTab:{},setActiveTab:(b,c)=>a(a=>({activeTab:{...a.activeTab,[b]:c}}))}))?e(b):e;a.s(["useDashboardStore",0,f],68839)},40145,a=>{"use strict";let b=(0,a.i(70694).default)("settings",[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);a.s(["Settings",()=>b],40145)},6476,a=>{"use strict";let b=(0,a.i(70694).default)("brain",[["path",{d:"M12 18V5",key:"adv99a"}],["path",{d:"M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4",key:"1e3is1"}],["path",{d:"M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5",key:"1gqd8o"}],["path",{d:"M17.997 5.125a4 4 0 0 1 2.526 5.77",key:"iwvgf7"}],["path",{d:"M18 18a4 4 0 0 0 2-7.464",key:"efp6ie"}],["path",{d:"M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517",key:"1gq6am"}],["path",{d:"M6 18a4 4 0 0 1-2-7.464",key:"k1g0md"}],["path",{d:"M6.003 5.125a4 4 0 0 0-2.526 5.77",key:"q97ue3"}]]);a.s(["Brain",()=>b],6476)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__bea9887b._.js.map
|
package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_14d63e36._.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[74150,35031,79030,a=>{"use strict";let b=(0,a.i(70694).default)("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);a.s(["CheckCircle2",()=>b],74150);var c=a.i(40458),d=a.i(66807),e=a.i(14220),f=a.i(86044);let g=process.env.NEXT_PUBLIC_API_URL||"http://localhost:3001";async function h(){let a=await (0,f.authFetch)(`${g}/api/license/status`);if(!a.ok)throw Error("Failed to fetch license status");return a.json()}async function i(a){let b=await (0,f.authFetch)(`${g}/api/license/activate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:a})});if(!b.ok)throw Error((await b.json().catch(()=>({error:"Activation failed"}))).error||"Activation failed");return b.json()}async function j(){let a=await (0,f.authFetch)(`${g}/api/license/deactivate`,{method:"POST"});if(!a.ok)throw Error("Failed to deactivate license");return a.json()}function k(){return(0,c.useQuery)({queryKey:["license-status"],queryFn:h,refetchInterval:6e4,retry:2})}function l(){let a=(0,e.useQueryClient)();return(0,d.useMutation)({mutationFn:a=>i(a),onSuccess:()=>{a.invalidateQueries({queryKey:["license-status"]})}})}function m(){let a=(0,e.useQueryClient)();return(0,d.useMutation)({mutationFn:j,onSuccess:()=>{a.invalidateQueries({queryKey:["license-status"]})}})}a.s(["useActivateLicense",()=>l,"useDeactivateLicense",()=>m,"useLicenseStatus",()=>k],35031),a.s(["PLAN_PRICING",0,{pro:{label:"Pro",price:"£29/mo"},team:{label:"Team",price:"£99/mo"}},"TIER_BG",0,{free:"bg-[var(--sc-surface-interactive)]",pro:"bg-[var(--sc-cyan)]/10",team:"bg-[var(--sc-coral)]/10",enterprise:"bg-[var(--sc-amber)]/10"},"TIER_COLOURS",0,{free:"text-[var(--sc-text-muted)]",pro:"text-[var(--sc-cyan)]",team:"text-[var(--sc-coral)]",enterprise:"text-[var(--sc-amber)]"},"TIER_LABELS",0,{free:"Free",pro:"Pro",team:"Team",enterprise:"Enterprise"}],79030)},47520,a=>{"use strict";let b=(0,a.i(70694).default)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);a.s(["AlertTriangle",()=>b],47520)},23808,a=>{"use strict";var b=a.i(16306),c=a.i(64565),d=a.i(98419);let e={coral:"border border-[var(--term-electric)] text-[var(--term-electric-fg)] bg-transparent hover:bg-[var(--term-electric)]/10",cyan:"border border-[var(--term-neon)] text-[var(--term-neon-fg)] bg-transparent hover:bg-[var(--term-neon)]/10",ghost:"border border-transparent text-[var(--term-text-muted)] bg-transparent hover:text-[var(--term-text)] hover:border-[var(--term-border)]",outline:"border border-[var(--term-border)] text-[var(--term-text-dim)] bg-transparent hover:border-[var(--term-text-muted)] hover:text-[var(--term-text)]"},f={sm:"px-2 py-1 text-xs",md:"px-3 py-1.5 text-sm",lg:"px-4 py-2 text-sm"},g={coral:"theme-glass:border-0 theme-glass:bg-gradient-to-br theme-glass:from-[var(--sc-coral)] theme-glass:to-[var(--sc-coral-dark)] theme-glass:text-white theme-glass:hover:shadow-[0_8px_30px_var(--sc-glow-coral-mid)]",cyan:"theme-glass:border-0 theme-glass:bg-[var(--sc-cyan)] theme-glass:text-[var(--sc-bg-deep)] theme-glass:hover:bg-[var(--sc-cyan-mid)]",ghost:"theme-glass:bg-transparent theme-glass:text-[var(--sc-text-secondary)] theme-glass:hover:bg-[var(--sc-surface-interactive)]",outline:"theme-glass:bg-transparent theme-glass:border theme-glass:border-[var(--sc-border)] theme-glass:text-[var(--sc-text-secondary)]"},h={sm:"theme-glass:px-3 theme-glass:py-1.5 theme-glass:text-xs theme-glass:rounded-lg",md:"theme-glass:px-4 theme-glass:py-2 theme-glass:text-sm theme-glass:rounded-xl",lg:"theme-glass:px-6 theme-glass:py-3 theme-glass:text-sm theme-glass:rounded-xl"},i=(0,d.forwardRef)(({variant:a="coral",size:d="md",glow:i=!1,pulse:j=!1,className:k,children:l,...m},n)=>(0,b.jsxs)("button",{ref:n,className:(0,c.cn)("inline-flex items-center justify-center gap-2 rounded-md font-mono transition-colors","focus-visible:outline-1 focus-visible:outline-offset-2 focus-visible:outline-[var(--term-electric)]",j?"disabled:pointer-events-none":"disabled:pointer-events-none disabled:opacity-50",e[a],f[d],"theme-glass:font-semibold theme-glass:transition-all theme-glass:hover:-translate-y-0.5",g[a],h[d],i&&"coral"===a&&"theme-glass:glow-coral-subtle",i&&"cyan"===a&&"theme-glass:glow-cyan-subtle",j&&"theme-glass:glow-cyan-pulse",k),type:"button",...m,children:[(0,b.jsxs)("span",{className:"inline-flex items-center gap-2 theme-glass:hidden",children:[j&&(0,b.jsx)("span",{className:"cli-cursor","aria-hidden":!0}),(0,b.jsx)("span",{className:"text-[var(--term-text-muted)]","aria-hidden":!0,children:"["}),(0,b.jsx)("span",{className:"leading-none",children:l}),(0,b.jsx)("span",{className:"text-[var(--term-text-muted)]","aria-hidden":!0,children:"]"})]}),(0,b.jsx)("span",{className:"hidden theme-glass:inline-flex items-center gap-2",children:l})]}));i.displayName="Button",a.s(["Button",0,i])},32322,a=>{"use strict";let b=(0,a.i(70694).default)("lock",[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]]);a.s(["Lock",()=>b],32322)},79151,a=>{"use strict";var b=a.i(16306),c=a.i(64565),d=a.i(32322);function e({tabs:a,activeTab:e,onChange:f,className:g}){return(0,b.jsx)("div",{className:(0,c.cn)("flex items-center gap-4 overflow-x-auto border-b border-[var(--term-border)] px-1 scrollbar-hide","theme-glass:gap-1 theme-glass:rounded-xl theme-glass:border-0 theme-glass:bg-[var(--sc-bg-surface)] theme-glass:p-1",g),role:"tablist",children:a.map(a=>{let g=a.id===e;return(0,b.jsxs)("button",{type:"button",role:"tab","aria-selected":g?"true":"false",onClick:()=>f(a.id),className:(0,c.cn)("relative flex shrink-0 items-center gap-2 px-1 py-2 text-xs font-mono transition-colors","focus-visible:outline-1 focus-visible:outline-offset-2 focus-visible:outline-[var(--term-electric)]",g?"text-[var(--term-electric-fg)]":"text-[var(--term-text-muted)] hover:text-[var(--term-text)]","theme-glass:font-medium theme-glass:font-sans theme-glass:rounded-lg theme-glass:px-3 theme-glass:py-2 sm:theme-glass:px-4 sm:theme-glass:text-sm",g&&"theme-glass:bg-[var(--sc-bg-elevated)] theme-glass:text-[var(--sc-text-primary)]",!g&&"theme-glass:hover:text-[var(--sc-text-secondary)]"),children:[a.icon,(0,b.jsx)("span",{children:a.label}),a.locked&&(0,b.jsx)(d.Lock,{size:11,className:"text-[var(--term-warn)] theme-glass:text-[var(--sc-coral)]"}),void 0!==a.count&&a.count>0&&(0,b.jsxs)("span",{className:"text-[var(--term-text-muted)] theme-glass:ml-0.5 theme-glass:rounded-full theme-glass:bg-[var(--sc-coral)]/15 theme-glass:px-1.5 theme-glass:py-0.5 theme-glass:text-[10px] theme-glass:font-bold theme-glass:text-[var(--sc-coral)]",children:[(0,b.jsxs)("span",{className:"theme-glass:hidden",children:["(",a.count,")"]}),(0,b.jsx)("span",{className:"hidden theme-glass:inline",children:a.count})]}),g&&(0,b.jsx)("span",{"aria-hidden":!0,className:"absolute -bottom-px left-0 right-0 h-px bg-[var(--term-electric)] theme-glass:hidden"})]},a.id)})})}function f({eyebrow:a,title:d,subtitle:f,actions:g,tabs:h,activeTab:i,onTabChange:j,className:k}){return(0,b.jsxs)("div",{className:(0,c.cn)("space-y-3 theme-glass:space-y-4",k),children:[(0,b.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between sm:gap-4 theme-glass:gap-3",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsxs)("div",{className:"theme-glass:hidden",children:[a&&(0,b.jsxs)("p",{className:"text-[11px] uppercase tracking-wider text-[var(--term-text-muted)]",children:[(0,b.jsx)("span",{className:"text-[var(--term-electric-fg)]",children:"›"})," ",a]}),(0,b.jsxs)("h1",{className:"mt-1 flex items-baseline flex-wrap gap-2 text-base font-mono text-[var(--term-text)] sm:text-lg",children:[(0,b.jsx)("span",{className:"text-[var(--term-electric-fg)]","aria-hidden":!0,children:"$"}),(0,b.jsx)("span",{children:"shieldcortex"}),(0,b.jsx)("span",{className:"text-[var(--term-text-dim)]",children:d.toLowerCase()}),(0,b.jsx)("span",{className:"cli-cursor text-[var(--term-electric-fg)]","aria-hidden":!0})]}),f&&(0,b.jsxs)("p",{className:"mt-1 text-xs text-[var(--term-text-muted)]",children:[(0,b.jsx)("span",{"aria-hidden":!0,children:"#"})," ",f]})]}),(0,b.jsxs)("div",{className:"hidden theme-glass:block",children:[a&&(0,b.jsx)("p",{className:"text-[10px] font-semibold uppercase tracking-[0.2em] text-[var(--sc-coral)] sm:text-[11px]",children:a}),(0,b.jsx)("h1",{className:"mt-1 text-xl font-bold text-[var(--sc-text-primary)] sm:text-2xl",children:d}),f&&(0,b.jsx)("p",{className:"mt-1 text-xs text-[var(--sc-text-secondary)] sm:text-sm",children:f})]})]}),g&&(0,b.jsx)("div",{className:"flex shrink-0 items-center gap-2",children:g})]}),h&&i&&j&&(0,b.jsx)(e,{tabs:h,activeTab:i,onChange:j})]})}a.s(["PageHeader",()=>f],79151)},60210,a=>{"use strict";var b=a.i(16306),c=a.i(64565);let d={critical:"text-[var(--term-danger)]",high:"text-[var(--term-danger)]",medium:"text-[var(--term-warn)]",low:"text-[var(--term-electric-fg)]",safe:"text-[var(--term-neon-fg)]",info:"text-[var(--term-text-muted)]",coral:"text-[var(--term-electric-fg)]",cyan:"text-[var(--term-neon-fg)]",amber:"text-[var(--term-warn)]",muted:"text-[var(--term-text-muted)]"},e={critical:"bg-[var(--term-danger)]",high:"bg-[var(--term-danger)]",medium:"bg-[var(--term-warn)]",low:"bg-[var(--term-electric)]",safe:"bg-[var(--term-neon)]",info:"bg-[var(--term-text-muted)]",coral:"bg-[var(--term-electric)]",cyan:"bg-[var(--term-neon)]",amber:"bg-[var(--term-warn)]",muted:"bg-[var(--term-text-muted)]"},f={critical:"theme-glass:bg-[var(--sc-coral)]/15 theme-glass:border-[var(--sc-coral)]/30",high:"theme-glass:bg-[var(--sc-coral-mid)]/15 theme-glass:border-[var(--sc-coral-mid)]/30",medium:"theme-glass:bg-[var(--sc-amber)]/15 theme-glass:border-[var(--sc-amber)]/30",low:"theme-glass:bg-[var(--sc-cyan-mid)]/15 theme-glass:border-[var(--sc-cyan-mid)]/30",safe:"theme-glass:bg-[var(--sc-cyan)]/15 theme-glass:border-[var(--sc-cyan)]/30",info:"theme-glass:bg-[var(--sc-text-muted)]/15 theme-glass:border-[var(--sc-text-muted)]/30",coral:"theme-glass:bg-[var(--sc-coral)]/15 theme-glass:border-[var(--sc-coral)]/30",cyan:"theme-glass:bg-[var(--sc-cyan)]/15 theme-glass:border-[var(--sc-cyan)]/30",amber:"theme-glass:bg-[var(--sc-amber)]/15 theme-glass:border-[var(--sc-amber)]/30",muted:"theme-glass:bg-[var(--sc-surface-interactive)] theme-glass:border-[var(--sc-border)]"};function g({children:a,variant:g="muted",className:h,dot:i=!1,pulse:j=!1}){return(0,b.jsxs)("span",{className:(0,c.cn)("inline-flex items-center gap-1.5 px-1 text-[11px] font-semibold uppercase tracking-wider whitespace-nowrap",d[g],"theme-glass:rounded-full theme-glass:border theme-glass:px-2.5 theme-glass:py-0.5",f[g],h),children:[i&&(0,b.jsx)("span",{className:(0,c.cn)("h-1.5 w-1.5 rounded-full",e[g],j&&"animate-pulse"),"aria-hidden":!0}),(0,b.jsx)("span",{"aria-hidden":!0,className:"text-[var(--term-text-muted)] theme-glass:hidden",children:"["}),(0,b.jsx)("span",{children:a}),(0,b.jsx)("span",{"aria-hidden":!0,className:"text-[var(--term-text-muted)] theme-glass:hidden",children:"]"})]})}function h(a){let b=a.toUpperCase();return"CRITICAL"===b?"critical":"HIGH"===b?"high":"MEDIUM"===b?"medium":"LOW"===b?"low":"SAFE"===b?"safe":"info"}a.s(["Badge",()=>g,"riskVariant",()=>h])},77115,a=>{"use strict";let b=(0,a.i(70694).default)("clock-3",[["path",{d:"M12 6v6h4",key:"135r8i"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);a.s(["Clock3",()=>b],77115)},6750,a=>{"use strict";let b=(0,a.i(70694).default)("file-text",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);a.s(["FileText",()=>b],6750)},38883,a=>{"use strict";var b=a.i(40458),c=a.i(66807),d=a.i(14220),e=a.i(86044),f=a.i(4708),g=a.i(76614);let h=process.env.NEXT_PUBLIC_API_URL||"http://localhost:3001";async function i(a){let b=new URLSearchParams;a?.startTime&&b.set("startTime",a.startTime),a?.endTime&&b.set("endTime",a.endTime),a?.source&&b.set("source",a.source),a?.firewallResult&&b.set("firewallResult",a.firewallResult),a?.project&&b.set("project",a.project),a?.limit&&b.set("limit",a.limit.toString());let c=await (0,e.authFetch)(`${h}/api/v1/audit?${b}`);if(!c.ok)throw Error(await (0,e.readApiError)(c,"Failed to fetch audit logs"));return c.json()}async function j(a,b){let c=new URLSearchParams({timeRange:a});b&&c.set("project",b);let d=await (0,e.authFetch)(`${h}/api/v1/audit/stats?${c}`);if(!d.ok)throw Error(await (0,e.readApiError)(d,"Failed to fetch audit stats"));return d.json()}async function k(a="pending",b=50,c,d){let f=new URLSearchParams({status:a,limit:b.toString()});c&&f.set("project",c),d&&f.set("sourceType",d);let g=await (0,e.authFetch)(`${h}/api/v1/quarantine?${f}`);if(!g.ok)throw Error(await (0,e.readApiError)(g,"Failed to fetch quarantine"));return g.json()}async function l(a){let b=await (0,e.authFetch)(`${h}/api/v1/quarantine/${a}/approve`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({reviewedBy:"dashboard"})});if(!b.ok)throw Error(await (0,e.readApiError)(b,"Failed to approve quarantined item"));return b.json()}async function m(a,b){let c=await (0,e.authFetch)(`${h}/api/v1/quarantine/${a}/reject`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({reviewedBy:"dashboard",notes:b})});if(!c.ok)throw Error(await (0,e.readApiError)(c,"Failed to reject quarantined item"));return c.json()}async function n(a){let b=await (0,e.authFetch)(`${h}/api/v1/quarantine/bulk-approve`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:a,reviewedBy:"dashboard"})});if(!b.ok)throw Error(await (0,e.readApiError)(b,"Failed to bulk approve quarantined items"));return b.json()}async function o(a){let b=await (0,e.authFetch)(`${h}/api/v1/quarantine/bulk-reject`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:a,reviewedBy:"dashboard"})});if(!b.ok)throw Error(await (0,e.readApiError)(b,"Failed to bulk reject quarantined items"));return b.json()}async function p(){let a=await (0,e.authFetch)(`${h}/api/v1/review-copilot/status`);if(!a.ok)throw Error(await (0,e.readApiError)(a,"Failed to fetch Local AI status"));return a.json()}async function q(a){let b=await (0,e.authFetch)(`${h}/api/v1/quarantine/${a}/annotate`,{method:"POST",headers:{"Content-Type":"application/json"}});if(!b.ok)throw Error(await (0,e.readApiError)(b,"Failed to explain quarantined item"));return b.json()}async function r(a){let b=await (0,e.authFetch)(`${h}/api/v1/quarantine/annotate-pending`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!b.ok)throw Error(await (0,e.readApiError)(b,"Failed to explain pending quarantine"));return b.json()}function s(a){let{isConnected:c}=(0,g.useWebSocketStatus)();return(0,b.useQuery)({queryKey:["audit-logs",a],queryFn:()=>i(a),refetchInterval:(0,f.wsGatedInterval)(c,3e4),retry:2})}function t(a="24h",c){let{isConnected:d}=(0,g.useWebSocketStatus)();return(0,b.useQuery)({queryKey:["audit-stats",a,c],queryFn:()=>j(a,c),refetchInterval:(0,f.wsGatedInterval)(d,3e4),retry:2})}function u(a="pending",c=50,d,e){let{isConnected:h}=(0,g.useWebSocketStatus)();return(0,b.useQuery)({queryKey:["quarantine",a,c,d,e],queryFn:()=>k(a,c,d,e),refetchInterval:(0,f.wsGatedInterval)(h,3e4),retry:2})}function v(){return(0,b.useQuery)({queryKey:["review-copilot-status"],queryFn:p,refetchInterval:3e4,retry:2})}function w(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:l,onSuccess:()=>{a.invalidateQueries({queryKey:["quarantine"]}),a.invalidateQueries({queryKey:["audit-stats"]}),a.invalidateQueries({queryKey:["memories"]}),a.invalidateQueries({queryKey:["stats"]}),a.invalidateQueries({queryKey:["review-queue"]}),a.invalidateQueries({queryKey:["openclaw-sessions"]}),a.invalidateQueries({queryKey:["quality"]})}})}function x(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:({id:a,notes:b})=>m(a,b),onSuccess:()=>{a.invalidateQueries({queryKey:["quarantine"]}),a.invalidateQueries({queryKey:["audit-stats"]}),a.invalidateQueries({queryKey:["review-queue"]})}})}function y(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:n,onSuccess:()=>{a.invalidateQueries({queryKey:["quarantine"]}),a.invalidateQueries({queryKey:["audit-stats"]}),a.invalidateQueries({queryKey:["memories"]}),a.invalidateQueries({queryKey:["stats"]}),a.invalidateQueries({queryKey:["review-queue"]}),a.invalidateQueries({queryKey:["openclaw-sessions"]}),a.invalidateQueries({queryKey:["quality"]})}})}function z(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:o,onSuccess:()=>{a.invalidateQueries({queryKey:["quarantine"]}),a.invalidateQueries({queryKey:["audit-stats"]}),a.invalidateQueries({queryKey:["review-queue"]})}})}function A(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:q,onSuccess:()=>{a.invalidateQueries({queryKey:["quarantine"]}),a.invalidateQueries({queryKey:["review-copilot-status"]})}})}function B(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:r,onSuccess:()=>{a.invalidateQueries({queryKey:["quarantine"]}),a.invalidateQueries({queryKey:["review-copilot-status"]})}})}a.s(["useAnnotatePendingQuarantine",()=>B,"useAnnotateQuarantine",()=>A,"useApproveQuarantine",()=>w,"useAuditLogs",()=>s,"useAuditStats",()=>t,"useBulkApproveQuarantine",()=>y,"useBulkRejectQuarantine",()=>z,"useQuarantine",()=>u,"useRejectQuarantine",()=>x,"useReviewCopilotStatus",()=>v])}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=dashboard_14d63e36._.js.map
|