pins

package
v0.1.0-beta.14 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 16, 2026 License: Apache-2.0 Imports: 14 Imported by: 0

Documentation

Index

Constants

View Source
const (
	StatusPinned                  = "pinned"
	StatusDrift                   = "drift"
	StatusApprovedPendingRedeploy = "approved_pending_redeploy"
)

Status values for ServerPins.

View Source
const (
	VerifyStatusPinned       = "pinned"        // first pin, just stored
	VerifyStatusVerified     = "verified"      // hashes match
	VerifyStatusDrift        = "drift"         // tool hashes changed
	VerifyStatusNewTools     = "new_tools"     // server added tools (no drift, auto-pinned)
	VerifyStatusRemovedTools = "removed_tools" // server removed tools (warning only)
)

Verify status values returned in VerifyResult.

Variables

View Source
var (
	ErrCorrupt      = errors.New("corrupt pin file")
	ErrNewerVersion = errors.New("pin file written by a newer gridctl")
)

Sentinel errors reported by Load. A caller that prefers availability over strictness (the daemon) may match ErrCorrupt and continue with the empty store Load leaves behind; ErrNewerVersion must never be papered over, or this binary would re-pin from scratch and overwrite the newer file.

Functions

This section is empty.

Types

type GatewayAdapter

type GatewayAdapter struct {
	// contains filtered or unexported fields
}

GatewayAdapter wraps PinStore to implement mcp.SchemaVerifier. It bridges the pins package to the gateway without creating an import cycle: pkg/pins already imports pkg/mcp for the Tool type, so pkg/mcp cannot import pkg/pins in return. The gateway holds a mcp.SchemaVerifier interface, and callers wire it with a GatewayAdapter at startup.

func NewGatewayAdapter

func NewGatewayAdapter(ps *PinStore) *GatewayAdapter

NewGatewayAdapter creates a GatewayAdapter backed by the given PinStore.

func (*GatewayAdapter) ResetServerPins

func (a *GatewayAdapter) ResetServerPins(serverName string) error

ResetServerPins implements mcp.PinResetter. It deletes the pin record for serverName so the next VerifyOrPin re-pins from scratch.

func (*GatewayAdapter) VerifyOrPin

func (a *GatewayAdapter) VerifyOrPin(serverName string, tools []mcp.Tool) ([]mcp.SchemaDrift, error)

VerifyOrPin implements mcp.SchemaVerifier. It delegates to PinStore.VerifyOrPin and converts the result into the mcp.SchemaDrift slice that the gateway consumes.

type PinFile

type PinFile struct {
	Version   string                 `json:"version"`
	Stack     string                 `json:"stack"`
	CreatedAt time.Time              `json:"created_at"`
	Servers   map[string]*ServerPins `json:"servers"`
}

PinFile is the top-level JSON structure stored at ~/.gridctl/pins/{stackName}.json.

type PinRecord

type PinRecord struct {
	Hash        string    `json:"hash"`
	Name        string    `json:"name"`
	Description string    `json:"description,omitempty"`
	PinnedAt    time.Time `json:"pinned_at"`
}

PinRecord holds the hash and metadata for a single tool definition. Description is stored to enable human-readable diff output on drift.

type PinStore

type PinStore struct {
	// contains filtered or unexported fields
}

PinStore manages TOFU schema pins for a deployed stack. It is safe for concurrent use: in-memory access is guarded by a RWMutex, and disk writes are serialized via state.WithLock.

func New

func New(stackName string) *PinStore

New creates a PinStore for the given stack name. The pin file lives at ~/.gridctl/pins/{stackName}.json. Call Load() before performing verification or pinning operations.

func NewWithPath

func NewWithPath(dir, stackName string) *PinStore

NewWithPath creates a PinStore that stores pins in dir/{stackName}.json. Intended for testing where the real state directory should not be used.

func (*PinStore) Approve

func (ps *PinStore) Approve(serverName string, tools []mcp.Tool) error

Approve re-pins the current tool definitions for a server, clearing drift.

func (*PinStore) GetAll

func (ps *PinStore) GetAll() map[string]*ServerPins

GetAll returns a snapshot of all server pin records.

func (*PinStore) GetServer

func (ps *PinStore) GetServer(serverName string) (*ServerPins, bool)

GetServer returns the pin record for a single server.

func (*PinStore) Load

func (ps *PinStore) Load() error

Load reads the pin file from disk into memory. If the file does not exist, the store starts empty (ready for first pin). A file that cannot be parsed returns an error wrapping ErrCorrupt, and a file written by a newer gridctl returns one wrapping ErrNewerVersion; in both cases the in-memory store is reset to empty so a caller that chooses to continue anyway has a usable store.

func (*PinStore) Reset

func (ps *PinStore) Reset(serverName string) error

Reset deletes the pin record for a server. The next VerifyOrPin call will re-pin.

func (*PinStore) Verify

func (ps *PinStore) Verify(serverName string, tools []mcp.Tool) (*VerifyResult, error)

Verify checks tools against stored pins without pinning new tools. Unlike VerifyOrPin, new tools are not auto-pinned.

func (*PinStore) VerifyOrPin

func (ps *PinStore) VerifyOrPin(serverName string, tools []mcp.Tool) (*VerifyResult, error)

VerifyOrPin is the primary entry point called on RefreshTools. On first use it pins the tools; on subsequent calls it verifies against pins. New tools not in pins are auto-pinned; modified tools trigger VerifyStatusDrift.

type ServerPins

type ServerPins struct {
	ServerHash     string                `json:"server_hash"`
	PinnedAt       time.Time             `json:"pinned_at"`
	LastVerifiedAt time.Time             `json:"last_verified_at"`
	ToolCount      int                   `json:"tool_count"`
	Status         string                `json:"status"`
	Tools          map[string]*PinRecord `json:"tools"`
}

ServerPins holds the pin state for a single MCP server.

type ToolDiff

type ToolDiff struct {
	Name           string
	OldHash        string
	NewHash        string
	OldDescription string
	NewDescription string
}

ToolDiff describes a change in a single tool's definition.

type VerifyResult

type VerifyResult struct {
	ServerName    string
	Status        string
	ModifiedTools []ToolDiff
	NewTools      []string
	RemovedTools  []string
}

VerifyResult contains the result of a VerifyOrPin or Verify call.

func (*VerifyResult) HasDrift

func (r *VerifyResult) HasDrift() bool

HasDrift returns true if any pinned tools have changed hashes.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL