@whxway/loom 1.0.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build/56416d4ae4ce586f.js +6 -0
- package/.next/build/56416d4ae4ce586f.js.map +5 -0
- package/.next/build/chunks/[root-of-the-server]__0oj80bi._.js +206 -0
- package/.next/build/chunks/[root-of-the-server]__0oj80bi._.js.map +8 -0
- package/.next/build/chunks/[root-of-the-server]__1f933tp._.js +500 -0
- package/.next/build/chunks/[root-of-the-server]__1f933tp._.js.map +11 -0
- package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_0b7xl6g._.js +13 -0
- package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_0b7xl6g._.js.map +5 -0
- package/.next/build/chunks/[turbopack]_runtime.js +890 -0
- package/.next/build/chunks/[turbopack]_runtime.js.map +11 -0
- package/.next/build/chunks/node_modules_20v-8wl._.js +6824 -0
- package/.next/build/chunks/node_modules_20v-8wl._.js.map +47 -0
- package/.next/build/package.json +1 -0
- package/.next/build-manifest.json +3 -3
- package/.next/cache/.previewinfo +1 -0
- package/.next/cache/.rscinfo +1 -0
- package/.next/cache/.tsbuildinfo +1 -0
- package/.next/diagnostics/build-diagnostics.json +6 -0
- package/.next/diagnostics/framework.json +1 -0
- package/.next/diagnostics/route-bundle-stats.json +488 -0
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/app/(auth)/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/logs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/mcp/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/mcp/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/mcp/presets/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/models/[name]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/playground/audio/speech/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/playground/audio/transcription/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/playground/chat/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/playground/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/playground/embedding/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/playground/image/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/playground/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/playground/video/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/providers/[name]/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/providers/[name]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/providers/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/providers/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/settings/api-keys/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/(dashboard)/settings/users/page.js.nft.json +1 -1
- package/.next/server/app/(dashboard)/settings/users/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/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +2 -2
- package/.next/server/app/_not-found.rsc +3 -3
- package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/adapters/route.js.nft.json +1 -1
- package/.next/server/app/api/apikeys/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/apikeys/route.js.nft.json +1 -1
- package/.next/server/app/api/capabilities/route.js.nft.json +1 -1
- package/.next/server/app/api/conversations/[id]/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/conversations/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/conversations/route.js.nft.json +1 -1
- package/.next/server/app/api/health/route.js.nft.json +1 -1
- package/.next/server/app/api/login/route.js.nft.json +1 -1
- package/.next/server/app/api/logout/route.js.nft.json +1 -1
- package/.next/server/app/api/logs/generations/[id]/images/[idx]/route.js.nft.json +1 -1
- package/.next/server/app/api/logs/generations/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/logs/generations/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/presets/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[id]/check/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[id]/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
- package/.next/server/app/api/messages/[id]/rate/route.js.nft.json +1 -1
- package/.next/server/app/api/models/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/models/route.js.nft.json +1 -1
- package/.next/server/app/api/ping/route.js.nft.json +1 -1
- package/.next/server/app/api/playground/chat/route.js.nft.json +1 -1
- package/.next/server/app/api/playground/embedding/route.js.nft.json +1 -1
- package/.next/server/app/api/providers/[id]/check/route.js.nft.json +1 -1
- package/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
- package/.next/server/app/api/providers/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/providers/probe/route.js.nft.json +1 -1
- package/.next/server/app/api/providers/reload/route.js.nft.json +1 -1
- package/.next/server/app/api/providers/route.js.nft.json +1 -1
- package/.next/server/app/api/stats/models/[name]/route.js.nft.json +1 -1
- package/.next/server/app/api/stats/route.js.nft.json +1 -1
- package/.next/server/app/api/tools/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/users/[username]/route.js.nft.json +1 -1
- package/.next/server/app/api/users/me/preferences/route.js.nft.json +1 -1
- package/.next/server/app/api/users/me/route.js.nft.json +1 -1
- package/.next/server/app/api/users/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/models/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/rerank/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/videos/[id]/content/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/videos/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/v1/videos/route.js.nft.json +1 -1
- package/.next/server/app/api/variants/route.js.nft.json +1 -1
- package/.next/server/app/index.html +2 -2
- package/.next/server/app/index.rsc +3 -3
- package/.next/server/app/index.segments/!KGRhc2hib2FyZCk/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/index.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login.html +2 -2
- package/.next/server/app/login.rsc +3 -3
- package/.next/server/app/login.segments/!KGF1dGgp/login/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/login.segments/!KGF1dGgp/login.segment.rsc +1 -1
- package/.next/server/app/login.segments/!KGF1dGgp.segment.rsc +1 -1
- package/.next/server/app/login.segments/_full.segment.rsc +3 -3
- package/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/.next/server/app/login.segments/_index.segment.rsc +2 -2
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/logs.html +2 -2
- package/.next/server/app/logs.rsc +3 -3
- package/.next/server/app/logs.segments/!KGRhc2hib2FyZCk/logs/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/logs.segments/!KGRhc2hib2FyZCk/logs.segment.rsc +1 -1
- package/.next/server/app/logs.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/.next/server/app/logs.segments/_full.segment.rsc +3 -3
- package/.next/server/app/logs.segments/_head.segment.rsc +1 -1
- package/.next/server/app/logs.segments/_index.segment.rsc +2 -2
- package/.next/server/app/logs.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/mcp/presets.html +2 -2
- package/.next/server/app/mcp/presets.rsc +5 -5
- package/.next/server/app/mcp/presets.segments/!KGRhc2hib2FyZCk/mcp/presets/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/mcp/presets.segments/!KGRhc2hib2FyZCk/mcp/presets.segment.rsc +1 -1
- package/.next/server/app/mcp/presets.segments/!KGRhc2hib2FyZCk/mcp.segment.rsc +1 -1
- package/.next/server/app/mcp/presets.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/.next/server/app/mcp/presets.segments/_full.segment.rsc +5 -5
- package/.next/server/app/mcp/presets.segments/_head.segment.rsc +1 -1
- package/.next/server/app/mcp/presets.segments/_index.segment.rsc +2 -2
- package/.next/server/app/mcp/presets.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/mcp.html +2 -2
- package/.next/server/app/mcp.rsc +5 -5
- package/.next/server/app/mcp.segments/!KGRhc2hib2FyZCk/mcp/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/mcp.segments/!KGRhc2hib2FyZCk/mcp.segment.rsc +1 -1
- package/.next/server/app/mcp.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/.next/server/app/mcp.segments/_full.segment.rsc +5 -5
- package/.next/server/app/mcp.segments/_head.segment.rsc +1 -1
- package/.next/server/app/mcp.segments/_index.segment.rsc +2 -2
- package/.next/server/app/mcp.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/playground/audio/speech.html +2 -2
- package/.next/server/app/playground/audio/speech.rsc +3 -3
- package/.next/server/app/playground/audio/speech.segments/!KGRhc2hib2FyZCk/playground/audio/speech/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/playground/audio/speech.segments/!KGRhc2hib2FyZCk/playground/audio/speech.segment.rsc +1 -1
- package/.next/server/app/playground/audio/speech.segments/!KGRhc2hib2FyZCk/playground/audio.segment.rsc +1 -1
- package/.next/server/app/playground/audio/speech.segments/!KGRhc2hib2FyZCk/playground.segment.rsc +1 -1
- package/.next/server/app/playground/audio/speech.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/.next/server/app/playground/audio/speech.segments/_full.segment.rsc +3 -3
- package/.next/server/app/playground/audio/speech.segments/_head.segment.rsc +1 -1
- package/.next/server/app/playground/audio/speech.segments/_index.segment.rsc +2 -2
- package/.next/server/app/playground/audio/speech.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/playground/audio/transcription.html +2 -2
- package/.next/server/app/playground/audio/transcription.rsc +3 -3
- package/.next/server/app/playground/audio/transcription.segments/!KGRhc2hib2FyZCk/playground/audio/transcription/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/playground/audio/transcription.segments/!KGRhc2hib2FyZCk/playground/audio/transcription.segment.rsc +1 -1
- package/.next/server/app/playground/audio/transcription.segments/!KGRhc2hib2FyZCk/playground/audio.segment.rsc +1 -1
- package/.next/server/app/playground/audio/transcription.segments/!KGRhc2hib2FyZCk/playground.segment.rsc +1 -1
- package/.next/server/app/playground/audio/transcription.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/.next/server/app/playground/audio/transcription.segments/_full.segment.rsc +3 -3
- package/.next/server/app/playground/audio/transcription.segments/_head.segment.rsc +1 -1
- package/.next/server/app/playground/audio/transcription.segments/_index.segment.rsc +2 -2
- package/.next/server/app/playground/audio/transcription.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/playground/chat.html +2 -2
- package/.next/server/app/playground/chat.rsc +5 -5
- package/.next/server/app/playground/chat.segments/!KGRhc2hib2FyZCk/playground/chat/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/playground/chat.segments/!KGRhc2hib2FyZCk/playground/chat.segment.rsc +1 -1
- package/.next/server/app/playground/chat.segments/!KGRhc2hib2FyZCk/playground.segment.rsc +1 -1
- package/.next/server/app/playground/chat.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/.next/server/app/playground/chat.segments/_full.segment.rsc +5 -5
- package/.next/server/app/playground/chat.segments/_head.segment.rsc +1 -1
- package/.next/server/app/playground/chat.segments/_index.segment.rsc +2 -2
- package/.next/server/app/playground/chat.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/playground/embedding.html +2 -2
- package/.next/server/app/playground/embedding.rsc +3 -3
- package/.next/server/app/playground/embedding.segments/!KGRhc2hib2FyZCk/playground/embedding/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/playground/embedding.segments/!KGRhc2hib2FyZCk/playground/embedding.segment.rsc +1 -1
- package/.next/server/app/playground/embedding.segments/!KGRhc2hib2FyZCk/playground.segment.rsc +1 -1
- package/.next/server/app/playground/embedding.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/.next/server/app/playground/embedding.segments/_full.segment.rsc +3 -3
- package/.next/server/app/playground/embedding.segments/_head.segment.rsc +1 -1
- package/.next/server/app/playground/embedding.segments/_index.segment.rsc +2 -2
- package/.next/server/app/playground/embedding.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/playground/image.html +2 -2
- package/.next/server/app/playground/image.rsc +3 -3
- package/.next/server/app/playground/image.segments/!KGRhc2hib2FyZCk/playground/image/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/playground/image.segments/!KGRhc2hib2FyZCk/playground/image.segment.rsc +1 -1
- package/.next/server/app/playground/image.segments/!KGRhc2hib2FyZCk/playground.segment.rsc +1 -1
- package/.next/server/app/playground/image.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/.next/server/app/playground/image.segments/_full.segment.rsc +3 -3
- package/.next/server/app/playground/image.segments/_head.segment.rsc +1 -1
- package/.next/server/app/playground/image.segments/_index.segment.rsc +2 -2
- package/.next/server/app/playground/image.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/playground/video.html +2 -2
- package/.next/server/app/playground/video.rsc +3 -3
- package/.next/server/app/playground/video.segments/!KGRhc2hib2FyZCk/playground/video/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/playground/video.segments/!KGRhc2hib2FyZCk/playground/video.segment.rsc +1 -1
- package/.next/server/app/playground/video.segments/!KGRhc2hib2FyZCk/playground.segment.rsc +1 -1
- package/.next/server/app/playground/video.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/.next/server/app/playground/video.segments/_full.segment.rsc +3 -3
- package/.next/server/app/playground/video.segments/_head.segment.rsc +1 -1
- package/.next/server/app/playground/video.segments/_index.segment.rsc +2 -2
- package/.next/server/app/playground/video.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/playground.html +2 -2
- package/.next/server/app/playground.rsc +3 -3
- package/.next/server/app/playground.segments/!KGRhc2hib2FyZCk/playground/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/playground.segments/!KGRhc2hib2FyZCk/playground.segment.rsc +1 -1
- package/.next/server/app/playground.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/.next/server/app/playground.segments/_full.segment.rsc +3 -3
- package/.next/server/app/playground.segments/_head.segment.rsc +1 -1
- package/.next/server/app/playground.segments/_index.segment.rsc +2 -2
- package/.next/server/app/playground.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/providers.html +2 -2
- package/.next/server/app/providers.rsc +5 -5
- package/.next/server/app/providers.segments/!KGRhc2hib2FyZCk/providers/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/providers.segments/!KGRhc2hib2FyZCk/providers.segment.rsc +1 -1
- package/.next/server/app/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/.next/server/app/providers.segments/_full.segment.rsc +5 -5
- package/.next/server/app/providers.segments/_head.segment.rsc +1 -1
- package/.next/server/app/providers.segments/_index.segment.rsc +2 -2
- package/.next/server/app/providers.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/api-keys.html +2 -2
- package/.next/server/app/settings/api-keys.rsc +3 -3
- package/.next/server/app/settings/api-keys.segments/!KGRhc2hib2FyZCk/settings/api-keys/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings/api-keys.segments/!KGRhc2hib2FyZCk/settings/api-keys.segment.rsc +1 -1
- package/.next/server/app/settings/api-keys.segments/!KGRhc2hib2FyZCk/settings.segment.rsc +1 -1
- package/.next/server/app/settings/api-keys.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/.next/server/app/settings/api-keys.segments/_full.segment.rsc +3 -3
- package/.next/server/app/settings/api-keys.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/api-keys.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings/api-keys.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings/users.html +2 -2
- package/.next/server/app/settings/users.rsc +5 -5
- package/.next/server/app/settings/users.segments/!KGRhc2hib2FyZCk/settings/users/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings/users.segments/!KGRhc2hib2FyZCk/settings/users.segment.rsc +1 -1
- package/.next/server/app/settings/users.segments/!KGRhc2hib2FyZCk/settings.segment.rsc +1 -1
- package/.next/server/app/settings/users.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/.next/server/app/settings/users.segments/_full.segment.rsc +5 -5
- package/.next/server/app/settings/users.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings/users.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings/users.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/settings.html +2 -2
- package/.next/server/app/settings.rsc +5 -5
- package/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings.segments/!KGRhc2hib2FyZCk/settings.segment.rsc +1 -1
- package/.next/server/app/settings.segments/!KGRhc2hib2FyZCk.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_full.segment.rsc +5 -5
- package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
- package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/server/chunks/[root-of-the-server]__02sypva._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__02sypva._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__0g3mnim._.js +4 -1
- package/.next/server/chunks/[root-of-the-server]__0g3mnim._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__0myi8j1._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__0myi8j1._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__1qg3d87._.js +2 -2
- package/.next/server/chunks/[root-of-the-server]__1qg3d87._.js.map +1 -1
- package/.next/server/chunks/ssr/_001fhst._.js +3 -0
- package/.next/server/chunks/ssr/_001fhst._.js.map +1 -0
- package/.next/server/chunks/ssr/_02wtd-0._.js +3 -0
- package/.next/server/chunks/ssr/_02wtd-0._.js.map +1 -0
- package/.next/server/chunks/ssr/_05ufvn1._.js +9 -0
- package/.next/server/chunks/ssr/_05ufvn1._.js.map +1 -0
- package/.next/server/chunks/ssr/{_1fd20ju._.js → _066w-6f._.js} +2 -2
- package/.next/server/chunks/ssr/{_1fd20ju._.js.map → _066w-6f._.js.map} +1 -1
- package/.next/server/chunks/ssr/_0gd7kq_._.js +1 -1
- package/.next/server/chunks/ssr/_0gd7kq_._.js.map +1 -1
- package/.next/server/chunks/ssr/_0k-6auj._.js +3 -0
- package/.next/server/chunks/ssr/_0k-6auj._.js.map +1 -0
- package/.next/server/chunks/ssr/_0qo9tx1._.js +3 -0
- package/.next/server/chunks/ssr/_0qo9tx1._.js.map +1 -0
- package/.next/server/chunks/ssr/_0uom5g-._.js +9 -0
- package/.next/server/chunks/ssr/_0uom5g-._.js.map +1 -0
- package/.next/server/chunks/ssr/_1b09eqp._.js +1 -1
- package/.next/server/chunks/ssr/_1b09eqp._.js.map +1 -1
- package/.next/server/chunks/ssr/_1oi0iqt._.js +9 -0
- package/.next/server/chunks/ssr/_1oi0iqt._.js.map +1 -0
- package/.next/server/chunks/ssr/_1q3gglq._.js +3 -0
- package/.next/server/chunks/ssr/_1q3gglq._.js.map +1 -0
- package/.next/server/chunks/ssr/_1y5sreb._.js +3 -0
- package/.next/server/chunks/ssr/_1y5sreb._.js.map +1 -0
- package/.next/server/chunks/ssr/_1zlpzyk._.js +1 -1
- package/.next/server/chunks/ssr/_1zlpzyk._.js.map +1 -1
- package/.next/server/chunks/ssr/app_(dashboard)_mcp_page_tsx_0cg7pz9._.js +1 -1
- package/.next/server/chunks/ssr/app_(dashboard)_mcp_page_tsx_0cg7pz9._.js.map +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +2 -2
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/0brzabhj3foow.js +1 -0
- package/.next/static/chunks/0cbg1vmtl84ae.css +1 -0
- package/.next/static/chunks/0hf0pedij0d6a.js +7 -0
- package/.next/static/chunks/1lo5yg9gvb9eg.js +7 -0
- package/.next/static/chunks/1s-rfyrjre6lb.js +1 -0
- package/.next/static/chunks/27siz43i4h5l7.js +9 -0
- package/.next/static/chunks/29p-wdja_cbgh.js +11 -0
- package/.next/static/chunks/396ikhrcofosq.js +7 -0
- package/.next/static/chunks/3m3fw3fmcc301.js +7 -0
- package/.next/trace +2 -0
- package/.next/trace-build +1 -1
- package/.next/types/cache-life.d.ts +145 -0
- package/.next/types/routes.d.ts +139 -0
- package/.next/types/validator.ts +682 -0
- package/bin/loom.mjs +80 -21
- package/package.json +1 -1
- package/.next/server/chunks/ssr/_0g6iz5n._.js +0 -3
- package/.next/server/chunks/ssr/_0g6iz5n._.js.map +0 -1
- package/.next/server/chunks/ssr/_0mim08o._.js +0 -3
- package/.next/server/chunks/ssr/_0mim08o._.js.map +0 -1
- package/.next/server/chunks/ssr/_0xm-krv._.js +0 -9
- package/.next/server/chunks/ssr/_0xm-krv._.js.map +0 -1
- package/.next/server/chunks/ssr/_0zxn_u0._.js +0 -3
- package/.next/server/chunks/ssr/_0zxn_u0._.js.map +0 -1
- package/.next/server/chunks/ssr/_151pht4._.js +0 -9
- package/.next/server/chunks/ssr/_151pht4._.js.map +0 -1
- package/.next/server/chunks/ssr/_18tl_0o._.js +0 -9
- package/.next/server/chunks/ssr/_18tl_0o._.js.map +0 -1
- package/.next/server/chunks/ssr/_19nuoa6._.js +0 -9
- package/.next/server/chunks/ssr/_19nuoa6._.js.map +0 -1
- package/.next/server/chunks/ssr/_1ax02l9._.js +0 -3
- package/.next/server/chunks/ssr/_1ax02l9._.js.map +0 -1
- package/.next/server/chunks/ssr/_1fze3ic._.js +0 -9
- package/.next/server/chunks/ssr/_1fze3ic._.js.map +0 -1
- package/.next/static/chunks/0zryggvaj_s87.js +0 -7
- package/.next/static/chunks/16bx44gr1d_ij.js +0 -7
- package/.next/static/chunks/172e7ymu9a3w9.js +0 -1
- package/.next/static/chunks/1_w-1rm5wy0l7.css +0 -1
- package/.next/static/chunks/2j_bpzzylp1un.js +0 -9
- package/.next/static/chunks/2r2pwisd9bptv.js +0 -11
- package/.next/static/chunks/3at-42v-_yh7y.js +0 -7
- package/.next/static/chunks/3bp0ieicfxx5n.js +0 -1
- package/.next/static/chunks/3et56kszc9f9a.js +0 -7
- /package/.next/static/{S-TxD5uw__EHY12mebgvS → wCZkC7ZaYrxG37d-e2tac}/_buildManifest.js +0 -0
- /package/.next/static/{S-TxD5uw__EHY12mebgvS → wCZkC7ZaYrxG37d-e2tac}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{S-TxD5uw__EHY12mebgvS → wCZkC7ZaYrxG37d-e2tac}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../node_modules/%40radix-ui/react-switch/dist/index.mjs","../../../../components/ui/switch.tsx","../../../../components/ui/textarea.tsx","../../../../components/ui/dialog.tsx","../../../../lib/api/mcp.ts","../../../../node_modules/%40tanstack/react-query/build/modern/useInfiniteQuery.js","../../../../lib/api/conversations.ts","../../../../node_modules/%40tanstack/query-core/build/modern/infiniteQueryObserver.js","../../../../components/ui/badge.tsx","../../../../lib/api/logs.ts","../../../../lib/api/users.ts","../../../../lib/api/providers.ts","../../../../lib/api/index.ts","../../../../lib/api/capabilities.ts","../../../../lib/api/adapters.ts","../../../../lib/api/variants.ts","../../../../lib/api/tools.ts"],"sourcesContent":["\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProviderImpl, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nfunction SwitchProvider(props) {\n const {\n __scopeSwitch,\n checked: checkedProp,\n children,\n defaultChecked,\n disabled,\n form,\n name,\n onCheckedChange,\n required,\n value = \"on\",\n // @ts-expect-error\n internal_do_not_use_render\n } = props;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n const [control, setControl] = React.useState(null);\n const [bubbleInput, setBubbleInput] = React.useState(null);\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = control ? !!form || !!control.closest(\"form\") : (\n // We set this to true by default so that events bubble to forms without JS (SSR)\n true\n );\n const context = {\n checked,\n setChecked,\n disabled,\n control,\n setControl,\n name,\n form,\n value,\n hasConsumerStoppedPropagationRef,\n required,\n defaultChecked,\n isFormControl,\n bubbleInput,\n setBubbleInput\n };\n return /* @__PURE__ */ jsx(SwitchProviderImpl, { scope: __scopeSwitch, ...context, children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children });\n}\nvar TRIGGER_NAME = \"SwitchTrigger\";\nvar SwitchTrigger = React.forwardRef(\n ({ __scopeSwitch, onClick, ...switchProps }, forwardedRef) => {\n const {\n value,\n disabled,\n checked,\n required,\n setControl,\n setChecked,\n hasConsumerStoppedPropagationRef,\n isFormControl,\n bubbleInput\n } = useSwitchContext(TRIGGER_NAME, __scopeSwitch);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (bubbleInput && isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n );\n }\n);\nSwitchTrigger.displayName = TRIGGER_NAME;\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked,\n defaultChecked,\n required,\n disabled,\n value,\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n return /* @__PURE__ */ jsx(\n SwitchProvider,\n {\n __scopeSwitch,\n checked,\n defaultChecked,\n disabled,\n required,\n onCheckedChange,\n name,\n form,\n value,\n internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n SwitchTrigger,\n {\n ...switchProps,\n ref: forwardedRef,\n __scopeSwitch\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n __scopeSwitch\n }\n )\n ] })\n }\n );\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n ({ __scopeSwitch, ...props }, forwardedRef) => {\n const {\n control,\n hasConsumerStoppedPropagationRef,\n checked,\n defaultChecked,\n required,\n disabled,\n name,\n value,\n form,\n bubbleInput,\n setBubbleInput\n } = useSwitchContext(BUBBLE_INPUT_NAME, __scopeSwitch);\n const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = bubbleInput;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n const bubbles = !hasConsumerStoppedPropagationRef.current;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [bubbleInput, prevChecked, checked, hasConsumerStoppedPropagationRef]);\n const defaultCheckedRef = React.useRef(checked);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: defaultChecked ?? defaultCheckedRef.current,\n required,\n disabled,\n name,\n value,\n form,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0,\n // We transform because the input is absolutely positioned but we have\n // rendered it **after** the button. This pulls it back to sit on top\n // of the button.\n transform: \"translateX(-100%)\"\n }\n }\n );\n }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nexport {\n Switch as Root,\n Switch,\n SwitchThumb,\n SwitchThumb as Thumb,\n createSwitchScope,\n SwitchBubbleInput as unstable_BubbleInput,\n SwitchProvider as unstable_Provider,\n SwitchBubbleInput as unstable_SwitchBubbleInput,\n SwitchProvider as unstable_SwitchProvider,\n SwitchTrigger as unstable_SwitchTrigger,\n SwitchTrigger as unstable_Trigger\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Switch({\n className,\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n \"peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n \"bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 outline-none sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","\"use client\"\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\"\nimport { defineResource } from \"./resource\"\nimport { fetcher } from \"./client\"\nimport type {\n McpPreset,\n McpServerCreateInput,\n McpServerDTO,\n McpServerUpdateInput,\n} from \"@/lib/schemas/mcp\"\n\nconst base = defineResource<\n McpServerDTO,\n McpServerCreateInput,\n McpServerUpdateInput,\n Record<string, unknown>,\n McpServerDTO[]\n>({\n path: \"/mcp/servers\",\n key: \"mcp-servers\",\n listShape: \"array\",\n staleTime: 60_000,\n})\n\nexport const mcpServers = {\n ...base,\n\n // ---- presets ----\n listPresets: () => fetcher<McpPreset[]>(\"/mcp/presets\"),\n usePresets: () =>\n useQuery({\n queryKey: [\"mcp-presets\"] as const,\n queryFn: () => mcpServers.listPresets(),\n staleTime: 5 * 60 * 1000,\n }),\n\n // ---- check ----\n check: (id: string) =>\n fetcher<McpServerDTO>(`/mcp/servers/${encodeURIComponent(id)}/check`, {\n method: \"POST\",\n }),\n useCheck: (opts?: { onSuccess?: (server: McpServerDTO) => void; onError?: (err: Error) => void }) => {\n const qc = useQueryClient()\n return useMutation({\n mutationFn: (id: string) => mcpServers.check(id),\n onSuccess: (server) => {\n qc.invalidateQueries({ queryKey: base.keys.all() })\n opts?.onSuccess?.(server)\n },\n onError: (err: Error) => opts?.onError?.(err),\n })\n },\n}\n","\"use client\";\n\n// src/useInfiniteQuery.ts\nimport { InfiniteQueryObserver } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nfunction useInfiniteQuery(options, queryClient) {\n return useBaseQuery(\n options,\n InfiniteQueryObserver,\n queryClient\n );\n}\nexport {\n useInfiniteQuery\n};\n//# sourceMappingURL=useInfiniteQuery.js.map","\"use client\";\nimport { useInfiniteQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { defineResource } from \"./resource\";\nimport { fetcher } from \"./client\";\nimport type { Paginated } from \"@/lib/schemas/common\";\nimport type { ConversationDTO, MessageDTO } from \"@/lib/schemas/conversation\";\n\nconst base = defineResource<\n ConversationDTO,\n never,\n { title: string },\n { page?: number; page_size?: number; sort?: string; keyword?: string },\n Paginated<ConversationDTO>\n>({\n path: \"/conversations\",\n key: \"conversations\",\n paramsOf: (q) => ({\n page: q.page ?? 1,\n page_size: q.page_size ?? 20,\n sort: q.sort ?? \"-updated_at\",\n keyword: q.keyword,\n }),\n // List + get are read-mostly; users rarely care about millisecond\n // freshness here. 60s lets nav back to the sidebar / chat skip\n // a network round-trip — mutations explicit-invalidate anyway.\n staleTime: 60_000,\n});\n\n/** Cache key for the initial page of messages of a single conversation.\n * Lives under the conversation resource so it gets gc'd if the resource\n * is gc'd, but is isolated from list/infinite queries so we can invalidate\n * list-only without dropping the message cache. */\nexport function messagesCacheKey(conversationId: string, pageSize: number) {\n return [...base.keys.one(conversationId), \"messages-cache\", pageSize] as const;\n}\n\nexport const conversations = {\n ...base,\n\n // ---- shorthand: title-only update ----\n updateTitle: (id: string, title: string) => base.update(id, { title }),\n\n // ---- shared message cache key (used by usePaginatedMessages / sync) ----\n messagesCacheKey,\n\n /** Invalidate only the conversation LIST queries (list/infinite),\n * leaving the per-conversation messages cache intact. */\n useInvalidateList: () => {\n const qc = useQueryClient();\n return () => qc.invalidateQueries({\n queryKey: base.keys.all(),\n predicate: (q) => {\n const k = q.queryKey as readonly unknown[];\n return k.length >= 2 && (k[1] === \"list\" || k[1] === \"infinite\");\n },\n });\n },\n\n // ---- infinite scroll variant of useList ----\n useInfinite: (params?: { pageSize?: number; scope?: string; keyword?: string }) => {\n const pageSize = params?.pageSize ?? 20;\n const keyword = params?.keyword?.trim() || undefined;\n return useInfiniteQuery({\n queryKey: [\n ...base.keys.all(),\n \"infinite\",\n params?.scope ?? \"default\",\n pageSize,\n keyword ?? \"\",\n ] as const,\n initialPageParam: 1,\n queryFn: ({ pageParam = 1 }) =>\n base.list({ page: pageParam as number, page_size: pageSize, keyword }),\n getNextPageParam: (lastPage) => {\n if (!lastPage) return undefined;\n const hasMore = lastPage.page * lastPage.page_size < lastPage.total;\n return hasMore ? lastPage.page + 1 : undefined;\n },\n });\n },\n\n // ---- nested: messages under a conversation ----\n listMessages: (id: string, params?: { page?: number; page_size?: number; sort?: string }) =>\n fetcher<Paginated<MessageDTO>>(\n `/conversations/${encodeURIComponent(id)}/messages?` +\n new URLSearchParams({\n page: String(params?.page ?? 1),\n page_size: String(params?.page_size ?? 50),\n sort: params?.sort ?? \"-created_at\",\n }).toString(),\n ),\n};\n\n// Messages are a sibling resource only used for rating today.\nconst messagesKey = [\"messages\"] as const;\nexport const messages = {\n keys: { all: () => messagesKey },\n rate: (messageId: string, rating: \"up\" | \"down\" | \"none\", feedback?: string) =>\n fetcher<null>(`/messages/${encodeURIComponent(messageId)}/rate`, {\n method: \"POST\",\n body: JSON.stringify({ rating, feedback }),\n }),\n};\n","// src/infiniteQueryObserver.ts\nimport { QueryObserver } from \"./queryObserver.js\";\nimport { hasNextPage, hasPreviousPage } from \"./infiniteQueryBehavior.js\";\nvar InfiniteQueryObserver = class extends QueryObserver {\n constructor(client, options) {\n super(client, options);\n }\n bindMethods() {\n super.bindMethods();\n this.fetchNextPage = this.fetchNextPage.bind(this);\n this.fetchPreviousPage = this.fetchPreviousPage.bind(this);\n }\n setOptions(options) {\n options._type = \"infinite\";\n super.setOptions(options);\n }\n getOptimisticResult(options) {\n options._type = \"infinite\";\n return super.getOptimisticResult(options);\n }\n fetchNextPage(options) {\n return this.fetch({\n ...options,\n meta: {\n fetchMore: { direction: \"forward\" }\n }\n });\n }\n fetchPreviousPage(options) {\n return this.fetch({\n ...options,\n meta: {\n fetchMore: { direction: \"backward\" }\n }\n });\n }\n createResult(query, options) {\n const { state } = query;\n const parentResult = super.createResult(query, options);\n const { isFetching, isRefetching, isError, isRefetchError } = parentResult;\n const fetchDirection = state.fetchMeta?.fetchMore?.direction;\n const isFetchNextPageError = isError && fetchDirection === \"forward\";\n const isFetchingNextPage = isFetching && fetchDirection === \"forward\";\n const isFetchPreviousPageError = isError && fetchDirection === \"backward\";\n const isFetchingPreviousPage = isFetching && fetchDirection === \"backward\";\n const result = {\n ...parentResult,\n fetchNextPage: this.fetchNextPage,\n fetchPreviousPage: this.fetchPreviousPage,\n hasNextPage: hasNextPage(options, state.data),\n hasPreviousPage: hasPreviousPage(options, state.data),\n isFetchNextPageError,\n isFetchingNextPage,\n isFetchPreviousPageError,\n isFetchingPreviousPage,\n isRefetchError: isRefetchError && !isFetchNextPageError && !isFetchPreviousPageError,\n isRefetching: isRefetching && !isFetchingNextPage && !isFetchingPreviousPage\n };\n return result;\n }\n};\nexport {\n InfiniteQueryObserver\n};\n//# sourceMappingURL=infiniteQueryObserver.js.map","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n","import { defineResource } from \"./resource\";\nimport type { Paginated } from \"@/lib/schemas/common\";\nimport type { LogDetailDTO, LogFilterParams, LogListItemDTO } from \"@/lib/schemas/log\";\n\n/** Read-only resource: only list + get are used. */\nexport const logs = defineResource<\n LogDetailDTO,\n never,\n never,\n LogFilterParams,\n Paginated<LogListItemDTO>\n>({\n path: \"/logs/generations\",\n key: \"logs\",\n // Logs change as new generations happen, but for the same filter\n // a 30s cache is fine — the user can hit the explicit Refresh\n // button to force a refetch. Stops re-fetching on every nav back\n // to the page within a session.\n staleTime: 30_000,\n});\n","import { defineResource } from \"./resource\";\nimport type { Paginated } from \"@/lib/schemas/common\";\nimport type { UserCreateInput, UserDTO, UserFilterParams, UserUpdateInput } from \"@/lib/schemas/user\";\n\nexport const users = defineResource<\n UserDTO,\n UserCreateInput,\n UserUpdateInput,\n UserFilterParams,\n Paginated<UserDTO>\n>({\n path: \"/users\",\n key: \"users\",\n staleTime: 60_000,\n});\n","\"use client\";\nimport { useMutation, useQuery, useQueryClient, type UseMutationOptions } from \"@tanstack/react-query\";\nimport { defineResource } from \"./resource\";\nimport { fetcher } from \"./client\";\nimport type { ModelDTO } from \"@/lib/schemas/model\";\nimport type { ProviderCreateInput, ProviderDTO, ProviderUpdateInput } from \"@/lib/schemas/provider\";\n\nconst base = defineResource<\n ProviderDTO,\n ProviderCreateInput,\n ProviderUpdateInput,\n Record<string, unknown>,\n ProviderDTO[]\n>({\n path: \"/providers\",\n key: \"providers\",\n listShape: \"array\",\n staleTime: 60_000,\n invalidates: [\"models\"],\n});\n\nexport interface ProviderCheckResult {\n ok: boolean;\n models?: number;\n error?: string;\n latency_ms?: number;\n}\n\nexport interface ProviderProbeResult {\n ok: boolean;\n error?: string;\n latency_ms: number;\n}\n\nexport const providers = {\n ...base,\n\n // ---- custom endpoints ----\n listModels: (id: string) =>\n fetcher<ModelDTO[]>(`/providers/${encodeURIComponent(id)}/models`),\n reload: () =>\n fetcher<null>(\"/providers/reload\", { method: \"POST\" }),\n check: (id: string) =>\n fetcher<ProviderCheckResult>(\n `/providers/${encodeURIComponent(id)}/check`,\n { method: \"POST\" },\n ),\n /** Probe an arbitrary health-check URL without touching any saved\n * provider — used by the form's Test button so it validates the\n * URL currently in the input, not the (possibly stale) saved one. */\n probe: (healthCheckUrl: string) =>\n fetcher<ProviderProbeResult>(\"/providers/probe\", {\n method: \"POST\",\n body: JSON.stringify({ health_check_url: healthCheckUrl }),\n headers: { \"Content-Type\": \"application/json\" },\n }),\n\n // ---- custom hooks ----\n useModels: (id: string | undefined | null) =>\n useQuery({\n queryKey: [...base.keys.one(id ?? \"\"), \"models\"] as const,\n queryFn: () => providers.listModels(id!),\n enabled: !!id,\n }),\n\n /** POST /providers/reload — clears the discovery cache. Cascades same\n * invalidation as a CRUD mutation (providers + models). */\n useReload: (opts?: Omit<UseMutationOptions<null, Error, void>, \"mutationFn\">) => {\n const invalidate = base.useInvalidate();\n return useMutation<null, Error, void>({\n mutationFn: providers.reload,\n ...opts,\n onSuccess: (data, vars, onMutateResult, context) => {\n invalidate();\n opts?.onSuccess?.(data, vars, onMutateResult, context);\n },\n });\n },\n\n /** POST /providers/:id/check — runs the health probe. On success the\n * server has updated `last_health_*`, so we invalidate the providers\n * cache to surface the new status pill. */\n useCheck: (\n id: string | undefined | null,\n opts?: Omit<UseMutationOptions<ProviderCheckResult, Error, void>, \"mutationFn\">,\n ) => {\n const invalidate = base.useInvalidate();\n return useMutation<ProviderCheckResult, Error, void>({\n mutationFn: () => providers.check(id!),\n ...opts,\n onSuccess: (data, vars, onMutateResult, context) => {\n invalidate();\n opts?.onSuccess?.(data, vars, onMutateResult, context);\n },\n });\n },\n};\n","// Per-domain api modules. Each `*Resource` object exposes both raw fetch\n// functions and TanStack Query hooks generated from a single descriptor —\n// see lib/api/resource.ts. Custom (non-CRUD) endpoints are colocated in\n// the same module.\n\nexport { auth } from \"./auth\";\nexport { users } from \"./users\";\nexport { providers } from \"./providers\";\nexport { models } from \"./models\";\nexport { apiKeys } from \"./apikeys\";\nexport { logs } from \"./logs\";\nexport { conversations, messages } from \"./conversations\";\nexport { gateway } from \"./gateway\";\nexport { capabilities } from \"./capabilities\";\nexport { preferences } from \"./preferences\";\nexport { adapters } from \"./adapters\";\nexport { variants } from \"./variants\";\nexport { tools } from \"./tools\";\nexport { mcpServers } from \"./mcp\";\nexport { stats } from \"./stats\";\n\nexport { ApiError, fetcher, rawFetch, withQuery, API_BASE } from \"./client\";\nexport { defineResource } from \"./resource\";\n","import { defineResource } from \"./resource\";\nimport type { CapabilityDTO } from \"@/lib/schemas/capability\";\n\n/** Read-only catalog. */\nexport const capabilities = defineResource<\n CapabilityDTO,\n never,\n never,\n Record<string, unknown>,\n CapabilityDTO[]\n>({\n path: \"/capabilities\",\n key: \"capabilities\",\n listShape: \"array\",\n staleTime: 60_000,\n});\n","import { defineResource } from \"./resource\";\nimport type { AdapterDescriptor } from \"@/lib/schemas/adapter\";\n\n/** Read-only catalog of registered ProviderAdapter ids. */\nexport const adapters = defineResource<\n AdapterDescriptor,\n never,\n never,\n Record<string, unknown>,\n AdapterDescriptor[]\n>({\n path: \"/adapters\",\n key: \"adapters\",\n listShape: \"array\",\n staleTime: 60_000,\n});\n","import { defineResource } from \"./resource\";\nimport type { VariantDescriptor } from \"@/lib/schemas/variant\";\n\n/** Read-only catalog of registered upstream API variants. */\nexport const variants = defineResource<\n VariantDescriptor,\n never,\n never,\n Record<string, unknown>,\n VariantDescriptor[]\n>({\n path: \"/variants\",\n key: \"variants\",\n listShape: \"array\",\n staleTime: 60_000,\n});\n","import { defineResource } from \"./resource\";\nimport type { ToolCreateInput, ToolDTO, ToolUpdateInput } from \"@/lib/schemas/tool\";\n\nexport const tools = defineResource<\n ToolDTO,\n ToolCreateInput,\n ToolUpdateInput,\n Record<string, unknown>,\n ToolDTO[]\n>({\n path: \"/tools\",\n key: \"tools\",\n listShape: \"array\",\n staleTime: 60_000,\n});\n"],"names":["SWITCH_NAME","createSwitchContext","createSwitchScope","SwitchProviderImpl","useSwitchContext","SwitchProvider","props","__scopeSwitch","checked","checkedProp","children","defaultChecked","disabled","form","name","onCheckedChange","required","value","internal_do_not_use_render","setChecked","prop","defaultProp","onChange","caller","control","setControl","bubbleInput","setBubbleInput","hasConsumerStoppedPropagationRef","isFormControl","closest","context","scope","isFunction","TRIGGER_NAME","SwitchTrigger","onClick","switchProps","forwardedRef","composedRefs","button","type","role","getState","ref","event","prevChecked","current","isPropagationStopped","stopPropagation","displayName","Switch","SwitchBubbleInput","THUMB_NAME","SwitchThumb","thumbProps","span","BUBBLE_INPUT_NAME","controlSize","input","inputProto","window","HTMLInputElement","prototype","descriptor","Object","getOwnPropertyDescriptor","set","bubbles","Event","call","dispatchEvent","defaultCheckedRef","tabIndex","style","position","pointerEvents","opacity","margin","transform","Textarea","className","Dialog","DialogTrigger","DialogPortal","DialogClose","DialogOverlay","DialogContent","showCloseButton","DialogHeader","DialogFooter","DialogTitle","DialogDescription","base","path","key","listShape","staleTime","mcpServers","listPresets","usePresets","queryKey","queryFn","check","id","encodeURIComponent","method","useCheck","opts","qc","mutationFn","onSuccess","server","invalidateQueries","keys","all","onError","err","InfiniteQueryObserver","client","options","bindMethods","fetchNextPage","bind","fetchPreviousPage","setOptions","_type","getOptimisticResult","fetch","meta","fetchMore","direction","createResult","query","state","parentResult","isFetching","isRefetching","isError","isRefetchError","fetchDirection","fetchMeta","isFetchNextPageError","isFetchingNextPage","isFetchPreviousPageError","isFetchingPreviousPage","result","hasNextPage","data","hasPreviousPage","badgeVariants","variants","variant","default","secondary","destructive","outline","defaultVariants","Badge","asChild","Comp","logs","users","invalidates","providers","listModels","reload","probe","healthCheckUrl","body","JSON","stringify","health_check_url","headers","useModels","one","enabled","useReload","invalidate","useInvalidate","vars","onMutateResult","capabilities"],"mappings":"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","ignoreList":[0,5,7]}
|
|
1
|
+
{"version":3,"sources":["../../../../node_modules/%40radix-ui/react-switch/dist/index.mjs","../../../../components/ui/switch.tsx","../../../../components/ui/textarea.tsx","../../../../components/ui/dialog.tsx","../../../../lib/api/mcp.ts","../../../../node_modules/%40tanstack/react-query/build/modern/useInfiniteQuery.js","../../../../lib/api/conversations.ts","../../../../node_modules/%40tanstack/query-core/build/modern/infiniteQueryObserver.js","../../../../components/ui/badge.tsx","../../../../lib/api/logs.ts","../../../../lib/api/users.ts","../../../../lib/api/providers.ts","../../../../lib/api/index.ts","../../../../lib/api/capabilities.ts","../../../../lib/api/adapters.ts","../../../../lib/api/variants.ts","../../../../lib/api/tools.ts"],"sourcesContent":["\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProviderImpl, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nfunction SwitchProvider(props) {\n const {\n __scopeSwitch,\n checked: checkedProp,\n children,\n defaultChecked,\n disabled,\n form,\n name,\n onCheckedChange,\n required,\n value = \"on\",\n // @ts-expect-error\n internal_do_not_use_render\n } = props;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n const [control, setControl] = React.useState(null);\n const [bubbleInput, setBubbleInput] = React.useState(null);\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = control ? !!form || !!control.closest(\"form\") : (\n // We set this to true by default so that events bubble to forms without JS (SSR)\n true\n );\n const context = {\n checked,\n setChecked,\n disabled,\n control,\n setControl,\n name,\n form,\n value,\n hasConsumerStoppedPropagationRef,\n required,\n defaultChecked,\n isFormControl,\n bubbleInput,\n setBubbleInput\n };\n return /* @__PURE__ */ jsx(SwitchProviderImpl, { scope: __scopeSwitch, ...context, children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children });\n}\nvar TRIGGER_NAME = \"SwitchTrigger\";\nvar SwitchTrigger = React.forwardRef(\n ({ __scopeSwitch, onClick, ...switchProps }, forwardedRef) => {\n const {\n value,\n disabled,\n checked,\n required,\n setControl,\n setChecked,\n hasConsumerStoppedPropagationRef,\n isFormControl,\n bubbleInput\n } = useSwitchContext(TRIGGER_NAME, __scopeSwitch);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (bubbleInput && isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n );\n }\n);\nSwitchTrigger.displayName = TRIGGER_NAME;\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked,\n defaultChecked,\n required,\n disabled,\n value,\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n return /* @__PURE__ */ jsx(\n SwitchProvider,\n {\n __scopeSwitch,\n checked,\n defaultChecked,\n disabled,\n required,\n onCheckedChange,\n name,\n form,\n value,\n internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n SwitchTrigger,\n {\n ...switchProps,\n ref: forwardedRef,\n __scopeSwitch\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n __scopeSwitch\n }\n )\n ] })\n }\n );\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n ({ __scopeSwitch, ...props }, forwardedRef) => {\n const {\n control,\n hasConsumerStoppedPropagationRef,\n checked,\n defaultChecked,\n required,\n disabled,\n name,\n value,\n form,\n bubbleInput,\n setBubbleInput\n } = useSwitchContext(BUBBLE_INPUT_NAME, __scopeSwitch);\n const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = bubbleInput;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n const bubbles = !hasConsumerStoppedPropagationRef.current;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [bubbleInput, prevChecked, checked, hasConsumerStoppedPropagationRef]);\n const defaultCheckedRef = React.useRef(checked);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: defaultChecked ?? defaultCheckedRef.current,\n required,\n disabled,\n name,\n value,\n form,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0,\n // We transform because the input is absolutely positioned but we have\n // rendered it **after** the button. This pulls it back to sit on top\n // of the button.\n transform: \"translateX(-100%)\"\n }\n }\n );\n }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nexport {\n Switch as Root,\n Switch,\n SwitchThumb,\n SwitchThumb as Thumb,\n createSwitchScope,\n SwitchBubbleInput as unstable_BubbleInput,\n SwitchProvider as unstable_Provider,\n SwitchBubbleInput as unstable_SwitchBubbleInput,\n SwitchProvider as unstable_SwitchProvider,\n SwitchTrigger as unstable_SwitchTrigger,\n SwitchTrigger as unstable_Trigger\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Switch({\n className,\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n \"peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n \"bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 outline-none sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","\"use client\"\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\"\nimport * as React from \"react\"\nimport { defineResource } from \"./resource\"\nimport { fetcher, rawFetch } from \"./client\"\nimport type {\n McpPreset,\n McpServerCreateInput,\n McpServerDTO,\n McpServerUpdateInput,\n} from \"@/lib/schemas/mcp\"\n\nconst base = defineResource<\n McpServerDTO,\n McpServerCreateInput,\n McpServerUpdateInput,\n Record<string, unknown>,\n McpServerDTO[]\n>({\n path: \"/mcp/servers\",\n key: \"mcp-servers\",\n listShape: \"array\",\n staleTime: 60_000,\n})\n\n/** Wire shape — mirrors lib/server/mcp/checks.ts McpCheckEvent so\n * adding a new phase/log channel is a one-place edit on each side. */\nexport type McpCheckPhase = \"spawning\" | \"starting\" | \"connecting\" | \"listing\" | \"ready\"\n\nexport type McpCheckEvent =\n | { type: \"phase\"; phase: McpCheckPhase }\n | { type: \"log\"; line: string }\n | { type: \"result\"; server: McpServerDTO }\n | { type: \"error\"; message: string; server?: McpServerDTO }\n\nexport const mcpServers = {\n ...base,\n\n // ---- presets ----\n listPresets: () => fetcher<McpPreset[]>(\"/mcp/presets\"),\n usePresets: () =>\n useQuery({\n queryKey: [\"mcp-presets\"] as const,\n queryFn: () => mcpServers.listPresets(),\n staleTime: 5 * 60 * 1000,\n }),\n\n // ---- check (one-shot JSON, kept for back-compat) ----\n check: (id: string) =>\n fetcher<McpServerDTO>(`/mcp/servers/${encodeURIComponent(id)}/check`, {\n method: \"POST\",\n }),\n useCheck: (opts?: { onSuccess?: (server: McpServerDTO) => void; onError?: (err: Error) => void }) => {\n const qc = useQueryClient()\n return useMutation({\n mutationFn: (id: string) => mcpServers.check(id),\n onSuccess: (server) => {\n qc.invalidateQueries({ queryKey: base.keys.all() })\n opts?.onSuccess?.(server)\n },\n onError: (err: Error) => opts?.onError?.(err),\n })\n },\n\n // ---- check (SSE stream) ----\n /** Streams every phase + stderr line from the server check, then\n * resolves with the final DTO. Caller's onEvent is invoked for\n * every event including the terminating `result` / `error`. */\n checkStream: async (\n id: string,\n onEvent: (ev: McpCheckEvent) => void,\n opts?: { signal?: AbortSignal },\n ): Promise<McpServerDTO | null> => {\n const res = await rawFetch(`/mcp/servers/${encodeURIComponent(id)}/check`, {\n method: \"POST\",\n headers: { Accept: \"text/event-stream\" },\n signal: opts?.signal,\n })\n if (!res.body) throw new Error(\"No response body\")\n\n const reader = res.body.getReader()\n const decoder = new TextDecoder()\n let buf = \"\"\n let last: McpServerDTO | null = null\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n buf += decoder.decode(value, { stream: true })\n // SSE frames are separated by \\n\\n.\n let nl = buf.indexOf(\"\\n\\n\")\n while (nl !== -1) {\n const frame = buf.slice(0, nl)\n buf = buf.slice(nl + 2)\n const dataLine = frame.split(\"\\n\").find((l) => l.startsWith(\"data: \"))\n if (dataLine) {\n try {\n const ev = JSON.parse(dataLine.slice(6)) as McpCheckEvent\n onEvent(ev)\n if (ev.type === \"result\") last = ev.server\n else if (ev.type === \"error\" && ev.server) last = ev.server\n } catch { /* malformed frame, skip */ }\n }\n nl = buf.indexOf(\"\\n\\n\")\n }\n }\n } finally {\n try { reader.releaseLock() } catch { /* ignore */ }\n }\n return last\n },\n useCheckStream: () => {\n const qc = useQueryClient()\n const [phase, setPhase] = React.useState<McpCheckPhase | null>(null)\n const [logs, setLogs] = React.useState<string[]>([])\n const [isChecking, setIsChecking] = React.useState(false)\n const [error, setError] = React.useState<string | null>(null)\n const [result, setResult] = React.useState<McpServerDTO | null>(null)\n const abortRef = React.useRef<AbortController | null>(null)\n\n const reset = React.useCallback(() => {\n setPhase(null)\n setLogs([])\n setError(null)\n setResult(null)\n }, [])\n\n const cancel = React.useCallback(() => {\n abortRef.current?.abort()\n abortRef.current = null\n setIsChecking(false)\n }, [])\n\n const run = React.useCallback(\n async (id: string) => {\n reset()\n setIsChecking(true)\n const ctrl = new AbortController()\n abortRef.current = ctrl\n try {\n const final = await mcpServers.checkStream(\n id,\n (ev) => {\n if (ev.type === \"phase\") setPhase(ev.phase)\n else if (ev.type === \"log\") setLogs((prev) => [...prev, ev.line])\n else if (ev.type === \"result\") setResult(ev.server)\n else if (ev.type === \"error\") {\n setError(ev.message)\n if (ev.server) setResult(ev.server)\n }\n },\n { signal: ctrl.signal },\n )\n qc.invalidateQueries({ queryKey: base.keys.all() })\n return final\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n if (!ctrl.signal.aborted) setError(msg)\n return null\n } finally {\n setIsChecking(false)\n abortRef.current = null\n }\n },\n [reset, qc],\n )\n\n React.useEffect(() => () => abortRef.current?.abort(), [])\n\n return { run, cancel, reset, phase, logs, isChecking, error, result }\n },\n}\n","\"use client\";\n\n// src/useInfiniteQuery.ts\nimport { InfiniteQueryObserver } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nfunction useInfiniteQuery(options, queryClient) {\n return useBaseQuery(\n options,\n InfiniteQueryObserver,\n queryClient\n );\n}\nexport {\n useInfiniteQuery\n};\n//# sourceMappingURL=useInfiniteQuery.js.map","\"use client\";\nimport { useInfiniteQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { defineResource } from \"./resource\";\nimport { fetcher } from \"./client\";\nimport type { Paginated } from \"@/lib/schemas/common\";\nimport type { ConversationDTO, MessageDTO } from \"@/lib/schemas/conversation\";\n\nconst base = defineResource<\n ConversationDTO,\n never,\n { title: string },\n { page?: number; page_size?: number; sort?: string; keyword?: string },\n Paginated<ConversationDTO>\n>({\n path: \"/conversations\",\n key: \"conversations\",\n paramsOf: (q) => ({\n page: q.page ?? 1,\n page_size: q.page_size ?? 20,\n sort: q.sort ?? \"-updated_at\",\n keyword: q.keyword,\n }),\n // List + get are read-mostly; users rarely care about millisecond\n // freshness here. 60s lets nav back to the sidebar / chat skip\n // a network round-trip — mutations explicit-invalidate anyway.\n staleTime: 60_000,\n});\n\n/** Cache key for the initial page of messages of a single conversation.\n * Lives under the conversation resource so it gets gc'd if the resource\n * is gc'd, but is isolated from list/infinite queries so we can invalidate\n * list-only without dropping the message cache. */\nexport function messagesCacheKey(conversationId: string, pageSize: number) {\n return [...base.keys.one(conversationId), \"messages-cache\", pageSize] as const;\n}\n\nexport const conversations = {\n ...base,\n\n // ---- shorthand: title-only update ----\n updateTitle: (id: string, title: string) => base.update(id, { title }),\n\n // ---- shared message cache key (used by usePaginatedMessages / sync) ----\n messagesCacheKey,\n\n /** Invalidate only the conversation LIST queries (list/infinite),\n * leaving the per-conversation messages cache intact. */\n useInvalidateList: () => {\n const qc = useQueryClient();\n return () => qc.invalidateQueries({\n queryKey: base.keys.all(),\n predicate: (q) => {\n const k = q.queryKey as readonly unknown[];\n return k.length >= 2 && (k[1] === \"list\" || k[1] === \"infinite\");\n },\n });\n },\n\n // ---- infinite scroll variant of useList ----\n useInfinite: (params?: { pageSize?: number; scope?: string; keyword?: string }) => {\n const pageSize = params?.pageSize ?? 20;\n const keyword = params?.keyword?.trim() || undefined;\n return useInfiniteQuery({\n queryKey: [\n ...base.keys.all(),\n \"infinite\",\n params?.scope ?? \"default\",\n pageSize,\n keyword ?? \"\",\n ] as const,\n initialPageParam: 1,\n queryFn: ({ pageParam = 1 }) =>\n base.list({ page: pageParam as number, page_size: pageSize, keyword }),\n getNextPageParam: (lastPage) => {\n if (!lastPage) return undefined;\n const hasMore = lastPage.page * lastPage.page_size < lastPage.total;\n return hasMore ? lastPage.page + 1 : undefined;\n },\n });\n },\n\n // ---- nested: messages under a conversation ----\n listMessages: (id: string, params?: { page?: number; page_size?: number; sort?: string }) =>\n fetcher<Paginated<MessageDTO>>(\n `/conversations/${encodeURIComponent(id)}/messages?` +\n new URLSearchParams({\n page: String(params?.page ?? 1),\n page_size: String(params?.page_size ?? 50),\n sort: params?.sort ?? \"-created_at\",\n }).toString(),\n ),\n};\n\n// Messages are a sibling resource only used for rating today.\nconst messagesKey = [\"messages\"] as const;\nexport const messages = {\n keys: { all: () => messagesKey },\n rate: (messageId: string, rating: \"up\" | \"down\" | \"none\", feedback?: string) =>\n fetcher<null>(`/messages/${encodeURIComponent(messageId)}/rate`, {\n method: \"POST\",\n body: JSON.stringify({ rating, feedback }),\n }),\n};\n","// src/infiniteQueryObserver.ts\nimport { QueryObserver } from \"./queryObserver.js\";\nimport { hasNextPage, hasPreviousPage } from \"./infiniteQueryBehavior.js\";\nvar InfiniteQueryObserver = class extends QueryObserver {\n constructor(client, options) {\n super(client, options);\n }\n bindMethods() {\n super.bindMethods();\n this.fetchNextPage = this.fetchNextPage.bind(this);\n this.fetchPreviousPage = this.fetchPreviousPage.bind(this);\n }\n setOptions(options) {\n options._type = \"infinite\";\n super.setOptions(options);\n }\n getOptimisticResult(options) {\n options._type = \"infinite\";\n return super.getOptimisticResult(options);\n }\n fetchNextPage(options) {\n return this.fetch({\n ...options,\n meta: {\n fetchMore: { direction: \"forward\" }\n }\n });\n }\n fetchPreviousPage(options) {\n return this.fetch({\n ...options,\n meta: {\n fetchMore: { direction: \"backward\" }\n }\n });\n }\n createResult(query, options) {\n const { state } = query;\n const parentResult = super.createResult(query, options);\n const { isFetching, isRefetching, isError, isRefetchError } = parentResult;\n const fetchDirection = state.fetchMeta?.fetchMore?.direction;\n const isFetchNextPageError = isError && fetchDirection === \"forward\";\n const isFetchingNextPage = isFetching && fetchDirection === \"forward\";\n const isFetchPreviousPageError = isError && fetchDirection === \"backward\";\n const isFetchingPreviousPage = isFetching && fetchDirection === \"backward\";\n const result = {\n ...parentResult,\n fetchNextPage: this.fetchNextPage,\n fetchPreviousPage: this.fetchPreviousPage,\n hasNextPage: hasNextPage(options, state.data),\n hasPreviousPage: hasPreviousPage(options, state.data),\n isFetchNextPageError,\n isFetchingNextPage,\n isFetchPreviousPageError,\n isFetchingPreviousPage,\n isRefetchError: isRefetchError && !isFetchNextPageError && !isFetchPreviousPageError,\n isRefetching: isRefetching && !isFetchingNextPage && !isFetchingPreviousPage\n };\n return result;\n }\n};\nexport {\n InfiniteQueryObserver\n};\n//# sourceMappingURL=infiniteQueryObserver.js.map","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n","import { defineResource } from \"./resource\";\nimport type { Paginated } from \"@/lib/schemas/common\";\nimport type { LogDetailDTO, LogFilterParams, LogListItemDTO } from \"@/lib/schemas/log\";\n\n/** Read-only resource: only list + get are used. */\nexport const logs = defineResource<\n LogDetailDTO,\n never,\n never,\n LogFilterParams,\n Paginated<LogListItemDTO>\n>({\n path: \"/logs/generations\",\n key: \"logs\",\n // Logs change as new generations happen, but for the same filter\n // a 30s cache is fine — the user can hit the explicit Refresh\n // button to force a refetch. Stops re-fetching on every nav back\n // to the page within a session.\n staleTime: 30_000,\n});\n","import { defineResource } from \"./resource\";\nimport type { Paginated } from \"@/lib/schemas/common\";\nimport type { UserCreateInput, UserDTO, UserFilterParams, UserUpdateInput } from \"@/lib/schemas/user\";\n\nexport const users = defineResource<\n UserDTO,\n UserCreateInput,\n UserUpdateInput,\n UserFilterParams,\n Paginated<UserDTO>\n>({\n path: \"/users\",\n key: \"users\",\n staleTime: 60_000,\n});\n","\"use client\";\nimport { useMutation, useQuery, useQueryClient, type UseMutationOptions } from \"@tanstack/react-query\";\nimport { defineResource } from \"./resource\";\nimport { fetcher } from \"./client\";\nimport type { ModelDTO } from \"@/lib/schemas/model\";\nimport type { ProviderCreateInput, ProviderDTO, ProviderUpdateInput } from \"@/lib/schemas/provider\";\n\nconst base = defineResource<\n ProviderDTO,\n ProviderCreateInput,\n ProviderUpdateInput,\n Record<string, unknown>,\n ProviderDTO[]\n>({\n path: \"/providers\",\n key: \"providers\",\n listShape: \"array\",\n staleTime: 60_000,\n invalidates: [\"models\"],\n});\n\nexport interface ProviderCheckResult {\n ok: boolean;\n models?: number;\n error?: string;\n latency_ms?: number;\n}\n\nexport interface ProviderProbeResult {\n ok: boolean;\n error?: string;\n latency_ms: number;\n}\n\nexport const providers = {\n ...base,\n\n // ---- custom endpoints ----\n listModels: (id: string) =>\n fetcher<ModelDTO[]>(`/providers/${encodeURIComponent(id)}/models`),\n reload: () =>\n fetcher<null>(\"/providers/reload\", { method: \"POST\" }),\n check: (id: string) =>\n fetcher<ProviderCheckResult>(\n `/providers/${encodeURIComponent(id)}/check`,\n { method: \"POST\" },\n ),\n /** Probe an arbitrary health-check URL without touching any saved\n * provider — used by the form's Test button so it validates the\n * URL currently in the input, not the (possibly stale) saved one. */\n probe: (healthCheckUrl: string) =>\n fetcher<ProviderProbeResult>(\"/providers/probe\", {\n method: \"POST\",\n body: JSON.stringify({ health_check_url: healthCheckUrl }),\n headers: { \"Content-Type\": \"application/json\" },\n }),\n\n // ---- custom hooks ----\n useModels: (id: string | undefined | null) =>\n useQuery({\n queryKey: [...base.keys.one(id ?? \"\"), \"models\"] as const,\n queryFn: () => providers.listModels(id!),\n enabled: !!id,\n }),\n\n /** POST /providers/reload — clears the discovery cache. Cascades same\n * invalidation as a CRUD mutation (providers + models). */\n useReload: (opts?: Omit<UseMutationOptions<null, Error, void>, \"mutationFn\">) => {\n const invalidate = base.useInvalidate();\n return useMutation<null, Error, void>({\n mutationFn: providers.reload,\n ...opts,\n onSuccess: (data, vars, onMutateResult, context) => {\n invalidate();\n opts?.onSuccess?.(data, vars, onMutateResult, context);\n },\n });\n },\n\n /** POST /providers/:id/check — runs the health probe. On success the\n * server has updated `last_health_*`, so we invalidate the providers\n * cache to surface the new status pill. */\n useCheck: (\n id: string | undefined | null,\n opts?: Omit<UseMutationOptions<ProviderCheckResult, Error, void>, \"mutationFn\">,\n ) => {\n const invalidate = base.useInvalidate();\n return useMutation<ProviderCheckResult, Error, void>({\n mutationFn: () => providers.check(id!),\n ...opts,\n onSuccess: (data, vars, onMutateResult, context) => {\n invalidate();\n opts?.onSuccess?.(data, vars, onMutateResult, context);\n },\n });\n },\n};\n","// Per-domain api modules. Each `*Resource` object exposes both raw fetch\n// functions and TanStack Query hooks generated from a single descriptor —\n// see lib/api/resource.ts. Custom (non-CRUD) endpoints are colocated in\n// the same module.\n\nexport { auth } from \"./auth\";\nexport { users } from \"./users\";\nexport { providers } from \"./providers\";\nexport { models } from \"./models\";\nexport { apiKeys } from \"./apikeys\";\nexport { logs } from \"./logs\";\nexport { conversations, messages } from \"./conversations\";\nexport { gateway } from \"./gateway\";\nexport { capabilities } from \"./capabilities\";\nexport { preferences } from \"./preferences\";\nexport { adapters } from \"./adapters\";\nexport { variants } from \"./variants\";\nexport { tools } from \"./tools\";\nexport { mcpServers } from \"./mcp\";\nexport { stats } from \"./stats\";\n\nexport { ApiError, fetcher, rawFetch, withQuery, API_BASE } from \"./client\";\nexport { defineResource } from \"./resource\";\n","import { defineResource } from \"./resource\";\nimport type { CapabilityDTO } from \"@/lib/schemas/capability\";\n\n/** Read-only catalog. */\nexport const capabilities = defineResource<\n CapabilityDTO,\n never,\n never,\n Record<string, unknown>,\n CapabilityDTO[]\n>({\n path: \"/capabilities\",\n key: \"capabilities\",\n listShape: \"array\",\n staleTime: 60_000,\n});\n","import { defineResource } from \"./resource\";\nimport type { AdapterDescriptor } from \"@/lib/schemas/adapter\";\n\n/** Read-only catalog of registered ProviderAdapter ids. */\nexport const adapters = defineResource<\n AdapterDescriptor,\n never,\n never,\n Record<string, unknown>,\n AdapterDescriptor[]\n>({\n path: \"/adapters\",\n key: \"adapters\",\n listShape: \"array\",\n staleTime: 60_000,\n});\n","import { defineResource } from \"./resource\";\nimport type { VariantDescriptor } from \"@/lib/schemas/variant\";\n\n/** Read-only catalog of registered upstream API variants. */\nexport const variants = defineResource<\n VariantDescriptor,\n never,\n never,\n Record<string, unknown>,\n VariantDescriptor[]\n>({\n path: \"/variants\",\n key: \"variants\",\n listShape: \"array\",\n staleTime: 60_000,\n});\n","import { defineResource } from \"./resource\";\nimport type { ToolCreateInput, ToolDTO, ToolUpdateInput } from \"@/lib/schemas/tool\";\n\nexport const tools = defineResource<\n ToolDTO,\n ToolCreateInput,\n ToolUpdateInput,\n Record<string, unknown>,\n ToolDTO[]\n>({\n path: \"/tools\",\n key: \"tools\",\n listShape: \"array\",\n staleTime: 60_000,\n});\n"],"names":["SWITCH_NAME","createSwitchContext","createSwitchScope","SwitchProviderImpl","useSwitchContext","SwitchProvider","props","__scopeSwitch","checked","checkedProp","children","defaultChecked","disabled","form","name","onCheckedChange","required","value","internal_do_not_use_render","setChecked","prop","defaultProp","onChange","caller","control","setControl","bubbleInput","setBubbleInput","hasConsumerStoppedPropagationRef","isFormControl","closest","context","scope","isFunction","TRIGGER_NAME","SwitchTrigger","onClick","switchProps","forwardedRef","composedRefs","button","type","role","getState","ref","event","prevChecked","current","isPropagationStopped","stopPropagation","displayName","Switch","SwitchBubbleInput","THUMB_NAME","SwitchThumb","thumbProps","span","BUBBLE_INPUT_NAME","controlSize","input","inputProto","window","HTMLInputElement","prototype","descriptor","Object","getOwnPropertyDescriptor","set","bubbles","Event","call","dispatchEvent","defaultCheckedRef","tabIndex","style","position","pointerEvents","opacity","margin","transform","Textarea","className","Dialog","DialogTrigger","DialogPortal","DialogClose","DialogOverlay","DialogContent","showCloseButton","DialogHeader","DialogFooter","DialogTitle","DialogDescription","base","path","key","listShape","staleTime","mcpServers","listPresets","usePresets","queryKey","queryFn","check","id","encodeURIComponent","method","useCheck","opts","qc","mutationFn","onSuccess","server","invalidateQueries","keys","all","onError","err","checkStream","onEvent","res","headers","Accept","signal","body","Error","reader","getReader","decoder","TextDecoder","buf","last","done","read","decode","stream","nl","indexOf","frame","slice","dataLine","split","find","l","startsWith","ev","JSON","parse","releaseLock","useCheckStream","phase","setPhase","logs","setLogs","isChecking","setIsChecking","error","setError","result","setResult","abortRef","reset","cancel","abort","run","ctrl","AbortController","final","prev","line","message","msg","String","aborted","InfiniteQueryObserver","client","options","bindMethods","fetchNextPage","bind","fetchPreviousPage","setOptions","_type","getOptimisticResult","fetch","meta","fetchMore","direction","createResult","query","state","parentResult","isFetching","isRefetching","isError","isRefetchError","fetchDirection","fetchMeta","isFetchNextPageError","isFetchingNextPage","isFetchPreviousPageError","isFetchingPreviousPage","hasNextPage","data","hasPreviousPage","badgeVariants","variants","variant","default","secondary","destructive","outline","defaultVariants","Badge","asChild","Comp","users","invalidates","providers","listModels","reload","probe","healthCheckUrl","stringify","health_check_url","useModels","one","enabled","useReload","invalidate","useInvalidate","vars","onMutateResult","capabilities"],"mappings":"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","ignoreList":[0,5,7]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[460508,a=>{"use strict";var b=a.i(187924),c=a.i(572131),d=a.i(238246),e=a.i(50944),f=a.i(957064),g=a.i(915618),h=a.i(808406),i=a.i(823292),j=a.i(339220),k=a.i(519817),l=a.i(340695),m=a.i(59848),n=a.i(577768),o=a.i(621958),p=a.i(15373),q=a.i(767511),q=q,r=a.i(596221),s=a.i(699464),t=a.i(328790),u=a.i(781560);let v=(0,a.i(883706).default)("circle-x",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);a.i(506122);var w=a.i(158880),x=a.i(649865),y=a.i(280281),z=a.i(497895);function A(a){let b=a.config??{};if("stdio"===a.transport){let a="string"==typeof b.command?b.command:"",c=Array.isArray(b.args)?b.args.join(" "):"";return`${a} ${c}`.trim()}return"string"==typeof b.url?b.url:""}function B({s:a}){if("ok"===a.last_check_status){let c=a.tools_cache?.length??0;return(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 text-[11px] text-emerald-600 dark:text-emerald-400",children:[(0,b.jsx)(q.default,{className:"h-3.5 w-3.5"}),c," tool",1===c?"":"s"]})}return"error"===a.last_check_status?(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 text-[11px] text-destructive",title:a.last_check_error??void 0,children:[(0,b.jsx)(v,{className:"h-3.5 w-3.5"}),"Failed"]}):(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 text-[11px] text-muted-foreground",children:[(0,b.jsx)(r.Loader2,{className:"h-3.5 w-3.5 animate-spin"}),"Checking…"]})}function C({servers:a,onSelect:c,onEdit:d,onDelete:e,selectedId:f}){let g=!!d||!!e,h=j.mcpServers.useUpdate({onError:a=>i.toast.error(a.message||"Update failed")}),k=j.mcpServers.useCheck({onSuccess:a=>{if("ok"===a.last_check_status)i.toast.success(`${a.name}: ${a.tools_cache?.length??0} tools`);else{let b=(a.last_check_error??"check failed").split("\n",1)[0];i.toast.error(`${a.name}: ${b}`)}},onError:a=>i.toast.error(a.message||"Check failed")});return(0,b.jsxs)(w.DataTableShell,{children:[(0,b.jsx)(w.DataTableHeader,{children:(0,b.jsxs)(w.DataTableHeaderRow,{children:[(0,b.jsx)(w.DataTableHead,{children:"Name"}),(0,b.jsx)(w.DataTableHead,{children:"Transport"}),(0,b.jsx)(w.DataTableHead,{children:"Endpoint / Command"}),(0,b.jsx)(w.DataTableHead,{children:"Health"}),(0,b.jsx)(w.DataTableHead,{className:"w-[80px] text-center",children:"Enabled"}),g&&(0,b.jsx)(w.DataTableHead,{className:"w-[124px] text-right",children:"Actions"})]})}),(0,b.jsx)(x.DataTableBody,{children:0===a.length?(0,b.jsx)(w.DataTableEmpty,{colSpan:g?6:5}):a.map(a=>(0,b.jsxs)(w.DataTableRow,{className:(0,z.cn)("transition-colors",c&&"cursor-pointer hover:bg-muted/40",f===a.id&&"bg-muted/60",!a.enabled&&"opacity-60"),onClick:c?()=>c(a):void 0,children:[(0,b.jsx)(w.DataTableCell,{className:"font-mono text-xs max-w-[200px] truncate",title:a.name,children:a.name}),(0,b.jsx)(w.DataTableCell,{children:(0,b.jsx)("span",{className:"inline-flex items-center rounded border border-border bg-muted/40 px-1.5 py-0.5 font-mono text-[10px] uppercase tracking-wider text-muted-foreground",children:a.transport})}),(0,b.jsx)(w.DataTableCell,{className:"font-mono text-xs text-muted-foreground max-w-[360px] truncate",title:A(a),children:A(a)||(0,b.jsx)("span",{className:"italic",children:"—"})}),(0,b.jsx)(w.DataTableCell,{children:(0,b.jsx)(B,{s:a})}),(0,b.jsx)(w.DataTableCell,{className:"text-center",children:(0,b.jsx)(y.Switch,{checked:a.enabled,disabled:!d||h.isPending,onCheckedChange:b=>{h.mutate({id:a.id,data:{enabled:b}})},onClick:a=>a.stopPropagation(),title:a.enabled?"Disable":"Enable"})}),g&&(0,b.jsx)(w.DataTableCell,{className:"text-right",children:(0,b.jsxs)("div",{className:"flex items-center justify-end gap-0.5",children:[d&&(0,b.jsx)(l.Button,{variant:"ghost",size:"icon",className:"h-7 w-7",onClick:b=>{b.stopPropagation(),k.mutate(a.id)},disabled:k.isPending&&k.variables===a.id,title:"Re-check connection",children:(0,b.jsx)(t.RefreshCcw,{className:(0,z.cn)("h-3.5 w-3.5",k.isPending&&k.variables===a.id&&"animate-spin")})}),d&&(0,b.jsx)(l.Button,{variant:"ghost",size:"icon",className:"h-7 w-7",onClick:b=>{b.stopPropagation(),d(a)},title:"Edit",children:(0,b.jsx)(s.Pencil,{className:"h-3.5 w-3.5"})}),e&&(0,b.jsx)(l.Button,{variant:"ghost",size:"icon",className:"h-7 w-7 text-muted-foreground hover:text-destructive hover:bg-destructive/10",onClick:b=>{b.stopPropagation(),e(a)},title:"Delete",children:(0,b.jsx)(u.Trash2,{className:"h-3.5 w-3.5"})})]})})]},a.id))})]})}var D=a.i(879808),E=a.i(254161),F=a.i(353071),q=q,G=a.i(452495);function H(a){return/token|secret|key|password|auth/i.test(a)}function I({status:a}){return"ok"===a?(0,b.jsx)(q.default,{className:"h-4 w-4 text-emerald-500"}):"error"===a?(0,b.jsx)(v,{className:"h-4 w-4 text-destructive"}):(0,b.jsx)(r.Loader2,{className:"h-4 w-4 text-muted-foreground animate-spin"})}function J({children:a}){return(0,b.jsx)("div",{className:"rounded-md border border-dashed p-3 text-xs text-muted-foreground italic",children:a})}function K({children:a}){return(0,b.jsx)("span",{className:"not-italic inline-flex items-center rounded border border-border bg-muted/40 px-1 font-mono text-[10px] uppercase tracking-wider text-muted-foreground mx-0.5",children:a})}function L({server:a,onCheck:c,isChecking:d,isAdmin:e}){let f=a.last_check_status,g=a.last_check_at?(0,z.formatToLocal)(a.last_check_at):"never";return(0,b.jsxs)("section",{className:"space-y-2",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("h3",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:"Health"}),e&&(0,b.jsxs)(l.Button,{size:"sm",variant:"outline",onClick:c,disabled:d,className:"h-7 text-xs",children:[d?(0,b.jsx)(r.Loader2,{className:"h-3 w-3 mr-1.5 animate-spin"}):(0,b.jsx)(t.RefreshCcw,{className:"h-3 w-3 mr-1.5"}),"Re-check"]})]}),(0,b.jsxs)("div",{className:"rounded-md border p-3 text-sm space-y-1.5",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(I,{status:f}),(0,b.jsxs)("span",{className:"font-medium",children:["ok"===f&&"Connected","error"===f&&"Failed",null===f&&"Never checked"]})]}),(0,b.jsxs)("div",{className:"text-[11px] text-muted-foreground",children:["Last check: ",g]}),"error"===f&&a.last_check_error&&(0,b.jsx)("pre",{className:"mt-1.5 font-mono text-[11px] leading-snug whitespace-pre-wrap break-words bg-destructive/10 text-destructive rounded p-2 max-h-72 overflow-auto",children:a.last_check_error})]})]})}function M({info:a}){let c=!!(a.name||a.version),d=!!a.instructions?.trim(),e=a.capabilities?Object.keys(a.capabilities):[];return c||d||0!==e.length?(0,b.jsxs)("section",{className:"space-y-2",children:[(0,b.jsx)("h3",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:"Server"}),(0,b.jsxs)("div",{className:"rounded-md border p-3 space-y-2 text-sm",children:[c&&(0,b.jsxs)("div",{className:"font-mono text-xs",children:[a.name??"<unnamed>",a.version&&(0,b.jsxs)("span",{className:"text-muted-foreground",children:[" @ ",a.version]})]}),e.length>0&&(0,b.jsx)("div",{className:"flex flex-wrap gap-1",children:e.map(a=>(0,b.jsx)("span",{className:"inline-flex items-center rounded border border-border bg-muted/40 px-1.5 py-0.5 font-mono text-[10px] uppercase tracking-wider text-muted-foreground",title:`Server advertises the "${a}" capability`,children:a},a))}),d&&(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-[10px] uppercase tracking-wide text-muted-foreground mb-1",children:"Instructions"}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground leading-relaxed whitespace-pre-wrap",children:a.instructions})]})]})]}):null}function N({server:a,isAdmin:c}){let d=a.config??{};return(0,b.jsxs)("section",{className:"space-y-2",children:[(0,b.jsx)("h3",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:"stdio"===a.transport?"Command":"Endpoint"}),(0,b.jsx)("div",{className:"rounded-md border p-3 space-y-2",children:"stdio"===a.transport?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"font-mono text-xs break-all",children:[(0,b.jsx)("span",{className:"text-muted-foreground",children:"$ "}),String(d.command??"")," ",Array.isArray(d.args)?d.args.join(" "):""]}),d.env&&c&&Object.keys(d.env).length>0&&(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-[10px] uppercase tracking-wide text-muted-foreground mb-1",children:"Env"}),(0,b.jsx)("ul",{className:"font-mono text-[11px] space-y-0.5",children:Object.entries(d.env).map(([a,c])=>(0,b.jsxs)("li",{className:"truncate",children:[(0,b.jsx)("span",{className:"text-muted-foreground",children:a}),"=",H(a)?"•••":c]},a))})]})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:"font-mono text-xs break-all",children:String(d.url??"")}),d.headers&&c&&Object.keys(d.headers).length>0&&(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-[10px] uppercase tracking-wide text-muted-foreground mb-1",children:"Headers"}),(0,b.jsx)("ul",{className:"font-mono text-[11px] space-y-0.5",children:Object.entries(d.headers).map(([a,c])=>(0,b.jsxs)("li",{className:"truncate",children:[(0,b.jsxs)("span",{className:"text-muted-foreground",children:[a,":"]})," ",H(a)?"•••":c]},a))})]})]})})]})}function O({tools:a,status:c}){return(0,b.jsxs)("section",{className:"space-y-2",children:[(0,b.jsx)("div",{className:"flex items-center justify-between",children:(0,b.jsxs)("h3",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:["Tools ",a.length>0&&(0,b.jsxs)("span",{className:"ml-1 text-foreground",children:["(",a.length,")"]})]})}),0===a.length?(0,b.jsx)("div",{className:"rounded-md border p-3 text-xs text-muted-foreground italic",children:"error"===c?"No tools cached — last check failed.":"No tools cached yet. Run a check to populate."}):(0,b.jsx)("ul",{className:"rounded-md border divide-y",children:a.map(a=>(0,b.jsx)(P,{tool:a},a.name))})]})}function P({tool:a}){let[d,e]=c.useState(!1),f=a.parameters,g=f?.properties?Object.entries(f.properties):[],h=new Set(f?.required??[]);return(0,b.jsxs)("li",{className:(0,z.cn)("p-3 text-xs space-y-1.5",d&&"bg-muted/30"),children:[(0,b.jsxs)("button",{type:"button",onClick:()=>e(a=>!a),className:"flex w-full items-center gap-2 text-left",children:[(0,b.jsx)(G.ExternalLink,{className:"h-3 w-3 text-muted-foreground rotate-90"}),(0,b.jsx)("span",{className:"font-mono text-foreground",children:a.name}),g.length>0&&(0,b.jsxs)("span",{className:"text-[10px] text-muted-foreground",children:[g.length," param",1===g.length?"":"s"]})]}),a.description&&(0,b.jsx)("p",{className:"text-muted-foreground pl-5 leading-snug",children:a.description}),d&&(0,b.jsx)("div",{className:"pl-5 pt-1",children:0===g.length?(0,b.jsx)("p",{className:"text-muted-foreground italic",children:"(no parameters)"}):(0,b.jsx)("ul",{className:"space-y-1",children:g.map(([a,c])=>(0,b.jsxs)("li",{className:"flex gap-2",children:[(0,b.jsx)("span",{className:"font-mono text-foreground",children:a}),c?.type&&(0,b.jsxs)("span",{className:"font-mono text-muted-foreground text-[10px]",children:[": ",c.type]}),h.has(a)&&(0,b.jsx)(E.Badge,{variant:"outline",className:"h-3.5 px-1 text-[9px]",children:"required"}),c?.description&&(0,b.jsxs)("span",{className:"text-muted-foreground text-[11px] truncate",children:["— ",c.description]})]},a))})})]})}function Q({snapshot:a,capabilityAdvertised:c,status:d}){let e=a?a.resources.length+a.templates.length:0;return(0,b.jsxs)("section",{className:"space-y-2",children:[(0,b.jsxs)("h3",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:["Resources ",e>0&&(0,b.jsxs)("span",{className:"ml-1 text-foreground",children:["(",e,")"]})]}),c?null===a?(0,b.jsx)(J,{children:"error"===d?"Last check failed — run another to populate.":"Server advertises resources but the list call did not complete."}):0===e?(0,b.jsx)(J,{children:"Server advertises resources but exposes none."}):(0,b.jsxs)("ul",{className:"rounded-md border divide-y",children:[a.resources.map(a=>(0,b.jsxs)("li",{className:"p-3 text-xs space-y-0.5",children:[(0,b.jsx)("div",{className:"font-mono text-foreground break-all",children:a.uri}),(0,b.jsxs)("div",{className:"flex items-baseline gap-2",children:[a.name&&(0,b.jsx)("span",{className:"text-foreground",children:a.name}),a.mimeType&&(0,b.jsx)("span",{className:"font-mono text-[10px] text-muted-foreground",children:a.mimeType})]}),a.description&&(0,b.jsx)("p",{className:"text-muted-foreground leading-snug",children:a.description})]},`r-${a.uri}`)),a.templates.map(a=>(0,b.jsxs)("li",{className:"p-3 text-xs space-y-0.5 bg-muted/10",children:[(0,b.jsxs)("div",{className:"flex items-baseline gap-2",children:[(0,b.jsx)("span",{className:"inline-flex items-center rounded border border-border bg-muted/40 px-1 font-mono text-[9px] uppercase tracking-wider text-muted-foreground",children:"template"}),(0,b.jsx)("span",{className:"font-mono text-foreground break-all",children:a.uriTemplate})]}),(a.name||a.mimeType)&&(0,b.jsxs)("div",{className:"flex items-baseline gap-2 pl-[60px]",children:[a.name&&(0,b.jsx)("span",{className:"text-foreground",children:a.name}),a.mimeType&&(0,b.jsx)("span",{className:"font-mono text-[10px] text-muted-foreground",children:a.mimeType})]}),a.description&&(0,b.jsx)("p",{className:"text-muted-foreground leading-snug pl-[60px]",children:a.description})]},`t-${a.uriTemplate}`))]}):(0,b.jsxs)(J,{children:["This server does not advertise the ",(0,b.jsx)(K,{children:"resources"})," capability."]})]})}function R({prompts:a,capabilityAdvertised:c,status:d}){return(0,b.jsxs)("section",{className:"space-y-2",children:[(0,b.jsxs)("h3",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:["Prompts ",a&&a.length>0&&(0,b.jsxs)("span",{className:"ml-1 text-foreground",children:["(",a.length,")"]})]}),c?null===a?(0,b.jsx)(J,{children:"error"===d?"Last check failed — run another to populate.":"Server advertises prompts but the list call did not complete."}):0===a.length?(0,b.jsx)(J,{children:"Server advertises prompts but exposes none."}):(0,b.jsx)("ul",{className:"rounded-md border divide-y",children:a.map(a=>(0,b.jsx)(S,{prompt:a},a.name))}):(0,b.jsxs)(J,{children:["This server does not advertise the ",(0,b.jsx)(K,{children:"prompts"})," capability."]})]})}function S({prompt:a}){let[d,e]=c.useState(!1),f=a.arguments??[];return(0,b.jsxs)("li",{className:(0,z.cn)("p-3 text-xs space-y-1.5",d&&"bg-muted/30"),children:[(0,b.jsxs)("button",{type:"button",onClick:()=>e(a=>!a),className:"flex w-full items-center gap-2 text-left",children:[(0,b.jsx)(G.ExternalLink,{className:"h-3 w-3 text-muted-foreground rotate-90"}),(0,b.jsx)("span",{className:"font-mono text-foreground",children:a.name}),f.length>0&&(0,b.jsxs)("span",{className:"text-[10px] text-muted-foreground",children:[f.length," arg",1===f.length?"":"s"]})]}),a.description&&(0,b.jsx)("p",{className:"text-muted-foreground pl-5 leading-snug",children:a.description}),d&&f.length>0&&(0,b.jsx)("ul",{className:"pl-5 pt-1 space-y-1",children:f.map(a=>(0,b.jsxs)("li",{className:"flex gap-2",children:[(0,b.jsx)("span",{className:"font-mono text-foreground",children:a.name}),a.required&&(0,b.jsx)(E.Badge,{variant:"outline",className:"h-3.5 px-1 text-[9px]",children:"required"}),a.description&&(0,b.jsxs)("span",{className:"text-muted-foreground text-[11px] truncate",children:["— ",a.description]})]},a.name))})]})}function T({server:a,open:d,onOpenChange:e,isAdmin:f}){let g=j.mcpServers.useCheck({onSuccess:a=>{if("ok"===a.last_check_status)i.toast.success(`Check passed — ${a.tools_cache?.length??0} tools`);else{let b=(a.last_check_error??"unknown error").split("\n",1)[0];i.toast.error(`Check failed: ${b}`)}},onError:a=>i.toast.error(a.message||"Check failed")}),h=c.useCallback(()=>{a&&g.mutate(a.id)},[a,g]),k=c.useRef(null);return(c.useEffect(()=>{d&&a&&!a.server_info&&"ok"===a.last_check_status&&k.current!==a.id&&(k.current=a.id,g.mutate(a.id))},[d,a,g]),a)?(0,b.jsx)(F.Sheet,{open:d,onOpenChange:e,children:(0,b.jsxs)(F.SheetContent,{side:"right",className:"w-full sm:max-w-[640px] overflow-y-auto scrollbar-thin p-0",children:[(0,b.jsxs)(F.SheetHeader,{className:"px-6 py-4 border-b",children:[(0,b.jsxs)(F.SheetTitle,{className:"flex items-center gap-2 text-base",children:[(0,b.jsx)(D.Wrench,{className:"h-4 w-4 text-muted-foreground"}),(0,b.jsx)("span",{className:"font-mono",children:a.name}),(0,b.jsx)(E.Badge,{variant:"outline",className:"text-[10px] uppercase ml-2",children:a.transport}),!a.enabled&&(0,b.jsx)(E.Badge,{variant:"secondary",className:"text-[10px] uppercase",children:"disabled"})]}),(0,b.jsx)(F.SheetDescription,{className:"text-xs text-muted-foreground pt-1",children:a.description||"MCP server connection details, health, and discovered tools."})]}),(0,b.jsxs)("div",{className:"px-6 py-4 space-y-5",children:[(0,b.jsx)(L,{server:a,onCheck:h,isChecking:g.isPending,isAdmin:f}),a.server_info&&(0,b.jsx)(M,{info:a.server_info}),(0,b.jsx)(N,{server:a,isAdmin:f}),(0,b.jsx)(O,{tools:a.tools_cache??[],status:a.last_check_status}),(0,b.jsx)(Q,{snapshot:a.resources_cache,capabilityAdvertised:!!a.server_info?.capabilities?.resources,status:a.last_check_status}),(0,b.jsx)(R,{prompts:a.prompts_cache,capabilityAdvertised:!!a.server_info?.capabilities?.prompts,status:a.last_check_status})]})]})}):null}a.s(["default",0,function(){let{user:a}=(0,k.useAuth)(),q=a?.role==="admin",[r,s]=c.useState("mcp"),{data:t,isLoading:u}=j.mcpServers.useList(void 0,{enabled:"mcp"===r,refetchInterval:a=>{let b=a.state.data;return!!b&&!!b.some(a=>null===a.last_check_status)&&2e3}}),[v,w]=c.useState({open:!1,mode:"create"}),[x,y]=c.useState(null),z=(0,e.useSearchParams)(),[A,B]=c.useState(()=>z?.get("selected")??null),D=c.useMemo(()=>(t??[]).find(a=>a.id===A)??null,[t,A]),E=j.mcpServers.useDelete({onSuccess:()=>{i.toast.success("Server deleted"),y(null),A===x?.id&&B(null)},onError:a=>i.toast.error(a.message||"Delete failed")});return(0,b.jsxs)("div",{className:"h-full flex flex-col p-4 overflow-y-hidden",children:[(0,b.jsxs)(o.Tabs,{defaultValue:"mcp",className:"flex-1 flex flex-col min-h-0 w-full gap-4",onValueChange:s,children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 px-1 flex-wrap md:flex-nowrap",children:[(0,b.jsxs)(o.TabsList,{className:"h-8 p-0.5",children:[(0,b.jsx)(o.TabsTrigger,{value:"mcp",className:"h-7 px-3 text-xs",children:"MCP"}),(0,b.jsx)(o.TabsTrigger,{value:"skills",className:"h-7 px-3 text-xs",children:"Skills"})]}),"mcp"===r&&(0,b.jsxs)("div",{className:"flex items-center gap-1.5 ml-auto",children:[(0,b.jsx)(d.default,{href:"/mcp/presets",children:(0,b.jsxs)(l.Button,{size:"sm",variant:"secondary",className:"h-8 text-xs gap-1.5",children:[(0,b.jsx)(f.LayoutGrid,{className:"h-3.5 w-3.5"}),"Catalogue"]})}),q&&(0,b.jsx)(l.Button,{size:"icon",variant:"secondary",className:"h-8 w-8 shrink-0",onClick:()=>w({open:!0,mode:"create"}),title:"Add MCP server",children:(0,b.jsx)(g.Plus,{className:"h-3.5 w-3.5"})})]})]}),(0,b.jsx)(o.TabsContent,{value:"mcp",className:"flex-1 min-h-0 flex flex-col",children:(0,b.jsxs)("div",{className:"flex-1 border rounded-xl bg-card shadow-sm flex flex-col overflow-hidden relative",children:[u&&(0,b.jsx)("div",{className:"absolute inset-0 flex items-center justify-center bg-background/50 z-10",children:(0,b.jsx)(n.LoadingState,{label:"Loading MCP servers…"})}),(0,b.jsx)("div",{className:"flex-1 overflow-auto",children:(0,b.jsx)(C,{servers:t??[],onSelect:a=>B(a.id),onEdit:q?a=>w({open:!0,mode:"edit",server:a}):void 0,onDelete:q?y:void 0,selectedId:A})})]})}),(0,b.jsxs)(o.TabsContent,{value:"skills",className:"flex-1 min-h-0 flex flex-col items-center justify-center text-center",children:[(0,b.jsx)("div",{className:"flex h-12 w-12 items-center justify-center rounded-2xl bg-gradient-to-br from-amber-500/20 to-orange-500/20",children:(0,b.jsx)(h.Sparkles,{className:"h-6 w-6 text-amber-500"})}),(0,b.jsx)("h2",{className:"mt-3 text-base font-semibold tracking-tight",children:"Skills"}),(0,b.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:"Coming soon."})]})]}),(0,b.jsx)(p.McpFormDialog,{open:v.open,onOpenChange:a=>w(b=>({...b,open:a})),mode:v.mode,server:v.server}),(0,b.jsx)(T,{server:D,open:!!D,onOpenChange:a=>!a&&B(null),isAdmin:q}),(0,b.jsx)(m.ConfirmDialog,{open:!!x,onOpenChange:a=>!a&&y(null),title:"Delete MCP server?",description:(0,b.jsxs)(b.Fragment,{children:["This will delete ",(0,b.jsx)("b",{children:x?.name}),"."]}),confirmLabel:"Delete",destructive:!0,isLoading:E.isPending,onConfirm:()=>x&&E.mutate(x.id)})]})}],460508)}];
|
|
1
|
+
module.exports=[460508,a=>{"use strict";var b=a.i(187924),c=a.i(572131),d=a.i(238246),e=a.i(50944),f=a.i(957064),g=a.i(915618),h=a.i(808406),i=a.i(823292),j=a.i(339220),k=a.i(519817),l=a.i(340695),m=a.i(59848),n=a.i(577768),o=a.i(621958),p=a.i(15373),q=a.i(767511),q=q,r=a.i(596221),s=a.i(699464),t=a.i(328790),u=a.i(781560);let v=(0,a.i(883706).default)("circle-x",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);a.i(506122);var w=a.i(158880),x=a.i(649865),y=a.i(280281),z=a.i(497895);function A(a){let b=a.config??{};if("stdio"===a.transport){let a="string"==typeof b.command?b.command:"",c=Array.isArray(b.args)?b.args.join(" "):"";return`${a} ${c}`.trim()}return"string"==typeof b.url?b.url:""}function B({s:a}){if("ok"===a.last_check_status){let c=a.tools_cache?.length??0;return(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 text-[11px] text-emerald-600 dark:text-emerald-400",children:[(0,b.jsx)(q.default,{className:"h-3.5 w-3.5"}),c," tool",1===c?"":"s"]})}return"error"===a.last_check_status?(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 text-[11px] text-destructive",title:a.last_check_error??void 0,children:[(0,b.jsx)(v,{className:"h-3.5 w-3.5"}),"Failed"]}):(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5 text-[11px] text-muted-foreground",children:[(0,b.jsx)(r.Loader2,{className:"h-3.5 w-3.5 animate-spin"}),"Checking…"]})}function C({servers:a,onSelect:c,onEdit:d,onDelete:e,selectedId:f}){let g=!!d||!!e,h=j.mcpServers.useUpdate({onError:a=>i.toast.error(a.message||"Update failed")}),k=j.mcpServers.useCheck({onSuccess:a=>{if("ok"===a.last_check_status)i.toast.success(`${a.name}: ${a.tools_cache?.length??0} tools`);else{let b=(a.last_check_error??"check failed").split("\n",1)[0];i.toast.error(`${a.name}: ${b}`)}},onError:a=>i.toast.error(a.message||"Check failed")});return(0,b.jsxs)(w.DataTableShell,{children:[(0,b.jsx)(w.DataTableHeader,{children:(0,b.jsxs)(w.DataTableHeaderRow,{children:[(0,b.jsx)(w.DataTableHead,{children:"Name"}),(0,b.jsx)(w.DataTableHead,{children:"Transport"}),(0,b.jsx)(w.DataTableHead,{children:"Endpoint / Command"}),(0,b.jsx)(w.DataTableHead,{children:"Health"}),(0,b.jsx)(w.DataTableHead,{className:"w-[80px] text-center",children:"Enabled"}),g&&(0,b.jsx)(w.DataTableHead,{className:"w-[124px] text-right",children:"Actions"})]})}),(0,b.jsx)(x.DataTableBody,{children:0===a.length?(0,b.jsx)(w.DataTableEmpty,{colSpan:g?6:5}):a.map(a=>(0,b.jsxs)(w.DataTableRow,{className:(0,z.cn)("transition-colors",c&&"cursor-pointer hover:bg-muted/40",f===a.id&&"bg-muted/60",!a.enabled&&"opacity-60"),onClick:c?()=>c(a):void 0,children:[(0,b.jsx)(w.DataTableCell,{className:"font-mono text-xs max-w-[200px] truncate",title:a.name,children:a.name}),(0,b.jsx)(w.DataTableCell,{children:(0,b.jsx)("span",{className:"inline-flex items-center rounded border border-border bg-muted/40 px-1.5 py-0.5 font-mono text-[10px] uppercase tracking-wider text-muted-foreground",children:a.transport})}),(0,b.jsx)(w.DataTableCell,{className:"font-mono text-xs text-muted-foreground max-w-[360px] truncate",title:A(a),children:A(a)||(0,b.jsx)("span",{className:"italic",children:"—"})}),(0,b.jsx)(w.DataTableCell,{children:(0,b.jsx)(B,{s:a})}),(0,b.jsx)(w.DataTableCell,{className:"text-center",children:(0,b.jsx)(y.Switch,{checked:a.enabled,disabled:!d||h.isPending,onCheckedChange:b=>{h.mutate({id:a.id,data:{enabled:b}})},onClick:a=>a.stopPropagation(),title:a.enabled?"Disable":"Enable"})}),g&&(0,b.jsx)(w.DataTableCell,{className:"text-right",children:(0,b.jsxs)("div",{className:"flex items-center justify-end gap-0.5",children:[d&&(0,b.jsx)(l.Button,{variant:"ghost",size:"icon",className:"h-7 w-7",onClick:b=>{b.stopPropagation(),k.mutate(a.id)},disabled:k.isPending&&k.variables===a.id,title:"Re-check connection",children:(0,b.jsx)(t.RefreshCcw,{className:(0,z.cn)("h-3.5 w-3.5",k.isPending&&k.variables===a.id&&"animate-spin")})}),d&&(0,b.jsx)(l.Button,{variant:"ghost",size:"icon",className:"h-7 w-7",onClick:b=>{b.stopPropagation(),d(a)},title:"Edit",children:(0,b.jsx)(s.Pencil,{className:"h-3.5 w-3.5"})}),e&&(0,b.jsx)(l.Button,{variant:"ghost",size:"icon",className:"h-7 w-7 text-muted-foreground hover:text-destructive hover:bg-destructive/10",onClick:b=>{b.stopPropagation(),e(a)},title:"Delete",children:(0,b.jsx)(u.Trash2,{className:"h-3.5 w-3.5"})})]})})]},a.id))})]})}var D=a.i(879808),E=a.i(254161),F=a.i(353071),q=q,G=a.i(452495);function H(a){return/token|secret|key|password|auth/i.test(a)}function I({status:a}){return"ok"===a?(0,b.jsx)(q.default,{className:"h-4 w-4 text-emerald-500"}):"error"===a?(0,b.jsx)(v,{className:"h-4 w-4 text-destructive"}):(0,b.jsx)(r.Loader2,{className:"h-4 w-4 text-muted-foreground animate-spin"})}function J({children:a}){return(0,b.jsx)("div",{className:"rounded-md border border-dashed p-3 text-xs text-muted-foreground italic",children:a})}function K({children:a}){return(0,b.jsx)("span",{className:"not-italic inline-flex items-center rounded border border-border bg-muted/40 px-1 font-mono text-[10px] uppercase tracking-wider text-muted-foreground mx-0.5",children:a})}function L({server:a,onCheck:c,isChecking:d,isAdmin:e,streaming:f}){let g=a.last_check_status,h=a.last_check_at?(0,z.formatToLocal)(a.last_check_at):"never",i=f?.phase?M[f.phase]:null,j=!!f&&(d||f.logs.length>0);return(0,b.jsxs)("section",{className:"space-y-2",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("h3",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:"Health"}),e&&(0,b.jsxs)(l.Button,{size:"sm",variant:"outline",onClick:c,disabled:d,className:"h-7 text-xs",children:[d?(0,b.jsx)(r.Loader2,{className:"h-3 w-3 mr-1.5 animate-spin"}):(0,b.jsx)(t.RefreshCcw,{className:"h-3 w-3 mr-1.5"}),"Re-check"]})]}),(0,b.jsxs)("div",{className:"rounded-md border p-3 text-sm space-y-1.5",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(I,{status:d?null:g}),(0,b.jsxs)("span",{className:"font-medium",children:[d&&(i??"Checking…"),!d&&"ok"===g&&"Connected",!d&&"error"===g&&"Failed",!d&&null===g&&"Never checked"]}),d&&i&&(0,b.jsx)(E.Badge,{variant:"outline",className:"ml-auto text-[10px] uppercase tracking-wider",children:f?.phase})]}),(0,b.jsxs)("div",{className:"text-[11px] text-muted-foreground",children:["Last check: ",h]}),j&&(0,b.jsx)(N,{logs:f.logs,isStreaming:d}),!d&&"error"===g&&a.last_check_error&&(0,b.jsx)("pre",{className:"mt-1.5 font-mono text-[11px] leading-snug whitespace-pre-wrap break-words bg-destructive/10 text-destructive rounded p-2 max-h-72 overflow-auto",children:a.last_check_error})]})]})}let M={spawning:"Spawning…",starting:"Installing / starting…",connecting:"Connecting…",listing:"Fetching tools…",ready:"Ready"};function N({logs:a,isStreaming:d}){let e=c.useRef(null);return c.useEffect(()=>{let a=e.current;a&&(a.scrollTop=a.scrollHeight)},[a.length]),(0,b.jsxs)("div",{className:"mt-2 rounded border border-border bg-muted/30",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between border-b border-border px-2 py-1 text-[10px] uppercase tracking-wider text-muted-foreground",children:[(0,b.jsx)("span",{children:"Install / startup logs"}),(0,b.jsxs)("span",{children:[a.length," line",1===a.length?"":"s"]})]}),(0,b.jsx)("div",{ref:e,className:"max-h-56 overflow-auto scrollbar-thin px-2 py-1.5 font-mono text-[11px] leading-snug whitespace-pre-wrap break-words",children:0===a.length?(0,b.jsx)("span",{className:"italic text-muted-foreground",children:d?"Waiting for output…":"No output captured."}):a.map((a,c)=>(0,b.jsx)("div",{children:a||" "},c))})]})}function O({info:a}){let c=!!(a.name||a.version),d=!!a.instructions?.trim(),e=a.capabilities?Object.keys(a.capabilities):[];return c||d||0!==e.length?(0,b.jsxs)("section",{className:"space-y-2",children:[(0,b.jsx)("h3",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:"Server"}),(0,b.jsxs)("div",{className:"rounded-md border p-3 space-y-2 text-sm",children:[c&&(0,b.jsxs)("div",{className:"font-mono text-xs",children:[a.name??"<unnamed>",a.version&&(0,b.jsxs)("span",{className:"text-muted-foreground",children:[" @ ",a.version]})]}),e.length>0&&(0,b.jsx)("div",{className:"flex flex-wrap gap-1",children:e.map(a=>(0,b.jsx)("span",{className:"inline-flex items-center rounded border border-border bg-muted/40 px-1.5 py-0.5 font-mono text-[10px] uppercase tracking-wider text-muted-foreground",title:`Server advertises the "${a}" capability`,children:a},a))}),d&&(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-[10px] uppercase tracking-wide text-muted-foreground mb-1",children:"Instructions"}),(0,b.jsx)("p",{className:"text-xs text-muted-foreground leading-relaxed whitespace-pre-wrap",children:a.instructions})]})]})]}):null}function P({server:a,isAdmin:c}){let d=a.config??{};return(0,b.jsxs)("section",{className:"space-y-2",children:[(0,b.jsx)("h3",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:"stdio"===a.transport?"Command":"Endpoint"}),(0,b.jsx)("div",{className:"rounded-md border p-3 space-y-2",children:"stdio"===a.transport?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"font-mono text-xs break-all",children:[(0,b.jsx)("span",{className:"text-muted-foreground",children:"$ "}),String(d.command??"")," ",Array.isArray(d.args)?d.args.join(" "):""]}),d.env&&c&&Object.keys(d.env).length>0&&(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-[10px] uppercase tracking-wide text-muted-foreground mb-1",children:"Env"}),(0,b.jsx)("ul",{className:"font-mono text-[11px] space-y-0.5",children:Object.entries(d.env).map(([a,c])=>(0,b.jsxs)("li",{className:"truncate",children:[(0,b.jsx)("span",{className:"text-muted-foreground",children:a}),"=",H(a)?"•••":c]},a))})]})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:"font-mono text-xs break-all",children:String(d.url??"")}),d.headers&&c&&Object.keys(d.headers).length>0&&(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-[10px] uppercase tracking-wide text-muted-foreground mb-1",children:"Headers"}),(0,b.jsx)("ul",{className:"font-mono text-[11px] space-y-0.5",children:Object.entries(d.headers).map(([a,c])=>(0,b.jsxs)("li",{className:"truncate",children:[(0,b.jsxs)("span",{className:"text-muted-foreground",children:[a,":"]})," ",H(a)?"•••":c]},a))})]})]})})]})}function Q({tools:a,status:c}){return(0,b.jsxs)("section",{className:"space-y-2",children:[(0,b.jsx)("div",{className:"flex items-center justify-between",children:(0,b.jsxs)("h3",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:["Tools ",a.length>0&&(0,b.jsxs)("span",{className:"ml-1 text-foreground",children:["(",a.length,")"]})]})}),0===a.length?(0,b.jsx)("div",{className:"rounded-md border p-3 text-xs text-muted-foreground italic",children:"error"===c?"No tools cached — last check failed.":"No tools cached yet. Run a check to populate."}):(0,b.jsx)("ul",{className:"rounded-md border divide-y",children:a.map(a=>(0,b.jsx)(R,{tool:a},a.name))})]})}function R({tool:a}){let[d,e]=c.useState(!1),f=a.parameters,g=f?.properties?Object.entries(f.properties):[],h=new Set(f?.required??[]);return(0,b.jsxs)("li",{className:(0,z.cn)("p-3 text-xs space-y-1.5",d&&"bg-muted/30"),children:[(0,b.jsxs)("button",{type:"button",onClick:()=>e(a=>!a),className:"flex w-full items-center gap-2 text-left",children:[(0,b.jsx)(G.ExternalLink,{className:"h-3 w-3 text-muted-foreground rotate-90"}),(0,b.jsx)("span",{className:"font-mono text-foreground",children:a.name}),g.length>0&&(0,b.jsxs)("span",{className:"text-[10px] text-muted-foreground",children:[g.length," param",1===g.length?"":"s"]})]}),a.description&&(0,b.jsx)("p",{className:"text-muted-foreground pl-5 leading-snug",children:a.description}),d&&(0,b.jsx)("div",{className:"pl-5 pt-1",children:0===g.length?(0,b.jsx)("p",{className:"text-muted-foreground italic",children:"(no parameters)"}):(0,b.jsx)("ul",{className:"space-y-1",children:g.map(([a,c])=>(0,b.jsxs)("li",{className:"flex gap-2",children:[(0,b.jsx)("span",{className:"font-mono text-foreground",children:a}),c?.type&&(0,b.jsxs)("span",{className:"font-mono text-muted-foreground text-[10px]",children:[": ",c.type]}),h.has(a)&&(0,b.jsx)(E.Badge,{variant:"outline",className:"h-3.5 px-1 text-[9px]",children:"required"}),c?.description&&(0,b.jsxs)("span",{className:"text-muted-foreground text-[11px] truncate",children:["— ",c.description]})]},a))})})]})}function S({snapshot:a,capabilityAdvertised:c,status:d}){let e=a?a.resources.length+a.templates.length:0;return(0,b.jsxs)("section",{className:"space-y-2",children:[(0,b.jsxs)("h3",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:["Resources ",e>0&&(0,b.jsxs)("span",{className:"ml-1 text-foreground",children:["(",e,")"]})]}),c?null===a?(0,b.jsx)(J,{children:"error"===d?"Last check failed — run another to populate.":"Server advertises resources but the list call did not complete."}):0===e?(0,b.jsx)(J,{children:"Server advertises resources but exposes none."}):(0,b.jsxs)("ul",{className:"rounded-md border divide-y",children:[a.resources.map(a=>(0,b.jsxs)("li",{className:"p-3 text-xs space-y-0.5",children:[(0,b.jsx)("div",{className:"font-mono text-foreground break-all",children:a.uri}),(0,b.jsxs)("div",{className:"flex items-baseline gap-2",children:[a.name&&(0,b.jsx)("span",{className:"text-foreground",children:a.name}),a.mimeType&&(0,b.jsx)("span",{className:"font-mono text-[10px] text-muted-foreground",children:a.mimeType})]}),a.description&&(0,b.jsx)("p",{className:"text-muted-foreground leading-snug",children:a.description})]},`r-${a.uri}`)),a.templates.map(a=>(0,b.jsxs)("li",{className:"p-3 text-xs space-y-0.5 bg-muted/10",children:[(0,b.jsxs)("div",{className:"flex items-baseline gap-2",children:[(0,b.jsx)("span",{className:"inline-flex items-center rounded border border-border bg-muted/40 px-1 font-mono text-[9px] uppercase tracking-wider text-muted-foreground",children:"template"}),(0,b.jsx)("span",{className:"font-mono text-foreground break-all",children:a.uriTemplate})]}),(a.name||a.mimeType)&&(0,b.jsxs)("div",{className:"flex items-baseline gap-2 pl-[60px]",children:[a.name&&(0,b.jsx)("span",{className:"text-foreground",children:a.name}),a.mimeType&&(0,b.jsx)("span",{className:"font-mono text-[10px] text-muted-foreground",children:a.mimeType})]}),a.description&&(0,b.jsx)("p",{className:"text-muted-foreground leading-snug pl-[60px]",children:a.description})]},`t-${a.uriTemplate}`))]}):(0,b.jsxs)(J,{children:["This server does not advertise the ",(0,b.jsx)(K,{children:"resources"})," capability."]})]})}function T({prompts:a,capabilityAdvertised:c,status:d}){return(0,b.jsxs)("section",{className:"space-y-2",children:[(0,b.jsxs)("h3",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:["Prompts ",a&&a.length>0&&(0,b.jsxs)("span",{className:"ml-1 text-foreground",children:["(",a.length,")"]})]}),c?null===a?(0,b.jsx)(J,{children:"error"===d?"Last check failed — run another to populate.":"Server advertises prompts but the list call did not complete."}):0===a.length?(0,b.jsx)(J,{children:"Server advertises prompts but exposes none."}):(0,b.jsx)("ul",{className:"rounded-md border divide-y",children:a.map(a=>(0,b.jsx)(U,{prompt:a},a.name))}):(0,b.jsxs)(J,{children:["This server does not advertise the ",(0,b.jsx)(K,{children:"prompts"})," capability."]})]})}function U({prompt:a}){let[d,e]=c.useState(!1),f=a.arguments??[];return(0,b.jsxs)("li",{className:(0,z.cn)("p-3 text-xs space-y-1.5",d&&"bg-muted/30"),children:[(0,b.jsxs)("button",{type:"button",onClick:()=>e(a=>!a),className:"flex w-full items-center gap-2 text-left",children:[(0,b.jsx)(G.ExternalLink,{className:"h-3 w-3 text-muted-foreground rotate-90"}),(0,b.jsx)("span",{className:"font-mono text-foreground",children:a.name}),f.length>0&&(0,b.jsxs)("span",{className:"text-[10px] text-muted-foreground",children:[f.length," arg",1===f.length?"":"s"]})]}),a.description&&(0,b.jsx)("p",{className:"text-muted-foreground pl-5 leading-snug",children:a.description}),d&&f.length>0&&(0,b.jsx)("ul",{className:"pl-5 pt-1 space-y-1",children:f.map(a=>(0,b.jsxs)("li",{className:"flex gap-2",children:[(0,b.jsx)("span",{className:"font-mono text-foreground",children:a.name}),a.required&&(0,b.jsx)(E.Badge,{variant:"outline",className:"h-3.5 px-1 text-[9px]",children:"required"}),a.description&&(0,b.jsxs)("span",{className:"text-muted-foreground text-[11px] truncate",children:["— ",a.description]})]},a.name))})]})}function V({server:a,open:d,onOpenChange:e,isAdmin:f}){let g=j.mcpServers.useCheckStream();c.useEffect(()=>{if(g.result)if("ok"===g.result.last_check_status)i.toast.success(`Check passed — ${g.result.tools_cache?.length??0} tools`);else{let a=(g.result.last_check_error??"unknown error").split("\n",1)[0];i.toast.error(`Check failed: ${a}`)}},[g.result]),c.useEffect(()=>{g.error&&!g.result&&i.toast.error(g.error)},[g.error,g.result]);let h=c.useCallback(()=>{a&&g.run(a.id)},[a,g]),k=c.useRef(null);c.useEffect(()=>{d&&a&&!a.server_info&&"ok"===a.last_check_status&&k.current!==a.id&&(k.current=a.id,g.run(a.id))},[d,a,g]);let l=c.useRef(null);return(c.useEffect(()=>{if(!d)return;let b=a?.id??null;l.current&&l.current!==b&&(g.cancel(),g.reset()),l.current=b},[d,a,g]),a)?(0,b.jsx)(F.Sheet,{open:d,onOpenChange:e,children:(0,b.jsxs)(F.SheetContent,{side:"right",className:"w-full sm:max-w-[640px] overflow-y-auto scrollbar-thin p-0",children:[(0,b.jsxs)(F.SheetHeader,{className:"px-6 py-4 border-b",children:[(0,b.jsxs)(F.SheetTitle,{className:"flex items-center gap-2 text-base",children:[(0,b.jsx)(D.Wrench,{className:"h-4 w-4 text-muted-foreground"}),(0,b.jsx)("span",{className:"font-mono",children:a.name}),(0,b.jsx)(E.Badge,{variant:"outline",className:"text-[10px] uppercase ml-2",children:a.transport}),!a.enabled&&(0,b.jsx)(E.Badge,{variant:"secondary",className:"text-[10px] uppercase",children:"disabled"})]}),(0,b.jsx)(F.SheetDescription,{className:"text-xs text-muted-foreground pt-1",children:a.description||"MCP server connection details, health, and discovered tools."})]}),(0,b.jsxs)("div",{className:"px-6 py-4 space-y-5",children:[(0,b.jsx)(L,{server:a,onCheck:h,isChecking:g.isChecking,isAdmin:f,streaming:{phase:g.phase,logs:g.logs,error:g.error}}),a.server_info&&(0,b.jsx)(O,{info:a.server_info}),(0,b.jsx)(P,{server:a,isAdmin:f}),(0,b.jsx)(Q,{tools:a.tools_cache??[],status:a.last_check_status}),(0,b.jsx)(S,{snapshot:a.resources_cache,capabilityAdvertised:!!a.server_info?.capabilities?.resources,status:a.last_check_status}),(0,b.jsx)(T,{prompts:a.prompts_cache,capabilityAdvertised:!!a.server_info?.capabilities?.prompts,status:a.last_check_status})]})]})}):null}a.s(["default",0,function(){let{user:a}=(0,k.useAuth)(),q=a?.role==="admin",[r,s]=c.useState("mcp"),{data:t,isLoading:u}=j.mcpServers.useList(void 0,{enabled:"mcp"===r,refetchInterval:a=>{let b=a.state.data;return!!b&&!!b.some(a=>null===a.last_check_status)&&2e3}}),[v,w]=c.useState({open:!1,mode:"create"}),[x,y]=c.useState(null),z=(0,e.useSearchParams)(),[A,B]=c.useState(()=>z?.get("selected")??null),D=c.useMemo(()=>(t??[]).find(a=>a.id===A)??null,[t,A]),E=j.mcpServers.useDelete({onSuccess:()=>{i.toast.success("Server deleted"),y(null),A===x?.id&&B(null)},onError:a=>i.toast.error(a.message||"Delete failed")});return(0,b.jsxs)("div",{className:"h-full flex flex-col p-4 overflow-y-hidden",children:[(0,b.jsxs)(o.Tabs,{defaultValue:"mcp",className:"flex-1 flex flex-col min-h-0 w-full gap-4",onValueChange:s,children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 px-1 flex-wrap md:flex-nowrap",children:[(0,b.jsxs)(o.TabsList,{className:"h-8 p-0.5",children:[(0,b.jsx)(o.TabsTrigger,{value:"mcp",className:"h-7 px-3 text-xs",children:"MCP"}),(0,b.jsx)(o.TabsTrigger,{value:"skills",className:"h-7 px-3 text-xs",children:"Skills"})]}),"mcp"===r&&(0,b.jsxs)("div",{className:"flex items-center gap-1.5 ml-auto",children:[(0,b.jsx)(d.default,{href:"/mcp/presets",children:(0,b.jsxs)(l.Button,{size:"sm",variant:"secondary",className:"h-8 text-xs gap-1.5",children:[(0,b.jsx)(f.LayoutGrid,{className:"h-3.5 w-3.5"}),"Catalogue"]})}),q&&(0,b.jsx)(l.Button,{size:"icon",variant:"secondary",className:"h-8 w-8 shrink-0",onClick:()=>w({open:!0,mode:"create"}),title:"Add MCP server",children:(0,b.jsx)(g.Plus,{className:"h-3.5 w-3.5"})})]})]}),(0,b.jsx)(o.TabsContent,{value:"mcp",className:"flex-1 min-h-0 flex flex-col",children:(0,b.jsxs)("div",{className:"flex-1 border rounded-xl bg-card shadow-sm flex flex-col overflow-hidden relative",children:[u&&(0,b.jsx)("div",{className:"absolute inset-0 flex items-center justify-center bg-background/50 z-10",children:(0,b.jsx)(n.LoadingState,{label:"Loading MCP servers…"})}),(0,b.jsx)("div",{className:"flex-1 overflow-auto",children:(0,b.jsx)(C,{servers:t??[],onSelect:a=>B(a.id),onEdit:q?a=>w({open:!0,mode:"edit",server:a}):void 0,onDelete:q?y:void 0,selectedId:A})})]})}),(0,b.jsxs)(o.TabsContent,{value:"skills",className:"flex-1 min-h-0 flex flex-col items-center justify-center text-center",children:[(0,b.jsx)("div",{className:"flex h-12 w-12 items-center justify-center rounded-2xl bg-gradient-to-br from-amber-500/20 to-orange-500/20",children:(0,b.jsx)(h.Sparkles,{className:"h-6 w-6 text-amber-500"})}),(0,b.jsx)("h2",{className:"mt-3 text-base font-semibold tracking-tight",children:"Skills"}),(0,b.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:"Coming soon."})]})]}),(0,b.jsx)(p.McpFormDialog,{open:v.open,onOpenChange:a=>w(b=>({...b,open:a})),mode:v.mode,server:v.server}),(0,b.jsx)(V,{server:D,open:!!D,onOpenChange:a=>!a&&B(null),isAdmin:q}),(0,b.jsx)(m.ConfirmDialog,{open:!!x,onOpenChange:a=>!a&&y(null),title:"Delete MCP server?",description:(0,b.jsxs)(b.Fragment,{children:["This will delete ",(0,b.jsx)("b",{children:x?.name}),"."]}),confirmLabel:"Delete",destructive:!0,isLoading:E.isPending,onConfirm:()=>x&&E.mutate(x.id)})]})}],460508)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=app_%28dashboard%29_mcp_page_tsx_0cg7pz9._.js.map
|