first commit

This commit is contained in:
Maksim Totmin
2026-10-01 09:50:59 +07:00
commit 4beb4b55d3
29 changed files with 3034 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
// Command forge-tools-lexicomai — MCP-сервер (stdio) для управления
// жизненным циклом продуктов Lexicom AI на выделенных машинах: инвентарь,
// статус, конфигурация, лицензии, health и диагностика.
//
// Архитектура такая же, как у остальных встроенных MCP-серверов: stdio-only,
// одиночный потокобезопасный Manager, ручные JSON-схемы, --health, graceful
// shutdown и live-reload конфига. Модуль намеренно НЕ дублирует удалённый
// exec/файлы/гипервизор/HTTP (это зоны других серверов): здесь только
// доменная семантика продукта, а SSH-транспорт к машинам — внутренняя
// «сантехника».
//
// Каноническое имя аддона: module forge-tools-lexicomai, сервер «lexicomai».
package main
import (
"flag"
"fmt"
"os"
"forge-tools-lexicomai/internal/lexicomai"
"forge-tools-lexicomai/internal/tools"
"git.totmin.ru/en2zmax/forge-toolkit"
"github.com/modelcontextprotocol/go-sdk/mcp"
)
func main() {
// --health: дешёвая проверка живости без чтения конфига и подключений.
if toolkit.Health() {
return
}
configPath := flag.String("config", "",
"путь к config.json (фолбэк, если нет per-agent <FORGE_TENANT_CONFIG>/lexicomai.json)")
flag.Parse()
// Конфиг: per-agent файл (live-reload) → статический -config. Источник,
// приоритет и фолбэк инкапсулированы в lexicomai.Loader.
loader := lexicomai.NewLoader(os.Getenv("FORGE_TENANT_CONFIG"), *configPath)
mgr := lexicomai.NewManager(loader)
defer mgr.Close()
if err := toolkit.Run("lexicomai", func(s *mcp.Server) {
tools.RegisterAll(s, mgr)
}); err != nil {
fmt.Fprintf(os.Stderr, "forge-tools-lexicomai: %v\n", err)
os.Exit(1)
}
}