chore: bump localrecall to include PostgreSQL table-name sanitization fix
Pulls mudler/LocalRecall#48, which makes sanitizeTableName allowlist valid
identifier characters so collection names containing ':' (e.g. the per-user
"legacy-api-key:<agent>" namespace used by LocalAI) no longer break
PostgreSQL CREATE TABLE with "syntax error at or near ':'".
Ref: mudler/LocalAI#10375
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
chore: bump localrecall to index-backed RRF hybrid search
Pulls in mudler/LocalRecall#46 (merged), which rewrites the PostgreSQL
hybrid search using the canonical Reciprocal Rank Fusion pattern
(index-backed candidate retrieval + FULL OUTER JOIN + weighted RRF). Fixes
the full sequential scan that blew past the statement timeout on large
collections (mudler/LocalAI#10186).
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
Pulls LocalRecall@a7724fe which switches PDF extraction from
gen2brain/go-fitz to klippa-app/go-pdfium with the WebAssembly backend.
Fixes aarch64 link failures (`__isoc23_strtol` undefined reference) in
binaries that pull LocalRecall through cgo.
Pure dep bump — no LocalAGI source changes. Indirect graph picks up
go-pdfium + tetratelabs/wazero; drops gen2brain/go-fitz +
ebitengine/purego + jupiterrider/ffi.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
LocalRecall v0.6.0 swaps the PDF text extractor from dslipak/pdf to
gen2brain/go-fitz (libmupdf bindings) and wraps the call in a 60s
goroutine timeout. Fixes upload hangs that affected adversarial PDFs
(broken xref tables, encrypted, image-only without OCR) where the
previous parser would block indefinitely.
Pure dep bump — no LocalAGI source code changes. Indirect graph picks
up gen2brain/go-fitz, ebitengine/purego, jupiterrider/ffi; drops
dslipak/pdf.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
LocalRecall's NewPersistent{Chrome,LocalAI,Postgres}Collection now
return errors instead of os.Exit'ing on init failure. Bump the dep and
update newVectorEngine to consume the new signatures, surfacing failures
as a nil collection (the existing "engine misconfigured" code path)
instead of letting the upstream os.Exit kill the embedding process.
Without this, a transient embedding-service or PostgreSQL outage during
lazy RAG init would crash any long-running host (e.g. the LocalAI
distributed orchestrator) instead of degrading to "no RAG available".
RAGProviderFromState already handles a nil collection from
EnsureCollection by returning (nil, nil, false) to the agent pool, which
is the same path agents take when no RAG is configured — so callers
upstream need no further change.
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
Picks up the postgres backend fix where switching the embedding model
on an existing collection now resizes the VECTOR column instead of
failing every subsequent insert with SQLSTATE 22000.
* feat: implement 'agent run' CLI command (#448)
- Add 'local-agi agent run' command supporting agent name or config file
- Support 'local-agi agent run <name>' to run agent from registry (pool.json)
- Support 'local-agi agent run --config <file.json>' to run from JSON config
- Extract web server into 'local-agi serve' subcommand
- Implement agent name lookup from registry
- Add JSON config file parsing and validation
- Create standalone agent execution logic
- Add proper error handling for invalid inputs
- Reuse existing service factories (actions, connectors, filters, skills)
- Environment variable fallback for config values
- No web server - agent runs in foreground with clean SIGINT/SIGTERM handling
References: https://github.com/mudler/LocalAGI/issues/448
* refactor(cmd): use pool to start agent instead of duplicating logic
Replace ~220 lines of duplicated agent initialization code in
startStandaloneAgent() with a call to pool.StartAgentStandalone().
The new pool method delegates to the existing startAgentWithConfig(),
eliminating code duplication between the CLI and the pool.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: add default help command to root
* fix: default to serve command when no subcommand provided
The e2e tests fail because when the container starts with no arguments,
the root command shows help instead of starting the web server.
Changed the root command to call serveCmd.RunE() directly when no
subcommand is provided, ensuring the web server starts by default.
This fixes the CI e2e test failure where the web server wasn't starting.
* fix: add serve subcommand to Dockerfile ENTRYPOINT
* refactor: remove unused GetRAGProvider function
* refactor: centralize env var setup in cmd/env.go
---------
Co-authored-by: localai-bot <localai-bot@noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Updated github.com/mudler/cogito from
v0.9.2-0.20260223101954-070948df04f7 to
v0.9.2-0.20260225234859-b76691637703
Co-authored-by: Ettore Di Giacinto <mudler@users.noreply.github.com>
* WIP
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* Drop old webui
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* Almost there
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* It builds
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* Make it build
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* fixups, still doesn't work
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* unused now
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* Send result before closing
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* Fix observability
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* Drop MCP code and wire-up in cogito
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* Drop some templates
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* Keep reporting into conv
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* tests fixups
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* tests fixups
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* fixups
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* Do not complete observable during thought process
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* Update cogito
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* Fixups
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* Fixups
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* Fixups
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* Drop unneded option now
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* Fixups
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* Better handling of user tools
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* TEST
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* Add flake attempts
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* Revert "TEST"
This reverts commit 8b12a9fd03.
* tKeep indexing MCP actions
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* Split CI jobs to improve speed
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* CI optimizations
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* Bump timeout
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* Bump cogito
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* fix: always commit last progress
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* chore: better management of observables
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
---------
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* feat: switch to official MCP SDK
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
* Drop MCP Box
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
---------
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>