shieldcortex 4.14.9 → 4.14.11
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/prerender-manifest.json +3 -3
- package/dashboard/.next/standalone/dashboard/.next/required-server-files.json +4 -4
- 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.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.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.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.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.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/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.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.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.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.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.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.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.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.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.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.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.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.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_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.html +9 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.rsc +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_index.segment.rsc +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_tree.segment.rsc +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.rsc +19 -16
- 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 +7 -7
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_full.segment.rsc +19 -16
- 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 +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_tree.segment.rsc +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.rsc +19 -16
- 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 +7 -7
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_full.segment.rsc +19 -16
- 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 +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_tree.segment.rsc +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.rsc +3 -2
- 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 +3 -2
- 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 +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_tree.segment.rsc +3 -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 +21 -17
- 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 +7 -7
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_full.segment.rsc +21 -17
- 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 +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_tree.segment.rsc +3 -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 +21 -17
- 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 +7 -7
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_full.segment.rsc +21 -17
- 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 +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_tree.segment.rsc +3 -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 +21 -17
- 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 +7 -7
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_full.segment.rsc +21 -17
- 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 +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_tree.segment.rsc +3 -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 +21 -17
- 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 +7 -7
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_full.segment.rsc +21 -17
- 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 +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_tree.segment.rsc +3 -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 +21 -17
- 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 +7 -7
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_full.segment.rsc +21 -17
- 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 +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_tree.segment.rsc +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.html +9 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.rsc +26 -21
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory/__PAGE__.segment.rsc +3 -3
- 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 +7 -7
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_full.segment.rsc +26 -21
- 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 +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_tree.segment.rsc +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.html +9 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.rsc +25 -20
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview/__PAGE__.segment.rsc +3 -3
- 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 +7 -7
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_full.segment.rsc +25 -20
- 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 +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_tree.segment.rsc +3 -2
- 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 +21 -17
- 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 +7 -7
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_full.segment.rsc +21 -17
- 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 +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_tree.segment.rsc +3 -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 +21 -17
- 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 +7 -7
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_full.segment.rsc +21 -17
- 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 +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_tree.segment.rsc +3 -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 +21 -17
- 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 +7 -7
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_full.segment.rsc +21 -17
- 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 +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_tree.segment.rsc +3 -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 +21 -17
- 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 +7 -7
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_full.segment.rsc +21 -17
- 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 +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_tree.segment.rsc +3 -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 +21 -17
- 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 +7 -7
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_full.segment.rsc +21 -17
- 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 +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_tree.segment.rsc +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.html +9 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.rsc +20 -17
- 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 +7 -7
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_full.segment.rsc +20 -17
- 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 +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_tree.segment.rsc +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.html +9 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.rsc +23 -17
- 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 +7 -7
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_full.segment.rsc +23 -17
- 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 +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_tree.segment.rsc +3 -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 +21 -17
- 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 +7 -7
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_full.segment.rsc +21 -17
- 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 +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_tree.segment.rsc +3 -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 +20 -17
- 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 +7 -7
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_full.segment.rsc +20 -17
- 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 +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_tree.segment.rsc +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.html +9 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.rsc +23 -17
- 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 +7 -7
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_full.segment.rsc +23 -17
- 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 +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_tree.segment.rsc +3 -2
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/9f1d4_lucide-react_dist_esm_icons_3a8e61d9._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__7d500b5a._.js +9 -1
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_1c5148b9._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_204d1c9e._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_30ecb37e._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_415e5b1b._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_442a0173._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_64f63df9._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_6999a855._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_7cb6f257._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_c219bf07._.js +8 -8
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_c343baff._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_app_(dashboard)_overview_page_tsx_8c105626._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_components_protection_ProtectionOverview_tsx_54554a97._.js +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_components_settings_SettingsView_tsx_16dc83a7._.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_d191b6dc._.js +3 -0
- package/dashboard/.next/standalone/dashboard/.next/server/pages/404.html +9 -1
- package/dashboard/.next/standalone/dashboard/.next/server/pages/500.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/server-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/server-reference-manifest.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/2473c16c0c2f6b5f.css +2 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/5f18f98891076bc5.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/75769fa28c7a2e99.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/8d4a0f601450b091.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/a092294b7089c7a6.js +15 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/{b308a787e8cbc2a9.js → b053d5f11418d645.js} +2 -2
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/bf725d638cce46d4.css +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/d05e311dfccb5729.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/e9f4b8da354f1005.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/f645461768b1089e.js +1 -0
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/fe6075d947234b5d.js +1 -0
- package/dashboard/.next/standalone/dashboard/server.js +1 -1
- package/dist/setup/openclaw.d.ts +1 -1
- package/dist/setup/openclaw.js +88 -42
- package/package.json +1 -1
- package/plugins/openclaw/dist/openclaw.plugin.json +1 -1
- package/scripts/lib/prompt-sanitiser.mjs +71 -0
- package/scripts/prompt-recall-hook.mjs +8 -1
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_01f6ceb0._.js +0 -3
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_20c6acea._.js +0 -3
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_2a8eef6b._.js +0 -3
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_35a9932a._.js +0 -3
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_37f17371._.js +0 -3
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_77cb2b63._.js +0 -3
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_a16ef10a._.js +0 -3
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_f9cd1dc2._.js +0 -3
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_fefd3b85._.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/015dc64369f26b7d.css +0 -3
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/2fe84829530e61a3.js +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/34d0309a4e34b084.js +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/3b7fdf1ee828254c.js +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/4c90ebd2c08cd656.js +0 -15
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/4d4af0cecaef56f2.js +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/4eb86dc2f379d3ca.js +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/6ea97c8dc9e30ea5.js +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/74ea1a87751e93a3.js +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/910628c23329a773.js +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/bdb50889a1c1ab37.js +0 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/d0bf5ccba09917dd.js +0 -1
- /package/dashboard/.next/standalone/dashboard/.next/static/{QEifNOVKz0DMEv8i5i_Fn → InYbgmj1l661AgpmCj6zr}/_buildManifest.js +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{QEifNOVKz0DMEv8i5i_Fn → InYbgmj1l661AgpmCj6zr}/_clientMiddlewareManifest.json +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{QEifNOVKz0DMEv8i5i_Fn → InYbgmj1l661AgpmCj6zr}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,42424,e=>{"use strict";var t=e.i(27493),s=e.i(16871),r=e.i(4),a=e.i(53615),c=e.i(24929);let n=(0,c.default)("cloud",[["path",{d:"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z",key:"p7xjir"}]]),i=(0,c.default)("credit-card",[["rect",{width:"20",height:"14",x:"2",y:"5",rx:"2",key:"ynyp8z"}],["line",{x1:"2",x2:"22",y1:"10",y2:"10",key:"1b3vmo"}]]),l=(0,c.default)("plug",[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z",key:"1xoxul"}],["path",{d:"M9 8V2",key:"14iosj"}]]);var d=e.i(54130),o=e.i(40950),x=e.i(16467),u=e.i(95659),m=e.i(81523),p=e.i(18509),v=e.i(15771),h=e.i(19331),y=e.i(7571),g=e.i(84012);let b=(0,c.default)("key-round",[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]]);var j=e.i(67307);let f=(0,c.default)("server",[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]]);var N=e.i(51069),w=e.i(45688),k=e.i(71921),C=e.i(1235),S=e.i(88969);let E=[],A="http://localhost:3001";function M(){return(0,w.useQuery)({queryKey:["cloud-config"],queryFn:async()=>{var e;let t,s,r=await (0,S.authFetch)(`${A}/api/cloud/config`);if(!r.ok)throw Error(await (0,S.readApiError)(r,"Failed to fetch cloud config"));return t=(e=await r.json()).syncControls&&"object"==typeof e.syncControls?e.syncControls:{},s=e.openclawMemory&&"object"==typeof e.openclawMemory?e.openclawMemory:{},{enabled:!!e.enabled,apiKeySet:!!e.apiKeySet,baseUrl:"string"==typeof e.baseUrl?e.baseUrl:"https://api.shieldcortex.ai",syncControls:{projectMode:"projectMode"in t&&("include"===t.projectMode||"exclude"===t.projectMode)?t.projectMode:"all",projects:Array.isArray(t.projects)?t.projects.filter(e=>"string"==typeof e):E,contentMode:"contentMode"in t&&"metadata"===t.contentMode?"metadata":"full",excludeSensitive:"excludeSensitive"in t&&!!t.excludeSensitive},openclawMemory:{autoMemory:"autoMemory"in s&&!!s.autoMemory,dedupe:"dedupe"in s&&!!s.dedupe,noveltyThreshold:"noveltyThreshold"in s&&"number"==typeof s.noveltyThreshold?s.noveltyThreshold:.88,maxRecent:"maxRecent"in s&&"number"==typeof s.maxRecent?s.maxRecent:300}}},refetchInterval:3e4})}let q="http://localhost:3001",T=[];function $(){return(0,w.useQuery)({queryKey:["cloud-sync-status"],queryFn:async()=>{var e;let t,s,r,a,c=await (0,S.authFetch)(`${q}/api/cloud/sync-status`);if(!c.ok)throw Error(await (0,S.readApiError)(c,"Failed to fetch sync status"));return t=(e=await c.json()).controls&&"object"==typeof e.controls?e.controls:{},r="byKind"in(s=e.queue&&"object"==typeof e.queue?e.queue:{})&&s.byKind&&"object"==typeof s.byKind?s.byKind:{},a=e=>({pending:Number(r[e]?.pending??0),failed:Number(r[e]?.failed??0),synced:Number(r[e]?.synced??0)}),{enabled:!!e.enabled,apiKeySet:!!e.apiKeySet,baseUrl:"string"==typeof e.baseUrl?e.baseUrl:"https://api.shieldcortex.ai",featureEnabled:!!e.featureEnabled,requiredTier:"pro"===e.requiredTier||"team"===e.requiredTier||"enterprise"===e.requiredTier?e.requiredTier:"free",controls:{projectMode:"projectMode"in t&&("include"===t.projectMode||"exclude"===t.projectMode)?t.projectMode:"all",projects:Array.isArray(t.projects)?t.projects.filter(e=>"string"==typeof e):T,contentMode:"contentMode"in t&&"metadata"===t.contentMode?"metadata":"full",excludeSensitive:"excludeSensitive"in t&&!!t.excludeSensitive},lastSyncAt:"string"==typeof e.lastSyncAt||null===e.lastSyncAt?e.lastSyncAt??null:null,device:{id:e.device&&"object"==typeof e.device&&"id"in e.device&&"string"==typeof e.device.id?e.device.id:"unknown",name:e.device&&"object"==typeof e.device&&"name"in e.device&&"string"==typeof e.device.name?e.device.name:"Unknown device",platform:e.device&&"object"==typeof e.device&&"platform"in e.device&&"string"==typeof e.device.platform?e.device.platform:"unknown"},queue:{pending:Number(s.pending??0),failed:Number(s.failed??0),synced:Number(s.synced??0),byKind:{audit:a("audit"),quarantine:a("quarantine"),memory:a("memory"),graph:a("graph"),unknown:a("unknown")},oldestPendingAt:"string"==typeof s.oldestPendingAt||null===s.oldestPendingAt?s.oldestPendingAt??null:null,nextRetryAt:"string"==typeof s.nextRetryAt||null===s.nextRetryAt?s.nextRetryAt??null:null,lastError:"string"==typeof s.lastError||null===s.lastError?s.lastError??null:null,lastErrorKind:"audit"===s.lastErrorKind||"quarantine"===s.lastErrorKind||"memory"===s.lastErrorKind||"graph"===s.lastErrorKind||"unknown"===s.lastErrorKind?s.lastErrorKind:null,latestFailureAt:"string"==typeof s.latestFailureAt||null===s.latestFailureAt?s.latestFailureAt??null:null}}},refetchInterval:3e4,staleTime:15e3})}var P=e.i(63312),R=e.i(50279);function F(e){let t=Math.max(0,Math.floor((Date.now()-new Date(e).getTime())/1e3));if(t<60)return`${t}s ago`;let s=Math.floor(t/60);if(s<60)return`${s}m ago`;let r=Math.floor(s/60);if(r<24)return`${r}h ago`;let a=Math.floor(r/24);return`${a}d ago`}function L(e){let t=Math.max(0,Math.floor((new Date(e).getTime()-Date.now())/1e3));if(t<60)return`in ${t}s`;let s=Math.floor(t/60);if(s<60)return`in ${s}m`;let r=Math.floor(s/60);if(r<24)return`in ${r}h`;let a=Math.floor(r/24);return`in ${a}d`}function K(){var e;let{data:s,isLoading:r}=$(),{data:a}=(0,P.useLicenseStatus)();if(r||!s)return null;let c="border-[var(--sc-border)] bg-[var(--sc-bg-surface)]/70 text-[var(--sc-text-primary)]",i="Cloud sync disabled",l="Enable cloud sync and activate a Team licence to start replicating local data.",d=n;(e=s.lastSyncAt)&&(Date.now(),new Date(e).getTime());let o=s.queue.byKind.memory.pending+s.queue.byKind.graph.pending,x=s.queue.byKind.memory.failed+s.queue.byKind.graph.failed,u=s.queue.byKind.audit.failed+s.queue.byKind.quarantine.failed+s.queue.byKind.unknown.failed;return s.enabled&&s.apiKeySet&&!s.featureEnabled?(c="border-[var(--sc-amber)]/30 bg-[var(--sc-amber)]/10 text-[var(--sc-amber)]",i="Cloud configured but licence locked",l=`Cloud sync requires the ${R.TIER_LABELS[s.requiredTier]} tier. Current tier: ${R.TIER_LABELS[a?.tier??"free"]}.`,d=b):s.enabled&&s.apiKeySet&&o>0&&x>0?(c="border-[var(--sc-coral)]/30 bg-[var(--sc-coral)]/10 text-[var(--sc-coral)]",i="Cloud sync needs attention",l=s.queue.lastError??"One or more queued sync jobs are failing.",d=N.ShieldAlert):s.enabled&&s.apiKeySet&&x>0?(c="border-[var(--sc-amber)]/30 bg-[var(--sc-amber)]/10 text-[var(--sc-amber)]",i=`${x} failed sync job${1===x?"":"s"} need clearing`,l=s.queue.lastError?`${s.queue.lastError}${s.queue.latestFailureAt?` Last failure ${F(s.queue.latestFailureAt)}.`:""}`:"These items exhausted retries and won't sync automatically. Clear them or investigate the cause.",d=p.AlertTriangle):s.enabled&&s.apiKeySet&&o>0?(c="border-[var(--sc-amber)]/30 bg-[var(--sc-amber)]/10 text-[var(--sc-amber)]",i="Cloud sync is catching up",l=s.queue.nextRetryAt?`Next retry ${L(s.queue.nextRetryAt)}.`:"Queued jobs are waiting to flush.",d=j.RefreshCw):s.enabled&&s.apiKeySet&&(c="border-[var(--sc-cyan)]/30 bg-[var(--sc-cyan)]/10 text-[var(--sc-cyan)]",i="Cloud sync healthy",l=s.lastSyncAt?`Last successful sync ${F(s.lastSyncAt)}.`:"Connected and ready to sync.",u>0&&(l+=` Auxiliary audit/quarantine history: ${u} failed job${1===u?"":"s"}.`),d=v.CheckCircle2),(0,t.jsx)("div",{className:`rounded-2xl border p-4 ${c}`,children:(0,t.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)(d,{size:18,className:"mt-0.5 shrink-0"}),(0,t.jsxs)("div",{children:[(0,t.jsx)("h2",{className:"text-sm font-semibold",children:i}),(0,t.jsx)("p",{className:"mt-1 text-sm opacity-90",children:l})]})]}),x>0&&0===o&&(0,t.jsx)(_,{})]})})}function I({label:e,value:s,detail:r,icon:a}){return(0,t.jsxs)("div",{className:"glass-card p-4",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsx)("span",{className:"text-xs uppercase tracking-[0.2em] text-[var(--sc-text-muted)]",children:e}),(0,t.jsx)(a,{size:15,className:"text-[var(--sc-text-muted)]"})]}),(0,t.jsx)("div",{className:"mt-2 text-2xl font-semibold text-[var(--sc-text-primary)]",children:s}),(0,t.jsx)("div",{className:"mt-1 text-xs text-[var(--sc-text-secondary)]",children:r})]})}function z({label:e,pending:s,failed:r,synced:a}){return(0,t.jsxs)("div",{className:"rounded-xl border border-[var(--sc-border)] bg-[var(--sc-bg-deep)]/60 p-3",children:[(0,t.jsx)("div",{className:"text-sm font-medium text-[var(--sc-text-primary)]",children:e}),(0,t.jsxs)("div",{className:"mt-3 grid grid-cols-3 gap-2 text-xs",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-[var(--sc-text-muted)]",children:"Pending"}),(0,t.jsx)("div",{className:"mt-1 font-semibold text-[var(--sc-amber)]",children:s})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-[var(--sc-text-muted)]",children:"Failed"}),(0,t.jsx)("div",{className:"mt-1 font-semibold text-[var(--sc-coral)]",children:r})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-[var(--sc-text-muted)]",children:"Synced"}),(0,t.jsx)("div",{className:"mt-1 font-semibold text-[var(--sc-cyan)]",children:a})]})]})]})}function O(){let e,{data:s}=M(),{data:a}=(0,w.useQuery)({queryKey:["cloud-projects"],queryFn:async()=>{let e=await (0,S.authFetch)(`${A}/api/cloud/projects`);if(!e.ok)throw Error(await (0,S.readApiError)(e,"Failed to fetch cloud projects"));return e.json()},staleTime:3e4}),c=(e=(0,C.useQueryClient)(),(0,k.useMutation)({mutationFn:async e=>{let t=await (0,S.authFetch)(`${A}/api/cloud/config`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw Error(await (0,S.readApiError)(t,"Failed to update cloud config"));return t.json()},onSuccess:()=>{e.invalidateQueries({queryKey:["cloud-config"]}),e.invalidateQueries({queryKey:["cloud-sync-status"]})}})),[n,i]=(0,r.useState)(null),l=a?.projects??[],d=n??s?.syncControls??{projectMode:"all",projects:[],contentMode:"full",excludeSensitive:!1},o="all"!==d.projectMode,[x,u]=(0,r.useState)("idle");async function m(){try{await c.mutateAsync({cloudSyncProjectMode:d.projectMode,cloudSyncProjects:d.projects,cloudSyncContentMode:d.contentMode,cloudSyncExcludeSensitive:d.excludeSensitive}),i(null),u("saved"),setTimeout(()=>u("idle"),2e3)}catch{u("error"),setTimeout(()=>u("idle"),3e3)}}return(0,t.jsxs)("div",{className:"glass-card-strong p-5",children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h2",{className:"text-lg font-semibold text-[var(--sc-text-primary)]",children:"Sync Controls"}),(0,t.jsx)("p",{className:"mt-1 text-sm text-[var(--sc-text-secondary)]",children:"Decide what leaves this device before it hits the cloud replica."})]}),(0,t.jsx)("button",{type:"button",onClick:()=>void m(),disabled:c.isPending,className:`rounded-lg border px-3 py-2 text-sm font-medium transition disabled:cursor-not-allowed disabled:opacity-50 ${"saved"===x?"border-[var(--sc-cyan)]/50 bg-[var(--sc-cyan)]/20 text-[var(--sc-cyan)]":"error"===x?"border-[var(--sc-coral)]/50 bg-[var(--sc-coral)]/20 text-[var(--sc-coral)]":"border-[var(--sc-cyan)]/30 bg-[var(--sc-cyan)]/10 text-[var(--sc-cyan)] hover:bg-[var(--sc-cyan)]/20"}`,children:c.isPending?"Saving...":"saved"===x?"✓ Saved":"error"===x?"Failed to save":"Save controls"})]}),(0,t.jsxs)("div",{className:"mt-5 grid gap-4",children:[(0,t.jsxs)("div",{className:"rounded-xl border border-[var(--sc-border)] bg-[var(--sc-bg-deep)]/60 p-4",children:[(0,t.jsx)("div",{className:"text-xs uppercase tracking-[0.2em] text-[var(--sc-text-muted)]",children:"Content mode"}),(0,t.jsxs)("div",{className:"mt-2 flex flex-wrap gap-2 text-[11px] text-[var(--sc-text-secondary)]",children:[(0,t.jsx)("span",{className:"rounded-full border border-[var(--sc-border)] bg-[var(--sc-bg-surface)]/60 px-2.5 py-1",children:"metadata"===d.contentMode?"Metadata only":"Full content"}),(0,t.jsxs)("span",{className:"rounded-full border border-[var(--sc-border)] bg-[var(--sc-bg-surface)]/60 px-2.5 py-1",children:["Sensitive filter ",d.excludeSensitive?"on":"off"]})]}),(0,t.jsxs)("div",{className:"mt-3 grid gap-2 md:grid-cols-2",children:[(0,t.jsxs)("label",{className:`rounded-lg border p-3 text-sm ${"full"===d.contentMode?"border-[var(--sc-cyan)]/40 bg-[var(--sc-cyan)]/10 text-[var(--sc-cyan)]":"border-[var(--sc-border)] text-[var(--sc-text-primary)]"}`,children:[(0,t.jsx)("input",{type:"radio",className:"mr-2",checked:"full"===d.contentMode,onChange:()=>i(e=>({...e??d,contentMode:"full"}))}),"Full content",(0,t.jsx)("div",{className:"mt-1 text-xs text-[var(--sc-text-secondary)]",children:"Titles and memory bodies replicate to cloud."})]}),(0,t.jsxs)("label",{className:`rounded-lg border p-3 text-sm ${"metadata"===d.contentMode?"border-[var(--sc-cyan)]/40 bg-[var(--sc-cyan)]/10 text-[var(--sc-cyan)]":"border-[var(--sc-border)] text-[var(--sc-text-primary)]"}`,children:[(0,t.jsx)("input",{type:"radio",className:"mr-2",checked:"metadata"===d.contentMode,onChange:()=>i(e=>({...e??d,contentMode:"metadata"}))}),"Metadata only",(0,t.jsx)("div",{className:"mt-1 text-xs text-[var(--sc-text-secondary)]",children:"Projects, tags, salience, and graph remain; body content is redacted."})]})]})]}),(0,t.jsxs)("div",{className:"rounded-xl border border-[var(--sc-border)] bg-[var(--sc-bg-deep)]/60 p-4",children:[(0,t.jsx)("div",{className:"text-xs uppercase tracking-[0.2em] text-[var(--sc-text-muted)]",children:"Project scope"}),(0,t.jsx)("div",{className:"mt-3 flex flex-wrap gap-2",children:["all","include","exclude"].map(e=>(0,t.jsx)("button",{type:"button",onClick:()=>i(t=>({...t??d,projectMode:e})),className:`rounded-full border px-3 py-1.5 text-xs font-medium uppercase tracking-wide ${d.projectMode===e?"border-[var(--sc-cyan)]/40 bg-[var(--sc-cyan)]/10 text-[var(--sc-cyan)]":"border-[var(--sc-border)] bg-[var(--sc-bg-surface)]/60 text-[var(--sc-text-primary)]"}`,children:e},e))}),(0,t.jsx)("p",{className:"mt-3 text-xs text-[var(--sc-text-secondary)]",children:"all"===d.projectMode?"All local projects are eligible for sync.":"include"===d.projectMode?"Only the selected projects will sync.":"Selected projects stay local-only."}),o&&(0,t.jsxs)("details",{className:"mt-3 rounded-lg border border-[var(--sc-border)] bg-[var(--sc-bg-surface)]/40 p-3",children:[(0,t.jsxs)("summary",{className:"cursor-pointer list-none text-sm font-medium text-[var(--sc-text-primary)]",children:["Choose projects ",d.projects.length>0?`(${d.projects.length} selected)`:""]}),(0,t.jsx)("div",{className:"mt-3 max-h-48 overflow-y-auto",children:0===l.length?(0,t.jsx)("div",{className:"text-xs text-[var(--sc-text-muted)]",children:"No named projects found in local memory yet."}):(0,t.jsx)("div",{className:"flex flex-wrap gap-2",children:l.map(e=>{let s=d.projects.includes(e.project);return(0,t.jsxs)("button",{type:"button",onClick:()=>{var t;return t=e.project,void i(e=>{let s=e??d,r=s.projects.includes(t)?s.projects.filter(e=>e!==t):[...s.projects,t].sort((e,t)=>e.localeCompare(t));return{...s,projects:r}})},className:`rounded-full border px-3 py-1.5 text-xs ${s?"border-[var(--sc-cyan)]/40 bg-[var(--sc-cyan)]/10 text-[var(--sc-cyan)]":"border-[var(--sc-border)] bg-[var(--sc-bg-deep)]/60 text-[var(--sc-text-primary)]"}`,children:[e.project," ",(0,t.jsxs)("span",{className:"text-[var(--sc-text-muted)]",children:["(",e.count,")"]})]},e.project)})})})]})]}),(0,t.jsxs)("label",{className:"flex items-start gap-3 rounded-xl border border-[var(--sc-border)] bg-[var(--sc-bg-deep)]/60 p-4 text-sm text-[var(--sc-text-primary)]",children:[(0,t.jsx)("input",{type:"checkbox",className:"mt-0.5",checked:d.excludeSensitive,onChange:e=>i(t=>({...t??d,excludeSensitive:e.target.checked}))}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"font-medium text-[var(--sc-text-primary)]",children:"Exclude sensitive memories"}),(0,t.jsx)("div",{className:"mt-1 text-xs text-[var(--sc-text-secondary)]",children:"Skip memories whose sensitivity level is higher than INTERNAL when syncing to cloud."})]})]}),c.isError&&(0,t.jsx)("div",{className:"rounded-xl border border-[var(--sc-coral)]/30 bg-[var(--sc-coral)]/10 p-3 text-sm text-[var(--sc-coral)]",children:c.error.message})]})]})}function B({sync:e,cloudConfig:s}){return(0,t.jsxs)("div",{className:"glass-card-strong p-5",children:[(0,t.jsx)("h2",{className:"text-lg font-semibold text-[var(--sc-text-primary)]",children:"Current policy"}),(0,t.jsx)("p",{className:"mt-1 text-sm text-[var(--sc-text-secondary)]",children:"The snapshot below is the current cloud posture. Edit it in Sync Controls when you need to change what leaves this device."}),(0,t.jsxs)("div",{className:"mt-4 grid gap-3 md:grid-cols-2",children:[(0,t.jsxs)("div",{className:"rounded-xl border border-[var(--sc-border)] bg-[var(--sc-bg-deep)]/60 p-4",children:[(0,t.jsx)("div",{className:"text-xs uppercase tracking-[0.2em] text-[var(--sc-text-muted)]",children:"Sync scope"}),(0,t.jsx)("div",{className:"mt-2 text-sm font-medium text-[var(--sc-text-primary)]",children:e.controls.projectMode}),(0,t.jsxs)("div",{className:"mt-1 text-xs text-[var(--sc-text-secondary)]",children:[e.controls.projects.length," selected project",1===e.controls.projects.length?"":"s"]})]}),(0,t.jsxs)("div",{className:"rounded-xl border border-[var(--sc-border)] bg-[var(--sc-bg-deep)]/60 p-4",children:[(0,t.jsx)("div",{className:"text-xs uppercase tracking-[0.2em] text-[var(--sc-text-muted)]",children:"Content mode"}),(0,t.jsx)("div",{className:"mt-2 text-sm font-medium text-[var(--sc-text-primary)]",children:"metadata"===e.controls.contentMode?"Metadata only":"Full content"}),(0,t.jsxs)("div",{className:"mt-1 text-xs text-[var(--sc-text-secondary)]",children:["Sensitive filter ",e.controls.excludeSensitive?"enabled":"off"]})]}),(0,t.jsxs)("div",{className:"rounded-xl border border-[var(--sc-border)] bg-[var(--sc-bg-deep)]/60 p-4",children:[(0,t.jsx)("div",{className:"text-xs uppercase tracking-[0.2em] text-[var(--sc-text-muted)]",children:"Cloud endpoint"}),(0,t.jsx)("div",{className:"mt-2 text-sm font-medium text-[var(--sc-text-primary)]",children:e.baseUrl})]}),(0,t.jsxs)("div",{className:"rounded-xl border border-[var(--sc-border)] bg-[var(--sc-bg-deep)]/60 p-4",children:[(0,t.jsx)("div",{className:"text-xs uppercase tracking-[0.2em] text-[var(--sc-text-muted)]",children:"OpenClaw complement"}),(0,t.jsxs)("div",{className:"mt-2 grid grid-cols-2 gap-2 text-xs text-[var(--sc-text-primary)]",children:[(0,t.jsxs)("span",{children:["Auto-memory: ",s.openclawMemory.autoMemory?"On":"Off"]}),(0,t.jsxs)("span",{children:["Dedupe: ",s.openclawMemory.dedupe?"On":"Off"]}),(0,t.jsxs)("span",{children:["Novelty: ",s.openclawMemory.noveltyThreshold]}),(0,t.jsxs)("span",{children:["Recent window: ",s.openclawMemory.maxRecent]})]})]})]})]})}function _(){let e,s=(e=(0,C.useQueryClient)(),(0,k.useMutation)({mutationFn:async()=>{let e=await (0,S.authFetch)(`${q}/api/cloud/sync-queue/clear-failed`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})});if(!e.ok)throw Error(await (0,S.readApiError)(e,"Failed to clear failed items"));return e.json()},onSuccess:()=>{e.invalidateQueries({queryKey:["cloud-sync-status"]})}}));return(0,t.jsx)("button",{type:"button",onClick:()=>s.mutate(),disabled:s.isPending,className:"shrink-0 rounded-lg border border-[var(--sc-border)] bg-[var(--sc-bg-elevated)]/50 px-3 py-1.5 text-xs text-[var(--sc-text-secondary)] transition hover:border-[var(--sc-text-muted)] hover:text-[var(--sc-text-primary)] disabled:opacity-50",children:s.isPending?"Clearing...":s.isSuccess?`Cleared ${s.data?.cleared??0}`:"Clear failed"})}function U(){let{data:e,isLoading:s,refetch:r,isFetching:a}=$(),{data:c,isLoading:i}=M(),{data:l,isLoading:d}=(0,P.useLicenseStatus)();if(s||i||d||!e||!c||!l)return(0,t.jsx)("div",{className:"space-y-6",children:(0,t.jsx)("div",{className:"glass-card p-6 text-sm text-[var(--sc-text-secondary)]",children:"Loading cloud diagnostics..."})});let o=l.tier,x=e.queue.byKind.memory,u=e.queue.byKind.graph,m=x.failed+u.failed,b=e.queue.byKind.audit.failed+e.queue.byKind.quarantine.failed+e.queue.byKind.unknown.failed,N=e.lastSyncAt?F(e.lastSyncAt):"Never",w=m>0?"Needs review":x.pending+u.pending>0?"Catching up":"Healthy";return(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-xs",children:[(0,t.jsx)("span",{className:`rounded-full px-2.5 py-1 font-medium ${R.TIER_BG[o]} ${R.TIER_COLOURS[o]}`,children:R.TIER_LABELS[o]}),(0,t.jsxs)("span",{className:"rounded-full border border-[var(--sc-border)] bg-[var(--sc-bg-surface)]/70 px-2.5 py-1 text-[var(--sc-text-primary)]",children:["Last sync: ",N]}),(0,t.jsx)("button",{type:"button",onClick:()=>void r(),disabled:a,className:"rounded-full border border-[var(--sc-border)] bg-[var(--sc-bg-surface)]/70 px-2.5 py-1 text-[var(--sc-text-muted)] transition hover:text-[var(--sc-text-primary)] disabled:opacity-50",title:"Refresh sync status",children:(0,t.jsx)(j.RefreshCw,{size:12,className:a?"animate-spin":""})})]}),(0,t.jsx)(K,{}),(0,t.jsxs)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-5",children:[(0,t.jsx)(I,{label:"Replication",value:w,detail:`${m} failed \xb7 ${x.pending+u.pending} pending`,icon:j.RefreshCw}),(0,t.jsx)(I,{label:"Device",value:e.device.name,detail:`${e.device.platform} \xb7 ${e.device.id.slice(0,12)}`,icon:f}),(0,t.jsx)(I,{label:"Cloud Target",value:new URL(e.baseUrl).host,detail:e.enabled?"Configured target":"Disabled in config",icon:n}),(0,t.jsx)(I,{label:"Memory Queue",value:x.pending,detail:`${x.failed} failed \xb7 ${x.synced} synced`,icon:y.Database}),(0,t.jsx)(I,{label:"Graph Queue",value:u.pending,detail:`${u.failed} failed \xb7 ${u.synced} synced`,icon:g.GitBranch})]}),(0,t.jsxs)("div",{className:"grid grid-cols-1 gap-6 xl:grid-cols-[1.35fr_0.95fr]",children:[(0,t.jsxs)("div",{className:"glass-card p-5",children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h2",{className:"text-lg font-semibold text-[var(--sc-text-primary)]",children:"Replication"}),(0,t.jsx)("p",{className:"mt-1 text-sm text-[var(--sc-text-secondary)]",children:"Memory and graph sync queues. Items are synced to your cloud replica automatically."})]}),m>0&&(0,t.jsx)(_,{})]}),(0,t.jsxs)("div",{className:"mt-5 grid grid-cols-1 gap-3 md:grid-cols-2",children:[(0,t.jsx)(z,{label:"Memory",...x}),(0,t.jsx)(z,{label:"Graph",...u})]}),(0,t.jsxs)("details",{className:"mt-5 rounded-xl border border-[var(--sc-border)] bg-[var(--sc-bg-deep)]/30 p-4",children:[(0,t.jsx)("summary",{className:"cursor-pointer list-none text-sm font-medium text-[var(--sc-text-primary)]",children:"Advanced transport signals"}),(0,t.jsxs)("div",{className:"mt-4 grid grid-cols-1 gap-3 md:grid-cols-2",children:[(0,t.jsx)(z,{label:"Audit",...e.queue.byKind.audit}),(0,t.jsx)(z,{label:"Quarantine",...e.queue.byKind.quarantine})]}),(0,t.jsx)("div",{className:"mt-4 overflow-hidden rounded-xl border border-[var(--sc-border)]",children:(0,t.jsxs)("table",{className:"min-w-full divide-y divide-[var(--sc-border)] text-sm",children:[(0,t.jsx)("thead",{className:"bg-[var(--sc-bg-deep)]/70 text-[var(--sc-text-secondary)]",children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{className:"px-4 py-3 text-left font-medium",children:"Signal"}),(0,t.jsx)("th",{className:"px-4 py-3 text-left font-medium",children:"Current value"}),(0,t.jsx)("th",{className:"px-4 py-3 text-left font-medium",children:"Why it matters"})]})}),(0,t.jsxs)("tbody",{className:"divide-y divide-[var(--sc-border)] bg-[var(--sc-bg-surface)]/40 text-[var(--sc-text-primary)]",children:[(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{className:"px-4 py-3",children:"Oldest queued job"}),(0,t.jsx)("td",{className:"px-4 py-3",children:e.queue.oldestPendingAt?F(e.queue.oldestPendingAt):"None queued"}),(0,t.jsx)("td",{className:"px-4 py-3 text-[var(--sc-text-secondary)]",children:"If this stays old while pending grows, the local worker is falling behind."})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{className:"px-4 py-3",children:"Next retry"}),(0,t.jsx)("td",{className:"px-4 py-3",children:e.queue.nextRetryAt?L(e.queue.nextRetryAt):"Idle"}),(0,t.jsx)("td",{className:"px-4 py-3 text-[var(--sc-text-secondary)]",children:"Confirms whether failures are retrying normally or the queue is stuck."})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{className:"px-4 py-3",children:"Failed jobs in history"}),(0,t.jsx)("td",{className:"px-4 py-3",children:m}),(0,t.jsx)("td",{className:"px-4 py-3 text-[var(--sc-text-secondary)]",children:"These are retained replication dead-letter records for memory and graph sync."})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{className:"px-4 py-3",children:"Auxiliary failed history"}),(0,t.jsx)("td",{className:"px-4 py-3",children:b}),(0,t.jsx)("td",{className:"px-4 py-3 text-[var(--sc-text-secondary)]",children:"Audit and quarantine retry history is shown here for debugging, but it does not mean memory replication is currently blocked."})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{className:"px-4 py-3",children:"Latest memory sync"}),(0,t.jsx)("td",{className:"px-4 py-3",children:e.lastSyncAt?F(e.lastSyncAt):"Not recorded"}),(0,t.jsx)("td",{className:"px-4 py-3 text-[var(--sc-text-secondary)]",children:"This is the best quick indicator for whether cloud replication is actually current."})]})]})]})})]})]}),(0,t.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,t.jsx)(O,{}),(0,t.jsx)(B,{sync:e,cloudConfig:c}),(0,t.jsxs)("div",{className:"glass-card-strong p-5",children:[(0,t.jsx)("h2",{className:"text-lg font-semibold text-[var(--sc-text-primary)]",children:"Last actionable error"}),(0,t.jsx)("div",{className:"mt-4 rounded-xl border border-[var(--sc-border)] bg-[var(--sc-bg-deep)]/60 p-4",children:e.queue.lastError?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:`flex items-center gap-2 text-sm font-medium ${e.queue.pending>0?"text-[var(--sc-coral)]":"text-[var(--sc-amber)]"}`,children:[(0,t.jsx)(p.AlertTriangle,{size:16}),e.queue.lastErrorKind?`${e.queue.lastErrorKind} queue`:"Unknown queue"]}),(0,t.jsx)("p",{className:"mt-2 text-sm text-[var(--sc-text-primary)]",children:e.queue.lastError}),e.queue.latestFailureAt&&(0,t.jsxs)("div",{className:"mt-2 text-xs text-[var(--sc-text-muted)]",children:["Recorded ",F(e.queue.latestFailureAt)]}),e.queue.nextRetryAt&&(0,t.jsxs)("div",{className:"mt-3 inline-flex items-center gap-1 rounded-full bg-[var(--sc-bg-surface)] px-2 py-1 text-xs text-[var(--sc-text-secondary)]",children:[(0,t.jsx)(h.Clock3,{size:12}),"Retry ",L(e.queue.nextRetryAt)]})]}):(0,t.jsxs)("div",{className:"flex items-center gap-2 text-sm text-[var(--sc-cyan)]",children:[(0,t.jsx)(v.CheckCircle2,{size:16}),"No recent sync errors recorded."]})})]})]})]})]})}var Q=e.i(48615),D=e.i(84982),G=e.i(76490);function H({label:e,description:s,checked:r,pending:a=!1,disabled:c=!1,docsUrl:n,onChange:i}){let l=!c&&!a;return(0,t.jsxs)("label",{className:(0,G.cn)("flex items-start gap-4 border border-[var(--term-border)] bg-[var(--term-surface)] p-4 rounded-md transition-colors",l&&"cursor-pointer hover:border-[var(--term-electric)]",!l&&"opacity-70 cursor-not-allowed"),children:[(0,t.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,t.jsxs)("div",{className:"text-sm text-[var(--term-text)]",children:[(0,t.jsx)("span",{className:"text-[var(--term-text-muted)]","aria-hidden":!0,children:"›"})," ",e]}),(0,t.jsxs)("div",{className:"mt-1 text-xs leading-5 text-[var(--term-text-muted)]",children:[s,n&&(0,t.jsxs)(t.Fragment,{children:[" ",(0,t.jsx)("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:"text-[var(--term-electric-fg)] hover:underline",onClick:e=>e.stopPropagation(),children:"docs →"})]})]})]}),(0,t.jsxs)("div",{className:"flex shrink-0 items-center gap-2 self-start pt-0.5 theme-glass:hidden",children:[a&&(0,t.jsx)(D.Loader2,{size:12,className:"animate-spin text-[var(--term-text-muted)]","aria-hidden":!0}),(0,t.jsx)("span",{className:(0,G.cn)("font-mono text-xs uppercase tracking-wider",r?"text-[var(--term-neon-fg)]":"text-[var(--term-text-muted)]"),children:r?"[on]":"[off]"})]}),(0,t.jsxs)("div",{className:"relative hidden h-6 w-11 shrink-0 items-center theme-glass:flex","aria-hidden":"true",children:[a&&(0,t.jsx)(D.Loader2,{size:12,className:"absolute -left-5 top-1.5 animate-spin text-[var(--sc-text-muted)]"}),(0,t.jsx)("span",{className:(0,G.cn)("absolute inset-0 rounded-full transition-colors",r?"bg-[var(--sc-cyan)]":"bg-[var(--sc-bg-elevated)] border border-[var(--sc-border)]")}),(0,t.jsx)("span",{className:(0,G.cn)("absolute top-0.5 h-5 w-5 rounded-full bg-white shadow transition-transform",r?"translate-x-5":"translate-x-0.5")})]}),(0,t.jsx)("input",{type:"checkbox",checked:r,disabled:!l,onChange:e=>i(e.target.checked),className:"sr-only"})]})}var J=e.i(22534);let V=J.default.env.NEXT_PUBLIC_API_URL||"http://localhost:3001";function X(){let e,{data:s,isLoading:r,error:c}=(0,w.useQuery)({queryKey:["integrations-config"],queryFn:async()=>{let e=await (0,S.gatedFetch)(`${V}/api/cloud/config`);if(!e.ok)throw Error(await (0,S.readApiError)(e,"Failed to load integration toggles"));let t=await e.json();return{openclawAutoMemory:!!t.openclawMemory?.autoMemory,proactiveRecall:!!t.proactiveRecall}},refetchOnWindowFocus:!0}),n=(e=(0,C.useQueryClient)(),(0,k.useMutation)({mutationFn:async e=>{let t=await (0,S.gatedFetch)(`${V}/api/cloud/config`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw Error(await (0,S.readApiError)(t,"Failed to update integration toggle"));return t.json()},onSuccess:()=>{e.invalidateQueries({queryKey:["integrations-config"]}),e.invalidateQueries({queryKey:["cloud-config"]})}})),i=(e,t)=>{n.mutate(e,{onSuccess:()=>Q.toast.success(t),onError:e=>Q.toast.error(e instanceof Error?e.message:"Failed to update toggle")})};if(r)return(0,t.jsxs)(x.GlassCard,{className:"p-6 space-y-4",children:[(0,t.jsx)(a.Skeleton,{className:"h-16 w-full"}),(0,t.jsx)(a.Skeleton,{className:"h-16 w-full"})]});if(c||!s)return(0,t.jsx)(x.GlassCard,{className:"p-6",children:(0,t.jsxs)("p",{className:"text-sm text-[var(--sc-coral)]",children:["Failed to load integration toggles: ",c instanceof Error?c.message:"Unknown error"]})});let l=n.isPending,d=l?Object.keys(n.variables??{})[0]:void 0;return(0,t.jsx)("div",{className:"space-y-4",children:(0,t.jsxs)(x.GlassCard,{className:"p-6",children:[(0,t.jsx)("h3",{className:"text-lg font-semibold text-[var(--sc-text-primary)]",children:"Integrations"}),(0,t.jsx)("p",{className:"mt-1 text-sm text-[var(--sc-text-secondary)]",children:"Both toggles are off by default. They were turned off in v4.11.0 after fleet evidence showed they hurt fast agent loops; turn them on if you run interactive sessions or want richer memory capture."}),(0,t.jsxs)("div",{className:"mt-5 space-y-3",children:[(0,t.jsx)(H,{label:"OpenClaw Auto-Memory",description:"Extract memories from OpenClaw LLM output (decisions, fixes, learnings, preferences). Off by default — turn on for interactive sessions, leave off for fast agent loops.",checked:s.openclawAutoMemory,pending:"openclawAutoMemory"===d,disabled:l&&"openclawAutoMemory"!==d,docsUrl:"https://shieldcortex.ai/docs/integrations#openclaw-auto-memory",onChange:e=>i({openclawAutoMemory:e},e?"OpenClaw auto-memory enabled":"OpenClaw auto-memory disabled")}),(0,t.jsx)(H,{label:"Proactive Recall",description:"Inject relevant SC memory into every prompt. Adds 200–500ms latency and 100–400 tokens per turn. Net-negative for fast agent loops; useful for deep interactive sessions.",checked:s.proactiveRecall,pending:"proactiveRecall"===d,disabled:l&&"proactiveRecall"!==d,docsUrl:"https://shieldcortex.ai/docs/integrations#proactive-recall",onChange:e=>i({proactiveRecall:e},e?"Proactive recall enabled":"Proactive recall disabled")})]}),(0,t.jsxs)("p",{className:"mt-5 text-[11px] text-[var(--sc-text-muted)]",children:["You can also toggle these via the CLI: ",(0,t.jsx)("code",{className:"font-mono",children:"shieldcortex config --openclaw-auto-memory true|false"})," ·"," ",(0,t.jsx)("code",{className:"font-mono",children:"shieldcortex config --proactive-recall true|false"})]})]})})}var Y=e.i(45434),W=e.i(61737),Z=e.i(13808);let ee=J.default.env.NEXT_PUBLIC_API_URL||"http://localhost:3001";function et(e){if(!e)return"never";let t=Date.now()-new Date(e).getTime();if(t<0)return"just now";let s=Math.floor(t/1e3);if(s<60)return`${s}s ago`;let r=Math.floor(s/60);if(r<60)return`${r}m ago`;let a=Math.floor(r/60);if(a<24)return`${a}h ago`;let c=Math.floor(a/24);return`${c}d ago`}function es(){let e,s,r,{data:a,isLoading:c}=(0,w.useQuery)({queryKey:["worker-status"],queryFn:async()=>{let e=await (0,S.gatedFetch)(`${ee}/api/worker/status`);if(!e.ok)throw Error(await (0,S.readApiError)(e,"Failed to load worker status"));return e.json()},refetchInterval:1e4}),{data:n}=(0,w.useQuery)({queryKey:["memory-stats"],queryFn:async()=>{let e=await (0,S.gatedFetch)(`${ee}/api/stats`);if(!e.ok)throw Error(await (0,S.readApiError)(e,"Failed to load memory stats"));return e.json()},refetchInterval:3e4}),i=(e=(0,C.useQueryClient)(),(0,k.useMutation)({mutationFn:async()=>{let e=await (0,S.gatedFetch)(`${ee}/api/worker/trigger-light`,{method:"POST"});if(!e.ok)throw Error(await (0,S.readApiError)(e,"Failed to run light tick"));return e.json()},onSuccess:()=>{e.invalidateQueries({queryKey:["worker-status"]}),e.invalidateQueries({queryKey:["memory-stats"]})}})),l=(s=(0,C.useQueryClient)(),(0,k.useMutation)({mutationFn:async()=>{let e=await (0,S.gatedFetch)(`${ee}/api/worker/trigger-medium`,{method:"POST"});if(!e.ok)throw Error(await (0,S.readApiError)(e,"Failed to run medium tick"));return e.json()},onSuccess:()=>{s.invalidateQueries({queryKey:["worker-status"]}),s.invalidateQueries({queryKey:["memory-stats"]})}})),d=(r=(0,C.useQueryClient)(),(0,k.useMutation)({mutationFn:async()=>{let e=await (0,S.gatedFetch)(`${ee}/api/consolidate`,{method:"POST"});if(!e.ok)throw Error(await (0,S.readApiError)(e,"Failed to run consolidation"));return e.json()},onSuccess:()=>{r.invalidateQueries({queryKey:["worker-status"]}),r.invalidateQueries({queryKey:["memory-stats"]})}})),o=i.isPending||l.isPending||d.isPending;return(0,t.jsxs)(x.GlassCard,{className:"p-6",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(W.Brain,{size:16,className:"text-[var(--sc-cyan)]"}),(0,t.jsx)("h3",{className:"text-lg font-semibold text-[var(--sc-text-primary)]",children:"Memory Maintenance"}),a?.isRunning?(0,t.jsx)(u.Badge,{variant:"cyan",dot:!0,children:"Running"}):c?(0,t.jsx)(u.Badge,{variant:"muted",children:"Loading"}):(0,t.jsx)(u.Badge,{variant:"amber",children:"Stopped"})]}),(0,t.jsx)("p",{className:"mt-2 text-sm text-[var(--sc-text-secondary)]",children:"Background brain worker prunes activation cache, consolidates short-term to long-term, removes low-salience duplicates, and prunes orphan graph entities. Runs automatically on intervals; you can trigger a tick manually below."}),n&&(0,t.jsxs)("div",{className:"mt-4 grid grid-cols-3 gap-3 text-sm",children:[(0,t.jsxs)("div",{className:"rounded-lg border border-[var(--sc-border)] bg-[var(--sc-bg-deep)]/50 p-3",children:[(0,t.jsx)("div",{className:"text-[10px] uppercase tracking-[0.14em] text-[var(--sc-text-muted)]",children:"Healthy"}),(0,t.jsx)("div",{className:"mt-1 text-xl font-semibold text-[var(--sc-cyan)]",children:n.decayDistribution.healthy})]}),(0,t.jsxs)("div",{className:"rounded-lg border border-[var(--sc-border)] bg-[var(--sc-bg-deep)]/50 p-3",children:[(0,t.jsx)("div",{className:"text-[10px] uppercase tracking-[0.14em] text-[var(--sc-text-muted)]",children:"Fading"}),(0,t.jsx)("div",{className:"mt-1 text-xl font-semibold text-[var(--sc-amber)]",children:n.decayDistribution.fading})]}),(0,t.jsxs)("div",{className:"rounded-lg border border-[var(--sc-border)] bg-[var(--sc-bg-deep)]/50 p-3",children:[(0,t.jsx)("div",{className:"text-[10px] uppercase tracking-[0.14em] text-[var(--sc-text-muted)]",children:"Critical"}),(0,t.jsx)("div",{className:"mt-1 text-xl font-semibold text-[var(--sc-coral)]",children:n.decayDistribution.critical})]})]}),(0,t.jsxs)("div",{className:"mt-4 space-y-2 rounded-lg border border-[var(--sc-border)] bg-[var(--sc-bg-deep)]/50 p-3 text-xs",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsx)("span",{className:"text-[var(--sc-text-muted)]",children:"Light tick (every ~5 min)"}),(0,t.jsxs)("span",{className:"text-[var(--sc-text-primary)]",children:[et(a?.lastLightTick??null)," · ",a?.stats.lightTicks??0," runs"]})]}),(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsx)("span",{className:"text-[var(--sc-text-muted)]",children:"Heavy tick (every ~1 hr)"}),(0,t.jsxs)("span",{className:"text-[var(--sc-text-primary)]",children:[et(a?.lastMediumTick??null)," · ",a?.stats.mediumTicks??0," runs"]})]}),(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsx)("span",{className:"text-[var(--sc-text-muted)]",children:"Last consolidation"}),(0,t.jsxs)("span",{className:"text-[var(--sc-text-primary)]",children:[et(a?.lastConsolidation??null)," · ",a?.stats.consolidations??0," runs"]})]})]}),(0,t.jsxs)("div",{className:"mt-4 flex flex-wrap gap-2",children:[(0,t.jsxs)(m.Button,{variant:"outline",size:"sm",onClick:()=>{i.mutate(void 0,{onSuccess:()=>Q.toast.success("Light cleanup triggered"),onError:e=>Q.toast.error(e instanceof Error?e.message:"Failed to trigger light cleanup")})},disabled:o,pulse:i.isPending,children:[(0,t.jsx)(Y.Activity,{size:13}),i.isPending?"Running":"Run light cleanup"]}),(0,t.jsxs)(m.Button,{variant:"outline",size:"sm",onClick:()=>{l.mutate(void 0,{onSuccess:()=>Q.toast.success("Heavy cleanup triggered"),onError:e=>Q.toast.error(e instanceof Error?e.message:"Failed to trigger heavy cleanup")})},disabled:o,pulse:l.isPending,children:[(0,t.jsx)(j.RefreshCw,{size:13}),l.isPending?"Running":"Run heavy cleanup"]}),(0,t.jsxs)(m.Button,{variant:"cyan",size:"sm",onClick:()=>{d.mutate(void 0,{onSuccess:()=>Q.toast.success("Consolidation triggered"),onError:e=>Q.toast.error(e instanceof Error?e.message:"Failed to trigger consolidation")})},disabled:o,pulse:d.isPending,children:[(0,t.jsx)(Z.Sparkles,{size:13}),d.isPending?"Running":"Consolidate now"]})]}),(0,t.jsxs)("p",{className:"mt-3 text-[11px] text-[var(--sc-text-muted)]",children:["CLI equivalent: ",(0,t.jsx)("code",{className:"font-mono",children:"shieldcortex consolidate"}),". Auto-cleanup runs continuously while the dashboard service is up; check"," ",(0,t.jsx)("code",{className:"font-mono",children:"shieldcortex service status"})," if ticks haven't advanced."]})]})}var er=e.i(71259),ea=e.i(77744),ec=e.i(42098);let en=[.1,.2,.3,.4,.5],ei=[7,30,90,180,365];function el(){let e,{projectFilter:s}=(0,ec.useDashboardStore)(),[a,c]=(0,r.useState)(.2),[n,i]=(0,r.useState)(30),[l,d]=(0,r.useState)(!0),[o,u]=(0,r.useState)(s?"current":"all"),[p,v]=(0,r.useState)(null),h=(e=(0,C.useQueryClient)(),(0,k.useMutation)({mutationFn:async e=>{let t=await (0,S.gatedFetch)(`${ee}/api/memories/prune`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw Error(await (0,S.readApiError)(t,"Failed to prune"));return t.json()},onSuccess:t=>{"number"==typeof t.deleted&&(e.invalidateQueries({queryKey:["memory-stats"]}),e.invalidateQueries({queryKey:["integrations-config"]}))}})),y="current"===o&&s?s:void 0;return(0,t.jsxs)(x.GlassCard,{className:"p-6",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(ea.Trash2,{size:16,className:"text-[var(--sc-coral)]"}),(0,t.jsx)("h3",{className:"text-lg font-semibold text-[var(--sc-text-primary)]",children:"Threshold Prune"})]}),(0,t.jsx)("p",{className:"mt-2 text-sm text-[var(--sc-text-secondary)]",children:"Permanently delete memories below a salience threshold older than N days. Always preview first; backup is automatic before any delete."}),(0,t.jsxs)("div",{className:"mt-4 grid gap-4 md:grid-cols-2",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex items-center justify-between text-xs",children:[(0,t.jsx)("span",{className:"text-[var(--sc-text-muted)]",children:"Salience ≤"}),(0,t.jsx)("span",{className:"font-mono text-[var(--sc-text-primary)]",children:a.toFixed(2)})]}),(0,t.jsx)("input",{type:"range",min:0,max:.5,step:.05,value:a,onChange:e=>c(parseFloat(e.target.value)),className:"mt-1 w-full accent-[var(--sc-coral)]","aria-label":"Salience threshold"}),(0,t.jsx)("div",{className:"mt-1 flex gap-1",children:en.map(e=>(0,t.jsx)("button",{type:"button",onClick:()=>c(e),className:`rounded border px-1.5 py-0.5 text-[10px] transition ${a===e?"border-[var(--sc-coral)] text-[var(--sc-coral)]":"border-[var(--sc-border)] text-[var(--sc-text-muted)] hover:text-[var(--sc-text-primary)]"}`,children:e},e))})]}),(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex items-center justify-between text-xs",children:[(0,t.jsx)("span",{className:"text-[var(--sc-text-muted)]",children:"Older than (days)"}),(0,t.jsx)("span",{className:"font-mono text-[var(--sc-text-primary)]",children:n})]}),(0,t.jsx)("input",{type:"range",min:1,max:365,step:1,value:n,onChange:e=>i(parseInt(e.target.value,10)),className:"mt-1 w-full accent-[var(--sc-coral)]","aria-label":"Age threshold"}),(0,t.jsx)("div",{className:"mt-1 flex gap-1",children:ei.map(e=>(0,t.jsxs)("button",{type:"button",onClick:()=>i(e),className:`rounded border px-1.5 py-0.5 text-[10px] transition ${n===e?"border-[var(--sc-coral)] text-[var(--sc-coral)]":"border-[var(--sc-border)] text-[var(--sc-text-muted)] hover:text-[var(--sc-text-primary)]"}`,children:[e,"d"]},e))})]})]}),(0,t.jsxs)("div",{className:"mt-4 flex flex-wrap items-center gap-3 text-xs",children:[(0,t.jsx)("span",{className:"text-[var(--sc-text-muted)]",children:"Scope:"}),(0,t.jsx)("button",{type:"button",onClick:()=>u("all"),className:`rounded-md border px-2 py-1 ${"all"===o?"border-[var(--sc-cyan)] text-[var(--sc-cyan)]":"border-[var(--sc-border)] text-[var(--sc-text-muted)]"}`,children:"All projects"}),(0,t.jsxs)("button",{type:"button",disabled:!s,onClick:()=>u("current"),className:`rounded-md border px-2 py-1 disabled:opacity-40 ${"current"===o?"border-[var(--sc-cyan)] text-[var(--sc-cyan)]":"border-[var(--sc-border)] text-[var(--sc-text-muted)]"}`,children:["Current (",s??"none selected",")"]}),(0,t.jsxs)("label",{className:"ml-auto inline-flex items-center gap-2 text-[var(--sc-text-secondary)]",children:[(0,t.jsx)("input",{type:"checkbox",checked:l,onChange:e=>d(e.target.checked),className:"accent-[var(--sc-cyan)]"}),"Exclude pinned"]})]}),p&&(0,t.jsxs)("div",{className:"mt-4 rounded-lg border border-[var(--sc-border)] bg-[var(--sc-bg-deep)]/50 p-3",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsxs)("span",{className:"text-sm font-semibold text-[var(--sc-text-primary)]",children:[p.matched," memories match"]}),(0,t.jsxs)("span",{className:"text-[10px] text-[var(--sc-text-muted)]",children:["showing first ",p.sample.length]})]}),0===p.sample.length?(0,t.jsx)("div",{className:"mt-2 text-xs text-[var(--sc-text-muted)]",children:"Nothing to prune at these thresholds."}):(0,t.jsx)("ul",{className:"mt-2 max-h-48 space-y-1 overflow-y-auto text-xs",children:p.sample.map(e=>(0,t.jsxs)("li",{className:"flex items-baseline gap-2 text-[var(--sc-text-secondary)]",children:[(0,t.jsxs)("span",{className:"font-mono text-[10px] text-[var(--sc-text-muted)]",children:["#",e.id]}),(0,t.jsx)("span",{className:"truncate flex-1 text-[var(--sc-text-primary)]",children:e.title}),(0,t.jsxs)("span",{className:"text-[10px] text-[var(--sc-text-muted)]",children:[e.project??"(no project)"," · sal ",e.salience.toFixed(2)," · ",e.ageDays,"d"]})]},e.id))})]}),(0,t.jsxs)("div",{className:"mt-4 flex flex-wrap gap-2",children:[(0,t.jsxs)(m.Button,{variant:"outline",size:"sm",onClick:()=>{v(null),h.mutate({salienceLte:a,ageDaysGte:n,excludePinned:l,project:y,dryRun:!0},{onSuccess:e=>{v(e),Q.toast.success(`${e.matched} memories match — review before delete`)},onError:e=>Q.toast.error(e.message)})},disabled:h.isPending,pulse:h.isPending&&h.variables?.dryRun,children:[(0,t.jsx)(er.Eye,{size:13}),h.isPending&&h.variables?.dryRun?"Previewing":"Preview"]}),(0,t.jsxs)(m.Button,{variant:"coral",size:"sm",onClick:()=>{!p||0===p.matched||window.confirm(`Permanently delete ${p.matched} memories? A backup is auto-saved first.`)&&h.mutate({salienceLte:a,ageDaysGte:n,excludePinned:l,project:y,dryRun:!1},{onSuccess:e=>{v(null),Q.toast.success(`Deleted ${e.deleted??0}. Backup: ${e.backupPath??"see ~/.shieldcortex/backups/"}`,{duration:8e3})},onError:e=>Q.toast.error(e.message)})},disabled:!p||0===p.matched||h.isPending,pulse:h.isPending&&h.variables?.dryRun===!1,children:[(0,t.jsx)(ea.Trash2,{size:13}),h.isPending&&h.variables?.dryRun===!1?"Deleting":p?`Delete ${p.matched}`:"Delete"]})]})]})}let ed=(0,c.default)("git-merge",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M6 21V9a9 9 0 0 0 9 9",key:"7kw0sc"}]]);var eo=e.i(6847);function ex(){let e,{projectFilter:s}=(0,ec.useDashboardStore)(),[a,c]=(0,r.useState)(s?"current":"all"),[n,i]=(0,r.useState)(null),l=(e=(0,C.useQueryClient)(),(0,k.useMutation)({mutationFn:async e=>{let t=await (0,S.gatedFetch)(`${ee}/api/memories/dedupe`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw Error(await (0,S.readApiError)(t,"Failed to dedupe"));return t.json()},onSuccess:t=>{"number"==typeof t.merged&&e.invalidateQueries({queryKey:["memory-stats"]})}})),d="current"===a&&s?s:void 0,o=n?.groups.reduce((e,t)=>e+t.removeIds.length,0)??0;return(0,t.jsxs)(x.GlassCard,{className:"p-6",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(ed,{size:16,className:"text-[var(--sc-cyan)]"}),(0,t.jsx)("h3",{className:"text-lg font-semibold text-[var(--sc-text-primary)]",children:"Project Dedupe"})]}),(0,t.jsx)("p",{className:"mt-2 text-sm text-[var(--sc-text-secondary)]",children:"Find clusters of near-duplicate long-term memories (text similarity: title overlap + content Jaccard). Merging keeps the highest-salience representative and deletes the rest. Backup auto-saved before any merge."}),(0,t.jsxs)("div",{className:"mt-4 flex flex-wrap items-center gap-3 text-xs",children:[(0,t.jsx)("span",{className:"text-[var(--sc-text-muted)]",children:"Scope:"}),(0,t.jsx)("button",{type:"button",onClick:()=>c("all"),className:`rounded-md border px-2 py-1 ${"all"===a?"border-[var(--sc-cyan)] text-[var(--sc-cyan)]":"border-[var(--sc-border)] text-[var(--sc-text-muted)]"}`,children:"All projects"}),(0,t.jsxs)("button",{type:"button",disabled:!s,onClick:()=>c("current"),className:`rounded-md border px-2 py-1 disabled:opacity-40 ${"current"===a?"border-[var(--sc-cyan)] text-[var(--sc-cyan)]":"border-[var(--sc-border)] text-[var(--sc-text-muted)]"}`,children:["Current (",s??"none selected",")"]})]}),n&&(0,t.jsxs)("div",{className:"mt-4 rounded-lg border border-[var(--sc-border)] bg-[var(--sc-bg-deep)]/50 p-3",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsxs)("span",{className:"text-sm font-semibold text-[var(--sc-text-primary)]",children:[n.groups.length," cluster(s) · ",o," removable"]}),(0,t.jsxs)("span",{className:"text-[10px] text-[var(--sc-text-muted)]",children:[n.pairsFound," pairs scanned"]})]}),0===n.groups.length?(0,t.jsx)("div",{className:"mt-2 text-xs text-[var(--sc-text-muted)]",children:"No duplicates at the current heuristic threshold."}):(0,t.jsx)("ul",{className:"mt-2 max-h-64 space-y-2 overflow-y-auto text-xs",children:n.groups.map(e=>(0,t.jsxs)("li",{className:"rounded border border-[var(--sc-border)] bg-[var(--sc-bg-surface)] p-2",children:[(0,t.jsxs)("div",{className:"text-[10px] uppercase tracking-[0.14em] text-[var(--sc-text-muted)]",children:["Keep #",e.keepId," · remove ",e.removeIds.length," · ",e.similarity]}),(0,t.jsx)("div",{className:"mt-1 font-semibold text-[var(--sc-text-primary)] truncate",children:e.keepTitle}),(0,t.jsxs)("div",{className:"mt-0.5 text-[var(--sc-text-secondary)]",children:["Will delete: ",e.removeIds.map(e=>`#${e}`).join(", ")]})]},e.keepId))})]}),(0,t.jsxs)("div",{className:"mt-4 flex flex-wrap gap-2",children:[(0,t.jsxs)(m.Button,{variant:"outline",size:"sm",onClick:()=>{i(null),l.mutate({project:d,dryRun:!0},{onSuccess:e=>{i(e),Q.toast.success(0===e.groups.length?"No duplicate clusters found":`Found ${e.groups.length} cluster(s), ${e.groups.reduce((e,t)=>e+t.removeIds.length,0)} removable`)},onError:e=>Q.toast.error(e.message)})},disabled:l.isPending,pulse:l.isPending&&l.variables?.dryRun,children:[(0,t.jsx)(eo.Search,{size:13}),l.isPending&&l.variables?.dryRun?"Scanning":"Find duplicates"]}),(0,t.jsxs)(m.Button,{variant:"cyan",size:"sm",onClick:()=>{!n||0===o||window.confirm(`Merge ${n.groups.length} cluster(s) and delete ${o} duplicate(s)? Backup auto-saved first.`)&&l.mutate({project:d,dryRun:!1},{onSuccess:e=>{i(null),Q.toast.success(`Merged ${e.merged??0}. Backup: ${e.backupPath??"see ~/.shieldcortex/backups/"}`,{duration:8e3})},onError:e=>Q.toast.error(e.message)})},disabled:!n||0===o||l.isPending,pulse:l.isPending&&l.variables?.dryRun===!1,children:[(0,t.jsx)(ed,{size:13}),l.isPending&&l.variables?.dryRun===!1?"Merging":n&&o>0?`Merge all (${o})`:"Merge"]})]})]})}var eu=e.i(27528);let em=(0,c.default)("key",[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]]);var ep=e.i(77715),ev=e.i(66949);let eh=(0,c.default)("chevron-down",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]),ey=(0,c.default)("chevron-up",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]),eg="https://api.shieldcortex.ai",eb=J.default.env.NEXT_PUBLIC_API_URL||"http://localhost:3001",ej=["Custom injection patterns","Custom Iron Dome policies","Custom firewall rules","Audit export (JSON/CSV)","Skill scanner deep mode"];function ef(){let{data:e,isLoading:s}=(0,P.useLicenseStatus)(),a=(0,P.useActivateLicense)(),c=(0,P.useDeactivateLicense)(),n=function(){let e=(0,C.useQueryClient)(),[t,s]=(0,r.useState)("idle"),[a,c]=(0,r.useState)(null),[n,i]=(0,r.useState)(null),l=(0,r.useCallback)(async(e,t)=>{s("submitting"),c(null);try{let r=await fetch(`${eg}/v1/billing/quick-checkout`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e,plan:t})}),a=await r.json();if(!r.ok||!a.checkout_url||!a.setup_id)throw Error(a.error||"Failed to create checkout session");i(a.setup_id),window.open(a.checkout_url,"_blank"),s("polling")}catch(e){c(e instanceof Error?e.message:"Checkout failed"),s("error")}},[]);return(0,r.useEffect)(()=>{if("polling"!==t||!n)return;let r=setInterval(async()=>{try{let t=await fetch(`${eg}/v1/billing/setup-status/${n}`),a=await t.json();if("complete"===a.status&&a.license_key){clearInterval(r),s("activating");try{if(!(await (0,S.authFetch)(`${eb}/api/license/activate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:a.license_key})})).ok)throw Error("Local activation failed");e.invalidateQueries({queryKey:["license-status"]}),s("complete")}catch{c('Payment succeeded but local activation failed. Use "I Have a Key" to activate manually.'),s("error")}}else"expired"===a.status?(clearInterval(r),c("Setup expired. Please try again."),s("error")):"complete"!==a.status||a.license_key||(clearInterval(r),c("Licence key was already retrieved. Check your dashboard or try again."),s("error"))}catch{}},3e3),a=setTimeout(()=>{clearInterval(r),c('Checkout timed out. If you completed payment, use "I Have a Key" or contact support.'),s("error")},9e5);return()=>{clearInterval(r),clearTimeout(a)}},[t,n,e]),{state:t,error:a,startCheckout:l,reset:(0,r.useCallback)(()=>{s("idle"),c(null),i(null)},[])}}(),[i,l]=(0,r.useState)(""),[d,o]=(0,r.useState)("default"),[x,u]=(0,r.useState)(""),[m,p]=(0,r.useState)("pro"),[h,y]=(0,r.useState)(!1);if(s||!e)return(0,t.jsx)("div",{className:"bg-[var(--sc-bg-surface)] border border-[var(--sc-border)] rounded-xl p-4 mb-4",children:(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(eu.Shield,{size:16,className:"text-[var(--sc-text-muted)]"}),(0,t.jsx)("span",{className:"text-xs text-[var(--sc-text-muted)] animate-pulse",children:"Loading licence..."})]})});let g=e.tier;if("free"===g)return(0,t.jsxs)("div",{className:"relative overflow-hidden rounded-xl mb-4 bg-gradient-to-br from-slate-900 via-[var(--sc-bg-surface)] to-cyan-950/30 border border-[var(--sc-cyan)]/30",children:[(0,t.jsx)("div",{className:"absolute top-0 right-0 w-32 h-32 bg-[var(--sc-cyan)]/5 rounded-full blur-2xl -translate-y-1/2 translate-x-1/2"}),(0,t.jsxs)("div",{className:"relative p-5",children:[(0,t.jsxs)("div",{className:"flex items-start justify-between mb-4",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,t.jsx)("div",{className:"flex items-center justify-center w-8 h-8 rounded-lg bg-[var(--sc-cyan)]/10 border border-[var(--sc-cyan)]/20",children:(0,t.jsx)(Z.Sparkles,{size:16,className:"text-[var(--sc-cyan)]"})}),(0,t.jsxs)("div",{children:[(0,t.jsx)("h3",{className:"text-sm font-semibold text-[var(--sc-text-primary)]",children:"Unlock Pro Features"}),(0,t.jsx)("p",{className:"text-[11px] text-[var(--sc-text-secondary)] mt-0.5",children:"Your defence pipeline is fully active. Upgrade for advanced controls."})]})]}),(0,t.jsx)("span",{className:"text-[10px] font-medium px-2 py-0.5 rounded-full bg-[var(--sc-bg-elevated)] text-[var(--sc-text-secondary)] border border-[var(--sc-border)]",children:"Free"})]}),(0,t.jsx)("div",{className:"grid grid-cols-2 gap-x-4 gap-y-1.5 mb-4",children:ej.map(e=>(0,t.jsxs)("div",{className:"flex items-center gap-1.5 text-xs",children:[(0,t.jsx)(ev.Lock,{size:10,className:"text-[var(--sc-cyan)]/60 shrink-0"}),(0,t.jsx)("span",{className:"text-[var(--sc-text-secondary)]",children:e})]},e))}),"complete"===n.state?(0,t.jsxs)("div",{className:"flex items-center gap-2 p-3 bg-[var(--sc-cyan)]/10 border border-[var(--sc-cyan)]/20 rounded-lg",children:[(0,t.jsx)(v.CheckCircle2,{size:16,className:"text-[var(--sc-cyan)] shrink-0"}),(0,t.jsx)("span",{className:"text-xs text-[var(--sc-cyan)]",children:"Pro activated! Your dashboard is refreshing..."})]}):"polling"===n.state||"activating"===n.state?(0,t.jsxs)("div",{className:"space-y-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 p-3 bg-[var(--sc-cyan)]/10 border border-[var(--sc-cyan)]/20 rounded-lg",children:[(0,t.jsx)(D.Loader2,{size:14,className:"text-[var(--sc-cyan)] animate-spin shrink-0"}),(0,t.jsx)("span",{className:"text-xs text-[var(--sc-cyan)]",children:"activating"===n.state?"Activating licence...":"Complete payment in the Stripe tab..."})]}),(0,t.jsx)("button",{onClick:()=>{n.reset(),o("default")},className:"text-[10px] text-[var(--sc-text-muted)] hover:text-[var(--sc-text-primary)] transition-colors",children:"Cancel"})]}):"checkout"===d?(0,t.jsxs)("div",{className:"space-y-3",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-[10px] text-[var(--sc-text-muted)] mb-1 block",children:"Email"}),(0,t.jsx)("input",{type:"email",placeholder:"you@company.com",value:x,onChange:e=>u(e.target.value),className:"w-full bg-[var(--sc-bg-elevated)] border border-[var(--sc-border)] rounded-lg px-3 py-2 text-xs text-[var(--sc-text-primary)] placeholder:text-[var(--sc-text-muted)] focus:outline-none focus:ring-1 focus:ring-[var(--sc-cyan)]",autoFocus:!0})]}),(0,t.jsx)("div",{className:"flex gap-2",children:["pro","team"].map(e=>(0,t.jsxs)("button",{type:"button",onClick:()=>p(e),className:`flex-1 px-3 py-2 text-xs font-medium rounded-lg border transition-colors ${m===e?"bg-[var(--sc-cyan)]/20 border-[var(--sc-cyan)]/50 text-[var(--sc-cyan)]":"bg-[var(--sc-bg-elevated)] border-[var(--sc-border)] text-[var(--sc-text-secondary)] hover:border-[var(--sc-border)]"}`,children:[R.PLAN_PRICING[e].label," — ",R.PLAN_PRICING[e].price]},e))}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("button",{onClick:()=>n.startCheckout(x,m),disabled:"submitting"===n.state||!x.trim(),className:"flex-1 inline-flex items-center justify-center gap-1.5 px-4 py-2 text-xs font-medium bg-[var(--sc-cyan)] hover:bg-[var(--sc-cyan-mid)] disabled:opacity-50 text-[var(--sc-text-primary)] rounded-lg transition-colors",children:"submitting"===n.state?(0,t.jsx)(D.Loader2,{size:12,className:"animate-spin"}):"Continue to Checkout"}),(0,t.jsx)("button",{onClick:()=>{o("default"),n.reset()},className:"px-3 py-2 text-xs text-[var(--sc-text-muted)] hover:text-[var(--sc-text-primary)] transition-colors",children:"Back"})]}),n.error&&(0,t.jsx)("p",{className:"text-xs text-[var(--sc-coral)]",children:n.error})]}):"activate"===d?(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("form",{onSubmit:e=>{e.preventDefault(),i.trim()&&a.mutate(i.trim(),{onSuccess:()=>{l(""),o("default")}})},className:"flex gap-2",children:[(0,t.jsx)("input",{type:"text",placeholder:"sc_pro_...",value:i,onChange:e=>l(e.target.value),className:"flex-1 bg-[var(--sc-bg-elevated)] border border-[var(--sc-border)] rounded-lg px-3 py-2 text-xs text-[var(--sc-text-primary)] placeholder:text-[var(--sc-text-muted)] focus:outline-none focus:ring-1 focus:ring-[var(--sc-cyan)]",autoFocus:!0}),(0,t.jsx)("button",{type:"submit",disabled:a.isPending||!i.trim(),className:"px-4 py-2 text-xs font-medium bg-[var(--sc-cyan)] hover:bg-[var(--sc-cyan-mid)] disabled:opacity-50 text-[var(--sc-text-primary)] rounded-lg transition-colors",children:a.isPending?(0,t.jsx)(D.Loader2,{size:12,className:"animate-spin"}):"Activate"}),(0,t.jsx)("button",{type:"button",onClick:()=>{o("default"),l(""),a.reset()},className:"px-3 py-2 text-xs text-[var(--sc-text-muted)] hover:text-[var(--sc-text-primary)] transition-colors",children:"Back"})]}),a.isError&&(0,t.jsx)("p",{className:"text-xs text-[var(--sc-coral)]",children:a.error instanceof Error?a.error.message:"Activation failed"})]}):(0,t.jsxs)("div",{className:"space-y-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("button",{onClick:()=>o("checkout"),className:"inline-flex items-center gap-1.5 px-4 py-2 text-xs font-medium bg-[var(--sc-cyan)] hover:bg-[var(--sc-cyan-mid)] text-[var(--sc-text-primary)] rounded-lg transition-colors",children:"Upgrade to Pro"}),(0,t.jsxs)("button",{onClick:()=>o("activate"),className:"inline-flex items-center gap-1.5 px-4 py-2 text-xs font-medium bg-[var(--sc-bg-elevated)] hover:bg-[var(--sc-bg-elevated)] text-[var(--sc-text-primary)] rounded-lg transition-colors border border-[var(--sc-border)]",children:[(0,t.jsx)(em,{size:12}),"I Have a Key"]})]}),n.error&&(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)("p",{className:"text-xs text-[var(--sc-coral)]",children:n.error}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("button",{onClick:()=>{n.reset(),o("checkout")},className:"text-[10px] text-[var(--sc-cyan)] hover:text-[var(--sc-cyan)] transition-colors",children:"Try Again"}),(0,t.jsx)("span",{className:"text-[10px] text-[var(--sc-text-muted)]",children:"·"}),(0,t.jsx)("button",{onClick:()=>{n.reset(),o("activate")},className:"text-[10px] text-[var(--sc-text-secondary)] hover:text-[var(--sc-text-primary)] transition-colors",children:"I Have a Key"})]})]})]})]})]});let b=e.features.filter(e=>e.enabled).length,j=e.features.length;return(0,t.jsxs)("div",{className:"bg-[var(--sc-bg-surface)] border border-[var(--sc-cyan)]/40 rounded-xl p-4 mb-4",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(eu.Shield,{size:16,className:R.TIER_COLOURS[g]}),(0,t.jsx)("h3",{className:"text-sm font-medium text-[var(--sc-text-primary)]",children:"Licence"}),(0,t.jsx)("span",{className:`text-[10px] font-semibold px-1.5 py-0.5 rounded ${R.TIER_COLOURS[g]} ${R.TIER_BG[g]}`,children:R.TIER_LABELS[g]})]}),(0,t.jsxs)("span",{className:"text-[10px] text-[var(--sc-text-muted)]",children:[b,"/",j," features"]})]}),(0,t.jsxs)("div",{className:"space-y-2 mb-3",children:[e.email&&(0,t.jsxs)("div",{className:"flex items-center justify-between text-xs",children:[(0,t.jsx)("span",{className:"text-[var(--sc-text-muted)]",children:"Email"}),(0,t.jsx)("span",{className:"text-[var(--sc-text-primary)]",children:e.email})]}),null!==e.daysUntilExpiry&&(0,t.jsxs)("div",{className:"flex items-center justify-between text-xs",children:[(0,t.jsx)("span",{className:"text-[var(--sc-text-muted)]",children:"Expires"}),(0,t.jsx)("span",{className:e.daysUntilExpiry<=7?"text-[var(--sc-amber)]":"text-[var(--sc-text-primary)]",children:e.daysUntilExpiry<=0?"Expired (grace period)":`${e.daysUntilExpiry} days`})]})]}),(0,t.jsxs)("button",{onClick:()=>y(!h),className:"flex items-center gap-1 text-[10px] text-[var(--sc-text-muted)] hover:text-[var(--sc-text-primary)] transition-colors mb-2",children:[h?(0,t.jsx)(ey,{size:12}):(0,t.jsx)(eh,{size:12}),h?"Hide features":"Show features"]}),h&&(0,t.jsx)("div",{className:"space-y-1.5 mb-3",children:e.features.map(e=>(0,t.jsxs)("div",{className:"flex items-center gap-2 text-xs",children:[e.enabled?(0,t.jsx)(v.CheckCircle2,{size:12,className:"text-[var(--sc-cyan)] shrink-0"}):(0,t.jsx)(ep.XCircle,{size:12,className:"text-[var(--sc-text-muted)] shrink-0"}),(0,t.jsx)("span",{className:e.enabled?"text-[var(--sc-text-primary)]":"text-[var(--sc-text-muted)]",children:e.description.split(".")[0]}),!e.enabled&&(0,t.jsx)("span",{className:`text-[9px] px-1 py-0.5 rounded ${R.TIER_COLOURS[e.requiredTier]} ${R.TIER_BG[e.requiredTier]}`,children:R.TIER_LABELS[e.requiredTier]})]},e.feature))}),(0,t.jsx)("button",{onClick:()=>{confirm(`Remove your ${R.TIER_LABELS[g]} licence key? You will lose access to paid features.`)&&c.mutate()},disabled:c.isPending,className:"text-[10px] text-[var(--sc-text-muted)] hover:text-[var(--sc-coral)] transition-colors",children:"Deactivate"})]})}function eN(){let e=(0,s.useSearchParams)().get("tab"),a=e&&["cloud","integrations","licence","admin"].includes(e)?e:null,[c,p]=(0,r.useState)("cloud"),v=a??c,{data:h}=(0,P.useLicenseStatus)(),y=[{id:"cloud",label:"Cloud Sync",icon:(0,t.jsx)(n,{size:14})},{id:"integrations",label:"Integrations",icon:(0,t.jsx)(l,{size:14})},{id:"licence",label:"Licence",icon:(0,t.jsx)(i,{size:14})},{id:"admin",label:"Admin",icon:(0,t.jsx)(d.Settings,{size:14})}];return(0,t.jsx)("div",{className:"h-full overflow-y-auto",children:(0,t.jsxs)("div",{className:"mx-auto max-w-7xl space-y-6 p-6",children:[(0,t.jsx)(o.PageHeader,{eyebrow:"Configuration",title:"Settings",subtitle:"Cloud sync, licence management, and system configuration.",tabs:y,activeTab:v,onTabChange:e=>p(e),actions:(0,t.jsx)(u.Badge,{variant:h?.tier==="pro"?"cyan":h?.tier==="team"?"coral":"muted",children:R.TIER_LABELS[h?.tier??"free"]})}),(0,t.jsxs)("div",{children:["cloud"===v&&(0,t.jsx)(U,{}),"integrations"===v&&(0,t.jsx)(X,{}),"licence"===v&&(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsx)(ef,{}),(0,t.jsxs)(x.GlassCard,{className:"p-6",children:[(0,t.jsx)("h3",{className:"text-lg font-semibold text-[var(--sc-text-primary)]",children:"Upgrade"}),(0,t.jsx)("p",{className:"mt-2 text-sm text-[var(--sc-text-secondary)]",children:"Pro unlocks deep X-Ray scanning, custom firewall rules, custom Iron Dome policies, audit exports, and more. Team adds cloud sync and team management."}),(0,t.jsx)("div",{className:"mt-4 flex gap-3",children:(0,t.jsx)("a",{href:"https://shieldcortex.ai/pricing",target:"_blank",rel:"noopener noreferrer",children:(0,t.jsx)(m.Button,{variant:"coral",glow:!0,children:"View pricing"})})})]})]}),"admin"===v&&(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsx)(es,{}),(0,t.jsx)(el,{}),(0,t.jsx)(ex,{}),(0,t.jsxs)(x.GlassCard,{className:"p-6",children:[(0,t.jsx)("h3",{className:"text-lg font-semibold text-[var(--sc-text-primary)]",children:"System Information"}),(0,t.jsxs)("div",{className:"mt-4 space-y-3",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between rounded-lg bg-[var(--sc-bg-elevated)] px-4 py-3",children:[(0,t.jsx)("span",{className:"text-sm text-[var(--sc-text-secondary)]",children:"Dashboard"}),(0,t.jsx)("span",{className:"font-mono text-sm text-[var(--sc-text-primary)]",children:"localhost:3030"})]}),(0,t.jsxs)("div",{className:"flex items-center justify-between rounded-lg bg-[var(--sc-bg-elevated)] px-4 py-3",children:[(0,t.jsx)("span",{className:"text-sm text-[var(--sc-text-secondary)]",children:"API Server"}),(0,t.jsx)("span",{className:"font-mono text-sm text-[var(--sc-text-primary)]",children:"localhost:3001"})]}),(0,t.jsxs)("div",{className:"flex items-center justify-between rounded-lg bg-[var(--sc-bg-elevated)] px-4 py-3",children:[(0,t.jsx)("span",{className:"text-sm text-[var(--sc-text-secondary)]",children:"Database"}),(0,t.jsx)("span",{className:"font-mono text-sm text-[var(--sc-text-primary)]",children:"~/.shieldcortex/memories.db"})]}),(0,t.jsxs)("div",{className:"flex items-center justify-between rounded-lg bg-[var(--sc-bg-elevated)] px-4 py-3",children:[(0,t.jsx)("span",{className:"text-sm text-[var(--sc-text-secondary)]",children:"Licence Tier"}),(0,t.jsx)(u.Badge,{variant:h?.tier==="pro"?"cyan":h?.tier==="team"?"coral":"muted",children:R.TIER_LABELS[h?.tier??"free"]})]})]})]})]})]})]})})}function ew(){return(0,t.jsx)(r.Suspense,{fallback:(0,t.jsx)(a.PageSkeleton,{}),children:(0,t.jsx)(eN,{})})}e.s(["SettingsView",()=>ew],42424)}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,67307,e=>{"use strict";let t=(0,e.i(24929).default)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);e.s(["RefreshCw",()=>t],67307)},71259,e=>{"use strict";let t=(0,e.i(24929).default)("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);e.s(["Eye",()=>t],71259)},19331,e=>{"use strict";let t=(0,e.i(24929).default)("clock-3",[["path",{d:"M12 6v6h4",key:"135r8i"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);e.s(["Clock3",()=>t],19331)},77715,e=>{"use strict";let t=(0,e.i(24929).default)("circle-x",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);e.s(["XCircle",()=>t],77715)},53615,84982,e=>{"use strict";var t=e.i(27493),s=e.i(76490);function a({className:e}){return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:(0,s.cn)("theme-glass:hidden flex items-center overflow-hidden rounded-md bg-[var(--term-surface-2)] text-[var(--term-text-muted)] text-xs leading-none animate-pulse px-2",e),"aria-busy":"true","aria-live":"polite",children:(0,t.jsx)("span",{className:"select-none whitespace-nowrap tracking-tighter",children:"█▓▓▓▒▒▒░░░░ ▓▓▒▒░░ █▓▒░ ▓▓▒░░ █▓▓▒░░░ ▓▒░░ █▒▒░"})}),(0,t.jsx)("div",{className:(0,s.cn)("hidden theme-glass:block animate-pulse rounded-xl bg-[var(--sc-surface-interactive)]",e),"aria-busy":"true","aria-live":"polite"})]})}function r(){return(0,t.jsxs)("div",{className:"mx-auto max-w-7xl space-y-6 p-6",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(a,{className:"h-3 w-24"}),(0,t.jsx)(a,{className:"h-7 w-56"}),(0,t.jsx)(a,{className:"h-4 w-80"})]}),(0,t.jsx)(a,{className:"h-10 w-96"}),(0,t.jsxs)("div",{className:"grid grid-cols-2 gap-4 lg:grid-cols-4",children:[(0,t.jsx)(a,{className:"h-24"}),(0,t.jsx)(a,{className:"h-24"}),(0,t.jsx)(a,{className:"h-24"}),(0,t.jsx)(a,{className:"h-24"})]}),(0,t.jsxs)("div",{className:"grid gap-6 lg:grid-cols-2",children:[(0,t.jsx)(a,{className:"h-64"}),(0,t.jsx)(a,{className:"h-64"})]})]})}e.s(["PageSkeleton",()=>r,"Skeleton",()=>a],53615);let l=(0,e.i(24929).default)("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);e.s(["Loader2",()=>l],84982)},77744,e=>{"use strict";let t=(0,e.i(24929).default)("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]]);e.s(["Trash2",()=>t],77744)},15771,63312,50279,e=>{"use strict";let t=(0,e.i(24929).default)("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);e.s(["CheckCircle2",()=>t],15771);var s=e.i(22534),a=e.i(45688),r=e.i(71921),l=e.i(1235),c=e.i(88969);let i=s.default.env.NEXT_PUBLIC_API_URL||"http://localhost:3001";async function n(){let e=await (0,c.authFetch)(`${i}/api/license/status`);if(!e.ok)throw Error("Failed to fetch license status");return e.json()}async function m(e){let t=await (0,c.authFetch)(`${i}/api/license/activate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:e})});if(!t.ok)throw Error((await t.json().catch(()=>({error:"Activation failed"}))).error||"Activation failed");return t.json()}async function d(){let e=await (0,c.authFetch)(`${i}/api/license/deactivate`,{method:"POST"});if(!e.ok)throw Error("Failed to deactivate license");return e.json()}function o(){return(0,a.useQuery)({queryKey:["license-status"],queryFn:n,refetchInterval:6e4,retry:2})}function h(){let e=(0,l.useQueryClient)();return(0,r.useMutation)({mutationFn:e=>m(e),onSuccess:()=>{e.invalidateQueries({queryKey:["license-status"]})}})}function x(){let e=(0,l.useQueryClient)();return(0,r.useMutation)({mutationFn:d,onSuccess:()=>{e.invalidateQueries({queryKey:["license-status"]})}})}e.s(["useActivateLicense",()=>h,"useDeactivateLicense",()=>x,"useLicenseStatus",()=>o],63312),e.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"}],50279)},18509,e=>{"use strict";let t=(0,e.i(24929).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"}]]);e.s(["AlertTriangle",()=>t],18509)},16467,95659,e=>{"use strict";var t=e.i(27493),s=e.i(76490);let a={critical:"severity-critical",high:"severity-high",medium:"severity-medium",low:"severity-low",safe:"severity-safe",info:"severity-info"};function r({children:e,className:r,hover:l=!1,hoverCyan:c=!1,strong:i=!1,severity:n,onClick:m,selected:d=!1,title:o,statusLine:h,bodyPadding:x=!0}){let g=m?e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),m())}:void 0;return(0,t.jsxs)("div",{className:(0,s.cn)("glass-card overflow-hidden",l&&"glass-card-hover cursor-pointer",c&&"glass-card-hover-cyan cursor-pointer",m&&!l&&!c&&"cursor-pointer",n&&a[n],d&&"border-[var(--term-electric)]",r),onClick:m,onKeyDown:g,role:m?"button":void 0,tabIndex:m?0:void 0,children:[void 0!==o&&(0,t.jsxs)("div",{className:"flex items-center gap-2 px-4 py-2 border-b border-[var(--term-border)] bg-[var(--term-surface-2)] theme-glass:hidden",children:[(0,t.jsx)("span",{"aria-hidden":!0,className:"w-2.5 h-2.5 rounded-full bg-[var(--term-light-red)]"}),(0,t.jsx)("span",{"aria-hidden":!0,className:"w-2.5 h-2.5 rounded-full bg-[var(--term-light-yellow)]"}),(0,t.jsx)("span",{"aria-hidden":!0,className:"w-2.5 h-2.5 rounded-full bg-[var(--term-light-green)]"}),(0,t.jsx)("span",{className:"ml-2 text-xs select-none truncate text-[var(--term-text-muted)]",children:o})]}),(0,t.jsx)("div",{className:(0,s.cn)(x?"p-5":""),children:e}),void 0!==h&&(0,t.jsx)("div",{className:"px-4 py-2 text-xs border-t border-[var(--term-border)] bg-[var(--term-surface-2)] text-[var(--term-text-muted)] theme-glass:hidden",children:h})]})}e.s(["GlassCard",()=>r],16467);let l={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)]"},c={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)]"},i={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 n({children:e,variant:a="muted",className:r,dot:n=!1,pulse:m=!1}){return(0,t.jsxs)("span",{className:(0,s.cn)("inline-flex items-center gap-1.5 px-1 text-[11px] font-semibold uppercase tracking-wider whitespace-nowrap",l[a],"theme-glass:rounded-full theme-glass:border theme-glass:px-2.5 theme-glass:py-0.5",i[a],r),children:[n&&(0,t.jsx)("span",{className:(0,s.cn)("h-1.5 w-1.5 rounded-full",c[a],m&&"animate-pulse"),"aria-hidden":!0}),(0,t.jsx)("span",{"aria-hidden":!0,className:"text-[var(--term-text-muted)] theme-glass:hidden",children:"["}),(0,t.jsx)("span",{children:e}),(0,t.jsx)("span",{"aria-hidden":!0,className:"text-[var(--term-text-muted)] theme-glass:hidden",children:"]"})]})}function m(e){let t=e.toUpperCase();return"CRITICAL"===t?"critical":"HIGH"===t?"high":"MEDIUM"===t?"medium":"LOW"===t?"low":"SAFE"===t?"safe":"info"}e.s(["Badge",()=>n,"riskVariant",()=>m],95659)},66949,e=>{"use strict";let t=(0,e.i(24929).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"}]]);e.s(["Lock",()=>t],66949)},40950,e=>{"use strict";var t=e.i(27493),s=e.i(76490),a=e.i(66949);function r({tabs:e,activeTab:r,onChange:l,className:c}){return(0,t.jsx)("div",{className:(0,s.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",c),role:"tablist",children:e.map(e=>{let c=e.id===r;return(0,t.jsxs)("button",{type:"button",role:"tab","aria-selected":c?"true":"false",onClick:()=>l(e.id),className:(0,s.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)]",c?"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",c&&"theme-glass:bg-[var(--sc-bg-elevated)] theme-glass:text-[var(--sc-text-primary)]",!c&&"theme-glass:hover:text-[var(--sc-text-secondary)]"),children:[e.icon,(0,t.jsx)("span",{children:e.label}),e.locked&&(0,t.jsx)(a.Lock,{size:11,className:"text-[var(--term-warn)] theme-glass:text-[var(--sc-coral)]"}),void 0!==e.count&&e.count>0&&(0,t.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,t.jsxs)("span",{className:"theme-glass:hidden",children:["(",e.count,")"]}),(0,t.jsx)("span",{className:"hidden theme-glass:inline",children:e.count})]}),c&&(0,t.jsx)("span",{"aria-hidden":!0,className:"absolute -bottom-px left-0 right-0 h-px bg-[var(--term-electric)] theme-glass:hidden"})]},e.id)})})}function l({eyebrow:e,title:a,subtitle:l,actions:c,tabs:i,activeTab:n,onTabChange:m,className:d}){return(0,t.jsxs)("div",{className:(0,s.cn)("space-y-3 theme-glass:space-y-4",d),children:[(0,t.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,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsxs)("div",{className:"theme-glass:hidden",children:[e&&(0,t.jsxs)("p",{className:"text-[11px] uppercase tracking-wider text-[var(--term-text-muted)]",children:[(0,t.jsx)("span",{className:"text-[var(--term-electric-fg)]",children:"›"})," ",e]}),(0,t.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,t.jsx)("span",{className:"text-[var(--term-electric-fg)]","aria-hidden":!0,children:"$"}),(0,t.jsx)("span",{children:"shieldcortex"}),(0,t.jsx)("span",{className:"text-[var(--term-text-dim)]",children:a.toLowerCase()}),(0,t.jsx)("span",{className:"cli-cursor text-[var(--term-electric-fg)]","aria-hidden":!0})]}),l&&(0,t.jsxs)("p",{className:"mt-1 text-xs text-[var(--term-text-muted)]",children:[(0,t.jsx)("span",{"aria-hidden":!0,children:"#"})," ",l]})]}),(0,t.jsxs)("div",{className:"hidden theme-glass:block",children:[e&&(0,t.jsx)("p",{className:"text-[10px] font-semibold uppercase tracking-[0.2em] text-[var(--sc-coral)] sm:text-[11px]",children:e}),(0,t.jsx)("h1",{className:"mt-1 text-xl font-bold text-[var(--sc-text-primary)] sm:text-2xl",children:a}),l&&(0,t.jsx)("p",{className:"mt-1 text-xs text-[var(--sc-text-secondary)] sm:text-sm",children:l})]})]}),c&&(0,t.jsx)("div",{className:"flex shrink-0 items-center gap-2",children:c})]}),i&&n&&m&&(0,t.jsx)(r,{tabs:i,activeTab:n,onChange:m})]})}e.s(["PageHeader",()=>l],40950)},81523,e=>{"use strict";var t=e.i(27493),s=e.i(76490),a=e.i(4);let r={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)]"},l={sm:"px-2 py-1 text-xs",md:"px-3 py-1.5 text-sm",lg:"px-4 py-2 text-sm"},c={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)]"},i={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"},n=(0,a.forwardRef)(({variant:e="coral",size:a="md",glow:n=!1,pulse:m=!1,className:d,children:o,...h},x)=>(0,t.jsxs)("button",{ref:x,className:(0,s.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)]",m?"disabled:pointer-events-none":"disabled:pointer-events-none disabled:opacity-50",r[e],l[a],"theme-glass:font-semibold theme-glass:transition-all theme-glass:hover:-translate-y-0.5",c[e],i[a],n&&"coral"===e&&"theme-glass:glow-coral-subtle",n&&"cyan"===e&&"theme-glass:glow-cyan-subtle",m&&"theme-glass:glow-cyan-pulse",d),type:"button",...h,children:[(0,t.jsxs)("span",{className:"inline-flex items-center gap-2 theme-glass:hidden",children:[m&&(0,t.jsx)("span",{className:"cli-cursor","aria-hidden":!0}),(0,t.jsx)("span",{className:"text-[var(--term-text-muted)]","aria-hidden":!0,children:"["}),(0,t.jsx)("span",{className:"leading-none",children:o}),(0,t.jsx)("span",{className:"text-[var(--term-text-muted)]","aria-hidden":!0,children:"]"})]}),(0,t.jsx)("span",{className:"hidden theme-glass:inline-flex items-center gap-2",children:o})]}));n.displayName="Button",e.s(["Button",0,n])},6847,e=>{"use strict";let t=(0,e.i(24929).default)("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]);e.s(["Search",()=>t],6847)},84012,e=>{"use strict";let t=(0,e.i(24929).default)("git-branch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]);e.s(["GitBranch",()=>t],84012)}]);
|
|
@@ -9,7 +9,7 @@ const currentPort = parseInt(process.env.PORT, 10) || 3000
|
|
|
9
9
|
const hostname = process.env.HOSTNAME || '0.0.0.0'
|
|
10
10
|
|
|
11
11
|
let keepAliveTimeout = parseInt(process.env.KEEP_ALIVE_TIMEOUT, 10)
|
|
12
|
-
const nextConfig = {"env":{},"webpack":null,"typescript":{"ignoreBuildErrors":false},"typedRoutes":false,"distDir":"./.next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.ts","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"poweredByHeader":true,"compress":true,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":14400,"formats":["image/webp"],"maximumRedirects":3,"dangerouslyAllowLocalIP":false,"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"attachment","localPatterns":[{"pathname":"**","search":""}],"remotePatterns":[],"qualities":[75],"unoptimized":false},"devIndicators":{"position":"bottom-left"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"excludeDefaultMomentLocales":true,"reactProductionProfiling":false,"reactStrictMode":null,"reactMaxHeadersLength":6000,"httpAgentOptions":{"keepAlive":true},"logging":{},"compiler":{},"expireTime":31536000,"staticPageGenerationTimeout":60,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"outputFileTracingRoot":"/
|
|
12
|
+
const nextConfig = {"env":{},"webpack":null,"typescript":{"ignoreBuildErrors":false},"typedRoutes":false,"distDir":"./.next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.ts","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"poweredByHeader":true,"compress":true,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":14400,"formats":["image/webp"],"maximumRedirects":3,"dangerouslyAllowLocalIP":false,"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"attachment","localPatterns":[{"pathname":"**","search":""}],"remotePatterns":[],"qualities":[75],"unoptimized":false},"devIndicators":{"position":"bottom-left"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"excludeDefaultMomentLocales":true,"reactProductionProfiling":false,"reactStrictMode":null,"reactMaxHeadersLength":6000,"httpAgentOptions":{"keepAlive":true},"logging":{},"compiler":{},"expireTime":31536000,"staticPageGenerationTimeout":60,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"outputFileTracingRoot":"/home/runner/work/ShieldCortex/ShieldCortex","cacheComponents":false,"cacheLife":{"default":{"stale":300,"revalidate":900,"expire":4294967294},"seconds":{"stale":30,"revalidate":1,"expire":60},"minutes":{"stale":300,"revalidate":60,"expire":3600},"hours":{"stale":300,"revalidate":3600,"expire":86400},"days":{"stale":300,"revalidate":86400,"expire":604800},"weeks":{"stale":300,"revalidate":604800,"expire":2592000},"max":{"stale":300,"revalidate":2592000,"expire":31536000}},"cacheHandlers":{},"experimental":{"useSkewCookie":false,"cssChunking":true,"multiZoneDraftMode":false,"appNavFailHandling":false,"prerenderEarlyExit":true,"serverMinification":true,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"dynamicOnHover":false,"preloadEntriesOnStart":true,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","proxyPrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":3,"memoryBasedWorkersCount":false,"imgOptConcurrency":null,"imgOptTimeoutInSeconds":7,"imgOptMaxInputPixels":268402689,"imgOptSequentialRead":null,"imgOptSkipMetadata":null,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"swcTraceProfiling":false,"forceSwcTransforms":false,"largePageDataBytes":128000,"typedEnv":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"authInterrupts":false,"webpackMemoryOptimizations":false,"optimizeServerReact":true,"viewTransition":false,"removeUncaughtErrorAndRejectionListeners":false,"validateRSCRequestHeaders":false,"staleTimes":{"dynamic":0,"static":300},"reactDebugChannel":false,"serverComponentsHmrCache":true,"staticGenerationMaxConcurrency":8,"staticGenerationMinPagesPerWorker":25,"transitionIndicator":false,"inlineCss":false,"useCache":false,"globalNotFound":false,"browserDebugInfoInTerminal":false,"lockDistDir":true,"isolatedDevBuild":true,"proxyClientMaxBodySize":10485760,"hideLogsAfterAbort":false,"mcpServer":true,"turbopackFileSystemCacheForDev":true,"turbopackFileSystemCacheForBuild":false,"turbopackInferModuleSideEffects":false,"optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","effect","@effect/schema","@effect/platform","@effect/platform-node","@effect/platform-browser","@effect/platform-bun","@effect/sql","@effect/sql-mssql","@effect/sql-mysql2","@effect/sql-pg","@effect/sql-sqlite-node","@effect/sql-sqlite-bun","@effect/sql-sqlite-wasm","@effect/sql-sqlite-react-native","@effect/rpc","@effect/rpc-http","@effect/typeclass","@effect/experimental","@effect/opentelemetry","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"trustHostHeader":false,"isExperimentalCompile":false},"htmlLimitedBots":"[\\w-]+-Google|Google-[\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight","bundlePagesRouterDependencies":false,"configFileName":"next.config.ts","outputFileTracingExcludes":{"*":["**/node_modules/sharp/**","**/node_modules/@img/**"]},"turbopack":{"root":"/home/runner/work/ShieldCortex/ShieldCortex"},"distDirRoot":".next"}
|
|
13
13
|
|
|
14
14
|
process.env.__NEXT_PRIVATE_STANDALONE_CONFIG = JSON.stringify(nextConfig)
|
|
15
15
|
|
package/dist/setup/openclaw.d.ts
CHANGED
|
@@ -35,7 +35,7 @@ export declare function findAllHooksDirs(): string[];
|
|
|
35
35
|
*
|
|
36
36
|
* Exported for direct unit testing without booting the full installer.
|
|
37
37
|
*/
|
|
38
|
-
export declare function pluginInstallNeedsWrite(config: unknown, pluginId: string,
|
|
38
|
+
export declare function pluginInstallNeedsWrite(config: unknown, pluginId: string, _installDir: string, _version: string): boolean;
|
|
39
39
|
/**
|
|
40
40
|
* Install options for `shieldcortex openclaw install`.
|
|
41
41
|
*/
|
package/dist/setup/openclaw.js
CHANGED
|
@@ -16,8 +16,12 @@ const HOOK_NAME = 'cortex-memory';
|
|
|
16
16
|
// Hook source is in hooks/openclaw/cortex-memory/ relative to project root
|
|
17
17
|
// From dist/setup/, go up two levels to project root
|
|
18
18
|
const HOOK_SOURCE = path.resolve(__dirname, '..', '..', 'hooks', 'openclaw', HOOK_NAME);
|
|
19
|
-
// Plugin compiled output in plugins/openclaw/dist/ relative to project root
|
|
20
|
-
|
|
19
|
+
// Plugin compiled output in plugins/openclaw/dist/ relative to project root.
|
|
20
|
+
// `SHIELDCORTEX_PLUGIN_SOURCE` overrides for hermetic tests so the install
|
|
21
|
+
// path doesn't need a prior `npm run build`.
|
|
22
|
+
const PLUGIN_SOURCE = process.env.SHIELDCORTEX_PLUGIN_SOURCE
|
|
23
|
+
? path.resolve(process.env.SHIELDCORTEX_PLUGIN_SOURCE)
|
|
24
|
+
: path.resolve(__dirname, '..', '..', 'plugins', 'openclaw', 'dist');
|
|
21
25
|
const PLUGIN_PACKAGE_SOURCE = path.resolve(__dirname, '..', '..', 'plugins', 'openclaw');
|
|
22
26
|
const PLUGIN_DIR_NAME = 'shieldcortex-realtime';
|
|
23
27
|
const HOOK_FILES = ['HOOK.md', 'handler.ts', 'runtime.mjs'];
|
|
@@ -315,18 +319,20 @@ function openClawConfigPath() {
|
|
|
315
319
|
*
|
|
316
320
|
* Exported for direct unit testing without booting the full installer.
|
|
317
321
|
*/
|
|
318
|
-
export function pluginInstallNeedsWrite(config, pluginId,
|
|
322
|
+
export function pluginInstallNeedsWrite(config, pluginId, _installDir, _version) {
|
|
319
323
|
if (!config || typeof config !== 'object')
|
|
320
324
|
return true;
|
|
321
325
|
const c = config;
|
|
322
326
|
if (!c.plugins || typeof c.plugins !== 'object')
|
|
323
327
|
return true;
|
|
324
328
|
const plugins = c.plugins;
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
329
|
+
// `plugins.installs` is no longer user-authored config in OpenClaw 2026.5.x —
|
|
330
|
+
// it migrated to `~/.openclaw/plugins/installs.json`. If a stale entry remains
|
|
331
|
+
// in `openclaw.json`, OpenClaw will try to migrate it on the next config
|
|
332
|
+
// write and (when state-dir permissions block migration) refuse the write
|
|
333
|
+
// entirely. Treat its presence as drift so trustLocalPlugin can clean it up.
|
|
334
|
+
const installs = plugins.installs;
|
|
335
|
+
if (installs && pluginId in installs)
|
|
330
336
|
return true;
|
|
331
337
|
const allow = Array.isArray(plugins.allow) ? plugins.allow : [];
|
|
332
338
|
if (!allow.includes(pluginId))
|
|
@@ -335,11 +341,32 @@ export function pluginInstallNeedsWrite(config, pluginId, installDir, version) {
|
|
|
335
341
|
if (hasStale)
|
|
336
342
|
return true;
|
|
337
343
|
const entries = plugins.entries ?? {};
|
|
338
|
-
|
|
344
|
+
const entry = entries[pluginId];
|
|
345
|
+
if (!entry || entry.enabled !== true)
|
|
339
346
|
return true;
|
|
340
347
|
return false;
|
|
341
348
|
}
|
|
342
|
-
|
|
349
|
+
/**
|
|
350
|
+
* Register a locally-copied plugin in OpenClaw's user config.
|
|
351
|
+
*
|
|
352
|
+
* Writes (or updates) `plugins.allow` and `plugins.entries[pluginId]`. Does
|
|
353
|
+
* NOT write `plugins.installs[pluginId]` — that key is OpenClaw-managed in
|
|
354
|
+
* 2026.5.x+ (kept under `~/.openclaw/plugins/installs.json`). If we authored
|
|
355
|
+
* it and OpenClaw can't migrate (state-dir permission edge case), it
|
|
356
|
+
* refuses the next config write entirely; see
|
|
357
|
+
* `dist/io-E69J4lLI.js:18897` in OpenClaw 2026.5.6 for the migration-block
|
|
358
|
+
* error. Plugin discovery remains correct without `installs`: OpenClaw
|
|
359
|
+
* picks up plugin files from `~/.openclaw/extensions/<id>/` and uses
|
|
360
|
+
* `plugins.allow + plugins.entries[id].enabled` to gate execution.
|
|
361
|
+
*
|
|
362
|
+
* The `installDir` and `version` parameters are accepted for backward
|
|
363
|
+
* compatibility with the old call sites but are no longer persisted.
|
|
364
|
+
*
|
|
365
|
+
* Also actively cleans any legacy `plugins.installs[shieldcortex-realtime]`
|
|
366
|
+
* entry left over from older ShieldCortex versions, so customers upgrading
|
|
367
|
+
* through us never trip OpenClaw's migration-block.
|
|
368
|
+
*/
|
|
369
|
+
function trustLocalPlugin(_installDir, _version) {
|
|
343
370
|
const configPath = openClawConfigPath();
|
|
344
371
|
const configDir = path.dirname(configPath);
|
|
345
372
|
const pluginId = PLUGIN_DIR_NAME; // "shieldcortex-realtime"
|
|
@@ -350,47 +377,55 @@ function trustLocalPlugin(installDir, version) {
|
|
|
350
377
|
const raw = fs.existsSync(configPath) ? fs.readFileSync(configPath, 'utf-8') : '{}';
|
|
351
378
|
const config = JSON.parse(raw);
|
|
352
379
|
// Idempotency: skip the write if everything is already correct.
|
|
353
|
-
|
|
354
|
-
// auto-refresh) from bumping a fresh installedAt timestamp on every
|
|
355
|
-
// invocation when nothing has actually changed.
|
|
356
|
-
if (!pluginInstallNeedsWrite(config, pluginId, installDir, version)) {
|
|
380
|
+
if (!pluginInstallNeedsWrite(config, pluginId, _installDir, _version)) {
|
|
357
381
|
return true;
|
|
358
382
|
}
|
|
359
383
|
const plugins = typeof config.plugins === 'object' && config.plugins !== null ? config.plugins : {};
|
|
360
384
|
const allow = Array.isArray(plugins.allow)
|
|
361
385
|
? (plugins.allow ?? [])
|
|
362
386
|
: [];
|
|
363
|
-
// Remove any stale full-path entries for this plugin
|
|
387
|
+
// Remove any stale full-path entries for this plugin in `allow`.
|
|
364
388
|
const cleaned = allow.filter((e) => !e.includes(PLUGIN_DIR_NAME) || e === pluginId);
|
|
365
389
|
if (!cleaned.includes(pluginId)) {
|
|
366
390
|
cleaned.push(pluginId);
|
|
367
391
|
}
|
|
368
|
-
//
|
|
369
|
-
//
|
|
370
|
-
//
|
|
371
|
-
const
|
|
392
|
+
// Cleanup of legacy `plugins.installs[shieldcortex-realtime]` from
|
|
393
|
+
// pre-v4.15 ShieldCortex versions. Other plugins' installs entries are
|
|
394
|
+
// not touched — their migration is OpenClaw's concern.
|
|
395
|
+
const existingInstalls = typeof plugins.installs === 'object' && plugins.installs !== null
|
|
372
396
|
? plugins.installs
|
|
373
|
-
:
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
// Add entries to enable the plugin
|
|
397
|
+
: null;
|
|
398
|
+
let installsAfter;
|
|
399
|
+
if (existingInstalls) {
|
|
400
|
+
const { [pluginId]: _removed, ...rest } = existingInstalls;
|
|
401
|
+
installsAfter = rest;
|
|
402
|
+
}
|
|
403
|
+
// Add entries to enable the plugin (preserving any user-set `config`
|
|
404
|
+
// or other fields OpenClaw may have added).
|
|
382
405
|
const entries = typeof plugins.entries === 'object' && plugins.entries !== null
|
|
383
|
-
? plugins.entries
|
|
406
|
+
? { ...plugins.entries }
|
|
384
407
|
: {};
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
408
|
+
const existingEntry = entries[pluginId];
|
|
409
|
+
entries[pluginId] = (typeof existingEntry === 'object' && existingEntry !== null)
|
|
410
|
+
? { ...existingEntry, enabled: true }
|
|
411
|
+
: { enabled: true };
|
|
412
|
+
const newPlugins = {
|
|
389
413
|
...plugins,
|
|
390
414
|
allow: cleaned,
|
|
391
|
-
installs,
|
|
392
415
|
entries,
|
|
393
416
|
};
|
|
417
|
+
if (installsAfter !== undefined) {
|
|
418
|
+
// Only carry `installs` forward if there were OTHER plugins under it.
|
|
419
|
+
// If our cleanup left the object empty, drop it entirely so OpenClaw
|
|
420
|
+
// doesn't see a vestigial `installs: {}`.
|
|
421
|
+
if (Object.keys(installsAfter).length > 0) {
|
|
422
|
+
newPlugins.installs = installsAfter;
|
|
423
|
+
}
|
|
424
|
+
else {
|
|
425
|
+
delete newPlugins.installs;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
config.plugins = newPlugins;
|
|
394
429
|
fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
|
|
395
430
|
return true;
|
|
396
431
|
}
|
|
@@ -686,22 +721,28 @@ function pluginStatus() {
|
|
|
686
721
|
* Check whether the plugin is registered in OpenClaw's config, independently
|
|
687
722
|
* of what's on disk. A discrepancy between disk and config surfaces clearly
|
|
688
723
|
* in `shieldcortex openclaw status`.
|
|
724
|
+
*
|
|
725
|
+
* `inLegacyInstalls` reports the presence of a stale
|
|
726
|
+
* `plugins.installs[shieldcortex-realtime]` entry from pre-v4.15 ShieldCortex
|
|
727
|
+
* versions. It's never load-bearing in OpenClaw 2026.5.x — `trustLocalPlugin`
|
|
728
|
+
* cleans it up on the next install — but surfacing it helps users diagnose
|
|
729
|
+
* config-write failures on the OpenClaw side until they re-run setup.
|
|
689
730
|
*/
|
|
690
731
|
function pluginConfigStatus() {
|
|
691
732
|
const configPath = openClawConfigPath();
|
|
692
733
|
if (!fs.existsSync(configPath))
|
|
693
|
-
return { inAllow: false,
|
|
734
|
+
return { inAllow: false, inLegacyInstalls: false, inEntries: false };
|
|
694
735
|
try {
|
|
695
736
|
const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
696
737
|
const plugins = config.plugins ?? {};
|
|
697
738
|
const allow = Array.isArray(plugins.allow) ? plugins.allow : [];
|
|
698
739
|
const inAllow = allow.some((e) => typeof e === 'string' && (e === PLUGIN_DIR_NAME || e.endsWith(`/${PLUGIN_DIR_NAME}`) || e.endsWith(`/${PLUGIN_DIR_NAME}/index.js`) || e.endsWith(`/${PLUGIN_DIR_NAME}/index.ts`)));
|
|
699
|
-
const
|
|
740
|
+
const inLegacyInstalls = typeof plugins.installs === 'object' && plugins.installs !== null && PLUGIN_DIR_NAME in plugins.installs;
|
|
700
741
|
const inEntries = typeof plugins.entries === 'object' && plugins.entries !== null && PLUGIN_DIR_NAME in plugins.entries;
|
|
701
|
-
return { inAllow,
|
|
742
|
+
return { inAllow, inLegacyInstalls, inEntries };
|
|
702
743
|
}
|
|
703
744
|
catch {
|
|
704
|
-
return { inAllow: false,
|
|
745
|
+
return { inAllow: false, inLegacyInstalls: false, inEntries: false };
|
|
705
746
|
}
|
|
706
747
|
}
|
|
707
748
|
function localPluginTrustStatus(pluginPath) {
|
|
@@ -941,7 +982,7 @@ export async function openClawHookStatus() {
|
|
|
941
982
|
console.log('');
|
|
942
983
|
const plugin = pluginStatus();
|
|
943
984
|
const configState = pluginConfigStatus();
|
|
944
|
-
const anyConfig = configState.inAllow || configState.
|
|
985
|
+
const anyConfig = configState.inAllow || configState.inLegacyInstalls || configState.inEntries;
|
|
945
986
|
if (!plugin.installed && !anyConfig) {
|
|
946
987
|
console.log(' Real-time plugin: not installed');
|
|
947
988
|
return;
|
|
@@ -950,7 +991,7 @@ export async function openClawHookStatus() {
|
|
|
950
991
|
// Config says yes, disk says no — the drift case that caused #20.
|
|
951
992
|
const refs = [
|
|
952
993
|
configState.inAllow ? 'plugins.allow' : null,
|
|
953
|
-
configState.
|
|
994
|
+
configState.inLegacyInstalls ? 'plugins.installs (legacy — will be cleaned on next install)' : null,
|
|
954
995
|
configState.inEntries ? 'plugins.entries' : null,
|
|
955
996
|
].filter(Boolean).join(' + ');
|
|
956
997
|
console.log(` Real-time plugin: config references (${refs}) but no files on disk — run \`openclaw plugins install @drakon-systems/shieldcortex-realtime\` to reinstall`);
|
|
@@ -964,10 +1005,15 @@ export async function openClawHookStatus() {
|
|
|
964
1005
|
: 'native or unknown trust source';
|
|
965
1006
|
const entrySuffix = plugin.entry ? ` [${plugin.entry}]` : '';
|
|
966
1007
|
console.log(` Real-time plugin: installed (${plugin.path})${entrySuffix} — ${trustSuffix}`);
|
|
967
|
-
// Surface any config/disk drift even when installed.
|
|
968
|
-
|
|
1008
|
+
// Surface any config/disk drift even when installed. A legacy `installs`
|
|
1009
|
+
// entry alone is not sufficient for OpenClaw to load the plugin — it needs
|
|
1010
|
+
// `allow` + `entries[id].enabled` — so don't count `inLegacyInstalls` here.
|
|
1011
|
+
if (!configState.inEntries && !configState.inAllow) {
|
|
969
1012
|
console.log(' warning: on disk but missing from openclaw.json — OpenClaw may not load it');
|
|
970
1013
|
}
|
|
1014
|
+
if (configState.inLegacyInstalls) {
|
|
1015
|
+
console.log(' note: legacy `plugins.installs` entry detected — will be cleaned on next `shieldcortex openclaw install`');
|
|
1016
|
+
}
|
|
971
1017
|
}
|
|
972
1018
|
export async function handleOpenClawCommand(subcommand, extraArgs = []) {
|
|
973
1019
|
const noHooks = extraArgs.includes('--no-hooks');
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "shieldcortex",
|
|
3
|
-
"version": "4.14.
|
|
3
|
+
"version": "4.14.11",
|
|
4
4
|
"description": "Trustworthy memory and security for AI agents. Recall debugging, review queue, OpenClaw session capture, and memory poisoning defence for Claude Code, Codex, OpenClaw, LangChain, and MCP agents.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "shieldcortex-realtime",
|
|
3
|
-
"version": "4.14.
|
|
3
|
+
"version": "4.14.11",
|
|
4
4
|
"name": "ShieldCortex Real-time Scanner",
|
|
5
5
|
"description": "Real-time defence scanning on LLM input, memory extraction on LLM output, and active tool call interception with approval gating.",
|
|
6
6
|
"kind": null,
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt sanitisation for ShieldCortex hooks.
|
|
3
|
+
*
|
|
4
|
+
* Strips framework-injected metadata wrappers from the start of a prompt so
|
|
5
|
+
* downstream consumers (e.g. the FTS5 query builder in prompt-recall-hook.mjs)
|
|
6
|
+
* search on the user's actual words, not on metadata terms like
|
|
7
|
+
* "conversation", "info", "untrusted", "metadata", "json", "chat_id".
|
|
8
|
+
*
|
|
9
|
+
* The motivating case: OpenClaw's Telegram channel wraps every incoming
|
|
10
|
+
* message with:
|
|
11
|
+
*
|
|
12
|
+
* Conversation info (untrusted metadata):
|
|
13
|
+
* ```json
|
|
14
|
+
* { "chat_id": "telegram:…", "message_id": "…", … }
|
|
15
|
+
* ```
|
|
16
|
+
* <real user text>
|
|
17
|
+
*
|
|
18
|
+
* Without sanitisation the recall hook's first-6-words-of-prompt query never
|
|
19
|
+
* sees the real user text and recall returns no relevant memories. The
|
|
20
|
+
* resulting symptom is the agent (e.g. Edith) "forgetting" prior conversation
|
|
21
|
+
* context and asking the user to clarify pronoun references.
|
|
22
|
+
*
|
|
23
|
+
* This sanitiser is conservative — it only strips wrappers we have verified
|
|
24
|
+
* in the wild. New patterns require new branches and tests.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
// Header patterns that introduce a discardable metadata block at the top of
|
|
28
|
+
// a prompt. Each entry is matched case-insensitively against the start of
|
|
29
|
+
// the (trimmed) prompt. Order is irrelevant — at most one matches per call.
|
|
30
|
+
const HEADER_PATTERNS = [
|
|
31
|
+
// OpenClaw Telegram channel wrapper. Header line ends with a colon, then
|
|
32
|
+
// a fenced ``` (any language tag) JSON block, then the real user content.
|
|
33
|
+
/^conversation info\s*\([^)]*\)\s*:\s*\n+/i,
|
|
34
|
+
/^conversation info\s*:\s*\n+/i,
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
// Fenced code blocks at the start of a prompt that follow the header. We
|
|
38
|
+
// strip the entire fence (including its content) so metadata key names like
|
|
39
|
+
// "chat_id", "message_id", "sender_id" don't leak into the FTS query.
|
|
40
|
+
const LEADING_FENCE = /^```[a-zA-Z0-9_-]*\n[\s\S]*?\n```\s*\n*/;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Strip framework metadata wrappers from a prompt.
|
|
44
|
+
*
|
|
45
|
+
* @param {string} prompt
|
|
46
|
+
* @returns {string} sanitised prompt — may be empty if the entire prompt
|
|
47
|
+
* was metadata. Never null/undefined.
|
|
48
|
+
*/
|
|
49
|
+
export function sanitisePromptForRecall(prompt) {
|
|
50
|
+
if (typeof prompt !== 'string' || prompt.length === 0) return '';
|
|
51
|
+
|
|
52
|
+
let working = prompt;
|
|
53
|
+
|
|
54
|
+
// 1) Strip a leading metadata header line (e.g. "Conversation info (untrusted metadata):").
|
|
55
|
+
for (const pattern of HEADER_PATTERNS) {
|
|
56
|
+
if (pattern.test(working)) {
|
|
57
|
+
working = working.replace(pattern, '');
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// 2) If the next thing is a fenced code block, strip it as one unit.
|
|
63
|
+
// We only do this when a header was actually consumed in step 1 — a
|
|
64
|
+
// bare fenced block at the start of an unwrapped user prompt may be
|
|
65
|
+
// intentional content (e.g. a code snippet the user is asking about).
|
|
66
|
+
if (working !== prompt && LEADING_FENCE.test(working)) {
|
|
67
|
+
working = working.replace(LEADING_FENCE, '');
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return working.trim();
|
|
71
|
+
}
|