trybeacon 0.1.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/.next/BUILD_ID +1 -0
- package/.next/app-path-routes-manifest.json +59 -0
- package/.next/build/56416d4ae4ce586f.js +6 -0
- package/.next/build/56416d4ae4ce586f.js.map +5 -0
- package/.next/build/chunks/[root-of-the-server]__0oj80bi._.js +206 -0
- package/.next/build/chunks/[root-of-the-server]__0oj80bi._.js.map +8 -0
- package/.next/build/chunks/[root-of-the-server]__1f933tp._.js +500 -0
- package/.next/build/chunks/[root-of-the-server]__1f933tp._.js.map +11 -0
- package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_0b7xl6g._.js +13 -0
- package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_0b7xl6g._.js.map +5 -0
- package/.next/build/chunks/[turbopack]_runtime.js +890 -0
- package/.next/build/chunks/[turbopack]_runtime.js.map +11 -0
- package/.next/build/chunks/node_modules_20v-8wl._.js +6824 -0
- package/.next/build/chunks/node_modules_20v-8wl._.js.map +47 -0
- package/.next/build/package.json +1 -0
- package/.next/build-manifest.json +21 -0
- package/.next/diagnostics/build-diagnostics.json +6 -0
- package/.next/diagnostics/framework.json +1 -0
- package/.next/diagnostics/route-bundle-stats.json +100 -0
- package/.next/export-marker.json +6 -0
- package/.next/fallback-build-manifest.json +13 -0
- package/.next/images-manifest.json +68 -0
- package/.next/next-minimal-server.js.nft.json +1 -0
- package/.next/next-server.js.nft.json +1 -0
- package/.next/package.json +1 -0
- package/.next/prerender-manifest.json +167 -0
- package/.next/required-server-files.js +338 -0
- package/.next/required-server-files.json +338 -0
- package/.next/routes-manifest.json +402 -0
- package/.next/server/app/_global-error/page/app-paths-manifest.json +3 -0
- package/.next/server/app/_global-error/page/build-manifest.json +17 -0
- package/.next/server/app/_global-error/page/next-font-manifest.json +6 -0
- package/.next/server/app/_global-error/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/_global-error/page/server-reference-manifest.json +4 -0
- package/.next/server/app/_global-error/page.js +10 -0
- package/.next/server/app/_global-error/page.js.map +5 -0
- package/.next/server/app/_global-error/page.js.nft.json +1 -0
- package/.next/server/app/_global-error/page_client-reference-manifest.js +3 -0
- package/.next/server/app/_global-error.html +1 -0
- package/.next/server/app/_global-error.meta +15 -0
- package/.next/server/app/_global-error.rsc +14 -0
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_full.segment.rsc +14 -0
- package/.next/server/app/_global-error.segments/_head.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_index.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
- package/.next/server/app/_not-found/page/app-paths-manifest.json +3 -0
- package/.next/server/app/_not-found/page/build-manifest.json +17 -0
- package/.next/server/app/_not-found/page/next-font-manifest.json +11 -0
- package/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/_not-found/page/server-reference-manifest.json +4 -0
- package/.next/server/app/_not-found/page.js +15 -0
- package/.next/server/app/_not-found/page.js.map +5 -0
- package/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +3 -0
- package/.next/server/app/_not-found.html +1 -0
- package/.next/server/app/_not-found.meta +16 -0
- package/.next/server/app/_not-found.rsc +24 -0
- package/.next/server/app/_not-found.segments/_full.segment.rsc +24 -0
- package/.next/server/app/_not-found.segments/_head.segment.rsc +6 -0
- package/.next/server/app/_not-found.segments/_index.segment.rsc +13 -0
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -0
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +5 -0
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +3 -0
- package/.next/server/app/api/code-graph/position/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/code-graph/position/route/build-manifest.json +9 -0
- package/.next/server/app/api/code-graph/position/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/code-graph/position/route.js +12 -0
- package/.next/server/app/api/code-graph/position/route.js.map +5 -0
- package/.next/server/app/api/code-graph/position/route.js.nft.json +1 -0
- package/.next/server/app/api/code-graph/position/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/code-graph/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/code-graph/route/build-manifest.json +9 -0
- package/.next/server/app/api/code-graph/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/code-graph/route.js +12 -0
- package/.next/server/app/api/code-graph/route.js.map +5 -0
- package/.next/server/app/api/code-graph/route.js.nft.json +1 -0
- package/.next/server/app/api/code-graph/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/context/embed-backfill/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/context/embed-backfill/route/build-manifest.json +9 -0
- package/.next/server/app/api/context/embed-backfill/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/context/embed-backfill/route.js +11 -0
- package/.next/server/app/api/context/embed-backfill/route.js.map +5 -0
- package/.next/server/app/api/context/embed-backfill/route.js.nft.json +1 -0
- package/.next/server/app/api/context/embed-backfill/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/context/feature/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/context/feature/route/build-manifest.json +9 -0
- package/.next/server/app/api/context/feature/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/context/feature/route.js +15 -0
- package/.next/server/app/api/context/feature/route.js.map +5 -0
- package/.next/server/app/api/context/feature/route.js.nft.json +1 -0
- package/.next/server/app/api/context/feature/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/context/file/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/context/file/route/build-manifest.json +9 -0
- package/.next/server/app/api/context/file/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/context/file/route.js +13 -0
- package/.next/server/app/api/context/file/route.js.map +5 -0
- package/.next/server/app/api/context/file/route.js.nft.json +1 -0
- package/.next/server/app/api/context/file/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/context/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/context/route/build-manifest.json +9 -0
- package/.next/server/app/api/context/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/context/route.js +11 -0
- package/.next/server/app/api/context/route.js.map +5 -0
- package/.next/server/app/api/context/route.js.nft.json +1 -0
- package/.next/server/app/api/context/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/db/backfill-access/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/db/backfill-access/route/build-manifest.json +9 -0
- package/.next/server/app/api/db/backfill-access/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/db/backfill-access/route.js +13 -0
- package/.next/server/app/api/db/backfill-access/route.js.map +5 -0
- package/.next/server/app/api/db/backfill-access/route.js.nft.json +1 -0
- package/.next/server/app/api/db/backfill-access/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/db/position/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/db/position/route/build-manifest.json +9 -0
- package/.next/server/app/api/db/position/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/db/position/route.js +15 -0
- package/.next/server/app/api/db/position/route.js.map +5 -0
- package/.next/server/app/api/db/position/route.js.nft.json +1 -0
- package/.next/server/app/api/db/position/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/db/reconcile-endpoints/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/db/reconcile-endpoints/route/build-manifest.json +9 -0
- package/.next/server/app/api/db/reconcile-endpoints/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/db/reconcile-endpoints/route.js +12 -0
- package/.next/server/app/api/db/reconcile-endpoints/route.js.map +5 -0
- package/.next/server/app/api/db/reconcile-endpoints/route.js.nft.json +1 -0
- package/.next/server/app/api/db/reconcile-endpoints/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/db/relations/[id]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/db/relations/[id]/route/build-manifest.json +9 -0
- package/.next/server/app/api/db/relations/[id]/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/db/relations/[id]/route.js +12 -0
- package/.next/server/app/api/db/relations/[id]/route.js.map +5 -0
- package/.next/server/app/api/db/relations/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/db/relations/[id]/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/db/tables/[id]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/db/tables/[id]/route/build-manifest.json +9 -0
- package/.next/server/app/api/db/tables/[id]/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/db/tables/[id]/route.js +12 -0
- package/.next/server/app/api/db/tables/[id]/route.js.map +5 -0
- package/.next/server/app/api/db/tables/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/db/tables/[id]/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/draft/approve/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/draft/approve/route/build-manifest.json +9 -0
- package/.next/server/app/api/draft/approve/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/draft/approve/route.js +16 -0
- package/.next/server/app/api/draft/approve/route.js.map +5 -0
- package/.next/server/app/api/draft/approve/route.js.nft.json +1 -0
- package/.next/server/app/api/draft/approve/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/draft/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/draft/route/build-manifest.json +9 -0
- package/.next/server/app/api/draft/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/draft/route.js +16 -0
- package/.next/server/app/api/draft/route.js.map +5 -0
- package/.next/server/app/api/draft/route.js.nft.json +1 -0
- package/.next/server/app/api/draft/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/draft/status/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/draft/status/route/build-manifest.json +9 -0
- package/.next/server/app/api/draft/status/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/draft/status/route.js +13 -0
- package/.next/server/app/api/draft/status/route.js.map +5 -0
- package/.next/server/app/api/draft/status/route.js.nft.json +1 -0
- package/.next/server/app/api/draft/status/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/edges/[id]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/edges/[id]/route/build-manifest.json +9 -0
- package/.next/server/app/api/edges/[id]/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/edges/[id]/route.js +11 -0
- package/.next/server/app/api/edges/[id]/route.js.map +5 -0
- package/.next/server/app/api/edges/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/edges/[id]/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/edges/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/edges/route/build-manifest.json +9 -0
- package/.next/server/app/api/edges/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/edges/route.js +15 -0
- package/.next/server/app/api/edges/route.js.map +5 -0
- package/.next/server/app/api/edges/route.js.nft.json +1 -0
- package/.next/server/app/api/edges/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/endpoints/[id]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/endpoints/[id]/route/build-manifest.json +9 -0
- package/.next/server/app/api/endpoints/[id]/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/endpoints/[id]/route.js +12 -0
- package/.next/server/app/api/endpoints/[id]/route.js.map +5 -0
- package/.next/server/app/api/endpoints/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/endpoints/[id]/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/entities/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/entities/route/build-manifest.json +9 -0
- package/.next/server/app/api/entities/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/entities/route.js +11 -0
- package/.next/server/app/api/entities/route.js.map +5 -0
- package/.next/server/app/api/entities/route.js.nft.json +1 -0
- package/.next/server/app/api/entities/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/ingest/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/ingest/route/build-manifest.json +9 -0
- package/.next/server/app/api/ingest/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/ingest/route.js +12 -0
- package/.next/server/app/api/ingest/route.js.map +5 -0
- package/.next/server/app/api/ingest/route.js.nft.json +1 -0
- package/.next/server/app/api/ingest/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/init/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/init/route/build-manifest.json +9 -0
- package/.next/server/app/api/init/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/init/route.js +15 -0
- package/.next/server/app/api/init/route.js.map +5 -0
- package/.next/server/app/api/init/route.js.nft.json +1 -0
- package/.next/server/app/api/init/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/map/describe/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/map/describe/route/build-manifest.json +9 -0
- package/.next/server/app/api/map/describe/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/map/describe/route.js +15 -0
- package/.next/server/app/api/map/describe/route.js.map +5 -0
- package/.next/server/app/api/map/describe/route.js.nft.json +1 -0
- package/.next/server/app/api/map/describe/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/map/files/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/map/files/route/build-manifest.json +9 -0
- package/.next/server/app/api/map/files/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/map/files/route.js +15 -0
- package/.next/server/app/api/map/files/route.js.map +5 -0
- package/.next/server/app/api/map/files/route.js.nft.json +1 -0
- package/.next/server/app/api/map/files/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/map/finish/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/map/finish/route/build-manifest.json +9 -0
- package/.next/server/app/api/map/finish/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/map/finish/route.js +15 -0
- package/.next/server/app/api/map/finish/route.js.map +5 -0
- package/.next/server/app/api/map/finish/route.js.nft.json +1 -0
- package/.next/server/app/api/map/finish/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/map/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/map/route/build-manifest.json +9 -0
- package/.next/server/app/api/map/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/map/route.js +15 -0
- package/.next/server/app/api/map/route.js.map +5 -0
- package/.next/server/app/api/map/route.js.nft.json +1 -0
- package/.next/server/app/api/map/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/map/start/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/map/start/route/build-manifest.json +9 -0
- package/.next/server/app/api/map/start/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/map/start/route.js +15 -0
- package/.next/server/app/api/map/start/route.js.map +5 -0
- package/.next/server/app/api/map/start/route.js.nft.json +1 -0
- package/.next/server/app/api/map/start/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/map/touch-active/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/map/touch-active/route/build-manifest.json +9 -0
- package/.next/server/app/api/map/touch-active/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/map/touch-active/route.js +15 -0
- package/.next/server/app/api/map/touch-active/route.js.map +5 -0
- package/.next/server/app/api/map/touch-active/route.js.nft.json +1 -0
- package/.next/server/app/api/map/touch-active/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/nodes/[id]/position/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/nodes/[id]/position/route/build-manifest.json +9 -0
- package/.next/server/app/api/nodes/[id]/position/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/nodes/[id]/position/route.js +15 -0
- package/.next/server/app/api/nodes/[id]/position/route.js.map +5 -0
- package/.next/server/app/api/nodes/[id]/position/route.js.nft.json +1 -0
- package/.next/server/app/api/nodes/[id]/position/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/nodes/[id]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/nodes/[id]/route/build-manifest.json +9 -0
- package/.next/server/app/api/nodes/[id]/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/nodes/[id]/route.js +15 -0
- package/.next/server/app/api/nodes/[id]/route.js.map +5 -0
- package/.next/server/app/api/nodes/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/nodes/[id]/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/nodes/positions/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/nodes/positions/route/build-manifest.json +9 -0
- package/.next/server/app/api/nodes/positions/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/nodes/positions/route.js +15 -0
- package/.next/server/app/api/nodes/positions/route.js.map +5 -0
- package/.next/server/app/api/nodes/positions/route.js.nft.json +1 -0
- package/.next/server/app/api/nodes/positions/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/nodes/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/nodes/route/build-manifest.json +9 -0
- package/.next/server/app/api/nodes/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/nodes/route.js +15 -0
- package/.next/server/app/api/nodes/route.js.map +5 -0
- package/.next/server/app/api/nodes/route.js.nft.json +1 -0
- package/.next/server/app/api/nodes/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/nodes/subtasks/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/nodes/subtasks/route/build-manifest.json +9 -0
- package/.next/server/app/api/nodes/subtasks/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/nodes/subtasks/route.js +15 -0
- package/.next/server/app/api/nodes/subtasks/route.js.map +5 -0
- package/.next/server/app/api/nodes/subtasks/route.js.nft.json +1 -0
- package/.next/server/app/api/nodes/subtasks/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/notes/[id]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/notes/[id]/route/build-manifest.json +9 -0
- package/.next/server/app/api/notes/[id]/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/notes/[id]/route.js +12 -0
- package/.next/server/app/api/notes/[id]/route.js.map +5 -0
- package/.next/server/app/api/notes/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/notes/[id]/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/notes/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/notes/route/build-manifest.json +9 -0
- package/.next/server/app/api/notes/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/notes/route.js +12 -0
- package/.next/server/app/api/notes/route.js.map +5 -0
- package/.next/server/app/api/notes/route.js.nft.json +1 -0
- package/.next/server/app/api/notes/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/open/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/open/route/build-manifest.json +9 -0
- package/.next/server/app/api/open/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/open/route.js +11 -0
- package/.next/server/app/api/open/route.js.map +5 -0
- package/.next/server/app/api/open/route.js.nft.json +1 -0
- package/.next/server/app/api/open/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/plan/annotations/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/plan/annotations/route/build-manifest.json +9 -0
- package/.next/server/app/api/plan/annotations/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/plan/annotations/route.js +15 -0
- package/.next/server/app/api/plan/annotations/route.js.map +5 -0
- package/.next/server/app/api/plan/annotations/route.js.nft.json +1 -0
- package/.next/server/app/api/plan/annotations/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/plan/approve/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/plan/approve/route/build-manifest.json +9 -0
- package/.next/server/app/api/plan/approve/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/plan/approve/route.js +16 -0
- package/.next/server/app/api/plan/approve/route.js.map +5 -0
- package/.next/server/app/api/plan/approve/route.js.nft.json +1 -0
- package/.next/server/app/api/plan/approve/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/plan/history/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/plan/history/route/build-manifest.json +9 -0
- package/.next/server/app/api/plan/history/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/plan/history/route.js +11 -0
- package/.next/server/app/api/plan/history/route.js.map +5 -0
- package/.next/server/app/api/plan/history/route.js.nft.json +1 -0
- package/.next/server/app/api/plan/history/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/plan/markdown/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/plan/markdown/route/build-manifest.json +9 -0
- package/.next/server/app/api/plan/markdown/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/plan/markdown/route.js +16 -0
- package/.next/server/app/api/plan/markdown/route.js.map +5 -0
- package/.next/server/app/api/plan/markdown/route.js.nft.json +1 -0
- package/.next/server/app/api/plan/markdown/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/plan/presence/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/plan/presence/route/build-manifest.json +9 -0
- package/.next/server/app/api/plan/presence/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/plan/presence/route.js +11 -0
- package/.next/server/app/api/plan/presence/route.js.map +5 -0
- package/.next/server/app/api/plan/presence/route.js.nft.json +1 -0
- package/.next/server/app/api/plan/presence/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/plan/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/plan/route/build-manifest.json +9 -0
- package/.next/server/app/api/plan/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/plan/route.js +16 -0
- package/.next/server/app/api/plan/route.js.map +5 -0
- package/.next/server/app/api/plan/route.js.nft.json +1 -0
- package/.next/server/app/api/plan/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/plan/verdict/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/plan/verdict/route/build-manifest.json +9 -0
- package/.next/server/app/api/plan/verdict/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/plan/verdict/route.js +16 -0
- package/.next/server/app/api/plan/verdict/route.js.map +5 -0
- package/.next/server/app/api/plan/verdict/route.js.nft.json +1 -0
- package/.next/server/app/api/plan/verdict/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/preferences/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/preferences/route/build-manifest.json +9 -0
- package/.next/server/app/api/preferences/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/preferences/route.js +7 -0
- package/.next/server/app/api/preferences/route.js.map +5 -0
- package/.next/server/app/api/preferences/route.js.nft.json +1 -0
- package/.next/server/app/api/preferences/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/reset/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/reset/route/build-manifest.json +9 -0
- package/.next/server/app/api/reset/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/reset/route.js +13 -0
- package/.next/server/app/api/reset/route.js.map +5 -0
- package/.next/server/app/api/reset/route.js.nft.json +1 -0
- package/.next/server/app/api/reset/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/settings/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/settings/route/build-manifest.json +9 -0
- package/.next/server/app/api/settings/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/settings/route.js +11 -0
- package/.next/server/app/api/settings/route.js.map +5 -0
- package/.next/server/app/api/settings/route.js.nft.json +1 -0
- package/.next/server/app/api/settings/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/stream/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/stream/route/build-manifest.json +9 -0
- package/.next/server/app/api/stream/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/stream/route.js +12 -0
- package/.next/server/app/api/stream/route.js.map +5 -0
- package/.next/server/app/api/stream/route.js.nft.json +1 -0
- package/.next/server/app/api/stream/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/version/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/version/route/build-manifest.json +9 -0
- package/.next/server/app/api/version/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/version/route.js +12 -0
- package/.next/server/app/api/version/route.js.map +5 -0
- package/.next/server/app/api/version/route.js.nft.json +1 -0
- package/.next/server/app/api/version/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/workspace/activate/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/workspace/activate/route/build-manifest.json +9 -0
- package/.next/server/app/api/workspace/activate/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/workspace/activate/route.js +14 -0
- package/.next/server/app/api/workspace/activate/route.js.map +5 -0
- package/.next/server/app/api/workspace/activate/route.js.nft.json +1 -0
- package/.next/server/app/api/workspace/activate/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/workspace/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/workspace/route/build-manifest.json +9 -0
- package/.next/server/app/api/workspace/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/workspace/route.js +11 -0
- package/.next/server/app/api/workspace/route.js.map +5 -0
- package/.next/server/app/api/workspace/route.js.nft.json +1 -0
- package/.next/server/app/api/workspace/route_client-reference-manifest.js +3 -0
- package/.next/server/app/apple-icon.png/route/app-paths-manifest.json +3 -0
- package/.next/server/app/apple-icon.png/route/build-manifest.json +9 -0
- package/.next/server/app/apple-icon.png/route.js +8 -0
- package/.next/server/app/apple-icon.png/route.js.map +5 -0
- package/.next/server/app/apple-icon.png/route.js.nft.json +1 -0
- package/.next/server/app/apple-icon.png.body +0 -0
- package/.next/server/app/apple-icon.png.meta +1 -0
- package/.next/server/app/help/page/app-paths-manifest.json +3 -0
- package/.next/server/app/help/page/build-manifest.json +17 -0
- package/.next/server/app/help/page/next-font-manifest.json +11 -0
- package/.next/server/app/help/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/help/page/server-reference-manifest.json +4 -0
- package/.next/server/app/help/page.js +16 -0
- package/.next/server/app/help/page.js.map +5 -0
- package/.next/server/app/help/page.js.nft.json +1 -0
- package/.next/server/app/help/page_client-reference-manifest.js +3 -0
- package/.next/server/app/help.html +1 -0
- package/.next/server/app/help.meta +15 -0
- package/.next/server/app/help.rsc +36 -0
- package/.next/server/app/help.segments/_full.segment.rsc +36 -0
- package/.next/server/app/help.segments/_head.segment.rsc +6 -0
- package/.next/server/app/help.segments/_index.segment.rsc +13 -0
- package/.next/server/app/help.segments/_tree.segment.rsc +5 -0
- package/.next/server/app/help.segments/help/__PAGE__.segment.rsc +17 -0
- package/.next/server/app/help.segments/help.segment.rsc +5 -0
- package/.next/server/app/icon.svg/route/app-paths-manifest.json +3 -0
- package/.next/server/app/icon.svg/route/build-manifest.json +9 -0
- package/.next/server/app/icon.svg/route.js +7 -0
- package/.next/server/app/icon.svg/route.js.map +5 -0
- package/.next/server/app/icon.svg/route.js.nft.json +1 -0
- package/.next/server/app/icon.svg.body +4 -0
- package/.next/server/app/icon.svg.meta +1 -0
- package/.next/server/app/index.html +1 -0
- package/.next/server/app/index.meta +14 -0
- package/.next/server/app/index.rsc +26 -0
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +7 -0
- package/.next/server/app/index.segments/_full.segment.rsc +26 -0
- package/.next/server/app/index.segments/_head.segment.rsc +6 -0
- package/.next/server/app/index.segments/_index.segment.rsc +13 -0
- package/.next/server/app/index.segments/_tree.segment.rsc +6 -0
- package/.next/server/app/map/page/app-paths-manifest.json +3 -0
- package/.next/server/app/map/page/build-manifest.json +17 -0
- package/.next/server/app/map/page/next-font-manifest.json +11 -0
- package/.next/server/app/map/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/map/page/server-reference-manifest.json +89 -0
- package/.next/server/app/map/page.js +25 -0
- package/.next/server/app/map/page.js.map +5 -0
- package/.next/server/app/map/page.js.nft.json +1 -0
- package/.next/server/app/map/page_client-reference-manifest.js +3 -0
- package/.next/server/app/page/app-paths-manifest.json +3 -0
- package/.next/server/app/page/build-manifest.json +17 -0
- package/.next/server/app/page/next-font-manifest.json +11 -0
- package/.next/server/app/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/page/server-reference-manifest.json +4 -0
- package/.next/server/app/page.js +16 -0
- package/.next/server/app/page.js.map +5 -0
- package/.next/server/app/page.js.nft.json +1 -0
- package/.next/server/app/page_client-reference-manifest.js +3 -0
- package/.next/server/app/plan/page/app-paths-manifest.json +3 -0
- package/.next/server/app/plan/page/build-manifest.json +17 -0
- package/.next/server/app/plan/page/next-font-manifest.json +11 -0
- package/.next/server/app/plan/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/plan/page/server-reference-manifest.json +89 -0
- package/.next/server/app/plan/page.js +26 -0
- package/.next/server/app/plan/page.js.map +5 -0
- package/.next/server/app/plan/page.js.nft.json +1 -0
- package/.next/server/app/plan/page_client-reference-manifest.js +3 -0
- package/.next/server/app/settings/page/app-paths-manifest.json +3 -0
- package/.next/server/app/settings/page/build-manifest.json +17 -0
- package/.next/server/app/settings/page/next-font-manifest.json +11 -0
- package/.next/server/app/settings/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/settings/page/server-reference-manifest.json +4 -0
- package/.next/server/app/settings/page.js +17 -0
- package/.next/server/app/settings/page.js.map +5 -0
- package/.next/server/app/settings/page.js.nft.json +1 -0
- package/.next/server/app/settings/page_client-reference-manifest.js +3 -0
- package/.next/server/app-paths-manifest.json +59 -0
- package/.next/server/chunks/[externals]_@huggingface_transformers_05bd-zz._.js +3 -0
- package/.next/server/chunks/[externals]_@huggingface_transformers_05bd-zz._.js.map +1 -0
- package/.next/server/chunks/[externals]__1m_jh08._.js +3 -0
- package/.next/server/chunks/[externals]__1m_jh08._.js.map +1 -0
- package/.next/server/chunks/[externals]_next_dist_1081pat._.js +3 -0
- package/.next/server/chunks/[externals]_next_dist_1081pat._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0--8e0y._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0--8e0y._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0-68r22._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0-68r22._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__008acf8._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__008acf8._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__00rostp._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__00rostp._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__04deymo._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__04deymo._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__05_ckr9._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__05_ckr9._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__08b769e._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__08b769e._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0935gge._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0935gge._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0b04f4n._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0b04f4n._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0bule95._.js +11 -0
- package/.next/server/chunks/[root-of-the-server]__0bule95._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0dgnobj._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0dgnobj._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0fnoun8._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0fnoun8._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0gcvcx_._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0gcvcx_._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0gnu9c5._.js +11 -0
- package/.next/server/chunks/[root-of-the-server]__0gnu9c5._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0imrhoi._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0imrhoi._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0iq9oau._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0iq9oau._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0k_e0ex._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0k_e0ex._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0kj4pte._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0kj4pte._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0muvnnv._.js +11 -0
- package/.next/server/chunks/[root-of-the-server]__0muvnnv._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0olqs85._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0olqs85._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0r4ba8s._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0r4ba8s._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0sb_5m8._.js +20 -0
- package/.next/server/chunks/[root-of-the-server]__0sb_5m8._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0y6kb2t._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0y6kb2t._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0zfwiuh._.js +11 -0
- package/.next/server/chunks/[root-of-the-server]__0zfwiuh._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__11037f1._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__11037f1._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1197yfd._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1197yfd._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__138pbmp._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__138pbmp._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__166th-t._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__166th-t._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__190_wb7._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__190_wb7._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__190zu98._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__190zu98._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1_7ntsu._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1_7ntsu._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1bwqb44._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1bwqb44._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1d6w22k._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1d6w22k._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1d9wmd_._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1d9wmd_._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1j25n4-._.js +5 -0
- package/.next/server/chunks/[root-of-the-server]__1j25n4-._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1jtw_i1._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1jtw_i1._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1lv6sqm._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1lv6sqm._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1m2v05v._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1m2v05v._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1n-kcwj._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1n-kcwj._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1nn9crd._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1nn9crd._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1rimo-u._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1rimo-u._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1sb7b9b._.js +9 -0
- package/.next/server/chunks/[root-of-the-server]__1sb7b9b._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1t2egm-._.js +9 -0
- package/.next/server/chunks/[root-of-the-server]__1t2egm-._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1t3s3-y._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1t3s3-y._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1tab6-_._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1tab6-_._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1v3_x0a._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1v3_x0a._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1vq6_bb._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1vq6_bb._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1xfg6n4._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1xfg6n4._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1y_g68p._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1y_g68p._.js.map +1 -0
- package/.next/server/chunks/[turbopack]_runtime.js +903 -0
- package/.next/server/chunks/[turbopack]_runtime.js.map +11 -0
- package/.next/server/chunks/_0-k8r4o._.js +3 -0
- package/.next/server/chunks/_0-k8r4o._.js.map +1 -0
- package/.next/server/chunks/_00drqg3._.js +3 -0
- package/.next/server/chunks/_00drqg3._.js.map +1 -0
- package/.next/server/chunks/_04_hx58._.js +3 -0
- package/.next/server/chunks/_04_hx58._.js.map +1 -0
- package/.next/server/chunks/_0bj_zep._.js +3 -0
- package/.next/server/chunks/_0bj_zep._.js.map +1 -0
- package/.next/server/chunks/_0d9p87n._.js +3 -0
- package/.next/server/chunks/_0d9p87n._.js.map +1 -0
- package/.next/server/chunks/_0uzzk4s._.js +3 -0
- package/.next/server/chunks/_0uzzk4s._.js.map +1 -0
- package/.next/server/chunks/_0x--pb9._.js +3 -0
- package/.next/server/chunks/_0x--pb9._.js.map +1 -0
- package/.next/server/chunks/_1-006gs._.js +11 -0
- package/.next/server/chunks/_1-006gs._.js.map +1 -0
- package/.next/server/chunks/_1gmut2r._.js +3 -0
- package/.next/server/chunks/_1gmut2r._.js.map +1 -0
- package/.next/server/chunks/_1h7jba5._.js +3 -0
- package/.next/server/chunks/_1h7jba5._.js.map +1 -0
- package/.next/server/chunks/_1p13_nj._.js +3 -0
- package/.next/server/chunks/_1p13_nj._.js.map +1 -0
- package/.next/server/chunks/_1v92m46._.js +11 -0
- package/.next/server/chunks/_1v92m46._.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_code-graph_position_route_actions_0ddmfq8.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_code-graph_position_route_actions_0ddmfq8.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_code-graph_route_actions_107oiy1.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_code-graph_route_actions_107oiy1.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_context_embed-backfill_route_actions_0fddf11.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_context_embed-backfill_route_actions_0fddf11.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_context_feature_route_actions_0g4_r0t.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_context_feature_route_actions_0g4_r0t.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_context_file_route_actions_1v15k33.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_context_file_route_actions_1v15k33.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_context_route_actions_066vuc0.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_context_route_actions_066vuc0.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_db_backfill-access_route_actions_0krkam5.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_db_backfill-access_route_actions_0krkam5.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_db_position_route_actions_0y81s5h.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_db_position_route_actions_0y81s5h.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_db_reconcile-endpoints_route_actions_11wjo3_.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_db_reconcile-endpoints_route_actions_11wjo3_.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_db_relations_[id]_route_actions_0ok7b-c.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_db_relations_[id]_route_actions_0ok7b-c.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_db_tables_[id]_route_actions_17b6_8p.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_db_tables_[id]_route_actions_17b6_8p.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_draft_approve_route_actions_12l1gql.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_draft_approve_route_actions_12l1gql.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_draft_route_actions_1y2euqt.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_draft_route_actions_1y2euqt.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_draft_status_route_actions_0imc7yr.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_draft_status_route_actions_0imc7yr.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_edges_[id]_route_actions_1rx28dy.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_edges_[id]_route_actions_1rx28dy.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_edges_route_actions_1i6-f0p.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_edges_route_actions_1i6-f0p.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_endpoints_[id]_route_actions_1hynl36.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_endpoints_[id]_route_actions_1hynl36.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_entities_route_actions_1jx0-vm.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_entities_route_actions_1jx0-vm.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_ingest_route_actions_1oz_9xc.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_ingest_route_actions_1oz_9xc.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_init_route_actions_00i08o0.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_init_route_actions_00i08o0.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_map_describe_route_actions_04m22-e.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_map_describe_route_actions_04m22-e.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_map_files_route_actions_1gsvfd9.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_map_files_route_actions_1gsvfd9.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_map_finish_route_actions_130bs5b.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_map_finish_route_actions_130bs5b.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_map_route_actions_1ylt-yg.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_map_route_actions_1ylt-yg.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_map_start_route_actions_1n4zdon.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_map_start_route_actions_1n4zdon.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_map_touch-active_route_actions_0wvoq-h.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_map_touch-active_route_actions_0wvoq-h.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_nodes_[id]_position_route_actions_0_695u2.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_nodes_[id]_position_route_actions_0_695u2.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_nodes_[id]_route_actions_017e_f3.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_nodes_[id]_route_actions_017e_f3.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_nodes_positions_route_actions_1pz3o9o.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_nodes_positions_route_actions_1pz3o9o.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_nodes_route_actions_0iuxxdu.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_nodes_route_actions_0iuxxdu.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_nodes_subtasks_route_actions_0uw715o.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_nodes_subtasks_route_actions_0uw715o.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_notes_[id]_route_actions_1kpl381.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_notes_[id]_route_actions_1kpl381.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_notes_route_actions_0mm_p_3.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_notes_route_actions_0mm_p_3.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_open_route_actions_1x77eq1.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_open_route_actions_1x77eq1.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_plan_annotations_route_actions_11aui44.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_plan_annotations_route_actions_11aui44.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_plan_approve_route_actions_06jkmnf.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_plan_approve_route_actions_06jkmnf.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_plan_history_route_actions_17hqx0m.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_plan_history_route_actions_17hqx0m.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_plan_markdown_route_actions_1qb1-9r.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_plan_markdown_route_actions_1qb1-9r.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_plan_presence_route_actions_1r91k5c.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_plan_presence_route_actions_1r91k5c.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_plan_route_actions_1_nzr8r.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_plan_route_actions_1_nzr8r.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_plan_verdict_route_actions_10xm0j8.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_plan_verdict_route_actions_10xm0j8.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_preferences_route_actions_14__a0r.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_preferences_route_actions_14__a0r.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_reset_route_actions_1tcp2ms.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_reset_route_actions_1tcp2ms.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_settings_route_actions_1bpm9ac.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_settings_route_actions_1bpm9ac.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_stream_route_actions_0oy6g75.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_stream_route_actions_0oy6g75.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_version_route_actions_0kbx30h.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_version_route_actions_0kbx30h.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_workspace_activate_route_actions_1hv2y82.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_workspace_activate_route_actions_1hv2y82.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_workspace_route_actions_19-xkal.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_workspace_route_actions_19-xkal.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_apple-icon_png_route_actions_0jcl8au.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_apple-icon_png_route_actions_0jcl8au.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_icon_svg_route_actions_1r2h_ub.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_icon_svg_route_actions_1r2h_ub.js.map +1 -0
- package/.next/server/chunks/instrumentation_ts_1oq3o45._.js +3 -0
- package/.next/server/chunks/instrumentation_ts_1oq3o45._.js.map +1 -0
- package/.next/server/chunks/lib_04zrdtl._.js +3 -0
- package/.next/server/chunks/lib_04zrdtl._.js.map +1 -0
- package/.next/server/chunks/lib_0rad2y6._.js +3 -0
- package/.next/server/chunks/lib_0rad2y6._.js.map +1 -0
- package/.next/server/chunks/lib_10tibe8._.js +7 -0
- package/.next/server/chunks/lib_10tibe8._.js.map +1 -0
- package/.next/server/chunks/lib_1upr0dj._.js +3 -0
- package/.next/server/chunks/lib_1upr0dj._.js.map +1 -0
- package/.next/server/chunks/lib_1wz-3od._.js +3 -0
- package/.next/server/chunks/lib_1wz-3od._.js.map +1 -0
- package/.next/server/chunks/lib_1xzwro7._.js +3 -0
- package/.next/server/chunks/lib_1xzwro7._.js.map +1 -0
- package/.next/server/chunks/lib_db_ts_0h_yn5m._.js +3 -0
- package/.next/server/chunks/lib_db_ts_0h_yn5m._.js.map +1 -0
- package/.next/server/chunks/lib_drizzle_provision_ts_1po9dyo._.js +3 -0
- package/.next/server/chunks/lib_drizzle_provision_ts_1po9dyo._.js.map +1 -0
- package/.next/server/chunks/lib_drizzle_schema_ts_0ixydnz._.js +3 -0
- package/.next/server/chunks/lib_drizzle_schema_ts_0ixydnz._.js.map +1 -0
- package/.next/server/chunks/lib_roadmap-force-layout_ts_0e5r3g2._.js +3 -0
- package/.next/server/chunks/lib_roadmap-force-layout_ts_0e5r3g2._.js.map +1 -0
- package/.next/server/chunks/node_modules_drizzle-orm_05n3ooz._.js +3 -0
- package/.next/server/chunks/node_modules_drizzle-orm_05n3ooz._.js.map +1 -0
- package/.next/server/chunks/node_modules_drizzle-orm_0cht0an._.js +3 -0
- package/.next/server/chunks/node_modules_drizzle-orm_0cht0an._.js.map +1 -0
- package/.next/server/chunks/node_modules_drizzle-orm_0ma7f2e._.js +4 -0
- package/.next/server/chunks/node_modules_drizzle-orm_0ma7f2e._.js.map +1 -0
- package/.next/server/chunks/node_modules_drizzle-orm_0q0hg2u._.js +4 -0
- package/.next/server/chunks/node_modules_drizzle-orm_0q0hg2u._.js.map +1 -0
- package/.next/server/chunks/node_modules_drizzle-orm_0rs3wbv._.js +3 -0
- package/.next/server/chunks/node_modules_drizzle-orm_0rs3wbv._.js.map +1 -0
- package/.next/server/chunks/node_modules_drizzle-orm_index_1qnscv7.js +3 -0
- package/.next/server/chunks/node_modules_drizzle-orm_index_1qnscv7.js.map +1 -0
- package/.next/server/chunks/node_modules_drizzle-orm_libsql_0yabams._.js +15 -0
- package/.next/server/chunks/node_modules_drizzle-orm_libsql_0yabams._.js.map +1 -0
- package/.next/server/chunks/node_modules_next_08s853w._.js +13 -0
- package/.next/server/chunks/node_modules_next_08s853w._.js.map +1 -0
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0qz67ql.js +3 -0
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0qz67ql.js.map +1 -0
- package/.next/server/chunks/node_modules_zod_v4_classic_external_1-pw2v2.js +64 -0
- package/.next/server/chunks/node_modules_zod_v4_classic_external_1-pw2v2.js.map +1 -0
- package/.next/server/chunks/ssr/[externals]_@huggingface_transformers_05bd-zz._.js +3 -0
- package/.next/server/chunks/ssr/[externals]_@huggingface_transformers_05bd-zz._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__00vz2sw._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__00vz2sw._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__07b655z._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__07b655z._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0dr0a32._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0dr0a32._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0jx25ik._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0jx25ik._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0nqskgw._.js +19 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0nqskgw._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0pkeb0m._.js +9 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0pkeb0m._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0s74gvr._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0s74gvr._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0v7a-e-._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0v7a-e-._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0x4-71n._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0x4-71n._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0xqf488._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0xqf488._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0y_88xg._.js +33 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0y_88xg._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1-yyv5l._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1-yyv5l._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1366qju._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1366qju._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1_ustu7._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1_ustu7._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1dky4g0._.js +33 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1dky4g0._.js.map +1 -0
- package/.next/server/chunks/ssr/[turbopack]_runtime.js +903 -0
- package/.next/server/chunks/ssr/[turbopack]_runtime.js.map +11 -0
- package/.next/server/chunks/ssr/_0eabx1f._.js +3 -0
- package/.next/server/chunks/ssr/_0eabx1f._.js.map +1 -0
- package/.next/server/chunks/ssr/_0ni84yi._.js +3 -0
- package/.next/server/chunks/ssr/_0ni84yi._.js.map +1 -0
- package/.next/server/chunks/ssr/_0pgw716._.js +67 -0
- package/.next/server/chunks/ssr/_0pgw716._.js.map +1 -0
- package/.next/server/chunks/ssr/_0r84jcg._.js +6 -0
- package/.next/server/chunks/ssr/_0r84jcg._.js.map +1 -0
- package/.next/server/chunks/ssr/_15if8ma._.js +3 -0
- package/.next/server/chunks/ssr/_15if8ma._.js.map +1 -0
- package/.next/server/chunks/ssr/_176djsq._.js +4 -0
- package/.next/server/chunks/ssr/_176djsq._.js.map +1 -0
- package/.next/server/chunks/ssr/_179xsho._.js +3 -0
- package/.next/server/chunks/ssr/_179xsho._.js.map +1 -0
- package/.next/server/chunks/ssr/_1_n8arv._.js +3 -0
- package/.next/server/chunks/ssr/_1_n8arv._.js.map +1 -0
- package/.next/server/chunks/ssr/_1suxp_q._.js +3 -0
- package/.next/server/chunks/ssr/_1suxp_q._.js.map +1 -0
- package/.next/server/chunks/ssr/_1vt70iy._.js +18 -0
- package/.next/server/chunks/ssr/_1vt70iy._.js.map +1 -0
- package/.next/server/chunks/ssr/_1w2komx._.js +3 -0
- package/.next/server/chunks/ssr/_1w2komx._.js.map +1 -0
- package/.next/server/chunks/ssr/_1w73gpg._.js +4 -0
- package/.next/server/chunks/ssr/_1w73gpg._.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_0zi5s8-.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_0zi5s8-.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_0pt47yr.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_0pt47yr.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_help_page_actions_04daq_g.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_help_page_actions_04daq_g.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_page_actions_0hhsz1j.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_page_actions_0hhsz1j.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_settings_page_actions_11x4dq5.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_settings_page_actions_11x4dq5.js.map +1 -0
- package/.next/server/chunks/ssr/components_1wolv70._.js +157 -0
- package/.next/server/chunks/ssr/components_1wolv70._.js.map +1 -0
- package/.next/server/chunks/ssr/components_graph_files-map-client_tsx_10bha9z._.js +3 -0
- package/.next/server/chunks/ssr/components_graph_files-map-client_tsx_10bha9z._.js.map +1 -0
- package/.next/server/chunks/ssr/components_landing_landing_tsx_1_9k5z7._.js +3 -0
- package/.next/server/chunks/ssr/components_landing_landing_tsx_1_9k5z7._.js.map +1 -0
- package/.next/server/chunks/ssr/components_plan_plan-workspace_tsx_0t1topu._.js +3 -0
- package/.next/server/chunks/ssr/components_plan_plan-workspace_tsx_0t1topu._.js.map +1 -0
- package/.next/server/chunks/ssr/lib_13g58ln._.js +3 -0
- package/.next/server/chunks/ssr/lib_13g58ln._.js.map +1 -0
- package/.next/server/chunks/ssr/lib_db_ts_0bo045t._.js +3 -0
- package/.next/server/chunks/ssr/lib_db_ts_0bo045t._.js.map +1 -0
- package/.next/server/chunks/ssr/lib_drizzle_schema_ts_0oz5uob._.js +3 -0
- package/.next/server/chunks/ssr/lib_drizzle_schema_ts_0oz5uob._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_0h91jdk._.js +33 -0
- package/.next/server/chunks/ssr/node_modules_0h91jdk._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_0vtauab._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_0vtauab._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_drizzle-orm_0txo559._.js +4 -0
- package/.next/server/chunks/ssr/node_modules_drizzle-orm_0txo559._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_drizzle-orm_1d7zgzr._.js +4 -0
- package/.next/server/chunks/ssr/node_modules_drizzle-orm_1d7zgzr._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_drizzle-orm_1zqkwdy._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_drizzle-orm_1zqkwdy._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_drizzle-orm_202ujxv._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_drizzle-orm_202ujxv._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_drizzle-orm_index_0ji3_g8.js +3 -0
- package/.next/server/chunks/ssr/node_modules_drizzle-orm_index_0ji3_g8.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_drizzle-orm_libsql_06opikx._.js +15 -0
- package/.next/server/chunks/ssr/node_modules_drizzle-orm_libsql_06opikx._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_shield-check_mjs_1cccgdy._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_shield-check_mjs_1cccgdy._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0890nbp._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0890nbp._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0airgni._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0airgni._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0alesp5._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0alesp5._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0uboya6._.js +6 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0uboya6._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_0wpq8j3._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_0wpq8j3._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_0symwr9.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_0symwr9.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0-o-goa.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0-o-goa.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0l_sp0x.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0l_sp0x.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_compiled_@opentelemetry_api_index_1oy1nwh.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_compiled_@opentelemetry_api_index_1oy1nwh.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0d7qbqa.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0d7qbqa.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0s87tpk.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0s87tpk.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_114qdo2.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_114qdo2.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19--w_z.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19--w_z.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19_kztz.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19_kztz.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19qzf81.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19qzf81.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1wge0av.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1wge0av.js.map +1 -0
- package/.next/server/edge/chunks/_0o_tvsk._.js +3 -0
- package/.next/server/edge/chunks/_0o_tvsk._.js.map +1 -0
- package/.next/server/edge/chunks/node_modules_next_dist_esm_build_templates_edge-wrapper_1ipl-lx.js.map +1 -0
- package/.next/server/edge/chunks/turbopack-node_modules_next_dist_esm_build_templates_edge-wrapper_1ipl-lx.js +3 -0
- package/.next/server/functions-config-manifest.json +14 -0
- package/.next/server/instrumentation/middleware-manifest.json +12 -0
- package/.next/server/instrumentation.js +4 -0
- package/.next/server/instrumentation.js.map +5 -0
- package/.next/server/instrumentation.js.nft.json +1 -0
- package/.next/server/interception-route-rewrite-manifest.js +1 -0
- package/.next/server/middleware/middleware-manifest.json +6 -0
- package/.next/server/middleware-build-manifest.js +21 -0
- package/.next/server/middleware-manifest.json +6 -0
- package/.next/server/middleware.js +5 -0
- package/.next/server/middleware.js.map +5 -0
- package/.next/server/middleware.js.nft.json +1 -0
- package/.next/server/next-font-manifest.js +1 -0
- package/.next/server/next-font-manifest.json +31 -0
- package/.next/server/pages/404.html +1 -0
- package/.next/server/pages/500.html +1 -0
- package/.next/server/pages-manifest.json +4 -0
- package/.next/server/prefetch-hints.json +1 -0
- package/.next/server/server-reference-manifest.js +1 -0
- package/.next/server/server-reference-manifest.json +132 -0
- package/.next/static/_wmO3ZSrpuwty88NNlnrH/_buildManifest.js +11 -0
- package/.next/static/_wmO3ZSrpuwty88NNlnrH/_clientMiddlewareManifest.js +6 -0
- package/.next/static/_wmO3ZSrpuwty88NNlnrH/_ssgManifest.js +1 -0
- package/.next/static/chunks/01dkdyukbdpqq.js +31 -0
- package/.next/static/chunks/05-c3ty_6dwfk.js +1 -0
- package/.next/static/chunks/07u_h6i539_wj.js +2 -0
- package/.next/static/chunks/09wlenlnsbkl7.js +2 -0
- package/.next/static/chunks/0_9p121-4am0a.js +1 -0
- package/.next/static/chunks/0cz1d0mv5g_q7.js +1 -0
- package/.next/static/chunks/19cl65vz3pos0.js +1 -0
- package/.next/static/chunks/19hoowcssv0w1.css +1 -0
- package/.next/static/chunks/1bk_i_akra521.css +2 -0
- package/.next/static/chunks/1pp98vred9isg.js +1 -0
- package/.next/static/chunks/2-t6-hz_de2nr.js +155 -0
- package/.next/static/chunks/203o948823s96.css +1 -0
- package/.next/static/chunks/245vq4i7_x7tm.js +1 -0
- package/.next/static/chunks/27jktro2p5rq9.js +4 -0
- package/.next/static/chunks/2hpdskhtooxl4.js +1 -0
- package/.next/static/chunks/368etk_9oovhj.js +1 -0
- package/.next/static/chunks/3n7dm2ojtyzwn.js +1 -0
- package/.next/static/chunks/3oc95d6bep78a.css +1 -0
- package/.next/static/chunks/3qp8f4catg9zw.js +2 -0
- package/.next/static/chunks/3ywpldblg905c.js +1 -0
- package/.next/static/chunks/4397avi9yar6d.js +1 -0
- package/.next/static/chunks/44_nvrzzjs0pv.js +1 -0
- package/.next/static/chunks/turbopack-0rldyqi2kcq2j.js +1 -0
- package/.next/static/media/4fa387ec64143e14-s.2tuy5pz7dlieh.woff2 +0 -0
- package/.next/static/media/53b9e256198e5412-s.390ncx5urfkfu.woff2 +0 -0
- package/.next/static/media/5ce348bf30bf5439-s.31988l_ccedte.woff2 +0 -0
- package/.next/static/media/6306c77e7c8268e4-s.2dbetqa9o8jxf.woff2 +0 -0
- package/.next/static/media/7178b3e590c64307-s.21jp631_3pja2.woff2 +0 -0
- package/.next/static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2 +0 -0
- package/.next/static/media/7d817b4c03b0c5f1-s.1uyisp29ctx0d.woff2 +0 -0
- package/.next/static/media/8a480f0b521d4e75-s.1qq4vpdcun5oj.woff2 +0 -0
- package/.next/static/media/apple-icon.0qbqv4vpdxdo0.png +0 -0
- package/.next/static/media/bbc41e54d2fcbd21-s.1rgnod-3esatf.woff2 +0 -0
- package/.next/static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2 +0 -0
- package/.next/static/media/fef07dbb0973bf53-s.3p2_lha1f2xer.woff2 +0 -0
- package/.next/static/media/icon.23_qbw6oy1xqy.svg +4 -0
- package/.next/trace +2 -0
- package/.next/trace-build +1 -0
- package/.next/turbopack +0 -0
- package/.next/types/cache-life.d.ts +145 -0
- package/.next/types/routes.d.ts +124 -0
- package/.next/types/validator.ts +538 -0
- package/README.md +94 -0
- package/dist/bin/beacon.js +10 -0
- package/dist/bin/doctor.js +227 -0
- package/dist/bin/hook.js +225 -0
- package/dist/bin/mcp.js +247 -0
- package/dist/bin/plan.js +228 -0
- package/dist/bin/prompt.js +4 -0
- package/dist/bin/stop-hook.js +5 -0
- package/dist/bin/uninstall.js +228 -0
- package/dist/lib/assets.js +192 -0
- package/dist/lib/global-install.js +224 -0
- package/dist/lib/workspaces.js +2 -0
- package/drizzle/0000_bitter_network.sql +230 -0
- package/drizzle/meta/0000_snapshot.json +1589 -0
- package/drizzle/meta/_journal.json +13 -0
- package/next.config.ts +15 -0
- package/package.json +90 -0
- package/public/brand/beacon-apple.svg +30 -0
- package/public/brand/beacon-glyph-128.png +0 -0
- package/public/brand/beacon-glyph-512.png +0 -0
- package/public/brand/beacon-glyph-mono-128.png +0 -0
- package/public/brand/beacon-glyph-mono-512.png +0 -0
- package/public/brand/beacon-glyph-mono.svg +4 -0
- package/public/brand/beacon-glyph.svg +21 -0
- package/public/brand/beacon-icon-1024.png +0 -0
- package/public/brand/beacon-icon-192.png +0 -0
- package/public/brand/beacon-icon-256.png +0 -0
- package/public/brand/beacon-icon-32.png +0 -0
- package/public/brand/beacon-icon-512.png +0 -0
- package/public/brand/beacon-icon-64.png +0 -0
- package/public/brand/beacon-icon-light-192.png +0 -0
- package/public/brand/beacon-icon-light-512.png +0 -0
- package/public/brand/beacon-icon-light.svg +31 -0
- package/public/brand/beacon-icon.svg +33 -0
- package/public/brand/beacon-wordmark-1200.png +0 -0
- package/public/brand/beacon-wordmark.svg +38 -0
- package/public/brand/favicon-16.png +0 -0
- package/public/brand/favicon-32.png +0 -0
- package/public/file.svg +1 -0
- package/public/globe.svg +1 -0
- package/public/install.sh +55 -0
- package/public/next.svg +1 -0
- package/public/vercel.svg +1 -0
- package/public/window.svg +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../lib/plan-history.ts","../../../lib/design.ts","../../../lib/feature-design.ts","../../../lib/plan-markdown.ts","../../../lib/plan-block.ts","../../../lib/plan-verdict.ts","../../../lib/plan-resolve.ts"],"sourcesContent":["import { mkdirSync, readFileSync, readdirSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\nimport { dataDir } from \"@/lib/project\";\nimport { writeJsonAtomic } from \"@/lib/atomic-write\";\n\n// Plan history: every time a plan resolves (approve/discard), Beacon archives a snapshot\n// of the markdown + annotations + verdict so the user can browse past proposals later.\n// Files live under dataDir()/plans/history as plain JSON, ordered by mtime.\n\nexport interface ArchivedPlan {\n id: string;\n description: string;\n markdown: string;\n verdict: \"approved\" | \"discarded\";\n archivedAt: number;\n annotations?: unknown;\n globalComment?: string;\n // Snapshots of the canvas at archive time so the history view can re-render the board\n // even if the live DB has moved on (or, for discarded plans, never had the draft).\n draftDoc?: unknown; // DraftDoc — tables/relations/endpoints\n featureGraph?: unknown; // FeatureGraph — proposed features\n}\n\nfunction dir(): string {\n const d = join(dataDir(), \"plans\", \"history\");\n mkdirSync(d, { recursive: true });\n return d;\n}\n\nexport function archivePlan(p: Omit<ArchivedPlan, \"id\" | \"archivedAt\">): ArchivedPlan {\n const archived: ArchivedPlan = {\n ...p,\n id: randomUUID().slice(0, 8),\n archivedAt: Date.now(),\n };\n writeJsonAtomic(join(dir(), `${archived.id}.json`), archived, true);\n return archived;\n}\n\nexport function listHistory(): ArchivedPlan[] {\n let entries: string[];\n try {\n entries = readdirSync(dir());\n } catch {\n return [];\n }\n const items: ArchivedPlan[] = [];\n for (const name of entries) {\n if (!name.endsWith(\".json\")) continue;\n try {\n const p = join(dir(), name);\n const raw = readFileSync(p, \"utf8\");\n const parsed = JSON.parse(raw) as ArchivedPlan;\n items.push(parsed);\n } catch {\n /* skip corrupt */\n }\n }\n return items.sort((a, b) => b.archivedAt - a.archivedAt);\n}\n\nexport function readArchivedPlan(id: string): ArchivedPlan | null {\n try {\n const raw = readFileSync(join(dir(), `${id}.json`), \"utf8\");\n return JSON.parse(raw) as ArchivedPlan;\n } catch {\n return null;\n }\n}\n\n// Hook fixture for tests — exposes mtime of a path safely.\nexport function archivedMtime(id: string): number | null {\n try {\n return statSync(join(dir(), `${id}.json`)).mtimeMs;\n } catch {\n return null;\n }\n}\n","import { z } from \"zod\";\nimport { accessForMethod } from \"@/lib/access\";\n\n// The name-keyed proposal shape the terminal session pushes via `beacon_propose_plan`.\n// It's positioned + given ids by lib/draft-store (graphToDoc) into a DraftDoc, which is\n// what the /db canvas actually edits. Endpoints may declare which tables they touch via\n// `uses` so the canvas can draw the links.\n\n// A single column. The agent sometimes lists columns as bare strings (\"id\", \"name uuid\") instead\n// of objects — coerce \"<name> [type…]\" into a column up front (preprocess) so the OUTPUT is always\n// the full column shape and the table still renders instead of the whole block being dropped.\nexport const columnSchema = z.preprocess(\n (c) => {\n if (typeof c === \"string\") {\n const [name, ...rest] = c.trim().split(/\\s+/);\n return { name, type: rest.join(\" \") || \"text\" };\n }\n return c;\n },\n z.object({\n name: z.string().trim().min(1),\n type: z.string().trim().min(1),\n isPk: z.boolean().optional(),\n isFk: z.boolean().optional(),\n nullable: z.boolean().optional(),\n note: z.string().nullish(),\n }),\n);\n\nexport const tableSchema = z.object({\n name: z.string().trim().min(1),\n domain: z.string().nullish(),\n description: z.string().nullish(),\n columns: z.array(columnSchema).default([]),\n});\n\nexport const relationSchema = z.object({\n fromTable: z.string(),\n fromColumn: z.string(),\n toTable: z.string(),\n toColumn: z.string(),\n label: z.string().nullish(),\n});\n\nexport const endpointSchema = z\n .object({\n method: z.string().trim().min(1),\n path: z.string().trim().min(1),\n domain: z.string().nullish(),\n description: z.string().nullish(),\n uses: z\n .array(\n z.object({\n table: z.string().trim().min(1),\n access: z.string().optional(),\n }),\n )\n .default([]),\n })\n // Unspecified access defaults to the verb's intent (PATCH/DELETE write, GET reads).\n .transform((e) => ({\n ...e,\n uses: e.uses.map((u) => ({ ...u, access: u.access ?? accessForMethod(e.method) })),\n }));\n\nexport const draftSchema = z.object({\n tables: z.array(tableSchema).default([]),\n relations: z.array(relationSchema).default([]),\n endpoints: z.array(endpointSchema).default([]),\n});\nexport type DraftGraph = z.infer<typeof draftSchema>;\n","import { z } from \"zod\";\nimport { and, eq, inArray } from \"drizzle-orm\";\nimport { db, type DB } from \"@/lib/db-drizzle\";\nimport { node, edge } from \"@/lib/drizzle/schema\";\nimport { forceLayoutRoadmap } from \"@/lib/roadmap-force-layout\";\n\n// Feature draft schema: top-level roadmap nodes the terminal session pushes via\n// `beacon_propose_plan`. Persisted as DRAFT Nodes (view=ROADMAP, source=DRAFT) so they\n// render on the /map roadmap canvas as a draft layer, parallel to the /db draft.\n\ntype Prisma = DB;\n\nexport const featureItemSchema = z\n .object({\n title: z.string().trim().min(1),\n role: z.string().nullish(),\n plain: z.string().nullish(),\n cluster: z.string().nullish(),\n // The agent + UI both call the category \"category\", and \"domain\" is the adjacent word\n // it reaches for — accept all three and normalize to `cluster` below so a plan written\n // with `category` (the natural choice) isn't dropped on the floor.\n category: z.string().nullish(),\n domain: z.string().nullish(),\n // Any number is accepted and CLAMPED to 0..3 below — the agent's scale (often 1..4 or\n // 1..5) shouldn't drop the feature. Kept nullish for parse tolerance; the propose-plan\n // flow REQUIRES it via validateProposedFeatures (lib/feature-rules) before persisting.\n priority: z.number().nullish(),\n // Titles of other features in THIS plan that must ship first. Resolved into DEPENDS\n // edges so the board shows the dependency chain instead of disconnected cards. It's a\n // transport array only — never stored as a DB scalar list (it becomes Edge rows).\n dependsOn: z.array(z.string()).nullish(),\n })\n // Normalize the category aliases (`category`/`domain` → `cluster`) and clamp priority into\n // Beacon's P0..P3 range so a slightly-off plan still lands on the board instead of being\n // dropped wholesale.\n .transform(({ category, domain, priority, ...f }) => ({\n ...f,\n cluster: f.cluster ?? category ?? domain ?? null,\n priority: priority == null ? null : Math.max(0, Math.min(3, Math.round(priority))),\n }));\n\nexport const featureSchema = z.object({\n features: z.array(featureItemSchema).default([]),\n});\nexport type FeatureGraph = z.infer<typeof featureSchema>;\n\nexport async function clearFeatureDraft(prisma: Prisma = db) {\n await prisma.delete(node).where(and(eq(node.source, \"DRAFT\"), eq(node.view, \"ROADMAP\")));\n}\n\nexport async function persistFeatureDraft(graph: FeatureGraph, prisma: Prisma = db) {\n const g = featureSchema.parse(graph);\n await clearFeatureDraft(prisma);\n\n // Place the proposal below any existing roadmap cards so it doesn't overlap them.\n const top = await prisma.query.node.findFirst({\n where: (t, { eq }) => eq(t.view, \"ROADMAP\"),\n orderBy: (t, { desc }) => desc(t.y),\n });\n const baseY = (top?.y ?? 0) + 200;\n\n // Lay the draft out as an organic 2D graph (d3-force) so dependency-linked features cluster and\n // independent ones spread across the width — instead of a blind horizontal row. dependsOn titles\n // become edges; the layout keys off titles since the node ids don't exist yet.\n const titleSet = new Set(g.features.map((f) => f.title.trim()));\n const layoutNodes = g.features.map((f) => ({ id: f.title.trim() }));\n const layoutEdges = g.features.flatMap((f) =>\n (f.dependsOn ?? [])\n .map((d) => d.trim())\n .filter((d) => titleSet.has(d) && d !== f.title.trim())\n .map((d) => ({ fromId: f.title.trim(), toId: d })),\n );\n const pos = forceLayoutRoadmap(layoutNodes, layoutEdges);\n\n const idByTitle = new Map<string, string>();\n for (const f of g.features) {\n const p = pos.get(f.title.trim()) ?? { x: 0, y: 0 };\n const [created] = await prisma\n .insert(node)\n .values({\n view: \"ROADMAP\",\n source: \"DRAFT\",\n status: \"PENDING\",\n title: f.title,\n role: f.role ?? null,\n plain: f.plain ?? null,\n cluster: f.cluster ?? null,\n priority: f.priority ?? 2,\n x: p.x,\n y: p.y + baseY,\n })\n .returning();\n idByTitle.set(f.title.trim(), created.id);\n }\n\n // Auto-connect: turn each feature's `dependsOn` titles into DEPENDS edges so the proposal\n // renders as a connected dependency chain on /plan and /map instead of loose cards. Skip\n // unresolved titles + self-references; idempotent on the unique [fromId,toId,kind]. These\n // edges cascade-delete with the draft nodes on the next clearFeatureDraft, so re-proposing\n // is clean with no orphan edges.\n for (const f of g.features) {\n const fromId = idByTitle.get(f.title.trim());\n if (!fromId || !f.dependsOn) continue;\n for (const depTitle of f.dependsOn) {\n const toId = idByTitle.get(depTitle.trim());\n if (!toId || toId === fromId) continue;\n const exists = await prisma.query.edge.findFirst({\n where: (t, { and, eq }) =>\n and(eq(t.fromId, fromId), eq(t.toId, toId), eq(t.kind, \"DEPENDS\")),\n });\n if (!exists) await prisma.insert(edge).values({ fromId, toId, kind: \"DEPENDS\" });\n }\n }\n}\n\nexport async function getFeatureDraft(prisma: Prisma = db): Promise<FeatureGraph> {\n const nodes = await prisma.query.node.findMany({\n where: (t, { and, eq }) => and(eq(t.source, \"DRAFT\"), eq(t.view, \"ROADMAP\")),\n orderBy: (t, { asc }) => asc(t.createdAt),\n });\n // Reconstruct each feature's dependsOn (by title) from the DEPENDS edges among the draft\n // nodes, so a re-read / re-propose round-trips the dependency chain.\n const ids = nodes.map((n) => n.id);\n const edges = ids.length\n ? await prisma.query.edge.findMany({\n where: (t, { and, eq }) =>\n and(eq(t.kind, \"DEPENDS\"), inArray(t.fromId, ids), inArray(t.toId, ids)),\n })\n : [];\n const titleById = new Map(nodes.map((n) => [n.id, n.title]));\n const depsByFrom = new Map<string, string[]>();\n for (const e of edges) {\n const toTitle = titleById.get(e.toId);\n if (!toTitle) continue;\n const arr = depsByFrom.get(e.fromId) ?? [];\n arr.push(toTitle);\n depsByFrom.set(e.fromId, arr);\n }\n return {\n features: nodes.map((n) => ({\n title: n.title,\n role: n.role,\n plain: n.plain,\n cluster: n.cluster,\n priority: n.priority,\n dependsOn: depsByFrom.get(n.id),\n })),\n };\n}\n","import type { DraftDoc } from \"@/components/graph/db-types\";\nimport type { FeatureGraph } from \"@/lib/feature-design\";\n\n// Synthesizes the current proposal (DB draft + feature draft) into the markdown file\n// plannotator opens for annotation. Each frente / tabela / endpoint gets its own ###\n// heading so plannotator can scope the user's section-level Approve/Reject/Comment.\n\nexport function synthesizePlanMarkdown(\n description: string,\n dbDraft: DraftDoc | null,\n featureDraft: FeatureGraph | null,\n): string {\n const lines: string[] = [`# Plan: ${description}`, \"\"];\n\n const features = featureDraft?.features ?? [];\n if (features.length) {\n lines.push(\"## Features\", \"\");\n for (const f of features) {\n lines.push(`### ${f.title}`);\n if (f.cluster) lines.push(`*Domain:* \\`${f.cluster}\\``);\n if (f.role) lines.push(`*Role:* ${f.role}`);\n if (f.plain) lines.push(\"\", f.plain);\n lines.push(\"\");\n }\n }\n\n const tables = dbDraft?.tables ?? [];\n if (tables.length) {\n lines.push(\"## Database — Tables\", \"\");\n for (const t of tables) {\n lines.push(`### Table \\`${t.name}\\``);\n if (t.domain) lines.push(`*Domain:* \\`${t.domain}\\``);\n if (t.description) lines.push(\"\", t.description, \"\");\n for (const c of t.columns) {\n const flags = [c.isPk && \"PK\", c.isFk && \"FK\", c.nullable ? \"NULL\" : \"NOT NULL\"]\n .filter(Boolean)\n .join(\" \");\n lines.push(`- \\`${c.name}\\` ${c.type}${flags ? ` *${flags}*` : \"\"}${c.note ? ` — ${c.note}` : \"\"}`);\n }\n lines.push(\"\");\n }\n }\n\n const relations = dbDraft?.relations ?? [];\n if (relations.length) {\n const nameById = new Map(tables.map((t) => [t.id, t.name]));\n lines.push(\"## Database — Relations (FKs)\", \"\");\n for (const r of relations) {\n const from = nameById.get(r.fromTableId) ?? r.fromTableId;\n const to = nameById.get(r.toTableId) ?? r.toTableId;\n lines.push(`- \\`${from}.${r.fromColumn}\\` → \\`${to}.${r.toColumn}\\``);\n }\n lines.push(\"\");\n }\n\n const endpoints = dbDraft?.endpoints ?? [];\n if (endpoints.length) {\n const nameById = new Map(tables.map((t) => [t.id, t.name]));\n lines.push(\"## Endpoints\", \"\");\n for (const e of endpoints) {\n lines.push(`### ${e.method} ${e.path}`);\n if (e.domain) lines.push(`*Domain:* \\`${e.domain}\\``);\n if (e.description) lines.push(\"\", e.description);\n if (e.links.length) {\n const uses = e.links\n .map((l) => `\\`${nameById.get(l.tableId) ?? l.tableId}\\` (${l.access})`)\n .join(\", \");\n lines.push(\"\", `Touches: ${uses}`);\n }\n lines.push(\"\");\n }\n }\n\n return lines.join(\"\\n\");\n}\n","import { z } from \"zod\";\nimport {\n endpointSchema,\n relationSchema,\n tableSchema,\n type DraftGraph,\n} from \"@/lib/design\";\nimport { featureItemSchema, type FeatureGraph } from \"@/lib/feature-design\";\n\n// Deterministic (NO AI) extraction of a structured ```beacon block embedded in a plan-mode\n// markdown plan. The ExitPlanMode hook event carries only markdown — there is no structured\n// channel out of plan mode (MCP sampling is unsupported + deprecated) — so the agent embeds\n// one fenced ```beacon block of JSON ({ tables, relations, endpoints, features }) in the plan\n// it already writes. We parse + validate it with the SAME Zod schemas beacon_propose_plan\n// uses, then STRIP the block from the prose so the JSON is never shown in the annotation\n// panel. Any failure degrades to { prose: markdown } — a malformed block must never block the\n// plan from reaching the user.\n\nexport interface ExtractedPlan {\n prose: string;\n draft?: DraftGraph;\n features?: FeatureGraph[\"features\"];\n}\n\n// Strong, low-false-positive signals that a plan TOUCHES THE DATABASE — used to enforce that a\n// plan describing schema also SHIPS it structurally (in `tables`), not just in prose. Curated\n// to fire on real schema language (migrations, constraints, model files, column types) and NOT\n// on generic words like \"model\"/\"data\"/\"column\" alone.\nconst DB_SCHEMA_SIGNAL =\n /(\\bmigrations?\\b|\\balembic\\b|make revision|prisma migrate|unique\\s?constraint|foreign\\s?keys?|primary\\s?keys?|\\bFKs?\\b|\\bJSONB\\b|create\\s+table|alter\\s+table|add\\s+(a\\s+)?column|new\\s+(table|model|column)|app\\/models\\/|\\bBaseModel\\b|DeclarativeBase|schema\\.prisma|@@unique|natural\\s+keys?|\\bpgvector\\b|\\bTSVECTOR\\b|\\bDbTable\\b)/i;\n\n/** True when `text` clearly describes database schema (tables/models/migrations/columns). */\nexport function mentionsDbSchema(text: string | null | undefined): boolean {\n return !!text && DB_SCHEMA_SIGNAL.test(text);\n}\n\n// A fenced ```beacon … ``` block. The opening fence may carry trailing whitespace; the\n// closing fence is a line that is just ```. Only the first block is used. Case-insensitive\n// on the label, multiline body (non-greedy).\nconst BEACON_FENCE = /^[ \\t]*```beacon[ \\t]*\\r?\\n([\\s\\S]*?)\\r?\\n[ \\t]*```[ \\t]*$/im;\n\n// Parse an array PER-ITEM, keeping only the items that validate. One malformed table/relation/\n// feature must not nuke the whole block — that used to drop the ENTIRE board to raw prose when\n// the agent got a single field slightly wrong (a string column, an off-scale priority, a\n// relation in a different shape). Non-arrays → [].\nfunction parseEach<T>(value: unknown, schema: z.ZodType<T>): T[] {\n if (!Array.isArray(value)) return [];\n const out: T[] = [];\n for (const item of value) {\n const r = schema.safeParse(item);\n if (r.success) out.push(r.data);\n }\n return out;\n}\n\nexport function extractBeaconBlock(markdown: string): ExtractedPlan {\n const match = markdown.match(BEACON_FENCE);\n if (!match) return { prose: markdown };\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(match[1]);\n } catch {\n return { prose: markdown };\n }\n const obj = (parsed && typeof parsed === \"object\" ? parsed : {}) as Record<string, unknown>;\n\n // Each section is parsed independently and per-item, so a bad relation can't drop good tables,\n // and a bad table can't drop good features — the board renders everything Beacon understood.\n const tables = parseEach(obj.tables, tableSchema);\n const relations = parseEach(obj.relations, relationSchema);\n const endpoints = parseEach(obj.endpoints, endpointSchema);\n const features = parseEach(obj.features, featureItemSchema);\n\n const draft: DraftGraph | undefined =\n tables.length || endpoints.length || relations.length\n ? { tables, relations, endpoints }\n : undefined;\n const featureList: FeatureGraph[\"features\"] | undefined = features.length ? features : undefined;\n\n // Nothing usable — leave the prose untouched (and visible) rather than silently dropping it.\n if (!draft && !featureList) return { prose: markdown };\n\n const prose = markdown\n .replace(BEACON_FENCE, \"\")\n .replace(/\\n{3,}/g, \"\\n\\n\")\n .trim();\n return { prose, draft, features: featureList };\n}\n","import { readFileSync, rmSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { dataDir } from \"@/lib/project\";\nimport { writeJsonAtomic } from \"@/lib/atomic-write\";\n\n// The single authoritative plan-level verdict. Every terminal action (approve / discard),\n// whether it came from /plan, the /db canvas, or a markdown hook plan with no DB at all,\n// writes this one file. It's what `resolvePlanVerdict` (lib/plan-resolve.ts) reads so the\n// MCP tool and the ExitPlanMode hook can no longer disagree about what the user decided.\n// Lives next to plan-meta.json in the workspace data dir; cleared on a fresh round.\n\nexport interface PlanVerdict {\n proposedAt: number;\n status: \"approved\" | \"discarded\";\n summary: string;\n // Full approved schema (the agent reads the user's edited columns from here). Only set\n // when the approved plan carried a DB draft.\n detail?: string;\n // Titles of the roadmap features this plan created. Echoed back on approval so the agent\n // knows EXACTLY which features to mark done (beacon_describe_feature) as it ships each one\n // — without this it tends to register only umbrella work and leaves the rest Pending.\n features?: string[];\n decidedAt: number;\n}\n\nfunction verdictPath(): string {\n return join(dataDir(), \"plan-verdict.json\");\n}\n\nexport function readPlanVerdict(): PlanVerdict | null {\n try {\n return JSON.parse(readFileSync(verdictPath(), \"utf8\")) as PlanVerdict;\n } catch {\n return null;\n }\n}\n\nexport function writePlanVerdict(v: PlanVerdict): void {\n writeJsonAtomic(verdictPath(), v);\n}\n\nexport function clearPlanVerdict(): void {\n rmSync(verdictPath(), { force: true });\n}\n","import { and, eq } from \"drizzle-orm\";\nimport { db } from \"@/lib/db-drizzle\";\nimport { node } from \"@/lib/drizzle/schema\";\nimport type { DraftDoc } from \"@/components/graph/db-types\";\nimport {\n approveDraft,\n clearDraftDoc,\n describeApprovedDoc,\n discardDraft,\n readDraftDoc,\n} from \"@/lib/draft-store\";\nimport { clearFeatureDraft, getFeatureDraft, type FeatureGraph } from \"@/lib/feature-design\";\nimport { archivePlan } from \"@/lib/plan-history\";\nimport { synthesizePlanMarkdown } from \"@/lib/plan-markdown\";\nimport { extractBeaconBlock } from \"@/lib/plan-block\";\nimport { clearPlanMeta, readPlanMeta } from \"@/lib/plan-meta\";\nimport { clearPlanVerdict, readPlanVerdict, writePlanVerdict } from \"@/lib/plan-verdict\";\nimport {\n clearStoredAnnotations,\n readAnnotationFeedback,\n readStoredAnnotations,\n} from \"@/lib/plan-annotations-store\";\nimport { bumpVersion } from \"@/lib/ingest\";\n\n// The unification core for the plan feedback loop. EVERY terminal action (approve / discard)\n// from EVERY entry point (/plan buttons, the /db canvas buttons) routes through approvePlan /\n// discardPlan here, so archiving, feature promotion, cleanup, and the authoritative\n// plan-verdict are identical regardless of which button was clicked. Both pollers (the MCP\n// tool and the ExitPlanMode hook) read resolvePlanVerdict, so they can never disagree.\n//\n// This module does NOT pin a workspace — callers (route handlers) wrap it in\n// runWithWorkspace so disk + db target the right repo.\n\ninterface PlanSnapshot {\n description: string;\n markdown: string;\n draftDoc: DraftDoc | null;\n featureGraph: FeatureGraph;\n annotations: unknown;\n globalComment: string;\n}\n\n// Read the plan exactly as it stands BEFORE any mutation, so history captures what was\n// proposed (mirrors the inline reads /api/plan/approve and /api/plan DELETE used to do).\nasync function snapshotPlan(): Promise<PlanSnapshot> {\n const meta = readPlanMeta();\n const draftDoc = readDraftDoc();\n const featureGraph = await getFeatureDraft();\n const stored = readStoredAnnotations();\n const description = meta?.description ?? \"(no description)\";\n // Strip any surviving ```beacon block so archived history never shows the machine-only JSON\n // (mirrors the /plan page's render-time guard; same canonical matcher).\n const markdown = meta?.markdown\n ? extractBeaconBlock(meta.markdown).prose\n : synthesizePlanMarkdown(description, draftDoc, featureGraph);\n return {\n description,\n markdown,\n draftDoc,\n featureGraph,\n annotations: stored.annotations,\n globalComment: stored.globalComment,\n };\n}\n\n// Wipe everything a resolved plan leaves behind EXCEPT the plan-verdict — that's the signal\n// the pollers are waiting on.\nasync function cleanupPlan(): Promise<void> {\n await clearFeatureDraft();\n clearDraftDoc();\n clearPlanMeta();\n clearStoredAnnotations();\n}\n\nexport async function approvePlan(opts?: { doc?: DraftDoc | null }): Promise<{\n db: { tables: number; relations: number; endpoints: number } | null;\n features: number;\n}> {\n const meta = readPlanMeta();\n const snap = await snapshotPlan();\n // The /db canvas sends the browser-edited doc; /plan approves the on-disk draft as-is.\n const doc = opts?.doc ?? snap.draftDoc;\n\n const dbCount = doc ? await approveDraft(doc) : null;\n const promoted = await db\n .update(node)\n .set({ source: \"MANUAL\" })\n .where(and(eq(node.source, \"DRAFT\"), eq(node.view, \"ROADMAP\")))\n .returning({ id: node.id });\n const featuresApproved = { count: promoted.length };\n\n archivePlan({\n description: snap.description,\n markdown: snap.markdown,\n verdict: \"approved\",\n annotations: snap.annotations,\n globalComment: snap.globalComment,\n draftDoc: snap.draftDoc,\n featureGraph: snap.featureGraph,\n });\n\n const parts: string[] = [];\n if (dbCount)\n parts.push(\n `${dbCount.tables} table(s), ${dbCount.relations} relation(s) and ${dbCount.endpoints} endpoint(s)`,\n );\n if (featuresApproved.count) parts.push(`${featuresApproved.count} feature(s)`);\n const summary = parts.length ? `${parts.join(\" and \")} approved and persisted.` : \"Plan approved.\";\n\n writePlanVerdict({\n proposedAt: meta?.proposedAt ?? 0,\n status: \"approved\",\n summary,\n detail: doc ? describeApprovedDoc(doc) : undefined,\n // The exact titles the agent must mark done as it ships each feature.\n features: snap.featureGraph.features.map((f) => f.title),\n decidedAt: Date.now(),\n });\n\n await cleanupPlan();\n await bumpVersion();\n return { db: dbCount, features: featuresApproved.count };\n}\n\nexport async function discardPlan(): Promise<void> {\n const meta = readPlanMeta();\n const snap = await snapshotPlan();\n const hasContent =\n (snap.draftDoc && (snap.draftDoc.tables.length || snap.draftDoc.endpoints.length)) ||\n snap.featureGraph.features.length > 0 ||\n !!meta?.markdown;\n if (hasContent) {\n archivePlan({\n description: snap.description,\n markdown: snap.markdown,\n verdict: \"discarded\",\n annotations: snap.annotations,\n globalComment: snap.globalComment,\n draftDoc: snap.draftDoc,\n featureGraph: snap.featureGraph,\n });\n }\n writePlanVerdict({\n proposedAt: meta?.proposedAt ?? 0,\n status: \"discarded\",\n summary: \"The user discarded the plan.\",\n decidedAt: Date.now(),\n });\n // Also record the DB-level draft verdict so the /db-local draftState() loop stays coherent.\n discardDraft();\n await cleanupPlan();\n await bumpVersion();\n}\n\nexport type PlanVerdictResolution =\n | { kind: \"pending\" }\n | { kind: \"feedback\"; feedback: string }\n | { kind: \"approved\"; summary: string; detail?: string; features?: string[] }\n | { kind: \"discarded\"; summary: string };\n\n// The single verdict both pollers read. Precedence:\n// 1. Submitted, non-empty feedback (closes the iterate loop) —\n// 2. an explicit plan-verdict (approve/discard) —\n// 3. otherwise derived from whether a plan is still pending.\nexport async function resolvePlanVerdict(): Promise<PlanVerdictResolution> {\n const annot = readAnnotationFeedback();\n if (annot.submitted && annot.feedback) return { kind: \"feedback\", feedback: annot.feedback };\n\n const v = readPlanVerdict();\n if (v) {\n return v.status === \"approved\"\n ? { kind: \"approved\", summary: v.summary, detail: v.detail, features: v.features }\n : { kind: \"discarded\", summary: v.summary };\n }\n\n const meta = readPlanMeta();\n const draft = readDraftDoc();\n const features = await getFeatureDraft();\n const pending =\n (draft?.tables.length ?? 0) + (draft?.endpoints.length ?? 0) + features.features.length > 0 ||\n !!meta?.markdown;\n return pending\n ? { kind: \"pending\" }\n : { kind: \"discarded\", summary: \"The user discarded the plan.\" };\n}\n\n// Clear the verdict + annotation state for a fresh round. Used by POST /api/plan.\nexport function resetPlanRound(): void {\n clearStoredAnnotations();\n clearPlanVerdict();\n}\n"],"names":["dir","d","recursive","archivePlan","p","archived","id","slice","archivedAt","Date","now","listHistory","entries","items","name","endsWith","raw","parsed","JSON","parse","push","sort","a","b","readArchivedPlan","archivedMtime","mtimeMs","columnSchema","preprocess","c","rest","trim","split","type","join","object","string","min","isPk","boolean","optional","isFk","nullable","note","nullish","tableSchema","domain","description","columns","array","default","relationSchema","fromTable","fromColumn","toTable","toColumn","label","endpointSchema","method","path","uses","table","access","transform","e","map","u","draftSchema","tables","relations","endpoints","featureItemSchema","title","role","plain","cluster","category","priority","number","dependsOn","f","Math","max","round","featureSchema","features","clearFeatureDraft","prisma","delete","where","source","view","persistFeatureDraft","graph","g","top","query","node","findFirst","t","eq","orderBy","desc","y","baseY","titleSet","Set","layoutNodes","layoutEdges","flatMap","filter","has","fromId","toId","pos","idByTitle","Map","get","x","created","insert","values","status","returning","set","depTitle","exists","edge","and","kind","getFeatureDraft","nodes","findMany","asc","createdAt","ids","n","edges","length","titleById","depsByFrom","toTitle","arr","synthesizePlanMarkdown","dbDraft","featureDraft","lines","flags","Boolean","nameById","r","from","fromTableId","to","toTableId","links","l","tableId","DB_SCHEMA_SIGNAL","mentionsDbSchema","text","test","BEACON_FENCE","parseEach","value","schema","Array","isArray","out","item","safeParse","success","data","extractBeaconBlock","markdown","match","prose","obj","draft","undefined","featureList","replace","verdictPath","readPlanVerdict","writePlanVerdict","v","clearPlanVerdict","force","snapshotPlan","meta","draftDoc","featureGraph","stored","annotations","globalComment","cleanupPlan","approvePlan","opts","snap","doc","dbCount","promoted","update","featuresApproved","count","verdict","parts","summary","proposedAt","detail","decidedAt","db","discardPlan","hasContent","resolvePlanVerdict","annot","submitted","feedback","pending","resetPlanRound"],"mappings":"uCAAA,IAAA,EAAA,EAAA,CAAA,CAAA,MACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAoBA,SAASA,IACP,IAAMC,EAAI,CAAA,EAAA,EAAA,IAAA,AAAI,EAAC,CAAA,EAAA,EAAA,OAAA,AAAO,IAAI,QAAS,WAEnC,MADA,CAAA,EAAA,EAAA,SAAA,AAAS,EAACA,EAAG,CAAEC,WAAW,CAAK,GACxBD,CACT,sBAEO,SAAqBG,AAAZD,CAAsD,EACpE,IAAME,EAAyB,CAC7B,GAAGD,CAAC,CACJE,GAAI,CAAA,EAAA,EAAA,UAAU,AAAV,IAAaC,KAAK,CAAC,EAAG,GAC1BC,WAAYC,KAAKC,GAAG,EACtB,EAEA,MADA,CAAA,EAAA,EAAA,eAAA,AAAe,EAAC,CAAA,EAAA,EAAA,IAAI,AAAJ,EAAKV,IAAO,CAAA,EAAGK,EAASC,EAAE,CAAC,KAAK,CAAC,EAAGD,GAAU,GACvDA,CACT,kBAEO,SAASM,MACVC,EACJ,GAAI,CACFA,EAAU,CAAA,EAAA,EAAA,WAAA,AAAW,EAACZ,IACxB,CAAE,KAAM,CACN,MAAO,EACT,AADW,CAEX,IAAMa,EAAwB,EAAE,CAChC,IAAK,IAAMC,KAAQF,EACjB,GAAKE,CAAD,CAAMC,CADgB,OACR,CAAC,SACnB,CAD6B,EACzB,CACF,IAAMX,EAAI,CAAA,EAAA,EAAA,IAAA,AAAI,EAACJ,IAAOc,GAChBE,EAAM,CAAA,EAAA,EAAA,YAAA,AAAY,EAACZ,EAAG,QACtBa,EAASC,KAAKC,KAAK,CAACH,GAC1BH,EAAMO,IAAI,CAACH,EACb,CAAE,KAAM,CAER,CAEF,OAAOJ,EAAMQ,IAAI,CAAC,CAACC,EAAGC,IAAMA,EAAEf,UAAU,CAAGc,EAAEd,UAAU,CACzD,uBAEO,SAASgB,AAAiBlB,CAAU,EACzC,GAAI,CACF,IAAMU,EAAM,CAAA,EAAA,EAAA,YAAA,AAAY,EAAC,CAAA,EAAA,EAAA,IAAA,AAAI,EAAChB,IAAO,CAAA,EAAGM,EAAG,KAAK,CAAC,EAAG,QACpD,OAAOY,KAAKC,KAAK,CAACH,EACpB,CAAE,KAAM,CACN,OAAO,IACT,CACF,4BCrEA,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAUO,IAAMW,EAAe,EAAA,CAAC,CAACC,UAAU,CACtC,AAACC,IACC,GAAiB,UAAb,OAAOA,EAAgB,CACzB,GAAM,CAACf,EAAM,GAAGgB,EAAK,CAAGD,EAAEE,IAAI,GAAGC,KAAK,CAAC,OACvC,MAAO,MAAElB,EAAMmB,KAAMH,EAAKI,IAAI,CAAC,MAAQ,MAAO,CAChD,CACA,OAAOL,CACT,EACA,EAAA,CAAC,CAACM,MAAM,CAAC,CACPrB,KAAM,EAAA,CAAC,CAACsB,MAAM,GAAGL,IAAI,GAAGM,GAAG,CAAC,GAC5BJ,KAAM,EAAA,CAAC,CAACG,MAAM,GAAGL,IAAI,GAAGM,GAAG,CAAC,GAC5BC,KAAM,EAAA,CAAC,CAACC,OAAO,GAAGC,QAAQ,GAC1BC,KAAM,EAAA,CAAC,CAACF,OAAO,GAAGC,QAAQ,GAC1BE,SAAU,EAAA,CAAC,CAACH,OAAO,GAAGC,QAAQ,GAC9BG,KAAM,EAAA,CAAC,CAACP,MAAM,GAAGQ,OAAO,EAC1B,IAGWC,EAAc,EAAA,CAAC,CAACV,MAAM,CAAC,CAClCrB,KAAM,EAAA,CAAC,CAACsB,MAAM,GAAGL,IAAI,GAAGM,GAAG,CAAC,GAC5BS,OAAQ,EAAA,CAAC,CAACV,MAAM,GAAGQ,OAAO,GAC1BG,YAAa,EAAA,CAAC,CAACX,MAAM,GAAGQ,OAAO,GAC/BI,QAAS,EAAA,CAAC,CAACC,KAAK,CAACtB,GAAcuB,OAAO,CAAC,EAAE,CAC3C,GAEaC,EAAiB,EAAA,CAAC,CAAChB,MAAM,CAAC,CACrCiB,UAAW,EAAA,CAAC,CAAChB,MAAM,GACnBiB,WAAY,EAAA,CAAC,CAACjB,MAAM,GACpBkB,QAAS,EAAA,CAAC,CAAClB,MAAM,GACjBmB,SAAU,EAAA,CAAC,CAACnB,MAAM,GAClBoB,MAAO,EAAA,CAAC,CAACpB,MAAM,GAAGQ,OAAO,EAC3B,GAEaa,EAAiB,EAAA,CAAC,CAC5BtB,MAAM,CAAC,CACNuB,OAAQ,EAAA,CAAC,CAACtB,MAAM,GAAGL,IAAI,GAAGM,GAAG,CAAC,GAC9BsB,KAAM,EAAA,CAAC,CAACvB,MAAM,GAAGL,IAAI,GAAGM,GAAG,CAAC,GAC5BS,OAAQ,EAAA,CAAC,CAACV,MAAM,GAAGQ,OAAO,GAC1BG,YAAa,EAAA,CAAC,CAACX,MAAM,GAAGQ,OAAO,GAC/BgB,KAAM,EAAA,CAAC,CACJX,KAAK,CACJ,EAAA,CAAC,CAACd,MAAM,CAAC,CACP0B,MAAO,EAAA,CAAC,CAACzB,MAAM,GAAGL,IAAI,GAAGM,GAAG,CAAC,GAC7ByB,OAAQ,EAAA,CAAC,CAAC1B,MAAM,GAAGI,QAAQ,EAC7B,IAEDU,OAAO,CAAC,EAAE,CACf,EACA,CACCa,SAAS,CAAC,AAACC,IAAM,AAAC,CACjB,GAAGA,CAAC,CACJJ,KAAMI,EAAEJ,IAAI,CAACK,GAAG,CAAC,AAACC,GAAO,CAAD,CAAG,GAAGA,CAAC,CAAEJ,OAAQI,EAAEJ,MAAM,EAAI,CAAA,EAAA,EAAA,eAAA,AAAe,AAHc,EAGbE,EAAEN,MAAM,EAAE,CAAC,EAClF,CAAC,EAEUS,EAAc,EAAA,CAAC,CAAChC,MAAM,CAAC,CAClCiC,OAAQ,EAAA,CAAC,CAACnB,KAAK,CAACJ,GAAaK,OAAO,CAAC,EAAE,EACvCmB,UAAW,EAAA,CAAC,CAACpB,KAAK,CAACE,GAAgBD,OAAO,CAAC,EAAE,EAC7CoB,UAAW,EAAA,CAAC,CAACrB,KAAK,CAACQ,GAAgBP,OAAO,CAAC,EAAE,CAC/C,uHCrEA,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,yCAQO,IAAMqB,EAAoB,EAAA,CAAC,CACzBpC,MAAM,CAAC,CACNqC,MAAO,EAAA,CAAC,CAACpC,MAAM,GAAGL,IAAI,GAAGM,GAAG,CAAC,GAC7BoC,KAAM,EAAA,CAAC,CAACrC,MAAM,GAAGQ,OAAO,GACxB8B,MAAO,EAAA,CAAC,CAACtC,MAAM,GAAGQ,OAAO,GACzB+B,QAAS,EAAA,CAAC,CAACvC,MAAM,GAAGQ,OAAO,GAI3BgC,SAAU,EAAA,CAAC,CAACxC,MAAM,GAAGQ,OAAO,GAC5BE,OAAQ,EAAA,CAAC,CAACV,MAAM,GAAGQ,OAAO,GAI1BiC,SAAU,EAAA,CAAC,CAACC,MAAM,GAAGlC,OAAO,GAI5BmC,UAAW,EAAA,CAAC,CAAC9B,KAAK,CAAC,EAAA,CAAC,CAACb,MAAM,IAAIQ,OAAO,EACxC,EACA,CAGCmB,SAAS,CAAC,CAAC,UAAEa,CAAQ,QAAE9B,CAAM,UAAE+B,CAAQ,CAAE,GAAGG,EAAG,GAAK,CAAC,CACpD,GAAGA,CAAC,CACJL,QAASK,EAAEL,OAAO,EAAIC,GAAY9B,GAAU,KAC5C+B,EANyF,OAMnE,MAAZA,EAAmB,KAAOI,KAAKC,GAAG,CAAC,EAAGD,KAAK5C,GAAG,CAAC,EAAG4C,KAAKE,KAAK,CAACN,KACzE,CAAC,EAEIO,EAAgB,EAAA,CAAC,CAACjD,MAAM,CAAC,CACpCkD,SAAU,EAAA,CAAC,CAACpC,KAAK,CAACsB,GAAmBrB,OAAO,CAAC,EAAE,CACjD,GAGO,eAAeoC,EAAkBC,EAAiB,EAAA,EAAE,EACzD,MAAMA,EAAOC,MAAM,CAAC,EAAA,IAAI,EAAEC,KAAK,CAAC,CAAA,EAAA,EAAA,GAAA,AAAG,EAAC,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,EAAA,IAAI,CAACC,MAAM,CAAE,SAAU,CAAA,EAAA,EAAA,EAAE,AAAF,EAAG,EAAA,IAAI,CAACC,IAAI,CAAE,YAC9E,CAEO,eAAeC,EAAoBC,CAAmB,CAAEN,EAAiB,EAAA,EAAE,EAChF,IAAMO,EAAIV,EAAcjE,KAAK,CAAC0E,EAC9B,OAAMP,EAAkBC,GAGxB,IAAMQ,EAAM,MAAMR,EAAOS,KAAK,CAACC,IAAI,CAACC,SAAS,CAAC,CAC5CT,MAAO,CAACU,EAAG,IAAEC,CAAE,CAAE,GAAKA,EAAGD,EAAER,IAAI,CAAE,WACjCU,QAAS,CAACF,EAAG,MAAEG,CAAI,CAAE,GAAKA,EAAKH,EAAEI,CAAC,CACpC,GACMC,EAAQ,CAACT,GAAKQ,IAAK,CAAC,CAAI,IAKxBE,EAAW,IAAIC,IAAIZ,EAAET,QAAQ,CAACpB,GAAG,CAAC,AAACe,GAAMA,EAAER,KAAK,CAACzC,IAAI,KACrD4E,EAAcb,EAAET,QAAQ,CAACpB,GAAG,CAAC,AAACe,IAAM,AAAC,CAAE1E,GAAI0E,EAAER,KAAK,CAACzC,IAAI,EAAG,CAAC,GAC3D6E,EAAcd,EAAET,QAAQ,CAACwB,OAAO,CAAC,AAAC7B,GACtC,CAACA,EAAED,SAAS,EAAI,EAAA,AAAE,EACfd,GAAG,CAAC,AAAChE,GAAMA,EAAE8B,IAAI,IACjB+E,MAAM,CAAC,AAAC7G,GAAMwG,EAASM,GAAG,CAAC9G,IAAMA,IAAM+E,EAAER,KAAK,CAACzC,IAAI,IACnDkC,GAAG,CAAC,AAAChE,IAAO,AAAD,CAAG+G,OAAQhC,EAAER,KAAK,CAACzC,IAAI,GAAIkF,KAAMhH,EAAE,CAAC,GAE9CiH,EAAM,CAAA,EAAA,EAAA,kBAAA,AAAkB,EAACP,EAAaC,GAEtCO,EAAY,IAAIC,IACtB,IAAK,IAAMpC,KAAKc,EAAET,QAAQ,CAAE,CAC1B,IAAMjF,EAAI8G,EAAIG,GAAG,CAACrC,EAAER,KAAK,CAACzC,IAAI,KAAO,CAAEuF,EAAG,EAAGf,EAAG,CAAE,EAC5C,CAACgB,EAAQ,CAAG,MAAMhC,EACrBiC,MAAM,CAAC,EAAA,IAAI,EACXC,MAAM,CAAC,CACN9B,KAAM,UACND,OAAQ,QACRgC,OAAQ,UACRlD,MAAOQ,EAAER,KAAK,CACdC,KAAMO,EAAEP,IAAI,EAAI,KAChBC,MAAOM,EAAEN,KAAK,EAAI,KAClBC,QAASK,EAAEL,OAAO,EAAI,KACtBE,SAAUG,EAAEH,QAAQ,EAAI,EACxByC,EAAGlH,EAAEkH,CAAC,CACNf,EAAGnG,EAAEmG,CAAC,CAAGC,CACX,GACCmB,SAAS,GACZR,EAAUS,GAAG,CAAC5C,EAAER,KAAK,CAACzC,IAAI,GAAIwF,EAAQjH,EAAE,CAC1C,CAOA,IAAK,IAAM0E,KAAKc,EAAET,QAAQ,CAAE,CAC1B,IAAM2B,EAASG,EAAUE,GAAG,CAACrC,EAAER,KAAK,CAACzC,IAAI,IACzC,GAAI,AAACiF,GAAWhC,EAAED,KAAH,IAAY,CAC3B,CAD6B,GACxB,IAAM8C,KAAY7C,EAAED,SAAS,CAAE,CAClC,IAAMkC,EAAOE,EAAUE,GAAG,CAACQ,EAAS9F,IAAI,IACnCkF,GAAQA,IAASD,GAKlB,CAACc,AAJU,IADe,EACTvC,EAAOS,KAAK,CAAC+B,IAAI,CAAC7B,SAAS,CAAC,CAC/CT,MAAO,CAACU,EAAG,KAAE6B,CAAG,IAAE5B,CAAE,CAAE,GACpB4B,EAAI5B,EAAGD,EAAEa,MAAM,CAAEA,GAASZ,EAAGD,EAAEc,IAAI,CAAEA,GAAOb,EAAGD,EAAE8B,IAAI,CAAE,WAC3D,IACa,MAAM1C,EAAOiC,MAAM,CAAC,EAAA,IAAI,EAAEC,MAAM,CAAC,QAAET,OAAQC,EAAMgB,KAAM,SAAU,EAAzEH,CACP,CACF,CACF,CAEO,eAAeI,EAAgB3C,EAAiB,EAAA,EAAE,EACvD,IAAM4C,EAAQ,MAAM5C,EAAOS,KAAK,CAACC,IAAI,CAACmC,QAAQ,CAAC,CAC7C3C,MAAO,CAACU,EAAG,KAAE6B,CAAG,IAAE5B,CAAE,CAAE,GAAK4B,EAAI5B,EAAGD,EAAET,MAAM,CAAE,SAAUU,EAAGD,EAAER,IAAI,CAAE,YACjEU,QAAS,CAACF,EAAG,KAAEkC,CAAG,CAAE,GAAKA,EAAIlC,EAAEmC,SAAS,CAC1C,GAGMC,EAAMJ,EAAMlE,GAAG,CAAEuE,AAAD,GAAOA,EAAElI,EAAE,EAC3BmI,EAAQF,EAAIG,MAAM,CACpB,MAAMnD,EAAOS,KAAK,CAAC+B,IAAI,CAACK,QAAQ,CAAC,CAC/B3C,MAAO,CAACU,EAAG,KAAE6B,CAAG,IAAE5B,CAAE,CAAE,GACpB4B,EAAI5B,EAAGD,EAAE8B,IAAI,CAAE,WAAY,CAAA,EAAA,EAAA,OAAA,AAAO,EAAC9B,EAAEa,MAAM,CAAEuB,GAAM,CAAA,EAAA,EAAA,OAAA,AAAO,EAACpC,EAAEc,IAAI,CAAEsB,GACvE,GACA,EAAE,CACAI,EAAY,IAAIvB,IAAIe,EAAMlE,GAAG,CAAC,AAACuE,GAAM,CAACA,EAAElI,EAAE,CAAEkI,EAAEhE,KAAK,CAAC,GACpDoE,EAAa,IAAIxB,IACvB,IAAK,IAAMpD,KAAKyE,EAAO,CACrB,IAAMI,EAAUF,EAAUtB,GAAG,CAACrD,EAAEiD,IAAI,EACpC,GAAI,CAAC4B,EAAS,SACd,IAAMC,EAAMF,EAAWvB,GAAG,CAACrD,EAAEgD,MAAM,GAAK,EAAE,CAC1C8B,EAAI1H,IAAI,CAACyH,GACTD,EAAWhB,GAAG,CAAC5D,EAAEgD,MAAM,CAAE8B,EAC3B,CACA,MAAO,CACLzD,SAAU8C,EAAMlE,GAAG,CAAC,AAACuE,IAAM,AAAC,CAC1BhE,MAAOgE,EAAEhE,KAAK,CACdC,KAAM+D,EAAE/D,IAAI,CACZC,MAAO8D,EAAE9D,KAAK,CACdC,QAAS6D,EAAE7D,OAAO,CAClBE,SAAU2D,EAAE3D,QAAQ,CACpBE,UAAW6D,EAAWvB,GAAG,CAACmB,EAAElI,EAAE,EAChC,CAAC,CACH,CACF,2MC7IO,SAASyI,AACdhG,CAAmB,CACnBiG,CAAwB,CACxBC,CAAiC,EAEjC,IAAMC,EAAkB,CAAC,CAAC,QAAQ,EAAEnG,EAAAA,CAAa,CAAE,GAAG,CAEhDsC,EAAW4D,GAAc5D,UAAY,EAAE,CAC7C,GAAIA,EAASqD,MAAM,CAEjB,CAFmB,GAEd,IAAM1D,KADXkE,EAAM9H,IAAI,CAAC,cAAe,IACViE,GACd6D,EAAM9H,IAAI,AADc,CACb,CAAC,IAAI,EAAE4D,EAAER,KAAK,CAAA,CAAE,EACvBQ,EAAEL,OAAO,EAAEuE,EAAM9H,IAAI,CAAC,CAAC,YAAY,EAAE4D,EAAEL,OAAO,CAAC,EAAE,CAAC,EAClDK,EAAEP,IAAI,EAAEyE,EAAM9H,IAAI,CAAC,CAAC,QAAQ,EAAE4D,EAAEP,IAAI,CAAA,CAAE,EACtCO,EAAEN,KAAK,EAAEwE,EAAM9H,IAAI,CAAC,GAAI4D,EAAEN,KAAK,EACnCwE,EAAM9H,IAAI,CAAC,IAIf,IAAMgD,EAAS4E,GAAS5E,QAAU,EAAE,CACpC,GAAIA,EAAOsE,MAAM,CAEf,CAFiB,GAEZ,IAAMvC,KADX+C,EAAM9H,IAAI,CAAC,uBAAwB,IACnBgD,GAAQ,CAItB,IAAK,IAAMvC,KAHXqH,EAAM9H,IAAI,CAAC,CAAC,YAAY,EAAE+E,EAAErF,IAAI,CAAC,EAAE,CAAC,EAChCqF,EAAErD,MAAM,EAAEoG,EAAM9H,IAAI,CAAC,CAAC,YAAY,EAAE+E,EAAErD,MAAM,CAAC,EAAE,CAAC,EAChDqD,EAAEpD,WAAW,EAAEmG,EAAM9H,IAAI,CAAC,GAAI+E,EAAEpD,WAAW,CAAE,IACjCoD,EAAEnD,OAAO,EAAE,CACzB,IAAMmG,EAAQ,CAACtH,EAAES,IAAI,EAAI,KAAMT,EAAEY,IAAI,EAAI,KAAMZ,EAAEa,QAAQ,CAAG,OAAS,WAAW,CAC7EoE,MAAM,CAACsC,SACPlH,IAAI,CAAC,KACRgH,EAAM9H,IAAI,CAAC,CAAC,IAAI,EAAES,EAAEf,IAAI,CAAC,GAAG,EAAEe,EAAEI,IAAI,CAAA,EAAGkH,EAAQ,CAAC,EAAE,EAAEA,EAAM,CAAC,CAAC,CAAG,GAAA,EAAKtH,EAAEc,IAAI,CAAG,CAAC,GAAG,EAAEd,EAAEc,IAAI,CAAA,CAAE,CAAG,GAAA,CAAI,CACpG,CACAuG,EAAM9H,IAAI,CAAC,GACb,CAGF,IAAMiD,EAAY2E,GAAS3E,WAAa,EAAE,CAC1C,GAAIA,EAAUqE,MAAM,CAAE,CACpB,IAAMW,EAAW,IAAIjC,IAAIhD,EAAOH,GAAG,CAAC,AAACkC,GAAM,CAACA,EAAE7F,EAAE,CAAE6F,EAAErF,IAAI,CAAC,GAEzD,IAAK,IAAMwI,KADXJ,EAAM9H,IAAI,CAAC,gCAAiC,IAC5BiD,GAAW,CACzB,IAAMkF,EAAOF,EAAShC,GAAG,CAACiC,EAAEE,WAAW,GAAKF,EAAEE,WAAW,CACnDC,EAAKJ,EAAShC,GAAG,CAACiC,EAAEI,SAAS,GAAKJ,EAAEI,SAAS,CACnDR,EAAM9H,IAAI,CAAC,CAAC,IAAI,EAAEmI,EAAK,CAAC,EAAED,EAAEjG,UAAU,CAAC,OAAO,EAAEoG,EAAG,CAAC,EAAEH,EAAE/F,QAAQ,CAAC,EAAE,CAAC,CACtE,CACA2F,EAAM9H,IAAI,CAAC,GACb,CAEA,IAAMkD,EAAY0E,GAAS1E,WAAa,EAAE,CAC1C,GAAIA,EAAUoE,MAAM,CAAE,CACpB,IAAMW,EAAW,IAAIjC,IAAIhD,EAAOH,GAAG,CAAC,AAACkC,GAAM,CAACA,EAAE7F,EAAE,CAAE6F,EAAErF,IAAI,CAAC,GAEzD,IAAK,IAAMkD,KADXkF,EAAM9H,IAAI,CAAC,eAAgB,IACXkD,GAAW,CAIzB,GAHA4E,EAAM9H,IAAI,CAAC,CAAC,IAAI,EAAE4C,EAAEN,MAAM,CAAC,CAAC,EAAEM,EAAEL,IAAI,CAAA,CAAE,EAClCK,EAAElB,MAAM,EAAEoG,EAAM9H,IAAI,CAAC,CAAC,YAAY,EAAE4C,EAAElB,MAAM,CAAC,EAAE,CAAC,EAChDkB,EAAEjB,WAAW,EAAEmG,EAAM9H,IAAI,CAAC,GAAI4C,EAAEjB,WAAW,EAC3CiB,EAAE2F,KAAK,CAACjB,MAAM,CAAE,CAClB,IAAM9E,EAAOI,EAAE2F,KAAK,CACjB1F,GAAG,CAAC,AAAC2F,GAAM,CAAC,EAAE,EAAEP,EAAShC,GAAG,CAACuC,EAAEC,OAAO,GAAKD,EAAEC,OAAO,CAAC,IAAI,EAAED,EAAE9F,MAAM,CAAC,CAAC,CAAC,EACtE5B,IAAI,CAAC,MACRgH,EAAM9H,IAAI,CAAC,GAAI,CAAC,SAAS,EAAEwC,EAAAA,CAAM,CACnC,CACAsF,EAAM9H,IAAI,CAAC,GACb,CACF,CAEA,OAAO8H,EAAMhH,IAAI,CAAC,KACpB,mCCzEA,IAAA,EAAA,EAAA,CAAA,CAAA,OAMA,EAAA,EAAA,CAAA,CAAA,yCAgCA,IAAMgI,EAAe,+DAMrB,SAASC,EAAaC,CAAc,CAAEC,CAAoB,EACxD,GAAI,CAACC,MAAMC,OAAO,CAACH,GAAQ,MAAO,EAAE,CACpC,IAAMI,EAAW,EAAE,CACnB,IAAK,IAAMC,KAAQL,EAAO,CACxB,IAAMd,EAAIe,EAAOK,SAAS,CAACD,GACvBnB,EAAEqB,OAAO,EAAEH,EAAIpJ,IAAI,CAACkI,EAAEsB,IAAI,CAChC,CACA,OAAOJ,CACT,6BAEO,SAASK,AAAmBC,CAAgB,EACjD,IAGI7J,EAHE8J,EAAQD,EAASC,KAAK,CAACb,GAC7B,GAAI,CAACa,EAAO,MAAO,CAAEC,MAAOF,CAAS,EAGrC,GAAI,CACF7J,EAASC,KAAKC,KAAK,CAAC4J,CAAK,CAAC,EAAE,CAC9B,CAAE,KAAM,CACN,MAAO,CAAEC,MAAOF,CAAS,CAC3B,CACA,IAAMG,EAAOhK,GAA4B,UAAlB,OAAOA,EAAsBA,EAAS,CAAC,EAIxDmD,EAAS+F,EAAUc,EAAI7G,MAAM,CAAE,EAAA,WAAW,EAC1CC,EAAY8F,EAAUc,EAAI5G,SAAS,CAAE,EAAA,cAAc,EACnDC,EAAY6F,EAAUc,EAAI3G,SAAS,CAAE,EAAA,cAAc,EACnDe,EAAW8E,EAAUc,EAAI5F,QAAQ,CAAE,EAAA,iBAAiB,EAEpD6F,EACJ9G,EAAOsE,MAAM,EAAIpE,EAAUoE,MAAM,EAAIrE,EAAUqE,MAAM,CACjD,QAAEtE,YAAQC,YAAWC,CAAU,EAC/B6G,OACAC,EAAoD/F,EAASqD,MAAM,CAAGrD,OAAW8F,SAGvF,AAAI,AAACD,GAAUE,EAMR,CAAEJ,GANK,GAEAF,EACXO,EAHyB,KAGlB,CAACnB,EAAc,IACtBmB,OAAO,CAAC,UAAW,QACnBtJ,IAAI,SACSmJ,EAAO7F,SAAU+F,CAAY,EANV,CAAEJ,MAAOF,CAAS,CAOvD,mDCxFA,IAAA,EAAA,EAAA,CAAA,CAAA,MACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAsBA,SAASQ,IACP,MAAO,CAAA,EAAA,EAAA,IAAA,AAAI,EAAC,CAAA,EAAA,EAAA,OAAA,AAAO,IAAI,oBACzB,2BAcO,SAASI,EACd,CAAA,EAAA,EAAA,MAAM,AAAN,EAAOJ,IAAe,CAAEK,OAAO,CAAK,EACtC,sBAdO,SAASJ,EACd,GAAI,CACF,OAAOrK,KAAKC,KAAK,CAAC,CAAA,EAAA,EAAA,YAAY,AAAZ,EAAamK,IAAe,QAChD,CAAE,KAAM,CACN,OAAO,IACT,CACF,uBAEO,SAASE,AAAiBC,CAAc,EAC7C,CAAA,EAAA,EAAA,eAAA,AAAe,EAACH,IAAeG,EACjC,mCCvCA,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAEA,EAAA,EAAA,CAAA,CAAA,OAOA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAKA,EAAA,EAAA,CAAA,CAAA,uBAsBA,eAAeG,IACb,IAAMC,EAAO,CAAA,EAAA,EAAA,YAAA,AAAY,IACnBC,EAAW,CAAA,EAAA,EAAA,YAAY,AAAZ,IACXC,EAAe,MAAM,CAAA,EAAA,EAAA,eAAA,AAAe,IACpCC,EAAS,CAAA,EAAA,EAAA,qBAAA,AAAqB,IAC9BjJ,EAAc8I,GAAM9I,aAAe,mBAGnC+H,EAAWe,GAAMf,SACnB,CAAA,EAAA,EAAA,kBAAkB,AAAlB,EAAmBe,EAAKf,QAAQ,EAAEE,KAAK,CACvC,CAAA,EAAA,EAAA,sBAAA,AAAsB,EAACjI,EAAa+I,EAAUC,GAClD,MAAO,aACLhJ,WACA+H,EACAgB,WACAC,eACAE,YAAaD,EAAOC,WAAW,CAC/BC,cAAeF,EAAOE,aAAa,AACrC,CACF,CAIA,eAAeC,IACb,MAAM,CAAA,EAAA,EAAA,iBAAA,AAAiB,IACvB,CAAA,EAAA,EAAA,aAAA,AAAa,IACb,CAAA,EAAA,EAAA,aAAA,AAAa,IACb,CAAA,EAAA,EAAA,sBAAsB,AAAtB,GACF,CAEO,eAAeC,EAAYC,CAAgC,EAIhE,IAAMR,EAAO,CAAA,EAAA,EAAA,YAAA,AAAY,IACnBS,EAAO,MAAMV,IAEbW,EAAMF,GAAME,KAAOD,EAAKR,QAAQ,CAEhCU,EAAUD,EAAM,MAAM,CAAA,EAAA,EAAA,YAAA,AAAY,EAACA,GAAO,KAM1CI,EAAmB,CAAEC,MAAOH,CALjB,MAAM,EAAA,EAAE,CACtBC,MAAM,CAAC,EAAA,IAAI,EACX9E,GAAG,CAAC,CAAElC,OAAQ,QAAS,GACvBD,KAAK,CAAC,CAAA,EAAA,EAAA,GAAA,AAAG,EAAC,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,EAAA,IAAI,CAACC,MAAM,CAAE,SAAU,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,EAAA,IAAI,CAACC,IAAI,CAAE,aAClDgC,SAAS,CAAC,CAAErH,GAAI,EAAA,IAAI,CAACA,EAAG,AAAD,EAAC,EACgBoI,MAAM,AAAC,EAElD,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,CACV3F,YAAauJ,EAAKvJ,WAAW,CAC7B+H,SAAUwB,EAAKxB,QAAQ,CACvB+B,QAAS,WACTZ,YAAaK,EAAKL,WAAW,CAC7BC,cAAeI,EAAKJ,aAAa,CACjCJ,SAAUQ,EAAKR,QAAQ,CACvBC,aAAcO,EAAKP,YAAY,AACjC,GAEA,IAAMe,EAAkB,EAAE,CACtBN,GACFM,EAAM1L,IAAI,CACR,CAAA,EAAGoL,EAAQpI,MAAM,CAAC,WAAW,EAAEoI,EAAQnI,SAAS,CAAC,iBAAiB,EAAEmI,EAAQlI,SAAS,CAAC,YAAY,CAAC,EAEnGqI,EAAiBC,KAAK,EAAEE,EAAM1L,IAAI,CAAC,CAAA,EAAGuL,EAAiBC,KAAK,CAAC,WAAW,CAAC,EAC7E,IAAMG,EAAUD,EAAMpE,MAAM,CAAG,CAAA,EAAGoE,EAAM5K,IAAI,CAAC,SAAS,wBAAwB,CAAC,CAAG,iBAclF,MAZA,CAAA,EAAA,EAAA,gBAAA,AAAgB,EAAC,CACf8K,WAAYnB,GAAMmB,YAAc,EAChCtF,OAAQ,mBACRqF,EACAE,OAAQV,EAAM,CAAA,EAAA,EAAA,mBAAA,AAAmB,EAACA,QAAOpB,EAEzC9F,SAAUiH,EAAKP,YAAY,CAAC1G,QAAQ,CAACpB,GAAG,CAAC,AAACe,GAAMA,EAAER,KAAK,EACvD0I,UAAWzM,KAAKC,GAAG,EACrB,GAEA,MAAMyL,IACN,MAAM,CAAA,EAAA,EAAA,WAAA,AAAW,IACV,CAAEgB,GAAIX,EAASnH,SAAUsH,EAAiBC,KAAK,AAAC,CACzD,CAEO,eAAeQ,IACpB,IAAMvB,EAAO,CAAA,EAAA,EAAA,YAAA,AAAY,IACnBS,EAAO,MAAMV,GAKfyB,EAHDf,EAAKR,QAAQ,AAGA,GAHKQ,CAAD,CAAMR,QAAQ,CAAC1H,MAAM,CAACsE,MAAM,EAAI4D,EAAKR,QAAQ,CAACxH,SAAS,CAACoE,MAAAA,AAAM,GAChF4D,EAAKP,YAAY,CAAC1G,QAAQ,CAACqD,MAAM,CAAG,GAClCmD,EAAF,CAAC,AAAOf,QAAAA,GAER,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,CACV/H,YAAauJ,EAAKvJ,WAAW,CAC7B+H,SAAUwB,EAAKxB,QAAQ,CACvB+B,QAAS,YACTZ,YAAaK,EAAKL,WAAW,CAC7BC,cAAeI,EAAKJ,aAAa,CACjCJ,SAAUQ,EAAKR,QAAQ,CACvBC,aAAcO,EAAKP,YAAY,AACjC,GAEF,CAAA,EAAA,EAAA,gBAAA,AAAgB,EAAC,CACfiB,WAAYnB,GAAMmB,YAAc,EAChCtF,OAAQ,YACRqF,QAAS,+BACTG,UAAWzM,KAAKC,GAAG,EACrB,GAEA,CAAA,EAAA,EAAA,YAAY,AAAZ,IACA,MAAMyL,IACN,MAAM,CAAA,EAAA,EAAA,WAAA,AAAW,GACnB,CAYO,eAAemB,IACpB,IAAMC,EAAQ,CAAA,EAAA,EAAA,sBAAA,AAAsB,IACpC,GAAIA,EAAMC,SAAS,EAAID,EAAME,QAAQ,CAAE,MAAO,CAAExF,KAAM,WAAYwF,SAAUF,EAAME,QAAQ,AAAC,EAE3F,IAAMhC,EAAI,CAAA,EAAA,EAAA,eAAA,AAAe,IACzB,GAAIA,EACF,CADK,KACe,aAAbA,EAAE/D,MAAM,CACX,CAAEO,KAAM,WAAY8E,QAAStB,EAAEsB,OAAO,CAAEE,OAAQxB,EAAEwB,MAAM,CAAE5H,SAAUoG,EAAEpG,QAAQ,AAAC,EAC/E,CAAE4C,KAAM,YAAa8E,QAAStB,EAAEsB,OAAO,AAAC,EAG9C,IAAMlB,EAAO,CAAA,EAAA,EAAA,YAAA,AAAY,IACnBX,EAAQ,CAAA,EAAA,EAAA,YAAA,AAAY,IACpB7F,EAAW,MAAM,CAAA,EAAA,EAAA,eAAA,AAAe,IAItC,MAFE,AAEKqI,CAFJxC,GAAO9G,OAAOsE,QAAU,CAAC,GAAKwC,CAAD,EAAQ5G,UAAUoE,SAAU,CAAC,CAAIrD,EAASA,QAAQ,CAACqD,MAAM,CAAG,GACxFmD,EAAF,CAAC,AAAOf,SAEN,CAAE7C,KAAM,SAAU,EAClB,CAAEA,KAAM,YAAa8E,QAAS,8BAA+B,CACnE,8FAGO,SAASY,EACd,CAAA,EAAA,EAAA,sBAAA,AAAsB,IACtB,CAAA,EAAA,EAAA,gBAAA,AAAgB,GAClB"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[53870,e=>{"use strict";var t=e.i(2157),a=e.i(50227),r=e.i(66680),n=e.i(38752),i=e.i(94930);function o(){let e=(0,a.join)((0,n.dataDir)(),"plans","history");return(0,t.mkdirSync)(e,{recursive:!0}),e}e.s(["archivePlan",0,function(e){let t={...e,id:(0,r.randomUUID)().slice(0,8),archivedAt:Date.now()};return(0,i.writeJsonAtomic)((0,a.join)(o(),`${t.id}.json`),t,!0),t},"listHistory",0,function(){let e;try{e=(0,t.readdirSync)(o())}catch{return[]}let r=[];for(let n of e)if(n.endsWith(".json"))try{let e=(0,a.join)(o(),n),i=(0,t.readFileSync)(e,"utf8"),s=JSON.parse(i);r.push(s)}catch{}return r.sort((e,t)=>t.archivedAt-e.archivedAt)},"readArchivedPlan",0,function(e){try{let r=(0,t.readFileSync)((0,a.join)(o(),`${e}.json`),"utf8");return JSON.parse(r)}catch{return null}}])},40717,e=>{"use strict";var t=e.i(69719),a=e.i(39513);let r=t.z.preprocess(e=>{if("string"==typeof e){let[t,...a]=e.trim().split(/\s+/);return{name:t,type:a.join(" ")||"text"}}return e},t.z.object({name:t.z.string().trim().min(1),type:t.z.string().trim().min(1),isPk:t.z.boolean().optional(),isFk:t.z.boolean().optional(),nullable:t.z.boolean().optional(),note:t.z.string().nullish()})),n=t.z.object({name:t.z.string().trim().min(1),domain:t.z.string().nullish(),description:t.z.string().nullish(),columns:t.z.array(r).default([])}),i=t.z.object({fromTable:t.z.string(),fromColumn:t.z.string(),toTable:t.z.string(),toColumn:t.z.string(),label:t.z.string().nullish()}),o=t.z.object({method:t.z.string().trim().min(1),path:t.z.string().trim().min(1),domain:t.z.string().nullish(),description:t.z.string().nullish(),uses:t.z.array(t.z.object({table:t.z.string().trim().min(1),access:t.z.string().optional()})).default([])}).transform(e=>({...e,uses:e.uses.map(t=>({...t,access:t.access??(0,a.accessForMethod)(e.method)}))})),s=t.z.object({tables:t.z.array(n).default([]),relations:t.z.array(i).default([]),endpoints:t.z.array(o).default([])});e.s(["draftSchema",0,s,"endpointSchema",0,o,"relationSchema",0,i,"tableSchema",0,n])},69062,e=>e.a(async(t,a)=>{try{var r=e.i(69719),n=e.i(75225),i=e.i(91426),o=e.i(34700),s=e.i(22609),l=t([i]);[i]=l.then?(await l)():l;let p=r.z.object({title:r.z.string().trim().min(1),role:r.z.string().nullish(),plain:r.z.string().nullish(),cluster:r.z.string().nullish(),category:r.z.string().nullish(),domain:r.z.string().nullish(),priority:r.z.number().nullish(),dependsOn:r.z.array(r.z.string()).nullish()}).transform(({category:e,domain:t,priority:a,...r})=>({...r,cluster:r.cluster??e??t??null,priority:null==a?null:Math.max(0,Math.min(3,Math.round(a)))})),f=r.z.object({features:r.z.array(p).default([])});async function d(e=i.db){await e.delete(o.node).where((0,n.and)((0,n.eq)(o.node.source,"DRAFT"),(0,n.eq)(o.node.view,"ROADMAP")))}async function u(e,t=i.db){let a=f.parse(e);await d(t);let r=await t.query.node.findFirst({where:(e,{eq:t})=>t(e.view,"ROADMAP"),orderBy:(e,{desc:t})=>t(e.y)}),n=(r?.y??0)+200,l=new Set(a.features.map(e=>e.title.trim())),c=a.features.map(e=>({id:e.title.trim()})),p=a.features.flatMap(e=>(e.dependsOn??[]).map(e=>e.trim()).filter(t=>l.has(t)&&t!==e.title.trim()).map(t=>({fromId:e.title.trim(),toId:t}))),m=(0,s.forceLayoutRoadmap)(c,p),h=new Map;for(let e of a.features){let a=m.get(e.title.trim())??{x:0,y:0},[r]=await t.insert(o.node).values({view:"ROADMAP",source:"DRAFT",status:"PENDING",title:e.title,role:e.role??null,plain:e.plain??null,cluster:e.cluster??null,priority:e.priority??2,x:a.x,y:a.y+n}).returning();h.set(e.title.trim(),r.id)}for(let e of a.features){let a=h.get(e.title.trim());if(a&&e.dependsOn)for(let r of e.dependsOn){let e=h.get(r.trim());e&&e!==a&&(await t.query.edge.findFirst({where:(t,{and:r,eq:n})=>r(n(t.fromId,a),n(t.toId,e),n(t.kind,"DEPENDS"))})||await t.insert(o.edge).values({fromId:a,toId:e,kind:"DEPENDS"}))}}}async function c(e=i.db){let t=await e.query.node.findMany({where:(e,{and:t,eq:a})=>t(a(e.source,"DRAFT"),a(e.view,"ROADMAP")),orderBy:(e,{asc:t})=>t(e.createdAt)}),a=t.map(e=>e.id),r=a.length?await e.query.edge.findMany({where:(e,{and:t,eq:r})=>t(r(e.kind,"DEPENDS"),(0,n.inArray)(e.fromId,a),(0,n.inArray)(e.toId,a))}):[],o=new Map(t.map(e=>[e.id,e.title])),s=new Map;for(let e of r){let t=o.get(e.toId);if(!t)continue;let a=s.get(e.fromId)??[];a.push(t),s.set(e.fromId,a)}return{features:t.map(e=>({title:e.title,role:e.role,plain:e.plain,cluster:e.cluster,priority:e.priority,dependsOn:s.get(e.id)}))}}e.s(["clearFeatureDraft",0,d,"featureItemSchema",0,p,"featureSchema",0,f,"getFeatureDraft",0,c,"persistFeatureDraft",0,u]),a()}catch(e){a(e)}},!1),20537,e=>e.a(async(t,a)=>{try{var r=e.i(40717),n=e.i(69062),i=t([n]);[n]=i.then?(await i)():i;let s=/^[ \t]*```beacon[ \t]*\r?\n([\s\S]*?)\r?\n[ \t]*```[ \t]*$/im;function o(e,t){if(!Array.isArray(e))return[];let a=[];for(let r of e){let e=t.safeParse(r);e.success&&a.push(e.data)}return a}e.s(["extractBeaconBlock",0,function(e){let t,a=e.match(s);if(!a)return{prose:e};try{t=JSON.parse(a[1])}catch{return{prose:e}}let i=t&&"object"==typeof t?t:{},l=o(i.tables,r.tableSchema),d=o(i.relations,r.relationSchema),u=o(i.endpoints,r.endpointSchema),c=o(i.features,n.featureItemSchema),p=l.length||u.length||d.length?{tables:l,relations:d,endpoints:u}:void 0,f=c.length?c:void 0;return p||f?{prose:e.replace(s,"").replace(/\n{3,}/g,"\n\n").trim(),draft:p,features:f}:{prose:e}}]),a()}catch(e){a(e)}},!1),47231,e=>{"use strict";e.s(["synthesizePlanMarkdown",0,function(e,t,a){let r=[`# Plan: ${e}`,""],n=a?.features??[];if(n.length)for(let e of(r.push("## Features",""),n))r.push(`### ${e.title}`),e.cluster&&r.push(`*Domain:* \`${e.cluster}\``),e.role&&r.push(`*Role:* ${e.role}`),e.plain&&r.push("",e.plain),r.push("");let i=t?.tables??[];if(i.length)for(let e of(r.push("## Database — Tables",""),i)){for(let t of(r.push(`### Table \`${e.name}\``),e.domain&&r.push(`*Domain:* \`${e.domain}\``),e.description&&r.push("",e.description,""),e.columns)){let e=[t.isPk&&"PK",t.isFk&&"FK",t.nullable?"NULL":"NOT NULL"].filter(Boolean).join(" ");r.push(`- \`${t.name}\` ${t.type}${e?` *${e}*`:""}${t.note?` — ${t.note}`:""}`)}r.push("")}let o=t?.relations??[];if(o.length){let e=new Map(i.map(e=>[e.id,e.name]));for(let t of(r.push("## Database — Relations (FKs)",""),o)){let a=e.get(t.fromTableId)??t.fromTableId,n=e.get(t.toTableId)??t.toTableId;r.push(`- \`${a}.${t.fromColumn}\` → \`${n}.${t.toColumn}\``)}r.push("")}let s=t?.endpoints??[];if(s.length){let e=new Map(i.map(e=>[e.id,e.name]));for(let t of(r.push("## Endpoints",""),s)){if(r.push(`### ${t.method} ${t.path}`),t.domain&&r.push(`*Domain:* \`${t.domain}\``),t.description&&r.push("",t.description),t.links.length){let a=t.links.map(t=>`\`${e.get(t.tableId)??t.tableId}\` (${t.access})`).join(", ");r.push("",`Touches: ${a}`)}r.push("")}}return r.join("\n")}])},13562,e=>{"use strict";var t=e.i(2157),a=e.i(50227),r=e.i(38752),n=e.i(94930);function i(){return(0,a.join)((0,r.dataDir)(),"plan-verdict.json")}e.s(["clearPlanVerdict",0,function(){(0,t.rmSync)(i(),{force:!0})},"readPlanVerdict",0,function(){try{return JSON.parse((0,t.readFileSync)(i(),"utf8"))}catch{return null}},"writePlanVerdict",0,function(e){(0,n.writeJsonAtomic)(i(),e)}])},62391,e=>e.a(async(t,a)=>{try{var r=e.i(75225),n=e.i(91426),i=e.i(34700),o=e.i(23737),s=e.i(69062),l=e.i(53870),d=e.i(47231),u=e.i(20537),c=e.i(74005),p=e.i(13562),f=e.i(56715),m=e.i(6659),h=t([n,o,s,u,m]);async function y(){let e=(0,c.readPlanMeta)(),t=(0,o.readDraftDoc)(),a=await (0,s.getFeatureDraft)(),r=(0,f.readStoredAnnotations)(),n=e?.description??"(no description)",i=e?.markdown?(0,u.extractBeaconBlock)(e.markdown).prose:(0,d.synthesizePlanMarkdown)(n,t,a);return{description:n,markdown:i,draftDoc:t,featureGraph:a,annotations:r.annotations,globalComment:r.globalComment}}async function g(){await (0,s.clearFeatureDraft)(),(0,o.clearDraftDoc)(),(0,c.clearPlanMeta)(),(0,f.clearStoredAnnotations)()}async function b(e){let t=(0,c.readPlanMeta)(),a=await y(),s=e?.doc??a.draftDoc,d=s?await (0,o.approveDraft)(s):null,u={count:(await n.db.update(i.node).set({source:"MANUAL"}).where((0,r.and)((0,r.eq)(i.node.source,"DRAFT"),(0,r.eq)(i.node.view,"ROADMAP"))).returning({id:i.node.id})).length};(0,l.archivePlan)({description:a.description,markdown:a.markdown,verdict:"approved",annotations:a.annotations,globalComment:a.globalComment,draftDoc:a.draftDoc,featureGraph:a.featureGraph});let f=[];d&&f.push(`${d.tables} table(s), ${d.relations} relation(s) and ${d.endpoints} endpoint(s)`),u.count&&f.push(`${u.count} feature(s)`);let h=f.length?`${f.join(" and ")} approved and persisted.`:"Plan approved.";return(0,p.writePlanVerdict)({proposedAt:t?.proposedAt??0,status:"approved",summary:h,detail:s?(0,o.describeApprovedDoc)(s):void 0,features:a.featureGraph.features.map(e=>e.title),decidedAt:Date.now()}),await g(),await (0,m.bumpVersion)(),{db:d,features:u.count}}async function w(){let e=(0,c.readPlanMeta)(),t=await y();(t.draftDoc&&(t.draftDoc.tables.length||t.draftDoc.endpoints.length)||t.featureGraph.features.length>0||e?.markdown)&&(0,l.archivePlan)({description:t.description,markdown:t.markdown,verdict:"discarded",annotations:t.annotations,globalComment:t.globalComment,draftDoc:t.draftDoc,featureGraph:t.featureGraph}),(0,p.writePlanVerdict)({proposedAt:e?.proposedAt??0,status:"discarded",summary:"The user discarded the plan.",decidedAt:Date.now()}),(0,o.discardDraft)(),await g(),await (0,m.bumpVersion)()}async function D(){let e=(0,f.readAnnotationFeedback)();if(e.submitted&&e.feedback)return{kind:"feedback",feedback:e.feedback};let t=(0,p.readPlanVerdict)();if(t)return"approved"===t.status?{kind:"approved",summary:t.summary,detail:t.detail,features:t.features}:{kind:"discarded",summary:t.summary};let a=(0,c.readPlanMeta)(),r=(0,o.readDraftDoc)(),n=await (0,s.getFeatureDraft)();return(r?.tables.length??0)+(r?.endpoints.length??0)+n.features.length>0||a?.markdown?{kind:"pending"}:{kind:"discarded",summary:"The user discarded the plan."}}[n,o,s,u,m]=h.then?(await h)():h,e.s(["approvePlan",0,b,"discardPlan",0,w,"resetPlanRound",0,function(){(0,f.clearStoredAnnotations)(),(0,p.clearPlanVerdict)()},"resolvePlanVerdict",0,D]),a()}catch(e){a(e)}},!1)];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=lib_1wz-3od._.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../lib/plan-history.ts","../../../lib/design.ts","../../../lib/feature-design.ts","../../../lib/plan-block.ts","../../../lib/plan-markdown.ts","../../../lib/plan-verdict.ts","../../../lib/plan-resolve.ts"],"sourcesContent":["import { mkdirSync, readFileSync, readdirSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\nimport { dataDir } from \"@/lib/project\";\nimport { writeJsonAtomic } from \"@/lib/atomic-write\";\n\n// Plan history: every time a plan resolves (approve/discard), Beacon archives a snapshot\n// of the markdown + annotations + verdict so the user can browse past proposals later.\n// Files live under dataDir()/plans/history as plain JSON, ordered by mtime.\n\nexport interface ArchivedPlan {\n id: string;\n description: string;\n markdown: string;\n verdict: \"approved\" | \"discarded\";\n archivedAt: number;\n annotations?: unknown;\n globalComment?: string;\n // Snapshots of the canvas at archive time so the history view can re-render the board\n // even if the live DB has moved on (or, for discarded plans, never had the draft).\n draftDoc?: unknown; // DraftDoc — tables/relations/endpoints\n featureGraph?: unknown; // FeatureGraph — proposed features\n}\n\nfunction dir(): string {\n const d = join(dataDir(), \"plans\", \"history\");\n mkdirSync(d, { recursive: true });\n return d;\n}\n\nexport function archivePlan(p: Omit<ArchivedPlan, \"id\" | \"archivedAt\">): ArchivedPlan {\n const archived: ArchivedPlan = {\n ...p,\n id: randomUUID().slice(0, 8),\n archivedAt: Date.now(),\n };\n writeJsonAtomic(join(dir(), `${archived.id}.json`), archived, true);\n return archived;\n}\n\nexport function listHistory(): ArchivedPlan[] {\n let entries: string[];\n try {\n entries = readdirSync(dir());\n } catch {\n return [];\n }\n const items: ArchivedPlan[] = [];\n for (const name of entries) {\n if (!name.endsWith(\".json\")) continue;\n try {\n const p = join(dir(), name);\n const raw = readFileSync(p, \"utf8\");\n const parsed = JSON.parse(raw) as ArchivedPlan;\n items.push(parsed);\n } catch {\n /* skip corrupt */\n }\n }\n return items.sort((a, b) => b.archivedAt - a.archivedAt);\n}\n\nexport function readArchivedPlan(id: string): ArchivedPlan | null {\n try {\n const raw = readFileSync(join(dir(), `${id}.json`), \"utf8\");\n return JSON.parse(raw) as ArchivedPlan;\n } catch {\n return null;\n }\n}\n\n// Hook fixture for tests — exposes mtime of a path safely.\nexport function archivedMtime(id: string): number | null {\n try {\n return statSync(join(dir(), `${id}.json`)).mtimeMs;\n } catch {\n return null;\n }\n}\n","import { z } from \"zod\";\nimport { accessForMethod } from \"@/lib/access\";\n\n// The name-keyed proposal shape the terminal session pushes via `beacon_propose_plan`.\n// It's positioned + given ids by lib/draft-store (graphToDoc) into a DraftDoc, which is\n// what the /db canvas actually edits. Endpoints may declare which tables they touch via\n// `uses` so the canvas can draw the links.\n\n// A single column. The agent sometimes lists columns as bare strings (\"id\", \"name uuid\") instead\n// of objects — coerce \"<name> [type…]\" into a column up front (preprocess) so the OUTPUT is always\n// the full column shape and the table still renders instead of the whole block being dropped.\nexport const columnSchema = z.preprocess(\n (c) => {\n if (typeof c === \"string\") {\n const [name, ...rest] = c.trim().split(/\\s+/);\n return { name, type: rest.join(\" \") || \"text\" };\n }\n return c;\n },\n z.object({\n name: z.string().trim().min(1),\n type: z.string().trim().min(1),\n isPk: z.boolean().optional(),\n isFk: z.boolean().optional(),\n nullable: z.boolean().optional(),\n note: z.string().nullish(),\n }),\n);\n\nexport const tableSchema = z.object({\n name: z.string().trim().min(1),\n domain: z.string().nullish(),\n description: z.string().nullish(),\n columns: z.array(columnSchema).default([]),\n});\n\nexport const relationSchema = z.object({\n fromTable: z.string(),\n fromColumn: z.string(),\n toTable: z.string(),\n toColumn: z.string(),\n label: z.string().nullish(),\n});\n\nexport const endpointSchema = z\n .object({\n method: z.string().trim().min(1),\n path: z.string().trim().min(1),\n domain: z.string().nullish(),\n description: z.string().nullish(),\n uses: z\n .array(\n z.object({\n table: z.string().trim().min(1),\n access: z.string().optional(),\n }),\n )\n .default([]),\n })\n // Unspecified access defaults to the verb's intent (PATCH/DELETE write, GET reads).\n .transform((e) => ({\n ...e,\n uses: e.uses.map((u) => ({ ...u, access: u.access ?? accessForMethod(e.method) })),\n }));\n\nexport const draftSchema = z.object({\n tables: z.array(tableSchema).default([]),\n relations: z.array(relationSchema).default([]),\n endpoints: z.array(endpointSchema).default([]),\n});\nexport type DraftGraph = z.infer<typeof draftSchema>;\n","import { z } from \"zod\";\nimport { and, eq, inArray } from \"drizzle-orm\";\nimport { db, type DB } from \"@/lib/db-drizzle\";\nimport { node, edge } from \"@/lib/drizzle/schema\";\nimport { forceLayoutRoadmap } from \"@/lib/roadmap-force-layout\";\n\n// Feature draft schema: top-level roadmap nodes the terminal session pushes via\n// `beacon_propose_plan`. Persisted as DRAFT Nodes (view=ROADMAP, source=DRAFT) so they\n// render on the /map roadmap canvas as a draft layer, parallel to the /db draft.\n\ntype Prisma = DB;\n\nexport const featureItemSchema = z\n .object({\n title: z.string().trim().min(1),\n role: z.string().nullish(),\n plain: z.string().nullish(),\n cluster: z.string().nullish(),\n // The agent + UI both call the category \"category\", and \"domain\" is the adjacent word\n // it reaches for — accept all three and normalize to `cluster` below so a plan written\n // with `category` (the natural choice) isn't dropped on the floor.\n category: z.string().nullish(),\n domain: z.string().nullish(),\n // Any number is accepted and CLAMPED to 0..3 below — the agent's scale (often 1..4 or\n // 1..5) shouldn't drop the feature. Kept nullish for parse tolerance; the propose-plan\n // flow REQUIRES it via validateProposedFeatures (lib/feature-rules) before persisting.\n priority: z.number().nullish(),\n // Titles of other features in THIS plan that must ship first. Resolved into DEPENDS\n // edges so the board shows the dependency chain instead of disconnected cards. It's a\n // transport array only — never stored as a DB scalar list (it becomes Edge rows).\n dependsOn: z.array(z.string()).nullish(),\n })\n // Normalize the category aliases (`category`/`domain` → `cluster`) and clamp priority into\n // Beacon's P0..P3 range so a slightly-off plan still lands on the board instead of being\n // dropped wholesale.\n .transform(({ category, domain, priority, ...f }) => ({\n ...f,\n cluster: f.cluster ?? category ?? domain ?? null,\n priority: priority == null ? null : Math.max(0, Math.min(3, Math.round(priority))),\n }));\n\nexport const featureSchema = z.object({\n features: z.array(featureItemSchema).default([]),\n});\nexport type FeatureGraph = z.infer<typeof featureSchema>;\n\nexport async function clearFeatureDraft(prisma: Prisma = db) {\n await prisma.delete(node).where(and(eq(node.source, \"DRAFT\"), eq(node.view, \"ROADMAP\")));\n}\n\nexport async function persistFeatureDraft(graph: FeatureGraph, prisma: Prisma = db) {\n const g = featureSchema.parse(graph);\n await clearFeatureDraft(prisma);\n\n // Place the proposal below any existing roadmap cards so it doesn't overlap them.\n const top = await prisma.query.node.findFirst({\n where: (t, { eq }) => eq(t.view, \"ROADMAP\"),\n orderBy: (t, { desc }) => desc(t.y),\n });\n const baseY = (top?.y ?? 0) + 200;\n\n // Lay the draft out as an organic 2D graph (d3-force) so dependency-linked features cluster and\n // independent ones spread across the width — instead of a blind horizontal row. dependsOn titles\n // become edges; the layout keys off titles since the node ids don't exist yet.\n const titleSet = new Set(g.features.map((f) => f.title.trim()));\n const layoutNodes = g.features.map((f) => ({ id: f.title.trim() }));\n const layoutEdges = g.features.flatMap((f) =>\n (f.dependsOn ?? [])\n .map((d) => d.trim())\n .filter((d) => titleSet.has(d) && d !== f.title.trim())\n .map((d) => ({ fromId: f.title.trim(), toId: d })),\n );\n const pos = forceLayoutRoadmap(layoutNodes, layoutEdges);\n\n const idByTitle = new Map<string, string>();\n for (const f of g.features) {\n const p = pos.get(f.title.trim()) ?? { x: 0, y: 0 };\n const [created] = await prisma\n .insert(node)\n .values({\n view: \"ROADMAP\",\n source: \"DRAFT\",\n status: \"PENDING\",\n title: f.title,\n role: f.role ?? null,\n plain: f.plain ?? null,\n cluster: f.cluster ?? null,\n priority: f.priority ?? 2,\n x: p.x,\n y: p.y + baseY,\n })\n .returning();\n idByTitle.set(f.title.trim(), created.id);\n }\n\n // Auto-connect: turn each feature's `dependsOn` titles into DEPENDS edges so the proposal\n // renders as a connected dependency chain on /plan and /map instead of loose cards. Skip\n // unresolved titles + self-references; idempotent on the unique [fromId,toId,kind]. These\n // edges cascade-delete with the draft nodes on the next clearFeatureDraft, so re-proposing\n // is clean with no orphan edges.\n for (const f of g.features) {\n const fromId = idByTitle.get(f.title.trim());\n if (!fromId || !f.dependsOn) continue;\n for (const depTitle of f.dependsOn) {\n const toId = idByTitle.get(depTitle.trim());\n if (!toId || toId === fromId) continue;\n const exists = await prisma.query.edge.findFirst({\n where: (t, { and, eq }) =>\n and(eq(t.fromId, fromId), eq(t.toId, toId), eq(t.kind, \"DEPENDS\")),\n });\n if (!exists) await prisma.insert(edge).values({ fromId, toId, kind: \"DEPENDS\" });\n }\n }\n}\n\nexport async function getFeatureDraft(prisma: Prisma = db): Promise<FeatureGraph> {\n const nodes = await prisma.query.node.findMany({\n where: (t, { and, eq }) => and(eq(t.source, \"DRAFT\"), eq(t.view, \"ROADMAP\")),\n orderBy: (t, { asc }) => asc(t.createdAt),\n });\n // Reconstruct each feature's dependsOn (by title) from the DEPENDS edges among the draft\n // nodes, so a re-read / re-propose round-trips the dependency chain.\n const ids = nodes.map((n) => n.id);\n const edges = ids.length\n ? await prisma.query.edge.findMany({\n where: (t, { and, eq }) =>\n and(eq(t.kind, \"DEPENDS\"), inArray(t.fromId, ids), inArray(t.toId, ids)),\n })\n : [];\n const titleById = new Map(nodes.map((n) => [n.id, n.title]));\n const depsByFrom = new Map<string, string[]>();\n for (const e of edges) {\n const toTitle = titleById.get(e.toId);\n if (!toTitle) continue;\n const arr = depsByFrom.get(e.fromId) ?? [];\n arr.push(toTitle);\n depsByFrom.set(e.fromId, arr);\n }\n return {\n features: nodes.map((n) => ({\n title: n.title,\n role: n.role,\n plain: n.plain,\n cluster: n.cluster,\n priority: n.priority,\n dependsOn: depsByFrom.get(n.id),\n })),\n };\n}\n","import { z } from \"zod\";\nimport {\n endpointSchema,\n relationSchema,\n tableSchema,\n type DraftGraph,\n} from \"@/lib/design\";\nimport { featureItemSchema, type FeatureGraph } from \"@/lib/feature-design\";\n\n// Deterministic (NO AI) extraction of a structured ```beacon block embedded in a plan-mode\n// markdown plan. The ExitPlanMode hook event carries only markdown — there is no structured\n// channel out of plan mode (MCP sampling is unsupported + deprecated) — so the agent embeds\n// one fenced ```beacon block of JSON ({ tables, relations, endpoints, features }) in the plan\n// it already writes. We parse + validate it with the SAME Zod schemas beacon_propose_plan\n// uses, then STRIP the block from the prose so the JSON is never shown in the annotation\n// panel. Any failure degrades to { prose: markdown } — a malformed block must never block the\n// plan from reaching the user.\n\nexport interface ExtractedPlan {\n prose: string;\n draft?: DraftGraph;\n features?: FeatureGraph[\"features\"];\n}\n\n// Strong, low-false-positive signals that a plan TOUCHES THE DATABASE — used to enforce that a\n// plan describing schema also SHIPS it structurally (in `tables`), not just in prose. Curated\n// to fire on real schema language (migrations, constraints, model files, column types) and NOT\n// on generic words like \"model\"/\"data\"/\"column\" alone.\nconst DB_SCHEMA_SIGNAL =\n /(\\bmigrations?\\b|\\balembic\\b|make revision|prisma migrate|unique\\s?constraint|foreign\\s?keys?|primary\\s?keys?|\\bFKs?\\b|\\bJSONB\\b|create\\s+table|alter\\s+table|add\\s+(a\\s+)?column|new\\s+(table|model|column)|app\\/models\\/|\\bBaseModel\\b|DeclarativeBase|schema\\.prisma|@@unique|natural\\s+keys?|\\bpgvector\\b|\\bTSVECTOR\\b|\\bDbTable\\b)/i;\n\n/** True when `text` clearly describes database schema (tables/models/migrations/columns). */\nexport function mentionsDbSchema(text: string | null | undefined): boolean {\n return !!text && DB_SCHEMA_SIGNAL.test(text);\n}\n\n// A fenced ```beacon … ``` block. The opening fence may carry trailing whitespace; the\n// closing fence is a line that is just ```. Only the first block is used. Case-insensitive\n// on the label, multiline body (non-greedy).\nconst BEACON_FENCE = /^[ \\t]*```beacon[ \\t]*\\r?\\n([\\s\\S]*?)\\r?\\n[ \\t]*```[ \\t]*$/im;\n\n// Parse an array PER-ITEM, keeping only the items that validate. One malformed table/relation/\n// feature must not nuke the whole block — that used to drop the ENTIRE board to raw prose when\n// the agent got a single field slightly wrong (a string column, an off-scale priority, a\n// relation in a different shape). Non-arrays → [].\nfunction parseEach<T>(value: unknown, schema: z.ZodType<T>): T[] {\n if (!Array.isArray(value)) return [];\n const out: T[] = [];\n for (const item of value) {\n const r = schema.safeParse(item);\n if (r.success) out.push(r.data);\n }\n return out;\n}\n\nexport function extractBeaconBlock(markdown: string): ExtractedPlan {\n const match = markdown.match(BEACON_FENCE);\n if (!match) return { prose: markdown };\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(match[1]);\n } catch {\n return { prose: markdown };\n }\n const obj = (parsed && typeof parsed === \"object\" ? parsed : {}) as Record<string, unknown>;\n\n // Each section is parsed independently and per-item, so a bad relation can't drop good tables,\n // and a bad table can't drop good features — the board renders everything Beacon understood.\n const tables = parseEach(obj.tables, tableSchema);\n const relations = parseEach(obj.relations, relationSchema);\n const endpoints = parseEach(obj.endpoints, endpointSchema);\n const features = parseEach(obj.features, featureItemSchema);\n\n const draft: DraftGraph | undefined =\n tables.length || endpoints.length || relations.length\n ? { tables, relations, endpoints }\n : undefined;\n const featureList: FeatureGraph[\"features\"] | undefined = features.length ? features : undefined;\n\n // Nothing usable — leave the prose untouched (and visible) rather than silently dropping it.\n if (!draft && !featureList) return { prose: markdown };\n\n const prose = markdown\n .replace(BEACON_FENCE, \"\")\n .replace(/\\n{3,}/g, \"\\n\\n\")\n .trim();\n return { prose, draft, features: featureList };\n}\n","import type { DraftDoc } from \"@/components/graph/db-types\";\nimport type { FeatureGraph } from \"@/lib/feature-design\";\n\n// Synthesizes the current proposal (DB draft + feature draft) into the markdown file\n// plannotator opens for annotation. Each frente / tabela / endpoint gets its own ###\n// heading so plannotator can scope the user's section-level Approve/Reject/Comment.\n\nexport function synthesizePlanMarkdown(\n description: string,\n dbDraft: DraftDoc | null,\n featureDraft: FeatureGraph | null,\n): string {\n const lines: string[] = [`# Plan: ${description}`, \"\"];\n\n const features = featureDraft?.features ?? [];\n if (features.length) {\n lines.push(\"## Features\", \"\");\n for (const f of features) {\n lines.push(`### ${f.title}`);\n if (f.cluster) lines.push(`*Domain:* \\`${f.cluster}\\``);\n if (f.role) lines.push(`*Role:* ${f.role}`);\n if (f.plain) lines.push(\"\", f.plain);\n lines.push(\"\");\n }\n }\n\n const tables = dbDraft?.tables ?? [];\n if (tables.length) {\n lines.push(\"## Database — Tables\", \"\");\n for (const t of tables) {\n lines.push(`### Table \\`${t.name}\\``);\n if (t.domain) lines.push(`*Domain:* \\`${t.domain}\\``);\n if (t.description) lines.push(\"\", t.description, \"\");\n for (const c of t.columns) {\n const flags = [c.isPk && \"PK\", c.isFk && \"FK\", c.nullable ? \"NULL\" : \"NOT NULL\"]\n .filter(Boolean)\n .join(\" \");\n lines.push(`- \\`${c.name}\\` ${c.type}${flags ? ` *${flags}*` : \"\"}${c.note ? ` — ${c.note}` : \"\"}`);\n }\n lines.push(\"\");\n }\n }\n\n const relations = dbDraft?.relations ?? [];\n if (relations.length) {\n const nameById = new Map(tables.map((t) => [t.id, t.name]));\n lines.push(\"## Database — Relations (FKs)\", \"\");\n for (const r of relations) {\n const from = nameById.get(r.fromTableId) ?? r.fromTableId;\n const to = nameById.get(r.toTableId) ?? r.toTableId;\n lines.push(`- \\`${from}.${r.fromColumn}\\` → \\`${to}.${r.toColumn}\\``);\n }\n lines.push(\"\");\n }\n\n const endpoints = dbDraft?.endpoints ?? [];\n if (endpoints.length) {\n const nameById = new Map(tables.map((t) => [t.id, t.name]));\n lines.push(\"## Endpoints\", \"\");\n for (const e of endpoints) {\n lines.push(`### ${e.method} ${e.path}`);\n if (e.domain) lines.push(`*Domain:* \\`${e.domain}\\``);\n if (e.description) lines.push(\"\", e.description);\n if (e.links.length) {\n const uses = e.links\n .map((l) => `\\`${nameById.get(l.tableId) ?? l.tableId}\\` (${l.access})`)\n .join(\", \");\n lines.push(\"\", `Touches: ${uses}`);\n }\n lines.push(\"\");\n }\n }\n\n return lines.join(\"\\n\");\n}\n","import { readFileSync, rmSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { dataDir } from \"@/lib/project\";\nimport { writeJsonAtomic } from \"@/lib/atomic-write\";\n\n// The single authoritative plan-level verdict. Every terminal action (approve / discard),\n// whether it came from /plan, the /db canvas, or a markdown hook plan with no DB at all,\n// writes this one file. It's what `resolvePlanVerdict` (lib/plan-resolve.ts) reads so the\n// MCP tool and the ExitPlanMode hook can no longer disagree about what the user decided.\n// Lives next to plan-meta.json in the workspace data dir; cleared on a fresh round.\n\nexport interface PlanVerdict {\n proposedAt: number;\n status: \"approved\" | \"discarded\";\n summary: string;\n // Full approved schema (the agent reads the user's edited columns from here). Only set\n // when the approved plan carried a DB draft.\n detail?: string;\n // Titles of the roadmap features this plan created. Echoed back on approval so the agent\n // knows EXACTLY which features to mark done (beacon_describe_feature) as it ships each one\n // — without this it tends to register only umbrella work and leaves the rest Pending.\n features?: string[];\n decidedAt: number;\n}\n\nfunction verdictPath(): string {\n return join(dataDir(), \"plan-verdict.json\");\n}\n\nexport function readPlanVerdict(): PlanVerdict | null {\n try {\n return JSON.parse(readFileSync(verdictPath(), \"utf8\")) as PlanVerdict;\n } catch {\n return null;\n }\n}\n\nexport function writePlanVerdict(v: PlanVerdict): void {\n writeJsonAtomic(verdictPath(), v);\n}\n\nexport function clearPlanVerdict(): void {\n rmSync(verdictPath(), { force: true });\n}\n","import { and, eq } from \"drizzle-orm\";\nimport { db } from \"@/lib/db-drizzle\";\nimport { node } from \"@/lib/drizzle/schema\";\nimport type { DraftDoc } from \"@/components/graph/db-types\";\nimport {\n approveDraft,\n clearDraftDoc,\n describeApprovedDoc,\n discardDraft,\n readDraftDoc,\n} from \"@/lib/draft-store\";\nimport { clearFeatureDraft, getFeatureDraft, type FeatureGraph } from \"@/lib/feature-design\";\nimport { archivePlan } from \"@/lib/plan-history\";\nimport { synthesizePlanMarkdown } from \"@/lib/plan-markdown\";\nimport { extractBeaconBlock } from \"@/lib/plan-block\";\nimport { clearPlanMeta, readPlanMeta } from \"@/lib/plan-meta\";\nimport { clearPlanVerdict, readPlanVerdict, writePlanVerdict } from \"@/lib/plan-verdict\";\nimport {\n clearStoredAnnotations,\n readAnnotationFeedback,\n readStoredAnnotations,\n} from \"@/lib/plan-annotations-store\";\nimport { bumpVersion } from \"@/lib/ingest\";\n\n// The unification core for the plan feedback loop. EVERY terminal action (approve / discard)\n// from EVERY entry point (/plan buttons, the /db canvas buttons) routes through approvePlan /\n// discardPlan here, so archiving, feature promotion, cleanup, and the authoritative\n// plan-verdict are identical regardless of which button was clicked. Both pollers (the MCP\n// tool and the ExitPlanMode hook) read resolvePlanVerdict, so they can never disagree.\n//\n// This module does NOT pin a workspace — callers (route handlers) wrap it in\n// runWithWorkspace so disk + db target the right repo.\n\ninterface PlanSnapshot {\n description: string;\n markdown: string;\n draftDoc: DraftDoc | null;\n featureGraph: FeatureGraph;\n annotations: unknown;\n globalComment: string;\n}\n\n// Read the plan exactly as it stands BEFORE any mutation, so history captures what was\n// proposed (mirrors the inline reads /api/plan/approve and /api/plan DELETE used to do).\nasync function snapshotPlan(): Promise<PlanSnapshot> {\n const meta = readPlanMeta();\n const draftDoc = readDraftDoc();\n const featureGraph = await getFeatureDraft();\n const stored = readStoredAnnotations();\n const description = meta?.description ?? \"(no description)\";\n // Strip any surviving ```beacon block so archived history never shows the machine-only JSON\n // (mirrors the /plan page's render-time guard; same canonical matcher).\n const markdown = meta?.markdown\n ? extractBeaconBlock(meta.markdown).prose\n : synthesizePlanMarkdown(description, draftDoc, featureGraph);\n return {\n description,\n markdown,\n draftDoc,\n featureGraph,\n annotations: stored.annotations,\n globalComment: stored.globalComment,\n };\n}\n\n// Wipe everything a resolved plan leaves behind EXCEPT the plan-verdict — that's the signal\n// the pollers are waiting on.\nasync function cleanupPlan(): Promise<void> {\n await clearFeatureDraft();\n clearDraftDoc();\n clearPlanMeta();\n clearStoredAnnotations();\n}\n\nexport async function approvePlan(opts?: { doc?: DraftDoc | null }): Promise<{\n db: { tables: number; relations: number; endpoints: number } | null;\n features: number;\n}> {\n const meta = readPlanMeta();\n const snap = await snapshotPlan();\n // The /db canvas sends the browser-edited doc; /plan approves the on-disk draft as-is.\n const doc = opts?.doc ?? snap.draftDoc;\n\n const dbCount = doc ? await approveDraft(doc) : null;\n const promoted = await db\n .update(node)\n .set({ source: \"MANUAL\" })\n .where(and(eq(node.source, \"DRAFT\"), eq(node.view, \"ROADMAP\")))\n .returning({ id: node.id });\n const featuresApproved = { count: promoted.length };\n\n archivePlan({\n description: snap.description,\n markdown: snap.markdown,\n verdict: \"approved\",\n annotations: snap.annotations,\n globalComment: snap.globalComment,\n draftDoc: snap.draftDoc,\n featureGraph: snap.featureGraph,\n });\n\n const parts: string[] = [];\n if (dbCount)\n parts.push(\n `${dbCount.tables} table(s), ${dbCount.relations} relation(s) and ${dbCount.endpoints} endpoint(s)`,\n );\n if (featuresApproved.count) parts.push(`${featuresApproved.count} feature(s)`);\n const summary = parts.length ? `${parts.join(\" and \")} approved and persisted.` : \"Plan approved.\";\n\n writePlanVerdict({\n proposedAt: meta?.proposedAt ?? 0,\n status: \"approved\",\n summary,\n detail: doc ? describeApprovedDoc(doc) : undefined,\n // The exact titles the agent must mark done as it ships each feature.\n features: snap.featureGraph.features.map((f) => f.title),\n decidedAt: Date.now(),\n });\n\n await cleanupPlan();\n await bumpVersion();\n return { db: dbCount, features: featuresApproved.count };\n}\n\nexport async function discardPlan(): Promise<void> {\n const meta = readPlanMeta();\n const snap = await snapshotPlan();\n const hasContent =\n (snap.draftDoc && (snap.draftDoc.tables.length || snap.draftDoc.endpoints.length)) ||\n snap.featureGraph.features.length > 0 ||\n !!meta?.markdown;\n if (hasContent) {\n archivePlan({\n description: snap.description,\n markdown: snap.markdown,\n verdict: \"discarded\",\n annotations: snap.annotations,\n globalComment: snap.globalComment,\n draftDoc: snap.draftDoc,\n featureGraph: snap.featureGraph,\n });\n }\n writePlanVerdict({\n proposedAt: meta?.proposedAt ?? 0,\n status: \"discarded\",\n summary: \"The user discarded the plan.\",\n decidedAt: Date.now(),\n });\n // Also record the DB-level draft verdict so the /db-local draftState() loop stays coherent.\n discardDraft();\n await cleanupPlan();\n await bumpVersion();\n}\n\nexport type PlanVerdictResolution =\n | { kind: \"pending\" }\n | { kind: \"feedback\"; feedback: string }\n | { kind: \"approved\"; summary: string; detail?: string; features?: string[] }\n | { kind: \"discarded\"; summary: string };\n\n// The single verdict both pollers read. Precedence:\n// 1. Submitted, non-empty feedback (closes the iterate loop) —\n// 2. an explicit plan-verdict (approve/discard) —\n// 3. otherwise derived from whether a plan is still pending.\nexport async function resolvePlanVerdict(): Promise<PlanVerdictResolution> {\n const annot = readAnnotationFeedback();\n if (annot.submitted && annot.feedback) return { kind: \"feedback\", feedback: annot.feedback };\n\n const v = readPlanVerdict();\n if (v) {\n return v.status === \"approved\"\n ? { kind: \"approved\", summary: v.summary, detail: v.detail, features: v.features }\n : { kind: \"discarded\", summary: v.summary };\n }\n\n const meta = readPlanMeta();\n const draft = readDraftDoc();\n const features = await getFeatureDraft();\n const pending =\n (draft?.tables.length ?? 0) + (draft?.endpoints.length ?? 0) + features.features.length > 0 ||\n !!meta?.markdown;\n return pending\n ? { kind: \"pending\" }\n : { kind: \"discarded\", summary: \"The user discarded the plan.\" };\n}\n\n// Clear the verdict + annotation state for a fresh round. Used by POST /api/plan.\nexport function resetPlanRound(): void {\n clearStoredAnnotations();\n clearPlanVerdict();\n}\n"],"names":["dir","d","recursive","archivePlan","p","archived","id","slice","archivedAt","Date","now","listHistory","entries","items","name","endsWith","raw","parsed","JSON","parse","push","sort","a","b","readArchivedPlan","archivedMtime","mtimeMs","columnSchema","preprocess","c","rest","trim","split","type","join","object","string","min","isPk","boolean","optional","isFk","nullable","note","nullish","tableSchema","domain","description","columns","array","default","relationSchema","fromTable","fromColumn","toTable","toColumn","label","endpointSchema","method","path","uses","table","access","transform","e","map","u","draftSchema","tables","relations","endpoints","featureItemSchema","title","role","plain","cluster","category","priority","number","dependsOn","f","Math","max","round","featureSchema","features","clearFeatureDraft","prisma","delete","where","source","view","persistFeatureDraft","graph","g","top","query","node","findFirst","t","eq","orderBy","desc","y","baseY","titleSet","Set","layoutNodes","layoutEdges","flatMap","filter","has","fromId","toId","pos","idByTitle","Map","get","x","created","insert","values","status","returning","set","depTitle","exists","edge","and","kind","getFeatureDraft","nodes","findMany","asc","createdAt","ids","n","edges","length","titleById","depsByFrom","toTitle","arr","DB_SCHEMA_SIGNAL","mentionsDbSchema","text","test","BEACON_FENCE","parseEach","value","schema","Array","isArray","out","item","r","safeParse","success","data","extractBeaconBlock","markdown","match","prose","obj","draft","undefined","featureList","replace","synthesizePlanMarkdown","dbDraft","featureDraft","lines","flags","Boolean","nameById","from","fromTableId","to","toTableId","links","l","tableId","verdictPath","readPlanVerdict","writePlanVerdict","v","clearPlanVerdict","force","snapshotPlan","meta","draftDoc","featureGraph","stored","annotations","globalComment","cleanupPlan","approvePlan","opts","snap","doc","dbCount","promoted","update","featuresApproved","count","verdict","parts","summary","proposedAt","detail","decidedAt","db","discardPlan","hasContent","resolvePlanVerdict","annot","submitted","feedback","pending","resetPlanRound"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[53870,e=>{"use strict";var t=e.i(2157),a=e.i(50227),r=e.i(66680),n=e.i(38752),i=e.i(94930);function o(){let e=(0,a.join)((0,n.dataDir)(),"plans","history");return(0,t.mkdirSync)(e,{recursive:!0}),e}e.s(["archivePlan",0,function(e){let t={...e,id:(0,r.randomUUID)().slice(0,8),archivedAt:Date.now()};return(0,i.writeJsonAtomic)((0,a.join)(o(),`${t.id}.json`),t,!0),t},"listHistory",0,function(){let e;try{e=(0,t.readdirSync)(o())}catch{return[]}let r=[];for(let n of e)if(n.endsWith(".json"))try{let e=(0,a.join)(o(),n),i=(0,t.readFileSync)(e,"utf8"),s=JSON.parse(i);r.push(s)}catch{}return r.sort((e,t)=>t.archivedAt-e.archivedAt)},"readArchivedPlan",0,function(e){try{let r=(0,t.readFileSync)((0,a.join)(o(),`${e}.json`),"utf8");return JSON.parse(r)}catch{return null}}])},69062,e=>e.a(async(t,a)=>{try{var r=e.i(69719),n=e.i(75225),i=e.i(91426),o=e.i(34700),s=e.i(22609),l=t([i]);[i]=l.then?(await l)():l;let p=r.z.object({title:r.z.string().trim().min(1),role:r.z.string().nullish(),plain:r.z.string().nullish(),cluster:r.z.string().nullish(),category:r.z.string().nullish(),domain:r.z.string().nullish(),priority:r.z.number().nullish(),dependsOn:r.z.array(r.z.string()).nullish()}).transform(({category:e,domain:t,priority:a,...r})=>({...r,cluster:r.cluster??e??t??null,priority:null==a?null:Math.max(0,Math.min(3,Math.round(a)))})),f=r.z.object({features:r.z.array(p).default([])});async function d(e=i.db){await e.delete(o.node).where((0,n.and)((0,n.eq)(o.node.source,"DRAFT"),(0,n.eq)(o.node.view,"ROADMAP")))}async function u(e,t=i.db){let a=f.parse(e);await d(t);let r=await t.query.node.findFirst({where:(e,{eq:t})=>t(e.view,"ROADMAP"),orderBy:(e,{desc:t})=>t(e.y)}),n=(r?.y??0)+200,l=new Set(a.features.map(e=>e.title.trim())),c=a.features.map(e=>({id:e.title.trim()})),p=a.features.flatMap(e=>(e.dependsOn??[]).map(e=>e.trim()).filter(t=>l.has(t)&&t!==e.title.trim()).map(t=>({fromId:e.title.trim(),toId:t}))),m=(0,s.forceLayoutRoadmap)(c,p),h=new Map;for(let e of a.features){let a=m.get(e.title.trim())??{x:0,y:0},[r]=await t.insert(o.node).values({view:"ROADMAP",source:"DRAFT",status:"PENDING",title:e.title,role:e.role??null,plain:e.plain??null,cluster:e.cluster??null,priority:e.priority??2,x:a.x,y:a.y+n}).returning();h.set(e.title.trim(),r.id)}for(let e of a.features){let a=h.get(e.title.trim());if(a&&e.dependsOn)for(let r of e.dependsOn){let e=h.get(r.trim());e&&e!==a&&(await t.query.edge.findFirst({where:(t,{and:r,eq:n})=>r(n(t.fromId,a),n(t.toId,e),n(t.kind,"DEPENDS"))})||await t.insert(o.edge).values({fromId:a,toId:e,kind:"DEPENDS"}))}}}async function c(e=i.db){let t=await e.query.node.findMany({where:(e,{and:t,eq:a})=>t(a(e.source,"DRAFT"),a(e.view,"ROADMAP")),orderBy:(e,{asc:t})=>t(e.createdAt)}),a=t.map(e=>e.id),r=a.length?await e.query.edge.findMany({where:(e,{and:t,eq:r})=>t(r(e.kind,"DEPENDS"),(0,n.inArray)(e.fromId,a),(0,n.inArray)(e.toId,a))}):[],o=new Map(t.map(e=>[e.id,e.title])),s=new Map;for(let e of r){let t=o.get(e.toId);if(!t)continue;let a=s.get(e.fromId)??[];a.push(t),s.set(e.fromId,a)}return{features:t.map(e=>({title:e.title,role:e.role,plain:e.plain,cluster:e.cluster,priority:e.priority,dependsOn:s.get(e.id)}))}}e.s(["clearFeatureDraft",0,d,"featureItemSchema",0,p,"featureSchema",0,f,"getFeatureDraft",0,c,"persistFeatureDraft",0,u]),a()}catch(e){a(e)}},!1),47231,e=>{"use strict";e.s(["synthesizePlanMarkdown",0,function(e,t,a){let r=[`# Plan: ${e}`,""],n=a?.features??[];if(n.length)for(let e of(r.push("## Features",""),n))r.push(`### ${e.title}`),e.cluster&&r.push(`*Domain:* \`${e.cluster}\``),e.role&&r.push(`*Role:* ${e.role}`),e.plain&&r.push("",e.plain),r.push("");let i=t?.tables??[];if(i.length)for(let e of(r.push("## Database — Tables",""),i)){for(let t of(r.push(`### Table \`${e.name}\``),e.domain&&r.push(`*Domain:* \`${e.domain}\``),e.description&&r.push("",e.description,""),e.columns)){let e=[t.isPk&&"PK",t.isFk&&"FK",t.nullable?"NULL":"NOT NULL"].filter(Boolean).join(" ");r.push(`- \`${t.name}\` ${t.type}${e?` *${e}*`:""}${t.note?` — ${t.note}`:""}`)}r.push("")}let o=t?.relations??[];if(o.length){let e=new Map(i.map(e=>[e.id,e.name]));for(let t of(r.push("## Database — Relations (FKs)",""),o)){let a=e.get(t.fromTableId)??t.fromTableId,n=e.get(t.toTableId)??t.toTableId;r.push(`- \`${a}.${t.fromColumn}\` → \`${n}.${t.toColumn}\``)}r.push("")}let s=t?.endpoints??[];if(s.length){let e=new Map(i.map(e=>[e.id,e.name]));for(let t of(r.push("## Endpoints",""),s)){if(r.push(`### ${t.method} ${t.path}`),t.domain&&r.push(`*Domain:* \`${t.domain}\``),t.description&&r.push("",t.description),t.links.length){let a=t.links.map(t=>`\`${e.get(t.tableId)??t.tableId}\` (${t.access})`).join(", ");r.push("",`Touches: ${a}`)}r.push("")}}return r.join("\n")}])},40717,e=>{"use strict";var t=e.i(69719),a=e.i(39513);let r=t.z.preprocess(e=>{if("string"==typeof e){let[t,...a]=e.trim().split(/\s+/);return{name:t,type:a.join(" ")||"text"}}return e},t.z.object({name:t.z.string().trim().min(1),type:t.z.string().trim().min(1),isPk:t.z.boolean().optional(),isFk:t.z.boolean().optional(),nullable:t.z.boolean().optional(),note:t.z.string().nullish()})),n=t.z.object({name:t.z.string().trim().min(1),domain:t.z.string().nullish(),description:t.z.string().nullish(),columns:t.z.array(r).default([])}),i=t.z.object({fromTable:t.z.string(),fromColumn:t.z.string(),toTable:t.z.string(),toColumn:t.z.string(),label:t.z.string().nullish()}),o=t.z.object({method:t.z.string().trim().min(1),path:t.z.string().trim().min(1),domain:t.z.string().nullish(),description:t.z.string().nullish(),uses:t.z.array(t.z.object({table:t.z.string().trim().min(1),access:t.z.string().optional()})).default([])}).transform(e=>({...e,uses:e.uses.map(t=>({...t,access:t.access??(0,a.accessForMethod)(e.method)}))})),s=t.z.object({tables:t.z.array(n).default([]),relations:t.z.array(i).default([]),endpoints:t.z.array(o).default([])});e.s(["draftSchema",0,s,"endpointSchema",0,o,"relationSchema",0,i,"tableSchema",0,n])},20537,e=>e.a(async(t,a)=>{try{var r=e.i(40717),n=e.i(69062),i=t([n]);[n]=i.then?(await i)():i;let s=/^[ \t]*```beacon[ \t]*\r?\n([\s\S]*?)\r?\n[ \t]*```[ \t]*$/im;function o(e,t){if(!Array.isArray(e))return[];let a=[];for(let r of e){let e=t.safeParse(r);e.success&&a.push(e.data)}return a}e.s(["extractBeaconBlock",0,function(e){let t,a=e.match(s);if(!a)return{prose:e};try{t=JSON.parse(a[1])}catch{return{prose:e}}let i=t&&"object"==typeof t?t:{},l=o(i.tables,r.tableSchema),d=o(i.relations,r.relationSchema),u=o(i.endpoints,r.endpointSchema),c=o(i.features,n.featureItemSchema),p=l.length||u.length||d.length?{tables:l,relations:d,endpoints:u}:void 0,f=c.length?c:void 0;return p||f?{prose:e.replace(s,"").replace(/\n{3,}/g,"\n\n").trim(),draft:p,features:f}:{prose:e}}]),a()}catch(e){a(e)}},!1),13562,e=>{"use strict";var t=e.i(2157),a=e.i(50227),r=e.i(38752),n=e.i(94930);function i(){return(0,a.join)((0,r.dataDir)(),"plan-verdict.json")}e.s(["clearPlanVerdict",0,function(){(0,t.rmSync)(i(),{force:!0})},"readPlanVerdict",0,function(){try{return JSON.parse((0,t.readFileSync)(i(),"utf8"))}catch{return null}},"writePlanVerdict",0,function(e){(0,n.writeJsonAtomic)(i(),e)}])},62391,e=>e.a(async(t,a)=>{try{var r=e.i(75225),n=e.i(91426),i=e.i(34700),o=e.i(23737),s=e.i(69062),l=e.i(53870),d=e.i(47231),u=e.i(20537),c=e.i(74005),p=e.i(13562),f=e.i(56715),m=e.i(6659),h=t([n,o,s,u,m]);async function y(){let e=(0,c.readPlanMeta)(),t=(0,o.readDraftDoc)(),a=await (0,s.getFeatureDraft)(),r=(0,f.readStoredAnnotations)(),n=e?.description??"(no description)",i=e?.markdown?(0,u.extractBeaconBlock)(e.markdown).prose:(0,d.synthesizePlanMarkdown)(n,t,a);return{description:n,markdown:i,draftDoc:t,featureGraph:a,annotations:r.annotations,globalComment:r.globalComment}}async function g(){await (0,s.clearFeatureDraft)(),(0,o.clearDraftDoc)(),(0,c.clearPlanMeta)(),(0,f.clearStoredAnnotations)()}async function b(e){let t=(0,c.readPlanMeta)(),a=await y(),s=e?.doc??a.draftDoc,d=s?await (0,o.approveDraft)(s):null,u={count:(await n.db.update(i.node).set({source:"MANUAL"}).where((0,r.and)((0,r.eq)(i.node.source,"DRAFT"),(0,r.eq)(i.node.view,"ROADMAP"))).returning({id:i.node.id})).length};(0,l.archivePlan)({description:a.description,markdown:a.markdown,verdict:"approved",annotations:a.annotations,globalComment:a.globalComment,draftDoc:a.draftDoc,featureGraph:a.featureGraph});let f=[];d&&f.push(`${d.tables} table(s), ${d.relations} relation(s) and ${d.endpoints} endpoint(s)`),u.count&&f.push(`${u.count} feature(s)`);let h=f.length?`${f.join(" and ")} approved and persisted.`:"Plan approved.";return(0,p.writePlanVerdict)({proposedAt:t?.proposedAt??0,status:"approved",summary:h,detail:s?(0,o.describeApprovedDoc)(s):void 0,features:a.featureGraph.features.map(e=>e.title),decidedAt:Date.now()}),await g(),await (0,m.bumpVersion)(),{db:d,features:u.count}}async function w(){let e=(0,c.readPlanMeta)(),t=await y();(t.draftDoc&&(t.draftDoc.tables.length||t.draftDoc.endpoints.length)||t.featureGraph.features.length>0||e?.markdown)&&(0,l.archivePlan)({description:t.description,markdown:t.markdown,verdict:"discarded",annotations:t.annotations,globalComment:t.globalComment,draftDoc:t.draftDoc,featureGraph:t.featureGraph}),(0,p.writePlanVerdict)({proposedAt:e?.proposedAt??0,status:"discarded",summary:"The user discarded the plan.",decidedAt:Date.now()}),(0,o.discardDraft)(),await g(),await (0,m.bumpVersion)()}async function D(){let e=(0,f.readAnnotationFeedback)();if(e.submitted&&e.feedback)return{kind:"feedback",feedback:e.feedback};let t=(0,p.readPlanVerdict)();if(t)return"approved"===t.status?{kind:"approved",summary:t.summary,detail:t.detail,features:t.features}:{kind:"discarded",summary:t.summary};let a=(0,c.readPlanMeta)(),r=(0,o.readDraftDoc)(),n=await (0,s.getFeatureDraft)();return(r?.tables.length??0)+(r?.endpoints.length??0)+n.features.length>0||a?.markdown?{kind:"pending"}:{kind:"discarded",summary:"The user discarded the plan."}}[n,o,s,u,m]=h.then?(await h)():h,e.s(["approvePlan",0,b,"discardPlan",0,w,"resetPlanRound",0,function(){(0,f.clearStoredAnnotations)(),(0,p.clearPlanVerdict)()},"resolvePlanVerdict",0,D]),a()}catch(e){a(e)}},!1)];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=lib_1xzwro7._.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../lib/plan-history.ts","../../../lib/feature-design.ts","../../../lib/plan-markdown.ts","../../../lib/design.ts","../../../lib/plan-block.ts","../../../lib/plan-verdict.ts","../../../lib/plan-resolve.ts"],"sourcesContent":["import { mkdirSync, readFileSync, readdirSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\nimport { dataDir } from \"@/lib/project\";\nimport { writeJsonAtomic } from \"@/lib/atomic-write\";\n\n// Plan history: every time a plan resolves (approve/discard), Beacon archives a snapshot\n// of the markdown + annotations + verdict so the user can browse past proposals later.\n// Files live under dataDir()/plans/history as plain JSON, ordered by mtime.\n\nexport interface ArchivedPlan {\n id: string;\n description: string;\n markdown: string;\n verdict: \"approved\" | \"discarded\";\n archivedAt: number;\n annotations?: unknown;\n globalComment?: string;\n // Snapshots of the canvas at archive time so the history view can re-render the board\n // even if the live DB has moved on (or, for discarded plans, never had the draft).\n draftDoc?: unknown; // DraftDoc — tables/relations/endpoints\n featureGraph?: unknown; // FeatureGraph — proposed features\n}\n\nfunction dir(): string {\n const d = join(dataDir(), \"plans\", \"history\");\n mkdirSync(d, { recursive: true });\n return d;\n}\n\nexport function archivePlan(p: Omit<ArchivedPlan, \"id\" | \"archivedAt\">): ArchivedPlan {\n const archived: ArchivedPlan = {\n ...p,\n id: randomUUID().slice(0, 8),\n archivedAt: Date.now(),\n };\n writeJsonAtomic(join(dir(), `${archived.id}.json`), archived, true);\n return archived;\n}\n\nexport function listHistory(): ArchivedPlan[] {\n let entries: string[];\n try {\n entries = readdirSync(dir());\n } catch {\n return [];\n }\n const items: ArchivedPlan[] = [];\n for (const name of entries) {\n if (!name.endsWith(\".json\")) continue;\n try {\n const p = join(dir(), name);\n const raw = readFileSync(p, \"utf8\");\n const parsed = JSON.parse(raw) as ArchivedPlan;\n items.push(parsed);\n } catch {\n /* skip corrupt */\n }\n }\n return items.sort((a, b) => b.archivedAt - a.archivedAt);\n}\n\nexport function readArchivedPlan(id: string): ArchivedPlan | null {\n try {\n const raw = readFileSync(join(dir(), `${id}.json`), \"utf8\");\n return JSON.parse(raw) as ArchivedPlan;\n } catch {\n return null;\n }\n}\n\n// Hook fixture for tests — exposes mtime of a path safely.\nexport function archivedMtime(id: string): number | null {\n try {\n return statSync(join(dir(), `${id}.json`)).mtimeMs;\n } catch {\n return null;\n }\n}\n","import { z } from \"zod\";\nimport { and, eq, inArray } from \"drizzle-orm\";\nimport { db, type DB } from \"@/lib/db-drizzle\";\nimport { node, edge } from \"@/lib/drizzle/schema\";\nimport { forceLayoutRoadmap } from \"@/lib/roadmap-force-layout\";\n\n// Feature draft schema: top-level roadmap nodes the terminal session pushes via\n// `beacon_propose_plan`. Persisted as DRAFT Nodes (view=ROADMAP, source=DRAFT) so they\n// render on the /map roadmap canvas as a draft layer, parallel to the /db draft.\n\ntype Prisma = DB;\n\nexport const featureItemSchema = z\n .object({\n title: z.string().trim().min(1),\n role: z.string().nullish(),\n plain: z.string().nullish(),\n cluster: z.string().nullish(),\n // The agent + UI both call the category \"category\", and \"domain\" is the adjacent word\n // it reaches for — accept all three and normalize to `cluster` below so a plan written\n // with `category` (the natural choice) isn't dropped on the floor.\n category: z.string().nullish(),\n domain: z.string().nullish(),\n // Any number is accepted and CLAMPED to 0..3 below — the agent's scale (often 1..4 or\n // 1..5) shouldn't drop the feature. Kept nullish for parse tolerance; the propose-plan\n // flow REQUIRES it via validateProposedFeatures (lib/feature-rules) before persisting.\n priority: z.number().nullish(),\n // Titles of other features in THIS plan that must ship first. Resolved into DEPENDS\n // edges so the board shows the dependency chain instead of disconnected cards. It's a\n // transport array only — never stored as a DB scalar list (it becomes Edge rows).\n dependsOn: z.array(z.string()).nullish(),\n })\n // Normalize the category aliases (`category`/`domain` → `cluster`) and clamp priority into\n // Beacon's P0..P3 range so a slightly-off plan still lands on the board instead of being\n // dropped wholesale.\n .transform(({ category, domain, priority, ...f }) => ({\n ...f,\n cluster: f.cluster ?? category ?? domain ?? null,\n priority: priority == null ? null : Math.max(0, Math.min(3, Math.round(priority))),\n }));\n\nexport const featureSchema = z.object({\n features: z.array(featureItemSchema).default([]),\n});\nexport type FeatureGraph = z.infer<typeof featureSchema>;\n\nexport async function clearFeatureDraft(prisma: Prisma = db) {\n await prisma.delete(node).where(and(eq(node.source, \"DRAFT\"), eq(node.view, \"ROADMAP\")));\n}\n\nexport async function persistFeatureDraft(graph: FeatureGraph, prisma: Prisma = db) {\n const g = featureSchema.parse(graph);\n await clearFeatureDraft(prisma);\n\n // Place the proposal below any existing roadmap cards so it doesn't overlap them.\n const top = await prisma.query.node.findFirst({\n where: (t, { eq }) => eq(t.view, \"ROADMAP\"),\n orderBy: (t, { desc }) => desc(t.y),\n });\n const baseY = (top?.y ?? 0) + 200;\n\n // Lay the draft out as an organic 2D graph (d3-force) so dependency-linked features cluster and\n // independent ones spread across the width — instead of a blind horizontal row. dependsOn titles\n // become edges; the layout keys off titles since the node ids don't exist yet.\n const titleSet = new Set(g.features.map((f) => f.title.trim()));\n const layoutNodes = g.features.map((f) => ({ id: f.title.trim() }));\n const layoutEdges = g.features.flatMap((f) =>\n (f.dependsOn ?? [])\n .map((d) => d.trim())\n .filter((d) => titleSet.has(d) && d !== f.title.trim())\n .map((d) => ({ fromId: f.title.trim(), toId: d })),\n );\n const pos = forceLayoutRoadmap(layoutNodes, layoutEdges);\n\n const idByTitle = new Map<string, string>();\n for (const f of g.features) {\n const p = pos.get(f.title.trim()) ?? { x: 0, y: 0 };\n const [created] = await prisma\n .insert(node)\n .values({\n view: \"ROADMAP\",\n source: \"DRAFT\",\n status: \"PENDING\",\n title: f.title,\n role: f.role ?? null,\n plain: f.plain ?? null,\n cluster: f.cluster ?? null,\n priority: f.priority ?? 2,\n x: p.x,\n y: p.y + baseY,\n })\n .returning();\n idByTitle.set(f.title.trim(), created.id);\n }\n\n // Auto-connect: turn each feature's `dependsOn` titles into DEPENDS edges so the proposal\n // renders as a connected dependency chain on /plan and /map instead of loose cards. Skip\n // unresolved titles + self-references; idempotent on the unique [fromId,toId,kind]. These\n // edges cascade-delete with the draft nodes on the next clearFeatureDraft, so re-proposing\n // is clean with no orphan edges.\n for (const f of g.features) {\n const fromId = idByTitle.get(f.title.trim());\n if (!fromId || !f.dependsOn) continue;\n for (const depTitle of f.dependsOn) {\n const toId = idByTitle.get(depTitle.trim());\n if (!toId || toId === fromId) continue;\n const exists = await prisma.query.edge.findFirst({\n where: (t, { and, eq }) =>\n and(eq(t.fromId, fromId), eq(t.toId, toId), eq(t.kind, \"DEPENDS\")),\n });\n if (!exists) await prisma.insert(edge).values({ fromId, toId, kind: \"DEPENDS\" });\n }\n }\n}\n\nexport async function getFeatureDraft(prisma: Prisma = db): Promise<FeatureGraph> {\n const nodes = await prisma.query.node.findMany({\n where: (t, { and, eq }) => and(eq(t.source, \"DRAFT\"), eq(t.view, \"ROADMAP\")),\n orderBy: (t, { asc }) => asc(t.createdAt),\n });\n // Reconstruct each feature's dependsOn (by title) from the DEPENDS edges among the draft\n // nodes, so a re-read / re-propose round-trips the dependency chain.\n const ids = nodes.map((n) => n.id);\n const edges = ids.length\n ? await prisma.query.edge.findMany({\n where: (t, { and, eq }) =>\n and(eq(t.kind, \"DEPENDS\"), inArray(t.fromId, ids), inArray(t.toId, ids)),\n })\n : [];\n const titleById = new Map(nodes.map((n) => [n.id, n.title]));\n const depsByFrom = new Map<string, string[]>();\n for (const e of edges) {\n const toTitle = titleById.get(e.toId);\n if (!toTitle) continue;\n const arr = depsByFrom.get(e.fromId) ?? [];\n arr.push(toTitle);\n depsByFrom.set(e.fromId, arr);\n }\n return {\n features: nodes.map((n) => ({\n title: n.title,\n role: n.role,\n plain: n.plain,\n cluster: n.cluster,\n priority: n.priority,\n dependsOn: depsByFrom.get(n.id),\n })),\n };\n}\n","import type { DraftDoc } from \"@/components/graph/db-types\";\nimport type { FeatureGraph } from \"@/lib/feature-design\";\n\n// Synthesizes the current proposal (DB draft + feature draft) into the markdown file\n// plannotator opens for annotation. Each frente / tabela / endpoint gets its own ###\n// heading so plannotator can scope the user's section-level Approve/Reject/Comment.\n\nexport function synthesizePlanMarkdown(\n description: string,\n dbDraft: DraftDoc | null,\n featureDraft: FeatureGraph | null,\n): string {\n const lines: string[] = [`# Plan: ${description}`, \"\"];\n\n const features = featureDraft?.features ?? [];\n if (features.length) {\n lines.push(\"## Features\", \"\");\n for (const f of features) {\n lines.push(`### ${f.title}`);\n if (f.cluster) lines.push(`*Domain:* \\`${f.cluster}\\``);\n if (f.role) lines.push(`*Role:* ${f.role}`);\n if (f.plain) lines.push(\"\", f.plain);\n lines.push(\"\");\n }\n }\n\n const tables = dbDraft?.tables ?? [];\n if (tables.length) {\n lines.push(\"## Database — Tables\", \"\");\n for (const t of tables) {\n lines.push(`### Table \\`${t.name}\\``);\n if (t.domain) lines.push(`*Domain:* \\`${t.domain}\\``);\n if (t.description) lines.push(\"\", t.description, \"\");\n for (const c of t.columns) {\n const flags = [c.isPk && \"PK\", c.isFk && \"FK\", c.nullable ? \"NULL\" : \"NOT NULL\"]\n .filter(Boolean)\n .join(\" \");\n lines.push(`- \\`${c.name}\\` ${c.type}${flags ? ` *${flags}*` : \"\"}${c.note ? ` — ${c.note}` : \"\"}`);\n }\n lines.push(\"\");\n }\n }\n\n const relations = dbDraft?.relations ?? [];\n if (relations.length) {\n const nameById = new Map(tables.map((t) => [t.id, t.name]));\n lines.push(\"## Database — Relations (FKs)\", \"\");\n for (const r of relations) {\n const from = nameById.get(r.fromTableId) ?? r.fromTableId;\n const to = nameById.get(r.toTableId) ?? r.toTableId;\n lines.push(`- \\`${from}.${r.fromColumn}\\` → \\`${to}.${r.toColumn}\\``);\n }\n lines.push(\"\");\n }\n\n const endpoints = dbDraft?.endpoints ?? [];\n if (endpoints.length) {\n const nameById = new Map(tables.map((t) => [t.id, t.name]));\n lines.push(\"## Endpoints\", \"\");\n for (const e of endpoints) {\n lines.push(`### ${e.method} ${e.path}`);\n if (e.domain) lines.push(`*Domain:* \\`${e.domain}\\``);\n if (e.description) lines.push(\"\", e.description);\n if (e.links.length) {\n const uses = e.links\n .map((l) => `\\`${nameById.get(l.tableId) ?? l.tableId}\\` (${l.access})`)\n .join(\", \");\n lines.push(\"\", `Touches: ${uses}`);\n }\n lines.push(\"\");\n }\n }\n\n return lines.join(\"\\n\");\n}\n","import { z } from \"zod\";\nimport { accessForMethod } from \"@/lib/access\";\n\n// The name-keyed proposal shape the terminal session pushes via `beacon_propose_plan`.\n// It's positioned + given ids by lib/draft-store (graphToDoc) into a DraftDoc, which is\n// what the /db canvas actually edits. Endpoints may declare which tables they touch via\n// `uses` so the canvas can draw the links.\n\n// A single column. The agent sometimes lists columns as bare strings (\"id\", \"name uuid\") instead\n// of objects — coerce \"<name> [type…]\" into a column up front (preprocess) so the OUTPUT is always\n// the full column shape and the table still renders instead of the whole block being dropped.\nexport const columnSchema = z.preprocess(\n (c) => {\n if (typeof c === \"string\") {\n const [name, ...rest] = c.trim().split(/\\s+/);\n return { name, type: rest.join(\" \") || \"text\" };\n }\n return c;\n },\n z.object({\n name: z.string().trim().min(1),\n type: z.string().trim().min(1),\n isPk: z.boolean().optional(),\n isFk: z.boolean().optional(),\n nullable: z.boolean().optional(),\n note: z.string().nullish(),\n }),\n);\n\nexport const tableSchema = z.object({\n name: z.string().trim().min(1),\n domain: z.string().nullish(),\n description: z.string().nullish(),\n columns: z.array(columnSchema).default([]),\n});\n\nexport const relationSchema = z.object({\n fromTable: z.string(),\n fromColumn: z.string(),\n toTable: z.string(),\n toColumn: z.string(),\n label: z.string().nullish(),\n});\n\nexport const endpointSchema = z\n .object({\n method: z.string().trim().min(1),\n path: z.string().trim().min(1),\n domain: z.string().nullish(),\n description: z.string().nullish(),\n uses: z\n .array(\n z.object({\n table: z.string().trim().min(1),\n access: z.string().optional(),\n }),\n )\n .default([]),\n })\n // Unspecified access defaults to the verb's intent (PATCH/DELETE write, GET reads).\n .transform((e) => ({\n ...e,\n uses: e.uses.map((u) => ({ ...u, access: u.access ?? accessForMethod(e.method) })),\n }));\n\nexport const draftSchema = z.object({\n tables: z.array(tableSchema).default([]),\n relations: z.array(relationSchema).default([]),\n endpoints: z.array(endpointSchema).default([]),\n});\nexport type DraftGraph = z.infer<typeof draftSchema>;\n","import { z } from \"zod\";\nimport {\n endpointSchema,\n relationSchema,\n tableSchema,\n type DraftGraph,\n} from \"@/lib/design\";\nimport { featureItemSchema, type FeatureGraph } from \"@/lib/feature-design\";\n\n// Deterministic (NO AI) extraction of a structured ```beacon block embedded in a plan-mode\n// markdown plan. The ExitPlanMode hook event carries only markdown — there is no structured\n// channel out of plan mode (MCP sampling is unsupported + deprecated) — so the agent embeds\n// one fenced ```beacon block of JSON ({ tables, relations, endpoints, features }) in the plan\n// it already writes. We parse + validate it with the SAME Zod schemas beacon_propose_plan\n// uses, then STRIP the block from the prose so the JSON is never shown in the annotation\n// panel. Any failure degrades to { prose: markdown } — a malformed block must never block the\n// plan from reaching the user.\n\nexport interface ExtractedPlan {\n prose: string;\n draft?: DraftGraph;\n features?: FeatureGraph[\"features\"];\n}\n\n// Strong, low-false-positive signals that a plan TOUCHES THE DATABASE — used to enforce that a\n// plan describing schema also SHIPS it structurally (in `tables`), not just in prose. Curated\n// to fire on real schema language (migrations, constraints, model files, column types) and NOT\n// on generic words like \"model\"/\"data\"/\"column\" alone.\nconst DB_SCHEMA_SIGNAL =\n /(\\bmigrations?\\b|\\balembic\\b|make revision|prisma migrate|unique\\s?constraint|foreign\\s?keys?|primary\\s?keys?|\\bFKs?\\b|\\bJSONB\\b|create\\s+table|alter\\s+table|add\\s+(a\\s+)?column|new\\s+(table|model|column)|app\\/models\\/|\\bBaseModel\\b|DeclarativeBase|schema\\.prisma|@@unique|natural\\s+keys?|\\bpgvector\\b|\\bTSVECTOR\\b|\\bDbTable\\b)/i;\n\n/** True when `text` clearly describes database schema (tables/models/migrations/columns). */\nexport function mentionsDbSchema(text: string | null | undefined): boolean {\n return !!text && DB_SCHEMA_SIGNAL.test(text);\n}\n\n// A fenced ```beacon … ``` block. The opening fence may carry trailing whitespace; the\n// closing fence is a line that is just ```. Only the first block is used. Case-insensitive\n// on the label, multiline body (non-greedy).\nconst BEACON_FENCE = /^[ \\t]*```beacon[ \\t]*\\r?\\n([\\s\\S]*?)\\r?\\n[ \\t]*```[ \\t]*$/im;\n\n// Parse an array PER-ITEM, keeping only the items that validate. One malformed table/relation/\n// feature must not nuke the whole block — that used to drop the ENTIRE board to raw prose when\n// the agent got a single field slightly wrong (a string column, an off-scale priority, a\n// relation in a different shape). Non-arrays → [].\nfunction parseEach<T>(value: unknown, schema: z.ZodType<T>): T[] {\n if (!Array.isArray(value)) return [];\n const out: T[] = [];\n for (const item of value) {\n const r = schema.safeParse(item);\n if (r.success) out.push(r.data);\n }\n return out;\n}\n\nexport function extractBeaconBlock(markdown: string): ExtractedPlan {\n const match = markdown.match(BEACON_FENCE);\n if (!match) return { prose: markdown };\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(match[1]);\n } catch {\n return { prose: markdown };\n }\n const obj = (parsed && typeof parsed === \"object\" ? parsed : {}) as Record<string, unknown>;\n\n // Each section is parsed independently and per-item, so a bad relation can't drop good tables,\n // and a bad table can't drop good features — the board renders everything Beacon understood.\n const tables = parseEach(obj.tables, tableSchema);\n const relations = parseEach(obj.relations, relationSchema);\n const endpoints = parseEach(obj.endpoints, endpointSchema);\n const features = parseEach(obj.features, featureItemSchema);\n\n const draft: DraftGraph | undefined =\n tables.length || endpoints.length || relations.length\n ? { tables, relations, endpoints }\n : undefined;\n const featureList: FeatureGraph[\"features\"] | undefined = features.length ? features : undefined;\n\n // Nothing usable — leave the prose untouched (and visible) rather than silently dropping it.\n if (!draft && !featureList) return { prose: markdown };\n\n const prose = markdown\n .replace(BEACON_FENCE, \"\")\n .replace(/\\n{3,}/g, \"\\n\\n\")\n .trim();\n return { prose, draft, features: featureList };\n}\n","import { readFileSync, rmSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { dataDir } from \"@/lib/project\";\nimport { writeJsonAtomic } from \"@/lib/atomic-write\";\n\n// The single authoritative plan-level verdict. Every terminal action (approve / discard),\n// whether it came from /plan, the /db canvas, or a markdown hook plan with no DB at all,\n// writes this one file. It's what `resolvePlanVerdict` (lib/plan-resolve.ts) reads so the\n// MCP tool and the ExitPlanMode hook can no longer disagree about what the user decided.\n// Lives next to plan-meta.json in the workspace data dir; cleared on a fresh round.\n\nexport interface PlanVerdict {\n proposedAt: number;\n status: \"approved\" | \"discarded\";\n summary: string;\n // Full approved schema (the agent reads the user's edited columns from here). Only set\n // when the approved plan carried a DB draft.\n detail?: string;\n // Titles of the roadmap features this plan created. Echoed back on approval so the agent\n // knows EXACTLY which features to mark done (beacon_describe_feature) as it ships each one\n // — without this it tends to register only umbrella work and leaves the rest Pending.\n features?: string[];\n decidedAt: number;\n}\n\nfunction verdictPath(): string {\n return join(dataDir(), \"plan-verdict.json\");\n}\n\nexport function readPlanVerdict(): PlanVerdict | null {\n try {\n return JSON.parse(readFileSync(verdictPath(), \"utf8\")) as PlanVerdict;\n } catch {\n return null;\n }\n}\n\nexport function writePlanVerdict(v: PlanVerdict): void {\n writeJsonAtomic(verdictPath(), v);\n}\n\nexport function clearPlanVerdict(): void {\n rmSync(verdictPath(), { force: true });\n}\n","import { and, eq } from \"drizzle-orm\";\nimport { db } from \"@/lib/db-drizzle\";\nimport { node } from \"@/lib/drizzle/schema\";\nimport type { DraftDoc } from \"@/components/graph/db-types\";\nimport {\n approveDraft,\n clearDraftDoc,\n describeApprovedDoc,\n discardDraft,\n readDraftDoc,\n} from \"@/lib/draft-store\";\nimport { clearFeatureDraft, getFeatureDraft, type FeatureGraph } from \"@/lib/feature-design\";\nimport { archivePlan } from \"@/lib/plan-history\";\nimport { synthesizePlanMarkdown } from \"@/lib/plan-markdown\";\nimport { extractBeaconBlock } from \"@/lib/plan-block\";\nimport { clearPlanMeta, readPlanMeta } from \"@/lib/plan-meta\";\nimport { clearPlanVerdict, readPlanVerdict, writePlanVerdict } from \"@/lib/plan-verdict\";\nimport {\n clearStoredAnnotations,\n readAnnotationFeedback,\n readStoredAnnotations,\n} from \"@/lib/plan-annotations-store\";\nimport { bumpVersion } from \"@/lib/ingest\";\n\n// The unification core for the plan feedback loop. EVERY terminal action (approve / discard)\n// from EVERY entry point (/plan buttons, the /db canvas buttons) routes through approvePlan /\n// discardPlan here, so archiving, feature promotion, cleanup, and the authoritative\n// plan-verdict are identical regardless of which button was clicked. Both pollers (the MCP\n// tool and the ExitPlanMode hook) read resolvePlanVerdict, so they can never disagree.\n//\n// This module does NOT pin a workspace — callers (route handlers) wrap it in\n// runWithWorkspace so disk + db target the right repo.\n\ninterface PlanSnapshot {\n description: string;\n markdown: string;\n draftDoc: DraftDoc | null;\n featureGraph: FeatureGraph;\n annotations: unknown;\n globalComment: string;\n}\n\n// Read the plan exactly as it stands BEFORE any mutation, so history captures what was\n// proposed (mirrors the inline reads /api/plan/approve and /api/plan DELETE used to do).\nasync function snapshotPlan(): Promise<PlanSnapshot> {\n const meta = readPlanMeta();\n const draftDoc = readDraftDoc();\n const featureGraph = await getFeatureDraft();\n const stored = readStoredAnnotations();\n const description = meta?.description ?? \"(no description)\";\n // Strip any surviving ```beacon block so archived history never shows the machine-only JSON\n // (mirrors the /plan page's render-time guard; same canonical matcher).\n const markdown = meta?.markdown\n ? extractBeaconBlock(meta.markdown).prose\n : synthesizePlanMarkdown(description, draftDoc, featureGraph);\n return {\n description,\n markdown,\n draftDoc,\n featureGraph,\n annotations: stored.annotations,\n globalComment: stored.globalComment,\n };\n}\n\n// Wipe everything a resolved plan leaves behind EXCEPT the plan-verdict — that's the signal\n// the pollers are waiting on.\nasync function cleanupPlan(): Promise<void> {\n await clearFeatureDraft();\n clearDraftDoc();\n clearPlanMeta();\n clearStoredAnnotations();\n}\n\nexport async function approvePlan(opts?: { doc?: DraftDoc | null }): Promise<{\n db: { tables: number; relations: number; endpoints: number } | null;\n features: number;\n}> {\n const meta = readPlanMeta();\n const snap = await snapshotPlan();\n // The /db canvas sends the browser-edited doc; /plan approves the on-disk draft as-is.\n const doc = opts?.doc ?? snap.draftDoc;\n\n const dbCount = doc ? await approveDraft(doc) : null;\n const promoted = await db\n .update(node)\n .set({ source: \"MANUAL\" })\n .where(and(eq(node.source, \"DRAFT\"), eq(node.view, \"ROADMAP\")))\n .returning({ id: node.id });\n const featuresApproved = { count: promoted.length };\n\n archivePlan({\n description: snap.description,\n markdown: snap.markdown,\n verdict: \"approved\",\n annotations: snap.annotations,\n globalComment: snap.globalComment,\n draftDoc: snap.draftDoc,\n featureGraph: snap.featureGraph,\n });\n\n const parts: string[] = [];\n if (dbCount)\n parts.push(\n `${dbCount.tables} table(s), ${dbCount.relations} relation(s) and ${dbCount.endpoints} endpoint(s)`,\n );\n if (featuresApproved.count) parts.push(`${featuresApproved.count} feature(s)`);\n const summary = parts.length ? `${parts.join(\" and \")} approved and persisted.` : \"Plan approved.\";\n\n writePlanVerdict({\n proposedAt: meta?.proposedAt ?? 0,\n status: \"approved\",\n summary,\n detail: doc ? describeApprovedDoc(doc) : undefined,\n // The exact titles the agent must mark done as it ships each feature.\n features: snap.featureGraph.features.map((f) => f.title),\n decidedAt: Date.now(),\n });\n\n await cleanupPlan();\n await bumpVersion();\n return { db: dbCount, features: featuresApproved.count };\n}\n\nexport async function discardPlan(): Promise<void> {\n const meta = readPlanMeta();\n const snap = await snapshotPlan();\n const hasContent =\n (snap.draftDoc && (snap.draftDoc.tables.length || snap.draftDoc.endpoints.length)) ||\n snap.featureGraph.features.length > 0 ||\n !!meta?.markdown;\n if (hasContent) {\n archivePlan({\n description: snap.description,\n markdown: snap.markdown,\n verdict: \"discarded\",\n annotations: snap.annotations,\n globalComment: snap.globalComment,\n draftDoc: snap.draftDoc,\n featureGraph: snap.featureGraph,\n });\n }\n writePlanVerdict({\n proposedAt: meta?.proposedAt ?? 0,\n status: \"discarded\",\n summary: \"The user discarded the plan.\",\n decidedAt: Date.now(),\n });\n // Also record the DB-level draft verdict so the /db-local draftState() loop stays coherent.\n discardDraft();\n await cleanupPlan();\n await bumpVersion();\n}\n\nexport type PlanVerdictResolution =\n | { kind: \"pending\" }\n | { kind: \"feedback\"; feedback: string }\n | { kind: \"approved\"; summary: string; detail?: string; features?: string[] }\n | { kind: \"discarded\"; summary: string };\n\n// The single verdict both pollers read. Precedence:\n// 1. Submitted, non-empty feedback (closes the iterate loop) —\n// 2. an explicit plan-verdict (approve/discard) —\n// 3. otherwise derived from whether a plan is still pending.\nexport async function resolvePlanVerdict(): Promise<PlanVerdictResolution> {\n const annot = readAnnotationFeedback();\n if (annot.submitted && annot.feedback) return { kind: \"feedback\", feedback: annot.feedback };\n\n const v = readPlanVerdict();\n if (v) {\n return v.status === \"approved\"\n ? { kind: \"approved\", summary: v.summary, detail: v.detail, features: v.features }\n : { kind: \"discarded\", summary: v.summary };\n }\n\n const meta = readPlanMeta();\n const draft = readDraftDoc();\n const features = await getFeatureDraft();\n const pending =\n (draft?.tables.length ?? 0) + (draft?.endpoints.length ?? 0) + features.features.length > 0 ||\n !!meta?.markdown;\n return pending\n ? { kind: \"pending\" }\n : { kind: \"discarded\", summary: \"The user discarded the plan.\" };\n}\n\n// Clear the verdict + annotation state for a fresh round. Used by POST /api/plan.\nexport function resetPlanRound(): void {\n clearStoredAnnotations();\n clearPlanVerdict();\n}\n"],"names":["dir","d","recursive","archivePlan","p","archived","id","slice","archivedAt","Date","now","listHistory","entries","items","name","endsWith","raw","parsed","JSON","parse","push","sort","a","b","readArchivedPlan","archivedMtime","mtimeMs","featureItemSchema","object","title","string","trim","min","role","nullish","plain","cluster","category","domain","priority","number","dependsOn","array","transform","f","Math","max","round","featureSchema","features","default","clearFeatureDraft","prisma","delete","where","source","view","persistFeatureDraft","graph","g","top","query","node","findFirst","t","eq","orderBy","desc","y","baseY","titleSet","Set","map","layoutNodes","layoutEdges","flatMap","filter","has","fromId","toId","pos","idByTitle","Map","get","x","created","insert","values","status","returning","set","depTitle","exists","edge","and","kind","getFeatureDraft","nodes","findMany","asc","createdAt","ids","n","edges","length","titleById","depsByFrom","e","toTitle","arr","synthesizePlanMarkdown","description","dbDraft","featureDraft","lines","tables","c","columns","flags","isPk","isFk","nullable","Boolean","join","type","note","relations","nameById","r","from","fromTableId","to","toTableId","fromColumn","toColumn","endpoints","method","path","links","uses","l","tableId","access","columnSchema","preprocess","rest","split","boolean","optional","tableSchema","relationSchema","fromTable","toTable","label","endpointSchema","table","u","draftSchema","DB_SCHEMA_SIGNAL","mentionsDbSchema","text","test","BEACON_FENCE","parseEach","value","schema","Array","isArray","out","item","safeParse","success","data","extractBeaconBlock","markdown","match","prose","obj","draft","undefined","featureList","replace","verdictPath","readPlanVerdict","writePlanVerdict","v","clearPlanVerdict","force","snapshotPlan","meta","draftDoc","featureGraph","stored","annotations","globalComment","cleanupPlan","approvePlan","opts","snap","doc","dbCount","promoted","update","featuresApproved","count","verdict","parts","summary","proposedAt","detail","decidedAt","db","discardPlan","hasContent","resolvePlanVerdict","annot","submitted","feedback","pending","resetPlanRound"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[81579,a=>a.a(async(t,c)=>{try{var e=a.i(91426),i=t([e]);[e]=i.then?(await i)():i,a.s([]),c()}catch(a){c(a)}},!1),62294,a=>a.a(async(t,c)=>{try{var e=a.i(81579),i=a.i(91426);a.i(14859);var r=t([e,i]);[e,i]=r.then?(await r)():r,a.s(["db",()=>i.db]),c()}catch(a){c(a)}},!1)];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=lib_db_ts_0h_yn5m._.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../lib/db.ts"],"sourcesContent":["// Beacon's data client is now Drizzle over Bun's native SQLite (see lib/db-drizzle.ts). This module\n// stays as the stable import path — `import { db } from \"@/lib/db\"` keeps working everywhere — by\n// re-exporting the Drizzle client and its per-workspace helpers. The old Prisma `Db` type name is\n// aliased to the Drizzle `DB` for back-compat.\nexport { db, defaultDb, getDb, invalidateDb, runWithWorkspace, type DB } from \"@/lib/db-drizzle\";\nexport type { DB as Db } from \"@/lib/db-drizzle\";\n"],"names":[],"mappings":"8CAIA,IAAA,EAAA,EAAA,CAAA,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[34700,e=>{"use strict";let t;var n,r=e.i(75799),i=e.i(46683),o=e.i(61328),l=e.i(80568),a=e.i(37540),s=e.i(24325),u=e.i(1440);let f=BigInt(0x100000000-1),d=BigInt(32);function c(e,t=""){if("number"!=typeof e){let n=t&&`"${t}" `;throw TypeError(`${n}expected number, got ${typeof e}`)}if(!Number.isSafeInteger(e)||e<0){let n=t&&`"${t}" `;throw RangeError(`${n}expected integer >= 0, got ${e}`)}}function h(e,t,n=""){let r=e instanceof Uint8Array||ArrayBuffer.isView(e)&&"Uint8Array"===e.constructor.name&&"BYTES_PER_ELEMENT"in e&&1===e.BYTES_PER_ELEMENT,i=e?.length,o=void 0!==t;if(!r||o&&i!==t){let l=(n&&`"${n}" `)+"expected Uint8Array"+(o?` of length ${t}`:"")+", got "+(r?`length=${i}`:`type=${typeof e}`);if(!r)throw TypeError(l);throw RangeError(l)}return e}function p(e,t=!0){if(e.destroyed)throw Error("Hash instance has been destroyed");if(t&&e.finished)throw Error("Hash#digest() has already been called")}function g(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}let m=68===new Uint8Array(new Uint32Array([0x11223344]).buffer)[0]?e=>e:function(e){for(let n=0;n<e.length;n++){var t;e[n]=(t=e[n])<<24&0xff000000|t<<8&0xff0000|t>>>8&65280|t>>>24&255}return e},x=BigInt(0),b=BigInt(1),N=BigInt(2),y=BigInt(7),w=BigInt(256),_=BigInt(113),I=[],E=[],D=[];for(let e=0,t=b,n=1,r=0;e<24;e++){[n,r]=[r,(2*n+3*r)%5],I.push(2*(5*r+n)),E.push((e+1)*(e+2)/2%64);let i=x;for(let e=0;e<7;e++)(t=(t<<b^(t>>y)*_)%w)&N&&(i^=b<<(b<<BigInt(e))-b);D.push(i)}let A=function(e,t=!1){let n=e.length,r=new Uint32Array(n),i=new Uint32Array(n);for(let o=0;o<n;o++){let{h:n,l}=function(e,t=!1){return t?{h:Number(e&f),l:Number(e>>d&f)}:{h:0|Number(e>>d&f),l:0|Number(e&f)}}(e[o],t);[r[o],i[o]]=[n,l]}return[r,i]}(D,!0),T=A[0],O=A[1],v=(e,t,n)=>n>32?t<<n-32|e>>>64-n:e<<n|t>>>32-n,F=(e,t,n)=>n>32?e<<n-32|t>>>64-n:t<<n|e>>>32-n;class U{state;pos=0;posOut=0;finished=!1;state32;destroyed=!1;blockLen;suffix;outputLen;canXOF;enableXOF=!1;rounds;constructor(e,t,n,r=!1,i=24){if(this.blockLen=e,this.suffix=t,this.outputLen=n,this.enableXOF=r,this.canXOF=r,this.rounds=i,c(n,"outputLen"),!(0<e&&e<200))throw Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=function(e){return new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4))}(this.state)}clone(){return this._cloneInto()}keccak(){m(this.state32),function(e,t=24){if(c(t,"rounds"),t<1||t>24)throw Error('"rounds" expected integer 1..24');let n=new Uint32Array(10);for(let r=24-t;r<24;r++){for(let t=0;t<10;t++)n[t]=e[t]^e[t+10]^e[t+20]^e[t+30]^e[t+40];for(let t=0;t<10;t+=2){let r=(t+8)%10,i=(t+2)%10,o=n[i],l=n[i+1],a=v(o,l,1)^n[r],s=F(o,l,1)^n[r+1];for(let n=0;n<50;n+=10)e[t+n]^=a,e[t+n+1]^=s}let t=e[2],i=e[3];for(let n=0;n<24;n++){let r=E[n],o=v(t,i,r),l=F(t,i,r),a=I[n];t=e[a],i=e[a+1],e[a]=o,e[a+1]=l}for(let t=0;t<50;t+=10){let n=e[t],r=e[t+1],i=e[t+2],o=e[t+3];e[t]^=~e[t+2]&e[t+4],e[t+1]^=~e[t+3]&e[t+5],e[t+2]^=~e[t+4]&e[t+6],e[t+3]^=~e[t+5]&e[t+7],e[t+4]^=~e[t+6]&e[t+8],e[t+5]^=~e[t+7]&e[t+9],e[t+6]^=~e[t+8]&n,e[t+7]^=~e[t+9]&r,e[t+8]^=~n&i,e[t+9]^=~r&o}e[0]^=T[r],e[1]^=O[r]}g(n)}(this.state32,this.rounds),m(this.state32),this.posOut=0,this.pos=0}update(e){p(this),h(e);let{blockLen:t,state:n}=this,r=e.length;for(let i=0;i<r;){let o=Math.min(t-this.pos,r-i);for(let t=0;t<o;t++)n[this.pos++]^=e[i++];this.pos===t&&this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;let{state:e,suffix:t,pos:n,blockLen:r}=this;e[n]^=t,(128&t)!=0&&n===r-1&&this.keccak(),e[r-1]^=128,this.keccak()}writeInto(e){p(this,!1),h(e),this.finish();let t=this.state,{blockLen:n}=this;for(let r=0,i=e.length;r<i;){this.posOut>=n&&this.keccak();let o=Math.min(n-this.posOut,i-r);e.set(t.subarray(this.posOut,this.posOut+o),r),this.posOut+=o,r+=o}return e}xofInto(e){if(!this.enableXOF)throw Error("XOF is not possible for this instance");return this.writeInto(e)}xof(e){return c(e),this.xofInto(new Uint8Array(e))}digestInto(e){h(e,void 0,"digestInto() output");let t=this.outputLen;if(e.length<t)throw RangeError('"digestInto() output" expected to be of length >='+t);if(this.finished)throw Error("digest() was already called");this.writeInto(e.subarray(0,this.outputLen)),this.destroy()}digest(){let e=new Uint8Array(this.outputLen);return this.digestInto(e),e}destroy(){this.destroyed=!0,g(this.state)}_cloneInto(e){let{blockLen:t,suffix:n,outputLen:r,rounds:i,enableXOF:o}=this;return(e||=new U(t,n,r,o,i)).blockLen=t,e.state32.set(this.state32),e.pos=this.pos,e.posOut=this.posOut,e.finished=this.finished,e.rounds=i,e.suffix=n,e.outputLen=r,e.enableXOF=o,e.canXOF=this.canXOF,e.destroyed=this.destroyed,e}}let $=((e,t,n,r={})=>(function(e,t={}){let n=(t,n)=>e(n).update(t).digest(),r=e(void 0);return n.outputLen=r.outputLen,n.blockLen=r.blockLen,n.canXOF=r.canXOF,n.create=t=>e(t),Object.assign(n,t),Object.freeze(n)})(()=>new U(t,e,n),r))(6,72,64,{oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,10])});var k=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,S=Math.ceil,L=Math.floor,P="[BigNumber Error] ",R=P+"Number primitive has more than 15 significant digits: ",B=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13];function C(e){var t=0|e;return e>0||e===t?t:t-1}function q(e){for(var t,n,r=1,i=e.length,o=e[0]+"";r<i;){for(n=14-(t=e[r++]+"").length;n--;t="0"+t);o+=t}for(i=o.length;48===o.charCodeAt(--i););return o.slice(0,i+1||1)}function M(e,t){var n,r,i=e.c,o=t.c,l=e.s,a=t.s,s=e.e,u=t.e;if(!l||!a)return null;if(n=i&&!i[0],r=o&&!o[0],n||r)return n?r?0:-a:l;if(l!=a)return l;if(n=l<0,r=s==u,!i||!o)return r?0:!i^n?1:-1;if(!r)return s>u^n?1:-1;for(l=0,a=(s=i.length)<(u=o.length)?s:u;l<a;l++)if(i[l]!=o[l])return i[l]>o[l]^n?1:-1;return s==u?0:s>u^n?1:-1}function K(e,t,n,r){if(e<t||e>n||e!==L(e))throw Error(P+(r||"Argument")+("number"==typeof e?e<t||e>n?" out of range: ":" not an integer: ":" not a primitive number: ")+String(e))}function G(e){var t=e.c.length-1;return C(e.e/14)==t&&e.c[t]%2!=0}function j(e,t){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(t<0?"e":"e+")+t}function X(e,t,n){var r,i;if(t<0){for(i=n+".";++t;i+=n);e=i+e}else if(r=e.length,++t>r){for(i=n,t-=r;--t;i+=n);e+=i}else t<r&&(e=e.slice(0,t)+"."+e.slice(t));return e}var H=function e(t){var n,r,i,o,l,a,s,u,f,d=D.prototype={constructor:D,toString:null,valueOf:null},c=new D(1),h=20,p=4,g=-7,m=21,x=-1e7,b=1e7,N=!1,y=1,w=0,_={prefix:"",groupSize:3,secondaryGroupSize:0,groupSeparator:",",decimalSeparator:".",fractionGroupSize:0,fractionGroupSeparator:" ",suffix:""},I="0123456789abcdefghijklmnopqrstuvwxyz",E=!0;function D(e,t){var n,r,i,o,l,a,s,d,c=this;if(!(c instanceof D))return new D(e,t);if(null==t){if(e&&!0===e._isBigNumber){c.s=e.s,!e.c||e.e>b?c.c=c.e=null:e.e<x?c.c=[c.e=0]:(c.e=e.e,c.c=e.c.slice());return}if((a="number"==typeof e)&&0*e==0){if(c.s=1/e<0?(e=-e,-1):1,e===~~e){for(o=0,l=e;l>=10;l/=10,o++);o>b?c.c=c.e=null:(c.e=o,c.c=[e]);return}d=String(e)}else{if(!k.test(d=String(e)))return f(c,d,a);c.s=45==d.charCodeAt(0)?(d=d.slice(1),-1):1}(o=d.indexOf("."))>-1&&(d=d.replace(".","")),(l=d.search(/e/i))>0?(o<0&&(o=l),o+=+d.slice(l+1),d=d.substring(0,l)):o<0&&(o=d.length)}else{if(K(t,2,I.length,"Base"),10==t&&E)return v(c=new D(e),h+c.e+1,p);if(d=String(e),a="number"==typeof e){if(0*e!=0)return f(c,d,a,t);if(c.s=1/e<0?(d=d.slice(1),-1):1,D.DEBUG&&d.replace(/^0\.0*|\./,"").length>15)throw Error(R+e)}else c.s=45===d.charCodeAt(0)?(d=d.slice(1),-1):1;for(n=I.slice(0,t),o=l=0,s=d.length;l<s;l++)if(0>n.indexOf(r=d.charAt(l))){if("."==r){if(l>o){o=s;continue}}else if(!i&&(d==d.toUpperCase()&&(d=d.toLowerCase())||d==d.toLowerCase()&&(d=d.toUpperCase()))){i=!0,l=-1,o=0;continue}return f(c,String(e),a,t)}a=!1,(o=(d=u(d,t,10,c.s)).indexOf("."))>-1?d=d.replace(".",""):o=d.length}for(l=0;48===d.charCodeAt(l);l++);for(s=d.length;48===d.charCodeAt(--s););if(d=d.slice(l,++s)){if(s-=l,a&&D.DEBUG&&s>15&&(e>0x1fffffffffffff||e!==L(e)))throw Error(R+c.s*e);if((o=o-l-1)>b)c.c=c.e=null;else if(o<x)c.c=[c.e=0];else{if(c.e=o,c.c=[],l=(o+1)%14,o<0&&(l+=14),l<s){for(l&&c.c.push(+d.slice(0,l)),s-=14;l<s;)c.c.push(+d.slice(l,l+=14));l=14-(d=d.slice(l)).length}else l-=s;for(;l--;d+="0");c.c.push(+d)}}else c.c=[c.e=0]}function A(e,t,n,r){var i,o,l,a,s;if(null==n?n=p:K(n,0,8),!e.c)return e.toString();if(i=e.c[0],l=e.e,null==t)s=q(e.c),s=1==r||2==r&&(l<=g||l>=m)?j(s,l):X(s,l,"0");else if(o=(e=v(new D(e),t,n)).e,a=(s=q(e.c)).length,1==r||2==r&&(t<=o||o<=g)){for(;a<t;s+="0",a++);s=j(s,o)}else if(t-=l+(2===r&&o>l),s=X(s,o,"0"),o+1>a){if(--t>0)for(s+=".";t--;s+="0");}else if((t+=o-a)>0)for(o+1==a&&(s+=".");t--;s+="0");return e.s<0&&i?"-"+s:s}function T(e,t){for(var n,r,i=1,o=new D(e[0]);i<e.length;i++)(r=new D(e[i])).s&&(n=M(o,r))!==t&&(0!==n||o.s!==t)||(o=r);return o}function O(e,t,n){for(var r=1,i=t.length;!t[--i];t.pop());for(i=t[0];i>=10;i/=10,r++);return(n=r+14*n-1)>b?e.c=e.e=null:n<x?e.c=[e.e=0]:(e.e=n,e.c=t),e}function v(e,t,n,r){var i,o,l,a,s,u,f,d=e.c;if(d){e:{for(i=1,a=d[0];a>=10;a/=10,i++);if((o=t-i)<0)o+=14,l=t,f=L((s=d[u=0])/B[i-l-1]%10);else if((u=S((o+1)/14))>=d.length)if(r){for(;d.length<=u;d.push(0));s=f=0,i=1,o%=14,l=o-14+1}else break e;else{for(i=1,s=a=d[u];a>=10;a/=10,i++);o%=14,f=(l=o-14+i)<0?0:L(s/B[i-l-1]%10)}if(r=r||t<0||null!=d[u+1]||(l<0?s:s%B[i-l-1]),r=n<4?(f||r)&&(0==n||n==(e.s<0?3:2)):f>5||5==f&&(4==n||r||6==n&&(o>0?l>0?s/B[i-l]:0:d[u-1])%10&1||n==(e.s<0?8:7)),t<1||!d[0])return d.length=0,r?(t-=e.e+1,d[0]=B[(14-t%14)%14],e.e=-t||0):d[0]=e.e=0,e;if(0==o?(d.length=u,a=1,u--):(d.length=u+1,a=B[14-o],d[u]=l>0?L(s/B[i-l]%B[l])*a:0),r)for(;;)if(0==u){for(o=1,l=d[0];l>=10;l/=10,o++);for(l=d[0]+=a,a=1;l>=10;l/=10,a++);o!=a&&(e.e++,1e14==d[0]&&(d[0]=1));break}else{if(d[u]+=a,1e14!=d[u])break;d[u--]=0,a=1}for(o=d.length;0===d[--o];d.pop());}e.e>b?e.c=e.e=null:e.e<x&&(e.c=[e.e=0])}return e}function F(e){var t,n=e.e;return null===n?e.toString():(t=q(e.c),t=n<=g||n>=m?j(t,n):X(t,n,"0"),e.s<0?"-"+t:t)}return D.clone=e,D.ROUND_UP=0,D.ROUND_DOWN=1,D.ROUND_CEIL=2,D.ROUND_FLOOR=3,D.ROUND_HALF_UP=4,D.ROUND_HALF_DOWN=5,D.ROUND_HALF_EVEN=6,D.ROUND_HALF_CEIL=7,D.ROUND_HALF_FLOOR=8,D.EUCLID=9,D.config=D.set=function(e){var t,n;if(null!=e)if("object"==typeof e){if(e.hasOwnProperty(t="DECIMAL_PLACES")&&(K(n=e[t],0,1e9,t),h=n),e.hasOwnProperty(t="ROUNDING_MODE")&&(K(n=e[t],0,8,t),p=n),e.hasOwnProperty(t="EXPONENTIAL_AT")&&((n=e[t])&&n.pop?(K(n[0],-1e9,0,t),K(n[1],0,1e9,t),g=n[0],m=n[1]):(K(n,-1e9,1e9,t),g=-(m=n<0?-n:n))),e.hasOwnProperty(t="RANGE"))if((n=e[t])&&n.pop)K(n[0],-1e9,-1,t),K(n[1],1,1e9,t),x=n[0],b=n[1];else if(K(n,-1e9,1e9,t),n)x=-(b=n<0?-n:n);else throw Error(P+t+" cannot be zero: "+n);if(e.hasOwnProperty(t="CRYPTO"))if(!!(n=e[t])===n)if(n)if("u">typeof crypto&&crypto&&(crypto.getRandomValues||crypto.randomBytes))N=n;else throw N=!n,Error(P+"crypto unavailable");else N=n;else throw Error(P+t+" not true or false: "+n);if(e.hasOwnProperty(t="MODULO_MODE")&&(K(n=e[t],0,9,t),y=n),e.hasOwnProperty(t="POW_PRECISION")&&(K(n=e[t],0,1e9,t),w=n),e.hasOwnProperty(t="FORMAT"))if("object"==typeof(n=e[t]))_=n;else throw Error(P+t+" not an object: "+n);if(e.hasOwnProperty(t="ALPHABET")){if("string"!=typeof(n=e[t])||/^.?$|[+\-.\s]|(.).*\1/.test(n))throw Error(P+t+" invalid: "+n);E="0123456789"==n.slice(0,10),I=n}}else throw Error(P+"Object expected: "+e);return{DECIMAL_PLACES:h,ROUNDING_MODE:p,EXPONENTIAL_AT:[g,m],RANGE:[x,b],CRYPTO:N,MODULO_MODE:y,POW_PRECISION:w,FORMAT:_,ALPHABET:I}},D.isBigNumber=function(e){if(!e||!0!==e._isBigNumber)return!1;if(!D.DEBUG)return!0;var t,n,r=e.c,i=e.e,o=e.s;e:if("[object Array]"==({}).toString.call(r)){if((1===o||-1===o)&&i>=-1e9&&i<=1e9&&i===L(i)){if(0===r[0]){if(0===i&&1===r.length)return!0;break e}if((t=(i+1)%14)<1&&(t+=14),String(r[0]).length==t){for(t=0;t<r.length;t++)if((n=r[t])<0||n>=1e14||n!==L(n))break e;if(0!==n)return!0}}}else if(null===r&&null===i&&(null===o||1===o||-1===o))return!0;throw Error(P+"Invalid BigNumber: "+e)},D.maximum=D.max=function(){return T(arguments,-1)},D.minimum=D.min=function(){return T(arguments,1)},n=0x20000000000000*Math.random()&2097151?function(){return L(0x20000000000000*Math.random())}:function(){return(0x40000000*Math.random()|0)*8388608+(8388608*Math.random()|0)},D.random=function(e){var t,r,i,o,l,a=0,s=[],u=new D(c);if(null==e?e=h:K(e,0,1e9),o=S(e/14),N)if(crypto.getRandomValues){for(t=crypto.getRandomValues(new Uint32Array(o*=2));a<o;)(l=131072*t[a]+(t[a+1]>>>11))>=9e15?(r=crypto.getRandomValues(new Uint32Array(2)),t[a]=r[0],t[a+1]=r[1]):(s.push(l%1e14),a+=2);a=o/2}else if(crypto.randomBytes){for(t=crypto.randomBytes(o*=7);a<o;)(l=(31&t[a])*0x1000000000000+0x10000000000*t[a+1]+0x100000000*t[a+2]+0x1000000*t[a+3]+(t[a+4]<<16)+(t[a+5]<<8)+t[a+6])>=9e15?crypto.randomBytes(7).copy(t,a):(s.push(l%1e14),a+=7);a=o/7}else throw N=!1,Error(P+"crypto unavailable");if(!N)for(;a<o;)(l=n())<9e15&&(s[a++]=l%1e14);for(o=s[--a],e%=14,o&&e&&(l=B[14-e],s[a]=L(o/l)*l);0===s[a];s.pop(),a--);if(a<0)s=[i=0];else{for(i=-1;0===s[0];s.splice(0,1),i-=14);for(a=1,l=s[0];l>=10;l/=10,a++);a<14&&(i-=14-a)}return u.e=i,u.c=s,u},D.sum=function(){for(var e=1,t=arguments,n=new D(t[0]);e<t.length;)n=n.plus(t[e++]);return n},u=function(){var e="0123456789";function t(e,t,n,r){for(var i,o,l=[0],a=0,s=e.length;a<s;){for(o=l.length;o--;l[o]*=t);for(l[0]+=r.indexOf(e.charAt(a++)),i=0;i<l.length;i++)l[i]>n-1&&(null==l[i+1]&&(l[i+1]=0),l[i+1]+=l[i]/n|0,l[i]%=n)}return l.reverse()}return function(n,r,i,o,l){var a,u,f,d,c,g,m,x,b=n.indexOf("."),N=h,y=p;for(b>=0&&(d=w,w=0,n=n.replace(".",""),g=(x=new D(r)).pow(n.length-b),w=d,x.c=t(X(q(g.c),g.e,"0"),10,i,e),x.e=x.c.length),f=d=(m=t(n,r,i,l?(a=I,e):(a=e,I))).length;0==m[--d];m.pop());if(!m[0])return a.charAt(0);if(b<0?--f:(g.c=m,g.e=f,g.s=o,m=(g=s(g,x,N,y,i)).c,c=g.r,f=g.e),b=m[u=f+N+1],d=i/2,c=c||u<0||null!=m[u+1],c=y<4?(null!=b||c)&&(0==y||y==(g.s<0?3:2)):b>d||b==d&&(4==y||c||6==y&&1&m[u-1]||y==(g.s<0?8:7)),u<1||!m[0])n=c?X(a.charAt(1),-N,a.charAt(0)):a.charAt(0);else{if(m.length=u,c)for(--i;++m[--u]>i;)m[u]=0,u||(++f,m=[1].concat(m));for(d=m.length;!m[--d];);for(b=0,n="";b<=d;n+=a.charAt(m[b++]));n=X(n,f,a.charAt(0))}return n}}(),s=function(){function e(e,t,n){var r,i,o,l,a=0,s=e.length,u=t%1e7,f=t/1e7|0;for(e=e.slice();s--;)r=f*(o=e[s]%1e7)+(l=e[s]/1e7|0)*u,a=((i=u*o+r%1e7*1e7+a)/n|0)+(r/1e7|0)+f*l,e[s]=i%n;return a&&(e=[a].concat(e)),e}function t(e,t,n,r){var i,o;if(n!=r)o=n>r?1:-1;else for(i=o=0;i<n;i++)if(e[i]!=t[i]){o=e[i]>t[i]?1:-1;break}return o}function n(e,t,n,r){for(var i=0;n--;)e[n]-=i,i=+(e[n]<t[n]),e[n]=i*r+e[n]-t[n];for(;!e[0]&&e.length>1;e.splice(0,1));}return function(r,i,o,l,a){var s,u,f,d,c,h,p,g,m,x,b,N,y,w,_,I,E,A=r.s==i.s?1:-1,T=r.c,O=i.c;if(!T||!T[0]||!O||!O[0])return new D(!r.s||!i.s||(T?O&&T[0]==O[0]:!O)?NaN:T&&0==T[0]||!O?0*A:A/0);for(m=(g=new D(A)).c=[],A=o+(u=r.e-i.e)+1,a||(a=1e14,u=C(r.e/14)-C(i.e/14),A=A/14|0),f=0;O[f]==(T[f]||0);f++);if(O[f]>(T[f]||0)&&u--,A<0)m.push(1),d=!0;else{for(w=T.length,I=O.length,f=0,A+=2,(c=L(a/(O[0]+1)))>1&&(O=e(O,c,a),T=e(T,c,a),I=O.length,w=T.length),y=I,b=(x=T.slice(0,I)).length;b<I;x[b++]=0);E=[0].concat(E=O.slice()),_=O[0],O[1]>=a/2&&_++;do{if(c=0,(s=t(O,x,I,b))<0){if(N=x[0],I!=b&&(N=N*a+(x[1]||0)),(c=L(N/_))>1)for(c>=a&&(c=a-1),p=(h=e(O,c,a)).length,b=x.length;1==t(h,x,p,b);)c--,n(h,I<p?E:O,p,a),p=h.length,s=1;else 0==c&&(s=c=1),p=(h=O.slice()).length;if(p<b&&(h=[0].concat(h)),n(x,h,b,a),b=x.length,-1==s)for(;1>t(O,x,I,b);)c++,n(x,I<b?E:O,b,a),b=x.length}else 0===s&&(c++,x=[0]);m[f++]=c,x[0]?x[b++]=T[y]||0:(x=[T[y]],b=1)}while((y++<w||null!=x[0])&&A--)d=null!=x[0],m[0]||m.splice(0,1)}if(1e14==a){for(f=1,A=m[0];A>=10;A/=10,f++);v(g,o+(g.e=f+14*u-1)+1,l,d)}else g.e=u,g.r=+d;return g}}(),r=/^(-?)0([xbo])(?=\w[\w.]*$)/i,i=/^([^.]+)\.$/,o=/^\.([^.]+)$/,l=/^-?(Infinity|NaN)$/,a=/^\s*\+(?=[\w.])|^\s+|\s+$/g,f=function(e,t,n,s){var u,f=n?t:t.replace(a,"");if(l.test(f))e.s=isNaN(f)?null:f<0?-1:1;else{if(!n&&(f=f.replace(r,function(e,t,n){return u="x"==(n=n.toLowerCase())?16:"b"==n?2:8,s&&s!=u?e:t}),s&&(u=s,f=f.replace(i,"$1").replace(o,"0.$1")),t!=f))return new D(f,u);if(D.DEBUG)throw Error(P+"Not a"+(s?" base "+s:"")+" number: "+t);e.s=null}e.c=e.e=null},d.absoluteValue=d.abs=function(){var e=new D(this);return e.s<0&&(e.s=1),e},d.comparedTo=function(e,t){return M(this,new D(e,t))},d.decimalPlaces=d.dp=function(e,t){var n,r,i;if(null!=e)return K(e,0,1e9),null==t?t=p:K(t,0,8),v(new D(this),e+this.e+1,t);if(!(n=this.c))return null;if(r=((i=n.length-1)-C(this.e/14))*14,i=n[i])for(;i%10==0;i/=10,r--);return r<0&&(r=0),r},d.dividedBy=d.div=function(e,t){return s(this,new D(e,t),h,p)},d.dividedToIntegerBy=d.idiv=function(e,t){return s(this,new D(e,t),0,1)},d.exponentiatedBy=d.pow=function(e,t){var n,r,i,o,l,a,s,u,f,d=this;if((e=new D(e)).c&&!e.isInteger())throw Error(P+"Exponent not an integer: "+F(e));if(null!=t&&(t=new D(t)),a=e.e>14,!d.c||!d.c[0]||1==d.c[0]&&!d.e&&1==d.c.length||!e.c||!e.c[0])return f=new D(Math.pow(+F(d),a?e.s*(2-G(e)):+F(e))),t?f.mod(t):f;if(s=e.s<0,t){if(t.c?!t.c[0]:!t.s)return new D(NaN);(r=!s&&d.isInteger()&&t.isInteger())&&(d=d.mod(t))}else{if(e.e>9&&(d.e>0||d.e<-1||(0==d.e?d.c[0]>1||a&&d.c[1]>=24e7:d.c[0]<8e13||a&&d.c[0]<=9999975e7)))return o=d.s<0&&G(e)?-0:0,d.e>-1&&(o=1/o),new D(s?1/o:o);w&&(o=S(w/14+2))}for(a?(n=new D(.5),s&&(e.s=1),u=G(e)):u=(i=Math.abs(+F(e)))%2,f=new D(c);;){if(u){if(!(f=f.times(d)).c)break;o?f.c.length>o&&(f.c.length=o):r&&(f=f.mod(t))}if(i){if(0===(i=L(i/2)))break;u=i%2}else if(v(e=e.times(n),e.e+1,1),e.e>14)u=G(e);else{if(0==(i=+F(e)))break;u=i%2}d=d.times(d),o?d.c&&d.c.length>o&&(d.c.length=o):r&&(d=d.mod(t))}return r?f:(s&&(f=c.div(f)),t?f.mod(t):o?v(f,w,p,l):f)},d.integerValue=function(e){var t=new D(this);return null==e?e=p:K(e,0,8),v(t,t.e+1,e)},d.isEqualTo=d.eq=function(e,t){return 0===M(this,new D(e,t))},d.isFinite=function(){return!!this.c},d.isGreaterThan=d.gt=function(e,t){return M(this,new D(e,t))>0},d.isGreaterThanOrEqualTo=d.gte=function(e,t){return 1===(t=M(this,new D(e,t)))||0===t},d.isInteger=function(){return!!this.c&&C(this.e/14)>this.c.length-2},d.isLessThan=d.lt=function(e,t){return 0>M(this,new D(e,t))},d.isLessThanOrEqualTo=d.lte=function(e,t){return -1===(t=M(this,new D(e,t)))||0===t},d.isNaN=function(){return!this.s},d.isNegative=function(){return this.s<0},d.isPositive=function(){return this.s>0},d.isZero=function(){return!!this.c&&0==this.c[0]},d.minus=function(e,t){var n,r,i,o,l=this.s;if(t=(e=new D(e,t)).s,!l||!t)return new D(NaN);if(l!=t)return e.s=-t,this.plus(e);var a=this.e/14,s=e.e/14,u=this.c,f=e.c;if(!a||!s){if(!u||!f)return u?(e.s=-t,e):new D(f?this:NaN);if(!u[0]||!f[0])return f[0]?(e.s=-t,e):new D(u[0]?this:3==p?-0:0)}if(a=C(a),s=C(s),u=u.slice(),l=a-s){for((o=l<0)?(l=-l,i=u):(s=a,i=f),i.reverse(),t=l;t--;i.push(0));i.reverse()}else for(r=(o=(l=u.length)<(t=f.length))?l:t,l=t=0;t<r;t++)if(u[t]!=f[t]){o=u[t]<f[t];break}if(o&&(i=u,u=f,f=i,e.s=-e.s),(t=(r=f.length)-(n=u.length))>0)for(;t--;u[n++]=0);for(t=1e14-1;r>l;){if(u[--r]<f[r]){for(n=r;n&&!u[--n];u[n]=t);--u[n],u[r]+=1e14}u[r]-=f[r]}for(;0==u[0];u.splice(0,1),--s);return u[0]?O(e,u,s):(e.s=3==p?-1:1,e.c=[e.e=0],e)},d.modulo=d.mod=function(e,t){var n,r;return(e=new D(e,t),this.c&&e.s&&(!e.c||e.c[0]))?e.c&&(!this.c||this.c[0])?(9==y?(r=e.s,e.s=1,n=s(this,e,0,3),e.s=r,n.s*=r):n=s(this,e,0,y),(e=this.minus(n.times(e))).c[0]||1!=y||(e.s=this.s),e):new D(this):new D(NaN)},d.multipliedBy=d.times=function(e,t){var n,r,i,o,l,a,s,u,f,d,c,h,p,g=this.c,m=(e=new D(e,t)).c;if(!g||!m||!g[0]||!m[0])return this.s&&e.s&&(!g||g[0]||m)&&(!m||m[0]||g)?(e.s*=this.s,g&&m?(e.c=[0],e.e=0):e.c=e.e=null):e.c=e.e=e.s=null,e;for(r=C(this.e/14)+C(e.e/14),e.s*=this.s,(s=g.length)<(d=m.length)&&(p=g,g=m,m=p,i=s,s=d,d=i),i=s+d,p=[];i--;p.push(0));for(i=d;--i>=0;){for(n=0,c=m[i]%1e7,h=m[i]/1e7|0,o=i+(l=s);o>i;)a=h*(u=g[--l]%1e7)+(f=g[l]/1e7|0)*c,n=((u=c*u+a%1e7*1e7+p[o]+n)/1e14|0)+(a/1e7|0)+h*f,p[o--]=u%1e14;p[o]=n}return n?++r:p.splice(0,1),O(e,p,r)},d.negated=function(){var e=new D(this);return e.s=-e.s||null,e},d.plus=function(e,t){var n,r=this.s;if(t=(e=new D(e,t)).s,!r||!t)return new D(NaN);if(r!=t)return e.s=-t,this.minus(e);var i=this.e/14,o=e.e/14,l=this.c,a=e.c;if(!i||!o){if(!l||!a)return new D(r/0);if(!l[0]||!a[0])return a[0]?e:new D(l[0]?this:0*r)}if(i=C(i),o=C(o),l=l.slice(),r=i-o){for(r>0?(o=i,n=a):(r=-r,n=l),n.reverse();r--;n.push(0));n.reverse()}for((r=l.length)-(t=a.length)<0&&(n=a,a=l,l=n,t=r),r=0;t;)r=(l[--t]=l[t]+a[t]+r)/1e14|0,l[t]=1e14===l[t]?0:l[t]%1e14;return r&&(l=[r].concat(l),++o),O(e,l,o)},d.precision=d.sd=function(e,t){var n,r,i;if(null!=e&&!!e!==e)return K(e,1,1e9),null==t?t=p:K(t,0,8),v(new D(this),e,t);if(!(n=this.c))return null;if(r=14*(i=n.length-1)+1,i=n[i]){for(;i%10==0;i/=10,r--);for(i=n[0];i>=10;i/=10,r++);}return e&&this.e+1>r&&(r=this.e+1),r},d.shiftedBy=function(e){return K(e,-0x1fffffffffffff,0x1fffffffffffff),this.times("1e"+e)},d.squareRoot=d.sqrt=function(){var e,t,n,r,i,o=this.c,l=this.s,a=this.e,u=h+4,f=new D("0.5");if(1!==l||!o||!o[0])return new D(!l||l<0&&(!o||o[0])?NaN:o?this:1/0);if(0==(l=Math.sqrt(+F(this)))||l==1/0?(((t=q(o)).length+a)%2==0&&(t+="0"),l=Math.sqrt(+t),a=C((a+1)/2)-(a<0||a%2),n=new D(t=l==1/0?"5e"+a:(t=l.toExponential()).slice(0,t.indexOf("e")+1)+a)):n=new D(l+""),n.c[0]){for((l=(a=n.e)+u)<3&&(l=0);;)if(i=n,n=f.times(i.plus(s(this,i,u,1))),q(i.c).slice(0,l)===(t=q(n.c)).slice(0,l)){if(n.e<a&&--l,"9999"!=(t=t.slice(l-3,l+1))&&(r||"4999"!=t)){+t&&(+t.slice(1)||"5"!=t.charAt(0))||(v(n,n.e+h+2,1),e=!n.times(n).eq(this));break}if(!r&&(v(i,i.e+h+2,0),i.times(i).eq(this))){n=i;break}u+=4,l+=4,r=1}}return v(n,n.e+h+1,p,e)},d.toExponential=function(e,t){return null!=e&&(K(e,0,1e9),e++),A(this,e,t,1)},d.toFixed=function(e,t){return null!=e&&(K(e,0,1e9),e=e+this.e+1),A(this,e,t)},d.toFormat=function(e,t,n){var r;if(null==n)null!=e&&t&&"object"==typeof t?(n=t,t=null):e&&"object"==typeof e?(n=e,e=t=null):n=_;else if("object"!=typeof n)throw Error(P+"Argument not an object: "+n);if(r=this.toFixed(e,t),this.c){var i,o=r.split("."),l=+n.groupSize,a=+n.secondaryGroupSize,s=n.groupSeparator||"",u=o[0],f=o[1],d=this.s<0,c=d?u.slice(1):u,h=c.length;if(a&&(i=l,l=a,a=i,h-=i),l>0&&h>0){for(i=h%l||l,u=c.substr(0,i);i<h;i+=l)u+=s+c.substr(i,l);a>0&&(u+=s+c.slice(i)),d&&(u="-"+u)}r=f?u+(n.decimalSeparator||"")+((a=+n.fractionGroupSize)?f.replace(RegExp("\\d{"+a+"}\\B","g"),"$&"+(n.fractionGroupSeparator||"")):f):u}return(n.prefix||"")+r+(n.suffix||"")},d.toFraction=function(e){var t,n,r,i,o,l,a,u,f,d,h,g,m=this.c;if(null!=e&&(!(a=new D(e)).isInteger()&&(a.c||1!==a.s)||a.lt(c)))throw Error(P+"Argument "+(a.isInteger()?"out of range: ":"not an integer: ")+F(a));if(!m)return new D(this);for(t=new D(c),f=n=new D(c),r=u=new D(c),g=q(m),o=t.e=g.length-this.e-1,t.c[0]=B[(l=o%14)<0?14+l:l],e=!e||a.comparedTo(t)>0?o>0?t:f:a,l=b,b=1/0,a=new D(g),u.c[0]=0;d=s(a,t,0,1),1!=(i=n.plus(d.times(r))).comparedTo(e);)n=r,r=i,f=u.plus(d.times(i=f)),u=i,t=a.minus(d.times(i=t)),a=i;return i=s(e.minus(n),r,0,1),u=u.plus(i.times(f)),n=n.plus(i.times(r)),u.s=f.s=this.s,o*=2,h=1>s(f,r,o,p).minus(this).abs().comparedTo(s(u,n,o,p).minus(this).abs())?[f,r]:[u,n],b=l,h},d.toNumber=function(){return+F(this)},d.toPrecision=function(e,t){return null!=e&&K(e,1,1e9),A(this,e,t,2)},d.toString=function(e){var t,n=this,r=n.s,i=n.e;return null===i?r?(t="Infinity",r<0&&(t="-"+t)):t="NaN":(null==e?t=i<=g||i>=m?j(q(n.c),i):X(q(n.c),i,"0"):10===e&&E?t=X(q((n=v(new D(n),h+i+1,p)).c),n.e,"0"):(K(e,2,I.length,"Base"),t=u(X(q(n.c),i,"0"),10,e,r,!0)),r<0&&n.c[0]&&(t="-"+t)),t},d.valueOf=d.toJSON=function(){return F(this)},d._isBigNumber=!0,d[Symbol.toStringTag]="BigNumber",d[Symbol.for("nodejs.util.inspect.custom")]=d.valueOf,null!=t&&D.set(t),D}();let z=24,V="u">typeof globalThis&&globalThis.crypto&&"function"==typeof globalThis.crypto.getRandomValues?()=>{let e=new Uint32Array(1);return globalThis.crypto.getRandomValues(e),e[0]/0x100000000}:Math.random,W=(e=4,t=V)=>{let n="";for(;n.length<e;)n+=Math.floor(36*t()).toString(36);return n},Y=(e="")=>(function(e){let t=new H(0);for(let n of e.values())t=t.multipliedBy(256).plus(n);return t})($(new TextEncoder().encode(e))).toString(36).slice(1),J=Array.from({length:26},(e,t)=>String.fromCharCode(t+97)),Z=({globalObj:t=e.g,random:n=V}={})=>{let r=Object.keys(t).toString();return Y(r.length?r+W(32,n):W(32,n)).substring(0,32)},Q=e=>()=>e++,ee=0x1c6b1f1f,et=(n=({random:e=V,counter:t=Q(Math.floor(e()*ee)),length:n=z,fingerprint:r=Z({random:e})}={})=>{if(n>32)throw Error(`Length must be between 2 and 32. Received: ${n}`);return function(){let i=J[Math.floor(e()*J.length)],o=Date.now().toString(36),l=t().toString(36),a=W(n,e),s=`${o+a+l+r}`;return`${i+Y(s).substring(1,n)}`}},()=>(t||(t=n()),t())),en=(0,r.sqliteTable)("Node",{id:(0,l.text)().primaryKey().$defaultFn(()=>et()),view:(0,l.text)().notNull(),cluster:(0,l.text)(),title:(0,l.text)().notNull(),role:(0,l.text)(),plain:(0,l.text)(),status:(0,l.text)().default("PENDING").notNull(),priority:(0,a.integer)().default(2).notNull(),progress:(0,a.integer)().default(0).notNull(),x:(0,s.real)().default(0).notNull(),y:(0,s.real)().default(0).notNull(),sourceRef:(0,l.text)(),externalId:(0,l.text)(),source:(0,l.text)().default("MANUAL").notNull(),parentId:(0,l.text)(),createdAt:(0,a.integer)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a.integer)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date),embedding:(0,l.text)()},e=>[(0,i.index)("Node_cluster_idx").on(e.cluster),(0,i.index)("Node_parentId_idx").on(e.parentId),(0,i.index)("Node_view_idx").on(e.view),(0,o.foreignKey)(()=>({columns:[e.parentId],foreignColumns:[e.id],name:"Node_parentId_Node_id_fk"})).onUpdate("cascade").onDelete("cascade")]),er=(0,r.sqliteTable)("NodeFile",{id:(0,l.text)().primaryKey().$defaultFn(()=>et()),nodeId:(0,l.text)().notNull().references(()=>en.id,{onDelete:"cascade",onUpdate:"cascade"}),path:(0,l.text)().notNull()},e=>[(0,i.uniqueIndex)("NodeFile_nodeId_path_key").on(e.nodeId,e.path),(0,i.index)("NodeFile_nodeId_idx").on(e.nodeId)]),ei=(0,r.sqliteTable)("Tag",{id:(0,l.text)().primaryKey().$defaultFn(()=>et()),label:(0,l.text)().notNull(),color:(0,l.text)()},e=>[(0,i.uniqueIndex)("Tag_label_key").on(e.label)]),eo=(0,r.sqliteTable)("Edge",{id:(0,l.text)().primaryKey().$defaultFn(()=>et()),fromId:(0,l.text)().notNull().references(()=>en.id,{onDelete:"cascade",onUpdate:"cascade"}),toId:(0,l.text)().notNull().references(()=>en.id,{onDelete:"cascade",onUpdate:"cascade"}),kind:(0,l.text)().default("DEPENDS").notNull(),label:(0,l.text)(),sourceHandle:(0,l.text)(),targetHandle:(0,l.text)()},e=>[(0,i.uniqueIndex)("Edge_fromId_toId_kind_key").on(e.fromId,e.toId,e.kind),(0,i.index)("Edge_toId_idx").on(e.toId),(0,i.index)("Edge_fromId_idx").on(e.fromId)]),el=(0,r.sqliteTable)("_NodeTags",{a:(0,l.text)("A").notNull().references(()=>en.id,{onDelete:"cascade",onUpdate:"cascade"}),b:(0,l.text)("B").notNull().references(()=>ei.id,{onDelete:"cascade",onUpdate:"cascade"})},e=>[(0,i.uniqueIndex)("_NodeTags_AB_unique").on(e.a,e.b),(0,i.index)("_NodeTags_B_index").on(e.b)]),ea=(0,r.sqliteTable)("Note",{id:(0,l.text)().primaryKey().$defaultFn(()=>et()),title:(0,l.text)().default("Untitled").notNull(),body:(0,l.text)().default("").notNull(),ord:(0,s.real)().default(0).notNull(),pinned:(0,a.integer)({mode:"boolean"}).default(!1).notNull(),createdAt:(0,a.integer)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a.integer)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},e=>[(0,i.index)("Note_updatedAt_idx").on(e.updatedAt)]),es=(0,r.sqliteTable)("DbTable",{id:(0,l.text)().primaryKey().$defaultFn(()=>et()),name:(0,l.text)().notNull(),domain:(0,l.text)(),description:(0,l.text)(),source:(0,l.text)().default("MANUAL").notNull(),x:(0,s.real)().default(0).notNull(),y:(0,s.real)().default(0).notNull(),createdAt:(0,a.integer)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a.integer)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},e=>[(0,i.index)("DbTable_domain_idx").on(e.domain),(0,i.uniqueIndex)("DbTable_name_key").on(e.name)]),eu=(0,r.sqliteTable)("DbColumn",{id:(0,l.text)().primaryKey().$defaultFn(()=>et()),tableId:(0,l.text)().notNull().references(()=>es.id,{onDelete:"cascade",onUpdate:"cascade"}),name:(0,l.text)().notNull(),type:(0,l.text)().notNull(),isPk:(0,a.integer)({mode:"boolean"}).default(!1).notNull(),isFk:(0,a.integer)({mode:"boolean"}).default(!1).notNull(),nullable:(0,a.integer)({mode:"boolean"}).default(!0).notNull(),note:(0,l.text)(),ord:(0,a.integer)().default(0).notNull()},e=>[(0,i.uniqueIndex)("DbColumn_tableId_name_key").on(e.tableId,e.name),(0,i.index)("DbColumn_tableId_idx").on(e.tableId)]),ef=(0,r.sqliteTable)("DbRelation",{id:(0,l.text)().primaryKey().$defaultFn(()=>et()),fromTableId:(0,l.text)().notNull().references(()=>es.id,{onDelete:"cascade",onUpdate:"cascade"}),toTableId:(0,l.text)().notNull().references(()=>es.id,{onDelete:"cascade",onUpdate:"cascade"}),fromColumn:(0,l.text)().notNull(),toColumn:(0,l.text)().notNull(),label:(0,l.text)()},e=>[(0,i.index)("DbRelation_toTableId_idx").on(e.toTableId),(0,i.index)("DbRelation_fromTableId_idx").on(e.fromTableId)]),ed=(0,r.sqliteTable)("Endpoint",{id:(0,l.text)().primaryKey().$defaultFn(()=>et()),method:(0,l.text)().notNull(),path:(0,l.text)().notNull(),domain:(0,l.text)(),description:(0,l.text)(),source:(0,l.text)().default("MANUAL").notNull(),x:(0,s.real)().default(0).notNull(),y:(0,s.real)().default(0).notNull(),createdAt:(0,a.integer)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a.integer)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)},e=>[(0,i.uniqueIndex)("Endpoint_method_path_key").on(e.method,e.path),(0,i.index)("Endpoint_domain_idx").on(e.domain)]),ec=(0,r.sqliteTable)("EndpointTable",{id:(0,l.text)().primaryKey().$defaultFn(()=>et()),endpointId:(0,l.text)().notNull().references(()=>ed.id,{onDelete:"cascade",onUpdate:"cascade"}),tableId:(0,l.text)().notNull().references(()=>es.id,{onDelete:"cascade",onUpdate:"cascade"}),access:(0,l.text)().default("read").notNull()},e=>[(0,i.uniqueIndex)("EndpointTable_endpointId_tableId_key").on(e.endpointId,e.tableId),(0,i.index)("EndpointTable_tableId_idx").on(e.tableId)]),eh=(0,r.sqliteTable)("DraftTable",{id:(0,l.text)().primaryKey().$defaultFn(()=>et()),name:(0,l.text)().notNull(),domain:(0,l.text)(),description:(0,l.text)(),x:(0,s.real)().default(0).notNull(),y:(0,s.real)().default(0).notNull(),createdAt:(0,a.integer)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date)},e=>[(0,i.uniqueIndex)("DraftTable_name_key").on(e.name)]),ep=(0,r.sqliteTable)("DraftColumn",{id:(0,l.text)().primaryKey().$defaultFn(()=>et()),tableId:(0,l.text)().notNull().references(()=>eh.id,{onDelete:"cascade",onUpdate:"cascade"}),name:(0,l.text)().notNull(),type:(0,l.text)().notNull(),isPk:(0,a.integer)({mode:"boolean"}).default(!1).notNull(),isFk:(0,a.integer)({mode:"boolean"}).default(!1).notNull(),nullable:(0,a.integer)({mode:"boolean"}).default(!0).notNull(),note:(0,l.text)(),ord:(0,a.integer)().default(0).notNull()},e=>[(0,i.index)("DraftColumn_tableId_idx").on(e.tableId)]),eg=(0,r.sqliteTable)("DraftRelation",{id:(0,l.text)().primaryKey().$defaultFn(()=>et()),fromTableId:(0,l.text)().notNull().references(()=>eh.id,{onDelete:"cascade",onUpdate:"cascade"}),toTableId:(0,l.text)().notNull().references(()=>eh.id,{onDelete:"cascade",onUpdate:"cascade"}),fromColumn:(0,l.text)().notNull(),toColumn:(0,l.text)().notNull(),label:(0,l.text)()},e=>[(0,i.index)("DraftRelation_toTableId_idx").on(e.toTableId),(0,i.index)("DraftRelation_fromTableId_idx").on(e.fromTableId)]),em=(0,r.sqliteTable)("CodeFile",{path:(0,l.text)().primaryKey(),root:(0,l.text)(),lang:(0,l.text)(),x:(0,s.real)().default(0).notNull(),y:(0,s.real)().default(0).notNull(),mtimeMs:(0,s.real)(),size:(0,a.integer)(),inDegree:(0,a.integer)().default(0).notNull(),outDegree:(0,a.integer)().default(0).notNull(),updatedAt:(0,a.integer)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),ex=(0,r.sqliteTable)("CodeFileEdge",{fromPath:(0,l.text)().notNull().references(()=>em.path,{onDelete:"cascade",onUpdate:"cascade"}),toPath:(0,l.text)().notNull().references(()=>em.path,{onDelete:"cascade",onUpdate:"cascade"}),circular:(0,a.integer)({mode:"boolean"}).default(!1).notNull()},e=>[(0,i.index)("CodeFileEdge_circular_idx").on(e.circular),(0,i.index)("CodeFileEdge_toPath_idx").on(e.toPath),(0,i.index)("CodeFileEdge_fromPath_idx").on(e.fromPath),(0,u.primaryKey)({columns:[e.fromPath,e.toPath],name:"CodeFileEdge_fromPath_toPath_pk"})]),eb=(0,r.sqliteTable)("SyncState",{id:(0,l.text)().primaryKey().default("singleton"),version:(0,a.integer)().default(0).notNull(),codeGraphSyncedAt:(0,a.integer)({mode:"timestamp_ms"}),updatedAt:(0,a.integer)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),eN=(0,r.sqliteTable)("AppSetting",{id:(0,l.text)().primaryKey().default("singleton"),intelModel:(0,l.text)().default("claude-haiku-4-5").notNull(),intelProvider:(0,l.text)().default("auto").notNull(),editor:(0,l.text)().default("auto").notNull(),currentFeatureId:(0,l.text)(),updatedAt:(0,a.integer)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)}),ey=(0,r.sqliteTable)("ProjectMeta",{id:(0,l.text)().primaryKey().default("singleton"),overview:(0,l.text)(),conventions:(0,l.text)().default("[]").notNull(),updatedAt:(0,a.integer)({mode:"timestamp_ms"}).notNull().$defaultFn(()=>new Date).$onUpdate(()=>new Date)});e.s(["appSetting",0,eN,"codeFile",0,em,"codeFileEdge",0,ex,"dbColumn",0,eu,"dbRelation",0,ef,"dbTable",0,es,"draftColumn",0,ep,"draftRelation",0,eg,"draftTable",0,eh,"edge",0,eo,"endpoint",0,ed,"endpointTable",0,ec,"node",0,en,"nodeFile",0,er,"nodeTags",0,el,"note",0,ea,"projectMeta",0,ey,"syncState",0,eb,"tag",0,ei],34700)}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=lib_drizzle_schema_ts_0ixydnz._.js.map
|