agent/pkg/brain/brain.go
Snider 67658ec90c fix: imports forge.lthn.ai/core/mcp → dappco.re/go/mcp
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-24 21:40:04 +00:00

66 lines
1.8 KiB
Go

// SPDX-License-Identifier: EUPL-1.2
// Package brain provides an MCP subsystem that proxies OpenBrain knowledge
// store operations to the Laravel php-agentic backend via the IDE bridge.
package brain
import (
"context"
"dappco.re/go/agent/pkg/agentic"
core "dappco.re/go/core"
"dappco.re/go/mcp/pkg/mcp/ide"
"github.com/modelcontextprotocol/go-sdk/mcp"
)
// fs provides unrestricted filesystem access for shared brain credentials.
//
// keyPath := core.Concat(home, "/.claude/brain.key")
// if r := fs.Read(keyPath); r.OK {
// apiKey = core.Trim(r.Value.(string))
// }
var fs = agentic.LocalFs()
func fieldString(values map[string]any, key string) string {
return core.Sprint(values[key])
}
// errBridgeNotAvailable is returned when a tool requires the Laravel bridge
// but it has not been initialised (headless mode).
var errBridgeNotAvailable = core.E("brain", "bridge not available", nil)
// Subsystem proxies brain_* MCP tools through the shared IDE bridge.
//
// sub := brain.New(bridge)
// sub.RegisterTools(server)
type Subsystem struct {
bridge *ide.Bridge
}
// New creates a bridge-backed brain subsystem.
//
// sub := brain.New(bridge)
// _ = sub.Shutdown(context.Background())
func New(bridge *ide.Bridge) *Subsystem {
return &Subsystem{bridge: bridge}
}
// Name returns the MCP subsystem name.
//
// name := sub.Name() // "brain"
func (s *Subsystem) Name() string { return "brain" }
// RegisterTools adds the bridge-backed brain tools to an MCP server.
//
// sub := brain.New(bridge)
// sub.RegisterTools(server)
func (s *Subsystem) RegisterTools(server *mcp.Server) {
s.registerBrainTools(server)
}
// Shutdown closes the subsystem without additional cleanup.
//
// _ = sub.Shutdown(context.Background())
func (s *Subsystem) Shutdown(_ context.Context) error {
return nil
}