Initial commit: omnichannel-mcp — MCP-сервер управления платформой Omnichannel
ci / test (push) Successful in 2m22s
ci / lint (push) Successful in 4m31s

This commit is contained in:
Maksim Totmin
2026-10-07 20:13:23 +07:00
commit fdbd4a4fb6
54 changed files with 5672 additions and 0 deletions
+46
View File
@@ -0,0 +1,46 @@
package configserver
import (
"errors"
"fmt"
)
// Сентинельные ошибки домена. MCP-слой различает их, чтобы выбрать между
// recoverable-ответом (`errorResult`) и инфраструктурной Go-ошибкой.
var (
// ErrNoConfig — не найден ни один конфиг (ни `-config`, ни OMNI_CONFIG_DIR).
ErrNoConfig = errors.New("конфиг не найден: задайте -config или per-agent omnichannel-mcp.json")
// ErrReadOnly — модуль в режиме только-чтение, мутация запрещена.
ErrReadOnly = errors.New("модуль в режиме read_only: изменяющие инструменты отключены")
// ErrConfirmRequired — разрушительная операция без confirm=\"true\".
ErrConfirmRequired = errors.New("операция требует confirm=\"true\"")
// ErrNoFrontRoots — не заданы front_roots, загрузка фронта запрещена.
ErrNoFrontRoots = errors.New("загрузка фронта выключена: не заданы front_roots в конфиге")
)
// APIError — доменная ошибка API config_server (4xx/5xx с телом {"error": ...}).
// Такие ошибки показываются модели (recoverable), чтобы она могла исправиться.
type APIError struct {
Status int
Message string
}
func (e *APIError) Error() string {
if e.Message == "" {
return fmt.Sprintf("config_server вернул HTTP %d", e.Status)
}
return fmt.Sprintf("config_server (HTTP %d): %s", e.Status, e.Message)
}
// ValidationError — доменная ошибка модуля (невалидный путь, лимит, политика).
// Тоже recoverable: модель может исправить аргументы.
type ValidationError struct {
Msg string
}
func (e *ValidationError) Error() string { return e.Msg }
// validationErrorf создаёт ValidationError с форматированием.
func validationErrorf(format string, args ...any) error {
return &ValidationError{Msg: fmt.Sprintf(format, args...)}
}