vibedoc 1.10.0 → 1.12.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 -1
- package/.next/app-path-routes-manifest.json +9 -1
- package/.next/build-manifest.json +3 -3
- package/.next/prerender-manifest.json +41 -13
- package/.next/routes-manifest.json +54 -6
- package/.next/server/app/(app)/activity/page.js.nft.json +1 -1
- package/.next/server/app/(app)/activity/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/board/page.js.nft.json +1 -1
- package/.next/server/app/(app)/board/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/chat/page.js.nft.json +1 -1
- package/.next/server/app/(app)/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/docs/page.js.nft.json +1 -1
- package/.next/server/app/(app)/docs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/explorer/page.js.nft.json +1 -1
- package/.next/server/app/(app)/explorer/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/graph/page/app-paths-manifest.json +3 -0
- package/.next/server/app/(app)/graph/page/build-manifest.json +20 -0
- package/.next/server/app/(app)/graph/page/next-font-manifest.json +11 -0
- package/.next/server/app/(app)/graph/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/(app)/graph/page.js +15 -0
- package/.next/server/app/(app)/graph/page.js.nft.json +1 -0
- package/.next/server/app/(app)/graph/page_client-reference-manifest.js +3 -0
- package/.next/server/app/(app)/manual-tests/page.js.nft.json +1 -1
- package/.next/server/app/(app)/manual-tests/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/memory/page.js.nft.json +1 -1
- package/.next/server/app/(app)/memory/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/roadmap/page.js.nft.json +1 -1
- package/.next/server/app/(app)/roadmap/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/settings/page.js.nft.json +1 -1
- package/.next/server/app/(app)/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/setup/page.js.nft.json +1 -1
- package/.next/server/app/(app)/setup/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/activity.html +1 -1
- package/.next/server/app/activity.rsc +8 -8
- package/.next/server/app/activity.segments/!KGFwcCk/activity/__PAGE__.segment.rsc +6 -6
- package/.next/server/app/activity.segments/_full.segment.rsc +8 -8
- package/.next/server/app/activity.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/activity/route.js +2 -2
- package/.next/server/app/api/activity/route.js.nft.json +1 -1
- package/.next/server/app/api/chat/route.js +2 -2
- package/.next/server/app/api/chat/route.js.nft.json +1 -1
- package/.next/server/app/api/context/route.js +2 -2
- package/.next/server/app/api/context/route.js.nft.json +1 -1
- package/.next/server/app/api/conversations/route.js +2 -2
- package/.next/server/app/api/conversations/route.js.nft.json +1 -1
- package/.next/server/app/api/decisions/route.js +2 -2
- package/.next/server/app/api/decisions/route.js.nft.json +1 -1
- package/.next/server/app/api/docs/graph/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/docs/graph/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/docs/graph/route.js +9 -0
- package/.next/server/app/api/docs/graph/route.js.map +5 -0
- package/.next/server/app/api/docs/graph/route.js.nft.json +1 -0
- package/.next/server/app/api/docs/graph/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/docs/links/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/docs/links/route/build-manifest.json +12 -0
- package/.next/server/app/api/docs/links/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/docs/links/route.js +9 -0
- package/.next/server/app/api/docs/links/route.js.map +5 -0
- package/.next/server/app/api/docs/links/route.js.nft.json +1 -0
- package/.next/server/app/api/docs/links/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/docs/route.js +2 -2
- package/.next/server/app/api/docs/route.js.nft.json +1 -1
- package/.next/server/app/api/explorer/route.js +2 -2
- package/.next/server/app/api/explorer/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/route.js +2 -2
- package/.next/server/app/api/mcp/route.js.nft.json +1 -1
- package/.next/server/app/api/memory/entries/delete/route.js +2 -2
- package/.next/server/app/api/memory/entries/delete/route.js.nft.json +1 -1
- package/.next/server/app/api/memory/entries/merge/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/memory/entries/merge/route/build-manifest.json +12 -0
- package/.next/server/app/api/memory/entries/merge/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/memory/entries/merge/route.js +9 -0
- package/.next/server/app/api/memory/entries/merge/route.js.map +5 -0
- package/.next/server/app/api/memory/entries/merge/route.js.nft.json +1 -0
- package/.next/server/app/api/memory/entries/merge/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/memory/entries/merge/undo/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/memory/entries/merge/undo/route/build-manifest.json +12 -0
- package/.next/server/app/api/memory/entries/merge/undo/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/memory/entries/merge/undo/route.js +9 -0
- package/.next/server/app/api/memory/entries/merge/undo/route.js.map +5 -0
- package/.next/server/app/api/memory/entries/merge/undo/route.js.nft.json +1 -0
- package/.next/server/app/api/memory/entries/merge/undo/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/memory/entries/restore/route.js +2 -2
- package/.next/server/app/api/memory/entries/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/memory/entries/route.js +2 -2
- package/.next/server/app/api/memory/entries/route.js.nft.json +1 -1
- package/.next/server/app/api/memory/entries/save/route.js +2 -2
- package/.next/server/app/api/memory/entries/save/route.js.nft.json +1 -1
- package/.next/server/app/api/memory/graph/route.js +2 -2
- package/.next/server/app/api/memory/graph/route.js.nft.json +1 -1
- package/.next/server/app/api/memory/health/dismiss/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/memory/health/dismiss/route/build-manifest.json +12 -0
- package/.next/server/app/api/memory/health/dismiss/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/memory/health/dismiss/route.js +9 -0
- package/.next/server/app/api/memory/health/dismiss/route.js.map +5 -0
- package/.next/server/app/api/memory/health/dismiss/route.js.nft.json +1 -0
- package/.next/server/app/api/memory/health/dismiss/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/memory/health/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/memory/health/route/build-manifest.json +12 -0
- package/.next/server/app/api/memory/health/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/memory/health/route.js +8 -0
- package/.next/server/app/api/memory/health/route.js.map +5 -0
- package/.next/server/app/api/memory/health/route.js.nft.json +1 -0
- package/.next/server/app/api/memory/health/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/memory/history/route.js +2 -2
- package/.next/server/app/api/memory/history/route.js.nft.json +1 -1
- package/.next/server/app/api/memory/restore/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/memory/restore/route/build-manifest.json +12 -0
- package/.next/server/app/api/memory/restore/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/memory/restore/route.js +9 -0
- package/.next/server/app/api/memory/restore/route.js.map +5 -0
- package/.next/server/app/api/memory/restore/route.js.nft.json +1 -0
- package/.next/server/app/api/memory/restore/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/memory/route.js +2 -2
- package/.next/server/app/api/memory/route.js.nft.json +1 -1
- package/.next/server/app/api/memory/versions/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/memory/versions/route/build-manifest.json +12 -0
- package/.next/server/app/api/memory/versions/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/memory/versions/route.js +8 -0
- package/.next/server/app/api/memory/versions/route.js.map +5 -0
- package/.next/server/app/api/memory/versions/route.js.nft.json +1 -0
- package/.next/server/app/api/memory/versions/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/plan/apply/route.js +2 -2
- package/.next/server/app/api/plan/apply/route.js.nft.json +1 -1
- package/.next/server/app/api/projects/route.js +2 -2
- package/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/.next/server/app/api/registry/route.js +2 -2
- package/.next/server/app/api/registry/route.js.nft.json +1 -1
- package/.next/server/app/api/roadmap/create/route.js +2 -2
- package/.next/server/app/api/roadmap/create/route.js.nft.json +1 -1
- package/.next/server/app/api/roadmap/delete/route.js +2 -2
- package/.next/server/app/api/roadmap/delete/route.js.nft.json +1 -1
- package/.next/server/app/api/roadmap/generate/route.js +2 -2
- package/.next/server/app/api/roadmap/generate/route.js.nft.json +1 -1
- package/.next/server/app/api/roadmap/layout/route.js +2 -2
- package/.next/server/app/api/roadmap/layout/route.js.nft.json +1 -1
- package/.next/server/app/api/roadmap/restore/route.js +2 -2
- package/.next/server/app/api/roadmap/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/roadmap/route.js +2 -2
- package/.next/server/app/api/roadmap/route.js.nft.json +1 -1
- package/.next/server/app/api/roadmap/update/route.js +2 -2
- package/.next/server/app/api/roadmap/update/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/route.js +2 -2
- package/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/route.js +2 -2
- package/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/.next/server/app/api/setup/generate/route.js +2 -2
- package/.next/server/app/api/setup/generate/route.js.nft.json +1 -1
- package/.next/server/app/api/setup/write/route.js +2 -2
- package/.next/server/app/api/setup/write/route.js.nft.json +1 -1
- package/.next/server/app/api/summary/route.js +2 -2
- package/.next/server/app/api/summary/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/bulk/route.js +2 -2
- package/.next/server/app/api/tasks/bulk/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/create/route.js +2 -2
- package/.next/server/app/api/tasks/create/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/delete/route.js +2 -2
- package/.next/server/app/api/tasks/delete/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/manual-tests/route.js +2 -2
- package/.next/server/app/api/tasks/manual-tests/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/restore/route.js +2 -2
- package/.next/server/app/api/tasks/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/review/route.js +2 -2
- package/.next/server/app/api/tasks/review/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/route.js +2 -2
- package/.next/server/app/api/tasks/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/update/route.js +2 -2
- package/.next/server/app/api/tasks/update/route.js.nft.json +1 -1
- package/.next/server/app/api/views/route.js +2 -2
- package/.next/server/app/api/views/route.js.nft.json +1 -1
- package/.next/server/app/board.html +1 -1
- package/.next/server/app/board.rsc +8 -8
- package/.next/server/app/board.segments/!KGFwcCk/board/__PAGE__.segment.rsc +5 -5
- package/.next/server/app/board.segments/_full.segment.rsc +8 -8
- package/.next/server/app/board.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/chat.html +1 -1
- package/.next/server/app/chat.rsc +8 -8
- package/.next/server/app/chat.segments/!KGFwcCk/chat/__PAGE__.segment.rsc +9 -11
- package/.next/server/app/chat.segments/_full.segment.rsc +8 -8
- package/.next/server/app/chat.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/docs.html +1 -1
- package/.next/server/app/docs.rsc +8 -8
- package/.next/server/app/docs.segments/!KGFwcCk/docs/__PAGE__.segment.rsc +5 -5
- package/.next/server/app/docs.segments/_full.segment.rsc +8 -8
- package/.next/server/app/docs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/explorer.html +1 -1
- package/.next/server/app/explorer.rsc +7 -7
- package/.next/server/app/explorer.segments/!KGFwcCk/explorer/__PAGE__.segment.rsc +9 -10
- package/.next/server/app/explorer.segments/_full.segment.rsc +7 -7
- package/.next/server/app/explorer.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/graph.html +1 -0
- package/.next/server/app/graph.meta +31 -0
- package/.next/server/app/graph.rsc +32 -0
- package/.next/server/app/graph.segments/!KGFwcCk/graph/__PAGE__.segment.rsc +33 -0
- package/.next/server/app/graph.segments/_full.segment.rsc +32 -0
- package/.next/server/app/graph.segments/_tree.segment.rsc +6 -0
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +2 -2
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/manual-tests.html +1 -1
- package/.next/server/app/manual-tests.rsc +7 -7
- package/.next/server/app/manual-tests.segments/!KGFwcCk/manual-tests/__PAGE__.segment.rsc +9 -10
- package/.next/server/app/manual-tests.segments/_full.segment.rsc +7 -7
- package/.next/server/app/manual-tests.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/memory.html +1 -1
- package/.next/server/app/memory.rsc +8 -8
- package/.next/server/app/memory.segments/!KGFwcCk/memory/__PAGE__.segment.rsc +6 -6
- package/.next/server/app/memory.segments/_full.segment.rsc +8 -8
- package/.next/server/app/memory.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/roadmap.html +1 -1
- package/.next/server/app/roadmap.rsc +8 -8
- package/.next/server/app/roadmap.segments/!KGFwcCk/roadmap/__PAGE__.segment.rsc +5 -5
- package/.next/server/app/roadmap.segments/_full.segment.rsc +8 -8
- package/.next/server/app/roadmap.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +7 -7
- package/.next/server/app/settings.segments/!KGFwcCk/settings/__PAGE__.segment.rsc +11 -9
- package/.next/server/app/settings.segments/_full.segment.rsc +7 -7
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/setup.html +1 -1
- package/.next/server/app/setup.rsc +7 -7
- package/.next/server/app/setup.segments/!KGFwcCk/setup/__PAGE__.segment.rsc +9 -10
- package/.next/server/app/setup.segments/_full.segment.rsc +7 -7
- package/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
- package/.next/server/app-paths-manifest.json +9 -1
- package/.next/server/chunks/{11mp_@anthropic-ai_sdk_053zt3c._.js → 11mp_@anthropic-ai_sdk_013qeb4._.js} +1 -1
- package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0_zx69c._.js → 11mp_@anthropic-ai_sdk_05ck8py._.js} +1 -1
- package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0gvxfg3._.js → 11mp_@anthropic-ai_sdk_05w8m72._.js} +1 -1
- package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0gx5t2l._.js → 11mp_@anthropic-ai_sdk_086oevc._.js} +1 -1
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_08rl0hf._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_09ujrsu._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0c3_7p7._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0cto43x._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0fgisb_._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0fy8wd3._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0fyvizf._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0hg0i2g._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0i0sz05._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0l0j9c6._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0lcm61d._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0qtva5j._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0r4fkdu._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0wbae0t._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0wxyz1t._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0y2cods._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0zu0fj1._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0zxpgt0._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_10_cxcd._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_10gb7d1._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_12q70bs._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_149ltk3._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_165_uiw._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_19w4zh6._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1adck-s._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1c2dwoi._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1d9lw_2._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1db6a7p._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1h2f90s._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1k5_i1z._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1p3mv6i._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1qoom5s._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1qsbcbe._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1rk0x59._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1sd98mi._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1sumqg8._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1t-rt4q._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1t-rt4q._.js.map +1 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1tr-k4y._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1tr-k4y._.js.map +1 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1xk3c39._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1xk3c39._.js.map +1 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_206l10_._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_206l10_._.js.map +1 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_20giys9._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_20giys9._.js.map +1 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_20xrvvy._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_20xrvvy._.js.map +1 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_215tg00._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_215tg00._.js.map +1 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_018s_10._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_08d6i7w._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_09_fd9g._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0eopml6._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0f5epel._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0okfnhu._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0s8-ha8._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0ujs27r._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0uo7rs8._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0vyq_2d._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0w3js74._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0xa4-uq._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_113y3so._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_12qcr96._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_13ixdy8._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1708vst._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1_rdguq._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1bgpe23._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1f-tphn._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1h1pqdh._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1hfj_1d._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1ih2qzz._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1jatyl1._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1v1zbha._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1vyqs5z._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0kuhhna._.js → [root-of-the-server]__00usbi3._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__1gr4e22._.js → [root-of-the-server]__04cwur0._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__06dfvb0._.js → [root-of-the-server]__04ri_ci._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__00o3mbd._.js → [root-of-the-server]__05-be3n._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__0uu9pgg._.js → [root-of-the-server]__0756_60._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__1h5hb6u._.js → [root-of-the-server]__089ay-q._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__15jhpgl._.js → [root-of-the-server]__0d4t4q6._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__01n_hoh._.js → [root-of-the-server]__0dgwykw._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__0fn-a8c._.js +105 -0
- package/.next/server/chunks/[root-of-the-server]__0fn-a8c._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0lix3ru._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0lix3ru._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__1kw2vct._.js → [root-of-the-server]__0n0myt9._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__0pe1qih._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0pe1qih._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0pvi3ku._.js +105 -0
- package/.next/server/chunks/[root-of-the-server]__0pvi3ku._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0rggulw._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0rggulw._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__076d4xm._.js → [root-of-the-server]__0s-j6z-._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__0s8v5i-._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0s8v5i-._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__1e_o8h4._.js → [root-of-the-server]__0yaxn8g._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__162_l0k._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__162_l0k._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__1-1hfrj._.js → [root-of-the-server]__16smlkg._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__19w-7h9._.js → [root-of-the-server]__19yo85m._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__1_qenei._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__1_qenei._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__1lxrobr._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1lxrobr._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__1rjgpbm._.js → [root-of-the-server]__1mnzsbh._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__06z8i6e._.js → [root-of-the-server]__1ntu_6r._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__1ntu_6r._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1p4ws5z._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1p4ws5z._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1pjwaan._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__1af-wfk._.js.map → [root-of-the-server]__1pjwaan._.js.map} +1 -1
- package/.next/server/chunks/{[root-of-the-server]__1spley9._.js → [root-of-the-server]__1s0t8r3._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__1lt5cds._.js → [root-of-the-server]__1sd3l-d._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__1skrybv._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1skrybv._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1vnine1._.js +105 -0
- package/.next/server/chunks/[root-of-the-server]__1vnine1._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__05tx02j._.js → [root-of-the-server]__1vzxnjb._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__09j_-hj._.js → [root-of-the-server]__1zeys20._.js} +2 -2
- package/.next/server/chunks/_04byth9._.js +31 -26
- package/.next/server/chunks/_04byth9._.js.map +1 -1
- package/.next/server/chunks/_0safx0g._.js +3 -3
- package/.next/server/chunks/_0safx0g._.js.map +1 -1
- package/.next/server/chunks/_next-internal_server_app_api_docs_graph_route_actions_1nzoqf-.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_docs_links_route_actions_1q-6jeg.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_entries_merge_route_actions_1rr-wwt.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_entries_merge_route_actions_1rr-wwt.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_entries_merge_undo_route_actions_0l6cy9q.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_entries_merge_undo_route_actions_0l6cy9q.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_health_dismiss_route_actions_0i7_n68.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_health_dismiss_route_actions_0i7_n68.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_health_route_actions_1lk-_5d.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_health_route_actions_1lk-_5d.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_restore_route_actions_0679kmo.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_restore_route_actions_0679kmo.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_versions_route_actions_13mix75.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_versions_route_actions_13mix75.js.map +1 -0
- package/.next/server/chunks/ssr/{0_nd_mermaid_dist_mermaid_core_mjs_0itmgkm._.js → 0_nd_mermaid_dist_mermaid_core_mjs_0y_edkq._.js} +2 -2
- package/.next/server/chunks/ssr/0_nd_mermaid_dist_mermaid_core_mjs_0y_edkq._.js.map +1 -0
- package/.next/server/chunks/ssr/{1u84_katex_dist_katex_mjs_08jn-sj._.js → 1u84_katex_dist_katex_mjs_0yg8zto._.js} +1 -1
- package/.next/server/chunks/ssr/1u84_katex_dist_katex_mjs_0yg8zto._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1drc5py._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1drc5py._.js.map +1 -0
- package/.next/server/chunks/ssr/_0-_04ia._.js +3 -0
- package/.next/server/chunks/ssr/_0-_04ia._.js.map +1 -0
- package/.next/server/chunks/ssr/_02ks8_a._.js +3 -0
- package/.next/server/chunks/ssr/_02ks8_a._.js.map +1 -0
- package/.next/server/chunks/ssr/_04xff_2._.js +1 -1
- package/.next/server/chunks/ssr/_04xff_2._.js.map +1 -1
- package/.next/server/chunks/ssr/_0696iog._.js +3 -0
- package/.next/server/chunks/ssr/_0696iog._.js.map +1 -0
- package/.next/server/chunks/ssr/_0cv0ugs._.js +3 -0
- package/.next/server/chunks/ssr/_0cv0ugs._.js.map +1 -0
- package/.next/server/chunks/ssr/_0ghj-vx._.js +3 -0
- package/.next/server/chunks/ssr/_0ghj-vx._.js.map +1 -0
- package/.next/server/chunks/ssr/{_0idb-vo._.js → _0kob2si._.js} +2 -2
- package/.next/server/chunks/ssr/_0kob2si._.js.map +1 -0
- package/.next/server/chunks/ssr/_0o8t6j-._.js +3 -0
- package/.next/server/chunks/ssr/_0o8t6j-._.js.map +1 -0
- package/.next/server/chunks/ssr/_128p7pz._.js +3 -0
- package/.next/server/chunks/ssr/_128p7pz._.js.map +1 -0
- package/.next/server/chunks/ssr/_19k2iz0._.js +2 -2
- package/.next/server/chunks/ssr/_19k2iz0._.js.map +1 -1
- package/.next/server/chunks/ssr/_1b82nz3._.js +3 -0
- package/.next/server/chunks/ssr/_1b82nz3._.js.map +1 -0
- package/.next/server/chunks/ssr/_1hm7p_8._.js +3 -0
- package/.next/server/chunks/ssr/_1hm7p_8._.js.map +1 -0
- package/.next/server/chunks/ssr/{_1s2ya35._.js → _1r_t_wi._.js} +1 -1
- package/.next/server/chunks/ssr/_1r_t_wi._.js.map +1 -0
- package/.next/server/chunks/ssr/_1s-2jub._.js +3 -0
- package/.next/server/chunks/ssr/_1s-2jub._.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_(app)_graph_page_actions_041e9i7.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_(app)_graph_page_actions_041e9i7.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules__pnpm_0s7j-tv._.js → node_modules__pnpm_00f4yhs._.js} +1 -1
- package/.next/server/chunks/ssr/node_modules__pnpm_00f4yhs._.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules__pnpm_1fry8_2._.js → node_modules__pnpm_035haet._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_0j7asqf._.js → node_modules__pnpm_03an60e._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_0eub17j._.js → node_modules__pnpm_03mp7qw._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules__pnpm_0_83tv8._.js → node_modules__pnpm_03mpmzx._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_0e55e7-._.js → node_modules__pnpm_06_8fr8._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_16bj927._.js → node_modules__pnpm_09nd7ia._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_1ch46nl._.js → node_modules__pnpm_0_e05ka._.js} +1 -1
- package/.next/server/chunks/ssr/node_modules__pnpm_0aoa6rg._.js +1 -1
- package/.next/server/chunks/ssr/node_modules__pnpm_0aoa6rg._.js.map +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_02p2rqs._.js → node_modules__pnpm_0iu4132._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_0iqb0_x._.js → node_modules__pnpm_0j_-le7._.js} +2 -2
- package/.next/server/chunks/ssr/node_modules__pnpm_0j_-le7._.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules__pnpm_0abf_e9._.js → node_modules__pnpm_0jampur._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_1hqh95z._.js → node_modules__pnpm_0lkvbt-._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_14j18h7._.js → node_modules__pnpm_0mqeoh-._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules__pnpm_0v_mhl7._.js → node_modules__pnpm_0oyo3yo._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules__pnpm_00lsytc._.js → node_modules__pnpm_0rq9x9q._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules__pnpm_0s63lee._.js → node_modules__pnpm_0tn5pg3._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_0_ajzll._.js → node_modules__pnpm_0x5wj-4._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules__pnpm_0rsfj9v._.js → node_modules__pnpm_0zz55xq._.js} +1 -1
- package/.next/server/chunks/ssr/node_modules__pnpm_0zz55xq._.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules__pnpm_1gpkxns._.js → node_modules__pnpm_139-v1i._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_1dc-yxd._.js → node_modules__pnpm_1i_chik._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_060kz-j._.js → node_modules__pnpm_1jgju12._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_0up4z7m._.js → node_modules__pnpm_1n9oeu0._.js} +1 -1
- package/.next/server/chunks/ssr/node_modules__pnpm_1oygi6o._.js +3 -0
- package/.next/server/chunks/ssr/node_modules__pnpm_1oygi6o._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules__pnpm_1ukodtk._.js +3 -0
- package/.next/server/chunks/ssr/node_modules__pnpm_1ukodtk._.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules__pnpm_05-p8zy._.js → node_modules__pnpm_1ws3ez9._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_0gp90ei._.js → node_modules__pnpm_1ydeqw6._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_0jlzk5z._.js → node_modules__pnpm_1zme4rg._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_1oaf50x._.js → node_modules__pnpm_1zum4yd._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_0vuao3_._.js → node_modules__pnpm_2045l51._.js} +1 -1
- package/.next/server/chunks/ssr/src_1e9kctc._.js +3 -0
- package/.next/server/chunks/ssr/src_1e9kctc._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_(app)_chat_page_tsx_0c3e4l4._.js +1 -1
- package/.next/server/chunks/ssr/src_app_(app)_chat_page_tsx_0c3e4l4._.js.map +1 -1
- package/.next/server/chunks/ssr/src_app_(app)_graph_page_tsx_1yudb7h._.js +3 -0
- package/.next/server/chunks/ssr/src_app_(app)_graph_page_tsx_1yudb7h._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_(app)_layout_tsx_1yu5hom._.js +1 -1
- package/.next/server/chunks/ssr/src_app_(app)_layout_tsx_1yu5hom._.js.map +1 -1
- package/.next/server/chunks/ssr/src_app_(app)_memory_page_tsx_19jhb1c._.js +3 -2
- package/.next/server/chunks/ssr/src_app_(app)_memory_page_tsx_19jhb1c._.js.map +1 -1
- package/.next/server/chunks/ssr/src_components_chat_ChatView_tsx_0h5j-e2._.js +1 -1
- package/.next/server/chunks/ssr/src_components_chat_ChatView_tsx_0h5j-e2._.js.map +1 -1
- package/.next/server/chunks/ssr/src_components_roadmap_RoadmapNodes_tsx_0up_ygp._.js +3 -0
- package/.next/server/chunks/ssr/src_components_roadmap_RoadmapNodes_tsx_0up_ygp._.js.map +1 -0
- package/.next/server/chunks/ssr/src_context_ChatContext_tsx_0lowp8p._.js +2 -2
- package/.next/server/chunks/ssr/src_context_ChatContext_tsx_0lowp8p._.js.map +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/next-font-manifest.js +1 -1
- package/.next/server/next-font-manifest.json +4 -0
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/prefetch-hints.json +19 -0
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/03tzhv775qv5m.js +1 -0
- package/.next/static/chunks/05rjl54wa6y43.js +1 -0
- package/.next/static/chunks/0_8ovyz2sbr3p.js +1 -0
- package/.next/static/chunks/0do6j4i1v_c6s.js +1 -0
- package/.next/static/chunks/0eax07u1ta6tp.css +1 -0
- package/.next/static/chunks/{3xqcluqa32mjv.js → 0h52yb69w77nq.js} +2 -2
- package/.next/static/chunks/0kb25y5g772mn.js +1 -0
- package/.next/static/chunks/0lfd3aomz4wv4.js +1 -0
- package/.next/static/chunks/0pmpdvev8bf-o.js +1 -0
- package/.next/static/chunks/0po8atank1p02.js +12 -0
- package/.next/static/chunks/{1hh2cxd9ndxf-.js → 10itjt9fhlzr1.js} +13 -13
- package/.next/static/chunks/11ou9nrpdg4qo.js +3 -0
- package/.next/static/chunks/1b9r_vdcewfu7.js +1 -0
- package/.next/static/chunks/1g7st54huk4if.js +1 -0
- package/.next/static/chunks/1l8fp2uesk29q.js +1 -0
- package/.next/static/chunks/1v63qs4kxxcfh.js +1 -0
- package/.next/static/chunks/36s2k2k_w-or8.js +1 -0
- package/.next/static/chunks/3ctec-7mnm19m.js +1 -0
- package/.next/static/chunks/3x43gd45wlhbl.js +1 -0
- package/.next/static/chunks/40diykjra8f9n.js +2107 -0
- package/README.md +16 -8
- package/package.json +1 -1
- package/.next/server/app/api/backlinks/route/app-paths-manifest.json +0 -3
- package/.next/server/app/api/backlinks/route.js +0 -8
- package/.next/server/app/api/backlinks/route.js.nft.json +0 -1
- package/.next/server/app/api/backlinks/route_client-reference-manifest.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0krkw4y._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0l0xzie._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0pgjvhr._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0r-keh6._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0tvfbjt._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0u4b8_f._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0ud37xh._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0v3ar-t._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0wk0b65._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0wqkd2r._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0wypotx._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0yuq-9s._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0z-e57x._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_108ltz4._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_10c_i6_._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_14jogs8._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_15u-n39._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_194ahxu._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ahph2t._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ajy77y._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1b57s9p._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1brf2xn._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1btfw2x._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1cyy_q6._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1fz9fev._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1i_rz7h._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1it8zsv._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1jzusvd._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1lfknr2._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1mewd-3._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1mkm4u_._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1rggqq3._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1rhjf1m._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1s6ks8c._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1u8z4hp._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1vyy3_4._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_036bvwf._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_046taqd._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0bxad5f._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0g65abt._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0pb9bu1._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_120-cio._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_13uyu_v._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_13x2ww0._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_17og64d._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1e_sh4o._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1ecuo9i._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1go8d0m._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1i13ryx._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1jv_hid._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1mh5mqk._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1oq7e8u._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1p-cq-p._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1the3g0._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1xubh-w._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0jr_5eq._.js +0 -110
- package/.next/server/chunks/[root-of-the-server]__0jr_5eq._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__0p4w_o-._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0p4w_o-._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__19rxcu4._.js +0 -110
- package/.next/server/chunks/[root-of-the-server]__19rxcu4._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__1af-wfk._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1qd-ecl._.js +0 -110
- package/.next/server/chunks/[root-of-the-server]__1qd-ecl._.js.map +0 -1
- package/.next/server/chunks/_next-internal_server_app_api_backlinks_route_actions_1_58m09.js +0 -3
- package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_triangle-alert_mjs_0ei-mpz._.js +0 -3
- package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_triangle-alert_mjs_0ei-mpz._.js.map +0 -1
- package/.next/server/chunks/ssr/_0h91h9n._.js +0 -3
- package/.next/server/chunks/ssr/_0h91h9n._.js.map +0 -1
- package/.next/server/chunks/ssr/_0idb-vo._.js.map +0 -1
- package/.next/server/chunks/ssr/_0ip7sg0._.js +0 -3
- package/.next/server/chunks/ssr/_0ip7sg0._.js.map +0 -1
- package/.next/server/chunks/ssr/_0ks_bep._.js +0 -3
- package/.next/server/chunks/ssr/_0ks_bep._.js.map +0 -1
- package/.next/server/chunks/ssr/_0lqrpim._.js +0 -3
- package/.next/server/chunks/ssr/_0lqrpim._.js.map +0 -1
- package/.next/server/chunks/ssr/_0qp3gu7._.js +0 -3
- package/.next/server/chunks/ssr/_0qp3gu7._.js.map +0 -1
- package/.next/server/chunks/ssr/_197jl3g._.js +0 -3
- package/.next/server/chunks/ssr/_197jl3g._.js.map +0 -1
- package/.next/server/chunks/ssr/_1el478k._.js +0 -3
- package/.next/server/chunks/ssr/_1el478k._.js.map +0 -1
- package/.next/server/chunks/ssr/_1t76zdx._.js +0 -3
- package/.next/server/chunks/ssr/_1t76zdx._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules__pnpm_0al3nfy._.js +0 -3
- package/.next/server/chunks/ssr/node_modules__pnpm_0al3nfy._.js.map +0 -1
- package/.next/server/chunks/ssr/src_components_0eyr_zi._.js +0 -3
- package/.next/server/chunks/ssr/src_components_0eyr_zi._.js.map +0 -1
- package/.next/server/chunks/ssr/src_components_1s861m8._.js +0 -3
- package/.next/server/chunks/ssr/src_components_1s861m8._.js.map +0 -1
- package/.next/static/chunks/08sqjdq-43nbt.js +0 -1
- package/.next/static/chunks/09r4_4wr0aga3.js +0 -1
- package/.next/static/chunks/0mgifb98wbesa.js +0 -1
- package/.next/static/chunks/0xw_sa58zqv5s.js +0 -1
- package/.next/static/chunks/1-a3-6c_nce84.js +0 -1
- package/.next/static/chunks/149fj-mseo8q3.css +0 -1
- package/.next/static/chunks/1c11k-snzp541.js +0 -1
- package/.next/static/chunks/1n4_u3om7ye4z.js +0 -2107
- package/.next/static/chunks/1qhndyi2gdbkf.js +0 -1
- package/.next/static/chunks/1x40-5s54wd5m.js +0 -11
- package/.next/static/chunks/24u_rc2tbkhai.js +0 -3
- package/.next/static/chunks/30s090l71e1gs.js +0 -1
- package/.next/static/chunks/3t8px4aygy1s9.js +0 -1
- package/.next/static/chunks/44gr_v5092gwh.js +0 -1
- /package/.next/server/app/{api/backlinks/route → (app)/graph/page}/server-reference-manifest.json +0 -0
- /package/.next/server/app/{api/backlinks/route.js.map → (app)/graph/page.js.map} +0 -0
- /package/.next/server/app/api/{backlinks → docs/graph}/route/build-manifest.json +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_053zt3c._.js.map → 11mp_@anthropic-ai_sdk_013qeb4._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0_zx69c._.js.map → 11mp_@anthropic-ai_sdk_05ck8py._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0gvxfg3._.js.map → 11mp_@anthropic-ai_sdk_05w8m72._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0gx5t2l._.js.map → 11mp_@anthropic-ai_sdk_086oevc._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0krkw4y._.js.map → 11mp_@anthropic-ai_sdk_08rl0hf._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0l0xzie._.js.map → 11mp_@anthropic-ai_sdk_09ujrsu._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0pgjvhr._.js.map → 11mp_@anthropic-ai_sdk_0c3_7p7._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0r-keh6._.js.map → 11mp_@anthropic-ai_sdk_0cto43x._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0tvfbjt._.js.map → 11mp_@anthropic-ai_sdk_0fgisb_._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0u4b8_f._.js.map → 11mp_@anthropic-ai_sdk_0fy8wd3._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0ud37xh._.js.map → 11mp_@anthropic-ai_sdk_0fyvizf._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0v3ar-t._.js.map → 11mp_@anthropic-ai_sdk_0hg0i2g._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0wk0b65._.js.map → 11mp_@anthropic-ai_sdk_0i0sz05._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0wqkd2r._.js.map → 11mp_@anthropic-ai_sdk_0l0j9c6._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0wypotx._.js.map → 11mp_@anthropic-ai_sdk_0lcm61d._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0yuq-9s._.js.map → 11mp_@anthropic-ai_sdk_0qtva5j._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0z-e57x._.js.map → 11mp_@anthropic-ai_sdk_0r4fkdu._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_108ltz4._.js.map → 11mp_@anthropic-ai_sdk_0wbae0t._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_10c_i6_._.js.map → 11mp_@anthropic-ai_sdk_0wxyz1t._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_14jogs8._.js.map → 11mp_@anthropic-ai_sdk_0y2cods._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_15u-n39._.js.map → 11mp_@anthropic-ai_sdk_0zu0fj1._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_194ahxu._.js.map → 11mp_@anthropic-ai_sdk_0zxpgt0._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1ahph2t._.js.map → 11mp_@anthropic-ai_sdk_10_cxcd._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1ajy77y._.js.map → 11mp_@anthropic-ai_sdk_10gb7d1._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1b57s9p._.js.map → 11mp_@anthropic-ai_sdk_12q70bs._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1brf2xn._.js.map → 11mp_@anthropic-ai_sdk_149ltk3._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1btfw2x._.js.map → 11mp_@anthropic-ai_sdk_165_uiw._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1cyy_q6._.js.map → 11mp_@anthropic-ai_sdk_19w4zh6._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1fz9fev._.js.map → 11mp_@anthropic-ai_sdk_1adck-s._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1i_rz7h._.js.map → 11mp_@anthropic-ai_sdk_1c2dwoi._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1it8zsv._.js.map → 11mp_@anthropic-ai_sdk_1d9lw_2._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1jzusvd._.js.map → 11mp_@anthropic-ai_sdk_1db6a7p._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1lfknr2._.js.map → 11mp_@anthropic-ai_sdk_1h2f90s._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1mewd-3._.js.map → 11mp_@anthropic-ai_sdk_1k5_i1z._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1mkm4u_._.js.map → 11mp_@anthropic-ai_sdk_1p3mv6i._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1rggqq3._.js.map → 11mp_@anthropic-ai_sdk_1qoom5s._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1rhjf1m._.js.map → 11mp_@anthropic-ai_sdk_1qsbcbe._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1s6ks8c._.js.map → 11mp_@anthropic-ai_sdk_1rk0x59._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1u8z4hp._.js.map → 11mp_@anthropic-ai_sdk_1sd98mi._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1vyy3_4._.js.map → 11mp_@anthropic-ai_sdk_1sumqg8._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_036bvwf._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_018s_10._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_046taqd._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_08d6i7w._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0bxad5f._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_09_fd9g._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0g65abt._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0eopml6._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0pb9bu1._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0f5epel._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_120-cio._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0okfnhu._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_13uyu_v._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0s8-ha8._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_13x2ww0._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0ujs27r._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_17og64d._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0uo7rs8._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1e_sh4o._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0vyq_2d._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1ecuo9i._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0w3js74._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1go8d0m._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0xa4-uq._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1i13ryx._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_113y3so._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1jv_hid._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_12qcr96._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1mh5mqk._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_13ixdy8._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1oq7e8u._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1708vst._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1p-cq-p._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1_rdguq._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1the3g0._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1bgpe23._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1xubh-w._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1f-tphn._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__00o3mbd._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1h1pqdh._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__06z8i6e._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1hfj_1d._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__1kw2vct._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1ih2qzz._.js.map} +0 -0
- /package/.next/server/chunks/{_next-internal_server_app_api_backlinks_route_actions_1_58m09.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1jatyl1._.js.map} +0 -0
- /package/.next/server/chunks/{ssr/0_nd_mermaid_dist_mermaid_core_mjs_0itmgkm._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1v1zbha._.js.map} +0 -0
- /package/.next/server/chunks/{ssr/1u84_katex_dist_katex_mjs_08jn-sj._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1vyqs5z._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__0kuhhna._.js.map → [root-of-the-server]__00usbi3._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__1gr4e22._.js.map → [root-of-the-server]__04cwur0._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__06dfvb0._.js.map → [root-of-the-server]__04ri_ci._.js.map} +0 -0
- /package/.next/server/chunks/{ssr/_1s2ya35._.js.map → [root-of-the-server]__05-be3n._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__09j_-hj._.js.map → [root-of-the-server]__0756_60._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__1h5hb6u._.js.map → [root-of-the-server]__089ay-q._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__15jhpgl._.js.map → [root-of-the-server]__0d4t4q6._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__01n_hoh._.js.map → [root-of-the-server]__0dgwykw._.js.map} +0 -0
- /package/.next/server/chunks/{ssr/node_modules__pnpm_0iqb0_x._.js.map → [root-of-the-server]__0n0myt9._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__076d4xm._.js.map → [root-of-the-server]__0s-j6z-._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__1e_o8h4._.js.map → [root-of-the-server]__0yaxn8g._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__1-1hfrj._.js.map → [root-of-the-server]__16smlkg._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__19w-7h9._.js.map → [root-of-the-server]__19yo85m._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__1rjgpbm._.js.map → [root-of-the-server]__1mnzsbh._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__1spley9._.js.map → [root-of-the-server]__1s0t8r3._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__1lt5cds._.js.map → [root-of-the-server]__1sd3l-d._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__05tx02j._.js.map → [root-of-the-server]__1vzxnjb._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__0uu9pgg._.js.map → [root-of-the-server]__1zeys20._.js.map} +0 -0
- /package/.next/server/chunks/{ssr/node_modules__pnpm_0rsfj9v._.js.map → _next-internal_server_app_api_docs_graph_route_actions_1nzoqf-.js.map} +0 -0
- /package/.next/server/chunks/{ssr/node_modules__pnpm_0s7j-tv._.js.map → _next-internal_server_app_api_docs_links_route_actions_1q-6jeg.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1fry8_2._.js.map → node_modules__pnpm_035haet._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0j7asqf._.js.map → node_modules__pnpm_03an60e._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0eub17j._.js.map → node_modules__pnpm_03mp7qw._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0_83tv8._.js.map → node_modules__pnpm_03mpmzx._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0e55e7-._.js.map → node_modules__pnpm_06_8fr8._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_16bj927._.js.map → node_modules__pnpm_09nd7ia._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1ch46nl._.js.map → node_modules__pnpm_0_e05ka._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_02p2rqs._.js.map → node_modules__pnpm_0iu4132._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0abf_e9._.js.map → node_modules__pnpm_0jampur._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1hqh95z._.js.map → node_modules__pnpm_0lkvbt-._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_14j18h7._.js.map → node_modules__pnpm_0mqeoh-._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0v_mhl7._.js.map → node_modules__pnpm_0oyo3yo._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_00lsytc._.js.map → node_modules__pnpm_0rq9x9q._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0s63lee._.js.map → node_modules__pnpm_0tn5pg3._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0_ajzll._.js.map → node_modules__pnpm_0x5wj-4._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1gpkxns._.js.map → node_modules__pnpm_139-v1i._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1dc-yxd._.js.map → node_modules__pnpm_1i_chik._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_060kz-j._.js.map → node_modules__pnpm_1jgju12._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0up4z7m._.js.map → node_modules__pnpm_1n9oeu0._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_05-p8zy._.js.map → node_modules__pnpm_1ws3ez9._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0gp90ei._.js.map → node_modules__pnpm_1ydeqw6._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0jlzk5z._.js.map → node_modules__pnpm_1zme4rg._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1oaf50x._.js.map → node_modules__pnpm_1zum4yd._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0vuao3_._.js.map → node_modules__pnpm_2045l51._.js.map} +0 -0
- /package/.next/static/{qCiKQ9_g49vaoQ-Fewybk → P1gxTEpKVh-OOtIXC432U}/_buildManifest.js +0 -0
- /package/.next/static/{qCiKQ9_g49vaoQ-Fewybk → P1gxTEpKVh-OOtIXC432U}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{qCiKQ9_g49vaoQ-Fewybk → P1gxTEpKVh-OOtIXC432U}/_ssgManifest.js +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[856095,a=>{"use strict";var b=a.i(662145),c=a.i(174897),d=a.i(913975),e=a.i(200382),f=a.i(72551),g=a.i(54165),h=a.i(685698),i=a.i(712125),j=a.i(147758),k=a.i(822404),l=a.i(544428),m=a.i(256857);let n={name:"link-2-off",size:24,node:[["path",{d:"M9 17H7A5 5 0 0 1 7 7",key:"10o201"}],["path",{d:"M15 7h2a5 5 0 0 1 4 8",key:"1d3206"}],["line",{x1:"8",x2:"12",y1:"12",y2:"12",key:"rvw6j4"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]};n.node;let o=(0,m.default)(n);var p=a.i(544394),q=a.i(149350),r=a.i(173628),s=a.i(618940),t=a.i(368114),u=a.i(598984);let v="font-mono text-[10px] uppercase tracking-widest text-muted";function w({attach:a}){let{board:d,rootParam:e}=(0,p.useApp)(),[f,g]=(0,c.useState)([]),[h,i]=(0,c.useState)(0);(0,c.useEffect)(()=>{let a=!1;return fetch(`/api/roadmap${e}`).then(a=>a.ok?a.json():{items:[]}).then(b=>{a||g(b.items??[])}).catch(a=>console.warn("[vibedoc] could not load roadmap for the chat rail:",a)),()=>{a=!0}},[e,h]),(0,c.useEffect)(()=>{let a=a=>{let b=a.detail?.type;("roadmap_updated"===b||"task_created"===b)&&i(a=>a+1)};return window.addEventListener("vibedoc:sse",a),()=>window.removeEventListener("vibedoc:sse",a)},[]);let j=(0,c.useMemo)(()=>Object.fromEntries((d?Object.values(d).flat():[]).map(a=>[a.id,a])),[d]);return(0,b.jsx)("div",{className:"flex h-full min-h-0 flex-col overflow-y-auto",children:(0,b.jsxs)("div",{className:"flex flex-col gap-5 p-5 animate-fade-in",children:[!a&&(0,b.jsx)(x,{}),a?.kind==="epic"&&(0,b.jsx)(y,{item:f.find(b=>b.id===a.id),id:a.id,tasksById:j}),a?.kind==="task"&&(0,b.jsx)(A,{task:j[a.id],id:a.id,items:f})]},a?`${a.kind}:${a.id}`:"none")})}function x(){return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("p",{className:v,children:"Context"}),(0,b.jsxs)("div",{className:"flex flex-col items-start gap-3 rounded-lg border border-dashed border-border2 p-4",children:[(0,b.jsx)(o,{className:"size-4 text-muted"}),(0,b.jsx)("p",{className:"text-sm text-txt",children:"Not linked to an epic or task"}),(0,b.jsx)("p",{className:"text-xs leading-relaxed text-muted",children:"Open a chat from an epic on the roadmap or a task on the board, and the agent starts with that item as context. Its status then shows on the item."})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)("p",{className:v,children:"The agent can"}),(0,b.jsxs)("ul",{className:"flex flex-col gap-1.5 text-xs text-muted",children:[(0,b.jsx)("li",{children:"Read docs, tasks, the roadmap and memory"}),(0,b.jsx)("li",{children:"Propose doc and task edits (you review a diff)"}),(0,b.jsx)("li",{children:"Propose epics and task breakdowns (you accept)"}),(0,b.jsx)("li",{className:"text-muted/70",children:"It can't run code or edit source files"})]})]})]})}function y({item:a,id:c,tasksById:d}){if(!a)return(0,b.jsx)(B,{kind:"Epic",id:c});let e=a.tasks.map(a=>d[a]).filter(a=>!!a),f=e.map(a=>a.status).filter(a=>"cancelled"!==a),g=f.filter(a=>"done"===a).length;return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)("p",{className:v,children:["Epic · ",a.id]}),(0,b.jsx)("h3",{className:"text-base font-semibold leading-snug text-txt",children:a.title}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsx)(s.StatusPill,{status:a.status}),a.due&&(0,b.jsxs)("span",{className:"font-mono text-[10px] text-muted",children:["due ",a.due]})]})]}),f.length>0&&(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsxs)("div",{className:"flex items-baseline justify-between",children:[(0,b.jsx)("p",{className:v,children:"Progress"}),(0,b.jsxs)("span",{className:"font-mono text-[10px] text-muted",children:[g,"/",f.length," tasks"]})]}),(0,b.jsx)(s.SegmentedProgress,{statuses:f})]}),e.length>0&&(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("p",{className:v,children:"Tasks"}),(0,b.jsx)("ul",{className:"-mx-2 flex flex-col",children:e.map(a=>(0,b.jsx)(z,{task:a},a.id))})]}),a.body.trim()&&(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("p",{className:v,children:"Brief"}),(0,b.jsx)(q.MarkdownRenderer,{content:a.body,className:"prose-compact"})]}),(0,b.jsx)(C,{attach:{kind:"epic",id:a.id},label:"Open in roadmap"})]})}function z({task:a}){let{showAbout:c}=(0,h.useChats)();return(0,b.jsx)("li",{children:(0,b.jsxs)("button",{type:"button",onClick:()=>c({kind:"task",id:a.id}),title:`Chat about ${a.id}`,className:"flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-xs transition-colors duration-(--duration-fast) hover:bg-surface2",children:[(0,b.jsx)(r.StatusIcon,{status:(0,j.displayStatus)(a),className:"size-3"}),(0,b.jsx)("span",{className:"shrink-0 font-mono text-[10px] text-muted",children:a.id}),(0,b.jsx)("span",{className:(0,t.cn)("min-w-0 flex-1 truncate","done"===a.status?"text-muted":"text-txt"),children:a.title})]})})}function A({task:a,id:c,items:d}){let{showAbout:e}=(0,h.useChats)();if(!a)return(0,b.jsx)(B,{kind:"Task",id:c});let f=a.phase.match(/^R\d+/)?.[0],g=f?d.find(a=>a.id===f):void 0,i=a.raw?.replace(/^#.*\n(\*\*[^*]+:\*\*.*\n)*/,"").trim();return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)("p",{className:v,children:["Task · ",a.id]}),(0,b.jsx)("h3",{className:"text-base font-semibold leading-snug text-txt",children:a.title}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsx)(r.StatusChip,{status:(0,j.displayStatus)(a)}),a.size&&(0,b.jsx)("span",{className:"font-mono text-[10px] text-muted",children:a.size}),a.due&&(0,b.jsxs)("span",{className:"font-mono text-[10px] text-muted",children:["due ",a.due]})]})]}),(0,b.jsxs)("dl",{className:"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1.5 text-xs",children:[f&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("dt",{className:"text-muted",children:"Epic"}),(0,b.jsx)("dd",{className:"min-w-0",children:(0,b.jsxs)("button",{type:"button",onClick:()=>e({kind:"epic",id:f}),className:"truncate text-left text-txt hover:text-accent",title:`Chat about ${f}`,children:[(0,b.jsx)("span",{className:"font-mono text-[10px] text-muted",children:f})," ",g?.title??a.phase.replace(/^R\d+\s*—\s*/,"")]})})]}),a.dependsOn&&"—"!==a.dependsOn&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("dt",{className:"text-muted",children:"Depends on"}),(0,b.jsx)("dd",{className:"font-mono text-[11px] text-txt",children:a.dependsOn})]})]}),i&&(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("p",{className:v,children:"Spec"}),(0,b.jsx)(q.MarkdownRenderer,{content:i,className:"prose-compact"})]}),(0,b.jsx)(C,{attach:{kind:"task",id:a.id},label:"Open on board"})]})}function B({kind:a,id:c}){return(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)("p",{className:v,children:[a," · ",c]}),(0,b.jsxs)("p",{className:"text-sm text-muted",children:[a," ",c," isn't in this project any more."]})]})}function C({attach:a,label:c}){return(0,b.jsxs)(k.default,{href:(0,u.attachHref)(a),className:"group inline-flex w-fit items-center gap-1.5 rounded-md border border-border px-3 py-1.5 text-xs text-txt transition-colors duration-(--duration-fast) hover:border-accent/50 hover:text-accent",children:[c,(0,b.jsx)(l.ArrowUpRight,{className:"size-3.5 transition-transform duration-(--duration-fast) group-hover:-translate-y-px group-hover:translate-x-px"})]})}var D=a.i(107742);let E=a=>{let b=setInterval(a,3e4);return()=>clearInterval(b)},F=()=>6e4*Math.floor(Date.now()/6e4);function G(){let{chats:a,loaded:c,create:e,show:f,send:g,now:j}=(0,h.useChats)(),k=(0,d.useRouter)(),l=(0,d.useSearchParams)().get("id"),m=a.find(a=>a.id===l)??(l?void 0:(0,D.defaultChat)(a,j));function n(a){let b=e();f(b),a&&g(b,a)}return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(H,{selectedId:m?.id??null,onNew:()=>n()}),(0,b.jsx)("section",{className:"flex min-w-0 flex-1 flex-col border-r border-border bg-bg",children:m?(0,b.jsx)("div",{className:"flex min-h-0 flex-1 flex-col animate-fade-in",children:(0,b.jsx)(i.ChatView,{chatId:m.id,variant:"page"})},m.id):c?(0,b.jsx)(J,{missing:!!l,onStart:n,onBack:()=>k.replace("/chat")}):null}),(0,b.jsx)("aside",{className:"hidden w-80 shrink-0 bg-surface xl:block","aria-label":"Chat context",children:(0,b.jsx)(w,{attach:m?.attach??null})})]})}function H({selectedId:a,onNew:d}){let{chats:g,now:i}=(0,h.useChats)(),[j,k]=(0,c.useState)(""),l=j.trim().toLowerCase(),m=l?g.filter(a=>a.title.toLowerCase().includes(l)||a.attach?.id.toLowerCase().includes(l)):g,n=(0,D.groupChats)(m,i),o=[{label:"Needs you",items:n.needsYou,tone:"text-amber"},{label:"Errors",items:n.errors,tone:"text-danger"},{label:"Running",items:n.running,tone:"text-accent"},{label:"Recent",items:n.recent,tone:"text-muted"}];return(0,b.jsxs)("aside",{className:"hidden w-72 shrink-0 flex-col border-r border-border bg-surface md:flex","aria-label":"All chats",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 px-4 pb-3 pt-4",children:[(0,b.jsx)("h1",{className:"flex-1 text-sm font-semibold text-txt",children:"Chats"}),(0,b.jsxs)("button",{type:"button",onClick:d,className:"inline-flex items-center gap-1.5 rounded-md bg-accent px-2.5 py-1.5 text-xs font-medium text-accent-fg transition-[filter,transform] duration-(--duration-fast) hover:brightness-110 active:scale-[0.97]",children:[(0,b.jsx)(e.Plus,{className:"size-3.5"})," New chat"]})]}),g.length>3&&(0,b.jsxs)("label",{className:"mx-3 mb-2 flex items-center gap-2 rounded-md border border-border bg-bg px-2.5 py-1.5 text-xs focus-within:border-accent/50",children:[(0,b.jsx)(f.Search,{className:"size-3.5 text-muted"}),(0,b.jsx)("input",{value:j,onChange:a=>k(a.target.value),placeholder:"Filter by title or R/T id",className:"min-w-0 flex-1 bg-transparent text-txt placeholder:text-muted focus:outline-hidden"})]}),(0,b.jsxs)("div",{className:"min-h-0 flex-1 overflow-y-auto px-2 pb-4",children:[0===g.length&&(0,b.jsx)("p",{className:"px-2 py-6 text-xs text-muted",children:"No chats yet."}),o.map(c=>c.items.length>0&&(0,b.jsxs)("div",{className:"mt-3 first:mt-1",children:[(0,b.jsxs)("p",{className:(0,t.cn)("px-2 pb-1 font-mono text-[10px] uppercase tracking-widest",c.tone),children:[c.label," · ",c.items.length]}),(0,b.jsx)("ul",{className:"flex flex-col gap-px",children:c.items.map(c=>(0,b.jsx)(I,{chat:c,active:c.id===a},c.id))})]},c.label)),l&&0===m.length&&(0,b.jsxs)("p",{className:"px-2 py-6 text-xs text-muted",children:["No chat matches “",j,"”."]})]})]})}function I({chat:a,active:d}){let{show:e,remove:f,now:i}=(0,h.useChats)(),j=(0,c.useSyncExternalStore)(E,F,()=>0),k=(0,D.shellStatus)(a,i),l=[...a.messages].reverse().find(a=>a.text)?.text.replace(/\s+/g," ").trim();return(0,b.jsxs)("li",{className:"group relative animate-slide-in",children:[(0,b.jsxs)("button",{type:"button",onClick:()=>e(a.id),"aria-current":d?"true":void 0,className:(0,t.cn)("flex w-full flex-col gap-1 rounded-lg px-2.5 py-2 text-left transition-colors duration-(--duration-fast)",d?"bg-surface2 shadow-[inset_2px_0_0_rgb(var(--rgb-accent))]":"hover:bg-surface2/60"),children:[(0,b.jsxs)("span",{className:"flex items-center gap-2 pr-5",children:[(0,b.jsx)(u.StatusMarker,{status:k,showIdle:!0}),(0,b.jsx)("span",{className:(0,t.cn)("min-w-0 flex-1 truncate text-[13px]","idle"!==k||d?"text-txt":"text-txt/80"),children:a.title}),j>0&&(0,b.jsx)("span",{className:"shrink-0 font-mono text-[10px] text-muted group-hover:opacity-0",children:(0,D.ago)(a.updatedAt,j)})]}),(a.attach||l)&&(0,b.jsxs)("span",{className:"flex items-center gap-2 pl-5 text-[11px] text-muted",children:[a.attach&&(0,b.jsx)(u.AttachLabel,{attach:a.attach,className:"shrink-0"}),l&&(0,b.jsx)("span",{className:"min-w-0 truncate",children:l})]})]}),(0,b.jsx)("button",{type:"button",onClick:()=>f(a.id),"aria-label":`Close ${a.title}`,title:a.busy?"Stop and delete chat":"Delete chat",className:"absolute right-1.5 top-1.5 grid size-6 place-items-center rounded-md text-muted opacity-0 transition-opacity duration-(--duration-fast) hover:bg-surface hover:text-danger focus-visible:opacity-100 group-hover:opacity-100",children:(0,b.jsx)(g.X,{className:"size-3.5"})})]})}function J({missing:a,onStart:c,onBack:d}){return(0,b.jsx)("div",{className:"grid flex-1 place-items-center p-8",children:(0,b.jsxs)("div",{className:"flex max-w-md flex-col items-start gap-4 animate-fade-in",children:[(0,b.jsx)("div",{className:"grid size-10 place-items-center rounded-xl bg-linear-to-br from-accent to-teal text-white","aria-hidden":!0,children:"⬡"}),a?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("h2",{className:"text-lg font-semibold text-txt",children:"This chat was deleted"}),(0,b.jsx)("button",{type:"button",onClick:d,className:"text-sm text-accent hover:underline",children:"Back to all chats"})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-lg font-semibold text-txt",children:"Run chats side by side"}),(0,b.jsx)("p",{className:"mt-1 text-sm text-muted",children:"Each chat is its own Claude Code session, up to 4 at once. Start one here, or from an epic on the roadmap or a task on the board."})]}),(0,b.jsx)("div",{className:"flex flex-col gap-1.5",children:(0,D.suggestions)(null).map(a=>(0,b.jsx)("button",{type:"button",onClick:()=>c(a),className:"rounded-lg border border-border px-3 py-2 text-left text-sm text-txt/90 transition-colors hover:border-accent/50 hover:bg-accent/5",children:a},a))})]})]})})}a.s(["default",0,function(){return(0,b.jsx)("div",{className:"flex h-[calc(100svh-3rem)] min-h-0",children:(0,b.jsx)(c.Suspense,{children:(0,b.jsx)(G,{})})})}],856095)}];
|
|
1
|
+
module.exports=[856095,a=>{"use strict";var b=a.i(662145),c=a.i(174897),d=a.i(913975),e=a.i(200382),f=a.i(72551),g=a.i(54165),h=a.i(685698),i=a.i(712125),j=a.i(147758),k=a.i(822404),l=a.i(544428),m=a.i(256857);let n={name:"link-2-off",size:24,node:[["path",{d:"M9 17H7A5 5 0 0 1 7 7",key:"10o201"}],["path",{d:"M15 7h2a5 5 0 0 1 4 8",key:"1d3206"}],["line",{x1:"8",x2:"12",y1:"12",y2:"12",key:"rvw6j4"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]};n.node;let o=(0,m.default)(n);var p=a.i(544394),q=a.i(149350),r=a.i(173628),s=a.i(618940),t=a.i(368114),u=a.i(598984);let v="font-mono text-[10px] uppercase tracking-widest text-muted";function w({attach:a}){let{board:d,rootParam:e}=(0,p.useApp)(),[f,g]=(0,c.useState)([]),[h,i]=(0,c.useState)(0);(0,c.useEffect)(()=>{let a=!1;return fetch(`/api/roadmap${e}`).then(a=>a.ok?a.json():{items:[]}).then(b=>{a||g(b.items??[])}).catch(a=>console.warn("[vibedoc] could not load roadmap for the chat rail:",a)),()=>{a=!0}},[e,h]),(0,c.useEffect)(()=>{let a=a=>{let b=a.detail?.type;("roadmap_updated"===b||"task_created"===b)&&i(a=>a+1)};return window.addEventListener("vibedoc:sse",a),()=>window.removeEventListener("vibedoc:sse",a)},[]);let j=(0,c.useMemo)(()=>Object.fromEntries((d?Object.values(d).flat():[]).map(a=>[a.id,a])),[d]);return(0,b.jsx)("div",{className:"flex h-full min-h-0 flex-col overflow-y-auto",children:(0,b.jsxs)("div",{className:"flex flex-col gap-5 p-5 animate-fade-in",children:[!a&&(0,b.jsx)(x,{}),a?.kind==="epic"&&(0,b.jsx)(y,{item:f.find(b=>b.id===a.id),id:a.id,tasksById:j}),a?.kind==="task"&&(0,b.jsx)(A,{task:j[a.id],id:a.id,items:f})]},a?`${a.kind}:${a.id}`:"none")})}function x(){return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("p",{className:v,children:"Context"}),(0,b.jsxs)("div",{className:"flex flex-col items-start gap-3 rounded-lg border border-dashed border-border2 p-4",children:[(0,b.jsx)(o,{className:"size-4 text-muted"}),(0,b.jsx)("p",{className:"text-sm text-txt",children:"Not linked to an epic or task"}),(0,b.jsx)("p",{className:"text-xs leading-relaxed text-muted",children:"Open a chat from an epic on the roadmap or a task on the board, and the agent starts with that item as context. Its status then shows on the item."})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)("p",{className:v,children:"The agent can"}),(0,b.jsxs)("ul",{className:"flex flex-col gap-1.5 text-xs text-muted",children:[(0,b.jsx)("li",{children:"Read docs, tasks, the roadmap and memory"}),(0,b.jsx)("li",{children:"Propose doc and task edits (you review a diff)"}),(0,b.jsx)("li",{children:"Propose epics and task breakdowns (you accept)"}),(0,b.jsx)("li",{className:"text-muted/70",children:"It can't run code or edit source files"})]})]})]})}function y({item:a,id:c,tasksById:d}){if(!a)return(0,b.jsx)(B,{kind:"Epic",id:c});let e=a.tasks.map(a=>d[a]).filter(a=>!!a),f=e.map(a=>a.status).filter(a=>"cancelled"!==a),g=f.filter(a=>"done"===a).length;return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)("p",{className:v,children:["Epic · ",a.id]}),(0,b.jsx)("h3",{className:"text-base font-semibold leading-snug text-txt",children:a.title}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsx)(s.StatusPill,{status:a.status}),a.due&&(0,b.jsxs)("span",{className:"font-mono text-[10px] text-muted",children:["due ",a.due]})]})]}),f.length>0&&(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsxs)("div",{className:"flex items-baseline justify-between",children:[(0,b.jsx)("p",{className:v,children:"Progress"}),(0,b.jsxs)("span",{className:"font-mono text-[10px] text-muted",children:[g,"/",f.length," tasks"]})]}),(0,b.jsx)(s.SegmentedProgress,{statuses:f})]}),e.length>0&&(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("p",{className:v,children:"Tasks"}),(0,b.jsx)("ul",{className:"-mx-2 flex flex-col",children:e.map(a=>(0,b.jsx)(z,{task:a},a.id))})]}),a.body.trim()&&(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("p",{className:v,children:"Brief"}),(0,b.jsx)(q.MarkdownRenderer,{content:a.body,className:"prose-compact"})]}),(0,b.jsx)(C,{attach:{kind:"epic",id:a.id},label:"Open in roadmap"})]})}function z({task:a}){let{showAbout:c}=(0,h.useChats)();return(0,b.jsx)("li",{children:(0,b.jsxs)("button",{type:"button",onClick:()=>c({kind:"task",id:a.id}),title:`Chat about ${a.id}`,className:"flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-xs transition-colors duration-(--duration-fast) hover:bg-surface2",children:[(0,b.jsx)(r.StatusIcon,{status:(0,j.displayStatus)(a),className:"size-3"}),(0,b.jsx)("span",{className:"shrink-0 font-mono text-[10px] text-muted",children:a.id}),(0,b.jsx)("span",{className:(0,t.cn)("min-w-0 flex-1 truncate","done"===a.status?"text-muted":"text-txt"),children:a.title})]})})}function A({task:a,id:c,items:d}){let{showAbout:e}=(0,h.useChats)();if(!a)return(0,b.jsx)(B,{kind:"Task",id:c});let f=a.phase.match(/^R\d+/)?.[0],g=f?d.find(a=>a.id===f):void 0,i=a.raw?.replace(/^#.*\n(\*\*[^*]+:\*\*.*\n)*/,"").trim();return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)("p",{className:v,children:["Task · ",a.id]}),(0,b.jsx)("h3",{className:"text-base font-semibold leading-snug text-txt",children:a.title}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsx)(r.StatusChip,{status:(0,j.displayStatus)(a)}),a.size&&(0,b.jsx)("span",{className:"font-mono text-[10px] text-muted",children:a.size}),a.due&&(0,b.jsxs)("span",{className:"font-mono text-[10px] text-muted",children:["due ",a.due]})]})]}),(0,b.jsxs)("dl",{className:"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1.5 text-xs",children:[f&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("dt",{className:"text-muted",children:"Epic"}),(0,b.jsx)("dd",{className:"min-w-0",children:(0,b.jsxs)("button",{type:"button",onClick:()=>e({kind:"epic",id:f}),className:"truncate text-left text-txt hover:text-accent",title:`Chat about ${f}`,children:[(0,b.jsx)("span",{className:"font-mono text-[10px] text-muted",children:f})," ",g?.title??a.phase.replace(/^R\d+\s*—\s*/,"")]})})]}),a.dependsOn&&"—"!==a.dependsOn&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("dt",{className:"text-muted",children:"Depends on"}),(0,b.jsx)("dd",{className:"font-mono text-[11px] text-txt",children:a.dependsOn})]})]}),i&&(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("p",{className:v,children:"Spec"}),(0,b.jsx)(q.MarkdownRenderer,{content:i,className:"prose-compact"})]}),(0,b.jsx)(C,{attach:{kind:"task",id:a.id},label:"Open on board"})]})}function B({kind:a,id:c}){return(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)("p",{className:v,children:[a," · ",c]}),(0,b.jsxs)("p",{className:"text-sm text-muted",children:[a," ",c," isn't in this project any more."]})]})}function C({attach:a,label:c}){return(0,b.jsxs)(k.default,{href:(0,u.attachHref)(a),className:"group inline-flex w-fit items-center gap-1.5 rounded-md border border-border px-3 py-1.5 text-xs text-txt transition-colors duration-(--duration-fast) hover:border-accent/50 hover:text-accent",children:[c,(0,b.jsx)(l.ArrowUpRight,{className:"size-3.5 transition-transform duration-(--duration-fast) group-hover:-translate-y-px group-hover:translate-x-px"})]})}var D=a.i(107742);let E=a=>{let b=setInterval(a,3e4);return()=>clearInterval(b)},F=()=>6e4*Math.floor(Date.now()/6e4);function G(){let{chats:a,loaded:c,create:e,show:f,send:g,now:j}=(0,h.useChats)(),k=(0,d.useRouter)(),l=(0,d.useSearchParams)().get("id"),m=a.find(a=>a.id===l)??(l?void 0:(0,D.defaultChat)(a,j));function n(a){let b=e();f(b),a&&g(b,a)}return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(H,{selectedId:m?.id??null,onNew:()=>n()}),(0,b.jsx)("section",{className:"flex min-w-0 flex-1 flex-col border-r border-border bg-bg",children:m?(0,b.jsx)("div",{className:"flex min-h-0 flex-1 flex-col animate-fade-in",children:(0,b.jsx)(i.ChatView,{chatId:m.id,variant:"page"})},m.id):c?(0,b.jsx)(J,{missing:!!l,onStart:n,onBack:()=>k.replace("/chat")}):null}),(0,b.jsx)("aside",{className:"hidden w-80 shrink-0 bg-surface xl:block","aria-label":"Chat context",children:(0,b.jsx)(w,{attach:m?.attach??null})})]})}function H({selectedId:a,onNew:d}){let{chats:g,now:i}=(0,h.useChats)(),[j,k]=(0,c.useState)(""),l=j.trim().toLowerCase(),m=l?g.filter(a=>a.title.toLowerCase().includes(l)||a.attach?.id.toLowerCase().includes(l)):g,n=(0,D.groupChats)(m,i),o=[{label:"Needs you",items:n.needsYou,tone:"text-amber"},{label:"Errors",items:n.errors,tone:"text-danger"},{label:"Running",items:n.running,tone:"text-accent"},{label:"Recent",items:n.recent,tone:"text-muted"}];return(0,b.jsxs)("aside",{className:"hidden w-72 shrink-0 flex-col border-r border-border bg-surface md:flex","aria-label":"All chats",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 px-4 pb-3 pt-4",children:[(0,b.jsx)("h1",{className:"flex-1 text-sm font-semibold text-txt",children:"Chats"}),(0,b.jsxs)("button",{type:"button",onClick:d,className:"inline-flex items-center gap-1.5 rounded-md bg-accent px-2.5 py-1.5 text-xs font-medium text-accent-fg transition-[filter,transform] duration-(--duration-fast) hover:brightness-110 active:scale-[0.97]",children:[(0,b.jsx)(e.Plus,{className:"size-3.5"})," New chat"]})]}),g.length>3&&(0,b.jsxs)("label",{className:"mx-3 mb-2 flex items-center gap-2 rounded-md border border-border bg-bg px-2.5 py-1.5 text-xs focus-within:border-accent/50",children:[(0,b.jsx)(f.Search,{className:"size-3.5 text-muted"}),(0,b.jsx)("input",{value:j,onChange:a=>k(a.target.value),placeholder:"Filter by title or R/T id",className:"min-w-0 flex-1 bg-transparent text-txt placeholder:text-muted focus:outline-hidden"})]}),(0,b.jsxs)("div",{className:"min-h-0 flex-1 overflow-y-auto px-2 pb-4",children:[0===g.length&&(0,b.jsx)("p",{className:"px-2 py-6 text-xs text-muted",children:"No chats yet."}),o.map(c=>c.items.length>0&&(0,b.jsxs)("div",{className:"mt-3 first:mt-1",children:[(0,b.jsxs)("p",{className:(0,t.cn)("px-2 pb-1 font-mono text-[10px] uppercase tracking-widest",c.tone),children:[c.label," · ",c.items.length]}),(0,b.jsx)("ul",{className:"flex flex-col gap-px",children:c.items.map(c=>(0,b.jsx)(I,{chat:c,active:c.id===a},c.id))})]},c.label)),l&&0===m.length&&(0,b.jsxs)("p",{className:"px-2 py-6 text-xs text-muted",children:["No chat matches “",j,"”."]})]})]})}function I({chat:a,active:d}){let{show:e,remove:f,now:i}=(0,h.useChats)(),j=(0,c.useSyncExternalStore)(E,F,()=>0),k=(0,D.shellStatus)(a,i),l=[...a.messages].reverse().find(a=>a.text)?.text.replace(/\s+/g," ").trim();return(0,b.jsxs)("li",{className:"group relative animate-slide-in",children:[(0,b.jsxs)("button",{type:"button",onClick:()=>e(a.id),"aria-current":d?"true":void 0,className:(0,t.cn)("flex w-full flex-col gap-1 rounded-lg px-2.5 py-2 text-left transition-colors duration-(--duration-fast)",d?"bg-surface2 shadow-[inset_2px_0_0_var(--color-accent-edge)]":"hover:bg-surface2/60"),children:[(0,b.jsxs)("span",{className:"flex items-center gap-2 pr-5",children:[(0,b.jsx)(u.StatusMarker,{status:k,showIdle:!0}),(0,b.jsx)("span",{className:(0,t.cn)("min-w-0 flex-1 truncate text-[13px]","idle"!==k||d?"text-txt":"text-txt/80"),children:a.title}),j>0&&(0,b.jsx)("span",{className:"shrink-0 font-mono text-[10px] text-muted group-hover:opacity-0",children:(0,D.ago)(a.updatedAt,j)})]}),(a.attach||l)&&(0,b.jsxs)("span",{className:"flex items-center gap-2 pl-5 text-[11px] text-muted",children:[a.attach&&(0,b.jsx)(u.AttachLabel,{attach:a.attach,className:"shrink-0"}),l&&(0,b.jsx)("span",{className:"min-w-0 truncate",children:l})]})]}),(0,b.jsx)("button",{type:"button",onClick:()=>f(a.id),"aria-label":`Close ${a.title}`,title:a.busy?"Stop and delete chat":"Delete chat",className:"absolute right-1.5 top-1.5 grid size-6 place-items-center rounded-md text-muted opacity-0 transition-opacity duration-(--duration-fast) hover:bg-surface hover:text-danger focus-visible:opacity-100 group-hover:opacity-100",children:(0,b.jsx)(g.X,{className:"size-3.5"})})]})}function J({missing:a,onStart:c,onBack:d}){return(0,b.jsx)("div",{className:"grid flex-1 place-items-center p-8",children:(0,b.jsxs)("div",{className:"flex max-w-md flex-col items-start gap-4 animate-fade-in",children:[(0,b.jsx)("div",{className:"grid size-10 place-items-center rounded-xl bg-linear-to-br from-accent to-teal text-white","aria-hidden":!0,children:"⬡"}),a?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("h2",{className:"text-lg font-semibold text-txt",children:"This chat was deleted"}),(0,b.jsx)("button",{type:"button",onClick:d,className:"text-sm text-accent hover:underline",children:"Back to all chats"})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-lg font-semibold text-txt",children:"Run chats side by side"}),(0,b.jsx)("p",{className:"mt-1 text-sm text-muted",children:"Each chat is its own Claude Code session, up to 4 at once. Start one here, or from an epic on the roadmap or a task on the board."})]}),(0,b.jsx)("div",{className:"flex flex-col gap-1.5",children:(0,D.suggestions)(null).map(a=>(0,b.jsx)("button",{type:"button",onClick:()=>c(a),className:"rounded-lg border border-border px-3 py-2 text-left text-sm text-txt/90 transition-colors hover:border-accent/50 hover:bg-accent/5",children:a},a))})]})]})})}a.s(["default",0,function(){return(0,b.jsx)("div",{className:"flex h-[calc(100svh-3rem)] min-h-0",children:(0,b.jsx)(c.Suspense,{children:(0,b.jsx)(G,{})})})}],856095)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=src_app_%28app%29_chat_page_tsx_0c3e4l4._.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/chat/ChatContextRail.tsx","../../../../src/app/%28app%29/chat/page.tsx","../../../../src/hooks/use-minute.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/link-2-off.ts"],"sourcesContent":["\"use client\"\n\nimport { displayStatus } from \"@/lib/statuses\"\nimport { useEffect, useMemo, useState } from \"react\"\nimport Link from \"next/link\"\nimport { ArrowUpRight, Link2Off } from \"lucide-react\"\nimport { useApp } from \"@/context/AppContext\"\nimport { useChats } from \"@/context/ChatContext\"\nimport { MarkdownRenderer } from \"@/components/docs/MarkdownRenderer\"\nimport { StatusChip, StatusIcon } from \"@/components/shared/StatusIcon\"\nimport { SegmentedProgress, StatusPill } from \"@/components/roadmap/RoadmapNodes\"\nimport { cn } from \"@/lib/utils\"\nimport type { Attach } from \"@/lib/chats\"\nimport type { RoadmapItem, Task, TaskStatus } from \"@/types\"\nimport { attachHref } from \"./StatusMarker\"\n\nconst KICKER = \"font-mono text-[10px] uppercase tracking-widest text-muted\"\n\n\n/** Right column of /chat: what the chat is about (epic or task), live from the board and roadmap. */\nexport function ChatContextRail({ attach }: { attach: Attach | null }) {\n const { board, rootParam } = useApp()\n const [items, setItems] = useState<RoadmapItem[]>([])\n const [reload, setReload] = useState(0)\n\n // Roadmap items: loaded here (the roadmap page keeps its own copy); refetched on roadmap SSE events\n useEffect(() => {\n let cancelled = false\n fetch(`/api/roadmap${rootParam}`)\n .then((r) => (r.ok ? r.json() : { items: [] }))\n .then((d: { items?: RoadmapItem[] }) => { if (!cancelled) setItems(d.items ?? []) })\n .catch((e) => console.warn(\"[vibedoc] could not load roadmap for the chat rail:\", e))\n return () => { cancelled = true }\n }, [rootParam, reload])\n useEffect(() => {\n const onSse = (e: Event) => {\n const type = (e as CustomEvent<{ type?: string }>).detail?.type\n if (type === \"roadmap_updated\" || type === \"task_created\") setReload((n) => n + 1)\n }\n window.addEventListener(\"vibedoc:sse\", onSse)\n return () => window.removeEventListener(\"vibedoc:sse\", onSse)\n }, [])\n\n const tasksById = useMemo(() => {\n const all = board ? Object.values(board).flat() : []\n return Object.fromEntries(all.map((t) => [t.id, t])) as Record<string, Task>\n }, [board])\n\n return (\n <div className=\"flex h-full min-h-0 flex-col overflow-y-auto\">\n <div key={attach ? `${attach.kind}:${attach.id}` : \"none\"} className=\"flex flex-col gap-5 p-5 animate-fade-in\">\n {!attach && <NoAttach />}\n {attach?.kind === \"epic\" && <EpicContext item={items.find((i) => i.id === attach.id)} id={attach.id} tasksById={tasksById} />}\n {attach?.kind === \"task\" && <TaskContext task={tasksById[attach.id]} id={attach.id} items={items} />}\n </div>\n </div>\n )\n}\n\nfunction NoAttach() {\n return (\n <>\n <p className={KICKER}>Context</p>\n <div className=\"flex flex-col items-start gap-3 rounded-lg border border-dashed border-border2 p-4\">\n <Link2Off className=\"size-4 text-muted\" />\n <p className=\"text-sm text-txt\">Not linked to an epic or task</p>\n <p className=\"text-xs leading-relaxed text-muted\">\n Open a chat from an epic on the roadmap or a task on the board, and the agent starts with that item as context.\n Its status then shows on the item.\n </p>\n </div>\n <div className=\"flex flex-col gap-2\">\n <p className={KICKER}>The agent can</p>\n <ul className=\"flex flex-col gap-1.5 text-xs text-muted\">\n <li>Read docs, tasks, the roadmap and memory</li>\n <li>Propose doc and task edits (you review a diff)</li>\n <li>Propose epics and task breakdowns (you accept)</li>\n <li className=\"text-muted/70\">It can't run code or edit source files</li>\n </ul>\n </div>\n </>\n )\n}\n\nfunction EpicContext({ item, id, tasksById }: { item?: RoadmapItem; id: string; tasksById: Record<string, Task> }) {\n if (!item) return <Missing kind=\"Epic\" id={id} />\n const tasks = item.tasks.map((t) => tasksById[t]).filter((t): t is Task => !!t)\n const statuses = tasks.map((t) => t.status).filter((s): s is TaskStatus => s !== \"cancelled\")\n const done = statuses.filter((s) => s === \"done\").length\n return (\n <>\n <div className=\"flex flex-col gap-2\">\n <p className={KICKER}>Epic · {item.id}</p>\n <h3 className=\"text-base font-semibold leading-snug text-txt\">{item.title}</h3>\n <div className=\"flex flex-wrap items-center gap-2\">\n <StatusPill status={item.status} />\n {item.due && <span className=\"font-mono text-[10px] text-muted\">due {item.due}</span>}\n </div>\n </div>\n\n {statuses.length > 0 && (\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"flex items-baseline justify-between\">\n <p className={KICKER}>Progress</p>\n <span className=\"font-mono text-[10px] text-muted\">{done}/{statuses.length} tasks</span>\n </div>\n <SegmentedProgress statuses={statuses} />\n </div>\n )}\n\n {tasks.length > 0 && (\n <div className=\"flex flex-col gap-1.5\">\n <p className={KICKER}>Tasks</p>\n <ul className=\"-mx-2 flex flex-col\">\n {tasks.map((t) => <TaskRow key={t.id} task={t} />)}\n </ul>\n </div>\n )}\n\n {item.body.trim() && (\n <div className=\"flex flex-col gap-1.5\">\n <p className={KICKER}>Brief</p>\n <MarkdownRenderer content={item.body} className=\"prose-compact\" />\n </div>\n )}\n\n <OpenLink attach={{ kind: \"epic\", id: item.id }} label=\"Open in roadmap\" />\n </>\n )\n}\n\nfunction TaskRow({ task }: { task: Task }) {\n const { showAbout } = useChats()\n return (\n <li>\n <button\n type=\"button\"\n onClick={() => showAbout({ kind: \"task\", id: task.id })}\n title={`Chat about ${task.id}`}\n className=\"flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-xs transition-colors duration-(--duration-fast) hover:bg-surface2\"\n >\n <StatusIcon status={displayStatus(task)} className=\"size-3\" />\n <span className=\"shrink-0 font-mono text-[10px] text-muted\">{task.id}</span>\n <span className={cn(\"min-w-0 flex-1 truncate\", task.status === \"done\" ? \"text-muted\" : \"text-txt\")}>{task.title}</span>\n </button>\n </li>\n )\n}\n\nfunction TaskContext({ task, id, items }: { task?: Task; id: string; items: RoadmapItem[] }) {\n const { showAbout } = useChats()\n if (!task) return <Missing kind=\"Task\" id={id} />\n const epicId = task.phase.match(/^R\\d+/)?.[0]\n const epic = epicId ? items.find((i) => i.id === epicId) : undefined\n const body = task.raw?.replace(/^#.*\\n(\\*\\*[^*]+:\\*\\*.*\\n)*/, \"\").trim()\n return (\n <>\n <div className=\"flex flex-col gap-2\">\n <p className={KICKER}>Task · {task.id}</p>\n <h3 className=\"text-base font-semibold leading-snug text-txt\">{task.title}</h3>\n <div className=\"flex flex-wrap items-center gap-2\">\n <StatusChip status={displayStatus(task)} />\n {task.size && <span className=\"font-mono text-[10px] text-muted\">{task.size}</span>}\n {task.due && <span className=\"font-mono text-[10px] text-muted\">due {task.due}</span>}\n </div>\n </div>\n\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1.5 text-xs\">\n {epicId && (\n <>\n <dt className=\"text-muted\">Epic</dt>\n <dd className=\"min-w-0\">\n <button type=\"button\" onClick={() => showAbout({ kind: \"epic\", id: epicId })} className=\"truncate text-left text-txt hover:text-accent\" title={`Chat about ${epicId}`}>\n <span className=\"font-mono text-[10px] text-muted\">{epicId}</span> {epic?.title ?? task.phase.replace(/^R\\d+\\s*—\\s*/, \"\")}\n </button>\n </dd>\n </>\n )}\n {task.dependsOn && task.dependsOn !== \"—\" && (\n <>\n <dt className=\"text-muted\">Depends on</dt>\n <dd className=\"font-mono text-[11px] text-txt\">{task.dependsOn}</dd>\n </>\n )}\n </dl>\n\n {body && (\n <div className=\"flex flex-col gap-1.5\">\n <p className={KICKER}>Spec</p>\n <MarkdownRenderer content={body} className=\"prose-compact\" />\n </div>\n )}\n\n <OpenLink attach={{ kind: \"task\", id: task.id }} label=\"Open on board\" />\n </>\n )\n}\n\nfunction Missing({ kind, id }: { kind: string; id: string }) {\n return (\n <div className=\"flex flex-col gap-2\">\n <p className={KICKER}>{kind} · {id}</p>\n <p className=\"text-sm text-muted\">{kind} {id} isn't in this project any more.</p>\n </div>\n )\n}\n\nfunction OpenLink({ attach, label }: { attach: Attach; label: string }) {\n return (\n <Link\n href={attachHref(attach)}\n className=\"group inline-flex w-fit items-center gap-1.5 rounded-md border border-border px-3 py-1.5 text-xs text-txt transition-colors duration-(--duration-fast) hover:border-accent/50 hover:text-accent\"\n >\n {label}\n <ArrowUpRight className=\"size-3.5 transition-transform duration-(--duration-fast) group-hover:-translate-y-px group-hover:translate-x-px\" />\n </Link>\n )\n}\n","\"use client\"\n\nimport { Suspense, useState } from \"react\"\nimport { useRouter, useSearchParams } from \"next/navigation\"\nimport { Plus, Search, X } from \"lucide-react\"\nimport { useChats, type ChatTab } from \"@/context/ChatContext\"\nimport { ChatView } from \"@/components/chat/ChatView\"\nimport { ChatContextRail } from \"@/components/chat/ChatContextRail\"\nimport { AttachLabel, StatusMarker } from \"@/components/chat/StatusMarker\"\nimport { ago, defaultChat, groupChats, shellStatus, suggestions } from \"@/lib/chats\"\nimport { useMinute } from \"@/hooks/use-minute\"\nimport { cn } from \"@/lib/utils\"\n\nexport default function ChatPage() {\n // main has no fixed height; the columns need one (viewport minus the h-12 AppHeader)\n return (\n <div className=\"flex h-[calc(100svh-3rem)] min-h-0\">\n <Suspense>\n <ChatPageInner />\n </Suspense>\n </div>\n )\n}\n\nfunction ChatPageInner() {\n const { chats, loaded, create, show, send, now } = useChats()\n const router = useRouter()\n const param = useSearchParams().get(\"id\")\n const selected = chats.find((c) => c.id === param) ?? (param ? undefined : defaultChat(chats, now))\n\n function startWith(text?: string) {\n const id = create()\n show(id)\n if (text) send(id, text)\n }\n\n return (\n <>\n <ChatList selectedId={selected?.id ?? null} onNew={() => startWith()} />\n\n <section className=\"flex min-w-0 flex-1 flex-col border-r border-border bg-bg\">\n {selected ? (\n <div key={selected.id} className=\"flex min-h-0 flex-1 flex-col animate-fade-in\">\n <ChatView chatId={selected.id} variant=\"page\" />\n </div>\n ) : loaded ? (\n <NoChat\n missing={!!param}\n onStart={startWith}\n onBack={() => router.replace(\"/chat\")}\n />\n ) : null}\n </section>\n\n <aside className=\"hidden w-80 shrink-0 bg-surface xl:block\" aria-label=\"Chat context\">\n <ChatContextRail attach={selected?.attach ?? null} />\n </aside>\n </>\n )\n}\n\nfunction ChatList({ selectedId, onNew }: { selectedId: string | null; onNew: () => void }) {\n const { chats, now } = useChats()\n const [query, setQuery] = useState(\"\")\n const q = query.trim().toLowerCase()\n const shown = q ? chats.filter((c) => c.title.toLowerCase().includes(q) || c.attach?.id.toLowerCase().includes(q)) : chats\n const g = groupChats(shown, now)\n const sections = [\n { label: \"Needs you\", items: g.needsYou, tone: \"text-amber\" },\n { label: \"Errors\", items: g.errors, tone: \"text-danger\" },\n { label: \"Running\", items: g.running, tone: \"text-accent\" },\n { label: \"Recent\", items: g.recent, tone: \"text-muted\" },\n ]\n\n return (\n <aside className=\"hidden w-72 shrink-0 flex-col border-r border-border bg-surface md:flex\" aria-label=\"All chats\">\n <div className=\"flex items-center gap-2 px-4 pb-3 pt-4\">\n <h1 className=\"flex-1 text-sm font-semibold text-txt\">Chats</h1>\n <button\n type=\"button\"\n onClick={onNew}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-accent px-2.5 py-1.5 text-xs font-medium text-accent-fg transition-[filter,transform] duration-(--duration-fast) hover:brightness-110 active:scale-[0.97]\"\n >\n <Plus className=\"size-3.5\" /> New chat\n </button>\n </div>\n {chats.length > 3 && (\n <label className=\"mx-3 mb-2 flex items-center gap-2 rounded-md border border-border bg-bg px-2.5 py-1.5 text-xs focus-within:border-accent/50\">\n <Search className=\"size-3.5 text-muted\" />\n <input\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder=\"Filter by title or R/T id\"\n className=\"min-w-0 flex-1 bg-transparent text-txt placeholder:text-muted focus:outline-hidden\"\n />\n </label>\n )}\n <div className=\"min-h-0 flex-1 overflow-y-auto px-2 pb-4\">\n {chats.length === 0 && <p className=\"px-2 py-6 text-xs text-muted\">No chats yet.</p>}\n {sections.map((s) => s.items.length > 0 && (\n <div key={s.label} className=\"mt-3 first:mt-1\">\n <p className={cn(\"px-2 pb-1 font-mono text-[10px] uppercase tracking-widest\", s.tone)}>\n {s.label} · {s.items.length}\n </p>\n <ul className=\"flex flex-col gap-px\">\n {s.items.map((c) => <ChatRow key={c.id} chat={c} active={c.id === selectedId} />)}\n </ul>\n </div>\n ))}\n {q && shown.length === 0 && <p className=\"px-2 py-6 text-xs text-muted\">No chat matches “{query}”.</p>}\n </div>\n </aside>\n )\n}\n\nfunction ChatRow({ chat, active }: { chat: ChatTab; active: boolean }) {\n const { show, remove, now: clock } = useChats()\n const now = useMinute()\n const status = shellStatus(chat, clock)\n const lastText = [...chat.messages].reverse().find((m) => m.text)?.text.replace(/\\s+/g, \" \").trim()\n return (\n <li className=\"group relative animate-slide-in\">\n <button\n type=\"button\"\n onClick={() => show(chat.id)}\n aria-current={active ? \"true\" : undefined}\n className={cn(\n \"flex w-full flex-col gap-1 rounded-lg px-2.5 py-2 text-left transition-colors duration-(--duration-fast)\",\n active ? \"bg-surface2 shadow-[inset_2px_0_0_rgb(var(--rgb-accent))]\" : \"hover:bg-surface2/60\",\n )}\n >\n <span className=\"flex items-center gap-2 pr-5\">\n <StatusMarker status={status} showIdle />\n <span className={cn(\"min-w-0 flex-1 truncate text-[13px]\", status === \"idle\" && !active ? \"text-txt/80\" : \"text-txt\")}>{chat.title}</span>\n {now > 0 && <span className=\"shrink-0 font-mono text-[10px] text-muted group-hover:opacity-0\">{ago(chat.updatedAt, now)}</span>}\n </span>\n {(chat.attach || lastText) && (\n <span className=\"flex items-center gap-2 pl-5 text-[11px] text-muted\">\n {chat.attach && <AttachLabel attach={chat.attach} className=\"shrink-0\" />}\n {lastText && <span className=\"min-w-0 truncate\">{lastText}</span>}\n </span>\n )}\n </button>\n <button\n type=\"button\"\n onClick={() => remove(chat.id)}\n aria-label={`Close ${chat.title}`}\n title={chat.busy ? \"Stop and delete chat\" : \"Delete chat\"}\n className=\"absolute right-1.5 top-1.5 grid size-6 place-items-center rounded-md text-muted opacity-0 transition-opacity duration-(--duration-fast) hover:bg-surface hover:text-danger focus-visible:opacity-100 group-hover:opacity-100\"\n >\n <X className=\"size-3.5\" />\n </button>\n </li>\n )\n}\n\nfunction NoChat({ missing, onStart, onBack }: { missing: boolean; onStart: (text?: string) => void; onBack: () => void }) {\n return (\n <div className=\"grid flex-1 place-items-center p-8\">\n <div className=\"flex max-w-md flex-col items-start gap-4 animate-fade-in\">\n <div className=\"grid size-10 place-items-center rounded-xl bg-linear-to-br from-accent to-teal text-white\" aria-hidden>⬡</div>\n {missing ? (\n <>\n <h2 className=\"text-lg font-semibold text-txt\">This chat was deleted</h2>\n <button type=\"button\" onClick={onBack} className=\"text-sm text-accent hover:underline\">Back to all chats</button>\n </>\n ) : (\n <>\n <div>\n <h2 className=\"text-lg font-semibold text-txt\">Run chats side by side</h2>\n <p className=\"mt-1 text-sm text-muted\">\n Each chat is its own Claude Code session, up to 4 at once. Start one here, or from an epic on the roadmap or a task on the board.\n </p>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n {suggestions(null).map((s) => (\n <button key={s} type=\"button\" onClick={() => onStart(s)} className=\"rounded-lg border border-border px-3 py-2 text-left text-sm text-txt/90 transition-colors hover:border-accent/50 hover:bg-accent/5\">\n {s}\n </button>\n ))}\n </div>\n </>\n )}\n </div>\n </div>\n )\n}\n","import { useSyncExternalStore } from \"react\"\n\nconst subscribe = (tick: () => void) => {\n const id = setInterval(tick, 30_000)\n return () => clearInterval(id)\n}\n// Rounded to the minute so the snapshot is stable between ticks\nconst snapshot = () => Math.floor(Date.now() / 60_000) * 60_000\n\n/** Current time in ms, updated about once a minute (for \"5m ago\" labels). 0 during server render. */\nexport function useMinute(): number {\n return useSyncExternalStore(subscribe, snapshot, () => 0)\n}\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'link-2-off',\n size: 24,\n node: [\n ['path', { d: 'M9 17H7A5 5 0 0 1 7 7', key: '10o201' }],\n ['path', { d: 'M15 7h2a5 5 0 0 1 4 8', key: '1d3206' }],\n ['line', { x1: '8', x2: '12', y1: '12', y2: '12', key: 'rvw6j4' }],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22', key: 'a6p6uj' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Link2Off\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/link-2-off\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 Link2Off = createLucideIcon(__iconData);\n\nexport default Link2Off;\n"],"names":["x2","y2"],"mappings":"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","ignoreList":[3]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/chat/ChatContextRail.tsx","../../../../src/app/%28app%29/chat/page.tsx","../../../../src/hooks/use-minute.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/link-2-off.ts"],"sourcesContent":["\"use client\"\n\nimport { displayStatus } from \"@/lib/statuses\"\nimport { useEffect, useMemo, useState } from \"react\"\nimport Link from \"next/link\"\nimport { ArrowUpRight, Link2Off } from \"lucide-react\"\nimport { useApp } from \"@/context/AppContext\"\nimport { useChats } from \"@/context/ChatContext\"\nimport { MarkdownRenderer } from \"@/components/docs/MarkdownRenderer\"\nimport { StatusChip, StatusIcon } from \"@/components/shared/StatusIcon\"\nimport { SegmentedProgress, StatusPill } from \"@/components/roadmap/RoadmapNodes\"\nimport { cn } from \"@/lib/utils\"\nimport type { Attach } from \"@/lib/chats\"\nimport type { RoadmapItem, Task, TaskStatus } from \"@/types\"\nimport { attachHref } from \"./StatusMarker\"\n\nconst KICKER = \"font-mono text-[10px] uppercase tracking-widest text-muted\"\n\n\n/** Right column of /chat: what the chat is about (epic or task), live from the board and roadmap. */\nexport function ChatContextRail({ attach }: { attach: Attach | null }) {\n const { board, rootParam } = useApp()\n const [items, setItems] = useState<RoadmapItem[]>([])\n const [reload, setReload] = useState(0)\n\n // Roadmap items: loaded here (the roadmap page keeps its own copy); refetched on roadmap SSE events\n useEffect(() => {\n let cancelled = false\n fetch(`/api/roadmap${rootParam}`)\n .then((r) => (r.ok ? r.json() : { items: [] }))\n .then((d: { items?: RoadmapItem[] }) => { if (!cancelled) setItems(d.items ?? []) })\n .catch((e) => console.warn(\"[vibedoc] could not load roadmap for the chat rail:\", e))\n return () => { cancelled = true }\n }, [rootParam, reload])\n useEffect(() => {\n const onSse = (e: Event) => {\n const type = (e as CustomEvent<{ type?: string }>).detail?.type\n if (type === \"roadmap_updated\" || type === \"task_created\") setReload((n) => n + 1)\n }\n window.addEventListener(\"vibedoc:sse\", onSse)\n return () => window.removeEventListener(\"vibedoc:sse\", onSse)\n }, [])\n\n const tasksById = useMemo(() => {\n const all = board ? Object.values(board).flat() : []\n return Object.fromEntries(all.map((t) => [t.id, t])) as Record<string, Task>\n }, [board])\n\n return (\n <div className=\"flex h-full min-h-0 flex-col overflow-y-auto\">\n <div key={attach ? `${attach.kind}:${attach.id}` : \"none\"} className=\"flex flex-col gap-5 p-5 animate-fade-in\">\n {!attach && <NoAttach />}\n {attach?.kind === \"epic\" && <EpicContext item={items.find((i) => i.id === attach.id)} id={attach.id} tasksById={tasksById} />}\n {attach?.kind === \"task\" && <TaskContext task={tasksById[attach.id]} id={attach.id} items={items} />}\n </div>\n </div>\n )\n}\n\nfunction NoAttach() {\n return (\n <>\n <p className={KICKER}>Context</p>\n <div className=\"flex flex-col items-start gap-3 rounded-lg border border-dashed border-border2 p-4\">\n <Link2Off className=\"size-4 text-muted\" />\n <p className=\"text-sm text-txt\">Not linked to an epic or task</p>\n <p className=\"text-xs leading-relaxed text-muted\">\n Open a chat from an epic on the roadmap or a task on the board, and the agent starts with that item as context.\n Its status then shows on the item.\n </p>\n </div>\n <div className=\"flex flex-col gap-2\">\n <p className={KICKER}>The agent can</p>\n <ul className=\"flex flex-col gap-1.5 text-xs text-muted\">\n <li>Read docs, tasks, the roadmap and memory</li>\n <li>Propose doc and task edits (you review a diff)</li>\n <li>Propose epics and task breakdowns (you accept)</li>\n <li className=\"text-muted/70\">It can't run code or edit source files</li>\n </ul>\n </div>\n </>\n )\n}\n\nfunction EpicContext({ item, id, tasksById }: { item?: RoadmapItem; id: string; tasksById: Record<string, Task> }) {\n if (!item) return <Missing kind=\"Epic\" id={id} />\n const tasks = item.tasks.map((t) => tasksById[t]).filter((t): t is Task => !!t)\n const statuses = tasks.map((t) => t.status).filter((s): s is TaskStatus => s !== \"cancelled\")\n const done = statuses.filter((s) => s === \"done\").length\n return (\n <>\n <div className=\"flex flex-col gap-2\">\n <p className={KICKER}>Epic · {item.id}</p>\n <h3 className=\"text-base font-semibold leading-snug text-txt\">{item.title}</h3>\n <div className=\"flex flex-wrap items-center gap-2\">\n <StatusPill status={item.status} />\n {item.due && <span className=\"font-mono text-[10px] text-muted\">due {item.due}</span>}\n </div>\n </div>\n\n {statuses.length > 0 && (\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"flex items-baseline justify-between\">\n <p className={KICKER}>Progress</p>\n <span className=\"font-mono text-[10px] text-muted\">{done}/{statuses.length} tasks</span>\n </div>\n <SegmentedProgress statuses={statuses} />\n </div>\n )}\n\n {tasks.length > 0 && (\n <div className=\"flex flex-col gap-1.5\">\n <p className={KICKER}>Tasks</p>\n <ul className=\"-mx-2 flex flex-col\">\n {tasks.map((t) => <TaskRow key={t.id} task={t} />)}\n </ul>\n </div>\n )}\n\n {item.body.trim() && (\n <div className=\"flex flex-col gap-1.5\">\n <p className={KICKER}>Brief</p>\n <MarkdownRenderer content={item.body} className=\"prose-compact\" />\n </div>\n )}\n\n <OpenLink attach={{ kind: \"epic\", id: item.id }} label=\"Open in roadmap\" />\n </>\n )\n}\n\nfunction TaskRow({ task }: { task: Task }) {\n const { showAbout } = useChats()\n return (\n <li>\n <button\n type=\"button\"\n onClick={() => showAbout({ kind: \"task\", id: task.id })}\n title={`Chat about ${task.id}`}\n className=\"flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-xs transition-colors duration-(--duration-fast) hover:bg-surface2\"\n >\n <StatusIcon status={displayStatus(task)} className=\"size-3\" />\n <span className=\"shrink-0 font-mono text-[10px] text-muted\">{task.id}</span>\n <span className={cn(\"min-w-0 flex-1 truncate\", task.status === \"done\" ? \"text-muted\" : \"text-txt\")}>{task.title}</span>\n </button>\n </li>\n )\n}\n\nfunction TaskContext({ task, id, items }: { task?: Task; id: string; items: RoadmapItem[] }) {\n const { showAbout } = useChats()\n if (!task) return <Missing kind=\"Task\" id={id} />\n const epicId = task.phase.match(/^R\\d+/)?.[0]\n const epic = epicId ? items.find((i) => i.id === epicId) : undefined\n const body = task.raw?.replace(/^#.*\\n(\\*\\*[^*]+:\\*\\*.*\\n)*/, \"\").trim()\n return (\n <>\n <div className=\"flex flex-col gap-2\">\n <p className={KICKER}>Task · {task.id}</p>\n <h3 className=\"text-base font-semibold leading-snug text-txt\">{task.title}</h3>\n <div className=\"flex flex-wrap items-center gap-2\">\n <StatusChip status={displayStatus(task)} />\n {task.size && <span className=\"font-mono text-[10px] text-muted\">{task.size}</span>}\n {task.due && <span className=\"font-mono text-[10px] text-muted\">due {task.due}</span>}\n </div>\n </div>\n\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1.5 text-xs\">\n {epicId && (\n <>\n <dt className=\"text-muted\">Epic</dt>\n <dd className=\"min-w-0\">\n <button type=\"button\" onClick={() => showAbout({ kind: \"epic\", id: epicId })} className=\"truncate text-left text-txt hover:text-accent\" title={`Chat about ${epicId}`}>\n <span className=\"font-mono text-[10px] text-muted\">{epicId}</span> {epic?.title ?? task.phase.replace(/^R\\d+\\s*—\\s*/, \"\")}\n </button>\n </dd>\n </>\n )}\n {task.dependsOn && task.dependsOn !== \"—\" && (\n <>\n <dt className=\"text-muted\">Depends on</dt>\n <dd className=\"font-mono text-[11px] text-txt\">{task.dependsOn}</dd>\n </>\n )}\n </dl>\n\n {body && (\n <div className=\"flex flex-col gap-1.5\">\n <p className={KICKER}>Spec</p>\n <MarkdownRenderer content={body} className=\"prose-compact\" />\n </div>\n )}\n\n <OpenLink attach={{ kind: \"task\", id: task.id }} label=\"Open on board\" />\n </>\n )\n}\n\nfunction Missing({ kind, id }: { kind: string; id: string }) {\n return (\n <div className=\"flex flex-col gap-2\">\n <p className={KICKER}>{kind} · {id}</p>\n <p className=\"text-sm text-muted\">{kind} {id} isn't in this project any more.</p>\n </div>\n )\n}\n\nfunction OpenLink({ attach, label }: { attach: Attach; label: string }) {\n return (\n <Link\n href={attachHref(attach)}\n className=\"group inline-flex w-fit items-center gap-1.5 rounded-md border border-border px-3 py-1.5 text-xs text-txt transition-colors duration-(--duration-fast) hover:border-accent/50 hover:text-accent\"\n >\n {label}\n <ArrowUpRight className=\"size-3.5 transition-transform duration-(--duration-fast) group-hover:-translate-y-px group-hover:translate-x-px\" />\n </Link>\n )\n}\n","\"use client\"\n\nimport { Suspense, useState } from \"react\"\nimport { useRouter, useSearchParams } from \"next/navigation\"\nimport { Plus, Search, X } from \"lucide-react\"\nimport { useChats, type ChatTab } from \"@/context/ChatContext\"\nimport { ChatView } from \"@/components/chat/ChatView\"\nimport { ChatContextRail } from \"@/components/chat/ChatContextRail\"\nimport { AttachLabel, StatusMarker } from \"@/components/chat/StatusMarker\"\nimport { ago, defaultChat, groupChats, shellStatus, suggestions } from \"@/lib/chats\"\nimport { useMinute } from \"@/hooks/use-minute\"\nimport { cn } from \"@/lib/utils\"\n\nexport default function ChatPage() {\n // main has no fixed height; the columns need one (viewport minus the h-12 AppHeader)\n return (\n <div className=\"flex h-[calc(100svh-3rem)] min-h-0\">\n <Suspense>\n <ChatPageInner />\n </Suspense>\n </div>\n )\n}\n\nfunction ChatPageInner() {\n const { chats, loaded, create, show, send, now } = useChats()\n const router = useRouter()\n const param = useSearchParams().get(\"id\")\n const selected = chats.find((c) => c.id === param) ?? (param ? undefined : defaultChat(chats, now))\n\n function startWith(text?: string) {\n const id = create()\n show(id)\n if (text) send(id, text)\n }\n\n return (\n <>\n <ChatList selectedId={selected?.id ?? null} onNew={() => startWith()} />\n\n <section className=\"flex min-w-0 flex-1 flex-col border-r border-border bg-bg\">\n {selected ? (\n <div key={selected.id} className=\"flex min-h-0 flex-1 flex-col animate-fade-in\">\n <ChatView chatId={selected.id} variant=\"page\" />\n </div>\n ) : loaded ? (\n <NoChat\n missing={!!param}\n onStart={startWith}\n onBack={() => router.replace(\"/chat\")}\n />\n ) : null}\n </section>\n\n <aside className=\"hidden w-80 shrink-0 bg-surface xl:block\" aria-label=\"Chat context\">\n <ChatContextRail attach={selected?.attach ?? null} />\n </aside>\n </>\n )\n}\n\nfunction ChatList({ selectedId, onNew }: { selectedId: string | null; onNew: () => void }) {\n const { chats, now } = useChats()\n const [query, setQuery] = useState(\"\")\n const q = query.trim().toLowerCase()\n const shown = q ? chats.filter((c) => c.title.toLowerCase().includes(q) || c.attach?.id.toLowerCase().includes(q)) : chats\n const g = groupChats(shown, now)\n const sections = [\n { label: \"Needs you\", items: g.needsYou, tone: \"text-amber\" },\n { label: \"Errors\", items: g.errors, tone: \"text-danger\" },\n { label: \"Running\", items: g.running, tone: \"text-accent\" },\n { label: \"Recent\", items: g.recent, tone: \"text-muted\" },\n ]\n\n return (\n <aside className=\"hidden w-72 shrink-0 flex-col border-r border-border bg-surface md:flex\" aria-label=\"All chats\">\n <div className=\"flex items-center gap-2 px-4 pb-3 pt-4\">\n <h1 className=\"flex-1 text-sm font-semibold text-txt\">Chats</h1>\n <button\n type=\"button\"\n onClick={onNew}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-accent px-2.5 py-1.5 text-xs font-medium text-accent-fg transition-[filter,transform] duration-(--duration-fast) hover:brightness-110 active:scale-[0.97]\"\n >\n <Plus className=\"size-3.5\" /> New chat\n </button>\n </div>\n {chats.length > 3 && (\n <label className=\"mx-3 mb-2 flex items-center gap-2 rounded-md border border-border bg-bg px-2.5 py-1.5 text-xs focus-within:border-accent/50\">\n <Search className=\"size-3.5 text-muted\" />\n <input\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder=\"Filter by title or R/T id\"\n className=\"min-w-0 flex-1 bg-transparent text-txt placeholder:text-muted focus:outline-hidden\"\n />\n </label>\n )}\n <div className=\"min-h-0 flex-1 overflow-y-auto px-2 pb-4\">\n {chats.length === 0 && <p className=\"px-2 py-6 text-xs text-muted\">No chats yet.</p>}\n {sections.map((s) => s.items.length > 0 && (\n <div key={s.label} className=\"mt-3 first:mt-1\">\n <p className={cn(\"px-2 pb-1 font-mono text-[10px] uppercase tracking-widest\", s.tone)}>\n {s.label} · {s.items.length}\n </p>\n <ul className=\"flex flex-col gap-px\">\n {s.items.map((c) => <ChatRow key={c.id} chat={c} active={c.id === selectedId} />)}\n </ul>\n </div>\n ))}\n {q && shown.length === 0 && <p className=\"px-2 py-6 text-xs text-muted\">No chat matches “{query}”.</p>}\n </div>\n </aside>\n )\n}\n\nfunction ChatRow({ chat, active }: { chat: ChatTab; active: boolean }) {\n const { show, remove, now: clock } = useChats()\n const now = useMinute()\n const status = shellStatus(chat, clock)\n const lastText = [...chat.messages].reverse().find((m) => m.text)?.text.replace(/\\s+/g, \" \").trim()\n return (\n <li className=\"group relative animate-slide-in\">\n <button\n type=\"button\"\n onClick={() => show(chat.id)}\n aria-current={active ? \"true\" : undefined}\n className={cn(\n \"flex w-full flex-col gap-1 rounded-lg px-2.5 py-2 text-left transition-colors duration-(--duration-fast)\",\n active ? \"bg-surface2 shadow-[inset_2px_0_0_var(--color-accent-edge)]\" : \"hover:bg-surface2/60\",\n )}\n >\n <span className=\"flex items-center gap-2 pr-5\">\n <StatusMarker status={status} showIdle />\n <span className={cn(\"min-w-0 flex-1 truncate text-[13px]\", status === \"idle\" && !active ? \"text-txt/80\" : \"text-txt\")}>{chat.title}</span>\n {now > 0 && <span className=\"shrink-0 font-mono text-[10px] text-muted group-hover:opacity-0\">{ago(chat.updatedAt, now)}</span>}\n </span>\n {(chat.attach || lastText) && (\n <span className=\"flex items-center gap-2 pl-5 text-[11px] text-muted\">\n {chat.attach && <AttachLabel attach={chat.attach} className=\"shrink-0\" />}\n {lastText && <span className=\"min-w-0 truncate\">{lastText}</span>}\n </span>\n )}\n </button>\n <button\n type=\"button\"\n onClick={() => remove(chat.id)}\n aria-label={`Close ${chat.title}`}\n title={chat.busy ? \"Stop and delete chat\" : \"Delete chat\"}\n className=\"absolute right-1.5 top-1.5 grid size-6 place-items-center rounded-md text-muted opacity-0 transition-opacity duration-(--duration-fast) hover:bg-surface hover:text-danger focus-visible:opacity-100 group-hover:opacity-100\"\n >\n <X className=\"size-3.5\" />\n </button>\n </li>\n )\n}\n\nfunction NoChat({ missing, onStart, onBack }: { missing: boolean; onStart: (text?: string) => void; onBack: () => void }) {\n return (\n <div className=\"grid flex-1 place-items-center p-8\">\n <div className=\"flex max-w-md flex-col items-start gap-4 animate-fade-in\">\n <div className=\"grid size-10 place-items-center rounded-xl bg-linear-to-br from-accent to-teal text-white\" aria-hidden>⬡</div>\n {missing ? (\n <>\n <h2 className=\"text-lg font-semibold text-txt\">This chat was deleted</h2>\n <button type=\"button\" onClick={onBack} className=\"text-sm text-accent hover:underline\">Back to all chats</button>\n </>\n ) : (\n <>\n <div>\n <h2 className=\"text-lg font-semibold text-txt\">Run chats side by side</h2>\n <p className=\"mt-1 text-sm text-muted\">\n Each chat is its own Claude Code session, up to 4 at once. Start one here, or from an epic on the roadmap or a task on the board.\n </p>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n {suggestions(null).map((s) => (\n <button key={s} type=\"button\" onClick={() => onStart(s)} className=\"rounded-lg border border-border px-3 py-2 text-left text-sm text-txt/90 transition-colors hover:border-accent/50 hover:bg-accent/5\">\n {s}\n </button>\n ))}\n </div>\n </>\n )}\n </div>\n </div>\n )\n}\n","import { useSyncExternalStore } from \"react\"\n\nconst subscribe = (tick: () => void) => {\n const id = setInterval(tick, 30_000)\n return () => clearInterval(id)\n}\n// Rounded to the minute so the snapshot is stable between ticks\nconst snapshot = () => Math.floor(Date.now() / 60_000) * 60_000\n\n/** Current time in ms, updated about once a minute (for \"5m ago\" labels). 0 during server render. */\nexport function useMinute(): number {\n return useSyncExternalStore(subscribe, snapshot, () => 0)\n}\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'link-2-off',\n size: 24,\n node: [\n ['path', { d: 'M9 17H7A5 5 0 0 1 7 7', key: '10o201' }],\n ['path', { d: 'M15 7h2a5 5 0 0 1 4 8', key: '1d3206' }],\n ['line', { x1: '8', x2: '12', y1: '12', y2: '12', key: 'rvw6j4' }],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22', key: 'a6p6uj' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Link2Off\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/link-2-off\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 Link2Off = createLucideIcon(__iconData);\n\nexport default Link2Off;\n"],"names":["x2","y2"],"mappings":"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","ignoreList":[3]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[429266,a=>{"use strict";var b=a.i(662145),c=a.i(174897),d=a.i(913975),e=a.i(365465),f=a.i(152716),g=a.i(89032),h=a.i(72551),i=a.i(853244),j=a.i(54165),k=a.i(368114),l=a.i(544394),m=a.i(699570),n=a.i(335732),o=a.i(731050),p=a.i(760093),q=a.i(692938),r=a.i(173628),s=a.i(443108),t=a.i(813722),u=a.i(815122),v=a.i(959792);function w(a){let b=0x811c9dc5;for(let c=0;c<a.length;c++)b^=a.charCodeAt(c),b=Math.imul(b,0x1000193);return(b>>>0)/0x100000000}function x(a,b,c){let d=new Set([b]),e=[b];for(let b=0;b<c;b++){let b=[];for(let c of a)for(let[a,f]of[[c.from,c.to],[c.to,c.from]])e.includes(a)&&!d.has(f)&&(d.add(f),b.push(f));e=b}return d}let y=[{kind:"doc",label:"Docs"},{kind:"adr",label:"ADRs"},{kind:"task",label:"Tasks"},{kind:"epic",label:"Epics"},{kind:"entry",label:"Entries"}],z=[...q.GRAPH_DEFAULT_KINDS],A={"--xy-background-color":"var(--color-bg)","--xy-controls-box-shadow":"none","--xy-controls-button-background-color":"transparent","--xy-controls-button-background-color-hover":"var(--color-surface2)","--xy-controls-button-color":"var(--color-muted)","--xy-controls-button-color-hover":"var(--color-txt)","--xy-controls-button-border-color":"transparent"},B={hideAttribution:!0},C={padding:.1,minZoom:.5,maxZoom:1},D={nodes:[],edges:[],broken:[],stale:[],targets:{}},E=new Set,F={left:"50%",top:"50%",transform:"translate(-50%, -50%)"},G="min(48px, max(100%, calc(24px / var(--graph-zoom, 1))))",H={doc:"Doc",adr:"ADR",task:"Task",epic:"Epic",entry:"Entry"};function I(a,b){if(!b)return{hue:"text-muted",hollow:!1};let c=(0,s.statusDefIn)(a,b),d="done"===c.category||"cancelled"===c.category;return{hue:d?"text-muted":r.STATUS_COLOR_CLASS[c.color].text,hollow:d}}let J=a=>1-Math.pow(1-a,4),K={pointerEvents:"none"},L=a=>Math.min((a??8)*30,240),M=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]),N="Tab moves between files, then the unlinked ones below the map. Enter selects a file; Enter again or O opens it. Arrow keys move to the nearest linked file. Escape clears the search, then the selection. Slash jumps to search; Enter there frames every match, then steps through them (Shift+Enter goes back).",O={"node.a11yDescription.default":N},P="rounded-sm border border-border2 bg-surface2 px-1 py-0.5 font-mono text-[10px] leading-none text-txt";function Q(a){let b=new MutationObserver(a);return b.observe(document.documentElement,{attributes:!0,attributeFilter:["class"]}),()=>b.disconnect()}function R(a){let b=a.get("focus"),c=a.get("kinds")?.split(",").filter(a=>y.some(b=>b.kind===a));return{node:a.get("node"),focus:"1"===b?1:2*("2"===b),kinds:c??z,q:a.get("q")??"",recent:"1"===a.get("recent")}}function S({kind:a,size:c,hollow:d,className:e}){let f=Math.max(1.6,12.5/c),g=d?{fill:"none",stroke:"currentColor",strokeWidth:f}:{fill:"currentColor"},h=d?f/2:0;return(0,b.jsx)("svg",{width:c,height:c,viewBox:"0 0 10 10","aria-hidden":!0,className:(0,k.cn)("shrink-0",e),children:"adr"===a?(0,b.jsx)("rect",{x:.75+h,y:.75+h,width:8.5-2*h,height:8.5-2*h,rx:"1",...g}):"epic"===a?(0,b.jsx)("path",{d:d?`M5 ${1.42*h}L${10-1.42*h} 5 5 ${10-1.42*h}${1.42*h} 5Z`:"M5 0 10 5 5 10 0 5Z",strokeLinejoin:"round",...g}):"entry"===a?(0,b.jsx)("circle",{cx:"5",cy:"5",r:"3.9",fill:"none",stroke:"currentColor",strokeWidth:"2.2"}):(0,b.jsx)("circle",{cx:"5",cy:"5",r:5-h,...g})})}let T={dot:(0,c.memo)(function({data:a}){let{node:c,size:d,box:g,dim:h,chip:i,active:j,match:l,changed:m,hue:n,hollow:o,recent:p,hideLabel:q,delay:r,quick:s,enter:t,exit:u}=a,v=t||u?void 0:a.unfold;return(0,b.jsxs)("div",{title:c.path,"data-changed":m||void 0,style:{width:g,height:g,...v&&{"--ux":`${v.x}px`,"--uy":`${v.y}px`,animationDelay:`${v.wait}ms`}},className:(0,k.cn)("relative flex items-center justify-center",t&&"animate-node-in",u&&"animate-node-out",v&&"graph-node-unfold"),children:[(0,b.jsx)("span",{"data-hit":!0,"aria-hidden":!0,style:{width:G,height:G},className:"absolute top-1/2 left-1/2 -translate-1/2"}),m&&[0,1].map(a=>(0,b.jsx)("span",{"aria-hidden":!0,style:{width:d,height:d},className:(0,k.cn)("graph-ping",a&&"graph-ping-2")},a)),(0,b.jsxs)("div",{style:{width:d,height:d,transitionDelay:`${r}ms`},className:(0,k.cn)("relative rounded-full transition-[opacity,box-shadow,outline-color] ease-out-soft",s?"duration-(--duration-fast)":"duration-(--duration-base)",n,h&&"opacity-25",j?"ring-2 ring-accent ring-offset-2 ring-offset-bg shadow-[0_0_0_5px_var(--color-bg),0_0_0_6px_var(--color-txt)]":l&&"outline-1 outline-offset-2 outline-dashed outline-accent","in-[[data-id]:focus-visible]:opacity-100",j?"in-[[data-id]:focus-visible]:shadow-[0_0_0_5px_var(--color-bg),0_0_0_6px_var(--color-txt),0_0_0_9px_rgb(var(--rgb-accent)/0.2)]":"in-[[data-id]:focus-visible]:ring-2 in-[[data-id]:focus-visible]:ring-accent/60 in-[[data-id]:focus-visible]:shadow-[0_0_0_6px_rgb(var(--rgb-accent)/0.15)]"),children:[(0,b.jsx)(S,{kind:c.kind,size:d,hollow:o,className:"block"}),p&&(0,b.jsx)("span",{"aria-hidden":!0,className:"absolute -top-0.5 -right-0.5 size-1.5 rounded-full bg-accent ring-1 ring-bg"}),(0,b.jsx)(e.Handle,{type:"source",position:f.Position.Top,isConnectable:!1,style:F,className:"opacity-0"}),(0,b.jsx)(e.Handle,{type:"target",position:f.Position.Top,isConnectable:!1,style:F,className:"opacity-0"}),(0,b.jsxs)("span",{"data-label":!0,className:(0,k.cn)("pointer-events-none absolute top-full left-1/2 mt-1 max-w-48 origin-top -translate-x-1/2 truncate rounded-sm text-[11px] whitespace-nowrap","transition-[opacity,background-color] duration-(--duration-base) ease-out-soft",j||l?"font-medium text-txt":"text-muted",i?"group-data-[far=true]/graph:scale-(--label-k) group-data-[far=true]/graph:bg-surface group-data-[far=true]/graph:px-1":"group-data-[far=true]/graph:opacity-0","group-data-[far=false]/graph:[text-shadow:0_0_2px_var(--color-bg),0_0_3px_var(--color-bg)]",q&&"opacity-0","group-data-[far=true]/graph:in-[[data-id]:focus-visible]:scale-(--label-k)","in-[[data-id]:focus-visible]:opacity-100! in-[[data-id]:focus-visible]:bg-surface in-[[data-id]:focus-visible]:px-1 in-[[data-id]:focus-visible]:text-txt in-[[data-id]:focus-visible]:ring-1 in-[[data-id]:focus-visible]:ring-accent/60 in-[[data-id]:focus-visible]:shadow-[0_0_0_3px_rgb(var(--rgb-accent)/0.15)]"),children:["doc"!==c.kind&&(0,b.jsx)("span",{className:"mr-1 font-mono text-[10px]",children:c.id}),c.label]})]})]})})};function U(){let a,{rootParam:i}=(0,l.useApp)(),n=(0,s.useStatusDefs)(),F=(0,d.useRouter)(),G=(0,o.useOpenNode)(a=>F.push(`/memory?entry=${encodeURIComponent(a)}`)),U=(0,d.useSearchParams)().toString(),V=(0,c.useMemo)(()=>R(new URLSearchParams(U)),[U]),X=(0,c.useCallback)(a=>{var b;let c,d,e;return b={...R(new URLSearchParams(window.location.search)),...a},c=new URLSearchParams(window.location.search),(d=(a,b)=>b?c.set(a,b):c.delete(a))("node",b.node),d("focus",b.node&&b.focus?String(b.focus):null),void(d("kinds",(e=y.map(a=>a.kind).filter(a=>b.kinds.includes(a))).join(",")===z.join(",")?null:e.join(",")||"none"),d("q",b.q||null),d("recent",b.recent?"1":null),window.history.replaceState(null,"",c.size?`${window.location.pathname}?${c}`:window.location.pathname))},[]),[Y,Z]=(0,c.useState)(null),[$,_]=(0,c.useState)(null),[aa,ab]=(0,c.useState)(0),[ac,ad]=(0,c.useState)(E),ae=(0,c.useRef)(null),af=(0,p.useLinkGeneration)(),[ag,ah]=(0,c.useState)(null),[ai,aj]=(0,c.useState)(1),[ak,al]=(0,c.useState)(!1),[am,an]=(0,c.useState)(void 0),ao=(0,c.useRef)(null),ap=(0,c.useSyncExternalStore)(Q,()=>document.documentElement.classList.contains("dark"),()=>!0);(0,c.useEffect)(()=>{let a=!0;return(0,p.fetchLinkJson)(`/api/docs/graph${i}`).then(b=>{if(!a)return;let c=b.nodes?b:D,d=ae.current?.root===i?ae.current.graph:null;ae.current={root:i,graph:c};let e=function(a,b){let c=new Set;if(!a)return c;let d=a=>`${a.label}\u0000${a.status??""}`,e=new Map(a.nodes.map(a=>[a.path,d(a)])),f=new Set(b.nodes.map(a=>a.path));for(let a of b.nodes)e.get(a.path)!==d(a)&&c.add(a.path);for(let a of e.keys())f.has(a)||c.add(a);let g=a=>`${a.from}\u0000${a.to}`,h=new Set(a.edges.map(g)),i=new Set(b.edges.map(g));for(let a of b.edges)h.has(g(a))||c.add(a.from).add(a.to);for(let b of a.edges)i.has(g(b))||c.add(b.from).add(b.to);return c}(d,c);Z(c),_(null),e.size&&ad(e)}).catch(b=>{console.warn("Loading the doc graph failed",b),a&&_(b instanceof Error?b.message:String(b))}),()=>{a=!1}},[i,af,aa]);let[aq,ar]=(0,c.useState)(null);(0,c.useEffect)(()=>{let a=!0;return(0,p.fetchLinkJson)(`/api/activity${i}&limit=1000`).then(b=>{a&&ar({events:Array.isArray(b)?b:[],at:Date.now()})}).catch(a=>console.warn("Loading the activity log for Recent failed",a)),()=>{a=!1}},[i,af]),(0,c.useEffect)(()=>{if(!ac.size)return;let a=setTimeout(()=>ad(E),1500);return()=>clearTimeout(a)},[ac]);let as=(0,c.useMemo)(()=>new Map((Y?.nodes??[]).map(a=>[a.path,a])),[Y]),at=(0,c.useMemo)(()=>Y&&aq?(0,q.touchedPaths)(aq.events,Y.nodes,aq.at-864e5):E,[Y,aq]),au=(0,c.useMemo)(()=>{let a=new Set;for(let b of Y?.nodes??[])b.status&&V.kinds.includes(b.kind)&&a.add((0,s.statusDefIn)(n,b.status).id);return n.filter(b=>a.has(b.id))},[Y,V.kinds,n]),av=(0,c.useMemo)(()=>{let a={};for(let b of Y?.nodes??[])a[b.kind]=(a[b.kind]??0)+1;return a},[Y]),aw=V.node&&as.has(V.node)&&V.kinds.includes(as.get(V.node).kind)?V.node:null,ax=aw&&V.focus?aw:null,ay=(0,c.useMemo)(()=>{var a;let b;if(!Y)return null;let c=new Set(Y.nodes.filter(a=>V.kinds.includes(a.kind)).map(a=>a.path)),d=(a=Y.edges.filter(a=>a.from!==a.to&&c.has(a.from)&&c.has(a.to)),b=new Set,a.filter(a=>{let c=`${a.from}\u0000${a.to}`;return!b.has(c)&&(b.add(c),!0)}));if(ax&&V.focus){let a=x(d,ax,V.focus);for(let b of c)a.has(b)||c.delete(b);d=d.filter(a=>c.has(a.from)&&c.has(a.to))}return{paths:[...c],edges:d}},[Y,V.kinds,ax,V.focus]),az=(0,c.useMemo)(()=>{let a=new Map;for(let b of ay?.edges??[])for(let[c,d]of[[b.from,b.to],[b.to,b.from]])a.set(c,(a.get(c)??new Set).add(d));return a},[ay]),aA=(0,c.useMemo)(()=>{let a=[...az].reduce((a,[b,c])=>!a||c.size>a[1]?[b,c.size]:a,null)?.[0],b=new Map(a?[[a,0]]:[]);for(let c=a?[a]:[],d=1;c.length;d++){let a=[];for(let e of c)for(let c of az.get(e)??[])b.has(c)||(b.set(c,d),a.push(c));c=a}return b},[az]),aB=(0,c.useMemo)(()=>(ay?.paths??[]).slice().sort((a,b)=>(as.get(a)?.label??a).localeCompare(as.get(b)?.label??b)||a.localeCompare(b)),[ay,as]),aC=(0,c.useMemo)(()=>(ay?.paths??[]).slice().sort().join("\0"),[ay]),aD=(0,c.useMemo)(()=>(ay?.edges??[]).map(a=>`${a.from}\u0000${a.to}`).sort().join("\n"),[ay]),aE=(0,c.useMemo)(()=>({nodes:aC?aC.split("\0").map(a=>({id:a})):[],edges:aD?aD.split("\n").map(a=>{let[b,c]=a.split("\0");return{from:b,to:c}}):[]}),[aC,aD]),aF=(0,c.useMemo)(()=>(function(a,b,c={}){return function(a,b,c){let{iterations:d=300,edgeLength:e=120,minDistance:f=48}=c,g=[...new Set(a.map(a=>a.id))].sort(),h=new Map(g.map((a,b)=>[a,b])),i=new Set,j=[];for(let a of b){let b=h.get(a.from),c=h.get(a.to);if(void 0===b||void 0===c||b===c)continue;let[d,e]=b<c?[b,c]:[c,b];i.has(`${d} ${e}`)||(i.add(`${d} ${e}`),j.push([d,e]))}j.sort((a,b)=>a[0]-b[0]||a[1]-b[1]);let k=g.map(()=>0);for(let[a,b]of j)k[a]++,k[b]++;let l=g.map((a,b)=>b).filter(a=>k[a]>0),m=l.length,n=+Math.sqrt(Math.max(m,1)),o=g.map(a=>(w(a)-.5)*n),p=g.map(a=>(w(`${a}\u0000y`)-.5)*n),q=new Float64Array(g.length),r=new Float64Array(g.length),s=[],t=a=>Math.round(d*(a/0)**2),u=0;for(let a=0;a<d;a++){for(;u<0&&t(u)===a;)s.push(v(o.slice(),p.slice(),4)),u++;let b=.1*n*(1-a/d)+.001;q.fill(0),r.fill(0);for(let a=0;a<m;a++){let b=l[a];for(let c=a+1;c<m;c++){let a=l[c],d=o[b]-o[a],e=p[b]-p[a],f=d*d+e*e;f<1e-9&&(e=.001,f=(d=(b-a)*.001)*d+e*e);let g=1/f;q[b]+=d*g,r[b]+=e*g,q[a]-=d*g,r[a]-=e*g}}for(let[a,b]of j){let c=o[a]-o[b],d=p[a]-p[b],e=Math.sqrt(c*c+d*d)/1;q[a]-=c*e,r[a]-=d*e,q[b]+=c*e,r[b]+=d*e}for(let a of l){q[a]-=.05*o[a],r[a]-=.05*p[a];let c=Math.hypot(q[a],r[a]);if(c>0){let d=Math.min(c,b)/c;o[a]+=q[a]*d,p[a]+=r[a]*d}}}return s.push(v(o,p,50)),s;function v(a,b,c){let d=j.reduce((c,[d,e])=>c+Math.hypot(a[d]-a[e],b[d]-b[e]),0)/(j.length||1),h=d>0?e/d:1;for(let c of l)a[c]*=h,b[c]*=h;for(let d=0;d<c;d++){let c=!1;for(let d=0;d<m;d++)for(let e=d+1;e<m;e++){let g=l[d],h=l[e],i=a[h]-a[g],j=b[h]-b[g],k=Math.hypot(i,j);if(k>=f)continue;k<1e-6&&(i=1,j=0,k=1);let m=(f-k)/2+.5;a[g]-=i/k*m,b[g]-=j/k*m,a[h]+=i/k*m,b[h]+=j/k*m,c=!0}if(!c)break}let i=m?(Math.min(...l.map(b=>a[b]))+Math.max(...l.map(b=>a[b])))/2:0,k=m?(Math.min(...l.map(a=>b[a]))+Math.max(...l.map(a=>b[a])))/2:0,n={};for(let c of l)n[g[c]]={x:Math.round((a[c]-i)*100)/100,y:Math.round((b[c]-k)*100)/100};return n}}(a,b,c)[0]})(aE.nodes,aE.edges),[aE]),aG=(0,c.useMemo)(()=>aB.filter(a=>aF[a]),[aB,aF]),aH=(0,c.useMemo)(()=>aB.filter(a=>!aF[a]),[aB,aF]),aI=(0,c.useRef)({timer:0,b:!1}),aJ=(0,c.useCallback)(()=>{clearTimeout(aI.current.timer),ao.current?.removeAttribute("data-unfold")},[]),aK=(0,c.useCallback)(()=>{if(aE.nodes.length>400)return;let a=aI.current;a.b=!a.b,clearTimeout(a.timer),ao.current?.setAttribute("data-unfold",a.b?"b":"a"),a.timer=window.setTimeout(aJ,1660)},[aE,aJ]);(0,c.useEffect)(()=>aJ,[aJ]);let aL=(0,c.useRef)(!1),aM=(0,c.useCallback)(a=>{let b=ao.current;b?.style.setProperty("--graph-zoom",String(a)),b?.style.setProperty("--label-k",String(Math.max(1,.8181818181818182/a))),aj(a>=.8181818181818182?1:Math.ceil(.8181818181818182/a*4)/4)},[]),[aN,aO]=(0,c.useState)(!0),aP=(0,c.useRef)(!0),aQ=`${V.kinds.join(",")}|${ax??""}|${ax?V.focus:0}`;(0,c.useEffect)(()=>{aL.current=!1},[aQ]);let aR=(0,c.useCallback)(()=>{let a=ao.current?.querySelector(".react-flow"),b=Object.values(aF);if(!a||!b.length)return null;let c=b.map(a=>a.x),d=b.map(a=>a.y),e=Math.min(...c)-24,g=Math.min(...d)-24;return(0,f.getViewportForBounds)({x:e,y:g,width:Math.max(...c)+24-e,height:Math.max(...d)+24-g},a.clientWidth,a.clientHeight,.5,C.maxZoom,C.padding)},[aF]);(0,c.useEffect)(()=>{if(!ag||aL.current)return;let a=requestAnimationFrame(()=>{let a=aR();if(!a)return aO(!1);let b=aP.current;aP.current=!1,aM(a.zoom),ag.setViewport(a,{duration:420*!b,ease:J}),b&&setTimeout(()=>{aO(!1),aK()},0)});return()=>cancelAnimationFrame(a)},[ag,aQ,aR,aK,aM]);let aS=V.q.trim().toLowerCase(),aT=(0,c.useMemo)(()=>{if(!aS)return[];let a=(a,b)=>{let c=as.get(a);return!!c&&(c.label.toLowerCase().includes(aS)||"doc"!==c.kind&&c.id.toLowerCase().includes(aS)||b&&c.path.toLowerCase().includes(aS))},b=/[/.]/.test(aS),c=aB.filter(c=>a(c,b));return c.length||b?c:aB.filter(b=>a(b,!0))},[aS,aB,as]),{base:aU,edges:aV}=(0,c.useMemo)(()=>{let a,b,c,d,e,f;if(!ay)return{base:[],edges:[]};let g=new Map;for(let a of ay.edges)for(let b of[a.from,a.to])g.set(b,(g.get(b)??0)+1);let h=aw?x(ay.edges,aw,1):null,i=aw?2===V.focus?x(ay.edges,aw,2):h:aS?new Set(aT):V.recent?at:null,j=a=>h&&i?.has(a)&&!h.has(a)?60:0,k=!aw,l=new Set(aT),m=a=>Math.round((as.get(a)?.kind==="task"?.7:1)*(8+4*Math.sqrt(g.get(a)??0))),o=ai>1,p=o&&(h?.size??0)-1>8,q=new Set(aw?[aw,...o&&!p?h??[]:[]]:[]),r=a=>a===aw?4:h?.has(a)?3:l.has(a)?2:+!!i?.has(a),s="u"<typeof document?null:(a=document.createElement("canvas").getContext("2d"),c=12*parseFloat((b=getComputedStyle(document.documentElement)).fontSize),d=(b,c)=>a?(a.font=c,a.measureText(b).width):6.5*b.length,e=`11px ${b.getPropertyValue("--font-sans")}`,f=`10px ${b.getPropertyValue("--font-mono")}`,a=>Math.min(c,d(a.label,e)+("doc"===a.kind?0:d(a.id,f)+4))),t=o&&!aw&&!aS,u=s?aG.filter(a=>!o||(t?!i||i.has(a):r(a)>0)).sort((a,b)=>r(b)-r(a)||(g.get(b)??0)-(g.get(a)??0)).map(a=>{let b=aF[a],c=(s(as.get(a))+8*!!o)*ai;return{id:a,x:b.x-c/2,y:b.y+m(a)/2+4,w:c,h:17*ai}}):[],v=function(a,b=new Set,c=[]){let d=[],e=new Set,f=(a,b)=>a.x<b.x+b.w&&b.x<a.x+a.w&&a.y<b.y+b.h&&b.y<a.y+a.h;for(let g of a)!b.has(g.id)&&(d.some(a=>f(a,g))||c.some(a=>a.id!==g.id&&f(a,g)))?e.add(g.id):d.push(g);return e}(u,q,aG.filter(a=>!i||i.has(a)).map(a=>{let b=m(a)/2;return{id:a,x:aF[a].x-b,y:aF[a].y-b,w:2*b,h:2*b}})),w=new Set;if(t)for(let a of u)v.has(a.id)||(w.size<10?w.add(a.id):v.add(a.id));let y=aG.map(a=>{let b=m(a),c=Math.max(b,24),d=aF[a]??{x:0,y:0},e=as.get(a),f=az.get(a)?.size??0,{hue:g,hollow:h}=I(n,e.status);return{id:a,type:"dot",position:{x:d.x-c/2,y:d.y-c/2},measured:{width:c,height:c},ariaLabel:`${H[e.kind]}${"doc"===e.kind?"":` ${e.id}`} ${e.label}, ${f} link${1===f?"":"s"}${at.has(a)?", changed in the last 24 hours":""}${a===aw?", selected":""}`,data:{node:e,size:b,box:c,dim:!!i&&!i.has(a),chip:a===aw||l.has(a)||!!i?.has(a)||w.has(a),active:a===aw,match:l.has(a),changed:ac.has(a),hue:g,hollow:h,recent:at.has(a),hideLabel:v.has(a),delay:j(a),quick:k,unfold:{x:-(.85*d.x),y:-(.85*d.y),wait:L(aA.get(a))}},draggable:!0}}),z=k?"var(--duration-fast)":"var(--duration-base)";return{base:y,edges:ay.edges.map(a=>{let b,c=!!aw&&(a.from===aw||a.to===aw),d=c||!!aw&&2===V.focus&&!!i?.has(a.from)&&!!i.has(a.to),e=Math.min(aA.get(a.from)??1/0,aA.get(a.to)??1/0);return{id:`${a.from}->${a.to}`,source:a.from,target:a.to,type:"straight",className:"graph-edge-in",domAttributes:{"aria-hidden":!0},style:{stroke:c?"var(--color-accent-edge)":"color-mix(in srgb, var(--color-muted) 80%, var(--color-bg))",strokeWidth:c?1.75:1,opacity:i&&!d?.15:1,transition:(b=c?0:Math.max(j(a.from),j(a.to)),["stroke","stroke-width","opacity"].map(a=>`${a} ${z} var(--ease-out-soft) ${b}ms`).join(", ")),animationDelay:`${420+L(Number.isFinite(e)?e:void 0)}ms`}}})}},[ay,aG,az,aA,aF,as,aw,V.focus,V.recent,at,aS,aT,ac,n,ai]),[aW,aX]=(0,c.useState)({pos:aF,base:aU}),[aY,aZ]=(0,c.useState)(null);if(aW.base!==aU&&(aX({pos:aF,base:aU}),aW.pos!==aF)){let a=!!(aW.base.length>0&&aU.length>0&&150>=Math.max(aW.base.length,aU.length)),b=aY?.to===aW.pos?aY.at:aW.pos;aZ(a?{from:b,at:b,to:aF,gone:aW.base.filter(a=>!aF[a.id])}:null)}let a$=(0,c.useRef)({bodies:new Map,layout:{},shift:{},drag:null,links:[]}),a_=(0,c.useRef)(0),[a0,a1]=(0,c.useState)(null),[a2,a3]=(0,c.useState)(null),a4=(0,c.useCallback)(()=>{if(a_.current)return;let a=performance.now(),b=c=>{let d=a$.current,e=function(a,b){let c=Math.min(Math.max(b,0),1/30),d=Math.max(1,Math.ceil(240*c)),e=c/d,f=1.44*Math.sqrt(170),g=b=>a.drag?.id===b?a.drag:a.bodies.get(b)??a.layout[b];for(let b=0;b<d;b++)for(let[b,c]of a.bodies){if(a.drag?.id===b){c.x=a.drag.x,c.y=a.drag.y,c.vx=0,c.vy=0;continue}let d=a.shift[b]??a.layout[b];if(!d)continue;let h=a.drag?32:170,i=h*(d.x-c.x)-f*c.vx,j=h*(d.y-c.y)-f*c.vy;if(a.drag){for(let d of a.links){let a=d.a===b?d.b:d.b===b?d.a:null,e=null===a?void 0:g(a);if(!e)continue;let f=e.x-c.x,h=e.y-c.y,k=Math.hypot(f,h)||1,l=d.k*(k-d.len)/k;i+=f*l,j+=h*l}let d=c.x-a.drag.x,e=c.y-a.drag.y,f=Math.hypot(d,e);if(f>0&&f<70){let a=2600*(1-f/70)/f;i+=d*a,j+=e*a}}c.vx+=i*e,c.vy+=j*e,c.x+=c.vx*e,c.y+=c.vy*e}if(a.drag)return!0;let h=!1;for(let[b,c]of a.bodies){let d=a.shift[b]??a.layout[b];!d||.05>Math.hypot(d.x-c.x,d.y-c.y)&&.5>Math.hypot(c.vx,c.vy)?d&&a.shift[b]?(c.x=d.x,c.y=d.y,c.vx=0,c.vy=0):a.bodies.delete(b):h=!0}return h}(d,(c-a)/1e3);a=c,a1(d.bodies.size?Object.fromEntries([...d.bodies].map(([a,b])=>[a,{x:b.x,y:b.y}])):null),a_.current=e?requestAnimationFrame(b):0};a_.current=requestAnimationFrame(b)},[]);(0,c.useEffect)(()=>()=>cancelAnimationFrame(a_.current),[]),(0,c.useEffect)(()=>{let a=a$.current;for(let b of(a.layout=aF,a.bodies.keys()))aF[b]||a.bodies.delete(b);a.bodies.size&&a4()},[aF,a4]);let a5=a=>{a3(a);let b=a$.current;if(b.drag||ao.current?.hasAttribute("data-unfold"))return;let c={},d=a?aF[a]:void 0;for(let e of a&&d&&az.get(a)||[]){let a=aF[e],f=a?Math.hypot(d.x-a.x,d.y-a.y):0;a&&!(f<1)&&(c[e]={x:a.x+(d.x-a.x)/f*8,y:a.y+(d.y-a.y)/f*8},b.bodies.has(e)||b.bodies.set(e,{x:a.x,y:a.y,vx:0,vy:0}))}b.shift=c,a4()},a6=()=>!!ao.current?.querySelector(".react-flow__node:focus-visible"),a7=a=>({x:a.position.x+a.data.box/2,y:a.position.y+a.data.box/2}),a8=aY?.from,a9=aY?.to;(0,c.useEffect)(()=>{if(!a8||!a9)return;let a=performance.now(),b=0,c=d=>{let e=Math.min(1,Math.max(0,(d-a)/420));if(e>=1)return aZ(null);let f=J(e),g={};for(let[a,b]of Object.entries(a9)){let c=a8[a]??b;g[a]={x:c.x+(b.x-c.x)*f,y:c.y+(b.y-c.y)*f}}aZ(a=>a&&a.from===a8?{...a,at:g}:a),b=requestAnimationFrame(c)};return b=requestAnimationFrame(c),()=>cancelAnimationFrame(b)},[a8,a9]);let ba=(0,c.useMemo)(()=>aY||a0?[...aU.map(a=>{if(aY&&!aY.from[a.id])return{...a,data:{...a.data,enter:!0}};let b=a0?.[a.id]??aY?.at[a.id];return b?{...a,position:{x:b.x-a.data.box/2,y:b.y-a.data.box/2}}:a}),...(aY?.gone??[]).map(a=>({...a,focusable:!1,selectable:!1,draggable:!1,style:K,data:{...a.data,exit:!0}}))]:aU,[aU,aY,a0]),bb=(0,c.useMemo)(()=>a2?aV.map(a=>aw&&(a.source===aw||a.target===aw)||a.source!==a2&&a.target!==a2?a:{...a,style:{...a.style,stroke:"var(--color-muted)",strokeWidth:1.5}}):aV,[aV,a2,aw]);(0,c.useEffect)(()=>{let a=a=>{if("Escape"!==a.key||a.defaultPrevented||document.querySelector("[role=dialog]"))return;let b=ao.current,c=a.target instanceof HTMLElement?a.target:null,d=!!c&&!!b?.contains(c);if(b&&(d||c===document.body||c?.id==="main")){if(V.q)X({q:""});else if(aw)X({node:null});else{if(!d)return;c.blur()}a.preventDefault(),a.stopPropagation()}};return window.addEventListener("keydown",a,!0),()=>window.removeEventListener("keydown",a,!0)},[V.q,aw,X]);let bc=a=>X({node:a}),bd=a=>ao.current?.querySelector(`[data-shelf] [data-path="${CSS.escape(a)}"]`),be=a=>{let b=()=>ao.current?.querySelector(`.react-flow__node[data-id="${CSS.escape(a)}"]`),c=b()??bd(a);if(c)return c.focus({preventScroll:!!aF[a]});let d=aF[a];ag&&d&&(aL.current=!0,ag.setCenter(d.x,d.y,{zoom:ag.getZoom()}).then(()=>requestAnimationFrame(()=>b()?.focus({preventScroll:!0}))))},bf=(a,b=!0)=>{bc(a);let c=aF[a];if(!ag||!c)return b?be(a):bd(a)?.scrollIntoView({block:"nearest",inline:"nearest"});aL.current=!0,ag.setCenter(c.x,c.y,{zoom:Math.max(ag.getZoom(),1),duration:420,ease:J}).then(()=>{b&&be(a)})},bg=aS+"\0"+aT.join("\0"),[bh,bi]=(0,c.useState)(null),bj=bh?.key===bg?bh.i:null,bk=(0,c.useCallback)(a=>{let b=a.flatMap(a=>aF[a]?[aF[a]]:[]),c=ao.current?.querySelector(".react-flow");if(!b.length){a[0]&&ao.current?.querySelector(`[data-shelf] [data-path="${CSS.escape(a[0])}"]`)?.scrollIntoView({block:"nearest",inline:"nearest"});return}if(!ag||!c)return;let d=b.map(a=>a.x),e=b.map(a=>a.y),g=Math.min(...d)-72,h=Math.min(...e)-24;aL.current=!0,ag.setViewport((0,f.getViewportForBounds)({x:g,y:h,width:Math.max(...d)+72-g,height:Math.max(...e)+24+17-h},c.clientWidth,c.clientHeight,.5,C.maxZoom,C.padding),{duration:420,ease:J})},[aF,ag]),bl=(0,c.useRef)(!1);if((0,c.useEffect)(()=>{if(!bl.current||!V.recent)return;let a=requestAnimationFrame(()=>{bl.current=!1,bk([...at])});return()=>cancelAnimationFrame(a)},[bk,V.recent,at]),!Y&&!$)return(0,b.jsx)("p",{className:"p-6 text-sm text-muted",children:"Loading graph…"});if(Y&&!Y.edges.length&&!$)return(0,b.jsx)("p",{className:"m-6 rounded-lg border border-dashed border-border p-4 text-sm text-muted",children:"No links between docs yet. Link docs with [text](path.md) or [[name]]."});let bm=Y??D,bn=aw?as.get(aw):void 0;bn&&bn!==am&&an(bn);let bo=bn??am,bp=V.node&&!aw?as.get(V.node):void 0,bq=bo?.path,br=a=>bq?{to:new Set(a.filter(a=>a.from===bq&&a.to!==bq).map(a=>a.to)).size,from:new Set(a.filter(a=>a.to===bq&&a.from!==bq).map(a=>a.from)).size}:{to:0,from:0},bs=br(ay?.edges??[]),bt=br(bm.edges),bu=bt.to+bt.from-bs.to-bs.from;return(0,b.jsxs)("div",{ref:ao,className:"flex min-h-0 flex-1 flex-col",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-x-1.5 gap-y-2 border-b border-border px-4 py-2",children:[y.map(({kind:a,label:c})=>{let d=V.kinds.includes(a),e=av[a]??0;return e||$?(0,b.jsxs)("button",{type:"button","aria-pressed":d,disabled:!e,onClick:()=>X({kinds:d?V.kinds.filter(b=>b!==a):[...V.kinds,a]}),className:(0,k.cn)("inline-flex h-7 items-center gap-1.5 rounded-sm border px-2 text-xs outline-none transition-colors duration-(--duration-fast) focus-visible:ring-2 focus-visible:ring-accent disabled:pointer-events-none disabled:opacity-50",d?"border-border2 bg-surface2 text-txt":"border-border text-muted hover:border-border2 hover:text-txt"),children:[(0,b.jsx)(S,{kind:a,size:"task"===a?7:9,className:"text-muted"}),(0,b.jsx)("span",{className:"sr-only md:not-sr-only",children:c}),(0,b.jsx)("span",{className:"font-mono tabular-nums text-muted",children:$?"–":e})]},a):null}),(0,b.jsxs)("button",{type:"button","aria-pressed":V.recent,disabled:!at.size&&!V.recent,title:"Files an agent or you changed in the last 24 hours",onClick:()=>{bl.current=!V.recent,X(V.recent?{recent:!1}:{recent:!0,kinds:y.map(a=>a.kind).filter(a=>V.kinds.includes(a)||[...at].some(b=>as.get(b)?.kind===a))})},className:(0,k.cn)("inline-flex h-7 items-center gap-1.5 rounded-sm border px-2 text-xs outline-none transition-colors duration-(--duration-fast) focus-visible:ring-2 focus-visible:ring-accent disabled:pointer-events-none disabled:opacity-50",V.recent?"border-border2 bg-surface2 text-txt":"border-border text-muted hover:border-border2 hover:text-txt"),children:[(0,b.jsx)("span",{"aria-hidden":!0,className:"size-1.5 rounded-full bg-accent"}),"Recent",(0,b.jsx)("span",{className:"font-mono tabular-nums text-muted",children:$?"–":at.size})]}),(0,b.jsx)("button",{type:"button","aria-expanded":ak,"aria-controls":"graph-legend","aria-label":"Legend",onClick:()=>al(a=>!a),className:"inline-flex size-7 items-center justify-center rounded-md text-muted outline-none transition-colors duration-(--duration-fast) hover:bg-surface2 hover:text-txt focus-visible:ring-2 focus-visible:ring-accent aria-expanded:bg-surface2 aria-expanded:text-txt xl:hidden",children:(0,b.jsx)(g.Info,{className:"size-3.5","aria-hidden":!0})}),(0,b.jsxs)("p",{id:"graph-legend",className:(0,k.cn)("order-last basis-full flex-wrap items-center gap-x-3 gap-y-1 font-mono text-[10px] text-muted xl:order-none xl:ml-2 xl:flex xl:basis-auto",ak?"flex":"hidden"),children:[y.map(({kind:a})=>(0,b.jsxs)("span",{className:"inline-flex items-center gap-1",children:[(0,b.jsx)(S,{kind:a,size:"task"===a?6:8}),H[a].toLowerCase()]},a)),au.length>0&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{children:"colour = status"}),au.map(a=>{let{hue:c,hollow:d}=I(n,a.id);return(0,b.jsxs)("span",{className:"inline-flex items-center gap-1",children:[(0,b.jsx)(S,{kind:"doc",size:7,hollow:d,className:c}),a.label.toLowerCase()]},a.id)}),(0,b.jsx)("span",{children:"hollow = done"})]}),(0,b.jsxs)("span",{className:"inline-flex items-center gap-1",children:[(0,b.jsx)("span",{"aria-hidden":!0,className:"size-1.5 rounded-full bg-accent"}),"changed in 24h"]})]}),(0,b.jsx)(W,{broken:bm.broken}),(0,b.jsxs)("label",{className:(0,k.cn)("relative flex items-center",!bm.broken.length&&"ml-auto"),children:[(0,b.jsx)(h.Search,{className:"pointer-events-none absolute left-2 size-3.5 text-muted","aria-hidden":!0}),(0,b.jsx)("input",{id:"graph-search",type:"search",value:V.q,placeholder:"Find a file…","aria-label":"Find a file in the graph","aria-describedby":"graph-matches",onChange:a=>X({q:a.target.value}),onKeyDown:a=>{if("Enter"!==a.key||!aT.length)return;if(a.preventDefault(),1===aT.length)return bf(aT[0]);if(null===bj)return bi({key:bg,i:-1}),bk(aT);let b=a.shiftKey?bj<=0?aT.length-1:bj-1:(bj+1)%aT.length;bi({key:bg,i:b}),bf(aT[b],!1)},className:"h-7 w-44 rounded-md border border-border bg-surface pr-16 2xl:w-48 pl-7 text-xs text-txt outline-none placeholder:text-muted focus-visible:ring-2 focus-visible:ring-accent [&::-webkit-search-cancel-button]:hidden"}),(0,b.jsx)("span",{id:"graph-matches",className:"pointer-events-none absolute right-2 font-mono text-[10px] text-muted tabular-nums",children:aS?null!==bj&&bj>=0?`${bj+1} of ${aT.length}`:`${aT.length} match${1===aT.length?"":"es"}`:""}),!aS&&(0,b.jsx)("kbd",{"aria-hidden":!0,className:(0,k.cn)(P,"pointer-events-none absolute right-1.5 max-sm:hidden"),children:v.GRAPH_KEYS.search.key})]})]}),(0,b.jsxs)("div",{"data-far":ai>1,onKeyDown:a=>{let b=a.target,c=b.classList.contains("react-flow__node")?b.dataset.id:void 0,d=c?as.get(c):void 0;if(c&&d&&!a.metaKey&&!a.ctrlKey&&!a.altKey){if("Enter"===a.key)c===aw?G(d):bc(c);else if(" "===a.key)bc(c);else if("o"===a.key)G(d);else{if(!M.has(a.key))return;let b=function(a,b,c,d,e){let f,g=c[a],h=1/0;if(g)for(let e of d){let d=c[e];if(!d||e===a)continue;let i=d.x-g.x,j=d.y-g.y,k="ArrowRight"===b?i:"ArrowLeft"===b?-i:"ArrowDown"===b?j:-j;if(k<=0)continue;let l=k+2*Math.abs("ArrowRight"===b||"ArrowLeft"===b?j:i);(l<h||l===h&&void 0!==f&&e<f)&&(f=e,h=l)}if(f||!e.length)return f;let i=e.indexOf(a),j="ArrowRight"===b||"ArrowDown"===b?1:-1;return e[(Math.max(i,j>0?-1:0)+j+e.length)%e.length]}(c,a.key,aF,az.get(c)??[],aG);b&&be(b)}a.preventDefault()}},onFocus:a=>{let b=a.target;b.classList.contains("react-flow__node")&&b.matches(":focus-visible")&&a5(b.dataset.id??null)},onBlur:a=>{let b=a.target;b.classList.contains("react-flow__node")&&b.dataset.id===a2&&a5(null)},className:"group/graph relative min-h-0 flex-1",children:[(0,b.jsx)("p",{id:"graph-hint",className:"sr-only",children:N}),$?(0,b.jsxs)("div",{role:"alert",className:"m-6 max-w-xl rounded-lg border border-danger/30 bg-danger/5 p-4",children:[(0,b.jsx)("p",{className:"text-sm font-medium text-txt",children:"Couldn't load the link graph."}),(0,b.jsx)("p",{className:"mt-1 text-xs text-muted",children:"Check that VibeDoc is still running, then try again. Your files are untouched."}),(0,b.jsxs)("p",{className:"mt-1 font-mono text-[11px] break-words text-muted",children:["Details: ",$]}),(0,b.jsx)(m.Button,{size:"sm",variant:"outline",className:"mt-3",onClick:()=>{_(null),ab(a=>a+1)},children:"Retry"})]}):V.kinds.length?(0,b.jsxs)(e.ReactFlow,{"aria-label":"Doc link graph","aria-roledescription":"link graph","aria-describedby":"graph-hint",ariaLabelConfig:O,edgesFocusable:!1,nodes:ba,edges:bb,nodeTypes:T,className:(0,k.cn)(aN&&"opacity-0"),onInit:ah,onMoveStart:a=>{a&&(aL.current=!0)},onMove:(a,b)=>aM(b.zoom),onNodeClick:(a,b)=>bc(b.id),onNodeDoubleClick:(a,b)=>G(b.data.node),onNodeMouseEnter:(a,b)=>{b.data.exit||a6()||a5(b.id)},onNodeMouseLeave:(a,b)=>{b.id!==a2||a6()||a5(null)},onNodeDragStart:(a,b)=>(a=>{aJ();let b=a$.current;b.shift={};let c=a7(a),d=ay?.edges??[],e=x(d,a.id,aB.length>150?1:2);for(let a of e){let c=a0?.[a]??aF[a];c&&!b.bodies.has(a)&&b.bodies.set(a,{x:c.x,y:c.y,vx:0,vy:0})}b.links=d.flatMap(b=>{let c=aF[b.from],d=aF[b.to];return c&&d&&(e.has(b.from)||e.has(b.to))?[{a:b.from,b:b.to,len:Math.hypot(c.x-d.x,c.y-d.y),k:b.from===a.id||b.to===a.id?90:36}]:[]}),b.drag={id:a.id,...c},a4()})(b),onNodeDrag:(a,b)=>{let c;(c=a$.current).drag&&(c.drag={id:b.id,...a7(b)})},onNodeDragStop:()=>{a$.current.drag=null,a4()},nodeClickDistance:4,nodeDragThreshold:4,autoPanOnNodeDrag:!1,onPaneClick:()=>bc(null),nodesConnectable:!1,nodesDraggable:!0,zoomOnDoubleClick:!1,deleteKeyCode:null,colorMode:ap?"dark":"light",onlyRenderVisibleElements:ba.length>150,fitView:!0,fitViewOptions:C,minZoom:.1,proOptions:B,style:A,children:[(0,b.jsx)(e.Background,{variant:e.BackgroundVariant.Lines,gap:24,lineWidth:1,color:"var(--color-surface2)"}),(0,b.jsx)(e.Controls,{showInteractive:!1,showFitView:!1,onZoomIn:()=>{aL.current=!0},onZoomOut:()=>{aL.current=!0},className:"gap-0.5 rounded-md border border-border bg-surface p-0.5 [&_button]:size-7 [&_button]:rounded-md [&_button]:transition-colors [&_button]:duration-(--duration-fast) [&_button]:outline-none [&_button:focus-visible]:ring-2 [&_button:focus-visible]:ring-accent [&_svg]:max-h-3 [&_svg]:max-w-3",children:(0,b.jsx)(e.ControlButton,{onClick:()=>{aL.current=!1;let a=aR();ag&&a&&(aM(a.zoom),ag.setViewport(a,{duration:0}),setTimeout(aK,0))},className:"react-flow__controls-fitview",title:"Fit View","aria-label":"Fit View",children:(0,b.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 30","aria-hidden":"true",children:(0,b.jsx)("path",{d:"M3.692 4.63c0-.53.4-.938.939-.938h5.215V0H4.708C2.13 0 0 2.054 0 4.63v5.216h3.692V4.631zM27.354 0h-5.2v3.692h5.17c.53 0 .984.4.984.939v5.215H32V4.631A4.624 4.624 0 0027.354 0zm.954 24.83c0 .532-.4.94-.939.94h-5.215v3.768h5.215c2.577 0 4.631-2.13 4.631-4.707v-5.139h-3.692v5.139zm-23.677.94c-.531 0-.939-.4-.939-.94v-5.138H0v5.139c0 2.577 2.13 4.707 4.708 4.707h5.138V25.77H4.631z"})})})})]}):(0,b.jsxs)("div",{className:"m-6 flex flex-wrap items-center gap-3",children:[(0,b.jsx)("p",{className:"text-sm text-muted",children:"Every kind is off, so no files are drawn."}),(0,b.jsx)(m.Button,{size:"sm",variant:"outline",onClick:()=>X({kinds:z}),children:"Show docs"})]}),!$&&V.kinds.length>0&&aH.length>0&&(0,b.jsxs)("div",{"data-shelf":!0,role:"group","aria-labelledby":"graph-unlinked",className:"absolute right-3 bottom-3 left-14 z-10 flex items-center gap-1 overflow-x-auto rounded-md border border-border bg-surface p-1 md:left-auto md:max-w-[min(44rem,calc(100%-4.5rem))] md:flex-wrap md:overflow-x-visible md:max-h-17 md:overflow-y-auto",children:[(0,b.jsxs)("span",{id:"graph-unlinked",className:"sticky left-0 shrink-0 bg-surface px-1.5 font-mono text-[10px] font-medium tracking-[0.06em] text-muted uppercase",children:["Unlinked ",(0,b.jsx)("span",{className:"tabular-nums",children:aH.length})]}),aH.map(a=>{let c=as.get(a),d=a===aw,e=!!aS&&aT.includes(a),f=aw?!d:aS?!e:V.recent&&!at.has(a),{hue:g,hollow:h}=I(n,c.status);return(0,b.jsxs)("button",{type:"button","data-path":a,title:c.path,"aria-pressed":d,"aria-label":`${H[c.kind]}${"doc"===c.kind?"":` ${c.id}`} ${c.label}, 0 links${at.has(a)?", changed in the last 24 hours":""}`,onClick:()=>d?G(c):bc(a),className:(0,k.cn)("inline-flex h-6 max-w-48 shrink-0 items-center gap-1.5 rounded-sm px-1.5 text-[11px] outline-none","transition-[opacity,background-color,color] duration-(--duration-fast) ease-out-soft hover:bg-surface2 hover:text-txt focus-visible:ring-2 focus-visible:ring-accent",d?"font-medium text-txt ring-1 ring-accent":e?"font-medium text-txt outline-1 -outline-offset-1 outline-dashed outline-accent":"text-muted",f&&"opacity-25"),children:[(0,b.jsxs)("span",{className:"relative inline-flex",children:[(0,b.jsx)(S,{kind:c.kind,size:"task"===c.kind?6:8,hollow:h,className:g}),at.has(a)&&(0,b.jsx)("span",{"aria-hidden":!0,className:"absolute -top-0.5 -right-0.5 size-1 rounded-full bg-accent ring-1 ring-surface"})]}),"doc"!==c.kind&&(0,b.jsx)("span",{className:"font-mono text-[10px]",children:c.id}),(0,b.jsx)("span",{className:"truncate",children:c.label})]},a)})]}),(0,b.jsxs)("div",{"aria-live":"polite",children:[bp&&(0,b.jsxs)("p",{className:"absolute top-3 right-3 z-10 max-w-72 rounded-lg border border-border bg-surface px-3 py-2 text-xs text-muted shadow-lg",children:["doc"!==bp.kind&&(0,b.jsx)("span",{className:"mr-1 font-mono text-[11px]",children:bp.id}),(0,b.jsx)("span",{className:"text-txt",children:bp.label})," is hidden by filters ·"," ",(0,b.jsx)("button",{type:"button",onClick:()=>X({kinds:[...V.kinds,bp.kind]}),className:"rounded-sm text-accent underline-offset-2 outline-none hover:underline focus-visible:ring-2 focus-visible:ring-accent",children:"Show"})]}),bo&&(0,b.jsx)("aside",{"aria-label":"Selected file",inert:!bn,className:(0,k.cn)("absolute top-3 right-3 z-10 w-72 max-w-[calc(100%-1.5rem)] rounded-lg border border-border bg-surface p-3 shadow-lg shadow-black/20","max-sm:top-auto max-sm:left-14 max-sm:w-auto max-sm:max-w-none",aH.length>0?"max-sm:bottom-14":"max-sm:bottom-3","transition-[opacity,translate,visibility] ease-out-soft",bn?"duration-(--duration-base) starting:opacity-0 sm:starting:translate-x-1 max-sm:starting:translate-y-1":"invisible opacity-0 duration-(--duration-fast) sm:translate-x-1 max-sm:translate-y-1"),children:(0,b.jsxs)("div",{className:"animate-[pane-in_var(--duration-fast)_var(--ease-out-soft)]",children:[(0,b.jsxs)("div",{className:"flex items-start gap-2",children:[(a=o.KIND_ICON[bo.kind],(0,b.jsx)(a,{className:"mt-0.5 size-4 shrink-0 text-muted","aria-hidden":!0})),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsxs)("p",{className:"text-sm font-medium text-txt",children:["doc"!==bo.kind&&(0,b.jsx)("span",{className:"mr-1.5 font-mono text-[11px] text-muted",children:bo.id}),bo.label]}),(0,b.jsx)("p",{className:"mt-0.5 truncate font-mono text-[11px] text-muted",title:bo.path,children:bo.path})]}),(0,b.jsx)("button",{type:"button","aria-label":"Clear selection",onClick:()=>bc(null),className:"inline-flex size-6 shrink-0 items-center justify-center rounded text-muted outline-none hover:text-txt focus-visible:ring-2 focus-visible:ring-accent",children:(0,b.jsx)(j.X,{className:"size-3.5"})})]}),(0,b.jsxs)("div",{className:"mt-2 flex flex-wrap items-center gap-x-2 gap-y-1",children:[(0,b.jsx)("span",{className:"font-mono text-[10px] font-medium tracking-[0.06em] text-muted uppercase",children:H[bo.kind]}),bo.status&&(0,b.jsx)(r.StatusChip,{status:bo.status}),bo.owner&&(0,b.jsx)(t.OwnerChip,{owner:bo.owner}),("task"===bo.kind||"epic"===bo.kind)&&(0,b.jsx)(u.AgentDot,{attach:{kind:bo.kind,id:bo.id}})]}),(0,b.jsxs)("p",{className:"mt-2 text-xs text-muted",children:["Links to ",(0,b.jsx)("span",{className:"font-mono tabular-nums text-txt",children:bs.to})," · Linked from ",(0,b.jsx)("span",{className:"font-mono tabular-nums text-txt",children:bs.from}),bu>0&&(0,b.jsxs)("span",{className:"text-muted",children:[" · ",(0,b.jsxs)("span",{className:"font-mono tabular-nums",children:["+",bu]})," hidden by filters"]})]}),(0,b.jsxs)("p",{"aria-hidden":!0,className:"mt-2 flex flex-wrap items-center gap-x-1 gap-y-1 text-[11px] text-muted max-sm:hidden",children:[(0,b.jsx)("kbd",{className:P,children:v.GRAPH_KEYS.select.key}),(0,b.jsx)("kbd",{className:P,children:v.GRAPH_KEYS.open.key})," open",(0,b.jsx)("span",{"aria-hidden":!0,children:"·"}),(0,b.jsx)("kbd",{className:P,children:"←→"})," linked",(0,b.jsx)("span",{"aria-hidden":!0,children:"·"}),(0,b.jsx)("kbd",{className:P,children:v.GRAPH_KEYS.clear.key})," clear"]}),(0,b.jsxs)("div",{className:"mt-3 flex items-center gap-2",children:[(0,b.jsx)(m.Button,{size:"sm",onClick:()=>G(bo),children:"Open"}),(0,b.jsxs)("div",{role:"group","aria-label":"Focus",className:"ml-auto flex items-center rounded-md border border-border text-xs",children:[(0,b.jsx)("span",{className:"px-2 text-muted",children:"Focus"}),[0,1,2].map(a=>(0,b.jsx)("button",{type:"button","aria-pressed":V.focus===a,title:a?`Show files within ${a} link${1===a?"":"s"}`:"Show every file",onClick:()=>X({focus:a}),className:(0,k.cn)("inline-flex h-6 min-w-6 items-center justify-center px-2 outline-none focus-visible:ring-2 focus-visible:ring-accent",V.focus===a?"bg-surface2 text-txt":"text-muted hover:text-txt"),children:0===a?"Off":a},a))]})]})]},bo.path)})]})]})]})}let V={md:"link",wiki:"wikilink"};function W({broken:a}){let{openDoc:d}=(0,l.useApp)(),[e,f]=(0,c.useState)(!1),g=(0,c.useRef)(null);if((0,c.useEffect)(()=>{e&&g.current?.focus()},[e]),!a.length)return null;let h=new Map;for(let b of[...a].sort((a,b)=>a.line-b.line))h.set(b.from,[...h.get(b.from)??[],b]);let j=[...h].sort(([a,b],[c,d])=>d.length-b.length||a.localeCompare(c)),k=e?j:j.slice(0,5);return(0,b.jsxs)(n.DropdownMenu,{onOpenChange:a=>{a||f(!1)},children:[(0,b.jsxs)(n.DropdownMenuTrigger,{className:"ml-auto inline-flex h-7 items-center gap-1 rounded-md px-2 text-xs text-muted outline-none transition-colors duration-(--duration-fast) hover:bg-surface2 hover:text-txt focus-visible:ring-2 focus-visible:ring-accent data-[state=open]:bg-surface2 data-[state=open]:text-txt",children:[(0,b.jsx)("span",{className:"font-mono tabular-nums",children:a.length})," broken",(0,b.jsxs)("span",{className:"max-lg:sr-only",children:[" link",1===a.length?"":"s"]})]}),(0,b.jsx)(n.DropdownMenuContent,{align:"end",className:"max-h-[min(28rem,var(--radix-dropdown-menu-content-available-height))] w-[min(26rem,calc(100vw-2rem))]",children:(0,b.jsxs)(n.DropdownMenuGroup,{children:[(0,b.jsxs)(n.DropdownMenuLabel,{className:"flex items-center px-2 pt-2 pb-1 font-mono text-[10px] font-medium tracking-[0.06em] text-muted uppercase",children:["Broken links",(0,b.jsx)("span",{className:"ml-auto tabular-nums",children:a.length})]}),k.map(([a,c],e)=>(0,b.jsxs)("div",{role:"group","aria-label":`${a}, ${c.length} broken`,children:[(0,b.jsxs)("p",{className:"flex items-baseline gap-2 px-2 pt-1.5 font-mono text-[11px] text-txt",title:a,children:[(0,b.jsx)("span",{className:"min-w-0 truncate",children:a}),(0,b.jsx)("span",{className:"ml-auto shrink-0 text-muted tabular-nums",children:c.length})]}),c.map((a,c)=>(0,b.jsxs)(n.DropdownMenuItem,{ref:5===e&&0===c?g:void 0,onSelect:()=>void d(a.from,a.target),className:"gap-2 py-1 text-xs",children:[(0,b.jsx)(i.Unlink,{className:"size-3.5 text-muted","aria-hidden":!0}),(0,b.jsx)("span",{className:"min-w-0 truncate font-mono text-muted",children:a.target}),(0,b.jsx)("span",{className:"ml-auto shrink-0 text-[11px] text-muted",children:V[a.kind]??a.kind}),(0,b.jsxs)("span",{className:"shrink-0 font-mono text-[11px] text-muted tabular-nums",children:["L",a.line]})]},`${a.target}:${a.line}`))]},a)),k.length<j.length&&(0,b.jsx)(n.DropdownMenuItem,{onSelect:a=>{a.preventDefault(),f(!0)},className:"mt-1 py-1 text-xs text-muted",children:(0,b.jsxs)("span",{children:["Show all ",(0,b.jsx)("span",{className:"font-mono tabular-nums",children:j.length})," files"]})})]})})]})}a.s(["default",0,function(){return(0,b.jsx)("div",{className:"flex h-[calc(100svh-3rem)] flex-col",children:(0,b.jsx)(c.Suspense,{children:(0,b.jsx)(U,{})})})}],429266)}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=src_app_%28app%29_graph_page_tsx_1yudb7h._.js.map
|