From 8cf6206a7ac30fd7d7dcf94a9ae9e182e169bd19 Mon Sep 17 00:00:00 2001 From: David Thorpe Date: Tue, 28 Apr 2026 08:47:58 +0200 Subject: [PATCH 1/4] Refactor and update Co-authored-by: Copilot --- go.mod | 34 +++++++++-------- go.sum | 68 +++++++++++++++++---------------- heartbeat/manager/list.go | 2 +- kernel/cmd/channel_test.go | 2 +- kernel/cmd/connector_test.go | 2 +- kernel/cmd/embedding_test.go | 1 + kernel/cmd/server.go | 4 +- kernel/httpclient/client.go | 2 +- kernel/httphandler/agent.go | 2 +- kernel/httphandler/ask.go | 4 +- kernel/httphandler/channel.go | 2 +- kernel/httphandler/chat.go | 4 +- kernel/httphandler/chat_test.go | 2 +- kernel/httphandler/connector.go | 2 +- kernel/httphandler/embedding.go | 2 +- kernel/httphandler/message.go | 2 +- kernel/httphandler/model.go | 4 +- kernel/httphandler/register.go | 2 +- kernel/httphandler/session.go | 2 +- kernel/httphandler/tool.go | 2 +- kernel/manager/agent.go | 12 +++--- kernel/manager/ask.go | 9 +++-- kernel/manager/ask_test.go | 2 +- kernel/manager/chat.go | 14 +++---- kernel/manager/connector.go | 18 ++++----- kernel/manager/delegate.go | 2 +- kernel/manager/embedder.go | 7 ++-- kernel/manager/embedder_test.go | 2 +- kernel/manager/message.go | 7 ++-- kernel/manager/model.go | 14 +++---- kernel/manager/model_test.go | 2 +- kernel/manager/opt.go | 2 +- kernel/manager/provider.go | 6 +-- kernel/manager/session.go | 26 ++++++------- kernel/manager/tool.go | 12 +++--- kernel/schema/connector.go | 2 +- kernel/schema/http.go | 2 +- kernel/schema/table.go | 1 + mcp/client/client.go | 2 +- mcp/client/connect.go | 2 +- mcp/client/connect_test.go | 2 +- mcp/client/probe.go | 2 +- mcp/client/run.go | 1 - mcp/client/run_test.go | 1 - pkg/test/integration.go | 2 +- 45 files changed, 153 insertions(+), 144 deletions(-) diff --git a/go.mod b/go.mod index fab4eb1..f4fea49 100644 --- a/go.mod +++ b/go.mod @@ -6,14 +6,14 @@ require ( github.com/charmbracelet/bubbletea v1.3.10 github.com/charmbracelet/glamour v1.0.0 github.com/charmbracelet/lipgloss v1.1.1-0.20250404203927-76690c660834 - github.com/djthorpe/go-auth v0.0.1 - github.com/google/jsonschema-go v0.4.2 + github.com/google/jsonschema-go v0.4.3 github.com/google/uuid v1.6.0 github.com/modelcontextprotocol/go-sdk v1.5.0 github.com/muesli/termenv v0.16.0 + github.com/mutablelogic/go-auth v0.0.14 github.com/mutablelogic/go-client v1.4.9 - github.com/mutablelogic/go-pg v1.1.12 - github.com/mutablelogic/go-server v1.6.24 + github.com/mutablelogic/go-pg v1.1.14 + github.com/mutablelogic/go-server v1.6.34 github.com/stretchr/testify v1.11.1 go.opentelemetry.io/otel v1.43.0 go.opentelemetry.io/otel/trace v1.43.0 @@ -35,10 +35,10 @@ require ( github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/charmbracelet/colorprofile v0.4.3 // indirect - github.com/charmbracelet/x/ansi v0.11.6 // indirect + github.com/charmbracelet/x/ansi v0.11.7 // indirect github.com/charmbracelet/x/cellbuf v0.0.15 // indirect - github.com/charmbracelet/x/exp/golden v0.0.0-20260412004207-d48a6f9a4964 // indirect - github.com/charmbracelet/x/exp/slice v0.0.0-20260412004207-d48a6f9a4964 // indirect + github.com/charmbracelet/x/exp/golden v0.0.0-20260427100455-1ea3e7f8134f // indirect + github.com/charmbracelet/x/exp/slice v0.0.0-20260427100455-1ea3e7f8134f // indirect github.com/charmbracelet/x/term v0.2.2 // indirect github.com/clipperhouse/displaywidth v0.11.0 // indirect github.com/clipperhouse/uax29/v2 v2.7.0 // indirect @@ -51,8 +51,8 @@ require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 // indirect github.com/distribution/reference v0.6.0 // indirect - github.com/dlclark/regexp2 v1.11.5 // indirect - github.com/docker/go-connections v0.6.0 // indirect + github.com/dlclark/regexp2 v1.12.0 // indirect + github.com/docker/go-connections v0.7.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/ebitengine/purego v0.10.0 // indirect github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect @@ -64,10 +64,10 @@ require ( github.com/goccy/go-json v0.10.6 // indirect github.com/golang-jwt/jwt/v5 v5.3.1 // indirect github.com/gorilla/css v1.0.1 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect - github.com/jackc/pgx/v5 v5.9.1 // indirect + github.com/jackc/pgx/v5 v5.9.2 // indirect github.com/jackc/puddle/v2 v2.2.2 // indirect github.com/klauspost/compress v1.18.5 // indirect github.com/lestrrat-go/blackmagic v1.0.4 // indirect @@ -79,14 +79,14 @@ require ( github.com/lucasb-eyer/go-colorful v1.4.0 // indirect github.com/lufia/plan9stats v0.0.0-20260330125221-c963978e514e // indirect github.com/magiconair/properties v1.8.10 // indirect - github.com/mattn/go-isatty v0.0.21 // indirect + github.com/mattn/go-isatty v0.0.22 // indirect github.com/mattn/go-localereader v0.0.1 // indirect github.com/mattn/go-runewidth v0.0.23 // indirect github.com/microcosm-cc/bluemonday v1.0.27 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect github.com/moby/go-archive v0.2.0 // indirect - github.com/moby/moby/api v1.54.1 // indirect - github.com/moby/moby/client v0.4.0 // indirect + github.com/moby/moby/api v1.54.2 // indirect + github.com/moby/moby/client v0.4.1 // indirect github.com/moby/patternmatcher v0.6.1 // indirect github.com/moby/sys/sequential v0.6.0 // indirect github.com/moby/sys/user v0.4.0 // indirect @@ -95,6 +95,7 @@ require ( github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect github.com/muesli/cancelreader v0.2.2 // indirect github.com/muesli/reflow v0.3.0 // indirect + github.com/mutablelogic/go-tokenizer v0.0.3 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.1 // indirect github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect @@ -110,6 +111,7 @@ require ( github.com/tklauser/numcpus v0.11.0 // indirect github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect github.com/yosida95/uritemplate/v3 v3.0.2 // indirect + github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect github.com/yuin/goldmark v1.8.2 // indirect github.com/yuin/goldmark-emoji v1.0.6 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect @@ -133,8 +135,8 @@ require ( golang.org/x/net v0.53.0 // indirect golang.org/x/sys v0.43.0 // indirect golang.org/x/text v0.36.0 - google.golang.org/genproto/googleapis/api v0.0.0-20260406210006-6f92a3bedf2d // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260406210006-6f92a3bedf2d // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260427160629-7cedc36a6bc4 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260427160629-7cedc36a6bc4 // indirect google.golang.org/grpc v1.80.0 // indirect google.golang.org/protobuf v1.36.11 // indirect ) diff --git a/go.sum b/go.sum index 6d36d88..c31f896 100644 --- a/go.sum +++ b/go.sum @@ -34,14 +34,14 @@ github.com/charmbracelet/glamour v1.0.0 h1:AWMLOVFHTsysl4WV8T8QgkQ0s/ZNZo7CiE4WK github.com/charmbracelet/glamour v1.0.0/go.mod h1:DSdohgOBkMr2ZQNhw4LZxSGpx3SvpeujNoXrQyH2hxo= github.com/charmbracelet/lipgloss v1.1.1-0.20250404203927-76690c660834 h1:ZR7e0ro+SZZiIZD7msJyA+NjkCNNavuiPBLgerbOziE= github.com/charmbracelet/lipgloss v1.1.1-0.20250404203927-76690c660834/go.mod h1:aKC/t2arECF6rNOnaKaVU6y4t4ZeHQzqfxedE/VkVhA= -github.com/charmbracelet/x/ansi v0.11.6 h1:GhV21SiDz/45W9AnV2R61xZMRri5NlLnl6CVF7ihZW8= -github.com/charmbracelet/x/ansi v0.11.6/go.mod h1:2JNYLgQUsyqaiLovhU2Rv/pb8r6ydXKS3NIttu3VGZQ= +github.com/charmbracelet/x/ansi v0.11.7 h1:kzv1kJvjg2S3r9KHo8hDdHFQLEqn4RBCb39dAYC84jI= +github.com/charmbracelet/x/ansi v0.11.7/go.mod h1:9qGpnAVYz+8ACONkZBUWPtL7lulP9No6p1epAihUZwQ= github.com/charmbracelet/x/cellbuf v0.0.15 h1:ur3pZy0o6z/R7EylET877CBxaiE1Sp1GMxoFPAIztPI= github.com/charmbracelet/x/cellbuf v0.0.15/go.mod h1:J1YVbR7MUuEGIFPCaaZ96KDl5NoS0DAWkskup+mOY+Q= -github.com/charmbracelet/x/exp/golden v0.0.0-20260412004207-d48a6f9a4964 h1:MnHFuxk2JjZrblz08xgxEnTSYiaOjtzAR56lLwxS9II= -github.com/charmbracelet/x/exp/golden v0.0.0-20260412004207-d48a6f9a4964/go.mod h1:6fMpcW6iwN/kX+xJ52eqVWsDiBTe0UJD24JLoHFe+P0= -github.com/charmbracelet/x/exp/slice v0.0.0-20260412004207-d48a6f9a4964 h1:K9MkMMAWbN+SWnok8FJ5DBOFqoTSjhhCr7mzzQfo9II= -github.com/charmbracelet/x/exp/slice v0.0.0-20260412004207-d48a6f9a4964/go.mod h1:vqEfX6xzqW1pKKZUUiFOKg0OQ7bCh54Q2vR/tserrRA= +github.com/charmbracelet/x/exp/golden v0.0.0-20260427100455-1ea3e7f8134f h1:W1dl4Koqo1MF76W+dX8gsryCBw2qoQjnU7v3+7oddhs= +github.com/charmbracelet/x/exp/golden v0.0.0-20260427100455-1ea3e7f8134f/go.mod h1:6fMpcW6iwN/kX+xJ52eqVWsDiBTe0UJD24JLoHFe+P0= +github.com/charmbracelet/x/exp/slice v0.0.0-20260427100455-1ea3e7f8134f h1:oOjh6v/BYfyvtpVnXKxmjsYnVs62hmWCwNM8wfkGr/M= +github.com/charmbracelet/x/exp/slice v0.0.0-20260427100455-1ea3e7f8134f/go.mod h1:vqEfX6xzqW1pKKZUUiFOKg0OQ7bCh54Q2vR/tserrRA= github.com/charmbracelet/x/term v0.2.2 h1:xVRT/S2ZcKdhhOuSP4t5cLi5o+JxklsoEObBSgfgZRk= github.com/charmbracelet/x/term v0.2.2/go.mod h1:kF8CY5RddLWrsgVwpw4kAa6TESp6EB5y3uxGLeCqzAI= github.com/clipperhouse/displaywidth v0.11.0 h1:lBc6kY44VFw+TDx4I8opi/EtL9m20WSEFgwIwO+UVM8= @@ -69,12 +69,10 @@ github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 h1:5RVFMOWjMyRy8cARdy79nAmgYw3h github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1/go.mod h1:ZXNYxsqcloTdSy/rNShjYzMhyjf0LaoftYK0p+A3h40= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/djthorpe/go-auth v0.0.1 h1:jgfEleWzgOFK8ApXUUVF/eMSmzLrMS8Ufh7gUNJdrDs= -github.com/djthorpe/go-auth v0.0.1/go.mod h1:msFm8vpg82wa5yyKlekMCtfSxbzYhreDUScXFpfKkFo= -github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ= -github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= -github.com/docker/go-connections v0.6.0 h1:LlMG9azAe1TqfR7sO+NJttz1gy6KO7VJBh+pMmjSD94= -github.com/docker/go-connections v0.6.0/go.mod h1:AahvXYshr6JgfUJGdDCs2b5EZG/vmaMAntpSFH5BFKE= +github.com/dlclark/regexp2 v1.12.0 h1:0j4c5qQmnC6XOWNjP3PIXURXN2gWx76rd3KvgdPkCz8= +github.com/dlclark/regexp2 v1.12.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= +github.com/docker/go-connections v0.7.0 h1:6SsRfJddP22WMrCkj19x9WKjEDTB+ahsdiGYf0mN39c= +github.com/docker/go-connections v0.7.0/go.mod h1:no1qkHdjq7kLMGUXYAduOhYPSJxxvgWBh7ogVvptn3Q= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/ebitengine/purego v0.10.0 h1:QIw4xfpWT6GWTzaW5XEKy3HXoqrJGx1ijYHzTF0/ISU= @@ -101,22 +99,22 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/jsonschema-go v0.4.2 h1:tmrUohrwoLZZS/P3x7ex0WAVknEkBZM46iALbcqoRA8= -github.com/google/jsonschema-go v0.4.2/go.mod h1:r5quNTdLOYEz95Ru18zA0ydNbBuYoo9tgaYcxEYhJVE= +github.com/google/jsonschema-go v0.4.3 h1:/DBOLZTfDow7pe2GmaJNhltueGTtDKICi8V8p+DQPd0= +github.com/google/jsonschema-go v0.4.3/go.mod h1:r5quNTdLOYEz95Ru18zA0ydNbBuYoo9tgaYcxEYhJVE= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8= github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 h1:5VipnvEpbqr2gA2VbM+nYVbkIF28c5ZQfqCBQ5g2xfk= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0/go.mod h1:Hyl3n6Twe1hvtd9XUXDec4pTvgMSEixRuQKPTMH2bNs= github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgx/v5 v5.9.1 h1:uwrxJXBnx76nyISkhr33kQLlUqjv7et7b9FjCen/tdc= -github.com/jackc/pgx/v5 v5.9.1/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= +github.com/jackc/pgx/v5 v5.9.2 h1:3ZhOzMWnR4yJ+RW1XImIPsD1aNSz4T4fyP7zlQb56hw= +github.com/jackc/pgx/v5 v5.9.2/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE= @@ -143,8 +141,8 @@ github.com/lufia/plan9stats v0.0.0-20260330125221-c963978e514e h1:Q6MvJtQK/iRcRt github.com/lufia/plan9stats v0.0.0-20260330125221-c963978e514e/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg= github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE= github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/mattn/go-isatty v0.0.21 h1:xYae+lCNBP7QuW4PUnNG61ffM4hVIfm+zUzDuSzYLGs= -github.com/mattn/go-isatty v0.0.21/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4= +github.com/mattn/go-isatty v0.0.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw4= +github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4= github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= @@ -156,10 +154,10 @@ github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3N github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= github.com/moby/go-archive v0.2.0 h1:zg5QDUM2mi0JIM9fdQZWC7U8+2ZfixfTYoHL7rWUcP8= github.com/moby/go-archive v0.2.0/go.mod h1:mNeivT14o8xU+5q1YnNrkQVpK+dnNe/K6fHqnTg4qPU= -github.com/moby/moby/api v1.54.1 h1:TqVzuJkOLsgLDDwNLmYqACUuTehOHRGKiPhvH8V3Nn4= -github.com/moby/moby/api v1.54.1/go.mod h1:+RQ6wluLwtYaTd1WnPLykIDPekkuyD/ROWQClE83pzs= -github.com/moby/moby/client v0.4.0 h1:S+2XegzHQrrvTCvF6s5HFzcrywWQmuVnhOXe2kiWjIw= -github.com/moby/moby/client v0.4.0/go.mod h1:QWPbvWchQbxBNdaLSpoKpCdf5E+WxFAgNHogCWDoa7g= +github.com/moby/moby/api v1.54.2 h1:wiat9QAhnDQjA7wk1kh/TqHz2I1uUA7M7t9SAl/JNXg= +github.com/moby/moby/api v1.54.2/go.mod h1:+RQ6wluLwtYaTd1WnPLykIDPekkuyD/ROWQClE83pzs= +github.com/moby/moby/client v0.4.1 h1:DMQgisVoMkmMs7fp3ROSdiBnoAu8+vo3GggFl06M/wY= +github.com/moby/moby/client v0.4.1/go.mod h1:z52C9O2POPOsnxZAy//WtKcQ32P+jT/NGeXu/7nfjGQ= github.com/moby/patternmatcher v0.6.1 h1:qlhtafmr6kgMIJjKJMDmMWq7WLkKIo23hsrpR3x084U= github.com/moby/patternmatcher v0.6.1/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU= @@ -180,12 +178,16 @@ github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc= github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk= +github.com/mutablelogic/go-auth v0.0.14 h1:4oK+NOuTLLVb7LxlCI3fuzuuCer4hG5/nfdaMbnecKE= +github.com/mutablelogic/go-auth v0.0.14/go.mod h1:LVy12hxaci0i+zCEtmu35GJctvJHylsNHvkRjpjs7Lc= github.com/mutablelogic/go-client v1.4.9 h1:1JHLha6u0u0mEQEHc4K0Pq6EJMwd8F0DR/ahQrzTAlA= github.com/mutablelogic/go-client v1.4.9/go.mod h1:g8c6RlvIC0wC5rpoqtqk7eznBxormwrxArxH9I5rNRQ= -github.com/mutablelogic/go-pg v1.1.12 h1:91CM+1qPXr67HnhYXvSDuAP04rHYnTmVlWWDRcr/HZs= -github.com/mutablelogic/go-pg v1.1.12/go.mod h1:79U/DqCLhiAEtCDD0xudUhWDF836Okzb3GOGoInDP34= -github.com/mutablelogic/go-server v1.6.24 h1:TzvtNYSyfu57PzDSoPr8rXRA9zM/IhdGeOM6jkUFMAo= -github.com/mutablelogic/go-server v1.6.24/go.mod h1:Ey+p09lrV1T54szrJi9hlbknRlTvHLxsfo3h6nyxurk= +github.com/mutablelogic/go-pg v1.1.14 h1:CkHWIet3/5x1StbIHhmxVPk9ZAR3tiVYZM69aShSPw4= +github.com/mutablelogic/go-pg v1.1.14/go.mod h1:gVlww7AFL4bzpeQwvDO+ozUQZL4bQLbcI6ICgG5R1pg= +github.com/mutablelogic/go-server v1.6.34 h1:fkeZM4Raaryt86/HDzVruQeXBCpvLoB725PSIpQWHS8= +github.com/mutablelogic/go-server v1.6.34/go.mod h1:WEitTi2S39tM0xkmhm0aMNzb7NqhkaqJmwfHpaVtycw= +github.com/mutablelogic/go-tokenizer v0.0.3 h1:6oaa80TaAl+nVpd+M9QhlJPbP7y5/thq4d0dKjreiLs= +github.com/mutablelogic/go-tokenizer v0.0.3/go.mod h1:zdAyIhfqUKxFXb8MwChbXNwMOZt/5NlUylmx6Qjr4v8= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= @@ -230,6 +232,8 @@ github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavM github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4= github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4= +github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 h1:ilQV1hzziu+LLM3zUTJ0trRztfwgjqKnBWNtSRkbmwM= +github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78/go.mod h1:aL8wCCfTfSfmXjznFBSZNN13rSJjlIOI1fUNAtF7rmI= github.com/yuin/goldmark v1.8.2 h1:kEGpgqJXdgbkhcOgBxkC0X0PmoPG1ZyoZ117rDVp4zE= github.com/yuin/goldmark v1.8.2/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg= github.com/yuin/goldmark-emoji v1.0.6 h1:QWfF2FYaXwL74tfGOW5izeiZepUDroDJfWubQI9HTHs= @@ -301,10 +305,10 @@ golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= -google.golang.org/genproto/googleapis/api v0.0.0-20260406210006-6f92a3bedf2d h1:/aDRtSZJjyLQzm75d+a1wOJaqyKBMvIAfeQmoa3ORiI= -google.golang.org/genproto/googleapis/api v0.0.0-20260406210006-6f92a3bedf2d/go.mod h1:etfGUgejTiadZAUaEP14NP97xi1RGeawqkjDARA/UOs= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260406210006-6f92a3bedf2d h1:wT2n40TBqFY6wiwazVK9/iTWbsQrgk5ZfCSVFLO9LQA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260406210006-6f92a3bedf2d/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/genproto/googleapis/api v0.0.0-20260427160629-7cedc36a6bc4 h1:yOzSCGPx+cp5VO7IxvZ9SBFF7j1tZVcNtlHR2iYKtVo= +google.golang.org/genproto/googleapis/api v0.0.0-20260427160629-7cedc36a6bc4/go.mod h1:Q9HWtNeE7tM9npdIsEvqXj1QJIvVoeAV3rtXtS715Cw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260427160629-7cedc36a6bc4 h1:tEkOQcXgF6dH1G+MVKZrfpYvozGrzb91k6ha7jireSM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260427160629-7cedc36a6bc4/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM= google.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= diff --git a/heartbeat/manager/list.go b/heartbeat/manager/list.go index 4a17bb3..1a2f37f 100644 --- a/heartbeat/manager/list.go +++ b/heartbeat/manager/list.go @@ -4,7 +4,7 @@ import ( "context" // Packages - auth "github.com/djthorpe/go-auth/schema/auth" + auth "github.com/mutablelogic/go-auth/auth/schema" otel "github.com/mutablelogic/go-client/pkg/otel" schema "github.com/mutablelogic/go-llm/heartbeat/schema" pg "github.com/mutablelogic/go-pg" diff --git a/kernel/cmd/channel_test.go b/kernel/cmd/channel_test.go index ec3e997..c2d1f04 100644 --- a/kernel/cmd/channel_test.go +++ b/kernel/cmd/channel_test.go @@ -10,7 +10,7 @@ import ( schema "github.com/mutablelogic/go-llm/kernel/schema" tui "github.com/mutablelogic/go-llm/pkg/tui" assert "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" + require "github.com/stretchr/testify/require" ) func TestChannelPayload(t *testing.T) { diff --git a/kernel/cmd/connector_test.go b/kernel/cmd/connector_test.go index 68d1154..10dbc27 100644 --- a/kernel/cmd/connector_test.go +++ b/kernel/cmd/connector_test.go @@ -8,7 +8,7 @@ import ( "testing" // Packages - oidc "github.com/djthorpe/go-auth/pkg/oidc" + oidc "github.com/mutablelogic/go-auth/auth/oidc" schema "github.com/mutablelogic/go-llm/kernel/schema" httpresponse "github.com/mutablelogic/go-server/pkg/httpresponse" assert "github.com/stretchr/testify/assert" diff --git a/kernel/cmd/embedding_test.go b/kernel/cmd/embedding_test.go index 008684f..ccccfbf 100644 --- a/kernel/cmd/embedding_test.go +++ b/kernel/cmd/embedding_test.go @@ -6,6 +6,7 @@ import ( "path/filepath" "testing" + // Packages schema "github.com/mutablelogic/go-llm/kernel/schema" assert "github.com/stretchr/testify/assert" require "github.com/stretchr/testify/require" diff --git a/kernel/cmd/server.go b/kernel/cmd/server.go index e6c8cfa..f0f24dc 100644 --- a/kernel/cmd/server.go +++ b/kernel/cmd/server.go @@ -7,8 +7,8 @@ import ( "io/fs" // Packages - authmanager "github.com/djthorpe/go-auth/pkg/authmanager" - authhanders "github.com/djthorpe/go-auth/pkg/httphandler/authmanager" + authhanders "github.com/mutablelogic/go-auth/auth/httphandler" + authmanager "github.com/mutablelogic/go-auth/auth/manager" client "github.com/mutablelogic/go-client" llm "github.com/mutablelogic/go-llm" agent "github.com/mutablelogic/go-llm/etc/agent" diff --git a/kernel/httpclient/client.go b/kernel/httpclient/client.go index 52bf0d2..87fed28 100644 --- a/kernel/httpclient/client.go +++ b/kernel/httpclient/client.go @@ -2,7 +2,7 @@ package httpclient import ( // Packages - authclient "github.com/djthorpe/go-auth/pkg/httpclient/auth" + authclient "github.com/mutablelogic/go-auth/auth/httpclient" client "github.com/mutablelogic/go-client" ) diff --git a/kernel/httphandler/agent.go b/kernel/httphandler/agent.go index bde421d..f3b74f3 100644 --- a/kernel/httphandler/agent.go +++ b/kernel/httphandler/agent.go @@ -5,7 +5,7 @@ import ( "net/http" // Packages - middleware "github.com/djthorpe/go-auth/pkg/middleware" + middleware "github.com/mutablelogic/go-auth/auth/middleware" llmmanager "github.com/mutablelogic/go-llm/kernel/manager" schema "github.com/mutablelogic/go-llm/kernel/schema" httprequest "github.com/mutablelogic/go-server/pkg/httprequest" diff --git a/kernel/httphandler/ask.go b/kernel/httphandler/ask.go index 7e0d54c..b3c2b05 100644 --- a/kernel/httphandler/ask.go +++ b/kernel/httphandler/ask.go @@ -5,10 +5,10 @@ import ( "net/http" // Packages - middleware "github.com/djthorpe/go-auth/pkg/middleware" + middleware "github.com/mutablelogic/go-auth/auth/middleware" llmmanager "github.com/mutablelogic/go-llm/kernel/manager" - opt "github.com/mutablelogic/go-llm/pkg/opt" schema "github.com/mutablelogic/go-llm/kernel/schema" + opt "github.com/mutablelogic/go-llm/pkg/opt" httprequest "github.com/mutablelogic/go-server/pkg/httprequest" httpresponse "github.com/mutablelogic/go-server/pkg/httpresponse" jsonschema "github.com/mutablelogic/go-server/pkg/jsonschema" diff --git a/kernel/httphandler/channel.go b/kernel/httphandler/channel.go index 730cdca..bdde025 100644 --- a/kernel/httphandler/channel.go +++ b/kernel/httphandler/channel.go @@ -11,8 +11,8 @@ import ( "time" // Packages - middleware "github.com/djthorpe/go-auth/pkg/middleware" uuid "github.com/google/uuid" + middleware "github.com/mutablelogic/go-auth/auth/middleware" llmmanager "github.com/mutablelogic/go-llm/kernel/manager" schema "github.com/mutablelogic/go-llm/kernel/schema" httprequest "github.com/mutablelogic/go-server/pkg/httprequest" diff --git a/kernel/httphandler/chat.go b/kernel/httphandler/chat.go index c282225..ef61f4e 100644 --- a/kernel/httphandler/chat.go +++ b/kernel/httphandler/chat.go @@ -5,10 +5,10 @@ import ( "net/http" // Packages - middleware "github.com/djthorpe/go-auth/pkg/middleware" + middleware "github.com/mutablelogic/go-auth/auth/middleware" llmmanager "github.com/mutablelogic/go-llm/kernel/manager" - opt "github.com/mutablelogic/go-llm/pkg/opt" schema "github.com/mutablelogic/go-llm/kernel/schema" + opt "github.com/mutablelogic/go-llm/pkg/opt" httprequest "github.com/mutablelogic/go-server/pkg/httprequest" httpresponse "github.com/mutablelogic/go-server/pkg/httpresponse" jsonschema "github.com/mutablelogic/go-server/pkg/jsonschema" diff --git a/kernel/httphandler/chat_test.go b/kernel/httphandler/chat_test.go index 1f85716..c3e856f 100644 --- a/kernel/httphandler/chat_test.go +++ b/kernel/httphandler/chat_test.go @@ -11,8 +11,8 @@ import ( "testing" // Packages - auth "github.com/djthorpe/go-auth/schema/auth" uuid "github.com/google/uuid" + auth "github.com/mutablelogic/go-auth/auth/schema" schema "github.com/mutablelogic/go-llm/kernel/schema" types "github.com/mutablelogic/go-server/pkg/types" ) diff --git a/kernel/httphandler/connector.go b/kernel/httphandler/connector.go index df084e2..eaad24b 100644 --- a/kernel/httphandler/connector.go +++ b/kernel/httphandler/connector.go @@ -7,7 +7,7 @@ import ( "net/url" // Packages - middleware "github.com/djthorpe/go-auth/pkg/middleware" + middleware "github.com/mutablelogic/go-auth/auth/middleware" llmmanager "github.com/mutablelogic/go-llm/kernel/manager" schema "github.com/mutablelogic/go-llm/kernel/schema" httprequest "github.com/mutablelogic/go-server/pkg/httprequest" diff --git a/kernel/httphandler/embedding.go b/kernel/httphandler/embedding.go index 25c982c..6c6d4ec 100644 --- a/kernel/httphandler/embedding.go +++ b/kernel/httphandler/embedding.go @@ -5,7 +5,7 @@ import ( "net/http" // Packages - middleware "github.com/djthorpe/go-auth/pkg/middleware" + middleware "github.com/mutablelogic/go-auth/auth/middleware" llmmanager "github.com/mutablelogic/go-llm/kernel/manager" schema "github.com/mutablelogic/go-llm/kernel/schema" httprequest "github.com/mutablelogic/go-server/pkg/httprequest" diff --git a/kernel/httphandler/message.go b/kernel/httphandler/message.go index 520e7c6..51f0762 100644 --- a/kernel/httphandler/message.go +++ b/kernel/httphandler/message.go @@ -5,8 +5,8 @@ import ( "net/http" // Packages - middleware "github.com/djthorpe/go-auth/pkg/middleware" uuid "github.com/google/uuid" + middleware "github.com/mutablelogic/go-auth/auth/middleware" llmmanager "github.com/mutablelogic/go-llm/kernel/manager" schema "github.com/mutablelogic/go-llm/kernel/schema" httprequest "github.com/mutablelogic/go-server/pkg/httprequest" diff --git a/kernel/httphandler/model.go b/kernel/httphandler/model.go index 8f3f9e8..953db7b 100644 --- a/kernel/httphandler/model.go +++ b/kernel/httphandler/model.go @@ -5,10 +5,10 @@ import ( "net/http" // Packages - middleware "github.com/djthorpe/go-auth/pkg/middleware" + middleware "github.com/mutablelogic/go-auth/auth/middleware" llmmanager "github.com/mutablelogic/go-llm/kernel/manager" - opt "github.com/mutablelogic/go-llm/pkg/opt" schema "github.com/mutablelogic/go-llm/kernel/schema" + opt "github.com/mutablelogic/go-llm/pkg/opt" httprequest "github.com/mutablelogic/go-server/pkg/httprequest" httpresponse "github.com/mutablelogic/go-server/pkg/httpresponse" jsonschema "github.com/mutablelogic/go-server/pkg/jsonschema" diff --git a/kernel/httphandler/register.go b/kernel/httphandler/register.go index f95c465..db81afc 100644 --- a/kernel/httphandler/register.go +++ b/kernel/httphandler/register.go @@ -5,7 +5,7 @@ import ( "errors" // Packages - authmanager "github.com/djthorpe/go-auth/pkg/authmanager" + authmanager "github.com/mutablelogic/go-auth/auth/manager" llmmanager "github.com/mutablelogic/go-llm/kernel/manager" httprouter "github.com/mutablelogic/go-server/pkg/httprouter" ) diff --git a/kernel/httphandler/session.go b/kernel/httphandler/session.go index 672be62..6bfd94a 100644 --- a/kernel/httphandler/session.go +++ b/kernel/httphandler/session.go @@ -5,8 +5,8 @@ import ( "net/http" // Packages - middleware "github.com/djthorpe/go-auth/pkg/middleware" uuid "github.com/google/uuid" + middleware "github.com/mutablelogic/go-auth/auth/middleware" llmmanager "github.com/mutablelogic/go-llm/kernel/manager" schema "github.com/mutablelogic/go-llm/kernel/schema" httprequest "github.com/mutablelogic/go-server/pkg/httprequest" diff --git a/kernel/httphandler/tool.go b/kernel/httphandler/tool.go index a760cfe..132dc2a 100644 --- a/kernel/httphandler/tool.go +++ b/kernel/httphandler/tool.go @@ -7,7 +7,7 @@ import ( "net/url" // Packages - middleware "github.com/djthorpe/go-auth/pkg/middleware" + middleware "github.com/mutablelogic/go-auth/auth/middleware" llm "github.com/mutablelogic/go-llm" llmmanager "github.com/mutablelogic/go-llm/kernel/manager" schema "github.com/mutablelogic/go-llm/kernel/schema" diff --git a/kernel/manager/agent.go b/kernel/manager/agent.go index b2f12ab..f7b7c84 100644 --- a/kernel/manager/agent.go +++ b/kernel/manager/agent.go @@ -6,11 +6,11 @@ import ( "slices" // Packages - auth "github.com/djthorpe/go-auth/schema/auth" + auth "github.com/mutablelogic/go-auth/auth/schema" otel "github.com/mutablelogic/go-client/pkg/otel" llm "github.com/mutablelogic/go-llm" schema "github.com/mutablelogic/go-llm/kernel/schema" - "github.com/mutablelogic/go-llm/pkg/opt" + opt "github.com/mutablelogic/go-llm/pkg/opt" toolkit "github.com/mutablelogic/go-llm/toolkit" resource "github.com/mutablelogic/go-llm/toolkit/resource" types "github.com/mutablelogic/go-server/pkg/types" @@ -22,7 +22,7 @@ import ( // ListAgents returns paginated prompt metadata from the current toolkit, // exposing prompts externally as agents. -func (m *Manager) ListAgents(ctx context.Context, req schema.AgentListRequest, user *auth.User) (result *schema.AgentList, err error) { +func (m *Manager) ListAgents(ctx context.Context, req schema.AgentListRequest, user *auth.UserInfo) (result *schema.AgentList, err error) { // Otel span ctx, endSpan := otel.StartSpan(m.tracer, ctx, "ListAgents", attribute.String("req", req.String()), @@ -52,7 +52,7 @@ func (m *Manager) ListAgents(ctx context.Context, req schema.AgentListRequest, u } // GetAgent returns agent metadata by name, scoped by the user's accessible namespaces. -func (m *Manager) GetAgent(ctx context.Context, name string, user *auth.User) (result *schema.AgentMeta, err error) { +func (m *Manager) GetAgent(ctx context.Context, name string, user *auth.UserInfo) (result *schema.AgentMeta, err error) { // Otel span ctx, endSpan := otel.StartSpan(m.tracer, ctx, "GetAgent", attribute.String("name", name), @@ -80,7 +80,7 @@ func (m *Manager) GetAgent(ctx context.Context, name string, user *auth.User) (r } // CallAgent executes an agent by name with the given input, scoped by the user's accessible namespaces. -func (m *Manager) CallAgent(ctx context.Context, name string, req schema.CallAgentRequest, user *auth.User) (result llm.Resource, err error) { +func (m *Manager) CallAgent(ctx context.Context, name string, req schema.CallAgentRequest, user *auth.UserInfo) (result llm.Resource, err error) { // Otel span ctx, endSpan := otel.StartSpan(m.tracer, ctx, "CallAgent", attribute.String("name", name), @@ -136,7 +136,7 @@ func newAgentMeta(prompt llm.Prompt) schema.AgentMeta { } } -func (m *Manager) listAgents(ctx context.Context, req schema.AgentListRequest, user *auth.User) ([]llm.Prompt, uint, error) { +func (m *Manager) listAgents(ctx context.Context, req schema.AgentListRequest, user *auth.UserInfo) ([]llm.Prompt, uint, error) { var namespaces []string if user == nil { if req.Namespace != "" { diff --git a/kernel/manager/ask.go b/kernel/manager/ask.go index 1c883cf..02f1fcd 100644 --- a/kernel/manager/ask.go +++ b/kernel/manager/ask.go @@ -5,7 +5,8 @@ import ( "encoding/json" // Packages - auth "github.com/djthorpe/go-auth/schema/auth" + uuid "github.com/google/uuid" + auth "github.com/mutablelogic/go-auth/auth/schema" otel "github.com/mutablelogic/go-client/pkg/otel" llm "github.com/mutablelogic/go-llm" schema "github.com/mutablelogic/go-llm/kernel/schema" @@ -32,7 +33,7 @@ const ( // Ask processes a message and returns a response, outside of a session context (stateless). // If fn is non-nil, text chunks are streamed to the callback as they arrive. -func (m *Manager) Ask(ctx context.Context, request schema.AskRequest, user *auth.User, fn opt.StreamFn) (_ *schema.AskResponse, err error) { +func (m *Manager) Ask(ctx context.Context, request schema.AskRequest, user *auth.UserInfo, fn opt.StreamFn) (_ *schema.AskResponse, err error) { // Otel span ctx, endSpan := otel.StartSpan(m.tracer, ctx, "Ask", attribute.String("req", types.Stringify(request.AskRequestCore)), @@ -90,7 +91,7 @@ func (m *Manager) Ask(ctx context.Context, request schema.AskRequest, user *auth if response.Usage != nil { if _, err := m.CreateUsage(ctx, schema.UsageInsert{ Type: schema.UsageTypeAsk, - User: user.UUID(), + User: uuid.UUID(user.Sub), Model: model.Name, Provider: types.Ptr(model.OwnedBy), UsageMeta: types.Value(response.Usage), @@ -109,7 +110,7 @@ func (m *Manager) Ask(ctx context.Context, request schema.AskRequest, user *auth // generatorFromMeta resolves the model and generator client from the given // GeneratorMeta, and returns provider-specific options derived from the meta // fields (e.g. system prompt). This is reusable for both Ask and Chat. -func (m *Manager) generatorFromMeta(ctx context.Context, meta schema.GeneratorMeta, user *auth.User, context generationContext) (*schema.Provider, *schema.Model, llm.Generator, []opt.Opt, error) { +func (m *Manager) generatorFromMeta(ctx context.Context, meta schema.GeneratorMeta, user *auth.UserInfo, context generationContext) (*schema.Provider, *schema.Model, llm.Generator, []opt.Opt, error) { // Get candidate providers for user, or all candidates if no user is provided. providers, err := m.providersForUser(ctx, types.Value(meta.Provider), user) if err != nil { diff --git a/kernel/manager/ask_test.go b/kernel/manager/ask_test.go index d553746..ebdce94 100644 --- a/kernel/manager/ask_test.go +++ b/kernel/manager/ask_test.go @@ -5,7 +5,7 @@ import ( "testing" // Packages - auth "github.com/djthorpe/go-auth/schema/auth" + auth "github.com/mutablelogic/go-auth/auth/schema" schema "github.com/mutablelogic/go-llm/kernel/schema" opt "github.com/mutablelogic/go-llm/pkg/opt" llmtest "github.com/mutablelogic/go-llm/pkg/test" diff --git a/kernel/manager/chat.go b/kernel/manager/chat.go index 195a0de..1d8ccbf 100644 --- a/kernel/manager/chat.go +++ b/kernel/manager/chat.go @@ -10,8 +10,8 @@ import ( "sync" // Packages - auth "github.com/djthorpe/go-auth/schema/auth" uuid "github.com/google/uuid" + auth "github.com/mutablelogic/go-auth/auth/schema" otel "github.com/mutablelogic/go-client/pkg/otel" llm "github.com/mutablelogic/go-llm" schema "github.com/mutablelogic/go-llm/kernel/schema" @@ -50,7 +50,7 @@ const memorySearchToolKey = "memory__memory_search" // Chat processes a message within a session context (stateful). // If fn is non-nil, text chunks are streamed to the callback as they arrive. -func (m *Manager) Chat(ctx context.Context, req schema.ChatRequest, fn opt.StreamFn, user *auth.User, attachments ...llm.Resource) (_ *schema.ChatResponse, err error) { +func (m *Manager) Chat(ctx context.Context, req schema.ChatRequest, fn opt.StreamFn, user *auth.UserInfo, attachments ...llm.Resource) (_ *schema.ChatResponse, err error) { // Otel span ctx, endSpan := otel.StartSpan(m.tracer, ctx, "Chat", attribute.String("req", types.Stringify(req)), @@ -187,7 +187,7 @@ func (m *Manager) Chat(ctx context.Context, req schema.ChatRequest, fn opt.Strea return response, nil } -func (m *Manager) executeConversationTurn(ctx context.Context, session uuid.UUID, user *auth.User, provider *schema.Provider, model *schema.Model, generator llm.Generator, systemPrompt string, conversation *schema.Conversation, message *schema.Message, opts ...opt.Opt) (*conversationTurn, error) { +func (m *Manager) executeConversationTurn(ctx context.Context, session uuid.UUID, user *auth.UserInfo, provider *schema.Provider, model *schema.Model, generator llm.Generator, systemPrompt string, conversation *schema.Conversation, message *schema.Message, opts ...opt.Opt) (*conversationTurn, error) { startLen := conversation.Len() reply, usage, err := generator.WithSession(ctx, types.Value(model), conversation, message, opts...) if err != nil { @@ -206,7 +206,7 @@ func (m *Manager) executeConversationTurn(ctx context.Context, session uuid.UUID if turn.Usage != nil { turn.UsageEntry = &schema.UsageInsert{ Type: schema.UsageTypeChat, - User: user.UUID(), + User: uuid.UUID(user.Sub), Session: session, Model: model.Name, Provider: types.Ptr(model.OwnedBy), @@ -468,8 +468,8 @@ func (m *Manager) persistChatLoop(ctx context.Context, session uuid.UUID, messag }) } -func (m *Manager) conversationForSession(ctx context.Context, session uuid.UUID, user *auth.User) (schema.Conversation, error) { - conn := m.PoolConn.With("session", session, "user", user.UUID()) +func (m *Manager) conversationForSession(ctx context.Context, session uuid.UUID, user *auth.UserInfo) (schema.Conversation, error) { + conn := m.PoolConn.With("session", session, "user", user.Sub) req := schema.MessageListRequest{} conversation := make(schema.Conversation, 0) for { @@ -495,7 +495,7 @@ func (m *Manager) conversationForSession(ctx context.Context, session uuid.UUID, return conversation, nil } -func (m *Manager) toolsForUser(ctx context.Context, user *auth.User, tools []string) (toolMap, error) { +func (m *Manager) toolsForUser(ctx context.Context, user *auth.UserInfo, tools []string) (toolMap, error) { limit := toolSelectionPageSize req := schema.ToolListRequest{ OffsetLimit: pg.OffsetLimit{Limit: &limit}, diff --git a/kernel/manager/connector.go b/kernel/manager/connector.go index 3850f33..5cc8de7 100644 --- a/kernel/manager/connector.go +++ b/kernel/manager/connector.go @@ -6,13 +6,13 @@ import ( "strings" // Packages - authclient "github.com/djthorpe/go-auth/pkg/httpclient/auth" - "github.com/djthorpe/go-auth/pkg/oidc" - auth "github.com/djthorpe/go-auth/schema/auth" + authclient "github.com/mutablelogic/go-auth/auth/httpclient" + oidc "github.com/mutablelogic/go-auth/auth/oidc" + auth "github.com/mutablelogic/go-auth/auth/schema" otel "github.com/mutablelogic/go-client/pkg/otel" schema "github.com/mutablelogic/go-llm/kernel/schema" pg "github.com/mutablelogic/go-pg" - "github.com/mutablelogic/go-server/pkg/httpresponse" + httpresponse "github.com/mutablelogic/go-server/pkg/httpresponse" types "github.com/mutablelogic/go-server/pkg/types" attribute "go.opentelemetry.io/otel/attribute" ) @@ -31,7 +31,7 @@ type ConnectorProbe interface { // PUBLIC METHODS // CreateConnector validates and persists a connector insert request. -func (m *Manager) CreateConnector(ctx context.Context, req schema.ConnectorInsert, user *auth.User) (_ *schema.Connector, _ *oidc.BaseConfiguration, _ []string, err error) { +func (m *Manager) CreateConnector(ctx context.Context, req schema.ConnectorInsert, user *auth.UserInfo) (_ *schema.Connector, _ *oidc.BaseConfiguration, _ []string, err error) { // Otel span ctx, endSpan := otel.StartSpan(m.tracer, ctx, "CreateConnector", attribute.String("req", types.Stringify(req)), @@ -145,7 +145,7 @@ func (m *Manager) DeleteConnector(ctx context.Context, url string) (_ *schema.Co // GetConnector returns the connector for the given URL and, when user is set, // scopes access to public connectors or those accessible to the user's groups. -func (m *Manager) GetConnector(ctx context.Context, url string, user *auth.User) (_ *schema.Connector, err error) { +func (m *Manager) GetConnector(ctx context.Context, url string, user *auth.UserInfo) (_ *schema.Connector, err error) { ctx, endSpan := otel.StartSpan(m.tracer, ctx, "GetConnector", attribute.String("url", url), attribute.String("user", types.Stringify(user)), @@ -155,7 +155,7 @@ func (m *Manager) GetConnector(ctx context.Context, url string, user *auth.User) var result schema.Connector var conn pg.Conn = m.PoolConn if user != nil { - conn = conn.With("user", user.UUID()) + conn = conn.With("user", user.Sub) } if err := conn.Get(ctx, &result, schema.ConnectorURLSelector(url)); err != nil { return nil, normalizeConnectorError(url, err) @@ -205,7 +205,7 @@ func (m *Manager) UpdateConnector(ctx context.Context, url string, meta schema.C // ListConnectors lists connectors matching the request and, when user is set, // filters results to public connectors or those accessible to the user's groups. -func (m *Manager) ListConnectors(ctx context.Context, req schema.ConnectorListRequest, user *auth.User) (_ *schema.ConnectorList, err error) { +func (m *Manager) ListConnectors(ctx context.Context, req schema.ConnectorListRequest, user *auth.UserInfo) (_ *schema.ConnectorList, err error) { ctx, endSpan := otel.StartSpan(m.tracer, ctx, "ListConnectors", attribute.String("req", req.String()), attribute.String("user", types.Stringify(user)), @@ -216,7 +216,7 @@ func (m *Manager) ListConnectors(ctx context.Context, req schema.ConnectorListRe result := schema.ConnectorList{ConnectorListRequest: req} var conn pg.Conn = m.PoolConn if user != nil { - conn = conn.With("user", user.UUID()) + conn = conn.With("user", user.Sub) } if err := conn.List(ctx, &result, req); err != nil { return nil, pg.NormalizeError(err) diff --git a/kernel/manager/delegate.go b/kernel/manager/delegate.go index 4b09e0f..c298e0a 100644 --- a/kernel/manager/delegate.go +++ b/kernel/manager/delegate.go @@ -9,7 +9,7 @@ import ( llm "github.com/mutablelogic/go-llm" schema "github.com/mutablelogic/go-llm/kernel/schema" mcp "github.com/mutablelogic/go-llm/mcp/client" - "github.com/mutablelogic/go-llm/pkg/opt" + opt "github.com/mutablelogic/go-llm/pkg/opt" toolkit "github.com/mutablelogic/go-llm/toolkit" types "github.com/mutablelogic/go-server/pkg/types" ) diff --git a/kernel/manager/embedder.go b/kernel/manager/embedder.go index 64e9f99..d57c35b 100644 --- a/kernel/manager/embedder.go +++ b/kernel/manager/embedder.go @@ -5,7 +5,8 @@ import ( "strings" // Packages - auth "github.com/djthorpe/go-auth/schema/auth" + uuid "github.com/google/uuid" + auth "github.com/mutablelogic/go-auth/auth/schema" otel "github.com/mutablelogic/go-client/pkg/otel" llm "github.com/mutablelogic/go-llm" schema "github.com/mutablelogic/go-llm/kernel/schema" @@ -20,7 +21,7 @@ import ( // Embedding resolves an embedding-capable model for the user-scoped request and // returns one output vector per input string. -func (m *Manager) Embedding(ctx context.Context, request schema.EmbeddingRequest, user *auth.User) (_ *schema.EmbeddingResponse, err error) { +func (m *Manager) Embedding(ctx context.Context, request schema.EmbeddingRequest, user *auth.UserInfo) (_ *schema.EmbeddingResponse, err error) { // Otel span ctx, endSpan := otel.StartSpan(m.tracer, ctx, "Embedding", attribute.String("request", request.String()), @@ -119,7 +120,7 @@ func (m *Manager) Embedding(ctx context.Context, request schema.EmbeddingRequest if response.Usage != nil { if _, err := m.CreateUsage(ctx, schema.UsageInsert{ Type: schema.UsageTypeEmbedding, - User: user.UUID(), + User: uuid.UUID(user.Sub), Model: model.Name, Provider: types.Ptr(model.OwnedBy), UsageMeta: types.Value(response.Usage), diff --git a/kernel/manager/embedder_test.go b/kernel/manager/embedder_test.go index eb129ae..93596e8 100644 --- a/kernel/manager/embedder_test.go +++ b/kernel/manager/embedder_test.go @@ -6,7 +6,7 @@ import ( "testing" // Packages - auth "github.com/djthorpe/go-auth/schema/auth" + auth "github.com/mutablelogic/go-auth/auth/schema" schema "github.com/mutablelogic/go-llm/kernel/schema" llmtest "github.com/mutablelogic/go-llm/pkg/test" assert "github.com/stretchr/testify/assert" diff --git a/kernel/manager/message.go b/kernel/manager/message.go index 0675a51..9afc8a1 100644 --- a/kernel/manager/message.go +++ b/kernel/manager/message.go @@ -4,7 +4,8 @@ import ( "context" // Packages - auth "github.com/djthorpe/go-auth/schema/auth" + + auth "github.com/mutablelogic/go-auth/auth/schema" otel "github.com/mutablelogic/go-client/pkg/otel" schema "github.com/mutablelogic/go-llm/kernel/schema" pg "github.com/mutablelogic/go-pg" @@ -17,7 +18,7 @@ import ( // ListMessages returns messages for a single session, optionally filtered by request fields. // If user is non-nil, the session must be owned by that user. -func (m *Manager) ListMessages(ctx context.Context, req schema.MessageListRequest, user *auth.User) (_ *schema.MessageList, err error) { +func (m *Manager) ListMessages(ctx context.Context, req schema.MessageListRequest, user *auth.UserInfo) (_ *schema.MessageList, err error) { if len(req.Sessions) != 1 { return nil, schema.ErrBadParameter.With("exactly one message session is required") } @@ -35,7 +36,7 @@ func (m *Manager) ListMessages(ctx context.Context, req schema.MessageListReques } result := schema.MessageList{MessageListRequest: req} - if err := m.PoolConn.With("user", user.UUID()).List(ctx, &result, req); err != nil { + if err := m.PoolConn.With("user", user.Sub).List(ctx, &result, req); err != nil { return nil, pg.NormalizeError(err) } result.OffsetLimit.Clamp(uint64(result.Count)) diff --git a/kernel/manager/model.go b/kernel/manager/model.go index ceea1ae..2a02e5d 100644 --- a/kernel/manager/model.go +++ b/kernel/manager/model.go @@ -8,7 +8,7 @@ import ( "sync" // Packages - auth "github.com/djthorpe/go-auth/schema/auth" + auth "github.com/mutablelogic/go-auth/auth/schema" otel "github.com/mutablelogic/go-client/pkg/otel" llm "github.com/mutablelogic/go-llm" schema "github.com/mutablelogic/go-llm/kernel/schema" @@ -32,7 +32,7 @@ type downloaderCandidate struct { /////////////////////////////////////////////////////////////////////////////// // PUBLIC METHODS -func (m *Manager) ListModels(ctx context.Context, req schema.ModelListRequest, user *auth.User) (_ *schema.ModelList, err error) { +func (m *Manager) ListModels(ctx context.Context, req schema.ModelListRequest, user *auth.UserInfo) (_ *schema.ModelList, err error) { // Otel ctx, endSpan := otel.StartSpan(m.tracer, ctx, "ListModels", attribute.String("req", types.Stringify(req)), @@ -75,7 +75,7 @@ func (m *Manager) ListModels(ctx context.Context, req schema.ModelListRequest, u }, nil } -func (m *Manager) GetModel(ctx context.Context, req schema.GetModelRequest, user *auth.User) (_ *schema.Model, err error) { +func (m *Manager) GetModel(ctx context.Context, req schema.GetModelRequest, user *auth.UserInfo) (_ *schema.Model, err error) { // Otel ctx, endSpan := otel.StartSpan(m.tracer, ctx, "GetModel", attribute.String("req", types.Stringify(req)), @@ -102,7 +102,7 @@ func (m *Manager) GetModel(ctx context.Context, req schema.GetModelRequest, user return types.Ptr(models[0]), nil } -func (m *Manager) DownloadModel(ctx context.Context, req schema.DownloadModelRequest, user *auth.User, opts ...opt.Opt) (result *schema.Model, err error) { +func (m *Manager) DownloadModel(ctx context.Context, req schema.DownloadModelRequest, user *auth.UserInfo, opts ...opt.Opt) (result *schema.Model, err error) { // Otel span ctx, endSpan := otel.StartSpan(m.tracer, ctx, "DownloadModel", attribute.String("req", types.Stringify(req)), @@ -131,7 +131,7 @@ func (m *Manager) DownloadModel(ctx context.Context, req schema.DownloadModelReq } } -func (m *Manager) DeleteModel(ctx context.Context, req schema.DeleteModelRequest, user *auth.User) (result *schema.Model, err error) { +func (m *Manager) DeleteModel(ctx context.Context, req schema.DeleteModelRequest, user *auth.UserInfo) (result *schema.Model, err error) { ctx, endSpan := otel.StartSpan(m.tracer, ctx, "DeleteModel", attribute.String("req", types.Stringify(req)), attribute.String("user", types.Stringify(user)), @@ -173,7 +173,7 @@ func (m *Manager) DeleteModel(ctx context.Context, req schema.DeleteModelRequest /////////////////////////////////////////////////////////////////////////////// // PRIVATE METHODS -func (m *Manager) providersForUser(ctx context.Context, provider string, user *auth.User) ([]schema.Provider, error) { +func (m *Manager) providersForUser(ctx context.Context, provider string, user *auth.UserInfo) ([]schema.Provider, error) { providerReq := schema.ProviderListRequest{ Name: provider, Enabled: types.Ptr(true), @@ -197,7 +197,7 @@ func (m *Manager) providersForUser(ctx context.Context, provider string, user *a return result, nil } -func (m *Manager) downloaderCandidates(ctx context.Context, provider string, user *auth.User) ([]downloaderCandidate, error) { +func (m *Manager) downloaderCandidates(ctx context.Context, provider string, user *auth.UserInfo) ([]downloaderCandidate, error) { providers, err := m.providersForUser(ctx, provider, user) if err != nil { return nil, err diff --git a/kernel/manager/model_test.go b/kernel/manager/model_test.go index 3cafa33..7d18cbf 100644 --- a/kernel/manager/model_test.go +++ b/kernel/manager/model_test.go @@ -7,7 +7,7 @@ import ( "testing" // Packages - auth "github.com/djthorpe/go-auth/schema/auth" + auth "github.com/mutablelogic/go-auth/auth/schema" llm "github.com/mutablelogic/go-llm" schema "github.com/mutablelogic/go-llm/kernel/schema" opt "github.com/mutablelogic/go-llm/pkg/opt" diff --git a/kernel/manager/opt.go b/kernel/manager/opt.go index 1711916..98405bb 100644 --- a/kernel/manager/opt.go +++ b/kernel/manager/opt.go @@ -18,7 +18,7 @@ import ( "fmt" // Packages - crypto "github.com/djthorpe/go-auth/pkg/crypto" + crypto "github.com/mutablelogic/go-auth/crypto" client "github.com/mutablelogic/go-client" llm "github.com/mutablelogic/go-llm" schema "github.com/mutablelogic/go-llm/kernel/schema" diff --git a/kernel/manager/provider.go b/kernel/manager/provider.go index 4a1b8a2..ce0c8b6 100644 --- a/kernel/manager/provider.go +++ b/kernel/manager/provider.go @@ -5,7 +5,7 @@ import ( "errors" // Packages - auth "github.com/djthorpe/go-auth/schema/auth" + auth "github.com/mutablelogic/go-auth/auth/schema" schema "github.com/mutablelogic/go-llm/kernel/schema" pg "github.com/mutablelogic/go-pg" types "github.com/mutablelogic/go-server/pkg/types" @@ -51,11 +51,11 @@ func (m *Manager) ListProviders(ctx context.Context, req schema.ProviderListRequ return m.listProviders(ctx, req, nil) } -func (m *Manager) listProviders(ctx context.Context, req schema.ProviderListRequest, user *auth.User) (*schema.ProviderList, error) { +func (m *Manager) listProviders(ctx context.Context, req schema.ProviderListRequest, user *auth.UserInfo) (*schema.ProviderList, error) { result := schema.ProviderList{ProviderListRequest: req} var conn pg.Conn = m.PoolConn if user != nil { - conn = conn.With("user", user.UUID()) + conn = conn.With("user", user.Sub) } if err := conn.List(ctx, &result, req); err != nil { return nil, pg.NormalizeError(err) diff --git a/kernel/manager/session.go b/kernel/manager/session.go index 3fefce0..663eadd 100644 --- a/kernel/manager/session.go +++ b/kernel/manager/session.go @@ -5,8 +5,8 @@ import ( "errors" // Packages - auth "github.com/djthorpe/go-auth/schema/auth" uuid "github.com/google/uuid" + auth "github.com/mutablelogic/go-auth/auth/schema" otel "github.com/mutablelogic/go-client/pkg/otel" schema "github.com/mutablelogic/go-llm/kernel/schema" pg "github.com/mutablelogic/go-pg" @@ -22,7 +22,7 @@ import ( // If Parent is set, the parent session must exist, belong to the same user, // and its generator settings are used as defaults for the child session. // If user is nil, it creates a user-less session. -func (m *Manager) CreateSession(ctx context.Context, req schema.SessionInsert, user *auth.User) (_ *schema.Session, err error) { +func (m *Manager) CreateSession(ctx context.Context, req schema.SessionInsert, user *auth.UserInfo) (_ *schema.Session, err error) { // OTel span ctx, endSpan := otel.StartSpan(m.tracer, ctx, "CreateSession", attribute.String("req", req.String()), @@ -34,7 +34,7 @@ func (m *Manager) CreateSession(ctx context.Context, req schema.SessionInsert, u // meta merge + provider/model resolution + insert. var result schema.Session if err := m.PoolConn.Tx(ctx, func(conn pg.Conn) error { - conn = conn.With("user", user.UUID()) + conn = conn.With("user", user.Sub) // If a parent session is provided, fetch it (no user filter — we check // ownership explicitly), then merge generator settings as defaults. @@ -43,7 +43,7 @@ func (m *Manager) CreateSession(ctx context.Context, req schema.SessionInsert, u if err := conn.With("user", uuid.UUID{}).Get(ctx, &parent, schema.SessionIDSelector(req.Parent)); err != nil { return normalizeSessionError(req.Parent, err) } - if parent.User != user.UUID() { + if parent.User != uuid.UUID(user.Sub) { return httpresponse.ErrForbidden.With("parent session belongs to another user") } req.GeneratorMeta = parent.GeneratorMeta.MergeFrom(req.GeneratorMeta) @@ -68,7 +68,7 @@ func (m *Manager) CreateSession(ctx context.Context, req schema.SessionInsert, u // GetSession returns a session by ID. If user is non-nil, the session must be // owned by that user; otherwise ErrForbidden is returned. -func (m *Manager) GetSession(ctx context.Context, session uuid.UUID, user *auth.User) (_ *schema.Session, err error) { +func (m *Manager) GetSession(ctx context.Context, session uuid.UUID, user *auth.UserInfo) (_ *schema.Session, err error) { // OTel span ctx, endSpan := otel.StartSpan(m.tracer, ctx, "GetSession", attribute.String("id", session.String()), @@ -78,7 +78,7 @@ func (m *Manager) GetSession(ctx context.Context, session uuid.UUID, user *auth. // Get the session - if user is provided, ensure session belongs to that user. var result schema.Session - if err := m.PoolConn.With("user", user.UUID()).Get(ctx, &result, schema.SessionIDSelector(session)); err != nil { + if err := m.PoolConn.With("user", user.Sub).Get(ctx, &result, schema.SessionIDSelector(session)); err != nil { return nil, normalizeSessionError(session, err) } @@ -89,7 +89,7 @@ func (m *Manager) GetSession(ctx context.Context, session uuid.UUID, user *auth. // UpdateSession updates the metadata for a session and returns the updated session. // If user is non-nil, the session must be owned by that user. // The incoming GeneratorMeta is merged over the existing one (incoming fields win). -func (m *Manager) UpdateSession(ctx context.Context, session uuid.UUID, meta schema.SessionMeta, user *auth.User) (_ *schema.Session, err error) { +func (m *Manager) UpdateSession(ctx context.Context, session uuid.UUID, meta schema.SessionMeta, user *auth.UserInfo) (_ *schema.Session, err error) { // OTel span ctx, endSpan := otel.StartSpan(m.tracer, ctx, "UpdateSession", attribute.String("id", session.String()), @@ -101,7 +101,7 @@ func (m *Manager) UpdateSession(ctx context.Context, session uuid.UUID, meta sch // Fetch, merge GeneratorMeta, and update in one transaction. var result schema.Session if err := m.PoolConn.Tx(ctx, func(conn pg.Conn) error { - conn = conn.With("user", user.UUID()) + conn = conn.With("user", user.Sub) var existing schema.Session if err := conn.Get(ctx, &existing, schema.SessionIDSelector(session)); err != nil { return normalizeSessionError(session, err) @@ -132,7 +132,7 @@ func (m *Manager) UpdateSession(ctx context.Context, session uuid.UUID, meta sch // DeleteSession removes a session by ID and returns the deleted session. // If user is non-nil, the session must be owned by that user. -func (m *Manager) DeleteSession(ctx context.Context, session uuid.UUID, user *auth.User) (_ *schema.Session, err error) { +func (m *Manager) DeleteSession(ctx context.Context, session uuid.UUID, user *auth.UserInfo) (_ *schema.Session, err error) { // OTel span ctx, endSpan := otel.StartSpan(m.tracer, ctx, "DeleteSession", attribute.String("id", session.String()), @@ -142,7 +142,7 @@ func (m *Manager) DeleteSession(ctx context.Context, session uuid.UUID, user *au // Delete the session - if user is provided, ensure session belongs to that user. var result schema.Session - if err := m.PoolConn.With("user", user.UUID()).Delete(ctx, &result, schema.SessionIDSelector(session)); err != nil { + if err := m.PoolConn.With("user", user.Sub).Delete(ctx, &result, schema.SessionIDSelector(session)); err != nil { return nil, normalizeSessionError(session, err) } if m.sessionfeed != nil { @@ -155,7 +155,7 @@ func (m *Manager) DeleteSession(ctx context.Context, session uuid.UUID, user *au // ListSessions returns a paginated list of sessions matching the request. // If user is non-nil, only sessions owned by that user are returned. -func (m *Manager) ListSessions(ctx context.Context, req schema.SessionListRequest, user *auth.User) (_ *schema.SessionList, err error) { +func (m *Manager) ListSessions(ctx context.Context, req schema.SessionListRequest, user *auth.UserInfo) (_ *schema.SessionList, err error) { // OTel span ctx, endSpan := otel.StartSpan(m.tracer, ctx, "ListSessions", attribute.String("req", req.String()), @@ -164,7 +164,7 @@ func (m *Manager) ListSessions(ctx context.Context, req schema.SessionListReques defer func() { endSpan(err) }() result := schema.SessionList{SessionListRequest: req} - if err := m.PoolConn.With("user", user.UUID()).List(ctx, &result, req); err != nil { + if err := m.PoolConn.With("user", user.Sub).List(ctx, &result, req); err != nil { return nil, pg.NormalizeError(err) } result.OffsetLimit.Clamp(uint64(result.Count)) @@ -174,7 +174,7 @@ func (m *Manager) ListSessions(ctx context.Context, req schema.SessionListReques // SubscribeSession registers a callback for new persisted messages for a session. // The subscription is automatically removed when ctx is canceled. -func (m *Manager) SubscribeSession(ctx context.Context, session uuid.UUID, callback SessionFeedCallback, user *auth.User) error { +func (m *Manager) SubscribeSession(ctx context.Context, session uuid.UUID, callback SessionFeedCallback, user *auth.UserInfo) error { if m.sessionfeed == nil { return schema.ErrInternalServerError.With("session feed is not configured") } diff --git a/kernel/manager/tool.go b/kernel/manager/tool.go index 4d2803b..29b8205 100644 --- a/kernel/manager/tool.go +++ b/kernel/manager/tool.go @@ -6,7 +6,7 @@ import ( "slices" // Packages - auth "github.com/djthorpe/go-auth/schema/auth" + auth "github.com/mutablelogic/go-auth/auth/schema" otel "github.com/mutablelogic/go-client/pkg/otel" llm "github.com/mutablelogic/go-llm" schema "github.com/mutablelogic/go-llm/kernel/schema" @@ -20,7 +20,7 @@ import ( // PUBLIC METHODS // ListTools returns paginated tool metadata from the current toolkit. -func (m *Manager) ListTools(ctx context.Context, req schema.ToolListRequest, user *auth.User) (result *schema.ToolList, err error) { +func (m *Manager) ListTools(ctx context.Context, req schema.ToolListRequest, user *auth.UserInfo) (result *schema.ToolList, err error) { // Otel span ctx, endSpan := otel.StartSpan(m.tracer, ctx, "ListTools", attribute.String("request", req.String()), @@ -53,7 +53,7 @@ func (m *Manager) ListTools(ctx context.Context, req schema.ToolListRequest, use } // GetTool returns tool metadata by name, scoped by the user's accessible namespaces. -func (m *Manager) GetTool(ctx context.Context, name string, user *auth.User) (result *schema.ToolMeta, err error) { +func (m *Manager) GetTool(ctx context.Context, name string, user *auth.UserInfo) (result *schema.ToolMeta, err error) { // Otel span ctx, endSpan := otel.StartSpan(m.tracer, ctx, "GetTool", attribute.String("name", name), @@ -86,7 +86,7 @@ func (m *Manager) GetTool(ctx context.Context, name string, user *auth.User) (re } // CallTool executes a tool by name with the given input, scoped by the user's accessible namespaces. -func (m *Manager) CallTool(ctx context.Context, name string, req schema.CallToolRequest, user *auth.User) (result llm.Resource, err error) { +func (m *Manager) CallTool(ctx context.Context, name string, req schema.CallToolRequest, user *auth.UserInfo) (result llm.Resource, err error) { // Otel span ctx, endSpan := otel.StartSpan(m.tracer, ctx, "CallTool", attribute.String("name", name), @@ -125,7 +125,7 @@ func (m *Manager) CallTool(ctx context.Context, name string, req schema.CallTool /////////////////////////////////////////////////////////////////////////////// // PRIVATE METHODS -func (m *Manager) listTools(ctx context.Context, req schema.ToolListRequest, user *auth.User) ([]llm.Tool, uint, error) { +func (m *Manager) listTools(ctx context.Context, req schema.ToolListRequest, user *auth.UserInfo) ([]llm.Tool, uint, error) { var namespaces []string if user == nil { if req.Namespace != "" { @@ -163,7 +163,7 @@ func (m *Manager) listTools(ctx context.Context, req schema.ToolListRequest, use return resp.Tools, resp.Count, nil } -func (m *Manager) toolNamespacesForUser(ctx context.Context, user *auth.User) ([]string, error) { +func (m *Manager) toolNamespacesForUser(ctx context.Context, user *auth.UserInfo) ([]string, error) { if user == nil { return nil, nil } diff --git a/kernel/schema/connector.go b/kernel/schema/connector.go index 573c65b..d4de4ef 100644 --- a/kernel/schema/connector.go +++ b/kernel/schema/connector.go @@ -10,7 +10,7 @@ import ( "time" // Packages - oidc "github.com/djthorpe/go-auth/pkg/oidc" + oidc "github.com/mutablelogic/go-auth/auth/oidc" pg "github.com/mutablelogic/go-pg" types "github.com/mutablelogic/go-server/pkg/types" ) diff --git a/kernel/schema/http.go b/kernel/schema/http.go index 85e78f8..01d6836 100644 --- a/kernel/schema/http.go +++ b/kernel/schema/http.go @@ -8,7 +8,7 @@ import ( "net/url" // Packages - "github.com/mutablelogic/go-pg" + pg "github.com/mutablelogic/go-pg" types "github.com/mutablelogic/go-server/pkg/types" ) diff --git a/kernel/schema/table.go b/kernel/schema/table.go index aa31bed..19ead65 100644 --- a/kernel/schema/table.go +++ b/kernel/schema/table.go @@ -6,6 +6,7 @@ import ( "fmt" "strings" + // Packages uuid "github.com/google/uuid" types "github.com/mutablelogic/go-server/pkg/types" ) diff --git a/mcp/client/client.go b/mcp/client/client.go index 8c07689..e15139f 100644 --- a/mcp/client/client.go +++ b/mcp/client/client.go @@ -5,8 +5,8 @@ import ( "sync" // Packages - authclient "github.com/djthorpe/go-auth/pkg/httpclient/auth" sdkmcp "github.com/modelcontextprotocol/go-sdk/mcp" + authclient "github.com/mutablelogic/go-auth/auth/httpclient" client "github.com/mutablelogic/go-client" llm "github.com/mutablelogic/go-llm" ) diff --git a/mcp/client/connect.go b/mcp/client/connect.go index 3346fe4..d0e454b 100644 --- a/mcp/client/connect.go +++ b/mcp/client/connect.go @@ -6,8 +6,8 @@ import ( "time" // Packages - authclient "github.com/djthorpe/go-auth/pkg/httpclient/auth" sdkmcp "github.com/modelcontextprotocol/go-sdk/mcp" + authclient "github.com/mutablelogic/go-auth/auth/httpclient" transport "github.com/mutablelogic/go-client/pkg/transport" httpresponse "github.com/mutablelogic/go-server/pkg/httpresponse" types "github.com/mutablelogic/go-server/pkg/types" diff --git a/mcp/client/connect_test.go b/mcp/client/connect_test.go index 10ef41a..cb44e20 100644 --- a/mcp/client/connect_test.go +++ b/mcp/client/connect_test.go @@ -11,7 +11,7 @@ import ( "time" // Packages - authclient "github.com/djthorpe/go-auth/pkg/httpclient/auth" + authclient "github.com/mutablelogic/go-auth/auth/httpclient" server "github.com/mutablelogic/go-llm/mcp/server" httpresponse "github.com/mutablelogic/go-server/pkg/httpresponse" ) diff --git a/mcp/client/probe.go b/mcp/client/probe.go index debd8e5..7ab8a49 100644 --- a/mcp/client/probe.go +++ b/mcp/client/probe.go @@ -5,7 +5,7 @@ import ( "time" // Packages - authclient "github.com/djthorpe/go-auth/pkg/httpclient/auth" + authclient "github.com/mutablelogic/go-auth/auth/httpclient" schema "github.com/mutablelogic/go-llm/kernel/schema" types "github.com/mutablelogic/go-server/pkg/types" ) diff --git a/mcp/client/run.go b/mcp/client/run.go index 71f156e..83fd48c 100644 --- a/mcp/client/run.go +++ b/mcp/client/run.go @@ -6,7 +6,6 @@ import ( "time" // Packages - sdkmcp "github.com/modelcontextprotocol/go-sdk/mcp" llm "github.com/mutablelogic/go-llm" schema "github.com/mutablelogic/go-llm/kernel/schema" diff --git a/mcp/client/run_test.go b/mcp/client/run_test.go index 1a17a27..7ce6115 100644 --- a/mcp/client/run_test.go +++ b/mcp/client/run_test.go @@ -5,7 +5,6 @@ import ( "testing" // Packages - schema "github.com/mutablelogic/go-llm/kernel/schema" ) diff --git a/pkg/test/integration.go b/pkg/test/integration.go index ab5dfb3..33d05dc 100644 --- a/pkg/test/integration.go +++ b/pkg/test/integration.go @@ -13,8 +13,8 @@ import ( "time" // Packages - auth "github.com/djthorpe/go-auth/schema/auth" uuid "github.com/google/uuid" + auth "github.com/mutablelogic/go-auth/auth/schema" schema "github.com/mutablelogic/go-llm/kernel/schema" mock "github.com/mutablelogic/go-llm/mcp/mock" mcpserver "github.com/mutablelogic/go-llm/mcp/server" From 7c6e33f1a503304be8ae3ed1e0f5c7e7d67ae2d2 Mon Sep 17 00:00:00 2001 From: David Thorpe Date: Sat, 2 May 2026 09:20:44 +0200 Subject: [PATCH 2/4] Upgrades --- go.mod | 12 ++++++------ go.sum | 24 ++++++++++++------------ 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/go.mod b/go.mod index f4fea49..ce94b31 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/charmbracelet/lipgloss v1.1.1-0.20250404203927-76690c660834 github.com/google/jsonschema-go v0.4.3 github.com/google/uuid v1.6.0 - github.com/modelcontextprotocol/go-sdk v1.5.0 + github.com/modelcontextprotocol/go-sdk v1.6.0 github.com/muesli/termenv v0.16.0 github.com/mutablelogic/go-auth v0.0.14 github.com/mutablelogic/go-client v1.4.9 @@ -27,7 +27,7 @@ require ( dario.cat/mergo v1.0.2 // indirect github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/alecthomas/chroma/v2 v2.23.1 // indirect + github.com/alecthomas/chroma/v2 v2.24.1 // indirect github.com/alecthomas/kong v1.15.0 github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/aymerick/douceur v0.2.0 // indirect @@ -37,8 +37,8 @@ require ( github.com/charmbracelet/colorprofile v0.4.3 // indirect github.com/charmbracelet/x/ansi v0.11.7 // indirect github.com/charmbracelet/x/cellbuf v0.0.15 // indirect - github.com/charmbracelet/x/exp/golden v0.0.0-20260427100455-1ea3e7f8134f // indirect - github.com/charmbracelet/x/exp/slice v0.0.0-20260427100455-1ea3e7f8134f // indirect + github.com/charmbracelet/x/exp/golden v0.0.0-20260430013151-79116d1f37bd // indirect + github.com/charmbracelet/x/exp/slice v0.0.0-20260430013151-79116d1f37bd // indirect github.com/charmbracelet/x/term v0.2.2 // indirect github.com/clipperhouse/displaywidth v0.11.0 // indirect github.com/clipperhouse/uax29/v2 v2.7.0 // indirect @@ -69,7 +69,7 @@ require ( github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect github.com/jackc/pgx/v5 v5.9.2 // indirect github.com/jackc/puddle/v2 v2.2.2 // indirect - github.com/klauspost/compress v1.18.5 // indirect + github.com/klauspost/compress v1.18.6 // indirect github.com/lestrrat-go/blackmagic v1.0.4 // indirect github.com/lestrrat-go/httpcc v1.0.1 // indirect github.com/lestrrat-go/httprc v1.0.6 // indirect @@ -104,7 +104,7 @@ require ( github.com/rivo/uniseg v0.4.7 // indirect github.com/segmentio/asm v1.2.1 // indirect github.com/segmentio/encoding v0.5.4 // indirect - github.com/shirou/gopsutil/v4 v4.26.3 // indirect + github.com/shirou/gopsutil/v4 v4.26.4 // indirect github.com/sirupsen/logrus v1.9.4 // indirect github.com/testcontainers/testcontainers-go v0.42.0 // indirect github.com/tklauser/go-sysconf v0.3.16 // indirect diff --git a/go.sum b/go.sum index c31f896..5350484 100644 --- a/go.sum +++ b/go.sum @@ -8,8 +8,8 @@ github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERo github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= -github.com/alecthomas/chroma/v2 v2.23.1 h1:nv2AVZdTyClGbVQkIzlDm/rnhk1E9bU9nXwmZ/Vk/iY= -github.com/alecthomas/chroma/v2 v2.23.1/go.mod h1:NqVhfBR0lte5Ouh3DcthuUCTUpDC9cxBOfyMbMQPs3o= +github.com/alecthomas/chroma/v2 v2.24.1 h1:m5ffpfZbIb++k8AqFEKy9uVgY12xIQtBsQlc6DfZJQM= +github.com/alecthomas/chroma/v2 v2.24.1/go.mod h1:l+ohZ9xRXIbGe7cIW+YZgOGbvuVLjMps/FYN/CwuabI= github.com/alecthomas/kong v1.15.0 h1:BVJstKbpO73zKpmIu+m/aLRrNmWwxXPIGTNin9VmLVI= github.com/alecthomas/kong v1.15.0/go.mod h1:wrlbXem1CWqUV5Vbmss5ISYhsVPkBb1Yo7YKJghju2I= github.com/alecthomas/repr v0.5.2 h1:SU73FTI9D1P5UNtvseffFSGmdNci/O6RsqzeXJtP0Qs= @@ -38,10 +38,10 @@ github.com/charmbracelet/x/ansi v0.11.7 h1:kzv1kJvjg2S3r9KHo8hDdHFQLEqn4RBCb39dA github.com/charmbracelet/x/ansi v0.11.7/go.mod h1:9qGpnAVYz+8ACONkZBUWPtL7lulP9No6p1epAihUZwQ= github.com/charmbracelet/x/cellbuf v0.0.15 h1:ur3pZy0o6z/R7EylET877CBxaiE1Sp1GMxoFPAIztPI= github.com/charmbracelet/x/cellbuf v0.0.15/go.mod h1:J1YVbR7MUuEGIFPCaaZ96KDl5NoS0DAWkskup+mOY+Q= -github.com/charmbracelet/x/exp/golden v0.0.0-20260427100455-1ea3e7f8134f h1:W1dl4Koqo1MF76W+dX8gsryCBw2qoQjnU7v3+7oddhs= -github.com/charmbracelet/x/exp/golden v0.0.0-20260427100455-1ea3e7f8134f/go.mod h1:6fMpcW6iwN/kX+xJ52eqVWsDiBTe0UJD24JLoHFe+P0= -github.com/charmbracelet/x/exp/slice v0.0.0-20260427100455-1ea3e7f8134f h1:oOjh6v/BYfyvtpVnXKxmjsYnVs62hmWCwNM8wfkGr/M= -github.com/charmbracelet/x/exp/slice v0.0.0-20260427100455-1ea3e7f8134f/go.mod h1:vqEfX6xzqW1pKKZUUiFOKg0OQ7bCh54Q2vR/tserrRA= +github.com/charmbracelet/x/exp/golden v0.0.0-20260430013151-79116d1f37bd h1:N0gYk0lh6dfeb7iztIhDdLtg6ZGrFIAkDLD0mKoJwLM= +github.com/charmbracelet/x/exp/golden v0.0.0-20260430013151-79116d1f37bd/go.mod h1:6fMpcW6iwN/kX+xJ52eqVWsDiBTe0UJD24JLoHFe+P0= +github.com/charmbracelet/x/exp/slice v0.0.0-20260430013151-79116d1f37bd h1:IiiGJo5PdDEsDJFjsbGtDIUK/7ajl+5qwys5HUc7Uao= +github.com/charmbracelet/x/exp/slice v0.0.0-20260430013151-79116d1f37bd/go.mod h1:vqEfX6xzqW1pKKZUUiFOKg0OQ7bCh54Q2vR/tserrRA= github.com/charmbracelet/x/term v0.2.2 h1:xVRT/S2ZcKdhhOuSP4t5cLi5o+JxklsoEObBSgfgZRk= github.com/charmbracelet/x/term v0.2.2/go.mod h1:kF8CY5RddLWrsgVwpw4kAa6TESp6EB5y3uxGLeCqzAI= github.com/clipperhouse/displaywidth v0.11.0 h1:lBc6kY44VFw+TDx4I8opi/EtL9m20WSEFgwIwO+UVM8= @@ -117,8 +117,8 @@ github.com/jackc/pgx/v5 v5.9.2 h1:3ZhOzMWnR4yJ+RW1XImIPsD1aNSz4T4fyP7zlQb56hw= github.com/jackc/pgx/v5 v5.9.2/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= -github.com/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE= -github.com/klauspost/compress v1.18.5/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= +github.com/klauspost/compress v1.18.6 h1:2jupLlAwFm95+YDR+NwD2MEfFO9d4z4Prjl1XXDjuao= +github.com/klauspost/compress v1.18.6/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -168,8 +168,8 @@ github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= github.com/moby/term v0.5.2 h1:6qk3FJAFDs6i/q3W/pQ97SX192qKfZgGjCQqfCJkgzQ= github.com/moby/term v0.5.2/go.mod h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFLc= -github.com/modelcontextprotocol/go-sdk v1.5.0 h1:CHU0FIX9kpueNkxuYtfYQn1Z0slhFzBZuq+x6IiblIU= -github.com/modelcontextprotocol/go-sdk v1.5.0/go.mod h1:gggDIhoemhWs3BGkGwd1umzEXCEMMvAnhTrnbXJKKKA= +github.com/modelcontextprotocol/go-sdk v1.6.0 h1:PPLS3kn7WtOEnR+Af4X5H96SG0qSab8R/ZQT/HkhPkY= +github.com/modelcontextprotocol/go-sdk v1.6.0/go.mod h1:kzm3kzFL1/+AziGOE0nUs3gvPoNxMCvkxokMkuFapXQ= github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI= github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo= github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= @@ -209,8 +209,8 @@ github.com/segmentio/asm v1.2.1 h1:DTNbBqs57ioxAD4PrArqftgypG4/qNpXoJx8TVXxPR0= github.com/segmentio/asm v1.2.1/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= github.com/segmentio/encoding v0.5.4 h1:OW1VRern8Nw6ITAtwSZ7Idrl3MXCFwXHPgqESYfvNt0= github.com/segmentio/encoding v0.5.4/go.mod h1:HS1ZKa3kSN32ZHVZ7ZLPLXWvOVIiZtyJnO1gPH1sKt0= -github.com/shirou/gopsutil/v4 v4.26.3 h1:2ESdQt90yU3oXF/CdOlRCJxrP+Am1aBYubTMTfxJ1qc= -github.com/shirou/gopsutil/v4 v4.26.3/go.mod h1:LZ6ewCSkBqUpvSOf+LsTGnRinC6iaNUNMGBtDkJBaLQ= +github.com/shirou/gopsutil/v4 v4.26.4 h1:B4SXVbcwTyrocPHEmWBC4uCYr4Xcu3MK1TXqbprAOWY= +github.com/shirou/gopsutil/v4 v4.26.4/go.mod h1:LZ6ewCSkBqUpvSOf+LsTGnRinC6iaNUNMGBtDkJBaLQ= github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w= github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= From e5d923949814be7852db50cf99243c4c5e00c216 Mon Sep 17 00:00:00 2001 From: David Thorpe Date: Sun, 3 May 2026 08:20:49 +0200 Subject: [PATCH 3/4] Updated --- cmd/llm/main.go | 25 +++--- go.mod | 4 +- go.sum | 4 +- kernel/cmd2/auth.go | 23 ++++++ kernel/cmd2/server.go | 176 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 216 insertions(+), 16 deletions(-) create mode 100644 kernel/cmd2/auth.go create mode 100644 kernel/cmd2/server.go diff --git a/cmd/llm/main.go b/cmd/llm/main.go index 774cd30..71912f0 100644 --- a/cmd/llm/main.go +++ b/cmd/llm/main.go @@ -5,7 +5,7 @@ import ( "os" // Packages - llmcmd "github.com/mutablelogic/go-llm/kernel/cmd" + llm "github.com/mutablelogic/go-llm/kernel/cmd2" mcpcmd "github.com/mutablelogic/go-llm/mcp/cmd" servercmd "github.com/mutablelogic/go-server/pkg/cmd" version "github.com/mutablelogic/go-server/pkg/version" @@ -15,22 +15,23 @@ import ( // TYPES type CLI struct { - llmcmd.SessionCommands - llmcmd.ChatCommands - llmcmd.ChannelCommands - llmcmd.AskCommands - llmcmd.EmbeddingCommands - llmcmd.ConnectorCommands - llmcmd.ProviderCommands - llmcmd.ModelCommands - llmcmd.ToolCommands - llmcmd.AgentCommands + /* llm.SessionCommands + llm.ChatCommands + llm.ChannelCommands + llm.AskCommands + llm.EmbeddingCommands + llm.ConnectorCommands + llm.ProviderCommands + llm.ModelCommands + llm.ToolCommands + llm.AgentCommands + */ MCP mcpcmd.Commands `cmd:"" name:"mcp" help:"Interact directly with an MCP server." group:"MCP"` ServerCommands } type ServerCommands struct { - RunServer llmcmd.RunServer `cmd:"" name:"run" help:"Run the server." group:"SERVER"` + RunServer llm.RunServer `cmd:"" name:"run" help:"Run the server." group:"SERVER"` servercmd.OpenAPICommands } diff --git a/go.mod b/go.mod index ce94b31..c9f855a 100644 --- a/go.mod +++ b/go.mod @@ -12,8 +12,8 @@ require ( github.com/muesli/termenv v0.16.0 github.com/mutablelogic/go-auth v0.0.14 github.com/mutablelogic/go-client v1.4.9 - github.com/mutablelogic/go-pg v1.1.14 - github.com/mutablelogic/go-server v1.6.34 + github.com/mutablelogic/go-pg v1.1.15 + github.com/mutablelogic/go-server v1.6.36 github.com/stretchr/testify v1.11.1 go.opentelemetry.io/otel v1.43.0 go.opentelemetry.io/otel/trace v1.43.0 diff --git a/go.sum b/go.sum index 5350484..9b118e9 100644 --- a/go.sum +++ b/go.sum @@ -182,8 +182,8 @@ github.com/mutablelogic/go-auth v0.0.14 h1:4oK+NOuTLLVb7LxlCI3fuzuuCer4hG5/nfdaM github.com/mutablelogic/go-auth v0.0.14/go.mod h1:LVy12hxaci0i+zCEtmu35GJctvJHylsNHvkRjpjs7Lc= github.com/mutablelogic/go-client v1.4.9 h1:1JHLha6u0u0mEQEHc4K0Pq6EJMwd8F0DR/ahQrzTAlA= github.com/mutablelogic/go-client v1.4.9/go.mod h1:g8c6RlvIC0wC5rpoqtqk7eznBxormwrxArxH9I5rNRQ= -github.com/mutablelogic/go-pg v1.1.14 h1:CkHWIet3/5x1StbIHhmxVPk9ZAR3tiVYZM69aShSPw4= -github.com/mutablelogic/go-pg v1.1.14/go.mod h1:gVlww7AFL4bzpeQwvDO+ozUQZL4bQLbcI6ICgG5R1pg= +github.com/mutablelogic/go-pg v1.1.15 h1:NyJXuznbNHcNQZNWdhcgkkf3NZs38NaDi5Y+g3TYVy0= +github.com/mutablelogic/go-pg v1.1.15/go.mod h1:qBmZG6ZTL1l3UCAxfH/YrIS/P4hHojyd3zpzmAPaYBk= github.com/mutablelogic/go-server v1.6.34 h1:fkeZM4Raaryt86/HDzVruQeXBCpvLoB725PSIpQWHS8= github.com/mutablelogic/go-server v1.6.34/go.mod h1:WEitTi2S39tM0xkmhm0aMNzb7NqhkaqJmwfHpaVtycw= github.com/mutablelogic/go-tokenizer v0.0.3 h1:6oaa80TaAl+nVpd+M9QhlJPbP7y5/thq4d0dKjreiLs= diff --git a/kernel/cmd2/auth.go b/kernel/cmd2/auth.go new file mode 100644 index 0000000..50c93af --- /dev/null +++ b/kernel/cmd2/auth.go @@ -0,0 +1,23 @@ +package cmd + +import ( + // Packages + httpclient "github.com/mutablelogic/go-auth/auth/httpclient" + server "github.com/mutablelogic/go-server" +) + +/////////////////////////////////////////////////////////////////////////////// +// PUBLIC FUNCTIONS + +// WithAuth returns auth client configured from the global HTTP flags. +func WithAuth(ctx server.Cmd, fn func(*httpclient.Client, string) error) error { + endpoint, opts, err := ctx.ClientEndpoint() + if err != nil { + return err + } + client, err := httpclient.New(endpoint, opts...) + if err != nil { + return err + } + return fn(client, endpoint) +} diff --git a/kernel/cmd2/server.go b/kernel/cmd2/server.go new file mode 100644 index 0000000..323ae9a --- /dev/null +++ b/kernel/cmd2/server.go @@ -0,0 +1,176 @@ +package cmd + +import ( + "bytes" + "fmt" + "io/fs" + + // Packages + httpclient "github.com/mutablelogic/go-auth/auth/httpclient" + llm "github.com/mutablelogic/go-llm" + agent "github.com/mutablelogic/go-llm/etc/agent" + kernel "github.com/mutablelogic/go-llm/kernel/manager" + manager "github.com/mutablelogic/go-llm/kernel/manager" + prompt "github.com/mutablelogic/go-llm/toolkit/prompt" + pg "github.com/mutablelogic/go-pg" + pgcmd "github.com/mutablelogic/go-pg/pkg/cmd" + server "github.com/mutablelogic/go-server" + cmd "github.com/mutablelogic/go-server/pkg/cmd" + "github.com/mutablelogic/go-server/pkg/httprouter" + "golang.org/x/sync/errgroup" +) + +/////////////////////////////////////////////////////////////////////////////// +// TYPES + +type RunServer struct { + cmd.RunServer + pgcmd.PostgresFlags `embed:"" prefix:"pg."` + + // Schemas for tenancy + Schema struct { + LLM string `name:"llm" help:"PostgreSQL schema for LLM data." default:"llm"` + Auth string `name:"auth" help:"PostgreSQL schema for auth data." default:"auth"` + Memory string `name:"memory" help:"PostgreSQL schema for memory data." default:"memory"` + } `embed:"" prefix:"schema."` + + // Other flags + Passphrases []string `name:"passphrase" env:"${ENV_NAME}_PASSPHRASES" help:"One or more passphrases used to encrypt credentials."` +} + +/////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS + +func (runner *RunServer) Run(ctx server.Cmd) error { + // Connect to the database, if configured + conn, err := runner.PostgresFlags.Connect(ctx) + if err != nil { + return err + } else if conn == nil { + return fmt.Errorf("database connection is required") + } + + // Create an auth client and manager, and run the server + return WithAuth(ctx, func(auth *httpclient.Client, endpoint string) error { + return runner.WithManager(ctx, conn, func(manager *kernel.Manager) error { + // Sync providers before starting the server so that any configured providers are available immediately + ctx.Logger().DebugContext(ctx.Context(), "syncing providers before server startup") + if _, _, err := manager.SyncProviders(ctx.Context()); err != nil { + ctx.Logger().ErrorContext(ctx.Context(), "failed to sync llm providers before startup", "error", err.Error()) + } + + // Register HTTP handlers + runner.Register(func(router *httprouter.Router) error { + ctx.Logger().DebugContext(ctx.Context(), "TODO: registering handlers") + return nil + }) + + // Create an error group, so that the first error from any of the goroutines will + // be returned and the others will be cancelled + errgroup, errctx := errgroup.WithContext(ctx.Context()) + + // Run the server + errgroup.Go(func() error { + return runner.RunServer.Run(ctx.WithContext(errctx)) + }) + + // Run the kernel + errgroup.Go(func() error { + return manager.Run(errctx, ctx.Logger()) + }) + + // Wait until cancelled + return errgroup.Wait() + }) + }) +} + +/////////////////////////////////////////////////////////////////////////////// +// MANAGER WITH OPTIONS + +func (server *RunServer) WithManager(ctx server.Cmd, conn pg.PoolConn, fn func(*kernel.Manager) error) error { + // Gather manager options + opts, err := server.Opts(ctx) + if err != nil { + return err + } + + // Create an LLM kernel + manager, err := kernel.New(ctx.Context(), ctx.Name(), ctx.Version(), conn, opts...) + if err != nil { + return err + } + + // Call the function with the manager, and return any error + return fn(manager) +} + +func (server *RunServer) Opts(ctx server.Cmd) ([]manager.Opt, error) { + opts := []manager.Opt{} + + // Set passphrases for credential encryption + for i, passphrase := range server.Passphrases { + opts = append(opts, manager.WithPassphrase(uint64(i+1), passphrase)) + } + + // Get the client options from the environment + _, clientopts, err := ctx.ClientEndpoint() + if err != nil { + return nil, err + } + + // Get the prompts from the embedded filesystem and set them on the manager options + prompts, err := server.Prompts() + if err != nil { + return nil, err + } + opts = append(opts, manager.WithPrompts(prompts...)) + + // Return the options with the configured schemas and tracer + return append(opts, + manager.WithSchemas(server.Schema.LLM, server.Schema.Auth), + manager.WithTracer(ctx.Tracer()), + manager.WithMeter(ctx.Meter()), + manager.WithClientOpts(clientopts...), + ), nil +} + +func (server *RunServer) Prompts() ([]llm.Prompt, error) { + var prompts []llm.Prompt + err := fs.WalkDir(agent.FS, ".", func(path string, entry fs.DirEntry, err error) error { + if err != nil { + return err + } + if entry.IsDir() { + return nil + } + data, err := fs.ReadFile(agent.FS, path) + if err != nil { + return err + } + if len(data) == 0 { + return nil + } + // Read the prompt from the embedded filesystem and add it to the list of prompts + prompt, err := prompt.Read(&namedReader{Reader: bytes.NewReader(data), name: path}) + if err != nil { + return err + } else { + prompts = append(prompts, prompt) + } + return nil + }) + if err != nil { + return nil, err + } + return prompts, nil +} + +type namedReader struct { + *bytes.Reader + name string +} + +func (r *namedReader) Name() string { + return r.name +} From 4b064b323762656ff82892340d93edde5b830a2b Mon Sep 17 00:00:00 2001 From: David Thorpe Date: Thu, 11 Jun 2026 14:13:33 +0200 Subject: [PATCH 4/4] Updated mcp/server --- mcp/server/connector_test.go | 8 ++++++-- mcp/server/prompt.go | 10 +++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/mcp/server/connector_test.go b/mcp/server/connector_test.go index b255925..9f6f3ab 100644 --- a/mcp/server/connector_test.go +++ b/mcp/server/connector_test.go @@ -65,11 +65,15 @@ func (*mockPrompt) Title() string { return "Mock Prompt" } func (*mockPrompt) Description() string { return "Prompt from connector" } -func (*mockPrompt) Prepare(_ context.Context, input json.RawMessage) (string, []opt.Opt, error) { +func (*mockPrompt) Prepare(ctx context.Context, input ...llm.Resource) (string, []opt.Opt, error) { if len(input) == 0 { return "hello from prompt", nil, nil } - return string(input), nil, nil + data, err := input[0].Read(ctx) + if err != nil { + return "", nil, err + } + return string(data), nil, nil } func (*mockPrompt) MarshalJSON() ([]byte, error) { diff --git a/mcp/server/prompt.go b/mcp/server/prompt.go index 33d0dea..d4d709e 100644 --- a/mcp/server/prompt.go +++ b/mcp/server/prompt.go @@ -7,6 +7,7 @@ import ( // Packages sdkmcp "github.com/modelcontextprotocol/go-sdk/mcp" llm "github.com/mutablelogic/go-llm" + resource "github.com/mutablelogic/go-llm/toolkit/resource" ) /////////////////////////////////////////////////////////////////////////////// @@ -42,6 +43,7 @@ func promptFromPrompt(prompt llm.Prompt) *sdkmcp.Prompt { func promptHandlerFromPrompt(prompt llm.Prompt) sdkmcp.PromptHandler { return func(ctx context.Context, req *sdkmcp.GetPromptRequest) (*sdkmcp.GetPromptResult, error) { + resources := make([]llm.Resource, 0, 1) var raw json.RawMessage if req.Params != nil && len(req.Params.Arguments) > 0 { data, err := json.Marshal(req.Params.Arguments) @@ -49,9 +51,15 @@ func promptHandlerFromPrompt(prompt llm.Prompt) sdkmcp.PromptHandler { return nil, err } raw = data + + input, err := resource.JSON("arguments", raw) + if err != nil { + return nil, err + } + resources = append(resources, input) } - text, _, err := prompt.Prepare(ctx, raw) + text, _, err := prompt.Prepare(ctx, resources...) if err != nil { return nil, err }