hex-audit 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +105 -0
- package/DEMO.md +141 -0
- package/README.md +378 -0
- package/dashboard/.next/BUILD_ID +1 -0
- package/dashboard/.next/app-build-manifest.json +99 -0
- package/dashboard/.next/app-path-routes-manifest.json +1 -0
- package/dashboard/.next/build-manifest.json +32 -0
- package/dashboard/.next/cache/.tsbuildinfo +1 -0
- package/dashboard/.next/cache/webpack/client-production/0.pack +0 -0
- package/dashboard/.next/cache/webpack/client-production/index.pack +0 -0
- package/dashboard/.next/cache/webpack/edge-server-production/0.pack +0 -0
- package/dashboard/.next/cache/webpack/edge-server-production/index.pack +0 -0
- package/dashboard/.next/cache/webpack/server-production/0.pack +0 -0
- package/dashboard/.next/cache/webpack/server-production/1.pack +0 -0
- package/dashboard/.next/cache/webpack/server-production/2.pack +0 -0
- package/dashboard/.next/cache/webpack/server-production/index.pack +0 -0
- package/dashboard/.next/cache/webpack/server-production/index.pack.old +0 -0
- package/dashboard/.next/export-marker.json +1 -0
- package/dashboard/.next/images-manifest.json +1 -0
- package/dashboard/.next/next-minimal-server.js.nft.json +1 -0
- package/dashboard/.next/next-server.js.nft.json +1 -0
- package/dashboard/.next/package.json +1 -0
- package/dashboard/.next/prerender-manifest.js +1 -0
- package/dashboard/.next/prerender-manifest.json +1 -0
- package/dashboard/.next/react-loadable-manifest.json +300 -0
- package/dashboard/.next/required-server-files.json +1 -0
- package/dashboard/.next/routes-manifest.json +1 -0
- package/dashboard/.next/server/app/_not-found/page.js +1 -0
- package/dashboard/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/dashboard/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
- package/dashboard/.next/server/app/_not-found.html +1 -0
- package/dashboard/.next/server/app/_not-found.meta +6 -0
- package/dashboard/.next/server/app/_not-found.rsc +12 -0
- package/dashboard/.next/server/app/access/page.js +1 -0
- package/dashboard/.next/server/app/access/page.js.nft.json +1 -0
- package/dashboard/.next/server/app/access/page_client-reference-manifest.js +1 -0
- package/dashboard/.next/server/app/access.html +1 -0
- package/dashboard/.next/server/app/access.meta +5 -0
- package/dashboard/.next/server/app/access.rsc +8 -0
- package/dashboard/.next/server/app/api/code/route.js +1 -0
- package/dashboard/.next/server/app/api/code/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/flows/route.js +1 -0
- package/dashboard/.next/server/app/api/flows/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/flows.body +1 -0
- package/dashboard/.next/server/app/api/flows.meta +1 -0
- package/dashboard/.next/server/app/api/github-status/route.js +1 -0
- package/dashboard/.next/server/app/api/github-status/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/issues/[id]/move/route.js +1 -0
- package/dashboard/.next/server/app/api/issues/[id]/move/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/issues/[id]/route.js +1 -0
- package/dashboard/.next/server/app/api/issues/[id]/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/mermaid/route.js +1 -0
- package/dashboard/.next/server/app/api/mermaid/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/progress/route.js +1 -0
- package/dashboard/.next/server/app/api/progress/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/api/watch/route.js +3 -0
- package/dashboard/.next/server/app/api/watch/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/calls/page.js +1 -0
- package/dashboard/.next/server/app/calls/page.js.nft.json +1 -0
- package/dashboard/.next/server/app/calls/page_client-reference-manifest.js +1 -0
- package/dashboard/.next/server/app/calls.html +1 -0
- package/dashboard/.next/server/app/calls.meta +5 -0
- package/dashboard/.next/server/app/calls.rsc +8 -0
- package/dashboard/.next/server/app/conformance/page.js +1 -0
- package/dashboard/.next/server/app/conformance/page.js.nft.json +1 -0
- package/dashboard/.next/server/app/conformance/page_client-reference-manifest.js +1 -0
- package/dashboard/.next/server/app/conformance.html +1 -0
- package/dashboard/.next/server/app/conformance.meta +5 -0
- package/dashboard/.next/server/app/conformance.rsc +8 -0
- package/dashboard/.next/server/app/diagram/page.js +1 -0
- package/dashboard/.next/server/app/diagram/page.js.nft.json +1 -0
- package/dashboard/.next/server/app/diagram/page_client-reference-manifest.js +1 -0
- package/dashboard/.next/server/app/diagram.html +1 -0
- package/dashboard/.next/server/app/diagram.meta +5 -0
- package/dashboard/.next/server/app/diagram.rsc +10 -0
- package/dashboard/.next/server/app/flows/page.js +1 -0
- package/dashboard/.next/server/app/flows/page.js.nft.json +1 -0
- package/dashboard/.next/server/app/flows/page_client-reference-manifest.js +1 -0
- package/dashboard/.next/server/app/flows.html +1 -0
- package/dashboard/.next/server/app/flows.meta +5 -0
- package/dashboard/.next/server/app/flows.rsc +10 -0
- package/dashboard/.next/server/app/functions/page.js +1 -0
- package/dashboard/.next/server/app/functions/page.js.nft.json +1 -0
- package/dashboard/.next/server/app/functions/page_client-reference-manifest.js +1 -0
- package/dashboard/.next/server/app/functions.html +1 -0
- package/dashboard/.next/server/app/functions.meta +5 -0
- package/dashboard/.next/server/app/functions.rsc +8 -0
- package/dashboard/.next/server/app/icon.svg/route.js +12 -0
- package/dashboard/.next/server/app/icon.svg/route.js.nft.json +1 -0
- package/dashboard/.next/server/app/icon.svg.body +18 -0
- package/dashboard/.next/server/app/icon.svg.meta +1 -0
- package/dashboard/.next/server/app/index.html +1 -0
- package/dashboard/.next/server/app/index.meta +5 -0
- package/dashboard/.next/server/app/index.rsc +9 -0
- package/dashboard/.next/server/app/issues/page.js +1 -0
- package/dashboard/.next/server/app/issues/page.js.nft.json +1 -0
- package/dashboard/.next/server/app/issues/page_client-reference-manifest.js +1 -0
- package/dashboard/.next/server/app/issues.html +1 -0
- package/dashboard/.next/server/app/issues.meta +5 -0
- package/dashboard/.next/server/app/issues.rsc +8 -0
- package/dashboard/.next/server/app/page.js +20 -0
- package/dashboard/.next/server/app/page.js.nft.json +1 -0
- package/dashboard/.next/server/app/page_client-reference-manifest.js +1 -0
- package/dashboard/.next/server/app/progress/page.js +1 -0
- package/dashboard/.next/server/app/progress/page.js.nft.json +1 -0
- package/dashboard/.next/server/app/progress/page_client-reference-manifest.js +1 -0
- package/dashboard/.next/server/app/progress.html +1 -0
- package/dashboard/.next/server/app/progress.meta +5 -0
- package/dashboard/.next/server/app/progress.rsc +8 -0
- package/dashboard/.next/server/app/stats/page.js +1 -0
- package/dashboard/.next/server/app/stats/page.js.nft.json +1 -0
- package/dashboard/.next/server/app/stats/page_client-reference-manifest.js +1 -0
- package/dashboard/.next/server/app/stats.html +1 -0
- package/dashboard/.next/server/app/stats.meta +5 -0
- package/dashboard/.next/server/app/stats.rsc +8 -0
- package/dashboard/.next/server/app-paths-manifest.json +22 -0
- package/dashboard/.next/server/chunks/431.js +1 -0
- package/dashboard/.next/server/chunks/557.js +1 -0
- package/dashboard/.next/server/chunks/645.js +6 -0
- package/dashboard/.next/server/chunks/649.js +2 -0
- package/dashboard/.next/server/chunks/665.js +13 -0
- package/dashboard/.next/server/chunks/786.js +12 -0
- package/dashboard/.next/server/chunks/818.js +6 -0
- package/dashboard/.next/server/chunks/916.js +2 -0
- package/dashboard/.next/server/chunks/font-manifest.json +1 -0
- package/dashboard/.next/server/font-manifest.json +1 -0
- package/dashboard/.next/server/functions-config-manifest.json +1 -0
- package/dashboard/.next/server/interception-route-rewrite-manifest.js +1 -0
- package/dashboard/.next/server/middleware-build-manifest.js +1 -0
- package/dashboard/.next/server/middleware-manifest.json +6 -0
- package/dashboard/.next/server/middleware-react-loadable-manifest.js +1 -0
- package/dashboard/.next/server/next-font-manifest.js +1 -0
- package/dashboard/.next/server/next-font-manifest.json +1 -0
- package/dashboard/.next/server/pages/404.html +1 -0
- package/dashboard/.next/server/pages/500.html +1 -0
- package/dashboard/.next/server/pages/_app.js +1 -0
- package/dashboard/.next/server/pages/_app.js.nft.json +1 -0
- package/dashboard/.next/server/pages/_document.js +1 -0
- package/dashboard/.next/server/pages/_document.js.nft.json +1 -0
- package/dashboard/.next/server/pages/_error.js +1 -0
- package/dashboard/.next/server/pages/_error.js.nft.json +1 -0
- package/dashboard/.next/server/pages-manifest.json +1 -0
- package/dashboard/.next/server/server-reference-manifest.js +1 -0
- package/dashboard/.next/server/server-reference-manifest.json +1 -0
- package/dashboard/.next/server/webpack-runtime.js +1 -0
- package/dashboard/.next/static/0IZAlhEwk5-v4myUvWKBd/_buildManifest.js +1 -0
- package/dashboard/.next/static/0IZAlhEwk5-v4myUvWKBd/_ssgManifest.js +1 -0
- package/dashboard/.next/static/chunks/1.8868c4d131111be7.js +36 -0
- package/dashboard/.next/static/chunks/1015.3ab89142e5f44120.js +226 -0
- package/dashboard/.next/static/chunks/1151.b6ef5c786e587ed7.js +1 -0
- package/dashboard/.next/static/chunks/1199.a072929dbec89965.js +148 -0
- package/dashboard/.next/static/chunks/1375.d4d2f7fc9c9c2ff1.js +43 -0
- package/dashboard/.next/static/chunks/1799.83206776abbbf1fc.js +9 -0
- package/dashboard/.next/static/chunks/20154aaa.ccc347c04ab5ad4a.js +1 -0
- package/dashboard/.next/static/chunks/2077.7011a570c87aa7b1.js +1 -0
- package/dashboard/.next/static/chunks/2166.cc0fabeb2e89b840.js +215 -0
- package/dashboard/.next/static/chunks/2291.85a70cb0c228157b.js +29 -0
- package/dashboard/.next/static/chunks/2325.2c55cb9a6282ae3f.js +24 -0
- package/dashboard/.next/static/chunks/2383.62c035a052272594.js +1 -0
- package/dashboard/.next/static/chunks/2694.92bbe252063e4786.js +1 -0
- package/dashboard/.next/static/chunks/275.0d761aa0e5b030b8.js +34 -0
- package/dashboard/.next/static/chunks/2781.8536b644a480aede.js +93 -0
- package/dashboard/.next/static/chunks/2805.a8d71d2f92bb6ba9.js +1 -0
- package/dashboard/.next/static/chunks/2879.51436986f93981d9.js +1 -0
- package/dashboard/.next/static/chunks/3017.e55781da9dd32d37.js +1 -0
- package/dashboard/.next/static/chunks/3205-728c260fbb4f89c6.js +2 -0
- package/dashboard/.next/static/chunks/3236.dff44fa7961d9d5e.js +1 -0
- package/dashboard/.next/static/chunks/3480.9451396ad7ee7613.js +1 -0
- package/dashboard/.next/static/chunks/3626.ba1cf848a9f2e93d.js +64 -0
- package/dashboard/.next/static/chunks/3865.a432a7910a2f5281.js +90 -0
- package/dashboard/.next/static/chunks/3887.c22cbfa3f095826c.js +1 -0
- package/dashboard/.next/static/chunks/3924-4a05057b5450abe1.js +1 -0
- package/dashboard/.next/static/chunks/3948.fe3c7d758568d98b.js +287 -0
- package/dashboard/.next/static/chunks/4728.07d87640a3e7dd0d.js +24 -0
- package/dashboard/.next/static/chunks/4787.4e5f6a0e0e40a583.js +23 -0
- package/dashboard/.next/static/chunks/5060.baca226af35ed016.js +1 -0
- package/dashboard/.next/static/chunks/5284.f949ac90c95ff143.js +1 -0
- package/dashboard/.next/static/chunks/5715.1524bcc9591e180b.js +115 -0
- package/dashboard/.next/static/chunks/6014.700ae4969b64d728.js +104 -0
- package/dashboard/.next/static/chunks/6024.4d23707c65514679.js +79 -0
- package/dashboard/.next/static/chunks/6052.033a6f1013c666eb.js +141 -0
- package/dashboard/.next/static/chunks/6177.e5c84cfc4c0dea51.js +1 -0
- package/dashboard/.next/static/chunks/618f8807-547c5614e1318888.js +1 -0
- package/dashboard/.next/static/chunks/6434.9481771c33195d29.js +1 -0
- package/dashboard/.next/static/chunks/6468.f4a3e8fa6accc6da.js +77 -0
- package/dashboard/.next/static/chunks/6540.86f367d7390738d4.js +1 -0
- package/dashboard/.next/static/chunks/6549.4d0d472df96429a5.js +1 -0
- package/dashboard/.next/static/chunks/690f35d0.3e40ca0930e4bbdb.js +119 -0
- package/dashboard/.next/static/chunks/7020.831e16e26d91abc1.js +166 -0
- package/dashboard/.next/static/chunks/7397-f6f4dddc7a20bfc1.js +1 -0
- package/dashboard/.next/static/chunks/7498-ea83cb9e30ec5491.js +1 -0
- package/dashboard/.next/static/chunks/7802.89aec9ee11680850.js +80 -0
- package/dashboard/.next/static/chunks/7973.8b526f589aca5d84.js +79 -0
- package/dashboard/.next/static/chunks/7a04ac15.1c6cea694301806c.js +62 -0
- package/dashboard/.next/static/chunks/8216.1bead812eb126c35.js +5 -0
- package/dashboard/.next/static/chunks/8233babc.780b8e272eda298f.js +92 -0
- package/dashboard/.next/static/chunks/8452-e616b5f43bceb95f.js +13 -0
- package/dashboard/.next/static/chunks/8645.a5ca76f11edc9633.js +1 -0
- package/dashboard/.next/static/chunks/8928-60c623ee89d2e6ad.js +1 -0
- package/dashboard/.next/static/chunks/9173.2486ffca31131ec5.js +1 -0
- package/dashboard/.next/static/chunks/9178.469341860bf8caec.js +1 -0
- package/dashboard/.next/static/chunks/9466.e904660d38c03eea.js +1 -0
- package/dashboard/.next/static/chunks/9660.84a85811380c5f33.js +1 -0
- package/dashboard/.next/static/chunks/9717.6cf5c8c89403b651.js +1 -0
- package/dashboard/.next/static/chunks/9720.67d4d0d15a96d691.js +1 -0
- package/dashboard/.next/static/chunks/9811.65e1d080c2d256af.js +1 -0
- package/dashboard/.next/static/chunks/app/_not-found/page-548ab392d0e890d1.js +1 -0
- package/dashboard/.next/static/chunks/app/access/page-3668562e7464eb5d.js +1 -0
- package/dashboard/.next/static/chunks/app/calls/page-d07f5b8664cc8303.js +1 -0
- package/dashboard/.next/static/chunks/app/conformance/page-2fede1d7b5f9265d.js +1 -0
- package/dashboard/.next/static/chunks/app/diagram/page-b228444265546495.js +1 -0
- package/dashboard/.next/static/chunks/app/flows/page-fa67783d8cd79cab.js +1 -0
- package/dashboard/.next/static/chunks/app/functions/page-686f0296639133a3.js +1 -0
- package/dashboard/.next/static/chunks/app/issues/page-dc110d4cc0a5c398.js +1 -0
- package/dashboard/.next/static/chunks/app/layout-e7b50543ba216d12.js +1 -0
- package/dashboard/.next/static/chunks/app/page-a0f25953d4457935.js +1 -0
- package/dashboard/.next/static/chunks/app/progress/page-f07ac39d1d27b480.js +1 -0
- package/dashboard/.next/static/chunks/app/stats/page-db81f600a086f252.js +1 -0
- package/dashboard/.next/static/chunks/b7167ec1.7afbab6f609e3326.js +153 -0
- package/dashboard/.next/static/chunks/c7ea4e13.5effeeba6618bdb7.js +1 -0
- package/dashboard/.next/static/chunks/framework-cf6f5bdca6ba0184.js +33 -0
- package/dashboard/.next/static/chunks/main-70c6d841ad572657.js +1 -0
- package/dashboard/.next/static/chunks/main-app-9d2f6b8a47133e9b.js +1 -0
- package/dashboard/.next/static/chunks/pages/_app-6ad2b50514c24ab4.js +1 -0
- package/dashboard/.next/static/chunks/pages/_error-d5eb11c5c4626811.js +1 -0
- package/dashboard/.next/static/chunks/polyfills-78c92fac7aa8fdd8.js +1 -0
- package/dashboard/.next/static/chunks/webpack-08869f2b18792e51.js +1 -0
- package/dashboard/.next/static/css/e6cb67f77f13ae8e.css +3 -0
- package/dashboard/.next/static/media/0aa834ed78bf6d07-s.woff2 +0 -0
- 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/67957d42bae0796d-s.woff2 +0 -0
- package/dashboard/.next/static/media/875ae681bfde4580-s.woff2 +0 -0
- package/dashboard/.next/static/media/886030b0b59bc5a7-s.woff2 +0 -0
- package/dashboard/.next/static/media/939c4f875ee75fbb-s.woff2 +0 -0
- package/dashboard/.next/static/media/bb3ef058b751a6ad-s.p.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/.next/static/media/f911b923c6adde36-s.woff2 +0 -0
- package/dashboard/.next/trace +80 -0
- package/dashboard/.next/types/app/access/page.ts +79 -0
- package/dashboard/.next/types/app/api/code/route.ts +343 -0
- package/dashboard/.next/types/app/api/flows/route.ts +343 -0
- package/dashboard/.next/types/app/api/github-status/route.ts +343 -0
- package/dashboard/.next/types/app/api/issues/[id]/move/route.ts +343 -0
- package/dashboard/.next/types/app/api/issues/[id]/route.ts +343 -0
- package/dashboard/.next/types/app/api/mermaid/route.ts +343 -0
- package/dashboard/.next/types/app/api/progress/route.ts +343 -0
- package/dashboard/.next/types/app/api/watch/route.ts +343 -0
- package/dashboard/.next/types/app/calls/page.ts +79 -0
- package/dashboard/.next/types/app/conformance/page.ts +79 -0
- package/dashboard/.next/types/app/diagram/page.ts +79 -0
- package/dashboard/.next/types/app/flows/page.ts +79 -0
- package/dashboard/.next/types/app/functions/page.ts +79 -0
- package/dashboard/.next/types/app/issues/page.ts +79 -0
- package/dashboard/.next/types/app/page.ts +79 -0
- package/dashboard/.next/types/app/progress/page.ts +79 -0
- package/dashboard/.next/types/app/stats/page.ts +79 -0
- package/dashboard/.next/types/package.json +1 -0
- package/dashboard/app/access/AccessClient.tsx +402 -0
- package/dashboard/app/access/ReadOnlyFunctions.tsx +114 -0
- package/dashboard/app/access/page.tsx +118 -0
- package/dashboard/app/api/code/route.ts +35 -0
- package/dashboard/app/api/flows/route.ts +28 -0
- package/dashboard/app/api/github-status/route.ts +23 -0
- package/dashboard/app/api/issues/[id]/move/route.ts +74 -0
- package/dashboard/app/api/issues/[id]/route.ts +109 -0
- package/dashboard/app/api/mermaid/route.ts +25 -0
- package/dashboard/app/api/progress/route.ts +36 -0
- package/dashboard/app/api/watch/route.ts +52 -0
- package/dashboard/app/calls/CallsClient.tsx +170 -0
- package/dashboard/app/calls/page.tsx +50 -0
- package/dashboard/app/conformance/ConformanceTable.tsx +214 -0
- package/dashboard/app/conformance/page.tsx +179 -0
- package/dashboard/app/diagram/page.tsx +65 -0
- package/dashboard/app/flows/page.tsx +102 -0
- package/dashboard/app/functions/FunctionsClient.tsx +167 -0
- package/dashboard/app/functions/page.tsx +171 -0
- package/dashboard/app/globals.css +157 -0
- package/dashboard/app/icon.svg +18 -0
- package/dashboard/app/issues/IssuesBoardClient.tsx +636 -0
- package/dashboard/app/issues/page.tsx +239 -0
- package/dashboard/app/layout.tsx +40 -0
- package/dashboard/app/page.tsx +259 -0
- package/dashboard/app/progress/ProgressClient.tsx +333 -0
- package/dashboard/app/progress/page.tsx +118 -0
- package/dashboard/app/stats/StatsClient.tsx +452 -0
- package/dashboard/app/stats/page.tsx +43 -0
- package/dashboard/components/AutoRefresh.tsx +37 -0
- package/dashboard/components/CodeReference.tsx +129 -0
- package/dashboard/components/CommandPalette.tsx +135 -0
- package/dashboard/components/ConfidenceBadge.tsx +53 -0
- package/dashboard/components/DashboardLayout.tsx +450 -0
- package/dashboard/components/FilterableTable.tsx +293 -0
- package/dashboard/components/LiveStatus.tsx +99 -0
- package/dashboard/components/MarkdownRenderer.tsx +40 -0
- package/dashboard/components/MermaidViewer.tsx +267 -0
- package/dashboard/components/NotYetGenerated.tsx +32 -0
- package/dashboard/components/SeverityBadge.tsx +28 -0
- package/dashboard/components/SignalBars.tsx +27 -0
- package/dashboard/components/SortableTable.tsx +122 -0
- package/dashboard/lib/conformance-tokens.ts +49 -0
- package/dashboard/lib/data.ts +102 -0
- package/dashboard/lib/watcher.ts +45 -0
- package/dashboard/next-env.d.ts +5 -0
- package/dashboard/next.config.mjs +9 -0
- package/dashboard/postcss.config.cjs +6 -0
- package/dashboard/tailwind.config.ts +79 -0
- package/dashboard/tsconfig.json +21 -0
- package/dist/analysis/access-control.d.ts +24 -0
- package/dist/analysis/access-control.d.ts.map +1 -0
- package/dist/analysis/access-control.js +378 -0
- package/dist/analysis/access-control.js.map +1 -0
- package/dist/analysis/attack-surface.d.ts +51 -0
- package/dist/analysis/attack-surface.d.ts.map +1 -0
- package/dist/analysis/attack-surface.js +206 -0
- package/dist/analysis/attack-surface.js.map +1 -0
- package/dist/analysis/constraint-extraction.d.ts +25 -0
- package/dist/analysis/constraint-extraction.d.ts.map +1 -0
- package/dist/analysis/constraint-extraction.js +398 -0
- package/dist/analysis/constraint-extraction.js.map +1 -0
- package/dist/analysis/context-assembler.d.ts +16 -0
- package/dist/analysis/context-assembler.d.ts.map +1 -0
- package/dist/analysis/context-assembler.js +88 -0
- package/dist/analysis/context-assembler.js.map +1 -0
- package/dist/analysis/dependency-graph.d.ts +31 -0
- package/dist/analysis/dependency-graph.d.ts.map +1 -0
- package/dist/analysis/dependency-graph.js +223 -0
- package/dist/analysis/dependency-graph.js.map +1 -0
- package/dist/analysis/erc-detection.d.ts +16 -0
- package/dist/analysis/erc-detection.d.ts.map +1 -0
- package/dist/analysis/erc-detection.js +81 -0
- package/dist/analysis/erc-detection.js.map +1 -0
- package/dist/analysis/external-calls.d.ts +8 -0
- package/dist/analysis/external-calls.d.ts.map +1 -0
- package/dist/analysis/external-calls.js +124 -0
- package/dist/analysis/external-calls.js.map +1 -0
- package/dist/analysis/nsloc.d.ts +46 -0
- package/dist/analysis/nsloc.d.ts.map +1 -0
- package/dist/analysis/nsloc.js +106 -0
- package/dist/analysis/nsloc.js.map +1 -0
- package/dist/analysis/pattern-detection.d.ts +20 -0
- package/dist/analysis/pattern-detection.d.ts.map +1 -0
- package/dist/analysis/pattern-detection.js +236 -0
- package/dist/analysis/pattern-detection.js.map +1 -0
- package/dist/analysis/state-variables.d.ts +33 -0
- package/dist/analysis/state-variables.d.ts.map +1 -0
- package/dist/analysis/state-variables.js +179 -0
- package/dist/analysis/state-variables.js.map +1 -0
- package/dist/commands/access.d.ts +3 -0
- package/dist/commands/access.d.ts.map +1 -0
- package/dist/commands/access.js +99 -0
- package/dist/commands/access.js.map +1 -0
- package/dist/commands/ai-status.d.ts +3 -0
- package/dist/commands/ai-status.d.ts.map +1 -0
- package/dist/commands/ai-status.js +172 -0
- package/dist/commands/ai-status.js.map +1 -0
- package/dist/commands/analyze.d.ts +3 -0
- package/dist/commands/analyze.d.ts.map +1 -0
- package/dist/commands/analyze.js +101 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/calls.d.ts +3 -0
- package/dist/commands/calls.d.ts.map +1 -0
- package/dist/commands/calls.js +92 -0
- package/dist/commands/calls.js.map +1 -0
- package/dist/commands/claude.d.ts +3 -0
- package/dist/commands/claude.d.ts.map +1 -0
- package/dist/commands/claude.js +42 -0
- package/dist/commands/claude.js.map +1 -0
- package/dist/commands/constraints.d.ts +3 -0
- package/dist/commands/constraints.d.ts.map +1 -0
- package/dist/commands/constraints.js +32 -0
- package/dist/commands/constraints.js.map +1 -0
- package/dist/commands/context.d.ts +3 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +57 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/dashboard.d.ts +3 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +95 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/deps.d.ts +3 -0
- package/dist/commands/deps.d.ts.map +1 -0
- package/dist/commands/deps.js +67 -0
- package/dist/commands/deps.js.map +1 -0
- package/dist/commands/doctor.d.ts +17 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +154 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +330 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/patterns.d.ts +3 -0
- package/dist/commands/patterns.d.ts.map +1 -0
- package/dist/commands/patterns.js +40 -0
- package/dist/commands/patterns.js.map +1 -0
- package/dist/commands/state.d.ts +3 -0
- package/dist/commands/state.d.ts.map +1 -0
- package/dist/commands/state.js +92 -0
- package/dist/commands/state.js.map +1 -0
- package/dist/commands/stats.d.ts +3 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +347 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/surface.d.ts +3 -0
- package/dist/commands/surface.d.ts.map +1 -0
- package/dist/commands/surface.js +45 -0
- package/dist/commands/surface.js.map +1 -0
- package/dist/commands/update-skills.d.ts +3 -0
- package/dist/commands/update-skills.d.ts.map +1 -0
- package/dist/commands/update-skills.js +40 -0
- package/dist/commands/update-skills.js.map +1 -0
- package/dist/commands/update.d.ts +3 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +157 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/core/config.d.ts +24 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +70 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/errors.d.ts +17 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +113 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/external-tools.d.ts +39 -0
- package/dist/core/external-tools.d.ts.map +1 -0
- package/dist/core/external-tools.js +151 -0
- package/dist/core/external-tools.js.map +1 -0
- package/dist/core/logger.d.ts +16 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +22 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/output.d.ts +13 -0
- package/dist/core/output.d.ts.map +1 -0
- package/dist/core/output.js +45 -0
- package/dist/core/output.js.map +1 -0
- package/dist/core/paths.d.ts +21 -0
- package/dist/core/paths.d.ts.map +1 -0
- package/dist/core/paths.js +32 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/progress.d.ts +34 -0
- package/dist/core/progress.d.ts.map +1 -0
- package/dist/core/progress.js +119 -0
- package/dist/core/progress.js.map +1 -0
- package/dist/core/schema.d.ts +3197 -0
- package/dist/core/schema.d.ts.map +1 -0
- package/dist/core/schema.js +420 -0
- package/dist/core/schema.js.map +1 -0
- package/dist/core/skills.d.ts +28 -0
- package/dist/core/skills.d.ts.map +1 -0
- package/dist/core/skills.js +82 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/lcov.d.ts +27 -0
- package/dist/parsers/lcov.d.ts.map +1 -0
- package/dist/parsers/lcov.js +68 -0
- package/dist/parsers/lcov.js.map +1 -0
- package/dist/parsers/slither.d.ts +63 -0
- package/dist/parsers/slither.d.ts.map +1 -0
- package/dist/parsers/slither.js +160 -0
- package/dist/parsers/slither.js.map +1 -0
- package/dist/parsers/solc.d.ts +19 -0
- package/dist/parsers/solc.d.ts.map +1 -0
- package/dist/parsers/solc.js +43 -0
- package/dist/parsers/solc.js.map +1 -0
- package/dist/parsers/solidity-parser.d.ts +77 -0
- package/dist/parsers/solidity-parser.d.ts.map +1 -0
- package/dist/parsers/solidity-parser.js +357 -0
- package/dist/parsers/solidity-parser.js.map +1 -0
- package/dist/skills/generate-overleaf.md +326 -0
- package/dist/skills/generate-poc.md +186 -0
- package/dist/skills/ingest-aa-report.md +172 -0
- package/dist/skills/init-audit.md +271 -0
- package/dist/skills/sync-issues.md +266 -0
- package/dist/skills/validate-issue.md +149 -0
- package/dist/skills/write-finding.md +142 -0
- package/dist/types/index.d.ts +30 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Validate any potential issue on the board (manual / auditagent / conformance / github) and promote it to Verified or Invalid"
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Skill: Validate Issue
|
|
6
|
+
|
|
7
|
+
**Recommended model:** Opus
|
|
8
|
+
|
|
9
|
+
## What this skill does
|
|
10
|
+
|
|
11
|
+
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
|
+
|
|
13
|
+
- **Manual** (`/write-finding`) — `source: "manual"`, `status: "pending_validation"`.
|
|
14
|
+
- **Auditagent** (`/ingest-aa-report`) — `source: "auditagent"`, `status: "unverified"`.
|
|
15
|
+
- **Conformance** (materialized by `/init-audit`) — `source: "conformance"`, `status: "pending_validation"`.
|
|
16
|
+
- **GitHub** (teammate findings via `/sync-issues`) — `source: "github"`, `status: "pending_validation"`.
|
|
17
|
+
|
|
18
|
+
The skill writes a validation memo (always), optionally generates a PoC, and updates the tracking entry to `verified` or `rejected`. Card moves on the board.
|
|
19
|
+
|
|
20
|
+
## Invocation
|
|
21
|
+
|
|
22
|
+
The auditor invokes by id or by free-text reference:
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
/validate-issue F003
|
|
26
|
+
/validate-issue SC-007
|
|
27
|
+
/validate-issue AA-N002
|
|
28
|
+
/validate-issue for the rounding issue in Vault.sol
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Resolve to a single tracking entry by:
|
|
32
|
+
1. Exact id match in `<output_dir>/tracking.json`, or
|
|
33
|
+
2. Title / description substring match (if multiple, ask the auditor to disambiguate).
|
|
34
|
+
|
|
35
|
+
## Context Assembly
|
|
36
|
+
|
|
37
|
+
Once the issue is resolved, read:
|
|
38
|
+
|
|
39
|
+
- `<output_dir>/tracking.json` — the entry being validated.
|
|
40
|
+
- Source-specific raw data:
|
|
41
|
+
- `manual` → `<output_dir>/findings.json` (the full finding record).
|
|
42
|
+
- `auditagent` → `<output_dir>/ai-results/auditagent/findings.json` (the matching `findings[*]` entry).
|
|
43
|
+
- `conformance` → `<output_dir>/spec-conformance.json` (the matching `items[*]` entry).
|
|
44
|
+
- `github` → `<output_dir>/external/github/findings.json` (the matching entry).
|
|
45
|
+
- `<output_dir>/state-vars.json`, `<output_dir>/access-control.json`, `<output_dir>/external-calls.json` for cross-referenced facts.
|
|
46
|
+
- The affected contract source via `npx hex context --target <affected_contract>`.
|
|
47
|
+
|
|
48
|
+
## Validation pass
|
|
49
|
+
|
|
50
|
+
### 1. Understand the claim
|
|
51
|
+
|
|
52
|
+
Extract from the source-specific record:
|
|
53
|
+
- The vulnerability being claimed (one sentence).
|
|
54
|
+
- The affected contract/function.
|
|
55
|
+
- The claimed attack path or spec violation.
|
|
56
|
+
- The claimed impact.
|
|
57
|
+
|
|
58
|
+
For conformance items, the "claim" is `spec_text` + the finding paragraph — i.e., "the spec says X, the code does Y".
|
|
59
|
+
|
|
60
|
+
### 2. Trace it in the code
|
|
61
|
+
|
|
62
|
+
- Follow the claimed path step by step in the actual code.
|
|
63
|
+
- Check each precondition.
|
|
64
|
+
- Verify the state changes actually occur.
|
|
65
|
+
- Check existing protections (modifiers, reentrancy guards, input validation, economic constraints).
|
|
66
|
+
- For conformance items: re-read the cited spec section, compare to the implementation.
|
|
67
|
+
|
|
68
|
+
### 3. Verdict
|
|
69
|
+
|
|
70
|
+
**Valid:**
|
|
71
|
+
|
|
72
|
+
1. Use **AskUserQuestion** to ask:
|
|
73
|
+
> The issue appears **VALID**. How would you like to proceed?
|
|
74
|
+
>
|
|
75
|
+
> 1. Generate a full PoC test, then promote to Verified.
|
|
76
|
+
> 2. Accept with rational verification only — validation memo, no PoC.
|
|
77
|
+
>
|
|
78
|
+
> Reply **1** or **2**.
|
|
79
|
+
|
|
80
|
+
2. **If PoC chosen:** invoke the `generate-poc` skill flow (read the project test setup, write the PoC, run and iterate until it passes). Set `poc.status = "passing"`, `poc.file = "test/hex-pocs/<id>_<name>.t.sol"`.
|
|
81
|
+
|
|
82
|
+
3. **If memo-only chosen:** leave `poc.status = "not_started"`, `poc.file = null`.
|
|
83
|
+
|
|
84
|
+
4. If the issue source is **conformance**, **auditagent**, or **github** (no manual finding record yet), invoke the `write-finding` skill flow to materialize a structured finding into `<output_dir>/findings.json` — reusing the existing tracking id. If `source = "manual"`, the finding already exists; update its `poc` block in place.
|
|
85
|
+
|
|
86
|
+
5. Update the tracking entry: `status = "verified"`, `poc_status` per choice above, `poc_file` per choice above.
|
|
87
|
+
|
|
88
|
+
6. For source files in `root_cause.locations[]`, replace any `// @audit-issue F<NNN>` annotation with `// @audit-issue-verified F<NNN> <short title>` (matching indentation).
|
|
89
|
+
|
|
90
|
+
7. Use **AskUserQuestion** to ask:
|
|
91
|
+
> Issue verified as **\<id\>** with severity **\<current severity\>**.
|
|
92
|
+
>
|
|
93
|
+
> Would you like to change the severity? Reply with the new severity (Critical / High / Medium / Low / Info), or **no** to keep it.
|
|
94
|
+
|
|
95
|
+
8. If the user provides a new severity, update both `findings.json` and `tracking.json`.
|
|
96
|
+
|
|
97
|
+
**Invalid:**
|
|
98
|
+
|
|
99
|
+
1. Explain why:
|
|
100
|
+
- Is the attack path blocked? By what specifically (modifier, require, state check)?
|
|
101
|
+
- Are the preconditions impossible? Why?
|
|
102
|
+
- Is the impact assessment wrong? What actually happens?
|
|
103
|
+
2. Update tracking: `status = "rejected"`.
|
|
104
|
+
3. Do NOT write a finding to `findings.json`. The memo alone records the reasoning.
|
|
105
|
+
|
|
106
|
+
**Uncertain:**
|
|
107
|
+
|
|
108
|
+
1. List specific questions that need manual investigation.
|
|
109
|
+
2. State what would confirm or deny the issue.
|
|
110
|
+
3. Leave tracking `status` as-is. Append findings to the `notes` field describing the open questions.
|
|
111
|
+
|
|
112
|
+
## Output: validation memo
|
|
113
|
+
|
|
114
|
+
Write `<output_dir>/validations/<id>_memo.md` (always — for valid, invalid, and uncertain verdicts):
|
|
115
|
+
|
|
116
|
+
```markdown
|
|
117
|
+
# Issue Validation: <ID> — <Title>
|
|
118
|
+
|
|
119
|
+
**Source:** <manual | auditagent | conformance | github>
|
|
120
|
+
**Original record:** <pointer to the specific record being validated — e.g., findings.json#F003, ai-results/auditagent/findings.json#AA-014>
|
|
121
|
+
**Verdict:** Valid / Invalid / Uncertain
|
|
122
|
+
**Date:** <YYYY-MM-DD>
|
|
123
|
+
|
|
124
|
+
## Claim being validated
|
|
125
|
+
[One- to two-sentence summary of the issue under review]
|
|
126
|
+
|
|
127
|
+
## Analysis
|
|
128
|
+
[Step-by-step trace through the code, or spec-vs-code comparison for conformance items]
|
|
129
|
+
|
|
130
|
+
## Protections evaluated
|
|
131
|
+
[Access control, reentrancy guards, input validation, economic constraints, etc.]
|
|
132
|
+
|
|
133
|
+
## Verdict reasoning
|
|
134
|
+
[Why valid / invalid / uncertain]
|
|
135
|
+
|
|
136
|
+
## Action taken
|
|
137
|
+
[If valid + PoC: PoC at <path>, test passing, finding F<NNN> updated/created]
|
|
138
|
+
[If valid + memo-only: finding F<NNN> updated/created, no PoC]
|
|
139
|
+
[If invalid: tracking entry rejected, no finding written]
|
|
140
|
+
[If uncertain: open questions listed; tracking status unchanged]
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## After validation
|
|
144
|
+
|
|
145
|
+
The board reflects the new state automatically (the dashboard watches `tracking.json` and `findings.json`). The auditor can:
|
|
146
|
+
|
|
147
|
+
- Move on to the next Potential card.
|
|
148
|
+
- Run `/sync-issues` to push the newly Verified finding to GitHub if `settings.github.repo` is configured.
|
|
149
|
+
- Run `/generate-overleaf` once all verifications are done, to produce the LaTeX report sections.
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Write a manual issue as a Potential card on the board (pending validation)"
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Skill: Write Finding
|
|
6
|
+
|
|
7
|
+
**Recommended model:** Sonnet
|
|
8
|
+
|
|
9
|
+
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-issue <id>` which produces a validation memo and optional PoC).
|
|
10
|
+
|
|
11
|
+
## Context Assembly
|
|
12
|
+
|
|
13
|
+
Read:
|
|
14
|
+
- The issue description provided by the auditor.
|
|
15
|
+
- The relevant source code.
|
|
16
|
+
- `<output_dir>/findings.json` and `<output_dir>/tracking.json` — to determine the next finding ID. Use the highest existing `F<NNN>` ID across both files and increment by 1. Rejected and invalid findings keep their IDs reserved.
|
|
17
|
+
|
|
18
|
+
## Step 0: Duplicate gate
|
|
19
|
+
|
|
20
|
+
Scan `findings.json` and `tracking.json` for any existing entry that covers the same vulnerability (same affected contract/function, same or overlapping root cause). If a match is found, warn the auditor:
|
|
21
|
+
|
|
22
|
+
> "This appears to duplicate `F<NNN>`: \<title\>. Proceed anyway?"
|
|
23
|
+
|
|
24
|
+
Only continue if confirmed.
|
|
25
|
+
|
|
26
|
+
## Severity Guide
|
|
27
|
+
|
|
28
|
+
Assess severity directly based on impact and exploitability:
|
|
29
|
+
|
|
30
|
+
- **Critical** — Direct fund loss or permanent protocol-breaking impact that anyone can trigger with no special conditions.
|
|
31
|
+
- **High** — Significant fund loss, privilege escalation, or severe DoS that requires specific but realistic conditions.
|
|
32
|
+
- **Medium** — Temporary DoS, griefing with economic cost, or incorrect accounting that compounds over time.
|
|
33
|
+
- **Low** — Minor issues with limited economic impact, requires unlikely conditions to exploit.
|
|
34
|
+
- **Info** — Gas inefficiency, cosmetic issues, best-practice deviations with no direct security impact.
|
|
35
|
+
|
|
36
|
+
### Likelihood × Impact Matrix
|
|
37
|
+
|
|
38
|
+
Cross-reference both before assigning a severity.
|
|
39
|
+
|
|
40
|
+
| | Low Impact | Medium Impact | High Impact |
|
|
41
|
+
|---|---|---|---|
|
|
42
|
+
| **High Likelihood** | Medium | High | Critical |
|
|
43
|
+
| **Medium Likelihood** | Low | Medium | High |
|
|
44
|
+
| **Low Likelihood** | Info | Low | Medium |
|
|
45
|
+
|
|
46
|
+
**Impact:** High = direct fund loss / permanent state corruption / full bypass of critical access control. Medium = temporary DoS, griefing with cost, incorrect accounting that compounds, or partial access bypass. Low = minor inefficiency, cosmetic, best-practice deviation.
|
|
47
|
+
|
|
48
|
+
**Likelihood:** High = anyone can trigger with no preconditions; common conditions; profitable. Medium = specific but realistic conditions; moderate setup/timing; economically viable. Low = unlikely conditions; complex multi-step; unprofitable.
|
|
49
|
+
|
|
50
|
+
## Template
|
|
51
|
+
|
|
52
|
+
Write the finding following this structure:
|
|
53
|
+
|
|
54
|
+
```json
|
|
55
|
+
{
|
|
56
|
+
"id": "F<NNN>",
|
|
57
|
+
"title": "<concise, descriptive title>",
|
|
58
|
+
"severity": "Critical|High|Medium|Low|Info",
|
|
59
|
+
"category": "<e.g., Math / Rounding, Access Control, Reentrancy, Oracle Manipulation>",
|
|
60
|
+
"description": "<clear, self-contained description covering what the vulnerability is, why it exists, and what the impact would be if exploited>",
|
|
61
|
+
"root_cause": {
|
|
62
|
+
"locations": [
|
|
63
|
+
{ "file": "<path>", "snippet": "<relevant code>" }
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
"poc": {
|
|
67
|
+
"status": "not_started",
|
|
68
|
+
"file": null,
|
|
69
|
+
"validation_memo": null
|
|
70
|
+
},
|
|
71
|
+
"recommendation": "<a suggested direction phrased as 'Consider...', not a prescriptive fix>",
|
|
72
|
+
"references": {
|
|
73
|
+
"external_links": []
|
|
74
|
+
},
|
|
75
|
+
"created_at": "<ISO timestamp>"
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Recommendation tone
|
|
80
|
+
|
|
81
|
+
Phrase recommendations as suggestions, not commands. The auditor proposes direction; the protocol team owns the implementation:
|
|
82
|
+
|
|
83
|
+
- Start with `Consider...`, `One option is...`, `The team may want to...`, `It would be worth...`.
|
|
84
|
+
- Avoid `Replace X with Y`, `You must...`, `Always do...`, `Never do...`.
|
|
85
|
+
- Keep under three sentences when possible. Detailed analysis belongs in the description.
|
|
86
|
+
|
|
87
|
+
**Recommendation must be prose only.** No code snippets in the `recommendation` field. Code belongs in `root_cause.locations[].snippet`.
|
|
88
|
+
|
|
89
|
+
## Code Block Formatting Rules (STRICT)
|
|
90
|
+
|
|
91
|
+
When including code snippets in the finding:
|
|
92
|
+
|
|
93
|
+
### Never modify original code
|
|
94
|
+
Only allowed modifications: `@audit` / `@audit-issue` comments and `// ....` to indicate omitted lines.
|
|
95
|
+
|
|
96
|
+
### Comment placement
|
|
97
|
+
Add comments on a **separate line above** the affected line. Never inline.
|
|
98
|
+
|
|
99
|
+
**CORRECT:**
|
|
100
|
+
```solidity
|
|
101
|
+
// ....
|
|
102
|
+
// @audit-issue This calculation is vulnerable to rounding errors.
|
|
103
|
+
uint256 shares = assets.mulDiv(totalSupply, totalAssets, Math.Rounding.Down);
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Comment style
|
|
107
|
+
All inserted audit comments must be full sentences starting with a capital letter and ending with a period.
|
|
108
|
+
|
|
109
|
+
## Actions
|
|
110
|
+
|
|
111
|
+
1. **Append the finding** to the `findings` array inside `<output_dir>/findings.json`. File structure is `{ "findings": [...] }` — create with this wrapper if missing.
|
|
112
|
+
2. **Add a tracking entry** to `<output_dir>/tracking.json` with:
|
|
113
|
+
```json
|
|
114
|
+
{
|
|
115
|
+
"id": "F<NNN>",
|
|
116
|
+
"title": "<same as finding>",
|
|
117
|
+
"severity": "<same as finding>",
|
|
118
|
+
"source": "manual",
|
|
119
|
+
"status": "pending_validation",
|
|
120
|
+
"poc_status": "not_started",
|
|
121
|
+
"poc_file": null,
|
|
122
|
+
"duplicates": [],
|
|
123
|
+
"notes": ""
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
3. **Annotate source files.** For each entry in `root_cause.locations[]`:
|
|
127
|
+
- Open the source file at `file`.
|
|
128
|
+
- Find the first significant line of the `snippet` (skip blank lines and `// ....`).
|
|
129
|
+
- If an existing `// @audit-issue ...` comment is directly above, replace it with `// @audit-issue F<NNN> <short title>`.
|
|
130
|
+
- Otherwise insert `// @audit-issue F<NNN> <short title>` directly above, matching indentation.
|
|
131
|
+
|
|
132
|
+
(The `@audit-issue-verified` annotation comes later, via `/validate-issue` once the issue is promoted to Verified.)
|
|
133
|
+
|
|
134
|
+
## After writing
|
|
135
|
+
|
|
136
|
+
The finding now appears on the dashboard's `/issues` board as a Potential card. The auditor can:
|
|
137
|
+
|
|
138
|
+
- Run `/validate-issue F<NNN>` to write a validation memo and optionally generate a PoC; on success the card moves to Verified.
|
|
139
|
+
- Drag the card directly from Potential → Verified on the board if they're confident no PoC is needed (e.g., trivial Info-level issues).
|
|
140
|
+
- Run `/sync-issues` if `settings.github.repo` is configured, to push verified findings to the team's GitHub repo.
|
|
141
|
+
|
|
142
|
+
Do NOT run `/validate-issue` or `/sync-issues` automatically — those are auditor-driven decisions.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ConfigSchema, StatsSchema, DepsSchema, AccessControlSchema, StateVarsSchema, ExternalCallsSchema, FindingsSchema, TrackingSchema, ComparisonSchema, SpecConformanceSchema, EvidenceSchema, ConfidenceSchema, DerivedFromSchema, PerContractStatsSchema, TestCoverageSchema, GraphNodeSchema, ClusterSchema, AccessFunctionSchema, RoleFunctionRefSchema, RoleSchema, StateVariableSchema, ExternalCallSchema, FindingSchema, TrackingEntrySchema, TrackingSourceSchema, ResolutionSchema, SpecItemSchema } from '../core/schema.js';
|
|
3
|
+
export type Config = z.infer<typeof ConfigSchema>;
|
|
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
|
+
export type Findings = z.infer<typeof FindingsSchema>;
|
|
10
|
+
export type Tracking = z.infer<typeof TrackingSchema>;
|
|
11
|
+
export type Comparison = z.infer<typeof ComparisonSchema>;
|
|
12
|
+
export type SpecConformance = z.infer<typeof SpecConformanceSchema>;
|
|
13
|
+
export type Evidence = z.infer<typeof EvidenceSchema>;
|
|
14
|
+
export type Confidence = z.infer<typeof ConfidenceSchema>;
|
|
15
|
+
export type DerivedFrom = z.infer<typeof DerivedFromSchema>;
|
|
16
|
+
export type PerContractStats = z.infer<typeof PerContractStatsSchema>;
|
|
17
|
+
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
|
+
export type Finding = z.infer<typeof FindingSchema>;
|
|
26
|
+
export type TrackingEntry = z.infer<typeof TrackingEntrySchema>;
|
|
27
|
+
export type TrackingSource = z.infer<typeof TrackingSourceSchema>;
|
|
28
|
+
export type Resolution = z.infer<typeof ResolutionSchema>;
|
|
29
|
+
export type SpecItem = z.infer<typeof SpecItemSchema>;
|
|
30
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "hex-audit",
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "CLI toolkit for Solidity smart contract auditors",
|
|
6
|
+
"bin": {
|
|
7
|
+
"hex": "./dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc && npm run copy-skills && npm run build:dashboard",
|
|
13
|
+
"build:cli": "tsc && npm run copy-skills",
|
|
14
|
+
"build:dashboard": "next build dashboard",
|
|
15
|
+
"copy-skills": "node -e \"const fs=require('fs');const p=require('path');fs.cpSync(p.join('src','skills'),p.join('dist','skills'),{recursive:true})\"",
|
|
16
|
+
"dev:cli": "tsc --watch",
|
|
17
|
+
"dev:dashboard": "next dev dashboard",
|
|
18
|
+
"test": "vitest run",
|
|
19
|
+
"test:watch": "vitest",
|
|
20
|
+
"lint": "prettier --check .",
|
|
21
|
+
"format": "prettier --write ."
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"dist",
|
|
25
|
+
"dashboard/.next",
|
|
26
|
+
"dashboard/app",
|
|
27
|
+
"dashboard/components",
|
|
28
|
+
"dashboard/lib",
|
|
29
|
+
"dashboard/public",
|
|
30
|
+
"dashboard/next.config.mjs",
|
|
31
|
+
"dashboard/next-env.d.ts",
|
|
32
|
+
"dashboard/postcss.config.cjs",
|
|
33
|
+
"dashboard/tailwind.config.ts",
|
|
34
|
+
"dashboard/tsconfig.json",
|
|
35
|
+
"README.md",
|
|
36
|
+
"CLAUDE.md",
|
|
37
|
+
"DEMO.md"
|
|
38
|
+
],
|
|
39
|
+
"keywords": [
|
|
40
|
+
"solidity",
|
|
41
|
+
"audit",
|
|
42
|
+
"smart-contracts",
|
|
43
|
+
"security"
|
|
44
|
+
],
|
|
45
|
+
"license": "MIT",
|
|
46
|
+
"engines": {
|
|
47
|
+
"node": ">=18.0.0"
|
|
48
|
+
},
|
|
49
|
+
"dependencies": {
|
|
50
|
+
"@dnd-kit/core": "^6.1.0",
|
|
51
|
+
"@solidity-parser/parser": "^0.18.0",
|
|
52
|
+
"@tanstack/react-table": "^8.17.0",
|
|
53
|
+
"chalk": "^5.3.0",
|
|
54
|
+
"chokidar": "^3.6.0",
|
|
55
|
+
"commander": "^12.1.0",
|
|
56
|
+
"glob": "^10.3.10",
|
|
57
|
+
"mermaid": "^11.4.0",
|
|
58
|
+
"next": "14.2.5",
|
|
59
|
+
"next-themes": "^0.4.6",
|
|
60
|
+
"ora": "^8.0.1",
|
|
61
|
+
"react": "^18.3.1",
|
|
62
|
+
"react-dom": "^18.3.1",
|
|
63
|
+
"react-markdown": "^9.0.1",
|
|
64
|
+
"rehype-highlight": "^7.0.0",
|
|
65
|
+
"remark-gfm": "^4.0.0",
|
|
66
|
+
"tiktoken": "^1.0.15",
|
|
67
|
+
"zod": "^3.23.8"
|
|
68
|
+
},
|
|
69
|
+
"devDependencies": {
|
|
70
|
+
"@tailwindcss/typography": "^0.5.13",
|
|
71
|
+
"@types/node": "^20.11.0",
|
|
72
|
+
"@types/react": "^18.3.3",
|
|
73
|
+
"@types/react-dom": "^18.3.0",
|
|
74
|
+
"autoprefixer": "^10.4.19",
|
|
75
|
+
"postcss": "^8.4.38",
|
|
76
|
+
"prettier": "^3.3.3",
|
|
77
|
+
"tailwindcss": "^3.4.4",
|
|
78
|
+
"typescript": "^5.4.0",
|
|
79
|
+
"vitest": "^1.6.0"
|
|
80
|
+
}
|
|
81
|
+
}
|