vibedoc 1.6.0 โ 1.7.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 +2 -0
- package/.next/build-manifest.json +3 -3
- package/.next/prerender-manifest.json +39 -11
- package/.next/routes-manifest.json +12 -0
- package/.next/server/app/(app)/activity/page.js.nft.json +1 -1
- package/.next/server/app/(app)/activity/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/board/page.js.nft.json +1 -1
- package/.next/server/app/(app)/board/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/chat/page/app-paths-manifest.json +3 -0
- package/.next/server/app/(app)/chat/page/build-manifest.json +20 -0
- package/.next/server/app/(app)/chat/page/next-font-manifest.json +11 -0
- package/.next/server/app/(app)/chat/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/(app)/chat/page/server-reference-manifest.json +4 -0
- package/.next/server/app/(app)/chat/page.js +15 -0
- package/.next/server/app/(app)/chat/page.js.map +5 -0
- package/.next/server/app/(app)/chat/page.js.nft.json +1 -0
- package/.next/server/app/(app)/chat/page_client-reference-manifest.js +3 -0
- package/.next/server/app/(app)/docs/page.js.nft.json +1 -1
- package/.next/server/app/(app)/docs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/explorer/page.js.nft.json +1 -1
- package/.next/server/app/(app)/explorer/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/memory/page.js.nft.json +1 -1
- package/.next/server/app/(app)/memory/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/roadmap/page.js.nft.json +1 -1
- package/.next/server/app/(app)/roadmap/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/settings/page.js.nft.json +1 -1
- package/.next/server/app/(app)/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(app)/setup/page.js.nft.json +1 -1
- package/.next/server/app/(app)/setup/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/activity.html +1 -1
- package/.next/server/app/activity.rsc +22 -23
- package/.next/server/app/activity.segments/!KGFwcCk/activity/__PAGE__.segment.rsc +9 -10
- 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.nft.json +1 -1
- package/.next/server/app/api/backlinks/route.js.nft.json +1 -1
- package/.next/server/app/api/chat/route.js.nft.json +1 -1
- package/.next/server/app/api/context/route.js.nft.json +1 -1
- package/.next/server/app/api/conversations/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/conversations/route/build-manifest.json +12 -0
- package/.next/server/app/api/conversations/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/conversations/route.js +9 -0
- package/.next/server/app/api/conversations/route.js.map +5 -0
- package/.next/server/app/api/conversations/route.js.nft.json +1 -0
- package/.next/server/app/api/conversations/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/decisions/route.js.nft.json +1 -1
- package/.next/server/app/api/docs/route.js.nft.json +1 -1
- package/.next/server/app/api/explorer/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/route.js.nft.json +1 -1
- package/.next/server/app/api/memory/route.js.nft.json +1 -1
- package/.next/server/app/api/plan/apply/route.js.nft.json +1 -1
- package/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/.next/server/app/api/registry/route.js.nft.json +1 -1
- package/.next/server/app/api/roadmap/create/route.js.nft.json +1 -1
- package/.next/server/app/api/roadmap/delete/route.js.nft.json +1 -1
- package/.next/server/app/api/roadmap/generate/route.js.nft.json +1 -1
- package/.next/server/app/api/roadmap/layout/route.js.nft.json +1 -1
- package/.next/server/app/api/roadmap/route.js.nft.json +1 -1
- package/.next/server/app/api/roadmap/update/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/.next/server/app/api/setup/generate/route.js.nft.json +1 -1
- package/.next/server/app/api/setup/write/route.js.nft.json +1 -1
- package/.next/server/app/api/summary/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/create/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/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 +9 -10
- 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 -0
- package/.next/server/app/chat.meta +31 -0
- package/.next/server/app/chat.rsc +29 -0
- package/.next/server/app/chat.segments/!KGFwcCk/chat/__PAGE__.segment.rsc +31 -0
- package/.next/server/app/chat.segments/_full.segment.rsc +29 -0
- package/.next/server/app/chat.segments/_tree.segment.rsc +4 -0
- package/.next/server/app/docs.html +1 -1
- package/.next/server/app/docs.rsc +22 -27
- package/.next/server/app/docs.segments/!KGFwcCk/docs/__PAGE__.segment.rsc +6 -6
- package/.next/server/app/docs.segments/_full.segment.rsc +22 -27
- 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 +9 -10
- 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/memory.html +1 -1
- package/.next/server/app/memory.rsc +22 -23
- package/.next/server/app/memory.segments/!KGFwcCk/memory/__PAGE__.segment.rsc +9 -10
- package/.next/server/app/memory.segments/_full.segment.rsc +22 -23
- package/.next/server/app/memory.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/roadmap.html +1 -1
- package/.next/server/app/roadmap.rsc +22 -26
- package/.next/server/app/roadmap.segments/!KGFwcCk/roadmap/__PAGE__.segment.rsc +9 -11
- package/.next/server/app/roadmap.segments/_full.segment.rsc +22 -26
- 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 +9 -10
- 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 +9 -10
- 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 +2 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1htgzmb._.js +3 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_1htgzmb._.js.map +1 -0
- package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0d2_lq6._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1613hjb._.js +4 -4
- package/.next/server/chunks/[root-of-the-server]__1613hjb._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__1jxu2x9._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1jxu2x9._.js.map +1 -0
- package/.next/server/chunks/_1b5fqxy._.js +1 -1
- package/.next/server/chunks/_1b5fqxy._.js.map +1 -1
- package/.next/server/chunks/_next-internal_server_app_api_conversations_route_actions_1-pu7gs.js +3 -0
- package/.next/server/chunks/ssr/{0_nd_mermaid_dist_mermaid_core_mjs_10jvzv6._.js โ 0_nd_mermaid_dist_mermaid_core_mjs_0vv_0i3._.js} +2 -2
- package/.next/server/chunks/ssr/{1u84_katex_dist_katex_mjs_05prlqa._.js โ 1u84_katex_dist_katex_mjs_1z0p1bs._.js} +1 -1
- package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_0cvmffy._.js +3 -0
- package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_0cvmffy._.js.map +1 -0
- package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_0u3jxas._.js +3 -0
- package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_0u3jxas._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0xt_0w2._.js.map +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__11lfnu0._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__11lfnu0._.js.map +1 -0
- package/.next/server/chunks/ssr/_059qmur._.js +3 -0
- package/.next/server/chunks/ssr/_059qmur._.js.map +1 -0
- package/.next/server/chunks/ssr/_081irea._.js +3 -0
- package/.next/server/chunks/ssr/_081irea._.js.map +1 -0
- package/.next/server/chunks/ssr/_0d8t8l4._.js +3 -0
- package/.next/server/chunks/ssr/_0d8t8l4._.js.map +1 -0
- package/.next/server/chunks/ssr/_0dyvcdg._.js +3 -0
- package/.next/server/chunks/ssr/_0dyvcdg._.js.map +1 -0
- package/.next/server/chunks/ssr/_1-ghqy4._.js +3 -0
- package/.next/server/chunks/ssr/_1-ghqy4._.js.map +1 -0
- package/.next/server/chunks/ssr/_17jy5db._.js +3 -0
- package/.next/server/chunks/ssr/_17jy5db._.js.map +1 -0
- package/.next/server/chunks/ssr/_1c95ems._.js +1 -1
- package/.next/server/chunks/ssr/_1c95ems._.js.map +1 -1
- package/.next/server/chunks/ssr/_1dllfz5._.js +4 -0
- package/.next/server/chunks/ssr/_1dllfz5._.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_(app)_chat_page_actions_0g4tbzt.js +3 -0
- package/.next/server/chunks/ssr/node_modules__pnpm_006_c8z._.js +3 -0
- package/.next/server/chunks/ssr/node_modules__pnpm_006_c8z._.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules__pnpm_1kngagu._.js โ node_modules__pnpm_0286-tg._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_1ad2q27._.js โ node_modules__pnpm_04khl_s._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_0ns_6dd._.js โ node_modules__pnpm_07t_e8c._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_0baie09._.js โ node_modules__pnpm_08sqeu2._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_1jfqun_._.js โ node_modules__pnpm_09_i2jk._.js} +1 -1
- package/.next/server/chunks/ssr/node_modules__pnpm_09_i2jk._.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules__pnpm_1o3_0-n._.js โ node_modules__pnpm_0a9b2ei._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_0e15nhj._.js โ node_modules__pnpm_0ah02mu._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_20tdqv_._.js โ node_modules__pnpm_0cj8ryj._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_0wnlgm-._.js โ node_modules__pnpm_0dwi7mu._.js} +2 -2
- package/.next/server/chunks/ssr/node_modules__pnpm_0dwi7mu._.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules__pnpm_1h890n6._.js โ node_modules__pnpm_0f77_ng._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_1u8p2h3._.js โ node_modules__pnpm_0fd3pr1._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules__pnpm_1zu-9we._.js โ node_modules__pnpm_0gifu-u._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules__pnpm_1_o0jyk._.js โ node_modules__pnpm_0jpv2b6._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules__pnpm_1f3lm9p._.js โ node_modules__pnpm_0og06fy._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_12s6q4d._.js โ node_modules__pnpm_0qc3gsk._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_0e3u5g-._.js โ node_modules__pnpm_0ts89ne._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_1moe8b6._.js โ node_modules__pnpm_0ttvopp._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_1ly58kw._.js โ node_modules__pnpm_0u3u82f._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_1hw4h9e._.js โ node_modules__pnpm_0y35hs4._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_0jhh7p5._.js โ node_modules__pnpm_104pzhc._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules__pnpm_1gqkoe3._.js โ node_modules__pnpm_195j8p_._.js} +1 -1
- package/.next/server/chunks/ssr/node_modules__pnpm_1kcnkjs._.js +3 -0
- package/.next/server/chunks/ssr/node_modules__pnpm_1kcnkjs._.js.map +1 -0
- package/.next/server/chunks/ssr/{node_modules__pnpm_0i0uccx._.js โ node_modules__pnpm_1l8k8w1._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_0rd-a9g._.js โ node_modules__pnpm_1w0f1m5._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_1gtgu48._.js โ node_modules__pnpm_1woddr6._.js} +2 -2
- package/.next/server/chunks/ssr/{node_modules__pnpm_0_z3_bl._.js โ node_modules__pnpm_1x0t5_z._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_07_kgbe._.js โ node_modules__pnpm_1xzf8g_._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules__pnpm_08em703._.js โ node_modules__pnpm_1yq90z7._.js} +1 -1
- package/.next/server/chunks/ssr/node_modules__pnpm_1yq90z7._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_(app)_chat_page_tsx_0c3e4l4._.js +3 -0
- package/.next/server/chunks/ssr/src_app_(app)_chat_page_tsx_0c3e4l4._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_(app)_layout_tsx_1yu5hom._.js +3 -0
- package/.next/server/chunks/ssr/src_app_(app)_layout_tsx_1yu5hom._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_(app)_roadmap_page_tsx_0vcq3jr._.js +5 -0
- package/.next/server/chunks/ssr/src_app_(app)_roadmap_page_tsx_0vcq3jr._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_(app)_settings_page_tsx_0zevtee._.js +2 -2
- package/.next/server/chunks/ssr/src_app_(app)_settings_page_tsx_0zevtee._.js.map +1 -1
- package/.next/server/chunks/ssr/src_context_ChatContext_tsx_0lowp8p._.js +5 -0
- package/.next/server/chunks/ssr/src_context_ChatContext_tsx_0lowp8p._.js.map +1 -0
- package/.next/server/chunks/ssr/{_1wf14_u._.js โ src_lib_templates_index_ts_1s61uk7._.js} +2 -2
- package/.next/server/chunks/ssr/{_1wf14_u._.js.map โ src_lib_templates_index_ts_1s61uk7._.js.map} +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/next-font-manifest.js +1 -1
- package/.next/server/next-font-manifest.json +4 -0
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/prefetch-hints.json +19 -0
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/050mq8l4e1ubn.js +1 -0
- package/.next/static/chunks/098le48845_fg.js +3 -0
- package/.next/static/chunks/0cw4-ebkoufdc.js +1 -0
- package/.next/static/chunks/0feo-go1w5nct.js +1 -0
- package/.next/static/chunks/14sefb904pl64.js +21 -0
- package/.next/static/chunks/1fer-wulyrjrs.js +3 -0
- package/.next/static/chunks/1o7b1x4umy8a6.js +1 -0
- package/.next/static/chunks/1q_io1j58aukw.js +1 -0
- package/.next/static/chunks/1t-cgh4477hfo.js +1 -0
- package/.next/static/chunks/1u-1po1qesc9f.js +1 -0
- package/.next/static/chunks/1u5kegkgm0xoz.js +1 -0
- package/.next/static/chunks/24ygzsgd-moqy.js +1 -0
- package/.next/static/chunks/26folxgplfa9t.js +68 -0
- package/.next/static/chunks/2ocixvjhv34_3.js +1 -0
- package/.next/static/chunks/3_lsdgxa-h7ma.css +10 -0
- package/.next/static/chunks/3rmv-sb9w9i3e.js +1 -0
- package/.next/static/chunks/3ttzomivj48jh.js +2 -0
- package/README.md +1 -1
- package/package.json +1 -1
- package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_08ca0b4._.js +0 -3
- package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_08ca0b4._.js.map +0 -1
- package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_0c1k9is._.js +0 -3
- package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_0c1k9is._.js.map +0 -1
- package/.next/server/chunks/ssr/_01suk2m._.js +0 -3
- package/.next/server/chunks/ssr/_01suk2m._.js.map +0 -1
- package/.next/server/chunks/ssr/_0qyglif._.js +0 -5
- package/.next/server/chunks/ssr/_0qyglif._.js.map +0 -1
- package/.next/server/chunks/ssr/_0skuoxv._.js +0 -6
- package/.next/server/chunks/ssr/_0skuoxv._.js.map +0 -1
- package/.next/server/chunks/ssr/_14i_6yb._.js +0 -3
- package/.next/server/chunks/ssr/_14i_6yb._.js.map +0 -1
- package/.next/server/chunks/ssr/_1cbhuz4._.js +0 -3
- package/.next/server/chunks/ssr/_1cbhuz4._.js.map +0 -1
- package/.next/server/chunks/ssr/_1ewk_mn._.js +0 -3
- package/.next/server/chunks/ssr/_1ewk_mn._.js.map +0 -1
- package/.next/server/chunks/ssr/node_modules__pnpm_1dcmsrg._.js +0 -3
- package/.next/server/chunks/ssr/node_modules__pnpm_1dcmsrg._.js.map +0 -1
- package/.next/server/chunks/ssr/src_components_008q3v8._.js +0 -3
- package/.next/server/chunks/ssr/src_components_008q3v8._.js.map +0 -1
- package/.next/static/chunks/02sab26ica2x3.js +0 -1
- package/.next/static/chunks/0eggcu0ovk8sd.js +0 -68
- package/.next/static/chunks/0iva6rdtfqpbz.js +0 -1
- package/.next/static/chunks/0qm101bdsxdyh.css +0 -10
- package/.next/static/chunks/0wg9n5zb8mo2p.js +0 -1
- package/.next/static/chunks/0wjw1laqwg-cr.js +0 -21
- package/.next/static/chunks/0z_y7el6m76yk.js +0 -1
- package/.next/static/chunks/1-ekntoveuxzd.js +0 -4
- package/.next/static/chunks/1g6fxjtlpv6p5.js +0 -1
- package/.next/static/chunks/1ytqu-ra-fylk.js +0 -3
- package/.next/static/chunks/3dlnlsyyysw5m.js +0 -1
- package/.next/static/chunks/3kkg030rcpz7l.js +0 -1
- package/.next/static/chunks/3pf_4ye6ju8gt.js +0 -1
- /package/.next/server/chunks/{ssr/0_nd_mermaid_dist_mermaid_core_mjs_10jvzv6._.js.map โ 11mp_@anthropic-ai_sdk_index_mjs_0d2_lq6._.js.map} +0 -0
- /package/.next/server/chunks/{ssr/1u84_katex_dist_katex_mjs_05prlqa._.js.map โ _next-internal_server_app_api_conversations_route_actions_1-pu7gs.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_08em703._.js.map โ 0_nd_mermaid_dist_mermaid_core_mjs_0vv_0i3._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0wnlgm-._.js.map โ 1u84_katex_dist_katex_mjs_1z0p1bs._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1jfqun_._.js.map โ _next-internal_server_app_(app)_chat_page_actions_0g4tbzt.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1kngagu._.js.map โ node_modules__pnpm_0286-tg._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1ad2q27._.js.map โ node_modules__pnpm_04khl_s._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0ns_6dd._.js.map โ node_modules__pnpm_07t_e8c._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0baie09._.js.map โ node_modules__pnpm_08sqeu2._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1o3_0-n._.js.map โ node_modules__pnpm_0a9b2ei._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0e15nhj._.js.map โ node_modules__pnpm_0ah02mu._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_20tdqv_._.js.map โ node_modules__pnpm_0cj8ryj._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1h890n6._.js.map โ node_modules__pnpm_0f77_ng._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1u8p2h3._.js.map โ node_modules__pnpm_0fd3pr1._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1zu-9we._.js.map โ node_modules__pnpm_0gifu-u._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1_o0jyk._.js.map โ node_modules__pnpm_0jpv2b6._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1f3lm9p._.js.map โ node_modules__pnpm_0og06fy._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_12s6q4d._.js.map โ node_modules__pnpm_0qc3gsk._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0e3u5g-._.js.map โ node_modules__pnpm_0ts89ne._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1moe8b6._.js.map โ node_modules__pnpm_0ttvopp._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1ly58kw._.js.map โ node_modules__pnpm_0u3u82f._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1hw4h9e._.js.map โ node_modules__pnpm_0y35hs4._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0jhh7p5._.js.map โ node_modules__pnpm_104pzhc._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1gqkoe3._.js.map โ node_modules__pnpm_195j8p_._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0i0uccx._.js.map โ node_modules__pnpm_1l8k8w1._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0rd-a9g._.js.map โ node_modules__pnpm_1w0f1m5._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_1gtgu48._.js.map โ node_modules__pnpm_1woddr6._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_0_z3_bl._.js.map โ node_modules__pnpm_1x0t5_z._.js.map} +0 -0
- /package/.next/server/chunks/ssr/{node_modules__pnpm_07_kgbe._.js.map โ node_modules__pnpm_1xzf8g_._.js.map} +0 -0
- /package/.next/static/{ICaoXcRMmgrIFWk8C_Z6D โ uJ5RYxgFnE5svAvnuLDXN}/_buildManifest.js +0 -0
- /package/.next/static/{ICaoXcRMmgrIFWk8C_Z6D โ uJ5RYxgFnE5svAvnuLDXN}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{ICaoXcRMmgrIFWk8C_Z6D โ uJ5RYxgFnE5svAvnuLDXN}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/app/%28app%29/roadmap/page.tsx","../../../../src/components/roadmap/RoadmapTimeline.tsx","../../../../src/components/roadmap/RoadmapItemSheet.tsx","../../../../src/components/roadmap/NewItemDialog.tsx","../../../../src/components/roadmap/PlanFromSpecDialog.tsx","../../../../src/components/roadmap/BreakdownEpicsDialog.tsx","../../../../src/components/roadmap/RoadmapTab.tsx","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/list-tree.ts","../../../../src/lib/work-queue.ts"],"sourcesContent":["\"use client\"\n\nimport { Suspense } from \"react\"\nimport { RoadmapTab } from \"@/components/roadmap/RoadmapTab\"\n\nexport default function RoadmapPage() {\n // main has no fixed height; the canvas needs one (viewport minus the h-12 AppHeader)\n return (\n <div className=\"flex flex-col h-[calc(100svh-3rem)]\">\n <Suspense>\n <RoadmapTab />\n </Suspense>\n </div>\n )\n}\n","\"use client\"\n\nimport { useEffect, useMemo, useRef } from \"react\"\nimport { cn } from \"@/lib/utils\"\nimport type { RoadmapItem } from \"@/types\"\nimport type { RoadmapProgress } from \"@/lib/roadmap-health\"\nimport { StatusDot } from \"./RoadmapNodes\"\nimport { AgentDot } from \"@/components/chat/AgentMark\"\nimport { LANE_ROW_H, buildTimeline, formatDay } from \"./timeline\"\n\nconst LANE_LABEL_W = 200\nconst HEADER_H = 36\n\ninterface RoadmapTimelineProps {\n items: RoadmapItem[]\n today: string\n onSelect: (id: string) => void\n progressById: Record<string, RoadmapProgress>\n}\n\nexport function RoadmapTimeline({ items, today, onSelect, progressById }: RoadmapTimelineProps) {\n // same chapter numbers as the map: real horizons by order\n const chapters = new Map(items.filter((i) => i.parent === null).sort((a, b) => a.order - b.order).map((h, i) => [h.id, i + 1]))\n const tl = useMemo(() => buildTimeline(items, today), [items, today])\n const scrollRef = useRef<HTMLDivElement>(null)\n\n // open with today about a third from the left\n useEffect(() => {\n const el = scrollRef.current\n if (el) el.scrollLeft = Math.max(0, tl.todayX - (el.clientWidth - LANE_LABEL_W) / 3)\n }, [tl.todayX])\n\n const hasDates = tl.lanes.some((l) => l.markers.length > 0)\n\n return (\n <div className=\"flex flex-1 min-h-0 flex-col\">\n <div ref={scrollRef} className=\"relative flex-1 min-h-0 overflow-auto\">\n <div className=\"relative\" style={{ width: LANE_LABEL_W + tl.width, minHeight: \"100%\" }}>\n {/* month grid + today line, behind the lanes */}\n <div className=\"pointer-events-none absolute inset-y-0\" style={{ left: LANE_LABEL_W, width: tl.width }}>\n {tl.months.map((m) => (\n <div key={m.x} className=\"absolute inset-y-0 border-l border-border\" style={{ left: m.x }} />\n ))}\n <div className=\"absolute inset-y-0 left-0 bg-surface/50\" style={{ width: tl.todayX }} />\n <div className=\"absolute inset-y-0 w-px bg-accent shadow-[0_0_12px_rgb(var(--rgb-accent)/0.8)]\" style={{ left: tl.todayX }}>\n <span\n className=\"absolute -translate-x-1/2 rounded-full bg-accent px-2 py-0.5 font-mono text-[10px] uppercase tracking-wider text-white\"\n style={{ top: HEADER_H + 6 }}\n >\n Today\n </span>\n </div>\n </div>\n\n {/* month header */}\n <div className=\"sticky top-0 z-20 flex border-b border-border bg-bg\" style={{ height: HEADER_H }}>\n <div className=\"sticky left-0 z-10 shrink-0 bg-bg\" style={{ width: LANE_LABEL_W }} />\n <div className=\"relative\">\n {tl.months.map((m) => (\n <span key={m.x} className=\"absolute top-3 whitespace-nowrap pl-2 font-mono text-[10px] uppercase tracking-widest text-muted\" style={{ left: m.x }}>\n {m.label}\n </span>\n ))}\n </div>\n </div>\n\n {tl.lanes.map((lane) => (\n <div key={lane.item.id} className=\"relative flex border-b border-border\">\n <LaneLabel item={lane.item} chapter={chapters.get(lane.item.id)} progress={progressById[lane.item.id]} onSelect={onSelect} />\n <div className=\"relative\" style={{ width: tl.width, height: lane.rows * LANE_ROW_H + 12 }}>\n {lane.markers.map((mk) => (\n <button\n key={mk.item.id}\n type=\"button\"\n onClick={() => onSelect(mk.item.id)}\n title={`${mk.item.id} ยท ${mk.item.title} ยท due ${mk.item.due}${mk.state === \"overdue\" ? \" (overdue)\" : \"\"}`}\n className=\"group absolute flex items-center gap-1.5\"\n style={{ left: mk.x - 10, top: 6 + mk.row * LANE_ROW_H }}\n >\n {mk.horizon ? (\n <span\n className={cn(\n \"h-4 w-4 rotate-45 border-2 border-accent\",\n mk.item.status === \"done\" ? \"bg-accent\" : \"bg-bg\",\n mk.state === \"overdue\" && \"border-danger\",\n )}\n />\n ) : (\n <span className={cn(\"rounded-full\", mk.state === \"overdue\" && \"ring-2 ring-danger ring-offset-1 ring-offset-bg\")}>\n <StatusDot status={mk.item.status} />\n </span>\n )}\n <span\n className={cn(\n \"flex max-w-[150px] flex-col rounded-md border px-2 py-0.5 text-left transition-colors\",\n mk.item.status === \"in-progress\" ? \"border-accent/50 bg-surface shadow-[0_6px_18px_-10px_rgb(var(--rgb-accent)/0.7)]\"\n : mk.item.status === \"done\" ? \"border-border bg-surface/60\" : \"border-dashed border-border2 bg-bg\",\n \"group-hover:border-accent\",\n )}\n >\n <span className=\"flex items-center gap-1\">\n <span className={cn(\"truncate text-xs\", mk.item.status === \"done\" ? \"text-muted\" : \"text-txt\", mk.horizon && \"font-semibold\")}>\n {mk.item.title}\n </span>\n <AgentDot attach={{ kind: \"epic\", id: mk.item.id }} />\n </span>\n <span\n className={cn(\n \"font-mono text-[10px]\",\n mk.state === \"overdue\" ? \"text-danger\" : mk.state === \"soon\" ? \"text-amber\" : \"text-muted\",\n )}\n >\n {formatDay(mk.item.due as string)}\n </span>\n </span>\n </button>\n ))}\n </div>\n </div>\n ))}\n\n {!hasDates && (\n <p className=\"px-6 py-8 text-sm text-muted\" style={{ marginLeft: LANE_LABEL_W }}>\n No due dates yet โ open an item and set a Due date.\n </p>\n )}\n </div>\n </div>\n\n {tl.undated.length > 0 && (\n <div className=\"max-h-28 shrink-0 overflow-y-auto border-t border-border bg-surface px-4 py-2\">\n <p className=\"mb-2 font-mono text-[10px] uppercase tracking-widest text-muted\">No due date ยท {tl.undated.length}</p>\n <div className=\"flex flex-wrap gap-1.5\">\n {tl.undated.map((i) => (\n <button\n key={i.id}\n type=\"button\"\n onClick={() => onSelect(i.id)}\n className=\"flex items-center gap-1 rounded-md border border-border px-1.5 py-0.5 text-xs text-muted hover:border-accent hover:text-txt\"\n >\n <StatusDot status={i.status} />\n {i.title}\n <AgentDot attach={{ kind: \"epic\", id: i.id }} />\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n )\n}\n\nfunction LaneLabel({ item, chapter, progress, onSelect }: {\n item: RoadmapItem\n chapter?: number\n progress?: RoadmapProgress\n onSelect: (id: string) => void\n}) {\n return (\n <button\n type=\"button\"\n onClick={() => onSelect(item.id)}\n className=\"sticky left-0 z-10 flex shrink-0 items-center gap-3 border-r border-border bg-surface px-3 text-left hover:bg-surface2\"\n style={{ width: LANE_LABEL_W }}\n >\n <span\n className={cn(\n \"font-mono text-lg font-semibold tabular-nums\",\n item.status === \"in-progress\" ? \"text-accent\" : item.status === \"done\" ? \"text-teal\" : \"text-muted\",\n )}\n >\n {chapter ? String(chapter).padStart(2, \"0\") : \"ยทยท\"}\n </span>\n <span className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <span className=\"line-clamp-2 text-[11px] font-semibold uppercase leading-snug tracking-wider text-txt\">{item.title}</span>\n {progress && (\n <span className=\"h-1 overflow-hidden rounded-full bg-border\">\n <span className=\"block h-full rounded-full bg-teal\" style={{ width: `${(progress.done / progress.total) * 100}%` }} />\n </span>\n )}\n </span>\n </button>\n )\n}\n","\"use client\"\n\nimport { useState } from \"react\"\nimport { Bot, ChevronRight, FileText, MessageSquare, Pencil, Plus } from \"lucide-react\"\nimport { Sheet, SheetContent, SheetDescription, SheetTitle } from \"@/components/ui/sheet\"\nimport { Input } from \"@/components/ui/input\"\nimport { Button } from \"@/components/ui/button\"\nimport { MarkdownRenderer } from \"@/components/docs/MarkdownRenderer\"\nimport { cn } from \"@/lib/utils\"\nimport { askAgent } from \"@/lib/ask-agent\"\nimport { chatFor } from \"@/lib/chats\"\nimport { AgentDot, AgentMark } from \"@/components/chat/AgentMark\"\nimport { useChats } from \"@/context/ChatContext\"\nimport { dueState, localToday, type RoadmapProgress } from \"@/lib/roadmap-health\"\nimport { pickNextTask } from \"@/lib/work-queue\"\nimport { DueChip, SegmentedProgress, StatusDot, StatusPill, TASK_STATUS_BG } from \"./RoadmapNodes\"\nimport type { RoadmapItem, RoadmapStatus, Task, TaskStatus, UpdateRoadmapItemPatch } from \"@/types\"\n\nconst STATUSES: RoadmapStatus[] = [\"planned\", \"in-progress\", \"done\"]\n\nconst FIELD = \"w-full rounded-md border border-border bg-bg px-3 py-2 text-sm text-txt focus:outline-hidden focus:ring-1 focus:ring-accent disabled:opacity-50\"\nconst LABEL = \"text-xs font-medium text-muted\"\nconst SECTION = \"font-mono text-[10px] uppercase tracking-widest text-muted\"\n\ninterface RoadmapItemSheetProps {\n item: RoadmapItem | null\n items: RoadmapItem[]\n onClose: () => void\n /** Each returns an error message, or null on success. */\n onSave: (id: string, patch: UpdateRoadmapItemPatch) => Promise<string | null>\n onDelete: (id: string) => Promise<string | null>\n onAddFeature: (parentId: string) => void\n onEditRaw: (file: string) => void\n onSelect: (id: string) => void\n /** Every task on the board, by id โ the epic's linked tasks are looked up here. */\n tasksById: Record<string, Task>\n progressById: Record<string, RoadmapProgress>\n}\n\nexport function RoadmapItemSheet({ item, onClose, ...rest }: RoadmapItemSheetProps) {\n return (\n <Sheet open={!!item} onOpenChange={(v) => { if (!v) onClose() }}>\n <SheetContent className=\"w-[480px] sm:max-w-[480px] gap-0 bg-surface border-border text-txt flex flex-col overflow-y-auto p-0\">\n {/* keyed so view/edit and form state re-initialise when a different item opens */}\n {item && <ItemPanel key={item.id} item={item} onClose={onClose} {...rest} />}\n </SheetContent>\n </Sheet>\n )\n}\n\nfunction ItemPanel(props: RoadmapItemSheetProps & { item: RoadmapItem }) {\n const [editing, setEditing] = useState(false)\n return editing\n ? <ItemForm {...props} onCancel={() => setEditing(false)} />\n : <ItemView {...props} onEdit={() => setEditing(true)} />\n}\n\n/** Read-first view: where it sits, how far along, what's next, and the brief. */\nfunction ItemView({ item, items, onClose, onAddFeature, onEditRaw, onSelect, tasksById, progressById, onEdit }: RoadmapItemSheetProps & { item: RoadmapItem; onEdit: () => void }) {\n const isHorizon = item.parent === null\n const parent = items.find((i) => i.id === item.parent)\n const epics = items.filter((i) => i.parent === item.id).sort((a, b) => a.order - b.order)\n const progress = progressById[item.id]\n const today = localToday()\n const { chats, showAbout } = useChats()\n const chat = isHorizon ? undefined : chatFor(chats, { kind: \"epic\", id: item.id })\n const offerBreakdown = !isHorizon && item.tasks.length === 0 && !chat\n\n return (\n <div className=\"flex min-h-full flex-col\">\n <header className={cn(\"border-b border-border px-6 pb-5 pt-6\", item.status === \"in-progress\" && \"bg-[linear-gradient(180deg,rgb(var(--rgb-accent)/0.08),transparent)]\")}>\n <SheetDescription asChild>\n <div className=\"flex items-center gap-1 pr-8 font-mono text-[11px] text-muted\">\n {parent && (\n <>\n <button type=\"button\" onClick={() => onSelect(parent.id)} className=\"truncate hover:text-txt\">{parent.title}</button>\n <ChevronRight className=\"h-3 w-3 shrink-0\" />\n </>\n )}\n <span className=\"shrink-0\">{item.id} ยท {isHorizon ? \"horizon\" : \"epic\"}</span>\n </div>\n </SheetDescription>\n <SheetTitle className=\"mt-2 text-xl font-semibold leading-tight text-txt\">{item.title}</SheetTitle>\n <div className=\"mt-3 flex flex-wrap items-center gap-3\">\n <StatusPill status={item.status} />\n <AgentMark attach={{ kind: \"epic\", id: item.id }} />\n <DueChip due={item.due} state={dueState(item.due, item.status, today)} />\n </div>\n {progress && (\n <div className=\"mt-5 flex items-end gap-4\">\n <p className=\"font-mono text-3xl font-semibold leading-none tabular-nums text-txt\">\n {Math.round((progress.done / progress.total) * 100)}<span className=\"text-base text-muted\">%</span>\n </p>\n <div className=\"flex-1 pb-1\">\n <p className=\"mb-1.5 font-mono text-[10px] text-muted\">{progress.done} of {progress.total}{isHorizon ? \"\" : \" tasks\"} done</p>\n {isHorizon ? (\n <div className=\"h-1.5 overflow-hidden rounded-full bg-border\">\n <div className=\"h-full rounded-full bg-teal\" style={{ width: `${(progress.done / progress.total) * 100}%` }} />\n </div>\n ) : (\n <SegmentedProgress statuses={item.tasks.map((id) => tasksById[id]?.status).filter((s): s is TaskStatus => !!s && s !== \"cancelled\")} />\n )}\n </div>\n </div>\n )}\n </header>\n\n <div className=\"flex flex-1 flex-col gap-6 px-6 py-5\">\n {!isHorizon && item.tasks.length > 0 && <LinkedTasks item={item} tasksById={tasksById} onOpen={onEditRaw} />}\n\n {isHorizon && (\n <section className=\"flex flex-col gap-2\">\n <p className={SECTION}>Epics ยท {epics.length}</p>\n {epics.length === 0 && <p className=\"text-sm text-muted\">No epics yet.</p>}\n <ul className=\"-mx-2 flex flex-col\">\n {epics.map((e) => {\n const p = progressById[e.id]\n return (\n <li key={e.id}>\n <button type=\"button\" onClick={() => onSelect(e.id)} className=\"flex w-full items-center gap-3 rounded-md px-2 py-2 text-left hover:bg-surface2\">\n <StatusDot status={e.status} />\n <span className=\"shrink-0 font-mono text-[11px] text-muted\">{e.id}</span>\n <span className={cn(\"min-w-0 flex-1 truncate text-sm\", e.status === \"done\" ? \"text-muted\" : \"text-txt\")}>{e.title}</span>\n {p && <span className=\"shrink-0 font-mono text-[10px] text-muted\">{p.done}/{p.total}</span>}\n </button>\n </li>\n )\n })}\n </ul>\n </section>\n )}\n\n <section className=\"flex flex-col gap-2\">\n <p className={SECTION}>Brief</p>\n {item.body.trim()\n ? <MarkdownRenderer content={item.body} className=\"text-sm\" />\n : <p className=\"text-sm text-muted\">No description. Edit to add the outcome, scope and “done when”.</p>}\n </section>\n </div>\n\n <footer className=\"sticky bottom-0 flex flex-wrap items-center gap-2 border-t border-border bg-surface px-6 py-3\">\n {offerBreakdown && (\n <Button size=\"sm\" onClick={() => { onClose(); askAgent(`Break down epic ${item.id} into tasks.`) }} className=\"bg-accent text-white hover:bg-accent/90\">\n <Bot /> Break down with agent\n </Button>\n )}\n {!isHorizon && (\n <Button\n size=\"sm\"\n variant={offerBreakdown ? \"outline\" : \"default\"}\n onClick={() => { onClose(); showAbout({ kind: \"epic\", id: item.id }) }}\n className={cn(!offerBreakdown && \"bg-accent text-white hover:bg-accent/90\")}\n >\n <MessageSquare /> {chat ? \"Open chat\" : \"Chat\"}\n </Button>\n )}\n {isHorizon && (\n <Button size=\"sm\" onClick={() => onAddFeature(item.id)} className=\"bg-accent text-white hover:bg-accent/90\">\n <Plus /> Add epic\n </Button>\n )}\n <Button size=\"sm\" variant=\"outline\" onClick={onEdit}>\n <Pencil /> Edit\n </Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={() => onEditRaw(item.file)} className=\"ml-auto text-muted hover:text-txt\">\n <FileText /> Open file\n </Button>\n </footer>\n </div>\n )\n}\n\nfunction ItemForm({ item, items, onClose, onSave, onDelete, onCancel }: RoadmapItemSheetProps & { item: RoadmapItem; onCancel: () => void }) {\n // snapshot at open: the dirty check diffs against this, not the live (SSE-refreshed) item\n const [base] = useState(item)\n const [title, setTitle] = useState(item.title)\n const [status, setStatus] = useState<RoadmapStatus>(item.status)\n const [parent, setParent] = useState(item.parent ?? \"\")\n const [order, setOrder] = useState(String(item.order))\n const [tasks, setTasks] = useState(item.tasks.join(\", \"))\n const [due, setDue] = useState(item.due ?? \"\")\n const [body, setBody] = useState(item.body)\n const [error, setError] = useState<string | null>(null)\n const [busy, setBusy] = useState(false)\n\n const hasChildren = items.some((i) => i.parent === item.id)\n const horizons = items.filter((i) => i.parent === null && i.id !== item.id)\n const isHorizon = item.parent === null\n const orphanParent = item.parent !== null && !horizons.some((h) => h.id === item.parent)\n\n async function run(fn: () => Promise<string | null>) {\n setBusy(true)\n setError(null)\n const err = await fn()\n setBusy(false)\n if (err) setError(err)\n return !err\n }\n\n async function save() {\n // Send only fields the user changed, so concurrent edits (AI / other tab) to other fields survive.\n const patch: UpdateRoadmapItemPatch = {}\n const nextTitle = title.trim() || base.title\n if (nextTitle !== base.title) patch.title = nextTitle\n if (status !== base.status) patch.status = status\n if ((parent || null) !== base.parent) patch.parent = parent || null\n if (order.trim() !== String(base.order)) {\n const n = Number(order)\n if (order.trim() === \"\" || !Number.isFinite(n)) {\n setError(\"Order must be a number\")\n return\n }\n patch.order = n\n }\n const nextTasks = tasks.split(\",\").map((t) => t.trim()).filter(Boolean)\n if (nextTasks.join(\",\") !== base.tasks.join(\",\")) patch.tasks = nextTasks\n if ((due || null) !== base.due) patch.due = due || null\n if (body !== base.body) patch.body = body\n if (Object.keys(patch).length === 0) {\n onCancel()\n return\n }\n if (await run(() => onSave(item.id, patch))) onClose()\n }\n\n async function remove() {\n if (!window.confirm(`Delete ${item.id}: ${item.title}?`)) return\n if (await run(() => onDelete(item.id))) onClose()\n }\n\n return (\n <div className=\"flex min-h-full flex-col\">\n <div className=\"border-b border-border px-6 pb-4 pt-6 pr-12\">\n <SheetDescription className=\"font-mono text-[11px] text-muted\">Editing {item.id} ยท {isHorizon ? \"horizon\" : \"epic\"}</SheetDescription>\n <SheetTitle className=\"mt-1 text-base text-txt\">{item.title}</SheetTitle>\n </div>\n\n <div className=\"flex flex-1 flex-col gap-4 px-6 py-5\">\n <label className=\"flex flex-col gap-1\">\n <span className={LABEL}>Title</span>\n <Input value={title} onChange={(e) => setTitle(e.target.value)} className=\"bg-bg border-border text-txt\" />\n </label>\n\n <div className=\"grid grid-cols-3 gap-3\">\n <label className=\"flex flex-col gap-1\">\n <span className={LABEL}>Status</span>\n <select value={status} onChange={(e) => setStatus(e.target.value as RoadmapStatus)} className={FIELD}>\n {STATUSES.map((s) => <option key={s} value={s}>{s}</option>)}\n </select>\n </label>\n <label className=\"flex flex-col gap-1\">\n <span className={LABEL}>Parent</span>\n <select\n value={parent}\n onChange={(e) => setParent(e.target.value)}\n disabled={hasChildren}\n title={hasChildren ? \"Items with children must stay on the spine\" : undefined}\n className={FIELD}\n >\n <option value=\"\">โ (horizon)</option>\n {orphanParent && <option value={item.parent ?? \"\"}>{item.parent} ยท missing</option>}\n {horizons.map((h) => <option key={h.id} value={h.id}>{h.id} ยท {h.title}</option>)}\n </select>\n </label>\n <label className=\"flex flex-col gap-1\">\n <span className={LABEL}>Order</span>\n <Input\n type=\"number\"\n step={10}\n value={order}\n onChange={(e) => setOrder(e.target.value)}\n title={isHorizon ? \"Position on the spine\" : \"Position within the branch\"}\n className=\"bg-bg border-border text-txt\"\n />\n </label>\n </div>\n\n <label className=\"flex flex-col gap-1\">\n <span className={LABEL}>Due</span>\n <div className=\"flex items-center gap-2\">\n <Input\n type=\"date\"\n value={due}\n onChange={(e) => setDue(e.target.value)}\n className=\"bg-bg border-border text-txt scheme-light dark:scheme-dark\"\n />\n {due && (\n <button type=\"button\" onClick={() => setDue(\"\")} className=\"text-xs text-muted hover:text-txt\">\n Clear\n </button>\n )}\n </div>\n </label>\n\n <label className=\"flex flex-col gap-1\">\n <span className={LABEL}>Tasks</span>\n <Input\n value={tasks}\n onChange={(e) => setTasks(e.target.value)}\n placeholder=\"T001, T012\"\n className=\"bg-bg border-border text-txt font-mono\"\n />\n </label>\n\n <label className=\"flex flex-col gap-1\">\n <span className={LABEL}>Body (markdown)</span>\n <textarea value={body} onChange={(e) => setBody(e.target.value)} rows={12} className={`${FIELD} font-mono resize-y`} />\n </label>\n\n {error && <p className=\"text-xs text-danger\">{error}</p>}\n </div>\n\n <footer className=\"sticky bottom-0 flex items-center gap-2 border-t border-border bg-surface px-6 py-3\">\n <Button size=\"sm\" onClick={save} disabled={busy} className=\"bg-accent text-white hover:bg-accent/90\">\n Save\n </Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={onCancel} disabled={busy} className=\"text-txt\">\n Cancel\n </Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={remove} disabled={busy} className=\"ml-auto text-danger hover:text-danger\">\n Delete\n </Button>\n </footer>\n </div>\n )\n}\n\nfunction LinkedTasks({ item, tasksById, onOpen }: {\n item: RoadmapItem\n tasksById: Record<string, Task>\n onOpen: (file: string) => void\n}) {\n const today = localToday()\n const next = pickNextTask(item, Object.values(tasksById))\n const nextId = next.kind === \"ready\" ? next.taskId : null\n // Todo tasks' \"waits on โฆ\" first: in-progress/blocked rows already say so in their badge.\n const reasons = next.kind === \"waiting\"\n ? [...next.waiting].sort((a, b) => Number(tasksById[b.taskId]?.status === \"todo\") - Number(tasksById[a.taskId]?.status === \"todo\")).map((w) => w.reason)\n : []\n return (\n <section className=\"flex flex-col gap-2\">\n <p className={SECTION}>Tasks ยท {item.tasks.length}</p>\n <ul className=\"-mx-2 flex flex-col\">\n {item.tasks.map((id) => {\n const t = tasksById[id]\n if (!t) {\n return (\n <li key={id} className=\"px-2 py-2 font-mono text-xs text-danger\">{id} ยท missing task file</li>\n )\n }\n const isNext = t.id === nextId\n return (\n <li key={id} className={cn(\"group flex items-center rounded-md hover:bg-surface2\", isNext && \"bg-accent/10 hover:bg-accent/15\")}>\n <button\n type=\"button\"\n onClick={() => onOpen(t.file)}\n className=\"flex min-w-0 flex-1 items-center gap-3 px-2 py-2 text-left\"\n >\n <span title={t.status} className={cn(\"h-2 w-2 shrink-0 rounded-full\", TASK_STATUS_BG[t.status])} />\n <span className=\"shrink-0 font-mono text-[11px] text-muted\">{t.id}</span>\n <span className={cn(\"min-w-0 flex-1 truncate text-sm\", t.status === \"cancelled\" ? \"text-muted line-through\" : t.status === \"done\" ? \"text-muted\" : \"text-txt\")}>\n {t.title}\n </span>\n <DueChip due={t.due} state={dueState(t.due, t.status === \"done\" ? \"done\" : \"planned\", today)} />\n {isNext\n ? <span className=\"shrink-0 font-mono text-[10px] uppercase tracking-wider text-accent\">Next up</span>\n : t.size && t.size !== \"โ\" && <span className=\"shrink-0 font-mono text-[10px] text-muted\">{t.size.split(\" \")[0]}</span>}\n <AgentDot attach={{ kind: \"task\", id: t.id }} />\n </button>\n <TaskChatButton taskId={t.id} />\n </li>\n )\n })}\n </ul>\n {reasons.length > 0 && (\n <p className=\"truncate text-xs text-muted\" title={reasons.join(\"\\n\")}>\n {reasons[0]}{reasons.length > 1 && ` (+${reasons.length - 1} more)`}\n </p>\n )}\n </section>\n )\n}\n\n/** Per-task chat entry in the epic sheet: always visible when a chat exists, on hover otherwise. */\nfunction TaskChatButton({ taskId }: { taskId: string }) {\n const { chats, showAbout } = useChats()\n const has = !!chatFor(chats, { kind: \"task\", id: taskId })\n return (\n <button\n type=\"button\"\n onClick={() => showAbout({ kind: \"task\", id: taskId })}\n aria-label={`${has ? \"Open chat\" : \"Chat\"} about ${taskId}`}\n title={has ? `Open the chat about ${taskId}` : `Chat about ${taskId}`}\n className={cn(\n \"mr-1 grid size-7 shrink-0 place-items-center rounded-md text-muted transition-[opacity,color] duration-(--duration-fast) hover:bg-surface hover:text-accent focus-visible:opacity-100\",\n has ? \"text-accent opacity-100\" : \"opacity-0 group-hover:opacity-100\",\n )}\n >\n <MessageSquare className=\"size-3.5\" />\n </button>\n )\n}\n","\"use client\"\n\nimport { useState } from \"react\"\nimport { Dialog, DialogContent, DialogTitle } from \"@/components/ui/dialog\"\nimport { Input } from \"@/components/ui/input\"\nimport { Button } from \"@/components/ui/button\"\n\ninterface NewItemDialogProps {\n open: boolean\n heading: string\n onOpenChange: (open: boolean) => void\n /** Returns an error message to show, or null on success. */\n onSubmit: (title: string) => Promise<string | null>\n}\n\nexport function NewItemDialog({ open, heading, onOpenChange, onSubmit }: NewItemDialogProps) {\n const [title, setTitle] = useState(\"\")\n const [error, setError] = useState<string | null>(null)\n const [busy, setBusy] = useState(false)\n\n function close(v: boolean) {\n if (!v) {\n setTitle(\"\")\n setError(null)\n }\n onOpenChange(v)\n }\n\n async function submit(e: React.FormEvent) {\n e.preventDefault()\n if (!title.trim()) return\n setBusy(true)\n const err = await onSubmit(title.trim())\n setBusy(false)\n if (err) setError(err)\n else close(false)\n }\n\n return (\n <Dialog open={open} onOpenChange={close}>\n <DialogContent className=\"max-w-sm bg-surface border-border text-txt\">\n <DialogTitle className=\"text-sm font-semibold text-txt\">{heading}</DialogTitle>\n <form onSubmit={submit} className=\"flex flex-col gap-3\">\n <Input\n autoFocus\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n placeholder=\"Title\"\n className=\"bg-bg border-border text-txt\"\n />\n {error && <p className=\"text-xs text-danger\">{error}</p>}\n <div className=\"flex justify-end gap-2\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => close(false)}>\n Cancel\n </Button>\n <Button type=\"submit\" size=\"sm\" disabled={busy || !title.trim()} className=\"bg-accent text-white hover:bg-accent/90\">\n Create\n </Button>\n </div>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","\"use client\"\n\nimport { useState } from \"react\"\nimport { Dialog, DialogContent, DialogTitle } from \"@/components/ui/dialog\"\nimport { Button } from \"@/components/ui/button\"\nimport { askAgent } from \"@/lib/ask-agent\"\n\ninterface PlanFromSpecDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n}\n\n/** Paste a feature spec โ the chat agent breaks it into tasks (new epic, existing epic, or loose). */\nexport function PlanFromSpecDialog({ open, onOpenChange }: PlanFromSpecDialogProps) {\n // Kept after submit (cleared only on Cancel): if the running-agent cap refuses the ask, reopening restores the spec.\n const [spec, setSpec] = useState(\"\")\n\n function submit(e: React.FormEvent) {\n e.preventDefault()\n if (!spec.trim()) return\n onOpenChange(false)\n askAgent(`Break down this spec into tasks:\\n\\n${spec.trim()}`)\n }\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-w-lg bg-surface border-border text-txt\">\n <DialogTitle className=\"text-sm font-semibold text-txt\">Plan from spec</DialogTitle>\n <form onSubmit={submit} className=\"flex flex-col gap-3\">\n <textarea\n autoFocus\n value={spec}\n onChange={(e) => setSpec(e.target.value)}\n placeholder=\"Paste a feature specโฆ\"\n rows={12}\n className=\"w-full resize-y rounded-md border border-border bg-bg px-3 py-2 text-sm text-txt placeholder:text-muted focus:outline-none focus:ring-1 focus:ring-accent\"\n />\n <p className=\"text-xs text-muted\">The agent asks where the tasks go (a new epic, an existing epic, or no epic) and shows a plan before writing anything.</p>\n <div className=\"flex justify-end gap-2\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => { setSpec(\"\"); onOpenChange(false) }}>\n Cancel\n </Button>\n <Button type=\"submit\" size=\"sm\" disabled={!spec.trim()} className=\"bg-accent text-white hover:bg-accent/90\">\n Break down\n </Button>\n </div>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","\"use client\"\n\nimport { useState } from \"react\"\nimport { Dialog, DialogContent, DialogTitle } from \"@/components/ui/dialog\"\nimport { Button } from \"@/components/ui/button\"\nimport { askAgent } from \"@/lib/ask-agent\"\nimport { MAX_RUNNING_CHATS } from \"@/lib/chats\"\nimport { useChats } from \"@/context/ChatContext\"\nimport type { RoadmapItem } from \"@/types\"\n\ninterface BreakdownEpicsDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n items: RoadmapItem[]\n}\n\n/** Not-done epics grouped by horizon (spine order); within a horizon, epics with no tasks first. */\nfunction epicGroups(items: RoadmapItem[]) {\n const byOrder = (a: RoadmapItem, b: RoadmapItem) => a.order - b.order\n return items\n .filter((i) => i.parent === null)\n .sort(byOrder)\n .map((h) => ({\n horizon: h,\n epics: items\n .filter((i) => i.parent === h.id && i.status !== \"done\")\n .sort((a, b) => Number(a.tasks.length > 0) - Number(b.tasks.length > 0) || byOrder(a, b)),\n }))\n .filter((g) => g.epics.length > 0)\n}\n\n/** Tick several epics โ one breakdown chat per epic, all running at once (capped by free agent slots). */\nexport function BreakdownEpicsDialog({ open, onOpenChange, items }: BreakdownEpicsDialogProps) {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-w-lg bg-surface border-border text-txt\">\n <DialogTitle className=\"text-sm font-semibold text-txt\">Break down epics</DialogTitle>\n {/* Mounted only while open, so the default selection is recomputed on every open */}\n <BreakdownForm items={items} onDone={() => onOpenChange(false)} />\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction BreakdownForm({ items, onDone }: { items: RoadmapItem[]; onDone: () => void }) {\n const groups = epicGroups(items)\n const [checked, setChecked] = useState(\n () => new Set(groups.flatMap((g) => g.epics.filter((e) => e.tasks.length === 0).map((e) => e.id))),\n )\n const running = useChats().runningCount\n const free = Math.max(0, MAX_RUNNING_CHATS - running)\n const over = checked.size > free\n\n function toggle(id: string) {\n setChecked((s) => {\n const next = new Set(s)\n if (!next.delete(id)) next.add(id)\n return next\n })\n }\n\n function submit(e: React.FormEvent) {\n e.preventDefault()\n if (!checked.size || over) return\n onDone()\n // Spine order, same message as the single-epic \"Break down with agent\"\n for (const g of groups) for (const epic of g.epics) {\n if (checked.has(epic.id)) askAgent(`Break down epic ${epic.id} into tasks.`, { newChat: true })\n }\n }\n\n return (\n <form onSubmit={submit} className=\"flex flex-col gap-3\">\n <div className=\"max-h-[50vh] overflow-y-auto rounded-md border border-border\">\n {groups.map((g) => (\n <div key={g.horizon.id}>\n <div className=\"sticky top-0 bg-surface2 px-3 py-1 text-[10px] font-mono uppercase tracking-widest text-muted\">\n {g.horizon.id} ยท {g.horizon.title}\n </div>\n <ul>\n {g.epics.map((epic) => {\n const on = checked.has(epic.id)\n return (\n <li key={epic.id} className=\"border-b border-border last:border-b-0\">\n <label className=\"flex items-start gap-2 px-3 py-1.5 text-xs cursor-pointer has-[:disabled]:cursor-not-allowed\">\n <input\n type=\"checkbox\"\n checked={on}\n disabled={!on && checked.size >= free}\n onChange={() => toggle(epic.id)}\n className=\"mt-0.5 accent-accent\"\n />\n <span className=\"flex-1 min-w-0 text-txt\">\n <span className=\"font-mono text-muted mr-1\">{epic.id}</span>{epic.title}\n </span>\n {epic.tasks.length > 0 && (\n <span className=\"shrink-0 text-[10px] font-mono text-muted\">has {epic.tasks.length} task{epic.tasks.length === 1 ? \"\" : \"s\"}</span>\n )}\n </label>\n </li>\n )\n })}\n </ul>\n </div>\n ))}\n </div>\n <p className={over || free === 0 ? \"text-xs text-amber\" : \"text-xs text-muted\"}>\n {free === 0\n ? `All ${MAX_RUNNING_CHATS} agent slots are busy. Stop a chat or wait for one to finish.`\n : over\n ? `${checked.size} selected, but only ${free} of ${MAX_RUNNING_CHATS} agent slots ${free === 1 ? \"is\" : \"are\"} free (${running} running). Uncheck some or stop a chat.`\n : `One chat per epic, running at once (${free} of ${MAX_RUNNING_CHATS} agent slots free). Each shows a plan before writing anything.`}\n </p>\n <div className=\"flex justify-end gap-2\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={onDone}>\n Cancel\n </Button>\n <Button type=\"submit\" size=\"sm\" disabled={!checked.size || over} className=\"bg-accent text-white hover:bg-accent/90\">\n Break down {checked.size || \"\"} epic{checked.size === 1 ? \"\" : \"s\"}\n </Button>\n </div>\n </form>\n )\n}\n","\"use client\"\n\nimport { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from \"react\"\nimport {\n Background,\n BackgroundVariant,\n Controls,\n Position,\n ReactFlow,\n applyNodeChanges,\n type Edge,\n type NodeChange,\n type ReactFlowInstance,\n} from \"@xyflow/react\"\nimport \"@xyflow/react/dist/style.css\"\n\nconst MIN_INITIAL_ZOOM = 0.75\nconst VIEWPORT_PAD = 40\nimport { AlertTriangle, Bot, FileText, ListTree, Plus, Sparkles } from \"lucide-react\"\nimport { useRouter, useSearchParams } from \"next/navigation\"\nimport { useApp } from \"@/context/AppContext\"\nimport { EmptyState } from \"@/components/shared/EmptyState\"\nimport { Button } from \"@/components/ui/button\"\nimport type { RoadmapItem, RoadmapLayout, RoadmapSource, Task, TaskStatus, UpdateRoadmapItemPatch } from \"@/types\"\nimport { pickNextTask } from \"@/lib/work-queue\"\nimport { dueState, localToday, roadmapHealth, taskDueSummary, type RoadmapDrift, type TaskInfo } from \"@/lib/roadmap-health\"\nimport { cn } from \"@/lib/utils\"\nimport { askAgent } from \"@/lib/ask-agent\"\nimport { RoadmapTimeline } from \"./RoadmapTimeline\"\nimport { FEATURE_W, HORIZON_W, resolvePositions } from \"./layout\"\nimport { STATUS_LABEL, StatusDot, nodeTypes, type RoadmapNode } from \"./RoadmapNodes\"\nimport { RoadmapItemSheet } from \"./RoadmapItemSheet\"\nimport { NewItemDialog } from \"./NewItemDialog\"\nimport { PlanFromSpecDialog } from \"./PlanFromSpecDialog\"\nimport { BreakdownEpicsDialog } from \"./BreakdownEpicsDialog\"\n\ntype ApiResult<T> = { data?: T; error?: string }\n\nasync function api<T>(url: string, body?: unknown): Promise<ApiResult<T>> {\n try {\n const res = await fetch(\n url,\n body === undefined\n ? undefined\n : { method: \"POST\", headers: { \"Content-Type\": \"application/json\" }, body: JSON.stringify(body) },\n )\n const json = await res.json().catch(() => null)\n if (!res.ok) return { error: json?.error ?? `Request failed (${res.status})` }\n return { data: json as T }\n } catch {\n return { error: \"Could not reach the server\" }\n }\n}\n\nfunction taskDueFields(taskIds: string[], tasks: Record<string, TaskInfo>, today: string) {\n const taskDue = taskDueSummary(taskIds, tasks, today)\n return { taskDue, taskDueSoon: !!taskDue?.next && dueState(taskDue.next, \"planned\", today) === \"soon\" }\n}\n\nfunction buildNodes(items: RoadmapItem[], layout: RoadmapLayout, prev: RoadmapNode[]): RoadmapNode[] {\n const pos = resolvePositions(items, layout)\n const prevById = new Map(prev.map((n) => [n.id, n]))\n return items.map((item) => {\n const old = prevById.get(item.id)\n return {\n id: item.id,\n type: item.parent === null ? \"horizon\" : \"feature\",\n position: pos[item.id] ?? { x: 0, y: 0 },\n data: { item },\n // keep React Flow's measurements/selection across rebuilds\n measured: old?.measured,\n selected: old?.selected,\n }\n })\n}\n\n/** Pick the handle sides that face each other. Branches always leave a horizon sideways, like roadmap.sh. */\nfunction sides(a: RoadmapNode, b: RoadmapNode, horizontal: boolean): [Position, Position] {\n const center = (n: RoadmapNode) => ({\n x: n.position.x + (n.measured?.width ?? (n.type === \"horizon\" ? HORIZON_W : FEATURE_W)) / 2,\n y: n.position.y + (n.measured?.height ?? 48) / 2,\n })\n const ca = center(a)\n const cb = center(b)\n const dx = cb.x - ca.x\n const dy = cb.y - ca.y\n if (horizontal || Math.abs(dx) > Math.abs(dy)) return dx > 0 ? [Position.Right, Position.Left] : [Position.Left, Position.Right]\n return dy > 0 ? [Position.Bottom, Position.Top] : [Position.Top, Position.Bottom]\n}\n\n/** Spine: solid up to the current horizon, dashed after. Branch: follows the epic (live = animated accent). */\nfunction edgeStyle(a: RoadmapNode, b: RoadmapNode, spine: boolean): Pick<Edge, \"style\" | \"animated\"> {\n if (spine) {\n return a.data.item.status === \"done\"\n ? { style: { stroke: \"var(--color-accent)\", strokeWidth: 3 } }\n : { style: { stroke: \"var(--color-border2)\", strokeWidth: 3, strokeDasharray: \"6 6\" } }\n }\n const status = b.data.item.status\n if (status === \"in-progress\") return { animated: true, style: { stroke: \"var(--color-accent)\", strokeWidth: 2 } }\n if (status === \"done\") return { style: { stroke: \"var(--color-border2)\", strokeWidth: 1.5 } }\n return { style: { stroke: \"var(--color-border2)\", strokeWidth: 1.5, strokeDasharray: \"2 5\", strokeLinecap: \"round\" } }\n}\n\nfunction edge(id: string, a: RoadmapNode, b: RoadmapNode, spine: boolean): Edge {\n const [s, t] = sides(a, b, !spine)\n return {\n id,\n source: a.id,\n target: b.id,\n sourceHandle: s,\n targetHandle: `${t}-t`,\n type: spine ? \"straight\" : \"default\",\n selectable: false,\n ...edgeStyle(a, b, spine),\n }\n}\n\nfunction subscribeTheme(cb: () => void) {\n const mo = new MutationObserver(cb)\n mo.observe(document.documentElement, { attributes: true, attributeFilter: [\"class\"] })\n return () => mo.disconnect()\n}\n\nconst FLOW_STYLE = { \"--xy-background-color\": \"var(--color-bg)\" } as React.CSSProperties\n\nexport function RoadmapTab() {\n const { rootParam, openDoc, board } = useApp()\n const router = useRouter()\n const searchParams = useSearchParams()\n const view = searchParams.get(\"view\") === \"timeline\" ? \"timeline\" : \"map\"\n const setView = (v: \"map\" | \"timeline\") => {\n const params = new URLSearchParams(searchParams.toString())\n if (v === \"map\") params.delete(\"view\")\n else params.set(\"view\", v)\n const qs = params.toString()\n router.replace(qs ? `/roadmap?${qs}` : \"/roadmap\")\n }\n const today = localToday()\n const [items, setItems] = useState<RoadmapItem[]>([])\n const [layout, setLayout] = useState<RoadmapLayout>({})\n const [nodes, setNodes] = useState<RoadmapNode[]>([])\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n const [selectedId, setSelectedId] = useState<string | null>(null)\n // ?item=R004 (links from a chat) opens that item's sheet; adjusted during render so a new link re-opens it\n const itemParam = searchParams.get(\"item\")\n const [seenItemParam, setSeenItemParam] = useState<string | null>(null)\n if (itemParam !== seenItemParam) {\n setSeenItemParam(itemParam)\n if (itemParam) setSelectedId(itemParam)\n }\n const [generateSource, setGenerateSource] = useState<RoadmapSource | null>(null)\n const [generating, setGenerating] = useState(false)\n // null = closed; \"\" = new horizon; \"R001\" = new feature under R001\n const [createParent, setCreateParent] = useState<string | null>(null)\n const [specOpen, setSpecOpen] = useState(false)\n const [breakdownOpen, setBreakdownOpen] = useState(false)\n const draggingRef = useRef(false)\n const containerRef = useRef<HTMLDivElement>(null)\n\n // Like roadmap.sh: open at readable zoom, centered horizontally, from the top of the map.\n // fitView on a large roadmap shrinks text to unreadable sizes.\n const showTop = useCallback((rf: ReactFlowInstance<RoadmapNode>) => {\n const width = containerRef.current?.clientWidth ?? 0\n const bounds = rf.getNodesBounds(rf.getNodes())\n if (!width || !bounds.width) return\n const zoom = Math.min(1, Math.max(MIN_INITIAL_ZOOM, (width - VIEWPORT_PAD * 2) / bounds.width))\n rf.setViewport({ x: width / 2 - (bounds.x + bounds.width / 2) * zoom, y: VIEWPORT_PAD - bounds.y * zoom, zoom })\n }, [])\n // a roadmap_updated that arrived mid-drag; reloaded once the drag's layout POST lands\n const pendingReloadRef = useRef(false)\n // only the latest load() may apply its response (guards project switches / overlapping SSE reloads)\n const loadSeqRef = useRef(0)\n\n const isDark = useSyncExternalStore(\n subscribeTheme,\n () => document.documentElement.classList.contains(\"dark\"),\n () => true,\n )\n\n const applyData = useCallback((nextItems: RoadmapItem[], nextLayout: RoadmapLayout) => {\n setItems(nextItems)\n setLayout(nextLayout)\n setNodes((prev) => buildNodes(nextItems, nextLayout, prev))\n }, [])\n\n const load = useCallback(() => {\n const seq = ++loadSeqRef.current\n type ListResponse = { items: RoadmapItem[]; layout: RoadmapLayout; generateSource?: RoadmapSource }\n return api<ListResponse>(`/api/roadmap${rootParam}`).then(({ data, error: err }) => {\n if (seq !== loadSeqRef.current) return\n setLoading(false)\n if (err) {\n setError(err)\n // never leave another project's (or stale) items on screen, editable against this root\n applyData([], {})\n setSelectedId(null)\n return\n }\n setError(null)\n setGenerateSource(data?.generateSource ?? null)\n applyData(data?.items ?? [], data?.layout ?? {})\n })\n }, [rootParam, applyData])\n\n useEffect(() => {\n load()\n }, [load])\n\n useEffect(() => {\n const es = new EventSource(\"/api/events\")\n es.onmessage = (e) => {\n try {\n const msg = JSON.parse(e.data)\n if (msg.type !== \"roadmap_updated\") return\n if (draggingRef.current) pendingReloadRef.current = true\n else load()\n } catch {\n // non-JSON keepalive; ignore\n }\n }\n return () => es.close()\n }, [load])\n\n const edges = useMemo(() => {\n const byId = new Map(nodes.map((n) => [n.id, n]))\n const out: Edge[] = []\n const horizons = items.filter((i) => i.parent === null).sort((a, b) => a.order - b.order)\n horizons.forEach((h, i) => {\n const a = byId.get(h.id)\n const next = horizons[i + 1] && byId.get(horizons[i + 1].id)\n if (a && next) out.push(edge(`spine-${h.id}`, a, next, true))\n })\n for (const item of items) {\n const p = item.parent && byId.get(item.parent)\n const c = byId.get(item.id)\n if (p && c && p.type === \"horizon\") out.push(edge(`branch-${item.id}`, p, c, false))\n }\n return out\n }, [items, nodes])\n\n // board is refreshed by AppContext on task_updated, so progress/drift follow task moves live\n const tasksById = useMemo<Record<string, Task>>(\n () => Object.fromEntries(Object.values(board ?? {}).flat().map((t) => [t.id, t])),\n [board],\n )\n const health = useMemo(() => roadmapHealth(items, tasksById, today), [items, tasksById, today])\n\n const shownNodes = useMemo(() => {\n const allTasks = Object.values(tasksById)\n // chapters number real horizons only; orphans on the spine get none\n const chapters = new Map(items.filter((i) => i.parent === null).sort((a, b) => a.order - b.order).map((h, i) => [h.id, i + 1]))\n return nodes.map((n) => {\n const { item } = n.data\n const kids = items.filter((i) => i.parent === item.id)\n const next = n.type === \"feature\" && item.status === \"in-progress\" ? pickNextTask(item, allTasks) : null\n return {\n ...n,\n data: {\n ...n.data,\n progress: health.progress[n.id],\n drift: health.drift.filter((d) => d.id === n.id).map((d) => d.message),\n dueState: dueState(item.due, item.status, today),\n ...(n.type === \"feature\" && {\n ...taskDueFields(item.tasks, tasksById, today),\n taskStatuses: item.tasks.map((id) => tasksById[id]?.status).filter((s): s is TaskStatus => !!s && s !== \"cancelled\"),\n nextTaskId: next?.kind === \"ready\" ? next.taskId : null,\n }),\n ...(n.type === \"horizon\" && {\n chapter: chapters.get(item.id),\n epics: { done: kids.filter((k) => k.status === \"done\").length, total: kids.length },\n }),\n },\n }\n })\n }, [nodes, items, health, today, tasksById])\n\n const onNodesChange = useCallback(\n (changes: NodeChange<RoadmapNode>[]) => setNodes((nds) => applyNodeChanges(changes, nds)),\n [],\n )\n\n function onDragStop(dragged: RoadmapNode[]) {\n draggingRef.current = false\n const positions: RoadmapLayout = Object.fromEntries(\n dragged.map((n) => [n.id, { x: Math.round(n.position.x), y: Math.round(n.position.y) }]),\n )\n // children without a saved position follow their horizon immediately\n applyData(items, { ...layout, ...positions })\n api(`/api/roadmap/layout${rootParam}`, { positions }).then(({ error: err }) => {\n if (err) setError(err)\n if (pendingReloadRef.current) {\n pendingReloadRef.current = false\n load()\n }\n })\n }\n\n async function generate() {\n setGenerating(true)\n setError(null)\n const { data, error: err } = await api<{ items: RoadmapItem[] }>(`/api/roadmap/generate${rootParam}`, {})\n if (err) {\n setError(err)\n setGenerating(false)\n return\n }\n // freeze the generated arrangement so later additions don't shift auto-placed horizons\n const positions: RoadmapLayout = Object.fromEntries(\n Object.entries(resolvePositions(data?.items ?? [], {})).map(([id, p]) => [id, { x: Math.round(p.x), y: Math.round(p.y) }]),\n )\n const { error: layoutErr } = await api(`/api/roadmap/layout${rootParam}`, { positions })\n await load()\n if (layoutErr) setError(layoutErr)\n setGenerating(false)\n }\n\n const openTaskCount = Object.values(board ?? {}).flat().filter((t) => t.status !== \"cancelled\").length\n const sourceLabel =\n generateSource === \"roadmap-md\" ? \"from ROADMAP.md\"\n : generateSource === \"tasks\" ? `from ${openTaskCount} tasks, grouped by phase`\n : \"starter horizons: Shipped ยท Now ยท Next ยท Later\"\n\n async function createItem(title: string): Promise<string | null> {\n const { error: err } = await api(`/api/roadmap/create${rootParam}`, {\n title,\n parent: createParent || null,\n })\n if (err) return err\n await load()\n return null\n }\n\n async function saveItem(id: string, patch: UpdateRoadmapItemPatch): Promise<string | null> {\n const { data, error: err } = await api<{ item: RoadmapItem }>(`/api/roadmap/update${rootParam}`, { id, patch })\n if (err) return err\n const updated = data?.item\n if (updated) applyData(items.map((i) => (i.id === id ? updated : i)), layout)\n else await load()\n return null\n }\n\n async function deleteItem(id: string): Promise<string | null> {\n const { error: err } = await api(`/api/roadmap/delete${rootParam}`, { id })\n if (err) return err\n applyData(items.filter((i) => i.id !== id), layout)\n return null\n }\n\n const selected = items.find((i) => i.id === selectedId) ?? null\n\n const dialog = (\n <>\n <NewItemDialog\n open={createParent !== null}\n heading={createParent ? `New feature under ${createParent}` : \"New horizon\"}\n onOpenChange={(v) => { if (!v) setCreateParent(null) }}\n onSubmit={createItem}\n />\n <PlanFromSpecDialog open={specOpen} onOpenChange={setSpecOpen} />\n <BreakdownEpicsDialog open={breakdownOpen} onOpenChange={setBreakdownOpen} items={items} />\n </>\n )\n\n if (loading) {\n return <div className=\"flex-1 flex items-center justify-center text-sm text-muted\">Loadingโฆ</div>\n }\n\n if (items.length === 0) {\n return (\n <div className=\"flex-1 p-6\">\n {error && <p className=\"mb-4 text-sm text-danger\">{error}</p>}\n <EmptyState icon=\"๐บ๏ธ\" message=\"No roadmap yet\" subMessage=\"Items live in plans/roadmap/R*.md\" bordered />\n <div className=\"mt-4 flex flex-col items-center gap-2\">\n <div className=\"flex gap-2\">\n <Button size=\"sm\" onClick={generate} disabled={generating} className=\"bg-accent text-white hover:bg-accent/90\">\n <Sparkles /> {generating ? \"Generatingโฆ\" : \"Generate roadmap\"}\n </Button>\n <Button size=\"sm\" variant=\"outline\" onClick={() => askAgent(\"Plan a roadmap for this project.\")} disabled={generating}>\n <Bot /> Plan with agent\n </Button>\n <Button size=\"sm\" variant=\"outline\" onClick={() => setSpecOpen(true)} disabled={generating}>\n <FileText /> Plan from spec\n </Button>\n <Button size=\"sm\" variant=\"outline\" onClick={() => setCreateParent(\"\")} disabled={generating}>\n <Plus /> Create first horizon\n </Button>\n </div>\n <p className=\"text-xs text-muted\">Generate {sourceLabel}. Existing files are not modified.</p>\n </div>\n {dialog}\n </div>\n )\n }\n\n return (\n <div className=\"relative flex flex-1 min-h-0 flex-col\">\n <div className=\"flex shrink-0 items-center gap-4 border-b border-border px-3 py-2\">\n <div className=\"flex rounded-md border border-border p-0.5 text-xs\">\n {([\"map\", \"timeline\"] as const).map((v) => (\n <button\n key={v}\n type=\"button\"\n onClick={() => setView(v)}\n className={cn(\n \"rounded-sm px-3 py-1 capitalize\",\n view === v ? \"bg-surface2 text-txt\" : \"text-muted hover:text-txt\",\n )}\n >\n {v}\n </button>\n ))}\n </div>\n <RoadmapStats items={items} tasksById={tasksById} />\n <div className=\"ml-auto flex items-center gap-2\">\n {error && <p className=\"text-xs text-danger\">{error}</p>}\n {health.drift.length > 0 && (\n <AttentionMenu\n drift={health.drift}\n onSelect={setSelectedId}\n onApply={(d) => d.suggestedStatus && saveItem(d.id, { status: d.suggestedStatus }).then((err) => { if (err) setError(err) })}\n />\n )}\n <Button size=\"sm\" variant=\"outline\" onClick={() => setSpecOpen(true)}>\n <FileText /> Plan from spec\n </Button>\n {items.some((i) => i.parent !== null && i.status !== \"done\") && (\n <Button size=\"sm\" variant=\"outline\" onClick={() => setBreakdownOpen(true)}>\n <ListTree /> Break down epicsโฆ\n </Button>\n )}\n <Button size=\"sm\" onClick={() => setCreateParent(\"\")} className=\"bg-accent text-white hover:bg-accent/90\">\n <Plus /> Horizon\n </Button>\n </div>\n </div>\n\n {view === \"map\" ? (\n <div ref={containerRef} className=\"relative flex-1 min-h-0\">\n <ReactFlow<RoadmapNode>\n nodes={shownNodes}\n edges={edges}\n nodeTypes={nodeTypes}\n onNodesChange={onNodesChange}\n onNodeClick={(_, n) => setSelectedId(n.id)}\n onNodeDragStart={() => { draggingRef.current = true }}\n onNodeDragStop={(_, __, dragged) => onDragStop(dragged)}\n nodesConnectable={false}\n deleteKeyCode={null}\n colorMode={isDark ? \"dark\" : \"light\"}\n onInit={showTop}\n minZoom={0.2}\n style={FLOW_STYLE}\n >\n <Background variant={BackgroundVariant.Dots} gap={20} size={1} />\n <Controls showInteractive={false} />\n </ReactFlow>\n </div>\n ) : (\n <RoadmapTimeline items={items} today={today} onSelect={setSelectedId} progressById={health.progress} />\n )}\n\n <RoadmapItemSheet\n item={selected}\n items={items}\n onClose={() => setSelectedId(null)}\n onSave={saveItem}\n onDelete={deleteItem}\n onAddFeature={(parentId) => { setSelectedId(null); setCreateParent(parentId) }}\n onEditRaw={(file) => { openDoc(file) }}\n tasksById={tasksById}\n progressById={health.progress}\n onSelect={setSelectedId}\n />\n {dialog}\n </div>\n )\n}\n\n/** Epic counts by status double as the legend; tasks = every task linked to an epic. */\nfunction RoadmapStats({ items, tasksById }: { items: RoadmapItem[]; tasksById: Record<string, Task> }) {\n const epics = items.filter((i) => i.parent !== null)\n const count = (st: RoadmapItem[\"status\"]) => epics.filter((e) => e.status === st).length\n const linked = [...new Set(epics.flatMap((e) => e.tasks))].map((id) => tasksById[id]).filter((t) => t && t.status !== \"cancelled\")\n const done = linked.filter((t) => t.status === \"done\").length\n return (\n <div className=\"hidden items-center gap-4 font-mono text-[11px] text-muted md:flex\">\n {([\"in-progress\", \"done\", \"planned\"] as const).map((st) => (\n <span key={st} className=\"flex items-center gap-1.5\">\n <StatusDot status={st} />\n <span className={cn(\"tabular-nums\", st === \"in-progress\" && count(st) > 0 ? \"text-accent\" : \"text-txt\")}>{count(st)}</span>\n {STATUS_LABEL[st].toLowerCase()}\n </span>\n ))}\n {linked.length > 0 && (\n <span className=\"flex items-center gap-2 border-l border-border pl-4\">\n <span className=\"relative h-1 w-20 overflow-hidden rounded-full bg-border\">\n <span className=\"absolute inset-y-0 left-0 rounded-full bg-teal\" style={{ width: `${(done / linked.length) * 100}%` }} />\n </span>\n <span><span className=\"tabular-nums text-txt\">{done}/{linked.length}</span> tasks</span>\n </span>\n )}\n </div>\n )\n}\n\n/** Amber pill with the drift count; opens the list (closed by default so it never covers the map). */\nfunction AttentionMenu({ drift, onSelect, onApply }: {\n drift: RoadmapDrift[]\n onSelect: (id: string) => void\n onApply: (d: RoadmapDrift) => void\n}) {\n return (\n <details className=\"group relative\">\n <summary className=\"flex h-8 cursor-pointer list-none items-center gap-1.5 rounded-md border border-amber/40 bg-amber/10 px-2.5 text-xs font-medium text-txt hover:bg-amber/15 [&::-webkit-details-marker]:hidden\">\n <AlertTriangle className=\"h-3.5 w-3.5 text-amber\" /> {drift.length} need attention\n </summary>\n <ul className=\"absolute right-0 top-full z-30 mt-1.5 max-h-72 w-80 overflow-y-auto rounded-lg border border-border bg-surface text-xs shadow-xl\">\n {drift.map((d) => (\n <li key={`${d.id}-${d.kind}`} className=\"flex items-start gap-2 border-b border-border px-3 py-2.5 last:border-0\">\n <span className=\"mt-1 h-1.5 w-1.5 shrink-0 rounded-full bg-amber\" />\n <button type=\"button\" onClick={() => onSelect(d.id)} className=\"flex-1 text-left leading-relaxed text-muted hover:text-txt\">\n {d.message}\n </button>\n {d.suggestedStatus && (\n <button\n type=\"button\"\n onClick={() => onApply(d)}\n className=\"shrink-0 rounded-sm border border-border px-1.5 py-0.5 font-mono text-[10px] text-txt hover:border-accent hover:text-accent\"\n title={`Set status to ${d.suggestedStatus}`}\n >\n โ {d.suggestedStatus}\n </button>\n )}\n </li>\n ))}\n </ul>\n </details>\n )\n}\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'list-tree',\n size: 24,\n node: [\n ['path', { d: 'M8 5h13', key: '1pao27' }],\n ['path', { d: 'M13 12h8', key: 'h98zly' }],\n ['path', { d: 'M13 19h8', key: 'c3s6r1' }],\n ['path', { d: 'M3 10a2 2 0 0 0 2 2h3', key: '1npucw' }],\n ['path', { d: 'M3 5v12a2 2 0 0 0 2 2h3', key: 'x1gjn2' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name ListTree\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/list-tree\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ListTree = createLucideIcon(__iconData);\n\nexport default ListTree;\n","// Pure next-task picker for an epic's work queue (no fs). Self-check: node src/lib/work-queue.check.mts\nimport type { RoadmapItem, Task } from './core'\n\nexport type QueueTask = Pick<Task, 'id' | 'status' | 'dependsOn'>\nexport type QueueResult =\n | { kind: 'ready'; taskId: string }\n | { kind: 'finished' }\n // needsHuman: no remaining task can move without someone unblocking or creating a task\n | { kind: 'waiting'; waiting: { taskId: string; reason: string }[]; needsHuman: boolean }\n\n/** Every `T\\d+` in a free-text \"Depends on\" line: \"T008, T009 (x)\" โ [\"T008\",\"T009\"]. */\nexport function depIds(dependsOn: string): string[] {\n return [...new Set((dependsOn.match(/\\bT\\d+\\b/gi) ?? []).map(d => d.toUpperCase()))]\n}\n\nconst settled = (s: Task['status']) => s === 'done' || s === 'cancelled'\n\nexport function pickNextTask(epic: RoadmapItem, tasks: QueueTask[]): QueueResult {\n const byId = new Map(tasks.map(t => [t.id, t]))\n const linked = epic.tasks.map(id => byId.get(id)).filter((t): t is QueueTask => !!t)\n const unmet = (t: QueueTask) => depIds(t.dependsOn).filter(d => {\n const dep = byId.get(d)\n return !dep || !settled(dep.status)\n })\n\n for (const t of linked) {\n if (t.status === 'todo' && !unmet(t).length) return { kind: 'ready', taskId: t.id }\n }\n if (linked.every(t => settled(t.status))) return { kind: 'finished' }\n\n // Can this task still move without a human? in-progress/settled yes; blocked/missing no;\n // todo only if it's in this epic (the queue never hands out outside tasks) and every unmet dep can.\n // Cycles count as stuck.\n const inEpic = new Set(epic.tasks)\n const memo = new Map<string, boolean>()\n const canMove = (id: string): boolean => {\n if (memo.has(id)) return memo.get(id) ?? false\n memo.set(id, false)\n const t = byId.get(id)\n const ok = !!t && t.status !== 'blocked' && (t.status !== 'todo' || (inEpic.has(id) && unmet(t).every(canMove)))\n memo.set(id, ok)\n return ok\n }\n\n const waiting: { taskId: string; reason: string }[] = []\n for (const id of epic.tasks) {\n const t = byId.get(id)\n if (!t) waiting.push({ taskId: id, reason: `${id} has no task file` })\n else if (t.status === 'in-progress') waiting.push({ taskId: id, reason: `${id} is in progress (claimed)` })\n else if (t.status === 'blocked') waiting.push({ taskId: id, reason: `${id} is blocked` })\n else if (t.status === 'todo') {\n const deps = unmet(t).map(d => `${d} (${byId.get(d)?.status ?? 'missing'})`)\n waiting.push({ taskId: id, reason: `${id} waits on ${deps.join(', ')}` })\n }\n }\n return { kind: 'waiting', waiting, needsHuman: waiting.every(w => !canMove(w.taskId)) }\n}\n"],"names":["__iconData","name","d","node"],"mappings":"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","ignoreList":[7]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
module.exports=[381249,a=>{"use strict";var b=a.i(662145),c=a.i(174897),d=a.i(544394),e=a.i(256857);let f={name:"palette",size:24,node:[["path",{d:"M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z",key:"e79jfc"}],["circle",{cx:"13.5",cy:"6.5",r:".5",fill:"currentColor",key:"1okk4w"}],["circle",{cx:"17.5",cy:"10.5",r:".5",fill:"currentColor",key:"f64h9f"}],["circle",{cx:"6.5",cy:"12.5",r:".5",fill:"currentColor",key:"qy21gx"}],["circle",{cx:"8.5",cy:"7.5",r:".5",fill:"currentColor",key:"fotxhn"}]]};f.node;let g=(0,e.default)(f),h={name:"type",size:24,node:[["path",{d:"M12 4v16",key:"1654pz"}],["path",{d:"M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2",key:"e0r10z"}],["path",{d:"M9 20h6",key:"s66wpe"}]]};h.node;let i=(0,e.default)(h),j={name:"folder-cog",size:24,node:[["path",{d:"M10.3 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.98a2 2 0 0 1 1.69.9l.66 1.2A2 2 0 0 0 12 6h8a2 2 0 0 1 2 2v3.3",key:"128dxu"}],["path",{d:"m14.305 19.53.923-.382",key:"3m78fa"}],["path",{d:"m15.228 16.852-.923-.383",key:"npixar"}],["path",{d:"m16.852 15.228-.383-.923",key:"5xggr7"}],["path",{d:"m16.852 20.772-.383.924",key:"dpfhf9"}],["path",{d:"m19.148 15.228.383-.923",key:"1reyyz"}],["path",{d:"m19.53 21.696-.382-.924",key:"1goivc"}],["path",{d:"m20.772 16.852.924-.383",key:"htqkph"}],["path",{d:"m20.772 19.148.924.383",key:"9w9pjp"}],["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}]],aliases:["folder-cog-2"]};j.node;let k=(0,e.default)(j),l={name:"plug",size:24,node:[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z",key:"1xoxul"}],["path",{d:"M9 8V2",key:"14iosj"}]]};l.node;let m=(0,e.default)(l);var n=a.i(879136),o=a.i(795667),p=a.i(966420),q=a.i(368114);let r={name:"moon",size:24,node:[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]]};r.node;let s=(0,e.default)(r),t={name:"sun",size:24,node:[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]};t.node;let u=(0,e.default)(t),v={name:"monitor",size:24,node:[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]};v.node;let w=(0,e.default)(v);var x=a.i(425404),y=a.i(817163);let z=[{id:"blue",label:"Blue",class:"bg-blue-500"},{id:"purple",label:"Purple",class:"bg-purple-500"},{id:"green",label:"Green",class:"bg-green-500"},{id:"orange",label:"Orange",class:"bg-orange-500"}],A=[{id:"small",label:"Small"},{id:"medium",label:"Medium"},{id:"large",label:"Large"}];function B({settings:a,onSave:c}){return(0,b.jsxs)("div",{className:"space-y-8",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-xl font-semibold text-txt mb-1",children:"Appearance"}),(0,b.jsx)("p",{className:"text-sm text-muted",children:"Customize the look and feel of the app."})]}),(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsx)("label",{className:"block text-sm font-medium text-txt",children:"Theme"}),(0,b.jsx)("div",{className:"grid grid-cols-3 gap-3",children:[{id:"dark",label:"Dark",icon:s},{id:"light",label:"Light",icon:u},{id:"system",label:"System",icon:w}].map(d=>{let e=d.icon,f=a.theme===d.id;return(0,b.jsxs)("button",{onClick:()=>c({...a,theme:d.id}),className:(0,q.cn)("flex flex-col items-center gap-2 p-4 rounded-lg border transition-colors",f?"border-accent bg-accent/10":"border-border hover:border-accent/50"),children:[(0,b.jsx)(e,{className:(0,q.cn)("w-5 h-5",f?"text-accent":"text-muted")}),(0,b.jsx)("span",{className:(0,q.cn)("text-sm",f?"text-accent font-medium":"text-muted"),children:d.label})]},d.id)})})]}),(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsx)("label",{className:"block text-sm font-medium text-txt",children:"Accent Color"}),(0,b.jsx)("div",{className:"flex gap-3",children:z.map(d=>{let e=a.accentColor===d.id;return(0,b.jsx)("button",{onClick:()=>c({...a,accentColor:d.id}),className:(0,q.cn)("w-10 h-10 rounded-full flex items-center justify-center transition-transform",d.class,e?"ring-2 ring-offset-2 ring-offset-bg ring-white scale-110":"hover:scale-105"),title:d.label,children:e&&(0,b.jsx)(x.Check,{className:"w-5 h-5 text-white"})},d.id)})})]}),(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsx)("label",{className:"block text-sm font-medium text-txt",children:"Font Size"}),(0,b.jsx)("div",{className:"flex gap-2",children:A.map(d=>{let e=a.fontSize===d.id;return(0,b.jsx)("button",{onClick:()=>c({...a,fontSize:d.id}),className:(0,q.cn)("px-4 py-2 rounded-lg border text-sm transition-colors",e?"border-accent bg-accent/10 text-accent font-medium":"border-border text-muted hover:border-accent/50"),children:d.label},d.id)})})]}),[{key:"fontSans",label:"Interface Font",fonts:y.SANS_FONTS,fallback:"system-ui",sample:"Ship the roadmap by Friday"},{key:"fontMono",label:"Code Font",fonts:y.MONO_FONTS,fallback:"ui-monospace, Menlo, Consolas, monospace",sample:"const id = 0O1lI;"}].map(d=>(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsx)("label",{className:"block text-sm font-medium text-txt",children:d.label}),(0,b.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-2",children:d.fonts.map(e=>{let f=a[d.key]===e.id;return(0,b.jsxs)("button",{onClick:()=>c({...a,[d.key]:e.id}),className:(0,q.cn)("text-left p-3 rounded-lg border transition-colors",f?"border-accent bg-accent/10":"border-border hover:border-accent/50"),children:[(0,b.jsx)("div",{className:"text-base text-txt truncate",style:{fontFamily:"system"===e.id?d.fallback:`var(--font-${e.id})`},children:d.sample}),(0,b.jsx)("div",{className:(0,q.cn)("mt-1 text-xs",f?"text-accent font-medium":"text-txt"),children:e.label}),(0,b.jsx)("div",{className:"text-xs text-muted",children:e.note})]},e.id)})})]},d.key))]})}let C=[{value:0,label:"Off"},{value:5,label:"5 seconds"},{value:10,label:"10 seconds"},{value:30,label:"30 seconds"}],D=[{id:"split",label:"Split View"},{id:"tab",label:"Tab View"},{id:"preview",label:"Preview Only"}];function E({settings:a,onSave:c}){let d=(b,d)=>{c({...a,editor:{...a.editor,[b]:d}})};return(0,b.jsxs)("div",{className:"space-y-8",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-xl font-semibold text-txt mb-1",children:"Editor"}),(0,b.jsx)("p",{className:"text-sm text-muted",children:"Configure the markdown editor behavior."})]}),(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsx)("label",{className:"block text-sm font-medium text-txt",children:"Auto-save"}),(0,b.jsx)("div",{className:"flex flex-wrap gap-2",children:C.map(c=>{let e=a.editor.autoSave===c.value;return(0,b.jsx)("button",{onClick:()=>d("autoSave",c.value),className:(0,q.cn)("px-4 py-2 rounded-lg border text-sm transition-colors",e?"border-accent bg-accent/10 text-accent font-medium":"border-border text-muted hover:border-accent/50"),children:c.label},c.value)})})]}),(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsx)("label",{className:"block text-sm font-medium text-txt",children:"Preview Mode"}),(0,b.jsx)("div",{className:"flex flex-wrap gap-2",children:D.map(c=>{let e=a.editor.previewMode===c.id;return(0,b.jsx)("button",{onClick:()=>d("previewMode",c.id),className:(0,q.cn)("px-4 py-2 rounded-lg border text-sm transition-colors",e?"border-accent bg-accent/10 text-accent font-medium":"border-border text-muted hover:border-accent/50"),children:c.label},c.id)})})]}),(0,b.jsxs)("div",{className:"space-y-4",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-sm font-medium text-txt",children:"Word Wrap"}),(0,b.jsx)("div",{className:"text-xs text-muted",children:"Wrap long lines in the editor"})]}),(0,b.jsx)("button",{onClick:()=>d("wordWrap",!a.editor.wordWrap),className:(0,q.cn)("w-11 h-6 rounded-full transition-colors relative",a.editor.wordWrap?"bg-accent":"bg-border"),children:(0,b.jsx)("span",{className:(0,q.cn)("absolute top-1 w-4 h-4 rounded-full bg-white transition-transform",a.editor.wordWrap?"left-6":"left-1")})})]}),(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-sm font-medium text-txt",children:"Line Numbers"}),(0,b.jsx)("div",{className:"text-xs text-muted",children:"Show line numbers in the editor"})]}),(0,b.jsx)("button",{onClick:()=>d("lineNumbers",!a.editor.lineNumbers),className:(0,q.cn)("w-11 h-6 rounded-full transition-colors relative",a.editor.lineNumbers?"bg-accent":"bg-border"),children:(0,b.jsx)("span",{className:(0,q.cn)("absolute top-1 w-4 h-4 rounded-full bg-white transition-transform",a.editor.lineNumbers?"left-6":"left-1")})})]})]})]})}let F=[{value:0,label:"Off"},{value:5,label:"5 seconds"},{value:10,label:"10 seconds"},{value:30,label:"30 seconds"}];function G({settings:a,onSave:c}){let d=(b,d)=>{c({...a,project:{...a.project,[b]:d}})};return(0,b.jsxs)("div",{className:"space-y-8",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-xl font-semibold text-txt mb-1",children:"Project"}),(0,b.jsx)("p",{className:"text-sm text-muted",children:"Configure project-level settings."})]}),(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsx)("label",{className:"block text-sm font-medium text-txt",children:"Auto-refresh Interval"}),(0,b.jsx)("p",{className:"text-xs text-muted",children:"How often to check for changes in the project files."}),(0,b.jsx)("div",{className:"flex flex-wrap gap-2",children:F.map(c=>{let e=a.project.autoRefresh===c.value;return(0,b.jsx)("button",{onClick:()=>d("autoRefresh",c.value),className:(0,q.cn)("px-4 py-2 rounded-lg border text-sm transition-colors",e?"border-accent bg-accent/10 text-accent font-medium":"border-border text-muted hover:border-accent/50"),children:c.label},c.value)})})]}),(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-sm font-medium text-txt",children:"Show Hidden Files"}),(0,b.jsx)("div",{className:"text-xs text-muted",children:"Display files starting with a dot"})]}),(0,b.jsx)("button",{onClick:()=>d("showHidden",!a.project.showHidden),className:(0,q.cn)("w-11 h-6 rounded-full transition-colors relative",a.project.showHidden?"bg-accent":"bg-border"),children:(0,b.jsx)("span",{className:(0,q.cn)("absolute top-1 w-4 h-4 rounded-full bg-white transition-transform",a.project.showHidden?"left-6":"left-1")})})]})]})}var H=a.i(54165),I=a.i(60084),J=a.i(108280),K=a.i(866718);let L={"claude-code":{name:"Claude Code",config:`{
|
|
1
|
+
module.exports=[381249,a=>{"use strict";var b=a.i(662145),c=a.i(174897),d=a.i(544394),e=a.i(256857);let f={name:"palette",size:24,node:[["path",{d:"M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z",key:"e79jfc"}],["circle",{cx:"13.5",cy:"6.5",r:".5",fill:"currentColor",key:"1okk4w"}],["circle",{cx:"17.5",cy:"10.5",r:".5",fill:"currentColor",key:"f64h9f"}],["circle",{cx:"6.5",cy:"12.5",r:".5",fill:"currentColor",key:"qy21gx"}],["circle",{cx:"8.5",cy:"7.5",r:".5",fill:"currentColor",key:"fotxhn"}]]};f.node;let g=(0,e.default)(f),h={name:"type",size:24,node:[["path",{d:"M12 4v16",key:"1654pz"}],["path",{d:"M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2",key:"e0r10z"}],["path",{d:"M9 20h6",key:"s66wpe"}]]};h.node;let i=(0,e.default)(h),j={name:"folder-cog",size:24,node:[["path",{d:"M10.3 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.98a2 2 0 0 1 1.69.9l.66 1.2A2 2 0 0 0 12 6h8a2 2 0 0 1 2 2v3.3",key:"128dxu"}],["path",{d:"m14.305 19.53.923-.382",key:"3m78fa"}],["path",{d:"m15.228 16.852-.923-.383",key:"npixar"}],["path",{d:"m16.852 15.228-.383-.923",key:"5xggr7"}],["path",{d:"m16.852 20.772-.383.924",key:"dpfhf9"}],["path",{d:"m19.148 15.228.383-.923",key:"1reyyz"}],["path",{d:"m19.53 21.696-.382-.924",key:"1goivc"}],["path",{d:"m20.772 16.852.924-.383",key:"htqkph"}],["path",{d:"m20.772 19.148.924.383",key:"9w9pjp"}],["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}]],aliases:["folder-cog-2"]};j.node;let k=(0,e.default)(j),l={name:"plug",size:24,node:[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z",key:"1xoxul"}],["path",{d:"M9 8V2",key:"14iosj"}]]};l.node;let m=(0,e.default)(l);var n=a.i(879136),o=a.i(795667),p=a.i(966420),q=a.i(368114);let r={name:"moon",size:24,node:[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]]};r.node;let s=(0,e.default)(r),t={name:"sun",size:24,node:[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]};t.node;let u=(0,e.default)(t),v={name:"monitor",size:24,node:[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]};v.node;let w=(0,e.default)(v);var x=a.i(425404),y=a.i(817163);let z=[{id:"blue",label:"Blue",class:"bg-blue-500"},{id:"purple",label:"Purple",class:"bg-purple-500"},{id:"green",label:"Green",class:"bg-green-500"},{id:"orange",label:"Orange",class:"bg-orange-500"}],A=[{id:"small",label:"Small"},{id:"medium",label:"Medium"},{id:"large",label:"Large"}];function B({settings:a,onSave:c}){return(0,b.jsxs)("div",{className:"space-y-8",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-xl font-semibold text-txt mb-1",children:"Appearance"}),(0,b.jsx)("p",{className:"text-sm text-muted",children:"Customize the look and feel of the app."})]}),(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsx)("label",{className:"block text-sm font-medium text-txt",children:"Theme"}),(0,b.jsx)("div",{className:"grid grid-cols-3 gap-3",children:[{id:"dark",label:"Dark",icon:s},{id:"light",label:"Light",icon:u},{id:"system",label:"System",icon:w}].map(d=>{let e=d.icon,f=a.theme===d.id;return(0,b.jsxs)("button",{onClick:()=>c({...a,theme:d.id}),className:(0,q.cn)("flex flex-col items-center gap-2 p-4 rounded-lg border transition-colors",f?"border-accent bg-accent/10":"border-border hover:border-accent/50"),children:[(0,b.jsx)(e,{className:(0,q.cn)("w-5 h-5",f?"text-accent":"text-muted")}),(0,b.jsx)("span",{className:(0,q.cn)("text-sm",f?"text-accent font-medium":"text-muted"),children:d.label})]},d.id)})})]}),(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsx)("label",{className:"block text-sm font-medium text-txt",children:"Accent Color"}),(0,b.jsx)("div",{className:"flex gap-3",children:z.map(d=>{let e=a.accentColor===d.id;return(0,b.jsx)("button",{onClick:()=>c({...a,accentColor:d.id}),className:(0,q.cn)("w-10 h-10 rounded-full flex items-center justify-center transition-transform",d.class,e?"ring-2 ring-offset-2 ring-offset-bg ring-white scale-110":"hover:scale-105"),title:d.label,children:e&&(0,b.jsx)(x.Check,{className:"w-5 h-5 text-white"})},d.id)})})]}),(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsx)("label",{className:"block text-sm font-medium text-txt",children:"Font Size"}),(0,b.jsx)("div",{className:"flex gap-2",children:A.map(d=>{let e=a.fontSize===d.id;return(0,b.jsx)("button",{onClick:()=>c({...a,fontSize:d.id}),className:(0,q.cn)("px-4 py-2 rounded-lg border text-sm transition-colors",e?"border-accent bg-accent/10 text-accent font-medium":"border-border text-muted hover:border-accent/50"),children:d.label},d.id)})})]}),[{key:"fontSans",label:"Interface Font",fonts:y.SANS_FONTS,fallback:"system-ui",sample:"Ship the roadmap by Friday"},{key:"fontMono",label:"Code Font",fonts:y.MONO_FONTS,fallback:"ui-monospace, Menlo, Consolas, monospace",sample:"const id = 0O1lI;"}].map(d=>(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsx)("label",{className:"block text-sm font-medium text-txt",children:d.label}),(0,b.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-2",children:d.fonts.map(e=>{let f=a[d.key]===e.id;return(0,b.jsxs)("button",{onClick:()=>c({...a,[d.key]:e.id}),className:(0,q.cn)("text-left p-3 rounded-lg border transition-colors",f?"border-accent bg-accent/10":"border-border hover:border-accent/50"),children:[(0,b.jsx)("div",{className:"text-base text-txt truncate",style:{fontFamily:"system"===e.id?d.fallback:`var(--font-${e.id})`},children:d.sample}),(0,b.jsx)("div",{className:(0,q.cn)("mt-1 text-xs",f?"text-accent font-medium":"text-txt"),children:e.label}),(0,b.jsx)("div",{className:"text-xs text-muted",children:e.note})]},e.id)})})]},d.key))]})}let C=[{value:0,label:"Off"},{value:5,label:"5 seconds"},{value:10,label:"10 seconds"},{value:30,label:"30 seconds"}],D=[{id:"split",label:"Split View"},{id:"tab",label:"Tab View"},{id:"preview",label:"Preview Only"}];function E({settings:a,onSave:c}){let d=(b,d)=>{c({...a,editor:{...a.editor,[b]:d}})};return(0,b.jsxs)("div",{className:"space-y-8",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-xl font-semibold text-txt mb-1",children:"Editor"}),(0,b.jsx)("p",{className:"text-sm text-muted",children:"Configure the markdown editor behavior."})]}),(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsx)("label",{className:"block text-sm font-medium text-txt",children:"Auto-save"}),(0,b.jsx)("div",{className:"flex flex-wrap gap-2",children:C.map(c=>{let e=a.editor.autoSave===c.value;return(0,b.jsx)("button",{onClick:()=>d("autoSave",c.value),className:(0,q.cn)("px-4 py-2 rounded-lg border text-sm transition-colors",e?"border-accent bg-accent/10 text-accent font-medium":"border-border text-muted hover:border-accent/50"),children:c.label},c.value)})})]}),(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsx)("label",{className:"block text-sm font-medium text-txt",children:"Preview Mode"}),(0,b.jsx)("div",{className:"flex flex-wrap gap-2",children:D.map(c=>{let e=a.editor.previewMode===c.id;return(0,b.jsx)("button",{onClick:()=>d("previewMode",c.id),className:(0,q.cn)("px-4 py-2 rounded-lg border text-sm transition-colors",e?"border-accent bg-accent/10 text-accent font-medium":"border-border text-muted hover:border-accent/50"),children:c.label},c.id)})})]}),(0,b.jsxs)("div",{className:"space-y-4",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-sm font-medium text-txt",children:"Word Wrap"}),(0,b.jsx)("div",{className:"text-xs text-muted",children:"Wrap long lines in the editor"})]}),(0,b.jsx)("button",{onClick:()=>d("wordWrap",!a.editor.wordWrap),className:(0,q.cn)("w-11 h-6 rounded-full transition-colors relative",a.editor.wordWrap?"bg-accent":"bg-border"),children:(0,b.jsx)("span",{className:(0,q.cn)("absolute top-1 w-4 h-4 rounded-full bg-white transition-transform",a.editor.wordWrap?"left-6":"left-1")})})]}),(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-sm font-medium text-txt",children:"Line Numbers"}),(0,b.jsx)("div",{className:"text-xs text-muted",children:"Show line numbers in the editor"})]}),(0,b.jsx)("button",{onClick:()=>d("lineNumbers",!a.editor.lineNumbers),className:(0,q.cn)("w-11 h-6 rounded-full transition-colors relative",a.editor.lineNumbers?"bg-accent":"bg-border"),children:(0,b.jsx)("span",{className:(0,q.cn)("absolute top-1 w-4 h-4 rounded-full bg-white transition-transform",a.editor.lineNumbers?"left-6":"left-1")})})]})]})]})}let F=[{value:0,label:"Off"},{value:5,label:"5 seconds"},{value:10,label:"10 seconds"},{value:30,label:"30 seconds"}];function G({settings:a,onSave:c}){let d=(b,d)=>{c({...a,project:{...a.project,[b]:d}})};return(0,b.jsxs)("div",{className:"space-y-8",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-xl font-semibold text-txt mb-1",children:"Project"}),(0,b.jsx)("p",{className:"text-sm text-muted",children:"Configure project-level settings."})]}),(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsx)("label",{className:"block text-sm font-medium text-txt",children:"Auto-refresh Interval"}),(0,b.jsx)("p",{className:"text-xs text-muted",children:"How often to check for changes in the project files."}),(0,b.jsx)("div",{className:"flex flex-wrap gap-2",children:F.map(c=>{let e=a.project.autoRefresh===c.value;return(0,b.jsx)("button",{onClick:()=>d("autoRefresh",c.value),className:(0,q.cn)("px-4 py-2 rounded-lg border text-sm transition-colors",e?"border-accent bg-accent/10 text-accent font-medium":"border-border text-muted hover:border-accent/50"),children:c.label},c.value)})})]}),(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-sm font-medium text-txt",children:"Show Hidden Files"}),(0,b.jsx)("div",{className:"text-xs text-muted",children:"Display files starting with a dot"})]}),(0,b.jsx)("button",{onClick:()=>d("showHidden",!a.project.showHidden),className:(0,q.cn)("w-11 h-6 rounded-full transition-colors relative",a.project.showHidden?"bg-accent":"bg-border"),children:(0,b.jsx)("span",{className:(0,q.cn)("absolute top-1 w-4 h-4 rounded-full bg-white transition-transform",a.project.showHidden?"left-6":"left-1")})})]})]})}var H=a.i(54165),I=a.i(60084),J=a.i(108280),K=a.i(866718),L=a.i(689101);let M={"claude-code":{name:"Claude Code",config:`{
|
|
2
2
|
"mcpServers": {
|
|
3
3
|
"vibedoc": {
|
|
4
4
|
"url": "{{ENDPOINT}}"
|
|
@@ -18,6 +18,6 @@ module.exports=[381249,a=>{"use strict";var b=a.i(662145),c=a.i(174897),d=a.i(54
|
|
|
18
18
|
"url": "{{ENDPOINT}}"
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
-
}`,path:".windsurf/mcp.json"}};function M({settings:a,onSave:d}){let[e,f]=(0,c.useState)(!1),[g,h]=(0,c.useState)(null),[i,j]=(0,c.useState)(null),k=async()=>{f(!0),h(null);try{(await fetch(a.mcp.endpoint,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:1,method:"tools/list"})})).ok?h("success"):h("error")}catch{h("error")}f(!1)},l=async b=>{let c=L[b].config.replace("{{ENDPOINT}}",a.mcp.endpoint);await navigator.clipboard.writeText(c),j(b),setTimeout(()=>j(null),2e3)};return(0,b.jsxs)("div",{className:"space-y-8",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-xl font-semibold text-txt mb-1",children:"MCP Connection"}),(0,b.jsx)("p",{className:"text-sm text-muted",children:"Configure the Model Context Protocol server for AI agents."})]}),(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsx)("label",{className:"block text-sm font-medium text-txt",children:"MCP Endpoint"}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(K.Input,{value:a.mcp.endpoint,onChange:b=>{var c;return c=b.target.value,void d({...a,mcp:{...a.mcp,endpoint:c}})},className:"bg-surface2 font-mono text-sm"}),(0,b.jsxs)("button",{onClick:k,disabled:e,className:"px-4 py-2 bg-accent text-white rounded-lg text-sm font-medium hover:bg-accent/90 transition-colors disabled:opacity-50 flex items-center gap-2",children:[e?(0,b.jsx)(J.Loader2,{className:"w-4 h-4 animate-spin"}):(0,b.jsx)(m,{className:"w-4 h-4"}),"Test"]})]}),g&&(0,b.jsx)("div",{className:(0,q.cn)("flex items-center gap-2 text-sm","success"===g?"text-green-400":"text-red-400"),children:"success"===g?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(x.Check,{className:"w-4 h-4"}),"Connection successful"]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(H.X,{className:"w-4 h-4"}),"Connection failed"]})})]}),(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsx)("label",{className:"block text-sm font-medium text-txt",children:"Agent Configuration"}),(0,b.jsx)("p",{className:"text-xs text-muted",children:"Copy the configuration for your coding agent:"}),(0,b.jsx)("div",{className:"space-y-2",children:Object.entries(L).map(([a,c])=>(0,b.jsxs)("div",{className:"flex items-center justify-between p-3 border border-border rounded-lg",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-sm font-medium text-txt",children:c.name}),(0,b.jsx)("div",{className:"text-xs text-muted font-mono",children:c.path})]}),(0,b.jsx)("button",{onClick:()=>l(a),className:(0,q.cn)("flex items-center gap-2 px-3 py-1.5 rounded-lg text-sm transition-colors",i===a?"bg-green-500/20 text-green-400":"bg-surface2 text-muted hover:text-txt"),children:i===a?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(x.Check,{className:"w-3.5 h-3.5"}),"Copied"]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(I.Copy,{className:"w-3.5 h-3.5"}),"Copy"]})})]},a))})]})]})}var N=a.i(200382),O=a.i(661661),P=a.i(28386);let Q=["vibedoc_read_doc","vibedoc_write_doc","vibedoc_search_docs","vibedoc_list_docs","vibedoc_get_status","vibedoc_list_tasks","vibedoc_update_task","vibedoc_read_memory","vibedoc_update_memory"],R=["๐ง","๐","๐งช","๐","๐","๐","โก","๐ฏ","๐ก","๐"];function S({skills:a,onSave:d}){let[e,f]=(0,c.useState)(null),[g,h]=(0,c.useState)(null),[i,j]=(0,c.useState)(!1),k=()=>{f(null),h(null),j(!1)},l=()=>{g&&g.name.trim()&&(i?d([...a,g]):d(a.map(a=>a.id===g.id?g:a)),k())},m=a=>{if(!g)return;let b=g.tools.includes(a)?g.tools.filter(b=>b!==a):[...g.tools,a];h({...g,tools:b})};return(0,b.jsxs)("div",{className:"space-y-6",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-xl font-semibold text-txt mb-1",children:"Skills"}),(0,b.jsx)("p",{className:"text-sm text-muted",children:"Reusable capabilities for AI agents."})]}),(0,b.jsxs)("button",{onClick:()=>{let a={id:`skill-${Date.now()}`,name:"",description:"",trigger:"/",prompt:"",tools:[],icon:"โก"};f(a.id),h(a),j(!0)},className:"flex items-center gap-2 px-3 py-2 bg-accent text-white rounded-lg text-sm font-medium hover:bg-accent/90 transition-colors",children:[(0,b.jsx)(N.Plus,{className:"w-4 h-4"}),"Add Skill"]})]}),(0,b.jsxs)("div",{className:"space-y-3",children:[a.map(c=>(0,b.jsx)("div",{children:e===c.id&&g?(0,b.jsxs)("div",{className:"border border-accent rounded-lg p-4 space-y-4 bg-accent/5",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("select",{value:g.icon||"โก",onChange:a=>h({...g,icon:a.target.value}),className:"w-12 h-10 text-center text-xl bg-surface2 border border-border rounded-lg",children:R.map(a=>(0,b.jsx)("option",{value:a,children:a},a))}),(0,b.jsx)(K.Input,{value:g.name,onChange:a=>h({...g,name:a.target.value}),placeholder:"Skill name",className:"bg-surface2"})]}),(0,b.jsx)(K.Input,{value:g.description,onChange:a=>h({...g,description:a.target.value}),placeholder:"Description",className:"bg-surface2"}),(0,b.jsx)("div",{className:"flex gap-3",children:(0,b.jsxs)("div",{className:"flex-1",children:[(0,b.jsx)("label",{className:"text-xs text-muted mb-1 block",children:"Trigger"}),(0,b.jsx)(K.Input,{value:g.trigger,onChange:a=>h({...g,trigger:a.target.value}),placeholder:"/command",className:"bg-surface2 font-mono"})]})}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"text-xs text-muted mb-1 block",children:"System Prompt"}),(0,b.jsx)("textarea",{value:g.prompt,onChange:a=>h({...g,prompt:a.target.value}),placeholder:"Instructions for the AI when this skill is activated...",rows:4,className:"w-full px-3 py-2 bg-surface2 border border-border rounded-lg text-sm resize-none"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"text-xs text-muted mb-2 block",children:"Available Tools"}),(0,b.jsx)("div",{className:"flex flex-wrap gap-2",children:Q.map(a=>(0,b.jsx)("button",{onClick:()=>m(a),className:(0,q.cn)("px-2 py-1 rounded-sm text-xs font-mono transition-colors",g.tools.includes(a)?"bg-accent/20 text-accent":"bg-surface2 text-muted hover:text-txt"),children:a.replace("vibedoc_","")},a))})]}),(0,b.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,b.jsx)("button",{onClick:k,className:"px-3 py-1.5 text-sm text-muted hover:text-txt transition-colors",children:"Cancel"}),(0,b.jsxs)("button",{onClick:l,disabled:!g.name.trim(),className:"flex items-center gap-2 px-3 py-1.5 bg-accent text-white rounded-lg text-sm font-medium hover:bg-accent/90 transition-colors disabled:opacity-50",children:[(0,b.jsx)(x.Check,{className:"w-4 h-4"}),"Save"]})]})]}):(0,b.jsxs)("div",{className:"flex items-start gap-3 p-4 border border-border rounded-lg hover:border-accent/30 transition-colors group",children:[(0,b.jsx)("div",{className:"w-10 h-10 rounded-lg bg-surface2 flex items-center justify-center text-xl shrink-0",children:c.icon||"โก"}),(0,b.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:"font-medium text-txt",children:c.name}),(0,b.jsx)("code",{className:"text-xs bg-surface2 px-1.5 py-0.5 rounded-sm text-accent",children:c.trigger})]}),(0,b.jsx)("p",{className:"text-sm text-muted mt-0.5",children:c.description}),c.tools.length>0&&(0,b.jsx)("div",{className:"flex flex-wrap gap-1 mt-2",children:c.tools.map(a=>(0,b.jsx)("span",{className:"text-xs bg-surface2 px-1.5 py-0.5 rounded-sm text-muted",children:a.replace("vibedoc_","")},a))})]}),(0,b.jsxs)("div",{className:"flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity",children:[(0,b.jsx)("button",{onClick:()=>{f(c.id),h({...c}),j(!1)},className:"p-1.5 rounded-sm hover:bg-surface2 text-muted hover:text-txt transition-colors",children:(0,b.jsx)(O.Pencil,{className:"w-4 h-4"})}),(0,b.jsx)("button",{onClick:()=>{var b;return b=c.id,void(confirm("Delete this skill?")&&d(a.filter(a=>a.id!==b)))},className:"p-1.5 rounded-sm hover:bg-red-500/10 text-muted hover:text-red-400 transition-colors",children:(0,b.jsx)(P.Trash2,{className:"w-4 h-4"})})]})]})},c.id)),i&&g&&(0,b.jsxs)("div",{className:"border border-accent rounded-lg p-4 space-y-4 bg-accent/5",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("select",{value:g.icon||"โก",onChange:a=>h({...g,icon:a.target.value}),className:"w-12 h-10 text-center text-xl bg-surface2 border border-border rounded-lg",children:R.map(a=>(0,b.jsx)("option",{value:a,children:a},a))}),(0,b.jsx)(K.Input,{value:g.name,onChange:a=>h({...g,name:a.target.value}),placeholder:"Skill name",className:"bg-surface2"})]}),(0,b.jsx)(K.Input,{value:g.description,onChange:a=>h({...g,description:a.target.value}),placeholder:"Description",className:"bg-surface2"}),(0,b.jsx)("div",{className:"flex gap-3",children:(0,b.jsxs)("div",{className:"flex-1",children:[(0,b.jsx)("label",{className:"text-xs text-muted mb-1 block",children:"Trigger"}),(0,b.jsx)(K.Input,{value:g.trigger,onChange:a=>h({...g,trigger:a.target.value}),placeholder:"/command",className:"bg-surface2 font-mono"})]})}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"text-xs text-muted mb-1 block",children:"System Prompt"}),(0,b.jsx)("textarea",{value:g.prompt,onChange:a=>h({...g,prompt:a.target.value}),placeholder:"Instructions for the AI when this skill is activated...",rows:4,className:"w-full px-3 py-2 bg-surface2 border border-border rounded-lg text-sm resize-none"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"text-xs text-muted mb-2 block",children:"Available Tools"}),(0,b.jsx)("div",{className:"flex flex-wrap gap-2",children:Q.map(a=>(0,b.jsx)("button",{onClick:()=>m(a),className:(0,q.cn)("px-2 py-1 rounded-sm text-xs font-mono transition-colors",g.tools.includes(a)?"bg-accent/20 text-accent":"bg-surface2 text-muted hover:text-txt"),children:a.replace("vibedoc_","")},a))})]}),(0,b.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,b.jsx)("button",{onClick:k,className:"px-3 py-1.5 text-sm text-muted hover:text-txt transition-colors",children:"Cancel"}),(0,b.jsxs)("button",{onClick:l,disabled:!g.name.trim(),className:"flex items-center gap-2 px-3 py-1.5 bg-accent text-white rounded-lg text-sm font-medium hover:bg-accent/90 transition-colors disabled:opacity-50",children:[(0,b.jsx)(x.Check,{className:"w-4 h-4"}),"Save"]})]})]}),0===a.length&&!i&&(0,b.jsxs)("div",{className:"text-center py-8 text-muted",children:[(0,b.jsx)(n.Zap,{className:"w-10 h-10 mx-auto mb-3 opacity-30"}),(0,b.jsx)("p",{className:"text-sm",children:"No skills configured"}),(0,b.jsx)("p",{className:"text-xs mt-1",children:"Add a skill to give your agents capabilities"})]})]})]})}let T=["๐ค","๐","๐","๐งช","๐","๐ง","๐ก","๐ฏ","๐","โก"];function U({agents:a,skills:d,onSave:e}){let[f,g]=(0,c.useState)(null),[h,i]=(0,c.useState)(null),[j,k]=(0,c.useState)(!1),l=()=>{g(null),i(null),k(!1)},m=()=>{h&&h.name.trim()&&(j?e([...a,h]):e(a.map(a=>a.id===h.id?h:a)),l())},n=a=>(0,b.jsxs)("div",{className:"border border-accent rounded-lg p-4 space-y-4 bg-accent/5",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("select",{value:a.icon,onChange:b=>i({...a,icon:b.target.value}),className:"w-12 h-10 text-center text-xl bg-surface2 border border-border rounded-lg",children:T.map(a=>(0,b.jsx)("option",{value:a,children:a},a))}),(0,b.jsx)(K.Input,{value:a.name,onChange:b=>i({...a,name:b.target.value}),placeholder:"Agent name",className:"bg-surface2"})]}),(0,b.jsx)(K.Input,{value:a.description,onChange:b=>i({...a,description:b.target.value}),placeholder:"Description",className:"bg-surface2"}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"text-xs text-muted mb-2 block",children:"Assigned Skills"}),(0,b.jsxs)("div",{className:"flex flex-wrap gap-2",children:[d.map(c=>(0,b.jsxs)("button",{onClick:()=>(a=>{if(!h)return;let b=h.skills.includes(a)?h.skills.filter(b=>b!==a):[...h.skills,a];i({...h,skills:b})})(c.id),className:(0,q.cn)("flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg text-sm transition-colors",a.skills.includes(c.id)?"bg-accent/20 text-accent":"bg-surface2 text-muted hover:text-txt"),children:[(0,b.jsx)("span",{children:c.icon||"โก"}),c.name]},c.id)),0===d.length&&(0,b.jsx)("span",{className:"text-xs text-muted",children:"No skills available. Create skills first."})]})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"text-xs text-muted mb-1 block",children:"Custom System Prompt"}),(0,b.jsx)("textarea",{value:a.prompt,onChange:b=>i({...a,prompt:b.target.value}),placeholder:"Additional instructions for this agent...",rows:3,className:"w-full px-3 py-2 bg-surface2 border border-border rounded-lg text-sm resize-none"})]}),(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("button",{onClick:()=>i({...a,active:!a.active}),className:(0,q.cn)("w-11 h-6 rounded-full transition-colors relative",a.active?"bg-accent":"bg-border"),children:(0,b.jsx)("span",{className:(0,q.cn)("absolute top-1 w-4 h-4 rounded-full bg-white transition-transform",a.active?"left-6":"left-1")})}),(0,b.jsx)("span",{className:"text-sm text-muted",children:a.active?"Active":"Inactive"})]}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)("button",{onClick:l,className:"px-3 py-1.5 text-sm text-muted hover:text-txt transition-colors",children:"Cancel"}),(0,b.jsxs)("button",{onClick:m,disabled:!a.name.trim(),className:"flex items-center gap-2 px-3 py-1.5 bg-accent text-white rounded-lg text-sm font-medium hover:bg-accent/90 transition-colors disabled:opacity-50",children:[(0,b.jsx)(x.Check,{className:"w-4 h-4"}),"Save"]})]})]})]});return(0,b.jsxs)("div",{className:"space-y-6",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-xl font-semibold text-txt mb-1",children:"Agents"}),(0,b.jsx)("p",{className:"text-sm text-muted",children:"AI agent profiles with assigned skills."})]}),(0,b.jsxs)("button",{onClick:()=>{let a={id:`agent-${Date.now()}`,name:"",icon:"๐ค",description:"",skills:[],prompt:"",active:!0};g(a.id),i(a),k(!0)},className:"flex items-center gap-2 px-3 py-2 bg-accent text-white rounded-lg text-sm font-medium hover:bg-accent/90 transition-colors",children:[(0,b.jsx)(N.Plus,{className:"w-4 h-4"}),"Add Agent"]})]}),(0,b.jsxs)("div",{className:"space-y-3",children:[a.map(c=>(0,b.jsx)("div",{children:f===c.id&&h?n(h):(0,b.jsxs)("div",{className:(0,q.cn)("flex items-start gap-3 p-4 border rounded-lg transition-colors group",c.active?"border-border hover:border-accent/30":"border-border/50 opacity-60"),children:[(0,b.jsx)("div",{className:"w-10 h-10 rounded-lg bg-surface2 flex items-center justify-center text-xl shrink-0",children:c.icon}),(0,b.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:"font-medium text-txt",children:c.name}),!c.active&&(0,b.jsx)("span",{className:"text-xs bg-surface2 px-1.5 py-0.5 rounded-sm text-muted",children:"Inactive"})]}),(0,b.jsx)("p",{className:"text-sm text-muted mt-0.5",children:c.description}),c.skills.length>0&&(0,b.jsx)("div",{className:"flex flex-wrap gap-1 mt-2",children:c.skills.map(a=>{let c=d.find(b=>b.id===a);return c?(0,b.jsxs)("span",{className:"flex items-center gap-1 text-xs bg-surface2 px-1.5 py-0.5 rounded-sm text-muted",children:[c.icon," ",c.name]},a):null})})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("button",{onClick:()=>{var b;return b=c.id,void e(a.map(a=>a.id===b?{...a,active:!a.active}:a))},className:(0,q.cn)("w-9 h-5 rounded-full transition-colors relative",c.active?"bg-accent":"bg-border"),children:(0,b.jsx)("span",{className:(0,q.cn)("absolute top-0.5 w-4 h-4 rounded-full bg-white transition-transform",c.active?"left-4":"left-0.5")})}),(0,b.jsxs)("div",{className:"flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity",children:[(0,b.jsx)("button",{onClick:()=>{g(c.id),i({...c}),k(!1)},className:"p-1.5 rounded-sm hover:bg-surface2 text-muted hover:text-txt transition-colors",children:(0,b.jsx)(O.Pencil,{className:"w-4 h-4"})}),(0,b.jsx)("button",{onClick:()=>{var b;return b=c.id,void(confirm("Delete this agent?")&&e(a.filter(a=>a.id!==b)))},className:"p-1.5 rounded-sm hover:bg-red-500/10 text-muted hover:text-red-400 transition-colors",children:(0,b.jsx)(P.Trash2,{className:"w-4 h-4"})})]})]})]})},c.id)),j&&h&&n(h),0===a.length&&!j&&(0,b.jsxs)("div",{className:"text-center py-8 text-muted",children:[(0,b.jsx)(o.Bot,{className:"w-10 h-10 mx-auto mb-3 opacity-30"}),(0,b.jsx)("p",{className:"text-sm",children:"No agents configured"}),(0,b.jsx)("p",{className:"text-xs mt-1",children:"Add an agent to define AI personas with skills"})]})]})]})}var V=a.i(210436);let W=[{id:"appearance",label:"Appearance",icon:g},{id:"editor",label:"Editor",icon:i},{id:"project",label:"Project",icon:k},{id:"mcp",label:"MCP",icon:m},{id:"skills",label:"Skills",icon:n.Zap},{id:"agents",label:"Agents",icon:o.Bot}];a.s(["default",0,function(){let{rootParam:a,setEditorSettings:e,setAutoRefreshSeconds:f}=(0,d.useApp)(),[g,h]=(0,c.useState)("appearance"),[i,j]=(0,c.useState)(y.DEFAULT_SETTINGS),[k,l]=(0,c.useState)(y.DEFAULT_SKILLS),[m,n]=(0,c.useState)(y.DEFAULT_AGENTS),[o,r]=(0,c.useState)(!0),[s,t]=(0,c.useState)(!1),u=(0,c.useCallback)(async()=>{try{let b=await fetch(`/api/settings${a}&type=all`),c=await b.json();j({...y.DEFAULT_SETTINGS,...c.settings}),l(c.skills||y.DEFAULT_SKILLS),n(c.agents||y.DEFAULT_AGENTS)}catch{}r(!1)},[a]);(0,c.useEffect)(()=>{u()},[u]);let v=async b=>{t(!0),j(b);try{await fetch(`/api/settings${a}&type=settings`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)}),(0,V.applyTheme)(b.theme),(0,V.applyAccent)(b.accentColor),(0,V.applyFontSize)(b.fontSize),(0,V.applyFonts)(b),e(b.editor),f(b.project?.autoRefresh??0)}catch{}t(!1)},w=async b=>{t(!0),l(b);try{await fetch(`/api/settings${a}&type=skills`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)})}catch{}t(!1)},x=async b=>{t(!0),n(b);try{await fetch(`/api/settings${a}&type=agents`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)})}catch{}t(!1)};return o?(0,b.jsx)("div",{className:"flex items-center justify-center h-full",children:(0,b.jsx)("div",{className:"text-muted",children:"Loading settings..."})}):(0,b.jsxs)("div",{className:"flex h-full",children:[(0,b.jsxs)("aside",{className:"w-56 border-r border-border bg-sidebar shrink-0",children:[(0,b.jsx)("div",{className:"p-4 border-b border-border",children:(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(p.Settings,{className:"w-5 h-5 text-accent"}),(0,b.jsx)("h1",{className:"font-semibold text-txt",children:"Settings"})]})}),(0,b.jsx)("nav",{className:"p-2",children:W.map(a=>{let c=a.icon;return(0,b.jsxs)("button",{onClick:()=>h(a.id),className:(0,q.cn)("w-full flex items-center gap-3 px-3 py-2 rounded-lg text-sm transition-colors",g===a.id?"bg-accent/10 text-accent font-medium":"text-muted hover:text-txt hover:bg-surface2"),children:[(0,b.jsx)(c,{className:"w-4 h-4"}),a.label]},a.id)})})]}),(0,b.jsx)("div",{className:"flex-1 overflow-y-auto",children:(0,b.jsxs)("div",{className:"max-w-2xl mx-auto p-6",children:[s&&(0,b.jsx)("div",{className:"fixed top-4 right-4 bg-accent text-white px-3 py-1.5 rounded-lg text-sm shadow-lg",children:"Saving..."}),"appearance"===g&&(0,b.jsx)(B,{settings:i,onSave:v}),"editor"===g&&(0,b.jsx)(E,{settings:i,onSave:v}),"project"===g&&(0,b.jsx)(G,{settings:i,onSave:v}),"mcp"===g&&(0,b.jsx)(M,{settings:i,onSave:v}),"skills"===g&&(0,b.jsx)(S,{skills:k,onSave:w}),"agents"===g&&(0,b.jsx)(U,{agents:m,skills:k,onSave:x})]})})]})}],381249)}];
|
|
21
|
+
}`,path:".windsurf/mcp.json"}};function N({settings:a,onSave:d}){let[e,f]=(0,c.useState)(!1),[g,h]=(0,c.useState)(null),[i,j]=(0,c.useState)(null),k=(0,y.resolveMcpEndpoint)(a.mcp.endpoint,(0,L.useOrigin)()),l=async()=>{f(!0),h(null);try{(await fetch(k,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:1,method:"tools/list"})})).ok?h("success"):h("error")}catch{h("error")}f(!1)},n=async a=>{let b=M[a].config.replace("{{ENDPOINT}}",k);await navigator.clipboard.writeText(b),j(a),setTimeout(()=>j(null),2e3)};return(0,b.jsxs)("div",{className:"space-y-8",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-xl font-semibold text-txt mb-1",children:"MCP Connection"}),(0,b.jsx)("p",{className:"text-sm text-muted",children:"Configure the Model Context Protocol server for AI agents."})]}),(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsx)("label",{className:"block text-sm font-medium text-txt",children:"MCP Endpoint"}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(K.Input,{value:k,onChange:b=>{var c;return c=b.target.value,void d({...a,mcp:{...a.mcp,endpoint:c}})},className:"bg-surface2 font-mono text-sm"}),(0,b.jsxs)("button",{onClick:l,disabled:e,className:"px-4 py-2 bg-accent text-white rounded-lg text-sm font-medium hover:bg-accent/90 transition-colors disabled:opacity-50 flex items-center gap-2",children:[e?(0,b.jsx)(J.Loader2,{className:"w-4 h-4 animate-spin"}):(0,b.jsx)(m,{className:"w-4 h-4"}),"Test"]})]}),g&&(0,b.jsx)("div",{className:(0,q.cn)("flex items-center gap-2 text-sm","success"===g?"text-green-400":"text-red-400"),children:"success"===g?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(x.Check,{className:"w-4 h-4"}),"Connection successful"]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(H.X,{className:"w-4 h-4"}),"Connection failed"]})})]}),(0,b.jsxs)("div",{className:"space-y-3",children:[(0,b.jsx)("label",{className:"block text-sm font-medium text-txt",children:"Agent Configuration"}),(0,b.jsx)("p",{className:"text-xs text-muted",children:"Copy the configuration for your coding agent:"}),(0,b.jsx)("div",{className:"space-y-2",children:Object.entries(M).map(([a,c])=>(0,b.jsxs)("div",{className:"flex items-center justify-between p-3 border border-border rounded-lg",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-sm font-medium text-txt",children:c.name}),(0,b.jsx)("div",{className:"text-xs text-muted font-mono",children:c.path})]}),(0,b.jsx)("button",{onClick:()=>n(a),className:(0,q.cn)("flex items-center gap-2 px-3 py-1.5 rounded-lg text-sm transition-colors",i===a?"bg-green-500/20 text-green-400":"bg-surface2 text-muted hover:text-txt"),children:i===a?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(x.Check,{className:"w-3.5 h-3.5"}),"Copied"]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(I.Copy,{className:"w-3.5 h-3.5"}),"Copy"]})})]},a))})]})]})}var O=a.i(200382),P=a.i(661661),Q=a.i(28386);let R=["vibedoc_read_doc","vibedoc_write_doc","vibedoc_search_docs","vibedoc_list_docs","vibedoc_get_status","vibedoc_list_tasks","vibedoc_update_task","vibedoc_read_memory","vibedoc_update_memory"],S=["๐ง","๐","๐งช","๐","๐","๐","โก","๐ฏ","๐ก","๐"];function T({skills:a,onSave:d}){let[e,f]=(0,c.useState)(null),[g,h]=(0,c.useState)(null),[i,j]=(0,c.useState)(!1),k=()=>{f(null),h(null),j(!1)},l=()=>{g&&g.name.trim()&&(i?d([...a,g]):d(a.map(a=>a.id===g.id?g:a)),k())},m=a=>{if(!g)return;let b=g.tools.includes(a)?g.tools.filter(b=>b!==a):[...g.tools,a];h({...g,tools:b})};return(0,b.jsxs)("div",{className:"space-y-6",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-xl font-semibold text-txt mb-1",children:"Skills"}),(0,b.jsx)("p",{className:"text-sm text-muted",children:"Reusable capabilities for AI agents."})]}),(0,b.jsxs)("button",{onClick:()=>{let a={id:`skill-${Date.now()}`,name:"",description:"",trigger:"/",prompt:"",tools:[],icon:"โก"};f(a.id),h(a),j(!0)},className:"flex items-center gap-2 px-3 py-2 bg-accent text-white rounded-lg text-sm font-medium hover:bg-accent/90 transition-colors",children:[(0,b.jsx)(O.Plus,{className:"w-4 h-4"}),"Add Skill"]})]}),(0,b.jsxs)("div",{className:"space-y-3",children:[a.map(c=>(0,b.jsx)("div",{children:e===c.id&&g?(0,b.jsxs)("div",{className:"border border-accent rounded-lg p-4 space-y-4 bg-accent/5",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("select",{value:g.icon||"โก",onChange:a=>h({...g,icon:a.target.value}),className:"w-12 h-10 text-center text-xl bg-surface2 border border-border rounded-lg",children:S.map(a=>(0,b.jsx)("option",{value:a,children:a},a))}),(0,b.jsx)(K.Input,{value:g.name,onChange:a=>h({...g,name:a.target.value}),placeholder:"Skill name",className:"bg-surface2"})]}),(0,b.jsx)(K.Input,{value:g.description,onChange:a=>h({...g,description:a.target.value}),placeholder:"Description",className:"bg-surface2"}),(0,b.jsx)("div",{className:"flex gap-3",children:(0,b.jsxs)("div",{className:"flex-1",children:[(0,b.jsx)("label",{className:"text-xs text-muted mb-1 block",children:"Trigger"}),(0,b.jsx)(K.Input,{value:g.trigger,onChange:a=>h({...g,trigger:a.target.value}),placeholder:"/command",className:"bg-surface2 font-mono"})]})}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"text-xs text-muted mb-1 block",children:"System Prompt"}),(0,b.jsx)("textarea",{value:g.prompt,onChange:a=>h({...g,prompt:a.target.value}),placeholder:"Instructions for the AI when this skill is activated...",rows:4,className:"w-full px-3 py-2 bg-surface2 border border-border rounded-lg text-sm resize-none"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"text-xs text-muted mb-2 block",children:"Available Tools"}),(0,b.jsx)("div",{className:"flex flex-wrap gap-2",children:R.map(a=>(0,b.jsx)("button",{onClick:()=>m(a),className:(0,q.cn)("px-2 py-1 rounded-sm text-xs font-mono transition-colors",g.tools.includes(a)?"bg-accent/20 text-accent":"bg-surface2 text-muted hover:text-txt"),children:a.replace("vibedoc_","")},a))})]}),(0,b.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,b.jsx)("button",{onClick:k,className:"px-3 py-1.5 text-sm text-muted hover:text-txt transition-colors",children:"Cancel"}),(0,b.jsxs)("button",{onClick:l,disabled:!g.name.trim(),className:"flex items-center gap-2 px-3 py-1.5 bg-accent text-white rounded-lg text-sm font-medium hover:bg-accent/90 transition-colors disabled:opacity-50",children:[(0,b.jsx)(x.Check,{className:"w-4 h-4"}),"Save"]})]})]}):(0,b.jsxs)("div",{className:"flex items-start gap-3 p-4 border border-border rounded-lg hover:border-accent/30 transition-colors group",children:[(0,b.jsx)("div",{className:"w-10 h-10 rounded-lg bg-surface2 flex items-center justify-center text-xl shrink-0",children:c.icon||"โก"}),(0,b.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:"font-medium text-txt",children:c.name}),(0,b.jsx)("code",{className:"text-xs bg-surface2 px-1.5 py-0.5 rounded-sm text-accent",children:c.trigger})]}),(0,b.jsx)("p",{className:"text-sm text-muted mt-0.5",children:c.description}),c.tools.length>0&&(0,b.jsx)("div",{className:"flex flex-wrap gap-1 mt-2",children:c.tools.map(a=>(0,b.jsx)("span",{className:"text-xs bg-surface2 px-1.5 py-0.5 rounded-sm text-muted",children:a.replace("vibedoc_","")},a))})]}),(0,b.jsxs)("div",{className:"flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity",children:[(0,b.jsx)("button",{onClick:()=>{f(c.id),h({...c}),j(!1)},className:"p-1.5 rounded-sm hover:bg-surface2 text-muted hover:text-txt transition-colors",children:(0,b.jsx)(P.Pencil,{className:"w-4 h-4"})}),(0,b.jsx)("button",{onClick:()=>{var b;return b=c.id,void(confirm("Delete this skill?")&&d(a.filter(a=>a.id!==b)))},className:"p-1.5 rounded-sm hover:bg-red-500/10 text-muted hover:text-red-400 transition-colors",children:(0,b.jsx)(Q.Trash2,{className:"w-4 h-4"})})]})]})},c.id)),i&&g&&(0,b.jsxs)("div",{className:"border border-accent rounded-lg p-4 space-y-4 bg-accent/5",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("select",{value:g.icon||"โก",onChange:a=>h({...g,icon:a.target.value}),className:"w-12 h-10 text-center text-xl bg-surface2 border border-border rounded-lg",children:S.map(a=>(0,b.jsx)("option",{value:a,children:a},a))}),(0,b.jsx)(K.Input,{value:g.name,onChange:a=>h({...g,name:a.target.value}),placeholder:"Skill name",className:"bg-surface2"})]}),(0,b.jsx)(K.Input,{value:g.description,onChange:a=>h({...g,description:a.target.value}),placeholder:"Description",className:"bg-surface2"}),(0,b.jsx)("div",{className:"flex gap-3",children:(0,b.jsxs)("div",{className:"flex-1",children:[(0,b.jsx)("label",{className:"text-xs text-muted mb-1 block",children:"Trigger"}),(0,b.jsx)(K.Input,{value:g.trigger,onChange:a=>h({...g,trigger:a.target.value}),placeholder:"/command",className:"bg-surface2 font-mono"})]})}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"text-xs text-muted mb-1 block",children:"System Prompt"}),(0,b.jsx)("textarea",{value:g.prompt,onChange:a=>h({...g,prompt:a.target.value}),placeholder:"Instructions for the AI when this skill is activated...",rows:4,className:"w-full px-3 py-2 bg-surface2 border border-border rounded-lg text-sm resize-none"})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"text-xs text-muted mb-2 block",children:"Available Tools"}),(0,b.jsx)("div",{className:"flex flex-wrap gap-2",children:R.map(a=>(0,b.jsx)("button",{onClick:()=>m(a),className:(0,q.cn)("px-2 py-1 rounded-sm text-xs font-mono transition-colors",g.tools.includes(a)?"bg-accent/20 text-accent":"bg-surface2 text-muted hover:text-txt"),children:a.replace("vibedoc_","")},a))})]}),(0,b.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,b.jsx)("button",{onClick:k,className:"px-3 py-1.5 text-sm text-muted hover:text-txt transition-colors",children:"Cancel"}),(0,b.jsxs)("button",{onClick:l,disabled:!g.name.trim(),className:"flex items-center gap-2 px-3 py-1.5 bg-accent text-white rounded-lg text-sm font-medium hover:bg-accent/90 transition-colors disabled:opacity-50",children:[(0,b.jsx)(x.Check,{className:"w-4 h-4"}),"Save"]})]})]}),0===a.length&&!i&&(0,b.jsxs)("div",{className:"text-center py-8 text-muted",children:[(0,b.jsx)(n.Zap,{className:"w-10 h-10 mx-auto mb-3 opacity-30"}),(0,b.jsx)("p",{className:"text-sm",children:"No skills configured"}),(0,b.jsx)("p",{className:"text-xs mt-1",children:"Add a skill to give your agents capabilities"})]})]})]})}let U=["๐ค","๐","๐","๐งช","๐","๐ง","๐ก","๐ฏ","๐","โก"];function V({agents:a,skills:d,onSave:e}){let[f,g]=(0,c.useState)(null),[h,i]=(0,c.useState)(null),[j,k]=(0,c.useState)(!1),l=()=>{g(null),i(null),k(!1)},m=()=>{h&&h.name.trim()&&(j?e([...a,h]):e(a.map(a=>a.id===h.id?h:a)),l())},n=a=>(0,b.jsxs)("div",{className:"border border-accent rounded-lg p-4 space-y-4 bg-accent/5",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("select",{value:a.icon,onChange:b=>i({...a,icon:b.target.value}),className:"w-12 h-10 text-center text-xl bg-surface2 border border-border rounded-lg",children:U.map(a=>(0,b.jsx)("option",{value:a,children:a},a))}),(0,b.jsx)(K.Input,{value:a.name,onChange:b=>i({...a,name:b.target.value}),placeholder:"Agent name",className:"bg-surface2"})]}),(0,b.jsx)(K.Input,{value:a.description,onChange:b=>i({...a,description:b.target.value}),placeholder:"Description",className:"bg-surface2"}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"text-xs text-muted mb-2 block",children:"Assigned Skills"}),(0,b.jsxs)("div",{className:"flex flex-wrap gap-2",children:[d.map(c=>(0,b.jsxs)("button",{onClick:()=>(a=>{if(!h)return;let b=h.skills.includes(a)?h.skills.filter(b=>b!==a):[...h.skills,a];i({...h,skills:b})})(c.id),className:(0,q.cn)("flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg text-sm transition-colors",a.skills.includes(c.id)?"bg-accent/20 text-accent":"bg-surface2 text-muted hover:text-txt"),children:[(0,b.jsx)("span",{children:c.icon||"โก"}),c.name]},c.id)),0===d.length&&(0,b.jsx)("span",{className:"text-xs text-muted",children:"No skills available. Create skills first."})]})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{className:"text-xs text-muted mb-1 block",children:"Custom System Prompt"}),(0,b.jsx)("textarea",{value:a.prompt,onChange:b=>i({...a,prompt:b.target.value}),placeholder:"Additional instructions for this agent...",rows:3,className:"w-full px-3 py-2 bg-surface2 border border-border rounded-lg text-sm resize-none"})]}),(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("button",{onClick:()=>i({...a,active:!a.active}),className:(0,q.cn)("w-11 h-6 rounded-full transition-colors relative",a.active?"bg-accent":"bg-border"),children:(0,b.jsx)("span",{className:(0,q.cn)("absolute top-1 w-4 h-4 rounded-full bg-white transition-transform",a.active?"left-6":"left-1")})}),(0,b.jsx)("span",{className:"text-sm text-muted",children:a.active?"Active":"Inactive"})]}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)("button",{onClick:l,className:"px-3 py-1.5 text-sm text-muted hover:text-txt transition-colors",children:"Cancel"}),(0,b.jsxs)("button",{onClick:m,disabled:!a.name.trim(),className:"flex items-center gap-2 px-3 py-1.5 bg-accent text-white rounded-lg text-sm font-medium hover:bg-accent/90 transition-colors disabled:opacity-50",children:[(0,b.jsx)(x.Check,{className:"w-4 h-4"}),"Save"]})]})]})]});return(0,b.jsxs)("div",{className:"space-y-6",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-xl font-semibold text-txt mb-1",children:"Agents"}),(0,b.jsx)("p",{className:"text-sm text-muted",children:"AI agent profiles with assigned skills."})]}),(0,b.jsxs)("button",{onClick:()=>{let a={id:`agent-${Date.now()}`,name:"",icon:"๐ค",description:"",skills:[],prompt:"",active:!0};g(a.id),i(a),k(!0)},className:"flex items-center gap-2 px-3 py-2 bg-accent text-white rounded-lg text-sm font-medium hover:bg-accent/90 transition-colors",children:[(0,b.jsx)(O.Plus,{className:"w-4 h-4"}),"Add Agent"]})]}),(0,b.jsxs)("div",{className:"space-y-3",children:[a.map(c=>(0,b.jsx)("div",{children:f===c.id&&h?n(h):(0,b.jsxs)("div",{className:(0,q.cn)("flex items-start gap-3 p-4 border rounded-lg transition-colors group",c.active?"border-border hover:border-accent/30":"border-border/50 opacity-60"),children:[(0,b.jsx)("div",{className:"w-10 h-10 rounded-lg bg-surface2 flex items-center justify-center text-xl shrink-0",children:c.icon}),(0,b.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:"font-medium text-txt",children:c.name}),!c.active&&(0,b.jsx)("span",{className:"text-xs bg-surface2 px-1.5 py-0.5 rounded-sm text-muted",children:"Inactive"})]}),(0,b.jsx)("p",{className:"text-sm text-muted mt-0.5",children:c.description}),c.skills.length>0&&(0,b.jsx)("div",{className:"flex flex-wrap gap-1 mt-2",children:c.skills.map(a=>{let c=d.find(b=>b.id===a);return c?(0,b.jsxs)("span",{className:"flex items-center gap-1 text-xs bg-surface2 px-1.5 py-0.5 rounded-sm text-muted",children:[c.icon," ",c.name]},a):null})})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("button",{onClick:()=>{var b;return b=c.id,void e(a.map(a=>a.id===b?{...a,active:!a.active}:a))},className:(0,q.cn)("w-9 h-5 rounded-full transition-colors relative",c.active?"bg-accent":"bg-border"),children:(0,b.jsx)("span",{className:(0,q.cn)("absolute top-0.5 w-4 h-4 rounded-full bg-white transition-transform",c.active?"left-4":"left-0.5")})}),(0,b.jsxs)("div",{className:"flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity",children:[(0,b.jsx)("button",{onClick:()=>{g(c.id),i({...c}),k(!1)},className:"p-1.5 rounded-sm hover:bg-surface2 text-muted hover:text-txt transition-colors",children:(0,b.jsx)(P.Pencil,{className:"w-4 h-4"})}),(0,b.jsx)("button",{onClick:()=>{var b;return b=c.id,void(confirm("Delete this agent?")&&e(a.filter(a=>a.id!==b)))},className:"p-1.5 rounded-sm hover:bg-red-500/10 text-muted hover:text-red-400 transition-colors",children:(0,b.jsx)(Q.Trash2,{className:"w-4 h-4"})})]})]})]})},c.id)),j&&h&&n(h),0===a.length&&!j&&(0,b.jsxs)("div",{className:"text-center py-8 text-muted",children:[(0,b.jsx)(o.Bot,{className:"w-10 h-10 mx-auto mb-3 opacity-30"}),(0,b.jsx)("p",{className:"text-sm",children:"No agents configured"}),(0,b.jsx)("p",{className:"text-xs mt-1",children:"Add an agent to define AI personas with skills"})]})]})]})}var W=a.i(210436);let X=[{id:"appearance",label:"Appearance",icon:g},{id:"editor",label:"Editor",icon:i},{id:"project",label:"Project",icon:k},{id:"mcp",label:"MCP",icon:m},{id:"skills",label:"Skills",icon:n.Zap},{id:"agents",label:"Agents",icon:o.Bot}];a.s(["default",0,function(){let{rootParam:a,setEditorSettings:e,setAutoRefreshSeconds:f}=(0,d.useApp)(),[g,h]=(0,c.useState)("appearance"),[i,j]=(0,c.useState)(y.DEFAULT_SETTINGS),[k,l]=(0,c.useState)(y.DEFAULT_SKILLS),[m,n]=(0,c.useState)(y.DEFAULT_AGENTS),[o,r]=(0,c.useState)(!0),[s,t]=(0,c.useState)(!1),u=(0,c.useCallback)(async()=>{try{let b=await fetch(`/api/settings${a}&type=all`),c=await b.json();j({...y.DEFAULT_SETTINGS,...c.settings}),l(c.skills||y.DEFAULT_SKILLS),n(c.agents||y.DEFAULT_AGENTS)}catch{}r(!1)},[a]);(0,c.useEffect)(()=>{u()},[u]);let v=async b=>{t(!0),j(b);try{await fetch(`/api/settings${a}&type=settings`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)}),(0,W.applyTheme)(b.theme),(0,W.applyAccent)(b.accentColor),(0,W.applyFontSize)(b.fontSize),(0,W.applyFonts)(b),e(b.editor),f(b.project?.autoRefresh??0)}catch{}t(!1)},w=async b=>{t(!0),l(b);try{await fetch(`/api/settings${a}&type=skills`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)})}catch{}t(!1)},x=async b=>{t(!0),n(b);try{await fetch(`/api/settings${a}&type=agents`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)})}catch{}t(!1)};return o?(0,b.jsx)("div",{className:"flex items-center justify-center h-full",children:(0,b.jsx)("div",{className:"text-muted",children:"Loading settings..."})}):(0,b.jsxs)("div",{className:"flex h-full",children:[(0,b.jsxs)("aside",{className:"w-56 border-r border-border bg-sidebar shrink-0",children:[(0,b.jsx)("div",{className:"p-4 border-b border-border",children:(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(p.Settings,{className:"w-5 h-5 text-accent"}),(0,b.jsx)("h1",{className:"font-semibold text-txt",children:"Settings"})]})}),(0,b.jsx)("nav",{className:"p-2",children:X.map(a=>{let c=a.icon;return(0,b.jsxs)("button",{onClick:()=>h(a.id),className:(0,q.cn)("w-full flex items-center gap-3 px-3 py-2 rounded-lg text-sm transition-colors",g===a.id?"bg-accent/10 text-accent font-medium":"text-muted hover:text-txt hover:bg-surface2"),children:[(0,b.jsx)(c,{className:"w-4 h-4"}),a.label]},a.id)})})]}),(0,b.jsx)("div",{className:"flex-1 overflow-y-auto",children:(0,b.jsxs)("div",{className:"max-w-2xl mx-auto p-6",children:[s&&(0,b.jsx)("div",{className:"fixed top-4 right-4 bg-accent text-white px-3 py-1.5 rounded-lg text-sm shadow-lg",children:"Saving..."}),"appearance"===g&&(0,b.jsx)(B,{settings:i,onSave:v}),"editor"===g&&(0,b.jsx)(E,{settings:i,onSave:v}),"project"===g&&(0,b.jsx)(G,{settings:i,onSave:v}),"mcp"===g&&(0,b.jsx)(N,{settings:i,onSave:v}),"skills"===g&&(0,b.jsx)(T,{skills:k,onSave:w}),"agents"===g&&(0,b.jsx)(V,{agents:m,skills:k,onSave:x})]})})]})}],381249)}];
|
|
22
22
|
|
|
23
23
|
//# sourceMappingURL=src_app_%28app%29_settings_page_tsx_0zevtee._.js.map
|