shieldcortex 4.12.13 → 4.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (452) hide show
  1. package/dashboard/.next/standalone/dashboard/.next/BUILD_ID +1 -1
  2. package/dashboard/.next/standalone/dashboard/.next/build-manifest.json +2 -2
  3. package/dashboard/.next/standalone/dashboard/.next/prerender-manifest.json +3 -3
  4. package/dashboard/.next/standalone/dashboard/.next/required-server-files.json +10 -4
  5. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/admin/page.js +1 -1
  6. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/admin/page.js.nft.json +1 -1
  7. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/admin/page_client-reference-manifest.js +1 -1
  8. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/cloud/page.js +1 -1
  9. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/cloud/page.js.nft.json +1 -1
  10. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/cloud/page_client-reference-manifest.js +1 -1
  11. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/capture/page.js +1 -1
  12. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/capture/page.js.nft.json +1 -1
  13. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/capture/page_client-reference-manifest.js +1 -1
  14. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/graph/page.js +1 -1
  15. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/graph/page.js.nft.json +1 -1
  16. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/graph/page_client-reference-manifest.js +1 -1
  17. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page.js +1 -1
  18. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page.js.nft.json +1 -1
  19. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/page_client-reference-manifest.js +1 -1
  20. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/recall/page.js +1 -1
  21. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/recall/page.js.nft.json +1 -1
  22. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/recall/page_client-reference-manifest.js +1 -1
  23. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/review/page.js +1 -1
  24. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/review/page.js.nft.json +1 -1
  25. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/review/page_client-reference-manifest.js +1 -1
  26. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/timeline/page.js +1 -1
  27. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/timeline/page.js.nft.json +1 -1
  28. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/memory/timeline/page_client-reference-manifest.js +1 -1
  29. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/overview/page.js +1 -1
  30. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/overview/page.js.nft.json +1 -1
  31. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/overview/page_client-reference-manifest.js +1 -1
  32. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/audit/page.js +1 -1
  33. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/audit/page.js.nft.json +1 -1
  34. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/audit/page_client-reference-manifest.js +1 -1
  35. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/intercepts/page.js +1 -1
  36. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/intercepts/page.js.nft.json +1 -1
  37. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/intercepts/page_client-reference-manifest.js +1 -1
  38. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/iron-dome/page.js +1 -1
  39. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/iron-dome/page.js.nft.json +1 -1
  40. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/iron-dome/page_client-reference-manifest.js +1 -1
  41. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/page.js +1 -1
  42. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/page.js.nft.json +1 -1
  43. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/page_client-reference-manifest.js +1 -1
  44. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/policies/page.js +1 -1
  45. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/policies/page.js.nft.json +1 -1
  46. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/policies/page_client-reference-manifest.js +1 -1
  47. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/quarantine/page.js +1 -1
  48. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/quarantine/page.js.nft.json +1 -1
  49. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/protection/quarantine/page_client-reference-manifest.js +1 -1
  50. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/settings/page.js +1 -1
  51. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
  52. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  53. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/page.js +1 -1
  54. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/page.js.nft.json +1 -1
  55. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/page_client-reference-manifest.js +1 -1
  56. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/xray/page.js +1 -1
  57. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/xray/page.js.nft.json +1 -1
  58. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/supply-chain/xray/page_client-reference-manifest.js +1 -1
  59. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/xray/page.js +1 -1
  60. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/xray/page.js.nft.json +1 -1
  61. package/dashboard/.next/standalone/dashboard/.next/server/app/(dashboard)/xray/page_client-reference-manifest.js +1 -1
  62. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error/page.js.nft.json +1 -1
  63. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  64. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.html +2 -2
  65. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.rsc +1 -1
  66. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  67. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  68. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  69. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  70. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  71. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found/page.js.nft.json +1 -1
  72. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  73. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.html +1 -1
  74. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.rsc +2 -2
  75. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  76. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  77. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  78. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  79. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  80. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  81. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.html +1 -1
  82. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.rsc +17 -15
  83. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin/__PAGE__.segment.rsc +1 -1
  84. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin.segment.rsc +1 -1
  85. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk.segment.rsc +9 -7
  86. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_full.segment.rsc +17 -15
  87. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  88. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_index.segment.rsc +2 -2
  89. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_tree.segment.rsc +2 -2
  90. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.html +1 -1
  91. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.rsc +17 -15
  92. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud/__PAGE__.segment.rsc +1 -1
  93. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud.segment.rsc +1 -1
  94. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk.segment.rsc +9 -7
  95. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_full.segment.rsc +17 -15
  96. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_head.segment.rsc +1 -1
  97. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_index.segment.rsc +2 -2
  98. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_tree.segment.rsc +2 -2
  99. package/dashboard/.next/standalone/dashboard/.next/server/app/index.html +1 -1
  100. package/dashboard/.next/standalone/dashboard/.next/server/app/index.rsc +2 -2
  101. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  102. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_full.segment.rsc +2 -2
  103. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_head.segment.rsc +1 -1
  104. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_index.segment.rsc +2 -2
  105. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  106. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.html +1 -1
  107. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.rsc +17 -15
  108. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture/__PAGE__.segment.rsc +1 -1
  109. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture.segment.rsc +1 -1
  110. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  111. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk.segment.rsc +9 -7
  112. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_full.segment.rsc +17 -15
  113. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_head.segment.rsc +1 -1
  114. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_index.segment.rsc +2 -2
  115. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_tree.segment.rsc +2 -2
  116. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.html +1 -1
  117. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.rsc +17 -15
  118. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph/__PAGE__.segment.rsc +1 -1
  119. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph.segment.rsc +1 -1
  120. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  121. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk.segment.rsc +9 -7
  122. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_full.segment.rsc +17 -15
  123. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_head.segment.rsc +1 -1
  124. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_index.segment.rsc +2 -2
  125. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_tree.segment.rsc +2 -2
  126. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.html +1 -1
  127. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.rsc +17 -15
  128. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall/__PAGE__.segment.rsc +1 -1
  129. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall.segment.rsc +1 -1
  130. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  131. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk.segment.rsc +9 -7
  132. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_full.segment.rsc +17 -15
  133. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_head.segment.rsc +1 -1
  134. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_index.segment.rsc +2 -2
  135. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_tree.segment.rsc +2 -2
  136. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.html +1 -1
  137. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.rsc +17 -15
  138. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review/__PAGE__.segment.rsc +1 -1
  139. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review.segment.rsc +1 -1
  140. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  141. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk.segment.rsc +9 -7
  142. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_full.segment.rsc +17 -15
  143. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_head.segment.rsc +1 -1
  144. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_index.segment.rsc +2 -2
  145. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_tree.segment.rsc +2 -2
  146. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.html +1 -1
  147. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.rsc +17 -15
  148. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline/__PAGE__.segment.rsc +1 -1
  149. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline.segment.rsc +1 -1
  150. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  151. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk.segment.rsc +9 -7
  152. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_full.segment.rsc +17 -15
  153. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_head.segment.rsc +1 -1
  154. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_index.segment.rsc +2 -2
  155. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_tree.segment.rsc +2 -2
  156. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.html +1 -1
  157. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.rsc +21 -18
  158. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory/__PAGE__.segment.rsc +2 -2
  159. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  160. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk.segment.rsc +9 -7
  161. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_full.segment.rsc +21 -18
  162. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_head.segment.rsc +1 -1
  163. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_index.segment.rsc +2 -2
  164. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_tree.segment.rsc +2 -2
  165. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.html +1 -1
  166. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.rsc +20 -18
  167. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview/__PAGE__.segment.rsc +2 -2
  168. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview.segment.rsc +1 -1
  169. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk.segment.rsc +9 -7
  170. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_full.segment.rsc +20 -18
  171. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_head.segment.rsc +1 -1
  172. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_index.segment.rsc +2 -2
  173. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_tree.segment.rsc +2 -2
  174. package/dashboard/.next/standalone/dashboard/.next/server/app/page.js.nft.json +1 -1
  175. package/dashboard/.next/standalone/dashboard/.next/server/app/page_client-reference-manifest.js +1 -1
  176. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.html +1 -1
  177. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.rsc +17 -15
  178. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit/__PAGE__.segment.rsc +1 -1
  179. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit.segment.rsc +1 -1
  180. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  181. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk.segment.rsc +9 -7
  182. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_full.segment.rsc +17 -15
  183. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_head.segment.rsc +1 -1
  184. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_index.segment.rsc +2 -2
  185. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_tree.segment.rsc +2 -2
  186. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.html +1 -1
  187. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.rsc +17 -15
  188. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts/__PAGE__.segment.rsc +1 -1
  189. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts.segment.rsc +1 -1
  190. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  191. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk.segment.rsc +9 -7
  192. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_full.segment.rsc +17 -15
  193. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_head.segment.rsc +1 -1
  194. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_index.segment.rsc +2 -2
  195. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_tree.segment.rsc +2 -2
  196. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.html +1 -1
  197. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.rsc +17 -15
  198. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome/__PAGE__.segment.rsc +1 -1
  199. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome.segment.rsc +1 -1
  200. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  201. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk.segment.rsc +9 -7
  202. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_full.segment.rsc +17 -15
  203. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_head.segment.rsc +1 -1
  204. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_index.segment.rsc +2 -2
  205. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_tree.segment.rsc +2 -2
  206. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.html +1 -1
  207. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.rsc +17 -15
  208. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies/__PAGE__.segment.rsc +1 -1
  209. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies.segment.rsc +1 -1
  210. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  211. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk.segment.rsc +9 -7
  212. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_full.segment.rsc +17 -15
  213. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_head.segment.rsc +1 -1
  214. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_index.segment.rsc +2 -2
  215. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_tree.segment.rsc +2 -2
  216. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.html +1 -1
  217. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.rsc +17 -15
  218. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine/__PAGE__.segment.rsc +1 -1
  219. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine.segment.rsc +1 -1
  220. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  221. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk.segment.rsc +9 -7
  222. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_full.segment.rsc +17 -15
  223. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_head.segment.rsc +1 -1
  224. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_index.segment.rsc +2 -2
  225. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_tree.segment.rsc +2 -2
  226. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.html +1 -1
  227. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.rsc +17 -15
  228. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection/__PAGE__.segment.rsc +2 -2
  229. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  230. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk.segment.rsc +9 -7
  231. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_full.segment.rsc +17 -15
  232. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_head.segment.rsc +1 -1
  233. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_index.segment.rsc +2 -2
  234. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_tree.segment.rsc +2 -2
  235. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.html +1 -1
  236. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.rsc +17 -15
  237. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings/__PAGE__.segment.rsc +2 -2
  238. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings.segment.rsc +1 -1
  239. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +9 -7
  240. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_full.segment.rsc +17 -15
  241. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  242. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  243. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  244. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.html +1 -1
  245. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.rsc +17 -15
  246. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray/__PAGE__.segment.rsc +1 -1
  247. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray.segment.rsc +1 -1
  248. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +1 -1
  249. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +9 -7
  250. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_full.segment.rsc +17 -15
  251. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_head.segment.rsc +1 -1
  252. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_index.segment.rsc +2 -2
  253. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_tree.segment.rsc +2 -2
  254. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.html +1 -1
  255. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.rsc +17 -15
  256. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain/__PAGE__.segment.rsc +1 -1
  257. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +1 -1
  258. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk.segment.rsc +9 -7
  259. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_full.segment.rsc +17 -15
  260. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_head.segment.rsc +1 -1
  261. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_index.segment.rsc +2 -2
  262. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_tree.segment.rsc +2 -2
  263. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.html +1 -1
  264. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.rsc +17 -15
  265. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray/__PAGE__.segment.rsc +2 -2
  266. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray.segment.rsc +1 -1
  267. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +9 -7
  268. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_full.segment.rsc +17 -15
  269. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_head.segment.rsc +1 -1
  270. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_index.segment.rsc +2 -2
  271. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_tree.segment.rsc +2 -2
  272. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/9f1d4_@tanstack_68dcbde9._.js +3 -0
  273. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/{[root-of-the-server]__fb5796ae._.js → [root-of-the-server]__2de25d56._.js} +2 -2
  274. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__52bd7a9f._.js +3 -0
  275. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/{[root-of-the-server]__b789489c._.js → [root-of-the-server]__6f881a23._.js} +2 -2
  276. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_01f6ceb0._.js +1 -1
  277. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_20c6acea._.js +3 -0
  278. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/{9f1d4_next_c9fe89e1._.js → dashboard_25b568c3._.js} +2 -2
  279. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_2a8eef6b._.js +3 -0
  280. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_35a9932a._.js +1 -1
  281. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_37f17371._.js +1 -1
  282. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_77cb2b63._.js +3 -0
  283. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_91003e6d._.js +3 -0
  284. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_9b8695d8._.js +3 -0
  285. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_a16ef10a._.js +3 -0
  286. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_c219bf07._.js +4 -4
  287. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_f9cd1dc2._.js +3 -0
  288. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_fefd3b85._.js +1 -1
  289. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_44a9f72c._.js +3 -0
  290. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_components_de7ac4f9._.js +3 -0
  291. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_components_protection_ProtectionOverview_tsx_54554a97._.js +3 -3
  292. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_components_settings_SettingsView_tsx_16dc83a7._.js +1 -1
  293. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_components_xray_XRayOverview_tsx_ceba698e._.js +1 -1
  294. package/dashboard/.next/standalone/dashboard/.next/server/pages/404.html +1 -1
  295. package/dashboard/.next/standalone/dashboard/.next/server/pages/500.html +2 -2
  296. package/dashboard/.next/standalone/dashboard/.next/server/server-reference-manifest.js +1 -1
  297. package/dashboard/.next/standalone/dashboard/.next/server/server-reference-manifest.json +1 -1
  298. package/dashboard/.next/standalone/dashboard/.next/static/chunks/015dc64369f26b7d.css +3 -0
  299. package/dashboard/.next/standalone/dashboard/.next/static/chunks/2fe84829530e61a3.js +1 -0
  300. package/dashboard/.next/standalone/dashboard/.next/static/chunks/34d0309a4e34b084.js +1 -0
  301. package/dashboard/.next/standalone/dashboard/.next/static/chunks/3729c748a4361c1f.js +1 -0
  302. package/dashboard/.next/standalone/dashboard/.next/static/chunks/3b7fdf1ee828254c.js +1 -0
  303. package/dashboard/.next/standalone/dashboard/.next/static/chunks/{3d53807a9a943ce7.js → 4c90ebd2c08cd656.js} +4 -4
  304. package/dashboard/.next/standalone/dashboard/.next/static/chunks/4d4af0cecaef56f2.js +1 -0
  305. package/dashboard/.next/standalone/dashboard/.next/static/chunks/4eb86dc2f379d3ca.js +1 -0
  306. package/dashboard/.next/standalone/dashboard/.next/static/chunks/6aba18b7aac42ccd.js +1 -0
  307. package/dashboard/.next/standalone/dashboard/.next/static/chunks/{b4b3fb5729bead7e.js → 6ea97c8dc9e30ea5.js} +1 -1
  308. package/dashboard/.next/standalone/dashboard/.next/static/chunks/74ea1a87751e93a3.js +1 -0
  309. package/dashboard/.next/standalone/dashboard/.next/static/chunks/910628c23329a773.js +1 -0
  310. package/dashboard/.next/standalone/dashboard/.next/static/chunks/{c288964c4c00982a.js → b308a787e8cbc2a9.js} +3 -3
  311. package/dashboard/.next/standalone/dashboard/.next/static/chunks/bdb50889a1c1ab37.js +1 -0
  312. package/dashboard/.next/standalone/dashboard/.next/static/chunks/d0bf5ccba09917dd.js +1 -0
  313. package/dashboard/.next/standalone/dashboard/.next/static/chunks/e804a1fda2839550.js +1 -0
  314. package/dashboard/.next/standalone/dashboard/server.js +1 -1
  315. package/dist/api/routes/digest.d.ts +59 -0
  316. package/dist/api/routes/digest.js +305 -0
  317. package/dist/api/routes/memories.js +84 -15
  318. package/dist/api/routes/system.js +10 -2
  319. package/dist/api/visualization-server.js +2 -0
  320. package/dist/cli/doctor.d.ts +27 -0
  321. package/dist/cli/doctor.js +88 -0
  322. package/dist/cli/migrate-legacy.d.ts +28 -0
  323. package/dist/cli/migrate-legacy.js +291 -0
  324. package/dist/cloud/cli.js +2 -2
  325. package/dist/database/init.js +26 -1
  326. package/dist/index.js +8 -1
  327. package/dist/memory/backup.d.ts +19 -0
  328. package/dist/memory/backup.js +47 -0
  329. package/dist/memory/dedupe-runner.d.ts +33 -0
  330. package/dist/memory/dedupe-runner.js +103 -0
  331. package/dist/memory/fts.d.ts +26 -0
  332. package/dist/memory/fts.js +59 -0
  333. package/dist/memory/lifecycle.d.ts +83 -0
  334. package/dist/memory/lifecycle.js +274 -0
  335. package/dist/memory/links.d.ts +63 -0
  336. package/dist/memory/links.js +232 -0
  337. package/dist/memory/prune.d.ts +34 -0
  338. package/dist/memory/prune.js +76 -0
  339. package/dist/memory/search-recall.d.ts +48 -0
  340. package/dist/memory/search-recall.js +367 -0
  341. package/dist/memory/store.d.ts +6 -121
  342. package/dist/memory/store.js +45 -854
  343. package/dist/setup/claude-md.d.ts +1 -0
  344. package/dist/setup/deep-clean.d.ts +33 -0
  345. package/dist/setup/deep-clean.js +26 -0
  346. package/dist/setup/doctor.js +7 -2
  347. package/dist/setup/openclaw.js +13 -39
  348. package/dist/setup/settings-hooks.d.ts +1 -0
  349. package/dist/setup/settings-hooks.js +30 -5
  350. package/dist/setup/status.js +39 -0
  351. package/hooks/openclaw/cortex-memory/runtime.mjs +18 -4
  352. package/package.json +1 -1
  353. package/plugins/openclaw/dist/index.js +12 -6
  354. package/plugins/openclaw/dist/openclaw.plugin.json +1 -1
  355. package/scripts/lib/auto-memory-config.mjs +45 -0
  356. package/scripts/lib/telemetry.mjs +58 -0
  357. package/scripts/lib/transcript-reader.mjs +123 -0
  358. package/scripts/postinstall.mjs +47 -1
  359. package/scripts/pre-compact-hook.mjs +76 -124
  360. package/scripts/session-end-hook.mjs +102 -97
  361. package/scripts/stop-hook.mjs +346 -116
  362. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/9f1d4_@tanstack_785e068c._.js +0 -3
  363. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/[root-of-the-server]__c2b92077._.js +0 -3
  364. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_11878109._.js +0 -3
  365. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_35c9f22e._.js +0 -3
  366. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_836b4a04._.js +0 -3
  367. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_9770c429._.js +0 -3
  368. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_9dd626ed._.js +0 -3
  369. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_e94d2da2._.js +0 -3
  370. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_564ea5ae._.js +0 -3
  371. package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_src_lib_3f1490a1._.js +0 -3
  372. package/dashboard/.next/standalone/dashboard/.next/static/chunks/079a5be036130e37.js +0 -1
  373. package/dashboard/.next/standalone/dashboard/.next/static/chunks/1770a8ce7abb2437.js +0 -1
  374. package/dashboard/.next/standalone/dashboard/.next/static/chunks/1a074f8ddc7cd385.js +0 -1
  375. package/dashboard/.next/standalone/dashboard/.next/static/chunks/24da99d1341bd573.css +0 -3
  376. package/dashboard/.next/standalone/dashboard/.next/static/chunks/2aa8afb655c1c2e5.js +0 -1
  377. package/dashboard/.next/standalone/dashboard/.next/static/chunks/302ad459a0e5c4ba.js +0 -1
  378. package/dashboard/.next/standalone/dashboard/.next/static/chunks/385ec610bad1acc5.js +0 -1
  379. package/dashboard/.next/standalone/dashboard/.next/static/chunks/4f57582c2d186438.js +0 -1
  380. package/dashboard/.next/standalone/dashboard/.next/static/chunks/52843253e4b833a5.js +0 -1
  381. package/dashboard/.next/standalone/dashboard/.next/static/chunks/7fca141efba9d353.js +0 -1
  382. package/dashboard/.next/standalone/dashboard/.next/static/chunks/8593e1796c9d043d.js +0 -1
  383. package/dashboard/.next/standalone/dashboard/.next/static/chunks/cbc2e6ffcad6e91c.js +0 -1
  384. package/dashboard/.next/standalone/dashboard/.next/static/chunks/fced7dd3c9874ed1.js +0 -1
  385. package/dashboard/.next/standalone/dashboard/node_modules/@img/colour/color.cjs +0 -1594
  386. package/dashboard/.next/standalone/dashboard/node_modules/@img/colour/index.cjs +0 -1
  387. package/dashboard/.next/standalone/dashboard/node_modules/@img/colour/package.json +0 -45
  388. package/dashboard/.next/standalone/dashboard/node_modules/@img/sharp-libvips-linux-x64/README.md +0 -46
  389. package/dashboard/.next/standalone/dashboard/node_modules/@img/sharp-libvips-linux-x64/lib/glib-2.0/include/glibconfig.h +0 -221
  390. package/dashboard/.next/standalone/dashboard/node_modules/@img/sharp-libvips-linux-x64/lib/index.js +0 -1
  391. package/dashboard/.next/standalone/dashboard/node_modules/@img/sharp-libvips-linux-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  392. package/dashboard/.next/standalone/dashboard/node_modules/@img/sharp-libvips-linux-x64/package.json +0 -42
  393. package/dashboard/.next/standalone/dashboard/node_modules/@img/sharp-libvips-linux-x64/versions.json +0 -30
  394. package/dashboard/.next/standalone/dashboard/node_modules/@img/sharp-libvips-linuxmusl-x64/README.md +0 -46
  395. package/dashboard/.next/standalone/dashboard/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/glib-2.0/include/glibconfig.h +0 -221
  396. package/dashboard/.next/standalone/dashboard/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/index.js +0 -1
  397. package/dashboard/.next/standalone/dashboard/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  398. package/dashboard/.next/standalone/dashboard/node_modules/@img/sharp-libvips-linuxmusl-x64/package.json +0 -42
  399. package/dashboard/.next/standalone/dashboard/node_modules/@img/sharp-libvips-linuxmusl-x64/versions.json +0 -30
  400. package/dashboard/.next/standalone/dashboard/node_modules/@img/sharp-linux-x64/lib/sharp-linux-x64.node +0 -0
  401. package/dashboard/.next/standalone/dashboard/node_modules/@img/sharp-linux-x64/package.json +0 -46
  402. package/dashboard/.next/standalone/dashboard/node_modules/@img/sharp-linuxmusl-x64/lib/sharp-linuxmusl-x64.node +0 -0
  403. package/dashboard/.next/standalone/dashboard/node_modules/@img/sharp-linuxmusl-x64/package.json +0 -46
  404. package/dashboard/.next/standalone/dashboard/node_modules/detect-libc/lib/detect-libc.js +0 -313
  405. package/dashboard/.next/standalone/dashboard/node_modules/detect-libc/lib/elf.js +0 -39
  406. package/dashboard/.next/standalone/dashboard/node_modules/detect-libc/lib/filesystem.js +0 -51
  407. package/dashboard/.next/standalone/dashboard/node_modules/detect-libc/lib/process.js +0 -24
  408. package/dashboard/.next/standalone/dashboard/node_modules/detect-libc/package.json +0 -44
  409. package/dashboard/.next/standalone/dashboard/node_modules/sharp/lib/channel.js +0 -177
  410. package/dashboard/.next/standalone/dashboard/node_modules/sharp/lib/colour.js +0 -195
  411. package/dashboard/.next/standalone/dashboard/node_modules/sharp/lib/composite.js +0 -212
  412. package/dashboard/.next/standalone/dashboard/node_modules/sharp/lib/constructor.js +0 -499
  413. package/dashboard/.next/standalone/dashboard/node_modules/sharp/lib/index.js +0 -16
  414. package/dashboard/.next/standalone/dashboard/node_modules/sharp/lib/input.js +0 -809
  415. package/dashboard/.next/standalone/dashboard/node_modules/sharp/lib/is.js +0 -143
  416. package/dashboard/.next/standalone/dashboard/node_modules/sharp/lib/libvips.js +0 -207
  417. package/dashboard/.next/standalone/dashboard/node_modules/sharp/lib/operation.js +0 -1016
  418. package/dashboard/.next/standalone/dashboard/node_modules/sharp/lib/output.js +0 -1666
  419. package/dashboard/.next/standalone/dashboard/node_modules/sharp/lib/resize.js +0 -595
  420. package/dashboard/.next/standalone/dashboard/node_modules/sharp/lib/sharp.js +0 -121
  421. package/dashboard/.next/standalone/dashboard/node_modules/sharp/lib/utility.js +0 -291
  422. package/dashboard/.next/standalone/dashboard/node_modules/sharp/node_modules/semver/classes/comparator.js +0 -143
  423. package/dashboard/.next/standalone/dashboard/node_modules/sharp/node_modules/semver/classes/range.js +0 -557
  424. package/dashboard/.next/standalone/dashboard/node_modules/sharp/node_modules/semver/classes/semver.js +0 -333
  425. package/dashboard/.next/standalone/dashboard/node_modules/sharp/node_modules/semver/functions/cmp.js +0 -54
  426. package/dashboard/.next/standalone/dashboard/node_modules/sharp/node_modules/semver/functions/coerce.js +0 -62
  427. package/dashboard/.next/standalone/dashboard/node_modules/sharp/node_modules/semver/functions/compare.js +0 -7
  428. package/dashboard/.next/standalone/dashboard/node_modules/sharp/node_modules/semver/functions/eq.js +0 -5
  429. package/dashboard/.next/standalone/dashboard/node_modules/sharp/node_modules/semver/functions/gt.js +0 -5
  430. package/dashboard/.next/standalone/dashboard/node_modules/sharp/node_modules/semver/functions/gte.js +0 -5
  431. package/dashboard/.next/standalone/dashboard/node_modules/sharp/node_modules/semver/functions/lt.js +0 -5
  432. package/dashboard/.next/standalone/dashboard/node_modules/sharp/node_modules/semver/functions/lte.js +0 -5
  433. package/dashboard/.next/standalone/dashboard/node_modules/sharp/node_modules/semver/functions/neq.js +0 -5
  434. package/dashboard/.next/standalone/dashboard/node_modules/sharp/node_modules/semver/functions/parse.js +0 -18
  435. package/dashboard/.next/standalone/dashboard/node_modules/sharp/node_modules/semver/functions/satisfies.js +0 -12
  436. package/dashboard/.next/standalone/dashboard/node_modules/sharp/node_modules/semver/internal/constants.js +0 -37
  437. package/dashboard/.next/standalone/dashboard/node_modules/sharp/node_modules/semver/internal/debug.js +0 -11
  438. package/dashboard/.next/standalone/dashboard/node_modules/sharp/node_modules/semver/internal/identifiers.js +0 -29
  439. package/dashboard/.next/standalone/dashboard/node_modules/sharp/node_modules/semver/internal/lrucache.js +0 -42
  440. package/dashboard/.next/standalone/dashboard/node_modules/sharp/node_modules/semver/internal/parse-options.js +0 -17
  441. package/dashboard/.next/standalone/dashboard/node_modules/sharp/node_modules/semver/internal/re.js +0 -223
  442. package/dashboard/.next/standalone/dashboard/node_modules/sharp/node_modules/semver/package.json +0 -78
  443. package/dashboard/.next/standalone/dashboard/node_modules/sharp/package.json +0 -202
  444. package/dashboard/.next/standalone/node_modules/@img/colour/package.json +0 -45
  445. package/dashboard/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/package.json +0 -42
  446. package/dashboard/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/package.json +0 -42
  447. package/dashboard/.next/standalone/node_modules/@img/sharp-linux-x64/package.json +0 -46
  448. package/dashboard/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/package.json +0 -46
  449. package/dashboard/.next/standalone/node_modules/detect-libc/package.json +0 -44
  450. /package/dashboard/.next/standalone/dashboard/.next/static/{ZozFsMrOVzVLH6CQW3jPr → kiA_iEHG_1wWOEYFsD0Tj}/_buildManifest.js +0 -0
  451. /package/dashboard/.next/standalone/dashboard/.next/static/{ZozFsMrOVzVLH6CQW3jPr → kiA_iEHG_1wWOEYFsD0Tj}/_clientMiddlewareManifest.json +0 -0
  452. /package/dashboard/.next/standalone/dashboard/.next/static/{ZozFsMrOVzVLH6CQW3jPr → kiA_iEHG_1wWOEYFsD0Tj}/_ssgManifest.js +0 -0
@@ -1,163 +1,393 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  /**
4
- * ShieldCortex — Stop Hook
4
+ * ShieldCortex — Stop Hook (sampling extractor)
5
5
  *
6
- * Fires after each Claude response. Checks the last assistant message for
7
- * high-salience content (decisions, fixes, learnings) that should be saved
8
- * to memory via the `remember` tool.
6
+ * Replaces the v4.x exit-2 "nudge Claude to call remember" behaviour with
7
+ * silent, sampled, server-side extraction:
9
8
  *
10
- * Loop prevention: If stop_hook_active is true, exits 0 immediately
11
- * (programmatic check, not LLM-dependent).
9
+ * - Counts assistant turns in the transcript.
10
+ * - Every Nth turn (default 10), runs the standard salience pipeline over
11
+ * the most recent window of conversation and saves any memories that
12
+ * clear the per-category threshold.
13
+ * - Always exits 0. Never blocks Claude from finishing its response.
12
14
  *
13
- * Exit codes:
14
- * 0 = allow Claude to stop
15
- * 2 = block stop (stderr tells Claude to use `remember`)
15
+ * The transcript reader is bounded by `autoMemory.stopHookWindowBytes`
16
+ * (default 256 KiB) to keep per-turn cost predictable.
16
17
  */
17
18
 
18
- import { readFileSync, existsSync } from 'fs';
19
+ import Database from 'better-sqlite3';
20
+ import { existsSync, mkdirSync, openSync, readSync, closeSync, statSync } from 'fs';
21
+ import { join } from 'path';
19
22
  import { homedir } from 'os';
23
+ import { saveAutoExtractedMemory } from './lib/save-memory.mjs';
24
+ import { readTranscriptText } from './lib/transcript-reader.mjs';
25
+ import { getAutoMemoryConfig } from './lib/auto-memory-config.mjs';
26
+ import { recordHookInvocation } from './lib/telemetry.mjs';
20
27
 
21
- // ==================== SALIENCE DETECTION ====================
28
+ // ==================== DB ====================
22
29
 
23
- const DECISION_KEYWORDS = [
24
- 'decided', 'decision', 'chose', 'chosen', 'selected', 'going with',
25
- 'will use', 'opted for', 'settled on', 'agreed'
26
- ];
30
+ const NEW_DB_DIR = join(homedir(), '.shieldcortex');
31
+ const LEGACY_DB_DIR = join(homedir(), '.claude-cortex');
27
32
 
28
- const ERROR_KEYWORDS = [
29
- 'fixed by', 'the fix was', 'root cause', 'the bug was', 'the solution was',
30
- 'resolved by', 'the issue was', 'workaround'
31
- ];
33
+ function getDbPath() {
34
+ const newPath = join(NEW_DB_DIR, 'memories.db');
35
+ const legacyPath = join(LEGACY_DB_DIR, 'memories.db');
36
+ if (existsSync(newPath) || !existsSync(legacyPath)) {
37
+ return { dir: NEW_DB_DIR, path: newPath };
38
+ }
39
+ return { dir: LEGACY_DB_DIR, path: legacyPath };
40
+ }
32
41
 
33
- const LEARNING_KEYWORDS = [
34
- 'learned that', 'discovered that', 'realized that', 'found out',
35
- 'turns out', 'TIL', 'figured out'
36
- ];
42
+ const { dir: DB_DIR, path: DB_PATH } = getDbPath();
37
43
 
38
- const ARCHITECTURE_KEYWORDS = [
39
- 'architecture uses', 'design decision', 'implemented', 'refactored to',
40
- 'migrated from', 'created a new', 'built a'
41
- ];
44
+ // Memory limits (kept in sync with pre-compact)
45
+ const MAX_SHORT_TERM_MEMORIES = 100;
46
+ const MAX_LONG_TERM_MEMORIES = 1000;
47
+ const BASE_THRESHOLD = 0.35;
48
+ const MAX_AUTO_MEMORIES = 2;
49
+
50
+ const CATEGORY_EXTRACTION_THRESHOLDS = {
51
+ architecture: 0.38,
52
+ error: 0.40,
53
+ context: 0.42,
54
+ learning: 0.42,
55
+ pattern: 0.45,
56
+ preference: 0.48,
57
+ note: 0.52,
58
+ todo: 0.50,
59
+ relationship: 0.45,
60
+ custom: 0.45,
61
+ };
42
62
 
43
- const PREFERENCE_KEYWORDS = [
44
- 'always use', 'never use', 'prefer to', 'convention is',
45
- 'standard is', 'rule is'
63
+ // ==================== PROJECT DETECTION ====================
64
+
65
+ const SKIP_DIRECTORIES = [
66
+ 'src', 'lib', 'dist', 'build', 'out',
67
+ 'node_modules', '.git', '.next', '.cache',
68
+ 'test', 'tests', '__tests__', 'spec',
69
+ 'bin', 'scripts', 'config', 'public', 'static',
46
70
  ];
47
71
 
48
- const IMPORTANT_MARKERS = [
49
- 'important:', 'remember:', 'key point', 'crucial:', 'note:'
72
+ function extractProjectFromPath(p) {
73
+ if (!p) return null;
74
+ const segments = p.split(/[/\\]/).filter(Boolean);
75
+ for (let i = segments.length - 1; i >= 0; i--) {
76
+ const segment = segments[i];
77
+ if (!SKIP_DIRECTORIES.includes(segment.toLowerCase())) {
78
+ if (segment.startsWith('.')) continue;
79
+ return segment;
80
+ }
81
+ }
82
+ return null;
83
+ }
84
+
85
+ // ==================== SALIENCE (mirrors pre-compact) ====================
86
+
87
+ const ARCHITECTURE_KEYWORDS = ['architecture','design','pattern','structure','system','database','api','schema','model','framework','stack','microservice','monolith','serverless','infrastructure'];
88
+ const ERROR_KEYWORDS = ['error','bug','fix','issue','problem','crash','fail','exception','debug','resolve','solution','workaround'];
89
+ const PREFERENCE_KEYWORDS = ['prefer','always','never','style','convention','standard','like','want','should','must','require'];
90
+ const PATTERN_KEYWORDS = ['pattern','practice','approach','method','technique','implementation','strategy','algorithm','workflow'];
91
+ const DECISION_KEYWORDS = ['decided','decision','chose','chosen','selected','going with','will use','opted for','settled on','agreed'];
92
+ const LEARNING_KEYWORDS = ['learned','discovered','realized','found out','turns out','TIL','now know','understand now','figured out'];
93
+ const EMOTIONAL_MARKERS = ['important','critical','crucial','essential','key','finally','breakthrough','eureka','aha','got it','frustrating','annoying','tricky','remember'];
94
+ const CODE_REFERENCE_PATTERNS = [
95
+ /\b[A-Z][a-zA-Z]*\.[a-zA-Z]+\b/,
96
+ /\b[a-z_][a-zA-Z0-9_]*\.(ts|js|py|go|rs)\b/,
97
+ /`[^`]+`/,
98
+ /\b(function|class|interface|type|const|let|var)\s+\w+/i,
99
+ /\bline\s*\d+\b/i,
100
+ /\b(src|lib|app|components?)\/\S+/,
50
101
  ];
51
102
 
52
103
  function detectKeywords(text, keywords) {
53
104
  const lower = text.toLowerCase();
54
- return keywords.some(kw => lower.includes(kw.toLowerCase()));
105
+ return keywords.some((k) => lower.includes(k.toLowerCase()));
55
106
  }
56
-
57
- /**
58
- * Check if text contains high-salience content worth remembering.
59
- * Returns a description string if yes, null if no.
60
- */
61
- function detectNotableContent(text) {
107
+ function detectCodeReferences(c) {
108
+ return CODE_REFERENCE_PATTERNS.some((p) => p.test(c));
109
+ }
110
+ function detectExplicitRequest(t) {
111
+ const patterns = [
112
+ /\bremember\s+(this|that)\b/i, /\bdon'?t\s+forget\b/i, /\bkeep\s+(in\s+)?mind\b/i,
113
+ /\bnote\s+(this|that)\b/i, /\bsave\s+(this|that)\b/i, /\bimportant[:\s]/i,
114
+ /\bfor\s+future\s+reference\b/i,
115
+ ];
116
+ return patterns.some((p) => p.test(t));
117
+ }
118
+ function calculateSalience(text) {
119
+ let score = 0.25;
120
+ if (detectExplicitRequest(text)) score += 0.5;
121
+ if (detectKeywords(text, ARCHITECTURE_KEYWORDS)) score += 0.4;
122
+ if (detectKeywords(text, ERROR_KEYWORDS)) score += 0.35;
123
+ if (detectKeywords(text, DECISION_KEYWORDS)) score += 0.35;
124
+ if (detectKeywords(text, LEARNING_KEYWORDS)) score += 0.3;
125
+ if (detectKeywords(text, PATTERN_KEYWORDS)) score += 0.25;
126
+ if (detectKeywords(text, PREFERENCE_KEYWORDS)) score += 0.25;
127
+ if (detectCodeReferences(text)) score += 0.15;
128
+ if (detectKeywords(text, EMOTIONAL_MARKERS)) score += 0.2;
129
+ return Math.min(1.0, score);
130
+ }
131
+ function suggestCategory(text) {
62
132
  const lower = text.toLowerCase();
133
+ if (detectKeywords(lower, ARCHITECTURE_KEYWORDS)) return 'architecture';
134
+ if (detectKeywords(lower, ERROR_KEYWORDS)) return 'error';
135
+ if (detectKeywords(lower, DECISION_KEYWORDS)) return 'context';
136
+ if (detectKeywords(lower, LEARNING_KEYWORDS)) return 'learning';
137
+ if (detectKeywords(lower, PREFERENCE_KEYWORDS)) return 'preference';
138
+ if (detectKeywords(lower, PATTERN_KEYWORDS)) return 'pattern';
139
+ if (/\b(todo|fixme|hack|xxx)\b/i.test(lower)) return 'todo';
140
+ return 'note';
141
+ }
142
+ function extractTags(text, extractorName) {
143
+ const tags = new Set();
144
+ const hashtags = text.match(/#[a-zA-Z][a-zA-Z0-9_-]*/g);
145
+ if (hashtags) hashtags.forEach((t) => tags.add(t.slice(1).toLowerCase()));
146
+ ['react','vue','angular','node','python','typescript','javascript','api','database','sql','mongodb','postgresql','mysql','docker','kubernetes','aws','git','testing','auth','security']
147
+ .forEach((t) => { if (text.toLowerCase().includes(t)) tags.add(t); });
148
+ tags.add('auto-extracted');
149
+ tags.add('source:stop-hook');
150
+ if (extractorName) tags.add(`source:${extractorName}`);
151
+ return Array.from(tags).slice(0, 12);
152
+ }
63
153
 
64
- if (detectKeywords(lower, DECISION_KEYWORDS)) {
65
- return 'A decision was made in the last response';
66
- }
67
- if (detectKeywords(lower, ERROR_KEYWORDS)) {
68
- return 'A bug fix or error resolution was described';
69
- }
70
- if (detectKeywords(lower, LEARNING_KEYWORDS)) {
71
- return 'Something new was learned or discovered';
72
- }
73
- if (detectKeywords(lower, ARCHITECTURE_KEYWORDS)) {
74
- return 'An architecture or design change was made';
75
- }
76
- if (detectKeywords(lower, PREFERENCE_KEYWORDS)) {
77
- return 'A preference or convention was stated';
154
+ // ==================== EXTRACTORS ====================
155
+
156
+ function extractMemorableSegments(text) {
157
+ const segments = [];
158
+ const extractors = [
159
+ { name: 'decision', titlePrefix: 'Decision: ', patterns: [
160
+ /(?:we\s+)?decided\s+(?:to\s+)?(.{15,200})/gi,
161
+ /(?:going|went)\s+with\s+(.{15,150})/gi,
162
+ /(?:chose|chosen|selected)\s+(.{15,150})/gi,
163
+ /the\s+(?:approach|solution|fix)\s+(?:is|was)\s+(.{15,200})/gi,
164
+ /(?:using|will\s+use)\s+(.{15,150})/gi,
165
+ /(?:opted\s+for|settled\s+on)\s+(.{15,150})/gi,
166
+ ]},
167
+ { name: 'error-fix', titlePrefix: 'Fix: ', patterns: [
168
+ /(?:fixed|solved|resolved)\s+(?:by\s+)?(.{15,200})/gi,
169
+ /the\s+(?:fix|solution|workaround)\s+(?:is|was)\s+(.{15,200})/gi,
170
+ /(?:root\s+cause|issue)\s+(?:is|was)\s+(.{15,200})/gi,
171
+ /(?:error|bug)\s+(?:was\s+)?caused\s+by\s+(.{15,200})/gi,
172
+ ]},
173
+ { name: 'learning', titlePrefix: 'Learned: ', patterns: [
174
+ /(?:learned|discovered|realized|found\s+out)\s+(?:that\s+)?(.{15,200})/gi,
175
+ /turns\s+out\s+(?:that\s+)?(.{15,200})/gi,
176
+ /(?:figured\s+out|worked\s+out)\s+(.{15,150})/gi,
177
+ ]},
178
+ { name: 'preference', titlePrefix: 'Preference: ', patterns: [
179
+ /(?:always|never)\s+(.{10,150})/gi,
180
+ /(?:prefer|want)\s+to\s+(.{10,150})/gi,
181
+ ]},
182
+ ];
183
+ for (const ex of extractors) {
184
+ for (const p of ex.patterns) {
185
+ let m;
186
+ while ((m = p.exec(text)) !== null) {
187
+ const content = m[1].trim();
188
+ if (content.length >= 20) {
189
+ const titleContent = content.slice(0, 50).replace(/\s+/g, ' ').trim();
190
+ const title = ex.titlePrefix + (titleContent.length < 50 ? titleContent : titleContent + '...');
191
+ segments.push({ title, content: content.slice(0, 500), extractorType: ex.name });
192
+ }
193
+ }
194
+ }
78
195
  }
79
- if (detectKeywords(lower, IMPORTANT_MARKERS)) {
80
- return 'Something was marked as important';
196
+ return segments;
197
+ }
198
+
199
+ function calculateOverlap(t1, t2) {
200
+ const w1 = new Set(t1.toLowerCase().split(/\s+/));
201
+ const w2 = new Set(t2.toLowerCase().split(/\s+/));
202
+ const inter = new Set([...w1].filter((w) => w2.has(w)));
203
+ const union = new Set([...w1, ...w2]);
204
+ return inter.size / Math.max(1, union.size);
205
+ }
206
+
207
+ function processSegments(segments, dynamicThreshold) {
208
+ const unique = [];
209
+ for (const seg of segments) {
210
+ if (unique.some((u) => calculateOverlap(u.content, seg.content) > 0.8)) continue;
211
+ const text = seg.title + ' ' + seg.content;
212
+ unique.push({
213
+ ...seg,
214
+ salience: calculateSalience(text),
215
+ category: suggestCategory(text),
216
+ tags: extractTags(text, seg.extractorType),
217
+ });
81
218
  }
219
+ unique.sort((a, b) => b.salience - a.salience);
220
+ const filtered = unique.filter((s) => {
221
+ const cat = CATEGORY_EXTRACTION_THRESHOLDS[s.category] ?? BASE_THRESHOLD;
222
+ return s.salience >= Math.min(cat, dynamicThreshold);
223
+ });
224
+ return filtered.slice(0, MAX_AUTO_MEMORIES);
225
+ }
82
226
 
83
- return null;
227
+ function getMemoryStats(db) {
228
+ try {
229
+ return db.prepare(`
230
+ SELECT
231
+ SUM(CASE WHEN type='short_term' THEN 1 ELSE 0 END) AS shortTerm,
232
+ SUM(CASE WHEN type='long_term' THEN 1 ELSE 0 END) AS longTerm
233
+ FROM memories
234
+ `).get() || { shortTerm: 0, longTerm: 0 };
235
+ } catch { return { shortTerm: 0, longTerm: 0 }; }
84
236
  }
85
237
 
238
+ function getDynamicThreshold(count, max) {
239
+ const f = count / max;
240
+ if (f > 0.8) return 0.50;
241
+ if (f > 0.6) return 0.42;
242
+ if (f > 0.4) return 0.35;
243
+ if (f > 0.2) return 0.30;
244
+ return 0.25;
245
+ }
246
+
247
+ // ==================== TURN COUNT (cheap, partial-read) ====================
248
+
86
249
  /**
87
- * Read the last assistant message from the transcript JSONL.
250
+ * Count assistant turns in the last `windowBytes` of the transcript.
251
+ * Doesn't parse — just counts occurrences of the assistant role marker.
252
+ * That's a very rough approximation but it's enough for sample-every-N
253
+ * decisions and an order of magnitude cheaper than full JSON parse.
88
254
  */
89
- function getLastAssistantMessage(transcriptPath) {
90
- if (!transcriptPath) return '';
91
-
255
+ function countAssistantTurns(transcriptPath, windowBytes) {
256
+ if (!transcriptPath) return 0;
92
257
  const resolved = transcriptPath.replace(/^~/, homedir());
93
- if (!existsSync(resolved)) return '';
94
-
258
+ if (!existsSync(resolved)) return 0;
95
259
  try {
96
- const content = readFileSync(resolved, 'utf-8');
97
- const lines = content.trim().split('\n');
98
-
99
- // Read from the end to find the last assistant message
100
- for (let i = lines.length - 1; i >= Math.max(0, lines.length - 20); i--) {
101
- try {
102
- const entry = JSON.parse(lines[i]);
103
- const role = entry.type || entry.message?.role;
104
- if (role === 'assistant' && entry.message?.content) {
105
- const msgContent = entry.message.content;
106
- return Array.isArray(msgContent)
107
- ? msgContent.filter(c => c.type === 'text').map(c => c.text).join('\n')
108
- : msgContent;
109
- }
110
- } catch {
111
- // Skip invalid lines
112
- }
260
+ const stat = statSync(resolved);
261
+ const bytes = Math.min(stat.size, windowBytes);
262
+ const fd = openSync(resolved, 'r');
263
+ let raw;
264
+ try {
265
+ const buf = Buffer.alloc(bytes);
266
+ readSync(fd, buf, 0, bytes, stat.size - bytes);
267
+ raw = buf.toString('utf-8');
268
+ } finally {
269
+ closeSync(fd);
113
270
  }
114
- return '';
271
+ // Each assistant message line carries `"role":"assistant"` (or `"type":"assistant"`).
272
+ // Count occurrences of either marker — close enough for sampling decisions.
273
+ return (raw.match(/"role":"assistant"|"type":"assistant"/g) || []).length;
115
274
  } catch {
116
- return '';
275
+ return 0;
117
276
  }
118
277
  }
119
278
 
120
279
  // ==================== MAIN ====================
121
280
 
122
- async function main() {
123
- let hookData;
281
+ let input = '';
282
+ process.stdin.setEncoding('utf8');
283
+ process.stdin.on('readable', () => {
284
+ let chunk;
285
+ while ((chunk = process.stdin.read()) !== null) input += chunk;
286
+ });
287
+
288
+ process.stdin.on('end', () => {
289
+ const startedAt = Date.now();
290
+ let db = null;
291
+ let extractedCount = 0;
292
+ let bytesRead = 0;
293
+ let notes = null;
294
+
124
295
  try {
125
- const stdin = readFileSync(0, 'utf-8');
126
- hookData = JSON.parse(stdin);
127
- } catch {
128
- // No stdin or invalid JSON — allow stop
129
- process.exit(0);
130
- }
296
+ let hookData = {};
297
+ try { hookData = JSON.parse(input || '{}'); } catch { /* allow empty */ }
131
298
 
132
- // PROGRAMMATIC LOOP PREVENTION
133
- // If Claude is already continuing from a stop hook, always allow stop.
134
- if (hookData.stop_hook_active === true) {
135
- process.exit(0);
136
- }
299
+ if (hookData.stop_hook_active === true) {
300
+ // Loop prevention never re-engage from an already-engaged stop hook.
301
+ process.exit(0);
302
+ }
137
303
 
138
- // Read the last assistant message
139
- const lastMessage = getLastAssistantMessage(hookData.transcript_path);
140
- if (!lastMessage || lastMessage.length < 50) {
141
- // Too short to contain anything notable
142
- process.exit(0);
143
- }
304
+ const autoMemConfig = getAutoMemoryConfig();
305
+ if (!autoMemConfig.enableStop) {
306
+ // Opt-in by config (or by `--with-stop-hook` install flag, which only
307
+ // wires the hook in settings.json — config still gates execution).
308
+ process.exit(0);
309
+ }
144
310
 
145
- // Check for notable content
146
- const description = detectNotableContent(lastMessage);
147
- if (description) {
148
- // Block stop — tell Claude to use remember
149
- process.stderr.write(
150
- `Use the remember tool to save what just happened: ${description}. ` +
151
- `Then continue with your response.`
152
- );
153
- process.exit(2);
154
- }
311
+ const samplingTurns = autoMemConfig.stopHookSamplingTurns;
312
+ const windowBytes = autoMemConfig.stopHookWindowBytes;
155
313
 
156
- // Nothing notable allow stop
157
- process.exit(0);
158
- }
314
+ const turnCount = countAssistantTurns(hookData.transcript_path, windowBytes);
315
+ if (turnCount === 0 || turnCount % samplingTurns !== 0) {
316
+ // Off-sample. Exit silently — but record the firing so telemetry shows
317
+ // the hook is actually wired and active.
318
+ if (existsSync(DB_PATH)) {
319
+ try {
320
+ const tdb = new Database(DB_PATH, { timeout: 1500 });
321
+ recordHookInvocation(tdb, {
322
+ hookName: 'stop',
323
+ exitCode: 0,
324
+ durationMs: Date.now() - startedAt,
325
+ memoriesExtracted: 0,
326
+ transcriptBytes: 0,
327
+ notes: `off-sample turn=${turnCount}`,
328
+ });
329
+ tdb.close();
330
+ } catch { /* ignore */ }
331
+ }
332
+ process.exit(0);
333
+ }
159
334
 
160
- main().catch(() => {
161
- // Never crash Claude Code
162
- process.exit(0);
335
+ const project = extractProjectFromPath(hookData.cwd);
336
+ const transcriptOut = readTranscriptText(hookData.transcript_path, {
337
+ maxBytes: windowBytes,
338
+ maxLines: autoMemConfig.maxTranscriptLines,
339
+ keepSlashCommandProse: autoMemConfig.keepSlashCommandProse,
340
+ });
341
+ bytesRead = transcriptOut.bytesRead;
342
+
343
+ if (!transcriptOut.text || transcriptOut.text.length < 100) {
344
+ notes = 'no-content';
345
+ if (existsSync(DB_PATH)) {
346
+ try {
347
+ db = new Database(DB_PATH, { timeout: 1500 });
348
+ } catch { db = null; }
349
+ }
350
+ } else {
351
+ if (!existsSync(DB_DIR)) mkdirSync(DB_DIR, { recursive: true });
352
+ if (!existsSync(DB_PATH)) {
353
+ notes = 'no-database';
354
+ } else {
355
+ db = new Database(DB_PATH, { timeout: 5000 });
356
+ const stats = getMemoryStats(db);
357
+ const total = (stats.shortTerm || 0) + (stats.longTerm || 0);
358
+ const max = MAX_SHORT_TERM_MEMORIES + MAX_LONG_TERM_MEMORIES;
359
+ const dyn = getDynamicThreshold(total, max);
360
+
361
+ const segments = extractMemorableSegments(transcriptOut.text);
362
+ const processed = processSegments(segments, dyn);
363
+
364
+ for (const memory of processed) {
365
+ try {
366
+ saveAutoExtractedMemory(db, memory, project);
367
+ extractedCount++;
368
+ console.error(`[stop] Saved: ${memory.title} (salience: ${memory.salience.toFixed(2)}, category: ${memory.category})`);
369
+ } catch (err) {
370
+ console.error(`[stop] Failed to save "${memory.title}": ${err.message}`);
371
+ }
372
+ }
373
+ console.error(`[stop] Sampled turn=${turnCount}: ${extractedCount} memories extracted`);
374
+ }
375
+ }
376
+ } catch (err) {
377
+ notes = `error: ${err.message}`;
378
+ console.error(`[stop] Error: ${err.message}`);
379
+ } finally {
380
+ if (db) {
381
+ recordHookInvocation(db, {
382
+ hookName: 'stop',
383
+ exitCode: 0,
384
+ durationMs: Date.now() - startedAt,
385
+ memoriesExtracted: extractedCount,
386
+ transcriptBytes: bytesRead,
387
+ notes,
388
+ });
389
+ try { db.close(); } catch { /* ignore */ }
390
+ }
391
+ process.exit(0);
392
+ }
163
393
  });
@@ -1,3 +0,0 @@
1
- module.exports=[15896,2655,a=>{"use strict";var b={setTimeout:(a,b)=>setTimeout(a,b),clearTimeout:a=>clearTimeout(a),setInterval:(a,b)=>setInterval(a,b),clearInterval:a=>clearInterval(a)},c=new class{#a=b;#b=!1;setTimeoutProvider(a){this.#a=a}setTimeout(a,b){return this.#a.setTimeout(a,b)}clearTimeout(a){this.#a.clearTimeout(a)}setInterval(a,b){return this.#a.setInterval(a,b)}clearInterval(a){this.#a.clearInterval(a)}};function d(a){setTimeout(a,0)}function e(){}function f(a,b){return"function"==typeof a?a(b):a}function g(a){return"number"==typeof a&&a>=0&&a!==1/0}function h(a,b){return Math.max(a+(b||0)-Date.now(),0)}function i(a,b){return"function"==typeof a?a(b):a}function j(a,b){return"function"==typeof a?a(b):a}function k(a,b){let{type:c="all",exact:d,fetchStatus:e,predicate:f,queryKey:g,stale:h}=a;if(g){if(d){if(b.queryHash!==m(g,b.options))return!1}else if(!o(b.queryKey,g))return!1}if("all"!==c){let a=b.isActive();if("active"===c&&!a||"inactive"===c&&a)return!1}return("boolean"!=typeof h||b.isStale()===h)&&(!e||e===b.state.fetchStatus)&&(!f||!!f(b))}function l(a,b){let{exact:c,status:d,predicate:e,mutationKey:f}=a;if(f){if(!b.options.mutationKey)return!1;if(c){if(n(b.options.mutationKey)!==n(f))return!1}else if(!o(b.options.mutationKey,f))return!1}return(!d||b.state.status===d)&&(!e||!!e(b))}function m(a,b){return(b?.queryKeyHashFn||n)(a)}function n(a){return JSON.stringify(a,(a,b)=>s(b)?Object.keys(b).sort().reduce((a,c)=>(a[c]=b[c],a),{}):b)}function o(a,b){return a===b||typeof a==typeof b&&!!a&&!!b&&"object"==typeof a&&"object"==typeof b&&Object.keys(b).every(c=>o(a[c],b[c]))}a.s(["systemSetTimeoutZero",()=>d,"timeoutManager",()=>c],2655);var p=Object.prototype.hasOwnProperty;function q(a,b){if(!b||Object.keys(a).length!==Object.keys(b).length)return!1;for(let c in a)if(a[c]!==b[c])return!1;return!0}function r(a){return Array.isArray(a)&&a.length===Object.keys(a).length}function s(a){if(!t(a))return!1;let b=a.constructor;if(void 0===b)return!0;let c=b.prototype;return!!t(c)&&!!c.hasOwnProperty("isPrototypeOf")&&Object.getPrototypeOf(a)===Object.prototype}function t(a){return"[object Object]"===Object.prototype.toString.call(a)}function u(a){return new Promise(b=>{c.setTimeout(b,a)})}function v(a,b,c){return"function"==typeof c.structuralSharing?c.structuralSharing(a,b):!1!==c.structuralSharing?function a(b,c,d=0){if(b===c)return b;if(d>500)return c;let e=r(b)&&r(c);if(!e&&!(s(b)&&s(c)))return c;let f=(e?b:Object.keys(b)).length,g=e?c:Object.keys(c),h=g.length,i=e?Array(h):{},j=0;for(let k=0;k<h;k++){let h=e?k:g[k],l=b[h],m=c[h];if(l===m){i[h]=l,(e?k<f:p.call(b,h))&&j++;continue}if(null===l||null===m||"object"!=typeof l||"object"!=typeof m){i[h]=m;continue}let n=a(l,m,d+1);i[h]=n,n===l&&j++}return f===h&&j===f?b:i}(a,b):b}function w(a,b,c=0){let d=[...a,b];return c&&d.length>c?d.slice(1):d}function x(a,b,c=0){let d=[b,...a];return c&&d.length>c?d.slice(0,-1):d}var y=Symbol();function z(a,b){return!a.queryFn&&b?.initialPromise?()=>b.initialPromise:a.queryFn&&a.queryFn!==y?a.queryFn:()=>Promise.reject(Error(`Missing queryFn: '${a.queryHash}'`))}function A(a,b){return"function"==typeof a?a(...b):!!a}function B(a,b,c){let d,e=!1;return Object.defineProperty(a,"signal",{enumerable:!0,get:()=>(d??=b(),e||(e=!0,d.aborted?c():d.addEventListener("abort",c,{once:!0})),d)}),a}a.s(["addConsumeAwareSignal",()=>B,"addToEnd",()=>w,"addToStart",()=>x,"ensureQueryFn",()=>z,"functionalUpdate",()=>f,"hashKey",()=>n,"hashQueryKeyByOptions",()=>m,"isServer",()=>!0,"isValidTimeout",()=>g,"matchMutation",()=>l,"matchQuery",()=>k,"noop",()=>e,"partialMatchKey",()=>o,"replaceData",()=>v,"resolveEnabled",()=>j,"resolveStaleTime",()=>i,"shallowEqualObjects",()=>q,"shouldThrowError",()=>A,"skipToken",()=>y,"sleep",()=>u,"timeUntilStale",()=>h],15896)},98416,a=>{"use strict";let b,c,d,e,f,g;var h=a.i(2655).systemSetTimeoutZero,i=(b=[],c=0,d=a=>{a()},e=a=>{a()},f=h,{batch:a=>{let g;c++;try{g=a()}finally{let a;--c||(a=b,b=[],a.length&&f(()=>{e(()=>{a.forEach(a=>{d(a)})})}))}return g},batchCalls:a=>(...b)=>{g(()=>{a(...b)})},schedule:g=a=>{c?b.push(a):f(()=>{d(a)})},setNotifyFunction:a=>{d=a},setBatchNotifyFunction:a=>{e=a},setScheduler:a=>{f=a}});a.s(["notifyManager",()=>i])},16347,a=>{"use strict";var b=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(a){return this.listeners.add(a),this.onSubscribe(),()=>{this.listeners.delete(a),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}};a.s(["Subscribable",()=>b])},7903,a=>{"use strict";var b=a.i(16347),c=a.i(15896),d=new class extends b.Subscribable{#c;#d;#e;constructor(){super(),this.#e=a=>{if(!c.isServer&&window.addEventListener){let b=()=>a();return window.addEventListener("visibilitychange",b,!1),()=>{window.removeEventListener("visibilitychange",b)}}}}onSubscribe(){this.#d||this.setEventListener(this.#e)}onUnsubscribe(){this.hasListeners()||(this.#d?.(),this.#d=void 0)}setEventListener(a){this.#e=a,this.#d?.(),this.#d=a(a=>{"boolean"==typeof a?this.setFocused(a):this.onFocus()})}setFocused(a){this.#c!==a&&(this.#c=a,this.onFocus())}onFocus(){let a=this.isFocused();this.listeners.forEach(b=>{b(a)})}isFocused(){return"boolean"==typeof this.#c?this.#c:globalThis.document?.visibilityState!=="hidden"}};a.s(["focusManager",()=>d])},30112,59643,60087,46674,a=>{"use strict";var b=a.i(15896),c=a.i(98416),d=a.i(7903),e=a.i(16347),f=new class extends e.Subscribable{#f=!0;#d;#e;constructor(){super(),this.#e=a=>{if(!b.isServer&&window.addEventListener){let b=()=>a(!0),c=()=>a(!1);return window.addEventListener("online",b,!1),window.addEventListener("offline",c,!1),()=>{window.removeEventListener("online",b),window.removeEventListener("offline",c)}}}}onSubscribe(){this.#d||this.setEventListener(this.#e)}onUnsubscribe(){this.hasListeners()||(this.#d?.(),this.#d=void 0)}setEventListener(a){this.#e=a,this.#d?.(),this.#d=a(this.setOnline.bind(this))}setOnline(a){this.#f!==a&&(this.#f=a,this.listeners.forEach(b=>{b(a)}))}isOnline(){return this.#f}};function g(){let a,b,c=new Promise((c,d)=>{a=c,b=d});function d(a){Object.assign(c,a),delete c.resolve,delete c.reject}return c.status="pending",c.catch(()=>{}),c.resolve=b=>{d({status:"fulfilled",value:b}),a(b)},c.reject=a=>{d({status:"rejected",reason:a}),b(a)},c}function h(a){return Math.min(1e3*2**a,3e4)}function i(a){return(a??"online")!=="online"||f.isOnline()}a.s(["onlineManager",()=>f],59643),a.s(["pendingThenable",()=>g],60087);var j=class extends Error{constructor(a){super("CancelledError"),this.revert=a?.revert,this.silent=a?.silent}};function k(a){let c,e=!1,k=0,l=g(),m=()=>d.focusManager.isFocused()&&("always"===a.networkMode||f.isOnline())&&a.canRun(),n=()=>i(a.networkMode)&&a.canRun(),o=a=>{"pending"===l.status&&(c?.(),l.resolve(a))},p=a=>{"pending"===l.status&&(c?.(),l.reject(a))},q=()=>new Promise(b=>{c=a=>{("pending"!==l.status||m())&&b(a)},a.onPause?.()}).then(()=>{c=void 0,"pending"===l.status&&a.onContinue?.()}),r=()=>{let c;if("pending"!==l.status)return;let d=0===k?a.initialPromise:void 0;try{c=d??a.fn()}catch(a){c=Promise.reject(a)}Promise.resolve(c).then(o).catch(c=>{if("pending"!==l.status)return;let d=a.retry??3*!b.isServer,f=a.retryDelay??h,g="function"==typeof f?f(k,c):f,i=!0===d||"number"==typeof d&&k<d||"function"==typeof d&&d(k,c);e||!i?p(c):(k++,a.onFail?.(k,c),(0,b.sleep)(g).then(()=>m()?void 0:q()).then(()=>{e?p(c):r()}))})};return{promise:l,status:()=>l.status,cancel:b=>{if("pending"===l.status){let c=new j(b);p(c),a.onCancel?.(c)}},continue:()=>(c?.(),l),cancelRetry:()=>{e=!0},continueRetry:()=>{e=!1},canStart:n,start:()=>(n()?r():q().then(r),l)}}var l=a.i(2655),m=class{#g;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),(0,b.isValidTimeout)(this.gcTime)&&(this.#g=l.timeoutManager.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(a){this.gcTime=Math.max(this.gcTime||0,a??(b.isServer?1/0:3e5))}clearGcTimeout(){this.#g&&(l.timeoutManager.clearTimeout(this.#g),this.#g=void 0)}},n=class extends m{#h;#i;#j;#k;#l;#m;#n;constructor(a){super(),this.#n=!1,this.#m=a.defaultOptions,this.setOptions(a.options),this.observers=[],this.#k=a.client,this.#j=this.#k.getQueryCache(),this.queryKey=a.queryKey,this.queryHash=a.queryHash,this.#h=q(this.options),this.state=a.state??this.#h,this.scheduleGc()}get meta(){return this.options.meta}get promise(){return this.#l?.promise}setOptions(a){if(this.options={...this.#m,...a},this.updateGcTime(this.options.gcTime),this.state&&void 0===this.state.data){let a=q(this.options);void 0!==a.data&&(this.setState(p(a.data,a.dataUpdatedAt)),this.#h=a)}}optionalRemove(){this.observers.length||"idle"!==this.state.fetchStatus||this.#j.remove(this)}setData(a,c){let d=(0,b.replaceData)(this.state.data,a,this.options);return this.#o({data:d,type:"success",dataUpdatedAt:c?.updatedAt,manual:c?.manual}),d}setState(a,b){this.#o({type:"setState",state:a,setStateOptions:b})}cancel(a){let c=this.#l?.promise;return this.#l?.cancel(a),c?c.then(b.noop).catch(b.noop):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}reset(){this.destroy(),this.setState(this.#h)}isActive(){return this.observers.some(a=>!1!==(0,b.resolveEnabled)(a.options.enabled,this))}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===b.skipToken||this.state.dataUpdateCount+this.state.errorUpdateCount===0}isStatic(){return this.getObserversCount()>0&&this.observers.some(a=>"static"===(0,b.resolveStaleTime)(a.options.staleTime,this))}isStale(){return this.getObserversCount()>0?this.observers.some(a=>a.getCurrentResult().isStale):void 0===this.state.data||this.state.isInvalidated}isStaleByTime(a=0){return void 0===this.state.data||"static"!==a&&(!!this.state.isInvalidated||!(0,b.timeUntilStale)(this.state.dataUpdatedAt,a))}onFocus(){let a=this.observers.find(a=>a.shouldFetchOnWindowFocus());a?.refetch({cancelRefetch:!1}),this.#l?.continue()}onOnline(){let a=this.observers.find(a=>a.shouldFetchOnReconnect());a?.refetch({cancelRefetch:!1}),this.#l?.continue()}addObserver(a){this.observers.includes(a)||(this.observers.push(a),this.clearGcTimeout(),this.#j.notify({type:"observerAdded",query:this,observer:a}))}removeObserver(a){this.observers.includes(a)&&(this.observers=this.observers.filter(b=>b!==a),this.observers.length||(this.#l&&(this.#n?this.#l.cancel({revert:!0}):this.#l.cancelRetry()),this.scheduleGc()),this.#j.notify({type:"observerRemoved",query:this,observer:a}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||this.#o({type:"invalidate"})}async fetch(a,c){let d;if("idle"!==this.state.fetchStatus&&this.#l?.status()!=="rejected"){if(void 0!==this.state.data&&c?.cancelRefetch)this.cancel({silent:!0});else if(this.#l)return this.#l.continueRetry(),this.#l.promise}if(a&&this.setOptions(a),!this.options.queryFn){let a=this.observers.find(a=>a.options.queryFn);a&&this.setOptions(a.options)}let e=new AbortController,f=a=>{Object.defineProperty(a,"signal",{enumerable:!0,get:()=>(this.#n=!0,e.signal)})},g=()=>{let a,d=(0,b.ensureQueryFn)(this.options,c),e=(f(a={client:this.#k,queryKey:this.queryKey,meta:this.meta}),a);return(this.#n=!1,this.options.persister)?this.options.persister(d,e,this):d(e)},h=(f(d={fetchOptions:c,options:this.options,queryKey:this.queryKey,client:this.#k,state:this.state,fetchFn:g}),d);this.options.behavior?.onFetch(h,this),this.#i=this.state,("idle"===this.state.fetchStatus||this.state.fetchMeta!==h.fetchOptions?.meta)&&this.#o({type:"fetch",meta:h.fetchOptions?.meta}),this.#l=k({initialPromise:c?.initialPromise,fn:h.fetchFn,onCancel:a=>{a instanceof j&&a.revert&&this.setState({...this.#i,fetchStatus:"idle"}),e.abort()},onFail:(a,b)=>{this.#o({type:"failed",failureCount:a,error:b})},onPause:()=>{this.#o({type:"pause"})},onContinue:()=>{this.#o({type:"continue"})},retry:h.options.retry,retryDelay:h.options.retryDelay,networkMode:h.options.networkMode,canRun:()=>!0});try{let a=await this.#l.start();if(void 0===a)throw Error(`${this.queryHash} data is undefined`);return this.setData(a),this.#j.config.onSuccess?.(a,this),this.#j.config.onSettled?.(a,this.state.error,this),a}catch(a){if(a instanceof j){if(a.silent)return this.#l.promise;else if(a.revert){if(void 0===this.state.data)throw a;return this.state.data}}throw this.#o({type:"error",error:a}),this.#j.config.onError?.(a,this),this.#j.config.onSettled?.(this.state.data,a,this),a}finally{this.scheduleGc()}}#o(a){let b=b=>{switch(a.type){case"failed":return{...b,fetchFailureCount:a.failureCount,fetchFailureReason:a.error};case"pause":return{...b,fetchStatus:"paused"};case"continue":return{...b,fetchStatus:"fetching"};case"fetch":return{...b,...o(b.data,this.options),fetchMeta:a.meta??null};case"success":let c={...b,...p(a.data,a.dataUpdatedAt),dataUpdateCount:b.dataUpdateCount+1,...!a.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};return this.#i=a.manual?c:void 0,c;case"error":let d=a.error;return{...b,error:d,errorUpdateCount:b.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:b.fetchFailureCount+1,fetchFailureReason:d,fetchStatus:"idle",status:"error",isInvalidated:!0};case"invalidate":return{...b,isInvalidated:!0};case"setState":return{...b,...a.state}}};this.state=b(this.state),c.notifyManager.batch(()=>{this.observers.forEach(a=>{a.onQueryUpdate()}),this.#j.notify({query:this,type:"updated",action:a})})}};function o(a,b){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:i(b.networkMode)?"fetching":"paused",...void 0===a&&{error:null,status:"pending"}}}function p(a,b){return{data:a,dataUpdatedAt:b??Date.now(),error:null,isInvalidated:!1,status:"success"}}function q(a){let b="function"==typeof a.initialData?a.initialData():a.initialData,c=void 0!==b,d=c?"function"==typeof a.initialDataUpdatedAt?a.initialDataUpdatedAt():a.initialDataUpdatedAt:0;return{data:b,dataUpdateCount:0,dataUpdatedAt:c?d??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:c?"success":"pending",fetchStatus:"idle"}}a.s(["Query",()=>n,"fetchState",()=>o],30112);var r=class extends m{#k;#p;#q;#l;constructor(a){super(),this.#k=a.client,this.mutationId=a.mutationId,this.#q=a.mutationCache,this.#p=[],this.state=a.state||s(),this.setOptions(a.options),this.scheduleGc()}setOptions(a){this.options=a,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(a){this.#p.includes(a)||(this.#p.push(a),this.clearGcTimeout(),this.#q.notify({type:"observerAdded",mutation:this,observer:a}))}removeObserver(a){this.#p=this.#p.filter(b=>b!==a),this.scheduleGc(),this.#q.notify({type:"observerRemoved",mutation:this,observer:a})}optionalRemove(){this.#p.length||("pending"===this.state.status?this.scheduleGc():this.#q.remove(this))}continue(){return this.#l?.continue()??this.execute(this.state.variables)}async execute(a){let b=()=>{this.#o({type:"continue"})},c={client:this.#k,meta:this.options.meta,mutationKey:this.options.mutationKey};this.#l=k({fn:()=>this.options.mutationFn?this.options.mutationFn(a,c):Promise.reject(Error("No mutationFn found")),onFail:(a,b)=>{this.#o({type:"failed",failureCount:a,error:b})},onPause:()=>{this.#o({type:"pause"})},onContinue:b,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#q.canRun(this)});let d="pending"===this.state.status,e=!this.#l.canStart();try{if(d)b();else{this.#o({type:"pending",variables:a,isPaused:e}),await this.#q.config.onMutate?.(a,this,c);let b=await this.options.onMutate?.(a,c);b!==this.state.context&&this.#o({type:"pending",context:b,variables:a,isPaused:e})}let f=await this.#l.start();return await this.#q.config.onSuccess?.(f,a,this.state.context,this,c),await this.options.onSuccess?.(f,a,this.state.context,c),await this.#q.config.onSettled?.(f,null,this.state.variables,this.state.context,this,c),await this.options.onSettled?.(f,null,a,this.state.context,c),this.#o({type:"success",data:f}),f}catch(b){try{await this.#q.config.onError?.(b,a,this.state.context,this,c)}catch(a){Promise.reject(a)}try{await this.options.onError?.(b,a,this.state.context,c)}catch(a){Promise.reject(a)}try{await this.#q.config.onSettled?.(void 0,b,this.state.variables,this.state.context,this,c)}catch(a){Promise.reject(a)}try{await this.options.onSettled?.(void 0,b,a,this.state.context,c)}catch(a){Promise.reject(a)}throw this.#o({type:"error",error:b}),b}finally{this.#q.runNext(this)}}#o(a){this.state=(b=>{switch(a.type){case"failed":return{...b,failureCount:a.failureCount,failureReason:a.error};case"pause":return{...b,isPaused:!0};case"continue":return{...b,isPaused:!1};case"pending":return{...b,context:a.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:a.isPaused,status:"pending",variables:a.variables,submittedAt:Date.now()};case"success":return{...b,data:a.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...b,data:void 0,error:a.error,failureCount:b.failureCount+1,failureReason:a.error,isPaused:!1,status:"error"}}})(this.state),c.notifyManager.batch(()=>{this.#p.forEach(b=>{b.onMutationUpdate(a)}),this.#q.notify({mutation:this,type:"updated",action:a})})}};function s(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}a.s(["Mutation",()=>r,"getDefaultState",()=>s],46674)},14220,a=>{"use strict";var b=a.i(98419),c=a.i(16306),d=b.createContext(void 0),e=a=>{let c=b.useContext(d);if(a)return a;if(!c)throw Error("No QueryClient set, use QueryClientProvider to set one");return c},f=({client:a,children:e})=>(b.useEffect(()=>(a.mount(),()=>{a.unmount()}),[a]),(0,c.jsx)(d.Provider,{value:a,children:e}));a.s(["QueryClientProvider",()=>f,"useQueryClient",()=>e])}];
2
-
3
- //# sourceMappingURL=9f1d4_%40tanstack_785e068c._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[90382,(a,b,c)=>{"use strict";b.exports=a.r(14865).vendored["react-ssr"].ReactServerDOMTurbopackClient},53731,(a,b,c)=>{"use strict";b.exports=a.r(14865).vendored.contexts.HooksClientContext},69136,(a,b,c)=>{"use strict";b.exports=a.r(14865).vendored.contexts.ServerInsertedHtml},56704,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},20635,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/action-async-storage.external.js",()=>require("next/dist/server/app-render/action-async-storage.external.js"))},32319,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},54935,(a,b,c)=>{"use strict";b.exports=a.r(14865).vendored.contexts.AppRouterContext},18780,(a,b,c)=>{"use strict";b.exports=a.r(14865).vendored["react-ssr"].ReactDOM},9315,a=>{"use strict";var b=a.i(98419),c=a.i(14220),d=a.i(86044);let e=process.env.NEXT_PUBLIC_WS_URL||"ws://localhost:3001/ws/events";function f(a={}){let{enabled:g=!0,onMessage:h}=a,i=(0,c.useQueryClient)(),j=(0,b.useRef)(null),k=(0,b.useRef)(null),l=(0,b.useRef)(0),m=(0,b.useRef)(1e3),n=(0,b.useRef)(()=>{}),[o,p]=(0,b.useState)(!1),[q,r]=(0,b.useState)(!1),[s,t]=(0,b.useState)(null),u=(0,b.useRef)(h);(0,b.useEffect)(()=>{u.current=h},[h]);let v=(0,b.useCallback)(async()=>{if(g&&j.current?.readyState!==WebSocket.OPEN){k.current&&(clearTimeout(k.current),k.current=null);try{let a=await (0,d.getApiToken)(),b=`${e}?token=${encodeURIComponent(a)}`,c=new WebSocket(b);j.current=c,c.onopen=()=>{p(!0),l.current=0,m.current=1e3,console.log("[WebSocket] Connected to memory server")},c.onmessage=a=>{try{let b=JSON.parse(a.data);switch(t({type:b.type,data:b.data,timestamp:b.timestamp||new Date().toISOString()}),u.current?.(b),b.type){case"initial_state":case"consolidation_complete":case"predictive_consolidation":i.invalidateQueries({queryKey:["memories"]}),i.invalidateQueries({queryKey:["stats"]}),i.invalidateQueries({queryKey:["links"]});break;case"memory_created":case"memory_updated":case"memory_deleted":i.invalidateQueries({queryKey:["memories"]}),i.invalidateQueries({queryKey:["stats"]});break;case"decay_tick":case"worker_light_tick":case"worker_medium_tick":break;case"link_discovered":i.invalidateQueries({queryKey:["links"]});break;case"defence_event":i.invalidateQueries({queryKey:["agents"]}),i.invalidateQueries({queryKey:["agent-timeline"]}),i.invalidateQueries({queryKey:["audit-logs"]}),i.invalidateQueries({queryKey:["audit-stats"]});break;case"kill_switch_activated":case"kill_switch_deactivated":i.invalidateQueries({queryKey:["control-status"]}),i.invalidateQueries({queryKey:["iron-dome-status"]}),i.invalidateQueries({queryKey:["iron-dome-audit"]});break;case"update_started":case"update_complete":case"update_failed":"update_complete"===b.type&&(i.invalidateQueries({queryKey:["version"]}),i.invalidateQueries({queryKey:["version-check"]}));break;case"server_restarting":console.log("[WebSocket] Server restarting, will reconnect shortly...");break;case"xray_detection":i.invalidateQueries({queryKey:["xray-activity"]}),i.invalidateQueries({queryKey:["xray-watch-sessions"]}),i.invalidateQueries({queryKey:["xray-findings"]}),i.invalidateQueries({queryKey:["xray-status"]})}}catch(a){console.error("[WebSocket] Failed to parse message:",a)}},c.onerror=()=>{console.warn("[WebSocket] Connection failed - is the API server running?")},c.onclose=a=>{if(p(!1),console.log("[WebSocket] Disconnected",a.code),(1008===a.code||4001===a.code||4003===a.code)&&(0,d.invalidateApiToken)(),g&&l.current<10){let a=m.current;l.current++,m.current=Math.min(2*m.current,3e4),console.log(`[WebSocket] Reconnecting in ${a}ms (attempt ${l.current}/10)...`),k.current=setTimeout(()=>{n.current()},a)}else l.current>=10&&(r(!0),console.error("[WebSocket] Max reconnection attempts reached. Use reconnect() to try again."))}}catch(a){console.error("[WebSocket] Failed to connect:",a)}}},[g,i]);return(0,b.useEffect)(()=>{n.current=v}),(0,b.useEffect)(()=>(g&&v(),()=>{k.current&&clearTimeout(k.current),j.current&&(j.current.close(),j.current=null)}),[g,v]),{isConnected:o,connectionFailed:q,lastEvent:s,reconnect:(0,b.useCallback)(()=>{l.current=0,m.current=1e3,r(!1),v()},[v])}}a.s(["useMemoryWebSocket",()=>f])},66397,a=>{"use strict";let b=(0,a.i(70694).default)("scan-search",[["path",{d:"M3 7V5a2 2 0 0 1 2-2h2",key:"aa7l1z"}],["path",{d:"M17 3h2a2 2 0 0 1 2 2v2",key:"4qcy5o"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2h-2",key:"6vwrx8"}],["path",{d:"M7 21H5a2 2 0 0 1-2-2v-2",key:"ioqczr"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["path",{d:"m16 16-1.9-1.9",key:"1dq9hf"}]]);a.s(["ScanSearch",()=>b],66397)},76625,a=>{"use strict";let b=(0,a.i(70694).default)("database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);a.s(["Database",()=>b],76625)},70694,a=>{"use strict";var b=a.i(98419);let c=a=>{let b=a.replace(/^([A-Z])|[\s-_]+(\w)/g,(a,b,c)=>c?c.toUpperCase():b.toLowerCase());return b.charAt(0).toUpperCase()+b.slice(1)},d=(...a)=>a.filter((a,b,c)=>!!a&&""!==a.trim()&&c.indexOf(a)===b).join(" ").trim();var e={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let f=(0,b.forwardRef)(({color:a="currentColor",size:c=24,strokeWidth:f=2,absoluteStrokeWidth:g,className:h="",children:i,iconNode:j,...k},l)=>(0,b.createElement)("svg",{ref:l,...e,width:c,height:c,stroke:a,strokeWidth:g?24*Number(f)/Number(c):f,className:d("lucide",h),...!i&&!(a=>{for(let b in a)if(b.startsWith("aria-")||"role"===b||"title"===b)return!0})(k)&&{"aria-hidden":"true"},...k},[...j.map(([a,c])=>(0,b.createElement)(a,c)),...Array.isArray(i)?i:[i]])),g=(a,e)=>{let g=(0,b.forwardRef)(({className:g,...h},i)=>(0,b.createElement)(f,{ref:i,iconNode:e,className:d(`lucide-${c(a).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,`lucide-${a}`,g),...h}));return g.displayName=c(a),g};a.s(["default",()=>g],70694)},98472,a=>{"use strict";let b=(0,a.i(70694).default)("shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]);a.s(["Shield",()=>b],98472)},73683,(a,b,c)=>{"use strict";function d(a){if("function"!=typeof WeakMap)return null;var b=new WeakMap,c=new WeakMap;return(d=function(a){return a?c:b})(a)}c._=function(a,b){if(!b&&a&&a.__esModule)return a;if(null===a||"object"!=typeof a&&"function"!=typeof a)return{default:a};var c=d(b);if(c&&c.has(a))return c.get(a);var e={__proto__:null},f=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var g in a)if("default"!==g&&Object.prototype.hasOwnProperty.call(a,g)){var h=f?Object.getOwnPropertyDescriptor(a,g):null;h&&(h.get||h.set)?Object.defineProperty(e,g,h):e[g]=a[g]}return e.default=a,c&&c.set(a,e),e}},64575,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={DEFAULT_SEGMENT_KEY:function(){return l},NOT_FOUND_SEGMENT_KEY:function(){return m},PAGE_SEGMENT_KEY:function(){return k},addSearchParamsIfPageSegment:function(){return i},computeSelectedLayoutSegment:function(){return j},getSegmentValue:function(){return f},getSelectedLayoutSegmentPath:function(){return function a(b,c,d=!0,e=[]){let g;if(d)g=b[1][c];else{let a=b[1];g=a.children??Object.values(a)[0]}if(!g)return e;let h=f(g[0]);return!h||h.startsWith(k)?e:(e.push(h),a(g,c,!1,e))}},isGroupSegment:function(){return g},isParallelRouteSegment:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});function f(a){return Array.isArray(a)?a[1]:a}function g(a){return"("===a[0]&&a.endsWith(")")}function h(a){return a.startsWith("@")&&"@children"!==a}function i(a,b){if(a.includes(k)){let a=JSON.stringify(b);return"{}"!==a?k+"?"+a:k}return a}function j(a,b){if(!a||0===a.length)return null;let c="children"===b?a[0]:a[a.length-1];return c===l?null:c}let k="__PAGE__",l="__DEFAULT__",m="/_not-found"},40145,a=>{"use strict";let b=(0,a.i(70694).default)("settings",[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);a.s(["Settings",()=>b],40145)},67819,a=>{"use strict";var b=a.i(16306),c=a.i(11160),d=a.i(52181),e=a.i(70694);let f=(0,e.default)("menu",[["path",{d:"M4 5h16",key:"1tepv9"}],["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 19h16",key:"1djgab"}]]);var g=a.i(5479);let h=(0,e.default)("pin-off",[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M15 9.34V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H7.89",key:"znwnzq"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h11",key:"c9qhm2"}]]);var i=a.i(98472),j=a.i(95480),k=a.i(64565),l=a.i(76625);let m=(0,e.default)("house",[["path",{d:"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8",key:"5wwlr5"}],["path",{d:"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"r6nss1"}]]);var n=a.i(66397),o=a.i(40145);let p=[{href:"/overview",label:"Overview",icon:m},{href:"/memory",label:"Memory",icon:l.Database},{href:"/protection",label:"Protection",icon:i.Shield},{href:"/xray",label:"X-Ray",icon:n.ScanSearch},{href:"/settings",label:"Settings",icon:o.Settings}];var q=a.i(68839),r=a.i(67789),s=a.i(98419);let t=new Set;function u(){let a,e=(0,d.usePathname)(),{sidebarPinned:l,toggleSidebarPinned:m}=(0,q.useDashboardStore)(),[n,o]=(0,s.useState)(!1),[u,v]=(0,s.useState)(null),w=u===e,x=(a=(0,s.useCallback)(a=>(t.add(a),()=>{t.delete(a)}),[]),(0,s.useSyncExternalStore)(a,()=>!1,()=>!1)),{data:y}=(0,r.useVersion)(),z=l||n||w;return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("button",{onClick:()=>v(e),className:"fixed left-3 top-3 z-50 flex h-10 w-10 items-center justify-center rounded-xl bg-[var(--sc-bg-surface)] border border-[var(--sc-border)] text-[var(--sc-text-secondary)] md:hidden","aria-label":"Open navigation",children:(0,b.jsx)(f,{size:18})}),w&&(0,b.jsx)("div",{className:"fixed inset-0 z-40 bg-black/50 backdrop-blur-sm md:hidden",onClick:()=>v(null)}),(0,b.jsxs)("aside",{className:(0,k.cn)("z-50 flex shrink-0 flex-col border-r border-[var(--sc-border)] bg-[var(--sc-bg-deep)] transition-all duration-300","fixed inset-y-0 left-0 md:relative",w?"translate-x-0":"-translate-x-full md:translate-x-0",z?"w-60":"w-16"),onMouseEnter:()=>o(!0),onMouseLeave:()=>o(!1),children:[(0,b.jsxs)("div",{className:"flex h-16 items-center gap-3 border-b border-[var(--sc-border)] px-4",children:[(0,b.jsx)("div",{className:"flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-gradient-to-br from-[var(--sc-coral)] to-[var(--sc-coral-dark)]",children:(0,b.jsx)(i.Shield,{size:16,className:"text-white"})}),(0,b.jsxs)("div",{className:(0,k.cn)("overflow-hidden whitespace-nowrap transition-all duration-300",z?"w-auto opacity-100":"w-0 opacity-0"),children:[(0,b.jsx)("div",{className:"text-[11px] font-semibold uppercase tracking-[0.2em] text-[var(--sc-coral)]",children:"ShieldCortex"}),(0,b.jsx)("div",{className:"text-xs text-[var(--sc-text-muted)]",children:"Dashboard"})]}),w&&(0,b.jsx)("button",{onClick:()=>v(null),className:"ml-auto text-[var(--sc-text-muted)] hover:text-[var(--sc-text-secondary)] md:hidden","aria-label":"Close navigation",children:(0,b.jsx)(j.X,{size:18})})]}),(0,b.jsx)("nav",{className:"flex-1 space-y-1 px-2 py-4",role:"navigation","aria-label":"Main navigation",children:p.map(a=>{var d;let f=a.icon,g="/overview"===(d=a.href)?"/overview"===e||"/"===e:e===d||e.startsWith(`${d}/`);return(0,b.jsxs)(c.default,{href:a.href,"aria-current":g?"page":void 0,className:(0,k.cn)("relative flex items-center gap-3 rounded-xl px-3 py-2.5 transition-all duration-200 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--sc-cyan)]",g?"bg-[var(--sc-surface-interactive)] text-[var(--sc-text-primary)]":"text-[var(--sc-text-muted)] hover:bg-[var(--sc-surface-interactive)] hover:text-[var(--sc-text-secondary)]"),children:[g&&(0,b.jsx)("div",{className:"absolute left-0 top-1/2 h-5 w-0.5 -translate-y-1/2 rounded-r bg-[var(--sc-coral)]"}),(0,b.jsx)(f,{size:18,className:(0,k.cn)("shrink-0",g&&"text-[var(--sc-coral)]")}),(0,b.jsx)("span",{className:(0,k.cn)("overflow-hidden whitespace-nowrap text-sm font-medium transition-all duration-300",z?"w-auto opacity-100":"w-0 opacity-0"),children:a.label})]},a.href)})}),(0,b.jsxs)("div",{className:"space-y-2 border-t border-[var(--sc-border)] px-2 py-3",children:[z&&(0,b.jsxs)("button",{onClick:m,className:"hidden w-full items-center gap-3 rounded-xl px-3 py-2 text-[var(--sc-text-muted)] transition-colors hover:bg-[var(--sc-surface-interactive)] hover:text-[var(--sc-text-secondary)] md:flex","aria-label":l?"Unpin sidebar":"Pin sidebar",children:[l?(0,b.jsx)(h,{size:16}):(0,b.jsx)(g.Pin,{size:16}),(0,b.jsx)("span",{className:"text-xs",children:l?"Unpin":"Pin sidebar"})]}),(0,b.jsxs)("div",{className:"flex items-center gap-3 px-3 py-1",children:[(0,b.jsx)("span",{className:(0,k.cn)("h-2 w-2 shrink-0 rounded-full",x?"bg-[var(--sc-cyan)] pulse-cyan":"bg-[var(--sc-coral)] pulse-coral"),"aria-label":x?"Real-time connected":"Real-time disconnected"}),(0,b.jsx)("span",{className:(0,k.cn)("overflow-hidden whitespace-nowrap text-[11px] text-[var(--sc-text-muted)] transition-all duration-300",z?"w-auto opacity-100":"w-0 opacity-0"),children:x?"Connected":"Disconnected"})]}),(0,b.jsxs)("div",{className:(0,k.cn)("overflow-hidden whitespace-nowrap px-3 font-mono text-[10px] text-[var(--sc-text-muted)] transition-all duration-300",z?"opacity-100":"h-0 opacity-0"),children:["v",y?.version??"..."]})]})]})]})}a.s(["Sidebar",()=>u],67819)},81662,a=>{"use strict";var b=a.i(16306),c=a.i(83364);function d(){return(0,b.jsx)(c.Toaster,{position:"bottom-right",toastOptions:{style:{background:"var(--sc-bg-surface)",border:"1px solid var(--sc-border)",color:"var(--sc-text-primary)",fontFamily:"system-ui, sans-serif"}},theme:"dark"})}a.s(["ToastProvider",()=>d])},16525,a=>{"use strict";var b=a.i(98419),c=a.i(83364),d=a.i(9315);let e=new Map;function f(){let a=(0,b.useCallback)(a=>{let b;if("defence_event"!==a.type)return;let d=a.data;if(!d||"ALLOW"===d.firewall_result)return;let f="BLOCK"===d.firewall_result,g=d.source_identifier||d.source_type||"unknown source",h=(b=function(a){if(Array.isArray(a))return a.filter(a=>"string"==typeof a);if("string"!=typeof a||!a.trim())return[];try{let b=JSON.parse(a);if(Array.isArray(b))return b.filter(a=>"string"==typeof a)}catch{return[a]}return[]}(d.threat_indicators)).length?b.slice(0,3).map(a=>a.replace(/_/g," ")).join(", "):"",i=d.reason?.trim()||(h?`Threats: ${h}`:"See audit log for details");if(function(a){let b=Date.now(),c=e.get(a);if(c&&b-c<2e3)return!0;if(e.set(a,b),e.size>50){let a=b-2e3;for(let[b,c]of e)c<a&&e.delete(b)}return!1}(`${d.firewall_result}:${g}:${(d.reason||"").slice(0,80)}`))return;let j=f?`\u{1F6E1} Blocked attack from ${g}`:`\u{26A0}\u{FE0F} Quarantined input from ${g}`,k={description:i,duration:f?8e3:5e3};f?c.toast.error(j,k):c.toast.warning(j,k)},[]);return(0,d.useMemoryWebSocket)({onMessage:a}),null}a.s(["BlockToastBridge",()=>f])}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__c2b92077._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[20203,a=>{"use strict";let b=(0,a.i(70694).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"}]]);a.s(["RefreshCw",()=>b],20203)},14126,a=>{"use strict";let b=(0,a.i(70694).default)("sparkles",[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]]);a.s(["Sparkles",()=>b],14126)},54100,a=>{"use strict";var b=a.i(16306),c=a.i(64565);let d={critical:"severity-critical",high:"severity-high",medium:"severity-medium",low:"severity-low",safe:"severity-safe",info:"severity-info"};function e({children:a,className:e,hover:f=!1,hoverCyan:g=!1,strong:h=!1,severity:i,onClick:j,selected:k=!1}){return(0,b.jsx)("div",{className:(0,c.cn)(h?"glass-card-strong":"glass-card",f&&"glass-card-hover cursor-pointer",g&&"glass-card-hover-cyan cursor-pointer",j&&!f&&!g&&"cursor-pointer",i&&d[i],k&&"border-[var(--sc-cyan)] shadow-[0_0_20px_var(--sc-glow-cyan)]",e),onClick:j,onKeyDown:j?a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),j())}:void 0,role:j?"button":void 0,tabIndex:j?0:void 0,children:a})}a.s(["GlassCard",()=>e])},29448,a=>{"use strict";let b=(0,a.i(70694).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"}]]);a.s(["GitBranch",()=>b],29448)},47520,a=>{"use strict";let b=(0,a.i(70694).default)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);a.s(["AlertTriangle",()=>b],47520)},74150,a=>{"use strict";let b=(0,a.i(70694).default)("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);a.s(["CheckCircle2",()=>b],74150)},79155,a=>{"use strict";let b=(0,a.i(70694).default)("shield-alert",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]]);a.s(["ShieldAlert",()=>b],79155)},35031,79030,a=>{"use strict";var b=a.i(40458),c=a.i(66807),d=a.i(14220),e=a.i(86044);let f=process.env.NEXT_PUBLIC_API_URL||"http://localhost:3001";async function g(){let a=await (0,e.authFetch)(`${f}/api/license/status`);if(!a.ok)throw Error("Failed to fetch license status");return a.json()}async function h(a){let b=await (0,e.authFetch)(`${f}/api/license/activate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:a})});if(!b.ok)throw Error((await b.json().catch(()=>({error:"Activation failed"}))).error||"Activation failed");return b.json()}async function i(){let a=await (0,e.authFetch)(`${f}/api/license/deactivate`,{method:"POST"});if(!a.ok)throw Error("Failed to deactivate license");return a.json()}function j(){return(0,b.useQuery)({queryKey:["license-status"],queryFn:g,refetchInterval:6e4,retry:2})}function k(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:a=>h(a),onSuccess:()=>{a.invalidateQueries({queryKey:["license-status"]})}})}function l(){let a=(0,d.useQueryClient)();return(0,c.useMutation)({mutationFn:i,onSuccess:()=>{a.invalidateQueries({queryKey:["license-status"]})}})}a.s(["useActivateLicense",()=>k,"useDeactivateLicense",()=>l,"useLicenseStatus",()=>j],35031),a.s(["PLAN_PRICING",0,{pro:{label:"Pro",price:"£29/mo"},team:{label:"Team",price:"£99/mo"}},"TIER_BG",0,{free:"bg-[var(--sc-surface-interactive)]",pro:"bg-[var(--sc-cyan)]/10",team:"bg-[var(--sc-coral)]/10",enterprise:"bg-[var(--sc-amber)]/10"},"TIER_COLOURS",0,{free:"text-[var(--sc-text-muted)]",pro:"text-[var(--sc-cyan)]",team:"text-[var(--sc-coral)]",enterprise:"text-[var(--sc-amber)]"},"TIER_LABELS",0,{free:"Free",pro:"Pro",team:"Team",enterprise:"Enterprise"}],79030)},77115,a=>{"use strict";let b=(0,a.i(70694).default)("clock-3",[["path",{d:"M12 6v6h4",key:"135r8i"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);a.s(["Clock3",()=>b],77115)},13106,84692,a=>{"use strict";var b=a.i(16306),c=a.i(64565);function d({className:a}){return(0,b.jsx)("div",{className:(0,c.cn)("animate-pulse rounded-xl bg-[var(--sc-surface-interactive)]",a)})}function e(){return(0,b.jsxs)("div",{className:"mx-auto max-w-7xl space-y-6 p-6",children:[(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsx)(d,{className:"h-3 w-24"}),(0,b.jsx)(d,{className:"h-7 w-56"}),(0,b.jsx)(d,{className:"h-4 w-80"})]}),(0,b.jsx)(d,{className:"h-10 w-96"}),(0,b.jsxs)("div",{className:"grid grid-cols-2 gap-4 lg:grid-cols-4",children:[(0,b.jsx)(d,{className:"h-24"}),(0,b.jsx)(d,{className:"h-24"}),(0,b.jsx)(d,{className:"h-24"}),(0,b.jsx)(d,{className:"h-24"})]}),(0,b.jsxs)("div",{className:"grid gap-6 lg:grid-cols-2",children:[(0,b.jsx)(d,{className:"h-64"}),(0,b.jsx)(d,{className:"h-64"})]})]})}a.s(["PageSkeleton",()=>e],13106);let f=(0,a.i(70694).default)("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);a.s(["Loader2",()=>f],84692)},48036,a=>{"use strict";let b=(0,a.i(70694).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"}]]);a.s(["XCircle",()=>b],48036)}];
2
-
3
- //# sourceMappingURL=dashboard_11878109._.js.map