hex-audit 0.6.3 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +137 -77
- package/DEMO.md +41 -105
- package/README.md +205 -353
- package/dashboard/.next/BUILD_ID +1 -1
- package/dashboard/.next/app-build-manifest.json +65 -99
- package/dashboard/.next/app-path-routes-manifest.json +1 -1
- package/dashboard/.next/build-manifest.json +14 -14
- package/dashboard/.next/next-minimal-server.js.nft.json +1 -1
- package/dashboard/.next/next-server.js.nft.json +1 -1
- package/dashboard/.next/prerender-manifest.js +1 -1
- package/dashboard/.next/prerender-manifest.json +1 -1
- package/dashboard/.next/react-loadable-manifest.json +540 -119
- package/dashboard/.next/routes-manifest.json +1 -1
- package/dashboard/.next/server/app/_not-found/page.js +1 -1
- package/dashboard/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/dashboard/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/api/code/route.js +1 -1
- package/dashboard/.next/server/app/api/code/route.js.nft.json +1 -1
- package/dashboard/.next/server/app/api/comments/route.js +1 -0
- package/dashboard/.next/server/app/api/comments/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/diagrams/[name]/export/route.js +1 -0
- package/dashboard/.next/server/app/api/diagrams/[name]/export/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/diagrams/[name]/resolve/route.js +1 -0
- package/dashboard/.next/server/app/api/diagrams/[name]/resolve/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/diagrams/[name]/route.js +1 -0
- package/dashboard/.next/server/app/api/diagrams/[name]/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/figures/[name]/route.js +1 -0
- package/dashboard/.next/server/app/api/figures/[name]/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/focus/route.js +1 -0
- package/dashboard/.next/server/app/api/focus/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/github-status/route.js +1 -1
- package/dashboard/.next/server/app/api/invariants/[id]/route.js +1 -0
- package/dashboard/.next/server/app/api/invariants/[id]/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/issues/[id]/revert-auto/route.js +1 -0
- package/dashboard/.next/server/app/api/issues/[id]/revert-auto/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/nav/route.js +1 -0
- package/dashboard/.next/server/app/api/nav/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/notes/done/route.js +1 -1
- package/dashboard/.next/server/app/api/notes/done/route.js.nft.json +1 -1
- package/dashboard/.next/server/app/api/notes/lead/route.js +1 -1
- package/dashboard/.next/server/app/api/notes/lead/route.js.nft.json +1 -1
- package/dashboard/.next/server/app/api/notes/question/route.js +1 -1
- package/dashboard/.next/server/app/api/notes/question/route.js.nft.json +1 -1
- package/dashboard/.next/server/app/api/notes/record/route.js +3 -3
- package/dashboard/.next/server/app/api/notes/route.js +2 -2
- package/dashboard/.next/server/app/api/palette/route.js +1 -0
- package/dashboard/.next/server/app/api/palette/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/progress/route.js +1 -1
- package/dashboard/.next/server/app/api/progress/route.js.nft.json +1 -1
- package/dashboard/.next/server/app/api/watch/route.js +2 -2
- package/dashboard/.next/server/app/api/watch/route.js.nft.json +1 -1
- package/dashboard/.next/server/app/api/xref/route.js +1 -0
- package/dashboard/.next/server/app/changes/page.js +1 -0
- package/dashboard/.next/server/app/{access → changes}/page.js.nft.json +1 -1
- package/dashboard/.next/server/app/changes/page_client-reference-manifest.js +1 -0
- package/dashboard/.next/server/app/excalidraw-assets/[...path]/route.js +1 -0
- package/dashboard/.next/server/app/issues/page.js +5 -28
- package/dashboard/.next/server/app/issues/page.js.nft.json +1 -1
- package/dashboard/.next/server/app/issues/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/model/page.js +1 -0
- package/dashboard/.next/server/app/{calls → model}/page.js.nft.json +1 -1
- package/dashboard/.next/server/app/model/page_client-reference-manifest.js +1 -0
- package/dashboard/.next/server/app/page.js +1 -20
- package/dashboard/.next/server/app/page.js.nft.json +1 -1
- package/dashboard/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/report/page.js +1 -1
- package/dashboard/.next/server/app/report/page.js.nft.json +1 -1
- package/dashboard/.next/server/app/report/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/server/app/review/page.js +1 -0
- package/dashboard/.next/server/app/{conformance → review}/page.js.nft.json +1 -1
- package/dashboard/.next/server/app/review/page_client-reference-manifest.js +1 -0
- package/dashboard/.next/server/app-paths-manifest.json +20 -16
- package/dashboard/.next/server/chunks/310.js +4 -0
- package/dashboard/.next/server/chunks/370.js +1 -0
- package/dashboard/.next/server/chunks/42.js +1 -1
- package/dashboard/.next/server/chunks/624.js +14 -0
- package/dashboard/.next/server/chunks/645.js +1 -1
- package/dashboard/.next/server/chunks/649.js +1 -1
- package/dashboard/.next/server/chunks/653.js +1 -0
- package/dashboard/.next/server/functions-config-manifest.json +1 -1
- package/dashboard/.next/server/middleware-build-manifest.js +1 -1
- package/dashboard/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/dashboard/.next/server/next-font-manifest.js +1 -1
- package/dashboard/.next/server/next-font-manifest.json +1 -1
- package/dashboard/.next/server/pages/500.html +1 -1
- package/dashboard/.next/server/pages/_error.js +1 -1
- package/dashboard/.next/server/pages-manifest.json +1 -1
- package/dashboard/.next/server/server-reference-manifest.js +1 -1
- package/dashboard/.next/server/server-reference-manifest.json +1 -1
- package/dashboard/.next/static/bGV1ry1vvIbM5b506eVBR/_buildManifest.js +1 -0
- package/dashboard/.next/static/chunks/0bbe10ee.8e7ffa06d2170dfe.js +84 -0
- package/dashboard/.next/static/chunks/{1.8868c4d131111be7.js → 1.a666047ea18866fb.js} +2 -2
- package/dashboard/.next/static/chunks/1015.39008440ab15e196.js +226 -0
- package/dashboard/.next/static/chunks/1026.0ef689a305302427.js +1 -0
- package/dashboard/.next/static/chunks/1151.497fa63c5b9eba52.js +1 -0
- package/dashboard/.next/static/chunks/1164.34eb76767ebea46f.js +8 -0
- package/dashboard/.next/static/chunks/119.a9a79633900a235f.js +5 -0
- package/dashboard/.next/static/chunks/1199.f30cbfa151e56076.js +148 -0
- package/dashboard/.next/static/chunks/1291.6c486c9b1d4b1b3a.js +1 -0
- package/dashboard/.next/static/chunks/1375.64c20f1064a38a10.js +43 -0
- package/dashboard/.next/static/chunks/139.4691848fc5a46253.js +10 -0
- package/dashboard/.next/static/chunks/145.1bf74fecdb4022e3.js +11 -0
- package/dashboard/.next/static/chunks/1517.8e7075f78e22b3a0.js +8 -0
- package/dashboard/.next/static/chunks/165.6f174060a0ce2db4.js +6 -0
- package/dashboard/.next/static/chunks/1741.5c370b7702d2eb40.js +8 -0
- package/dashboard/.next/static/chunks/1799.8dc56017eede704e.js +9 -0
- package/dashboard/.next/static/chunks/1e36816c.5748c83adc8a6bd6.js +108 -0
- package/dashboard/.next/static/chunks/20154aaa.e87f69fe10483f8b.js +1 -0
- package/dashboard/.next/static/chunks/2061.eab75b3c1dfa068a.js +1 -0
- package/dashboard/.next/static/chunks/2077.5603adeb156c7d10.js +1 -0
- package/dashboard/.next/static/chunks/2148.3ce718f62d1b2f7c.js +10 -0
- package/dashboard/.next/static/chunks/2166.9f6592b9399eadd8.js +215 -0
- package/dashboard/.next/static/chunks/217-1d5b680ffd10e3f9.js +1 -0
- package/dashboard/.next/static/chunks/2208.fb884379aa3ae968.js +1 -0
- package/dashboard/.next/static/chunks/2276.112c7855333fca5f.js +6 -0
- package/dashboard/.next/static/chunks/{2291.85a70cb0c228157b.js → 2291.584b42ccad079b99.js} +1 -1
- package/dashboard/.next/static/chunks/2325.7decd077edfb81d9.js +24 -0
- package/dashboard/.next/static/chunks/2374-8c6f137938f8518a.js +1 -0
- package/dashboard/.next/static/chunks/{2383.62c035a052272594.js → 2383.ca81f980ce6528a4.js} +1 -1
- package/dashboard/.next/static/chunks/2445.18a86507d2996b95.js +1 -0
- package/dashboard/.next/static/chunks/2694.7dfa5fef28851903.js +1 -0
- package/dashboard/.next/static/chunks/2712.15dd8577973baf22.js +10 -0
- package/dashboard/.next/static/chunks/275.38af87389c1d33d7.js +34 -0
- package/dashboard/.next/static/chunks/2759.533dec5317e0a1d1.js +1 -0
- package/dashboard/.next/static/chunks/2781.fba46046dbf2693b.js +93 -0
- package/dashboard/.next/static/chunks/2805.35b4cd8a94978aaf.js +1 -0
- package/dashboard/.next/static/chunks/2812.62b213bef580b69a.js +1 -0
- package/dashboard/.next/static/chunks/{2879.51436986f93981d9.js → 2879.74d65e33e60505ee.js} +1 -1
- package/dashboard/.next/static/chunks/2895.bb57cacb7aaf42a1.js +9 -0
- package/dashboard/.next/static/chunks/2972.e5a9251b538dcf19.js +9 -0
- package/dashboard/.next/static/chunks/3205-fd963acf2fdfd080.js +2 -0
- package/dashboard/.next/static/chunks/3206.8d9a10db2b04b93f.js +1 -0
- package/dashboard/.next/static/chunks/3236.eac9855778a54518.js +1 -0
- package/dashboard/.next/static/chunks/3480.853a445a3784642a.js +1 -0
- package/dashboard/.next/static/chunks/3485.36766504793b7237.js +9 -0
- package/dashboard/.next/static/chunks/3626.c5dacee11c8fbc4d.js +64 -0
- package/dashboard/.next/static/chunks/3725.de9376dc994735d4.js +9 -0
- package/dashboard/.next/static/chunks/3774.1df377928e8387f7.js +9 -0
- package/dashboard/.next/static/chunks/3865.5e6d2d501380e03b.js +90 -0
- package/dashboard/.next/static/chunks/3887.073cece834a4eae2.js +1 -0
- package/dashboard/.next/static/chunks/3924-f1f85ccc7d59d7ab.js +1 -0
- package/dashboard/.next/static/chunks/3948.74201b9f0672234d.js +287 -0
- package/dashboard/.next/static/chunks/3963.39d72b3875dfe2e9.js +13 -0
- package/dashboard/.next/static/chunks/4013.73884b23bfaebdde.js +11 -0
- package/dashboard/.next/static/chunks/4117.278aff1fa23fd36e.js +6 -0
- package/dashboard/.next/static/chunks/4210.cc8594110017c579.js +11 -0
- package/dashboard/.next/static/chunks/4282.28485875540886cc.js +7 -0
- package/dashboard/.next/static/chunks/4318.a2f469a88d88f6d0.js +8 -0
- package/dashboard/.next/static/chunks/4363.8999a6e727c48003.js +1 -0
- package/dashboard/.next/static/chunks/4641.e03d118fffebd580.js +5 -0
- package/dashboard/.next/static/chunks/4728.e69372b5e5b61b8d.js +24 -0
- package/dashboard/.next/static/chunks/4787.821a6ad2816cdc60.js +23 -0
- package/dashboard/.next/static/chunks/483.a910dab7734a1074.js +8 -0
- package/dashboard/.next/static/chunks/4926.76693f542e9cc062.js +6 -0
- package/dashboard/.next/static/chunks/4938.03f6d04dabf38745.js +10 -0
- package/dashboard/.next/static/chunks/5060.47402abc10273699.js +1 -0
- package/dashboard/.next/static/chunks/5112.0757c2b0c285e62e.js +1 -0
- package/dashboard/.next/static/chunks/5199.c83ea7efb0eec705.js +11 -0
- package/dashboard/.next/static/chunks/5284.334c7c0587d5d47a.js +1 -0
- package/dashboard/.next/static/chunks/530.849957a8907eb288.js +1 -0
- package/dashboard/.next/static/chunks/5424.4e8ca0711a32bccf.js +7 -0
- package/dashboard/.next/static/chunks/55.a593a78be9714679.js +1 -0
- package/dashboard/.next/static/chunks/5535.6cd0bd8d368d8902.js +4 -0
- package/dashboard/.next/static/chunks/5626.7d4e93d7acbeffc9.js +10 -0
- package/dashboard/.next/static/chunks/5715.e16b1230cc4b4652.js +115 -0
- package/dashboard/.next/static/chunks/5775.a0d7c1b1e89b9a93.js +9 -0
- package/dashboard/.next/static/chunks/6014.641a2c53ba506241.js +104 -0
- package/dashboard/.next/static/chunks/6024.f099c15f75aa6722.js +79 -0
- package/dashboard/.next/static/chunks/{6052.033a6f1013c666eb.js → 6052.3001318955e5b36c.js} +2 -2
- package/dashboard/.next/static/chunks/6118.266956b3333b1d7a.js +9 -0
- package/dashboard/.next/static/chunks/6121.a2e6d93720b1205e.js +77 -0
- package/dashboard/.next/static/chunks/6177.a01cf0a03734cf09.js +1 -0
- package/dashboard/.next/static/chunks/618f8807-fbb1466bc29c17c6.js +1 -0
- package/dashboard/.next/static/chunks/6434.f560693253fea8de.js +1 -0
- package/dashboard/.next/static/chunks/6468.976d89ba133185f1.js +77 -0
- package/dashboard/.next/static/chunks/6540.6f3c4f2c6877ed89.js +1 -0
- package/dashboard/.next/static/chunks/6549.e3c4c1766cff1449.js +1 -0
- package/dashboard/.next/static/chunks/6853.d3ad43614e8ca0ab.js +1 -0
- package/dashboard/.next/static/chunks/690f35d0.ab57e02a04c7e9e0.js +119 -0
- package/dashboard/.next/static/chunks/6951.02a3a158d02158c9.js +5 -0
- package/dashboard/.next/static/chunks/6970.013f24568c87d918.js +11 -0
- package/dashboard/.next/static/chunks/7013.39d41e82b37be63b.js +9 -0
- package/dashboard/.next/static/chunks/{7020.831e16e26d91abc1.js → 7020.b718b1b9cea36e60.js} +2 -2
- package/dashboard/.next/static/chunks/7107.1c5412197912b8ed.js +8 -0
- package/dashboard/.next/static/chunks/7498-7cf464d8af69cd0a.js +1 -0
- package/dashboard/.next/static/chunks/7508.dd60e2d06d149f5f.js +9 -0
- package/dashboard/.next/static/chunks/7524.0fde4c61553d1491.js +3 -0
- package/dashboard/.next/static/chunks/7802.f0134c792fccd382.js +80 -0
- package/dashboard/.next/static/chunks/7834-47f318a04a05688f.js +1 -0
- package/dashboard/.next/static/chunks/{7a04ac15.1c6cea694301806c.js → 7a04ac15.e49de94ece135900.js} +1 -1
- package/dashboard/.next/static/chunks/8216.1138ec313908a708.js +5 -0
- package/dashboard/.next/static/chunks/{8233babc.780b8e272eda298f.js → 8233babc.09872dcb3ff44064.js} +1 -1
- package/dashboard/.next/static/chunks/8317.d0b3eddef4cae0d5.js +1 -0
- package/dashboard/.next/static/chunks/838.2b2aa006519ba44c.js +10 -0
- package/dashboard/.next/static/chunks/8398.924fd8f4c83417c0.js +7 -0
- package/dashboard/.next/static/chunks/8428b36f.8ac4e67061c01307.js +34 -0
- package/dashboard/.next/static/chunks/8514.85ccbbea8ab21d04.js +5 -0
- package/dashboard/.next/static/chunks/8538.5f7ebe76c4b63162.js +1 -0
- package/dashboard/.next/static/chunks/8645.98a43217d406500e.js +1 -0
- package/dashboard/.next/static/chunks/8687.9406baa8b5601fd0.js +1 -0
- package/dashboard/.next/static/chunks/8721.47346e2cb6412376.js +10 -0
- package/dashboard/.next/static/chunks/8770.4f544bd1a6f03a62.js +8 -0
- package/dashboard/.next/static/chunks/8812.3d96fd54dba566f8.js +9 -0
- package/dashboard/.next/static/chunks/8962.d22aa67a97970dd8.js +1 -0
- package/dashboard/.next/static/chunks/8986.b327224b83f4399a.js +5 -0
- package/dashboard/.next/static/chunks/9173.a7160f7d0b685fa7.js +1 -0
- package/dashboard/.next/static/chunks/9178.998a8c49996de8e4.js +1 -0
- package/dashboard/.next/static/chunks/9271.5f66c19a8ee1ff36.js +10 -0
- package/dashboard/.next/static/chunks/9282.f8d01442bab4c0da.js +2 -0
- package/dashboard/.next/static/chunks/9366.0ec24a0791b9b00f.js +1 -0
- package/dashboard/.next/static/chunks/9466.a914ce0de7d3bb84.js +1 -0
- package/dashboard/.next/static/chunks/9660.b1c8deae2c449d14.js +1 -0
- package/dashboard/.next/static/chunks/9707.5cd7d2ee933a4af5.js +6 -0
- package/dashboard/.next/static/chunks/9716.15fffc0b0038601d.js +4 -0
- package/dashboard/.next/static/chunks/{9717.6cf5c8c89403b651.js → 9717.bba51b78ebd8fd29.js} +1 -1
- package/dashboard/.next/static/chunks/9720.d63a0696776bcc60.js +1 -0
- package/dashboard/.next/static/chunks/9791.e3b3f5a367f63c8a.js +1 -0
- package/dashboard/.next/static/chunks/9811.2993c4cbd28e8d1b.js +1 -0
- package/dashboard/.next/static/chunks/9820.8c1efad5260e8137.js +1 -0
- package/dashboard/.next/static/chunks/985.50150e9eaa4bde33.js +39 -0
- package/dashboard/.next/static/chunks/997.56901b86e1b8a87b.js +8 -0
- package/dashboard/.next/static/chunks/app/_not-found/page-5ff5d54b6fd6f17e.js +1 -0
- package/dashboard/.next/static/chunks/app/changes/page-f8a860034221cad4.js +1 -0
- package/dashboard/.next/static/chunks/app/issues/page-da4da93188c414a6.js +1 -0
- package/dashboard/.next/static/chunks/app/layout-27a9da4610423c1e.js +1 -0
- package/dashboard/.next/static/chunks/app/model/page-9680e22fdd6ddb81.js +1 -0
- package/dashboard/.next/static/chunks/app/page-0e67750d99fb2836.js +1 -0
- package/dashboard/.next/static/chunks/app/report/page-b56b1db9b9dcf2b6.js +1 -0
- package/dashboard/.next/static/chunks/app/review/page-3ef69f0e0badd333.js +1 -0
- package/dashboard/.next/static/chunks/{b7167ec1.7afbab6f609e3326.js → b7167ec1.708a3d61698ca2e6.js} +1 -1
- package/dashboard/.next/static/chunks/c75e29e3.d91220f782934d80.js +1 -0
- package/dashboard/.next/static/chunks/c7ea4e13.3073a2f551aa5ac8.js +1 -0
- package/dashboard/.next/static/chunks/framework-a117d81bf1b91f9a.js +33 -0
- package/dashboard/.next/static/chunks/main-9c95a7ffedc7afb4.js +1 -0
- package/dashboard/.next/static/chunks/main-app-5662c64b50ba40d1.js +1 -0
- package/dashboard/.next/static/chunks/pages/_app-308fef0bf9b328f2.js +1 -0
- package/dashboard/.next/static/chunks/pages/_error-c91b5eabd7ac9382.js +1 -0
- package/dashboard/.next/static/chunks/webpack-6da70e4f9fcf1799.js +1 -0
- package/dashboard/.next/static/css/ceafd91ca8dd753d.css +3 -0
- package/dashboard/.next/static/css/e4aad1f9c715b79a.css +1 -0
- package/dashboard/.next/static/media/39f449c8730c2295-s.woff2 +0 -0
- package/dashboard/.next/static/media/86f65e8637cc94e3-s.woff2 +0 -0
- package/dashboard/.next/static/media/8760c4774489e4ba-s.p.woff2 +0 -0
- package/dashboard/.next/static/media/9fabb9c65b63d798-s.woff2 +0 -0
- package/dashboard/.next/static/media/Assistant-Bold.c8f39f24.woff2 +0 -0
- package/dashboard/.next/static/media/Assistant-Medium.1e75d8e6.woff2 +0 -0
- package/dashboard/.next/static/media/Assistant-Regular.7acbabb8.woff2 +0 -0
- package/dashboard/.next/static/media/Assistant-SemiBold.167acbf8.woff2 +0 -0
- package/dashboard/.next/static/media/a1f87af3f44fadbb-s.woff2 +0 -0
- package/dashboard/.next/static/media/f9e1dbe9676d9bb6-s.woff2 +0 -0
- package/dashboard/app/api/code/route.ts +26 -20
- package/dashboard/app/api/comments/route.ts +158 -0
- package/dashboard/app/api/diagrams/[name]/export/route.ts +26 -0
- package/dashboard/app/api/diagrams/[name]/resolve/route.ts +25 -0
- package/dashboard/app/api/diagrams/[name]/route.ts +37 -0
- package/dashboard/app/api/figures/[name]/route.ts +15 -0
- package/dashboard/app/api/focus/route.ts +35 -0
- package/dashboard/app/api/invariants/[id]/route.ts +35 -0
- package/dashboard/app/api/issues/[id]/revert-auto/route.ts +18 -0
- package/dashboard/app/api/nav/route.ts +120 -0
- package/dashboard/app/api/palette/route.ts +68 -0
- package/dashboard/app/api/progress/route.ts +54 -23
- package/dashboard/app/api/xref/route.ts +30 -0
- package/dashboard/app/changes/ChangesClient.tsx +838 -0
- package/dashboard/app/changes/page.tsx +44 -0
- package/dashboard/app/excalidraw-assets/[...path]/route.ts +56 -0
- package/dashboard/app/globals.css +231 -77
- package/dashboard/app/issues/BoardClient.tsx +817 -0
- package/dashboard/app/issues/page.tsx +27 -272
- package/dashboard/app/layout.tsx +37 -10
- package/dashboard/app/model/ModelClient.tsx +1303 -0
- package/dashboard/app/model/page.tsx +98 -0
- package/dashboard/app/page.tsx +195 -239
- package/dashboard/app/report/ReportClient.tsx +147 -74
- package/dashboard/app/report/page.tsx +25 -14
- package/dashboard/app/review/ReviewClient.tsx +1180 -0
- package/dashboard/app/review/page.tsx +93 -0
- package/dashboard/components/AutoRefresh.tsx +22 -19
- package/dashboard/components/CodeComments.tsx +303 -0
- package/dashboard/components/CodeNav.tsx +523 -0
- package/dashboard/components/CodeReference.tsx +92 -99
- package/dashboard/components/CodeViewer.tsx +526 -0
- package/dashboard/components/CommandPalette.tsx +141 -66
- package/dashboard/components/DiagramCanvas.tsx +275 -0
- package/dashboard/components/DianeNote.tsx +244 -0
- package/dashboard/components/LiveStatus.tsx +30 -68
- package/dashboard/components/MarkdownRenderer.tsx +34 -32
- package/dashboard/components/RecordButton.tsx +132 -0
- package/dashboard/components/ui/Button.tsx +39 -0
- package/dashboard/components/ui/Chip.tsx +37 -0
- package/dashboard/components/ui/EmptyState.tsx +31 -0
- package/dashboard/components/ui/Icons.tsx +126 -0
- package/dashboard/components/ui/Inspector.tsx +122 -0
- package/dashboard/components/ui/Kbd.tsx +15 -0
- package/dashboard/components/ui/ListRow.tsx +92 -0
- package/dashboard/components/ui/LocalTime.tsx +14 -0
- package/dashboard/components/ui/ProgressRing.tsx +54 -0
- package/dashboard/components/ui/ResizeHandle.tsx +93 -0
- package/dashboard/components/ui/RiskMeter.tsx +27 -0
- package/dashboard/components/ui/SearchField.tsx +55 -0
- package/dashboard/components/ui/SegmentedControl.tsx +71 -0
- package/dashboard/components/ui/SeverityDot.tsx +57 -0
- package/dashboard/components/ui/Sidebar.tsx +236 -0
- package/dashboard/components/ui/SplitView.tsx +122 -0
- package/dashboard/components/ui/StateGlyph.tsx +66 -0
- package/dashboard/components/ui/Toast.tsx +91 -0
- package/dashboard/lib/api.ts +17 -0
- package/dashboard/lib/cn.ts +4 -0
- package/dashboard/lib/data.ts +2 -21
- package/dashboard/lib/finding-markdown.ts +1 -1
- package/dashboard/lib/focus.ts +42 -0
- package/dashboard/lib/hotkeys.ts +41 -0
- package/dashboard/lib/inline-markdown.test.ts +11 -0
- package/dashboard/lib/live.ts +32 -0
- package/dashboard/lib/pane-width.ts +36 -0
- package/dashboard/lib/server/board.ts +229 -0
- package/dashboard/lib/server/diagrams.ts +191 -0
- package/dashboard/lib/server/safe-path.ts +28 -0
- package/dashboard/lib/server/workspace.ts +113 -0
- package/dashboard/lib/server/xref.ts +42 -0
- package/dashboard/lib/solidity.test.ts +37 -0
- package/dashboard/lib/solidity.ts +191 -0
- package/dashboard/lib/source.ts +28 -0
- package/dashboard/lib/types.ts +164 -0
- package/dashboard/lib/url.ts +18 -0
- package/dashboard/lib/watcher.ts +31 -22
- package/dashboard/tailwind.config.ts +6 -3
- package/dist/analysis/code-model.d.ts +113 -0
- package/dist/analysis/code-model.d.ts.map +1 -0
- package/dist/analysis/code-model.js +532 -0
- package/dist/analysis/code-model.js.map +1 -0
- package/dist/analysis/diff.d.ts +75 -0
- package/dist/analysis/diff.d.ts.map +1 -0
- package/dist/analysis/diff.js +787 -0
- package/dist/analysis/diff.js.map +1 -0
- package/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +25 -40
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/claude.d.ts.map +1 -1
- package/dist/commands/claude.js +5 -0
- package/dist/commands/claude.js.map +1 -1
- package/dist/commands/dashboard.d.ts.map +1 -1
- package/dist/commands/dashboard.js +10 -2
- package/dist/commands/dashboard.js.map +1 -1
- package/dist/commands/diagram.d.ts +3 -0
- package/dist/commands/diagram.d.ts.map +1 -0
- package/dist/commands/diagram.js +71 -0
- package/dist/commands/diagram.js.map +1 -0
- package/dist/commands/diff.d.ts +25 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +257 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +5 -18
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/facts.d.ts +23 -0
- package/dist/commands/facts.d.ts.map +1 -0
- package/dist/commands/facts.js +121 -0
- package/dist/commands/facts.js.map +1 -0
- package/dist/commands/fix-review.d.ts +9 -0
- package/dist/commands/fix-review.d.ts.map +1 -0
- package/dist/commands/fix-review.js +367 -0
- package/dist/commands/fix-review.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +106 -42
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/issue.d.ts.map +1 -1
- package/dist/commands/issue.js +154 -5
- package/dist/commands/issue.js.map +1 -1
- package/dist/commands/mcp.d.ts +3 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +11 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/model.d.ts +4 -0
- package/dist/commands/model.d.ts.map +1 -0
- package/dist/commands/model.js +275 -0
- package/dist/commands/model.js.map +1 -0
- package/dist/commands/note.d.ts.map +1 -1
- package/dist/commands/note.js +61 -3
- package/dist/commands/note.js.map +1 -1
- package/dist/commands/review.d.ts +4 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +164 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/core/comments.d.ts +59 -0
- package/dist/core/comments.d.ts.map +1 -0
- package/dist/core/comments.js +263 -0
- package/dist/core/comments.js.map +1 -0
- package/dist/core/config.d.ts +9 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +18 -1
- package/dist/core/config.js.map +1 -1
- package/dist/core/dedup.d.ts +56 -0
- package/dist/core/dedup.d.ts.map +1 -0
- package/dist/core/dedup.js +208 -0
- package/dist/core/dedup.js.map +1 -0
- package/dist/core/errors.d.ts +1 -1
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +16 -15
- package/dist/core/errors.js.map +1 -1
- package/dist/core/external-tools.d.ts +0 -14
- package/dist/core/external-tools.d.ts.map +1 -1
- package/dist/core/external-tools.js +2 -52
- package/dist/core/external-tools.js.map +1 -1
- package/dist/core/fix-review.d.ts +54 -0
- package/dist/core/fix-review.d.ts.map +1 -0
- package/dist/core/fix-review.js +98 -0
- package/dist/core/fix-review.js.map +1 -0
- package/dist/core/fuzz-sync.d.ts +93 -0
- package/dist/core/fuzz-sync.d.ts.map +1 -0
- package/dist/core/fuzz-sync.js +516 -0
- package/dist/core/fuzz-sync.js.map +1 -0
- package/dist/core/git.d.ts +31 -0
- package/dist/core/git.d.ts.map +1 -0
- package/dist/core/git.js +157 -0
- package/dist/core/git.js.map +1 -0
- package/dist/core/issues.d.ts +35 -2
- package/dist/core/issues.d.ts.map +1 -1
- package/dist/core/issues.js +201 -30
- package/dist/core/issues.js.map +1 -1
- package/dist/core/mcp-config.d.ts +12 -0
- package/dist/core/mcp-config.d.ts.map +1 -0
- package/dist/core/mcp-config.js +29 -0
- package/dist/core/mcp-config.js.map +1 -0
- package/dist/core/model.d.ts +38 -0
- package/dist/core/model.d.ts.map +1 -0
- package/dist/core/model.js +160 -0
- package/dist/core/model.js.map +1 -0
- package/dist/core/notes.d.ts +27 -1
- package/dist/core/notes.d.ts.map +1 -1
- package/dist/core/notes.js +47 -5
- package/dist/core/notes.js.map +1 -1
- package/dist/core/review.d.ts +47 -0
- package/dist/core/review.d.ts.map +1 -1
- package/dist/core/review.js +177 -1
- package/dist/core/review.js.map +1 -1
- package/dist/core/rules.d.ts +12 -0
- package/dist/core/rules.d.ts.map +1 -0
- package/dist/core/rules.js +66 -0
- package/dist/core/rules.js.map +1 -0
- package/dist/core/schema.d.ts +5458 -2189
- package/dist/core/schema.d.ts.map +1 -1
- package/dist/core/schema.js +605 -114
- package/dist/core/schema.js.map +1 -1
- package/dist/core/scope.d.ts +8 -0
- package/dist/core/scope.d.ts.map +1 -0
- package/dist/core/scope.js +18 -0
- package/dist/core/scope.js.map +1 -0
- package/dist/core/skills.d.ts +10 -4
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +100 -37
- package/dist/core/skills.js.map +1 -1
- package/dist/diagrams/build.d.ts +18 -0
- package/dist/diagrams/build.d.ts.map +1 -0
- package/dist/diagrams/build.js +135 -0
- package/dist/diagrams/build.js.map +1 -0
- package/dist/diagrams/excalidraw.d.ts +27 -0
- package/dist/diagrams/excalidraw.d.ts.map +1 -0
- package/dist/diagrams/excalidraw.js +219 -0
- package/dist/diagrams/excalidraw.js.map +1 -0
- package/dist/diagrams/layout.d.ts +48 -0
- package/dist/diagrams/layout.d.ts.map +1 -0
- package/dist/diagrams/layout.js +686 -0
- package/dist/diagrams/layout.js.map +1 -0
- package/dist/facts/build.d.ts +23 -0
- package/dist/facts/build.d.ts.map +1 -0
- package/dist/facts/build.js +112 -0
- package/dist/facts/build.js.map +1 -0
- package/dist/facts/extract.d.ts +53 -0
- package/dist/facts/extract.d.ts.map +1 -0
- package/dist/facts/extract.js +635 -0
- package/dist/facts/extract.js.map +1 -0
- package/dist/facts/fallback.d.ts +7 -0
- package/dist/facts/fallback.d.ts.map +1 -0
- package/dist/facts/fallback.js +156 -0
- package/dist/facts/fallback.js.map +1 -0
- package/dist/facts/implementations.d.ts +29 -0
- package/dist/facts/implementations.d.ts.map +1 -0
- package/dist/facts/implementations.js +43 -0
- package/dist/facts/implementations.js.map +1 -0
- package/dist/facts/query.d.ts +35 -0
- package/dist/facts/query.d.ts.map +1 -0
- package/dist/facts/query.js +157 -0
- package/dist/facts/query.js.map +1 -0
- package/dist/facts/xref.d.ts +53 -0
- package/dist/facts/xref.d.ts.map +1 -0
- package/dist/facts/xref.js +282 -0
- package/dist/facts/xref.js.map +1 -0
- package/dist/index.js +16 -16
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts +3 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +400 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/skills/ai-audit/LICENSE +21 -0
- package/dist/skills/ai-audit/SKILL.md +486 -0
- package/dist/skills/ai-audit/UPSTREAM.md +51 -0
- package/dist/skills/ai-audit/references/agent-prompts.md +133 -0
- package/dist/skills/ai-audit/references/assemble.sh +357 -0
- package/dist/skills/ai-audit/references/dedup-and-assembly.md +420 -0
- package/dist/skills/ai-audit/references/hacking-agents/access-control-agent.md +27 -0
- package/dist/skills/ai-audit/references/hacking-agents/asymmetry-agent.md +77 -0
- package/dist/skills/ai-audit/references/hacking-agents/boundary-agent.md +79 -0
- package/dist/skills/ai-audit/references/hacking-agents/economic-security-agent.md +35 -0
- package/dist/skills/ai-audit/references/hacking-agents/execution-trace-agent.md +33 -0
- package/dist/skills/ai-audit/references/hacking-agents/first-principles-agent.md +36 -0
- package/dist/skills/ai-audit/references/hacking-agents/flow-gap-agent.md +49 -0
- package/dist/skills/ai-audit/references/hacking-agents/invariant-agent.md +44 -0
- package/dist/skills/ai-audit/references/hacking-agents/math-precision-agent.md +48 -0
- package/dist/skills/ai-audit/references/hacking-agents/numerical-gap-agent.md +46 -0
- package/dist/skills/ai-audit/references/hacking-agents/periphery-agent.md +27 -0
- package/dist/skills/ai-audit/references/hacking-agents/shared-rules.md +61 -0
- package/dist/skills/ai-audit/references/hacking-agents/trust-gap-agent.md +40 -0
- package/dist/skills/ai-audit/references/hex-board.md +211 -0
- package/dist/skills/ai-audit/references/hex-export.sh +71 -0
- package/dist/skills/ai-audit/references/judging.md +75 -0
- package/dist/skills/ai-audit/references/report-formatting.md +385 -0
- package/dist/skills/ai-audit/references/report-language.md +151 -0
- package/dist/skills/ai-audit/references/senior-auditor-sop.md +63 -0
- package/dist/skills/diane.md +26 -12
- package/dist/skills/fix-review.md +58 -0
- package/dist/skills/fuzz/LICENSE +21 -0
- package/dist/skills/fuzz/SKILL.md +655 -0
- package/dist/skills/fuzz/UPSTREAM.md +119 -0
- package/dist/skills/fuzz/agents/implementers/global-property-implementer.md +81 -0
- package/dist/skills/fuzz/agents/implementers/specific-property-implementer.md +121 -0
- package/dist/skills/fuzz/agents/invariant-discovery/adversarial-profit-maximizer.md +123 -0
- package/dist/skills/fuzz/agents/invariant-discovery/conservation-auditor.md +92 -0
- package/dist/skills/fuzz/agents/invariant-discovery/protocol-type-specialist.md +173 -0
- package/dist/skills/fuzz/agents/invariant-discovery/roundtrip-rounding-analyst.md +164 -0
- package/dist/skills/fuzz/agents/invariant-discovery/state-transition-mapper.md +92 -0
- package/dist/skills/fuzz/agents/invariant-discovery/synthesizer.md +261 -0
- package/dist/skills/fuzz/agents/protocol-analyzer.md +80 -0
- package/dist/skills/fuzz/agents/report-writer.md +135 -0
- package/dist/skills/fuzz/references/handler-patterns.md +222 -0
- package/dist/skills/fuzz/references/hex-invariants.md +102 -0
- package/dist/skills/fuzz/references/property-generation.md +149 -0
- package/dist/skills/fuzz/references/selection-policy.md +49 -0
- package/dist/skills/fuzz/references/setup-playbook.md +92 -0
- package/dist/skills/fuzz/references/template-map.md +121 -0
- package/dist/skills/fuzz/scripts/ensure_foundry.sh +125 -0
- package/dist/skills/fuzz/scripts/estimate_cost.js +157 -0
- package/dist/skills/fuzz/scripts/extract_abis.js +303 -0
- package/dist/skills/fuzz/scripts/fizz_sync.js +692 -0
- package/dist/skills/fuzz/scripts/generate_handlers.js +370 -0
- package/dist/skills/fuzz/scripts/generate_suite.js +254 -0
- package/dist/skills/fuzz/scripts/lib/log-viewer.js +332 -0
- package/dist/skills/fuzz/scripts/run_echidna.js +192 -0
- package/dist/skills/fuzz/scripts/run_medusa.js +329 -0
- package/dist/skills/fuzz/scripts/select_functions.js +637 -0
- package/dist/skills/fuzz/scripts/setup_fuzz_profile.sh +142 -0
- package/dist/skills/fuzz/templates/Actor.sol +63 -0
- package/dist/skills/fuzz/templates/Base.sol +121 -0
- package/dist/skills/fuzz/templates/FoundryTester.sol +29 -0
- package/dist/skills/fuzz/templates/FuzzTester.sol +11 -0
- package/dist/skills/fuzz/templates/Properties.sol +17 -0
- package/dist/skills/fuzz/templates/README.md +56 -0
- package/dist/skills/fuzz/templates/Snapshots.sol +26 -0
- package/dist/skills/fuzz/templates/echidna.yaml +18 -0
- package/dist/skills/fuzz/templates/handlers/Handlers.sol +13 -0
- package/dist/skills/fuzz/templates/medusa.json +93 -0
- package/dist/skills/fuzz/templates/utils/Clamp.sol +223 -0
- package/dist/skills/fuzz/templates/utils/DecimalPrinter.sol +63 -0
- package/dist/skills/fuzz/templates/utils/Deployer.sol +17 -0
- package/dist/skills/fuzz/templates/utils/EnumerableSet.sol +206 -0
- package/dist/skills/fuzz/templates/utils/Hevm.sol +62 -0
- package/dist/skills/fuzz/templates/utils/Logger.sol +619 -0
- package/dist/skills/fuzz/templates/utils/Math.sol +52 -0
- package/dist/skills/fuzz/templates/utils/MockERC20.sol +279 -0
- package/dist/skills/fuzz/templates/utils/PropertiesAsserts.sol +238 -0
- package/dist/skills/fuzz/templates/utils/StringUtils.sol +85 -0
- package/dist/skills/fuzz-convert/SKILL.md +249 -0
- package/dist/skills/fuzz-sync/SKILL.md +342 -0
- package/dist/skills/generate-poc.md +8 -26
- package/dist/skills/generate-report.md +24 -8
- package/dist/skills/ingest-aa-report.md +11 -30
- package/dist/skills/init-audit/SKILL.md +155 -0
- package/dist/skills/init-audit/references/agents/conformance-checker.md +36 -0
- package/dist/skills/init-audit/references/agents/contract-reader.md +59 -0
- package/dist/skills/init-audit/references/agents/diagram-composer.md +48 -0
- package/dist/skills/init-audit/references/agents/docs-extractor.md +26 -0
- package/dist/skills/init-audit/references/agents/prior-audit.md +32 -0
- package/dist/skills/init-audit/references/agents/regression-checker.md +28 -0
- package/dist/skills/init-audit/references/agents/skeptic.md +31 -0
- package/dist/skills/init-audit/references/agents/standards-checker.md +39 -0
- package/dist/skills/init-audit/references/agents/synthesizer.md +50 -0
- package/dist/skills/prevalidate.md +62 -0
- package/dist/skills/sync-issues.md +11 -25
- package/dist/skills/validate-all-findings.md +3 -3
- package/dist/skills/validate-finding.md +33 -28
- package/dist/skills/write-finding.md +6 -5
- package/dist/types/index.d.ts +22 -12
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +6 -4
- package/dashboard/.next/server/app/_not-found.html +0 -1
- package/dashboard/.next/server/app/_not-found.meta +0 -6
- package/dashboard/.next/server/app/_not-found.rsc +0 -12
- package/dashboard/.next/server/app/access/page.js +0 -1
- package/dashboard/.next/server/app/access/page_client-reference-manifest.js +0 -1
- package/dashboard/.next/server/app/api/flows/route.js +0 -1
- package/dashboard/.next/server/app/api/mermaid/route.js +0 -1
- package/dashboard/.next/server/app/calls/page.js +0 -1
- package/dashboard/.next/server/app/calls/page_client-reference-manifest.js +0 -1
- package/dashboard/.next/server/app/conformance/page.js +0 -1
- package/dashboard/.next/server/app/conformance/page_client-reference-manifest.js +0 -1
- package/dashboard/.next/server/app/diagram/page.js +0 -1
- package/dashboard/.next/server/app/diagram/page.js.nft.json +0 -1
- package/dashboard/.next/server/app/diagram/page_client-reference-manifest.js +0 -1
- package/dashboard/.next/server/app/diagram.html +0 -1
- package/dashboard/.next/server/app/diagram.meta +0 -5
- package/dashboard/.next/server/app/diagram.rsc +0 -10
- package/dashboard/.next/server/app/flows/page.js +0 -1
- package/dashboard/.next/server/app/flows/page.js.nft.json +0 -1
- package/dashboard/.next/server/app/flows/page_client-reference-manifest.js +0 -1
- package/dashboard/.next/server/app/flows.html +0 -1
- package/dashboard/.next/server/app/flows.meta +0 -5
- package/dashboard/.next/server/app/flows.rsc +0 -10
- package/dashboard/.next/server/app/functions/page.js +0 -1
- package/dashboard/.next/server/app/functions/page.js.nft.json +0 -1
- package/dashboard/.next/server/app/functions/page_client-reference-manifest.js +0 -1
- package/dashboard/.next/server/app/notes/page.js +0 -22
- package/dashboard/.next/server/app/notes/page.js.nft.json +0 -1
- package/dashboard/.next/server/app/notes/page_client-reference-manifest.js +0 -1
- package/dashboard/.next/server/app/progress/page.js +0 -1
- package/dashboard/.next/server/app/progress/page.js.nft.json +0 -1
- package/dashboard/.next/server/app/progress/page_client-reference-manifest.js +0 -1
- package/dashboard/.next/server/app/stats/page.js +0 -1
- package/dashboard/.next/server/app/stats/page.js.nft.json +0 -1
- package/dashboard/.next/server/app/stats/page_client-reference-manifest.js +0 -1
- package/dashboard/.next/server/chunks/44.js +0 -1
- package/dashboard/.next/server/chunks/530.js +0 -1
- package/dashboard/.next/server/chunks/622.js +0 -3
- package/dashboard/.next/server/chunks/665.js +0 -13
- package/dashboard/.next/server/pages/404.html +0 -1
- package/dashboard/.next/static/AyrRAwu4mazjp8iX4Yjbb/_buildManifest.js +0 -1
- package/dashboard/.next/static/chunks/1015.3ab89142e5f44120.js +0 -226
- package/dashboard/.next/static/chunks/1151.b6ef5c786e587ed7.js +0 -1
- package/dashboard/.next/static/chunks/1199.a072929dbec89965.js +0 -148
- package/dashboard/.next/static/chunks/1375.d4d2f7fc9c9c2ff1.js +0 -43
- package/dashboard/.next/static/chunks/1799.83206776abbbf1fc.js +0 -9
- package/dashboard/.next/static/chunks/20154aaa.ccc347c04ab5ad4a.js +0 -1
- package/dashboard/.next/static/chunks/2077.7011a570c87aa7b1.js +0 -1
- package/dashboard/.next/static/chunks/2166.cc0fabeb2e89b840.js +0 -215
- package/dashboard/.next/static/chunks/2325.2c55cb9a6282ae3f.js +0 -24
- package/dashboard/.next/static/chunks/2694.92bbe252063e4786.js +0 -1
- package/dashboard/.next/static/chunks/275.0d761aa0e5b030b8.js +0 -34
- package/dashboard/.next/static/chunks/2781.8536b644a480aede.js +0 -93
- package/dashboard/.next/static/chunks/2805.a8d71d2f92bb6ba9.js +0 -1
- package/dashboard/.next/static/chunks/3017.e55781da9dd32d37.js +0 -1
- package/dashboard/.next/static/chunks/3205-728c260fbb4f89c6.js +0 -2
- package/dashboard/.next/static/chunks/3236.dff44fa7961d9d5e.js +0 -1
- package/dashboard/.next/static/chunks/3480.9451396ad7ee7613.js +0 -1
- package/dashboard/.next/static/chunks/3626.ba1cf848a9f2e93d.js +0 -64
- package/dashboard/.next/static/chunks/3865.a432a7910a2f5281.js +0 -90
- package/dashboard/.next/static/chunks/3887.c22cbfa3f095826c.js +0 -1
- package/dashboard/.next/static/chunks/3924-4a05057b5450abe1.js +0 -1
- package/dashboard/.next/static/chunks/3948.fe3c7d758568d98b.js +0 -287
- package/dashboard/.next/static/chunks/4728.07d87640a3e7dd0d.js +0 -24
- package/dashboard/.next/static/chunks/4787.4e5f6a0e0e40a583.js +0 -23
- package/dashboard/.next/static/chunks/5060.baca226af35ed016.js +0 -1
- package/dashboard/.next/static/chunks/5284.f949ac90c95ff143.js +0 -1
- package/dashboard/.next/static/chunks/5715.1524bcc9591e180b.js +0 -115
- package/dashboard/.next/static/chunks/6014.700ae4969b64d728.js +0 -104
- package/dashboard/.next/static/chunks/6024.4d23707c65514679.js +0 -79
- package/dashboard/.next/static/chunks/6177.e5c84cfc4c0dea51.js +0 -1
- package/dashboard/.next/static/chunks/618f8807-547c5614e1318888.js +0 -1
- package/dashboard/.next/static/chunks/6434.9481771c33195d29.js +0 -1
- package/dashboard/.next/static/chunks/6468.f4a3e8fa6accc6da.js +0 -77
- package/dashboard/.next/static/chunks/6540.86f367d7390738d4.js +0 -1
- package/dashboard/.next/static/chunks/6549.4d0d472df96429a5.js +0 -1
- package/dashboard/.next/static/chunks/690f35d0.3e40ca0930e4bbdb.js +0 -119
- package/dashboard/.next/static/chunks/7397-f6f4dddc7a20bfc1.js +0 -1
- package/dashboard/.next/static/chunks/7498-ea83cb9e30ec5491.js +0 -1
- package/dashboard/.next/static/chunks/7802.89aec9ee11680850.js +0 -80
- package/dashboard/.next/static/chunks/7973.8b526f589aca5d84.js +0 -79
- package/dashboard/.next/static/chunks/8216.1bead812eb126c35.js +0 -5
- package/dashboard/.next/static/chunks/8452-e616b5f43bceb95f.js +0 -13
- package/dashboard/.next/static/chunks/8645.a5ca76f11edc9633.js +0 -1
- package/dashboard/.next/static/chunks/8928-60c623ee89d2e6ad.js +0 -1
- package/dashboard/.next/static/chunks/9173.2486ffca31131ec5.js +0 -1
- package/dashboard/.next/static/chunks/9178.469341860bf8caec.js +0 -1
- package/dashboard/.next/static/chunks/9466.e904660d38c03eea.js +0 -1
- package/dashboard/.next/static/chunks/9660.84a85811380c5f33.js +0 -1
- package/dashboard/.next/static/chunks/9720.67d4d0d15a96d691.js +0 -1
- package/dashboard/.next/static/chunks/9811.65e1d080c2d256af.js +0 -1
- package/dashboard/.next/static/chunks/app/_not-found/page-548ab392d0e890d1.js +0 -1
- package/dashboard/.next/static/chunks/app/access/page-3668562e7464eb5d.js +0 -1
- package/dashboard/.next/static/chunks/app/calls/page-d07f5b8664cc8303.js +0 -1
- package/dashboard/.next/static/chunks/app/conformance/page-2fede1d7b5f9265d.js +0 -1
- package/dashboard/.next/static/chunks/app/diagram/page-b228444265546495.js +0 -1
- package/dashboard/.next/static/chunks/app/flows/page-fa67783d8cd79cab.js +0 -1
- package/dashboard/.next/static/chunks/app/functions/page-686f0296639133a3.js +0 -1
- package/dashboard/.next/static/chunks/app/issues/page-98a298e1c1045c91.js +0 -1
- package/dashboard/.next/static/chunks/app/layout-49f2496c7637d931.js +0 -1
- package/dashboard/.next/static/chunks/app/notes/page-17af94c67ba79c00.js +0 -1
- package/dashboard/.next/static/chunks/app/page-24bac51dfe007c66.js +0 -1
- package/dashboard/.next/static/chunks/app/progress/page-427fb18da3afb061.js +0 -1
- package/dashboard/.next/static/chunks/app/report/page-796f2f4a8a5ac8f7.js +0 -1
- package/dashboard/.next/static/chunks/app/stats/page-db81f600a086f252.js +0 -1
- package/dashboard/.next/static/chunks/c7ea4e13.5effeeba6618bdb7.js +0 -1
- package/dashboard/.next/static/chunks/framework-cf6f5bdca6ba0184.js +0 -33
- package/dashboard/.next/static/chunks/main-63ff429eab01f5bf.js +0 -1
- package/dashboard/.next/static/chunks/main-app-9d2f6b8a47133e9b.js +0 -1
- package/dashboard/.next/static/chunks/pages/_app-6ad2b50514c24ab4.js +0 -1
- package/dashboard/.next/static/chunks/pages/_error-d5eb11c5c4626811.js +0 -1
- package/dashboard/.next/static/chunks/webpack-08869f2b18792e51.js +0 -1
- package/dashboard/.next/static/css/4a38d8f6f6b7a68f.css +0 -3
- package/dashboard/.next/static/media/438aa629764e75f3-s.woff2 +0 -0
- package/dashboard/.next/static/media/4c9affa5bc8f420e-s.p.woff2 +0 -0
- package/dashboard/.next/static/media/51251f8b9793cdb3-s.woff2 +0 -0
- package/dashboard/.next/static/media/875ae681bfde4580-s.woff2 +0 -0
- package/dashboard/.next/static/media/cc978ac5ee68c2b6-s.woff2 +0 -0
- package/dashboard/.next/static/media/e857b654a2caa584-s.woff2 +0 -0
- package/dashboard/app/access/AccessClient.tsx +0 -402
- package/dashboard/app/access/ReadOnlyFunctions.tsx +0 -114
- package/dashboard/app/access/page.tsx +0 -125
- package/dashboard/app/api/flows/route.ts +0 -32
- package/dashboard/app/api/mermaid/route.ts +0 -25
- package/dashboard/app/calls/CallsClient.tsx +0 -170
- package/dashboard/app/calls/page.tsx +0 -57
- package/dashboard/app/conformance/ConformanceTable.tsx +0 -214
- package/dashboard/app/conformance/page.tsx +0 -186
- package/dashboard/app/diagram/page.tsx +0 -65
- package/dashboard/app/flows/page.tsx +0 -102
- package/dashboard/app/functions/FunctionsClient.tsx +0 -167
- package/dashboard/app/functions/page.tsx +0 -178
- package/dashboard/app/issues/IssuesBoardClient.tsx +0 -803
- package/dashboard/app/notes/NotesClient.tsx +0 -701
- package/dashboard/app/notes/page.tsx +0 -47
- package/dashboard/app/progress/ProgressClient.tsx +0 -354
- package/dashboard/app/progress/page.tsx +0 -127
- package/dashboard/app/stats/StatsClient.tsx +0 -452
- package/dashboard/app/stats/page.tsx +0 -50
- package/dashboard/components/ConfidenceBadge.tsx +0 -53
- package/dashboard/components/DashboardLayout.tsx +0 -485
- package/dashboard/components/FilterableTable.tsx +0 -293
- package/dashboard/components/MermaidViewer.tsx +0 -267
- package/dashboard/components/NotYetGenerated.tsx +0 -32
- package/dashboard/components/SeverityBadge.tsx +0 -28
- package/dashboard/components/SignalBars.tsx +0 -27
- package/dashboard/components/SortableTable.tsx +0 -122
- package/dashboard/lib/conformance-tokens.ts +0 -49
- package/dist/skills/init-audit.md +0 -284
- /package/dashboard/.next/server/app/api/{flows → xref}/route.js.nft.json +0 -0
- /package/dashboard/.next/server/app/{api/mermaid → excalidraw-assets/[...path]}/route.js.nft.json +0 -0
- /package/dashboard/.next/static/{AyrRAwu4mazjp8iX4Yjbb → bGV1ry1vvIbM5b506eVBR}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Standards checker
|
|
2
|
+
|
|
3
|
+
You check the in-scope contracts against the standards they claim or implement: ERC/EIP specs (from `.hex/stats.json` → `erc_eip_usage`) and interfaces they inherit (`npx --no-install hex facts query linearization <Contract>`).
|
|
4
|
+
|
|
5
|
+
**Write to:** `{output}`
|
|
6
|
+
|
|
7
|
+
For each ERC/EIP:
|
|
8
|
+
|
|
9
|
+
1. Fetch the canonical spec with WebFetch from `https://eips.ethereum.org/EIPS/eip-<number>`. If the fetch fails, note `"spec_fetched": false` and use what you know.
|
|
10
|
+
2. Turn every MUST / SHOULD / MAY requirement into a checklist entry and verify it against the implementation. Use `npx --no-install hex facts query function <Contract.fn>` for exact signatures, modifiers and calls.
|
|
11
|
+
3. Known gotchas to check explicitly:
|
|
12
|
+
- **ERC-20:** return values on `transfer`/`approve`, zero-amount transfers, the approval race.
|
|
13
|
+
- **ERC-4626:** rounding direction per function (previews and actions), preview vs actual, `max*` returns, behavior when paused.
|
|
14
|
+
- **ERC-721:** `safeTransferFrom` callbacks.
|
|
15
|
+
- **ERC-2612:** deadline, nonce, and domain separator chain id.
|
|
16
|
+
|
|
17
|
+
For contracts that hold ERC-20s, also classify how they handle weird tokens: fee-on-transfer (balance-diff vs trusting the amount), rebasing, blocklists (DoS in loops or liquidations), and double entry points.
|
|
18
|
+
|
|
19
|
+
Then check interface conformance: every function of each inherited interface is implemented, with the semantics its NatSpec promises.
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"agent": "standards",
|
|
24
|
+
"checks": [
|
|
25
|
+
{
|
|
26
|
+
"id": "STD-001",
|
|
27
|
+
"standard": "ERC-4626",
|
|
28
|
+
"requirement": "previewWithdraw MUST round up.",
|
|
29
|
+
"spec_location": { "type": "eip", "number": 4626, "section": "previewWithdraw", "url": "https://eips.ethereum.org/EIPS/eip-4626" },
|
|
30
|
+
"status": "CONFORMS | DEVIATES | PARTIAL | UNVERIFIABLE",
|
|
31
|
+
"finding": "What the code does vs what the spec demands, one or two sentences.",
|
|
32
|
+
"code_location": { "file": "src/Vault.sol", "line_start": 80, "line_end": 84 },
|
|
33
|
+
"severity_hint": "Info | Low | Medium | High | Critical"
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
You may read the code; you are the only Phase-1 agent whose job is the code-vs-spec comparison, because a spec's requirements are exact.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Synthesizer
|
|
2
|
+
|
|
3
|
+
You turn the independent readers' drafts into **one** consistent protocol model. You are the only agent that sees every draft, so your job is integration: merge duplicates, reconcile conflicting framings by checking the code, and fill cross-cluster gaps (a flow that starts in one cluster and ends in another).
|
|
4
|
+
|
|
5
|
+
**Inputs:** `.hex/model/drafts/*.json` (readers; docs and standards drafts are for the conformance checker, so read docs claims only for vocabulary), `.hex/facts.json`, `.hex/stats.json`, **(differential)** `.hex/diff.json` and `.hex/diff/changes.patch`.
|
|
6
|
+
**Exact relationships:** `npx --no-install hex facts query …` (function, callers, callees, readers, writers, reach, layout, linearization, entry-points).
|
|
7
|
+
|
|
8
|
+
## Write `.hex/model/protocol.json`
|
|
9
|
+
|
|
10
|
+
Every item carries `claim_id` (keep the reader's id when one claim maps to it; mint `S-NNN` for new ones), `evidence` (`[{file, line_start, line_end}]`) and `status: "unverified"` (skeptics verify later). Function references are **exact facts ids** (`Vault.withdraw(uint256)`); `npx --no-install hex model validate` rejects unknown ids.
|
|
11
|
+
|
|
12
|
+
```json
|
|
13
|
+
{
|
|
14
|
+
"generated_at": "<ISO>",
|
|
15
|
+
"summary": "One paragraph: what the protocol does and for whom.",
|
|
16
|
+
"actors": [{ "claim_id": "", "id": "owner", "name": "Owner", "kind": "user|admin|keeper|guardian|external_protocol|other", "trust": "trusted|semi_trusted|untrusted", "powers": ["<fn id>"], "description": "", "evidence": [], "status": "unverified" }],
|
|
17
|
+
"assets": [{ "claim_id": "", "id": "usdc", "name": "USDC", "kind": "erc20|native|nft|shares|debt|other", "token": "", "held_by": ["Vault"], "moved_by": ["<fn id>"], "description": "", "evidence": [], "status": "unverified" }],
|
|
18
|
+
"privileges": [{ "claim_id": "", "actor": "<actor id>", "function": "<fn id>", "effect": "", "worst_case": "", "timelock": "", "evidence": [], "status": "unverified" }],
|
|
19
|
+
"trust_assumptions": [{ "claim_id": "", "text": "", "evidence": [], "status": "unverified" }],
|
|
20
|
+
"external_dependencies": [{ "claim_id": "", "id": "", "name": "", "kind": "oracle|dex|bridge|lending|token|other", "used_by": ["<fn id>"], "failure_modes": [""], "evidence": [], "status": "unverified" }],
|
|
21
|
+
"state_machines": [{ "claim_id": "", "id": "", "entity": "", "states": [""], "transitions": [{ "from": "", "to": "", "function": "<fn id>", "guard": "" }], "evidence": [], "status": "unverified" }],
|
|
22
|
+
"accounting": [{ "claim_id": "", "id": "", "name": "", "equation": "", "terms": [{ "term": "", "updated_by": [{ "function": "<fn id>", "direction": "increase|decrease|set" }] }], "evidence": [], "status": "unverified" }],
|
|
23
|
+
"risky_flows": [{ "claim_id": "", "id": "", "name": "", "entry": "<fn id>", "steps": [{ "actor": "", "contract": "", "function": "", "kind": "call|callback|oracle|transfer|state", "note": "" }], "risk": "", "evidence": [], "status": "unverified" }]
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Write `.hex/model/invariants.json`
|
|
28
|
+
|
|
29
|
+
From the readers' `invariant_candidates` plus what the accounting and state machines imply. Deduplicate; make each one precise and testable.
|
|
30
|
+
|
|
31
|
+
```json
|
|
32
|
+
{
|
|
33
|
+
"updated_at": "<ISO>",
|
|
34
|
+
"invariants": [
|
|
35
|
+
{ "id": "INV-001", "statement": "", "kind": "accounting|access|bound|monotonic|state-machine|liveness|economic", "scope": { "contracts": [""], "functions": ["<fn id>"] }, "evidence": [], "on_chain_enforced": false, "status": "proposed" }
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
All invariants start `proposed`; the auditor accepts them.
|
|
41
|
+
|
|
42
|
+
## Write `.hex/overview.md`
|
|
43
|
+
|
|
44
|
+
`# Protocol Overview: <Name>` + 2–3 paragraphs (what it does, the core mechanism, the key contracts and their roles, notable patterns: upgradeability, oracles, external dependencies) + `## Key Contracts` table (Contract | Type | nSLOC | Role, nSLOC from `stats.json`) + `## External Dependencies` + `## Architecture Notes`. Descriptive only: no findings, no speculation, no code snippets, no AI disclaimers.
|
|
45
|
+
|
|
46
|
+
## (differential) Write `.hex/diff-overview.md`
|
|
47
|
+
|
|
48
|
+
`# Changes: <base short> → <head short>`, then sections: **What changed and why** (from the diff and `git log --oneline <base>..<head> -- <scope>`), **Removed or replaced behavior**, **Storage layout** (every `storage_layout_changes` entry, and whether the contract sits behind a proxy), **Impacted flows** (impacted entry points grouped into user flows, and how the change reaches each). Descriptive, no findings.
|
|
49
|
+
|
|
50
|
+
Write leads you notice to the relevant contract with `npx --no-install hex note lead <Contract> --text "…" --source init-audit --source-ref <claim_id>`. Do not create cards.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 'Pre-validate new machine-generated cards (AI audit, AuditAgent, invariant violations) in parallel: PoC or refutation per card; conclusive cases move automatically, the rest wait for the auditor'
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Skill: Pre-validate
|
|
6
|
+
|
|
7
|
+
Machine-generated findings favour recall over precision. This skill puts every new `unverified` card through an independent validation by background agents, so the auditor triages conclusions ("6 reproduced, 5 refuted, 3 need you"), not raw claims. `/ai-audit` and `/ingest-aa-report` call it at the end; the auditor can also run it directly (`/prevalidate`, or `/prevalidate H-012 H-015`).
|
|
8
|
+
|
|
9
|
+
Use `npx --no-install hex …` for every Hex command.
|
|
10
|
+
|
|
11
|
+
## What may move on its own
|
|
12
|
+
|
|
13
|
+
The CLI enforces this; agents cannot override it:
|
|
14
|
+
|
|
15
|
+
- **Reproduced → Verified** only when the PoC **passes** and **asserts the impact**, and the finding **passes the reality gate** (it is true *and* a security issue, not by design, not self-inflicted, not out of scope).
|
|
16
|
+
- **Refuted → Rejected** only when **two independent refuter agents** both cite the code that blocks the attack.
|
|
17
|
+
- Everything else stays in **Potential** with its verdict (`uncertain`) and memo. The auditor decides.
|
|
18
|
+
|
|
19
|
+
Every auto-move is marked on the card and can be reverted from the board (or `npx --no-install hex issue revert-auto <id>`).
|
|
20
|
+
|
|
21
|
+
## Step 1 — Pick the cards
|
|
22
|
+
|
|
23
|
+
Arguments, if given; otherwise every tracking entry with `status: "unverified"` and no `validation` yet (`npx --no-install hex issue show <id>` shows it). Skip cards in Duplicate or Rejected. If there are none, say so and stop.
|
|
24
|
+
|
|
25
|
+
## Step 2 — Validate in parallel
|
|
26
|
+
|
|
27
|
+
Spawn one **validator** agent per card as background Agent calls, **at most 6 at a time** (start the next batch as earlier ones finish). Give each validator this brief, with the card id substituted:
|
|
28
|
+
|
|
29
|
+
> Validate card **{id}** in this Hex project. Read it with `npx --no-install hex issue show {id}`, the code it points to, and exact facts via `npx --no-install hex facts query …`. Also read the triage rules (`npx --no-install hex rules list`): a finding whose whole impact depends on a rule is not security-relevant.
|
|
30
|
+
>
|
|
31
|
+
> 1. **Correctness.** Trace the claimed path in the code. Find every guard, modifier, check and invariant that could stop it.
|
|
32
|
+
> 2. **Reality gate.** Is it security-relevant? Not by design, not a missing feature, not only self-inflicted by a trusted role, not defense-in-depth noise.
|
|
33
|
+
> 3. **PoC.** If it is correct and security-relevant, write a minimal PoC following the project's own test setup in `test/hex-pocs/{id}_<short>.t.sol` (Foundry; `.test.ts` for Hardhat). Assert the **impact** (funds lost, invariant broken, access gained), not just that a call succeeds, and log the economic impact. Run it (`forge test --match-path <file> -vv`) and iterate until it passes or you are convinced it cannot.
|
|
34
|
+
> 4. Write the memo to `.hex/validations/{id}_memo.md` (sections: Claim, Analysis, Protections evaluated, Reality gate, PoC, Verdict).
|
|
35
|
+
> 5. Record the result. Use exactly one of:
|
|
36
|
+
> - `npx --no-install hex issue validation {id} --verdict reproduced --by agent --poc <file> --poc-status passing --reality-gate --memo .hex/validations/{id}_memo.md --auto-move`
|
|
37
|
+
> - `npx --no-install hex issue validation {id} --verdict refuted --by agent --memo .hex/validations/{id}_memo.md` (a single refutation never moves the card)
|
|
38
|
+
> - `npx --no-install hex issue validation {id} --verdict uncertain --by agent --memo .hex/validations/{id}_memo.md`
|
|
39
|
+
>
|
|
40
|
+
> Do not move the card yourself and do not edit .hex JSON by hand.
|
|
41
|
+
|
|
42
|
+
## Step 3 — Second refuter
|
|
43
|
+
|
|
44
|
+
For every card a validator **refuted**, spawn a second, **independent** refuter that does not see the first memo: the same brief, plus "Look for the strongest reason this finding is NOT real; cite the exact code." If it also refutes, record both:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
npx --no-install hex issue validation <id> --verdict refuted --by agent --refuters 2 --memo .hex/validations/<id>_memo.md --auto-move
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
(Append the second refuter's reasoning to the memo first.) If the two disagree, record `--verdict uncertain` with both arguments in the memo.
|
|
51
|
+
|
|
52
|
+
## Step 4 — Summary
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
Pre-validation — N cards
|
|
56
|
+
- R reproduced → Verified (auto): H-…, H-…
|
|
57
|
+
- X refuted → Rejected (auto, 2 refuters): H-…
|
|
58
|
+
- U uncertain → still in Potential: H-…
|
|
59
|
+
Review the auto-moves on the Board; revert any with one click.
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Then, for each uncertain card, one line on what it needs from the auditor.
|
|
@@ -4,7 +4,6 @@ description: 'Two-way sync between local Hex findings and GitHub Issues — GitH
|
|
|
4
4
|
|
|
5
5
|
# Skill: Sync Issues
|
|
6
6
|
|
|
7
|
-
**Recommended model:** Sonnet
|
|
8
7
|
|
|
9
8
|
Hex's GitHub Issues integration. Hex never authenticates with GitHub — you authenticate once via `gh auth login` and this skill drives the `gh` CLI. One invocation runs both directions.
|
|
10
9
|
|
|
@@ -66,15 +65,15 @@ Extract severity from the title, and the four body fields. If a body is **blatan
|
|
|
66
65
|
**1c. Reconcile by issue number `#N`:**
|
|
67
66
|
- **A local finding already records `github.issue_number === N`** → it's the same issue; pull GitHub's content into it:
|
|
68
67
|
```bash
|
|
69
|
-
npx hex issue sync-set <local-H-id> --issue-number N --issue-url <url> --state <open|closed> \
|
|
68
|
+
npx --no-install hex issue sync-set <local-H-id> --issue-number N --issue-url <url> --state <open|closed> \
|
|
70
69
|
--title "<title-without-[Severity]>" --severity <Severity> \
|
|
71
70
|
--description-file /tmp/N_desc.md --recommendation-file /tmp/N_reco.md \
|
|
72
71
|
--resolution "<Status>" --update-from-client-file /tmp/N_update.md
|
|
73
72
|
```
|
|
74
73
|
- **No local finding has `#N`** (a teammate's hand-added issue, or one created outside Hex) → create a local finding for it, then sync-set:
|
|
75
74
|
```bash
|
|
76
|
-
ID=$(npx hex issue new --source github --source-ref N --title "<title>" --severity <Severity>)
|
|
77
|
-
npx hex issue sync-set "$ID" --issue-number N --issue-url <url> --state <open|closed> \
|
|
75
|
+
ID=$(npx --no-install hex issue new --source github --source-ref N --title "<title>" --severity <Severity>)
|
|
76
|
+
npx --no-install hex issue sync-set "$ID" --issue-number N --issue-url <url> --state <open|closed> \
|
|
78
77
|
--description-file /tmp/N_desc.md --recommendation-file /tmp/N_reco.md \
|
|
79
78
|
--resolution "<Status>" --update-from-client-file /tmp/N_update.md
|
|
80
79
|
```
|
|
@@ -83,33 +82,20 @@ Either way the card lands in the **Synced** column, locked. Reconcile strictly b
|
|
|
83
82
|
|
|
84
83
|
## Phase 1.5 — Dedup before push (GitHub is canonical)
|
|
85
84
|
|
|
86
|
-
Before pushing, guard against filing a finding that is already on GitHub (e.g. a teammate created it by hand, and you pulled it into Synced in Phase 1). For each **verified** local finding
|
|
87
|
-
|
|
88
|
-
| Signal | Compare |
|
|
89
|
-
|---|---|
|
|
90
|
-
| **contract** (boolean) | affected contract name |
|
|
91
|
-
| **function** (boolean) | affected function name |
|
|
92
|
-
| **root_cause** (`same`/`overlapping`/`different`) | the technical mechanism |
|
|
93
|
-
| **attack_vector** (`same`/`overlapping`/`different`) | what an attacker actually does |
|
|
94
|
-
|
|
95
|
-
A match is at least one of: `root_cause = same` AND `function = true`; or `root_cause = same` AND `contract = true` AND `attack_vector = same`; or `root_cause = overlapping` AND `function = true` AND `attack_vector = same`.
|
|
96
|
-
|
|
97
|
-
On match — the synced (on-GitHub) finding is canonical, so the local verified copy becomes the duplicate. Do **not** push it:
|
|
85
|
+
Before pushing, guard against filing a finding that is already on GitHub (e.g. a teammate created it by hand, and you pulled it into Synced in Phase 1). For each **verified** local finding with no `github.issue_number` yet:
|
|
98
86
|
|
|
99
87
|
```bash
|
|
100
|
-
npx hex issue
|
|
88
|
+
npx --no-install hex issue dedup <verified-H-id>
|
|
101
89
|
```
|
|
102
90
|
|
|
103
|
-
|
|
91
|
+
It lists candidates touching the same exact functions first and prints the match rules (one engine for every source). Judge only **synced** candidates here. On a match, the synced (on-GitHub) finding is canonical, so the local verified copy becomes the duplicate and is **not** pushed:
|
|
104
92
|
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
93
|
+
```bash
|
|
94
|
+
npx --no-install hex issue mark-duplicate <verified-H-id> --of <synced-H-id> \
|
|
95
|
+
--root-cause <same|overlapping|different> --attack-vector <same|overlapping|different> \
|
|
96
|
+
[--same-contract] [--same-function] --reasoning "<one sentence>"
|
|
109
97
|
```
|
|
110
98
|
|
|
111
|
-
If `comparison.json` doesn't exist, create it with `{ "duplicates": [], "novel": [], "rejected": [] }`.
|
|
112
|
-
|
|
113
99
|
## Phase 2 — Push (verified local findings → GitHub)
|
|
114
100
|
|
|
115
101
|
Skip if `push_enabled` is false.
|
|
@@ -137,7 +123,7 @@ Stamp labels **only at creation** — never edit labels on an issue that already
|
|
|
137
123
|
Parse the returned URL for `#N`, then lock it into Synced and record the number:
|
|
138
124
|
|
|
139
125
|
```bash
|
|
140
|
-
npx hex issue sync-set <H-id> --issue-number N --issue-url <url> --state open
|
|
126
|
+
npx --no-install hex issue sync-set <H-id> --issue-number N --issue-url <url> --state open
|
|
141
127
|
```
|
|
142
128
|
|
|
143
129
|
From now on the finding is identified by `#N`; the next pull matches it by number, so it never duplicates.
|
|
@@ -4,11 +4,11 @@ description: "Walk every Potential issue on the board and validate them one by o
|
|
|
4
4
|
|
|
5
5
|
# Skill: Validate All Findings
|
|
6
6
|
|
|
7
|
-
**Recommended model:** Opus
|
|
8
|
-
|
|
9
7
|
Runs `/validate-finding` over every issue currently in the **Potential** column, one at a time, so the auditor can clear the backlog in a single pass without naming each id.
|
|
10
8
|
|
|
11
|
-
Each issue gets `/validate-finding`'s full two-axis verdict — correctness **and** the Step-2.5 security-relevance gate. **`auditagent` / `github` findings skew recall-over-precision, so the realism gate is mandatory for them**; `manual` / `conformance` items already passed an auditor's eye and can lean lighter.
|
|
9
|
+
Each issue gets `/validate-finding`'s full two-axis verdict — correctness **and** the Step-2.5 security-relevance gate. **`auditagent` / `ai-audit` / `github` findings skew recall-over-precision, so the realism gate is mandatory for them**; `manual` / `conformance` items already passed an auditor's eye and can lean lighter.
|
|
10
|
+
|
|
11
|
+
**Machine-generated cards first go through `/prevalidate`.** If the Potential column holds `unverified` cards (AI audit, AuditAgent, invariant) that have no `validation` yet, offer to run `/prevalidate` on them first: it validates them in parallel with PoCs and moves the conclusive ones, so this interactive pass only sees what really needs the auditor. Cards that already carry an agent verdict show it; start from that memo (`.hex/validations/<id>_memo.md`) instead of from scratch.
|
|
12
12
|
|
|
13
13
|
## Step 1 — Build the work list
|
|
14
14
|
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Validate any potential finding on the board (manual / auditagent / conformance / github): check both correctness and security relevance, then route to Verified, Rejected, or leave Uncertain"
|
|
2
|
+
description: "Validate any potential finding on the board (manual / ai-audit / auditagent / conformance / github / prior-audit): check both correctness and security relevance, then route to Verified, Rejected, or leave Uncertain"
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
# Skill: Validate Finding
|
|
6
6
|
|
|
7
|
-
**Recommended model:** Opus
|
|
8
|
-
|
|
9
7
|
## What this skill does
|
|
10
8
|
|
|
11
9
|
Takes a single potential issue from the dashboard's Issues board and runs an independent validation pass on it. Source-agnostic — the issue can come from any of:
|
|
12
10
|
|
|
13
11
|
- **Manual** (`/write-finding`) — `source: "manual"`, `status: "pending_validation"`.
|
|
14
12
|
- **Auditagent** (`/ingest-aa-report`) — `source: "auditagent"`, `status: "unverified"`.
|
|
13
|
+
- **AI audit** (`/ai-audit`) — `source: "ai-audit"`, `status: "unverified"`.
|
|
14
|
+
- **Prior audit** (regressions found by `/init-audit` in a differential audit) — `source: "prior-audit"`, `status: "pending_validation"`.
|
|
15
15
|
- **Conformance** (materialized by `/init-audit`) — `source: "conformance"`, `status: "pending_validation"`.
|
|
16
16
|
- **GitHub** (teammate findings via `/sync-issues`) — `source: "github"`, `status: "pending_validation"`.
|
|
17
17
|
|
|
@@ -40,10 +40,14 @@ Once the issue is resolved, read:
|
|
|
40
40
|
- Source-specific raw data:
|
|
41
41
|
- `manual` → `<output_dir>/findings.json` (the full finding record).
|
|
42
42
|
- `auditagent` → `<output_dir>/ai-results/auditagent/findings.json` (the matching `findings[*]` entry).
|
|
43
|
+
- `ai-audit` → `<output_dir>/ai-results/ai-audit/findings.json` (the matching `findings[*]` entry; the scan's own write-up is in `<output_dir>/ai-audit/runs/<scan_stamp>/full-report.md`).
|
|
44
|
+
- `prior-audit` → `<output_dir>/previous-audit/findings.json` (the prior finding) and `previous-audit/review.json` (why it was judged a regression).
|
|
43
45
|
- `conformance` → `<output_dir>/spec-conformance.json` (the matching `items[*]` entry).
|
|
44
46
|
- `github` → `<output_dir>/external/github/findings.json` (the matching entry).
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
+
- The affected source files themselves (read them; do not rely on summaries).
|
|
48
|
+
- Exact relationships from the compiler facts: `npx --no-install hex facts query function|callers|callees|readers|writers|reach <ref>` (who can reach the vulnerable code, who else writes the state it depends on).
|
|
49
|
+
- The protocol model (`.hex/model/protocol.json`): trust assumptions and privileges, which decide many reality-gate calls.
|
|
50
|
+
- The triage rules: `npx --no-install hex rules list`. A finding whose whole impact depends on a rule (trusted role, out-of-scope token type, known issue) is not security-relevant.
|
|
47
51
|
|
|
48
52
|
## Validation pass
|
|
49
53
|
|
|
@@ -67,7 +71,7 @@ For conformance items, the "claim" is `spec_text` + the finding paragraph — i.
|
|
|
67
71
|
|
|
68
72
|
### 2.5 Reality gate — is it security-relevant?
|
|
69
73
|
|
|
70
|
-
Correctness is not enough. AI scanners (and sometimes teammates) surface claims that are **factually true but not security issues** — by-design behavior, missing features, defense-in-depth nice-to-haves, or risks only the deployer can inflict on themselves. This is the precision pass. **Run it for every finding; treat it as mandatory for `source: auditagent | github`** (those skew recall-over-precision). `manual` / `conformance` items already passed an auditor's eye, so they can lean lighter.
|
|
74
|
+
Correctness is not enough. AI scanners (and sometimes teammates) surface claims that are **factually true but not security issues** — by-design behavior, missing features, defense-in-depth nice-to-haves, or risks only the deployer can inflict on themselves. This is the precision pass. **Run it for every finding; treat it as mandatory for `source: auditagent | ai-audit | github`** (those skew recall-over-precision). `manual` / `conformance` items already passed an auditor's eye, so they can lean lighter.
|
|
71
75
|
|
|
72
76
|
For a claim you found **true**, run these five checks — each one pushes toward *not-security-relevant*:
|
|
73
77
|
|
|
@@ -92,35 +96,35 @@ Combine the two axes — correctness (Step 2) and security relevance (Step 2.5):
|
|
|
92
96
|
|
|
93
97
|
**Verified — true and security-relevant:**
|
|
94
98
|
|
|
95
|
-
1.
|
|
96
|
-
> The finding appears **VALID and security-relevant**. How would you like to proceed?
|
|
97
|
-
>
|
|
98
|
-
> 1. Generate a full PoC test, then promote to Verified.
|
|
99
|
-
> 2. Accept with rational verification only — validation memo, no PoC.
|
|
100
|
-
>
|
|
101
|
-
> Reply **1** or **2**.
|
|
99
|
+
1. **Write a PoC. This is the default.** Follow the `generate-poc` flow: read the project's test setup, write `test/hex-pocs/<id>_<name>.t.sol` (or `.test.ts`), assert the **impact**, run it, and iterate until it passes. The PoC is what fix review re-runs later to prove the fix.
|
|
102
100
|
|
|
103
|
-
2. **
|
|
101
|
+
2. **Memo-only is the exception.** Skip the PoC only when one cannot reasonably exist (an off-chain or governance-process issue, a pure spec deviation with no exploit, an Info-level code-quality finding), and say why in the memo.
|
|
104
102
|
|
|
105
|
-
3. **
|
|
103
|
+
3. **Record the result on the card:**
|
|
104
|
+
```bash
|
|
105
|
+
npx --no-install hex issue validation <id> --verdict reproduced --by auditor \
|
|
106
|
+
--poc test/hex-pocs/<id>_<name>.t.sol --poc-status passing --memo .hex/validations/<id>_memo.md
|
|
107
|
+
# memo-only:
|
|
108
|
+
npx --no-install hex issue validation <id> --verdict valid_no_poc --by auditor --memo .hex/validations/<id>_memo.md
|
|
109
|
+
```
|
|
106
110
|
|
|
107
111
|
4. **Calibrate severity — don't inherit it.** The source's severity (especially AuditAgent's) is a *hypothesis*, not authoritative. Re-derive it from realistic impact × likelihood; many technically-true findings collapse to Info. A finding whose worst case is self-inflicted or chain-conditional must say so and re-rate accordingly.
|
|
108
112
|
|
|
109
|
-
5. **Persist via the CLI — do not hand-edit `findings.json` or `tracking.json`.** The `hex issue` command is the single source of truth for board mutations; it materializes a `findings.json` entry from the source record (conformance / auditagent / github) when one does not exist yet, and routes fields correctly. Write the validation memo and the recommendation to temp files, then:
|
|
113
|
+
5. **Persist via the CLI — do not hand-edit `findings.json` or `tracking.json`.** The `hex issue` command is the single source of truth for board mutations; it materializes a `findings.json` entry from the source record (conformance / auditagent / ai-audit / github / prior-audit) when one does not exist yet, and routes fields correctly. Write the validation memo and the recommendation to temp files, then:
|
|
110
114
|
|
|
111
115
|
```bash
|
|
112
116
|
# Land the editable fields (materializes a finding for conformance/auditagent/github ids):
|
|
113
|
-
npx hex issue patch <id> \
|
|
117
|
+
npx --no-install hex issue patch <id> \
|
|
114
118
|
--severity <Severity> \
|
|
115
119
|
--description-file <output_dir>/validations/<id>_memo.md \
|
|
116
120
|
--recommendation-file /tmp/<id>_reco.md
|
|
117
121
|
# Promote to Verified:
|
|
118
|
-
npx hex issue move <id> --to verified
|
|
122
|
+
npx --no-install hex issue move <id> --to verified
|
|
119
123
|
```
|
|
120
124
|
|
|
121
125
|
For a memo-only verdict, the same two commands apply (the PoC fields just stay unset). For `--description-file`, you may pass either the memo or a dedicated description file; prefer a clean description file if the memo is long.
|
|
122
126
|
|
|
123
|
-
Any description you write must be **structured, readable prose** (no markdown headings), not a single dense block. Split it into short paragraphs that separate how the code is supposed to work (expected behavior / the spec), what is wrong (the flaw), and the impact, and include a fenced ```` ```solidity ```` block of the offending code. Do not introduce paragraphs with bold section labels (`**Summary**:`/`**Impact**:`/`**Details**:`/`**Affected code**:`) — the separation is paragraph breaks, not headers. **Backtick every Solidity identifier**, writing functions as `` `functionName(...)` `` with literal `(...)` and contracts/variables/constants in plain backticks; never leave a bare identifier in the prose. Keep each paragraph tight (no padding), and add a 1–2 sentence hedged recommendation. This matches the finding template used by the dashboard copy and the GitHub issue body. If the affected files are missing or wrong, set them with `--file` (repeatable) rather than narrating them in the description: `npx hex issue patch <id> --file src/Foo.sol [--file src/Bar.sol]`.
|
|
127
|
+
Any description you write must be **structured, readable prose** (no markdown headings), not a single dense block. Split it into short paragraphs that separate how the code is supposed to work (expected behavior / the spec), what is wrong (the flaw), and the impact, and include a fenced ```` ```solidity ```` block of the offending code. Do not introduce paragraphs with bold section labels (`**Summary**:`/`**Impact**:`/`**Details**:`/`**Affected code**:`) — the separation is paragraph breaks, not headers. **Backtick every Solidity identifier**, writing functions as `` `functionName(...)` `` with literal `(...)` and contracts/variables/constants in plain backticks; never leave a bare identifier in the prose. Keep each paragraph tight (no padding), and add a 1–2 sentence hedged recommendation. This matches the finding template used by the dashboard copy and the GitHub issue body. If the affected files are missing or wrong, set them with `--file` (repeatable) rather than narrating them in the description: `npx --no-install hex issue patch <id> --file src/Foo.sol [--file src/Bar.sol]`.
|
|
124
128
|
|
|
125
129
|
**A conformance-sourced (or auditagent/github) finding must be rewritten to the exact same standard as a manual `/write-finding` finding** — do not pass the raw source text through. AuditAgent findings in particular arrive as one long unformatted paragraph; reshape them into the structured, backticked, snippet-bearing form above. Specifically, the prose you land must obey the report-facing content rules:
|
|
126
130
|
- **Structure + identifiers:** short expected/flaw/impact paragraphs, a ```solidity snippet, every identifier backticked and functions as `` `name(...)` `` (as above).
|
|
@@ -138,20 +142,21 @@ Combine the two axes — correctness (Step 2) and security relevance (Step 2.5):
|
|
|
138
142
|
>
|
|
139
143
|
> Would you like to change the severity? Reply with the new severity (Critical / High / Medium / Low / Info), or **no** to keep it.
|
|
140
144
|
|
|
141
|
-
7. If the user provides a new severity, run `npx hex issue patch <id> --severity <NewSeverity>`.
|
|
145
|
+
7. If the user provides a new severity, run `npx --no-install hex issue patch <id> --severity <NewSeverity>`.
|
|
142
146
|
|
|
143
147
|
**Rejected — true but not a security issue (by-design / informational):**
|
|
144
148
|
|
|
145
149
|
The claim is correct, but Step 2.5 says it isn't a vuln worth reporting (self-inflicted, design decision, missing feature, defense-in-depth noise). This is **not** the same as "incorrect" — give it its own disposition so it's distinguishable from a false positive and AuditAgent gets honest feedback.
|
|
146
150
|
|
|
147
|
-
1. Write the memo with `Disposition: by-design` (or `informational`) and the Step-2.5 reasoning.
|
|
148
|
-
2.
|
|
151
|
+
1. Write the memo with `Disposition: by-design` (or `informational`) and the Step-2.5 reasoning, and record it: `npx --no-install hex issue validation <id> --verdict refuted --by auditor --memo .hex/validations/<id>_memo.md`.
|
|
152
|
+
2. **Propose a triage rule** when the reason is general (a trusted role, an out-of-scope token type, a deliberate design choice), so AI runs stop raising the same class. Ask the auditor once, with AskUserQuestion: "Add a triage rule: *<one sentence>*?". On yes: `npx --no-install hex rules add --kind <trusted_role|out_of_scope|by_design|known_issue> --text "<sentence>" --from <id>`.
|
|
153
|
+
3. Mark the disposition and move it:
|
|
149
154
|
```bash
|
|
150
|
-
npx hex issue patch <id> --resolution Acknowledged
|
|
151
|
-
npx hex issue move <id> --to rejected
|
|
155
|
+
npx --no-install hex issue patch <id> --resolution Acknowledged
|
|
156
|
+
npx --no-install hex issue move <id> --to rejected
|
|
152
157
|
```
|
|
153
158
|
`Acknowledged` on a Rejected card means "AA was right, but it's by-design / not a security issue" — the board shows a **By-design** chip. (A Rejected card with *no* resolution = factually incorrect; see below.)
|
|
154
|
-
|
|
159
|
+
4. Do NOT write a finding body or carry it into the report.
|
|
155
160
|
|
|
156
161
|
**Rejected — incorrect (false positive):**
|
|
157
162
|
|
|
@@ -160,13 +165,13 @@ The claim is factually wrong. Explain why:
|
|
|
160
165
|
- Are the preconditions impossible? Why?
|
|
161
166
|
- Is the impact assessment wrong? What actually happens?
|
|
162
167
|
|
|
163
|
-
|
|
168
|
+
Record and move it with **no** resolution (the board shows an **Invalid** chip): `npx --no-install hex issue validation <id> --verdict refuted --by auditor --memo .hex/validations/<id>_memo.md`, then `npx --no-install hex issue move <id> --to rejected`. Do NOT write a finding body — the memo records the reasoning.
|
|
164
169
|
|
|
165
170
|
**Uncertain:**
|
|
166
171
|
|
|
167
172
|
1. List specific questions that need manual investigation.
|
|
168
173
|
2. State what would confirm or deny the issue.
|
|
169
|
-
3. Leave the column as-is (no `hex issue move`). Record
|
|
174
|
+
3. Leave the column as-is (no `hex issue move`). Record it: `npx --no-install hex issue validation <id> --verdict uncertain --by auditor --memo .hex/validations/<id>_memo.md` and the open questions: `npx --no-install hex issue patch <id> --notes "<open questions>"`.
|
|
170
175
|
|
|
171
176
|
## Output: validation memo
|
|
172
177
|
|
|
@@ -175,7 +180,7 @@ Write `<output_dir>/validations/<id>_memo.md` (always — for valid, invalid, an
|
|
|
175
180
|
```markdown
|
|
176
181
|
# Finding Validation: <ID> — <Title>
|
|
177
182
|
|
|
178
|
-
**Source:** <manual | auditagent | conformance | github>
|
|
183
|
+
**Source:** <manual | ai-audit | auditagent | conformance | github | prior-audit>
|
|
179
184
|
**Original record:** <pointer to the specific record being validated — e.g., findings.json#F003, ai-results/auditagent/findings.json#AA-014>
|
|
180
185
|
**Correctness:** True / False / Uncertain
|
|
181
186
|
**Security relevance:** security-relevant / not-security-relevant / n/a
|
|
@@ -4,7 +4,6 @@ description: "Write a manual issue as a Potential card on the board (pending val
|
|
|
4
4
|
|
|
5
5
|
# Skill: Write Finding
|
|
6
6
|
|
|
7
|
-
**Recommended model:** Sonnet
|
|
8
7
|
|
|
9
8
|
This skill records a manual issue that the auditor has spotted during review. The issue lands on the dashboard's Issues board as a **Potential** card with `status: "pending_validation"` and `source: "manual"`. The auditor promotes it to Verified later (via drag-drop on the board, or by running `/validate-finding <id>` which produces a validation memo and optional PoC).
|
|
10
9
|
|
|
@@ -17,11 +16,11 @@ Read:
|
|
|
17
16
|
|
|
18
17
|
## Step 0: Duplicate gate
|
|
19
18
|
|
|
20
|
-
|
|
19
|
+
After filling the card (Actions steps 1 and 2), run `npx --no-install hex issue dedup <id>`: it finds the exact functions from the description's code block and backticked names, lists existing cards on those functions, and prints the match rules. Run it on the filled card; on an empty one it finds no functions and misses every duplicate. If a candidate matches under those rules, warn the auditor:
|
|
21
20
|
|
|
22
21
|
> "This appears to duplicate `<H-NNN>`: \<title\>. Proceed anyway?"
|
|
23
22
|
|
|
24
|
-
|
|
23
|
+
If they say it is a duplicate, record it with `npx --no-install hex issue mark-duplicate <id> --of <H-NNN> …` (signals as the rules describe) instead of filling in the fields. Otherwise continue.
|
|
25
24
|
|
|
26
25
|
## Severity Guide
|
|
27
26
|
|
|
@@ -133,17 +132,19 @@ Persist through the `hex issue` CLI — never hand-edit `findings.json` or `trac
|
|
|
133
132
|
|
|
134
133
|
1. **Create the issue** — pass `--file` once per affected file so the **File(s)** line is populated (repeatable). Do **not** narrate the affected files in the description instead:
|
|
135
134
|
```bash
|
|
136
|
-
npx hex issue new --source manual --title "<concise title>" --severity <Severity> \
|
|
135
|
+
npx --no-install hex issue new --source manual --title "<concise title>" --severity <Severity> \
|
|
137
136
|
--file src/Foo.sol [--file src/Bar.sol]
|
|
138
137
|
```
|
|
139
138
|
This prints the allocated id (e.g. `H-007`). Capture it.
|
|
140
139
|
|
|
141
140
|
2. **Fill the fields** (write the description and recommendation to temp files first, to preserve newlines):
|
|
142
141
|
```bash
|
|
143
|
-
npx hex issue patch <id> --description-file /tmp/<id>_desc.md --recommendation-file /tmp/<id>_reco.md
|
|
142
|
+
npx --no-install hex issue patch <id> --description-file /tmp/<id>_desc.md --recommendation-file /tmp/<id>_reco.md
|
|
144
143
|
```
|
|
145
144
|
The description must be self-contained (what the issue is, why it exists, the impact) and follow the **Description format** rules below. The recommendation is prose only, hedged (`Consider...`), no code.
|
|
146
145
|
|
|
146
|
+
3. **Run the duplicate gate** (Step 0) on the filled card.
|
|
147
|
+
|
|
147
148
|
There is **no source-file annotation** — Hex does not write `@audit-issue` comments into the client's `.sol` files. The board and the finding record are the single place the issue lives.
|
|
148
149
|
|
|
149
150
|
## After writing
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { ConfigSchema, StatsSchema,
|
|
2
|
+
import { ConfigSchema, StatsSchema, FindingsSchema, TrackingSchema, ComparisonSchema, SpecConformanceSchema, EvidenceSchema, ConfidenceSchema, DerivedFromSchema, PerContractStatsSchema, TestCoverageSchema, FindingSchema, TrackingEntrySchema, TrackingSourceSchema, ResolutionSchema, SpecItemSchema, DiffSchema, DiffChangeSchema, ImpactedFunctionSchema, StorageLayoutChangeSchema, PriorFindingsSchema, PriorReviewSchema, FactsSchema, FactsFunctionSchema, FactsContractSchema, FactsStateVarSchema, FactsStorageSlotSchema, ProtocolModelSchema, InvariantSchema, InvariantsFileSchema, TriageRuleSchema, ValidationSchema, FunctionReviewSchema, DiagramSpecSchema, DiagramIndexEntrySchema, FixReviewSchema, FixReviewCardSchema } from '../core/schema.js';
|
|
3
3
|
export type Config = z.infer<typeof ConfigSchema>;
|
|
4
4
|
export type Stats = z.infer<typeof StatsSchema>;
|
|
5
|
-
export type Deps = z.infer<typeof DepsSchema>;
|
|
6
|
-
export type AccessControl = z.infer<typeof AccessControlSchema>;
|
|
7
|
-
export type StateVars = z.infer<typeof StateVarsSchema>;
|
|
8
|
-
export type ExternalCalls = z.infer<typeof ExternalCallsSchema>;
|
|
9
5
|
export type Findings = z.infer<typeof FindingsSchema>;
|
|
10
6
|
export type Tracking = z.infer<typeof TrackingSchema>;
|
|
11
7
|
export type Comparison = z.infer<typeof ComparisonSchema>;
|
|
@@ -15,16 +11,30 @@ export type Confidence = z.infer<typeof ConfidenceSchema>;
|
|
|
15
11
|
export type DerivedFrom = z.infer<typeof DerivedFromSchema>;
|
|
16
12
|
export type PerContractStats = z.infer<typeof PerContractStatsSchema>;
|
|
17
13
|
export type TestCoverage = z.infer<typeof TestCoverageSchema>;
|
|
18
|
-
export type GraphNode = z.infer<typeof GraphNodeSchema>;
|
|
19
|
-
export type Cluster = z.infer<typeof ClusterSchema>;
|
|
20
|
-
export type AccessFunction = z.infer<typeof AccessFunctionSchema>;
|
|
21
|
-
export type RoleFunctionRef = z.infer<typeof RoleFunctionRefSchema>;
|
|
22
|
-
export type Role = z.infer<typeof RoleSchema>;
|
|
23
|
-
export type StateVariable = z.infer<typeof StateVariableSchema>;
|
|
24
|
-
export type ExternalCall = z.infer<typeof ExternalCallSchema>;
|
|
25
14
|
export type Finding = z.infer<typeof FindingSchema>;
|
|
26
15
|
export type TrackingEntry = z.infer<typeof TrackingEntrySchema>;
|
|
27
16
|
export type TrackingSource = z.infer<typeof TrackingSourceSchema>;
|
|
28
17
|
export type Resolution = z.infer<typeof ResolutionSchema>;
|
|
29
18
|
export type SpecItem = z.infer<typeof SpecItemSchema>;
|
|
19
|
+
export type Diff = z.infer<typeof DiffSchema>;
|
|
20
|
+
export type DiffChange = z.infer<typeof DiffChangeSchema>;
|
|
21
|
+
export type ImpactedFunction = z.infer<typeof ImpactedFunctionSchema>;
|
|
22
|
+
export type StorageLayoutChange = z.infer<typeof StorageLayoutChangeSchema>;
|
|
23
|
+
export type PriorFindings = z.infer<typeof PriorFindingsSchema>;
|
|
24
|
+
export type PriorReview = z.infer<typeof PriorReviewSchema>;
|
|
25
|
+
export type Facts = z.infer<typeof FactsSchema>;
|
|
26
|
+
export type FactsFunction = z.infer<typeof FactsFunctionSchema>;
|
|
27
|
+
export type FactsContract = z.infer<typeof FactsContractSchema>;
|
|
28
|
+
export type FactsStateVar = z.infer<typeof FactsStateVarSchema>;
|
|
29
|
+
export type FactsStorageSlot = z.infer<typeof FactsStorageSlotSchema>;
|
|
30
|
+
export type ProtocolModel = z.infer<typeof ProtocolModelSchema>;
|
|
31
|
+
export type Invariant = z.infer<typeof InvariantSchema>;
|
|
32
|
+
export type InvariantsFile = z.infer<typeof InvariantsFileSchema>;
|
|
33
|
+
export type TriageRule = z.infer<typeof TriageRuleSchema>;
|
|
34
|
+
export type Validation = z.infer<typeof ValidationSchema>;
|
|
35
|
+
export type FunctionReview = z.infer<typeof FunctionReviewSchema>;
|
|
36
|
+
export type DiagramSpec = z.infer<typeof DiagramSpecSchema>;
|
|
37
|
+
export type DiagramIndexEntry = z.infer<typeof DiagramIndexEntrySchema>;
|
|
38
|
+
export type FixReview = z.infer<typeof FixReviewSchema>;
|
|
39
|
+
export type FixReviewCard = z.infer<typeof FixReviewCardSchema>;
|
|
30
40
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,EACf,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAClD,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAChD,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AACtD,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AACtD,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AACtD,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AACpD,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AACtD,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAC9C,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAChD,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACxD,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACxD,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hex-audit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "AI-enhanced manual review for Solidity audits: exact compiler facts, a verified protocol model, attacker agents that must prove their findings, and a review workspace next to Claude Code",
|
|
6
6
|
"bin": {
|
|
7
7
|
"hex": "./dist/index.js"
|
|
8
8
|
},
|
|
@@ -50,14 +50,16 @@
|
|
|
50
50
|
"node": ">=18.0.0"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
+
"@dagrejs/dagre": "^3.1.3",
|
|
53
54
|
"@dnd-kit/core": "^6.1.0",
|
|
55
|
+
"@excalidraw/excalidraw": "^0.18.1",
|
|
56
|
+
"@modelcontextprotocol/sdk": "^1.32.2",
|
|
54
57
|
"@solidity-parser/parser": "^0.18.0",
|
|
55
|
-
"@tanstack/react-table": "^8.17.0",
|
|
56
58
|
"chalk": "^5.3.0",
|
|
57
59
|
"chokidar": "^3.6.0",
|
|
58
60
|
"commander": "^12.1.0",
|
|
59
61
|
"glob": "^10.3.10",
|
|
60
|
-
"
|
|
62
|
+
"minimatch": "^9.0.4",
|
|
61
63
|
"next": "14.2.5",
|
|
62
64
|
"next-themes": "^0.4.6",
|
|
63
65
|
"ora": "^8.0.1",
|