Initialize MCP/LSP servers in serve mode at startup
ober
acdb00d6e1af6ff9e1fecb80b97e9438ffafc501
--- a/lib/jcode/provider/provider.sls +++ b/lib/jcode/provider/provider.sls @@ -10,10 +10,10 @@ (except (chezscheme) make-hash-table hash-table? iota \x31;+ \x31;- getenv path-extension path-absolute? thread? make-mutex mutex? mutex-name) - (std text json) (except (std net request) http-post-stream) - (std net tls-rustls) (std net tcp) (std misc string) - (std misc retry) (jcode core log) (jcode core message) - (jerboa core) (jerboa runtime)) + (std text json) (std net request) (std net tls-rustls) + (std net tcp) (std misc string) (std misc retry) + (jcode core log) (jcode core message) (jerboa core) + (jerboa runtime)) (def logger (make-logger "provider")) (def *api-retry-policy* (make-retry-policy 3 1.0 30.0 #t)) (def (retryable-error? e) --- a/lib/jcode/ui/serve.sls +++ b/lib/jcode/ui/serve.sls @@ -13,7 +13,8 @@ (std os path) (std net tcp) (jcode core log) (jcode core config) (jcode core models) (jcode core session) (jcode core agent) (jcode tool registry) (jcode mcp client) - (jcode tool lsp) (jerboa core) (jerboa runtime)) + (jcode tool lsp) (std misc thread) (jerboa core) + (jerboa runtime)) (def logger (make-logger "serve")) (def *mutating-tools* '("write" "edit" "multi-edit" "patch" "bash" "git_commit")) @@ -390,6 +391,10 @@ "[INFO] no token found (run with --port to generate)~n")) (flush-output-port (current-error-port)) (exit 0))) + (let ([t-mcp (spawn init-mcp-tools)] + [t-lsp (spawn init-lsp-tools)]) + (thread-join! t-mcp) + (thread-join! t-lsp)) (let ([port-opt (assoc 'port opts)]) (if port-opt (begin --- a/src/jcode/provider/provider.ss +++ b/src/jcode/provider/provider.ss @@ -9,7 +9,7 @@ provider-model) (import :std/text/json - (except (std net request) http-post-stream) + :std/net/request :std/net/tls-rustls :std/net/tcp :std/misc/string --- a/src/jcode/ui/serve.ss +++ b/src/jcode/ui/serve.ss @@ -42,7 +42,8 @@ :jcode/core/agent :jcode/tool/registry :jcode/mcp/client - :jcode/tool/lsp) + :jcode/tool/lsp + :std/misc/thread) (def logger (make-logger "serve")) @@ -439,6 +440,11 @@ (fprintf (current-error-port) "[INFO] no token found (run with --port to generate)~n")) (flush-output-port (current-error-port)) (exit 0))) + ;; Initialize MCP and LSP connections (same as CLI/TUI) + (let ((t-mcp (spawn init-mcp-tools)) + (t-lsp (spawn init-lsp-tools))) + (thread-join! t-mcp) + (thread-join! t-lsp)) ;; Dispatch to TCP or stdio mode (let ((port-opt (assoc 'port opts))) (if port-opt