From 906a535899e8f39c3d5597f5d0f0efef218d0592 Mon Sep 17 00:00:00 2001 From: Snider Date: Tue, 17 Feb 2026 19:19:38 +0000 Subject: [PATCH] chore: update module paths and add gitignore Sync module imports across agentic, mcp, ml, and rag packages. Add .gitignore for mlx build artifacts. Co-Authored-By: Virgil --- .gitignore | 6 ++++++ agentic/allowance_service.go | 2 +- agentic/client.go | 2 +- agentic/completion.go | 2 +- agentic/config.go | 4 ++-- agentic/context.go | 4 ++-- agentic/service.go | 4 ++-- go.mod | 4 ++-- mcp/ide/bridge.go | 2 +- mcp/ide/bridge_test.go | 2 +- mcp/ide/ide.go | 2 +- mcp/mcp.go | 8 ++++---- mcp/tools_metrics.go | 2 +- mcp/tools_ml.go | 2 +- mcp/tools_process.go | 4 ++-- mcp/tools_rag.go | 2 +- mcp/tools_webview.go | 4 ++-- mcp/tools_webview_test.go | 2 +- mcp/tools_ws.go | 4 ++-- mcp/tools_ws_test.go | 2 +- mcp/transport_stdio.go | 2 +- mcp/transport_unix.go | 2 +- ml/backend_http.go | 2 +- ml/backend_llama.go | 4 ++-- ml/inference.go | 18 ++++++++++++++++++ ml/service.go | 2 +- rag/ingest.go | 2 +- rag/ollama.go | 2 +- rag/qdrant.go | 2 +- rag/query.go | 2 +- 30 files changed, 63 insertions(+), 39 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..009e1ee --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +mlx/build/ +mlx/dist/ +*.o +*.a +*.so +*.dylib diff --git a/agentic/allowance_service.go b/agentic/allowance_service.go index 449e969..7bfebc6 100644 --- a/agentic/allowance_service.go +++ b/agentic/allowance_service.go @@ -3,7 +3,7 @@ package agentic import ( "slices" - "forge.lthn.ai/core/cli/pkg/log" + "forge.lthn.ai/core/go/pkg/log" ) // AllowanceService enforces agent quota limits. It provides pre-dispatch checks, diff --git a/agentic/client.go b/agentic/client.go index 793d70b..0782a2e 100644 --- a/agentic/client.go +++ b/agentic/client.go @@ -12,7 +12,7 @@ import ( "strings" "time" - "forge.lthn.ai/core/cli/pkg/log" + "forge.lthn.ai/core/go/pkg/log" ) // Client is the API client for the core-agentic service. diff --git a/agentic/completion.go b/agentic/completion.go index f26aa42..5647add 100644 --- a/agentic/completion.go +++ b/agentic/completion.go @@ -8,7 +8,7 @@ import ( "os/exec" "strings" - "forge.lthn.ai/core/cli/pkg/log" + "forge.lthn.ai/core/go/pkg/log" ) // PROptions contains options for creating a pull request. diff --git a/agentic/config.go b/agentic/config.go index 4f3e2bc..1907534 100644 --- a/agentic/config.go +++ b/agentic/config.go @@ -5,8 +5,8 @@ import ( "path/filepath" "strings" - errors "forge.lthn.ai/core/cli/pkg/framework/core" - "forge.lthn.ai/core/cli/pkg/io" + errors "forge.lthn.ai/core/go/pkg/framework/core" + "forge.lthn.ai/core/go/pkg/io" "gopkg.in/yaml.v3" ) diff --git a/agentic/context.go b/agentic/context.go index b1628e7..e7b2b0c 100644 --- a/agentic/context.go +++ b/agentic/context.go @@ -9,8 +9,8 @@ import ( "regexp" "strings" - errors "forge.lthn.ai/core/cli/pkg/framework/core" - "forge.lthn.ai/core/cli/pkg/io" + errors "forge.lthn.ai/core/go/pkg/framework/core" + "forge.lthn.ai/core/go/pkg/io" ) // FileContent represents the content of a file for AI context. diff --git a/agentic/service.go b/agentic/service.go index dfcb1dc..938563e 100644 --- a/agentic/service.go +++ b/agentic/service.go @@ -6,8 +6,8 @@ import ( "os/exec" "strings" - "forge.lthn.ai/core/cli/pkg/framework" - "forge.lthn.ai/core/cli/pkg/log" + "forge.lthn.ai/core/go/pkg/framework" + "forge.lthn.ai/core/go/pkg/log" ) // Tasks for AI service diff --git a/go.mod b/go.mod index bcfcbb1..43eeb76 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module forge.lthn.ai/core/go-ai go 1.25.5 require ( - forge.lthn.ai/core/cli v0.0.0 + forge.lthn.ai/core/go v0.0.0 github.com/gorilla/websocket v1.5.3 github.com/marcboeker/go-duckdb v1.8.5 github.com/modelcontextprotocol/go-sdk v1.3.0 @@ -53,4 +53,4 @@ require ( google.golang.org/protobuf v1.36.11 // indirect ) -replace forge.lthn.ai/core/cli => /Users/claude/Code/host-uk/packages/core +replace forge.lthn.ai/core/go => ../core diff --git a/mcp/ide/bridge.go b/mcp/ide/bridge.go index cef124e..d66db21 100644 --- a/mcp/ide/bridge.go +++ b/mcp/ide/bridge.go @@ -8,7 +8,7 @@ import ( "sync" "time" - "forge.lthn.ai/core/cli/pkg/ws" + "forge.lthn.ai/core/go/pkg/ws" "github.com/gorilla/websocket" ) diff --git a/mcp/ide/bridge_test.go b/mcp/ide/bridge_test.go index d74c2ca..89fdeef 100644 --- a/mcp/ide/bridge_test.go +++ b/mcp/ide/bridge_test.go @@ -9,7 +9,7 @@ import ( "testing" "time" - "forge.lthn.ai/core/cli/pkg/ws" + "forge.lthn.ai/core/go/pkg/ws" "github.com/gorilla/websocket" ) diff --git a/mcp/ide/ide.go b/mcp/ide/ide.go index f2aa7a1..a1806d3 100644 --- a/mcp/ide/ide.go +++ b/mcp/ide/ide.go @@ -3,7 +3,7 @@ package ide import ( "context" - "forge.lthn.ai/core/cli/pkg/ws" + "forge.lthn.ai/core/go/pkg/ws" "github.com/modelcontextprotocol/go-sdk/mcp" ) diff --git a/mcp/mcp.go b/mcp/mcp.go index 80da3a2..404ae1a 100644 --- a/mcp/mcp.go +++ b/mcp/mcp.go @@ -10,10 +10,10 @@ import ( "path/filepath" "strings" - "forge.lthn.ai/core/cli/pkg/io" - "forge.lthn.ai/core/cli/pkg/log" - "forge.lthn.ai/core/cli/pkg/process" - "forge.lthn.ai/core/cli/pkg/ws" + "forge.lthn.ai/core/go/pkg/io" + "forge.lthn.ai/core/go/pkg/log" + "forge.lthn.ai/core/go/pkg/process" + "forge.lthn.ai/core/go/pkg/ws" "github.com/modelcontextprotocol/go-sdk/mcp" ) diff --git a/mcp/tools_metrics.go b/mcp/tools_metrics.go index 3c8e837..64f84cf 100644 --- a/mcp/tools_metrics.go +++ b/mcp/tools_metrics.go @@ -8,7 +8,7 @@ import ( "time" "forge.lthn.ai/core/go-ai/ai" - "forge.lthn.ai/core/cli/pkg/log" + "forge.lthn.ai/core/go/pkg/log" "github.com/modelcontextprotocol/go-sdk/mcp" ) diff --git a/mcp/tools_ml.go b/mcp/tools_ml.go index 4326194..8cea177 100644 --- a/mcp/tools_ml.go +++ b/mcp/tools_ml.go @@ -5,7 +5,7 @@ import ( "fmt" "strings" - "forge.lthn.ai/core/cli/pkg/log" + "forge.lthn.ai/core/go/pkg/log" "forge.lthn.ai/core/go-ai/ml" "github.com/modelcontextprotocol/go-sdk/mcp" ) diff --git a/mcp/tools_process.go b/mcp/tools_process.go index 54ac899..d613042 100644 --- a/mcp/tools_process.go +++ b/mcp/tools_process.go @@ -5,8 +5,8 @@ import ( "fmt" "time" - "forge.lthn.ai/core/cli/pkg/log" - "forge.lthn.ai/core/cli/pkg/process" + "forge.lthn.ai/core/go/pkg/log" + "forge.lthn.ai/core/go/pkg/process" "github.com/modelcontextprotocol/go-sdk/mcp" ) diff --git a/mcp/tools_rag.go b/mcp/tools_rag.go index 5ffb191..f2189e1 100644 --- a/mcp/tools_rag.go +++ b/mcp/tools_rag.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - "forge.lthn.ai/core/cli/pkg/log" + "forge.lthn.ai/core/go/pkg/log" "forge.lthn.ai/core/go-ai/rag" "github.com/modelcontextprotocol/go-sdk/mcp" ) diff --git a/mcp/tools_webview.go b/mcp/tools_webview.go index 246dcbb..8aab06b 100644 --- a/mcp/tools_webview.go +++ b/mcp/tools_webview.go @@ -6,8 +6,8 @@ import ( "fmt" "time" - "forge.lthn.ai/core/cli/pkg/log" - "forge.lthn.ai/core/cli/pkg/webview" + "forge.lthn.ai/core/go/pkg/log" + "forge.lthn.ai/core/go/pkg/webview" "github.com/modelcontextprotocol/go-sdk/mcp" ) diff --git a/mcp/tools_webview_test.go b/mcp/tools_webview_test.go index aa2ff93..973d795 100644 --- a/mcp/tools_webview_test.go +++ b/mcp/tools_webview_test.go @@ -4,7 +4,7 @@ import ( "testing" "time" - "forge.lthn.ai/core/cli/pkg/webview" + "forge.lthn.ai/core/go/pkg/webview" ) // TestWebviewToolsRegistered_Good verifies that webview tools are registered with the MCP server. diff --git a/mcp/tools_ws.go b/mcp/tools_ws.go index 28fa1f4..d1377fe 100644 --- a/mcp/tools_ws.go +++ b/mcp/tools_ws.go @@ -6,8 +6,8 @@ import ( "net" "net/http" - "forge.lthn.ai/core/cli/pkg/log" - "forge.lthn.ai/core/cli/pkg/ws" + "forge.lthn.ai/core/go/pkg/log" + "forge.lthn.ai/core/go/pkg/ws" "github.com/modelcontextprotocol/go-sdk/mcp" ) diff --git a/mcp/tools_ws_test.go b/mcp/tools_ws_test.go index 4abc93c..53edaa4 100644 --- a/mcp/tools_ws_test.go +++ b/mcp/tools_ws_test.go @@ -3,7 +3,7 @@ package mcp import ( "testing" - "forge.lthn.ai/core/cli/pkg/ws" + "forge.lthn.ai/core/go/pkg/ws" ) // TestWSToolsRegistered_Good verifies that WebSocket tools are registered when hub is available. diff --git a/mcp/transport_stdio.go b/mcp/transport_stdio.go index 60f7d6b..b91fc3a 100644 --- a/mcp/transport_stdio.go +++ b/mcp/transport_stdio.go @@ -3,7 +3,7 @@ package mcp import ( "context" - "forge.lthn.ai/core/cli/pkg/log" + "forge.lthn.ai/core/go/pkg/log" "github.com/modelcontextprotocol/go-sdk/mcp" ) diff --git a/mcp/transport_unix.go b/mcp/transport_unix.go index 186cc59..aea4c2d 100644 --- a/mcp/transport_unix.go +++ b/mcp/transport_unix.go @@ -5,7 +5,7 @@ import ( "net" "os" - "forge.lthn.ai/core/cli/pkg/log" + "forge.lthn.ai/core/go/pkg/log" ) // ServeUnix starts a Unix domain socket server for the MCP service. diff --git a/ml/backend_http.go b/ml/backend_http.go index c3287ea..45f4dd5 100644 --- a/ml/backend_http.go +++ b/ml/backend_http.go @@ -10,7 +10,7 @@ import ( "net/http" "time" - "forge.lthn.ai/core/cli/pkg/log" + "forge.lthn.ai/core/go/pkg/log" ) // HTTPBackend talks to an OpenAI-compatible chat completions API. diff --git a/ml/backend_llama.go b/ml/backend_llama.go index 518ed97..d5acf7f 100644 --- a/ml/backend_llama.go +++ b/ml/backend_llama.go @@ -6,8 +6,8 @@ import ( "net/http" "time" - "forge.lthn.ai/core/cli/pkg/log" - "forge.lthn.ai/core/cli/pkg/process" + "forge.lthn.ai/core/go/pkg/log" + "forge.lthn.ai/core/go/pkg/process" ) // LlamaBackend manages a llama-server process and delegates HTTP calls to it. diff --git a/ml/inference.go b/ml/inference.go index 3b71702..7e1171f 100644 --- a/ml/inference.go +++ b/ml/inference.go @@ -43,6 +43,24 @@ type Message struct { Content string `json:"content"` } +// TokenCallback receives each generated token as text. Return a non-nil +// error to stop generation early (e.g. client disconnect). +type TokenCallback func(token string) error + +// StreamingBackend extends Backend with token-by-token streaming. +// Backends that generate tokens incrementally (e.g. MLX) should implement +// this interface. The serve handler uses SSE when the client sends +// "stream": true and the active backend satisfies StreamingBackend. +type StreamingBackend interface { + Backend + + // GenerateStream streams tokens from a single prompt via the callback. + GenerateStream(ctx context.Context, prompt string, opts GenOpts, cb TokenCallback) error + + // ChatStream streams tokens from a chat conversation via the callback. + ChatStream(ctx context.Context, messages []Message, opts GenOpts, cb TokenCallback) error +} + // DefaultGenOpts returns sensible defaults for generation. func DefaultGenOpts() GenOpts { return GenOpts{ diff --git a/ml/service.go b/ml/service.go index 0cfff4b..16d567b 100644 --- a/ml/service.go +++ b/ml/service.go @@ -5,7 +5,7 @@ import ( "fmt" "sync" - "forge.lthn.ai/core/cli/pkg/framework" + "forge.lthn.ai/core/go/pkg/framework" ) // Service manages ML inference backends and scoring with Core lifecycle. diff --git a/rag/ingest.go b/rag/ingest.go index 4532b33..cd4ff06 100644 --- a/rag/ingest.go +++ b/rag/ingest.go @@ -8,7 +8,7 @@ import ( "path/filepath" "strings" - "forge.lthn.ai/core/cli/pkg/log" + "forge.lthn.ai/core/go/pkg/log" ) // IngestConfig holds ingestion configuration. diff --git a/rag/ollama.go b/rag/ollama.go index 757fab2..891c830 100644 --- a/rag/ollama.go +++ b/rag/ollama.go @@ -7,7 +7,7 @@ import ( "net/url" "time" - "forge.lthn.ai/core/cli/pkg/log" + "forge.lthn.ai/core/go/pkg/log" "github.com/ollama/ollama/api" ) diff --git a/rag/qdrant.go b/rag/qdrant.go index b6aa86d..14a540e 100644 --- a/rag/qdrant.go +++ b/rag/qdrant.go @@ -6,7 +6,7 @@ import ( "context" "fmt" - "forge.lthn.ai/core/cli/pkg/log" + "forge.lthn.ai/core/go/pkg/log" "github.com/qdrant/go-client/qdrant" ) diff --git a/rag/query.go b/rag/query.go index 0e0fc3c..2605868 100644 --- a/rag/query.go +++ b/rag/query.go @@ -6,7 +6,7 @@ import ( "html" "strings" - "forge.lthn.ai/core/cli/pkg/log" + "forge.lthn.ai/core/go/pkg/log" ) // QueryConfig holds query configuration.