UNPKG

@nanocollective/nanocoder

Version:

A local-first CLI coding agent that brings the power of agentic coding tools like Claude Code and Gemini CLI to local models or controlled APIs like OpenRouter

45 lines 3 kB
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { Box, Text } from 'ink'; import React from 'react'; import { TitledBoxWithPreferences } from '../components/ui/titled-box.js'; import { useTerminalWidth } from '../hooks/useTerminalWidth.js'; import { useTheme } from '../hooks/useTheme.js'; import { getLSPManager } from '../lsp/lsp-manager.js'; export function LSP({ status }) { const boxWidth = useTerminalWidth(); const { colors } = useTheme(); const { servers } = status; return (_jsx(TitledBoxWithPreferences, { title: "/lsp", width: boxWidth, borderColor: colors.primary, paddingX: 2, paddingY: 1, flexDirection: "column", marginBottom: 1, children: servers.length === 0 ? (_jsxs(_Fragment, { children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: colors.text, bold: true, children: "No LSP servers connected" }) }), _jsxs(Text, { color: colors.text, children: ["To connect LSP servers, configure them in your", ' ', _jsx(Text, { color: colors.primary, children: "agents.config.json" }), " file:"] }), _jsx(Box, { marginTop: 1, marginBottom: 1, children: _jsx(Text, { color: colors.secondary, children: `{ "nanocoder": { "lsp": { "servers": [ { "name": "typescript-language-server", "command": "typescript-language-server", "args": ["--stdio"], "languages": ["ts", "js", "tsx", "jsx"] } ] } } }` }) }), _jsx(Text, { color: colors.secondary, children: "LSP servers will auto-discover based on your project files." })] })) : (_jsxs(_Fragment, { children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: colors.primary, children: ["Connected LSP Servers (", servers.length, "):"] }) }), servers.map((server, index) => { // Determine status icon and text based on readiness const statusIcon = server.ready ? '🟢' : '🔴'; const statusText = server.ready ? 'Ready' : 'Initializing'; return (_jsx(Box, { marginBottom: 1, children: _jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { color: colors.text, children: ["\u2022 ", statusIcon, ' ', _jsx(Text, { color: colors.primary, children: server.name }), ":", ' ', _jsxs(Text, { color: colors.secondary, children: ["(", statusText, ")"] })] }), server.languages.length > 0 && (_jsxs(Text, { color: colors.secondary, children: ["Languages: ", server.languages.join(', ')] }))] }) }, index)); })] })) })); } export const lspCommand = { name: 'lsp', description: 'Show connected LSP servers and their status', handler: async (_args, _messages, _metadata) => { const lspManager = await getLSPManager(); // Get the current status of LSP servers const status = lspManager.getStatus(); return React.createElement(LSP, { key: `lsp-${Date.now()}`, status: status, }); }, }; //# sourceMappingURL=lsp.js.map