mirror of
https://github.com/johnkerl/miller.git
synced 2026-07-17 16:38:54 +00:00
* Plan: flesh out PR7 (MCP server + Agent Skill) design stdio transport (no HTTP port), mlr mcp terminal in the main binary, SDK-vs-handroll decision, tool list, in-process vs subprocess split, run-tool safety (--no-shell prerequisite), single-sourced skill, tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Add mlr mcp: MCP server + agent playbook; --no-shell gate (#2098 PR7) New terminal `mlr mcp` runs a Model Context Protocol server over stdio (spawned by MCP clients; no network port), exposing five tools -- list_capabilities, which, validate_dsl, describe_data, run -- plus an agent playbook as MCP prompt/resource. Catalog tools are served in-process from the help registries; the rest subprocess this same binary with MLR_ERRORS_JSON=1, a timeout, and an output cap. Prerequisite: a new --no-shell flag / MLR_NO_SHELL env var (one-way gate) disables the DSL system/exec functions, piped redirects, and --prepipe/--prepipex; the MCP server sets it on the commands it runs unless started with --allow-shell. Adds the github.com/modelcontextprotocol/go-sdk dependency. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Force LF checkout for the embedded SKILL.md (Windows CI fix) go:embed embeds checkout bytes, so a CRLF checkout on Windows made the embedded playbook differ per platform and failed TestPlaybookHasFrontmatter. Pin the file to eol=lf in .gitattributes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Move no-shell test DSL into per-case mlr files (Windows CI fix) Inline single-quoted DSL in cmd files is mangled by the Windows shell (single quotes are not quote characters there); the harness's put -f ${CASEDIR}/mlr pattern avoids shell quoting entirely. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
47 lines
1.4 KiB
Go
47 lines
1.4 KiB
Go
// Package registry is the single source of truth for the names of Miller's
|
|
// "terminals" -- the top-level subcommands like `mlr help` and `mlr version`
|
|
// -- and for the top-level version flags.
|
|
//
|
|
// It exists as its own leaf package (importing nothing within Miller) so that
|
|
// both pkg/terminals (which builds the dispatch table) and
|
|
// pkg/terminals/completion (which offers these as tab-completion candidates)
|
|
// can import it without an import cycle. pkg/terminals imports
|
|
// pkg/terminals/completion, so completion cannot import pkg/terminals directly.
|
|
package registry
|
|
|
|
// Terminal subcommand names, in display order. pkg/terminals builds its
|
|
// dispatch table from these constants.
|
|
const (
|
|
TerminalList = "terminal-list"
|
|
Completion = "completion"
|
|
Help = "help"
|
|
Mcp = "mcp"
|
|
Regtest = "regtest"
|
|
Repl = "repl"
|
|
Script = "script"
|
|
Version = "version"
|
|
Which = "which"
|
|
)
|
|
|
|
// Names is the ordered list of all terminal subcommand names.
|
|
var Names = []string{
|
|
TerminalList,
|
|
Completion,
|
|
Help,
|
|
Mcp,
|
|
Regtest,
|
|
Repl,
|
|
Script,
|
|
Version,
|
|
Which,
|
|
}
|
|
|
|
// Top-level version flags, handled in pkg/climain before normal command-line
|
|
// parsing.
|
|
const (
|
|
VersionFlag = "--version"
|
|
BareVersionFlag = "--bare-version"
|
|
)
|
|
|
|
// VersionFlagNames is the list of top-level version flags.
|
|
var VersionFlagNames = []string{VersionFlag, BareVersionFlag}
|