38 lines
928 B
Go
38 lines
928 B
Go
|
|
package main
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"fmt"
|
||
|
|
"os"
|
||
|
|
"path/filepath"
|
||
|
|
|
||
|
|
"github.com/mark3labs/mcp-go/mcp"
|
||
|
|
)
|
||
|
|
|
||
|
|
const ethicsModalPath = "codex/ethics/MODAL.md"
|
||
|
|
const ethicsAxiomsPath = "codex/ethics/kernel/axioms.json"
|
||
|
|
|
||
|
|
func ethicsCheckHandler(_ context.Context, _ mcp.CallToolRequest) (*mcp.CallToolResult, error) {
|
||
|
|
root, err := findRepoRoot()
|
||
|
|
if err != nil {
|
||
|
|
return mcp.NewToolResultError(fmt.Sprintf("failed to locate repo root: %v", err)), nil
|
||
|
|
}
|
||
|
|
|
||
|
|
modalBytes, err := os.ReadFile(filepath.Join(root, ethicsModalPath))
|
||
|
|
if err != nil {
|
||
|
|
return mcp.NewToolResultError(fmt.Sprintf("failed to read modal: %v", err)), nil
|
||
|
|
}
|
||
|
|
|
||
|
|
axioms, err := readJSONMap(filepath.Join(root, ethicsAxiomsPath))
|
||
|
|
if err != nil {
|
||
|
|
return mcp.NewToolResultError(fmt.Sprintf("failed to read axioms: %v", err)), nil
|
||
|
|
}
|
||
|
|
|
||
|
|
payload := EthicsContext{
|
||
|
|
Modal: string(modalBytes),
|
||
|
|
Axioms: axioms,
|
||
|
|
}
|
||
|
|
|
||
|
|
return mcp.NewToolResultStructuredOnly(payload), nil
|
||
|
|
}
|