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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/settings/ThemeSettings.tsx","../../../../src/components/settings/EditorSettings.tsx","../../../../src/components/settings/ProjectSettings.tsx","../../../../src/components/settings/MCPSettings.tsx","../../../../src/components/settings/SkillsSettings.tsx","../../../../src/components/settings/AgentsSettings.tsx","../../../../src/app/%28app%29/settings/page.tsx","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/monitor.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/palette.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/type.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/folder-cog.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/plug.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/moon.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/sun.ts"],"sourcesContent":["\"use client\"\r\n\r\nimport { Moon, Sun, Monitor, Check } from \"lucide-react\"\r\nimport { cn } from \"@/lib/utils\"\r\nimport { SANS_FONTS, MONO_FONTS, type AppSettings } from \"@/lib/settings\"\r\n\r\ninterface ThemeSettingsProps {\r\n settings: AppSettings\r\n onSave: (settings: AppSettings) => void\r\n}\r\n\r\nconst ACCENT_COLORS = [\r\n { id: \"blue\", label: \"Blue\", class: \"bg-blue-500\" },\r\n { id: \"purple\", label: \"Purple\", class: \"bg-purple-500\" },\r\n { id: \"green\", label: \"Green\", class: \"bg-green-500\" },\r\n { id: \"orange\", label: \"Orange\", class: \"bg-orange-500\" },\r\n] as const\r\n\r\nconst FONT_SIZES = [\r\n { id: \"small\", label: \"Small\" },\r\n { id: \"medium\", label: \"Medium\" },\r\n { id: \"large\", label: \"Large\" },\r\n] as const\r\n\r\nexport function ThemeSettings({ settings, onSave }: ThemeSettingsProps) {\r\n return (\r\n <div className=\"space-y-8\">\r\n <div>\r\n <h2 className=\"text-xl font-semibold text-txt mb-1\">Appearance</h2>\r\n <p className=\"text-sm text-muted\">Customize the look and feel of the app.</p>\r\n </div>\r\n\r\n {/* Theme */}\r\n <div className=\"space-y-3\">\r\n <label className=\"block text-sm font-medium text-txt\">Theme</label>\r\n <div className=\"grid grid-cols-3 gap-3\">\r\n {[\r\n { id: \"dark\", label: \"Dark\", icon: Moon },\r\n { id: \"light\", label: \"Light\", icon: Sun },\r\n { id: \"system\", label: \"System\", icon: Monitor },\r\n ].map(theme => {\r\n const Icon = theme.icon\r\n const isActive = settings.theme === theme.id\r\n return (\r\n <button\r\n key={theme.id}\r\n onClick={() => onSave({ ...settings, theme: theme.id as AppSettings[\"theme\"] })}\r\n className={cn(\r\n \"flex flex-col items-center gap-2 p-4 rounded-lg border transition-colors\",\r\n isActive\r\n ? \"border-accent bg-accent/10\"\r\n : \"border-border hover:border-accent/50\"\r\n )}\r\n >\r\n <Icon className={cn(\"w-5 h-5\", isActive ? \"text-accent\" : \"text-muted\")} />\r\n <span className={cn(\"text-sm\", isActive ? \"text-accent font-medium\" : \"text-muted\")}>\r\n {theme.label}\r\n </span>\r\n </button>\r\n )\r\n })}\r\n </div>\r\n </div>\r\n\r\n {/* Accent Color */}\r\n <div className=\"space-y-3\">\r\n <label className=\"block text-sm font-medium text-txt\">Accent Color</label>\r\n <div className=\"flex gap-3\">\r\n {ACCENT_COLORS.map(color => {\r\n const isActive = settings.accentColor === color.id\r\n return (\r\n <button\r\n key={color.id}\r\n onClick={() => onSave({ ...settings, accentColor: color.id as AppSettings[\"accentColor\"] })}\r\n className={cn(\r\n \"w-10 h-10 rounded-full flex items-center justify-center transition-transform\",\r\n color.class,\r\n isActive ? \"ring-2 ring-offset-2 ring-offset-bg ring-white scale-110\" : \"hover:scale-105\"\r\n )}\r\n title={color.label}\r\n >\r\n {isActive && <Check className=\"w-5 h-5 text-white\" />}\r\n </button>\r\n )\r\n })}\r\n </div>\r\n </div>\r\n\r\n {/* Font Size */}\r\n <div className=\"space-y-3\">\r\n <label className=\"block text-sm font-medium text-txt\">Font Size</label>\r\n <div className=\"flex gap-2\">\r\n {FONT_SIZES.map(size => {\r\n const isActive = settings.fontSize === size.id\r\n return (\r\n <button\r\n key={size.id}\r\n onClick={() => onSave({ ...settings, fontSize: size.id as AppSettings[\"fontSize\"] })}\r\n className={cn(\r\n \"px-4 py-2 rounded-lg border text-sm transition-colors\",\r\n isActive\r\n ? \"border-accent bg-accent/10 text-accent font-medium\"\r\n : \"border-border text-muted hover:border-accent/50\"\r\n )}\r\n >\r\n {size.label}\r\n </button>\r\n )\r\n })}\r\n </div>\r\n </div>\r\n\r\n {/* Font family — each option previews in its own font */}\r\n {([\r\n { key: \"fontSans\", label: \"Interface Font\", fonts: SANS_FONTS, fallback: \"system-ui\", sample: \"Ship the roadmap by Friday\" },\r\n { key: \"fontMono\", label: \"Code Font\", fonts: MONO_FONTS, fallback: \"ui-monospace, Menlo, Consolas, monospace\", sample: \"const id = 0O1lI;\" },\r\n ] as const).map(group => (\r\n <div key={group.key} className=\"space-y-3\">\r\n <label className=\"block text-sm font-medium text-txt\">{group.label}</label>\r\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-2\">\r\n {group.fonts.map(font => {\r\n const isActive = settings[group.key] === font.id\r\n return (\r\n <button\r\n key={font.id}\r\n onClick={() => onSave({ ...settings, [group.key]: font.id })}\r\n className={cn(\r\n \"text-left p-3 rounded-lg border transition-colors\",\r\n isActive ? \"border-accent bg-accent/10\" : \"border-border hover:border-accent/50\"\r\n )}\r\n >\r\n <div\r\n className=\"text-base text-txt truncate\"\r\n style={{ fontFamily: font.id === \"system\" ? group.fallback : `var(--font-${font.id})` }}\r\n >\r\n {group.sample}\r\n </div>\r\n <div className={cn(\"mt-1 text-xs\", isActive ? \"text-accent font-medium\" : \"text-txt\")}>{font.label}</div>\r\n <div className=\"text-xs text-muted\">{font.note}</div>\r\n </button>\r\n )\r\n })}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n )\r\n}\r\n","\"use client\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport type { AppSettings } from \"@/lib/settings\"\r\n\r\ninterface EditorSettingsProps {\r\n settings: AppSettings\r\n onSave: (settings: AppSettings) => void\r\n}\r\n\r\nconst AUTO_SAVE_OPTIONS = [\r\n { value: 0, label: \"Off\" },\r\n { value: 5, label: \"5 seconds\" },\r\n { value: 10, label: \"10 seconds\" },\r\n { value: 30, label: \"30 seconds\" },\r\n]\r\n\r\nconst PREVIEW_MODES = [\r\n { id: \"split\", label: \"Split View\" },\r\n { id: \"tab\", label: \"Tab View\" },\r\n { id: \"preview\", label: \"Preview Only\" },\r\n] as const\r\n\r\nexport function EditorSettings({ settings, onSave }: EditorSettingsProps) {\r\n const updateEditor = (key: keyof AppSettings[\"editor\"], value: unknown) => {\r\n onSave({\r\n ...settings,\r\n editor: { ...settings.editor, [key]: value },\r\n })\r\n }\r\n\r\n return (\r\n <div className=\"space-y-8\">\r\n <div>\r\n <h2 className=\"text-xl font-semibold text-txt mb-1\">Editor</h2>\r\n <p className=\"text-sm text-muted\">Configure the markdown editor behavior.</p>\r\n </div>\r\n\r\n {/* Auto-save */}\r\n <div className=\"space-y-3\">\r\n <label className=\"block text-sm font-medium text-txt\">Auto-save</label>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {AUTO_SAVE_OPTIONS.map(option => {\r\n const isActive = settings.editor.autoSave === option.value\r\n return (\r\n <button\r\n key={option.value}\r\n onClick={() => updateEditor(\"autoSave\", option.value)}\r\n className={cn(\r\n \"px-4 py-2 rounded-lg border text-sm transition-colors\",\r\n isActive\r\n ? \"border-accent bg-accent/10 text-accent font-medium\"\r\n : \"border-border text-muted hover:border-accent/50\"\r\n )}\r\n >\r\n {option.label}\r\n </button>\r\n )\r\n })}\r\n </div>\r\n </div>\r\n\r\n {/* Preview Mode */}\r\n <div className=\"space-y-3\">\r\n <label className=\"block text-sm font-medium text-txt\">Preview Mode</label>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {PREVIEW_MODES.map(mode => {\r\n const isActive = settings.editor.previewMode === mode.id\r\n return (\r\n <button\r\n key={mode.id}\r\n onClick={() => updateEditor(\"previewMode\", mode.id)}\r\n className={cn(\r\n \"px-4 py-2 rounded-lg border text-sm transition-colors\",\r\n isActive\r\n ? \"border-accent bg-accent/10 text-accent font-medium\"\r\n : \"border-border text-muted hover:border-accent/50\"\r\n )}\r\n >\r\n {mode.label}\r\n </button>\r\n )\r\n })}\r\n </div>\r\n </div>\r\n\r\n {/* Toggles */}\r\n <div className=\"space-y-4\">\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <div className=\"text-sm font-medium text-txt\">Word Wrap</div>\r\n <div className=\"text-xs text-muted\">Wrap long lines in the editor</div>\r\n </div>\r\n <button\r\n onClick={() => updateEditor(\"wordWrap\", !settings.editor.wordWrap)}\r\n className={cn(\r\n \"w-11 h-6 rounded-full transition-colors relative\",\r\n settings.editor.wordWrap ? \"bg-accent\" : \"bg-border\"\r\n )}\r\n >\r\n <span\r\n className={cn(\r\n \"absolute top-1 w-4 h-4 rounded-full bg-white transition-transform\",\r\n settings.editor.wordWrap ? \"left-6\" : \"left-1\"\r\n )}\r\n />\r\n </button>\r\n </div>\r\n\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <div className=\"text-sm font-medium text-txt\">Line Numbers</div>\r\n <div className=\"text-xs text-muted\">Show line numbers in the editor</div>\r\n </div>\r\n <button\r\n onClick={() => updateEditor(\"lineNumbers\", !settings.editor.lineNumbers)}\r\n className={cn(\r\n \"w-11 h-6 rounded-full transition-colors relative\",\r\n settings.editor.lineNumbers ? \"bg-accent\" : \"bg-border\"\r\n )}\r\n >\r\n <span\r\n className={cn(\r\n \"absolute top-1 w-4 h-4 rounded-full bg-white transition-transform\",\r\n settings.editor.lineNumbers ? \"left-6\" : \"left-1\"\r\n )}\r\n />\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","\"use client\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport type { AppSettings } from \"@/lib/settings\"\r\n\r\ninterface ProjectSettingsProps {\r\n settings: AppSettings\r\n onSave: (settings: AppSettings) => void\r\n}\r\n\r\nconst REFRESH_OPTIONS = [\r\n { value: 0, label: \"Off\" },\r\n { value: 5, label: \"5 seconds\" },\r\n { value: 10, label: \"10 seconds\" },\r\n { value: 30, label: \"30 seconds\" },\r\n]\r\n\r\nexport function ProjectSettings({ settings, onSave }: ProjectSettingsProps) {\r\n const updateProject = (key: keyof AppSettings[\"project\"], value: unknown) => {\r\n onSave({\r\n ...settings,\r\n project: { ...settings.project, [key]: value },\r\n })\r\n }\r\n\r\n return (\r\n <div className=\"space-y-8\">\r\n <div>\r\n <h2 className=\"text-xl font-semibold text-txt mb-1\">Project</h2>\r\n <p className=\"text-sm text-muted\">Configure project-level settings.</p>\r\n </div>\r\n\r\n {/* Auto-refresh */}\r\n <div className=\"space-y-3\">\r\n <label className=\"block text-sm font-medium text-txt\">Auto-refresh Interval</label>\r\n <p className=\"text-xs text-muted\">How often to check for changes in the project files.</p>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {REFRESH_OPTIONS.map(option => {\r\n const isActive = settings.project.autoRefresh === option.value\r\n return (\r\n <button\r\n key={option.value}\r\n onClick={() => updateProject(\"autoRefresh\", option.value)}\r\n className={cn(\r\n \"px-4 py-2 rounded-lg border text-sm transition-colors\",\r\n isActive\r\n ? \"border-accent bg-accent/10 text-accent font-medium\"\r\n : \"border-border text-muted hover:border-accent/50\"\r\n )}\r\n >\r\n {option.label}\r\n </button>\r\n )\r\n })}\r\n </div>\r\n </div>\r\n\r\n {/* Show Hidden Files */}\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <div className=\"text-sm font-medium text-txt\">Show Hidden Files</div>\r\n <div className=\"text-xs text-muted\">Display files starting with a dot</div>\r\n </div>\r\n <button\r\n onClick={() => updateProject(\"showHidden\", !settings.project.showHidden)}\r\n className={cn(\r\n \"w-11 h-6 rounded-full transition-colors relative\",\r\n settings.project.showHidden ? \"bg-accent\" : \"bg-border\"\r\n )}\r\n >\r\n <span\r\n className={cn(\r\n \"absolute top-1 w-4 h-4 rounded-full bg-white transition-transform\",\r\n settings.project.showHidden ? \"left-6\" : \"left-1\"\r\n )}\r\n />\r\n </button>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","\"use client\"\r\n\r\nimport { useState } from \"react\"\r\nimport { Plug, Check, X, Copy, Loader2 } from \"lucide-react\"\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Input } from \"@/components/ui/input\"\r\nimport type { AppSettings } from \"@/lib/settings\"\r\n\r\ninterface MCPSettingsProps {\r\n settings: AppSettings\r\n onSave: (settings: AppSettings) => void\r\n}\r\n\r\nconst AGENT_CONFIGS = {\r\n \"claude-code\": {\r\n name: \"Claude Code\",\r\n config: `{\r\n \"mcpServers\": {\r\n \"vibedoc\": {\r\n \"url\": \"{{ENDPOINT}}\"\r\n }\r\n }\r\n}`,\r\n path: \"~/.claude/claude.json\",\r\n },\r\n cursor: {\r\n name: \"Cursor\",\r\n config: `{\r\n \"mcp\": {\r\n \"servers\": {\r\n \"vibedoc\": {\r\n \"url\": \"{{ENDPOINT}}\"\r\n }\r\n }\r\n }\r\n}`,\r\n path: \".cursor/mcp.json\",\r\n },\r\n windsurf: {\r\n name: \"Windsurf\",\r\n config: `{\r\n \"mcpServers\": {\r\n \"vibedoc\": {\r\n \"url\": \"{{ENDPOINT}}\"\r\n }\r\n }\r\n}`,\r\n path: \".windsurf/mcp.json\",\r\n },\r\n}\r\n\r\nexport function MCPSettings({ settings, onSave }: MCPSettingsProps) {\r\n const [testing, setTesting] = useState(false)\r\n const [testResult, setTestResult] = useState<\"success\" | \"error\" | null>(null)\r\n const [copied, setCopied] = useState<string | null>(null)\r\n\r\n const updateMcp = (key: keyof AppSettings[\"mcp\"], value: string) => {\r\n onSave({\r\n ...settings,\r\n mcp: { ...settings.mcp, [key]: value },\r\n })\r\n }\r\n\r\n const testConnection = async () => {\r\n setTesting(true)\r\n setTestResult(null)\r\n try {\r\n const res = await fetch(settings.mcp.endpoint, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify({\r\n jsonrpc: \"2.0\",\r\n id: 1,\r\n method: \"tools/list\",\r\n }),\r\n })\r\n if (res.ok) {\r\n setTestResult(\"success\")\r\n } else {\r\n setTestResult(\"error\")\r\n }\r\n } catch {\r\n setTestResult(\"error\")\r\n }\r\n setTesting(false)\r\n }\r\n\r\n const copyConfig = async (agentId: string) => {\r\n const agent = AGENT_CONFIGS[agentId as keyof typeof AGENT_CONFIGS]\r\n const config = agent.config.replace(\"{{ENDPOINT}}\", settings.mcp.endpoint)\r\n await navigator.clipboard.writeText(config)\r\n setCopied(agentId)\r\n setTimeout(() => setCopied(null), 2000)\r\n }\r\n\r\n return (\r\n <div className=\"space-y-8\">\r\n <div>\r\n <h2 className=\"text-xl font-semibold text-txt mb-1\">MCP Connection</h2>\r\n <p className=\"text-sm text-muted\">Configure the Model Context Protocol server for AI agents.</p>\r\n </div>\r\n\r\n {/* Endpoint */}\r\n <div className=\"space-y-3\">\r\n <label className=\"block text-sm font-medium text-txt\">MCP Endpoint</label>\r\n <div className=\"flex gap-2\">\r\n <Input\r\n value={settings.mcp.endpoint}\r\n onChange={(e) => updateMcp(\"endpoint\", e.target.value)}\r\n className=\"bg-surface2 font-mono text-sm\"\r\n />\r\n <button\r\n onClick={testConnection}\r\n disabled={testing}\r\n 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\"\r\n >\r\n {testing ? (\r\n <Loader2 className=\"w-4 h-4 animate-spin\" />\r\n ) : (\r\n <Plug className=\"w-4 h-4\" />\r\n )}\r\n Test\r\n </button>\r\n </div>\r\n {testResult && (\r\n <div className={cn(\r\n \"flex items-center gap-2 text-sm\",\r\n testResult === \"success\" ? \"text-green-400\" : \"text-red-400\"\r\n )}>\r\n {testResult === \"success\" ? (\r\n <>\r\n <Check className=\"w-4 h-4\" />\r\n Connection successful\r\n </>\r\n ) : (\r\n <>\r\n <X className=\"w-4 h-4\" />\r\n Connection failed\r\n </>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Agent Configs */}\r\n <div className=\"space-y-3\">\r\n <label className=\"block text-sm font-medium text-txt\">Agent Configuration</label>\r\n <p className=\"text-xs text-muted\">Copy the configuration for your coding agent:</p>\r\n <div className=\"space-y-2\">\r\n {Object.entries(AGENT_CONFIGS).map(([id, agent]) => (\r\n <div\r\n key={id}\r\n className=\"flex items-center justify-between p-3 border border-border rounded-lg\"\r\n >\r\n <div>\r\n <div className=\"text-sm font-medium text-txt\">{agent.name}</div>\r\n <div className=\"text-xs text-muted font-mono\">{agent.path}</div>\r\n </div>\r\n <button\r\n onClick={() => copyConfig(id)}\r\n className={cn(\r\n \"flex items-center gap-2 px-3 py-1.5 rounded-lg text-sm transition-colors\",\r\n copied === id\r\n ? \"bg-green-500/20 text-green-400\"\r\n : \"bg-surface2 text-muted hover:text-txt\"\r\n )}\r\n >\r\n {copied === id ? (\r\n <>\r\n <Check className=\"w-3.5 h-3.5\" />\r\n Copied\r\n </>\r\n ) : (\r\n <>\r\n <Copy className=\"w-3.5 h-3.5\" />\r\n Copy\r\n </>\r\n )}\r\n </button>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","\"use client\"\r\n\r\nimport { useState } from \"react\"\r\nimport { Plus, Pencil, Trash2, X, Check, Zap } from \"lucide-react\"\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Input } from \"@/components/ui/input\"\r\nimport type { Skill } from \"@/lib/settings\"\r\n\r\ninterface SkillsSettingsProps {\r\n skills: Skill[]\r\n onSave: (skills: Skill[]) => void\r\n}\r\n\r\nconst AVAILABLE_TOOLS = [\r\n \"vibedoc_read_doc\",\r\n \"vibedoc_write_doc\",\r\n \"vibedoc_search_docs\",\r\n \"vibedoc_list_docs\",\r\n \"vibedoc_get_status\",\r\n \"vibedoc_list_tasks\",\r\n \"vibedoc_update_task\",\r\n \"vibedoc_read_memory\",\r\n \"vibedoc_update_memory\",\r\n]\r\n\r\nconst SKILL_ICONS = [\"🔧\", \"📝\", \"🧪\", \"🔍\", \"📊\", \"🔒\", \"⚡\", \"🎯\", \"💡\", \"🚀\"]\r\n\r\nexport function SkillsSettings({ skills, onSave }: SkillsSettingsProps) {\r\n const [editing, setEditing] = useState<string | null>(null)\r\n const [editForm, setEditForm] = useState<Skill | null>(null)\r\n const [isNew, setIsNew] = useState(false)\r\n\r\n const startEdit = (skill: Skill) => {\r\n setEditing(skill.id)\r\n setEditForm({ ...skill })\r\n setIsNew(false)\r\n }\r\n\r\n const startNew = () => {\r\n const newSkill: Skill = {\r\n id: `skill-${Date.now()}`,\r\n name: \"\",\r\n description: \"\",\r\n trigger: \"/\",\r\n prompt: \"\",\r\n tools: [],\r\n icon: \"⚡\",\r\n }\r\n setEditing(newSkill.id)\r\n setEditForm(newSkill)\r\n setIsNew(true)\r\n }\r\n\r\n const cancelEdit = () => {\r\n setEditing(null)\r\n setEditForm(null)\r\n setIsNew(false)\r\n }\r\n\r\n const saveEdit = () => {\r\n if (!editForm || !editForm.name.trim()) return\r\n \r\n if (isNew) {\r\n onSave([...skills, editForm])\r\n } else {\r\n onSave(skills.map(s => s.id === editForm.id ? editForm : s))\r\n }\r\n cancelEdit()\r\n }\r\n\r\n const deleteSkill = (id: string) => {\r\n if (!confirm(\"Delete this skill?\")) return\r\n onSave(skills.filter(s => s.id !== id))\r\n }\r\n\r\n const toggleTool = (tool: string) => {\r\n if (!editForm) return\r\n const tools = editForm.tools.includes(tool)\r\n ? editForm.tools.filter(t => t !== tool)\r\n : [...editForm.tools, tool]\r\n setEditForm({ ...editForm, tools })\r\n }\r\n\r\n return (\r\n <div className=\"space-y-6\">\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <h2 className=\"text-xl font-semibold text-txt mb-1\">Skills</h2>\r\n <p className=\"text-sm text-muted\">Reusable capabilities for AI agents.</p>\r\n </div>\r\n <button\r\n onClick={startNew}\r\n 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\"\r\n >\r\n <Plus className=\"w-4 h-4\" />\r\n Add Skill\r\n </button>\r\n </div>\r\n\r\n <div className=\"space-y-3\">\r\n {skills.map(skill => (\r\n <div key={skill.id}>\r\n {editing === skill.id && editForm ? (\r\n <div className=\"border border-accent rounded-lg p-4 space-y-4 bg-accent/5\">\r\n <div className=\"flex items-center gap-3\">\r\n <select\r\n value={editForm.icon || \"⚡\"}\r\n onChange={(e) => setEditForm({ ...editForm, icon: e.target.value })}\r\n className=\"w-12 h-10 text-center text-xl bg-surface2 border border-border rounded-lg\"\r\n >\r\n {SKILL_ICONS.map(icon => (\r\n <option key={icon} value={icon}>{icon}</option>\r\n ))}\r\n </select>\r\n <Input\r\n value={editForm.name}\r\n onChange={(e) => setEditForm({ ...editForm, name: e.target.value })}\r\n placeholder=\"Skill name\"\r\n className=\"bg-surface2\"\r\n />\r\n </div>\r\n \r\n <Input\r\n value={editForm.description}\r\n onChange={(e) => setEditForm({ ...editForm, description: e.target.value })}\r\n placeholder=\"Description\"\r\n className=\"bg-surface2\"\r\n />\r\n\r\n <div className=\"flex gap-3\">\r\n <div className=\"flex-1\">\r\n <label className=\"text-xs text-muted mb-1 block\">Trigger</label>\r\n <Input\r\n value={editForm.trigger}\r\n onChange={(e) => setEditForm({ ...editForm, trigger: e.target.value })}\r\n placeholder=\"/command\"\r\n className=\"bg-surface2 font-mono\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <label className=\"text-xs text-muted mb-1 block\">System Prompt</label>\r\n <textarea\r\n value={editForm.prompt}\r\n onChange={(e) => setEditForm({ ...editForm, prompt: e.target.value })}\r\n placeholder=\"Instructions for the AI when this skill is activated...\"\r\n rows={4}\r\n className=\"w-full px-3 py-2 bg-surface2 border border-border rounded-lg text-sm resize-none\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"text-xs text-muted mb-2 block\">Available Tools</label>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {AVAILABLE_TOOLS.map(tool => (\r\n <button\r\n key={tool}\r\n onClick={() => toggleTool(tool)}\r\n className={cn(\r\n \"px-2 py-1 rounded-sm text-xs font-mono transition-colors\",\r\n editForm.tools.includes(tool)\r\n ? \"bg-accent/20 text-accent\"\r\n : \"bg-surface2 text-muted hover:text-txt\"\r\n )}\r\n >\r\n {tool.replace(\"vibedoc_\", \"\")}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex justify-end gap-2\">\r\n <button\r\n onClick={cancelEdit}\r\n className=\"px-3 py-1.5 text-sm text-muted hover:text-txt transition-colors\"\r\n >\r\n Cancel\r\n </button>\r\n <button\r\n onClick={saveEdit}\r\n disabled={!editForm.name.trim()}\r\n 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\"\r\n >\r\n <Check className=\"w-4 h-4\" />\r\n Save\r\n </button>\r\n </div>\r\n </div>\r\n ) : (\r\n <div className=\"flex items-start gap-3 p-4 border border-border rounded-lg hover:border-accent/30 transition-colors group\">\r\n <div className=\"w-10 h-10 rounded-lg bg-surface2 flex items-center justify-center text-xl shrink-0\">\r\n {skill.icon || \"⚡\"}\r\n </div>\r\n <div className=\"flex-1 min-w-0\">\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"font-medium text-txt\">{skill.name}</span>\r\n <code className=\"text-xs bg-surface2 px-1.5 py-0.5 rounded-sm text-accent\">\r\n {skill.trigger}\r\n </code>\r\n </div>\r\n <p className=\"text-sm text-muted mt-0.5\">{skill.description}</p>\r\n {skill.tools.length > 0 && (\r\n <div className=\"flex flex-wrap gap-1 mt-2\">\r\n {skill.tools.map(tool => (\r\n <span key={tool} className=\"text-xs bg-surface2 px-1.5 py-0.5 rounded-sm text-muted\">\r\n {tool.replace(\"vibedoc_\", \"\")}\r\n </span>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n <div className=\"flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\r\n <button\r\n onClick={() => startEdit(skill)}\r\n className=\"p-1.5 rounded-sm hover:bg-surface2 text-muted hover:text-txt transition-colors\"\r\n >\r\n <Pencil className=\"w-4 h-4\" />\r\n </button>\r\n <button\r\n onClick={() => deleteSkill(skill.id)}\r\n className=\"p-1.5 rounded-sm hover:bg-red-500/10 text-muted hover:text-red-400 transition-colors\"\r\n >\r\n <Trash2 className=\"w-4 h-4\" />\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n ))}\r\n\r\n {isNew && editForm && (\r\n <div className=\"border border-accent rounded-lg p-4 space-y-4 bg-accent/5\">\r\n {/* Same form as editing */}\r\n <div className=\"flex items-center gap-3\">\r\n <select\r\n value={editForm.icon || \"⚡\"}\r\n onChange={(e) => setEditForm({ ...editForm, icon: e.target.value })}\r\n className=\"w-12 h-10 text-center text-xl bg-surface2 border border-border rounded-lg\"\r\n >\r\n {SKILL_ICONS.map(icon => (\r\n <option key={icon} value={icon}>{icon}</option>\r\n ))}\r\n </select>\r\n <Input\r\n value={editForm.name}\r\n onChange={(e) => setEditForm({ ...editForm, name: e.target.value })}\r\n placeholder=\"Skill name\"\r\n className=\"bg-surface2\"\r\n />\r\n </div>\r\n \r\n <Input\r\n value={editForm.description}\r\n onChange={(e) => setEditForm({ ...editForm, description: e.target.value })}\r\n placeholder=\"Description\"\r\n className=\"bg-surface2\"\r\n />\r\n\r\n <div className=\"flex gap-3\">\r\n <div className=\"flex-1\">\r\n <label className=\"text-xs text-muted mb-1 block\">Trigger</label>\r\n <Input\r\n value={editForm.trigger}\r\n onChange={(e) => setEditForm({ ...editForm, trigger: e.target.value })}\r\n placeholder=\"/command\"\r\n className=\"bg-surface2 font-mono\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <label className=\"text-xs text-muted mb-1 block\">System Prompt</label>\r\n <textarea\r\n value={editForm.prompt}\r\n onChange={(e) => setEditForm({ ...editForm, prompt: e.target.value })}\r\n placeholder=\"Instructions for the AI when this skill is activated...\"\r\n rows={4}\r\n className=\"w-full px-3 py-2 bg-surface2 border border-border rounded-lg text-sm resize-none\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"text-xs text-muted mb-2 block\">Available Tools</label>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {AVAILABLE_TOOLS.map(tool => (\r\n <button\r\n key={tool}\r\n onClick={() => toggleTool(tool)}\r\n className={cn(\r\n \"px-2 py-1 rounded-sm text-xs font-mono transition-colors\",\r\n editForm.tools.includes(tool)\r\n ? \"bg-accent/20 text-accent\"\r\n : \"bg-surface2 text-muted hover:text-txt\"\r\n )}\r\n >\r\n {tool.replace(\"vibedoc_\", \"\")}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex justify-end gap-2\">\r\n <button\r\n onClick={cancelEdit}\r\n className=\"px-3 py-1.5 text-sm text-muted hover:text-txt transition-colors\"\r\n >\r\n Cancel\r\n </button>\r\n <button\r\n onClick={saveEdit}\r\n disabled={!editForm.name.trim()}\r\n 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\"\r\n >\r\n <Check className=\"w-4 h-4\" />\r\n Save\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {skills.length === 0 && !isNew && (\r\n <div className=\"text-center py-8 text-muted\">\r\n <Zap className=\"w-10 h-10 mx-auto mb-3 opacity-30\" />\r\n <p className=\"text-sm\">No skills configured</p>\r\n <p className=\"text-xs mt-1\">Add a skill to give your agents capabilities</p>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )\r\n}\r\n","\"use client\"\r\n\r\nimport { useState } from \"react\"\r\nimport { Plus, Pencil, Trash2, Check, Bot } from \"lucide-react\"\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Input } from \"@/components/ui/input\"\r\nimport type { Agent, Skill } from \"@/lib/settings\"\r\n\r\ninterface AgentsSettingsProps {\r\n agents: Agent[]\r\n skills: Skill[]\r\n onSave: (agents: Agent[]) => void\r\n}\r\n\r\nconst AGENT_ICONS = [\"🤖\", \"📚\", \"🔒\", \"🧪\", \"📝\", \"🔧\", \"💡\", \"🎯\", \"🚀\", \"⚡\"]\r\n\r\nexport function AgentsSettings({ agents, skills, onSave }: AgentsSettingsProps) {\r\n const [editing, setEditing] = useState<string | null>(null)\r\n const [editForm, setEditForm] = useState<Agent | null>(null)\r\n const [isNew, setIsNew] = useState(false)\r\n\r\n const startEdit = (agent: Agent) => {\r\n setEditing(agent.id)\r\n setEditForm({ ...agent })\r\n setIsNew(false)\r\n }\r\n\r\n const startNew = () => {\r\n const newAgent: Agent = {\r\n id: `agent-${Date.now()}`,\r\n name: \"\",\r\n icon: \"🤖\",\r\n description: \"\",\r\n skills: [],\r\n prompt: \"\",\r\n active: true,\r\n }\r\n setEditing(newAgent.id)\r\n setEditForm(newAgent)\r\n setIsNew(true)\r\n }\r\n\r\n const cancelEdit = () => {\r\n setEditing(null)\r\n setEditForm(null)\r\n setIsNew(false)\r\n }\r\n\r\n const saveEdit = () => {\r\n if (!editForm || !editForm.name.trim()) return\r\n \r\n if (isNew) {\r\n onSave([...agents, editForm])\r\n } else {\r\n onSave(agents.map(a => a.id === editForm.id ? editForm : a))\r\n }\r\n cancelEdit()\r\n }\r\n\r\n const deleteAgent = (id: string) => {\r\n if (!confirm(\"Delete this agent?\")) return\r\n onSave(agents.filter(a => a.id !== id))\r\n }\r\n\r\n const toggleActive = (id: string) => {\r\n onSave(agents.map(a => a.id === id ? { ...a, active: !a.active } : a))\r\n }\r\n\r\n const toggleSkill = (skillId: string) => {\r\n if (!editForm) return\r\n const newSkills = editForm.skills.includes(skillId)\r\n ? editForm.skills.filter(s => s !== skillId)\r\n : [...editForm.skills, skillId]\r\n setEditForm({ ...editForm, skills: newSkills })\r\n }\r\n\r\n const renderForm = (form: Agent) => (\r\n <div className=\"border border-accent rounded-lg p-4 space-y-4 bg-accent/5\">\r\n <div className=\"flex items-center gap-3\">\r\n <select\r\n value={form.icon}\r\n onChange={(e) => setEditForm({ ...form, icon: e.target.value })}\r\n className=\"w-12 h-10 text-center text-xl bg-surface2 border border-border rounded-lg\"\r\n >\r\n {AGENT_ICONS.map(icon => (\r\n <option key={icon} value={icon}>{icon}</option>\r\n ))}\r\n </select>\r\n <Input\r\n value={form.name}\r\n onChange={(e) => setEditForm({ ...form, name: e.target.value })}\r\n placeholder=\"Agent name\"\r\n className=\"bg-surface2\"\r\n />\r\n </div>\r\n \r\n <Input\r\n value={form.description}\r\n onChange={(e) => setEditForm({ ...form, description: e.target.value })}\r\n placeholder=\"Description\"\r\n className=\"bg-surface2\"\r\n />\r\n\r\n <div>\r\n <label className=\"text-xs text-muted mb-2 block\">Assigned Skills</label>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {skills.map(skill => (\r\n <button\r\n key={skill.id}\r\n onClick={() => toggleSkill(skill.id)}\r\n className={cn(\r\n \"flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg text-sm transition-colors\",\r\n form.skills.includes(skill.id)\r\n ? \"bg-accent/20 text-accent\"\r\n : \"bg-surface2 text-muted hover:text-txt\"\r\n )}\r\n >\r\n <span>{skill.icon || \"⚡\"}</span>\r\n {skill.name}\r\n </button>\r\n ))}\r\n {skills.length === 0 && (\r\n <span className=\"text-xs text-muted\">No skills available. Create skills first.</span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <label className=\"text-xs text-muted mb-1 block\">Custom System Prompt</label>\r\n <textarea\r\n value={form.prompt}\r\n onChange={(e) => setEditForm({ ...form, prompt: e.target.value })}\r\n placeholder=\"Additional instructions for this agent...\"\r\n rows={3}\r\n className=\"w-full px-3 py-2 bg-surface2 border border-border rounded-lg text-sm resize-none\"\r\n />\r\n </div>\r\n\r\n <div className=\"flex items-center justify-between\">\r\n <div className=\"flex items-center gap-2\">\r\n <button\r\n onClick={() => setEditForm({ ...form, active: !form.active })}\r\n className={cn(\r\n \"w-11 h-6 rounded-full transition-colors relative\",\r\n form.active ? \"bg-accent\" : \"bg-border\"\r\n )}\r\n >\r\n <span\r\n className={cn(\r\n \"absolute top-1 w-4 h-4 rounded-full bg-white transition-transform\",\r\n form.active ? \"left-6\" : \"left-1\"\r\n )}\r\n />\r\n </button>\r\n <span className=\"text-sm text-muted\">{form.active ? \"Active\" : \"Inactive\"}</span>\r\n </div>\r\n <div className=\"flex gap-2\">\r\n <button\r\n onClick={cancelEdit}\r\n className=\"px-3 py-1.5 text-sm text-muted hover:text-txt transition-colors\"\r\n >\r\n Cancel\r\n </button>\r\n <button\r\n onClick={saveEdit}\r\n disabled={!form.name.trim()}\r\n 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\"\r\n >\r\n <Check className=\"w-4 h-4\" />\r\n Save\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n\r\n return (\r\n <div className=\"space-y-6\">\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <h2 className=\"text-xl font-semibold text-txt mb-1\">Agents</h2>\r\n <p className=\"text-sm text-muted\">AI agent profiles with assigned skills.</p>\r\n </div>\r\n <button\r\n onClick={startNew}\r\n 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\"\r\n >\r\n <Plus className=\"w-4 h-4\" />\r\n Add Agent\r\n </button>\r\n </div>\r\n\r\n <div className=\"space-y-3\">\r\n {agents.map(agent => (\r\n <div key={agent.id}>\r\n {editing === agent.id && editForm ? (\r\n renderForm(editForm)\r\n ) : (\r\n <div className={cn(\r\n \"flex items-start gap-3 p-4 border rounded-lg transition-colors group\",\r\n agent.active ? \"border-border hover:border-accent/30\" : \"border-border/50 opacity-60\"\r\n )}>\r\n <div className=\"w-10 h-10 rounded-lg bg-surface2 flex items-center justify-center text-xl shrink-0\">\r\n {agent.icon}\r\n </div>\r\n <div className=\"flex-1 min-w-0\">\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"font-medium text-txt\">{agent.name}</span>\r\n {!agent.active && (\r\n <span className=\"text-xs bg-surface2 px-1.5 py-0.5 rounded-sm text-muted\">\r\n Inactive\r\n </span>\r\n )}\r\n </div>\r\n <p className=\"text-sm text-muted mt-0.5\">{agent.description}</p>\r\n {agent.skills.length > 0 && (\r\n <div className=\"flex flex-wrap gap-1 mt-2\">\r\n {agent.skills.map(skillId => {\r\n const skill = skills.find(s => s.id === skillId)\r\n return skill ? (\r\n <span key={skillId} className=\"flex items-center gap-1 text-xs bg-surface2 px-1.5 py-0.5 rounded-sm text-muted\">\r\n {skill.icon} {skill.name}\r\n </span>\r\n ) : null\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n <div className=\"flex items-center gap-2\">\r\n <button\r\n onClick={() => toggleActive(agent.id)}\r\n className={cn(\r\n \"w-9 h-5 rounded-full transition-colors relative\",\r\n agent.active ? \"bg-accent\" : \"bg-border\"\r\n )}\r\n >\r\n <span\r\n className={cn(\r\n \"absolute top-0.5 w-4 h-4 rounded-full bg-white transition-transform\",\r\n agent.active ? \"left-4\" : \"left-0.5\"\r\n )}\r\n />\r\n </button>\r\n <div className=\"flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\r\n <button\r\n onClick={() => startEdit(agent)}\r\n className=\"p-1.5 rounded-sm hover:bg-surface2 text-muted hover:text-txt transition-colors\"\r\n >\r\n <Pencil className=\"w-4 h-4\" />\r\n </button>\r\n <button\r\n onClick={() => deleteAgent(agent.id)}\r\n className=\"p-1.5 rounded-sm hover:bg-red-500/10 text-muted hover:text-red-400 transition-colors\"\r\n >\r\n <Trash2 className=\"w-4 h-4\" />\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n ))}\r\n\r\n {isNew && editForm && renderForm(editForm)}\r\n\r\n {agents.length === 0 && !isNew && (\r\n <div className=\"text-center py-8 text-muted\">\r\n <Bot className=\"w-10 h-10 mx-auto mb-3 opacity-30\" />\r\n <p className=\"text-sm\">No agents configured</p>\r\n <p className=\"text-xs mt-1\">Add an agent to define AI personas with skills</p>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )\r\n}\r\n","\"use client\"\n\nimport { useState, useEffect, useCallback } from \"react\"\nimport { useApp } from \"@/context/AppContext\"\nimport { Palette, Type, FolderCog, Plug, Zap, Bot, Settings } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport { ThemeSettings } from \"@/components/settings/ThemeSettings\"\nimport { EditorSettings } from \"@/components/settings/EditorSettings\"\nimport { ProjectSettings } from \"@/components/settings/ProjectSettings\"\nimport { MCPSettings } from \"@/components/settings/MCPSettings\"\nimport { SkillsSettings } from \"@/components/settings/SkillsSettings\"\nimport { AgentsSettings } from \"@/components/settings/AgentsSettings\"\nimport type { AppSettings, Skill, Agent } from \"@/lib/settings\"\nimport { DEFAULT_SETTINGS, DEFAULT_SKILLS, DEFAULT_AGENTS } from \"@/lib/settings\"\nimport { applyTheme, applyAccent, applyFontSize, applyFonts } from \"@/lib/applySettings\"\n\nconst TABS = [\n { id: \"appearance\", label: \"Appearance\", icon: Palette },\n { id: \"editor\", label: \"Editor\", icon: Type },\n { id: \"project\", label: \"Project\", icon: FolderCog },\n { id: \"mcp\", label: \"MCP\", icon: Plug },\n { id: \"skills\", label: \"Skills\", icon: Zap },\n { id: \"agents\", label: \"Agents\", icon: Bot },\n]\n\nexport default function SettingsPage() {\n const { rootParam, setEditorSettings, setAutoRefreshSeconds } = useApp()\n const [activeTab, setActiveTab] = useState(\"appearance\")\n const [settings, setSettings] = useState<AppSettings>(DEFAULT_SETTINGS)\n const [skills, setSkills] = useState<Skill[]>(DEFAULT_SKILLS)\n const [agents, setAgents] = useState<Agent[]>(DEFAULT_AGENTS)\n const [loading, setLoading] = useState(true)\n const [saving, setSaving] = useState(false)\n\n const fetchAll = useCallback(async () => {\n try {\n const res = await fetch(`/api/settings${rootParam}&type=all`)\n const data = await res.json()\n setSettings({ ...DEFAULT_SETTINGS, ...data.settings })\n setSkills(data.skills || DEFAULT_SKILLS)\n setAgents(data.agents || DEFAULT_AGENTS)\n } catch {}\n setLoading(false)\n }, [rootParam])\n\n useEffect(() => {\n fetchAll()\n }, [fetchAll])\n\n const saveSettings = async (newSettings: AppSettings) => {\n setSaving(true)\n setSettings(newSettings)\n try {\n await fetch(`/api/settings${rootParam}&type=settings`, {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(newSettings),\n })\n applyTheme(newSettings.theme)\n applyAccent(newSettings.accentColor)\n applyFontSize(newSettings.fontSize)\n applyFonts(newSettings)\n setEditorSettings(newSettings.editor)\n setAutoRefreshSeconds(newSettings.project?.autoRefresh ?? 0)\n } catch {}\n setSaving(false)\n }\n\n const saveSkills = async (newSkills: Skill[]) => {\n setSaving(true)\n setSkills(newSkills)\n try {\n await fetch(`/api/settings${rootParam}&type=skills`, {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(newSkills),\n })\n } catch {}\n setSaving(false)\n }\n\n const saveAgents = async (newAgents: Agent[]) => {\n setSaving(true)\n setAgents(newAgents)\n try {\n await fetch(`/api/settings${rootParam}&type=agents`, {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(newAgents),\n })\n } catch {}\n setSaving(false)\n }\n\n if (loading) {\n return (\n <div className=\"flex items-center justify-center h-full\">\n <div className=\"text-muted\">Loading settings...</div>\n </div>\n )\n }\n\n return (\n <div className=\"flex h-full\">\n {/* Sidebar */}\n <aside className=\"w-56 border-r border-border bg-sidebar shrink-0\">\n <div className=\"p-4 border-b border-border\">\n <div className=\"flex items-center gap-2\">\n <Settings className=\"w-5 h-5 text-accent\" />\n <h1 className=\"font-semibold text-txt\">Settings</h1>\n </div>\n </div>\n <nav className=\"p-2\">\n {TABS.map(tab => {\n const Icon = tab.icon\n return (\n <button\n key={tab.id}\n onClick={() => setActiveTab(tab.id)}\n className={cn(\n \"w-full flex items-center gap-3 px-3 py-2 rounded-lg text-sm transition-colors\",\n activeTab === tab.id\n ? \"bg-accent/10 text-accent font-medium\"\n : \"text-muted hover:text-txt hover:bg-surface2\"\n )}\n >\n <Icon className=\"w-4 h-4\" />\n {tab.label}\n </button>\n )\n })}\n </nav>\n </aside>\n\n {/* Content */}\n <div className=\"flex-1 overflow-y-auto\">\n <div className=\"max-w-2xl mx-auto p-6\">\n {saving && (\n <div className=\"fixed top-4 right-4 bg-accent text-white px-3 py-1.5 rounded-lg text-sm shadow-lg\">\n Saving...\n </div>\n )}\n\n {activeTab === \"appearance\" && (\n <ThemeSettings settings={settings} onSave={saveSettings} />\n )}\n {activeTab === \"editor\" && (\n <EditorSettings settings={settings} onSave={saveSettings} />\n )}\n {activeTab === \"project\" && (\n <ProjectSettings settings={settings} onSave={saveSettings} />\n )}\n {activeTab === \"mcp\" && (\n <MCPSettings settings={settings} onSave={saveSettings} />\n )}\n {activeTab === \"skills\" && (\n <SkillsSettings skills={skills} onSave={saveSkills} />\n )}\n {activeTab === \"agents\" && (\n <AgentsSettings agents={agents} skills={skills} onSave={saveAgents} />\n )}\n </div>\n </div>\n </div>\n )\n}\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'monitor',\n size: 24,\n node: [\n ['rect', { width: '20', height: '14', x: '2', y: '3', rx: '2', key: '48i651' }],\n ['line', { x1: '8', x2: '16', y1: '21', y2: '21', key: '1svkeh' }],\n ['line', { x1: '12', x2: '12', y1: '17', y2: '21', key: 'vw1qmm' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Monitor\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/monitor\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 Monitor = createLucideIcon(__iconData);\n\nexport default Monitor;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'palette',\n size: 24,\n node: [\n [\n 'path',\n {\n 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',\n key: 'e79jfc',\n },\n ],\n ['circle', { cx: '13.5', cy: '6.5', r: '.5', fill: 'currentColor', key: '1okk4w' }],\n ['circle', { cx: '17.5', cy: '10.5', r: '.5', fill: 'currentColor', key: 'f64h9f' }],\n ['circle', { cx: '6.5', cy: '12.5', r: '.5', fill: 'currentColor', key: 'qy21gx' }],\n ['circle', { cx: '8.5', cy: '7.5', r: '.5', fill: 'currentColor', key: 'fotxhn' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Palette\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/palette\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 Palette = createLucideIcon(__iconData);\n\nexport default Palette;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'type',\n size: 24,\n node: [\n ['path', { d: 'M12 4v16', key: '1654pz' }],\n ['path', { d: 'M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2', key: 'e0r10z' }],\n ['path', { d: 'M9 20h6', key: 's66wpe' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Type\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/type\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 Type = createLucideIcon(__iconData);\n\nexport default Type;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'folder-cog',\n size: 24,\n node: [\n [\n 'path',\n {\n 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',\n key: '128dxu',\n },\n ],\n ['path', { d: 'm14.305 19.53.923-.382', key: '3m78fa' }],\n ['path', { d: 'm15.228 16.852-.923-.383', key: 'npixar' }],\n ['path', { d: 'm16.852 15.228-.383-.923', key: '5xggr7' }],\n ['path', { d: 'm16.852 20.772-.383.924', key: 'dpfhf9' }],\n ['path', { d: 'm19.148 15.228.383-.923', key: '1reyyz' }],\n ['path', { d: 'm19.53 21.696-.382-.924', key: '1goivc' }],\n ['path', { d: 'm20.772 16.852.924-.383', key: 'htqkph' }],\n ['path', { d: 'm20.772 19.148.924.383', key: '9w9pjp' }],\n ['circle', { cx: '18', cy: '18', r: '3', key: '1xkwt0' }],\n ],\n aliases: ['folder-cog-2'],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name FolderCog\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/folder-cog\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 FolderCog = createLucideIcon(__iconData);\n\nexport default FolderCog;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'plug',\n size: 24,\n node: [\n ['path', { d: 'M12 22v-5', key: '1ega77' }],\n ['path', { d: 'M15 8V2', key: '18g5xt' }],\n [\n 'path',\n { 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' },\n ],\n ['path', { d: 'M9 8V2', key: '14iosj' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Plug\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/plug\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 Plug = createLucideIcon(__iconData);\n\nexport default Plug;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'moon',\n size: 24,\n node: [\n [\n 'path',\n {\n 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',\n key: 'kfwtm',\n },\n ],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Moon\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/moon\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 Moon = createLucideIcon(__iconData);\n\nexport default Moon;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'sun',\n size: 24,\n node: [\n ['circle', { cx: '12', cy: '12', r: '4', key: '4exip2' }],\n ['path', { d: 'M12 2v2', key: 'tus03m' }],\n ['path', { d: 'M12 20v2', key: '1lh1kg' }],\n ['path', { d: 'm4.93 4.93 1.41 1.41', key: '149t6j' }],\n ['path', { d: 'm17.66 17.66 1.41 1.41', key: 'ptbguv' }],\n ['path', { d: 'M2 12h2', key: '1t8f8n' }],\n ['path', { d: 'M20 12h2', key: '1q8mjw' }],\n ['path', { d: 'm6.34 17.66-1.41 1.41', key: '1m8zz5' }],\n ['path', { d: 'm19.07 4.93-1.41 1.41', key: '1shlcs' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Sun\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/sun\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 Sun = createLucideIcon(__iconData);\n\nexport default Sun;\n"],"names":["size","d","cx","__iconData","fill","key","cy","r","Palette","node"],"mappings":"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","ignoreList":[7,8,9,10,11,12,13]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/settings/ThemeSettings.tsx","../../../../src/components/settings/EditorSettings.tsx","../../../../src/components/settings/ProjectSettings.tsx","../../../../src/components/settings/MCPSettings.tsx","../../../../src/components/settings/SkillsSettings.tsx","../../../../src/components/settings/AgentsSettings.tsx","../../../../src/app/%28app%29/settings/page.tsx","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/folder-cog.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/palette.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/plug.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/moon.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/type.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/sun.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/monitor.ts"],"sourcesContent":["\"use client\"\r\n\r\nimport { Moon, Sun, Monitor, Check } from \"lucide-react\"\r\nimport { cn } from \"@/lib/utils\"\r\nimport { SANS_FONTS, MONO_FONTS, type AppSettings } from \"@/lib/settings\"\r\n\r\ninterface ThemeSettingsProps {\r\n settings: AppSettings\r\n onSave: (settings: AppSettings) => void\r\n}\r\n\r\nconst ACCENT_COLORS = [\r\n { id: \"blue\", label: \"Blue\", class: \"bg-blue-500\" },\r\n { id: \"purple\", label: \"Purple\", class: \"bg-purple-500\" },\r\n { id: \"green\", label: \"Green\", class: \"bg-green-500\" },\r\n { id: \"orange\", label: \"Orange\", class: \"bg-orange-500\" },\r\n] as const\r\n\r\nconst FONT_SIZES = [\r\n { id: \"small\", label: \"Small\" },\r\n { id: \"medium\", label: \"Medium\" },\r\n { id: \"large\", label: \"Large\" },\r\n] as const\r\n\r\nexport function ThemeSettings({ settings, onSave }: ThemeSettingsProps) {\r\n return (\r\n <div className=\"space-y-8\">\r\n <div>\r\n <h2 className=\"text-xl font-semibold text-txt mb-1\">Appearance</h2>\r\n <p className=\"text-sm text-muted\">Customize the look and feel of the app.</p>\r\n </div>\r\n\r\n {/* Theme */}\r\n <div className=\"space-y-3\">\r\n <label className=\"block text-sm font-medium text-txt\">Theme</label>\r\n <div className=\"grid grid-cols-3 gap-3\">\r\n {[\r\n { id: \"dark\", label: \"Dark\", icon: Moon },\r\n { id: \"light\", label: \"Light\", icon: Sun },\r\n { id: \"system\", label: \"System\", icon: Monitor },\r\n ].map(theme => {\r\n const Icon = theme.icon\r\n const isActive = settings.theme === theme.id\r\n return (\r\n <button\r\n key={theme.id}\r\n onClick={() => onSave({ ...settings, theme: theme.id as AppSettings[\"theme\"] })}\r\n className={cn(\r\n \"flex flex-col items-center gap-2 p-4 rounded-lg border transition-colors\",\r\n isActive\r\n ? \"border-accent bg-accent/10\"\r\n : \"border-border hover:border-accent/50\"\r\n )}\r\n >\r\n <Icon className={cn(\"w-5 h-5\", isActive ? \"text-accent\" : \"text-muted\")} />\r\n <span className={cn(\"text-sm\", isActive ? \"text-accent font-medium\" : \"text-muted\")}>\r\n {theme.label}\r\n </span>\r\n </button>\r\n )\r\n })}\r\n </div>\r\n </div>\r\n\r\n {/* Accent Color */}\r\n <div className=\"space-y-3\">\r\n <label className=\"block text-sm font-medium text-txt\">Accent Color</label>\r\n <div className=\"flex gap-3\">\r\n {ACCENT_COLORS.map(color => {\r\n const isActive = settings.accentColor === color.id\r\n return (\r\n <button\r\n key={color.id}\r\n onClick={() => onSave({ ...settings, accentColor: color.id as AppSettings[\"accentColor\"] })}\r\n className={cn(\r\n \"w-10 h-10 rounded-full flex items-center justify-center transition-transform\",\r\n color.class,\r\n isActive ? \"ring-2 ring-offset-2 ring-offset-bg ring-white scale-110\" : \"hover:scale-105\"\r\n )}\r\n title={color.label}\r\n >\r\n {isActive && <Check className=\"w-5 h-5 text-white\" />}\r\n </button>\r\n )\r\n })}\r\n </div>\r\n </div>\r\n\r\n {/* Font Size */}\r\n <div className=\"space-y-3\">\r\n <label className=\"block text-sm font-medium text-txt\">Font Size</label>\r\n <div className=\"flex gap-2\">\r\n {FONT_SIZES.map(size => {\r\n const isActive = settings.fontSize === size.id\r\n return (\r\n <button\r\n key={size.id}\r\n onClick={() => onSave({ ...settings, fontSize: size.id as AppSettings[\"fontSize\"] })}\r\n className={cn(\r\n \"px-4 py-2 rounded-lg border text-sm transition-colors\",\r\n isActive\r\n ? \"border-accent bg-accent/10 text-accent font-medium\"\r\n : \"border-border text-muted hover:border-accent/50\"\r\n )}\r\n >\r\n {size.label}\r\n </button>\r\n )\r\n })}\r\n </div>\r\n </div>\r\n\r\n {/* Font family — each option previews in its own font */}\r\n {([\r\n { key: \"fontSans\", label: \"Interface Font\", fonts: SANS_FONTS, fallback: \"system-ui\", sample: \"Ship the roadmap by Friday\" },\r\n { key: \"fontMono\", label: \"Code Font\", fonts: MONO_FONTS, fallback: \"ui-monospace, Menlo, Consolas, monospace\", sample: \"const id = 0O1lI;\" },\r\n ] as const).map(group => (\r\n <div key={group.key} className=\"space-y-3\">\r\n <label className=\"block text-sm font-medium text-txt\">{group.label}</label>\r\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-2\">\r\n {group.fonts.map(font => {\r\n const isActive = settings[group.key] === font.id\r\n return (\r\n <button\r\n key={font.id}\r\n onClick={() => onSave({ ...settings, [group.key]: font.id })}\r\n className={cn(\r\n \"text-left p-3 rounded-lg border transition-colors\",\r\n isActive ? \"border-accent bg-accent/10\" : \"border-border hover:border-accent/50\"\r\n )}\r\n >\r\n <div\r\n className=\"text-base text-txt truncate\"\r\n style={{ fontFamily: font.id === \"system\" ? group.fallback : `var(--font-${font.id})` }}\r\n >\r\n {group.sample}\r\n </div>\r\n <div className={cn(\"mt-1 text-xs\", isActive ? \"text-accent font-medium\" : \"text-txt\")}>{font.label}</div>\r\n <div className=\"text-xs text-muted\">{font.note}</div>\r\n </button>\r\n )\r\n })}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n )\r\n}\r\n","\"use client\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport type { AppSettings } from \"@/lib/settings\"\r\n\r\ninterface EditorSettingsProps {\r\n settings: AppSettings\r\n onSave: (settings: AppSettings) => void\r\n}\r\n\r\nconst AUTO_SAVE_OPTIONS = [\r\n { value: 0, label: \"Off\" },\r\n { value: 5, label: \"5 seconds\" },\r\n { value: 10, label: \"10 seconds\" },\r\n { value: 30, label: \"30 seconds\" },\r\n]\r\n\r\nconst PREVIEW_MODES = [\r\n { id: \"split\", label: \"Split View\" },\r\n { id: \"tab\", label: \"Tab View\" },\r\n { id: \"preview\", label: \"Preview Only\" },\r\n] as const\r\n\r\nexport function EditorSettings({ settings, onSave }: EditorSettingsProps) {\r\n const updateEditor = (key: keyof AppSettings[\"editor\"], value: unknown) => {\r\n onSave({\r\n ...settings,\r\n editor: { ...settings.editor, [key]: value },\r\n })\r\n }\r\n\r\n return (\r\n <div className=\"space-y-8\">\r\n <div>\r\n <h2 className=\"text-xl font-semibold text-txt mb-1\">Editor</h2>\r\n <p className=\"text-sm text-muted\">Configure the markdown editor behavior.</p>\r\n </div>\r\n\r\n {/* Auto-save */}\r\n <div className=\"space-y-3\">\r\n <label className=\"block text-sm font-medium text-txt\">Auto-save</label>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {AUTO_SAVE_OPTIONS.map(option => {\r\n const isActive = settings.editor.autoSave === option.value\r\n return (\r\n <button\r\n key={option.value}\r\n onClick={() => updateEditor(\"autoSave\", option.value)}\r\n className={cn(\r\n \"px-4 py-2 rounded-lg border text-sm transition-colors\",\r\n isActive\r\n ? \"border-accent bg-accent/10 text-accent font-medium\"\r\n : \"border-border text-muted hover:border-accent/50\"\r\n )}\r\n >\r\n {option.label}\r\n </button>\r\n )\r\n })}\r\n </div>\r\n </div>\r\n\r\n {/* Preview Mode */}\r\n <div className=\"space-y-3\">\r\n <label className=\"block text-sm font-medium text-txt\">Preview Mode</label>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {PREVIEW_MODES.map(mode => {\r\n const isActive = settings.editor.previewMode === mode.id\r\n return (\r\n <button\r\n key={mode.id}\r\n onClick={() => updateEditor(\"previewMode\", mode.id)}\r\n className={cn(\r\n \"px-4 py-2 rounded-lg border text-sm transition-colors\",\r\n isActive\r\n ? \"border-accent bg-accent/10 text-accent font-medium\"\r\n : \"border-border text-muted hover:border-accent/50\"\r\n )}\r\n >\r\n {mode.label}\r\n </button>\r\n )\r\n })}\r\n </div>\r\n </div>\r\n\r\n {/* Toggles */}\r\n <div className=\"space-y-4\">\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <div className=\"text-sm font-medium text-txt\">Word Wrap</div>\r\n <div className=\"text-xs text-muted\">Wrap long lines in the editor</div>\r\n </div>\r\n <button\r\n onClick={() => updateEditor(\"wordWrap\", !settings.editor.wordWrap)}\r\n className={cn(\r\n \"w-11 h-6 rounded-full transition-colors relative\",\r\n settings.editor.wordWrap ? \"bg-accent\" : \"bg-border\"\r\n )}\r\n >\r\n <span\r\n className={cn(\r\n \"absolute top-1 w-4 h-4 rounded-full bg-white transition-transform\",\r\n settings.editor.wordWrap ? \"left-6\" : \"left-1\"\r\n )}\r\n />\r\n </button>\r\n </div>\r\n\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <div className=\"text-sm font-medium text-txt\">Line Numbers</div>\r\n <div className=\"text-xs text-muted\">Show line numbers in the editor</div>\r\n </div>\r\n <button\r\n onClick={() => updateEditor(\"lineNumbers\", !settings.editor.lineNumbers)}\r\n className={cn(\r\n \"w-11 h-6 rounded-full transition-colors relative\",\r\n settings.editor.lineNumbers ? \"bg-accent\" : \"bg-border\"\r\n )}\r\n >\r\n <span\r\n className={cn(\r\n \"absolute top-1 w-4 h-4 rounded-full bg-white transition-transform\",\r\n settings.editor.lineNumbers ? \"left-6\" : \"left-1\"\r\n )}\r\n />\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","\"use client\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport type { AppSettings } from \"@/lib/settings\"\r\n\r\ninterface ProjectSettingsProps {\r\n settings: AppSettings\r\n onSave: (settings: AppSettings) => void\r\n}\r\n\r\nconst REFRESH_OPTIONS = [\r\n { value: 0, label: \"Off\" },\r\n { value: 5, label: \"5 seconds\" },\r\n { value: 10, label: \"10 seconds\" },\r\n { value: 30, label: \"30 seconds\" },\r\n]\r\n\r\nexport function ProjectSettings({ settings, onSave }: ProjectSettingsProps) {\r\n const updateProject = (key: keyof AppSettings[\"project\"], value: unknown) => {\r\n onSave({\r\n ...settings,\r\n project: { ...settings.project, [key]: value },\r\n })\r\n }\r\n\r\n return (\r\n <div className=\"space-y-8\">\r\n <div>\r\n <h2 className=\"text-xl font-semibold text-txt mb-1\">Project</h2>\r\n <p className=\"text-sm text-muted\">Configure project-level settings.</p>\r\n </div>\r\n\r\n {/* Auto-refresh */}\r\n <div className=\"space-y-3\">\r\n <label className=\"block text-sm font-medium text-txt\">Auto-refresh Interval</label>\r\n <p className=\"text-xs text-muted\">How often to check for changes in the project files.</p>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {REFRESH_OPTIONS.map(option => {\r\n const isActive = settings.project.autoRefresh === option.value\r\n return (\r\n <button\r\n key={option.value}\r\n onClick={() => updateProject(\"autoRefresh\", option.value)}\r\n className={cn(\r\n \"px-4 py-2 rounded-lg border text-sm transition-colors\",\r\n isActive\r\n ? \"border-accent bg-accent/10 text-accent font-medium\"\r\n : \"border-border text-muted hover:border-accent/50\"\r\n )}\r\n >\r\n {option.label}\r\n </button>\r\n )\r\n })}\r\n </div>\r\n </div>\r\n\r\n {/* Show Hidden Files */}\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <div className=\"text-sm font-medium text-txt\">Show Hidden Files</div>\r\n <div className=\"text-xs text-muted\">Display files starting with a dot</div>\r\n </div>\r\n <button\r\n onClick={() => updateProject(\"showHidden\", !settings.project.showHidden)}\r\n className={cn(\r\n \"w-11 h-6 rounded-full transition-colors relative\",\r\n settings.project.showHidden ? \"bg-accent\" : \"bg-border\"\r\n )}\r\n >\r\n <span\r\n className={cn(\r\n \"absolute top-1 w-4 h-4 rounded-full bg-white transition-transform\",\r\n settings.project.showHidden ? \"left-6\" : \"left-1\"\r\n )}\r\n />\r\n </button>\r\n </div>\r\n </div>\r\n )\r\n}\r\n","\"use client\"\n\nimport { useState } from \"react\"\nimport { Plug, Check, X, Copy, Loader2 } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport { Input } from \"@/components/ui/input\"\nimport { resolveMcpEndpoint, type AppSettings } from \"@/lib/settings\"\nimport { useOrigin } from \"@/hooks/use-origin\"\n\ninterface MCPSettingsProps {\n settings: AppSettings\n onSave: (settings: AppSettings) => void\n}\n\nconst AGENT_CONFIGS = {\n \"claude-code\": {\n name: \"Claude Code\",\n config: `{\n \"mcpServers\": {\n \"vibedoc\": {\n \"url\": \"{{ENDPOINT}}\"\n }\n }\n}`,\n path: \"~/.claude/claude.json\",\n },\n cursor: {\n name: \"Cursor\",\n config: `{\n \"mcp\": {\n \"servers\": {\n \"vibedoc\": {\n \"url\": \"{{ENDPOINT}}\"\n }\n }\n }\n}`,\n path: \".cursor/mcp.json\",\n },\n windsurf: {\n name: \"Windsurf\",\n config: `{\n \"mcpServers\": {\n \"vibedoc\": {\n \"url\": \"{{ENDPOINT}}\"\n }\n }\n}`,\n path: \".windsurf/mcp.json\",\n },\n}\n\nexport function MCPSettings({ settings, onSave }: MCPSettingsProps) {\n const [testing, setTesting] = useState(false)\n const [testResult, setTestResult] = useState<\"success\" | \"error\" | null>(null)\n const [copied, setCopied] = useState<string | null>(null)\n const endpoint = resolveMcpEndpoint(settings.mcp.endpoint, useOrigin())\n\n const updateMcp = (key: keyof AppSettings[\"mcp\"], value: string) => {\n onSave({\n ...settings,\n mcp: { ...settings.mcp, [key]: value },\n })\n }\n\n const testConnection = async () => {\n setTesting(true)\n setTestResult(null)\n try {\n const res = await fetch(endpoint, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: 1,\n method: \"tools/list\",\n }),\n })\n if (res.ok) {\n setTestResult(\"success\")\n } else {\n setTestResult(\"error\")\n }\n } catch {\n setTestResult(\"error\")\n }\n setTesting(false)\n }\n\n const copyConfig = async (agentId: string) => {\n const agent = AGENT_CONFIGS[agentId as keyof typeof AGENT_CONFIGS]\n const config = agent.config.replace(\"{{ENDPOINT}}\", endpoint)\n await navigator.clipboard.writeText(config)\n setCopied(agentId)\n setTimeout(() => setCopied(null), 2000)\n }\n\n return (\n <div className=\"space-y-8\">\n <div>\n <h2 className=\"text-xl font-semibold text-txt mb-1\">MCP Connection</h2>\n <p className=\"text-sm text-muted\">Configure the Model Context Protocol server for AI agents.</p>\n </div>\n\n {/* Endpoint */}\n <div className=\"space-y-3\">\n <label className=\"block text-sm font-medium text-txt\">MCP Endpoint</label>\n <div className=\"flex gap-2\">\n <Input\n value={endpoint}\n onChange={(e) => updateMcp(\"endpoint\", e.target.value)}\n className=\"bg-surface2 font-mono text-sm\"\n />\n <button\n onClick={testConnection}\n disabled={testing}\n 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\"\n >\n {testing ? (\n <Loader2 className=\"w-4 h-4 animate-spin\" />\n ) : (\n <Plug className=\"w-4 h-4\" />\n )}\n Test\n </button>\n </div>\n {testResult && (\n <div className={cn(\n \"flex items-center gap-2 text-sm\",\n testResult === \"success\" ? \"text-green-400\" : \"text-red-400\"\n )}>\n {testResult === \"success\" ? (\n <>\n <Check className=\"w-4 h-4\" />\n Connection successful\n </>\n ) : (\n <>\n <X className=\"w-4 h-4\" />\n Connection failed\n </>\n )}\n </div>\n )}\n </div>\n\n {/* Agent Configs */}\n <div className=\"space-y-3\">\n <label className=\"block text-sm font-medium text-txt\">Agent Configuration</label>\n <p className=\"text-xs text-muted\">Copy the configuration for your coding agent:</p>\n <div className=\"space-y-2\">\n {Object.entries(AGENT_CONFIGS).map(([id, agent]) => (\n <div\n key={id}\n className=\"flex items-center justify-between p-3 border border-border rounded-lg\"\n >\n <div>\n <div className=\"text-sm font-medium text-txt\">{agent.name}</div>\n <div className=\"text-xs text-muted font-mono\">{agent.path}</div>\n </div>\n <button\n onClick={() => copyConfig(id)}\n className={cn(\n \"flex items-center gap-2 px-3 py-1.5 rounded-lg text-sm transition-colors\",\n copied === id\n ? \"bg-green-500/20 text-green-400\"\n : \"bg-surface2 text-muted hover:text-txt\"\n )}\n >\n {copied === id ? (\n <>\n <Check className=\"w-3.5 h-3.5\" />\n Copied\n </>\n ) : (\n <>\n <Copy className=\"w-3.5 h-3.5\" />\n Copy\n </>\n )}\n </button>\n </div>\n ))}\n </div>\n </div>\n </div>\n )\n}\n","\"use client\"\r\n\r\nimport { useState } from \"react\"\r\nimport { Plus, Pencil, Trash2, X, Check, Zap } from \"lucide-react\"\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Input } from \"@/components/ui/input\"\r\nimport type { Skill } from \"@/lib/settings\"\r\n\r\ninterface SkillsSettingsProps {\r\n skills: Skill[]\r\n onSave: (skills: Skill[]) => void\r\n}\r\n\r\nconst AVAILABLE_TOOLS = [\r\n \"vibedoc_read_doc\",\r\n \"vibedoc_write_doc\",\r\n \"vibedoc_search_docs\",\r\n \"vibedoc_list_docs\",\r\n \"vibedoc_get_status\",\r\n \"vibedoc_list_tasks\",\r\n \"vibedoc_update_task\",\r\n \"vibedoc_read_memory\",\r\n \"vibedoc_update_memory\",\r\n]\r\n\r\nconst SKILL_ICONS = [\"🔧\", \"📝\", \"🧪\", \"🔍\", \"📊\", \"🔒\", \"⚡\", \"🎯\", \"💡\", \"🚀\"]\r\n\r\nexport function SkillsSettings({ skills, onSave }: SkillsSettingsProps) {\r\n const [editing, setEditing] = useState<string | null>(null)\r\n const [editForm, setEditForm] = useState<Skill | null>(null)\r\n const [isNew, setIsNew] = useState(false)\r\n\r\n const startEdit = (skill: Skill) => {\r\n setEditing(skill.id)\r\n setEditForm({ ...skill })\r\n setIsNew(false)\r\n }\r\n\r\n const startNew = () => {\r\n const newSkill: Skill = {\r\n id: `skill-${Date.now()}`,\r\n name: \"\",\r\n description: \"\",\r\n trigger: \"/\",\r\n prompt: \"\",\r\n tools: [],\r\n icon: \"⚡\",\r\n }\r\n setEditing(newSkill.id)\r\n setEditForm(newSkill)\r\n setIsNew(true)\r\n }\r\n\r\n const cancelEdit = () => {\r\n setEditing(null)\r\n setEditForm(null)\r\n setIsNew(false)\r\n }\r\n\r\n const saveEdit = () => {\r\n if (!editForm || !editForm.name.trim()) return\r\n \r\n if (isNew) {\r\n onSave([...skills, editForm])\r\n } else {\r\n onSave(skills.map(s => s.id === editForm.id ? editForm : s))\r\n }\r\n cancelEdit()\r\n }\r\n\r\n const deleteSkill = (id: string) => {\r\n if (!confirm(\"Delete this skill?\")) return\r\n onSave(skills.filter(s => s.id !== id))\r\n }\r\n\r\n const toggleTool = (tool: string) => {\r\n if (!editForm) return\r\n const tools = editForm.tools.includes(tool)\r\n ? editForm.tools.filter(t => t !== tool)\r\n : [...editForm.tools, tool]\r\n setEditForm({ ...editForm, tools })\r\n }\r\n\r\n return (\r\n <div className=\"space-y-6\">\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <h2 className=\"text-xl font-semibold text-txt mb-1\">Skills</h2>\r\n <p className=\"text-sm text-muted\">Reusable capabilities for AI agents.</p>\r\n </div>\r\n <button\r\n onClick={startNew}\r\n 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\"\r\n >\r\n <Plus className=\"w-4 h-4\" />\r\n Add Skill\r\n </button>\r\n </div>\r\n\r\n <div className=\"space-y-3\">\r\n {skills.map(skill => (\r\n <div key={skill.id}>\r\n {editing === skill.id && editForm ? (\r\n <div className=\"border border-accent rounded-lg p-4 space-y-4 bg-accent/5\">\r\n <div className=\"flex items-center gap-3\">\r\n <select\r\n value={editForm.icon || \"⚡\"}\r\n onChange={(e) => setEditForm({ ...editForm, icon: e.target.value })}\r\n className=\"w-12 h-10 text-center text-xl bg-surface2 border border-border rounded-lg\"\r\n >\r\n {SKILL_ICONS.map(icon => (\r\n <option key={icon} value={icon}>{icon}</option>\r\n ))}\r\n </select>\r\n <Input\r\n value={editForm.name}\r\n onChange={(e) => setEditForm({ ...editForm, name: e.target.value })}\r\n placeholder=\"Skill name\"\r\n className=\"bg-surface2\"\r\n />\r\n </div>\r\n \r\n <Input\r\n value={editForm.description}\r\n onChange={(e) => setEditForm({ ...editForm, description: e.target.value })}\r\n placeholder=\"Description\"\r\n className=\"bg-surface2\"\r\n />\r\n\r\n <div className=\"flex gap-3\">\r\n <div className=\"flex-1\">\r\n <label className=\"text-xs text-muted mb-1 block\">Trigger</label>\r\n <Input\r\n value={editForm.trigger}\r\n onChange={(e) => setEditForm({ ...editForm, trigger: e.target.value })}\r\n placeholder=\"/command\"\r\n className=\"bg-surface2 font-mono\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <label className=\"text-xs text-muted mb-1 block\">System Prompt</label>\r\n <textarea\r\n value={editForm.prompt}\r\n onChange={(e) => setEditForm({ ...editForm, prompt: e.target.value })}\r\n placeholder=\"Instructions for the AI when this skill is activated...\"\r\n rows={4}\r\n className=\"w-full px-3 py-2 bg-surface2 border border-border rounded-lg text-sm resize-none\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"text-xs text-muted mb-2 block\">Available Tools</label>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {AVAILABLE_TOOLS.map(tool => (\r\n <button\r\n key={tool}\r\n onClick={() => toggleTool(tool)}\r\n className={cn(\r\n \"px-2 py-1 rounded-sm text-xs font-mono transition-colors\",\r\n editForm.tools.includes(tool)\r\n ? \"bg-accent/20 text-accent\"\r\n : \"bg-surface2 text-muted hover:text-txt\"\r\n )}\r\n >\r\n {tool.replace(\"vibedoc_\", \"\")}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex justify-end gap-2\">\r\n <button\r\n onClick={cancelEdit}\r\n className=\"px-3 py-1.5 text-sm text-muted hover:text-txt transition-colors\"\r\n >\r\n Cancel\r\n </button>\r\n <button\r\n onClick={saveEdit}\r\n disabled={!editForm.name.trim()}\r\n 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\"\r\n >\r\n <Check className=\"w-4 h-4\" />\r\n Save\r\n </button>\r\n </div>\r\n </div>\r\n ) : (\r\n <div className=\"flex items-start gap-3 p-4 border border-border rounded-lg hover:border-accent/30 transition-colors group\">\r\n <div className=\"w-10 h-10 rounded-lg bg-surface2 flex items-center justify-center text-xl shrink-0\">\r\n {skill.icon || \"⚡\"}\r\n </div>\r\n <div className=\"flex-1 min-w-0\">\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"font-medium text-txt\">{skill.name}</span>\r\n <code className=\"text-xs bg-surface2 px-1.5 py-0.5 rounded-sm text-accent\">\r\n {skill.trigger}\r\n </code>\r\n </div>\r\n <p className=\"text-sm text-muted mt-0.5\">{skill.description}</p>\r\n {skill.tools.length > 0 && (\r\n <div className=\"flex flex-wrap gap-1 mt-2\">\r\n {skill.tools.map(tool => (\r\n <span key={tool} className=\"text-xs bg-surface2 px-1.5 py-0.5 rounded-sm text-muted\">\r\n {tool.replace(\"vibedoc_\", \"\")}\r\n </span>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n <div className=\"flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\r\n <button\r\n onClick={() => startEdit(skill)}\r\n className=\"p-1.5 rounded-sm hover:bg-surface2 text-muted hover:text-txt transition-colors\"\r\n >\r\n <Pencil className=\"w-4 h-4\" />\r\n </button>\r\n <button\r\n onClick={() => deleteSkill(skill.id)}\r\n className=\"p-1.5 rounded-sm hover:bg-red-500/10 text-muted hover:text-red-400 transition-colors\"\r\n >\r\n <Trash2 className=\"w-4 h-4\" />\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n ))}\r\n\r\n {isNew && editForm && (\r\n <div className=\"border border-accent rounded-lg p-4 space-y-4 bg-accent/5\">\r\n {/* Same form as editing */}\r\n <div className=\"flex items-center gap-3\">\r\n <select\r\n value={editForm.icon || \"⚡\"}\r\n onChange={(e) => setEditForm({ ...editForm, icon: e.target.value })}\r\n className=\"w-12 h-10 text-center text-xl bg-surface2 border border-border rounded-lg\"\r\n >\r\n {SKILL_ICONS.map(icon => (\r\n <option key={icon} value={icon}>{icon}</option>\r\n ))}\r\n </select>\r\n <Input\r\n value={editForm.name}\r\n onChange={(e) => setEditForm({ ...editForm, name: e.target.value })}\r\n placeholder=\"Skill name\"\r\n className=\"bg-surface2\"\r\n />\r\n </div>\r\n \r\n <Input\r\n value={editForm.description}\r\n onChange={(e) => setEditForm({ ...editForm, description: e.target.value })}\r\n placeholder=\"Description\"\r\n className=\"bg-surface2\"\r\n />\r\n\r\n <div className=\"flex gap-3\">\r\n <div className=\"flex-1\">\r\n <label className=\"text-xs text-muted mb-1 block\">Trigger</label>\r\n <Input\r\n value={editForm.trigger}\r\n onChange={(e) => setEditForm({ ...editForm, trigger: e.target.value })}\r\n placeholder=\"/command\"\r\n className=\"bg-surface2 font-mono\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <label className=\"text-xs text-muted mb-1 block\">System Prompt</label>\r\n <textarea\r\n value={editForm.prompt}\r\n onChange={(e) => setEditForm({ ...editForm, prompt: e.target.value })}\r\n placeholder=\"Instructions for the AI when this skill is activated...\"\r\n rows={4}\r\n className=\"w-full px-3 py-2 bg-surface2 border border-border rounded-lg text-sm resize-none\"\r\n />\r\n </div>\r\n\r\n <div>\r\n <label className=\"text-xs text-muted mb-2 block\">Available Tools</label>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {AVAILABLE_TOOLS.map(tool => (\r\n <button\r\n key={tool}\r\n onClick={() => toggleTool(tool)}\r\n className={cn(\r\n \"px-2 py-1 rounded-sm text-xs font-mono transition-colors\",\r\n editForm.tools.includes(tool)\r\n ? \"bg-accent/20 text-accent\"\r\n : \"bg-surface2 text-muted hover:text-txt\"\r\n )}\r\n >\r\n {tool.replace(\"vibedoc_\", \"\")}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex justify-end gap-2\">\r\n <button\r\n onClick={cancelEdit}\r\n className=\"px-3 py-1.5 text-sm text-muted hover:text-txt transition-colors\"\r\n >\r\n Cancel\r\n </button>\r\n <button\r\n onClick={saveEdit}\r\n disabled={!editForm.name.trim()}\r\n 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\"\r\n >\r\n <Check className=\"w-4 h-4\" />\r\n Save\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {skills.length === 0 && !isNew && (\r\n <div className=\"text-center py-8 text-muted\">\r\n <Zap className=\"w-10 h-10 mx-auto mb-3 opacity-30\" />\r\n <p className=\"text-sm\">No skills configured</p>\r\n <p className=\"text-xs mt-1\">Add a skill to give your agents capabilities</p>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )\r\n}\r\n","\"use client\"\r\n\r\nimport { useState } from \"react\"\r\nimport { Plus, Pencil, Trash2, Check, Bot } from \"lucide-react\"\r\nimport { cn } from \"@/lib/utils\"\r\nimport { Input } from \"@/components/ui/input\"\r\nimport type { Agent, Skill } from \"@/lib/settings\"\r\n\r\ninterface AgentsSettingsProps {\r\n agents: Agent[]\r\n skills: Skill[]\r\n onSave: (agents: Agent[]) => void\r\n}\r\n\r\nconst AGENT_ICONS = [\"🤖\", \"📚\", \"🔒\", \"🧪\", \"📝\", \"🔧\", \"💡\", \"🎯\", \"🚀\", \"⚡\"]\r\n\r\nexport function AgentsSettings({ agents, skills, onSave }: AgentsSettingsProps) {\r\n const [editing, setEditing] = useState<string | null>(null)\r\n const [editForm, setEditForm] = useState<Agent | null>(null)\r\n const [isNew, setIsNew] = useState(false)\r\n\r\n const startEdit = (agent: Agent) => {\r\n setEditing(agent.id)\r\n setEditForm({ ...agent })\r\n setIsNew(false)\r\n }\r\n\r\n const startNew = () => {\r\n const newAgent: Agent = {\r\n id: `agent-${Date.now()}`,\r\n name: \"\",\r\n icon: \"🤖\",\r\n description: \"\",\r\n skills: [],\r\n prompt: \"\",\r\n active: true,\r\n }\r\n setEditing(newAgent.id)\r\n setEditForm(newAgent)\r\n setIsNew(true)\r\n }\r\n\r\n const cancelEdit = () => {\r\n setEditing(null)\r\n setEditForm(null)\r\n setIsNew(false)\r\n }\r\n\r\n const saveEdit = () => {\r\n if (!editForm || !editForm.name.trim()) return\r\n \r\n if (isNew) {\r\n onSave([...agents, editForm])\r\n } else {\r\n onSave(agents.map(a => a.id === editForm.id ? editForm : a))\r\n }\r\n cancelEdit()\r\n }\r\n\r\n const deleteAgent = (id: string) => {\r\n if (!confirm(\"Delete this agent?\")) return\r\n onSave(agents.filter(a => a.id !== id))\r\n }\r\n\r\n const toggleActive = (id: string) => {\r\n onSave(agents.map(a => a.id === id ? { ...a, active: !a.active } : a))\r\n }\r\n\r\n const toggleSkill = (skillId: string) => {\r\n if (!editForm) return\r\n const newSkills = editForm.skills.includes(skillId)\r\n ? editForm.skills.filter(s => s !== skillId)\r\n : [...editForm.skills, skillId]\r\n setEditForm({ ...editForm, skills: newSkills })\r\n }\r\n\r\n const renderForm = (form: Agent) => (\r\n <div className=\"border border-accent rounded-lg p-4 space-y-4 bg-accent/5\">\r\n <div className=\"flex items-center gap-3\">\r\n <select\r\n value={form.icon}\r\n onChange={(e) => setEditForm({ ...form, icon: e.target.value })}\r\n className=\"w-12 h-10 text-center text-xl bg-surface2 border border-border rounded-lg\"\r\n >\r\n {AGENT_ICONS.map(icon => (\r\n <option key={icon} value={icon}>{icon}</option>\r\n ))}\r\n </select>\r\n <Input\r\n value={form.name}\r\n onChange={(e) => setEditForm({ ...form, name: e.target.value })}\r\n placeholder=\"Agent name\"\r\n className=\"bg-surface2\"\r\n />\r\n </div>\r\n \r\n <Input\r\n value={form.description}\r\n onChange={(e) => setEditForm({ ...form, description: e.target.value })}\r\n placeholder=\"Description\"\r\n className=\"bg-surface2\"\r\n />\r\n\r\n <div>\r\n <label className=\"text-xs text-muted mb-2 block\">Assigned Skills</label>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {skills.map(skill => (\r\n <button\r\n key={skill.id}\r\n onClick={() => toggleSkill(skill.id)}\r\n className={cn(\r\n \"flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg text-sm transition-colors\",\r\n form.skills.includes(skill.id)\r\n ? \"bg-accent/20 text-accent\"\r\n : \"bg-surface2 text-muted hover:text-txt\"\r\n )}\r\n >\r\n <span>{skill.icon || \"⚡\"}</span>\r\n {skill.name}\r\n </button>\r\n ))}\r\n {skills.length === 0 && (\r\n <span className=\"text-xs text-muted\">No skills available. Create skills first.</span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <label className=\"text-xs text-muted mb-1 block\">Custom System Prompt</label>\r\n <textarea\r\n value={form.prompt}\r\n onChange={(e) => setEditForm({ ...form, prompt: e.target.value })}\r\n placeholder=\"Additional instructions for this agent...\"\r\n rows={3}\r\n className=\"w-full px-3 py-2 bg-surface2 border border-border rounded-lg text-sm resize-none\"\r\n />\r\n </div>\r\n\r\n <div className=\"flex items-center justify-between\">\r\n <div className=\"flex items-center gap-2\">\r\n <button\r\n onClick={() => setEditForm({ ...form, active: !form.active })}\r\n className={cn(\r\n \"w-11 h-6 rounded-full transition-colors relative\",\r\n form.active ? \"bg-accent\" : \"bg-border\"\r\n )}\r\n >\r\n <span\r\n className={cn(\r\n \"absolute top-1 w-4 h-4 rounded-full bg-white transition-transform\",\r\n form.active ? \"left-6\" : \"left-1\"\r\n )}\r\n />\r\n </button>\r\n <span className=\"text-sm text-muted\">{form.active ? \"Active\" : \"Inactive\"}</span>\r\n </div>\r\n <div className=\"flex gap-2\">\r\n <button\r\n onClick={cancelEdit}\r\n className=\"px-3 py-1.5 text-sm text-muted hover:text-txt transition-colors\"\r\n >\r\n Cancel\r\n </button>\r\n <button\r\n onClick={saveEdit}\r\n disabled={!form.name.trim()}\r\n 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\"\r\n >\r\n <Check className=\"w-4 h-4\" />\r\n Save\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n\r\n return (\r\n <div className=\"space-y-6\">\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n <h2 className=\"text-xl font-semibold text-txt mb-1\">Agents</h2>\r\n <p className=\"text-sm text-muted\">AI agent profiles with assigned skills.</p>\r\n </div>\r\n <button\r\n onClick={startNew}\r\n 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\"\r\n >\r\n <Plus className=\"w-4 h-4\" />\r\n Add Agent\r\n </button>\r\n </div>\r\n\r\n <div className=\"space-y-3\">\r\n {agents.map(agent => (\r\n <div key={agent.id}>\r\n {editing === agent.id && editForm ? (\r\n renderForm(editForm)\r\n ) : (\r\n <div className={cn(\r\n \"flex items-start gap-3 p-4 border rounded-lg transition-colors group\",\r\n agent.active ? \"border-border hover:border-accent/30\" : \"border-border/50 opacity-60\"\r\n )}>\r\n <div className=\"w-10 h-10 rounded-lg bg-surface2 flex items-center justify-center text-xl shrink-0\">\r\n {agent.icon}\r\n </div>\r\n <div className=\"flex-1 min-w-0\">\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"font-medium text-txt\">{agent.name}</span>\r\n {!agent.active && (\r\n <span className=\"text-xs bg-surface2 px-1.5 py-0.5 rounded-sm text-muted\">\r\n Inactive\r\n </span>\r\n )}\r\n </div>\r\n <p className=\"text-sm text-muted mt-0.5\">{agent.description}</p>\r\n {agent.skills.length > 0 && (\r\n <div className=\"flex flex-wrap gap-1 mt-2\">\r\n {agent.skills.map(skillId => {\r\n const skill = skills.find(s => s.id === skillId)\r\n return skill ? (\r\n <span key={skillId} className=\"flex items-center gap-1 text-xs bg-surface2 px-1.5 py-0.5 rounded-sm text-muted\">\r\n {skill.icon} {skill.name}\r\n </span>\r\n ) : null\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n <div className=\"flex items-center gap-2\">\r\n <button\r\n onClick={() => toggleActive(agent.id)}\r\n className={cn(\r\n \"w-9 h-5 rounded-full transition-colors relative\",\r\n agent.active ? \"bg-accent\" : \"bg-border\"\r\n )}\r\n >\r\n <span\r\n className={cn(\r\n \"absolute top-0.5 w-4 h-4 rounded-full bg-white transition-transform\",\r\n agent.active ? \"left-4\" : \"left-0.5\"\r\n )}\r\n />\r\n </button>\r\n <div className=\"flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\r\n <button\r\n onClick={() => startEdit(agent)}\r\n className=\"p-1.5 rounded-sm hover:bg-surface2 text-muted hover:text-txt transition-colors\"\r\n >\r\n <Pencil className=\"w-4 h-4\" />\r\n </button>\r\n <button\r\n onClick={() => deleteAgent(agent.id)}\r\n className=\"p-1.5 rounded-sm hover:bg-red-500/10 text-muted hover:text-red-400 transition-colors\"\r\n >\r\n <Trash2 className=\"w-4 h-4\" />\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n ))}\r\n\r\n {isNew && editForm && renderForm(editForm)}\r\n\r\n {agents.length === 0 && !isNew && (\r\n <div className=\"text-center py-8 text-muted\">\r\n <Bot className=\"w-10 h-10 mx-auto mb-3 opacity-30\" />\r\n <p className=\"text-sm\">No agents configured</p>\r\n <p className=\"text-xs mt-1\">Add an agent to define AI personas with skills</p>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )\r\n}\r\n","\"use client\"\n\nimport { useState, useEffect, useCallback } from \"react\"\nimport { useApp } from \"@/context/AppContext\"\nimport { Palette, Type, FolderCog, Plug, Zap, Bot, Settings } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport { ThemeSettings } from \"@/components/settings/ThemeSettings\"\nimport { EditorSettings } from \"@/components/settings/EditorSettings\"\nimport { ProjectSettings } from \"@/components/settings/ProjectSettings\"\nimport { MCPSettings } from \"@/components/settings/MCPSettings\"\nimport { SkillsSettings } from \"@/components/settings/SkillsSettings\"\nimport { AgentsSettings } from \"@/components/settings/AgentsSettings\"\nimport type { AppSettings, Skill, Agent } from \"@/lib/settings\"\nimport { DEFAULT_SETTINGS, DEFAULT_SKILLS, DEFAULT_AGENTS } from \"@/lib/settings\"\nimport { applyTheme, applyAccent, applyFontSize, applyFonts } from \"@/lib/applySettings\"\n\nconst TABS = [\n { id: \"appearance\", label: \"Appearance\", icon: Palette },\n { id: \"editor\", label: \"Editor\", icon: Type },\n { id: \"project\", label: \"Project\", icon: FolderCog },\n { id: \"mcp\", label: \"MCP\", icon: Plug },\n { id: \"skills\", label: \"Skills\", icon: Zap },\n { id: \"agents\", label: \"Agents\", icon: Bot },\n]\n\nexport default function SettingsPage() {\n const { rootParam, setEditorSettings, setAutoRefreshSeconds } = useApp()\n const [activeTab, setActiveTab] = useState(\"appearance\")\n const [settings, setSettings] = useState<AppSettings>(DEFAULT_SETTINGS)\n const [skills, setSkills] = useState<Skill[]>(DEFAULT_SKILLS)\n const [agents, setAgents] = useState<Agent[]>(DEFAULT_AGENTS)\n const [loading, setLoading] = useState(true)\n const [saving, setSaving] = useState(false)\n\n const fetchAll = useCallback(async () => {\n try {\n const res = await fetch(`/api/settings${rootParam}&type=all`)\n const data = await res.json()\n setSettings({ ...DEFAULT_SETTINGS, ...data.settings })\n setSkills(data.skills || DEFAULT_SKILLS)\n setAgents(data.agents || DEFAULT_AGENTS)\n } catch {}\n setLoading(false)\n }, [rootParam])\n\n useEffect(() => {\n fetchAll()\n }, [fetchAll])\n\n const saveSettings = async (newSettings: AppSettings) => {\n setSaving(true)\n setSettings(newSettings)\n try {\n await fetch(`/api/settings${rootParam}&type=settings`, {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(newSettings),\n })\n applyTheme(newSettings.theme)\n applyAccent(newSettings.accentColor)\n applyFontSize(newSettings.fontSize)\n applyFonts(newSettings)\n setEditorSettings(newSettings.editor)\n setAutoRefreshSeconds(newSettings.project?.autoRefresh ?? 0)\n } catch {}\n setSaving(false)\n }\n\n const saveSkills = async (newSkills: Skill[]) => {\n setSaving(true)\n setSkills(newSkills)\n try {\n await fetch(`/api/settings${rootParam}&type=skills`, {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(newSkills),\n })\n } catch {}\n setSaving(false)\n }\n\n const saveAgents = async (newAgents: Agent[]) => {\n setSaving(true)\n setAgents(newAgents)\n try {\n await fetch(`/api/settings${rootParam}&type=agents`, {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(newAgents),\n })\n } catch {}\n setSaving(false)\n }\n\n if (loading) {\n return (\n <div className=\"flex items-center justify-center h-full\">\n <div className=\"text-muted\">Loading settings...</div>\n </div>\n )\n }\n\n return (\n <div className=\"flex h-full\">\n {/* Sidebar */}\n <aside className=\"w-56 border-r border-border bg-sidebar shrink-0\">\n <div className=\"p-4 border-b border-border\">\n <div className=\"flex items-center gap-2\">\n <Settings className=\"w-5 h-5 text-accent\" />\n <h1 className=\"font-semibold text-txt\">Settings</h1>\n </div>\n </div>\n <nav className=\"p-2\">\n {TABS.map(tab => {\n const Icon = tab.icon\n return (\n <button\n key={tab.id}\n onClick={() => setActiveTab(tab.id)}\n className={cn(\n \"w-full flex items-center gap-3 px-3 py-2 rounded-lg text-sm transition-colors\",\n activeTab === tab.id\n ? \"bg-accent/10 text-accent font-medium\"\n : \"text-muted hover:text-txt hover:bg-surface2\"\n )}\n >\n <Icon className=\"w-4 h-4\" />\n {tab.label}\n </button>\n )\n })}\n </nav>\n </aside>\n\n {/* Content */}\n <div className=\"flex-1 overflow-y-auto\">\n <div className=\"max-w-2xl mx-auto p-6\">\n {saving && (\n <div className=\"fixed top-4 right-4 bg-accent text-white px-3 py-1.5 rounded-lg text-sm shadow-lg\">\n Saving...\n </div>\n )}\n\n {activeTab === \"appearance\" && (\n <ThemeSettings settings={settings} onSave={saveSettings} />\n )}\n {activeTab === \"editor\" && (\n <EditorSettings settings={settings} onSave={saveSettings} />\n )}\n {activeTab === \"project\" && (\n <ProjectSettings settings={settings} onSave={saveSettings} />\n )}\n {activeTab === \"mcp\" && (\n <MCPSettings settings={settings} onSave={saveSettings} />\n )}\n {activeTab === \"skills\" && (\n <SkillsSettings skills={skills} onSave={saveSkills} />\n )}\n {activeTab === \"agents\" && (\n <AgentsSettings agents={agents} skills={skills} onSave={saveAgents} />\n )}\n </div>\n </div>\n </div>\n )\n}\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'folder-cog',\n size: 24,\n node: [\n [\n 'path',\n {\n 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',\n key: '128dxu',\n },\n ],\n ['path', { d: 'm14.305 19.53.923-.382', key: '3m78fa' }],\n ['path', { d: 'm15.228 16.852-.923-.383', key: 'npixar' }],\n ['path', { d: 'm16.852 15.228-.383-.923', key: '5xggr7' }],\n ['path', { d: 'm16.852 20.772-.383.924', key: 'dpfhf9' }],\n ['path', { d: 'm19.148 15.228.383-.923', key: '1reyyz' }],\n ['path', { d: 'm19.53 21.696-.382-.924', key: '1goivc' }],\n ['path', { d: 'm20.772 16.852.924-.383', key: 'htqkph' }],\n ['path', { d: 'm20.772 19.148.924.383', key: '9w9pjp' }],\n ['circle', { cx: '18', cy: '18', r: '3', key: '1xkwt0' }],\n ],\n aliases: ['folder-cog-2'],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name FolderCog\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/folder-cog\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 FolderCog = createLucideIcon(__iconData);\n\nexport default FolderCog;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'palette',\n size: 24,\n node: [\n [\n 'path',\n {\n 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',\n key: 'e79jfc',\n },\n ],\n ['circle', { cx: '13.5', cy: '6.5', r: '.5', fill: 'currentColor', key: '1okk4w' }],\n ['circle', { cx: '17.5', cy: '10.5', r: '.5', fill: 'currentColor', key: 'f64h9f' }],\n ['circle', { cx: '6.5', cy: '12.5', r: '.5', fill: 'currentColor', key: 'qy21gx' }],\n ['circle', { cx: '8.5', cy: '7.5', r: '.5', fill: 'currentColor', key: 'fotxhn' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Palette\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/palette\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 Palette = createLucideIcon(__iconData);\n\nexport default Palette;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'plug',\n size: 24,\n node: [\n ['path', { d: 'M12 22v-5', key: '1ega77' }],\n ['path', { d: 'M15 8V2', key: '18g5xt' }],\n [\n 'path',\n { 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' },\n ],\n ['path', { d: 'M9 8V2', key: '14iosj' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Plug\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/plug\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 Plug = createLucideIcon(__iconData);\n\nexport default Plug;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'moon',\n size: 24,\n node: [\n [\n 'path',\n {\n 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',\n key: 'kfwtm',\n },\n ],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Moon\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/moon\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 Moon = createLucideIcon(__iconData);\n\nexport default Moon;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'type',\n size: 24,\n node: [\n ['path', { d: 'M12 4v16', key: '1654pz' }],\n ['path', { d: 'M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2', key: 'e0r10z' }],\n ['path', { d: 'M9 20h6', key: 's66wpe' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Type\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/type\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 Type = createLucideIcon(__iconData);\n\nexport default Type;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'sun',\n size: 24,\n node: [\n ['circle', { cx: '12', cy: '12', r: '4', key: '4exip2' }],\n ['path', { d: 'M12 2v2', key: 'tus03m' }],\n ['path', { d: 'M12 20v2', key: '1lh1kg' }],\n ['path', { d: 'm4.93 4.93 1.41 1.41', key: '149t6j' }],\n ['path', { d: 'm17.66 17.66 1.41 1.41', key: 'ptbguv' }],\n ['path', { d: 'M2 12h2', key: '1t8f8n' }],\n ['path', { d: 'M20 12h2', key: '1q8mjw' }],\n ['path', { d: 'm6.34 17.66-1.41 1.41', key: '1m8zz5' }],\n ['path', { d: 'm19.07 4.93-1.41 1.41', key: '1shlcs' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Sun\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/sun\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 Sun = createLucideIcon(__iconData);\n\nexport default Sun;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'monitor',\n size: 24,\n node: [\n ['rect', { width: '20', height: '14', x: '2', y: '3', rx: '2', key: '48i651' }],\n ['line', { x1: '8', x2: '16', y1: '21', y2: '21', key: '1svkeh' }],\n ['line', { x1: '12', x2: '12', y1: '17', y2: '21', key: 'vw1qmm' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Monitor\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/monitor\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 Monitor = createLucideIcon(__iconData);\n\nexport default Monitor;\n"],"names":["size","d","cx","__iconData","fill","key","cy","r","Palette","node"],"mappings":"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","ignoreList":[7,8,9,10,11,12,13]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
module.exports=[685698,429672,107742,a=>{"use strict";var b=a.i(662145),c=a.i(174897),d=a.i(913975),e=a.i(544394),f=a.i(368114);function g(a){return Array.isArray(a)&&a.length>0&&a.every(a=>!!a&&"object"==typeof a&&"string"==typeof a.question&&"string"==typeof a.header&&Array.isArray(a.options)&&a.options.every(a=>!!a&&"object"==typeof a&&"string"==typeof a.label))}let h="\0other";function i(a,b){return["Answers:",...a.map((a,c)=>`- ${a.header}: ${b[c]}`)].join("\n")}a.s(["QuestionCard",0,function({set:a,disabled:d,onSubmit:e}){let[g,i]=(0,c.useState)(()=>a.questions.map(()=>[])),[j,k]=(0,c.useState)(()=>a.questions.map(()=>"")),l=!!a.answers,m=a.questions.map((a,b)=>{let c=a.options.map(a=>a.label).filter(a=>g[b].includes(a));return g[b].includes(h)&&j[b].trim()&&c.push(`Other: "${j[b].trim()}"`),c.join(", ")}),n=m.every(Boolean);return(0,b.jsxs)("div",{className:"my-2 rounded-md border border-border overflow-hidden","data-question-card":!0,children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 bg-surface2 border-b border-border",children:[(0,b.jsx)("span",{className:"text-[10px] font-mono uppercase tracking-widest text-muted",children:"Questions"}),l&&(0,b.jsx)("span",{className:"ml-auto text-[10px] font-mono text-accent",children:"✓ Answered"})]}),(0,b.jsxs)("div",{className:"p-2 space-y-3",children:[a.questions.map((c,d)=>(0,b.jsxs)("fieldset",{disabled:l,className:"space-y-1",children:[(0,b.jsxs)("legend",{className:"mb-1",children:[(0,b.jsx)("span",{className:"text-[10px] font-mono px-1.5 py-0.5 rounded-sm bg-surface2 border border-border text-accent mr-1.5",children:c.header}),(0,b.jsx)("span",{className:"text-xs text-txt",children:c.question})]}),l?(0,b.jsx)("p",{className:"text-xs text-txt pl-1",children:a.answers?.[d]}):(0,b.jsxs)(b.Fragment,{children:[[...c.options,{label:"Other",value:h}].map(e=>{let h="value"in e?e.value:e.label,j=g[d].includes(h);return(0,b.jsxs)("label",{className:(0,f.cn)("flex gap-2 items-start rounded-sm px-1 py-0.5 cursor-pointer hover:bg-surface2",j&&"bg-surface2"),children:[(0,b.jsx)("input",{type:c.multiSelect?"checkbox":"radio",name:`${a.id}-${d}`,checked:j,onChange:()=>{var a;return a=c.multiSelect,void i(b=>b.map((b,c)=>c!==d?b:a?b.includes(h)?b.filter(a=>a!==h):[...b,h]:[h]))},className:"mt-0.5 accent-accent"}),(0,b.jsxs)("span",{className:"text-xs",children:[(0,b.jsx)("span",{className:"text-txt",children:e.label}),"description"in e&&e.description&&(0,b.jsx)("span",{className:"block text-muted",children:e.description})]})]},h)}),g[d].includes(h)&&(0,b.jsx)("input",{value:j[d],onChange:a=>k(b=>b.map((b,c)=>c===d?a.target.value:b)),placeholder:"Your answer","aria-label":`Other answer for ${c.header}`,className:"ml-6 w-[calc(100%-1.5rem)] rounded-sm bg-surface2 border border-border px-2 py-1 text-xs text-txt placeholder:text-muted focus:outline-hidden focus:border-accent"})]})]},d)),!l&&(0,b.jsx)("button",{onClick:()=>e(m),disabled:!n||d,className:"text-xs px-2 py-0.5 rounded-sm bg-accent/20 text-accent hover:bg-accent/30 disabled:opacity-50",children:"Submit"})]})]})},"formatAnswers",0,i,"isRenderableQuestions",0,g],429672);let j=a=>!!a&&"object"==typeof a&&!Array.isArray(a),k=a=>"string"==typeof a?a.trim():"";var l=a.i(525395);function m(a,b=Math.random()){return`c-${a.toString(36)}${b.toString(36).slice(2,6)}`}function n(a,b,c={}){var d;let e=c.now??new Date().toISOString();return[...a,{id:b,title:c.title??(c.attach?"epic"===(d=c.attach).kind?`Epic ${d.id}`:`Task ${d.id}`:"New chat"),messages:[],sessionId:null,busy:!1,notes:[],attach:c.attach??null,createdAt:e,updatedAt:e}]}function o(a,b,c){return a.map(a=>a.id===b?c(a):a)}function p(a){return a.messages.reduce((a,b)=>a+b.plans.filter(a=>"pending"===a.status).length+b.proposals.filter(a=>"pending"===a.status).length,0)}function q(a){if(a.busy)return"running";let b=a.messages[a.messages.length-1];if(b?.questions.some(a=>!a.answers))return"needs-answer";if(p(a))return"review";let c=a.messages.findLast(a=>"assistant"===a.role);return c?.error?"error":"idle"}let r=a=>"needs-answer"===a||"review"===a;function s(a,b,c={}){if((c.running??a.filter(a=>a.busy).length)>=4)return{refused:"Too many agents running (4). Stop or close a chat, or wait."};let d=a.find(a=>a.id===b);return!d||d.busy||c.newChat?{newChat:!0}:{chatId:d.id}}let t=a=>`${a.kind}:${a.id}`;function u(a){return a.trim().match(/^Break down epic (R\d+)/i)?.[1].toUpperCase()??null}function v(a,b){return a.filter(a=>{let c;return c=a.attach,!!c&&!!b&&c.kind===b.kind&&c.id===b.id}).sort((a,b)=>b.updatedAt.localeCompare(a.updatedAt))[0]}let w={running:3,"needs-answer":2,review:1};function x(a){let b={};for(let c of a){let a=q(c);if(!c.attach||"idle"===a||"error"===a)continue;let d=t(c.attach),e=b[d];(!e||w[a]>w[e.status])&&(b[d]={status:a,chatId:c.id})}return b}function y(a){return"epic"===a.kind?`[This chat is about epic ${a.id}. Read it with vibedoc_get_roadmap (and its tasks with vibedoc_get_task) before answering.]`:`[This chat is about task ${a.id}. Read it with vibedoc_get_task before answering.]`}function z(a){let b=[...a].sort((a,b)=>b.updatedAt.localeCompare(a.updatedAt)),c={needsYou:[],running:[],recent:[]};for(let a of b){let b=q(a);r(b)?c.needsYou.push(a):"running"===b?c.running.push(a):c.recent.push(a)}return c}function A(a){let b=z(a);return b.needsYou[0]??b.running[0]??b.recent[0]}function B(a){return a.messages.length?{...a,busy:!1}:null}function C(a){if(!a||"string"!=typeof a.id||!Array.isArray(a.messages))return null;let b=a.messages[a.messages.length-1],c=b?.role!=="assistant"||b.text||b.error||b.tools?.length||b.plans?.length||b.proposals?.length||b.questions?.length?a.messages:[...a.messages.slice(0,-1),{...b,error:"Interrupted: the page reloaded while the agent was working."}],d=a.updatedAt??a.createdAt??new Date(0).toISOString();return{...a,messages:c,busy:!1,notes:a.notes??[],attach:a.attach??null,createdAt:a.createdAt??d,updatedAt:d}}function D(a,b){return b.flatMap(b=>{let c=q(b);return r(c)&&a[b.id]!==c?[{chat:b,status:c}]:[]})}function E(a,b){let c=a.replace(/^\(\d+\) /,"");return b>0?`(${b}) ${c}`:c}function F(a){let b=u(a);if(b)return`Break down ${b}`;let c=a.trim().split("\n")[0];return c.length>40?`${c.slice(0,40).trimEnd()}…`:c}a.s(["MAX_RUNNING_CHATS",0,4,"STATUS_LABEL",0,{running:"Running","needs-answer":"Waiting for your answers",review:"Plan or edit to review",error:"Error",idle:"Idle"},"addChat",0,n,"ago",0,function(a,b){let c=Math.max(0,Math.floor((b-Date.parse(a))/6e4));return c<1?"now":c<60?`${c}m`:c<1440?`${Math.floor(c/60)}h`:`${Math.floor(c/1440)}d`},"attachContext",0,y,"attachKey",0,t,"chatFor",0,v,"chatStatus",0,q,"chatTitle",0,F,"defaultChat",0,A,"epicOf",0,u,"fromSaved",0,C,"groupChats",0,z,"isWaiting",0,r,"itemAgents",0,x,"newChatId",0,m,"newlyWaiting",0,D,"patchChat",0,o,"pendingReviews",0,p,"routeAsk",0,s,"suggestions",0,function(a){return a?"epic"===a.kind?[`Break down epic ${a.id} into tasks.`,"Summarize this epic's progress.","What is at risk in this epic?"]:["Refine this task's spec.","Split this task into smaller tasks.","What blocks this task?"]:["What should I work on next?","Plan a roadmap for this project.","What is blocked right now?"]},"toSaved",0,B,"waitingTitle",0,E],107742);let G=(a,b="")=>({role:a,text:b,tools:[],proposals:[],plans:[],questions:[]}),H=(0,c.createContext)(null),I=(0,c.createContext)({});a.s(["ChatProvider",0,function({children:a}){let{rootParam:f,activeProject:h,selectedDoc:t}=(0,e.useApp)(),w=(0,d.usePathname)(),z=(0,d.useRouter)(),[J,K]=(0,c.useState)([]),[L,M]=(0,c.useState)(!1),[N,O]=(0,c.useState)(null),[P,Q]=(0,c.useState)(null),[R,S]=(0,c.useState)(null),T=(0,c.useRef)(new Map),U=(0,c.useRef)(new Set),V=(0,c.useRef)({}),W="/chat"===w,X="/docs"===w?t?.path:void 0;(0,c.useEffect)(()=>{for(let a of T.current.values())a.abort();T.current.clear(),U.current.clear();let a=!1;return fetch(`/api/conversations${f}`).then(a=>a.ok?a.json():{chats:[]}).then(b=>{if(a)return;let c=(b.chats??[]).map(a=>C(a)).filter(a=>!!a);V.current=Object.fromEntries(c.map(a=>[a.id,q(a)])),K(c),O(null),Q(null),M(!0)}).catch(b=>{console.warn("[vibedoc] could not load chats:",b),a||(K([]),M(!0))}),()=>{a=!0}},[h,f]),(0,c.useEffect)(()=>{for(let a of[...U.current]){let b=J.find(b=>b.id===a);U.current.delete(a);let c=b&&B(b);c&&fetch(`/api/conversations${f}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({chat:c})}).catch(b=>console.warn(`[vibedoc] could not save chat ${a}:`,b))}},[J,f]);let Y=(0,c.useRef)({key:"{}",value:{}}),Z=(0,c.useMemo)(()=>{let a=x(J),b=JSON.stringify(a);return b!==Y.current.key&&(Y.current={key:b,value:a}),Y.current.value},[J]),$=J.filter(a=>a.busy).length,_=J.filter(a=>r(q(a))).length;function aa(a){U.current.add(a)}function ab(a){Q(a),W?(O(null),z.replace(`/chat?id=${encodeURIComponent(a)}`,{scroll:!1})):O(a)}function ac(a=null){let b=m(Date.now());return K(c=>n(c,b,{attach:a})),b}function ad(a,b){K(c=>o(c,a,a=>({...a,messages:[...a.messages.slice(0,-1),b(a.messages[a.messages.length-1])]})))}async function ae(a,b){let c=b.trim(),d=J.find(b=>b.id===a);if(!c||d?.busy)return;"Notification"in window&&"default"===Notification.permission&&Notification.requestPermission().catch(()=>{});let e=!d?.messages.length,h=u(c),i=d?.attach??(h?{kind:"epic",id:h}:null);K(b=>o(b,a,a=>({...a,title:a.messages.length?a.title:F(c),attach:a.attach??i,busy:!0,notes:[],updatedAt:new Date().toISOString(),messages:[...a.messages,G("user",c),G("assistant")]}))),aa(a);let k=[...e&&d?.attach?[y(d.attach)]:[],...d?.notes.length?[`[${d.notes.join(" ")}]`]:[]],l=k.length?`${k.join("\n")}
|
|
2
|
+
|
|
3
|
+
${c}`:c,m=new AbortController;T.current.set(a,m);try{let b=await fetch(`/api/chat${f}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:l,sessionId:d?.sessionId??null,docPath:X}),signal:m.signal});if(!b.ok||!b.body){let a=await b.json().catch(()=>null);throw Error(a?.error??`Request failed (${b.status})`)}let c=b.body.getReader(),e=new TextDecoder,h="";for(;;){let{done:b,value:d}=await c.read();if(b)break;let f=(h+=e.decode(d,{stream:!0})).split("\n");for(let b of(h=f.pop()??"",f))if(b.trim())try{!function(a,b){if(b.session_id&&K(c=>o(c,a,a=>a.sessionId===b.session_id?a:{...a,sessionId:b.session_id})),"stream_event"===b.type){let c=b.event;c?.type==="message_start"?ad(a,a=>a.text&&!a.text.endsWith("\n\n")?{...a,text:a.text+"\n\n"}:a):c?.type==="content_block_delta"&&c.delta?.type==="text_delta"&&ad(a,a=>({...a,text:a.text+c.delta.text}))}else if("assistant"===b.type){let c=(b.message?.content??[]).filter(a=>"tool_use"===a.type),d=c.filter(a=>a.name.endsWith("vibedoc_propose_edit")&&"string"==typeof a.input?.path&&Array.isArray(a.input?.edits)).map(a=>({id:a.id,path:a.input.path,edits:a.input.edits,summary:"string"==typeof a.input.summary?a.input.summary:void 0,status:"pending"})),e=c.filter(a=>a.name.endsWith("vibedoc_propose_plan")).flatMap(a=>{let b=function(a){if(!j(a))return null;let b=(a,b)=>Array.isArray(a)&&a.every(a=>j(a)&&b.every(b=>"string"==typeof a[b])&&(void 0===a.dependsOn||Array.isArray(a.dependsOn)));if("breakdown"===a.kind){let c=void 0===a.epic||"string"==typeof a.epic,d=void 0===a.newEpic||j(a.newEpic)&&"string"==typeof a.newEpic.title&&"string"==typeof a.newEpic.parent;return c&&d&&b(a.tasks,["key","title"])&&a.tasks.length>0?a:null}if("roadmap"===a.kind){let c=a.horizons??[],d=a.epics??[];return b(c,["key","title"])&&b(d,["key","title","parent"])?{kind:"roadmap",horizons:c,epics:d}:null}return null}(a.input?.plan);return b?[{id:a.id,plan:b,status:"pending"}]:[]}),f=c.filter(a=>a.name.endsWith("vibedoc_ask_questions")&&g(a.input?.questions)).map(a=>({id:a.id,questions:a.input.questions})),h=["vibedoc_propose_edit","vibedoc_propose_plan","vibedoc_ask_questions"],i=c.filter(a=>!h.some(b=>a.name.endsWith(b))).map(a=>a.name.replace(/^mcp__vibedoc__vibedoc_/,""));(i.length||d.length||e.length||f.length)&&ad(a,a=>({...a,tools:[...a.tools,...i],proposals:[...a.proposals,...d],plans:[...a.plans,...e],questions:[...a.questions,...f]}))}else if("user"===b.type){let c=new Set((b.message?.content??[]).filter(a=>"tool_result"===a.type&&a.is_error).map(a=>a.tool_use_id));c.size&&ad(a,a=>({...a,proposals:a.proposals.filter(a=>!c.has(a.id)),plans:a.plans.filter(a=>!c.has(a.id)),questions:a.questions.filter(a=>!c.has(a.id))}))}else"result"===b.type&&b.is_error?ad(a,a=>({...a,error:b.result??b.subtype??"Agent error"})):"error"===b.type&&ad(a,a=>({...a,error:b.message}))}(a,JSON.parse(b))}catch{}}}catch(b){m.signal.aborted?ad(a,a=>a.text||a.error?a:{...a,error:"Stopped."}):ad(a,a=>({...a,error:b.message}))}finally{T.current.get(a)===m&&(T.current.delete(a),aa(a)),K(b=>o(b,a,a=>({...a,busy:!1,updatedAt:new Date().toISOString()})))}}function af(a){T.current.get(a)?.abort()}function ag(a,b,c){K(d=>o(d,a,a=>({...a,notes:c?[...a.notes,c]:a.notes,messages:a.messages.map(b)}))),aa(a)}return(0,c.useEffect)(()=>{document.title=E(document.title,_)},[_,w]),(0,c.useEffect)(()=>{let a=D(V.current,J);if(V.current=Object.fromEntries(J.map(a=>[a.id,q(a)])),a.length&&document.hidden&&"Notification"in window&&"granted"===Notification.permission)for(let{chat:b,status:c}of a){let a=new Notification("needs-answer"===c?"Agent needs your answer":"Plan ready to review",{body:b.title,tag:b.id});a.onclick=()=>{window.focus(),(0,l.openAgentChat)(b.id),a.close()}}},[J]),(0,c.useEffect)(()=>{function a(a){let{message:b,newChat:c}=a.detail??{};if(!b)return;let d=s(J,P,{newChat:c,running:T.current.size});if("refused"in d)return S(d.refused);S(null);let e=u(b),f="chatId"in d?d.chatId:ac(e?{kind:"epic",id:e}:null);ae(f,b),c||ab(f)}function b(a){let b=a.detail?.chatId;b&&J.some(a=>a.id===b)&&ab(b)}return window.addEventListener(l.ASK_AGENT_EVENT,a),window.addEventListener(l.OPEN_CHAT_EVENT,b),()=>{window.removeEventListener(l.ASK_AGENT_EVENT,a),window.removeEventListener(l.OPEN_CHAT_EVENT,b)}}),(0,b.jsx)(H.Provider,{value:{chats:J,loaded:L,modalId:N,closeModal:function(a={}){a.keep||K(a=>a.filter(a=>a.id!==N||a.messages.length>0)),O(null)},show:ab,showDefault:function(){let a=A(J);ab(a?a.id:ac())},showAbout:function(a){let b=v(J,a);ab(b?b.id:ac(a))},create:ac,send:ae,stop:af,remove:function(a){let b=J.find(b=>b.id===a),c=b?p(b):0;return(!c||!!window.confirm(`Discard ${c} unreviewed proposal${1===c?"":"s"}?`))&&(af(a),T.current.delete(a),U.current.delete(a),K(b=>b.filter(b=>b.id!==a)),N===a&&O(null),P===a&&Q(null),fetch(`/api/conversations${f}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({delete:a})}).catch(b=>console.warn(`[vibedoc] could not delete chat ${a}:`,b)),!0)},resolveProposal:function(a,b,c,d){ag(a,a=>({...a,proposals:a.proposals.map(a=>a.id===b?{...a,status:d}:a)}),`User ${d} your proposed edit to ${c}.`)},resolvePlan:function(a,b,c,d,e){var f;let g="breakdown"===b.plan.kind?k((f=b.plan).epic)?k(f.epic).toUpperCase():f.newEpic?`new epic "${k(f.newEpic.title)}"`:"no epic":"the roadmap";ag(a,a=>({...a,plans:a.plans.map(a=>a.id===b.id?{...a,status:c,created:d}:a)}),"accepted"===c?`User accepted plan for ${g}: created ${d.map(a=>a.id).join(", ")}${e.length?` (unchecked: ${e.join(", ")})`:""}.`:`User rejected the plan for ${g}.`)},answerQuestions:function(a,b,c){J.find(b=>b.id===a)?.busy||(ag(a,a=>({...a,questions:a.questions.map(a=>a.id===b.id?{...a,answers:c}:a)})),ae(a,i(b.questions,c)))},agents:Z,runningCount:$,waitingCount:_,notice:R,dismissNotice:()=>S(null)},children:(0,b.jsx)(I.Provider,{value:Z,children:a})})},"useChats",0,function(){let a=(0,c.useContext)(H);if(!a)throw Error("useChats() must be used inside <ChatProvider>");return a},"useItemAgent",0,function(a){return(0,c.useContext)(I)[t(a)]}],685698)}];
|
|
4
|
+
|
|
5
|
+
//# sourceMappingURL=src_context_ChatContext_tsx_0lowp8p._.js.map
|