hex-audit 0.4.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 (486) hide show
  1. package/CLAUDE.md +105 -0
  2. package/DEMO.md +141 -0
  3. package/README.md +378 -0
  4. package/dashboard/.next/BUILD_ID +1 -0
  5. package/dashboard/.next/app-build-manifest.json +99 -0
  6. package/dashboard/.next/app-path-routes-manifest.json +1 -0
  7. package/dashboard/.next/build-manifest.json +32 -0
  8. package/dashboard/.next/cache/.tsbuildinfo +1 -0
  9. package/dashboard/.next/cache/webpack/client-production/0.pack +0 -0
  10. package/dashboard/.next/cache/webpack/client-production/index.pack +0 -0
  11. package/dashboard/.next/cache/webpack/edge-server-production/0.pack +0 -0
  12. package/dashboard/.next/cache/webpack/edge-server-production/index.pack +0 -0
  13. package/dashboard/.next/cache/webpack/server-production/0.pack +0 -0
  14. package/dashboard/.next/cache/webpack/server-production/1.pack +0 -0
  15. package/dashboard/.next/cache/webpack/server-production/2.pack +0 -0
  16. package/dashboard/.next/cache/webpack/server-production/index.pack +0 -0
  17. package/dashboard/.next/cache/webpack/server-production/index.pack.old +0 -0
  18. package/dashboard/.next/export-marker.json +1 -0
  19. package/dashboard/.next/images-manifest.json +1 -0
  20. package/dashboard/.next/next-minimal-server.js.nft.json +1 -0
  21. package/dashboard/.next/next-server.js.nft.json +1 -0
  22. package/dashboard/.next/package.json +1 -0
  23. package/dashboard/.next/prerender-manifest.js +1 -0
  24. package/dashboard/.next/prerender-manifest.json +1 -0
  25. package/dashboard/.next/react-loadable-manifest.json +300 -0
  26. package/dashboard/.next/required-server-files.json +1 -0
  27. package/dashboard/.next/routes-manifest.json +1 -0
  28. package/dashboard/.next/server/app/_not-found/page.js +1 -0
  29. package/dashboard/.next/server/app/_not-found/page.js.nft.json +1 -0
  30. package/dashboard/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
  31. package/dashboard/.next/server/app/_not-found.html +1 -0
  32. package/dashboard/.next/server/app/_not-found.meta +6 -0
  33. package/dashboard/.next/server/app/_not-found.rsc +12 -0
  34. package/dashboard/.next/server/app/access/page.js +1 -0
  35. package/dashboard/.next/server/app/access/page.js.nft.json +1 -0
  36. package/dashboard/.next/server/app/access/page_client-reference-manifest.js +1 -0
  37. package/dashboard/.next/server/app/access.html +1 -0
  38. package/dashboard/.next/server/app/access.meta +5 -0
  39. package/dashboard/.next/server/app/access.rsc +8 -0
  40. package/dashboard/.next/server/app/api/code/route.js +1 -0
  41. package/dashboard/.next/server/app/api/code/route.js.nft.json +1 -0
  42. package/dashboard/.next/server/app/api/flows/route.js +1 -0
  43. package/dashboard/.next/server/app/api/flows/route.js.nft.json +1 -0
  44. package/dashboard/.next/server/app/api/flows.body +1 -0
  45. package/dashboard/.next/server/app/api/flows.meta +1 -0
  46. package/dashboard/.next/server/app/api/github-status/route.js +1 -0
  47. package/dashboard/.next/server/app/api/github-status/route.js.nft.json +1 -0
  48. package/dashboard/.next/server/app/api/issues/[id]/move/route.js +1 -0
  49. package/dashboard/.next/server/app/api/issues/[id]/move/route.js.nft.json +1 -0
  50. package/dashboard/.next/server/app/api/issues/[id]/route.js +1 -0
  51. package/dashboard/.next/server/app/api/issues/[id]/route.js.nft.json +1 -0
  52. package/dashboard/.next/server/app/api/mermaid/route.js +1 -0
  53. package/dashboard/.next/server/app/api/mermaid/route.js.nft.json +1 -0
  54. package/dashboard/.next/server/app/api/progress/route.js +1 -0
  55. package/dashboard/.next/server/app/api/progress/route.js.nft.json +1 -0
  56. package/dashboard/.next/server/app/api/watch/route.js +3 -0
  57. package/dashboard/.next/server/app/api/watch/route.js.nft.json +1 -0
  58. package/dashboard/.next/server/app/calls/page.js +1 -0
  59. package/dashboard/.next/server/app/calls/page.js.nft.json +1 -0
  60. package/dashboard/.next/server/app/calls/page_client-reference-manifest.js +1 -0
  61. package/dashboard/.next/server/app/calls.html +1 -0
  62. package/dashboard/.next/server/app/calls.meta +5 -0
  63. package/dashboard/.next/server/app/calls.rsc +8 -0
  64. package/dashboard/.next/server/app/conformance/page.js +1 -0
  65. package/dashboard/.next/server/app/conformance/page.js.nft.json +1 -0
  66. package/dashboard/.next/server/app/conformance/page_client-reference-manifest.js +1 -0
  67. package/dashboard/.next/server/app/conformance.html +1 -0
  68. package/dashboard/.next/server/app/conformance.meta +5 -0
  69. package/dashboard/.next/server/app/conformance.rsc +8 -0
  70. package/dashboard/.next/server/app/diagram/page.js +1 -0
  71. package/dashboard/.next/server/app/diagram/page.js.nft.json +1 -0
  72. package/dashboard/.next/server/app/diagram/page_client-reference-manifest.js +1 -0
  73. package/dashboard/.next/server/app/diagram.html +1 -0
  74. package/dashboard/.next/server/app/diagram.meta +5 -0
  75. package/dashboard/.next/server/app/diagram.rsc +10 -0
  76. package/dashboard/.next/server/app/flows/page.js +1 -0
  77. package/dashboard/.next/server/app/flows/page.js.nft.json +1 -0
  78. package/dashboard/.next/server/app/flows/page_client-reference-manifest.js +1 -0
  79. package/dashboard/.next/server/app/flows.html +1 -0
  80. package/dashboard/.next/server/app/flows.meta +5 -0
  81. package/dashboard/.next/server/app/flows.rsc +10 -0
  82. package/dashboard/.next/server/app/functions/page.js +1 -0
  83. package/dashboard/.next/server/app/functions/page.js.nft.json +1 -0
  84. package/dashboard/.next/server/app/functions/page_client-reference-manifest.js +1 -0
  85. package/dashboard/.next/server/app/functions.html +1 -0
  86. package/dashboard/.next/server/app/functions.meta +5 -0
  87. package/dashboard/.next/server/app/functions.rsc +8 -0
  88. package/dashboard/.next/server/app/icon.svg/route.js +12 -0
  89. package/dashboard/.next/server/app/icon.svg/route.js.nft.json +1 -0
  90. package/dashboard/.next/server/app/icon.svg.body +18 -0
  91. package/dashboard/.next/server/app/icon.svg.meta +1 -0
  92. package/dashboard/.next/server/app/index.html +1 -0
  93. package/dashboard/.next/server/app/index.meta +5 -0
  94. package/dashboard/.next/server/app/index.rsc +9 -0
  95. package/dashboard/.next/server/app/issues/page.js +1 -0
  96. package/dashboard/.next/server/app/issues/page.js.nft.json +1 -0
  97. package/dashboard/.next/server/app/issues/page_client-reference-manifest.js +1 -0
  98. package/dashboard/.next/server/app/issues.html +1 -0
  99. package/dashboard/.next/server/app/issues.meta +5 -0
  100. package/dashboard/.next/server/app/issues.rsc +8 -0
  101. package/dashboard/.next/server/app/page.js +20 -0
  102. package/dashboard/.next/server/app/page.js.nft.json +1 -0
  103. package/dashboard/.next/server/app/page_client-reference-manifest.js +1 -0
  104. package/dashboard/.next/server/app/progress/page.js +1 -0
  105. package/dashboard/.next/server/app/progress/page.js.nft.json +1 -0
  106. package/dashboard/.next/server/app/progress/page_client-reference-manifest.js +1 -0
  107. package/dashboard/.next/server/app/progress.html +1 -0
  108. package/dashboard/.next/server/app/progress.meta +5 -0
  109. package/dashboard/.next/server/app/progress.rsc +8 -0
  110. package/dashboard/.next/server/app/stats/page.js +1 -0
  111. package/dashboard/.next/server/app/stats/page.js.nft.json +1 -0
  112. package/dashboard/.next/server/app/stats/page_client-reference-manifest.js +1 -0
  113. package/dashboard/.next/server/app/stats.html +1 -0
  114. package/dashboard/.next/server/app/stats.meta +5 -0
  115. package/dashboard/.next/server/app/stats.rsc +8 -0
  116. package/dashboard/.next/server/app-paths-manifest.json +22 -0
  117. package/dashboard/.next/server/chunks/431.js +1 -0
  118. package/dashboard/.next/server/chunks/557.js +1 -0
  119. package/dashboard/.next/server/chunks/645.js +6 -0
  120. package/dashboard/.next/server/chunks/649.js +2 -0
  121. package/dashboard/.next/server/chunks/665.js +13 -0
  122. package/dashboard/.next/server/chunks/786.js +12 -0
  123. package/dashboard/.next/server/chunks/818.js +6 -0
  124. package/dashboard/.next/server/chunks/916.js +2 -0
  125. package/dashboard/.next/server/chunks/font-manifest.json +1 -0
  126. package/dashboard/.next/server/font-manifest.json +1 -0
  127. package/dashboard/.next/server/functions-config-manifest.json +1 -0
  128. package/dashboard/.next/server/interception-route-rewrite-manifest.js +1 -0
  129. package/dashboard/.next/server/middleware-build-manifest.js +1 -0
  130. package/dashboard/.next/server/middleware-manifest.json +6 -0
  131. package/dashboard/.next/server/middleware-react-loadable-manifest.js +1 -0
  132. package/dashboard/.next/server/next-font-manifest.js +1 -0
  133. package/dashboard/.next/server/next-font-manifest.json +1 -0
  134. package/dashboard/.next/server/pages/404.html +1 -0
  135. package/dashboard/.next/server/pages/500.html +1 -0
  136. package/dashboard/.next/server/pages/_app.js +1 -0
  137. package/dashboard/.next/server/pages/_app.js.nft.json +1 -0
  138. package/dashboard/.next/server/pages/_document.js +1 -0
  139. package/dashboard/.next/server/pages/_document.js.nft.json +1 -0
  140. package/dashboard/.next/server/pages/_error.js +1 -0
  141. package/dashboard/.next/server/pages/_error.js.nft.json +1 -0
  142. package/dashboard/.next/server/pages-manifest.json +1 -0
  143. package/dashboard/.next/server/server-reference-manifest.js +1 -0
  144. package/dashboard/.next/server/server-reference-manifest.json +1 -0
  145. package/dashboard/.next/server/webpack-runtime.js +1 -0
  146. package/dashboard/.next/static/0IZAlhEwk5-v4myUvWKBd/_buildManifest.js +1 -0
  147. package/dashboard/.next/static/0IZAlhEwk5-v4myUvWKBd/_ssgManifest.js +1 -0
  148. package/dashboard/.next/static/chunks/1.8868c4d131111be7.js +36 -0
  149. package/dashboard/.next/static/chunks/1015.3ab89142e5f44120.js +226 -0
  150. package/dashboard/.next/static/chunks/1151.b6ef5c786e587ed7.js +1 -0
  151. package/dashboard/.next/static/chunks/1199.a072929dbec89965.js +148 -0
  152. package/dashboard/.next/static/chunks/1375.d4d2f7fc9c9c2ff1.js +43 -0
  153. package/dashboard/.next/static/chunks/1799.83206776abbbf1fc.js +9 -0
  154. package/dashboard/.next/static/chunks/20154aaa.ccc347c04ab5ad4a.js +1 -0
  155. package/dashboard/.next/static/chunks/2077.7011a570c87aa7b1.js +1 -0
  156. package/dashboard/.next/static/chunks/2166.cc0fabeb2e89b840.js +215 -0
  157. package/dashboard/.next/static/chunks/2291.85a70cb0c228157b.js +29 -0
  158. package/dashboard/.next/static/chunks/2325.2c55cb9a6282ae3f.js +24 -0
  159. package/dashboard/.next/static/chunks/2383.62c035a052272594.js +1 -0
  160. package/dashboard/.next/static/chunks/2694.92bbe252063e4786.js +1 -0
  161. package/dashboard/.next/static/chunks/275.0d761aa0e5b030b8.js +34 -0
  162. package/dashboard/.next/static/chunks/2781.8536b644a480aede.js +93 -0
  163. package/dashboard/.next/static/chunks/2805.a8d71d2f92bb6ba9.js +1 -0
  164. package/dashboard/.next/static/chunks/2879.51436986f93981d9.js +1 -0
  165. package/dashboard/.next/static/chunks/3017.e55781da9dd32d37.js +1 -0
  166. package/dashboard/.next/static/chunks/3205-728c260fbb4f89c6.js +2 -0
  167. package/dashboard/.next/static/chunks/3236.dff44fa7961d9d5e.js +1 -0
  168. package/dashboard/.next/static/chunks/3480.9451396ad7ee7613.js +1 -0
  169. package/dashboard/.next/static/chunks/3626.ba1cf848a9f2e93d.js +64 -0
  170. package/dashboard/.next/static/chunks/3865.a432a7910a2f5281.js +90 -0
  171. package/dashboard/.next/static/chunks/3887.c22cbfa3f095826c.js +1 -0
  172. package/dashboard/.next/static/chunks/3924-4a05057b5450abe1.js +1 -0
  173. package/dashboard/.next/static/chunks/3948.fe3c7d758568d98b.js +287 -0
  174. package/dashboard/.next/static/chunks/4728.07d87640a3e7dd0d.js +24 -0
  175. package/dashboard/.next/static/chunks/4787.4e5f6a0e0e40a583.js +23 -0
  176. package/dashboard/.next/static/chunks/5060.baca226af35ed016.js +1 -0
  177. package/dashboard/.next/static/chunks/5284.f949ac90c95ff143.js +1 -0
  178. package/dashboard/.next/static/chunks/5715.1524bcc9591e180b.js +115 -0
  179. package/dashboard/.next/static/chunks/6014.700ae4969b64d728.js +104 -0
  180. package/dashboard/.next/static/chunks/6024.4d23707c65514679.js +79 -0
  181. package/dashboard/.next/static/chunks/6052.033a6f1013c666eb.js +141 -0
  182. package/dashboard/.next/static/chunks/6177.e5c84cfc4c0dea51.js +1 -0
  183. package/dashboard/.next/static/chunks/618f8807-547c5614e1318888.js +1 -0
  184. package/dashboard/.next/static/chunks/6434.9481771c33195d29.js +1 -0
  185. package/dashboard/.next/static/chunks/6468.f4a3e8fa6accc6da.js +77 -0
  186. package/dashboard/.next/static/chunks/6540.86f367d7390738d4.js +1 -0
  187. package/dashboard/.next/static/chunks/6549.4d0d472df96429a5.js +1 -0
  188. package/dashboard/.next/static/chunks/690f35d0.3e40ca0930e4bbdb.js +119 -0
  189. package/dashboard/.next/static/chunks/7020.831e16e26d91abc1.js +166 -0
  190. package/dashboard/.next/static/chunks/7397-f6f4dddc7a20bfc1.js +1 -0
  191. package/dashboard/.next/static/chunks/7498-ea83cb9e30ec5491.js +1 -0
  192. package/dashboard/.next/static/chunks/7802.89aec9ee11680850.js +80 -0
  193. package/dashboard/.next/static/chunks/7973.8b526f589aca5d84.js +79 -0
  194. package/dashboard/.next/static/chunks/7a04ac15.1c6cea694301806c.js +62 -0
  195. package/dashboard/.next/static/chunks/8216.1bead812eb126c35.js +5 -0
  196. package/dashboard/.next/static/chunks/8233babc.780b8e272eda298f.js +92 -0
  197. package/dashboard/.next/static/chunks/8452-e616b5f43bceb95f.js +13 -0
  198. package/dashboard/.next/static/chunks/8645.a5ca76f11edc9633.js +1 -0
  199. package/dashboard/.next/static/chunks/8928-60c623ee89d2e6ad.js +1 -0
  200. package/dashboard/.next/static/chunks/9173.2486ffca31131ec5.js +1 -0
  201. package/dashboard/.next/static/chunks/9178.469341860bf8caec.js +1 -0
  202. package/dashboard/.next/static/chunks/9466.e904660d38c03eea.js +1 -0
  203. package/dashboard/.next/static/chunks/9660.84a85811380c5f33.js +1 -0
  204. package/dashboard/.next/static/chunks/9717.6cf5c8c89403b651.js +1 -0
  205. package/dashboard/.next/static/chunks/9720.67d4d0d15a96d691.js +1 -0
  206. package/dashboard/.next/static/chunks/9811.65e1d080c2d256af.js +1 -0
  207. package/dashboard/.next/static/chunks/app/_not-found/page-548ab392d0e890d1.js +1 -0
  208. package/dashboard/.next/static/chunks/app/access/page-3668562e7464eb5d.js +1 -0
  209. package/dashboard/.next/static/chunks/app/calls/page-d07f5b8664cc8303.js +1 -0
  210. package/dashboard/.next/static/chunks/app/conformance/page-2fede1d7b5f9265d.js +1 -0
  211. package/dashboard/.next/static/chunks/app/diagram/page-b228444265546495.js +1 -0
  212. package/dashboard/.next/static/chunks/app/flows/page-fa67783d8cd79cab.js +1 -0
  213. package/dashboard/.next/static/chunks/app/functions/page-686f0296639133a3.js +1 -0
  214. package/dashboard/.next/static/chunks/app/issues/page-dc110d4cc0a5c398.js +1 -0
  215. package/dashboard/.next/static/chunks/app/layout-e7b50543ba216d12.js +1 -0
  216. package/dashboard/.next/static/chunks/app/page-a0f25953d4457935.js +1 -0
  217. package/dashboard/.next/static/chunks/app/progress/page-f07ac39d1d27b480.js +1 -0
  218. package/dashboard/.next/static/chunks/app/stats/page-db81f600a086f252.js +1 -0
  219. package/dashboard/.next/static/chunks/b7167ec1.7afbab6f609e3326.js +153 -0
  220. package/dashboard/.next/static/chunks/c7ea4e13.5effeeba6618bdb7.js +1 -0
  221. package/dashboard/.next/static/chunks/framework-cf6f5bdca6ba0184.js +33 -0
  222. package/dashboard/.next/static/chunks/main-70c6d841ad572657.js +1 -0
  223. package/dashboard/.next/static/chunks/main-app-9d2f6b8a47133e9b.js +1 -0
  224. package/dashboard/.next/static/chunks/pages/_app-6ad2b50514c24ab4.js +1 -0
  225. package/dashboard/.next/static/chunks/pages/_error-d5eb11c5c4626811.js +1 -0
  226. package/dashboard/.next/static/chunks/polyfills-78c92fac7aa8fdd8.js +1 -0
  227. package/dashboard/.next/static/chunks/webpack-08869f2b18792e51.js +1 -0
  228. package/dashboard/.next/static/css/e6cb67f77f13ae8e.css +3 -0
  229. package/dashboard/.next/static/media/0aa834ed78bf6d07-s.woff2 +0 -0
  230. package/dashboard/.next/static/media/438aa629764e75f3-s.woff2 +0 -0
  231. package/dashboard/.next/static/media/4c9affa5bc8f420e-s.p.woff2 +0 -0
  232. package/dashboard/.next/static/media/51251f8b9793cdb3-s.woff2 +0 -0
  233. package/dashboard/.next/static/media/67957d42bae0796d-s.woff2 +0 -0
  234. package/dashboard/.next/static/media/875ae681bfde4580-s.woff2 +0 -0
  235. package/dashboard/.next/static/media/886030b0b59bc5a7-s.woff2 +0 -0
  236. package/dashboard/.next/static/media/939c4f875ee75fbb-s.woff2 +0 -0
  237. package/dashboard/.next/static/media/bb3ef058b751a6ad-s.p.woff2 +0 -0
  238. package/dashboard/.next/static/media/cc978ac5ee68c2b6-s.woff2 +0 -0
  239. package/dashboard/.next/static/media/e857b654a2caa584-s.woff2 +0 -0
  240. package/dashboard/.next/static/media/f911b923c6adde36-s.woff2 +0 -0
  241. package/dashboard/.next/trace +80 -0
  242. package/dashboard/.next/types/app/access/page.ts +79 -0
  243. package/dashboard/.next/types/app/api/code/route.ts +343 -0
  244. package/dashboard/.next/types/app/api/flows/route.ts +343 -0
  245. package/dashboard/.next/types/app/api/github-status/route.ts +343 -0
  246. package/dashboard/.next/types/app/api/issues/[id]/move/route.ts +343 -0
  247. package/dashboard/.next/types/app/api/issues/[id]/route.ts +343 -0
  248. package/dashboard/.next/types/app/api/mermaid/route.ts +343 -0
  249. package/dashboard/.next/types/app/api/progress/route.ts +343 -0
  250. package/dashboard/.next/types/app/api/watch/route.ts +343 -0
  251. package/dashboard/.next/types/app/calls/page.ts +79 -0
  252. package/dashboard/.next/types/app/conformance/page.ts +79 -0
  253. package/dashboard/.next/types/app/diagram/page.ts +79 -0
  254. package/dashboard/.next/types/app/flows/page.ts +79 -0
  255. package/dashboard/.next/types/app/functions/page.ts +79 -0
  256. package/dashboard/.next/types/app/issues/page.ts +79 -0
  257. package/dashboard/.next/types/app/page.ts +79 -0
  258. package/dashboard/.next/types/app/progress/page.ts +79 -0
  259. package/dashboard/.next/types/app/stats/page.ts +79 -0
  260. package/dashboard/.next/types/package.json +1 -0
  261. package/dashboard/app/access/AccessClient.tsx +402 -0
  262. package/dashboard/app/access/ReadOnlyFunctions.tsx +114 -0
  263. package/dashboard/app/access/page.tsx +118 -0
  264. package/dashboard/app/api/code/route.ts +35 -0
  265. package/dashboard/app/api/flows/route.ts +28 -0
  266. package/dashboard/app/api/github-status/route.ts +23 -0
  267. package/dashboard/app/api/issues/[id]/move/route.ts +74 -0
  268. package/dashboard/app/api/issues/[id]/route.ts +109 -0
  269. package/dashboard/app/api/mermaid/route.ts +25 -0
  270. package/dashboard/app/api/progress/route.ts +36 -0
  271. package/dashboard/app/api/watch/route.ts +52 -0
  272. package/dashboard/app/calls/CallsClient.tsx +170 -0
  273. package/dashboard/app/calls/page.tsx +50 -0
  274. package/dashboard/app/conformance/ConformanceTable.tsx +214 -0
  275. package/dashboard/app/conformance/page.tsx +179 -0
  276. package/dashboard/app/diagram/page.tsx +65 -0
  277. package/dashboard/app/flows/page.tsx +102 -0
  278. package/dashboard/app/functions/FunctionsClient.tsx +167 -0
  279. package/dashboard/app/functions/page.tsx +171 -0
  280. package/dashboard/app/globals.css +157 -0
  281. package/dashboard/app/icon.svg +18 -0
  282. package/dashboard/app/issues/IssuesBoardClient.tsx +636 -0
  283. package/dashboard/app/issues/page.tsx +239 -0
  284. package/dashboard/app/layout.tsx +40 -0
  285. package/dashboard/app/page.tsx +259 -0
  286. package/dashboard/app/progress/ProgressClient.tsx +333 -0
  287. package/dashboard/app/progress/page.tsx +118 -0
  288. package/dashboard/app/stats/StatsClient.tsx +452 -0
  289. package/dashboard/app/stats/page.tsx +43 -0
  290. package/dashboard/components/AutoRefresh.tsx +37 -0
  291. package/dashboard/components/CodeReference.tsx +129 -0
  292. package/dashboard/components/CommandPalette.tsx +135 -0
  293. package/dashboard/components/ConfidenceBadge.tsx +53 -0
  294. package/dashboard/components/DashboardLayout.tsx +450 -0
  295. package/dashboard/components/FilterableTable.tsx +293 -0
  296. package/dashboard/components/LiveStatus.tsx +99 -0
  297. package/dashboard/components/MarkdownRenderer.tsx +40 -0
  298. package/dashboard/components/MermaidViewer.tsx +267 -0
  299. package/dashboard/components/NotYetGenerated.tsx +32 -0
  300. package/dashboard/components/SeverityBadge.tsx +28 -0
  301. package/dashboard/components/SignalBars.tsx +27 -0
  302. package/dashboard/components/SortableTable.tsx +122 -0
  303. package/dashboard/lib/conformance-tokens.ts +49 -0
  304. package/dashboard/lib/data.ts +102 -0
  305. package/dashboard/lib/watcher.ts +45 -0
  306. package/dashboard/next-env.d.ts +5 -0
  307. package/dashboard/next.config.mjs +9 -0
  308. package/dashboard/postcss.config.cjs +6 -0
  309. package/dashboard/tailwind.config.ts +79 -0
  310. package/dashboard/tsconfig.json +21 -0
  311. package/dist/analysis/access-control.d.ts +24 -0
  312. package/dist/analysis/access-control.d.ts.map +1 -0
  313. package/dist/analysis/access-control.js +378 -0
  314. package/dist/analysis/access-control.js.map +1 -0
  315. package/dist/analysis/attack-surface.d.ts +51 -0
  316. package/dist/analysis/attack-surface.d.ts.map +1 -0
  317. package/dist/analysis/attack-surface.js +206 -0
  318. package/dist/analysis/attack-surface.js.map +1 -0
  319. package/dist/analysis/constraint-extraction.d.ts +25 -0
  320. package/dist/analysis/constraint-extraction.d.ts.map +1 -0
  321. package/dist/analysis/constraint-extraction.js +398 -0
  322. package/dist/analysis/constraint-extraction.js.map +1 -0
  323. package/dist/analysis/context-assembler.d.ts +16 -0
  324. package/dist/analysis/context-assembler.d.ts.map +1 -0
  325. package/dist/analysis/context-assembler.js +88 -0
  326. package/dist/analysis/context-assembler.js.map +1 -0
  327. package/dist/analysis/dependency-graph.d.ts +31 -0
  328. package/dist/analysis/dependency-graph.d.ts.map +1 -0
  329. package/dist/analysis/dependency-graph.js +223 -0
  330. package/dist/analysis/dependency-graph.js.map +1 -0
  331. package/dist/analysis/erc-detection.d.ts +16 -0
  332. package/dist/analysis/erc-detection.d.ts.map +1 -0
  333. package/dist/analysis/erc-detection.js +81 -0
  334. package/dist/analysis/erc-detection.js.map +1 -0
  335. package/dist/analysis/external-calls.d.ts +8 -0
  336. package/dist/analysis/external-calls.d.ts.map +1 -0
  337. package/dist/analysis/external-calls.js +124 -0
  338. package/dist/analysis/external-calls.js.map +1 -0
  339. package/dist/analysis/nsloc.d.ts +46 -0
  340. package/dist/analysis/nsloc.d.ts.map +1 -0
  341. package/dist/analysis/nsloc.js +106 -0
  342. package/dist/analysis/nsloc.js.map +1 -0
  343. package/dist/analysis/pattern-detection.d.ts +20 -0
  344. package/dist/analysis/pattern-detection.d.ts.map +1 -0
  345. package/dist/analysis/pattern-detection.js +236 -0
  346. package/dist/analysis/pattern-detection.js.map +1 -0
  347. package/dist/analysis/state-variables.d.ts +33 -0
  348. package/dist/analysis/state-variables.d.ts.map +1 -0
  349. package/dist/analysis/state-variables.js +179 -0
  350. package/dist/analysis/state-variables.js.map +1 -0
  351. package/dist/commands/access.d.ts +3 -0
  352. package/dist/commands/access.d.ts.map +1 -0
  353. package/dist/commands/access.js +99 -0
  354. package/dist/commands/access.js.map +1 -0
  355. package/dist/commands/ai-status.d.ts +3 -0
  356. package/dist/commands/ai-status.d.ts.map +1 -0
  357. package/dist/commands/ai-status.js +172 -0
  358. package/dist/commands/ai-status.js.map +1 -0
  359. package/dist/commands/analyze.d.ts +3 -0
  360. package/dist/commands/analyze.d.ts.map +1 -0
  361. package/dist/commands/analyze.js +101 -0
  362. package/dist/commands/analyze.js.map +1 -0
  363. package/dist/commands/calls.d.ts +3 -0
  364. package/dist/commands/calls.d.ts.map +1 -0
  365. package/dist/commands/calls.js +92 -0
  366. package/dist/commands/calls.js.map +1 -0
  367. package/dist/commands/claude.d.ts +3 -0
  368. package/dist/commands/claude.d.ts.map +1 -0
  369. package/dist/commands/claude.js +42 -0
  370. package/dist/commands/claude.js.map +1 -0
  371. package/dist/commands/constraints.d.ts +3 -0
  372. package/dist/commands/constraints.d.ts.map +1 -0
  373. package/dist/commands/constraints.js +32 -0
  374. package/dist/commands/constraints.js.map +1 -0
  375. package/dist/commands/context.d.ts +3 -0
  376. package/dist/commands/context.d.ts.map +1 -0
  377. package/dist/commands/context.js +57 -0
  378. package/dist/commands/context.js.map +1 -0
  379. package/dist/commands/dashboard.d.ts +3 -0
  380. package/dist/commands/dashboard.d.ts.map +1 -0
  381. package/dist/commands/dashboard.js +95 -0
  382. package/dist/commands/dashboard.js.map +1 -0
  383. package/dist/commands/deps.d.ts +3 -0
  384. package/dist/commands/deps.d.ts.map +1 -0
  385. package/dist/commands/deps.js +67 -0
  386. package/dist/commands/deps.js.map +1 -0
  387. package/dist/commands/doctor.d.ts +17 -0
  388. package/dist/commands/doctor.d.ts.map +1 -0
  389. package/dist/commands/doctor.js +154 -0
  390. package/dist/commands/doctor.js.map +1 -0
  391. package/dist/commands/init.d.ts +3 -0
  392. package/dist/commands/init.d.ts.map +1 -0
  393. package/dist/commands/init.js +330 -0
  394. package/dist/commands/init.js.map +1 -0
  395. package/dist/commands/patterns.d.ts +3 -0
  396. package/dist/commands/patterns.d.ts.map +1 -0
  397. package/dist/commands/patterns.js +40 -0
  398. package/dist/commands/patterns.js.map +1 -0
  399. package/dist/commands/state.d.ts +3 -0
  400. package/dist/commands/state.d.ts.map +1 -0
  401. package/dist/commands/state.js +92 -0
  402. package/dist/commands/state.js.map +1 -0
  403. package/dist/commands/stats.d.ts +3 -0
  404. package/dist/commands/stats.d.ts.map +1 -0
  405. package/dist/commands/stats.js +347 -0
  406. package/dist/commands/stats.js.map +1 -0
  407. package/dist/commands/surface.d.ts +3 -0
  408. package/dist/commands/surface.d.ts.map +1 -0
  409. package/dist/commands/surface.js +45 -0
  410. package/dist/commands/surface.js.map +1 -0
  411. package/dist/commands/update-skills.d.ts +3 -0
  412. package/dist/commands/update-skills.d.ts.map +1 -0
  413. package/dist/commands/update-skills.js +40 -0
  414. package/dist/commands/update-skills.js.map +1 -0
  415. package/dist/commands/update.d.ts +3 -0
  416. package/dist/commands/update.d.ts.map +1 -0
  417. package/dist/commands/update.js +157 -0
  418. package/dist/commands/update.js.map +1 -0
  419. package/dist/core/config.d.ts +24 -0
  420. package/dist/core/config.d.ts.map +1 -0
  421. package/dist/core/config.js +70 -0
  422. package/dist/core/config.js.map +1 -0
  423. package/dist/core/errors.d.ts +17 -0
  424. package/dist/core/errors.d.ts.map +1 -0
  425. package/dist/core/errors.js +113 -0
  426. package/dist/core/errors.js.map +1 -0
  427. package/dist/core/external-tools.d.ts +39 -0
  428. package/dist/core/external-tools.d.ts.map +1 -0
  429. package/dist/core/external-tools.js +151 -0
  430. package/dist/core/external-tools.js.map +1 -0
  431. package/dist/core/logger.d.ts +16 -0
  432. package/dist/core/logger.d.ts.map +1 -0
  433. package/dist/core/logger.js +22 -0
  434. package/dist/core/logger.js.map +1 -0
  435. package/dist/core/output.d.ts +13 -0
  436. package/dist/core/output.d.ts.map +1 -0
  437. package/dist/core/output.js +45 -0
  438. package/dist/core/output.js.map +1 -0
  439. package/dist/core/paths.d.ts +21 -0
  440. package/dist/core/paths.d.ts.map +1 -0
  441. package/dist/core/paths.js +32 -0
  442. package/dist/core/paths.js.map +1 -0
  443. package/dist/core/progress.d.ts +34 -0
  444. package/dist/core/progress.d.ts.map +1 -0
  445. package/dist/core/progress.js +119 -0
  446. package/dist/core/progress.js.map +1 -0
  447. package/dist/core/schema.d.ts +3197 -0
  448. package/dist/core/schema.d.ts.map +1 -0
  449. package/dist/core/schema.js +420 -0
  450. package/dist/core/schema.js.map +1 -0
  451. package/dist/core/skills.d.ts +28 -0
  452. package/dist/core/skills.d.ts.map +1 -0
  453. package/dist/core/skills.js +82 -0
  454. package/dist/core/skills.js.map +1 -0
  455. package/dist/index.d.ts +3 -0
  456. package/dist/index.d.ts.map +1 -0
  457. package/dist/index.js +43 -0
  458. package/dist/index.js.map +1 -0
  459. package/dist/parsers/lcov.d.ts +27 -0
  460. package/dist/parsers/lcov.d.ts.map +1 -0
  461. package/dist/parsers/lcov.js +68 -0
  462. package/dist/parsers/lcov.js.map +1 -0
  463. package/dist/parsers/slither.d.ts +63 -0
  464. package/dist/parsers/slither.d.ts.map +1 -0
  465. package/dist/parsers/slither.js +160 -0
  466. package/dist/parsers/slither.js.map +1 -0
  467. package/dist/parsers/solc.d.ts +19 -0
  468. package/dist/parsers/solc.d.ts.map +1 -0
  469. package/dist/parsers/solc.js +43 -0
  470. package/dist/parsers/solc.js.map +1 -0
  471. package/dist/parsers/solidity-parser.d.ts +77 -0
  472. package/dist/parsers/solidity-parser.d.ts.map +1 -0
  473. package/dist/parsers/solidity-parser.js +357 -0
  474. package/dist/parsers/solidity-parser.js.map +1 -0
  475. package/dist/skills/generate-overleaf.md +326 -0
  476. package/dist/skills/generate-poc.md +186 -0
  477. package/dist/skills/ingest-aa-report.md +172 -0
  478. package/dist/skills/init-audit.md +271 -0
  479. package/dist/skills/sync-issues.md +266 -0
  480. package/dist/skills/validate-issue.md +149 -0
  481. package/dist/skills/write-finding.md +142 -0
  482. package/dist/types/index.d.ts +30 -0
  483. package/dist/types/index.d.ts.map +1 -0
  484. package/dist/types/index.js +2 -0
  485. package/dist/types/index.js.map +1 -0
  486. package/package.json +81 -0
package/CLAUDE.md ADDED
@@ -0,0 +1,105 @@
1
+ # Hex Design System & Style Guide
2
+
3
+ ## Brand
4
+ - Product name: **Hex** (lowercase `hex` in CLI and code, title case `Hex` in docs)
5
+ - CLI command: `hex`
6
+ - Output directory: `.hex/`
7
+ - Dashboard package: `hex-dashboard`
8
+
9
+ ## Typography
10
+ - **Display/body**: Manrope (Google Fonts), variable weight 200-800
11
+ - **Code only**: JetBrains Mono (file paths, code snippets, code blocks)
12
+ - **Fallback (sans)**: `system-ui, -apple-system, sans-serif`
13
+ - **Fallback (mono)**: `ui-monospace, 'SF Mono', monospace`
14
+ - **Scale**: display (28px/600), title (20px/600), heading (15px/500), body (14px/400), caption (12px/400)
15
+ - **Section headers**: sentence case, medium weight (not uppercase)
16
+
17
+ ## Color Palette
18
+
19
+ ### Dark Mode (primary)
20
+ Surfaces are blue-tinted (hue 265), not pure black. Built with OKLCH for perceptual uniformity.
21
+
22
+ | Token | Value | Usage |
23
+ |-------|-------|-------|
24
+ | `--surface-0` | `oklch(0.13 0.005 265)` | Page background |
25
+ | `--surface-1` | `oklch(0.17 0.006 265)` | Cards, sidebar |
26
+ | `--surface-2` | `oklch(0.21 0.006 265)` | Elevated surfaces, inputs |
27
+ | `--surface-3` | `oklch(0.26 0.006 265)` | Hover states |
28
+ | `--text-primary` | `oklch(0.93 0.005 265)` | Body text |
29
+ | `--text-secondary` | `oklch(0.65 0.01 265)` | Secondary labels |
30
+ | `--text-tertiary` | `oklch(0.48 0.008 265)` | Disabled, hints |
31
+ | `--accent` | `oklch(0.58 0.19 265)` | Indigo (links, active states) |
32
+ | `--accent-subtle` | `oklch(0.58 0.19 265 / 0.10)` | Hover tint |
33
+ | `--accent-secondary` | `oklch(0.68 0.14 265)` | Lighter indigo |
34
+ | `--border-subtle` | `oklch(0.25 0.005 265 / 0.5)` | Faint dividers |
35
+ | `--border-default` | `oklch(0.30 0.006 265 / 0.6)` | Standard borders |
36
+ | `--border-emphasis` | `oklch(0.40 0.01 265 / 0.7)` | Active borders |
37
+
38
+ ### Severity Colors (both modes)
39
+ | Severity | Color | Value |
40
+ |----------|-------|-------|
41
+ | Critical | Red | `oklch(0.58 0.22 25)` |
42
+ | High | Amber | `oklch(0.68 0.16 55)` |
43
+ | Medium | Yellow | `oklch(0.72 0.14 85)` |
44
+ | Low | Blue | `oklch(0.58 0.14 250)` |
45
+ | Info | Gray | `oklch(0.55 0.01 265)` |
46
+
47
+ ### Light Mode (secondary)
48
+ Surfaces start at near-white. Accent shifts to deeper indigo for contrast. Lower priority; dark mode is the primary experience.
49
+
50
+ ## Layout Patterns
51
+
52
+ ### Page Structure
53
+ 1. **Page title**: title size, semibold
54
+ 2. **Summary metrics** (where applicable): grid of stat cards
55
+ 3. **Detail table**: FilterableTable or SortableTable with the full dataset
56
+
57
+ ### Sidebar Navigation
58
+ - Fixed 220px width, `bg-surface-1`, right border `border-subtle`
59
+ - Groups labeled in sentence case, caption size
60
+ - Active item: `bg-accent-subtle text-accent` (no border-left stripe)
61
+ - Footer: theme toggle + `⌘K` hint
62
+
63
+ ### Cards
64
+ - Background: `bg-surface-1`
65
+ - Border: `border border-border-subtle`
66
+ - Border radius: `rounded-lg` (12px)
67
+ - Hover: `border-border-default bg-surface-2`
68
+ - Padding: `p-4` to `p-6`
69
+
70
+ ## Animations & Motion
71
+
72
+ ### Principles
73
+ - Subtle, functional, not decorative
74
+ - All transitions: 200ms ease on interactive elements only (not universal)
75
+ - No persistent background effects
76
+
77
+ ### Utilities
78
+ - `.stagger`: children fade-in with 30ms staggered delay
79
+ - `.scale-in`: KPI number scale animation (0.92 to 1, 350ms)
80
+
81
+ ## Component Conventions
82
+
83
+ ### Tables
84
+ - Header row: caption size, text-tertiary
85
+ - Row hover: `bg-surface-3`
86
+ - Row dividers: `border-border-subtle`
87
+ - Filter pills: rounded-md, `bg-accent text-surface-0` when active
88
+
89
+ ### Badges
90
+ - Severity badges use the severity color palette
91
+ - All badges: `rounded-md`, `px-2.5 py-1 text-caption`
92
+
93
+ ### Code References
94
+ - Clickable `file:line` format in monospace
95
+ - Modal with clean surface, subtle shadow
96
+ - Highlighted lines: `bg-accent/10`
97
+
98
+ ## Do NOT
99
+ - Use monospace fonts outside of code blocks
100
+ - Use colored border-left/right stripes on cards (>1px)
101
+ - Add gradient text
102
+ - Use bounce/elastic easing
103
+ - Use green (#00cc33) or neon accent colors
104
+ - Use glassmorphism/backdrop-blur decoratively
105
+ - Default to all-uppercase labels
package/DEMO.md ADDED
@@ -0,0 +1,141 @@
1
+ # Hex Demo Guide
2
+
3
+ Step-by-step demo of Hex's audit workflow using Claude Code.
4
+
5
+ ## Setup
6
+
7
+ 1. Pick any Foundry project with Solidity contracts. If you don't have one handy:
8
+
9
+ ```bash
10
+ git clone https://github.com/transmissions11/solmate.git
11
+ cd solmate
12
+ ```
13
+
14
+ 2. Install skills (works before init — no config required):
15
+
16
+ ```bash
17
+ hex claude
18
+ ```
19
+
20
+ 3. Open Claude Code:
21
+ ```bash
22
+ claude
23
+ ```
24
+
25
+ ## Demo flow (all inside Claude Code)
26
+
27
+ ### Phase 1 — One-shot pre-review (`/init-audit`)
28
+
29
+ Switch your Claude Code model to **Opus** for this one — it does all of the reasoning-heavy pre-review work in a single skill.
30
+
31
+ ```
32
+ /init-audit
33
+ ```
34
+
35
+ It asks for scope, commit, chain, and docs URL. For solmate something like `--scope "src/**/*.sol"` works. Then the skill runs end-to-end:
36
+
37
+ 1. **Dependency safety audit** — checks `package.json` install hooks, Foundry `lib/` submodules, `foundry.toml` (FFI, fs_permissions, remappings), plaintext secrets in `.env*`, suspicious VS Code extensions. Stops before compilation if anything looks risky.
38
+ 2. **`hex init` + `hex analyze`** — runs the seven deterministic analyses (stats, deps, access, state, calls, patterns, constraints) in parallel, plus surface last. Slither and forge flatten results are cached across commands.
39
+ 3. **Protocol overview** — writes a 2-3 paragraph `overview.md` (key contracts table, external deps, architecture notes).
40
+ 4. **System diagram** — `.hex/diagrams/diagram.mmd` Mermaid architecture with trust zones and semantic symbols. Split into multiple files if >15 nodes.
41
+ 5. **Flow charts** — `.hex/diagrams/flow-*.mmd` per archetype (deposit/withdraw, governance, liquidation, etc.) with distinct shapes per node role and explicit success+revert branches on every decision.
42
+ 6. **Spec conformance** — cross-references docs, NatSpec, interfaces, and ERC/EIPs (fetches canonical specs from `eips.ethereum.org`). Writes `spec-conformance.json`.
43
+ 7. **Materialize conformance items to the board** — every DEVIATES/PARTIAL spec item becomes a Potential card in `tracking.json` (source `conformance`).
44
+
45
+ If anything fails, `hex doctor` prints a labelled preflight table (node, forge, slither, solc, Claude Code, output dir, `.hex/config.json`) with one-line install hints.
46
+
47
+ ### Dashboard opens automatically
48
+
49
+ The last step of `/init-audit` launches `hex dashboard` in the background, so `http://localhost:3000` opens in your browser when the pipeline finishes. Live-refreshes on every `.hex/` change. If you ever need to start it manually, run `hex dashboard` in a second terminal.
50
+
51
+ Key pages:
52
+
53
+ - `/progress` — Weighted progress bar (70% nSLOC reviewed, 20% audit steps, 10% findings triage), contract review checklist.
54
+ - `/stats` — KPI cards, ERC badges, per-contract metrics, coverage, dependencies.
55
+ - `/access` — Role → function matrix with "Show unprotected only" and "Show inferred / unknown modifiers" toggles.
56
+ - `/state` — State variable inventory with reader/writer tracking and storage-collision warnings.
57
+ - `/calls` — External call surface with filterable Trust column.
58
+ - `/functions` — Aggregated function view.
59
+ - `/diagram` and `/flows` — Full-bleed Mermaid canvas with auto-fit zoom and legend overlay.
60
+ - `/conformance` — Conformance check results, deviations first, clickable spec links.
61
+ - `/issues` — **The board.** Four columns: Potential / Verified / Invalid / Duplicate. Cards with severity, source badge, GitHub sync chip, duplicate signals. Drag a card to change column. Click to open a modal that edits severity, description, recommendation, resolution, and client update.
62
+
63
+ ### Phase 2 — Manual review + `/write-finding`
64
+
65
+ Read the code in your editor. Leave `// @audit-issue ...` comments above anything suspicious.
66
+
67
+ When you have something concrete, point Claude at it:
68
+
69
+ ```
70
+ /write-finding for the rounding error in src/Vault.sol
71
+ ```
72
+
73
+ `/write-finding` records the finding to `findings.json` and adds a tracking entry with status `pending_validation` and source `manual` — it shows up on the **Potential** column of the board. (No more "born verified" findings — every issue is validated explicitly.)
74
+
75
+ ### Phase 3 — Validate, ingest AI, sync GitHub
76
+
77
+ #### `/validate-issue` for any potential issue
78
+
79
+ `/validate-issue` is source-agnostic. Pass an id (`F003`, `SC-007`, `AA-N002`, `github-42`) or a free-text reference:
80
+
81
+ ```
82
+ /validate-issue F003
83
+ /validate-issue for the rounding issue
84
+ ```
85
+
86
+ Claude traces the attack path in the code, writes a validation memo (always), and asks per-issue whether you want a PoC or memo-only. On valid → tracking entry promotes to `verified` and the card moves to Verified on the board. On invalid → tracking entry becomes `rejected` and the card moves to Invalid.
87
+
88
+ #### `/ingest-aa-report` — Nethermind AuditAgent only
89
+
90
+ Hex only integrates with **AuditAgent** (Nethermind's cloud scanner). You start a scan separately (Nethermind portal or `aa scan ...`) and paste the scan ID into Hex:
91
+
92
+ ```
93
+ /ingest-aa-report <scan-id>
94
+ ```
95
+
96
+ The skill checks status via `aa scan --status`. If the scan is still running it prints a status line and exits — you come back later. Run `hex ai-status --watch` in another terminal to be notified when the scan finishes.
97
+
98
+ When complete, the skill fetches findings, materializes them as Potential cards (`source: "auditagent"`), and runs **inline dedup** against existing entries. Auditagent findings that match a manual or conformance issue are flipped to `duplicate` and surface in the Duplicate column with `match_signals` (contract / function / root_cause / attack_vector).
99
+
100
+ #### `/sync-issues` — team mode via GitHub Issues
101
+
102
+ If `settings.github.repo` is configured in `.hex/config.json` (e.g. `nethermind/audit-vaultx`) and `gh auth login` has been run:
103
+
104
+ ```
105
+ /sync-issues
106
+ ```
107
+
108
+ One run does both directions:
109
+
110
+ - **Pulls** every issue with the `hex` label. Issues with the round-trip footer `<!-- hex-finding-id: F<NNN> -->` link back to local findings; issues without the footer are teammate findings, materialized as new tracking entries (`source: "github"`).
111
+ - **Inline dedup, GitHub-canonical.** If a pulled GitHub issue matches a local potential, **the local entry becomes the duplicate** (`status: "duplicate"`, `duplicate_of: "github-<num>"`). Reason: a teammate has already filed it — your in-progress card is redundant.
112
+ - **Pushes** local findings whose tracking status is in `settings.github.publish_status` (default `["verified"]`). Updates existing issues by `github.issue_number`, never creates labels.
113
+
114
+ GitHub-sync state shows as a chip on each card on the board.
115
+
116
+ ### Phase 4 — Final deliverable (`/generate-overleaf`)
117
+
118
+ ```
119
+ /generate-overleaf
120
+ ```
121
+
122
+ Writes four `.txt` LaTeX section files to `.hex/overleaf/`:
123
+
124
+ 1. `executive_summary.txt` — `\section{Executive Summary}` with project synopsis, severity histogram, status histogram, summary table.
125
+ 2. `audited_files.txt` — `\section{Audited Files}` table of in-scope files (LoC, comments, ratio, blank, total).
126
+ 3. `summary_of_findings.txt` — `\section{Summary of Issues}` table linking to per-finding subsections.
127
+ 4. `findings.txt` — `\section{Issues}` with one `\subsection{[Sev] title}\label{issue:N}` per verified finding (description, code blocks via minted, recommendation, status, client update).
128
+
129
+ The skill prompts once for any missing report metadata (initial/final commit, dates, doc/test assessment) and persists them under `settings.report.*` so reruns don't re-prompt. Upload the four files into your Nethermind Overleaf template's matching slots.
130
+
131
+ Only `verified` findings make the cut. Duplicates, rejected, and pending entries are skipped.
132
+
133
+ ## Key points
134
+
135
+ - `/init-audit` is now a single skill that runs everything pre-manual-review.
136
+ - The board (`/issues`) is the only findings page. Cards are interactive: drag to change column, click to edit.
137
+ - `/write-finding` records Potential issues — promote them via `/validate-issue` or by dragging on the board.
138
+ - `/ingest-aa-report` takes a scan ID, never starts a scan.
139
+ - `/sync-issues` treats GitHub as the source of truth — your local entry is the duplicate on a match.
140
+ - `/generate-overleaf` is the final handoff to the LaTeX report.
141
+ - `hex update` upgrades the package and prompts to re-sync skills in one shot; `hex update-skills` re-syncs skills only.
package/README.md ADDED
@@ -0,0 +1,378 @@
1
+ # Hex
2
+
3
+ A toolkit for Solidity smart contract auditors. Hex combines Claude Code skills, deterministic analysis tools, and a local dashboard to take you from "I just received the code" to "here are my validated findings" — faster and with better coverage.
4
+
5
+ Hex does not replace your expertise. It automates the mechanical parts of auditing (parsing, stat collection, diagramming, PoC scaffolding, finding write-ups, LaTeX report generation) so you can spend your time on what actually matters: reading code and thinking about what can break.
6
+
7
+ ![Hex dashboard — VaultX Protocol home page with KPI strip, AI-generated overview, and contract architecture](dashboard.png)
8
+
9
+ ## How It Works
10
+
11
+ You drive Hex through Claude Code. Type `/init-audit` and Claude runs the whole pre-review pipeline. Three components do the work behind the scenes off a shared project directory:
12
+
13
+ **Claude Code skills** are the front door. They handle anything that requires reasoning — generating the protocol overview and diagrams, checking spec conformance, writing PoCs, drafting findings, ingesting external AI reports, syncing with GitHub, producing the final LaTeX report. You invoke them as native slash commands (e.g., `/init-audit`, `/write-finding`, `/validate-issue`). Skills are markdown files that ship with the `hex` package and get copied into your project's `.claude/skills/` directory. They're editable per-project if you need to customise them.
14
+
15
+ **The `hex` CLI** is the deterministic engine the skills call into. It wraps battle-tested tools like Slither, solc, and Forge rather than reinventing static analysis, and it emits structured JSON with confidence metadata so you always know how much to trust a given data point. You can call it directly when you want to, but you usually won't — `/init-audit` does it for you.
16
+
17
+ **The dashboard** is a local Next.js app that visualises everything the tools and skills produce. It reads directly from your project directory and auto-refreshes when files change. The Issues board writes back to `tracking.json`/`findings.json` when you drag a card between columns or edit it in the modal.
18
+
19
+ All three components read from and write to the same project directory. There is no server, no database, no accounts. Everything stays local.
20
+
21
+ ## Prerequisites
22
+
23
+ Before using Hex, make sure you have the following installed:
24
+
25
+ - **Claude Code** — Anthropic's CLI tool for agentic coding
26
+ - **Node.js** (v18+) and npm
27
+ - **Foundry** (`forge`, `cast`) — or Hardhat if that's what the project uses
28
+ - **Slither** — `pip install slither-analyzer`
29
+ - **solc** — the Solidity compiler (managed via `solc-select` or Foundry)
30
+ - (Optional, for `/ingest-aa-report`) **AuditAgent CLI** — `pip install git+https://github.com/NethermindEth/auditagent-cli.git`
31
+
32
+ Run `hex doctor` once you've installed Hex (next section) to confirm everything is in place — it prints a labelled preflight table with install hints for anything missing.
33
+
34
+ ## Quick Start
35
+
36
+ ### 1. Clone the client project and install Hex
37
+
38
+ ```bash
39
+ # Clone or receive the client project as usual
40
+ git clone https://github.com/client/protocol.git
41
+ cd protocol
42
+
43
+ # Install Hex globally
44
+ npm install -g hex-audit
45
+ ```
46
+
47
+ ### 2. Drop the skills into the project and open Claude Code
48
+
49
+ ```bash
50
+ hex claude # copies the audit skills into .claude/skills/
51
+ claude # open Claude Code in this directory
52
+ ```
53
+
54
+ `hex claude` is the only CLI call you need before Claude Code can take over — it copies the skill files so `/init-audit` and friends show up as native slash commands.
55
+
56
+ ### 3. Let Claude initialise the audit
57
+
58
+ Inside Claude Code (switch to **Opus** first):
59
+
60
+ ```
61
+ /init-audit
62
+ ```
63
+
64
+ Claude will ask you for scope, commit, chain, and docs URL, then run the entire pre-manual-review pipeline in one skill: dependency-safety audit → `hex analyze` → protocol overview → system diagram → flow charts → spec conformance → materialize conformance deviations onto the issue board as Potential cards.
65
+
66
+ By the time `/init-audit` finishes, every analysis page on the dashboard has data and the `/issues` board shows the conformance-derived items waiting for manual triage.
67
+
68
+ ### 4. Dashboard opens automatically
69
+
70
+ `/init-audit` launches `hex dashboard` in the background as its last step, so `http://localhost:3000` opens in your browser when the pre-review pipeline finishes. Leave it open as you work — every page fills in automatically as Claude generates more analysis. If you ever need to start it manually, just run `hex dashboard` in a second terminal (`--port 8080` for a custom port, `--no-open` to skip the auto-open).
71
+
72
+ ---
73
+
74
+ ## The Audit Workflow
75
+
76
+ Hex follows a four-phase workflow. You move through the phases sequentially, but you can always go back and re-run earlier steps. Every command in this section is typed inside Claude Code.
77
+
78
+ ### Phase 1 — Pre-review (`/init-audit`)
79
+
80
+ One skill does it all:
81
+
82
+ ```
83
+ /init-audit
84
+ ```
85
+
86
+ Inside `/init-audit`:
87
+
88
+ - **Dependency safety scan.** Inspects `package.json` install hooks, Foundry `lib/` submodules, `foundry.toml` (FFI, fs_permissions, remappings), `.env*` for plaintext secrets, `.vscode/extensions.json` for untrusted publishers. Stops before compilation if anything looks risky.
89
+ - **`hex analyze`** runs stats, deps, access, state, calls, patterns, constraints in parallel, then surface last.
90
+ - **`overview.md`** — a 2-3 paragraph protocol overview with a key contracts table, external dependencies, and architecture notes. Same scope as the simpler standalone skill it replaced — pure description, no findings or speculation.
91
+ - **System diagram** — `.hex/diagrams/diagram.mmd` (split into multiple files if >15 nodes). Semantic symbols (🏦 Vault, 💰 Token, 🔮 Oracle, 🔒 Governance, 📦 Storage), trust-zone colour coding, typed edge labels (delegatecall, external call, access-controlled), visual legend.
92
+ - **Flow charts** — `.hex/diagrams/flow-*.mmd` per archetype (Vault → deposit/withdraw/strategy; Lending → borrow/repay/liquidate; Bridge → send/receive; Governance → propose/vote/execute; AMM → swap/add/remove; Staking → stake/claim/compound). Distinct shapes by semantic role. Every decision diamond shows both success and revert paths.
93
+ - **Spec conformance** — cross-references docs, NatSpec, interfaces, ERC/EIPs. Canonical specs are fetched from `eips.ethereum.org`. Output: `spec-conformance.json` with `CONFORMS / DEVIATES / PARTIAL / UNVERIFIABLE / UNDOCUMENTED` + spec-section URLs.
94
+ - **Materialize conformance items.** Every DEVIATES/PARTIAL spec item is materialized as a Potential card on the issue board (source `conformance`).
95
+
96
+ All pages support filtering by confidence level so you can focus on entries that need manual verification.
97
+
98
+ ### Phase 2 — Manual review
99
+
100
+ Read the code in your editor. Drop `@audit-issue` comments above anything suspicious:
101
+
102
+ ```solidity
103
+ // @audit-issue Possible reentrancy — external call before state update.
104
+ IERC20(token).transfer(recipient, amount);
105
+ ```
106
+
107
+ When you have something concrete, file it as a Potential issue:
108
+
109
+ ```
110
+ /write-finding for the rounding error in src/Vault.sol
111
+ ```
112
+
113
+ `/write-finding` writes the finding to `findings.json` with the next sequential `F<NNN>` ID. The corresponding tracking entry has `status: "pending_validation"` and `source: "manual"`, so the card lands in the **Potential** column on the dashboard board.
114
+
115
+ Phase 2 is where Hex gets out of your way. You think; the toolkit just gives you a place to record what you find.
116
+
117
+ ### Phase 3 — Validate, ingest, sync
118
+
119
+ #### Validate any Potential card (`/validate-issue`)
120
+
121
+ `/validate-issue` is source-agnostic. It validates:
122
+
123
+ - Manual `pending_validation` entries from `/write-finding`.
124
+ - Conformance DEVIATES/PARTIAL entries materialized by `/init-audit`.
125
+ - Auditagent `unverified` entries materialized by `/ingest-aa-report`.
126
+ - GitHub teammate entries materialized by `/sync-issues`.
127
+
128
+ ```
129
+ /validate-issue F003
130
+ /validate-issue SC-007
131
+ /validate-issue AA-N002
132
+ /validate-issue for the rounding issue in Vault.sol
133
+ ```
134
+
135
+ Claude reads the relevant source-of-truth (findings.json | ai-results/auditagent/findings.json | spec-conformance.json | external/github/findings.json), traces the attack path in the code, and writes a validation memo to `.hex/validations/<id>_memo.md`. Then it asks per issue:
136
+
137
+ > The issue appears valid. PoC or memo-only?
138
+
139
+ If PoC: invokes `/generate-poc` to produce a runnable test and iterates until it passes. If memo-only: skips PoC, just records the validation reasoning.
140
+
141
+ Valid → tracking entry promotes to `verified` (the card moves to Verified). Invalid → tracking entry becomes `rejected` (the card moves to Invalid). Severity adjustment is offered after promotion.
142
+
143
+ #### Ingest a Nethermind AuditAgent scan (`/ingest-aa-report`)
144
+
145
+ Hex's only AI integration is **Nethermind AuditAgent**, and it expects the scan to already exist. The skill **does not start scans** — you start the scan separately (the Nethermind portal or `aa scan --quality auditor <scope-files>` from the command line), then paste the scan ID:
146
+
147
+ ```
148
+ /ingest-aa-report <scan-id>
149
+ ```
150
+
151
+ The skill:
152
+
153
+ 1. Calls `aa scan --status <scan_id>`. If the scan is still running, it prints status and exits — come back later. (`hex ai-status --watch` in a second terminal notifies when the scan finishes.)
154
+ 2. On completion, fetches the report and writes raw output to `.hex/ai-results/auditagent/raw-output.md` plus normalised findings to `findings.json` + `metadata.json` under the same folder.
155
+ 3. Materializes each finding as a Potential card (source `auditagent`, status `unverified`).
156
+ 4. **Runs inline dedup** against every existing tracking entry. Auditagent findings that match a manual / conformance / github entry on contract+function+root_cause+attack_vector flip to `duplicate` and surface in the Duplicate column with the match_signals visible on the card.
157
+
158
+ #### Team mode (`/sync-issues`)
159
+
160
+ When two or three auditors share an engagement, sync findings through a shared GitHub repo. Set `settings.github.repo` in `.hex/config.json` (the firm's internal repo, e.g. `nethermind/audit-vaultx`) and authenticate the `gh` CLI once:
161
+
162
+ ```bash
163
+ gh auth login
164
+ ```
165
+
166
+ Hex itself never stores GitHub credentials — `/sync-issues` drives the `gh` CLI directly. Then:
167
+
168
+ ```
169
+ /sync-issues
170
+ ```
171
+
172
+ One invocation does both directions:
173
+
174
+ - **Pull** every issue with the configured labels. Issues with a hidden footer `<!-- hex-finding-id: F<NNN> -->` link back to local findings. Issues without the footer become teammate findings (`source: "github"`, status `pending_validation`).
175
+ - **Inline dedup, GitHub-canonical.** When a pulled GitHub issue matches a local potential entry, **the local entry becomes the duplicate** (`status: "duplicate"`, `duplicate_of: "github-<num>"`). Rationale: a teammate already filed it, so your in-progress local card is redundant. This is the opposite of the auditagent dedup direction, which flips the auditagent entry to duplicate.
176
+ - **Push** every local finding whose tracking status is in `settings.github.publish_status` (default `["verified"]`). Body rendered from the description, code locations, recommendation. Labels applied for severity, source, status. Existing issues are updated by their `github.issue_number`.
177
+
178
+ The dashboard's `/issues` page surfaces GitHub-sync state as a chip on each card (✓ open, ✕ closed).
179
+
180
+ Comments stay on GitHub — Hex never posts, edits, or deletes comments. Auditors discuss inside GitHub itself.
181
+
182
+ ### Phase 4 — Deliverable (`/generate-overleaf`)
183
+
184
+ Once findings are validated and the engagement is winding down:
185
+
186
+ ```
187
+ /generate-overleaf
188
+ ```
189
+
190
+ The skill prompts once for any missing report metadata (initial/final commit, dates, audit type, documentation/test assessment) and persists them to `config.json` under `settings.report.*` so reruns don't re-prompt. Then it emits four `.txt` LaTeX files into `.hex/overleaf/`:
191
+
192
+ 1. **`executive_summary.txt`** — `\section{Executive Summary}` with project synopsis, severity histogram, status histogram, summary table.
193
+ 2. **`audited_files.txt`** — `\section{Audited Files}` LaTeX table of scope files (LoC, comments, ratio, blank, total).
194
+ 3. **`summary_of_findings.txt`** — `\section{Summary of Issues}` table with `\hyperref` rows.
195
+ 4. **`findings.txt`** — `\section{Issues}` with one `\subsection{[Sev] title}\label{issue:N}` per verified finding (description, code blocks via `minted`, recommendation, status, client update).
196
+
197
+ Upload these into the Nethermind Overleaf template's matching slots. Only `verified` findings make the report; duplicates, rejected, and pending entries are skipped.
198
+
199
+ ---
200
+
201
+ ## Claude Code Skills Reference
202
+
203
+ Each skill has a recommended model — switch your Claude Code model before invoking skills that recommend Opus.
204
+
205
+ | Skill | Phase | Recommended Model | What it does |
206
+ | ------------------- | ----- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
207
+ | `init-audit` | 1 | Opus | Dependency-safety → `hex analyze` → overview → diagram → flows → spec conformance → materialize DEVIATES/PARTIAL items as Potential cards |
208
+ | `write-finding` | 2 | Sonnet | Records a manual issue to `findings.json` as a Potential card (`status: pending_validation`, `source: manual`) |
209
+ | `validate-issue` | 3 | Opus | Validates any Potential card (manual / auditagent / conformance / github); per-issue choice of PoC vs memo-only; promotes to Verified or Invalid |
210
+ | `generate-poc` | 3 | Opus | Generates and runs a PoC test (invoked by `/validate-issue`) |
211
+ | `ingest-aa-report` | 3 | Sonnet | Ingests a completed Nethermind AuditAgent scan by ID; materializes findings + inline dedup |
212
+ | `sync-issues` | 3 | Sonnet | Two-way GitHub Issues sync with GitHub-canonical inline dedup |
213
+ | `generate-overleaf` | 4 | Sonnet | Writes the four LaTeX section files for the final report |
214
+
215
+ ### Where Skills Live
216
+
217
+ Skills use Claude Code's native skill format, stored in `.claude/skills/<name>/SKILL.md`. They're copied there when you run `hex claude` or `hex init`.
218
+
219
+ ```
220
+ .claude/skills/
221
+ ├── init-audit/SKILL.md
222
+ ├── write-finding/SKILL.md
223
+ ├── validate-issue/SKILL.md
224
+ ├── generate-poc/SKILL.md
225
+ ├── ingest-aa-report/SKILL.md
226
+ ├── sync-issues/SKILL.md
227
+ └── generate-overleaf/SKILL.md
228
+ ```
229
+
230
+ **How Claude Code finds them:** Claude Code auto-discovers skills in `.claude/skills/`. They appear as native slash commands — type `/` in Claude Code to see them.
231
+
232
+ **Customising skills:** Edit any `SKILL.md` file in place.
233
+
234
+ **Upgrading Hex:**
235
+
236
+ ```bash
237
+ hex update # install latest hex-audit + prompt to re-sync skills (one command)
238
+ hex update --check # check for an available update without installing
239
+ hex update-skills # re-sync skills only (use if you've already npm-installed manually)
240
+ hex update-skills --keep-custom # skip existing skill files to preserve per-project modifications
241
+ ```
242
+
243
+ `hex update` detects how Hex was installed (global or local), runs the appropriate `npm install …@latest`, then asks whether to re-copy the bundled skill files into the current project's `.claude/skills/`. Both commands remove orphaned skill directories so renamed/deleted skills clean up across versions.
244
+
245
+ ---
246
+
247
+ ## Dashboard Pages
248
+
249
+ The dashboard runs locally at `http://localhost:3000` and auto-refreshes when output files change. A live "Updated Ns ago" indicator in the sidebar footer tells you the watcher is connected.
250
+
251
+ | Page | URL | What you see |
252
+ | ---------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
253
+ | Home | `/` | Project info, AI overview, key stats |
254
+ | Progress | `/progress` | Weighted progress bar (70% nSLOC reviewed, 20% audit steps, 10% findings triage), contract review checklist |
255
+ | Statistics | `/stats` | Per-contract metrics, test coverage, dependencies, ERCs |
256
+ | System Diagram | `/diagram` | Mermaid architecture diagram with zoom/pan |
257
+ | Flows | `/flows` | Mermaid flow charts with zoom/pan |
258
+ | Access Control | `/access` | Role → function matrix with "Show unprotected only" and "Show inferred / unknown modifiers" toggles |
259
+ | State Variables | `/state` | Variable inventory with reader/writer tracking and storage-collision warnings |
260
+ | External Calls | `/calls` | Call surface with filterable Trust column |
261
+ | Functions | `/functions` | Aggregated function view |
262
+ | Spec Conformance | `/conformance` | Code vs spec check results, deviations first, clickable spec links |
263
+ | **Issues** | `/issues` | **The board.** Four columns (Potential / Verified / Invalid / Duplicate). Drag cards to change column, click to edit (severity, description, recommendation, resolution, client update). |
264
+
265
+ ---
266
+
267
+ ## Understanding Confidence Levels
268
+
269
+ Every analysis output includes confidence metadata so you know how much to trust it.
270
+
271
+ **High confidence** — Derived from compiler artifacts or established static analysis tools (solc AST, Slither detectors, compiler storage layout). Treat as ground truth.
272
+
273
+ **Medium confidence** — Derived from AST pattern matching or known library detection (e.g., recognising OpenZeppelin Ownable). Reliable for standard patterns, but may miss custom implementations.
274
+
275
+ **Low confidence** — Derived from naming heuristics (e.g., inferring a "keeper" role from a modifier named `onlyKeeper`). Use as a starting point, then verify manually.
276
+
277
+ Access-control roles also carry a `kind` field (`access_control`, `state_check`, `guard`, or `unknown`) and an `is_likely_access_control` flag. `/access` hides roles classified as `unknown` by default and exposes a "Show inferred / unknown modifiers" toggle.
278
+
279
+ Storage-slot collisions and inheritance-layout divergences detected from the compiler's storage layout are flagged with `Critical` severity in `state-vars.json` and roll into `attack-surface.json`.
280
+
281
+ ---
282
+
283
+ ## Output Directory Structure
284
+
285
+ All Hex outputs live in a single directory inside the project (default: `.hex/`, configurable in `config.json`).
286
+
287
+ ```
288
+ .hex/
289
+ ├── config.json # Audit scope, settings (incl. settings.ai.auditagent_scan_id, settings.report.*)
290
+ ├── overview.md # AI-generated protocol overview
291
+ ├── stats.json # Codebase statistics and test coverage
292
+ ├── deps.json # Contract dependency graph
293
+ ├── access-control.json # Role → function mapping (with `kind`, `is_likely_access_control`)
294
+ ├── state-vars.json # State variable inventory + storage_collisions
295
+ ├── external-calls.json # External call surface
296
+ ├── patterns.json # Security pattern flags (ORACLE, TEMPORAL, etc.)
297
+ ├── constraints.json # Setter validation and event analysis
298
+ ├── attack-surface.json # Attack surface summary
299
+ ├── spec-conformance.json # Spec vs code conformance checks (with spec_location.url for ERCs)
300
+ ├── spec-conformance.md # Rendered conformance report
301
+ ├── diagrams/ # All Mermaid diagram files
302
+ │ ├── diagram.mmd # System architecture diagram (possibly split)
303
+ │ └── flow-*.mmd # Flow charts (one per flow)
304
+ ├── progress.json # Audit progress tracking (contract review state)
305
+ ├── findings.json # Canonical finding data (incl. resolution, update_from_client)
306
+ ├── tracking.json # Board state (status, source, duplicate_of)
307
+ ├── comparison.json # Dedup match_signals (written by /ingest-aa-report and /sync-issues)
308
+ ├── validations/ # Issue validation memos
309
+ │ ├── F001_memo.md
310
+ │ └── SC-003_memo.md
311
+ ├── ai-results/auditagent/ # AuditAgent ingest output
312
+ │ ├── raw-output.md
313
+ │ ├── findings.json
314
+ │ └── metadata.json
315
+ ├── ai-status.json # AuditAgent run status (used by `hex ai-status`)
316
+ ├── external/github/ # Pulled teammate findings + sync metadata
317
+ │ ├── findings.json
318
+ │ ├── sync-status.json
319
+ │ └── raw-issues.json
320
+ └── overleaf/ # Final LaTeX section files (produced by /generate-overleaf)
321
+ ├── executive_summary.txt
322
+ ├── audited_files.txt
323
+ ├── summary_of_findings.txt
324
+ └── findings.txt
325
+ ```
326
+
327
+ You can change the output directory by setting `settings.output_dir` in `config.json` before running init.
328
+
329
+ ---
330
+
331
+ ## Scope vs. Full Project Access
332
+
333
+ When you initialise an audit, you specify which files are in scope. This is the set of contracts you're responsible for auditing — all analysis tools focus on these files.
334
+
335
+ But the entire project remains accessible. Claude Code can read out-of-scope contracts, run the existing test suite, compile everything, and leverage the project's test infrastructure when writing PoCs. The scope simply tells the tools where to focus their output.
336
+
337
+ ```
338
+ # In-scope: these are what you're auditing
339
+ src/core/Vault.sol, src/core/Strategy.sol, src/libraries/Math.sol
340
+
341
+ # Still accessible: tests, mocks, deploy scripts, dependencies, interfaces
342
+ # Claude Code can read them all, forge can compile and run tests against them
343
+ ```
344
+
345
+ ---
346
+
347
+ ## CLI Reference
348
+
349
+ You usually don't call these directly — `/init-audit` and the other skills do. But they're the deterministic engine underneath, and they're useful when you want to re-run a single analysis, script something, or troubleshoot.
350
+
351
+ All commands run from within the project directory (or with `--project /path/to/project`).
352
+
353
+ | Command | What it does |
354
+ | --------------------------------- | -------------------------------------------------------------------------------------------------------------- |
355
+ | `hex doctor` | Preflight check: node, forge, slither, solc, Claude Code, output-dir writability, project config |
356
+ | `hex claude` | Copy skills to `.claude/skills/` for Claude Code discovery |
357
+ | `hex init` | Initialise audit config — scope, commit, chain, docs URL (called by `/init-audit`) |
358
+ | `hex analyze` | Run all analysis commands in parallel (stats, deps, access, state, calls, patterns, constraints), then surface |
359
+ | `hex stats` | Generate codebase statistics and test coverage |
360
+ | `hex deps` | Build contract dependency graph |
361
+ | `hex access` | Extract access control mapping (roles → functions, including inherited) |
362
+ | `hex state` | Generate state variable inventory + storage-collision detection |
363
+ | `hex calls` | Map external call surface (AST-based, Slither optional) |
364
+ | `hex patterns` | Detect security-relevant patterns (ORACLE, FLASH_LOAN, TEMPORAL, etc.) |
365
+ | `hex constraints` | Extract setter validation status (AST-aware, follows helpers and modifiers) |
366
+ | `hex surface` | Build attack surface summary cross-referencing all analysis |
367
+ | `hex context` | Assemble optimised AI context from codebase |
368
+ | `hex context --target Vault` | Context for a specific contract and its dependencies |
369
+ | `hex context --estimate` | Show token count without generating context |
370
+ | `hex dashboard` | Start local dashboard and open in browser |
371
+ | `hex dashboard --port 8080` | Start dashboard on a custom port |
372
+ | `hex update` | Update hex-audit to the latest version on npm, then prompt to re-sync skills into the current project |
373
+ | `hex update --check` | Check for an available update without installing |
374
+ | `hex update --yes` | Update and re-sync skills without the post-install prompt |
375
+ | `hex update-skills` | Re-copy skill files from package, removing orphans (overwrites by default) |
376
+ | `hex update-skills --keep-custom` | Skip existing skill files instead of overwriting |
377
+ | `hex ai-status` | Show the latest status for AuditAgent scans |
378
+ | `hex ai-status --watch` | Poll every 5 minutes until pending scans resolve (typical scan: 30-60 min) |
@@ -0,0 +1 @@
1
+ 0IZAlhEwk5-v4myUvWKBd