cli

package
v0.4.4 Latest Latest
Warning

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

Go to latest
Published: Jun 7, 2026 License: Apache-2.0 Imports: 26 Imported by: 0

Documentation

Overview

Package cli provides all CLI commands centian offers, including init, stdio, server, logs, config and all of their sub-commands.

Index

Constants

View Source
const Fish string = "fish"

Fish is an animal living underwater...

Variables

View Source
var AuthCommand = &cli.Command{
	Name:  "auth",
	Usage: "Manage Centian authentication",
	Commands: []*cli.Command{
		AuthNewKeyCommand,
	},
}

AuthCommand provides authentication utilities.

View Source
var AuthNewKeyCommand = &cli.Command{
	Name:  "new-key",
	Usage: "centian auth new-key",
	Description: `Generate a new API key for the HTTP proxy.

The key is printed once to the console, then hashed with bcrypt and stored in the
auth backend defined by your Centian config (the global "authBackend" block).
By default this is the principals SQLite database:
  ~/.centian/principals.sqlite

Use --config to point at a specific config file; its authBackend decides where the
key is stored, keeping this command in sync with the server that reads it. When
omitted, the default config (~/.centian/config.json) is used, falling back to the
sqlite default if no config exists yet.

Use --projects to restrict the key to specific projects (comma-separated slugs).
Omit the flag to allow all projects.

Use --name to label the key's principal. If omitted, you are prompted for one.
`,
	Flags: []cli.Flag{
		&cli.StringFlag{
			Name:  "projects",
			Usage: "Comma-separated list of project slugs this key is allowed to access (empty = all)",
		},
		&cli.StringFlag{
			Name:  "name",
			Usage: "Human-friendly name for this key's principal (prompted if omitted)",
		},
		&cli.StringFlag{
			Name:  "config",
			Usage: "Path to a Centian config whose authBackend selects where the key is stored (defaults to ~/.centian/config.json)",
		},
	},
	Action: handleAuthNewKeyCommand,
}

AuthNewKeyCommand generates and stores a new API key.

View Source
var BenchmarkCommand = &cli.Command{
	Name:  "benchmark",
	Usage: "Run local taskverification benchmarks",
	Commands: []*cli.Command{
		BenchmarkRunCommand,
	},
}

BenchmarkCommand groups local benchmark subcommands.

View Source
var BenchmarkRunCommand = &cli.Command{
	Name:  "run",
	Usage: "Run a benchmark suite locally",
	Flags: []cli.Flag{
		&cli.StringFlag{
			Name:     "suite",
			Usage:    "Path to the benchmark suite root",
			Required: true,
		},
		&cli.StringSliceFlag{
			Name:  "case",
			Usage: "Benchmark case ids to execute (repeat or comma-separate)",
		},
		&cli.StringSliceFlag{
			Name:     "agent",
			Usage:    "Agents to execute (repeat or comma-separate)",
			Required: true,
		},
		&cli.IntFlag{
			Name:  "repeat",
			Usage: "Number of attempts per matrix cell",
			Value: 1,
		},
		&cli.StringSliceFlag{
			Name:  "template-dir",
			Usage: "Template variant in name=path form (repeatable)",
		},
		&cli.DurationFlag{
			Name:  "timeout",
			Usage: "Per-run timeout",
			Value: 15 * time.Minute,
		},
		&cli.StringFlag{
			Name:  "output-root",
			Usage: "Output root for preserved benchmark artifacts",
		},
		&cli.StringFlag{
			Name:    "model",
			Aliases: []string{"m"},
			Usage:   singleModelFlagUsage(),
		},
		&cli.StringFlag{
			Name:  "profile",
			Usage: "Codex Ollama profile for single-agent codex-ollama runs (" + codexOllamaProfileHelp + ")",
		},
		&cli.StringFlag{
			Name:  "claude-model",
			Usage: "Override Claude model (" + claudeModelHelp + ")",
		},
		&cli.StringFlag{
			Name:  "gemini-model",
			Usage: "Override Gemini model (" + geminiModelHelp + ")",
		},
		&cli.StringFlag{
			Name:  "codex-model",
			Usage: "Override Codex model (" + codexModelHelp + ")",
		},
		&cli.StringFlag{
			Name:  "codex-config",
			Usage: "Base Codex config to copy and patch for codex or codex-ollama runs",
		},
		&cli.StringFlag{
			Name:  "centian-config",
			Usage: "Base Centian config to copy and patch for benchmark runs",
		},
		&cli.BoolFlag{
			Name:  "keep-centian-running",
			Usage: "Print the benchmark UI URL and prompt whether to shut down the Centian server after the agent finishes",
		},
	},
	Action: handleBenchmarkRunCommand,
}

BenchmarkRunCommand executes one benchmark suite locally and preserves raw artifacts.

View Source
var DemoCommand = &cli.Command{
	Name:  "demo",
	Usage: "Start an in-memory Centian demonstration server",
	Description: `Start a diskless Centian demo server, seed the bundled IT Ops
scenario into an in-memory event database, and open the task detail view for
post-hoc inspection.

Deprecated --file, --agent, and --path flows are no longer available from this
command and will likely be moved or removed in a future release.

Examples:
  centian demo
Deprecated:
  centian demo --file ./demo_scenario.json
  centian demo --agent claude
  centian demo --agent gemini
  centian demo --agent codex --model gpt-5.4-mini
  centian demo --agent codex-ollama --codex-config ~/.codex/config.toml --profile my-local-oss
  centian demo --agent claude --path ./my-demo
`,
	Action: handleDemoCommand,
	Flags: []cli.Flag{
		&cli.StringFlag{
			Name:    "agent",
			Aliases: []string{"a"},
			Usage:   "Deprecated: agent to run instead of the static IT Ops demo (v1 supports: claude, gemini, codex, codex-ollama)",
		},
		&cli.StringFlag{
			Name:    "file",
			Aliases: []string{"f"},
			Usage:   "Deprecated: synthetic demo scenario JSON file to seed immediately",
		},
		&cli.StringFlag{
			Name:    "path",
			Aliases: []string{"p"},
			Usage:   "Deprecated: disk-backed demo workspace path is no longer supported",
		},
		&cli.StringFlag{
			Name:    "model",
			Aliases: []string{"m"},
			Usage:   singleModelFlagUsage(),
		},
		&cli.StringFlag{
			Name:  "profile",
			Usage: "Codex Ollama profile from the supplied Codex config (" + codexOllamaProfileHelp + ")",
		},
		&cli.StringFlag{
			Name:  "codex-config",
			Usage: "Base Codex config to copy and patch for codex or codex-ollama runs",
		},
	},
}

DemoCommand launches a self-contained Centian demo workspace.

View Source
var InitCommand = &cli.Command{
	Name:        "init",
	Usage:       "Initialize centian with default configuration",
	Description: "Creates ~/.centian/config.json with default settings and guides initial setup",
	Action:      initCentian,
	Flags: []cli.Flag{
		&cli.BoolFlag{
			Name:    "quickstart",
			Aliases: []string{"q"},
			Usage:   "Create a ready-to-run config (requires npx)",
		},
		&cli.BoolFlag{
			Name:    "force",
			Aliases: []string{"f"},
			Usage:   "Overwrite existing configuration if it exists",
		},
		&cli.StringFlag{
			Name:    "from-path",
			Aliases: []string{"p"},
			Usage:   "Import servers from a specific MCP config file path",
		},
	},
}

InitCommand initializes a new centian setup with default configuration.

View Source
var LogsCommand = &cli.Command{
	Name:  "logs",
	Usage: "Displays logs: centian logs [--limit <n>]",
	Description: `Display formatted Centian MCP proxy logs ordered by timestamp (newest first).

Examples:
  centian logs
  centian logs --limit 10`,
	Flags: []cli.Flag{
		&cli.IntFlag{
			Name:  "limit",
			Usage: "Number of log entries to display (0 shows all)",
			Value: defaultLogDisplayLimit,
		},
	},
	Action: handleLogsCommand,
}

LogsCommand displays Centian log entries in descending timestamp order.

View Source
var ProcessorAddCommand = &cli.Command{
	Name:        "add",
	Usage:       "Add a processor to the configuration",
	Description: "Register a processor script in the global config. Name is inferred from the filename unless --name is provided.",
	Flags: []cli.Flag{
		&cli.StringFlag{
			Name:    "path",
			Aliases: []string{"p"},
			Usage:   "Path to the processor script (required for --type cli)",
		},
		&cli.StringFlag{
			Name:    "name",
			Aliases: []string{"n"},
			Usage:   "Processor name (default: inferred from filename)",
		},
		&cli.StringFlag{
			Name:    "type",
			Aliases: []string{"t"},
			Usage:   "Processor type",
			Value:   "cli",
		},
		&cli.StringFlag{
			Name:  "url",
			Usage: "Webhook URL (required for --type webhook)",
		},
		&cli.StringSliceFlag{
			Name:  "header",
			Usage: "Webhook header in Key=Value form (repeatable, only for --type webhook)",
			Value: []string{},
		},
	},
	Action: handleProcessorAdd,
}

ProcessorAddCommand registers an existing processor script in the global config.

View Source
var ProcessorCommand = &cli.Command{
	Name:  "processor",
	Usage: "Manage Centian processors",
	Commands: []*cli.Command{
		ProcessorInitCommand,
		ProcessorAddCommand,
	},
}

ProcessorCommand provides processor management functionality.

View Source
var ProcessorInitCommand = &cli.Command{
	Name:        "new",
	Usage:       "centian processor new",
	Description: "Interactively scaffold a new processor.",
	Action:      handleProcessorInit,
}

ProcessorInitCommand scaffolds a new processor.

View Source
var StartCommand = &cli.Command{
	Name:  "start",
	Usage: "Start Centian proxy: centian start [--config-path <path>]",
	Description: `Start Centian proxy server for configured MCP servers.

Currently supports HTTP transport. The HTTP proxy creates endpoints for each
configured HTTP MCP server at:
  /mcp/<gateway_name>/<server_name>

Configuration is loaded from ~/.centian/config.json by default.

	Example config structure:
	  {
	    "version": "1.0.0",
	    "name": "My Centian Server",
	    "proxy": {
	      "port": "9666",
	      "timeout": 30
	    },
    "gateways": {
      "my-gateway": {
        "mcpServers": {
          "github": {
            "url": "https://api.githubcopilot.com/mcp/",
            "headers": {
              "Authorization": "Bearer ${MY_GH_TOKEN_ENV_VAR}"
            }
          }
        }
      }
    }
  }

Examples:
  centian start
  centian start --config-path ./custom-config.json
`,
	Action: handleServerStartCommand,
	Flags: []cli.Flag{
		&cli.StringFlag{
			Name:  "config-path",
			Usage: "Path to config file (default: ~/.centian/config.json)",
		},
	},
}

StartCommand starts the Centian proxy server.

Functions

func SetupShellCompletion

func SetupShellCompletion() error

SetupShellCompletion offers to set up shell completion for the user.

Types

type InitOption

type InitOption int

InitOption represents the user's choice for initialization method.

const (
	// InitOptionEmpty creates an empty config with no servers.
	InitOptionEmpty InitOption = iota
	// InitOptionQuickstart creates a ready-to-run config with a default MCP server.
	InitOptionQuickstart
	// InitOptionFromPath imports servers from a specific config file.
	InitOptionFromPath
)

type InitUI

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

InitUI provides user interface functions for the init command.

func NewInitUI

func NewInitUI() *InitUI

NewInitUI creates a new init UI interface.

type ShellInfo

type ShellInfo struct {
	Name           string // bash, zsh, fish, etc.
	RCFile         string // path to RC file (~/.bashrc, ~/.zshrc, etc.)
	CompletionLine string // the line to add for completion
}

ShellInfo contains information about the current shell and its configuration.

func DetectShell

func DetectShell() (*ShellInfo, error)

DetectShell detects the current shell and returns shell information.

Jump to

Keyboard shortcuts

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