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,142 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# setup_fuzz_profile.sh — Create a [profile.fuzz] in foundry.toml that disables
|
|
3
|
+
# via_ir when possible, falling back to via_ir with optimizer_runs=0 when the
|
|
4
|
+
# codebase requires IR (stack too deep).
|
|
5
|
+
#
|
|
6
|
+
# This exists because via_ir causes Medusa's branch-level coverage to be
|
|
7
|
+
# deflated: the IR optimizer merges/eliminates branches, so reported coverage
|
|
8
|
+
# is lower than actual source-level coverage.
|
|
9
|
+
#
|
|
10
|
+
# Usage: setup_fuzz_profile.sh <PROJECT_ROOT>
|
|
11
|
+
#
|
|
12
|
+
# Output (stdout, last line):
|
|
13
|
+
# FUZZ_PROFILE=no-ir — compiled without via_ir, coverage is accurate
|
|
14
|
+
# FUZZ_PROFILE=ir-no-opt — needs via_ir but optimizer_runs=0, ~10% deflation
|
|
15
|
+
# FUZZ_PROFILE=default — both attempts failed, using default profile
|
|
16
|
+
#
|
|
17
|
+
# Exit codes:
|
|
18
|
+
# 0 — fuzz profile created (or not needed)
|
|
19
|
+
# 1 — could not create a working fuzz profile, fall back to default
|
|
20
|
+
|
|
21
|
+
set -euo pipefail
|
|
22
|
+
|
|
23
|
+
PROJECT_ROOT="${1:-.}"
|
|
24
|
+
|
|
25
|
+
if [ ! -f "$PROJECT_ROOT/foundry.toml" ]; then
|
|
26
|
+
echo "ERROR: foundry.toml not found in $PROJECT_ROOT"
|
|
27
|
+
exit 1
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
TOML="$PROJECT_ROOT/foundry.toml"
|
|
31
|
+
|
|
32
|
+
# ――――――――――――――――――――――――― Check if via_ir is enabled ―――――――――――――――――――――――――
|
|
33
|
+
|
|
34
|
+
# Match via_ir = true or via-ir = true (TOML allows both)
|
|
35
|
+
if ! grep -qE '^\s*via[_-]ir\s*=\s*true' "$TOML"; then
|
|
36
|
+
echo "via_ir is not enabled — no fuzz profile needed."
|
|
37
|
+
echo "FUZZ_PROFILE=no-ir"
|
|
38
|
+
exit 0
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
echo "via_ir = true detected in foundry.toml."
|
|
42
|
+
|
|
43
|
+
# ――――――――――――――――――――――――― Check for existing fuzz profile ―――――――――――――――――――――――――
|
|
44
|
+
|
|
45
|
+
if grep -qE '^\[profile\.fuzz\]' "$TOML"; then
|
|
46
|
+
echo "[profile.fuzz] already exists in foundry.toml — skipping creation."
|
|
47
|
+
# Try to determine what mode it's in
|
|
48
|
+
if grep -A5 '^\[profile\.fuzz\]' "$TOML" | grep -qE 'via[_-]ir\s*=\s*false'; then
|
|
49
|
+
echo "Existing fuzz profile has via_ir = false."
|
|
50
|
+
# Verify it compiles
|
|
51
|
+
if cd "$PROJECT_ROOT" && FOUNDRY_PROFILE=fuzz forge build 2>/dev/null; then
|
|
52
|
+
echo "FUZZ_PROFILE=no-ir"
|
|
53
|
+
exit 0
|
|
54
|
+
else
|
|
55
|
+
echo "Existing fuzz profile does not compile — will attempt to fix."
|
|
56
|
+
fi
|
|
57
|
+
else
|
|
58
|
+
echo "Existing fuzz profile does not disable via_ir."
|
|
59
|
+
echo "FUZZ_PROFILE=ir-no-opt"
|
|
60
|
+
exit 0
|
|
61
|
+
fi
|
|
62
|
+
fi
|
|
63
|
+
|
|
64
|
+
# ――――――――――――――――――――――――― Attempt 1: Disable via_ir ―――――――――――――――――――――――――
|
|
65
|
+
|
|
66
|
+
echo ""
|
|
67
|
+
echo "Attempt 1: Adding [profile.fuzz] with via_ir = false ..."
|
|
68
|
+
|
|
69
|
+
# Remove any previous fuzz profile block we may have partially written
|
|
70
|
+
# (defensive — only removes our marker-bounded block)
|
|
71
|
+
sed -i.bak '/^# >>> fizz fuzz profile/,/^# <<< fizz fuzz profile/d' "$TOML"
|
|
72
|
+
rm -f "$TOML.bak"
|
|
73
|
+
|
|
74
|
+
cat >> "$TOML" <<'FUZZ_BLOCK'
|
|
75
|
+
|
|
76
|
+
# >>> fizz fuzz profile
|
|
77
|
+
[profile.fuzz]
|
|
78
|
+
via_ir = false
|
|
79
|
+
# <<< fizz fuzz profile
|
|
80
|
+
FUZZ_BLOCK
|
|
81
|
+
|
|
82
|
+
echo "Trying: FOUNDRY_PROFILE=fuzz forge build ..."
|
|
83
|
+
cd "$PROJECT_ROOT"
|
|
84
|
+
BUILD_OUTPUT=$(FOUNDRY_PROFILE=fuzz forge build 2>&1) && BUILD_EXIT=0 || BUILD_EXIT=$?
|
|
85
|
+
|
|
86
|
+
if [ "$BUILD_EXIT" -eq 0 ]; then
|
|
87
|
+
echo "Compilation succeeded without via_ir."
|
|
88
|
+
echo "FUZZ_PROFILE=no-ir"
|
|
89
|
+
exit 0
|
|
90
|
+
fi
|
|
91
|
+
|
|
92
|
+
# Check if it's a stack-too-deep error
|
|
93
|
+
if echo "$BUILD_OUTPUT" | grep -qi "stack too deep\|Stack too deep"; then
|
|
94
|
+
echo "Stack too deep — codebase requires via_ir."
|
|
95
|
+
else
|
|
96
|
+
echo "Build failed (not stack-too-deep). Output:"
|
|
97
|
+
echo "$BUILD_OUTPUT" | tail -20
|
|
98
|
+
echo ""
|
|
99
|
+
echo "Attempting fallback anyway..."
|
|
100
|
+
fi
|
|
101
|
+
|
|
102
|
+
# ――――――――――――――――――――――――― Attempt 2: via_ir + optimizer_runs=0 ―――――――――――――――――――――――――
|
|
103
|
+
|
|
104
|
+
echo ""
|
|
105
|
+
echo "Attempt 2: [profile.fuzz] with via_ir = true, optimizer_runs = 0 ..."
|
|
106
|
+
|
|
107
|
+
# Replace the fuzz profile block
|
|
108
|
+
sed -i.bak '/^# >>> fizz fuzz profile/,/^# <<< fizz fuzz profile/d' "$TOML"
|
|
109
|
+
rm -f "$TOML.bak"
|
|
110
|
+
|
|
111
|
+
cat >> "$TOML" <<'FUZZ_BLOCK'
|
|
112
|
+
|
|
113
|
+
# >>> fizz fuzz profile
|
|
114
|
+
[profile.fuzz]
|
|
115
|
+
via_ir = true
|
|
116
|
+
optimizer = false
|
|
117
|
+
optimizer_runs = 0
|
|
118
|
+
# <<< fizz fuzz profile
|
|
119
|
+
FUZZ_BLOCK
|
|
120
|
+
|
|
121
|
+
echo "Trying: FOUNDRY_PROFILE=fuzz forge build ..."
|
|
122
|
+
BUILD_OUTPUT=$(FOUNDRY_PROFILE=fuzz forge build 2>&1) && BUILD_EXIT=0 || BUILD_EXIT=$?
|
|
123
|
+
|
|
124
|
+
if [ "$BUILD_EXIT" -eq 0 ]; then
|
|
125
|
+
echo "Compilation succeeded with via_ir + optimizer disabled."
|
|
126
|
+
echo "FUZZ_PROFILE=ir-no-opt"
|
|
127
|
+
exit 0
|
|
128
|
+
fi
|
|
129
|
+
|
|
130
|
+
# ――――――――――――――――――――――――― Both failed ―――――――――――――――――――――――――
|
|
131
|
+
|
|
132
|
+
echo ""
|
|
133
|
+
echo "Both attempts failed. Removing fuzz profile block."
|
|
134
|
+
sed -i.bak '/^# >>> fizz fuzz profile/,/^# <<< fizz fuzz profile/d' "$TOML"
|
|
135
|
+
rm -f "$TOML.bak"
|
|
136
|
+
|
|
137
|
+
echo "Build output from last attempt:"
|
|
138
|
+
echo "$BUILD_OUTPUT" | tail -20
|
|
139
|
+
echo ""
|
|
140
|
+
echo "Falling back to default profile. Coverage numbers will be deflated."
|
|
141
|
+
echo "FUZZ_PROFILE=default"
|
|
142
|
+
exit 1
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity >=0.6.2 <0.9.0;
|
|
3
|
+
|
|
4
|
+
contract ForceSendETH {
|
|
5
|
+
constructor(address dst) payable {
|
|
6
|
+
// Use assembly to stay compatible across Solidity versions where
|
|
7
|
+
// selfdestruct is deprecated or removed
|
|
8
|
+
assembly {
|
|
9
|
+
selfdestruct(dst)
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/// @notice Represents an actor interacting with the system
|
|
15
|
+
contract Actor {
|
|
16
|
+
constructor() payable {
|
|
17
|
+
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
receive() external payable {}
|
|
21
|
+
|
|
22
|
+
function forceSendETH(address recipient, uint256 amount) public {
|
|
23
|
+
new ForceSendETH{value: amount}(recipient);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// ――――――――――――――――――― Flash loan borrower ――――――――――――――――――――
|
|
27
|
+
|
|
28
|
+
function onFlashLoan(address initiator, address token, uint256 amount, uint256 fee, bytes calldata data)
|
|
29
|
+
external
|
|
30
|
+
returns (bytes32)
|
|
31
|
+
{
|
|
32
|
+
// Implement here flash loan logic, if needed
|
|
33
|
+
return keccak256("ERC3156FlashBorrower.onFlashLoan");
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// ――――――――――――――――――――― ERC-721 receiver ―――――――――――――――――――――
|
|
37
|
+
|
|
38
|
+
function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data)
|
|
39
|
+
external
|
|
40
|
+
returns (bytes4)
|
|
41
|
+
{
|
|
42
|
+
return this.onERC721Received.selector;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// ―――――――――――――――――――― ERC-1155 receiver ―――――――――――――――――――――
|
|
46
|
+
|
|
47
|
+
function onERC1155Received(address operator, address from, uint256 id, uint256 value, bytes calldata data)
|
|
48
|
+
external
|
|
49
|
+
returns (bytes4)
|
|
50
|
+
{
|
|
51
|
+
return this.onERC1155Received.selector;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function onERC1155BatchReceived(
|
|
55
|
+
address operator,
|
|
56
|
+
address from,
|
|
57
|
+
uint256[] calldata ids,
|
|
58
|
+
uint256[] calldata values,
|
|
59
|
+
bytes calldata data
|
|
60
|
+
) external returns (bytes4) {
|
|
61
|
+
return this.onERC1155BatchReceived.selector;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity >=0.6.2 <0.9.0;
|
|
3
|
+
|
|
4
|
+
import {Actor} from "./Actor.sol";
|
|
5
|
+
import {Clamp} from "./utils/Clamp.sol";
|
|
6
|
+
import {DecimalPrinter} from "./utils/DecimalPrinter.sol";
|
|
7
|
+
import {Deployer} from "./utils/Deployer.sol";
|
|
8
|
+
import {vm} from "./utils/Hevm.sol";
|
|
9
|
+
import {Logger} from "./utils/Logger.sol";
|
|
10
|
+
import {Math} from "./utils/Math.sol";
|
|
11
|
+
import {StringUtils} from "./utils/StringUtils.sol";
|
|
12
|
+
import {EnumerableSet} from "./utils/EnumerableSet.sol";
|
|
13
|
+
|
|
14
|
+
/// @notice Base contract with state variables and setup functions
|
|
15
|
+
abstract contract Base is StringUtils, Clamp, Deployer, Math {
|
|
16
|
+
using DecimalPrinter for uint256;
|
|
17
|
+
|
|
18
|
+
string[] internal ACTOR_LABELS = ["Alice", "Bob", "Charlie"];
|
|
19
|
+
uint256 internal constant BLOCK_INTERVAL = 12 seconds;
|
|
20
|
+
uint256 internal constant INITIAL_ETH_BALANCE = 1_000 ether;
|
|
21
|
+
uint256 internal constant INITIAL_TOKEN_BALANCE = 10_000;
|
|
22
|
+
|
|
23
|
+
// ―――――――――――――――――――――――――― Ghosts ――――――――――――――――――――――――――
|
|
24
|
+
|
|
25
|
+
struct Ghosts {
|
|
26
|
+
uint256 _placeholder;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
Ghosts internal ghosts;
|
|
30
|
+
|
|
31
|
+
// ―――――――――――――――――――――――――― Actors ――――――――――――――――――――――――――
|
|
32
|
+
|
|
33
|
+
address[] internal actors;
|
|
34
|
+
address internal actor;
|
|
35
|
+
address internal admin;
|
|
36
|
+
|
|
37
|
+
modifier asActor() virtual {
|
|
38
|
+
vm.startPrank(actor);
|
|
39
|
+
_;
|
|
40
|
+
vm.stopPrank();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
modifier asAdmin() virtual {
|
|
44
|
+
vm.startPrank(admin);
|
|
45
|
+
_;
|
|
46
|
+
vm.stopPrank();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// ―――――――――――――――――――――――― Contracts ―――――――――――――――――――――――――
|
|
50
|
+
|
|
51
|
+
// FIXME: Contract instances go here, e.g.:
|
|
52
|
+
// Foo public foo;
|
|
53
|
+
|
|
54
|
+
// ―――――――――――――――――――――――――― Setup ―――――――――――――――――――――――――――
|
|
55
|
+
|
|
56
|
+
function setup() internal {
|
|
57
|
+
// FIXME: Add initial setup (e.g. deploy contracts, set initial state, etc.)
|
|
58
|
+
|
|
59
|
+
setupActors();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function setupActors() internal {
|
|
63
|
+
admin = address(this);
|
|
64
|
+
vm.label(admin, "Admin");
|
|
65
|
+
|
|
66
|
+
for (uint256 i; i < ACTOR_LABELS.length; i++) {
|
|
67
|
+
address _actor = address(new Actor{value: INITIAL_ETH_BALANCE}());
|
|
68
|
+
actors.push(_actor);
|
|
69
|
+
if (ACTOR_LABELS.length > i) {
|
|
70
|
+
vm.label(_actor, ACTOR_LABELS[i]);
|
|
71
|
+
}
|
|
72
|
+
// FIXME: Add any required actor setup (e.g. minting tokens, setting allowances, etc.)
|
|
73
|
+
// If needed, Actor's constructor can also be used for this purpose
|
|
74
|
+
}
|
|
75
|
+
actor = actors[0];
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// ――――――――――――――――――――――――― Helpers ――――――――――――――――――――――――――
|
|
79
|
+
|
|
80
|
+
// Maps an arbitrary address to an actor address
|
|
81
|
+
function toActor(address addy) internal view returns (address) {
|
|
82
|
+
return actors[uint256(uint160(addy)) % actors.length];
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Maps an arbitrary address to an actor address that is different from the current actor
|
|
86
|
+
function toActorNotCurrent(address addy) internal view returns (address) {
|
|
87
|
+
address _actor = actors[uint256(uint160(addy)) % actors.length];
|
|
88
|
+
if (_actor == actor) {
|
|
89
|
+
_actor = actors[(uint256(uint160(addy)) + 1) % actors.length];
|
|
90
|
+
}
|
|
91
|
+
return _actor;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Sums the native token balances of all actors
|
|
95
|
+
function sumActorsBalances() internal view returns (uint256 sumOfBalances) {
|
|
96
|
+
for (uint256 i; i < actors.length; i++) {
|
|
97
|
+
sumOfBalances += actors[i].balance;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Sums the ERC-20 token balances of all actors for a given token
|
|
102
|
+
function sumActorsERC20Balances(address _token) internal view returns (uint256 sumOfBalances) {
|
|
103
|
+
for (uint256 i; i < actors.length; i++) {
|
|
104
|
+
bytes memory data = abi.encodeWithSignature("balanceOf(address)", actors[i]);
|
|
105
|
+
(bool success, bytes memory result) = _token.staticcall(data);
|
|
106
|
+
require(success, "sumActorsERC20Balances: failed to get balance");
|
|
107
|
+
sumOfBalances += abi.decode(result, (uint256));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function skipBlocks(uint256 blocks) internal {
|
|
112
|
+
vm.roll(block.number + blocks);
|
|
113
|
+
vm.warp(block.timestamp + blocks * BLOCK_INTERVAL);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function skipTime(uint256 time) internal {
|
|
117
|
+
uint256 blocks = (time + BLOCK_INTERVAL - 1) / BLOCK_INTERVAL;
|
|
118
|
+
vm.roll(block.number + blocks);
|
|
119
|
+
vm.warp(block.timestamp + time);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity >=0.6.2 <0.9.0;
|
|
3
|
+
|
|
4
|
+
import {Test} from "forge-std/Test.sol";
|
|
5
|
+
import {console} from "forge-std/console.sol";
|
|
6
|
+
import {Handlers} from "./handlers/Handlers.sol";
|
|
7
|
+
|
|
8
|
+
/// @notice Contract to be used for quick testing with Foundry
|
|
9
|
+
contract FoundryTester is Test, Handlers {
|
|
10
|
+
modifier asActor() override {
|
|
11
|
+
vm.startPrank(actor);
|
|
12
|
+
_;
|
|
13
|
+
vm.stopPrank();
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function setUp() public {
|
|
17
|
+
setup();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// forge test --match-test test_sequence -vvv
|
|
21
|
+
function test_sequence() public {
|
|
22
|
+
// Add here call sequence to Handler's functions to reproduce failing property
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// ── Violation Repros (auto-generated by Step 11) ──────────────────
|
|
26
|
+
// Each test_repro_* function below replays a shrunk fuzzer call
|
|
27
|
+
// sequence that violated a property. Run all with:
|
|
28
|
+
// forge test --match-contract FoundryTester -vvv
|
|
29
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity >=0.6.2 <0.9.0;
|
|
3
|
+
|
|
4
|
+
import {Snapshots} from "./Snapshots.sol";
|
|
5
|
+
import {PropertiesAsserts} from "./utils/PropertiesAsserts.sol";
|
|
6
|
+
|
|
7
|
+
/// @notice Contains the functions that check the properties (invariants)
|
|
8
|
+
abstract contract Properties is PropertiesAsserts, Snapshots {
|
|
9
|
+
|
|
10
|
+
// ―――――――――――――――――――― Global properties ―――――――――――――――――――――
|
|
11
|
+
// These properties must always hold after any function call.
|
|
12
|
+
// They MUST BE PUBLIC so that fuzzers can find and call them.
|
|
13
|
+
|
|
14
|
+
// ――――――――――――――――――― Specific properties ――――――――――――――――――――
|
|
15
|
+
// These properties must hold after specific function calls.
|
|
16
|
+
// They MUST BE INTERNAL and called at the end of the relevant handlers.
|
|
17
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Fizz Suite
|
|
2
|
+
|
|
3
|
+
## What Is Here
|
|
4
|
+
|
|
5
|
+
- `Base.sol`: shared setup, deployed contract references, actors, helpers, and ghost state
|
|
6
|
+
- `Snapshots.sol`: before/after state capture used by properties
|
|
7
|
+
- `Properties.sol`: global and function-specific invariants
|
|
8
|
+
- `handlers/`: protocol actions exposed to the fuzzers
|
|
9
|
+
- `harness/`: (optional) harness contracts that inherit from target contracts to expose private/internal state needed by properties
|
|
10
|
+
- `utils/`: shared helper libraries, assertions, clamping logic, math helpers, deploy helpers, logging, and mocks
|
|
11
|
+
- `FuzzTester.sol`: main Echidna/Medusa fuzzing entry point
|
|
12
|
+
- `FoundryTester.sol`: Foundry harness for quick debugging and local repros
|
|
13
|
+
|
|
14
|
+
## Inheritance Chain
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
Base (is StringUtils, Clamp, Deployer, Math)
|
|
18
|
+
└─► Snapshots (is Base)
|
|
19
|
+
└─► Properties (is PropertiesAsserts, Snapshots)
|
|
20
|
+
└─► <Contract>Handler (is Properties) — one per target contract
|
|
21
|
+
└─► Handlers (is <all handlers>) — aggregator + actor switching
|
|
22
|
+
├─► FuzzTester (is Handlers) — Echidna/Medusa entry point
|
|
23
|
+
└─► FoundryTester (is Test, Handlers) — Foundry quick debug/PoC entry point
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Related Paths Outside This Directory
|
|
27
|
+
|
|
28
|
+
- `../../fizz_data/`: extracted ABI inventory, entry-point selection, protocol-understanding notes, corpora, logs, and coverage outputs
|
|
29
|
+
- `../../echidna.yaml`: Echidna config
|
|
30
|
+
- `../../medusa.json`: Medusa config
|
|
31
|
+
|
|
32
|
+
## How To Run
|
|
33
|
+
|
|
34
|
+
From the project root:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
forge build
|
|
38
|
+
forge test --match-contract FoundryTester
|
|
39
|
+
echidna . --contract FuzzTester --config echidna.yaml
|
|
40
|
+
medusa fuzz --config medusa.json
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## How To Read The Suite
|
|
44
|
+
|
|
45
|
+
Recommended order:
|
|
46
|
+
|
|
47
|
+
1. `README.md`
|
|
48
|
+
2. `Base.sol`
|
|
49
|
+
3. `handlers/Handlers.sol`
|
|
50
|
+
4. individual handler files under `handlers/`
|
|
51
|
+
5. `Snapshots.sol`
|
|
52
|
+
6. `Properties.sol`
|
|
53
|
+
7. `harness/` (if present) — to understand what private/internal state is exposed and why
|
|
54
|
+
8. `utils/` when you need to understand helper behavior or mocks
|
|
55
|
+
9. `FuzzTester.sol`
|
|
56
|
+
10. `FoundryTester.sol`
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity >=0.6.2 <0.9.0;
|
|
3
|
+
|
|
4
|
+
import {Base} from "./Base.sol";
|
|
5
|
+
|
|
6
|
+
/// @notice Used to take snapshots of the state before and after a function call
|
|
7
|
+
abstract contract Snapshots is Base {
|
|
8
|
+
struct State {
|
|
9
|
+
uint256 _placeholder;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
State internal stateBefore;
|
|
13
|
+
State internal stateAfter;
|
|
14
|
+
|
|
15
|
+
function _takeSnapshot(State storage state) private {
|
|
16
|
+
state._placeholder = actor.balance;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function snapshotBefore() internal {
|
|
20
|
+
_takeSnapshot(stateBefore);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function snapshotAfter() internal {
|
|
24
|
+
_takeSnapshot(stateAfter);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
testMode: "assertion"
|
|
2
|
+
prefix: "property_"
|
|
3
|
+
seqLen: 100
|
|
4
|
+
testLimit: 50000
|
|
5
|
+
balanceContract: 0xffffffffffffffffffffffffffffffffffffffffffffffff
|
|
6
|
+
coverage: true
|
|
7
|
+
corpusDir: "fizz_data/corpus_echidna"
|
|
8
|
+
cryticArgs: ["--foundry-compile-all"]
|
|
9
|
+
contractAddr: "0x7FA9385bE102ac3EAc297483Dd6233D62b3e1496"
|
|
10
|
+
deployer: "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38"
|
|
11
|
+
# output format (comment out for TUI)
|
|
12
|
+
format: "text"
|
|
13
|
+
# Hide solc stderr output and additional information during the testing.
|
|
14
|
+
quiet: false
|
|
15
|
+
stopOnFail: false
|
|
16
|
+
disableSlither: false
|
|
17
|
+
|
|
18
|
+
# https://secure-contracts.com/program-analysis/echidna/configuration.html
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity >=0.6.2 <0.9.0;
|
|
3
|
+
|
|
4
|
+
import "../Base.sol";
|
|
5
|
+
|
|
6
|
+
/// @notice Inherits from all the handlers to expose all entry points in a single contract.
|
|
7
|
+
/// Manages environment changes (e.g. current actor, current token, mocks setup, etc.).
|
|
8
|
+
abstract contract Handlers
|
|
9
|
+
{
|
|
10
|
+
function setCurrentActor(uint256 entropy) public {
|
|
11
|
+
actor = actors[entropy % actors.length];
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fuzzing": {
|
|
3
|
+
"workers": 10,
|
|
4
|
+
"workerResetLimit": 50,
|
|
5
|
+
"timeout": 0,
|
|
6
|
+
"testLimit": 500000,
|
|
7
|
+
"callSequenceLength": 100,
|
|
8
|
+
"corpusDirectory": "fizz_data/corpus_medusa",
|
|
9
|
+
"coverageEnabled": true,
|
|
10
|
+
"deploymentOrder": [
|
|
11
|
+
"FuzzTester"
|
|
12
|
+
],
|
|
13
|
+
"targetContracts": [
|
|
14
|
+
"FuzzTester"
|
|
15
|
+
],
|
|
16
|
+
"targetContractsBalances": [
|
|
17
|
+
"0xffffffffffffffffffffffffffffffffffffffffffffffff"
|
|
18
|
+
],
|
|
19
|
+
"constructorArgs": {},
|
|
20
|
+
"deployerAddress": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38",
|
|
21
|
+
"senderAddresses": [
|
|
22
|
+
"0x10000",
|
|
23
|
+
"0x20000",
|
|
24
|
+
"0x30000"
|
|
25
|
+
],
|
|
26
|
+
"blockNumberDelayMax": 60480,
|
|
27
|
+
"blockTimestampDelayMax": 604800,
|
|
28
|
+
"blockGasLimit": 125000000,
|
|
29
|
+
"transactionGasLimit": 12500000,
|
|
30
|
+
"testing": {
|
|
31
|
+
"stopOnFailedTest": false,
|
|
32
|
+
"stopOnFailedContractMatching": false,
|
|
33
|
+
"stopOnNoTests": true,
|
|
34
|
+
"testAllContracts": false,
|
|
35
|
+
"traceAll": false,
|
|
36
|
+
"assertionTesting": {
|
|
37
|
+
"enabled": true,
|
|
38
|
+
"testViewMethods": true,
|
|
39
|
+
"panicCodeConfig": {
|
|
40
|
+
"failOnCompilerInsertedPanic": false,
|
|
41
|
+
"failOnAssertion": true,
|
|
42
|
+
"failOnArithmeticUnderflow": false,
|
|
43
|
+
"failOnDivideByZero": false,
|
|
44
|
+
"failOnEnumTypeConversionOutOfBounds": false,
|
|
45
|
+
"failOnIncorrectStorageAccess": false,
|
|
46
|
+
"failOnPopEmptyArray": false,
|
|
47
|
+
"failOnOutOfBoundsArrayAccess": false,
|
|
48
|
+
"failOnAllocateTooMuchMemory": false,
|
|
49
|
+
"failOnCallUninitializedVariable": false
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"propertyTesting": {
|
|
53
|
+
"enabled": true,
|
|
54
|
+
"testPrefixes": [
|
|
55
|
+
"property_"
|
|
56
|
+
]
|
|
57
|
+
},
|
|
58
|
+
"optimizationTesting": {
|
|
59
|
+
"enabled": false,
|
|
60
|
+
"testPrefixes": [
|
|
61
|
+
"optimize_"
|
|
62
|
+
]
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"chainConfig": {
|
|
66
|
+
"codeSizeCheckDisabled": true,
|
|
67
|
+
"cheatCodes": {
|
|
68
|
+
"cheatCodesEnabled": true,
|
|
69
|
+
"enableFFI": false
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
"compilation": {
|
|
74
|
+
"platform": "crytic-compile",
|
|
75
|
+
"platformConfig": {
|
|
76
|
+
"target": ".",
|
|
77
|
+
"solcVersion": "",
|
|
78
|
+
"exportDirectory": "fizz_data/crytic-export",
|
|
79
|
+
"args": [
|
|
80
|
+
"--foundry-compile-all"
|
|
81
|
+
]
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"slither": {
|
|
85
|
+
"enabled": true,
|
|
86
|
+
"cachePath": "fizz_data/slither_results.json"
|
|
87
|
+
},
|
|
88
|
+
"logging": {
|
|
89
|
+
"level": "info",
|
|
90
|
+
"logDirectory": "fizz_data/logs_medusa",
|
|
91
|
+
"noColor": false
|
|
92
|
+
}
|
|
93
|
+
}
|