shieldcortex 4.32.4 → 4.32.6

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 (231) 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/server/app/_global-error.html +2 -2
  4. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.rsc +1 -1
  5. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  6. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  7. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  8. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  9. package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  10. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.html +2 -2
  11. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.rsc +1 -1
  12. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  13. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  14. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  15. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  16. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  17. package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  18. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.html +1 -1
  19. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.rsc +1 -1
  20. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin/__PAGE__.segment.rsc +1 -1
  21. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk/admin.segment.rsc +1 -1
  22. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  23. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_full.segment.rsc +1 -1
  24. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_head.segment.rsc +1 -1
  25. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_index.segment.rsc +1 -1
  26. package/dashboard/.next/standalone/dashboard/.next/server/app/admin.segments/_tree.segment.rsc +1 -1
  27. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.html +1 -1
  28. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.rsc +1 -1
  29. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud/__PAGE__.segment.rsc +1 -1
  30. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk/cloud.segment.rsc +1 -1
  31. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  32. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_full.segment.rsc +1 -1
  33. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_head.segment.rsc +1 -1
  34. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_index.segment.rsc +1 -1
  35. package/dashboard/.next/standalone/dashboard/.next/server/app/cloud.segments/_tree.segment.rsc +1 -1
  36. package/dashboard/.next/standalone/dashboard/.next/server/app/index.html +1 -1
  37. package/dashboard/.next/standalone/dashboard/.next/server/app/index.rsc +1 -1
  38. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  39. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_full.segment.rsc +1 -1
  40. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_head.segment.rsc +1 -1
  41. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_index.segment.rsc +1 -1
  42. package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  43. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.html +1 -1
  44. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.rsc +1 -1
  45. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture/__PAGE__.segment.rsc +1 -1
  46. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory/capture.segment.rsc +1 -1
  47. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  48. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  49. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_full.segment.rsc +1 -1
  50. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_head.segment.rsc +1 -1
  51. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_index.segment.rsc +1 -1
  52. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/capture.segments/_tree.segment.rsc +1 -1
  53. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.html +1 -1
  54. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.rsc +1 -1
  55. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph/__PAGE__.segment.rsc +1 -1
  56. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory/graph.segment.rsc +1 -1
  57. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  58. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  59. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_full.segment.rsc +1 -1
  60. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_head.segment.rsc +1 -1
  61. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_index.segment.rsc +1 -1
  62. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/graph.segments/_tree.segment.rsc +1 -1
  63. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.html +1 -1
  64. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.rsc +1 -1
  65. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall/__PAGE__.segment.rsc +1 -1
  66. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory/recall.segment.rsc +1 -1
  67. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  68. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  69. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_full.segment.rsc +1 -1
  70. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_head.segment.rsc +1 -1
  71. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_index.segment.rsc +1 -1
  72. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/recall.segments/_tree.segment.rsc +1 -1
  73. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.html +2 -2
  74. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.rsc +1 -1
  75. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory/replay/__PAGE__.segment.rsc +1 -1
  76. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory/replay.segment.rsc +1 -1
  77. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  78. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  79. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_full.segment.rsc +1 -1
  80. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_head.segment.rsc +1 -1
  81. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_index.segment.rsc +1 -1
  82. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/replay.segments/_tree.segment.rsc +1 -1
  83. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.html +1 -1
  84. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.rsc +1 -1
  85. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review/__PAGE__.segment.rsc +1 -1
  86. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory/review.segment.rsc +1 -1
  87. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  88. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  89. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_full.segment.rsc +1 -1
  90. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_head.segment.rsc +1 -1
  91. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_index.segment.rsc +1 -1
  92. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/review.segments/_tree.segment.rsc +1 -1
  93. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.html +1 -1
  94. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.rsc +1 -1
  95. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline/__PAGE__.segment.rsc +1 -1
  96. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory/timeline.segment.rsc +1 -1
  97. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  98. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  99. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_full.segment.rsc +1 -1
  100. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_head.segment.rsc +1 -1
  101. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_index.segment.rsc +1 -1
  102. package/dashboard/.next/standalone/dashboard/.next/server/app/memory/timeline.segments/_tree.segment.rsc +1 -1
  103. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.html +2 -2
  104. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.rsc +1 -1
  105. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory/__PAGE__.segment.rsc +1 -1
  106. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk/memory.segment.rsc +1 -1
  107. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  108. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_full.segment.rsc +1 -1
  109. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_head.segment.rsc +1 -1
  110. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_index.segment.rsc +1 -1
  111. package/dashboard/.next/standalone/dashboard/.next/server/app/memory.segments/_tree.segment.rsc +1 -1
  112. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.html +2 -2
  113. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.rsc +1 -1
  114. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview/__PAGE__.segment.rsc +1 -1
  115. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk/overview.segment.rsc +1 -1
  116. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  117. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_full.segment.rsc +1 -1
  118. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_head.segment.rsc +1 -1
  119. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_index.segment.rsc +1 -1
  120. package/dashboard/.next/standalone/dashboard/.next/server/app/overview.segments/_tree.segment.rsc +1 -1
  121. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.html +1 -1
  122. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.rsc +1 -1
  123. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit/__PAGE__.segment.rsc +1 -1
  124. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection/audit.segment.rsc +1 -1
  125. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  126. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  127. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_full.segment.rsc +1 -1
  128. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_head.segment.rsc +1 -1
  129. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_index.segment.rsc +1 -1
  130. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/audit.segments/_tree.segment.rsc +1 -1
  131. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.html +1 -1
  132. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.rsc +1 -1
  133. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts/__PAGE__.segment.rsc +1 -1
  134. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection/intercepts.segment.rsc +1 -1
  135. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  136. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  137. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_full.segment.rsc +1 -1
  138. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_head.segment.rsc +1 -1
  139. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_index.segment.rsc +1 -1
  140. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/intercepts.segments/_tree.segment.rsc +1 -1
  141. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.html +1 -1
  142. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.rsc +1 -1
  143. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome/__PAGE__.segment.rsc +1 -1
  144. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection/iron-dome.segment.rsc +1 -1
  145. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  146. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  147. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_full.segment.rsc +1 -1
  148. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_head.segment.rsc +1 -1
  149. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_index.segment.rsc +1 -1
  150. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/iron-dome.segments/_tree.segment.rsc +1 -1
  151. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.html +1 -1
  152. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.rsc +1 -1
  153. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies/__PAGE__.segment.rsc +1 -1
  154. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection/policies.segment.rsc +1 -1
  155. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  156. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  157. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_full.segment.rsc +1 -1
  158. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_head.segment.rsc +1 -1
  159. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_index.segment.rsc +1 -1
  160. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/policies.segments/_tree.segment.rsc +1 -1
  161. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.html +1 -1
  162. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.rsc +1 -1
  163. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine/__PAGE__.segment.rsc +1 -1
  164. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection/quarantine.segment.rsc +1 -1
  165. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  166. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  167. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_full.segment.rsc +1 -1
  168. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_head.segment.rsc +1 -1
  169. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_index.segment.rsc +1 -1
  170. package/dashboard/.next/standalone/dashboard/.next/server/app/protection/quarantine.segments/_tree.segment.rsc +1 -1
  171. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.html +2 -2
  172. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.rsc +1 -1
  173. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection/__PAGE__.segment.rsc +1 -1
  174. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk/protection.segment.rsc +1 -1
  175. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  176. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_full.segment.rsc +1 -1
  177. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_head.segment.rsc +1 -1
  178. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_index.segment.rsc +1 -1
  179. package/dashboard/.next/standalone/dashboard/.next/server/app/protection.segments/_tree.segment.rsc +1 -1
  180. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.html +2 -2
  181. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.rsc +1 -1
  182. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings/__PAGE__.segment.rsc +1 -1
  183. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings.segment.rsc +1 -1
  184. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  185. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_full.segment.rsc +1 -1
  186. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  187. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_index.segment.rsc +1 -1
  188. package/dashboard/.next/standalone/dashboard/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  189. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.html +1 -1
  190. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.rsc +1 -1
  191. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray/__PAGE__.segment.rsc +1 -1
  192. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain/xray.segment.rsc +1 -1
  193. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +1 -1
  194. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  195. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_full.segment.rsc +1 -1
  196. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_head.segment.rsc +1 -1
  197. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_index.segment.rsc +1 -1
  198. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain/xray.segments/_tree.segment.rsc +1 -1
  199. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.html +1 -1
  200. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.rsc +1 -1
  201. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain/__PAGE__.segment.rsc +1 -1
  202. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk/supply-chain.segment.rsc +1 -1
  203. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  204. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_full.segment.rsc +1 -1
  205. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_head.segment.rsc +1 -1
  206. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_index.segment.rsc +1 -1
  207. package/dashboard/.next/standalone/dashboard/.next/server/app/supply-chain.segments/_tree.segment.rsc +1 -1
  208. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.html +2 -2
  209. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.rsc +1 -1
  210. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray/__PAGE__.segment.rsc +1 -1
  211. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk/xray.segment.rsc +1 -1
  212. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
  213. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_full.segment.rsc +1 -1
  214. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_head.segment.rsc +1 -1
  215. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_index.segment.rsc +1 -1
  216. package/dashboard/.next/standalone/dashboard/.next/server/app/xray.segments/_tree.segment.rsc +1 -1
  217. package/dashboard/.next/standalone/dashboard/.next/server/pages/404.html +2 -2
  218. package/dashboard/.next/standalone/dashboard/.next/server/pages/500.html +2 -2
  219. package/dist/cli/doctor.d.ts +1 -0
  220. package/dist/cli/doctor.js +23 -4
  221. package/dist/database/better-sqlite3-guard.js +3 -2
  222. package/dist/database/init.js +3 -3
  223. package/dist/service/install.d.ts +24 -0
  224. package/dist/service/install.js +94 -8
  225. package/dist/setup/native-binding.d.ts +44 -23
  226. package/dist/setup/native-binding.js +54 -29
  227. package/package.json +1 -1
  228. package/scripts/postinstall.mjs +8 -5
  229. /package/dashboard/.next/standalone/dashboard/.next/static/{RpQu_A3G4318MjcmJbRga → RzZYMDWhzcVdAIEuXnOMB}/_buildManifest.js +0 -0
  230. /package/dashboard/.next/standalone/dashboard/.next/static/{RpQu_A3G4318MjcmJbRga → RzZYMDWhzcVdAIEuXnOMB}/_clientMiddlewareManifest.json +0 -0
  231. /package/dashboard/.next/standalone/dashboard/.next/static/{RpQu_A3G4318MjcmJbRga → RzZYMDWhzcVdAIEuXnOMB}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- <!DOCTYPE html><!--RpQu_A3G4318MjcmJbRga--><html lang="en" class="dark" data-theme="terminal"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/34d933785a17edf3.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/chunks/aee9601911b790ca.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/d878b929b21636c4.js"/><script src="/_next/static/chunks/f70f563804550a9c.js" async=""></script><script src="/_next/static/chunks/43d761df92da7cb6.js" async=""></script><script src="/_next/static/chunks/e281719dbabcca1d.js" async=""></script><script src="/_next/static/chunks/9e56d1f8f4d7adcb.js" async=""></script><script src="/_next/static/chunks/turbopack-768a6a8b9db952e0.js" async=""></script><script src="/_next/static/chunks/4ddb24d8ce3b8617.js" async=""></script><script src="/_next/static/chunks/417032eeb2cd875f.js" async=""></script><script src="/_next/static/chunks/d334b69bff7779be.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>ShieldCortex</title><meta name="description" content="AI Memory Security Dashboard — Defence pipeline, audit logs, quarantine review"/><script>
1
+ <!DOCTYPE html><!--RzZYMDWhzcVdAIEuXnOMB--><html lang="en" class="dark" data-theme="terminal"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/34d933785a17edf3.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/chunks/aee9601911b790ca.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/d878b929b21636c4.js"/><script src="/_next/static/chunks/f70f563804550a9c.js" async=""></script><script src="/_next/static/chunks/43d761df92da7cb6.js" async=""></script><script src="/_next/static/chunks/e281719dbabcca1d.js" async=""></script><script src="/_next/static/chunks/9e56d1f8f4d7adcb.js" async=""></script><script src="/_next/static/chunks/turbopack-768a6a8b9db952e0.js" async=""></script><script src="/_next/static/chunks/4ddb24d8ce3b8617.js" async=""></script><script src="/_next/static/chunks/417032eeb2cd875f.js" async=""></script><script src="/_next/static/chunks/d334b69bff7779be.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>ShieldCortex</title><meta name="description" content="AI Memory Security Dashboard — Defence pipeline, audit logs, quarantine review"/><script>
2
2
  try {
3
3
  var t = localStorage.getItem('sc-theme');
4
4
  if (t !== 'glass' && t !== 'terminal') t = 'terminal';
@@ -6,4 +6,4 @@ try {
6
6
  } catch (e) {
7
7
  document.documentElement.dataset.theme = 'terminal';
8
8
  }
9
- </script><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased bg-slate-950"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/d878b929b21636c4.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[36111,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"Providers\"]\n3:I[57043,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"default\"]\n4:I[10445,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\",\"/_next/static/chunks/d334b69bff7779be.js\"],\"default\"]\n5:I[27657,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"default\"]\n6:I[56978,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\n9:I[56978,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"ViewportBoundary\"]\nb:I[56978,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"MetadataBoundary\"]\nd:I[30687,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"default\"]\n:HL[\"/_next/static/chunks/34d933785a17edf3.css\",\"style\"]\n:HL[\"/_next/static/chunks/aee9601911b790ca.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"RpQu_A3G4318MjcmJbRga\",\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/34d933785a17edf3.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/aee9601911b790ca.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/417032eeb2cd875f.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark\",\"data-theme\":\"terminal\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\ntry {\\n var t = localStorage.getItem('sc-theme');\\n if (t !== 'glass' \u0026\u0026 t !== 'terminal') t = 'terminal';\\n document.documentElement.dataset.theme = t;\\n} catch (e) {\\n document.documentElement.dataset.theme = 'terminal';\\n}\\n\"}}]}],[\"$\",\"body\",null,{\"className\":\"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased bg-slate-950\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$4\",\"errorStyles\":[],\"errorScripts\":[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/d334b69bff7779be.js\",\"async\":true}]],\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L9\",null,{\"children\":\"$La\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lc\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$d\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"8:null\nc:[[\"$\",\"title\",\"0\",{\"children\":\"ShieldCortex\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"AI Memory Security Dashboard — Defence pipeline, audit logs, quarantine review\"}]]\n"])</script></body></html>
9
+ </script><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased bg-slate-950"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/d878b929b21636c4.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[36111,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"Providers\"]\n3:I[57043,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"default\"]\n4:I[10445,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\",\"/_next/static/chunks/d334b69bff7779be.js\"],\"default\"]\n5:I[27657,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"default\"]\n6:I[56978,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\n9:I[56978,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"ViewportBoundary\"]\nb:I[56978,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"MetadataBoundary\"]\nd:I[30687,[\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"default\"]\n:HL[\"/_next/static/chunks/34d933785a17edf3.css\",\"style\"]\n:HL[\"/_next/static/chunks/aee9601911b790ca.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"RzZYMDWhzcVdAIEuXnOMB\",\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/34d933785a17edf3.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/aee9601911b790ca.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/4ddb24d8ce3b8617.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/417032eeb2cd875f.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark\",\"data-theme\":\"terminal\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\ntry {\\n var t = localStorage.getItem('sc-theme');\\n if (t !== 'glass' \u0026\u0026 t !== 'terminal') t = 'terminal';\\n document.documentElement.dataset.theme = t;\\n} catch (e) {\\n document.documentElement.dataset.theme = 'terminal';\\n}\\n\"}}]}],[\"$\",\"body\",null,{\"className\":\"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased bg-slate-950\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$4\",\"errorStyles\":[],\"errorScripts\":[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/d334b69bff7779be.js\",\"async\":true}]],\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L9\",null,{\"children\":\"$La\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lc\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$d\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"8:null\nc:[[\"$\",\"title\",\"0\",{\"children\":\"ShieldCortex\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"AI Memory Security Dashboard — Defence pipeline, audit logs, quarantine review\"}]]\n"])</script></body></html>
@@ -1,2 +1,2 @@
1
- <!DOCTYPE html><!--RpQu_A3G4318MjcmJbRga--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/d878b929b21636c4.js"/><script src="/_next/static/chunks/f70f563804550a9c.js" async=""></script><script src="/_next/static/chunks/43d761df92da7cb6.js" async=""></script><script src="/_next/static/chunks/e281719dbabcca1d.js" async=""></script><script src="/_next/static/chunks/9e56d1f8f4d7adcb.js" async=""></script><script src="/_next/static/chunks/turbopack-768a6a8b9db952e0.js" async=""></script><script src="/_next/static/chunks/102f894cc892994d.js" async=""></script><script src="/_next/static/chunks/417032eeb2cd875f.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: Internal Server Error.</title><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
2
- @media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/d878b929b21636c4.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[57043,[\"/_next/static/chunks/102f894cc892994d.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"default\"]\n3:I[27657,[\"/_next/static/chunks/102f894cc892994d.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"default\"]\n4:I[56978,[\"/_next/static/chunks/102f894cc892994d.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[56978,[\"/_next/static/chunks/102f894cc892994d.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"ViewportBoundary\"]\n9:I[56978,[\"/_next/static/chunks/102f894cc892994d.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"MetadataBoundary\"]\nb:I[30687,[\"/_next/static/chunks/102f894cc892994d.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"RpQu_A3G4318MjcmJbRga\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/102f894cc892994d.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/417032eeb2cd875f.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\na:[]\n"])</script></body></html>
1
+ <!DOCTYPE html><!--RzZYMDWhzcVdAIEuXnOMB--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/d878b929b21636c4.js"/><script src="/_next/static/chunks/f70f563804550a9c.js" async=""></script><script src="/_next/static/chunks/43d761df92da7cb6.js" async=""></script><script src="/_next/static/chunks/e281719dbabcca1d.js" async=""></script><script src="/_next/static/chunks/9e56d1f8f4d7adcb.js" async=""></script><script src="/_next/static/chunks/turbopack-768a6a8b9db952e0.js" async=""></script><script src="/_next/static/chunks/102f894cc892994d.js" async=""></script><script src="/_next/static/chunks/417032eeb2cd875f.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: Internal Server Error.</title><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
2
+ @media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/d878b929b21636c4.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[57043,[\"/_next/static/chunks/102f894cc892994d.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"default\"]\n3:I[27657,[\"/_next/static/chunks/102f894cc892994d.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"default\"]\n4:I[56978,[\"/_next/static/chunks/102f894cc892994d.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[56978,[\"/_next/static/chunks/102f894cc892994d.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"ViewportBoundary\"]\n9:I[56978,[\"/_next/static/chunks/102f894cc892994d.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"MetadataBoundary\"]\nb:I[30687,[\"/_next/static/chunks/102f894cc892994d.js\",\"/_next/static/chunks/417032eeb2cd875f.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"RzZYMDWhzcVdAIEuXnOMB\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/102f894cc892994d.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/417032eeb2cd875f.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\na:[]\n"])</script></body></html>
@@ -132,6 +132,7 @@ export declare function checkOpenClawDuplicateInstalls(openclawDir?: string): Pr
132
132
  * group; that's the surface this check probes.
133
133
  */
134
134
  export declare function checkDefenceCanary(): Promise<CheckResult>;
135
+ export declare function checkBrainWorker(): Promise<CheckResult>;
135
136
  /**
136
137
  * The cortex-memory hook is installed by FILE COPY into
137
138
  * `~/.openclaw/hooks/cortex-memory/` (see src/setup/openclaw.ts). A package
@@ -14,6 +14,7 @@ import { shouldShowProUpsell, UPSELL_CONSTANTS } from './upsell.js';
14
14
  import { getUpsellState, markUpsellShown } from './upsell-state.js';
15
15
  import { resolveRealtimePluginInstallPath, readInstalledRealtimePluginVersion } from '../integrations/openclaw-plugin-state.js';
16
16
  import { resolveSelfInstallDir } from '../setup/native-binding.js';
17
+ import { MCP_LIGHT_TICK_INTERVAL_MS } from '../worker/types.js';
17
18
  const require = createRequire(import.meta.url);
18
19
  const pkg = require('../../package.json');
19
20
  // ANSI colour codes
@@ -127,7 +128,7 @@ async function checkDatabase() {
127
128
  status: 'fail',
128
129
  message: `cannot open — ${msg}`,
129
130
  fix: /bindings file|napi|abi|MODULE_VERSION|was compiled against/i.test(msg)
130
- ? `Native DB engine failed to load. Run \`shieldcortex repair\` (rebuilds better-sqlite3 in the install dir + re-verifies), or manually: cd "${resolveSelfInstallDir()}" && npm rebuild better-sqlite3`
131
+ ? `Native DB engine failed to load. Run \`shieldcortex repair\` (compiles better-sqlite3 from source + re-verifies), or manually: cd "${path.join(resolveSelfInstallDir(), 'node_modules', 'better-sqlite3')}" && npm run build-release`
131
132
  : 'Back up and delete `~/.shieldcortex/memories.db`, then restart the MCP server',
132
133
  };
133
134
  }
@@ -1158,9 +1159,15 @@ function workerRecoveryFix() {
1158
1159
  if (process.platform === 'linux') {
1159
1160
  return 'For persistence, run `shieldcortex service install --headless` (recommended on headless hosts) or restart Claude Code';
1160
1161
  }
1161
- return 'Restart Claude Code or run `shieldcortex service install` to supervise the worker';
1162
+ return 'Restart Claude Code (spawns a fresh MCP-hosted worker), or run `shieldcortex service install` to start — or restart — the supervised launchd service';
1162
1163
  }
1163
- async function checkBrainWorker() {
1164
+ // worker.json is last-writer-wins: an MCP-hosted worker dies with its Claude
1165
+ // Code session and leaves its dead pid in the file until a surviving worker's
1166
+ // next tick overwrites it — up to MCP_LIGHT_TICK_INTERVAL_MS for mcp-profile
1167
+ // survivors. Within that window (plus slack) a dead pid is expected churn,
1168
+ // not a failure.
1169
+ const WORKER_TAKEOVER_GRACE_MS = MCP_LIGHT_TICK_INTERVAL_MS + 5 * 60 * 1000;
1170
+ export async function checkBrainWorker() {
1164
1171
  if (process.env.SHIELDCORTEX_DISABLE_WORKER === '1') {
1165
1172
  return {
1166
1173
  label: 'Brain worker',
@@ -1198,10 +1205,22 @@ async function checkBrainWorker() {
1198
1205
  // nothing's coming". The fix-hint diverges accordingly.
1199
1206
  const alive = pid != null ? isPidAlive(pid) : null;
1200
1207
  if (pid != null && alive === false) {
1208
+ // Grace applies only to mcp-profile hosts: they die with their Claude
1209
+ // Code window, so a dead pid inside one takeover window is expected
1210
+ // churn. A dead full-profile host (dashboard/api/worker — typically
1211
+ // supervised) is a real failure, and a future-dated tick (clock skew)
1212
+ // proves nothing — both warn immediately.
1213
+ if (profile === 'mcp' && ageMs >= 0 && ageMs <= WORKER_TAKEOVER_GRACE_MS) {
1214
+ return {
1215
+ label: 'Brain worker',
1216
+ status: 'info',
1217
+ message: `host pid ${pid} exited (last tick ${ageMin}m ago, profile=${profile}) — expected when a Claude Code session closes; if another ShieldCortex process is running, its worker takes over on its next tick (≤${Math.round(MCP_LIGHT_TICK_INTERVAL_MS / 60000)} min). Re-run doctor to confirm`,
1218
+ };
1219
+ }
1201
1220
  return {
1202
1221
  label: 'Brain worker',
1203
1222
  status: 'warn',
1204
- message: `process gone (pid ${pid} dead, last tick ${ageMin}m ago, profile=${profile})`,
1223
+ message: `process gone (pid ${pid} dead, last tick ${ageMin}m ago, profile=${profile}) and no surviving worker has taken over`,
1205
1224
  fix: workerRecoveryFix(),
1206
1225
  };
1207
1226
  }
@@ -47,8 +47,9 @@ export function formatNativeLoadError(err, nodeVersion, abi) {
47
47
  'the module was not compiled locally.',
48
48
  '',
49
49
  'Fix one of these:',
50
- ' • Rebuild the native module: npm rebuild better-sqlite3',
51
- ' (requires a C/C++ toolchain Xcode CLT / build-essential)',
50
+ ' • Run `shieldcortex repair` (compiles better-sqlite3 from source + re-verifies)',
51
+ ' Or recompile manually in the better-sqlite3 package dir: npm run build-release',
52
+ ' (requires a C/C++ toolchain — Xcode CLT / build-essential; a plain `npm rebuild` can silently no-op)',
52
53
  ' • Or run ShieldCortex on a supported Node LTS (20.x or 22.x),',
53
54
  ' which ship prebuilt binaries — no compiler needed.',
54
55
  '',
@@ -459,9 +459,9 @@ export function initDatabase(dbPath) {
459
459
  const detail = openError instanceof Error ? openError.message : String(openError);
460
460
  throw new Error('ShieldCortex could not load its database engine (the better-sqlite3 native module). ' +
461
461
  `This is an install / Node-version issue, NOT database corruption — your data at ${expandedPath} is untouched. ` +
462
- 'Rebuild the native module and retry:\n' +
463
- ' cd "$(npm root -g)/shieldcortex" && npm rebuild better-sqlite3\n' +
464
- '(install a C/C++ toolchain first if it fails to compile)\n' +
462
+ 'Rebuild the native module and retry — easiest is `shieldcortex repair`, or manually:\n' +
463
+ ' cd "$(npm root -g)/shieldcortex/node_modules/better-sqlite3" && npm run build-release\n' +
464
+ '(install a C/C++ toolchain first if it fails to compile; a plain `npm rebuild` can silently no-op)\n' +
465
465
  `Underlying error: ${detail}`);
466
466
  }
467
467
  // Database file is corrupt or not a valid SQLite database
@@ -6,6 +6,7 @@
6
6
  * - Linux: systemd user service
7
7
  * - Windows: VBS script in Startup folder
8
8
  */
9
+ import { execSync } from 'child_process';
9
10
  import { type ServiceMode } from './templates.js';
10
11
  interface ServiceOptions {
11
12
  mode?: ServiceMode;
@@ -14,6 +15,29 @@ export declare function detectStaleAppendLogs(content: string): {
14
15
  stale: boolean;
15
16
  missingPath: string | null;
16
17
  };
18
+ type ExecFn = (command: string, options?: Parameters<typeof execSync>[1]) => unknown;
19
+ /**
20
+ * Load (or reload) the LaunchAgent via the modern bootstrap API.
21
+ *
22
+ * The legacy `launchctl load -w` lies on an already-loaded service: it prints
23
+ * "Load failed: 5: Input/output error" to stderr yet exits 0, so install
24
+ * claimed success while the old process kept running with the old service
25
+ * definition (launchd caches the plist at load time). bootout + bootstrap
26
+ * returns real exit codes and applies the plist that was just written.
27
+ */
28
+ export declare function activateMacosService(servicePath: string, opts?: {
29
+ exec?: ExecFn;
30
+ retryDelayMs?: number;
31
+ drainTimeoutMs?: number;
32
+ }): Promise<{
33
+ reloaded: boolean;
34
+ }>;
35
+ /**
36
+ * `enable --now` is a no-op start on an already-running unit, so reinstalls
37
+ * kept the old process (and old code) running. enable + restart covers both
38
+ * fresh installs and reinstalls.
39
+ */
40
+ export declare function activateLinuxService(exec?: ExecFn): void;
17
41
  export declare function installService(options?: ServiceOptions): Promise<void>;
18
42
  export declare function repairService(options?: ServiceOptions): Promise<void>;
19
43
  export declare function uninstallService(options?: {
@@ -121,6 +121,83 @@ function summarizeServiceMode(mode) {
121
121
  return 'dashboard + API';
122
122
  }
123
123
  }
124
+ const MACOS_SERVICE_LABEL = 'com.shieldcortex.dashboard';
125
+ const LINUX_SERVICE_UNIT = 'shieldcortex-dashboard.service';
126
+ function macosGuiDomain() {
127
+ const uid = process.getuid?.();
128
+ return typeof uid === 'number' ? `gui/${uid}` : 'gui/501';
129
+ }
130
+ /**
131
+ * Load (or reload) the LaunchAgent via the modern bootstrap API.
132
+ *
133
+ * The legacy `launchctl load -w` lies on an already-loaded service: it prints
134
+ * "Load failed: 5: Input/output error" to stderr yet exits 0, so install
135
+ * claimed success while the old process kept running with the old service
136
+ * definition (launchd caches the plist at load time). bootout + bootstrap
137
+ * returns real exit codes and applies the plist that was just written.
138
+ */
139
+ export async function activateMacosService(servicePath, opts = {}) {
140
+ const exec = opts.exec ?? execSync;
141
+ const retryDelayMs = opts.retryDelayMs ?? 500;
142
+ const drainTimeoutMs = opts.drainTimeoutMs ?? 30_000;
143
+ const domain = macosGuiDomain();
144
+ const target = `${domain}/${MACOS_SERVICE_LABEL}`;
145
+ const isLoaded = () => {
146
+ try {
147
+ exec(`launchctl print ${target}`, { stdio: 'ignore' });
148
+ return true;
149
+ }
150
+ catch {
151
+ return false;
152
+ }
153
+ };
154
+ const wasLoaded = isLoaded();
155
+ if (wasLoaded) {
156
+ try {
157
+ exec(`launchctl bootout ${target}`, { stdio: 'inherit' });
158
+ }
159
+ catch {
160
+ // Job vanished between the probe and the bootout (concurrent teardown).
161
+ // Already-gone is the state we wanted; fall through to bootstrap.
162
+ }
163
+ // bootout initiates teardown and returns in milliseconds, but launchd
164
+ // refuses to bootstrap the same label (EIO) until the old instance fully
165
+ // drains — ~5s under SIGTERM→SIGKILL escalation, up to the api server's
166
+ // 10s force-exit. `launchctl print` exits 0 while draining and non-zero
167
+ // once gone, so poll it rather than blind-retrying bootstrap.
168
+ const deadline = Date.now() + drainTimeoutMs;
169
+ while (isLoaded() && Date.now() < deadline) {
170
+ await new Promise((resolve) => setTimeout(resolve, retryDelayMs));
171
+ }
172
+ }
173
+ // Replaces the persistence bit that `load -w` used to clear.
174
+ exec(`launchctl enable ${target}`, { stdio: 'inherit' });
175
+ // Safety net behind the drain poll. Gives up honestly — the caller reports
176
+ // the failure instead of claiming success.
177
+ const attempts = wasLoaded ? 3 : 1;
178
+ for (let attempt = 1;; attempt++) {
179
+ try {
180
+ exec(`launchctl bootstrap ${domain} "${servicePath}"`, { stdio: 'inherit' });
181
+ break;
182
+ }
183
+ catch (err) {
184
+ if (attempt >= attempts)
185
+ throw err;
186
+ await new Promise((resolve) => setTimeout(resolve, retryDelayMs));
187
+ }
188
+ }
189
+ return { reloaded: wasLoaded };
190
+ }
191
+ /**
192
+ * `enable --now` is a no-op start on an already-running unit, so reinstalls
193
+ * kept the old process (and old code) running. enable + restart covers both
194
+ * fresh installs and reinstalls.
195
+ */
196
+ export function activateLinuxService(exec = execSync) {
197
+ exec('systemctl --user daemon-reload', { stdio: 'inherit' });
198
+ exec(`systemctl --user enable ${LINUX_SERVICE_UNIT}`, { stdio: 'inherit' });
199
+ exec(`systemctl --user restart ${LINUX_SERVICE_UNIT}`, { stdio: 'inherit' });
200
+ }
124
201
  function tryEnableLinuxLinger() {
125
202
  const username = process.env.USER || os.userInfo().username;
126
203
  try {
@@ -154,13 +231,15 @@ export async function installService(options = {}) {
154
231
  console.log(`Service file written to: ${servicePath}`);
155
232
  try {
156
233
  switch (platform) {
157
- case 'macos':
158
- execSync(`launchctl load -w "${servicePath}"`, { stdio: 'inherit' });
159
- console.log('Service loaded via launchctl.');
234
+ case 'macos': {
235
+ const { reloaded } = await activateMacosService(servicePath);
236
+ console.log(reloaded
237
+ ? 'Service was already loaded — restarted with the new configuration.'
238
+ : 'Service loaded via launchctl.');
160
239
  break;
240
+ }
161
241
  case 'linux':
162
- execSync('systemctl --user daemon-reload', { stdio: 'inherit' });
163
- execSync('systemctl --user enable --now shieldcortex-dashboard.service', { stdio: 'inherit' });
242
+ activateLinuxService();
164
243
  if (mode === 'worker' || mode === 'api') {
165
244
  tryEnableLinuxLinger();
166
245
  }
@@ -174,7 +253,15 @@ export async function installService(options = {}) {
174
253
  }
175
254
  catch (err) {
176
255
  console.error(`Failed to enable service: ${err.message}`);
177
- console.log(`The service file was written to ${servicePath} — you can enable it manually.`);
256
+ if (platform === 'macos') {
257
+ // Common over ssh: no GUI session means no gui/<uid> domain to load
258
+ // into. The LaunchAgent still auto-starts at the next GUI login.
259
+ console.log(`The service file was written to ${servicePath} — it will auto-start at the next GUI login, or load it now with:`);
260
+ console.log(` launchctl bootstrap gui/$(id -u) "${servicePath}"`);
261
+ }
262
+ else {
263
+ console.log(`The service file was written to ${servicePath} — you can enable it manually.`);
264
+ }
178
265
  return;
179
266
  }
180
267
  console.log(`\nShieldCortex ${summarizeServiceMode(mode)} will now auto-start.`);
@@ -250,8 +337,7 @@ export async function serviceStatus() {
250
337
  try {
251
338
  switch (platform) {
252
339
  case 'macos': {
253
- const uid = process.getuid?.();
254
- const domain = typeof uid === 'number' ? `gui/${uid}/com.shieldcortex.dashboard` : 'gui/501/com.shieldcortex.dashboard';
340
+ const domain = `${macosGuiDomain()}/${MACOS_SERVICE_LABEL}`;
255
341
  const out = execSync(`launchctl print ${domain} 2>&1`, { encoding: 'utf-8' });
256
342
  const pidMatch = out.match(/\bpid\s*=\s*(\d+)/i);
257
343
  const running = /\bstate\s*=\s*running\b/i.test(out) || Boolean(pidMatch);
@@ -13,13 +13,15 @@
13
13
  * successfully" — a no-op. So this module resolves the install dir from the
14
14
  * running code's own location and rebuilds there.
15
15
  *
16
- * The second trap (observed on clawdbot1): even in the right dir, a plain
17
- * `npm rebuild` can report "rebuilt dependencies successfully" while the binary
18
- * never built no matching prebuilt, and the source build silently no-op'd or
19
- * its failure was swallowed. So when a plain rebuild doesn't heal, we escalate
20
- * to `--build-from-source --foreground-scripts`, which forces a real compile and
21
- * streams the build output surfacing the ACTUAL error (almost always a missing
22
- * C/C++ toolchain) instead of a misleading success.
16
+ * The second trap (proven on clawdbot1): even in the right dir, `npm rebuild
17
+ * better-sqlite3` — AND `npm rebuild … --build-from-source` can report "rebuilt
18
+ * dependencies successfully" while the binary never built. better-sqlite3's
19
+ * install runs prebuild-install, which on a platform with no matching prebuilt
20
+ * exits 0 WITHOUT building (the `--build-from-source` flag does not reliably force
21
+ * it). So when a plain rebuild doesn't heal, we escalate to better-sqlite3's own
22
+ * `npm run build-release` (= `node-gyp rebuild --release`) IN its package dir,
23
+ * which bypasses prebuild-install and actually compiles — surfacing the real
24
+ * build error (almost always a missing C/C++ toolchain) if it can't.
23
25
  *
24
26
  * Used by: `shieldcortex update` (verify+heal step), `shieldcortex repair`,
25
27
  * `shieldcortex doctor` (correct remediation text), and the postinstall guidance.
@@ -64,13 +66,31 @@ export declare function resolveSelfInstallDir(): string;
64
66
  */
65
67
  export declare function verifyNativeBinding(): VerifyResult;
66
68
  /**
67
- * Run `npm rebuild better-sqlite3` in the install dir. Async (the rebuild can
68
- * take tens of seconds) so callers can keep a spinner alive. Never throws.
69
+ * The command used to (re)build the binding split out so the choice is
70
+ * unit-testable without actually spawning npm.
69
71
  *
70
- * With `{ fromSource: true }` it forces a real compile (`--build-from-source`)
71
- * and streams the build-script output (`--foreground-scripts`) so a failed
72
- * compile surfaces its real error rather than npm's misleading
73
- * "rebuilt dependencies successfully".
72
+ * - normal: `npm rebuild better-sqlite3` in the install dir. Fast, and places a
73
+ * matching prebuilt when one exists for this platform/ABI.
74
+ * - fromSource: `npm run build-release` IN the better-sqlite3 dir — its own script
75
+ * (`node-gyp rebuild --release`). This is the ONLY reliable force-compile:
76
+ * `npm rebuild … --build-from-source` still goes through prebuild-install, which
77
+ * on a platform with no matching prebuilt exits 0 WITHOUT building and reports
78
+ * "rebuilt dependencies successfully" (proven on arm64 Node 22). build-release
79
+ * bypasses prebuild-install entirely and invokes node-gyp directly.
80
+ */
81
+ export declare function nativeRebuildCommand(installDir: string, fromSource?: boolean): {
82
+ cmd: string;
83
+ args: string[];
84
+ cwd: string;
85
+ };
86
+ /**
87
+ * Run the binding (re)build. Async (the compile can take tens of seconds) so
88
+ * callers can keep a spinner alive. Never throws.
89
+ *
90
+ * With `{ fromSource: true }` it forces a real compile via better-sqlite3's
91
+ * `build-release` (node-gyp) — bypassing prebuild-install's silent no-op — and
92
+ * captures the build output so a failed compile surfaces its real error rather
93
+ * than npm's misleading "rebuilt dependencies successfully".
74
94
  */
75
95
  export declare function rebuildNativeBinding(installDir: string, opts?: {
76
96
  fromSource?: boolean;
@@ -79,13 +99,13 @@ export declare function rebuildNativeBinding(installDir: string, opts?: {
79
99
  output: string;
80
100
  }>;
81
101
  /**
82
- * The correct copy-paste remediation the install-dir `cd` is the bit users
83
- * miss (a bare `npm rebuild better-sqlite3` from $HOME is a silent no-op).
84
- *
85
- * Uses `--build-from-source` because by the time we surface this, a plain
86
- * rebuild has already failed to heal: forcing a source compile is both what
87
- * actually produces the binary (when no prebuilt matches this Node/arch) and
88
- * what reveals the real error if it can't.
102
+ * The correct copy-paste remediation. Two things users (and a naive
103
+ * `npm rebuild`) get wrong, both leading to a silent no-op:
104
+ * 1. running the rebuild outside the package's install dir, and
105
+ * 2. using `npm rebuild`/`--build-from-source`, which goes through
106
+ * prebuild-install and exits 0 without building when no prebuilt matches.
107
+ * The reliable command is better-sqlite3's own `build-release` (node-gyp) run in
108
+ * its package dir, which compiles from source directly.
89
109
  */
90
110
  export declare function nativeBindingRemediation(installDir: string): string;
91
111
  /**
@@ -96,8 +116,9 @@ export declare function nativeBindingRemediation(installDir: string): string;
96
116
  *
97
117
  * Two rebuild attempts when needed: first a plain `npm rebuild` (fast, uses a
98
118
  * matching prebuilt if one exists), then — only if that didn't heal it — a
99
- * forced `--build-from-source` compile. The forced build is what surfaces the
100
- * real error (and `rebuildOutput` in the failed result carries IT, not the
101
- * earlier misleading "rebuilt dependencies successfully").
119
+ * forced `npm run build-release` (node-gyp) source compile. The forced build is
120
+ * what actually produces the binary when no prebuilt matches AND surfaces the
121
+ * real error if it can't (and `rebuildOutput` in the failed result carries IT,
122
+ * not the earlier misleading "rebuilt dependencies successfully").
102
123
  */
103
124
  export declare function ensureNativeBinding(deps?: Partial<BindingDeps>): Promise<EnsureResult>;
@@ -13,13 +13,15 @@
13
13
  * successfully" — a no-op. So this module resolves the install dir from the
14
14
  * running code's own location and rebuilds there.
15
15
  *
16
- * The second trap (observed on clawdbot1): even in the right dir, a plain
17
- * `npm rebuild` can report "rebuilt dependencies successfully" while the binary
18
- * never built no matching prebuilt, and the source build silently no-op'd or
19
- * its failure was swallowed. So when a plain rebuild doesn't heal, we escalate
20
- * to `--build-from-source --foreground-scripts`, which forces a real compile and
21
- * streams the build output surfacing the ACTUAL error (almost always a missing
22
- * C/C++ toolchain) instead of a misleading success.
16
+ * The second trap (proven on clawdbot1): even in the right dir, `npm rebuild
17
+ * better-sqlite3` — AND `npm rebuild … --build-from-source` can report "rebuilt
18
+ * dependencies successfully" while the binary never built. better-sqlite3's
19
+ * install runs prebuild-install, which on a platform with no matching prebuilt
20
+ * exits 0 WITHOUT building (the `--build-from-source` flag does not reliably force
21
+ * it). So when a plain rebuild doesn't heal, we escalate to better-sqlite3's own
22
+ * `npm run build-release` (= `node-gyp rebuild --release`) IN its package dir,
23
+ * which bypasses prebuild-install and actually compiles — surfacing the real
24
+ * build error (almost always a missing C/C++ toolchain) if it can't.
23
25
  *
24
26
  * Used by: `shieldcortex update` (verify+heal step), `shieldcortex repair`,
25
27
  * `shieldcortex doctor` (correct remediation text), and the postinstall guidance.
@@ -58,15 +60,39 @@ export function verifyNativeBinding() {
58
60
  }
59
61
  }
60
62
  /**
61
- * Run `npm rebuild better-sqlite3` in the install dir. Async (the rebuild can
62
- * take tens of seconds) so callers can keep a spinner alive. Never throws.
63
+ * The command used to (re)build the binding split out so the choice is
64
+ * unit-testable without actually spawning npm.
63
65
  *
64
- * With `{ fromSource: true }` it forces a real compile (`--build-from-source`)
65
- * and streams the build-script output (`--foreground-scripts`) so a failed
66
- * compile surfaces its real error rather than npm's misleading
67
- * "rebuilt dependencies successfully".
66
+ * - normal: `npm rebuild better-sqlite3` in the install dir. Fast, and places a
67
+ * matching prebuilt when one exists for this platform/ABI.
68
+ * - fromSource: `npm run build-release` IN the better-sqlite3 dir — its own script
69
+ * (`node-gyp rebuild --release`). This is the ONLY reliable force-compile:
70
+ * `npm rebuild … --build-from-source` still goes through prebuild-install, which
71
+ * on a platform with no matching prebuilt exits 0 WITHOUT building and reports
72
+ * "rebuilt dependencies successfully" (proven on arm64 Node 22). build-release
73
+ * bypasses prebuild-install entirely and invokes node-gyp directly.
74
+ */
75
+ export function nativeRebuildCommand(installDir, fromSource = false) {
76
+ if (fromSource) {
77
+ return {
78
+ cmd: 'npm',
79
+ args: ['run', 'build-release'],
80
+ cwd: path.join(installDir, 'node_modules', 'better-sqlite3'),
81
+ };
82
+ }
83
+ return { cmd: 'npm', args: ['rebuild', 'better-sqlite3', '--no-audit', '--no-fund'], cwd: installDir };
84
+ }
85
+ /**
86
+ * Run the binding (re)build. Async (the compile can take tens of seconds) so
87
+ * callers can keep a spinner alive. Never throws.
88
+ *
89
+ * With `{ fromSource: true }` it forces a real compile via better-sqlite3's
90
+ * `build-release` (node-gyp) — bypassing prebuild-install's silent no-op — and
91
+ * captures the build output so a failed compile surfaces its real error rather
92
+ * than npm's misleading "rebuilt dependencies successfully".
68
93
  */
69
94
  export function rebuildNativeBinding(installDir, opts = {}) {
95
+ const { cmd, args, cwd } = nativeRebuildCommand(installDir, opts.fromSource ?? false);
70
96
  return new Promise((resolve) => {
71
97
  let output = '';
72
98
  let settled = false;
@@ -74,13 +100,10 @@ export function rebuildNativeBinding(installDir, opts = {}) {
74
100
  settled = true;
75
101
  resolve({ ok, output });
76
102
  } };
77
- const args = ['rebuild', 'better-sqlite3', '--no-audit', '--no-fund'];
78
- if (opts.fromSource)
79
- args.push('--build-from-source', '--foreground-scripts');
80
103
  let child;
81
104
  try {
82
- child = spawn('npm', args, {
83
- cwd: installDir,
105
+ child = spawn(cmd, args, {
106
+ cwd,
84
107
  stdio: ['ignore', 'pipe', 'pipe'],
85
108
  shell: false,
86
109
  });
@@ -126,17 +149,18 @@ function toolchainHint() {
126
149
  return 'If it fails for lack of a compiler: sudo apt-get install -y python3 make g++ (Debian/Ubuntu; or your distro\'s build-essential).';
127
150
  }
128
151
  /**
129
- * The correct copy-paste remediation the install-dir `cd` is the bit users
130
- * miss (a bare `npm rebuild better-sqlite3` from $HOME is a silent no-op).
131
- *
132
- * Uses `--build-from-source` because by the time we surface this, a plain
133
- * rebuild has already failed to heal: forcing a source compile is both what
134
- * actually produces the binary (when no prebuilt matches this Node/arch) and
135
- * what reveals the real error if it can't.
152
+ * The correct copy-paste remediation. Two things users (and a naive
153
+ * `npm rebuild`) get wrong, both leading to a silent no-op:
154
+ * 1. running the rebuild outside the package's install dir, and
155
+ * 2. using `npm rebuild`/`--build-from-source`, which goes through
156
+ * prebuild-install and exits 0 without building when no prebuilt matches.
157
+ * The reliable command is better-sqlite3's own `build-release` (node-gyp) run in
158
+ * its package dir, which compiles from source directly.
136
159
  */
137
160
  export function nativeBindingRemediation(installDir) {
161
+ const pkgDir = path.join(installDir, 'node_modules', 'better-sqlite3');
138
162
  return [
139
- `cd "${installDir}" && npm rebuild better-sqlite3 --build-from-source`,
163
+ `cd "${pkgDir}" && npm run build-release`,
140
164
  toolchainHint(),
141
165
  'Then restart Claude Code / the OpenClaw gateway so processes reload the binding.',
142
166
  ].join('\n');
@@ -149,9 +173,10 @@ export function nativeBindingRemediation(installDir) {
149
173
  *
150
174
  * Two rebuild attempts when needed: first a plain `npm rebuild` (fast, uses a
151
175
  * matching prebuilt if one exists), then — only if that didn't heal it — a
152
- * forced `--build-from-source` compile. The forced build is what surfaces the
153
- * real error (and `rebuildOutput` in the failed result carries IT, not the
154
- * earlier misleading "rebuilt dependencies successfully").
176
+ * forced `npm run build-release` (node-gyp) source compile. The forced build is
177
+ * what actually produces the binary when no prebuilt matches AND surfaces the
178
+ * real error if it can't (and `rebuildOutput` in the failed result carries IT,
179
+ * not the earlier misleading "rebuilt dependencies successfully").
155
180
  */
156
181
  export async function ensureNativeBinding(deps = {}) {
157
182
  const verify = deps.verify ?? verifyNativeBinding;