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":["../../../../components/plan/plan-workspace.tsx","../../../../components/plan/annotation-panel.tsx","../../../../components/plan/plan-history-view.tsx","../../../../components/plan/plan-toc.tsx","../../../../components/plan/permission-mode-setup.tsx","../../../../node_modules/lucide-react/src/icons/loader-circle.ts","../../../../node_modules/lucide-react/src/icons/arrow-left.ts","../../../../node_modules/lucide-react/src/icons/archive.ts","../../../../node_modules/lucide-react/src/icons/message-square.ts","../../../../node_modules/lucide-react/src/icons/send.ts"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n Trash2,\n Check,\n MapPinned,\n Database,\n Send,\n ListChecks,\n MessageSquare,\n StickyNote,\n Archive,\n Loader2,\n Maximize2,\n Minimize2,\n HelpCircle,\n X,\n} from \"lucide-react\";\nimport { useRouter } from \"next/navigation\";\nimport { usePlan } from \"@/components/plan/plan-context\";\nimport { currentPlanWs, planHref, wsHeaders } from \"@/components/plan/use-plan-ws\";\nimport {\n AnnotationPanel,\n CommentsList,\n type AnnotationApi,\n} from \"@/components/plan/annotation-panel\";\nimport type { MapClientHandle } from \"@/components/graph/map-client\";\nimport { PlanHistoryView } from \"@/components/plan/plan-history-view\";\nimport { PlanToc } from \"@/components/plan/plan-toc\";\nimport { PermissionModeSetup } from \"@/components/plan/permission-mode-setup\";\nimport { MapClient } from \"@/components/graph/map-client\";\nimport { DbMapClient, type DbMapClientHandle } from \"@/components/graph/db-map-client\";\nimport { cn } from \"@/lib/utils\";\nimport type {\n DbRelationPayload,\n DbTablePayload,\n DraftDoc,\n EndpointPayload,\n} from \"@/components/graph/db-types\";\nimport type { MapEdgePayload, MapNodePayload } from \"@/components/graph/types\";\n\n// The planning surface for your terminal session. Native annotation panel on the left,\n// the existing canvas components on the right (no nested TopNav / agent panel / PlanBar).\n\ninterface DbProps {\n tables: DbTablePayload[];\n relations: DbRelationPayload[];\n endpoints: EndpointPayload[];\n draft: DraftDoc | null;\n workspaceId: string;\n}\ninterface MapProps {\n view: \"ROADMAP\" | \"ARCHITECTURE\";\n nodes: MapNodePayload[];\n edges: MapEdgePayload[];\n}\n\ntype Tab = \"map\" | \"db\";\n\nexport function PlanWorkspace({\n dbProps,\n mapProps,\n planMarkdown,\n forceHistory = false,\n}: {\n dbProps: DbProps;\n mapProps: MapProps;\n planMarkdown: string;\n // When true, the user explicitly asked to browse history via /plan?view=history even\n // though a plan is pending. The history view then shows a back-link returning to the\n // current plan.\n forceHistory?: boolean;\n}) {\n const router = useRouter();\n const { status, discard } = usePlan();\n const [tab, setTab] = useState<Tab>(\"map\");\n // When both views exist, the user can expand the plan to full width (hiding the board). In\n // that state — and whenever the markdown is the whole page (no board) — a section TOC rail\n // appears on the left for click-to-jump navigation.\n const [expanded, setExpanded] = useState(false);\n // First-ever approval asks once which permission mode to enter afterwards, then remembers it\n // (see lib/preferences.ts). If already configured, approve straight through.\n const [setupOpen, setSetupOpen] = useState(false);\n // After approval we keep the user on this surface and show a \"where to find it\" card (the\n // committed plan vanishes from /plan, so without this they'd be left wondering where it went).\n const [approvedSummary, setApprovedSummary] = useState<{\n features: number;\n tables: number;\n endpoints: number;\n } | null>(null);\n const doApprove = useCallback(async () => {\n await fetch(\"/api/plan/approve\", { method: \"POST\", headers: wsHeaders(currentPlanWs()) }).catch(() => {});\n setApprovedSummary({ features: status.features, tables: status.tables, endpoints: status.endpoints });\n }, [status.features, status.tables, status.endpoints]);\n const handleApprove = useCallback(async () => {\n try {\n const r = await fetch(\"/api/preferences\", { cache: \"no-store\" });\n const p = (await r.json()) as { planApprovalModeConfigured?: boolean };\n if (p.planApprovalModeConfigured) {\n void doApprove();\n return;\n }\n } catch {\n /* if preferences are unreachable, just approve (don't block the user) */\n void doApprove();\n return;\n }\n setSetupOpen(true);\n }, [doApprove]);\n const [annoApi, setAnnoApi] = useState<AnnotationApi | null>(null);\n const handleAnnoApi = useCallback(\n (api: AnnotationApi) => setAnnoApi(api),\n [],\n );\n const mapControlRef = useRef<MapClientHandle | null>(null);\n const dbControlRef = useRef<DbMapClientHandle | null>(null);\n // Live edited /db draft, mirrored by DbMapClient. Read on Submit so canvas edits ship\n // alongside text annotations as feedback the agent reads in its next round.\n const draftRef = useRef<DraftDoc | null>(dbProps.draft);\n const [hasBoardEdits, setHasBoardEdits] = useState(false);\n const markBoardEdited = useCallback(() => setHasBoardEdits(true), []);\n // \"Explain This Node\": node-scoped questions the user wants answered. They ride back to the\n // terminal session inside the existing feedback bundle (plan-loop piggyback) on Submit.\n const [questions, setQuestions] = useState<{ target: string; question: string }[]>([]);\n const [askOpen, setAskOpen] = useState(false);\n // Pre-selected ask target when the composer is opened from a specific node's \"Ask\" button\n // (vs the pill, which leaves it on the first target). Drives AskComposer's initial selection.\n const [askTarget, setAskTarget] = useState<string>(\"\");\n const askAboutNode = useCallback((target: string) => {\n setAskTarget(target);\n setAskOpen(true);\n }, []);\n const questionsRef = useRef(questions);\n useEffect(() => {\n questionsRef.current = questions;\n }, [questions]);\n // A new plan round (re-present) resets the feedback surface — clear pending questions too.\n useEffect(() => {\n setQuestions([]);\n setAskOpen(false);\n }, [status.proposedAt]);\n // Heartbeat so the ExitPlanMode hook knows a /plan tab is already open for this workspace and\n // lets it refresh in place — PlanProvider's poll swaps in the revised plan — instead of\n // spawning a duplicate browser tab on every re-present. Pinned to the browser's workspace via\n // the beacon_ws cookie. Only PlanWorkspace beats, so presence means specifically \"/plan is up\".\n useEffect(() => {\n const beat = () =>\n void fetch(\"/api/plan/presence\", {\n method: \"POST\",\n cache: \"no-store\",\n headers: wsHeaders(currentPlanWs()),\n }).catch(() => {});\n beat();\n const t = setInterval(beat, 5000);\n return () => clearInterval(t);\n }, []);\n const getExtraSubmitPayload = useCallback(\n () => ({ draft: draftRef.current, questions: questionsRef.current }),\n [],\n );\n // Targets the user can ask about — current features + draft/real tables + endpoints.\n const askTargets = useMemo(() => {\n const t: string[] = [];\n for (const n of mapProps.nodes) t.push(`feature: ${n.title}`);\n for (const tb of dbProps.draft?.tables ?? []) t.push(`table: ${tb.name}`);\n for (const tb of dbProps.tables) t.push(`table: ${tb.name}`);\n for (const e of dbProps.draft?.endpoints ?? []) t.push(`endpoint: ${e.method} ${e.path}`);\n for (const e of dbProps.endpoints) t.push(`endpoint: ${e.method} ${e.path}`);\n return Array.from(new Set(t));\n }, [mapProps.nodes, dbProps]);\n\n // Comments content rendered inside the canvas DetailSidebar's Comments tab.\n const commentsContent = annoApi ? (\n <CommentsList\n annotations={annoApi.annotations}\n updateComment={annoApi.updateComment}\n removeAnnotation={annoApi.removeAnnotation}\n focusOnAnnotation={annoApi.focusOnAnnotation}\n onClose={() => mapControlRef.current?.close()}\n />\n ) : null;\n // Plan pill button: toggles the side panel (opens to Details by default — user\n // clicks the Comments tab inside the sidebar to switch).\n const toggleSidePanel = useCallback(() => {\n mapControlRef.current?.open();\n }, []);\n\n // Open the comments side panel on whichever board is showing (the 💬 toolbar button).\n const openComments = useCallback(() => {\n if (tab === \"db\") dbControlRef.current?.openComments();\n else mapControlRef.current?.openComments();\n }, [tab]);\n\n // Comment on a canvas node/table: add it to the feedback bundle (excerpt = the node/table name)\n // and reveal the Comments tab so the reviewer can type the note — the canvas equivalent of\n // selecting markdown text to comment.\n const addNodeComment = useCallback(\n (excerpt: string) => {\n annoApi?.addComment(excerpt);\n if (tab === \"db\") dbControlRef.current?.openComments();\n else mapControlRef.current?.openComments();\n },\n [annoApi, tab],\n );\n\n // Persisted left-pane width (percent) so the user's preferred split survives reloads.\n // localStorage is only available on the client; we read it lazily in the initializer.\n const [leftPct, setLeftPct] = useState<number>(() => {\n if (typeof window === \"undefined\") return 50;\n try {\n const v = window.localStorage.getItem(\"beacon:plan-left-pct\");\n return v ? Math.max(20, Math.min(80, Number(v))) : 50;\n } catch {\n return 50;\n }\n });\n const containerRef = useRef<HTMLDivElement | null>(null);\n const draggingRef = useRef(false);\n\n const onResizeDown = useCallback((e: React.PointerEvent) => {\n e.preventDefault();\n draggingRef.current = true;\n document.body.style.cursor = \"col-resize\";\n document.body.style.userSelect = \"none\";\n }, []);\n useEffect(() => {\n const onMove = (e: PointerEvent) => {\n if (!draggingRef.current || !containerRef.current) return;\n const rect = containerRef.current.getBoundingClientRect();\n const pct = Math.max(\n 20,\n Math.min(80, ((e.clientX - rect.left) / rect.width) * 100),\n );\n setLeftPct(pct);\n };\n const onUp = () => {\n if (!draggingRef.current) return;\n draggingRef.current = false;\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n try {\n localStorage.setItem(\"beacon:plan-left-pct\", String(leftPct));\n } catch {\n /* ignore */\n }\n };\n window.addEventListener(\"pointermove\", onMove);\n window.addEventListener(\"pointerup\", onUp);\n return () => {\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerup\", onUp);\n };\n }, [leftPct]);\n\n const onDiscard = async () => {\n await fetch(\"/api/plan/annotations\", { method: \"DELETE\", headers: wsHeaders(currentPlanWs()) }).catch(() => {});\n await discard();\n router.refresh();\n };\n\n // Stay mounted while the post-approval \"where to find it\" card is up (it navigates on click).\n if ((!status.pending || forceHistory) && !approvedSummary) {\n return <PlanHistoryView pendingPlan={status.pending} />;\n }\n\n // When the plan proposes nothing for the boards (no draft tables/endpoints, no draft\n // features) there's nothing to show on the right — render the markdown full-width so a\n // pure-prose plan is just a clean document to read, not a doc squeezed next to empty canvases.\n const hasBoard =\n mapProps.nodes.length > 0 ||\n dbProps.tables.length > 0 ||\n dbProps.endpoints.length > 0 ||\n (dbProps.draft?.tables.length ?? 0) > 0 ||\n (dbProps.draft?.endpoints.length ?? 0) > 0;\n\n // The board shows only in split mode (a board exists AND the user hasn't expanded the plan).\n // The section TOC shows whenever the markdown is full width: expanded, or no board at all.\n const showBoard = hasBoard && !expanded;\n const showToc = !hasBoard || expanded;\n\n // Approve is gated while unsubmitted feedback exists so a stray comment / canvas edit isn't\n // silently dropped. We make that obvious with a one-click Clear (below) instead of leaving the\n // user stuck on a greyed button — clearing wipes the pending markers so Approve unblocks.\n const pendingFeedback =\n (annoApi?.liveCount ?? 0) > 0 || hasBoardEdits || questions.length > 0;\n const approveBlocked = pendingFeedback && !annoApi?.submitted;\n const clearPending = () => {\n annoApi?.clearAll?.();\n setHasBoardEdits(false);\n setQuestions([]);\n };\n\n return (\n <div className=\"relative flex h-screen flex-col\">\n {/* Post-approval \"where to find it\" card — the committed plan disappears from /plan, so\n this tells the user exactly which board now holds what they approved. */}\n {approvedSummary && (\n <div className=\"absolute inset-0 z-50 flex flex-col items-center justify-center gap-5 bg-background/97 px-6 text-center backdrop-blur-sm\">\n <div className=\"flex size-12 items-center justify-center rounded-full bg-emerald-500/15\">\n <Check className=\"size-6 text-emerald-300\" />\n </div>\n <div className=\"space-y-1\">\n <h2 className=\"text-lg font-semibold text-foreground\">Plan approved</h2>\n <p className=\"max-w-sm text-sm text-muted-foreground\">\n {approvedSummary.features > 0 || approvedSummary.tables > 0 || approvedSummary.endpoints > 0\n ? \"It's committed. Here's where to find it:\"\n : \"It's archived to your plan history.\"}\n </p>\n </div>\n <div className=\"flex flex-wrap items-center justify-center gap-2\">\n {approvedSummary.features > 0 && (\n <button\n onClick={() => router.push(\"/map?view=ROADMAP\")}\n className=\"flex items-center gap-2 rounded-lg border border-white/12 px-3 py-2 text-sm text-foreground transition-colors hover:bg-white/[0.06]\"\n >\n <MapPinned className=\"size-4 text-sky-300\" /> {approvedSummary.features} feature\n {approvedSummary.features === 1 ? \"\" : \"s\"} → Map\n </button>\n )}\n {(approvedSummary.tables > 0 || approvedSummary.endpoints > 0) && (\n <button\n onClick={() => router.push(\"/map?view=DATABASE\")}\n className=\"flex items-center gap-2 rounded-lg border border-white/12 px-3 py-2 text-sm text-foreground transition-colors hover:bg-white/[0.06]\"\n >\n <Database className=\"size-4 text-violet-300\" /> {approvedSummary.tables} table\n {approvedSummary.tables === 1 ? \"\" : \"s\"} · {approvedSummary.endpoints} endpoint\n {approvedSummary.endpoints === 1 ? \"\" : \"s\"} → Database\n </button>\n )}\n </div>\n <button\n onClick={() => {\n setApprovedSummary(null);\n router.push(planHref({ view: \"history\" }));\n }}\n className=\"rounded-full border border-white/12 px-3 py-1.5 text-xs font-medium text-muted-foreground transition-colors hover:bg-white/[0.06] hover:text-foreground\"\n >\n Done — browse plan history\n </button>\n </div>\n )}\n {/* Once feedback is submitted, the plan is \"closed\" on our side — the terminal session is\n revising it. This overlay covers the review surface with a waiting state (instead of\n leaving the plan stuck on \"Submitted\"). The annotation panel stays MOUNTED underneath\n so it can detect the agent's next round and reset `submitted` — which removes this\n overlay and reveals the fresh plan automatically. */}\n {annoApi?.submitted && (\n <div className=\"absolute inset-0 z-40 flex flex-col items-center justify-center gap-4 bg-background/95 px-6 text-center backdrop-blur-sm\">\n <div className=\"flex size-12 items-center justify-center rounded-full bg-sky-500/15\">\n <Loader2 className=\"size-6 animate-spin text-sky-300\" />\n </div>\n <div className=\"space-y-1\">\n <h2 className=\"text-lg font-semibold text-foreground\">\n Feedback sent\n </h2>\n <p className=\"max-w-sm text-sm text-muted-foreground\">\n Your terminal session is revising the plan based on your comments.\n The updated plan will appear here automatically — no need to\n refresh.\n </p>\n </div>\n <button\n onClick={() => router.push(planHref({ view: \"history\" }))}\n className=\"rounded-full border border-white/12 px-3 py-1.5 text-xs font-medium text-muted-foreground transition-colors hover:bg-white/[0.06] hover:text-foreground\"\n >\n Browse past plans\n </button>\n </div>\n )}\n {/* Top-right floating controls. The Approve / Discard / Feedback pill, plus — when the\n plan is expanded full-width — a separate Collapse toggle to its LEFT (its own pill,\n NOT inside the action container) so it never crowds the action buttons. */}\n <div className=\"pointer-events-none fixed right-3 top-3 z-30 flex items-center gap-2\">\n {hasBoard && expanded && (\n <button\n onClick={() => setExpanded(false)}\n title=\"Collapse — show the board again\"\n className=\"glass pointer-events-auto flex size-8 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-white/[0.06] hover:text-foreground\"\n >\n <Minimize2 className=\"size-3.5\" />\n </button>\n )}\n <div className=\"glass pointer-events-auto flex h-10 items-center gap-0.5 rounded-full px-1\">\n <button\n onClick={() => router.push(planHref({ view: \"history\" }))}\n title=\"Browse past plans (you can come back to this one)\"\n className=\"flex size-8 shrink-0 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-white/[0.06] hover:text-foreground\"\n >\n <Archive className=\"size-3.5\" />\n </button>\n <span aria-hidden className=\"mx-1 h-5 w-px bg-white/10\" />\n <button\n onClick={toggleSidePanel}\n disabled={!annoApi}\n title=\"Open the side panel (details)\"\n className=\"relative flex size-8 shrink-0 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-white/[0.06] hover:text-foreground\"\n >\n <ListChecks className=\"size-3.5\" />\n </button>\n <button\n onClick={openComments}\n disabled={!annoApi}\n title={\n annoApi?.annotationCount\n ? `Open comments · ${annoApi.annotationCount} comment${annoApi.annotationCount === 1 ? \"\" : \"s\"} so far`\n : \"Open comments — select a card/table and 'Comment on this', or highlight text\"\n }\n className=\"relative flex size-8 shrink-0 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-white/[0.06] hover:text-foreground\"\n >\n <MessageSquare className=\"size-3.5\" />\n {annoApi && (annoApi.annotationCount ?? 0) > 0 && (\n <span className=\"absolute -right-0.5 -top-0.5 flex h-3.5 min-w-3.5 items-center justify-center rounded-full bg-sky-500 px-1 text-[9px] font-semibold text-white\">\n {annoApi.annotationCount}\n </span>\n )}\n </button>\n <button\n data-overall-toggle\n onClick={() => annoApi?.toggleOverall?.()}\n disabled={!annoApi?.toggleOverall}\n title={\n annoApi?.hasGlobalComment\n ? \"Edit your overall feedback\"\n : \"Add overall plan-level feedback\"\n }\n className={cn(\n \"relative flex size-8 shrink-0 items-center justify-center rounded-full transition-colors\",\n annoApi?.globalOpen\n ? \"bg-white/10 text-foreground\"\n : annoApi?.hasGlobalComment\n ? \"text-sky-300 hover:bg-sky-500/15\"\n : \"text-muted-foreground hover:bg-white/[0.06] hover:text-foreground\",\n )}\n >\n <StickyNote className=\"size-3.5\" />\n {annoApi?.hasGlobalComment && (\n <span className=\"absolute -right-0.5 -top-0.5 size-2 rounded-full bg-sky-400\" />\n )}\n </button>\n <button\n onClick={() => setAskOpen((b) => !b)}\n title=\"Ask the agent a question about a node (answered in its next round)\"\n className={cn(\n \"relative flex size-8 shrink-0 items-center justify-center rounded-full transition-colors\",\n askOpen\n ? \"bg-white/10 text-foreground\"\n : questions.length\n ? \"text-sky-300 hover:bg-sky-500/15\"\n : \"text-muted-foreground hover:bg-white/[0.06] hover:text-foreground\",\n )}\n >\n <HelpCircle className=\"size-3.5\" />\n {questions.length > 0 && (\n <span className=\"absolute -right-0.5 -top-0.5 flex h-3.5 min-w-3.5 items-center justify-center rounded-full bg-sky-500 px-1 text-[9px] font-semibold text-white\">\n {questions.length}\n </span>\n )}\n </button>\n <span aria-hidden className=\"mx-1 h-5 w-px bg-white/10\" />\n <button\n onClick={() => annoApi?.submit()}\n disabled={\n !annoApi ||\n annoApi.submitting ||\n (annoApi.liveCount === 0 && !hasBoardEdits && questions.length === 0)\n }\n title={\n !annoApi || (annoApi.liveCount === 0 && !hasBoardEdits && questions.length === 0)\n ? \"Highlight text or edit the canvas, then submit\"\n : annoApi.submitted\n ? \"Submitted — your terminal session is reading the feedback\"\n : \"Submit feedback (comments + canvas edits) so the agent can revise the plan\"\n }\n className={cn(\n \"flex shrink-0 items-center gap-1 rounded-full px-2.5 py-1 text-[11px] font-semibold transition-colors\",\n annoApi?.submitted\n ? \"text-sky-300\"\n : !annoApi || (annoApi.liveCount === 0 && !hasBoardEdits && questions.length === 0)\n ? \"text-muted-foreground opacity-50\"\n : \"text-sky-300 hover:bg-sky-500/15\",\n )}\n >\n {annoApi?.submitted ? (\n <Check className=\"size-3\" />\n ) : (\n <Send className=\"size-3\" />\n )}\n {annoApi?.submitted ? \"Submitted\" : \"Feedback\"}\n </button>\n {approveBlocked && (\n <button\n onClick={clearPending}\n title=\"Discard your unsubmitted comments / canvas edits so you can approve the plan as-is\"\n className=\"flex shrink-0 items-center gap-1 rounded-full px-2 py-1 text-[11px] font-medium text-amber-300/90 transition-colors hover:bg-amber-500/15\"\n >\n <X className=\"size-3\" /> Clear to approve\n </button>\n )}\n <button\n onClick={() => void handleApprove()}\n disabled={approveBlocked}\n title={\n approveBlocked\n ? \"You have unsubmitted feedback — submit it, or click ‘Clear to approve’ to drop it\"\n : \"Approve the plan\"\n }\n className={cn(\n \"flex shrink-0 items-center gap-1 rounded-full border border-emerald-500/40 bg-emerald-500/15 px-2.5 py-1 text-[11px] font-semibold text-emerald-300 transition-colors hover:bg-emerald-500/25\",\n approveBlocked && \"opacity-40 hover:bg-emerald-500/15\",\n )}\n >\n <Check className=\"size-3\" /> Approve\n </button>\n <button\n onClick={onDiscard}\n className=\"flex shrink-0 items-center gap-1 rounded-full px-2.5 py-1 text-[11px] font-medium text-muted-foreground transition-colors hover:bg-red-500/15 hover:text-red-300\"\n title=\"Discard the plan\"\n >\n <Trash2 className=\"size-3\" /> Discard\n </button>\n <PermissionModeSetup\n open={setupOpen}\n onOpenChange={setSetupOpen}\n onConfirmed={() => void doApprove()}\n />\n </div>\n </div>\n\n {/* \"Explain This Node\" composer — questions ride back with Submit (plan-loop piggyback). */}\n {askOpen && (\n <div className=\"fixed right-3 top-16 z-30 w-80 rounded-xl border border-white/10 bg-card p-3 shadow-xl\">\n <div className=\"mb-2 flex items-center justify-between\">\n <span className=\"text-[11px] font-semibold uppercase tracking-wide text-muted-foreground\">\n Ask the agent\n </span>\n <button\n onClick={() => setAskOpen(false)}\n title=\"Close\"\n className=\"rounded p-0.5 text-muted-foreground hover:text-foreground\"\n >\n <X className=\"size-3.5\" />\n </button>\n </div>\n <AskComposer\n targets={askTargets}\n initialTarget={askTarget}\n onAdd={(q) => setQuestions((qs) => [...qs, q])}\n />\n {questions.length > 0 && (\n <ul className=\"mt-2 space-y-1\">\n {questions.map((q, i) => (\n <li\n key={i}\n className=\"group flex items-start justify-between gap-2 rounded-md border border-white/5 bg-background/40 px-2 py-1\"\n >\n <div className=\"min-w-0\">\n <div className=\"truncate font-mono text-[10px] text-sky-300/90\">{q.target}</div>\n <div className=\"text-[11px] text-foreground/90\">{q.question}</div>\n </div>\n <button\n onClick={() => setQuestions((qs) => qs.filter((_, j) => j !== i))}\n title=\"Remove\"\n className=\"shrink-0 rounded p-0.5 text-muted-foreground/70 opacity-0 transition-opacity hover:text-red-300 group-hover:opacity-100\"\n >\n <X className=\"size-3\" />\n </button>\n </li>\n ))}\n </ul>\n )}\n <p className=\"mt-2 text-[10px] text-muted-foreground\">\n Questions are sent with your feedback on Submit — the agent answers them in its next round.\n </p>\n </div>\n )}\n\n <div ref={containerRef} className=\"flex min-h-0 flex-1\">\n {/* SECTION TOC — shown when the markdown is full width: the user expanded it, or the\n plan has no board. Click an entry to smooth-scroll the prose to that heading. */}\n {showToc && <PlanToc markdown={planMarkdown} />}\n\n {/* LEFT — Beacon-native annotation panel: highlight text → comment.\n No sub-header row — the markdown's own H1 already names the plan, and the\n annotation toolbar (Overall / Submit) sits inside <AnnotationPanel>. In split mode\n it takes leftPct%; when full width (expanded or no board) it flexes to fill. */}\n <div\n className={cn(\"relative flex min-w-0 flex-col\", !showBoard && \"flex-1\")}\n style={showBoard ? { width: `${leftPct}%` } : undefined}\n >\n {/* Expand affordance — only in split mode (both views), at the markdown pane's RIGHT\n edge next to the board/divider. The matching Collapse control lives in the\n top-right controls row when expanded (see below). */}\n {showBoard && (\n <div className=\"pointer-events-none absolute right-3 top-3 z-20\">\n <button\n onClick={() => setExpanded(true)}\n title=\"Expand the plan to full width\"\n className=\"glass pointer-events-auto flex size-8 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-white/[0.06] hover:text-foreground\"\n >\n <Maximize2 className=\"size-3.5\" />\n </button>\n </div>\n )}\n <div className=\"min-h-0 flex-1 overflow-hidden bg-background\">\n <AnnotationPanel\n markdown={planMarkdown}\n round={status.proposedAt}\n onApi={handleAnnoApi}\n hideSubmit\n getExtraSubmitPayload={getExtraSubmitPayload}\n />\n </div>\n </div>\n\n {/* DIVIDER — drag horizontally to resize the panes (split mode only) */}\n {showBoard && (\n <div\n onPointerDown={onResizeDown}\n className=\"group relative w-px shrink-0 cursor-col-resize bg-white/5 hover:bg-white/15\"\n title=\"Drag to resize\"\n >\n <div className=\"absolute inset-y-0 -left-1.5 right-[-6px] z-10\" />\n </div>\n )}\n\n {/* RIGHT — canvas pane. Map/Database tab pill floats over the canvas\n (like /map's existing top-center tabs) so no extra layout row is wasted. Omitted\n when the plan proposes no board content, or while the plan is expanded full-width. */}\n {showBoard && (\n <div\n className=\"relative flex min-w-0 flex-col\"\n style={{ width: `${100 - leftPct}%` }}\n >\n <div className=\"pointer-events-none absolute left-3 top-3 z-20\">\n <div className=\"glass pointer-events-auto flex items-center gap-1 rounded-full p-0.5\">\n <TabBtn\n active={tab === \"map\"}\n onClick={() => setTab(\"map\")}\n icon={<MapPinned className=\"size-3\" />}\n >\n Map\n </TabBtn>\n <TabBtn\n active={tab === \"db\"}\n onClick={() => setTab(\"db\")}\n icon={<Database className=\"size-3\" />}\n >\n Database\n </TabBtn>\n </div>\n </div>\n <div className=\"min-h-0 flex-1 overflow-hidden bg-background\">\n {tab === \"map\" ? (\n <MapClient\n view={mapProps.view}\n nodes={mapProps.nodes}\n edges={mapProps.edges}\n embedded\n commentsContent={commentsContent}\n commentsCount={annoApi?.annotationCount ?? 0}\n controlRef={mapControlRef}\n onAskAgent={askAboutNode}\n onAddComment={addNodeComment}\n />\n ) : (\n <DbMapClient\n tables={dbProps.tables}\n relations={dbProps.relations}\n endpoints={dbProps.endpoints}\n draft={dbProps.draft}\n workspaceId={dbProps.workspaceId}\n embedded\n draftRef={draftRef}\n onEdit={markBoardEdited}\n controlRef={dbControlRef}\n commentsContent={commentsContent}\n commentsCount={annoApi?.annotationCount ?? 0}\n onAddComment={addNodeComment}\n />\n )}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n\n// A small composer for \"Explain This Node\": pick a target (feature / table / endpoint) and type\n// a question. Added questions ride back to the terminal session with the next Submit.\nfunction AskComposer({\n targets,\n onAdd,\n initialTarget,\n}: {\n targets: string[];\n onAdd: (q: { target: string; question: string }) => void;\n // Pre-selected target when opened from a node's \"Ask\" button. Changing it (clicking Ask on a\n // different node while the composer is open) re-points the selection.\n initialTarget?: string;\n}) {\n const [target, setTarget] = useState(initialTarget || targets[0] || \"\");\n const [q, setQ] = useState(\"\");\n useEffect(() => {\n if (initialTarget) setTarget(initialTarget);\n }, [initialTarget]);\n useEffect(() => {\n if (!target && targets[0]) setTarget(targets[0]);\n }, [targets, target]);\n const add = () => {\n const text = q.trim();\n if (!text) return;\n onAdd({ target: target || \"(plan)\", question: text });\n setQ(\"\");\n };\n return (\n <div className=\"space-y-1.5\">\n {targets.length > 0 && (\n <select\n value={target}\n onChange={(e) => setTarget(e.target.value)}\n className=\"w-full rounded border border-white/10 bg-background px-2 py-1 text-[11px] outline-none focus:border-sky-400/40\"\n >\n {targets.map((t) => (\n <option key={t} value={t} className=\"bg-card\">\n {t}\n </option>\n ))}\n </select>\n )}\n <textarea\n value={q}\n onChange={(e) => setQ(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n add();\n }\n }}\n rows={2}\n placeholder=\"e.g. why a new table instead of reusing users? (⌘/Ctrl+Enter to add)\"\n className=\"w-full resize-y rounded border border-white/10 bg-background px-2 py-1.5 text-[12px] leading-snug outline-none focus:border-sky-400/40\"\n />\n <button\n onClick={add}\n disabled={!q.trim()}\n className={cn(\n \"w-full rounded-md px-2 py-1 text-[11px] font-semibold transition-colors\",\n q.trim() ? \"bg-sky-500/15 text-sky-300 hover:bg-sky-500/25\" : \"text-muted-foreground opacity-50\",\n )}\n >\n Add question\n </button>\n </div>\n );\n}\n\nfunction TabBtn({\n active,\n onClick,\n icon,\n children,\n}: {\n active: boolean;\n onClick: () => void;\n icon: React.ReactNode;\n children: React.ReactNode;\n}) {\n return (\n <button\n onClick={onClick}\n className={cn(\n \"flex items-center gap-1 rounded-md px-2.5 py-1 text-[11px] font-medium transition-colors\",\n active\n ? \"bg-white/10 text-foreground\"\n : \"text-muted-foreground hover:text-foreground\",\n )}\n >\n {icon}\n {children}\n </button>\n );\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Check, MessageSquarePlus, Trash2, Send, Strikethrough, X } from \"lucide-react\";\nimport { cn } from \"@/lib/utils\";\nimport { currentPlanWs, wsHeaders } from \"@/components/plan/use-plan-ws\";\nimport type { TextAnnotation } from \"@/lib/annotations\";\nimport {\n splitBlocks,\n CodeBlock,\n TableBlock,\n Inline,\n renderBlockShell,\n isHeading,\n planHeadingAnchor,\n type Block,\n} from \"@/components/plan/markdown-view\";\n\n// Native, inline annotation panel. Select text → small floating popover with two icons:\n// 💬 = comment (text bubble anchored above the highlighted span)\n// 🚫 = mark for deletion (strikethrough on the span; no comment needed)\n// You can also just start typing immediately after selecting — Beacon auto-creates the\n// comment with your first keystroke. A \"Overall feedback\" textarea at the top covers\n// plan-level notes. Submit packages everything for the blocking MCP tool to return.\n\ninterface PopoverState {\n x: number;\n y: number;\n excerpt: string;\n}\n\nexport interface AnnotationApi {\n liveCount: number;\n submitting: boolean;\n submitted: boolean;\n submit: () => void;\n // Drop ALL unsubmitted feedback (text annotations + overall comment) and clear the server\n // store, so the parent's \"Clear to approve\" can unblock Approve in one click.\n clearAll: () => void;\n // Surface annotation/global state so a parent (Plan pill) can render compact icon\n // buttons next to the verdict controls.\n annotationCount: number;\n hasGlobalComment: boolean;\n globalOpen: boolean;\n toggleOverall: () => void;\n // Full annotation list + handlers so the parent can render them inside the\n // canvas DetailSidebar's Comments tab.\n annotations: TextAnnotation[];\n updateComment: (id: string, comment: string) => void;\n removeAnnotation: (id: string) => void;\n focusOnAnnotation: (id: string) => void;\n // Add a fresh comment anchored to a canvas node/table (excerpt = its name) and focus it, so a\n // reviewer can comment on a feature card / DB table the same way they comment on markdown text.\n addComment: (excerpt: string) => void;\n}\n\nexport function AnnotationPanel({\n markdown,\n round,\n onApi,\n hideSubmit = false,\n getExtraSubmitPayload,\n}: {\n markdown: string;\n /** The plan's proposedAt — bumps on every (re)present. Re-syncs annotation state per round\n even when the prose is unchanged (e.g. a schema-only revision). */\n round?: number;\n /** Lifts the submit handler + counts up so a parent (Plan pill) can render the\n verdict button next to Approve/Discard. */\n onApi?: (api: AnnotationApi) => void;\n /** Hides the panel's own Submit button when the parent renders one. */\n hideSubmit?: boolean;\n /** Lets the parent fold extra fields (e.g. the current /db draft doc) into the\n submit POST body so canvas edits flow through the same feedback round-trip. */\n getExtraSubmitPayload?: () => Record<string, unknown>;\n}) {\n const [annotations, setAnnotations] = useState<TextAnnotation[]>([]);\n const [globalComment, setGlobalComment] = useState(\"\");\n const [globalOpen, setGlobalOpen] = useState(false);\n const [popover, setPopover] = useState<PopoverState | null>(null);\n // The inline comment composer: a small textarea anchored at the selection. Opened by the\n // popover's comment button OR by typing after a selection; on confirm the comment is saved\n // and surfaces in the side-panel Comments list. `seed` is the keystroke that opened it.\n const [composer, setComposer] = useState<(PopoverState & { seed: string }) | null>(null);\n const [focusOnId, setFocusOnId] = useState<string | null>(null);\n const [submitting, setSubmitting] = useState(false);\n const [submitted, setSubmitted] = useState(false);\n const docRef = useRef<HTMLDivElement | null>(null);\n const globalPopoverRef = useRef<HTMLDivElement | null>(null);\n\n // Hydrate from server — and RE-hydrate whenever the plan's prose changes, i.e. the agent\n // re-presented a revised plan. A new round resets the server's annotation store (see\n // resetPlanRound), so re-syncing here clears the stale \"Submitted\" state + old comments\n // instead of carrying last round's feedback forward. `markdown` is the round signal: it is\n // stable within a round and only changes when a new/revised plan is pushed.\n useEffect(() => {\n let alive = true;\n void (async () => {\n try {\n const res = await fetch(\"/api/plan/annotations\", {\n cache: \"no-store\",\n headers: wsHeaders(currentPlanWs()),\n });\n if (!res.ok) return;\n const body = (await res.json()) as {\n annotations: TextAnnotation[];\n globalComment?: string;\n submitted: boolean;\n };\n if (!alive) return;\n setAnnotations(body.annotations ?? []);\n setGlobalComment(body.globalComment ?? \"\");\n setSubmitted(!!body.submitted);\n } catch {\n /* offline first run */\n }\n })();\n return () => {\n alive = false;\n };\n }, [markdown, round]);\n\n // Persist in-progress state via PUT.\n useEffect(() => {\n if (submitted) return;\n const t = setTimeout(() => {\n void fetch(\"/api/plan/annotations\", {\n method: \"PUT\",\n headers: { \"content-type\": \"application/json\", ...wsHeaders(currentPlanWs()) },\n body: JSON.stringify({ annotations, globalComment }),\n }).catch(() => {});\n }, 400);\n return () => clearTimeout(t);\n }, [annotations, globalComment, submitted]);\n\n // Show floating popover whenever the user has an active selection inside the document.\n const refreshPopover = useCallback(() => {\n const sel = window.getSelection();\n if (!sel || sel.isCollapsed) {\n setPopover(null);\n return;\n }\n const text = sel.toString().trim();\n if (!text) {\n setPopover(null);\n return;\n }\n if (!docRef.current?.contains(sel.anchorNode)) return;\n const rect = sel.getRangeAt(0).getBoundingClientRect();\n setPopover({\n x: rect.right + window.scrollX,\n y: rect.top + window.scrollY,\n excerpt: text,\n });\n }, []);\n\n useEffect(() => {\n const handler = () => setTimeout(refreshPopover, 0);\n document.addEventListener(\"mouseup\", handler);\n document.addEventListener(\"selectionchange\", handler);\n return () => {\n document.removeEventListener(\"mouseup\", handler);\n document.removeEventListener(\"selectionchange\", handler);\n };\n }, [refreshPopover]);\n\n const isPrintable = (e: KeyboardEvent) =>\n e.key.length === 1 && !e.metaKey && !e.ctrlKey && !e.altKey;\n\n const addAnnotation = useCallback(\n (excerpt: string, kind: \"comment\" | \"deletion\" = \"comment\", seedChar = \"\") => {\n const id = `a-${Date.now()}-${Math.floor(Math.random() * 1e6)}`;\n setAnnotations((a) => [...a, { id, excerpt, comment: seedChar, kind }]);\n // Remember which row to focus when the Comments tab in the canvas DetailSidebar\n // is opened next.\n if (kind === \"comment\") setFocusOnId(id);\n setPopover(null);\n window.getSelection()?.removeAllRanges();\n },\n [],\n );\n\n // Open the inline composer on the FIRST keystroke after a text selection — no need to click\n // the Comment button first. The typed character seeds the composer textarea, which then takes\n // focus so the rest of the comment types in normally.\n useEffect(() => {\n const onKeyDown = (e: KeyboardEvent) => {\n const sel = window.getSelection();\n if (!sel || sel.isCollapsed) return;\n const text = sel.toString().trim();\n if (!text) return;\n if (!docRef.current?.contains(sel.anchorNode)) return;\n const ae = document.activeElement as HTMLElement | null;\n if (ae && /^(TEXTAREA|INPUT)$/.test(ae.tagName)) return;\n if (!isPrintable(e)) return;\n e.preventDefault();\n const rect = sel.getRangeAt(0).getBoundingClientRect();\n setComposer({\n x: rect.right + window.scrollX,\n y: rect.top + window.scrollY,\n excerpt: text,\n seed: e.key,\n });\n setPopover(null);\n window.getSelection()?.removeAllRanges();\n };\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, []);\n\n // Dismiss the overall-feedback popover on Escape or a click outside it. The pill's toggle\n // button lives in a different component, so it's tagged data-overall-toggle and excluded\n // here — otherwise its own click would close-then-reopen and the toggle would never close.\n useEffect(() => {\n if (!globalOpen) return;\n const onDocMouseDown = (e: MouseEvent) => {\n const t = e.target as HTMLElement | null;\n if (!t) return;\n if (globalPopoverRef.current?.contains(t)) return;\n if (t.closest(\"[data-overall-toggle]\")) return;\n setGlobalOpen(false);\n };\n const onEsc = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") setGlobalOpen(false);\n };\n document.addEventListener(\"mousedown\", onDocMouseDown);\n document.addEventListener(\"keydown\", onEsc);\n return () => {\n document.removeEventListener(\"mousedown\", onDocMouseDown);\n document.removeEventListener(\"keydown\", onEsc);\n };\n }, [globalOpen]);\n\n const updateComment = (id: string, comment: string) =>\n setAnnotations((a) => a.map((x) => (x.id === id ? { ...x, comment } : x)));\n\n const removeAnnotation = (id: string) =>\n setAnnotations((a) => a.filter((x) => x.id !== id));\n\n // Drop every unsubmitted comment + the overall note, locally and on the server, so the parent's\n // \"Clear to approve\" unblocks Approve in one click. The PUT autosave is keyed on the same state,\n // so clearing here also persists the empty set; the explicit DELETE makes it immediate.\n const clearAll = () => {\n setAnnotations([]);\n setGlobalComment(\"\");\n setGlobalOpen(false);\n void fetch(\"/api/plan/annotations\", {\n method: \"DELETE\",\n headers: wsHeaders(currentPlanWs()),\n }).catch(() => {});\n };\n\n const onSubmit = async () => {\n if (submitting) return;\n setSubmitting(true);\n try {\n const extra = getExtraSubmitPayload?.() ?? {};\n const res = await fetch(\"/api/plan/annotations\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\", ...wsHeaders(currentPlanWs()) },\n body: JSON.stringify({ annotations, globalComment, ...extra }),\n });\n if (res.ok) setSubmitted(true);\n } finally {\n setSubmitting(false);\n }\n };\n\n const liveCount = useMemo(\n () =>\n annotations.filter(\n (a) => a.kind === \"deletion\" || a.comment.trim(),\n ).length + (globalComment.trim() ? 1 : 0),\n [annotations, globalComment],\n );\n\n // Lift submit handler + counts + annotation list + handlers so the parent's verdict\n // pill can render the controls and so the canvas DetailSidebar's Comments tab can\n // render the annotation list.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n onApi?.({\n liveCount,\n submitting,\n submitted,\n submit: () => void onSubmit(),\n clearAll,\n annotationCount: annotations.length,\n hasGlobalComment: !!globalComment.trim(),\n globalOpen,\n toggleOverall: () => setGlobalOpen((b) => !b),\n annotations,\n updateComment,\n removeAnnotation,\n focusOnAnnotation: (id: string) => setFocusOnId(id),\n addComment: (excerpt: string) => addAnnotation(excerpt, \"comment\"),\n });\n }, [liveCount, submitting, submitted, annotations, globalComment, globalOpen]);\n\n return (\n <div className=\"flex h-full min-h-0 flex-col\">\n {/* No toolbar — the Comments / Overall / Submit / Approve / Discard controls all\n live in the floating Plan pill at top-right. Hidden helpers below render the\n Submit button only when this panel is used standalone (hideSubmit=false) and the\n Overall feedback popover anchored where the toggle would have been. */}\n <div className=\"relative shrink-0\">\n <div className=\"absolute right-3 top-2 z-30 flex items-center gap-1\">\n {!hideSubmit && (\n <button\n onClick={() => void onSubmit()}\n disabled={submitting || liveCount === 0}\n className={cn(\n \"flex items-center gap-1 rounded-md border px-2 py-1 text-[11px] font-semibold transition-colors\",\n submitted\n ? \"border-emerald-500/40 bg-emerald-500/15 text-emerald-300\"\n : liveCount === 0\n ? \"border-white/10 text-muted-foreground opacity-50\"\n : \"border-sky-500/40 bg-sky-500/15 text-sky-300 hover:bg-sky-500/25\",\n )}\n title={\n submitted\n ? \"Submitted — your terminal session is reading the feedback\"\n : \"Submit all feedback so the agent can revise the plan\"\n }\n >\n {submitted ? <Check className=\"size-3\" /> : <Send className=\"size-3\" />}\n {submitted ? \"Submitted\" : \"Submit feedback\"}\n </button>\n )}\n {globalOpen && (\n <div\n ref={globalPopoverRef}\n className=\"absolute right-0 top-[calc(100%+6px)] z-50 w-[320px] rounded-md border border-white/10 bg-card p-2 shadow-xl\"\n >\n <div className=\"mb-1 flex items-center justify-between\">\n <span className=\"text-[10px] font-semibold uppercase tracking-wide text-muted-foreground\">\n Overall feedback\n </span>\n <button\n onClick={() => setGlobalOpen(false)}\n title=\"Close (Esc)\"\n className=\"rounded p-0.5 text-muted-foreground hover:text-foreground\"\n >\n <X className=\"size-3\" />\n </button>\n </div>\n <textarea\n autoFocus\n value={globalComment}\n onChange={(e) => setGlobalComment(e.target.value)}\n onKeyDown={(e) => {\n e.stopPropagation();\n if (e.key === \"Enter\" && e.shiftKey) {\n e.preventDefault();\n if (!submitting && liveCount > 0) {\n void onSubmit();\n setGlobalOpen(false);\n }\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n setGlobalOpen(false);\n }\n }}\n placeholder=\"Plan-level notes — e.g. 'split this into two phases' or 'wrong abstraction'…\"\n rows={4}\n className=\"w-full resize-y rounded border border-white/5 bg-background px-2 py-1.5 text-[12px] leading-snug outline-none focus:border-sky-400/40\"\n />\n <div className=\"mt-1 text-right text-[9px] text-muted-foreground/70\">\n Shift+Enter to submit · Esc to close\n </div>\n </div>\n )}\n </div>\n </div>\n\n <div\n ref={docRef}\n className=\"min-h-0 flex-1 overflow-y-auto px-5 pb-5 pt-16 text-[15px] leading-[1.6] selection:bg-[var(--accent-2,#ff7a45)]/30\"\n >\n <RenderedMarkdown\n markdown={markdown}\n annotations={annotations}\n focusOnId={focusOnId}\n onClearFocus={() => setFocusOnId(null)}\n onUpdate={updateComment}\n onRemove={removeAnnotation}\n />\n </div>\n\n {popover && (\n <div\n style={{\n position: \"fixed\",\n left: popover.x + 4,\n top: popover.y - 30,\n zIndex: 60,\n }}\n className=\"flex items-center gap-0.5 rounded-md border border-white/15 bg-card/95 p-0.5 shadow-lg backdrop-blur\"\n >\n <button\n onClick={() => {\n setComposer({ ...popover, seed: \"\" });\n setPopover(null);\n window.getSelection()?.removeAllRanges();\n }}\n title=\"Comment on this text\"\n className=\"rounded p-1 text-sky-300 hover:bg-sky-500/15\"\n >\n <MessageSquarePlus className=\"size-3.5\" />\n </button>\n <button\n onClick={() => addAnnotation(popover.excerpt, \"deletion\")}\n title=\"Mark this for deletion\"\n className=\"rounded p-1 text-red-300 hover:bg-red-500/15\"\n >\n <Strikethrough className=\"size-3.5\" />\n </button>\n </div>\n )}\n\n {/* Inline comment composer — type the comment right where you selected. On confirm it's\n saved and shows in the side-panel Comments list. */}\n {composer && (\n <InlineComposer\n excerpt={composer.excerpt}\n x={composer.x}\n y={composer.y}\n seed={composer.seed}\n onConfirm={(comment) => {\n addAnnotation(composer.excerpt, \"comment\", comment);\n setComposer(null);\n }}\n onCancel={() => setComposer(null)}\n />\n )}\n\n {/* Standalone Comments side panel removed — Comments now lives as a tab inside\n the canvas DetailSidebar (rendered by plan-workspace). */}\n </div>\n );\n}\n\n// Floating textarea anchored at the selection. Enter saves, Esc/empty-blur cancels.\nfunction InlineComposer({\n excerpt,\n x,\n y,\n seed,\n onConfirm,\n onCancel,\n}: {\n excerpt: string;\n x: number;\n y: number;\n seed: string;\n onConfirm: (comment: string) => void;\n onCancel: () => void;\n}) {\n const [value, setValue] = useState(seed);\n return (\n <div\n style={{ position: \"fixed\", left: x + 4, top: y - 6, zIndex: 60 }}\n className=\"w-64 rounded-md border border-white/15 bg-card/95 p-1.5 shadow-xl backdrop-blur\"\n >\n <div className=\"mb-1 line-clamp-1 text-[10px] text-muted-foreground\">“{excerpt}”</div>\n <textarea\n autoFocus\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onFocus={(e) => e.currentTarget.setSelectionRange(value.length, value.length)}\n placeholder=\"Comment… (Enter to save · Esc to cancel)\"\n onKeyDown={(e) => {\n e.stopPropagation();\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n if (value.trim()) onConfirm(value.trim());\n else onCancel();\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n onCancel();\n }\n }}\n onBlur={() => (value.trim() ? onConfirm(value.trim()) : onCancel())}\n className=\"h-16 w-full resize-none rounded bg-white/[0.05] px-1.5 py-1 text-xs outline-none placeholder:text-muted-foreground/50 focus:bg-white/[0.08]\"\n />\n </div>\n );\n}\n\n// Reusable Comments list used by the canvas DetailSidebar's Comments tab. Keeps the\n// rendering co-located with AnnotationPanel so the markup stays in sync.\nexport function CommentsList({\n annotations,\n updateComment,\n removeAnnotation,\n focusOnAnnotation,\n onClose,\n}: {\n annotations: TextAnnotation[];\n updateComment: (id: string, comment: string) => void;\n removeAnnotation: (id: string) => void;\n focusOnAnnotation: (id: string) => void;\n onClose?: () => void;\n}) {\n if (annotations.length === 0) {\n return (\n <div className=\"rounded-lg border border-dashed border-white/10 px-3 py-6 text-center text-[11px] text-muted-foreground\">\n Highlight any text in the plan to leave an inline comment.\n </div>\n );\n }\n return (\n <ul className=\"space-y-1.5\">\n {annotations.map((a) => (\n <li\n key={a.id}\n className={cn(\n \"group rounded-md border bg-background/30 px-2 py-1.5 transition-colors hover:bg-background/50\",\n a.kind === \"deletion\" ? \"border-red-500/25\" : \"border-sky-500/15\",\n )}\n >\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"min-w-0 flex-1\">\n <button\n type=\"button\"\n onClick={() => {\n focusOnAnnotation(a.id);\n onClose?.();\n }}\n title=\"Jump to this excerpt in the plan\"\n className={cn(\n \"block w-full truncate text-left text-[10.5px] font-mono\",\n a.kind === \"deletion\"\n ? \"text-red-300/90 line-through\"\n : \"text-foreground/80 hover:text-foreground\",\n )}\n >\n “{a.excerpt}”\n </button>\n {a.kind !== \"deletion\" && (\n <textarea\n value={a.comment}\n onChange={(e) => updateComment(a.id, e.target.value)}\n placeholder=\"Write your comment…\"\n rows={1}\n className=\"field-sizing-content mt-1 w-full resize-none bg-transparent text-[11px] leading-snug text-foreground/90 outline-none placeholder:text-muted-foreground/60 focus:text-foreground\"\n />\n )}\n </div>\n <button\n onClick={() => removeAnnotation(a.id)}\n title=\"Remove this annotation\"\n className=\"shrink-0 rounded p-1 text-muted-foreground/70 opacity-0 transition-opacity hover:bg-red-500/15 hover:text-red-300 group-hover:opacity-100\"\n >\n <Trash2 className=\"size-3\" />\n </button>\n </div>\n </li>\n ))}\n </ul>\n );\n}\n\n// Block parsing + the fenced-code renderer are shared with the history view — see\n// components/plan/markdown-view.tsx (splitBlocks / CodeBlock / Block).\n\nfunction RenderedMarkdown({\n markdown,\n annotations,\n focusOnId,\n onClearFocus,\n onUpdate,\n onRemove,\n}: {\n markdown: string;\n annotations: TextAnnotation[];\n focusOnId: string | null;\n onClearFocus: () => void;\n onUpdate: (id: string, comment: string) => void;\n onRemove: (id: string) => void;\n}) {\n const blocks = useMemo(() => splitBlocks(markdown), [markdown]);\n return (\n // Centered ~66ch measure: the comfortable reading column, applied in every layout (split,\n // expanded, and full-width no-board) so lines never run the full monitor width.\n <div className=\"mx-auto w-full max-w-[66ch] space-y-4\">\n {blocks.map((b, i) => (\n <RenderedBlock\n key={i}\n block={b}\n index={i}\n annotations={annotations}\n focusOnId={focusOnId}\n onClearFocus={onClearFocus}\n onUpdate={onUpdate}\n onRemove={onRemove}\n />\n ))}\n </div>\n );\n}\n\nfunction RenderedBlock({\n block,\n index,\n annotations,\n focusOnId,\n onClearFocus,\n onUpdate,\n onRemove,\n}: {\n block: Block;\n index: number;\n annotations: TextAnnotation[];\n focusOnId: string | null;\n onClearFocus: () => void;\n onUpdate: (id: string, comment: string) => void;\n onRemove: (id: string) => void;\n}) {\n // Fenced code renders verbatim (monospace, no inline */backtick parsing that would mangle\n // JSON) — and isn't run through the annotation matcher. Tables likewise render as a real\n // <table> (many inline cells) outside the annotation matcher.\n if (block.kind === \"code\") return <CodeBlock text={block.text} />;\n if (block.kind === \"table\") return <TableBlock block={block} />;\n const content = (\n <AnnotatedInline\n text={block.text}\n annotations={annotations}\n focusOnId={focusOnId}\n onClearFocus={onClearFocus}\n onUpdate={onUpdate}\n onRemove={onRemove}\n />\n );\n // Headings get a stable anchor id (keyed on block index) so the section TOC can scroll to\n // them. All block styling lives in the shared renderBlockShell so the panel and the history\n // view can't drift.\n const anchorId = isHeading(block.kind) ? planHeadingAnchor(index) : undefined;\n return <>{renderBlockShell(block, content, \"reading\", anchorId)}</>;\n}\n\nfunction AnnotatedInline({\n text,\n annotations,\n focusOnId,\n onClearFocus,\n onUpdate,\n onRemove,\n}: {\n text: string;\n annotations: TextAnnotation[];\n focusOnId: string | null;\n onClearFocus: () => void;\n onUpdate: (id: string, comment: string) => void;\n onRemove: (id: string) => void;\n}) {\n const matches = annotations\n .map((a) => ({ a, idx: text.indexOf(a.excerpt) }))\n .filter((m) => m.idx >= 0)\n .sort((x, y) => x.idx - y.idx);\n\n if (!matches.length) return <BasicInline text={text} />;\n\n const parts: React.ReactNode[] = [];\n let cursor = 0;\n for (const { a, idx } of matches) {\n if (idx < cursor) continue;\n if (idx > cursor) parts.push(<BasicInline key={`p-${cursor}`} text={text.slice(cursor, idx)} />);\n parts.push(\n <AnnotatedSpan\n key={a.id}\n annotation={a}\n autoFocus={focusOnId === a.id}\n onClearFocus={onClearFocus}\n onUpdate={onUpdate}\n onRemove={onRemove}\n />,\n );\n cursor = idx + a.excerpt.length;\n }\n if (cursor < text.length) parts.push(<BasicInline key={`p-tail`} text={text.slice(cursor)} />);\n return <>{parts}</>;\n}\n\nfunction AnnotatedSpan({\n annotation,\n autoFocus,\n onClearFocus,\n onUpdate,\n onRemove,\n}: {\n annotation: TextAnnotation;\n autoFocus: boolean;\n onClearFocus: () => void;\n onUpdate: (id: string, comment: string) => void;\n onRemove: (id: string) => void;\n}) {\n const taRef = useRef<HTMLTextAreaElement | null>(null);\n useEffect(() => {\n if (autoFocus && taRef.current) {\n taRef.current.focus();\n // Put cursor at end so the auto-typed first character flows naturally.\n const v = taRef.current.value;\n taRef.current.setSelectionRange(v.length, v.length);\n onClearFocus();\n }\n }, [autoFocus, onClearFocus]);\n\n const kind = annotation.kind ?? \"comment\";\n if (kind === \"deletion\") {\n return (\n <span className=\"relative inline\">\n <span className=\"rounded bg-red-500/15 px-0.5 text-red-200/90 line-through decoration-red-300/70 decoration-2\">\n <BasicInline text={annotation.excerpt} />\n </span>\n <button\n type=\"button\"\n onClick={() => onRemove(annotation.id)}\n title=\"Unmark\"\n className=\"ml-0.5 inline-flex translate-y-[-1px] items-center text-red-300/70 hover:text-red-300\"\n >\n <Trash2 className=\"size-3\" />\n </button>\n </span>\n );\n }\n\n // Inline comment textarea was removed — the comment editor now lives exclusively in\n // the right-side Comments panel. The highlighted span here just marks the excerpt so\n // the user can scroll back to it; the autoFocus effect above is a no-op now and the\n // unused refs are kept tiny.\n void taRef; void onUpdate;\n return (\n <span\n className=\"rounded bg-[var(--accent-2,#ff7a45)]/15 px-0.5\"\n data-annotation-id={annotation.id}\n >\n <BasicInline text={annotation.excerpt} />\n </span>\n );\n}\n\n// Inline markdown for non-annotated text runs — shares the one renderer with the history\n// view (handles `code`, **bold**, *emphasis*) so they can't drift apart.\nfunction BasicInline({ text }: { text: string }) {\n return <Inline text={text} />;\n}\n","\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useRouter } from \"next/navigation\";\nimport { Archive, ArrowLeft, Check, X, MapPinned, Database } from \"lucide-react\";\nimport { MarkdownView } from \"@/components/plan/markdown-view\";\nimport { planHref } from \"@/components/plan/use-plan-ws\";\nimport { cn } from \"@/lib/utils\";\nimport type { DraftDoc } from \"@/components/graph/db-types\";\nimport type { FeatureGraph } from \"@/lib/feature-design\";\n\ninterface HistoryItem {\n id: string;\n description: string;\n verdict: \"approved\" | \"discarded\";\n archivedAt: number;\n}\n\ninterface ArchivedPlan extends HistoryItem {\n markdown: string;\n globalComment?: string;\n draftDoc?: DraftDoc;\n featureGraph?: FeatureGraph;\n}\n\ntype Tab = \"markdown\" | \"map\" | \"db\";\n\n// When there's no pending plan, /plan becomes a history browser: list of past plans on\n// the left; selected plan's markdown and board snapshot on the right (tabbed). When the\n// user navigates here while a plan IS pending (via the Plans-list button), `pendingPlan`\n// renders a small back-link so they can return without losing the current proposal.\n\nexport function PlanHistoryView({ pendingPlan = false }: { pendingPlan?: boolean } = {}) {\n const router = useRouter();\n const [items, setItems] = useState<HistoryItem[]>([]);\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [selected, setSelected] = useState<ArchivedPlan | null>(null);\n const [tab, setTab] = useState<Tab>(\"markdown\");\n\n useEffect(() => {\n void (async () => {\n try {\n const res = await fetch(\"/api/plan/history\");\n if (!res.ok) return;\n const body = (await res.json()) as { items: HistoryItem[] };\n setItems(body.items);\n if (body.items.length && !selectedId) setSelectedId(body.items[0].id);\n } catch {\n /* ignore */\n }\n })();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (!selectedId) return;\n void (async () => {\n const res = await fetch(`/api/plan/history?id=${encodeURIComponent(selectedId)}`);\n if (!res.ok) return;\n setSelected((await res.json()) as ArchivedPlan);\n })();\n }, [selectedId]);\n\n const grouped = useMemo(() => groupByDate(items), [items]);\n\n const backToCurrent = pendingPlan ? (\n <button\n onClick={() => router.push(planHref())}\n className=\"glass pointer-events-auto fixed left-3 top-3 z-30 flex h-10 items-center gap-1.5 rounded-full px-3 text-[11px] font-semibold text-sky-300 transition-colors hover:bg-sky-500/15\"\n title=\"Return to the plan that's still pending review\"\n >\n <ArrowLeft className=\"size-3.5\" /> Back to current plan\n </button>\n ) : null;\n\n if (items.length === 0) {\n return (\n <>\n {backToCurrent}\n <div className=\"flex h-screen items-center justify-center px-6 pt-14 text-center\">\n <div className=\"max-w-md text-sm text-muted-foreground\">\n <Archive className=\"mx-auto mb-3 size-7 text-muted-foreground/40\" />\n <div className=\"mb-2 text-base font-semibold text-foreground\">No plans yet.</div>\n Ask the agent to propose a feature in your terminal session — it lands here via\n MCP and you can review + annotate on both sides. Past plans get archived to this\n page for browsing.\n </div>\n </div>\n </>\n );\n }\n\n return (\n // Full-bleed like /map and the pending-plan board: the floating top nav (fixed\n // top-3) overlays the page, so pt-14 pushes both columns below it instead of the\n // old solid header bars colliding with the nav.\n <div className=\"flex h-screen min-h-0 pt-14\">\n {backToCurrent}\n {/* Floating controls on the top-nav row (like /map's top-center tabs + the board's\n pills): plan-view tabs centered, verdict + date top-right, smaller. */}\n {selected && (\n <>\n <div className=\"glass pointer-events-auto fixed left-1/2 top-3 z-30 flex -translate-x-1/2 items-center gap-0.5 rounded-full p-1\">\n <TabBtn active={tab === \"markdown\"} onClick={() => setTab(\"markdown\")}>\n Plan\n </TabBtn>\n <TabBtn active={tab === \"map\"} onClick={() => setTab(\"map\")} icon={<MapPinned className=\"size-3\" />}>\n Features\n </TabBtn>\n <TabBtn active={tab === \"db\"} onClick={() => setTab(\"db\")} icon={<Database className=\"size-3\" />}>\n Schema\n </TabBtn>\n </div>\n <div className=\"glass pointer-events-auto fixed right-3 top-3 z-30 flex h-9 items-center gap-2 rounded-full px-3\">\n <span\n className={cn(\n \"rounded px-1.5 py-0.5 text-[9px] font-semibold uppercase tracking-wide\",\n selected.verdict === \"approved\"\n ? \"bg-emerald-500/15 text-emerald-300\"\n : \"bg-red-500/15 text-red-300\",\n )}\n >\n {selected.verdict}\n </span>\n <span className=\"text-[10px] text-muted-foreground\">\n {new Date(selected.archivedAt).toLocaleString()}\n </span>\n </div>\n </>\n )}\n <aside className=\"flex w-64 min-w-0 shrink-0 flex-col border-r border-white/5 bg-card/30\">\n <div className=\"border-b border-white/5 px-3 py-2 text-[10.5px] font-semibold uppercase tracking-wide text-muted-foreground\">\n Plan history · {items.length}\n </div>\n <ul className=\"min-h-0 flex-1 overflow-y-auto\">\n {grouped.map(([label, group]) => (\n <li key={label}>\n <div className=\"px-3 pb-1 pt-3 text-[9px] font-semibold uppercase tracking-widest text-muted-foreground/60\">\n {label}\n </div>\n <ul>\n {group.map((p) => (\n <li key={p.id}>\n <button\n onClick={() => setSelectedId(p.id)}\n className={cn(\n \"flex w-full items-start gap-1.5 px-3 py-1.5 text-left text-[12px] transition-colors\",\n selectedId === p.id\n ? \"bg-white/[0.06] text-foreground\"\n : \"text-muted-foreground hover:bg-white/[0.03] hover:text-foreground\",\n )}\n >\n <span\n className={cn(\n \"mt-0.5 inline-flex size-3.5 shrink-0 items-center justify-center rounded-full\",\n p.verdict === \"approved\"\n ? \"bg-emerald-500/15 text-emerald-300\"\n : \"bg-red-500/15 text-red-300\",\n )}\n title={p.verdict}\n >\n {p.verdict === \"approved\" ? <Check className=\"size-2.5\" /> : <X className=\"size-2.5\" />}\n </span>\n <span className=\"line-clamp-2\">{p.description}</span>\n </button>\n </li>\n ))}\n </ul>\n </li>\n ))}\n </ul>\n </aside>\n\n {selected ? (\n <section className=\"flex min-h-0 min-w-0 flex-1 flex-col\">\n <div className=\"min-h-0 flex-1 overflow-y-auto\">\n {tab === \"markdown\" && (\n <div className=\"px-5 py-4\">\n <MarkdownView markdown={selected.markdown} />\n {selected.markdown.replace(/^#[^\\n]*\\n?/, \"\").trim() === \"\" && (\n <p className=\"mt-2 text-[13px] text-muted-foreground\">\n {(selected.featureGraph?.features?.length ?? 0) === 0 &&\n (selected.draftDoc?.tables?.length ?? 0) === 0 &&\n (selected.draftDoc?.endpoints?.length ?? 0) === 0\n ? \"This plan was approved without a detailed write-up — no features or schema were attached either.\"\n : \"This plan has no written body. See the Features and Schema tabs for what it proposed.\"}\n </p>\n )}\n {selected.globalComment && (\n <div className=\"mt-4 rounded-lg border border-white/5 bg-card/40 p-3\">\n <div className=\"mb-1 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground\">\n Overall feedback\n </div>\n <div className=\"text-[12px] whitespace-pre-wrap\">{selected.globalComment}</div>\n </div>\n )}\n </div>\n )}\n {tab === \"map\" && (\n <ArchivedFeatures featureGraph={selected.featureGraph} />\n )}\n {tab === \"db\" && (\n <ArchivedSchema draftDoc={selected.draftDoc} />\n )}\n </div>\n </section>\n ) : (\n <section className=\"flex min-h-0 min-w-0 flex-1 items-center justify-center text-sm text-muted-foreground\">\n Select a plan on the left to view it.\n </section>\n )}\n </div>\n );\n}\n\nfunction TabBtn({\n active,\n onClick,\n icon,\n children,\n}: {\n active: boolean;\n onClick: () => void;\n icon?: React.ReactNode;\n children: React.ReactNode;\n}) {\n return (\n <button\n onClick={onClick}\n className={cn(\n \"flex items-center gap-1 rounded-md px-2 py-1 text-[11px] font-medium transition-colors\",\n active ? \"bg-white/10 text-foreground\" : \"text-muted-foreground hover:text-foreground\",\n )}\n >\n {icon}\n {children}\n </button>\n );\n}\n\n// Compact card view of the archived features — no React Flow needed for a frozen snapshot.\nfunction ArchivedFeatures({ featureGraph }: { featureGraph?: FeatureGraph }) {\n const features = featureGraph?.features ?? [];\n if (features.length === 0) {\n return (\n <div className=\"flex h-full items-center justify-center px-6 text-center text-sm text-muted-foreground\">\n No features were proposed in this plan.\n </div>\n );\n }\n return (\n <div className=\"grid gap-3 px-5 py-4 sm:grid-cols-2 lg:grid-cols-3\">\n {features.map((f, i) => (\n <div\n key={i}\n className=\"rounded-lg border border-sky-500/20 bg-card/50 p-3\"\n >\n <div className=\"mb-1.5 flex items-center gap-1.5\">\n <span className=\"rounded bg-sky-500/15 px-1.5 py-0.5 text-[9px] font-semibold uppercase tracking-wide text-sky-300\">\n feature\n </span>\n {f.cluster && (\n <span className=\"text-[10px] text-muted-foreground\">{f.cluster}</span>\n )}\n </div>\n <div className=\"text-sm font-semibold leading-tight\">{f.title}</div>\n {f.role && (\n <div className=\"mt-1 text-[11px] text-muted-foreground\">{f.role}</div>\n )}\n {f.plain && (\n <div className=\"mt-2 text-[12px] text-foreground/80\">{f.plain}</div>\n )}\n </div>\n ))}\n </div>\n );\n}\n\n// Compact card view of the archived tables + endpoints.\nfunction ArchivedSchema({ draftDoc }: { draftDoc?: DraftDoc }) {\n const tables = draftDoc?.tables ?? [];\n const endpoints = draftDoc?.endpoints ?? [];\n if (tables.length === 0 && endpoints.length === 0) {\n return (\n <div className=\"flex h-full items-center justify-center px-6 text-center text-sm text-muted-foreground\">\n No schema was proposed in this plan.\n </div>\n );\n }\n return (\n <div className=\"space-y-5 px-5 py-4\">\n {tables.length > 0 && (\n <section>\n <div className=\"mb-2 text-[10.5px] font-semibold uppercase tracking-wide text-muted-foreground\">\n Tables · {tables.length}\n </div>\n <div className=\"grid gap-3 sm:grid-cols-2 lg:grid-cols-3\">\n {tables.map((t) => (\n <div key={t.id} className=\"rounded-lg border border-white/5 bg-card/40 p-3\">\n <div className=\"mb-1 flex items-center gap-1.5\">\n <span className=\"font-mono text-[13px] font-semibold\">{t.name}</span>\n {t.domain && (\n <span className=\"text-[10px] text-muted-foreground\">{t.domain}</span>\n )}\n </div>\n {t.description && (\n <div className=\"mb-1.5 text-[11px] text-muted-foreground\">{t.description}</div>\n )}\n <ul className=\"space-y-0.5 text-[11px]\">\n {t.columns.map((c, i) => (\n <li key={i} className=\"flex items-baseline gap-1.5\">\n <code className=\"rounded bg-white/5 px-1 font-mono text-[11px]\">{c.name}</code>\n <span className=\"text-muted-foreground\">{c.type}</span>\n {c.isPk && <span className=\"text-amber-300/80 text-[9px]\">PK</span>}\n {c.isFk && <span className=\"text-sky-300/80 text-[9px]\">FK</span>}\n {!c.nullable && <span className=\"text-muted-foreground/60 text-[9px]\">NOT NULL</span>}\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </section>\n )}\n {endpoints.length > 0 && (\n <section>\n <div className=\"mb-2 text-[10.5px] font-semibold uppercase tracking-wide text-muted-foreground\">\n Endpoints · {endpoints.length}\n </div>\n <ul className=\"space-y-1.5\">\n {endpoints.map((e) => (\n <li\n key={e.id}\n className=\"flex items-center gap-2 rounded-md border border-white/5 bg-card/40 px-2.5 py-1.5 text-[12px]\"\n >\n <span className=\"rounded px-1.5 py-0.5 text-[10px] font-bold\" style={methodStyle(e.method)}>\n {e.method}\n </span>\n <span className=\"font-mono\">{e.path}</span>\n {e.description && (\n <span className=\"ml-2 text-[11px] text-muted-foreground\">{e.description}</span>\n )}\n </li>\n ))}\n </ul>\n </section>\n )}\n </div>\n );\n}\n\nconst METHOD_COLORS: Record<string, string> = {\n GET: \"#7bd389\",\n POST: \"#4ea1ff\",\n PUT: \"#ffb86b\",\n PATCH: \"#ffb86b\",\n DELETE: \"#ff3860\",\n};\nfunction methodStyle(m: string): React.CSSProperties {\n const c = METHOD_COLORS[m.toUpperCase()] ?? \"#8a8a8a\";\n return { background: `${c}22`, color: c };\n}\n\n// Bucket plans by date label so the sidebar reads chronologically.\nfunction groupByDate(items: HistoryItem[]): [string, HistoryItem[]][] {\n const buckets = new Map<string, HistoryItem[]>();\n for (const p of items) {\n const d = new Date(p.archivedAt);\n const label = d.toLocaleDateString(undefined, { weekday: \"short\", month: \"short\", day: \"numeric\" });\n if (!buckets.has(label)) buckets.set(label, []);\n buckets.get(label)!.push(p);\n }\n return Array.from(buckets.entries());\n}\n","\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport {\n splitBlocks,\n isHeading,\n headingLevel,\n planHeadingAnchor,\n stripInline,\n} from \"@/components/plan/markdown-view\";\n\n// Section navigator shown to the left of the markdown when it's the full width of the screen\n// (the user expanded it, or there's no board). Built from the plan's headings; clicking an\n// entry smooth-scrolls the prose to that heading and a scroll-spy keeps the current section\n// highlighted. The anchor ids (planHeadingAnchor) are the SAME ones AnnotationPanel stamps on\n// the heading elements, so both sides resolve to the same target.\n\ninterface TocItem {\n id: string;\n level: number;\n label: string;\n}\n\nexport function PlanToc({ markdown }: { markdown: string }) {\n const items = useMemo<TocItem[]>(\n () =>\n splitBlocks(markdown)\n .map((b, i) => ({ b, i }))\n .filter(({ b }) => isHeading(b.kind))\n .map(({ b, i }) => ({\n id: planHeadingAnchor(i),\n level: headingLevel(b.kind),\n label: stripInline(b.text),\n }))\n .filter((it) => it.label.length > 0),\n [markdown],\n );\n\n const [active, setActive] = useState<string | null>(null);\n\n // Scroll-spy: highlight the heading nearest the top of the viewport. The rootMargin biases\n // the \"active\" band toward the upper part of the scroll area so the highlight tracks reading.\n useEffect(() => {\n if (typeof IntersectionObserver === \"undefined\" || items.length === 0) return;\n const els = items\n .map((it) => document.getElementById(it.id))\n .filter((el): el is HTMLElement => el !== null);\n if (els.length === 0) return;\n const obs = new IntersectionObserver(\n (entries) => {\n const visible = entries\n .filter((e) => e.isIntersecting)\n .sort((a, b) => a.boundingClientRect.top - b.boundingClientRect.top);\n if (visible[0]) setActive(visible[0].target.id);\n },\n { rootMargin: \"-12% 0px -70% 0px\", threshold: 0 },\n );\n els.forEach((el) => obs.observe(el));\n return () => obs.disconnect();\n }, [items]);\n\n const jump = (id: string) => {\n const el = document.getElementById(id);\n if (!el) return;\n el.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n setActive(id);\n };\n\n return (\n <aside className=\"flex w-60 shrink-0 flex-col overflow-y-auto border-r border-white/5 bg-background pt-16\">\n <div className=\"px-4 pb-2 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground\">\n Sections\n </div>\n {items.length === 0 ? (\n <p className=\"px-4 text-[12px] text-muted-foreground/70\">\n No headings in this plan.\n </p>\n ) : (\n <nav className=\"space-y-0.5 px-2 pb-6\">\n {items.map((it) => (\n <button\n key={it.id}\n onClick={() => jump(it.id)}\n title={it.label}\n style={{ paddingLeft: `${0.5 + it.level * 0.75}rem` }}\n className={cn(\n \"block w-full truncate rounded py-1 pr-2 text-left text-[12px] leading-snug transition-colors\",\n active === it.id\n ? \"bg-white/10 font-medium text-foreground\"\n : \"text-muted-foreground hover:bg-white/[0.05] hover:text-foreground\",\n )}\n >\n {it.label}\n </button>\n ))}\n </nav>\n )}\n </aside>\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { Check, ShieldCheck } from \"lucide-react\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\";\nimport { Button } from \"@/components/ui/button\";\nimport { cn } from \"@/lib/utils\";\nimport { PERMISSION_MODE_OPTIONS, type PermissionMode } from \"@/lib/permission-modes\";\n\n// One-time prompt shown the first time the user approves a plan: pick which permission mode\n// Claude Code should drop into after approval. Saved globally (POST /api/preferences) so it's\n// never asked again; changeable later in Settings. On save, `onConfirmed` continues the\n// approval that triggered it.\nexport function PermissionModeSetup({\n open,\n onOpenChange,\n onConfirmed,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onConfirmed: () => void;\n}) {\n // Default to the most hands-off option — it's what most users reach for after approving.\n const [mode, setMode] = useState<PermissionMode>(\"bypassPermissions\");\n const [saving, setSaving] = useState(false);\n\n async function confirm() {\n setSaving(true);\n try {\n await fetch(\"/api/preferences\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ planApprovalMode: mode }),\n }).catch(() => {});\n onOpenChange(false);\n onConfirmed();\n } finally {\n setSaving(false);\n }\n }\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-w-lg\">\n <DialogHeader>\n <DialogTitle className=\"flex items-center gap-2\">\n <ShieldCheck className=\"size-4 text-emerald-400\" />\n After approving, the agent should…\n </DialogTitle>\n <DialogDescription>\n Pick the permission mode your terminal session enters when you approve a plan. We\n ask once and remember it for every project — change it anytime in Settings.\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"space-y-2 py-1\">\n {PERMISSION_MODE_OPTIONS.map((o) => (\n <button\n key={o.value}\n type=\"button\"\n onClick={() => setMode(o.value)}\n className={cn(\n \"flex w-full items-start gap-3 rounded-lg border p-3 text-left transition-colors\",\n mode === o.value\n ? \"border-emerald-500/50 bg-emerald-500/10\"\n : \"border-white/10 bg-white/[0.03] hover:bg-white/[0.06]\",\n )}\n >\n <span\n className={cn(\n \"mt-0.5 flex size-4 shrink-0 items-center justify-center rounded-full border\",\n mode === o.value ? \"border-emerald-400 bg-emerald-400/20\" : \"border-white/30\",\n )}\n >\n {mode === o.value && <Check className=\"size-3 text-emerald-300\" />}\n </span>\n <span className=\"min-w-0\">\n <span className=\"block text-sm font-medium text-foreground\">{o.label}</span>\n <span className=\"block text-xs text-muted-foreground\">{o.description}</span>\n </span>\n </button>\n ))}\n </div>\n\n <DialogFooter className=\"items-center justify-between gap-2 sm:justify-between\">\n <span className=\"text-xs text-muted-foreground\">You can change this later in Settings.</span>\n <Button onClick={confirm} disabled={saving} size=\"sm\">\n {saving ? \"Saving…\" : \"Save & approve\"}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M21 12a9 9 0 1 1-6.219-8.56', key: '13zald' }]];\n\n/**\n * @component @name LoaderCircle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/loader-circle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst LoaderCircle = createLucideIcon('loader-circle', __iconNode);\n\nexport default LoaderCircle;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm12 19-7-7 7-7', key: '1l729n' }],\n ['path', { d: 'M19 12H5', key: 'x3x0zl' }],\n];\n\n/**\n * @component @name ArrowLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/arrow-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowLeft = createLucideIcon('arrow-left', __iconNode);\n\nexport default ArrowLeft;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '20', height: '5', x: '2', y: '3', rx: '1', key: '1wp1u1' }],\n ['path', { d: 'M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8', key: '1s80jp' }],\n ['path', { d: 'M10 12h4', key: 'a56b0p' }],\n];\n\n/**\n * @component @name Archive\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/archive\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Archive = createLucideIcon('archive', __iconNode);\n\nexport default Archive;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z',\n key: '18887p',\n },\n ],\n];\n\n/**\n * @component @name MessageSquare\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/message-square\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst MessageSquare = createLucideIcon('message-square', __iconNode);\n\nexport default MessageSquare;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z',\n key: '1ffxy3',\n },\n ],\n ['path', { d: 'm21.854 2.147-10.94 10.939', key: '12cjpa' }],\n];\n\n/**\n * @component @name Send\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/send\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Send = createLucideIcon('send', __iconNode);\n\nexport default Send;\n"],"names":[],"mappings":"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AAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAC,KAAM,GACvB,CKvtBA,IAAM,CGZA,ADAA,CAAA,CAAA,EAAA,EAAA,OAAA,AFYY,EAAiB,CAAA,AGZ1B,ADAA,CFY0B,AEZ1B,ACAA,CDAA,ACAA,AHY0B,CEZ1B,ACAA,AHY0B,CAAA,AEZ1B,ACAA,CDAA,ACAA,AHY0B,CAAA,AGZ1B,ADAA,CCAA,ADAA,AFY0B,CGZ1B,ADAA,AFY0B,CAAA,AEZ1B,ACAA,CDAA,ACAA,AHY0B,CEZ1B,ACAA,AHY0B,CGZ1B,ADAA,CFYwC,AAf/C,CGGO,ADAA,AFYwC,AAf9C,CAAA,AAe8C,AEZxC,ACAA,AFHN,AFYH,CITS,AFHN,AFYH,ACZG,AEGM,AFYwC,CEZxC,ACAA,AHYwC,CGZxC,ADAA,AFYwC,CEZxC,ACAA,AHYwC,CAAA,AGZxC,ADAA,CFHE,AEGF,ACAA,AHYwC,CCftC,AEGF,ADAA,AFYwC,AAftC,AAAE,CCAA,ADe8C,AGZlD,ADAA,CFHO,AEGP,ACAA,AHYkD,ACf9C,CAAA,ACGJ,ACAA,AHHO,CCAH,ADAG,AEGP,ACAA,AJSH,CEZO,AFYP,ACZU,AGGP,ADAA,CCAA,ADAA,CAAA,ACAA,CAAA,ADAA,CAAA,ACAA,CAAA,ADAA,CAAA,ACAA,CDAA,ACAA,CDAA,ACAA,CDAA,ACAA,CAAA,ADAA,CCAA,ADAA,CCAA,ADAA,CCAA,ADAA,CFHyB,AGGzB,ADAA,CCAA,AJSY,AEZa,ADAA,AEGzB,CDHyB,ADAA,ADYb,AGTZ,ACAA,CDAA,ACAA,CHH8B,AGG9B,ADAA,CHS6B,AIT7B,ADAA,AFH8B,ACAA,CCG9B,ACAA,AHH8B,ADYD,AEZC,CCG9B,ACAA,CDAA,ACAA,CDAA,ACAA,CAAA,ADAA,CAAA,ACAA,CDAA,ACAA,CDAA,ACAA,CDAA,ACAA,CAAA,ADAA,AFFP,CEEO,ACAA,CDAA,ACAA,CDAA,ACAA,CDAA,ACAA,CDAA,ACAA,CDAA,ACAA,CDAA,ACAA,CDAA,ACAA,AHFE,CAAA,AEEF,ACAA,AFFE,CEEF,ADAA,CAAA,ACAA,CDAA,ACAA,CDAA,ACAA,CDAA,ACAA,CAAA,ADAA,C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","ignoreList":[5,6,7,8,9]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[91599,a=>{"use strict";let b=null;async function c(){return b||(b=(async()=>{let{pipeline:b}=await a.A(46128);return await b("feature-extraction","Xenova/all-MiniLM-L6-v2")})().catch(a=>{throw b=null,a})),b}async function d(a){let b=a.trim();if(!b)return null;try{let a=await c(),d=await a(b,{pooling:"mean",normalize:!0});return Array.from(d.data)}catch(a){return console.error("[embeddings] failed:",a instanceof Error?a.message:a),null}}async function e(b){try{let{db:c}=await a.A(50745),{node:e}=await a.A(4345),{eq:f}=await a.A(91483),g=await c.query.node.findFirst({where:(a,{eq:c})=>c(a.id,b),columns:{title:!0,role:!0,plain:!0,cluster:!0}});if(!g)return;let h=await d([g.title,g.role,g.plain,g.cluster].filter(Boolean).join(". "));if(!h)return;await c.update(e).set({embedding:JSON.stringify(h)}).where(f(e.id,b))}catch(a){console.error("[embeddings] reembed failed:",b,a instanceof Error?a.message:a)}}a.s(["reembedNode",0,e])},54082,a=>{"use strict";function b(a,b,c,d){if(isNaN(b)||isNaN(c))return a;var e,f,g,h,i,j,k,l,m,n=a._root,o={data:d},p=a._x0,q=a._y0,r=a._x1,s=a._y1;if(!n)return a._root=o,a;for(;n.length;)if((j=b>=(f=(p+r)/2))?p=f:r=f,(k=c>=(g=(q+s)/2))?q=g:s=g,e=n,!(n=n[l=k<<1|j]))return e[l]=o,a;if(h=+a._x.call(null,n.data),i=+a._y.call(null,n.data),b===h&&c===i)return o.next=n,e?e[l]=o:a._root=o,a;do e=e?e[l]=[,,,,]:a._root=[,,,,],(j=b>=(f=(p+r)/2))?p=f:r=f,(k=c>=(g=(q+s)/2))?q=g:s=g;while((l=k<<1|j)==(m=(i>=g)<<1|h>=f))return e[m]=n,e[l]=o,a}function c(a,b,c,d,e){this.node=a,this.x0=b,this.y0=c,this.x1=d,this.y1=e}function d(a){return a[0]}function e(a){return a[1]}function f(a,b,c){var f=new g(null==b?d:b,null==c?e:c,NaN,NaN,NaN,NaN);return null==a?f:f.addAll(a)}function g(a,b,c,d,e,f){this._x=a,this._y=b,this._x0=c,this._y0=d,this._x1=e,this._y1=f,this._root=void 0}function h(a){for(var b={data:a.data},c=b;a=a.next;)c=c.next={data:a.data};return b}var i=f.prototype=g.prototype;function j(a){return function(){return a}}function k(a){return(a()-.5)*1e-6}function l(a){return a.x+a.vx}function m(a){return a.y+a.vy}function n(a){return a.index}function o(a,b){var c=a.get(b);if(!c)throw Error("node not found: "+b);return c}i.copy=function(){var a,b,c=new g(this._x,this._y,this._x0,this._y0,this._x1,this._y1),d=this._root;if(!d)return c;if(!d.length)return c._root=h(d),c;for(a=[{source:d,target:c._root=[,,,,]}];d=a.pop();)for(var e=0;e<4;++e)(b=d.source[e])&&(b.length?a.push({source:b,target:d.target[e]=[,,,,]}):d.target[e]=h(b));return c},i.add=function(a){let c=+this._x.call(null,a),d=+this._y.call(null,a);return b(this.cover(c,d),c,d,a)},i.addAll=function(a){var c,d,e,f,g=a.length,h=Array(g),i=Array(g),j=1/0,k=1/0,l=-1/0,m=-1/0;for(d=0;d<g;++d)!(isNaN(e=+this._x.call(null,c=a[d]))||isNaN(f=+this._y.call(null,c)))&&(h[d]=e,i[d]=f,e<j&&(j=e),e>l&&(l=e),f<k&&(k=f),f>m&&(m=f));if(j>l||k>m)return this;for(this.cover(j,k).cover(l,m),d=0;d<g;++d)b(this,h[d],i[d],a[d]);return this},i.cover=function(a,b){if(isNaN(a*=1)||isNaN(b*=1))return this;var c=this._x0,d=this._y0,e=this._x1,f=this._y1;if(isNaN(c))e=(c=Math.floor(a))+1,f=(d=Math.floor(b))+1;else{for(var g,h,i=e-c||1,j=this._root;c>a||a>=e||d>b||b>=f;)switch(h=(b<d)<<1|a<c,(g=[,,,,])[h]=j,j=g,i*=2,h){case 0:e=c+i,f=d+i;break;case 1:c=e-i,f=d+i;break;case 2:e=c+i,d=f-i;break;case 3:c=e-i,d=f-i}this._root&&this._root.length&&(this._root=j)}return this._x0=c,this._y0=d,this._x1=e,this._y1=f,this},i.data=function(){var a=[];return this.visit(function(b){if(!b.length)do a.push(b.data);while(b=b.next)}),a},i.extent=function(a){return arguments.length?this.cover(+a[0][0],+a[0][1]).cover(+a[1][0],+a[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]},i.find=function(a,b,d){var e,f,g,h,i,j,k,l=this._x0,m=this._y0,n=this._x1,o=this._y1,p=[],q=this._root;for(q&&p.push(new c(q,l,m,n,o)),null==d?d=1/0:(l=a-d,m=b-d,n=a+d,o=b+d,d*=d);j=p.pop();)if((q=j.node)&&!((f=j.x0)>n)&&!((g=j.y0)>o)&&!((h=j.x1)<l)&&!((i=j.y1)<m))if(q.length){var r=(f+h)/2,s=(g+i)/2;p.push(new c(q[3],r,s,h,i),new c(q[2],f,s,r,i),new c(q[1],r,g,h,s),new c(q[0],f,g,r,s)),(k=(b>=s)<<1|a>=r)&&(j=p[p.length-1],p[p.length-1]=p[p.length-1-k],p[p.length-1-k]=j)}else{var t=a-this._x.call(null,q.data),u=b-this._y.call(null,q.data),v=t*t+u*u;if(v<d){var w=Math.sqrt(d=v);l=a-w,m=b-w,n=a+w,o=b+w,e=q.data}}return e},i.remove=function(a){if(isNaN(f=+this._x.call(null,a))||isNaN(g=+this._y.call(null,a)))return this;var b,c,d,e,f,g,h,i,j,k,l,m,n=this._root,o=this._x0,p=this._y0,q=this._x1,r=this._y1;if(!n)return this;if(n.length)for(;;){if((j=f>=(h=(o+q)/2))?o=h:q=h,(k=g>=(i=(p+r)/2))?p=i:r=i,b=n,!(n=n[l=k<<1|j]))return this;if(!n.length)break;(b[l+1&3]||b[l+2&3]||b[l+3&3])&&(c=b,m=l)}for(;n.data!==a;)if(d=n,!(n=n.next))return this;return((e=n.next)&&delete n.next,d)?e?d.next=e:delete d.next:b?(e?b[l]=e:delete b[l],(n=b[0]||b[1]||b[2]||b[3])&&n===(b[3]||b[2]||b[1]||b[0])&&!n.length&&(c?c[m]=n:this._root=n)):this._root=e,this},i.removeAll=function(a){for(var b=0,c=a.length;b<c;++b)this.remove(a[b]);return this},i.root=function(){return this._root},i.size=function(){var a=0;return this.visit(function(b){if(!b.length)do++a;while(b=b.next)}),a},i.visit=function(a){var b,d,e,f,g,h,i=[],j=this._root;for(j&&i.push(new c(j,this._x0,this._y0,this._x1,this._y1));b=i.pop();)if(!a(j=b.node,e=b.x0,f=b.y0,g=b.x1,h=b.y1)&&j.length){var k=(e+g)/2,l=(f+h)/2;(d=j[3])&&i.push(new c(d,k,l,g,h)),(d=j[2])&&i.push(new c(d,e,l,k,h)),(d=j[1])&&i.push(new c(d,k,f,g,l)),(d=j[0])&&i.push(new c(d,e,f,k,l))}return this},i.visitAfter=function(a){var b,d=[],e=[];for(this._root&&d.push(new c(this._root,this._x0,this._y0,this._x1,this._y1));b=d.pop();){var f=b.node;if(f.length){var g,h=b.x0,i=b.y0,j=b.x1,k=b.y1,l=(h+j)/2,m=(i+k)/2;(g=f[0])&&d.push(new c(g,h,i,l,m)),(g=f[1])&&d.push(new c(g,l,i,j,m)),(g=f[2])&&d.push(new c(g,h,m,l,k)),(g=f[3])&&d.push(new c(g,l,m,j,k))}e.push(b)}for(;b=e.pop();)a(b.node,b.x0,b.y0,b.x1,b.y1);return this},i.x=function(a){return arguments.length?(this._x=a,this):this._x},i.y=function(a){return arguments.length?(this._y=a,this):this._y};var p={value:()=>{}};function q(){for(var a,b=0,c=arguments.length,d={};b<c;++b){if(!(a=arguments[b]+"")||a in d||/[\s.]/.test(a))throw Error("illegal type: "+a);d[a]=[]}return new r(d)}function r(a){this._=a}function s(a,b,c){for(var d=0,e=a.length;d<e;++d)if(a[d].name===b){a[d]=p,a=a.slice(0,d).concat(a.slice(d+1));break}return null!=c&&a.push({name:b,value:c}),a}r.prototype=q.prototype={constructor:r,on:function(a,b){var c,d=this._,e=(a+"").trim().split(/^|\s+/).map(function(a){var b="",c=a.indexOf(".");if(c>=0&&(b=a.slice(c+1),a=a.slice(0,c)),a&&!d.hasOwnProperty(a))throw Error("unknown type: "+a);return{type:a,name:b}}),f=-1,g=e.length;if(arguments.length<2){for(;++f<g;)if((c=(a=e[f]).type)&&(c=function(a,b){for(var c,d=0,e=a.length;d<e;++d)if((c=a[d]).name===b)return c.value}(d[c],a.name)))return c;return}if(null!=b&&"function"!=typeof b)throw Error("invalid callback: "+b);for(;++f<g;)if(c=(a=e[f]).type)d[c]=s(d[c],a.name,b);else if(null==b)for(c in d)d[c]=s(d[c],a.name,null);return this},copy:function(){var a={},b=this._;for(var c in b)a[c]=b[c].slice();return new r(a)},call:function(a,b){if((c=arguments.length-2)>0)for(var c,d,e=Array(c),f=0;f<c;++f)e[f]=arguments[f+2];if(!this._.hasOwnProperty(a))throw Error("unknown type: "+a);for(d=this._[a],f=0,c=d.length;f<c;++f)d[f].value.apply(b,e)},apply:function(a,b,c){if(!this._.hasOwnProperty(a))throw Error("unknown type: "+a);for(var d=this._[a],e=0,f=d.length;e<f;++e)d[e].value.apply(b,c)}};var t,u,v=0,w=0,x=0,y=0,z=0,A=0,B="object"==typeof performance&&performance.now?performance:Date,C=function(a){setTimeout(a,17)};function D(){return z||(C(E),z=B.now()+A)}function E(){z=0}function F(){this._call=this._time=this._next=null}function G(a,b,c){var d=new F;return d.restart(a,b,c),d}function H(){z=(y=B.now())+A,v=w=0;try{D(),++v;for(var a,b=t;b;)(a=z-b._time)>=0&&b._call.call(void 0,a),b=b._next;--v}finally{v=0,function(){for(var a,b,c=t,d=1/0;c;)c._call?(d>c._time&&(d=c._time),a=c,c=c._next):(b=c._next,c._next=null,c=a?a._next=b:t=b);u=a,J(d)}(),z=0}}function I(){var a=B.now(),b=a-y;b>1e3&&(A-=b,y=a)}function J(a){!v&&(w&&(w=clearTimeout(w)),a-z>24?(a<1/0&&(w=setTimeout(H,a-B.now()-A)),x&&(x=clearInterval(x))):(x||(y=B.now(),x=setInterval(I,1e3)),v=1,C(H)))}function K(a){return a.x}function L(a){return a.y}F.prototype=G.prototype={constructor:F,restart:function(a,b,c){if("function"!=typeof a)throw TypeError("callback is not a function");c=(null==c?D():+c)+(null==b?0:+b),this._next||u===this||(u?u._next=this:t=this,u=this),this._call=a,this._time=c,J()},stop:function(){this._call&&(this._call=null,this._time=1/0,J())}};var M=Math.PI*(3-Math.sqrt(5));a.s(["forceLayoutRoadmap",0,function(a,b,c={}){let d,e=c.linkDistance??210,g=c.charge??-450,h=c.collideRadius??132,i=c.ticks??500,p=[...a].sort((a,b)=>a.id<b.id?-1:+(a.id>b.id)),r=new Set(p.map(a=>a.id)),s=p.map(a=>({id:a.id})),t=[];for(let a of b)a.fromId!==a.toId&&r.has(a.fromId)&&r.has(a.toId)&&t.push({source:a.fromId,target:a.toId});for(let a of p)a.parentId&&r.has(a.parentId)&&t.push({source:a.id,target:a.parentId});let u=(function(a){let b;var c,d=1,e=.001,f=1-Math.pow(.001,1/300),g=0,h=.6,i=new Map,j=G(m),k=q("tick","end"),l=(b=1,()=>(b=(1664525*b+0x3c6ef35f)%0x100000000)/0x100000000);function m(){n(),k.call("tick",c),d<e&&(j.stop(),k.call("end",c))}function n(b){var e,j,k=a.length;void 0===b&&(b=1);for(var l=0;l<b;++l)for(d+=(g-d)*f,i.forEach(function(a){a(d)}),e=0;e<k;++e)null==(j=a[e]).fx?j.x+=j.vx*=h:(j.x=j.fx,j.vx=0),null==j.fy?j.y+=j.vy*=h:(j.y=j.fy,j.vy=0);return c}function o(){for(var b,c=0,d=a.length;c<d;++c){if((b=a[c]).index=c,null!=b.fx&&(b.x=b.fx),null!=b.fy&&(b.y=b.fy),isNaN(b.x)||isNaN(b.y)){var e=10*Math.sqrt(.5+c),f=c*M;b.x=e*Math.cos(f),b.y=e*Math.sin(f)}(isNaN(b.vx)||isNaN(b.vy))&&(b.vx=b.vy=0)}}function p(b){return b.initialize&&b.initialize(a,l),b}return null==a&&(a=[]),o(),c={tick:n,restart:function(){return j.restart(m),c},stop:function(){return j.stop(),c},nodes:function(b){return arguments.length?(a=b,o(),i.forEach(p),c):a},alpha:function(a){return arguments.length?(d=+a,c):d},alphaMin:function(a){return arguments.length?(e=+a,c):e},alphaDecay:function(a){return arguments.length?(f=+a,c):+f},alphaTarget:function(a){return arguments.length?(g=+a,c):g},velocityDecay:function(a){return arguments.length?(h=1-a,c):1-h},randomSource:function(a){return arguments.length?(l=a,i.forEach(p),c):l},force:function(a,b){return arguments.length>1?(null==b?i.delete(a):i.set(a,p(b)),c):i.get(a)},find:function(b,c,d){var e,f,g,h,i,j=0,k=a.length;for(null==d?d=1/0:d*=d,j=0;j<k;++j)(g=(e=b-(h=a[j]).x)*e+(f=c-h.y)*f)<d&&(i=h,d=g);return i},on:function(a,b){return arguments.length>1?(k.on(a,b),c):k.on(a)}}})(s).randomSource((d=0x9e3779b9,()=>{let a=d=d+0x6d2b79f5>>>0;return a=Math.imul(a^a>>>15,1|a),(((a^=a+Math.imul(a^a>>>7,61|a))^a>>>14)>>>0)/0x100000000})).force("link",(function(a){var b,c,d,e,f,g,h=n,i=function(a){return 1/Math.min(e[a.source.index],e[a.target.index])},l=j(30),m=1;function p(d){for(var e=0,h=a.length;e<m;++e)for(var i,j,l,n,o,p,q,r=0;r<h;++r)j=(i=a[r]).source,p=((p=Math.sqrt((n=(l=i.target).x+l.vx-j.x-j.vx||k(g))*n+(o=l.y+l.vy-j.y-j.vy||k(g))*o))-c[r])/p*d*b[r],n*=p,o*=p,l.vx-=n*(q=f[r]),l.vy-=o*q,j.vx+=n*(q=1-q),j.vy+=o*q}function q(){if(d){var g,i,j=d.length,k=a.length,l=new Map(d.map((a,b)=>[h(a,b,d),a]));for(g=0,e=Array(j);g<k;++g)(i=a[g]).index=g,"object"!=typeof i.source&&(i.source=o(l,i.source)),"object"!=typeof i.target&&(i.target=o(l,i.target)),e[i.source.index]=(e[i.source.index]||0)+1,e[i.target.index]=(e[i.target.index]||0)+1;for(g=0,f=Array(k);g<k;++g)i=a[g],f[g]=e[i.source.index]/(e[i.source.index]+e[i.target.index]);b=Array(k),r(),c=Array(k),s()}}function r(){if(d)for(var c=0,e=a.length;c<e;++c)b[c]=+i(a[c],c,a)}function s(){if(d)for(var b=0,e=a.length;b<e;++b)c[b]=+l(a[b],b,a)}return null==a&&(a=[]),p.initialize=function(a,b){d=a,g=b,q()},p.links=function(b){return arguments.length?(a=b,q(),p):a},p.id=function(a){return arguments.length?(h=a,p):h},p.iterations=function(a){return arguments.length?(m=+a,p):m},p.strength=function(a){return arguments.length?(i="function"==typeof a?a:j(+a),r(),p):i},p.distance=function(a){return arguments.length?(l="function"==typeof a?a:j(+a),s(),p):l},p})(t).id(a=>a.id).distance(e).strength(.6)).force("charge",(function(){var a,b,c,d,e,g=j(-30),h=1,i=1/0,l=.81;function m(c){var e,g=a.length,h=f(a,K,L).visitAfter(o);for(d=c,e=0;e<g;++e)b=a[e],h.visit(p)}function n(){if(a){var b,c,d=a.length;for(b=0,e=Array(d);b<d;++b)e[(c=a[b]).index]=+g(c,b,a)}}function o(a){var b,c,d,f,g,h=0,i=0;if(a.length){for(d=f=g=0;g<4;++g)(b=a[g])&&(c=Math.abs(b.value))&&(h+=b.value,i+=c,d+=c*b.x,f+=c*b.y);a.x=d/i,a.y=f/i}else{(b=a).x=b.data.x,b.y=b.data.y;do h+=e[b.data.index];while(b=b.next)}a.value=h}function p(a,f,g,j){if(!a.value)return!0;var m=a.x-b.x,n=a.y-b.y,o=j-f,p=m*m+n*n;if(o*o/l<p)return p<i&&(0===m&&(p+=(m=k(c))*m),0===n&&(p+=(n=k(c))*n),p<h&&(p=Math.sqrt(h*p)),b.vx+=m*a.value*d/p,b.vy+=n*a.value*d/p),!0;if(!a.length&&!(p>=i)){(a.data!==b||a.next)&&(0===m&&(p+=(m=k(c))*m),0===n&&(p+=(n=k(c))*n),p<h&&(p=Math.sqrt(h*p)));do a.data!==b&&(o=e[a.data.index]*d/p,b.vx+=m*o,b.vy+=n*o);while(a=a.next)}}return m.initialize=function(b,d){a=b,c=d,n()},m.strength=function(a){return arguments.length?(g="function"==typeof a?a:j(+a),n(),m):g},m.distanceMin=function(a){return arguments.length?(h=a*a,m):Math.sqrt(h)},m.distanceMax=function(a){return arguments.length?(i=a*a,m):Math.sqrt(i)},m.theta=function(a){return arguments.length?(l=a*a,m):Math.sqrt(l)},m})().strength(g).distanceMax(1200)).force("collide",(function(a){var b,c,d,e=1,g=1;function h(){for(var a,h,j,n,o,p,q,r=b.length,s=0;s<g;++s)for(a=0,h=f(b,l,m).visitAfter(i);a<r;++a)q=(p=c[(j=b[a]).index])*p,n=j.x+j.vx,o=j.y+j.vy,h.visit(t);function t(a,b,c,f,g){var h=a.data,i=a.r,l=p+i;if(h){if(h.index>j.index){var m=n-h.x-h.vx,r=o-h.y-h.vy,s=m*m+r*r;s<l*l&&(0===m&&(s+=(m=k(d))*m),0===r&&(s+=(r=k(d))*r),s=(l-(s=Math.sqrt(s)))/s*e,j.vx+=(m*=s)*(l=(i*=i)/(q+i)),j.vy+=(r*=s)*l,h.vx-=m*(l=1-l),h.vy-=r*l)}return}return b>n+l||f<n-l||c>o+l||g<o-l}}function i(a){if(a.data)return a.r=c[a.data.index];for(var b=a.r=0;b<4;++b)a[b]&&a[b].r>a.r&&(a.r=a[b].r)}function n(){if(b){var d,e,f=b.length;for(d=0,c=Array(f);d<f;++d)c[(e=b[d]).index]=+a(e,d,b)}}return"function"!=typeof a&&(a=j(null==a?1:+a)),h.initialize=function(a,c){b=a,d=c,n()},h.iterations=function(a){return arguments.length?(g=+a,h):g},h.strength=function(a){return arguments.length?(e=+a,h):e},h.radius=function(b){return arguments.length?(a="function"==typeof b?b:j(+b),n(),h):a},h})().radius(h).strength(1)).force("center",(function(a,b){var c,d=1;function e(){var e,f,g=c.length,h=0,i=0;for(e=0;e<g;++e)h+=(f=c[e]).x,i+=f.y;for(h=(h/g-a)*d,i=(i/g-b)*d,e=0;e<g;++e)f=c[e],f.x-=h,f.y-=i}return null==a&&(a=0),null==b&&(b=0),e.initialize=function(a){c=a},e.x=function(b){return arguments.length?(a=+b,e):a},e.y=function(a){return arguments.length?(b=+a,e):b},e.strength=function(a){return arguments.length?(d=+a,e):d},e})(0,0).strength(.08)).stop();for(let a=0;a<i;a++)u.tick();let v=new Map;for(let a of s)v.set(a.id,{x:Math.round(a.x??0),y:Math.round(a.y??0)});return v}],54082)},62265,a=>{"use strict";var b=a.i(2157),c=a.i(50227),d=a.i(13379),e=a.i(8674);function f(){return(0,c.join)((0,d.dataDir)(),"roadmap-layout-sig.json")}a.s(["readRoadmapLayoutSig",0,function(){try{return JSON.parse((0,b.readFileSync)(f(),"utf8")).sig??null}catch{return null}},"roadmapStructureSignature",0,function(a,b){let c=[...a].sort().join(","),d=b.map(a=>`${a.fromId}>${a.toId}`).sort().join(",");return`force-2|${a.length}|${c}|${d}`},"writeRoadmapLayoutSig",0,function(a){(0,e.writeJsonAtomic)(f(),{sig:a})}])},17083,a=>a.a(async(b,c)=>{try{var d=a.i(80384);a.i(17781);var e=b([d]);[d]=e.then?(await e)():e,a.s([]),c()}catch(a){c(a)}},!1),98106,a=>a.a(async(b,c)=>{try{a.s(["healRoadmapLayout",()=>o,"propagateStatusUp",()=>n]);var d=a.i(53112),e=a.i(93321),f=a.i(80384),g=a.i(17781),h=a.i(21106),i=a.i(54082),j=a.i(62265),k=a.i(56643);a.i(13379);var l=a.i(17083),m=b([f,h,k,l]);[f,h,k,l]=m.then?(await m)():m;let p=new Set(["DONE","CANCELLED","DEPRIORITIZED"]),q=new Set(["IN_PROGRESS","BLOCKED"]),r=new Set(["CANCELLED","DEPRIORITIZED"]);async function n(a){var b;let c=await f.db.query.node.findFirst({where:(b,{eq:c})=>c(b.id,a),columns:{parentId:!0,view:!0}});if(!c?.parentId||"ROADMAP"!==c.view)return;let d=await f.db.query.node.findFirst({where:(a,{eq:b})=>b(a.id,c.parentId),columns:{id:!0,status:!0,view:!0}});if(!d||"ROADMAP"!==d.view||r.has(d.status))return;let h=(b=(await f.db.query.node.findMany({where:(a,{eq:b})=>b(a.parentId,d.id),columns:{status:!0}})).map(a=>a.status)).length?b.every(a=>p.has(a))?"DONE":b.some(a=>q.has(a))?"IN_PROGRESS":"PENDING":"PENDING";d.status!==h&&(await f.db.update(g.node).set({status:h}).where((0,e.eq)(g.node.id,d.id)),await n(d.id))}async function o(){let a=(await f.db.query.node.findMany({where:(a,{eq:b})=>b(a.view,"ROADMAP"),columns:{id:!0,parentId:!0,source:!0,x:!0,y:!0}})).filter(a=>"DRAFT"!==a.source);if(a.length<2)return;let b=a.map(a=>a.id),c=await f.db.query.edge.findMany({where:(a,{and:c,eq:d})=>c(d(a.kind,"DEPENDS"),(0,e.inArray)(a.fromId,b),(0,e.inArray)(a.toId,b)),columns:{fromId:!0,toId:!0}}),d=(0,j.roadmapStructureSignature)(b,c);if((0,j.readRoadmapLayoutSig)()===d)return;let h=(0,i.forceLayoutRoadmap)(a.map(a=>({id:a.id,parentId:a.parentId})),c),k=[];for(let b of a){let a=h.get(b.id);a&&(Math.round(a.x)!==Math.round(b.x)||Math.round(a.y)!==Math.round(b.y))&&k.push(f.db.update(g.node).set({x:a.x,y:a.y}).where((0,e.eq)(g.node.id,b.id)))}await Promise.all(k),(0,j.writeRoadmapLayoutSig)(d)}d.z.object({title:d.z.string().trim().min(1),domain:d.z.string().trim().min(1),role:d.z.string().nullish(),plain:d.z.string().nullish(),status:d.z.string().nullish(),files:d.z.array(d.z.string()).optional(),depends:d.z.array(d.z.string()).optional()}),c()}catch(a){c(a)}},!1),21127,a=>{"use strict";var b=a.i(53112);let c=b.z.enum(["ROADMAP","ARCHITECTURE"]),d=b.z.enum(["PENDING","IN_PROGRESS","DONE","BLOCKED","CANCELLED","DEPRIORITIZED","KEEP","REBUILD","REPLACE","DROP"]);b.z.enum(["DEPENDS","CONTAINS","RELATES","REPLACES"]);let e=b.z.object({view:c,title:b.z.string().trim().min(1).max(200),cluster:b.z.string().trim().max(64).nullish(),role:b.z.string().trim().max(500).nullish(),plain:b.z.string().trim().max(2e3).nullish(),parentId:b.z.string().nullish(),status:d.optional(),priority:b.z.number().int().min(0).max(3).optional(),x:b.z.number().optional(),y:b.z.number().optional(),sourceRef:b.z.string().trim().max(300).nullish()}),f=b.z.object({title:b.z.string().trim().min(1).max(200).optional(),role:b.z.string().trim().max(500).nullish(),plain:b.z.string().trim().max(2e3).nullish(),cluster:b.z.string().trim().max(64).nullish(),status:d.optional(),priority:b.z.number().int().min(0).max(3).optional(),sourceRef:b.z.string().trim().max(300).nullish()});b.z.object({x:b.z.number(),y:b.z.number()}),b.z.object({fromId:b.z.string().min(1),toId:b.z.string().min(1),kind:b.z.enum(["DEPENDS","RELATES","REPLACES"]).optional(),label:b.z.string().trim().max(80).nullish(),sourceHandle:b.z.string().trim().max(16).nullish(),targetHandle:b.z.string().trim().max(16).nullish()}),a.s(["NODE_STATUS",0,d,"createNodeSchema",0,e,"updateNodeSchema",0,f])},56643,a=>a.a(async(b,c)=>{try{a.s(["cancelNode",()=>o,"createNode",()=>k,"deleteNode",()=>p,"deprioritizeNode",()=>n,"setNodeStatus",()=>m,"updateNode",()=>l]);var d=a.i(93321),e=a.i(80384),f=a.i(17781),g=a.i(91599),h=a.i(98106),i=a.i(21127),j=b([e,h]);[e,h]=j.then?(await j)():j;let q=new Set(["title","role","plain","cluster"]);async function k(a){let b=i.createNodeSchema.parse(a),c="ARCHITECTURE"===b.view?"REBUILD":"PENDING",[d]=await e.db.insert(f.node).values({view:b.view,title:b.title,cluster:b.cluster??null,role:b.role??null,plain:b.plain??null,parentId:b.parentId??null,status:b.status??c,priority:b.priority??2,x:b.x??0,y:b.y??0,sourceRef:b.sourceRef??null}).returning();return await (0,g.reembedNode)(d.id),d}async function l(a,b){let c=i.updateNodeSchema.parse(b),[j]=await e.db.update(f.node).set(c).where((0,d.eq)(f.node.id,a)).returning();return Object.keys(c).some(a=>q.has(a))&&await (0,g.reembedNode)(a),void 0!==c.status&&await (0,h.propagateStatusUp)(a),j}async function m(a,b){let c=i.NODE_STATUS.parse(b),[g]=await e.db.update(f.node).set({status:c}).where((0,d.eq)(f.node.id,a)).returning();return await (0,h.propagateStatusUp)(a),g}async function n(a){let[b]=await e.db.update(f.node).set({status:"DEPRIORITIZED",priority:3}).where((0,d.eq)(f.node.id,a)).returning();return await (0,h.propagateStatusUp)(a),b}async function o(a){let[b]=await e.db.update(f.node).set({status:"CANCELLED"}).where((0,d.eq)(f.node.id,a)).returning();return await (0,h.propagateStatusUp)(a),b}async function p(a){let[b]=await e.db.delete(f.node).where((0,d.eq)(f.node.id,a)).returning();return b}c()}catch(a){c(a)}},!1)];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=lib_13g58ln._.js.map
|