vibedoc 1.8.0 → 1.9.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 +6 -0
- package/.next/build-manifest.json +3 -3
- package/.next/prerender-manifest.json +13 -13
- package/.next/routes-manifest.json +36 -0
- package/.next/server/app/(app)/activity/page.js +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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)/manual-tests/page.js +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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/page.js +2 -2
- package/.next/server/app/_global-error/page.js.nft.json +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 +2 -2
- 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 +22 -23
- package/.next/server/app/activity.segments/!KGFwcCk/activity/__PAGE__.segment.rsc +11 -9
- package/.next/server/app/activity.segments/_full.segment.rsc +22 -23
- 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/backlinks/route.js +2 -2
- package/.next/server/app/api/backlinks/route.js.nft.json +1 -1
- package/.next/server/app/api/chat/route.js +3 -3
- 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 +3 -3
- 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/route.js +3 -3
- package/.next/server/app/api/docs/route.js.nft.json +1 -1
- package/.next/server/app/api/explorer/route.js +3 -3
- package/.next/server/app/api/explorer/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/route.js +3 -3
- package/.next/server/app/api/mcp/route.js.nft.json +1 -1
- package/.next/server/app/api/memory/entries/delete/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/memory/entries/delete/route/build-manifest.json +12 -0
- package/.next/server/app/api/memory/entries/delete/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/memory/entries/delete/route.js +9 -0
- package/.next/server/app/api/memory/entries/delete/route.js.map +5 -0
- package/.next/server/app/api/memory/entries/delete/route.js.nft.json +1 -0
- package/.next/server/app/api/memory/entries/delete/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/memory/entries/restore/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/memory/entries/restore/route/build-manifest.json +12 -0
- package/.next/server/app/api/memory/entries/restore/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/memory/entries/restore/route.js +9 -0
- package/.next/server/app/api/memory/entries/restore/route.js.map +5 -0
- package/.next/server/app/api/memory/entries/restore/route.js.nft.json +1 -0
- package/.next/server/app/api/memory/entries/restore/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/memory/entries/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/memory/entries/route/build-manifest.json +12 -0
- package/.next/server/app/api/memory/entries/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/memory/entries/route.js +8 -0
- package/.next/server/app/api/memory/entries/route.js.map +5 -0
- package/.next/server/app/api/memory/entries/route.js.nft.json +1 -0
- package/.next/server/app/api/memory/entries/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/memory/entries/save/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/memory/entries/save/route/build-manifest.json +12 -0
- package/.next/server/app/api/memory/entries/save/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/memory/entries/save/route.js +9 -0
- package/.next/server/app/api/memory/entries/save/route.js.map +5 -0
- package/.next/server/app/api/memory/entries/save/route.js.nft.json +1 -0
- package/.next/server/app/api/memory/entries/save/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/memory/graph/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/memory/graph/route/build-manifest.json +12 -0
- package/.next/server/app/api/memory/graph/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/memory/graph/route.js +9 -0
- package/.next/server/app/api/memory/graph/route.js.map +5 -0
- package/.next/server/app/api/memory/graph/route.js.nft.json +1 -0
- package/.next/server/app/api/memory/graph/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/memory/history/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/memory/history/route/build-manifest.json +12 -0
- package/.next/server/app/api/memory/history/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/memory/history/route.js +9 -0
- package/.next/server/app/api/memory/history/route.js.map +5 -0
- package/.next/server/app/api/memory/history/route.js.nft.json +1 -0
- package/.next/server/app/api/memory/history/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/plan/apply/route.js +3 -3
- 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 +3 -3
- package/.next/server/app/api/roadmap/create/route.js.nft.json +1 -1
- package/.next/server/app/api/roadmap/delete/route.js +3 -3
- package/.next/server/app/api/roadmap/delete/route.js.nft.json +1 -1
- package/.next/server/app/api/roadmap/generate/route.js +3 -3
- package/.next/server/app/api/roadmap/generate/route.js.nft.json +1 -1
- package/.next/server/app/api/roadmap/layout/route.js +3 -3
- package/.next/server/app/api/roadmap/layout/route.js.nft.json +1 -1
- package/.next/server/app/api/roadmap/restore/route.js +3 -3
- 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 +3 -3
- 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 +4 -4
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- package/.next/server/app/api/tasks/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/review/route.js +3 -3
- 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 +3 -3
- package/.next/server/app/api/tasks/update/route.js.nft.json +1 -1
- package/.next/server/app/api/views/route.js +3 -3
- 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 +22 -23
- package/.next/server/app/board.segments/!KGFwcCk/board/__PAGE__.segment.rsc +6 -6
- package/.next/server/app/board.segments/_full.segment.rsc +22 -23
- 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 +22 -23
- package/.next/server/app/chat.segments/!KGFwcCk/chat/__PAGE__.segment.rsc +9 -11
- package/.next/server/app/chat.segments/_full.segment.rsc +22 -23
- 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 +22 -23
- package/.next/server/app/docs.segments/!KGFwcCk/docs/__PAGE__.segment.rsc +6 -6
- package/.next/server/app/docs.segments/_full.segment.rsc +22 -23
- 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 +22 -23
- package/.next/server/app/explorer.segments/!KGFwcCk/explorer/__PAGE__.segment.rsc +5 -5
- package/.next/server/app/explorer.segments/_full.segment.rsc +22 -23
- package/.next/server/app/explorer.segments/_tree.segment.rsc +2 -2
- 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 +22 -23
- package/.next/server/app/manual-tests.segments/!KGFwcCk/manual-tests/__PAGE__.segment.rsc +5 -5
- package/.next/server/app/manual-tests.segments/_full.segment.rsc +22 -23
- 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 +23 -23
- package/.next/server/app/memory.segments/!KGFwcCk/memory/__PAGE__.segment.rsc +12 -10
- package/.next/server/app/memory.segments/_full.segment.rsc +23 -23
- package/.next/server/app/memory.segments/_tree.segment.rsc +3 -2
- package/.next/server/app/page.js +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 +22 -23
- package/.next/server/app/roadmap.segments/!KGFwcCk/roadmap/__PAGE__.segment.rsc +6 -6
- package/.next/server/app/roadmap.segments/_full.segment.rsc +22 -23
- 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 +22 -23
- package/.next/server/app/settings.segments/!KGFwcCk/settings/__PAGE__.segment.rsc +10 -9
- package/.next/server/app/settings.segments/_full.segment.rsc +22 -23
- 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 +22 -23
- package/.next/server/app/setup.segments/!KGFwcCk/setup/__PAGE__.segment.rsc +5 -5
- package/.next/server/app/setup.segments/_full.segment.rsc +22 -23
- package/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
- package/.next/server/app-paths-manifest.json +6 -0
- package/.next/server/chunks/{11mp_@anthropic-ai_sdk_00p3fu1._.js → 11mp_@anthropic-ai_sdk_0-_cqh8._.js} +1 -1
- package/.next/server/chunks/{11mp_@anthropic-ai_sdk_01jjl08._.js → 11mp_@anthropic-ai_sdk_00o5o78._.js} +1 -1
- package/.next/server/chunks/{11mp_@anthropic-ai_sdk_01amtux._.js → 11mp_@anthropic-ai_sdk_03cp17a._.js} +1 -1
- package/.next/server/chunks/{11mp_@anthropic-ai_sdk_071zfm8._.js → 11mp_@anthropic-ai_sdk_07dk2er._.js} +1 -1
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0_e9zpr._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0_xx_qf._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0aer9lc._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0ax30pe._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0gn7vgs._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0hye94a._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0ir5cgk._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0je0_pa._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0jfgh0o._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0mha4x1._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0n__boa._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0sqv26_._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0wnc6g-._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0xh0g59._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1-5wyhj._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_13ahm3n._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_13e6aq4._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_14eg0ld._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_15md1n2._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_16av8b9._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_16hjhv1._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_16txvf7._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_198yu7d._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1_9tfq3._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1_izr2o._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1fljcyg._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1lrt6ul._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1nev_ee._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1pgoe2i._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1rgl7mu._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1slq49k._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1slq49k._.js.map +1 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1t9bdf0._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1t9bdf0._.js.map +1 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1u6qqm2._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1u6qqm2._.js.map +1 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1v7ygvz._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1v7ygvz._.js.map +1 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1wls8zc._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1wls8zc._.js.map +1 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ywboja._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ywboja._.js.map +1 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_00kwqu5._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_01j2nrd._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_05ybj3t._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0adt7jj._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0bnl14w._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0f557t9._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0ra6giw._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_107cqfx._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1377sl6._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1_2hcok._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1g--m6y._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1geopi5._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1i11dte._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1mj3_qk._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1qgy210._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1rkng9q._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1vr8q8y._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1x8b64g._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1x8b64g._.js.map +1 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1zhahf7._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1zhahf7._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__008focd._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__1vh9g2o._.js.map → [root-of-the-server]__008focd._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__01xmabe._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__1-e3i_5._.js.map → [root-of-the-server]__01xmabe._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__03ogp2r._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__03ogp2r._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__05us508._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0vcsqzd._.js.map → [root-of-the-server]__05us508._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__08yaps5._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__1ezzeji._.js.map → [root-of-the-server]__08yaps5._.js.map} +1 -1
- package/.next/server/chunks/{[root-of-the-server]__11s-8eg._.js → [root-of-the-server]__09oyvwa._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__1wr0m-s._.js.map → [root-of-the-server]__09oyvwa._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0axugex._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0-pmfg2._.js.map → [root-of-the-server]__0axugex._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0b2488c._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0b5pwze._.js.map → [root-of-the-server]__0b2488c._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0b6w_wb._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0b6w_wb._.js.map +1 -0
- package/.next/server/chunks/{[root-of-the-server]__04tibmn._.js → [root-of-the-server]__0cbh1s-._.js} +2 -2
- package/.next/server/chunks/{[root-of-the-server]__02co2yq._.js.map → [root-of-the-server]__0cbh1s-._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0exzf-v._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__1qusy4g._.js.map → [root-of-the-server]__0exzf-v._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0gnil0m._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__18kxo4a._.js.map → [root-of-the-server]__0gnil0m._.js.map} +1 -1
- package/.next/server/chunks/{[root-of-the-server]__1mrmaf9._.js → [root-of-the-server]__0hfyuhq._.js} +2 -2
- package/.next/server/chunks/[root-of-the-server]__0hfyuhq._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0hg1r2b._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0q3-t8a._.js.map → [root-of-the-server]__0hg1r2b._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0ikbk15._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__19k8t87._.js.map → [root-of-the-server]__0ikbk15._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0jr_5eq._.js +110 -0
- package/.next/server/chunks/[root-of-the-server]__0jr_5eq._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0khz7sy._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__1jxu2x9._.js.map → [root-of-the-server]__0khz7sy._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0lf11mz._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__1lj_2cv._.js.map → [root-of-the-server]__0lf11mz._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0m8hmg0._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__1umrorf._.js.map → [root-of-the-server]__0m8hmg0._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0qij7wy._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__1vq38ov._.js.map → [root-of-the-server]__0qij7wy._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0vf-0gp._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0vf-0gp._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0x8wtot._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__05g5cgo._.js.map → [root-of-the-server]__0x8wtot._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0y5usoz._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__1-ic3af._.js.map → [root-of-the-server]__0y5usoz._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__15c5snv._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__05l6129._.js.map → [root-of-the-server]__15c5snv._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__16u25oa._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0druay_._.js.map → [root-of-the-server]__16u25oa._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__18dt3sr._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__14aeqoi._.js.map → [root-of-the-server]__18dt3sr._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__19rxcu4._.js +110 -0
- package/.next/server/chunks/[root-of-the-server]__19rxcu4._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1_qenei._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1_qenei._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1a7d63a._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__11a4ptn._.js.map → [root-of-the-server]__1a7d63a._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__1b448u7._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__197vw9g._.js.map → [root-of-the-server]__1b448u7._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__1e68zmx._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__15ck1wv._.js.map → [root-of-the-server]__1e68zmx._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__1gvv2xp._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__04tibmn._.js.map → [root-of-the-server]__1gvv2xp._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__1jel07j._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__12nzy_6._.js.map → [root-of-the-server]__1jel07j._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__1jz98vb._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__0p6ja6l._.js.map → [root-of-the-server]__1jz98vb._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__1la-6xe._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1la-6xe._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1p6-0l0._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__1xb0fmp._.js.map → [root-of-the-server]__1p6-0l0._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__1qd-ecl._.js +110 -0
- package/.next/server/chunks/[root-of-the-server]__1qd-ecl._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1r_0uma._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__11s-8eg._.js.map → [root-of-the-server]__1r_0uma._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__1ssunti._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__1mrmaf9._.js.map → [root-of-the-server]__1ssunti._.js.map} +1 -1
- package/.next/server/chunks/[root-of-the-server]__1tu85zx._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1tu85zx._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1wcd2x9._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1wcd2x9._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1xpp36t._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1xpp36t._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__1z3tswg._.js +3 -0
- package/.next/server/chunks/{[root-of-the-server]__1n68akx._.js.map → [root-of-the-server]__1z3tswg._.js.map} +1 -1
- package/.next/server/chunks/_04byth9._.js +33 -23
- package/.next/server/chunks/_04byth9._.js.map +1 -1
- package/.next/server/chunks/_0safx0g._.js +10 -0
- package/.next/server/chunks/_0safx0g._.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_entries_delete_route_actions_1a4-ad5.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_entries_delete_route_actions_1a4-ad5.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_entries_restore_route_actions_07637mh.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_entries_restore_route_actions_07637mh.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_entries_route_actions_0bxuv92.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_entries_route_actions_0bxuv92.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_entries_save_route_actions_0bwga-2.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_entries_save_route_actions_0bwga-2.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_graph_route_actions_0pca9et.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_graph_route_actions_0pca9et.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_history_route_actions_0w5pu5p.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_memory_history_route_actions_0w5pu5p.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0opgo3t._.js +14 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__0noc5ay._.js.map → [root-of-the-server]__0opgo3t._.js.map} +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__1jv5ug1._.js +3 -0
- package/.next/server/chunks/ssr/{[root-of-the-server]__1pk-w2i._.js.map → [root-of-the-server]__1jv5ug1._.js.map} +1 -1
- package/.next/server/chunks/ssr/_0i75x-o._.js +3 -0
- package/.next/server/chunks/ssr/_0i75x-o._.js.map +1 -0
- package/.next/server/chunks/ssr/_15qpb4z._.js +3 -0
- package/.next/server/chunks/ssr/_15qpb4z._.js.map +1 -0
- package/.next/server/chunks/ssr/_1fg0usp._.js +3 -0
- package/.next/server/chunks/ssr/_1fg0usp._.js.map +1 -0
- package/.next/server/chunks/ssr/_1h0wfpz._.js +3 -0
- package/.next/server/chunks/ssr/_1h0wfpz._.js.map +1 -0
- package/.next/server/chunks/ssr/_1ocnpth._.js +3 -0
- package/.next/server/chunks/ssr/_1ocnpth._.js.map +1 -0
- package/.next/server/chunks/ssr/{_14emfpq._.js → _1uno162._.js} +2 -2
- package/.next/server/chunks/ssr/_1uno162._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules__pnpm_0al3nfy._.js +3 -0
- package/.next/server/chunks/ssr/node_modules__pnpm_0al3nfy._.js.map +1 -0
- package/.next/server/chunks/ssr/{_1ftruw6._.js → node_modules__pnpm_0aoa6rg._.js} +2 -2
- package/.next/server/chunks/ssr/node_modules__pnpm_0aoa6rg._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_(app)_memory_page_tsx_19jhb1c._.js +13 -0
- package/.next/server/chunks/ssr/src_app_(app)_memory_page_tsx_19jhb1c._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_(app)_settings_page_tsx_0zevtee._.js +1 -1
- package/.next/server/chunks/ssr/src_app_(app)_settings_page_tsx_0zevtee._.js.map +1 -1
- package/.next/server/chunks/ssr/src_components_0eyr_zi._.js +3 -0
- package/.next/server/chunks/ssr/src_components_0eyr_zi._.js.map +1 -0
- package/.next/server/chunks/ssr/src_components_1s861m8._.js +3 -0
- package/.next/server/chunks/ssr/src_components_1s861m8._.js.map +1 -0
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/0b547y6rqct9z.js +1 -0
- package/.next/static/chunks/0e3ha56i_0j05.css +1 -0
- package/.next/static/chunks/0f32hudp0yir7.js +2 -0
- package/.next/static/chunks/0rsmz1jgro1kj.js +1 -0
- package/.next/static/chunks/0wnq_kh8-6wc1.js +2 -0
- package/.next/static/chunks/1acpfyut6j4e2.js +1 -0
- package/.next/static/chunks/{1xyepk9227yej.js → 1l_dys0-y5-r7.js} +6 -6
- package/.next/static/chunks/1rko_88i85yqb.js +21 -0
- package/.next/static/chunks/20mdcup14_0yi.js +11 -0
- package/.next/static/chunks/24u_rc2tbkhai.js +3 -0
- package/.next/static/chunks/2p-pkveutoh75.js +1 -0
- package/.next/static/chunks/{41oxcdcw-pcwt.js → 329sozud9-tvr.js} +1 -1
- package/.next/static/chunks/3qqvn9vv6i0gy.js +68 -0
- package/.next/static/chunks/{2_xpm7qhr69n8.js → 3xqcluqa32mjv.js} +2 -2
- package/README.md +11 -4
- package/package.json +1 -1
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_07v3boe._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_09iva72._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0bom1b1._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0dvji7p._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0dzo8jn._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0hvqsqq._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0i7i-jw._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0k0iop5._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0l3-6aq._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0oegm3y._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0p5cyes._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0qw8i6_._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_0yk-a7v._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_11fsqvb._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_143_7ez._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_14a4-64._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_17d_oma._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_18qwuyb._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_19au8y6._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ak_hy5._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1cqa0nq._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1i-x_q0._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1jmtliz._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1jouwlj._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1r_q5um._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1t959xd._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1vkprw9._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1y95ax9._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1y9misr._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_21b8wwy._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_08ecfgc._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_09--sd6._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0e3mwc6._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0go4301._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0iq9dmt._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0n9ijke._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0szcyrx._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0xy2s3x._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0yaujn7._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0z9ly74._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1hmq3al._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1tqk4bp._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1x-hr6f._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1zsdhg0._.js +0 -3
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_20t__fe._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0-pmfg2._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__02co2yq._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__05g5cgo._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__05l6129._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0b5pwze._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0druay_._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0p6ja6l._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0q3-t8a._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__0vcsqzd._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1-e3i_5._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1-ic3af._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__11a4ptn._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__11c8641._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__12nzy_6._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__14aeqoi._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__15ck1wv._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1613hjb._.js +0 -99
- package/.next/server/chunks/[root-of-the-server]__1613hjb._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__169hmq_._.js +0 -10
- package/.next/server/chunks/[root-of-the-server]__169hmq_._.js.map +0 -1
- package/.next/server/chunks/[root-of-the-server]__18kxo4a._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__197vw9g._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__19k8t87._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1ezzeji._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1jxu2x9._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1lj_2cv._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1n68akx._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1npya5q._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1qusy4g._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1umrorf._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1vh9g2o._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1vq38ov._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1wr0m-s._.js +0 -3
- package/.next/server/chunks/[root-of-the-server]__1xb0fmp._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__0noc5ay._.js +0 -14
- package/.next/server/chunks/ssr/[root-of-the-server]__1pk-w2i._.js +0 -3
- package/.next/server/chunks/ssr/_09b02z-._.js +0 -3
- package/.next/server/chunks/ssr/_09b02z-._.js.map +0 -1
- package/.next/server/chunks/ssr/_0d0f1s1._.js +0 -3
- package/.next/server/chunks/ssr/_0d0f1s1._.js.map +0 -1
- package/.next/server/chunks/ssr/_0lnt_va._.js +0 -4
- package/.next/server/chunks/ssr/_0lnt_va._.js.map +0 -1
- package/.next/server/chunks/ssr/_0qlymco._.js +0 -3
- package/.next/server/chunks/ssr/_0qlymco._.js.map +0 -1
- package/.next/server/chunks/ssr/_0sg1oeq._.js +0 -3
- package/.next/server/chunks/ssr/_0sg1oeq._.js.map +0 -1
- package/.next/server/chunks/ssr/_14emfpq._.js.map +0 -1
- package/.next/server/chunks/ssr/_1ftruw6._.js.map +0 -1
- package/.next/server/chunks/ssr/_1x7ggg5._.js +0 -4
- package/.next/server/chunks/ssr/_1x7ggg5._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules__pnpm_1q89l7p._.js +0 -3
- package/.next/server/chunks/ssr/node_modules__pnpm_1q89l7p._.js.map +0 -1
- package/.next/server/chunks/ssr/src_1lkod9y._.js +0 -8
- package/.next/server/chunks/ssr/src_1lkod9y._.js.map +0 -1
- package/.next/static/chunks/0p1-hkgnm2ll2.js +0 -1
- package/.next/static/chunks/0pgu5q5vodev6.js +0 -1
- package/.next/static/chunks/0rqzvayflendx.js +0 -2
- package/.next/static/chunks/0vcfs7dii85tw.js +0 -21
- package/.next/static/chunks/150y5rwg6gwvx.css +0 -1
- package/.next/static/chunks/1fd43t9y42wd3.js +0 -1
- package/.next/static/chunks/1q50zh5z-fq2k.js +0 -2
- package/.next/static/chunks/2ls_yp4-qgb42.js +0 -1
- package/.next/static/chunks/2zz0ip2l_29c3.js +0 -3
- package/.next/static/chunks/3h4ehgq7i44wb.js +0 -6
- package/.next/static/chunks/3vf5nnd4xjo5_.js +0 -1
- package/.next/static/chunks/40jaenrnspnlh.js +0 -68
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_00p3fu1._.js.map → 11mp_@anthropic-ai_sdk_0-_cqh8._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_01amtux._.js.map → 11mp_@anthropic-ai_sdk_00o5o78._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_01jjl08._.js.map → 11mp_@anthropic-ai_sdk_03cp17a._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_071zfm8._.js.map → 11mp_@anthropic-ai_sdk_07dk2er._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_07v3boe._.js.map → 11mp_@anthropic-ai_sdk_0_e9zpr._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_09iva72._.js.map → 11mp_@anthropic-ai_sdk_0_xx_qf._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0bom1b1._.js.map → 11mp_@anthropic-ai_sdk_0aer9lc._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0dvji7p._.js.map → 11mp_@anthropic-ai_sdk_0ax30pe._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0dzo8jn._.js.map → 11mp_@anthropic-ai_sdk_0gn7vgs._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0hvqsqq._.js.map → 11mp_@anthropic-ai_sdk_0hye94a._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0i7i-jw._.js.map → 11mp_@anthropic-ai_sdk_0ir5cgk._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0k0iop5._.js.map → 11mp_@anthropic-ai_sdk_0je0_pa._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0l3-6aq._.js.map → 11mp_@anthropic-ai_sdk_0jfgh0o._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0oegm3y._.js.map → 11mp_@anthropic-ai_sdk_0mha4x1._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0p5cyes._.js.map → 11mp_@anthropic-ai_sdk_0n__boa._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0qw8i6_._.js.map → 11mp_@anthropic-ai_sdk_0sqv26_._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0yk-a7v._.js.map → 11mp_@anthropic-ai_sdk_0wnc6g-._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_11fsqvb._.js.map → 11mp_@anthropic-ai_sdk_0xh0g59._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_143_7ez._.js.map → 11mp_@anthropic-ai_sdk_1-5wyhj._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_14a4-64._.js.map → 11mp_@anthropic-ai_sdk_13ahm3n._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_17d_oma._.js.map → 11mp_@anthropic-ai_sdk_13e6aq4._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_18qwuyb._.js.map → 11mp_@anthropic-ai_sdk_14eg0ld._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_19au8y6._.js.map → 11mp_@anthropic-ai_sdk_15md1n2._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1ak_hy5._.js.map → 11mp_@anthropic-ai_sdk_16av8b9._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1cqa0nq._.js.map → 11mp_@anthropic-ai_sdk_16hjhv1._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1i-x_q0._.js.map → 11mp_@anthropic-ai_sdk_16txvf7._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1jmtliz._.js.map → 11mp_@anthropic-ai_sdk_198yu7d._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1jouwlj._.js.map → 11mp_@anthropic-ai_sdk_1_9tfq3._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1r_q5um._.js.map → 11mp_@anthropic-ai_sdk_1_izr2o._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1t959xd._.js.map → 11mp_@anthropic-ai_sdk_1fljcyg._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1vkprw9._.js.map → 11mp_@anthropic-ai_sdk_1lrt6ul._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1y95ax9._.js.map → 11mp_@anthropic-ai_sdk_1nev_ee._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1y9misr._.js.map → 11mp_@anthropic-ai_sdk_1pgoe2i._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_21b8wwy._.js.map → 11mp_@anthropic-ai_sdk_1rgl7mu._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_08ecfgc._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_00kwqu5._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_09--sd6._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_01j2nrd._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0e3mwc6._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_05ybj3t._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0go4301._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0adt7jj._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0iq9dmt._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0bnl14w._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0n9ijke._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0f557t9._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0szcyrx._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0ra6giw._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0xy2s3x._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_107cqfx._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0yaujn7._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1377sl6._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0z9ly74._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1_2hcok._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1hmq3al._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1g--m6y._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1tqk4bp._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1geopi5._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1x-hr6f._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1i11dte._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1zsdhg0._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1mj3_qk._.js.map} +0 -0
- /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_20t__fe._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1qgy210._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__11c8641._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1rkng9q._.js.map} +0 -0
- /package/.next/server/chunks/{[root-of-the-server]__1npya5q._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1vr8q8y._.js.map} +0 -0
- /package/.next/static/{fGPda81_8-K4GmaNUE6KA → Q29Tn_NjyVms0d3pKn4Yx}/_buildManifest.js +0 -0
- /package/.next/static/{fGPda81_8-K4GmaNUE6KA → Q29Tn_NjyVms0d3pKn4Yx}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{fGPda81_8-K4GmaNUE6KA → Q29Tn_NjyVms0d3pKn4Yx}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[815122,a=>{"use strict";var b=a.i(662145),c=a.i(795667),d=a.i(108280),e=a.i(368114),f=a.i(685698),g=a.i(598984);let h={running:"Agent working","needs-answer":"Agent needs you",review:"Plan to review"};a.s(["AgentDot",0,function({attach:a}){let c=(0,f.useItemAgent)(a);return c?(0,b.jsx)(g.StatusMarker,{status:c.status,label:h[c.status]}):null},"AgentMark",0,function({attach:a,className:g}){let i=(0,f.useItemAgent)(a),{show:j}=(0,f.useChats)();if(!i)return null;let k=h[i.status];return(0,b.jsxs)("button",{type:"button",onClick:a=>{a.stopPropagation(),j(i.chatId)},title:`${k} \xb7 open chat`,"aria-label":`${k}, open chat`,className:(0,e.cn)("nodrag inline-flex shrink-0 items-center gap-1 rounded-full border px-1.5 py-px font-mono text-[10px] leading-4 animate-fade-in transition-colors duration-(--duration-fast)","running"===i.status&&"border-accent/50 text-accent hover:bg-accent/10","needs-answer"===i.status&&"border-amber/50 text-amber hover:bg-amber/10","review"===i.status&&"border-accent/50 bg-accent/10 text-accent hover:bg-accent/20",g),children:["running"===i.status?(0,b.jsx)(d.Loader2,{className:"size-3 animate-spin","aria-hidden":!0}):(0,b.jsx)(c.Bot,{className:"size-3","aria-hidden":!0}),k]})}])},618940,a=>{"use strict";var b=a.i(662145),c=a.i(365465),d=a.i(152716),e=a.i(340933),f=a.i(425404),g=a.i(368114),h=a.i(581040),i=a.i(453161),j=a.i(815122),k=a.i(685698);let l=[d.Position.Top,d.Position.Right,d.Position.Bottom,d.Position.Left];function m(){return(0,b.jsxs)(b.Fragment,{children:[l.map(a=>(0,b.jsx)(c.Handle,{id:a,type:"source",position:a,isConnectable:!1,className:"opacity-0"},a)),l.map(a=>(0,b.jsx)(c.Handle,{id:`${a}-t`,type:"target",position:a,isConnectable:!1,className:"opacity-0"},`${a}-t`))]})}let n={"in-progress":"Active",paused:"Paused",done:"Done",planned:"Planned"};function o({status:a,className:c}){return(0,b.jsxs)("span",{title:n[a],"aria-label":n[a],className:(0,g.cn)("relative inline-flex h-2 w-2 shrink-0",c),children:["in-progress"===a&&(0,b.jsx)("span",{className:"absolute inset-0 animate-ping rounded-full bg-accent/60"}),(0,b.jsx)("span",{className:(0,g.cn)("relative h-full w-full rounded-full","done"===a&&"bg-teal","in-progress"===a&&"bg-accent","planned"===a&&"border border-muted","paused"===a&&"border-2 border-y-0 border-muted")})]})}let p={done:"bg-teal","in-progress":"bg-amber",review:"bg-accent",blocked:"bg-danger",paused:"bg-muted/60",todo:"bg-border2",cancelled:"bg-border"};function q({statuses:a,className:c}){if(!a?.length)return null;let d=a.filter(a=>"done"===a).length;return(0,b.jsx)("div",{className:(0,g.cn)("flex h-1.5 min-w-0 flex-1 gap-0.5",c),title:`${d}/${a.length} tasks done`,children:a.map((a,c)=>(0,b.jsx)("span",{className:(0,g.cn)("h-full flex-1 rounded-[1px]",p[a])},c))})}function r({value:a,total:c,className:d}){let e=2*Math.PI*14,f=c>0?a/c:0;return(0,b.jsxs)("span",{className:(0,g.cn)("relative inline-flex h-9 w-9 shrink-0 items-center justify-center",d),title:`${a}/${c} tasks done`,children:[(0,b.jsxs)("svg",{viewBox:"0 0 36 36",className:"absolute inset-0 -rotate-90",children:[(0,b.jsx)("circle",{cx:"18",cy:"18",r:14,fill:"none",strokeWidth:"3",className:"stroke-border"}),(0,b.jsx)("circle",{cx:"18",cy:"18",r:14,fill:"none",strokeWidth:"3",stroke:"currentColor",strokeLinecap:"round",strokeDasharray:e,strokeDashoffset:e*(1-f)})]}),(0,b.jsx)("span",{className:"font-mono text-[9px] text-txt",children:Math.round(100*f)})]})}function s({due:a,state:c}){return a?(0,b.jsxs)("span",{className:(0,g.cn)("font-mono text-[10px]","overdue"===c?"text-danger":"soon"===c?"text-amber":"text-muted"),children:["Due ",(0,h.formatDay)(a)]}):null}function t({data:a}){let c=a.taskDue;return c&&c.overdue>0?(0,b.jsxs)("span",{className:"font-mono text-[10px] text-danger",children:[c.overdue," ",1===c.overdue?"task":"tasks"," overdue"]}):a.item.due?(0,b.jsx)(s,{due:a.item.due,state:a.dueState}):c?.next?(0,b.jsxs)("span",{className:(0,g.cn)("font-mono text-[10px]",a.taskDueSoon?"text-amber":"text-muted"),children:["Next due ",(0,h.formatDay)(c.next)]}):null}function u({drift:a}){return a?.length?(0,b.jsx)("span",{title:a.join("\n"),className:"absolute -left-2 -top-2 rounded-full bg-bg p-0.5 text-amber",children:(0,b.jsx)(e.AlertTriangle,{className:"h-3.5 w-3.5"})}):null}a.s(["DueChip",0,s,"STATUS_LABEL",0,n,"SegmentedProgress",0,q,"StatusDot",0,o,"StatusPill",0,function({status:a}){return(0,b.jsxs)("span",{className:(0,g.cn)("inline-flex items-center gap-1.5 rounded-full border px-2 py-0.5 font-mono text-[10px] uppercase tracking-wider","done"===a&&"border-teal/40 text-teal","in-progress"===a&&"border-accent/50 text-accent","planned"===a&&"border-dashed border-border2 text-muted","paused"===a&&"border-border2 text-muted"),children:[(0,b.jsx)(o,{status:a,className:"h-1.5 w-1.5"}),n[a]]})},"TASK_STATUS_BG",0,p,"nodeTypes",0,{horizon:function({data:a,selected:c}){let{item:d,progress:e,epics:f,chapter:h}=a,j=d.status;return(0,b.jsxs)("div",{style:{width:i.HORIZON_W},className:(0,g.cn)("relative flex items-center gap-3 rounded-xl border bg-surface px-3.5 py-3 transition-shadow duration-(--duration-base)","in-progress"===j&&"border-accent/60 shadow-[0_0_0_1px_rgb(var(--rgb-accent)/0.25),0_10px_30px_-12px_rgb(var(--rgb-accent)/0.6)]","done"===j&&"border-teal/40","planned"===j&&"border-dashed border-border2","paused"===j&&"border-border2 opacity-75",c&&"ring-2 ring-accent/60 ring-offset-2 ring-offset-bg"),children:[(0,b.jsx)(m,{}),(0,b.jsx)("span",{className:(0,g.cn)("font-mono text-2xl font-semibold leading-none tabular-nums","in-progress"===j?"text-accent":"done"===j?"text-teal":"text-muted"),children:h?String(h).padStart(2,"0"):"··"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("p",{className:"text-xs font-semibold uppercase leading-snug tracking-wider text-txt",children:d.title}),(0,b.jsxs)("p",{className:"mt-1 flex flex-wrap items-center gap-x-2 font-mono text-[10px] text-muted",children:[f&&f.total>0&&(0,b.jsxs)("span",{children:[f.done,"/",f.total," epics"]}),(0,b.jsx)(s,{due:d.due,state:a.dueState})]})]}),e&&(0,b.jsx)(r,{value:e.done,total:e.total,className:"done"===j?"text-teal":"text-accent"}),(0,b.jsx)(u,{drift:a.drift})]})},feature:function({data:a,selected:c}){let{item:d,taskStatuses:e,nextTaskId:h}=a,l=(0,k.useItemAgent)({kind:"epic",id:d.id}),n=!!a.drift?.length,p=c&&"ring-2 ring-accent/60 ring-offset-2 ring-offset-bg";if("done"===d.status)return(0,b.jsxs)("div",{style:{width:i.FEATURE_W},className:(0,g.cn)("group relative flex items-center gap-2 rounded-lg border border-border bg-surface/60 px-3 py-2 hover:border-teal/40",p),children:[(0,b.jsx)(m,{}),(0,b.jsx)(f.Check,{className:"h-3.5 w-3.5 shrink-0 text-teal",strokeWidth:3}),(0,b.jsx)("p",{className:"min-w-0 flex-1 truncate text-[13px] text-muted group-hover:text-txt",title:d.title,children:d.title}),l?(0,b.jsx)(j.AgentMark,{attach:{kind:"epic",id:d.id}}):a.progress&&(0,b.jsxs)("span",{className:"font-mono text-[10px] text-muted",children:[a.progress.done,"/",a.progress.total]}),(0,b.jsx)(u,{drift:a.drift})]});let r="in-progress"===d.status;return(0,b.jsxs)("div",{style:{width:i.FEATURE_W},className:(0,g.cn)("relative flex flex-col gap-1.5 rounded-lg border px-3 py-2.5 transition-shadow duration-(--duration-base)",r?"border-accent/50 bg-surface shadow-[0_8px_24px_-10px_rgb(var(--rgb-accent)/0.55)]":"border-dashed border-border2 bg-bg hover:border-muted","paused"===d.status&&"opacity-70",p),children:[(0,b.jsx)(m,{}),r&&(0,b.jsx)("span",{className:(0,g.cn)("absolute -inset-y-px -left-px w-[3px] rounded-l-lg",n?"bg-amber":"bg-accent")}),(0,b.jsxs)("div",{className:"flex items-center justify-between font-mono text-[10px]",children:[(0,b.jsx)("span",{className:"text-muted",children:d.id}),l?(0,b.jsx)(j.AgentMark,{attach:{kind:"epic",id:d.id}}):r?(0,b.jsxs)("span",{className:"flex items-center gap-1.5 uppercase tracking-wider text-accent",children:[(0,b.jsx)(o,{status:"in-progress",className:"h-1.5 w-1.5"}),"Live"]}):(0,b.jsx)("span",{className:"uppercase tracking-wider text-muted",children:d.tasks.length?`${d.tasks.length} tasks`:"No tasks yet"})]}),(0,b.jsx)("p",{className:(0,g.cn)("line-clamp-2 text-[13px] leading-snug",r?"font-medium text-txt":"text-txt/80"),title:d.title,children:d.title}),e&&e.length>0&&(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(q,{statuses:e}),(0,b.jsx)("span",{className:"shrink-0 font-mono text-[10px] text-muted",children:r&&h?(0,b.jsxs)(b.Fragment,{children:["next ",(0,b.jsx)("span",{className:"text-txt",children:h})]}):`${e.filter(a=>"done"===a).length}/${e.length}`})]}),(0,b.jsx)(t,{data:a}),(0,b.jsx)(u,{drift:a.drift})]})}}])},581040,452696,453161,a=>{"use strict";function b(a,b,c){let d;return a?"done"===b?"done":a<c?"overdue":7>=Math.round(((d=a=>Date.UTC(+a.slice(0,4),a.slice(5,7)-1,+a.slice(8,10)))(a)-d(c))/864e5)?"soon":"ok":null}function c(a){return a.every(a=>"done"===a)?"done":a.some(a=>"other"!==a)?"in-progress":"planned"}a.s(["dueState",0,b,"localToday",0,function(a=new Date){let b=a=>String(a).padStart(2,"0");return`${a.getFullYear()}-${b(a.getMonth()+1)}-${b(a.getDate())}`},"roadmapHealth",0,function(a,d,e){let f={},g=[];for(let c of a)c.due&&"overdue"===b(c.due,c.status,e)&&g.push({id:c.id,kind:"overdue",message:`${c.id} "${c.title}" is overdue since ${c.due}`});let h=new Set(a.filter(a=>null===a.parent).map(a=>a.id));for(let h of a){if(null===h.parent)continue;let a=h.tasks.filter(a=>!(a in d));a.length&&g.push({id:h.id,kind:"missing-task",message:`${h.id} links unknown task ${a.join(", ")}`});let i=h.tasks.filter(a=>a in d&&"cancelled"!==d[a].status),j="done"===h.status||"paused"===h.status?[]:function(a,c,d,e){let f=[];for(let a of c){let b=d[a];"done"!==b.status&&b.due&&b.due<e&&f.push(`${a} overdue since ${b.due}`),"blocked"===b.status&&f.push(`${a} blocked`)}let g=c.some(a=>["done","in-progress","review"].includes(d[a].status));return a.due&&"soon"===b(a.due,a.status,e)&&!g&&f.push(`due ${a.due}, nothing started`),f}(h,i,d,e);if(j.length&&g.push({id:h.id,kind:"at-risk",message:`${h.id} "${h.title}" at risk: ${j.join("; ")}`}),!i.length)continue;let k=i.map(a=>"done"===d[a].status?"done":"in-progress"===d[a].status||"review"===d[a].status?"in-progress":"other");f[h.id]={done:k.filter(a=>"done"===a).length,total:i.length};let l=c(k);if(l!==h.status&&("paused"!==h.status||"done"===l)){let a=i.filter(a=>"done"!==d[a].status);g.push({id:h.id,kind:"status-mismatch",message:"done"===l?`${h.id} "${h.title}": all tasks done but status is ${h.status}`:`${h.id} "${h.title}" is ${h.status} but tasks ${a.join(", ")} are not done`,suggestedStatus:l})}}for(let b of a){if(!h.has(b.id))continue;let d=a.filter(a=>a.parent===b.id);if(!d.length)continue;let e=d.map(a=>"done"===a.status?"done":"in-progress"===a.status?"in-progress":"other");f[b.id]=d.reduce((a,b)=>{let c=f[b.id]??{done:+("done"===b.status),total:1};return{done:a.done+c.done,total:a.total+c.total}},{done:0,total:0});let i=c(e);i!==b.status&&("paused"!==b.status||"done"===i)&&g.push({id:b.id,kind:"status-mismatch",message:`${b.id} "${b.title}" is ${b.status} but its features say ${i}`,suggestedStatus:i})}return{progress:f,drift:g}},"taskDueSummary",0,function(a,b,c){let d=a.map(a=>b[a]).filter(a=>a&&a.due&&"done"!==a.status&&"cancelled"!==a.status).map(a=>a.due);if(!d.length)return null;let e=d.filter(a=>a>=c).sort();return{overdue:d.length-e.length,next:e[0]??null}}],452696);function d(a){let b=new Set(a.filter(a=>null===a.parent).map(a=>a.id));return a.filter(a=>null===a.parent||!b.has(a.parent)).sort((a,b)=>a.order-b.order)}function e(a,b){return a.filter(a=>a.parent===b).sort((a,b)=>a.order-b.order)}a.s(["FEATURE_W",0,220,"HORIZON_W",0,260,"childrenOf",0,e,"resolvePositions",0,function(a,b){let c={},f=0;for(let g of d(a)){let d=b[g.id]??{x:0,y:f};c[g.id]=d;let h=null===g.parent?e(a,g.id):[],i=Math.ceil(h.length/2)>6?2:1;h.forEach((a,e)=>{let f=e%2==0?1:-1,g=Math.floor(e/2),h=g%i,j=Math.floor(g/i);c[a.id]=b[a.id]??{x:d.x+20+f*(340+260*h),y:d.y+110*j+55*h}}),f+=110*Math.max(1,Math.ceil(Math.ceil(h.length/2)/i))+90}return c},"spineItems",0,d],453161);let f=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],g=a=>({y:+a.slice(0,4),m:+a.slice(5,7),day:+a.slice(8,10)});a.s(["LANE_ROW_H",0,44,"buildTimeline",0,function(a,c){let h=a.map(a=>a.due).filter(a=>!!a),i=g([c,...h].sort()[0]),j=g([c,...h].sort().at(-1)??c),k={y:i.y,m:i.m-1},l=Math.max(6,(j.y-i.y)*12+(j.m-i.m)+3),m=Array.from({length:l},(a,b)=>{let c=12*k.y+(k.m-1)+b,d=Math.floor(c/12),e=c%12+1;return{y:d,m:e,label:1===e||0===b?`${f[e-1]} ${d}`:f[e-1],x:160*b}}),n=a=>{let{y:b,m:c,day:d}=g(a);return((b-m[0].y)*12+(c-m[0].m))*160+(d-.5)/new Date(b,c,0).getDate()*160},o=d(a).map(d=>{let f=[d,...null===d.parent?e(a,d.id):[]].filter(a=>a.due),g=[],h=f.map(a=>({item:a,x:n(a.due),horizon:a.id===d.id})).sort((a,b)=>a.x-b.x).map(a=>{let d=g.findIndex(b=>a.x>=b);return -1===d&&(d=g.push(0)-1),g[d]=a.x+180,{...a,row:d,state:b(a.item.due,a.item.status,c)}});return{item:d,rows:Math.max(1,g.length),markers:h}});return{months:m.map(({label:a,x:b})=>({label:a,x:b})),width:160*l,todayX:n(c),lanes:o,undated:a.filter(a=>!a.due&&"done"!==a.status)}},"formatDay",0,function(a){let{m:b,day:c}=g(a);return`${c} ${f[b-1]}`}],581040)}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=src_components_0eyr_zi._.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/chat/AgentMark.tsx","../../../../src/components/roadmap/RoadmapNodes.tsx","../../../../src/lib/roadmap-health.ts","../../../../src/components/roadmap/layout.ts","../../../../src/components/roadmap/timeline.ts"],"sourcesContent":["\"use client\"\n\nimport { Bot, Loader2 } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport { useChats, useItemAgent } from \"@/context/ChatContext\"\nimport type { Attach, ItemAgent } from \"@/lib/chats\"\nimport { StatusMarker } from \"./StatusMarker\"\n\nexport const AGENT_LABEL: Record<ItemAgent[\"status\"], string> = {\n running: \"Agent working\",\n \"needs-answer\": \"Agent needs you\",\n review: \"Plan to review\",\n}\n\n/**\n * Pill on an epic/task while a chat works on it; click opens that chat.\n * `nodrag` + stopPropagation keep a React Flow node from dragging/selecting on click.\n */\nexport function AgentMark({ attach, className }: { attach: Attach; className?: string }) {\n const agent = useItemAgent(attach)\n const { show } = useChats()\n if (!agent) return null\n const label = AGENT_LABEL[agent.status]\n return (\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); show(agent.chatId) }}\n title={`${label} · open chat`}\n aria-label={`${label}, open chat`}\n className={cn(\n \"nodrag inline-flex shrink-0 items-center gap-1 rounded-full border px-1.5 py-px font-mono text-[10px] leading-4 animate-fade-in transition-colors duration-(--duration-fast)\",\n agent.status === \"running\" && \"border-accent/50 text-accent hover:bg-accent/10\",\n agent.status === \"needs-answer\" && \"border-amber/50 text-amber hover:bg-amber/10\",\n agent.status === \"review\" && \"border-accent/50 bg-accent/10 text-accent hover:bg-accent/20\",\n className,\n )}\n >\n {agent.status === \"running\" ? <Loader2 className=\"size-3 animate-spin\" aria-hidden /> : <Bot className=\"size-3\" aria-hidden />}\n {label}\n </button>\n )\n}\n\n/** Non-interactive variant for places that are already a button (timeline markers, board cards, task rows). */\nexport function AgentDot({ attach }: { attach: Attach }) {\n const agent = useItemAgent(attach)\n if (!agent) return null\n return <StatusMarker status={agent.status} label={AGENT_LABEL[agent.status]} />\n}\n","\"use client\"\n\nimport { Handle, Position, type Node, type NodeProps } from \"@xyflow/react\"\nimport { AlertTriangle, Check } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport type { RoadmapItem, RoadmapStatus, TaskStatus } from \"@/types\"\nimport type { DueState, TaskDueSummary } from \"@/lib/roadmap-health\"\nimport { formatDay } from \"./timeline\"\nimport { FEATURE_W, HORIZON_W } from \"./layout\"\nimport { AgentMark } from \"@/components/chat/AgentMark\"\nimport { useItemAgent } from \"@/context/ChatContext\"\n\nexport type RoadmapNodeData = {\n item: RoadmapItem\n progress?: { done: number; total: number } // derived, never persisted\n drift?: string[]\n dueState?: DueState | null\n taskDue?: TaskDueSummary | null\n taskDueSoon?: boolean\n taskStatuses?: TaskStatus[] // feature: linked tasks in order, cancelled/missing left out\n nextTaskId?: string | null // feature: what vibedoc_next_task would hand out\n chapter?: number // horizon: 1-based position on the spine\n epics?: { done: number; total: number } // horizon: child epics\n}\nexport type RoadmapNode = Node<RoadmapNodeData, \"horizon\" | \"feature\">\n\nconst SIDES = [Position.Top, Position.Right, Position.Bottom, Position.Left]\n\n/** One invisible source + target handle per side; edges pick `side` / `side-t`. */\nfunction Handles() {\n return (\n <>\n {SIDES.map((p) => (\n <Handle key={p} id={p} type=\"source\" position={p} isConnectable={false} className=\"opacity-0\" />\n ))}\n {SIDES.map((p) => (\n <Handle key={`${p}-t`} id={`${p}-t`} type=\"target\" position={p} isConnectable={false} className=\"opacity-0\" />\n ))}\n </>\n )\n}\n\nexport const STATUS_LABEL: Record<RoadmapStatus, string> = { \"in-progress\": \"Active\", paused: \"Paused\", done: \"Done\", planned: \"Planned\" }\n\n/** Roadmap status as a dot: live = accent with a pulse, done = teal, planned = hollow. */\nexport function StatusDot({ status, className }: { status: RoadmapStatus; className?: string }) {\n return (\n <span title={STATUS_LABEL[status]} aria-label={STATUS_LABEL[status]} className={cn(\"relative inline-flex h-2 w-2 shrink-0\", className)}>\n {status === \"in-progress\" && <span className=\"absolute inset-0 animate-ping rounded-full bg-accent/60\" />}\n <span\n className={cn(\n \"relative h-full w-full rounded-full\",\n status === \"done\" && \"bg-teal\",\n status === \"in-progress\" && \"bg-accent\",\n status === \"planned\" && \"border border-muted\",\n status === \"paused\" && \"border-2 border-y-0 border-muted\",\n )}\n />\n </span>\n )\n}\n\nexport function StatusPill({ status }: { status: RoadmapStatus }) {\n return (\n <span\n className={cn(\n \"inline-flex items-center gap-1.5 rounded-full border px-2 py-0.5 font-mono text-[10px] uppercase tracking-wider\",\n status === \"done\" && \"border-teal/40 text-teal\",\n status === \"in-progress\" && \"border-accent/50 text-accent\",\n status === \"planned\" && \"border-dashed border-border2 text-muted\",\n status === \"paused\" && \"border-border2 text-muted\",\n )}\n >\n <StatusDot status={status} className=\"h-1.5 w-1.5\" />\n {STATUS_LABEL[status]}\n </span>\n )\n}\n\nexport const TASK_STATUS_BG: Record<TaskStatus, string> = {\n done: \"bg-teal\",\n \"in-progress\": \"bg-amber\",\n review: \"bg-accent\",\n blocked: \"bg-danger\",\n paused: \"bg-muted/60\",\n todo: \"bg-border2\",\n cancelled: \"bg-border\",\n}\n\n/** One segment per task, colored by its board status (same colors as the board). */\nexport function SegmentedProgress({ statuses, className }: { statuses?: TaskStatus[]; className?: string }) {\n if (!statuses?.length) return null\n const done = statuses.filter((s) => s === \"done\").length\n return (\n <div className={cn(\"flex h-1.5 min-w-0 flex-1 gap-0.5\", className)} title={`${done}/${statuses.length} tasks done`}>\n {statuses.map((s, i) => (\n <span key={i} className={cn(\"h-full flex-1 rounded-[1px]\", TASK_STATUS_BG[s])} />\n ))}\n </div>\n )\n}\n\n/** Small progress ring; color follows `className` (currentColor). */\nexport function ProgressRing({ value, total, className }: { value: number; total: number; className?: string }) {\n const r = 14\n const c = 2 * Math.PI * r\n const pct = total > 0 ? value / total : 0\n return (\n <span className={cn(\"relative inline-flex h-9 w-9 shrink-0 items-center justify-center\", className)} title={`${value}/${total} tasks done`}>\n <svg viewBox=\"0 0 36 36\" className=\"absolute inset-0 -rotate-90\">\n <circle cx=\"18\" cy=\"18\" r={r} fill=\"none\" strokeWidth=\"3\" className=\"stroke-border\" />\n <circle cx=\"18\" cy=\"18\" r={r} fill=\"none\" strokeWidth=\"3\" stroke=\"currentColor\" strokeLinecap=\"round\"\n strokeDasharray={c} strokeDashoffset={c * (1 - pct)} />\n </svg>\n <span className=\"font-mono text-[9px] text-txt\">{Math.round(pct * 100)}</span>\n </span>\n )\n}\n\nexport function Progress({ progress }: { progress?: RoadmapNodeData[\"progress\"] }) {\n if (!progress) return null\n const pct = Math.round((progress.done / progress.total) * 100)\n return (\n <div className=\"flex items-center gap-1.5\" title={`${progress.done}/${progress.total} done`}>\n <div className=\"h-1 flex-1 overflow-hidden rounded-full bg-border\">\n <div className=\"h-full rounded-full bg-teal\" style={{ width: `${pct}%` }} />\n </div>\n <span className=\"font-mono text-[10px] text-muted\">{progress.done}/{progress.total}</span>\n </div>\n )\n}\n\nexport function DueChip({ due, state }: { due: string | null; state?: DueState | null }) {\n if (!due) return null\n return (\n <span\n className={cn(\n \"font-mono text-[10px]\",\n state === \"overdue\" ? \"text-danger\" : state === \"soon\" ? \"text-amber\" : \"text-muted\",\n )}\n >\n Due {formatDay(due)}\n </span>\n )\n}\n\n/** The single most urgent date line for a card: overdue tasks, then the epic's own due, then the next task due. */\nfunction DueNote({ data }: { data: RoadmapNodeData }) {\n const s = data.taskDue\n if (s && s.overdue > 0) {\n return <span className=\"font-mono text-[10px] text-danger\">{s.overdue} {s.overdue === 1 ? \"task\" : \"tasks\"} overdue</span>\n }\n if (data.item.due) return <DueChip due={data.item.due} state={data.dueState} />\n if (s?.next) return <span className={cn(\"font-mono text-[10px]\", data.taskDueSoon ? \"text-amber\" : \"text-muted\")}>Next due {formatDay(s.next)}</span>\n return null\n}\n\nfunction DriftMark({ drift }: { drift?: string[] }) {\n if (!drift?.length) return null\n return (\n <span title={drift.join(\"\\n\")} className=\"absolute -left-2 -top-2 rounded-full bg-bg p-0.5 text-amber\">\n <AlertTriangle className=\"h-3.5 w-3.5\" />\n </span>\n )\n}\n\n/** A horizon is a chapter: big number, title, epic count, and a ring for task progress. */\nexport function HorizonNode({ data, selected }: NodeProps<RoadmapNode>) {\n const { item, progress, epics, chapter } = data\n const status = item.status\n return (\n <div\n style={{ width: HORIZON_W }}\n className={cn(\n \"relative flex items-center gap-3 rounded-xl border bg-surface px-3.5 py-3 transition-shadow duration-(--duration-base)\",\n status === \"in-progress\" && \"border-accent/60 shadow-[0_0_0_1px_rgb(var(--rgb-accent)/0.25),0_10px_30px_-12px_rgb(var(--rgb-accent)/0.6)]\",\n status === \"done\" && \"border-teal/40\",\n status === \"planned\" && \"border-dashed border-border2\",\n status === \"paused\" && \"border-border2 opacity-75\",\n selected && \"ring-2 ring-accent/60 ring-offset-2 ring-offset-bg\",\n )}\n >\n <Handles />\n <span\n className={cn(\n \"font-mono text-2xl font-semibold leading-none tabular-nums\",\n status === \"in-progress\" ? \"text-accent\" : status === \"done\" ? \"text-teal\" : \"text-muted\",\n )}\n >\n {chapter ? String(chapter).padStart(2, \"0\") : \"··\"}\n </span>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-xs font-semibold uppercase leading-snug tracking-wider text-txt\">{item.title}</p>\n <p className=\"mt-1 flex flex-wrap items-center gap-x-2 font-mono text-[10px] text-muted\">\n {epics && epics.total > 0 && <span>{epics.done}/{epics.total} epics</span>}\n <DueChip due={item.due} state={data.dueState} />\n </p>\n </div>\n {progress && (\n <ProgressRing value={progress.done} total={progress.total} className={status === \"done\" ? \"text-teal\" : \"text-accent\"} />\n )}\n <DriftMark drift={data.drift} />\n </div>\n )\n}\n\n/**\n * Three looks so the eye lands on live work: live = lit card with task segments and the next task,\n * done = one quiet line, planned = dashed outline. Height stays under ROW_H (layout.ts) so saved positions never overlap.\n */\nexport function FeatureNode({ data, selected }: NodeProps<RoadmapNode>) {\n const { item, taskStatuses, nextTaskId } = data\n const agent = useItemAgent({ kind: \"epic\", id: item.id })\n const drifting = !!data.drift?.length\n const ring = selected && \"ring-2 ring-accent/60 ring-offset-2 ring-offset-bg\"\n\n if (item.status === \"done\") {\n return (\n <div\n style={{ width: FEATURE_W }}\n className={cn(\"group relative flex items-center gap-2 rounded-lg border border-border bg-surface/60 px-3 py-2 hover:border-teal/40\", ring)}\n >\n <Handles />\n <Check className=\"h-3.5 w-3.5 shrink-0 text-teal\" strokeWidth={3} />\n <p className=\"min-w-0 flex-1 truncate text-[13px] text-muted group-hover:text-txt\" title={item.title}>{item.title}</p>\n {agent ? <AgentMark attach={{ kind: \"epic\", id: item.id }} />\n : data.progress && <span className=\"font-mono text-[10px] text-muted\">{data.progress.done}/{data.progress.total}</span>}\n <DriftMark drift={data.drift} />\n </div>\n )\n }\n\n const live = item.status === \"in-progress\"\n return (\n <div\n style={{ width: FEATURE_W }}\n className={cn(\n \"relative flex flex-col gap-1.5 rounded-lg border px-3 py-2.5 transition-shadow duration-(--duration-base)\",\n live\n ? \"border-accent/50 bg-surface shadow-[0_8px_24px_-10px_rgb(var(--rgb-accent)/0.55)]\"\n : \"border-dashed border-border2 bg-bg hover:border-muted\",\n item.status === \"paused\" && \"opacity-70\",\n ring,\n )}\n >\n <Handles />\n {live && <span className={cn(\"absolute -inset-y-px -left-px w-[3px] rounded-l-lg\", drifting ? \"bg-amber\" : \"bg-accent\")} />}\n <div className=\"flex items-center justify-between font-mono text-[10px]\">\n <span className=\"text-muted\">{item.id}</span>\n {agent ? (\n <AgentMark attach={{ kind: \"epic\", id: item.id }} />\n ) : live ? (\n <span className=\"flex items-center gap-1.5 uppercase tracking-wider text-accent\"><StatusDot status=\"in-progress\" className=\"h-1.5 w-1.5\" />Live</span>\n ) : (\n <span className=\"uppercase tracking-wider text-muted\">{item.tasks.length ? `${item.tasks.length} tasks` : \"No tasks yet\"}</span>\n )}\n </div>\n <p className={cn(\"line-clamp-2 text-[13px] leading-snug\", live ? \"font-medium text-txt\" : \"text-txt/80\")} title={item.title}>\n {item.title}\n </p>\n {taskStatuses && taskStatuses.length > 0 && (\n <div className=\"flex items-center gap-2\">\n <SegmentedProgress statuses={taskStatuses} />\n <span className=\"shrink-0 font-mono text-[10px] text-muted\">\n {live && nextTaskId ? <>next <span className=\"text-txt\">{nextTaskId}</span></> : `${taskStatuses.filter((s) => s === \"done\").length}/${taskStatuses.length}`}\n </span>\n </div>\n )}\n <DueNote data={data} />\n <DriftMark drift={data.drift} />\n </div>\n )\n}\n\nexport const nodeTypes = { horizon: HorizonNode, feature: FeatureNode }\n","/**\n * src/lib/roadmap-health.ts\n * Pure (no fs): roadmap progress + drift, shared by the Roadmap page and the MCP handler.\n * A feature's expected status comes from its linked tasks; a horizon's from its features.\n */\n\nimport type { RoadmapItem, RoadmapStatus, Task } from './core'\n\n/** What health needs from a task: status for progress, due for at-risk. */\nexport type TaskInfo = Pick<Task, 'status' | 'due'>\n\nexport interface RoadmapProgress { done: number; total: number }\n\nexport interface RoadmapDrift {\n id: string\n kind: 'status-mismatch' | 'missing-task' | 'overdue' | 'at-risk'\n message: string\n suggestedStatus?: RoadmapStatus\n}\n\nexport interface RoadmapHealth {\n progress: Record<string, RoadmapProgress>\n drift: RoadmapDrift[]\n}\n\nexport type DueState = 'overdue' | 'soon' | 'ok' | 'done'\n\nconst SOON_DAYS = 7\n\n/** Local calendar date \"YYYY-MM-DD\" (due dates are calendar dates, not instants). */\nexport function localToday(now = new Date()): string {\n const p = (n: number) => String(n).padStart(2, '0')\n return `${now.getFullYear()}-${p(now.getMonth() + 1)}-${p(now.getDate())}`\n}\n\nfunction daysBetween(from: string, to: string): number {\n const utc = (d: string) => Date.UTC(+d.slice(0, 4), +d.slice(5, 7) - 1, +d.slice(8, 10))\n return Math.round((utc(to) - utc(from)) / 86_400_000)\n}\n\nexport function dueState(due: string | null, status: RoadmapStatus, today: string): DueState | null {\n if (!due) return null\n if (status === 'done') return 'done'\n if (due < today) return 'overdue'\n return daysBetween(today, due) <= SOON_DAYS ? 'soon' : 'ok'\n}\n\ntype Started = 'done' | 'in-progress' | 'other'\n\nfunction expectedStatus(states: Started[]): RoadmapStatus {\n if (states.every(s => s === 'done')) return 'done'\n if (states.some(s => s !== 'other')) return 'in-progress'\n return 'planned'\n}\n\nexport interface TaskDueSummary { overdue: number; next: string | null }\n\n/** Open tasks' deadlines for a map node: how many are overdue, and the nearest upcoming due. */\nexport function taskDueSummary(taskIds: string[], tasks: Record<string, TaskInfo>, today: string): TaskDueSummary | null {\n const dues = taskIds\n .map(id => tasks[id])\n .filter(t => t && t.due && t.status !== 'done' && t.status !== 'cancelled')\n .map(t => t.due as string)\n if (!dues.length) return null\n const upcoming = dues.filter(d => d >= today).sort()\n return { overdue: dues.length - upcoming.length, next: upcoming[0] ?? null }\n}\n\n/** Why an unfinished epic may miss its date: overdue or blocked tasks, or due soon with nothing started. */\nfunction atRiskReasons(item: RoadmapItem, linked: string[], tasks: Record<string, TaskInfo>, today: string): string[] {\n const reasons: string[] = []\n for (const id of linked) {\n const t = tasks[id]\n if (t.status !== 'done' && t.due && t.due < today) reasons.push(`${id} overdue since ${t.due}`)\n if (t.status === 'blocked') reasons.push(`${id} blocked`)\n }\n const started = linked.some(id => ['done', 'in-progress', 'review'].includes(tasks[id].status))\n if (item.due && dueState(item.due, item.status, today) === 'soon' && !started) {\n reasons.push(`due ${item.due}, nothing started`)\n }\n return reasons\n}\n\nexport function roadmapHealth(\n items: RoadmapItem[], tasks: Record<string, TaskInfo>, today: string,\n): RoadmapHealth {\n const progress: Record<string, RoadmapProgress> = {}\n const drift: RoadmapDrift[] = []\n\n for (const item of items) {\n if (item.due && dueState(item.due, item.status, today) === 'overdue') {\n drift.push({ id: item.id, kind: 'overdue', message: `${item.id} \"${item.title}\" is overdue since ${item.due}` })\n }\n }\n const horizonIds = new Set(items.filter(i => i.parent === null).map(i => i.id))\n\n for (const item of items) {\n if (item.parent === null) continue\n const missing = item.tasks.filter(t => !(t in tasks))\n if (missing.length) {\n drift.push({ id: item.id, kind: 'missing-task', message: `${item.id} links unknown task ${missing.join(', ')}` })\n }\n // cancelled tasks don't count toward progress or expected status\n const linked = item.tasks.filter(t => t in tasks && tasks[t].status !== 'cancelled')\n // a paused epic is stopped on purpose: not at risk\n const risks = item.status === 'done' || item.status === 'paused' ? [] : atRiskReasons(item, linked, tasks, today)\n if (risks.length) {\n drift.push({ id: item.id, kind: 'at-risk', message: `${item.id} \"${item.title}\" at risk: ${risks.join('; ')}` })\n }\n if (!linked.length) continue\n const states: Started[] = linked.map(t =>\n tasks[t].status === 'done' ? 'done' : tasks[t].status === 'in-progress' || tasks[t].status === 'review' ? 'in-progress' : 'other')\n progress[item.id] = { done: states.filter(s => s === 'done').length, total: linked.length }\n const expected = expectedStatus(states)\n // paused stays paused until everything is done\n if (expected !== item.status && !(item.status === 'paused' && expected !== 'done')) {\n const open = linked.filter(t => tasks[t].status !== 'done')\n drift.push({\n id: item.id,\n kind: 'status-mismatch',\n message: expected === 'done'\n ? `${item.id} \"${item.title}\": all tasks done but status is ${item.status}`\n : `${item.id} \"${item.title}\" is ${item.status} but tasks ${open.join(', ')} are not done`,\n suggestedStatus: expected,\n })\n }\n }\n\n for (const h of items) {\n if (!horizonIds.has(h.id)) continue\n const kids = items.filter(i => i.parent === h.id)\n if (!kids.length) continue\n const states: Started[] = kids.map(k => k.status === 'done' ? 'done' : k.status === 'in-progress' ? 'in-progress' : 'other')\n // weight by tasks; an epic not broken down yet counts as one unit\n progress[h.id] = kids.reduce((sum, k) => {\n const p = progress[k.id] ?? { done: k.status === 'done' ? 1 : 0, total: 1 }\n return { done: sum.done + p.done, total: sum.total + p.total }\n }, { done: 0, total: 0 })\n const expected = expectedStatus(states)\n if (expected !== h.status && !(h.status === 'paused' && expected !== 'done')) {\n drift.push({\n id: h.id,\n kind: 'status-mismatch',\n message: `${h.id} \"${h.title}\" is ${h.status} but its features say ${expected}`,\n suggestedStatus: expected,\n })\n }\n }\n\n return { progress, drift }\n}\n","import type { RoadmapItem, RoadmapLayout } from \"@/types\"\n\nexport const HORIZON_W = 260\nexport const FEATURE_W = 220\nconst BRANCH_DX = 340\nconst ROW_H = 110\nconst HORIZON_GAP = 90\nconst COL_DX = FEATURE_W + 40\nconst MAX_ROWS_PER_SIDE = 6 // beyond this, a side gets a second (outer, half-row staggered) column\n\n/** Items that sit on the spine: real horizons plus orphans whose parent is not a horizon. */\nexport function spineItems(items: RoadmapItem[]): RoadmapItem[] {\n const horizonIds = new Set(items.filter((i) => i.parent === null).map((i) => i.id))\n return items\n .filter((i) => i.parent === null || !horizonIds.has(i.parent))\n .sort((a, b) => a.order - b.order)\n}\n\nexport function childrenOf(items: RoadmapItem[], parentId: string): RoadmapItem[] {\n return items.filter((i) => i.parent === parentId).sort((a, b) => a.order - b.order)\n}\n\n/**\n * Resolve a position for every item: saved (layout.json) wins, otherwise auto-place.\n * Horizons stack on x=0 by order; children alternate right/left of their parent's RESOLVED position.\n */\nexport function resolvePositions(items: RoadmapItem[], layout: RoadmapLayout): RoadmapLayout {\n const out: RoadmapLayout = {}\n let cursor = 0\n for (const h of spineItems(items)) {\n const hp = layout[h.id] ?? { x: 0, y: cursor }\n out[h.id] = hp\n const kids = h.parent === null ? childrenOf(items, h.id) : []\n const cols = Math.ceil(kids.length / 2) > MAX_ROWS_PER_SIDE ? 2 : 1\n kids.forEach((c, i) => {\n const side = i % 2 === 0 ? 1 : -1\n const k = Math.floor(i / 2) // index within its side\n const col = k % cols\n const row = Math.floor(k / cols)\n out[c.id] = layout[c.id] ?? {\n x: hp.x + (HORIZON_W - FEATURE_W) / 2 + side * (BRANCH_DX + col * COL_DX),\n // outer column sits half a row lower so its edges pass between inner nodes\n y: hp.y + row * ROW_H + col * (ROW_H / 2),\n }\n })\n const rows = Math.ceil(Math.ceil(kids.length / 2) / cols)\n cursor += Math.max(1, rows) * ROW_H + HORIZON_GAP\n }\n return out\n}\n","import type { RoadmapItem } from \"@/types\"\nimport { dueState, type DueState } from \"@/lib/roadmap-health\"\nimport { childrenOf, spineItems } from \"./layout\"\n\nexport const MONTH_W = 160\nexport const LANE_ROW_H = 44\nconst LABEL_W = 180 // horizontal room a marker's label needs before the next one fits on the same row\nconst MIN_MONTHS = 6\n\nconst MONTHS = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n\n// Dates are \"YYYY-MM-DD\" calendar dates — parsed by hand, never via new Date(string) (UTC shift).\nconst ymd = (d: string) => ({ y: +d.slice(0, 4), m: +d.slice(5, 7), day: +d.slice(8, 10) })\nconst daysIn = (y: number, m: number) => new Date(y, m, 0).getDate()\n\nexport function formatDay(d: string): string {\n const { m, day } = ymd(d)\n return `${day} ${MONTHS[m - 1]}`\n}\n\nexport interface TimelineMarker { item: RoadmapItem; x: number; row: number; state: DueState | null; horizon: boolean }\nexport interface TimelineLane { item: RoadmapItem; rows: number; markers: TimelineMarker[] }\nexport interface Timeline {\n months: { label: string; x: number }[]\n width: number\n todayX: number\n lanes: TimelineLane[]\n undated: RoadmapItem[]\n}\n\nexport function buildTimeline(items: RoadmapItem[], today: string): Timeline {\n const dues = items.map((i) => i.due).filter((d): d is string => !!d)\n const first = ymd([today, ...dues].sort()[0])\n const last = ymd([today, ...dues].sort().at(-1) ?? today)\n\n // pad one month each side, then stretch to a readable minimum\n const start = { y: first.y, m: first.m - 1 }\n const span = Math.max(MIN_MONTHS, (last.y - first.y) * 12 + (last.m - first.m) + 3)\n const months = Array.from({ length: span }, (_, i) => {\n const t = start.y * 12 + (start.m - 1) + i\n const y = Math.floor(t / 12)\n const m = (t % 12) + 1\n return { y, m, label: m === 1 || i === 0 ? `${MONTHS[m - 1]} ${y}` : MONTHS[m - 1], x: i * MONTH_W }\n })\n\n const xOf = (d: string) => {\n const { y, m, day } = ymd(d)\n const idx = (y - months[0].y) * 12 + (m - months[0].m)\n return idx * MONTH_W + ((day - 0.5) / daysIn(y, m)) * MONTH_W\n }\n\n const lanes = spineItems(items).map((h) => {\n const dated = [h, ...(h.parent === null ? childrenOf(items, h.id) : [])].filter((i) => i.due)\n const rowEnds: number[] = []\n const markers = dated\n .map((item) => ({ item, x: xOf(item.due as string), horizon: item.id === h.id }))\n .sort((a, b) => a.x - b.x)\n .map((mk) => {\n // greedy: first row whose last label ends before this marker\n let row = rowEnds.findIndex((end) => mk.x >= end)\n if (row === -1) row = rowEnds.push(0) - 1\n rowEnds[row] = mk.x + LABEL_W\n return { ...mk, row, state: dueState(mk.item.due, mk.item.status, today) }\n })\n return { item: h, rows: Math.max(1, rowEnds.length), markers }\n })\n\n return {\n months: months.map(({ label, x }) => ({ label, x })),\n width: span * MONTH_W,\n todayX: xOf(today),\n lanes,\n undated: items.filter((i) => !i.due && i.status !== \"done\"), // shipped work needs no date\n }\n}\n"],"names":["AGENT_LABEL","running","review","AgentMark","attach","className","agent","show","label","status","type","onClick","e","stopPropagation","chatId","title","AgentDot","SIDES","Top","Right","Bottom","Left","Handles","map","p","id","position","isConnectable","STATUS_LABEL","paused","done","planned","StatusDot","StatusPill","TASK_STATUS_BG","blocked","todo","cancelled","SegmentedProgress","statuses","length","filter","s","i","ProgressRing","value","total","r","c","Math","PI","pct","viewBox","cx","cy","fill","strokeWidth","stroke","strokeLinecap","strokeDasharray","strokeDashoffset","round","Progress","progress","style","width","DueChip","due","state","DueNote","data","taskDue","overdue","item","dueState","next","taskDueSoon","DriftMark","drift","join","HorizonNode","selected","epics","chapter","String","padStart","FeatureNode","taskStatuses","nextTaskId","kind","drifting","ring","live","tasks","nodeTypes","horizon","feature","SOON_DAYS","localToday","now","Date","n","getFullYear","getMonth","getDate","daysBetween","from","to","utc","d","UTC","slice","today","expectedStatus","states","every","some","taskDueSummary","taskIds","dues","t","upcoming","sort","atRiskReasons","linked","reasons","push","started","includes","roadmapHealth","items","message","horizonIds","Set","parent","missing","risks","expected","open","suggestedStatus","h","has","kids","k","reduce","sum"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[815122,a=>{"use strict";var b=a.i(662145),c=a.i(795667),d=a.i(108280),e=a.i(368114),f=a.i(685698),g=a.i(598984);let h={running:"Agent working","needs-answer":"Agent needs you",review:"Plan to review"};a.s(["AgentDot",0,function({attach:a}){let c=(0,f.useItemAgent)(a);return c?(0,b.jsx)(g.StatusMarker,{status:c.status,label:h[c.status]}):null},"AgentMark",0,function({attach:a,className:g}){let i=(0,f.useItemAgent)(a),{show:j}=(0,f.useChats)();if(!i)return null;let k=h[i.status];return(0,b.jsxs)("button",{type:"button",onClick:a=>{a.stopPropagation(),j(i.chatId)},title:`${k} \xb7 open chat`,"aria-label":`${k}, open chat`,className:(0,e.cn)("nodrag inline-flex shrink-0 items-center gap-1 rounded-full border px-1.5 py-px font-mono text-[10px] leading-4 animate-fade-in transition-colors duration-(--duration-fast)","running"===i.status&&"border-accent/50 text-accent hover:bg-accent/10","needs-answer"===i.status&&"border-amber/50 text-amber hover:bg-amber/10","review"===i.status&&"border-accent/50 bg-accent/10 text-accent hover:bg-accent/20",g),children:["running"===i.status?(0,b.jsx)(d.Loader2,{className:"size-3 animate-spin","aria-hidden":!0}):(0,b.jsx)(c.Bot,{className:"size-3","aria-hidden":!0}),k]})}])},618940,a=>{"use strict";var b=a.i(662145),c=a.i(365465),d=a.i(152716),e=a.i(340933),f=a.i(425404),g=a.i(368114),h=a.i(581040),i=a.i(453161),j=a.i(815122),k=a.i(685698);let l=[d.Position.Top,d.Position.Right,d.Position.Bottom,d.Position.Left];function m(){return(0,b.jsxs)(b.Fragment,{children:[l.map(a=>(0,b.jsx)(c.Handle,{id:a,type:"source",position:a,isConnectable:!1,className:"opacity-0"},a)),l.map(a=>(0,b.jsx)(c.Handle,{id:`${a}-t`,type:"target",position:a,isConnectable:!1,className:"opacity-0"},`${a}-t`))]})}let n={"in-progress":"Active",paused:"Paused",done:"Done",planned:"Planned"};function o({status:a,className:c}){return(0,b.jsxs)("span",{title:n[a],"aria-label":n[a],className:(0,g.cn)("relative inline-flex h-2 w-2 shrink-0",c),children:["in-progress"===a&&(0,b.jsx)("span",{className:"absolute inset-0 animate-ping rounded-full bg-accent/60"}),(0,b.jsx)("span",{className:(0,g.cn)("relative h-full w-full rounded-full","done"===a&&"bg-teal","in-progress"===a&&"bg-accent","planned"===a&&"border border-muted","paused"===a&&"border-2 border-y-0 border-muted")})]})}let p={done:"bg-teal","in-progress":"bg-amber",review:"bg-accent",blocked:"bg-danger",paused:"bg-muted/60",todo:"bg-border2",cancelled:"bg-border"};function q({statuses:a,className:c}){if(!a?.length)return null;let d=a.filter(a=>"done"===a).length;return(0,b.jsx)("div",{className:(0,g.cn)("flex h-1.5 min-w-0 flex-1 gap-0.5",c),title:`${d}/${a.length} tasks done`,children:a.map((a,c)=>(0,b.jsx)("span",{className:(0,g.cn)("h-full flex-1 rounded-[1px]",p[a])},c))})}function r({value:a,total:c,className:d}){let e=2*Math.PI*14,f=c>0?a/c:0;return(0,b.jsxs)("span",{className:(0,g.cn)("relative inline-flex h-9 w-9 shrink-0 items-center justify-center",d),title:`${a}/${c} tasks done`,children:[(0,b.jsxs)("svg",{viewBox:"0 0 36 36",className:"absolute inset-0 -rotate-90",children:[(0,b.jsx)("circle",{cx:"18",cy:"18",r:14,fill:"none",strokeWidth:"3",className:"stroke-border"}),(0,b.jsx)("circle",{cx:"18",cy:"18",r:14,fill:"none",strokeWidth:"3",stroke:"currentColor",strokeLinecap:"round",strokeDasharray:e,strokeDashoffset:e*(1-f)})]}),(0,b.jsx)("span",{className:"font-mono text-[9px] text-txt",children:Math.round(100*f)})]})}function s({due:a,state:c}){return a?(0,b.jsxs)("span",{className:(0,g.cn)("font-mono text-[10px]","overdue"===c?"text-danger":"soon"===c?"text-amber":"text-muted"),children:["Due ",(0,h.formatDay)(a)]}):null}function t({data:a}){let c=a.taskDue;return c&&c.overdue>0?(0,b.jsxs)("span",{className:"font-mono text-[10px] text-danger",children:[c.overdue," ",1===c.overdue?"task":"tasks"," overdue"]}):a.item.due?(0,b.jsx)(s,{due:a.item.due,state:a.dueState}):c?.next?(0,b.jsxs)("span",{className:(0,g.cn)("font-mono text-[10px]",a.taskDueSoon?"text-amber":"text-muted"),children:["Next due ",(0,h.formatDay)(c.next)]}):null}function u({drift:a}){return a?.length?(0,b.jsx)("span",{title:a.join("\n"),className:"absolute -left-2 -top-2 rounded-full bg-bg p-0.5 text-amber",children:(0,b.jsx)(e.AlertTriangle,{className:"h-3.5 w-3.5"})}):null}a.s(["DueChip",0,s,"STATUS_LABEL",0,n,"SegmentedProgress",0,q,"StatusDot",0,o,"StatusPill",0,function({status:a}){return(0,b.jsxs)("span",{className:(0,g.cn)("inline-flex items-center gap-1.5 rounded-full border px-2 py-0.5 font-mono text-[10px] uppercase tracking-wider","done"===a&&"border-teal/40 text-teal","in-progress"===a&&"border-accent/50 text-accent","planned"===a&&"border-dashed border-border2 text-muted","paused"===a&&"border-border2 text-muted"),children:[(0,b.jsx)(o,{status:a,className:"h-1.5 w-1.5"}),n[a]]})},"TASK_STATUS_BG",0,p,"nodeTypes",0,{horizon:function({data:a,selected:c}){let{item:d,progress:e,epics:f,chapter:h}=a,j=d.status;return(0,b.jsxs)("div",{style:{width:i.HORIZON_W},className:(0,g.cn)("relative flex items-center gap-3 rounded-xl border bg-surface px-3.5 py-3 transition-shadow duration-(--duration-base)","in-progress"===j&&"border-accent/60 shadow-[0_0_0_1px_rgb(var(--rgb-accent)/0.25),0_10px_30px_-12px_rgb(var(--rgb-accent)/0.6)]","done"===j&&"border-teal/40","planned"===j&&"border-dashed border-border2","paused"===j&&"border-border2 opacity-75",c&&"ring-2 ring-accent/60 ring-offset-2 ring-offset-bg"),children:[(0,b.jsx)(m,{}),(0,b.jsx)("span",{className:(0,g.cn)("font-mono text-2xl font-semibold leading-none tabular-nums","in-progress"===j?"text-accent":"done"===j?"text-teal":"text-muted"),children:h?String(h).padStart(2,"0"):"··"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("p",{className:"text-xs font-semibold uppercase leading-snug tracking-wider text-txt",children:d.title}),(0,b.jsxs)("p",{className:"mt-1 flex flex-wrap items-center gap-x-2 font-mono text-[10px] text-muted",children:[f&&f.total>0&&(0,b.jsxs)("span",{children:[f.done,"/",f.total," epics"]}),(0,b.jsx)(s,{due:d.due,state:a.dueState})]})]}),e&&(0,b.jsx)(r,{value:e.done,total:e.total,className:"done"===j?"text-teal":"text-accent"}),(0,b.jsx)(u,{drift:a.drift})]})},feature:function({data:a,selected:c}){let{item:d,taskStatuses:e,nextTaskId:h}=a,l=(0,k.useItemAgent)({kind:"epic",id:d.id}),n=!!a.drift?.length,p=c&&"ring-2 ring-accent/60 ring-offset-2 ring-offset-bg";if("done"===d.status)return(0,b.jsxs)("div",{style:{width:i.FEATURE_W},className:(0,g.cn)("group relative flex items-center gap-2 rounded-lg border border-border bg-surface/60 px-3 py-2 hover:border-teal/40",p),children:[(0,b.jsx)(m,{}),(0,b.jsx)(f.Check,{className:"h-3.5 w-3.5 shrink-0 text-teal",strokeWidth:3}),(0,b.jsx)("p",{className:"min-w-0 flex-1 truncate text-[13px] text-muted group-hover:text-txt",title:d.title,children:d.title}),l?(0,b.jsx)(j.AgentMark,{attach:{kind:"epic",id:d.id}}):a.progress&&(0,b.jsxs)("span",{className:"font-mono text-[10px] text-muted",children:[a.progress.done,"/",a.progress.total]}),(0,b.jsx)(u,{drift:a.drift})]});let r="in-progress"===d.status;return(0,b.jsxs)("div",{style:{width:i.FEATURE_W},className:(0,g.cn)("relative flex flex-col gap-1.5 rounded-lg border px-3 py-2.5 transition-shadow duration-(--duration-base)",r?"border-accent/50 bg-surface shadow-[0_8px_24px_-10px_rgb(var(--rgb-accent)/0.55)]":"border-dashed border-border2 bg-bg hover:border-muted","paused"===d.status&&"opacity-70",p),children:[(0,b.jsx)(m,{}),r&&(0,b.jsx)("span",{className:(0,g.cn)("absolute -inset-y-px -left-px w-[3px] rounded-l-lg",n?"bg-amber":"bg-accent")}),(0,b.jsxs)("div",{className:"flex items-center justify-between font-mono text-[10px]",children:[(0,b.jsx)("span",{className:"text-muted",children:d.id}),l?(0,b.jsx)(j.AgentMark,{attach:{kind:"epic",id:d.id}}):r?(0,b.jsxs)("span",{className:"flex items-center gap-1.5 uppercase tracking-wider text-accent",children:[(0,b.jsx)(o,{status:"in-progress",className:"h-1.5 w-1.5"}),"Live"]}):(0,b.jsx)("span",{className:"uppercase tracking-wider text-muted",children:d.tasks.length?`${d.tasks.length} tasks`:"No tasks yet"})]}),(0,b.jsx)("p",{className:(0,g.cn)("line-clamp-2 text-[13px] leading-snug",r?"font-medium text-txt":"text-txt/80"),title:d.title,children:d.title}),e&&e.length>0&&(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(q,{statuses:e}),(0,b.jsx)("span",{className:"shrink-0 font-mono text-[10px] text-muted",children:r&&h?(0,b.jsxs)(b.Fragment,{children:["next ",(0,b.jsx)("span",{className:"text-txt",children:h})]}):`${e.filter(a=>"done"===a).length}/${e.length}`})]}),(0,b.jsx)(t,{data:a}),(0,b.jsx)(u,{drift:a.drift})]})}}])},581040,452696,453161,a=>{"use strict";function b(a,b,c){let d;return a?"done"===b?"done":a<c?"overdue":7>=Math.round(((d=a=>Date.UTC(+a.slice(0,4),a.slice(5,7)-1,+a.slice(8,10)))(a)-d(c))/864e5)?"soon":"ok":null}function c(a){return a.every(a=>"done"===a)?"done":a.some(a=>"other"!==a)?"in-progress":"planned"}a.s(["dueState",0,b,"localToday",0,function(a=new Date){let b=a=>String(a).padStart(2,"0");return`${a.getFullYear()}-${b(a.getMonth()+1)}-${b(a.getDate())}`},"roadmapHealth",0,function(a,d,e){let f={},g=[];for(let c of a)c.due&&"overdue"===b(c.due,c.status,e)&&g.push({id:c.id,kind:"overdue",message:`${c.id} "${c.title}" is overdue since ${c.due}`});let h=new Set(a.filter(a=>null===a.parent).map(a=>a.id));for(let h of a){if(null===h.parent)continue;let a=h.tasks.filter(a=>!(a in d));a.length&&g.push({id:h.id,kind:"missing-task",message:`${h.id} links unknown task ${a.join(", ")}`});let i=h.tasks.filter(a=>a in d&&"cancelled"!==d[a].status),j="done"===h.status||"paused"===h.status?[]:function(a,c,d,e){let f=[];for(let a of c){let b=d[a];"done"!==b.status&&b.due&&b.due<e&&f.push(`${a} overdue since ${b.due}`),"blocked"===b.status&&f.push(`${a} blocked`)}let g=c.some(a=>["done","in-progress","review"].includes(d[a].status));return a.due&&"soon"===b(a.due,a.status,e)&&!g&&f.push(`due ${a.due}, nothing started`),f}(h,i,d,e);if(j.length&&g.push({id:h.id,kind:"at-risk",message:`${h.id} "${h.title}" at risk: ${j.join("; ")}`}),!i.length)continue;let k=i.map(a=>"done"===d[a].status?"done":"in-progress"===d[a].status||"review"===d[a].status?"in-progress":"other");f[h.id]={done:k.filter(a=>"done"===a).length,total:i.length};let l=c(k);if(l!==h.status&&("paused"!==h.status||"done"===l)){let a=i.filter(a=>"done"!==d[a].status);g.push({id:h.id,kind:"status-mismatch",message:"done"===l?`${h.id} "${h.title}": all tasks done but status is ${h.status}`:`${h.id} "${h.title}" is ${h.status} but tasks ${a.join(", ")} are not done`,suggestedStatus:l})}}for(let b of a){if(!h.has(b.id))continue;let d=a.filter(a=>a.parent===b.id);if(!d.length)continue;let e=d.map(a=>"done"===a.status?"done":"in-progress"===a.status?"in-progress":"other");f[b.id]=d.reduce((a,b)=>{let c=f[b.id]??{done:+("done"===b.status),total:1};return{done:a.done+c.done,total:a.total+c.total}},{done:0,total:0});let i=c(e);i!==b.status&&("paused"!==b.status||"done"===i)&&g.push({id:b.id,kind:"status-mismatch",message:`${b.id} "${b.title}" is ${b.status} but its features say ${i}`,suggestedStatus:i})}return{progress:f,drift:g}},"taskDueSummary",0,function(a,b,c){let d=a.map(a=>b[a]).filter(a=>a&&a.due&&"done"!==a.status&&"cancelled"!==a.status).map(a=>a.due);if(!d.length)return null;let e=d.filter(a=>a>=c).sort();return{overdue:d.length-e.length,next:e[0]??null}}],452696);function d(a){let b=new Set(a.filter(a=>null===a.parent).map(a=>a.id));return a.filter(a=>null===a.parent||!b.has(a.parent)).sort((a,b)=>a.order-b.order)}function e(a,b){return a.filter(a=>a.parent===b).sort((a,b)=>a.order-b.order)}a.s(["FEATURE_W",0,220,"HORIZON_W",0,260,"childrenOf",0,e,"resolvePositions",0,function(a,b){let c={},f=0;for(let g of d(a)){let d=b[g.id]??{x:0,y:f};c[g.id]=d;let h=null===g.parent?e(a,g.id):[],i=Math.ceil(h.length/2)>6?2:1;h.forEach((a,e)=>{let f=e%2==0?1:-1,g=Math.floor(e/2),h=g%i,j=Math.floor(g/i);c[a.id]=b[a.id]??{x:d.x+20+f*(340+260*h),y:d.y+110*j+55*h}}),f+=110*Math.max(1,Math.ceil(Math.ceil(h.length/2)/i))+90}return c},"spineItems",0,d],453161);let f=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],g=a=>({y:+a.slice(0,4),m:+a.slice(5,7),day:+a.slice(8,10)});a.s(["LANE_ROW_H",0,44,"buildTimeline",0,function(a,c){let h=a.map(a=>a.due).filter(a=>!!a),i=g([c,...h].sort()[0]),j=g([c,...h].sort().at(-1)??c),k={y:i.y,m:i.m-1},l=Math.max(6,(j.y-i.y)*12+(j.m-i.m)+3),m=Array.from({length:l},(a,b)=>{let c=12*k.y+(k.m-1)+b,d=Math.floor(c/12),e=c%12+1;return{y:d,m:e,label:1===e||0===b?`${f[e-1]} ${d}`:f[e-1],x:160*b}}),n=a=>{let{y:b,m:c,day:d}=g(a);return((b-m[0].y)*12+(c-m[0].m))*160+(d-.5)/new Date(b,c,0).getDate()*160},o=d(a).map(d=>{let f=[d,...null===d.parent?e(a,d.id):[]].filter(a=>a.due),g=[],h=f.map(a=>({item:a,x:n(a.due),horizon:a.id===d.id})).sort((a,b)=>a.x-b.x).map(a=>{let d=g.findIndex(b=>a.x>=b);return -1===d&&(d=g.push(0)-1),g[d]=a.x+180,{...a,row:d,state:b(a.item.due,a.item.status,c)}});return{item:d,rows:Math.max(1,g.length),markers:h}});return{months:m.map(({label:a,x:b})=>({label:a,x:b})),width:160*l,todayX:n(c),lanes:o,undated:a.filter(a=>!a.due&&"done"!==a.status)}},"formatDay",0,function(a){let{m:b,day:c}=g(a);return`${c} ${f[b-1]}`}],581040)}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=src_components_1s861m8._.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/chat/AgentMark.tsx","../../../../src/components/roadmap/RoadmapNodes.tsx","../../../../src/lib/roadmap-health.ts","../../../../src/components/roadmap/layout.ts","../../../../src/components/roadmap/timeline.ts"],"sourcesContent":["\"use client\"\n\nimport { Bot, Loader2 } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport { useChats, useItemAgent } from \"@/context/ChatContext\"\nimport type { Attach, ItemAgent } from \"@/lib/chats\"\nimport { StatusMarker } from \"./StatusMarker\"\n\nexport const AGENT_LABEL: Record<ItemAgent[\"status\"], string> = {\n running: \"Agent working\",\n \"needs-answer\": \"Agent needs you\",\n review: \"Plan to review\",\n}\n\n/**\n * Pill on an epic/task while a chat works on it; click opens that chat.\n * `nodrag` + stopPropagation keep a React Flow node from dragging/selecting on click.\n */\nexport function AgentMark({ attach, className }: { attach: Attach; className?: string }) {\n const agent = useItemAgent(attach)\n const { show } = useChats()\n if (!agent) return null\n const label = AGENT_LABEL[agent.status]\n return (\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); show(agent.chatId) }}\n title={`${label} · open chat`}\n aria-label={`${label}, open chat`}\n className={cn(\n \"nodrag inline-flex shrink-0 items-center gap-1 rounded-full border px-1.5 py-px font-mono text-[10px] leading-4 animate-fade-in transition-colors duration-(--duration-fast)\",\n agent.status === \"running\" && \"border-accent/50 text-accent hover:bg-accent/10\",\n agent.status === \"needs-answer\" && \"border-amber/50 text-amber hover:bg-amber/10\",\n agent.status === \"review\" && \"border-accent/50 bg-accent/10 text-accent hover:bg-accent/20\",\n className,\n )}\n >\n {agent.status === \"running\" ? <Loader2 className=\"size-3 animate-spin\" aria-hidden /> : <Bot className=\"size-3\" aria-hidden />}\n {label}\n </button>\n )\n}\n\n/** Non-interactive variant for places that are already a button (timeline markers, board cards, task rows). */\nexport function AgentDot({ attach }: { attach: Attach }) {\n const agent = useItemAgent(attach)\n if (!agent) return null\n return <StatusMarker status={agent.status} label={AGENT_LABEL[agent.status]} />\n}\n","\"use client\"\n\nimport { Handle, Position, type Node, type NodeProps } from \"@xyflow/react\"\nimport { AlertTriangle, Check } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport type { RoadmapItem, RoadmapStatus, TaskStatus } from \"@/types\"\nimport type { DueState, TaskDueSummary } from \"@/lib/roadmap-health\"\nimport { formatDay } from \"./timeline\"\nimport { FEATURE_W, HORIZON_W } from \"./layout\"\nimport { AgentMark } from \"@/components/chat/AgentMark\"\nimport { useItemAgent } from \"@/context/ChatContext\"\n\nexport type RoadmapNodeData = {\n item: RoadmapItem\n progress?: { done: number; total: number } // derived, never persisted\n drift?: string[]\n dueState?: DueState | null\n taskDue?: TaskDueSummary | null\n taskDueSoon?: boolean\n taskStatuses?: TaskStatus[] // feature: linked tasks in order, cancelled/missing left out\n nextTaskId?: string | null // feature: what vibedoc_next_task would hand out\n chapter?: number // horizon: 1-based position on the spine\n epics?: { done: number; total: number } // horizon: child epics\n}\nexport type RoadmapNode = Node<RoadmapNodeData, \"horizon\" | \"feature\">\n\nconst SIDES = [Position.Top, Position.Right, Position.Bottom, Position.Left]\n\n/** One invisible source + target handle per side; edges pick `side` / `side-t`. */\nfunction Handles() {\n return (\n <>\n {SIDES.map((p) => (\n <Handle key={p} id={p} type=\"source\" position={p} isConnectable={false} className=\"opacity-0\" />\n ))}\n {SIDES.map((p) => (\n <Handle key={`${p}-t`} id={`${p}-t`} type=\"target\" position={p} isConnectable={false} className=\"opacity-0\" />\n ))}\n </>\n )\n}\n\nexport const STATUS_LABEL: Record<RoadmapStatus, string> = { \"in-progress\": \"Active\", paused: \"Paused\", done: \"Done\", planned: \"Planned\" }\n\n/** Roadmap status as a dot: live = accent with a pulse, done = teal, planned = hollow. */\nexport function StatusDot({ status, className }: { status: RoadmapStatus; className?: string }) {\n return (\n <span title={STATUS_LABEL[status]} aria-label={STATUS_LABEL[status]} className={cn(\"relative inline-flex h-2 w-2 shrink-0\", className)}>\n {status === \"in-progress\" && <span className=\"absolute inset-0 animate-ping rounded-full bg-accent/60\" />}\n <span\n className={cn(\n \"relative h-full w-full rounded-full\",\n status === \"done\" && \"bg-teal\",\n status === \"in-progress\" && \"bg-accent\",\n status === \"planned\" && \"border border-muted\",\n status === \"paused\" && \"border-2 border-y-0 border-muted\",\n )}\n />\n </span>\n )\n}\n\nexport function StatusPill({ status }: { status: RoadmapStatus }) {\n return (\n <span\n className={cn(\n \"inline-flex items-center gap-1.5 rounded-full border px-2 py-0.5 font-mono text-[10px] uppercase tracking-wider\",\n status === \"done\" && \"border-teal/40 text-teal\",\n status === \"in-progress\" && \"border-accent/50 text-accent\",\n status === \"planned\" && \"border-dashed border-border2 text-muted\",\n status === \"paused\" && \"border-border2 text-muted\",\n )}\n >\n <StatusDot status={status} className=\"h-1.5 w-1.5\" />\n {STATUS_LABEL[status]}\n </span>\n )\n}\n\nexport const TASK_STATUS_BG: Record<TaskStatus, string> = {\n done: \"bg-teal\",\n \"in-progress\": \"bg-amber\",\n review: \"bg-accent\",\n blocked: \"bg-danger\",\n paused: \"bg-muted/60\",\n todo: \"bg-border2\",\n cancelled: \"bg-border\",\n}\n\n/** One segment per task, colored by its board status (same colors as the board). */\nexport function SegmentedProgress({ statuses, className }: { statuses?: TaskStatus[]; className?: string }) {\n if (!statuses?.length) return null\n const done = statuses.filter((s) => s === \"done\").length\n return (\n <div className={cn(\"flex h-1.5 min-w-0 flex-1 gap-0.5\", className)} title={`${done}/${statuses.length} tasks done`}>\n {statuses.map((s, i) => (\n <span key={i} className={cn(\"h-full flex-1 rounded-[1px]\", TASK_STATUS_BG[s])} />\n ))}\n </div>\n )\n}\n\n/** Small progress ring; color follows `className` (currentColor). */\nexport function ProgressRing({ value, total, className }: { value: number; total: number; className?: string }) {\n const r = 14\n const c = 2 * Math.PI * r\n const pct = total > 0 ? value / total : 0\n return (\n <span className={cn(\"relative inline-flex h-9 w-9 shrink-0 items-center justify-center\", className)} title={`${value}/${total} tasks done`}>\n <svg viewBox=\"0 0 36 36\" className=\"absolute inset-0 -rotate-90\">\n <circle cx=\"18\" cy=\"18\" r={r} fill=\"none\" strokeWidth=\"3\" className=\"stroke-border\" />\n <circle cx=\"18\" cy=\"18\" r={r} fill=\"none\" strokeWidth=\"3\" stroke=\"currentColor\" strokeLinecap=\"round\"\n strokeDasharray={c} strokeDashoffset={c * (1 - pct)} />\n </svg>\n <span className=\"font-mono text-[9px] text-txt\">{Math.round(pct * 100)}</span>\n </span>\n )\n}\n\nexport function Progress({ progress }: { progress?: RoadmapNodeData[\"progress\"] }) {\n if (!progress) return null\n const pct = Math.round((progress.done / progress.total) * 100)\n return (\n <div className=\"flex items-center gap-1.5\" title={`${progress.done}/${progress.total} done`}>\n <div className=\"h-1 flex-1 overflow-hidden rounded-full bg-border\">\n <div className=\"h-full rounded-full bg-teal\" style={{ width: `${pct}%` }} />\n </div>\n <span className=\"font-mono text-[10px] text-muted\">{progress.done}/{progress.total}</span>\n </div>\n )\n}\n\nexport function DueChip({ due, state }: { due: string | null; state?: DueState | null }) {\n if (!due) return null\n return (\n <span\n className={cn(\n \"font-mono text-[10px]\",\n state === \"overdue\" ? \"text-danger\" : state === \"soon\" ? \"text-amber\" : \"text-muted\",\n )}\n >\n Due {formatDay(due)}\n </span>\n )\n}\n\n/** The single most urgent date line for a card: overdue tasks, then the epic's own due, then the next task due. */\nfunction DueNote({ data }: { data: RoadmapNodeData }) {\n const s = data.taskDue\n if (s && s.overdue > 0) {\n return <span className=\"font-mono text-[10px] text-danger\">{s.overdue} {s.overdue === 1 ? \"task\" : \"tasks\"} overdue</span>\n }\n if (data.item.due) return <DueChip due={data.item.due} state={data.dueState} />\n if (s?.next) return <span className={cn(\"font-mono text-[10px]\", data.taskDueSoon ? \"text-amber\" : \"text-muted\")}>Next due {formatDay(s.next)}</span>\n return null\n}\n\nfunction DriftMark({ drift }: { drift?: string[] }) {\n if (!drift?.length) return null\n return (\n <span title={drift.join(\"\\n\")} className=\"absolute -left-2 -top-2 rounded-full bg-bg p-0.5 text-amber\">\n <AlertTriangle className=\"h-3.5 w-3.5\" />\n </span>\n )\n}\n\n/** A horizon is a chapter: big number, title, epic count, and a ring for task progress. */\nexport function HorizonNode({ data, selected }: NodeProps<RoadmapNode>) {\n const { item, progress, epics, chapter } = data\n const status = item.status\n return (\n <div\n style={{ width: HORIZON_W }}\n className={cn(\n \"relative flex items-center gap-3 rounded-xl border bg-surface px-3.5 py-3 transition-shadow duration-(--duration-base)\",\n status === \"in-progress\" && \"border-accent/60 shadow-[0_0_0_1px_rgb(var(--rgb-accent)/0.25),0_10px_30px_-12px_rgb(var(--rgb-accent)/0.6)]\",\n status === \"done\" && \"border-teal/40\",\n status === \"planned\" && \"border-dashed border-border2\",\n status === \"paused\" && \"border-border2 opacity-75\",\n selected && \"ring-2 ring-accent/60 ring-offset-2 ring-offset-bg\",\n )}\n >\n <Handles />\n <span\n className={cn(\n \"font-mono text-2xl font-semibold leading-none tabular-nums\",\n status === \"in-progress\" ? \"text-accent\" : status === \"done\" ? \"text-teal\" : \"text-muted\",\n )}\n >\n {chapter ? String(chapter).padStart(2, \"0\") : \"··\"}\n </span>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-xs font-semibold uppercase leading-snug tracking-wider text-txt\">{item.title}</p>\n <p className=\"mt-1 flex flex-wrap items-center gap-x-2 font-mono text-[10px] text-muted\">\n {epics && epics.total > 0 && <span>{epics.done}/{epics.total} epics</span>}\n <DueChip due={item.due} state={data.dueState} />\n </p>\n </div>\n {progress && (\n <ProgressRing value={progress.done} total={progress.total} className={status === \"done\" ? \"text-teal\" : \"text-accent\"} />\n )}\n <DriftMark drift={data.drift} />\n </div>\n )\n}\n\n/**\n * Three looks so the eye lands on live work: live = lit card with task segments and the next task,\n * done = one quiet line, planned = dashed outline. Height stays under ROW_H (layout.ts) so saved positions never overlap.\n */\nexport function FeatureNode({ data, selected }: NodeProps<RoadmapNode>) {\n const { item, taskStatuses, nextTaskId } = data\n const agent = useItemAgent({ kind: \"epic\", id: item.id })\n const drifting = !!data.drift?.length\n const ring = selected && \"ring-2 ring-accent/60 ring-offset-2 ring-offset-bg\"\n\n if (item.status === \"done\") {\n return (\n <div\n style={{ width: FEATURE_W }}\n className={cn(\"group relative flex items-center gap-2 rounded-lg border border-border bg-surface/60 px-3 py-2 hover:border-teal/40\", ring)}\n >\n <Handles />\n <Check className=\"h-3.5 w-3.5 shrink-0 text-teal\" strokeWidth={3} />\n <p className=\"min-w-0 flex-1 truncate text-[13px] text-muted group-hover:text-txt\" title={item.title}>{item.title}</p>\n {agent ? <AgentMark attach={{ kind: \"epic\", id: item.id }} />\n : data.progress && <span className=\"font-mono text-[10px] text-muted\">{data.progress.done}/{data.progress.total}</span>}\n <DriftMark drift={data.drift} />\n </div>\n )\n }\n\n const live = item.status === \"in-progress\"\n return (\n <div\n style={{ width: FEATURE_W }}\n className={cn(\n \"relative flex flex-col gap-1.5 rounded-lg border px-3 py-2.5 transition-shadow duration-(--duration-base)\",\n live\n ? \"border-accent/50 bg-surface shadow-[0_8px_24px_-10px_rgb(var(--rgb-accent)/0.55)]\"\n : \"border-dashed border-border2 bg-bg hover:border-muted\",\n item.status === \"paused\" && \"opacity-70\",\n ring,\n )}\n >\n <Handles />\n {live && <span className={cn(\"absolute -inset-y-px -left-px w-[3px] rounded-l-lg\", drifting ? \"bg-amber\" : \"bg-accent\")} />}\n <div className=\"flex items-center justify-between font-mono text-[10px]\">\n <span className=\"text-muted\">{item.id}</span>\n {agent ? (\n <AgentMark attach={{ kind: \"epic\", id: item.id }} />\n ) : live ? (\n <span className=\"flex items-center gap-1.5 uppercase tracking-wider text-accent\"><StatusDot status=\"in-progress\" className=\"h-1.5 w-1.5\" />Live</span>\n ) : (\n <span className=\"uppercase tracking-wider text-muted\">{item.tasks.length ? `${item.tasks.length} tasks` : \"No tasks yet\"}</span>\n )}\n </div>\n <p className={cn(\"line-clamp-2 text-[13px] leading-snug\", live ? \"font-medium text-txt\" : \"text-txt/80\")} title={item.title}>\n {item.title}\n </p>\n {taskStatuses && taskStatuses.length > 0 && (\n <div className=\"flex items-center gap-2\">\n <SegmentedProgress statuses={taskStatuses} />\n <span className=\"shrink-0 font-mono text-[10px] text-muted\">\n {live && nextTaskId ? <>next <span className=\"text-txt\">{nextTaskId}</span></> : `${taskStatuses.filter((s) => s === \"done\").length}/${taskStatuses.length}`}\n </span>\n </div>\n )}\n <DueNote data={data} />\n <DriftMark drift={data.drift} />\n </div>\n )\n}\n\nexport const nodeTypes = { horizon: HorizonNode, feature: FeatureNode }\n","/**\n * src/lib/roadmap-health.ts\n * Pure (no fs): roadmap progress + drift, shared by the Roadmap page and the MCP handler.\n * A feature's expected status comes from its linked tasks; a horizon's from its features.\n */\n\nimport type { RoadmapItem, RoadmapStatus, Task } from './core'\n\n/** What health needs from a task: status for progress, due for at-risk. */\nexport type TaskInfo = Pick<Task, 'status' | 'due'>\n\nexport interface RoadmapProgress { done: number; total: number }\n\nexport interface RoadmapDrift {\n id: string\n kind: 'status-mismatch' | 'missing-task' | 'overdue' | 'at-risk'\n message: string\n suggestedStatus?: RoadmapStatus\n}\n\nexport interface RoadmapHealth {\n progress: Record<string, RoadmapProgress>\n drift: RoadmapDrift[]\n}\n\nexport type DueState = 'overdue' | 'soon' | 'ok' | 'done'\n\nconst SOON_DAYS = 7\n\n/** Local calendar date \"YYYY-MM-DD\" (due dates are calendar dates, not instants). */\nexport function localToday(now = new Date()): string {\n const p = (n: number) => String(n).padStart(2, '0')\n return `${now.getFullYear()}-${p(now.getMonth() + 1)}-${p(now.getDate())}`\n}\n\nfunction daysBetween(from: string, to: string): number {\n const utc = (d: string) => Date.UTC(+d.slice(0, 4), +d.slice(5, 7) - 1, +d.slice(8, 10))\n return Math.round((utc(to) - utc(from)) / 86_400_000)\n}\n\nexport function dueState(due: string | null, status: RoadmapStatus, today: string): DueState | null {\n if (!due) return null\n if (status === 'done') return 'done'\n if (due < today) return 'overdue'\n return daysBetween(today, due) <= SOON_DAYS ? 'soon' : 'ok'\n}\n\ntype Started = 'done' | 'in-progress' | 'other'\n\nfunction expectedStatus(states: Started[]): RoadmapStatus {\n if (states.every(s => s === 'done')) return 'done'\n if (states.some(s => s !== 'other')) return 'in-progress'\n return 'planned'\n}\n\nexport interface TaskDueSummary { overdue: number; next: string | null }\n\n/** Open tasks' deadlines for a map node: how many are overdue, and the nearest upcoming due. */\nexport function taskDueSummary(taskIds: string[], tasks: Record<string, TaskInfo>, today: string): TaskDueSummary | null {\n const dues = taskIds\n .map(id => tasks[id])\n .filter(t => t && t.due && t.status !== 'done' && t.status !== 'cancelled')\n .map(t => t.due as string)\n if (!dues.length) return null\n const upcoming = dues.filter(d => d >= today).sort()\n return { overdue: dues.length - upcoming.length, next: upcoming[0] ?? null }\n}\n\n/** Why an unfinished epic may miss its date: overdue or blocked tasks, or due soon with nothing started. */\nfunction atRiskReasons(item: RoadmapItem, linked: string[], tasks: Record<string, TaskInfo>, today: string): string[] {\n const reasons: string[] = []\n for (const id of linked) {\n const t = tasks[id]\n if (t.status !== 'done' && t.due && t.due < today) reasons.push(`${id} overdue since ${t.due}`)\n if (t.status === 'blocked') reasons.push(`${id} blocked`)\n }\n const started = linked.some(id => ['done', 'in-progress', 'review'].includes(tasks[id].status))\n if (item.due && dueState(item.due, item.status, today) === 'soon' && !started) {\n reasons.push(`due ${item.due}, nothing started`)\n }\n return reasons\n}\n\nexport function roadmapHealth(\n items: RoadmapItem[], tasks: Record<string, TaskInfo>, today: string,\n): RoadmapHealth {\n const progress: Record<string, RoadmapProgress> = {}\n const drift: RoadmapDrift[] = []\n\n for (const item of items) {\n if (item.due && dueState(item.due, item.status, today) === 'overdue') {\n drift.push({ id: item.id, kind: 'overdue', message: `${item.id} \"${item.title}\" is overdue since ${item.due}` })\n }\n }\n const horizonIds = new Set(items.filter(i => i.parent === null).map(i => i.id))\n\n for (const item of items) {\n if (item.parent === null) continue\n const missing = item.tasks.filter(t => !(t in tasks))\n if (missing.length) {\n drift.push({ id: item.id, kind: 'missing-task', message: `${item.id} links unknown task ${missing.join(', ')}` })\n }\n // cancelled tasks don't count toward progress or expected status\n const linked = item.tasks.filter(t => t in tasks && tasks[t].status !== 'cancelled')\n // a paused epic is stopped on purpose: not at risk\n const risks = item.status === 'done' || item.status === 'paused' ? [] : atRiskReasons(item, linked, tasks, today)\n if (risks.length) {\n drift.push({ id: item.id, kind: 'at-risk', message: `${item.id} \"${item.title}\" at risk: ${risks.join('; ')}` })\n }\n if (!linked.length) continue\n const states: Started[] = linked.map(t =>\n tasks[t].status === 'done' ? 'done' : tasks[t].status === 'in-progress' || tasks[t].status === 'review' ? 'in-progress' : 'other')\n progress[item.id] = { done: states.filter(s => s === 'done').length, total: linked.length }\n const expected = expectedStatus(states)\n // paused stays paused until everything is done\n if (expected !== item.status && !(item.status === 'paused' && expected !== 'done')) {\n const open = linked.filter(t => tasks[t].status !== 'done')\n drift.push({\n id: item.id,\n kind: 'status-mismatch',\n message: expected === 'done'\n ? `${item.id} \"${item.title}\": all tasks done but status is ${item.status}`\n : `${item.id} \"${item.title}\" is ${item.status} but tasks ${open.join(', ')} are not done`,\n suggestedStatus: expected,\n })\n }\n }\n\n for (const h of items) {\n if (!horizonIds.has(h.id)) continue\n const kids = items.filter(i => i.parent === h.id)\n if (!kids.length) continue\n const states: Started[] = kids.map(k => k.status === 'done' ? 'done' : k.status === 'in-progress' ? 'in-progress' : 'other')\n // weight by tasks; an epic not broken down yet counts as one unit\n progress[h.id] = kids.reduce((sum, k) => {\n const p = progress[k.id] ?? { done: k.status === 'done' ? 1 : 0, total: 1 }\n return { done: sum.done + p.done, total: sum.total + p.total }\n }, { done: 0, total: 0 })\n const expected = expectedStatus(states)\n if (expected !== h.status && !(h.status === 'paused' && expected !== 'done')) {\n drift.push({\n id: h.id,\n kind: 'status-mismatch',\n message: `${h.id} \"${h.title}\" is ${h.status} but its features say ${expected}`,\n suggestedStatus: expected,\n })\n }\n }\n\n return { progress, drift }\n}\n","import type { RoadmapItem, RoadmapLayout } from \"@/types\"\n\nexport const HORIZON_W = 260\nexport const FEATURE_W = 220\nconst BRANCH_DX = 340\nconst ROW_H = 110\nconst HORIZON_GAP = 90\nconst COL_DX = FEATURE_W + 40\nconst MAX_ROWS_PER_SIDE = 6 // beyond this, a side gets a second (outer, half-row staggered) column\n\n/** Items that sit on the spine: real horizons plus orphans whose parent is not a horizon. */\nexport function spineItems(items: RoadmapItem[]): RoadmapItem[] {\n const horizonIds = new Set(items.filter((i) => i.parent === null).map((i) => i.id))\n return items\n .filter((i) => i.parent === null || !horizonIds.has(i.parent))\n .sort((a, b) => a.order - b.order)\n}\n\nexport function childrenOf(items: RoadmapItem[], parentId: string): RoadmapItem[] {\n return items.filter((i) => i.parent === parentId).sort((a, b) => a.order - b.order)\n}\n\n/**\n * Resolve a position for every item: saved (layout.json) wins, otherwise auto-place.\n * Horizons stack on x=0 by order; children alternate right/left of their parent's RESOLVED position.\n */\nexport function resolvePositions(items: RoadmapItem[], layout: RoadmapLayout): RoadmapLayout {\n const out: RoadmapLayout = {}\n let cursor = 0\n for (const h of spineItems(items)) {\n const hp = layout[h.id] ?? { x: 0, y: cursor }\n out[h.id] = hp\n const kids = h.parent === null ? childrenOf(items, h.id) : []\n const cols = Math.ceil(kids.length / 2) > MAX_ROWS_PER_SIDE ? 2 : 1\n kids.forEach((c, i) => {\n const side = i % 2 === 0 ? 1 : -1\n const k = Math.floor(i / 2) // index within its side\n const col = k % cols\n const row = Math.floor(k / cols)\n out[c.id] = layout[c.id] ?? {\n x: hp.x + (HORIZON_W - FEATURE_W) / 2 + side * (BRANCH_DX + col * COL_DX),\n // outer column sits half a row lower so its edges pass between inner nodes\n y: hp.y + row * ROW_H + col * (ROW_H / 2),\n }\n })\n const rows = Math.ceil(Math.ceil(kids.length / 2) / cols)\n cursor += Math.max(1, rows) * ROW_H + HORIZON_GAP\n }\n return out\n}\n","import type { RoadmapItem } from \"@/types\"\nimport { dueState, type DueState } from \"@/lib/roadmap-health\"\nimport { childrenOf, spineItems } from \"./layout\"\n\nexport const MONTH_W = 160\nexport const LANE_ROW_H = 44\nconst LABEL_W = 180 // horizontal room a marker's label needs before the next one fits on the same row\nconst MIN_MONTHS = 6\n\nconst MONTHS = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n\n// Dates are \"YYYY-MM-DD\" calendar dates — parsed by hand, never via new Date(string) (UTC shift).\nconst ymd = (d: string) => ({ y: +d.slice(0, 4), m: +d.slice(5, 7), day: +d.slice(8, 10) })\nconst daysIn = (y: number, m: number) => new Date(y, m, 0).getDate()\n\nexport function formatDay(d: string): string {\n const { m, day } = ymd(d)\n return `${day} ${MONTHS[m - 1]}`\n}\n\nexport interface TimelineMarker { item: RoadmapItem; x: number; row: number; state: DueState | null; horizon: boolean }\nexport interface TimelineLane { item: RoadmapItem; rows: number; markers: TimelineMarker[] }\nexport interface Timeline {\n months: { label: string; x: number }[]\n width: number\n todayX: number\n lanes: TimelineLane[]\n undated: RoadmapItem[]\n}\n\nexport function buildTimeline(items: RoadmapItem[], today: string): Timeline {\n const dues = items.map((i) => i.due).filter((d): d is string => !!d)\n const first = ymd([today, ...dues].sort()[0])\n const last = ymd([today, ...dues].sort().at(-1) ?? today)\n\n // pad one month each side, then stretch to a readable minimum\n const start = { y: first.y, m: first.m - 1 }\n const span = Math.max(MIN_MONTHS, (last.y - first.y) * 12 + (last.m - first.m) + 3)\n const months = Array.from({ length: span }, (_, i) => {\n const t = start.y * 12 + (start.m - 1) + i\n const y = Math.floor(t / 12)\n const m = (t % 12) + 1\n return { y, m, label: m === 1 || i === 0 ? `${MONTHS[m - 1]} ${y}` : MONTHS[m - 1], x: i * MONTH_W }\n })\n\n const xOf = (d: string) => {\n const { y, m, day } = ymd(d)\n const idx = (y - months[0].y) * 12 + (m - months[0].m)\n return idx * MONTH_W + ((day - 0.5) / daysIn(y, m)) * MONTH_W\n }\n\n const lanes = spineItems(items).map((h) => {\n const dated = [h, ...(h.parent === null ? childrenOf(items, h.id) : [])].filter((i) => i.due)\n const rowEnds: number[] = []\n const markers = dated\n .map((item) => ({ item, x: xOf(item.due as string), horizon: item.id === h.id }))\n .sort((a, b) => a.x - b.x)\n .map((mk) => {\n // greedy: first row whose last label ends before this marker\n let row = rowEnds.findIndex((end) => mk.x >= end)\n if (row === -1) row = rowEnds.push(0) - 1\n rowEnds[row] = mk.x + LABEL_W\n return { ...mk, row, state: dueState(mk.item.due, mk.item.status, today) }\n })\n return { item: h, rows: Math.max(1, rowEnds.length), markers }\n })\n\n return {\n months: months.map(({ label, x }) => ({ label, x })),\n width: span * MONTH_W,\n todayX: xOf(today),\n lanes,\n undated: items.filter((i) => !i.due && i.status !== \"done\"), // shipped work needs no date\n }\n}\n"],"names":["AGENT_LABEL","running","review","AgentMark","attach","className","agent","show","label","status","type","onClick","e","stopPropagation","chatId","title","AgentDot","SIDES","Top","Right","Bottom","Left","Handles","map","p","id","position","isConnectable","STATUS_LABEL","paused","done","planned","StatusDot","StatusPill","TASK_STATUS_BG","blocked","todo","cancelled","SegmentedProgress","statuses","length","filter","s","i","ProgressRing","value","total","r","c","Math","PI","pct","viewBox","cx","cy","fill","strokeWidth","stroke","strokeLinecap","strokeDasharray","strokeDashoffset","round","Progress","progress","style","width","DueChip","due","state","DueNote","data","taskDue","overdue","item","dueState","next","taskDueSoon","DriftMark","drift","join","HorizonNode","selected","epics","chapter","String","padStart","FeatureNode","taskStatuses","nextTaskId","kind","drifting","ring","live","tasks","nodeTypes","horizon","feature","SOON_DAYS","localToday","now","Date","n","getFullYear","getMonth","getDate","daysBetween","from","to","utc","d","UTC","slice","today","expectedStatus","states","every","some","taskDueSummary","taskIds","dues","t","upcoming","sort","atRiskReasons","linked","reasons","push","started","includes","roadmapHealth","items","message","horizonIds","Set","parent","missing","risks","expected","open","suggestedStatus","h","has","kids","k","reduce","sum"],"mappings":"0DAEA,EAAA,EAAA,CAAA,CAAA,QAAA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QAEA,EAAA,EAAA,CAAA,CAAA,QAEO,IAAMA,EAAmD,CAC9DC,QAAS,gBACT,eAAgB,kBAChBC,OAAQ,gBACV,oBAgCO,SAASc,AAAS,QAAEZ,CAAM,CAAsB,EACrD,IAAME,EAAQ,CAAA,EAAA,EAAA,YAAA,AAAY,EAACF,UAC3B,AAAKE,EACE,CAAA,CADH,CACG,EADK,AACL,GAAA,EAAC,EAAA,YAAY,CAAA,CAACG,OAAQH,EAAMG,MAAM,CAAED,MAAOR,CAAW,CAACM,EAAMG,MAAM,CAAC,GADxD,IAErB,gBA9BO,SAASN,AAAU,QAAEC,CAAM,WAAEC,CAAS,CAA0C,EACrF,IAAMC,EAAQ,CAAA,EAAA,EAAA,YAAA,AAAY,EAACF,GACrB,MAAEG,CAAI,CAAE,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,IACzB,GAAI,CAACD,EAAO,OAAO,KACnB,IAAME,EAAQR,CAAW,CAACM,EAAMG,MAAM,CAAC,CACvC,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CACCC,KAAK,SACLC,QAAS,AAACC,IAAQA,EAAEC,eAAe,GAAIN,EAAKD,EAAMQ,MAAM,CAAE,EAC1DC,MAAO,CAAA,EAAGP,EAAM,eAAY,CAAC,CAC7B,aAAY,CAAA,EAAGA,EAAM,WAAW,CAAC,CACjCH,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,+KACiB,YAAjBC,EAAMG,MAAM,EAAkB,kDACb,iBAAjBH,EAAMG,MAAM,EAAuB,+CAClB,WAAjBH,EAAMG,MAAM,EAAiB,+DAC7BJ,aAGgB,YAAjBC,EAAMG,MAAM,CAAiB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAO,CAAA,CAACJ,UAAU,sBAAsB,aAAW,CAAA,CAAA,IAAM,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,GAAG,CAAA,CAACA,UAAU,SAAS,aAAW,CAAA,CAAA,IAC1HG,IAGP,+CCvCA,EAAA,EAAA,CAAA,CAAA,QAAA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QAAA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QAGA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QAgBA,IAAMS,EAAQ,CAAC,EAAA,QAAQ,CAACC,GAAG,CAAE,EAAA,QAAQ,CAACC,KAAK,CAAE,EAAA,QAAQ,CAACC,MAAM,CAAE,EAAA,QAAQ,CAACC,IAAI,CAAC,CAG5E,SAASC,IACP,MACE,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACGL,EAAMM,GAAG,CAAC,AAACC,GACV,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAASC,GAAID,EAAGd,KAAK,SAASgB,SAAUF,EAAGG,eAAe,EAAOtB,UAAU,aAArEmB,IAEdP,EAAMM,GAAG,CAAC,AAACC,GACV,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAgBC,GAAI,CAAA,EAAGD,EAAE,EAAE,CAAC,CAAEd,KAAK,SAASgB,SAAUF,EAAGG,eAAe,EAAOtB,UAAU,aAAnF,CAAA,EAAGmB,EAAE,EAAE,CAAC,KAI7B,CAEO,IAAMI,EAA8C,CAAE,cAAe,SAAUC,OAAQ,SAAUC,KAAM,OAAQC,QAAS,SAAU,EAGlI,SAASC,EAAU,QAAEvB,CAAM,WAAEJ,CAAS,CAAiD,EAC5F,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAKU,MAAOa,CAAY,CAACnB,EAAO,CAAE,aAAYmB,CAAY,CAACnB,EAAO,CAAEJ,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,wCAAyCA,aAC9G,gBAAXI,GAA4B,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAKJ,UAAU,4DAC7C,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CACCA,UAAW,CAAA,EAAA,EAAA,EAAE,AAAF,EACT,sCACW,SAAXI,GAAqB,UACV,gBAAXA,GAA4B,YACjB,YAAXA,GAAwB,sBACb,WAAXA,GAAuB,wCAKjC,CAmBO,IAAMyB,EAA6C,CACxDJ,KAAM,UACN,cAAe,WACf5B,OAAQ,YACRiC,QAAS,YACTN,OAAQ,cACRO,KAAM,aACNC,UAAW,WACb,EAGO,SAASC,EAAkB,UAAEC,CAAQ,WAAElC,CAAS,CAAmD,EACxG,GAAI,CAACkC,GAAUC,OAAQ,OAAO,KAC9B,IAAMV,EAAOS,EAASE,MAAM,CAAC,AAACC,GAAY,SAANA,GAAcF,MAAM,CACxD,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAInC,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,oCAAqCA,GAAYU,MAAO,CAAA,EAAGe,EAAK,CAAC,EAAES,EAASC,MAAM,CAAC,WAAW,CAAC,UAC/GD,EAAShB,GAAG,CAAC,CAACmB,EAAGC,IAChB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAatC,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,8BAA+B6B,CAAc,CAACQ,EAAE,GAAjEC,KAInB,CAGO,SAASC,EAAa,OAAEC,CAAK,CAAEC,OAAK,WAAEzC,CAAS,CAAwD,EAE5G,IAAM2C,EAAI,EAAIC,KAAKC,EAAE,GAAGH,CAClBI,EAAML,EAAQ,EAAID,EAAQC,EAAQ,EACxC,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAKzC,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,oEAAqEA,GAAYU,MAAO,CAAA,EAAG8B,EAAM,CAAC,EAAEC,EAAM,WAAW,CAAC,WACxI,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAIM,QAAQ,YAAY/C,UAAU,wCACjC,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAOgD,GAAG,KAAKC,GAAG,KAAKP,GAAGA,EAAGQ,KAAK,OAAOC,YAAY,IAAInD,UAAU,kBACpE,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAOgD,GAAG,KAAKC,GAAG,KAAKP,EAPpB,CAOuBA,EAAGQ,KAAK,OAAOC,YAAY,IAAIC,OAAO,eAAeC,cAAc,QAC5FC,gBAAiBX,EAAGY,iBAAkBZ,GAAK,CAAD,CAAKG,CAAAA,CAAG,MAEtD,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK9C,UAAU,yCAAiC4C,KAAKY,KAAK,CAAO,IAANV,OAGlE,CAeO,SAASe,EAAQ,KAAEC,CAAG,OAAEC,CAAK,CAAmD,SACrF,AAAKD,EAEH,CAAA,CAFE,CAAM,AAER,EAAA,IAAA,EAAC,OAAA,CACC9D,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,wBACU,YAAV+D,EAAsB,cAA0B,SAAVA,EAAmB,aAAe,wBAE3E,OACM,CAAA,EAAA,EAAA,SAAS,AAAT,EAAUD,MARF,IAWnB,CAGA,SAASE,EAAQ,MAAEC,CAAI,CAA6B,EAClD,IAAM5B,EAAI4B,EAAKC,OAAO,QACtB,AAAI7B,GAAKA,EAAE8B,OAAO,CAAG,EACZ,CADe,AACf,EAAA,EAAA,IAAA,EAAC,OAAA,CAAKnE,UAAU,8CAAqCqC,EAAE8B,OAAO,CAAC,IAAgB,IAAd9B,EAAE8B,OAAO,CAAS,OAAS,QAAQ,cAEzGF,EAAKG,IAAI,CAACN,GAAG,CAAS,CAAP,AAAO,EAAA,EAAA,GAAA,EAACD,EAAAA,CAAQC,IAAKG,EAAKG,IAAI,CAACN,GAAG,CAAEC,MAAOE,EAAKI,QAAQ,GACvEhC,GAAGiC,KAAa,CAAA,AAAP,EAAO,EAAA,IAAA,EAAC,OAAA,CAAKtE,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,wBAAyBiE,EAAKM,WAAW,CAAG,aAAe,wBAAe,YAAU,CAAA,EAAA,EAAA,SAAA,AAAS,EAAClC,EAAEiC,IAAI,KACrI,IACT,CAEA,SAASE,EAAU,OAAEC,CAAK,CAAwB,SAChD,AAAKA,GAAOtC,CAAR,MAEF,CAFkB,AAElB,EAAA,EAAA,GAAA,EAAC,OAAA,CAAKzB,MAAO+D,EAAMC,IAAI,CAAC,MAAO1E,UAAU,uEACvC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,aAAa,CAAA,CAACA,UAAU,kBAHF,IAM7B,8FAtGO,SAAoB,AAAX4B,QAAaxB,CAAM,CAA6B,EAC9D,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CACCJ,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,kHACW,SAAXI,GAAqB,2BACV,gBAAXA,GAA4B,+BACjB,YAAXA,GAAwB,0CACb,WAAXA,GAAuB,uCAGzB,CAAA,EAAA,EAAA,GAAA,EAACuB,EAAAA,CAAUvB,OAAQA,EAAQJ,UAAU,gBACpCuB,CAAY,CAACnB,EAAO,GAG3B,qCAqMyB,CAAEsF,QA3GpB,CA2G6Bf,QA3GpBA,AAAY,MAAEV,CAAI,CAAEW,UAAQ,CAA0B,EACpE,GAAM,MAAER,CAAI,UAAEV,CAAQ,OAAEmB,CAAK,SAAEC,CAAO,CAAE,CAAGb,EACrC7D,EAASgE,EAAKhE,MAAM,CAC1B,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CACCuD,MAAO,CAAEC,MAAO,EAAA,SAAS,AAAC,EAC1B5D,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,yHACW,gBAAXI,GAA4B,+GACjB,SAAXA,GAAqB,iBACV,YAAXA,GAAwB,+BACb,WAAXA,GAAuB,4BACvBwE,GAAY,gEAGd,CAAA,EAAA,EAAA,GAAA,EAAC3D,EAAAA,CAAAA,GACD,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CACCjB,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,6DACW,gBAAXI,EAA2B,cAA2B,SAAXA,EAAoB,YAAc,uBAG9E0E,EAAUC,OAAOD,GAASE,QAAQ,CAAC,EAAG,KAAO,OAEhD,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAIhF,UAAU,2BACb,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAEA,UAAU,gFAAwEoE,EAAK1D,KAAK,GAC/F,CAAA,EAAA,EAAA,IAAA,EAAC,IAAA,CAAEV,UAAU,sFACV6E,GAASA,EAAMpC,KAAK,CAAG,GAAK,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,WAAMoC,EAAMpD,IAAI,CAAC,IAAEoD,EAAMpC,KAAK,CAAC,YAC7D,CAAA,EAAA,EAAA,GAAA,EAACoB,EAAAA,CAAQC,IAAKM,EAAKN,GAAG,CAAEC,MAAOE,EAAKI,QAAQ,SAG/CX,GACC,CAAA,EAAA,EAAA,GAAA,EAACnB,EAAAA,CAAaC,MAAOkB,EAASjC,IAAI,CAAEgB,MAAOiB,EAASjB,KAAK,CAAEzC,UAAsB,SAAXI,EAAoB,YAAc,gBAE1G,CAAA,EAAA,EAAA,GAAA,EAACoE,EAAAA,CAAUC,MAAOR,EAAKQ,KAAK,KAGlC,EAsEiDkB,QAhE1C,CAgEmDV,QAhE1CA,AAAY,MAAEhB,CAAI,UAAEW,CAAQ,CAA0B,EACpE,GAAM,MAAER,CAAI,cAAEc,CAAY,YAAEC,CAAU,CAAE,CAAGlB,EACrChE,EAAQ,CAAA,EAAA,EAAA,YAAA,AAAY,EAAC,CAAEmF,KAAM,OAAQhE,GAAIgD,EAAKhD,EAAE,AAAC,GACjDiE,EAAW,CAAC,CAACpB,EAAKQ,KAAK,EAAEtC,OACzBmD,EAAOV,GAAY,qDAEzB,GAAoB,QAAQ,CAAxBR,EAAKhE,MAAM,CACb,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CACCuD,MAAO,CAAEC,MAAO,EAAA,SAAS,AAAC,EAC1B5D,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,sHAAuHsF,aAErI,CAAA,EAAA,EAAA,GAAA,EAACrE,EAAAA,CAAAA,GACD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAACjB,UAAU,iCAAiCmD,YAAa,IAC/D,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAEnD,UAAU,sEAAsEU,MAAO0D,EAAK1D,KAAK,UAAG0D,EAAK1D,KAAK,GAChHT,EAAQ,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,CAACF,OAAQ,CAAEqF,KAAM,OAAQhE,GAAIgD,EAAKhD,EAAE,AAAC,IACpD6C,EAAKP,QAAQ,EAAI,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK1D,UAAU,6CAAoCiE,EAAKP,QAAQ,CAACjC,IAAI,CAAC,IAAEwC,EAAKP,QAAQ,CAACjB,KAAK,IACjH,CAAA,EAAA,EAAA,GAAA,EAAC+B,EAAAA,CAAUC,MAAOR,EAAKQ,KAAK,MAKlC,IAAMc,EAAuB,gBAAhBnB,EAAKhE,MAAM,CACxB,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CACCuD,MAAO,CAAEC,MAAO,EAAA,SAAU,AAAD,EACzB5D,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,4GACAuF,EACI,oFACA,wDACY,WAAhBnB,EAAKhE,MAAM,EAAiB,aAC5BkF,aAGF,CAAA,EAAA,EAAA,GAAA,EAACrE,EAAAA,CAAAA,GACAsE,GAAQ,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAKvF,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,qDAAsDqF,EAAW,WAAa,eAC3G,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAIrF,UAAU,oEACb,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAKA,UAAU,sBAAcoE,EAAKhD,EAAE,GACpCnB,EACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,CAACF,OAAQ,CAAEqF,KAAM,OAAQhE,GAAIgD,EAAKhD,EAAG,AAAD,IAC5CmE,EACF,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAKvF,UAAU,2EAAiE,CAAA,EAAA,EAAA,GAAA,EAAC2B,EAAAA,CAAUvB,OAAO,cAAcJ,UAAU,gBAAgB,UAE3I,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAKA,UAAU,+CAAuCoE,EAAKoB,KAAK,CAACrD,MAAM,CAAG,CAAA,EAAGiC,EAAKoB,KAAK,CAACrD,MAAM,CAAC,MAAM,CAAC,CAAG,oBAG9G,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAEnC,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,wCAAyCuF,EAAO,uBAAyB,eAAgB7E,MAAO0D,EAAK1D,KAAK,UACxH0D,EAAK1D,KAAK,GAEZwE,GAAgBA,EAAa/C,MAAM,CAAG,GACrC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAInC,UAAU,oCACb,CAAA,EAAA,EAAA,GAAA,EAACiC,EAAAA,CAAkBC,SAAUgD,IAC7B,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAKlF,UAAU,qDACbuF,GAAQJ,EAAa,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WAAE,QAAK,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAKnF,UAAU,oBAAYmF,OAAwB,CAAA,EAAGD,EAAa9C,MAAM,CAAC,AAACC,GAAY,SAANA,GAAcF,MAAM,CAAC,CAAC,EAAE+C,EAAa/C,MAAM,CAAA,CAAE,MAIlK,CAAA,EAAA,EAAA,GAAA,EAAC6B,EAAAA,CAAQC,KAAMA,IACf,CAAA,EAAA,EAAA,GAAA,EAACO,EAAAA,CAAUC,MAAOR,EAAKQ,KAAK,KAGlC,CAEsE,2CC1O/D,SAASJ,EAASP,CAAkB,CAAE1D,CAAqB,CAAEuG,CAAa,MAJzEJ,SAKN,AAAKzC,EACU,EADX,CAAM,KACa,CAAnB1D,EAA0B,OAC1B0D,EAAM6C,EAAc,KAAP,KAhBD,AAiBTP,GAPAxD,KAAKY,KAAK,CAAC,AAAC+C,IAAID,AADX,AAACE,GAAcT,KAAKU,GAAG,CAAC,CAACD,EAAEE,KAAK,CAAC,EAAG,GAAI,AAACF,EAAEE,KAAK,CAAC,EAAG,GAAK,EAAG,CAACF,EAAEE,KAAK,CAAC,EAAG,MAQ1D5C,GAPGyC,EAOVI,EAPcN,CAAK,AAOJT,CAPQ,OAOI,OAAS,KAHtC,IAInB,CAIA,SAASgB,EAAeC,CAAiB,SACvC,AAAIA,EAAOC,KAAK,CAACzE,GAAKA,AAAM,SAAS,GAAO,OACxCwE,EAAOE,IAAI,CAAC1E,GAAKA,AAAM,UAAU,GAAO,cACrC,SACT,oCAvBO,SAASwD,AAAWC,EAAM,IAAIC,IAAM,EACzC,IAAM5E,EAAI,AAAC6E,GAAcjB,OAAOiB,GAAGhB,QAAQ,CAAC,EAAG,KAC/C,MAAO,CAAA,EAAGc,EAAIG,WAAW,GAAG,CAAC,EAAE9E,EAAE2E,EAAII,QAAQ,GAAK,GAAG,CAAC,EAAE/E,EAAE2E,EAAIK,OAAO,IAAA,CACvE,AAD4E,oBAmDrE,SAASyB,AACdC,CAAoB,CAAErC,CAA+B,CAAEmB,CAAa,EAEpE,IAAMjD,EAA4C,CAAC,EAC7Ce,EAAwB,EAAE,CAEhC,IAAK,IAAML,KAAQyD,EACbzD,EAAKN,EADe,CACZ,EAA+C,WAAW,CAAtDO,EAASD,EAAKN,GAAG,CAAEM,EAAKhE,MAAM,CAAEuG,IAC9ClC,EAAMgD,IAAI,CAAC,CAAErG,GAAIgD,EAAKhD,EAAE,CAAEgE,KAAM,UAAW0C,QAAS,CAAA,EAAG1D,EAAKhD,EAAE,CAAC,EAAE,EAAEgD,EAAK1D,KAAK,CAAC,mBAAmB,EAAE0D,EAAKN,GAAG,CAAA,CAAE,AAAC,GAGlH,IAAMiE,EAAa,IAAIC,IAAIH,EAAMzF,MAAM,CAACE,GAAkB,OAAbA,EAAE2F,MAAM,EAAW/G,GAAG,CAACoB,GAAKA,EAAElB,EAAE,GAE7E,IAAK,IAAMgD,KAAQyD,EAAO,CACxB,GAAoB,OAAhBzD,EAAK6D,MAAM,CAAW,SAC1B,IAAMC,EAAU9D,EAAKoB,KAAK,CAACpD,MAAM,CAAC+E,GAAK,CAAC,CAACA,KAAK3B,CAAAA,CAAK,EAC/C0C,EAAQ/F,MAAM,EAAE,AAClBsC,EAAMgD,IAAI,CAAC,CAAErG,GAAIgD,EAAKhD,EAAE,CAAEgE,KAAM,eAAgB0C,QAAS,CAAA,EAAG1D,EAAKhD,EAAE,CAAC,oBAAoB,EAAE8G,EAAQxD,IAAI,CAAC,MAAA,CAAQ,AAAD,GAGhH,IAAM6C,EAASnD,EAAKoB,KAAK,CAACpD,MAAM,CAAC+E,GAAKA,KAAK3B,GAA6B,cAApBA,CAAK,CAAC2B,EAAE,CAAC/G,MAAM,EAE7D+H,EAAwB,SAAhB/D,EAAKhE,MAAM,EAA+B,WAAhBgE,EAAKhE,MAAM,CAAgB,EAAE,CApCzE,AAoC4EkH,SApCnEA,AAAclD,CAAiB,CAAEmD,CAAgB,CAAE/B,CAA+B,CAAEmB,CAAa,EACxG,IAAMa,EAAoB,EAAE,CAC5B,IAAK,IAAMpG,KAAMmG,EAAQ,CACvB,IAAMJ,EAAI3B,CAAK,CAACpE,EAAG,CACF,SAAb+F,EAAE/G,MAAM,EAAe+G,EAAErD,GAAG,EAAIqD,EAAErD,GAAG,CAAG6C,GAAOa,EAAQC,IAAI,CAAC,CAAA,EAAGrG,EAAG,eAAe,EAAE+F,EAAErD,GAAG,CAAA,CAAE,EAC7E,YAAbqD,EAAE/G,MAAM,EAAgBoH,EAAQC,IAAI,CAAC,CAAA,EAAGrG,EAAG,QAAQ,CAAC,CAC1D,CACA,IAAMsG,EAAUH,EAAOR,IAAI,CAAC3F,GAAM,CAAC,OAAQ,cAAe,SAAS,CAACuG,QAAQ,CAACnC,CAAK,CAACpE,EAAG,CAAChB,MAAM,GAI7F,OAHIgE,EAAKN,GAAG,EAA+C,SAA3CO,EAASD,EAAKN,GAAG,CAAEM,EAAKhE,MAAM,CAAEuG,IAAqB,CAACe,GACpEF,EAAQC,IADqE,AACjE,CAAC,CAAC,IAAI,EAAErD,EAAKN,GAAG,CAAC,iBAAiB,CAAC,EAE1C0D,CACT,EAwB0FpD,EAAMmD,EAAQ/B,EAAOmB,GAI3G,GAHIwB,EAAMhG,MAAM,EAAE,AAChBsC,EAAMgD,IAAI,CAAC,CAAErG,GAAIgD,EAAKhD,EAAE,CAAEgE,KAAM,UAAW0C,QAAS,CAAA,EAAG1D,EAAKhD,EAAE,CAAC,EAAE,EAAEgD,EAAK1D,KAAK,CAAC,WAAW,EAAEyH,EAAMzD,IAAI,CAAC,MAAA,CAAO,AAAC,GAE5G,CAAC6C,EAAOpF,MAAM,CAAE,SACpB,IAAM0E,EAAoBU,EAAOrG,GAAG,CAACiG,GACf,SAApB3B,CAAK,CAAC2B,EAAE,CAAC/G,MAAM,CAAc,OAASoF,AAAoB,iBAAf,CAAC2B,EAAE,CAAC/G,MAAM,EAAsBoF,AAAoB,YAAf,CAAC2B,EAAE,CAAC/G,MAAM,CAAgB,cAAgB,SAC5HsD,CAAQ,CAACU,EAAKhD,EAAE,CAAC,CAAG,CAAEK,KAAMoF,EAAOzE,MAAM,CAACC,GAAW,SAANA,GAAcF,MAAM,CAAEM,MAAO8E,EAAOpF,MAAM,AAAC,EAC1F,IAAMiG,EAAWxB,EAAeC,GAEhC,GAAIuB,IAAahE,EAAKhE,MAAM,GAAsB,CAAlB,CAAC,SAACgE,EAAKhE,MAAM,EAAiBgI,AAAa,UAAA,CAAM,CAAG,CAClF,IAAMC,EAAOd,EAAOnF,MAAM,CAAC+E,GAAyB,SAApB3B,CAAK,CAAC2B,EAAE,CAAC/G,MAAM,EAC/CqE,EAAMgD,IAAI,CAAC,CACTrG,GAAIgD,EAAKhD,EAAE,CACXgE,KAAM,kBACN0C,QAAsB,SAAbM,EACL,CAAA,EAAGhE,EAAKhD,EAAE,CAAC,EAAE,EAAEgD,EAAK1D,KAAK,CAAC,gCAAgC,EAAE0D,EAAKhE,MAAM,CAAA,CAAE,CACzE,CAAA,EAAGgE,EAAKhD,EAAE,CAAC,EAAE,EAAEgD,EAAK1D,KAAK,CAAC,KAAK,EAAE0D,EAAKhE,MAAM,CAAC,WAAW,EAAEiI,EAAK3D,IAAI,CAAC,MAAM,aAAa,CAAC,CAC5F4D,gBAAiBF,CACnB,EACF,CACF,CAEA,IAAK,IAAMG,KAAKV,EAAO,CACrB,GAAI,CAACE,EAAWS,GAAG,CAACD,EAAEnH,EAAE,EAAG,SAC3B,IAAMqH,EAAOZ,EAAMzF,MAAM,CAACE,GAAKA,EAAE2F,MAAM,GAAKM,EAAEnH,EAAE,EAChD,GAAI,CAACqH,EAAKtG,MAAM,CAAE,SAClB,IAAM0E,EAAoB4B,EAAKvH,GAAG,CAACwH,GAAkB,SAAbA,EAAEtI,MAAM,CAAc,OAAsB,gBAAbsI,EAAEtI,MAAM,CAAqB,cAAgB,SAEpHsD,CAAQ,CAAC6E,EAAEnH,EAAE,CAAC,CAAGqH,EAAKE,MAAM,CAAC,CAACC,EAAKF,KACjC,IAAMvH,EAAIuC,CAAQ,CAACgF,EAAEtH,EAAE,CAAC,EAAI,CAAEK,MAAMiH,CAAa,WAAXtI,MAAM,AAAK,EAAgBqC,EAAP,IAAI,AAAU,CAAE,EAC1E,MAAO,CAAEhB,KAAMmH,EAAInH,IAAI,CAAGN,EAAEM,IAAI,CAAEgB,MAAOmG,EAAInG,KAAK,CAAGtB,EAAEsB,KAAK,AAAC,CAC/D,EAAG,CAAEhB,KAAM,EAAGgB,MAAO,CAAE,GACvB,IAAM2F,EAAWxB,EAAeC,GAC5BuB,IAAaG,EAAEnI,MAAM,GAAmB,CAAf,CAAC,SAACmI,EAAEnI,MAAM,EAA8B,SAAbgI,CAAa,CAAM,EACzE3D,CAD4E,CACtEgD,IAAI,CAAC,CACTrG,GAAImH,EAAEnH,EAAE,CACRgE,KAAM,kBACN0C,QAAS,CAAA,EAAGS,EAAEnH,EAAE,CAAC,EAAE,EAAEmH,EAAE7H,KAAK,CAAC,KAAK,EAAE6H,EAAEnI,MAAM,CAAC,sBAAsB,EAAEgI,EAAAA,CAAU,CAC/EE,gBAAiBF,CACnB,EAEJ,CAEA,MAAO,UAAE1E,QAAUe,CAAM,CAC3B,qBA5FO,SAASuC,AAAeC,CAAiB,CAAEzB,CAA+B,CAAEmB,CAAa,EAC9F,IAAMO,EAAOD,EACV/F,GAAG,CAACE,GAAMoE,CAAK,CAACpE,EAAG,EACnBgB,MAAM,CAAC+E,GAAKA,GAAKA,EAAErD,GAAG,EAAiB,SAAbqD,EAAE/G,MAAM,EAA4B,cAAb+G,EAAE/G,MAAM,EACzDc,GAAG,CAACiG,GAAKA,EAAErD,GAAG,EACjB,GAAI,CAACoD,EAAK/E,MAAM,CAAE,OAAO,KACzB,IAAMiF,EAAWF,EAAK9E,MAAM,CAACoE,GAAKA,GAAKG,GAAOU,IAAI,GAClD,MAAO,CAAElD,QAAS+C,EAAK/E,MAAM,CAAGiF,EAASjF,MAAM,CAAEmC,KAAM8C,CAAQ,CAAC,EAAE,EAAI,IAAK,CAC7E,WCvDO,SAAS,EAAW,CAAoB,EAC7C,IAAM,EAAa,IAAI,IAAI,EAAM,MAAM,CAAC,AAAC,GAAmB,OAAb,EAAE,MAAM,EAAW,GAAG,CAAC,AAAC,GAAM,EAAE,EAAE,GACjF,OAAO,EACJ,MAAM,CAAC,AAAC,GAAmB,OAAb,EAAE,MAAM,EAAa,CAAC,EAAW,GAAG,CAAC,EAAE,MAAM,GAC3D,IAAI,CAAC,CAAC,EAAG,IAAM,EAAE,KAAK,CAAG,EAAE,KAAK,CACrC,CAEO,SAAS,EAAW,CAAoB,CAAE,CAAgB,EAC/D,OAAO,EAAM,MAAM,CAAC,AAAC,GAAM,EAAE,MAAM,GAAK,GAAU,IAAI,CAAC,CAAC,EAAG,IAAM,EAAE,KAAK,CAAG,EAAE,KAAK,CACpF,oBAjByB,kBADA,0CAwBlB,SAAS,AAAiBjG,CAAoB,CAAE,CAAqBkF,EAC1E,IAAM,EAAqB,CAAC,EACxB,EAAS,EACbI,IAAKD,IAAM,KAAK,EAAW,GAAQ,CACjCA,IAAM,EAAK,CAAM,CAAC,EAAE,EAAE,CAAC,EAAI,CAAE,EAAG,EAAG,EAAG,CAAO,EAC7CH,CAAG,CAAC,EAAE,EAAE,CAAC,CAAG,EACZ,IAAM,EAAoB,OAAb,EAAE,MAAMhC,CAAY,EAAW,EAAO,EAAE,EAAE,EAAI,EAAE,CACvD,EAAO,KAAK,IAAI,CAAC,EAAK,MAAM,CAAG,GAzBf,EAAE,AAyBkB,AAAoB,EAAI,EAClE,EAAK,OAAO,CAAC,CAAC,EAAG,KACf,IAAM,EAAOsC,EAAI,GAAM,EAAI,EAAI,CAAC,EAC1BP,EAAI,KAAK,KAAK,CAAC,EAAItC,GAAG,AACtB,EAAM,EAAI,EACV,EAAM,KAAK,AA9B4E,KA8BvE,CAAC,EAAI,GAFyB,AAGpD,CAAG,CAAC,EAAE,EAAE,CAAC,CAAG,CAAM,CAAC,EAAE,EAAE,CAAC,EAAI,CAC1B,EAAG,EAAG,CAAC,CAAG,CAAC,EAA6B,GAAQ,AApCtC,IAoCqC,AAjCxC,GAiCgB,CAAqC,CAAM,CAAM,CAExE,EAAG,CAF+D,CAE5D,CAF0BzB,AAEzB,AAnCY,IAiCiB,CAE1B,EAAqB,GAAP,CAAR,AAClB,CACF,GAEA,AAJ2C,CAAC,AAAV,EArCxB,IAyCA,KAAK,GAAG,CAAC,EADN,CACS,IADJ,IAAI,AACQ,CADP,KAAK,EACU,EADN,CAAC,EAAK,MAAM,CAAG,GAAK,IAvCpC,EAyClB,CACA,OAAO,CACT,4BCxCA,IAAM,EAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAM,CAG7F,EAAM,AAAC,IAAc,AAAC,CAAE,EAAG,CAAC,EAAE,KAAK,CAAC,EAAG,GAAI,EAAG,CAAC,EAAE,KAAK,CAAC,EAAG,GAAI,IAAK,CAAC,EAAE,KAAK,CAAC,EAAG,IAAI,CAAC,qBAPhE,qBAyBnB,SAAS,AAAc,CAAoB,CAAE,CAAa,EAC/D,IAAM,EAAO,EAAM,GAAG,CAAC,AAAC,GAAM,EAAE,GAAG,EAAE,MAAM,CAAC,AAAC,GAAmB,CAACgC,CAAC,GAC5D,EAAQ,EAAI,CAAC,KAAU,EAAK,CAAC,IAAI,EAAE,CAAC,EAAE,EACtC,EAAO,EAAI,CAAC,KAAU,EAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,IAAM,GAG7C,EAAQ+B,CAAE,EAAG,EAAM,CAACO,CAAE,EAAG,EAAM,CAAC,CAAGf,CAAE,EACrC,EAAO,KAAK,GAAG,CAAC,AA9BL,EA8BiB,CAAC,EAAK,CAAC,CAAG,GAAM,AAAC,EAAI,IAAM,CAAD,CAAM,CAAC,CAAG,GAAM,AAAC,EAAIgB,GAC3E,EAAS,MAAM,IAAI,CAAC,CAAE,OAAQ,CAAK,EAAG,CAAC,EAAG,KAC9C,IAAM,EAAc,GAAVvE,EAAM,AAAS,CAAR,EAAS,EAAM,CAAC,EAAG,CAAC,CAAI,EACnC,EAAIA,KAAKA,KAAK,CAAC,EAAI,IACnB,EAAK,EAAI,GAAM,EACrB,MAAO,GAAE,IAAG,EAAG,MAAO,AAAM,OAAW,IAAN,EAAU,CAAA,EAAG,CAAM,CAAC,EAAI,EAAE,CAAC,CAAC,EAAE,EAAA,CAAG,CAAG,CAAM,CAAC,EAAI,EAAE,CAAE,MAAG,CAAY,CACrG,EAD6F,CAGvF,EAAM,AAAC,IACX,GAAM,GAAE,CAAC,GAAE,CAAC,CAAE,KAAG,CAAE,CAAG,EAAI,GAE1B,MAAO,CADK,CAAC,EAAI,CAAM,CAAC,AACX,EADa2E,EAAC,AAAC,EAAI,IAAM,CAAD,CAAK,CAAM,CAAC,EAAE,EAAC,CAAC,MAC7B,CAAC,EAAM,EAAA,CAAGL,CAnCG,GAmCC,CAnCG,KAAK,AAmCD,EAAG,CAnCC,CAAG,GAAG,AAmCD,OAnCQ,MAoChE,EAEM,EAAQ,EAAW,GAAO,GAAG,CAAC,AAACvF,IACnCA,IAAM,EAAQ,CAAC,KAAoB,OAAb+F,EAAE,MAAM,CAAY,EAAW,EAAO,EAAE,EAAE,EAAI,EAAE,CAAE,CAAC,MAAM,CAAC,AAAC,GAAM,EAAE,GAAG,EACtF,EAAoB,EAAE,CACtB,EAAU,EACb,GAAG,CAAC,AAAC,IAAU,GAAD,GAAG,EAAM,EAAG,EAAI,EAAK,GAAG,EAAa,QAAS,EAAK,EAAE,GAAK,EAAE,EAAE,CAACC,CAAC,EAC9E,IAAI,CAAC,CAAC9C,EAAG,IAAM,EAAE,CAAC,CAAG,EAAE,CAAC,EACxB,GAAG,CAAC,AAAC,IAEJ,IAAI,EAAM,EAAQ,SAAS,CAAC,AAAC,GAAQ,EAAG,CAAC,EAAI,GAG7C,OAFY,CAAC,IAAT,GAAY,GAAM,EAAQ,IAAI,CAAC,IAAK,EACxC,CAAO,CAAC,EAAI,CAAG,EAAG,CAAC,CAvDX,EAuDc,EAvDV,AAwDL,CAAE,GAAG,CAAE,KAAE,EAAK,MAAO,EAAS,EAAG,IAAI,CAACiD,GAAG,CAAE,EAAG,IAAI,CAAC,MAAM,CAAE,EAAO,CAC3E,GACF,MAAO,CAAE,KAAM,EAAG,KAAMzD,KAAK,GAAG,CAACA,EAAG,CA1D8D,CA0DtD,MAAM,UAAG,CAAQ,CAC/D,GAEA,MAAO,CACLA,OAAQ,EAAOqD,GAAG,CAAC,CAAC,OAAE,CAAK,GAAE,CAAC,CAAE,GAAK,CAAC,OAAE,IAAOM,EAAE,CAAC,EAClD,MAjEmB,AAiEZ,MACP,CADc,MACN,EAAI,GACZ,QACA,QAAS,EAAM,MAAM,CAAC,AAACE,GAAM,CAAC,EAAEnC,GAAG,EAAiB,SAAb,EAAE,MAAM,CACjDpF,CACF,gBA3DO,SAAS,AAAU,CAAS,EACjC,GAAM,GAAE,CAAC,KAAE,CAAG,CAAE,CAAG,EAAI,GACvB,MAAO,CAAA,EAAG,EAAI,CAAC,EAAE,CAAM,CAAC,EAAI,EAAE,CAAA,CAAE,AAClC"}
|
|
@@ -7,9 +7,9 @@ globalThis.__BUILD_MANIFEST = {
|
|
|
7
7
|
"static/chunks/0cz1d0mv5g_q7.js"
|
|
8
8
|
],
|
|
9
9
|
"lowPriorityFiles": [
|
|
10
|
-
"static/
|
|
11
|
-
"static/
|
|
12
|
-
"static/
|
|
10
|
+
"static/Q29Tn_NjyVms0d3pKn4Yx/_buildManifest.js",
|
|
11
|
+
"static/Q29Tn_NjyVms0d3pKn4Yx/_ssgManifest.js",
|
|
12
|
+
"static/Q29Tn_NjyVms0d3pKn4Yx/_clientMiddlewareManifest.js"
|
|
13
13
|
],
|
|
14
14
|
"rootMainFiles": [
|
|
15
15
|
"static/chunks/27culnr-k4v7j.js",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en" class="dark geist_9c6cb61b-module__8NX9hq__variable geist_mono_d6617093-module__z61v7q__variable inter_ce44cde5-module__EWa6Cq__variable ibm_plex_sans_abbe3f68-module__2aQ_Fa__variable atkinson_hyperlegible_86f3eeac-module__H04cSq__variable dm_sans_4dbccdff-module__kMSx3G__variable jetbrains_mono_d9365dea-module__eFWXIa__variable ibm_plex_mono_a350e774-module__yi3qSG__variable dm_mono_c5369204-module__U0WqgG__variable" data-font-sans="geist" data-font-mono="geist-mono"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/02i5hsdat1nuq.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/chunks/
|
|
1
|
+
<!DOCTYPE html><html lang="en" class="dark geist_9c6cb61b-module__8NX9hq__variable geist_mono_d6617093-module__z61v7q__variable inter_ce44cde5-module__EWa6Cq__variable ibm_plex_sans_abbe3f68-module__2aQ_Fa__variable atkinson_hyperlegible_86f3eeac-module__H04cSq__variable dm_sans_4dbccdff-module__kMSx3G__variable jetbrains_mono_d9365dea-module__eFWXIa__variable ibm_plex_mono_a350e774-module__yi3qSG__variable dm_mono_c5369204-module__U0WqgG__variable" data-font-sans="geist" data-font-mono="geist-mono"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/02i5hsdat1nuq.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/chunks/0e3ha56i_0j05.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/27culnr-k4v7j.js"/><script src="/_next/static/chunks/40re3aog6ymmi.js" async=""></script><script src="/_next/static/chunks/2nizd2srt2-vm.js" async=""></script><script src="/_next/static/chunks/1i9a4z5i_ajz0.js" async=""></script><script src="/_next/static/chunks/turbopack-2qsbj8zx38t0j.js" async=""></script><script src="/_next/static/chunks/2n91moa8g45as.js" async=""></script><script src="/_next/static/chunks/1dyovtojnx0d4.js" async=""></script><meta name="robots" content="noindex"/><title>VibeDoc</title><meta name="description" content="Project intelligence for AI-assisted development"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body class="bg-bg text-txt min-h-screen"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/27culnr-k4v7j.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[796229,[\"/_next/static/chunks/2n91moa8g45as.js\"],\"default\"]\n3:I[32339,[\"/_next/static/chunks/2n91moa8g45as.js\"],\"default\"]\n4:I[48081,[\"/_next/static/chunks/2n91moa8g45as.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[48081,[\"/_next/static/chunks/2n91moa8g45as.js\"],\"ViewportBoundary\"]\na:I[48081,[\"/_next/static/chunks/2n91moa8g45as.js\"],\"MetadataBoundary\"]\nc:I[563491,[\"/_next/static/chunks/2n91moa8g45as.js\",\"/_next/static/chunks/1dyovtojnx0d4.js\"],\"default\"]\n:HL[\"/_next/static/chunks/02i5hsdat1nuq.css\",\"style\"]\n:HL[\"/_next/static/chunks/0e3ha56i_0j05.css\",\"style\"]\n7:X\n0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/02i5hsdat1nuq.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0e3ha56i_0j05.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/2n91moa8g45as.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark geist_9c6cb61b-module__8NX9hq__variable geist_mono_d6617093-module__z61v7q__variable inter_ce44cde5-module__EWa6Cq__variable ibm_plex_sans_abbe3f68-module__2aQ_Fa__variable atkinson_hyperlegible_86f3eeac-module__H04cSq__variable dm_sans_4dbccdff-module__kMSx3G__variable jetbrains_mono_d9365dea-module__eFWXIa__variable ibm_plex_mono_a350e774-module__yi3qSG__variable dm_mono_c5369204-module__U0WqgG__variable\",\"data-font-sans\":\"geist\",\"data-font-mono\":\"geist-mono\",\"children\":[\"$\",\"body\",null,{\"className\":\"bg-bg text-txt min-h-screen\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$7\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/02i5hsdat1nuq.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0e3ha56i_0j05.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"Q29Tn_NjyVms0d3pKn4Yx\"}\n7:C\n9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n6:null\nb:[[\"$\",\"title\",\"0\",{\"children\":\"VibeDoc\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Project intelligence for AI-assisted development\"}]]\n"])</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/27culnr-k4v7j.js"/><script src="/_next/static/chunks/40re3aog6ymmi.js" async=""></script><script src="/_next/static/chunks/2nizd2srt2-vm.js" async=""></script><script src="/_next/static/chunks/1i9a4z5i_ajz0.js" async=""></script><script src="/_next/static/chunks/turbopack-2qsbj8zx38t0j.js" async=""></script><script src="/_next/static/chunks/27xj8jkjt-ck1.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/27culnr-k4v7j.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[796229,[\"/_next/static/chunks/27xj8jkjt-ck1.js\"],\"default\"]\n3:I[32339,[\"/_next/static/chunks/27xj8jkjt-ck1.js\"],\"default\"]\n4:I[48081,[\"/_next/static/chunks/27xj8jkjt-ck1.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[48081,[\"/_next/static/chunks/27xj8jkjt-ck1.js\"],\"ViewportBoundary\"]\na:I[48081,[\"/_next/static/chunks/27xj8jkjt-ck1.js\"],\"MetadataBoundary\"]\nc:I[563491,[\"/_next/static/chunks/27xj8jkjt-ck1.js\"],\"default\"]\n7:X\n0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4624]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"
|
|
1
|
+
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/27culnr-k4v7j.js"/><script src="/_next/static/chunks/40re3aog6ymmi.js" async=""></script><script src="/_next/static/chunks/2nizd2srt2-vm.js" async=""></script><script src="/_next/static/chunks/1i9a4z5i_ajz0.js" async=""></script><script src="/_next/static/chunks/turbopack-2qsbj8zx38t0j.js" async=""></script><script src="/_next/static/chunks/27xj8jkjt-ck1.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/27culnr-k4v7j.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[796229,[\"/_next/static/chunks/27xj8jkjt-ck1.js\"],\"default\"]\n3:I[32339,[\"/_next/static/chunks/27xj8jkjt-ck1.js\"],\"default\"]\n4:I[48081,[\"/_next/static/chunks/27xj8jkjt-ck1.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[48081,[\"/_next/static/chunks/27xj8jkjt-ck1.js\"],\"ViewportBoundary\"]\na:I[48081,[\"/_next/static/chunks/27xj8jkjt-ck1.js\"],\"MetadataBoundary\"]\nc:I[563491,[\"/_next/static/chunks/27xj8jkjt-ck1.js\"],\"default\"]\n7:X\n0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4624]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"Q29Tn_NjyVms0d3pKn4Yx\"}\n7:C\n9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n6:null\nb:[]\n"])</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"
|
|
1
|
+
self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"rlyJUUudQ5rFvCmJlVoVcd4y9a/zEadQHQQVSYAwPx8=\"\n}"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,496385,e=>{"use strict";var t=e.i(83790);let s={name:"triangle-alert",size:24,node:[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]],aliases:["alert-triangle"]};s.node;let a=(0,t.default)(s);e.s(["AlertTriangle",0,a],496385)},960754,e=>{"use strict";var t=e.i(72345),s=e.i(180338),a=e.i(910172),n=e.i(155515),r=e.i(161863),l=e.i(765470),i=e.i(244267),d=e.i(782630),o=e.i(694628),c=e.i(138324),x=e.i(956537),u=e.i(83790);let m={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"}]]};m.node;let p=(0,u.default)(m);var h=e.i(763371),f=e.i(998822),g=e.i(464750),b=e.i(651581),j=e.i(975157),N=e.i(844081);let v="font-mono text-[10px] uppercase tracking-widest text-muted";function k({attach:e}){let{board:a,rootParam:n}=(0,h.useApp)(),[r,l]=(0,s.useState)([]),[i,d]=(0,s.useState)(0);(0,s.useEffect)(()=>{let e=!1;return fetch(`/api/roadmap${n}`).then(e=>e.ok?e.json():{items:[]}).then(t=>{e||l(t.items??[])}).catch(e=>console.warn("[vibedoc] could not load roadmap for the chat rail:",e)),()=>{e=!0}},[n,i]),(0,s.useEffect)(()=>{let e=e=>{let t=e.detail?.type;("roadmap_updated"===t||"task_created"===t)&&d(e=>e+1)};return window.addEventListener("vibedoc:sse",e),()=>window.removeEventListener("vibedoc:sse",e)},[]);let o=(0,s.useMemo)(()=>Object.fromEntries((a?Object.values(a).flat():[]).map(e=>[e.id,e])),[a]);return(0,t.jsx)("div",{className:"flex h-full min-h-0 flex-col overflow-y-auto",children:(0,t.jsxs)("div",{className:"flex flex-col gap-5 p-5 animate-fade-in",children:[!e&&(0,t.jsx)(y,{}),e?.kind==="epic"&&(0,t.jsx)(w,{item:r.find(t=>t.id===e.id),id:e.id,tasksById:o}),e?.kind==="task"&&(0,t.jsx)(S,{task:o[e.id],id:e.id,items:r})]},e?`${e.kind}:${e.id}`:"none")})}function y(){return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("p",{className:v,children:"Context"}),(0,t.jsxs)("div",{className:"flex flex-col items-start gap-3 rounded-lg border border-dashed border-border2 p-4",children:[(0,t.jsx)(p,{className:"size-4 text-muted"}),(0,t.jsx)("p",{className:"text-sm text-txt",children:"Not linked to an epic or task"}),(0,t.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,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsx)("p",{className:v,children:"The agent can"}),(0,t.jsxs)("ul",{className:"flex flex-col gap-1.5 text-xs text-muted",children:[(0,t.jsx)("li",{children:"Read docs, tasks, the roadmap and memory"}),(0,t.jsx)("li",{children:"Propose doc and task edits (you review a diff)"}),(0,t.jsx)("li",{children:"Propose epics and task breakdowns (you accept)"}),(0,t.jsx)("li",{className:"text-muted/70",children:"It can't run code or edit source files"})]})]})]})}function w({item:e,id:s,tasksById:a}){if(!e)return(0,t.jsx)(C,{kind:"Epic",id:s});let n=e.tasks.map(e=>a[e]).filter(e=>!!e),r=n.map(e=>e.status).filter(e=>"cancelled"!==e),l=r.filter(e=>"done"===e).length;return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsxs)("p",{className:v,children:["Epic · ",e.id]}),(0,t.jsx)("h3",{className:"text-base font-semibold leading-snug text-txt",children:e.title}),(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,t.jsx)(b.StatusPill,{status:e.status}),e.due&&(0,t.jsxs)("span",{className:"font-mono text-[10px] text-muted",children:["due ",e.due]})]})]}),r.length>0&&(0,t.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,t.jsxs)("div",{className:"flex items-baseline justify-between",children:[(0,t.jsx)("p",{className:v,children:"Progress"}),(0,t.jsxs)("span",{className:"font-mono text-[10px] text-muted",children:[l,"/",r.length," tasks"]})]}),(0,t.jsx)(b.SegmentedProgress,{statuses:r})]}),n.length>0&&(0,t.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,t.jsx)("p",{className:v,children:"Tasks"}),(0,t.jsx)("ul",{className:"-mx-2 flex flex-col",children:n.map(e=>(0,t.jsx)($,{task:e},e.id))})]}),e.body.trim()&&(0,t.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,t.jsx)("p",{className:v,children:"Brief"}),(0,t.jsx)(f.MarkdownRenderer,{content:e.body,className:"prose-compact"})]}),(0,t.jsx)(A,{attach:{kind:"epic",id:e.id},label:"Open in roadmap"})]})}function $({task:e}){let{showAbout:s}=(0,i.useChats)();return(0,t.jsx)("li",{children:(0,t.jsxs)("button",{type:"button",onClick:()=>s({kind:"task",id:e.id}),title:`Chat about ${e.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,t.jsx)(g.StatusIcon,{status:(0,o.displayStatus)(e),className:"size-3"}),(0,t.jsx)("span",{className:"shrink-0 font-mono text-[10px] text-muted",children:e.id}),(0,t.jsx)("span",{className:(0,j.cn)("min-w-0 flex-1 truncate","done"===e.status?"text-muted":"text-txt"),children:e.title})]})})}function S({task:e,id:s,items:a}){let{showAbout:n}=(0,i.useChats)();if(!e)return(0,t.jsx)(C,{kind:"Task",id:s});let r=e.phase.match(/^R\d+/)?.[0],l=r?a.find(e=>e.id===r):void 0,d=e.raw?.replace(/^#.*\n(\*\*[^*]+:\*\*.*\n)*/,"").trim();return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsxs)("p",{className:v,children:["Task · ",e.id]}),(0,t.jsx)("h3",{className:"text-base font-semibold leading-snug text-txt",children:e.title}),(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,t.jsx)(g.StatusChip,{status:(0,o.displayStatus)(e)}),e.size&&(0,t.jsx)("span",{className:"font-mono text-[10px] text-muted",children:e.size}),e.due&&(0,t.jsxs)("span",{className:"font-mono text-[10px] text-muted",children:["due ",e.due]})]})]}),(0,t.jsxs)("dl",{className:"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1.5 text-xs",children:[r&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("dt",{className:"text-muted",children:"Epic"}),(0,t.jsx)("dd",{className:"min-w-0",children:(0,t.jsxs)("button",{type:"button",onClick:()=>n({kind:"epic",id:r}),className:"truncate text-left text-txt hover:text-accent",title:`Chat about ${r}`,children:[(0,t.jsx)("span",{className:"font-mono text-[10px] text-muted",children:r})," ",l?.title??e.phase.replace(/^R\d+\s*—\s*/,"")]})})]}),e.dependsOn&&"—"!==e.dependsOn&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("dt",{className:"text-muted",children:"Depends on"}),(0,t.jsx)("dd",{className:"font-mono text-[11px] text-txt",children:e.dependsOn})]})]}),d&&(0,t.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,t.jsx)("p",{className:v,children:"Spec"}),(0,t.jsx)(f.MarkdownRenderer,{content:d,className:"prose-compact"})]}),(0,t.jsx)(A,{attach:{kind:"task",id:e.id},label:"Open on board"})]})}function C({kind:e,id:s}){return(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsxs)("p",{className:v,children:[e," · ",s]}),(0,t.jsxs)("p",{className:"text-sm text-muted",children:[e," ",s," isn't in this project any more."]})]})}function A({attach:e,label:s}){return(0,t.jsxs)(c.default,{href:(0,N.attachHref)(e),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:[s,(0,t.jsx)(x.ArrowUpRight,{className:"size-3.5 transition-transform duration-(--duration-fast) group-hover:-translate-y-px group-hover:translate-x-px"})]})}var _=e.i(481523);let M=e=>{let t=setInterval(e,3e4);return()=>clearInterval(t)},T=()=>6e4*Math.floor(Date.now()/6e4);function D(){let{chats:e,loaded:s,create:n,show:r,send:l,now:o}=(0,i.useChats)(),c=(0,a.useRouter)(),x=(0,a.useSearchParams)().get("id"),u=e.find(e=>e.id===x)??(x?void 0:(0,_.defaultChat)(e,o));function m(e){let t=n();r(t),e&&l(t,e)}return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(P,{selectedId:u?.id??null,onNew:()=>m()}),(0,t.jsx)("section",{className:"flex min-w-0 flex-1 flex-col border-r border-border bg-bg",children:u?(0,t.jsx)("div",{className:"flex min-h-0 flex-1 flex-col animate-fade-in",children:(0,t.jsx)(d.ChatView,{chatId:u.id,variant:"page"})},u.id):s?(0,t.jsx)(R,{missing:!!x,onStart:m,onBack:()=>c.replace("/chat")}):null}),(0,t.jsx)("aside",{className:"hidden w-80 shrink-0 bg-surface xl:block","aria-label":"Chat context",children:(0,t.jsx)(k,{attach:u?.attach??null})})]})}function P({selectedId:e,onNew:a}){let{chats:l,now:d}=(0,i.useChats)(),[o,c]=(0,s.useState)(""),x=o.trim().toLowerCase(),u=x?l.filter(e=>e.title.toLowerCase().includes(x)||e.attach?.id.toLowerCase().includes(x)):l,m=(0,_.groupChats)(u,d),p=[{label:"Needs you",items:m.needsYou,tone:"text-amber"},{label:"Errors",items:m.errors,tone:"text-danger"},{label:"Running",items:m.running,tone:"text-accent"},{label:"Recent",items:m.recent,tone:"text-muted"}];return(0,t.jsxs)("aside",{className:"hidden w-72 shrink-0 flex-col border-r border-border bg-surface md:flex","aria-label":"All chats",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 px-4 pb-3 pt-4",children:[(0,t.jsx)("h1",{className:"flex-1 text-sm font-semibold text-txt",children:"Chats"}),(0,t.jsxs)("button",{type:"button",onClick:a,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,t.jsx)(n.Plus,{className:"size-3.5"})," New chat"]})]}),l.length>3&&(0,t.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,t.jsx)(r.Search,{className:"size-3.5 text-muted"}),(0,t.jsx)("input",{value:o,onChange:e=>c(e.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,t.jsxs)("div",{className:"min-h-0 flex-1 overflow-y-auto px-2 pb-4",children:[0===l.length&&(0,t.jsx)("p",{className:"px-2 py-6 text-xs text-muted",children:"No chats yet."}),p.map(s=>s.items.length>0&&(0,t.jsxs)("div",{className:"mt-3 first:mt-1",children:[(0,t.jsxs)("p",{className:(0,j.cn)("px-2 pb-1 font-mono text-[10px] uppercase tracking-widest",s.tone),children:[s.label," · ",s.items.length]}),(0,t.jsx)("ul",{className:"flex flex-col gap-px",children:s.items.map(s=>(0,t.jsx)(E,{chat:s,active:s.id===e},s.id))})]},s.label)),x&&0===u.length&&(0,t.jsxs)("p",{className:"px-2 py-6 text-xs text-muted",children:["No chat matches “",o,"”."]})]})]})}function E({chat:e,active:a}){let{show:n,remove:r,now:d}=(0,i.useChats)(),o=(0,s.useSyncExternalStore)(M,T,()=>0),c=(0,_.shellStatus)(e,d),x=[...e.messages].reverse().find(e=>e.text)?.text.replace(/\s+/g," ").trim();return(0,t.jsxs)("li",{className:"group relative animate-slide-in",children:[(0,t.jsxs)("button",{type:"button",onClick:()=>n(e.id),"aria-current":a?"true":void 0,className:(0,j.cn)("flex w-full flex-col gap-1 rounded-lg px-2.5 py-2 text-left transition-colors duration-(--duration-fast)",a?"bg-surface2 shadow-[inset_2px_0_0_rgb(var(--rgb-accent))]":"hover:bg-surface2/60"),children:[(0,t.jsxs)("span",{className:"flex items-center gap-2 pr-5",children:[(0,t.jsx)(N.StatusMarker,{status:c,showIdle:!0}),(0,t.jsx)("span",{className:(0,j.cn)("min-w-0 flex-1 truncate text-[13px]","idle"!==c||a?"text-txt":"text-txt/80"),children:e.title}),o>0&&(0,t.jsx)("span",{className:"shrink-0 font-mono text-[10px] text-muted group-hover:opacity-0",children:(0,_.ago)(e.updatedAt,o)})]}),(e.attach||x)&&(0,t.jsxs)("span",{className:"flex items-center gap-2 pl-5 text-[11px] text-muted",children:[e.attach&&(0,t.jsx)(N.AttachLabel,{attach:e.attach,className:"shrink-0"}),x&&(0,t.jsx)("span",{className:"min-w-0 truncate",children:x})]})]}),(0,t.jsx)("button",{type:"button",onClick:()=>r(e.id),"aria-label":`Close ${e.title}`,title:e.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,t.jsx)(l.X,{className:"size-3.5"})})]})}function R({missing:e,onStart:s,onBack:a}){return(0,t.jsx)("div",{className:"grid flex-1 place-items-center p-8",children:(0,t.jsxs)("div",{className:"flex max-w-md flex-col items-start gap-4 animate-fade-in",children:[(0,t.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:"⬡"}),e?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("h2",{className:"text-lg font-semibold text-txt",children:"This chat was deleted"}),(0,t.jsx)("button",{type:"button",onClick:a,className:"text-sm text-accent hover:underline",children:"Back to all chats"})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h2",{className:"text-lg font-semibold text-txt",children:"Run chats side by side"}),(0,t.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,t.jsx)("div",{className:"flex flex-col gap-1.5",children:(0,_.suggestions)(null).map(e=>(0,t.jsx)("button",{type:"button",onClick:()=>s(e),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:e},e))})]})]})})}e.s(["default",0,function(){return(0,t.jsx)("div",{className:"flex h-[calc(100svh-3rem)] min-h-0",children:(0,t.jsx)(s.Suspense,{children:(0,t.jsx)(D,{})})})}],960754)},723528,e=>{"use strict";var t=e.i(72345),s=e.i(479432),a=e.i(240595),n=e.i(975157),r=e.i(244267),l=e.i(844081);let i={running:"Agent working","needs-answer":"Agent needs you",review:"Plan to review"};e.s(["AgentDot",0,function({attach:e}){let s=(0,r.useItemAgent)(e);return s?(0,t.jsx)(l.StatusMarker,{status:s.status,label:i[s.status]}):null},"AgentMark",0,function({attach:e,className:l}){let d=(0,r.useItemAgent)(e),{show:o}=(0,r.useChats)();if(!d)return null;let c=i[d.status];return(0,t.jsxs)("button",{type:"button",onClick:e=>{e.stopPropagation(),o(d.chatId)},title:`${c} \xb7 open chat`,"aria-label":`${c}, open chat`,className:(0,n.cn)("nodrag inline-flex shrink-0 items-center gap-1 rounded-full border px-1.5 py-px font-mono text-[10px] leading-4 animate-fade-in transition-colors duration-(--duration-fast)","running"===d.status&&"border-accent/50 text-accent hover:bg-accent/10","needs-answer"===d.status&&"border-amber/50 text-amber hover:bg-amber/10","review"===d.status&&"border-accent/50 bg-accent/10 text-accent hover:bg-accent/20",l),children:["running"===d.status?(0,t.jsx)(a.Loader2,{className:"size-3 animate-spin","aria-hidden":!0}):(0,t.jsx)(s.Bot,{className:"size-3","aria-hidden":!0}),c]})}])},651581,e=>{"use strict";var t=e.i(72345),s=e.i(211672),a=e.i(301702),n=e.i(496385),r=e.i(837001),l=e.i(975157),i=e.i(450768),d=e.i(640818),o=e.i(723528),c=e.i(244267);let x=[a.Position.Top,a.Position.Right,a.Position.Bottom,a.Position.Left];function u(){return(0,t.jsxs)(t.Fragment,{children:[x.map(e=>(0,t.jsx)(s.Handle,{id:e,type:"source",position:e,isConnectable:!1,className:"opacity-0"},e)),x.map(e=>(0,t.jsx)(s.Handle,{id:`${e}-t`,type:"target",position:e,isConnectable:!1,className:"opacity-0"},`${e}-t`))]})}let m={"in-progress":"Active",paused:"Paused",done:"Done",planned:"Planned"};function p({status:e,className:s}){return(0,t.jsxs)("span",{title:m[e],"aria-label":m[e],className:(0,l.cn)("relative inline-flex h-2 w-2 shrink-0",s),children:["in-progress"===e&&(0,t.jsx)("span",{className:"absolute inset-0 animate-ping rounded-full bg-accent/60"}),(0,t.jsx)("span",{className:(0,l.cn)("relative h-full w-full rounded-full","done"===e&&"bg-teal","in-progress"===e&&"bg-accent","planned"===e&&"border border-muted","paused"===e&&"border-2 border-y-0 border-muted")})]})}let h={done:"bg-teal","in-progress":"bg-amber",review:"bg-accent",blocked:"bg-danger",paused:"bg-muted/60",todo:"bg-border2",cancelled:"bg-border"};function f({statuses:e,className:s}){if(!e?.length)return null;let a=e.filter(e=>"done"===e).length;return(0,t.jsx)("div",{className:(0,l.cn)("flex h-1.5 min-w-0 flex-1 gap-0.5",s),title:`${a}/${e.length} tasks done`,children:e.map((e,s)=>(0,t.jsx)("span",{className:(0,l.cn)("h-full flex-1 rounded-[1px]",h[e])},s))})}function g({value:e,total:s,className:a}){let n=2*Math.PI*14,r=s>0?e/s:0;return(0,t.jsxs)("span",{className:(0,l.cn)("relative inline-flex h-9 w-9 shrink-0 items-center justify-center",a),title:`${e}/${s} tasks done`,children:[(0,t.jsxs)("svg",{viewBox:"0 0 36 36",className:"absolute inset-0 -rotate-90",children:[(0,t.jsx)("circle",{cx:"18",cy:"18",r:14,fill:"none",strokeWidth:"3",className:"stroke-border"}),(0,t.jsx)("circle",{cx:"18",cy:"18",r:14,fill:"none",strokeWidth:"3",stroke:"currentColor",strokeLinecap:"round",strokeDasharray:n,strokeDashoffset:n*(1-r)})]}),(0,t.jsx)("span",{className:"font-mono text-[9px] text-txt",children:Math.round(100*r)})]})}function b({due:e,state:s}){return e?(0,t.jsxs)("span",{className:(0,l.cn)("font-mono text-[10px]","overdue"===s?"text-danger":"soon"===s?"text-amber":"text-muted"),children:["Due ",(0,i.formatDay)(e)]}):null}function j({data:e}){let s=e.taskDue;return s&&s.overdue>0?(0,t.jsxs)("span",{className:"font-mono text-[10px] text-danger",children:[s.overdue," ",1===s.overdue?"task":"tasks"," overdue"]}):e.item.due?(0,t.jsx)(b,{due:e.item.due,state:e.dueState}):s?.next?(0,t.jsxs)("span",{className:(0,l.cn)("font-mono text-[10px]",e.taskDueSoon?"text-amber":"text-muted"),children:["Next due ",(0,i.formatDay)(s.next)]}):null}function N({drift:e}){return e?.length?(0,t.jsx)("span",{title:e.join("\n"),className:"absolute -left-2 -top-2 rounded-full bg-bg p-0.5 text-amber",children:(0,t.jsx)(n.AlertTriangle,{className:"h-3.5 w-3.5"})}):null}e.s(["DueChip",0,b,"STATUS_LABEL",0,m,"SegmentedProgress",0,f,"StatusDot",0,p,"StatusPill",0,function({status:e}){return(0,t.jsxs)("span",{className:(0,l.cn)("inline-flex items-center gap-1.5 rounded-full border px-2 py-0.5 font-mono text-[10px] uppercase tracking-wider","done"===e&&"border-teal/40 text-teal","in-progress"===e&&"border-accent/50 text-accent","planned"===e&&"border-dashed border-border2 text-muted","paused"===e&&"border-border2 text-muted"),children:[(0,t.jsx)(p,{status:e,className:"h-1.5 w-1.5"}),m[e]]})},"TASK_STATUS_BG",0,h,"nodeTypes",0,{horizon:function({data:e,selected:s}){let{item:a,progress:n,epics:r,chapter:i}=e,o=a.status;return(0,t.jsxs)("div",{style:{width:d.HORIZON_W},className:(0,l.cn)("relative flex items-center gap-3 rounded-xl border bg-surface px-3.5 py-3 transition-shadow duration-(--duration-base)","in-progress"===o&&"border-accent/60 shadow-[0_0_0_1px_rgb(var(--rgb-accent)/0.25),0_10px_30px_-12px_rgb(var(--rgb-accent)/0.6)]","done"===o&&"border-teal/40","planned"===o&&"border-dashed border-border2","paused"===o&&"border-border2 opacity-75",s&&"ring-2 ring-accent/60 ring-offset-2 ring-offset-bg"),children:[(0,t.jsx)(u,{}),(0,t.jsx)("span",{className:(0,l.cn)("font-mono text-2xl font-semibold leading-none tabular-nums","in-progress"===o?"text-accent":"done"===o?"text-teal":"text-muted"),children:i?String(i).padStart(2,"0"):"··"}),(0,t.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,t.jsx)("p",{className:"text-xs font-semibold uppercase leading-snug tracking-wider text-txt",children:a.title}),(0,t.jsxs)("p",{className:"mt-1 flex flex-wrap items-center gap-x-2 font-mono text-[10px] text-muted",children:[r&&r.total>0&&(0,t.jsxs)("span",{children:[r.done,"/",r.total," epics"]}),(0,t.jsx)(b,{due:a.due,state:e.dueState})]})]}),n&&(0,t.jsx)(g,{value:n.done,total:n.total,className:"done"===o?"text-teal":"text-accent"}),(0,t.jsx)(N,{drift:e.drift})]})},feature:function({data:e,selected:s}){let{item:a,taskStatuses:n,nextTaskId:i}=e,x=(0,c.useItemAgent)({kind:"epic",id:a.id}),m=!!e.drift?.length,h=s&&"ring-2 ring-accent/60 ring-offset-2 ring-offset-bg";if("done"===a.status)return(0,t.jsxs)("div",{style:{width:d.FEATURE_W},className:(0,l.cn)("group relative flex items-center gap-2 rounded-lg border border-border bg-surface/60 px-3 py-2 hover:border-teal/40",h),children:[(0,t.jsx)(u,{}),(0,t.jsx)(r.Check,{className:"h-3.5 w-3.5 shrink-0 text-teal",strokeWidth:3}),(0,t.jsx)("p",{className:"min-w-0 flex-1 truncate text-[13px] text-muted group-hover:text-txt",title:a.title,children:a.title}),x?(0,t.jsx)(o.AgentMark,{attach:{kind:"epic",id:a.id}}):e.progress&&(0,t.jsxs)("span",{className:"font-mono text-[10px] text-muted",children:[e.progress.done,"/",e.progress.total]}),(0,t.jsx)(N,{drift:e.drift})]});let g="in-progress"===a.status;return(0,t.jsxs)("div",{style:{width:d.FEATURE_W},className:(0,l.cn)("relative flex flex-col gap-1.5 rounded-lg border px-3 py-2.5 transition-shadow duration-(--duration-base)",g?"border-accent/50 bg-surface shadow-[0_8px_24px_-10px_rgb(var(--rgb-accent)/0.55)]":"border-dashed border-border2 bg-bg hover:border-muted","paused"===a.status&&"opacity-70",h),children:[(0,t.jsx)(u,{}),g&&(0,t.jsx)("span",{className:(0,l.cn)("absolute -inset-y-px -left-px w-[3px] rounded-l-lg",m?"bg-amber":"bg-accent")}),(0,t.jsxs)("div",{className:"flex items-center justify-between font-mono text-[10px]",children:[(0,t.jsx)("span",{className:"text-muted",children:a.id}),x?(0,t.jsx)(o.AgentMark,{attach:{kind:"epic",id:a.id}}):g?(0,t.jsxs)("span",{className:"flex items-center gap-1.5 uppercase tracking-wider text-accent",children:[(0,t.jsx)(p,{status:"in-progress",className:"h-1.5 w-1.5"}),"Live"]}):(0,t.jsx)("span",{className:"uppercase tracking-wider text-muted",children:a.tasks.length?`${a.tasks.length} tasks`:"No tasks yet"})]}),(0,t.jsx)("p",{className:(0,l.cn)("line-clamp-2 text-[13px] leading-snug",g?"font-medium text-txt":"text-txt/80"),title:a.title,children:a.title}),n&&n.length>0&&(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(f,{statuses:n}),(0,t.jsx)("span",{className:"shrink-0 font-mono text-[10px] text-muted",children:g&&i?(0,t.jsxs)(t.Fragment,{children:["next ",(0,t.jsx)("span",{className:"text-txt",children:i})]}):`${n.filter(e=>"done"===e).length}/${n.length}`})]}),(0,t.jsx)(j,{data:e}),(0,t.jsx)(N,{drift:e.drift})]})}}])},450768,692172,640818,e=>{"use strict";function t(e,t,s){let a;return e?"done"===t?"done":e<s?"overdue":7>=Math.round(((a=e=>Date.UTC(+e.slice(0,4),e.slice(5,7)-1,+e.slice(8,10)))(e)-a(s))/864e5)?"soon":"ok":null}function s(e){return e.every(e=>"done"===e)?"done":e.some(e=>"other"!==e)?"in-progress":"planned"}e.s(["dueState",0,t,"localToday",0,function(e=new Date){let t=e=>String(e).padStart(2,"0");return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}`},"roadmapHealth",0,function(e,a,n){let r={},l=[];for(let s of e)s.due&&"overdue"===t(s.due,s.status,n)&&l.push({id:s.id,kind:"overdue",message:`${s.id} "${s.title}" is overdue since ${s.due}`});let i=new Set(e.filter(e=>null===e.parent).map(e=>e.id));for(let i of e){if(null===i.parent)continue;let e=i.tasks.filter(e=>!(e in a));e.length&&l.push({id:i.id,kind:"missing-task",message:`${i.id} links unknown task ${e.join(", ")}`});let d=i.tasks.filter(e=>e in a&&"cancelled"!==a[e].status),o="done"===i.status||"paused"===i.status?[]:function(e,s,a,n){let r=[];for(let e of s){let t=a[e];"done"!==t.status&&t.due&&t.due<n&&r.push(`${e} overdue since ${t.due}`),"blocked"===t.status&&r.push(`${e} blocked`)}let l=s.some(e=>["done","in-progress","review"].includes(a[e].status));return e.due&&"soon"===t(e.due,e.status,n)&&!l&&r.push(`due ${e.due}, nothing started`),r}(i,d,a,n);if(o.length&&l.push({id:i.id,kind:"at-risk",message:`${i.id} "${i.title}" at risk: ${o.join("; ")}`}),!d.length)continue;let c=d.map(e=>"done"===a[e].status?"done":"in-progress"===a[e].status||"review"===a[e].status?"in-progress":"other");r[i.id]={done:c.filter(e=>"done"===e).length,total:d.length};let x=s(c);if(x!==i.status&&("paused"!==i.status||"done"===x)){let e=d.filter(e=>"done"!==a[e].status);l.push({id:i.id,kind:"status-mismatch",message:"done"===x?`${i.id} "${i.title}": all tasks done but status is ${i.status}`:`${i.id} "${i.title}" is ${i.status} but tasks ${e.join(", ")} are not done`,suggestedStatus:x})}}for(let t of e){if(!i.has(t.id))continue;let a=e.filter(e=>e.parent===t.id);if(!a.length)continue;let n=a.map(e=>"done"===e.status?"done":"in-progress"===e.status?"in-progress":"other");r[t.id]=a.reduce((e,t)=>{let s=r[t.id]??{done:+("done"===t.status),total:1};return{done:e.done+s.done,total:e.total+s.total}},{done:0,total:0});let d=s(n);d!==t.status&&("paused"!==t.status||"done"===d)&&l.push({id:t.id,kind:"status-mismatch",message:`${t.id} "${t.title}" is ${t.status} but its features say ${d}`,suggestedStatus:d})}return{progress:r,drift:l}},"taskDueSummary",0,function(e,t,s){let a=e.map(e=>t[e]).filter(e=>e&&e.due&&"done"!==e.status&&"cancelled"!==e.status).map(e=>e.due);if(!a.length)return null;let n=a.filter(e=>e>=s).sort();return{overdue:a.length-n.length,next:n[0]??null}}],692172);function a(e){let t=new Set(e.filter(e=>null===e.parent).map(e=>e.id));return e.filter(e=>null===e.parent||!t.has(e.parent)).sort((e,t)=>e.order-t.order)}function n(e,t){return e.filter(e=>e.parent===t).sort((e,t)=>e.order-t.order)}e.s(["FEATURE_W",0,220,"HORIZON_W",0,260,"childrenOf",0,n,"resolvePositions",0,function(e,t){let s={},r=0;for(let l of a(e)){let a=t[l.id]??{x:0,y:r};s[l.id]=a;let i=null===l.parent?n(e,l.id):[],d=Math.ceil(i.length/2)>6?2:1;i.forEach((e,n)=>{let r=n%2==0?1:-1,l=Math.floor(n/2),i=l%d,o=Math.floor(l/d);s[e.id]=t[e.id]??{x:a.x+20+r*(340+260*i),y:a.y+110*o+55*i}}),r+=110*Math.max(1,Math.ceil(Math.ceil(i.length/2)/d))+90}return s},"spineItems",0,a],640818);let r=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],l=e=>({y:+e.slice(0,4),m:+e.slice(5,7),day:+e.slice(8,10)});e.s(["LANE_ROW_H",0,44,"buildTimeline",0,function(e,s){let i=e.map(e=>e.due).filter(e=>!!e),d=l([s,...i].sort()[0]),o=l([s,...i].sort().at(-1)??s),c={y:d.y,m:d.m-1},x=Math.max(6,(o.y-d.y)*12+(o.m-d.m)+3),u=Array.from({length:x},(e,t)=>{let s=12*c.y+(c.m-1)+t,a=Math.floor(s/12),n=s%12+1;return{y:a,m:n,label:1===n||0===t?`${r[n-1]} ${a}`:r[n-1],x:160*t}}),m=e=>{let{y:t,m:s,day:a}=l(e);return((t-u[0].y)*12+(s-u[0].m))*160+(a-.5)/new Date(t,s,0).getDate()*160},p=a(e).map(a=>{let r=[a,...null===a.parent?n(e,a.id):[]].filter(e=>e.due),l=[],i=r.map(e=>({item:e,x:m(e.due),horizon:e.id===a.id})).sort((e,t)=>e.x-t.x).map(e=>{let a=l.findIndex(t=>e.x>=t);return -1===a&&(a=l.push(0)-1),l[a]=e.x+180,{...e,row:a,state:t(e.item.due,e.item.status,s)}});return{item:a,rows:Math.max(1,l.length),markers:i}});return{months:u.map(({label:e,x:t})=>({label:e,x:t})),width:160*x,todayX:m(s),lanes:p,undated:e.filter(e=>!e.due&&"done"!==e.status)}},"formatDay",0,function(e){let{m:t,day:s}=l(e);return`${s} ${r[t-1]}`}],450768)}]);
|