Skip to content
This repository was archived by the owner on Jan 23, 2026. It is now read-only.
Merged
65 changes: 55 additions & 10 deletions cmd/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,35 @@ import (
// Provider types for infrastructure
var validProviders = map[string]string{"gcp": "Google Cloud", "aws": "Amazon Web Services", "azure": "Microsoft Azure", "vmware": "VMware"}

// Provider-specific regions
var providerRegions = map[string][]tui.Option{
"gcp": {
{ID: "us-central1", Text: tui.PadRight("US Central", 15, " ") + tui.Muted("us-central1")},
{ID: "us-west1", Text: tui.PadRight("US West", 15, " ") + tui.Muted("us-west1")},
{ID: "us-east1", Text: tui.PadRight("US East", 15, " ") + tui.Muted("us-east1")},
{ID: "europe-west1", Text: tui.PadRight("Europe West", 15, " ") + tui.Muted("europe-west1")},
{ID: "asia-southeast1", Text: tui.PadRight("Asia Southeast", 15, " ") + tui.Muted("asia-southeast1")},
},
"aws": {
{ID: "us-east-1", Text: tui.PadRight("US East (N. Virginia)", 15, " ") + tui.Muted("us-east-1")},
{ID: "us-east-2", Text: tui.PadRight("US East (Ohio)", 15, " ") + tui.Muted("us-east-2")},
{ID: "us-west-1", Text: tui.PadRight("US West (N. California)", 15, " ") + tui.Muted("us-west-1")},
{ID: "us-west-2", Text: tui.PadRight("US West (Oregon)", 15, " ") + tui.Muted("us-west-2")},
},
"azure": {
{ID: "eastus", Text: tui.PadRight("East US", 15, " ") + tui.Muted("eastus")},
{ID: "westus2", Text: tui.PadRight("West US 2", 15, " ") + tui.Muted("westus2")},
{ID: "westeurope", Text: tui.PadRight("West Europe", 15, " ") + tui.Muted("westeurope")},
{ID: "southeastasia", Text: tui.PadRight("Southeast Asia", 15, " ") + tui.Muted("southeastasia")},
{ID: "canadacentral", Text: tui.PadRight("Canada Central", 15, " ") + tui.Muted("canadacentral")},
},
"vmware": {
{ID: "datacenter-1", Text: tui.PadRight("Datacenter 1", 15, " ") + tui.Muted("datacenter-1")},
{ID: "datacenter-2", Text: tui.PadRight("Datacenter 2", 15, " ") + tui.Muted("datacenter-2")},
{ID: "datacenter-3", Text: tui.PadRight("Datacenter 3", 15, " ") + tui.Muted("datacenter-3")},
},
}

// Size types for clusters
var validSizes = []string{"dev", "small", "medium", "large"}

Expand Down Expand Up @@ -53,6 +82,15 @@ func validateFormat(format string) error {
return fmt.Errorf("invalid format %s, must be one of: %s", format, validFormats)
}

// getRegionsForProvider returns the available regions for a specific provider
func getRegionsForProvider(provider string) []tui.Option {
if regions, ok := providerRegions[provider]; ok {
return regions
}
// Fallback to GCP regions if provider not found
return providerRegions["gcp"]
}

func outputJSON(data interface{}) {
encoder := json.NewEncoder(os.Stdout)
encoder.SetIndent("", " ")
Expand Down Expand Up @@ -132,6 +170,9 @@ Examples:
apikey, _ := util.EnsureLoggedIn(ctx, logger, cmd)
apiUrl, _, _ := util.GetURLs(logger)

// Check if clustering is enabled for cluster operations
infrastructure.EnsureClusteringEnabled(ctx, logger, apiUrl, apikey)

var name string
if len(args) > 0 {
name = args[0]
Expand Down Expand Up @@ -190,12 +231,7 @@ Examples:
}

if region == "" {
// TODO: move these to use an option based on the selected provider
opts := []tui.Option{
{ID: "us-central1", Text: tui.PadRight("US Central", 15, " ") + tui.Muted("us-central1")},
{ID: "us-west1", Text: tui.PadRight("US West", 15, " ") + tui.Muted("us-west1")},
{ID: "us-east1", Text: tui.PadRight("US East", 15, " ") + tui.Muted("us-east1")},
}
opts := getRegionsForProvider(provider)
region = tui.Select(logger, "Which region should we use?", "The region to deploy the cluster", opts)
}

Expand All @@ -219,10 +255,6 @@ Examples:
}
}

if err := infrastructure.Setup(ctx, logger, &infrastructure.Cluster{ID: "1234", Token: "", Provider: provider, Name: name, Type: size, Region: region}, format); err != nil {
logger.Fatal("%s", err)
}

ready := tui.Ask(logger, "Ready to create the cluster", true)
if !ready {
logger.Info("Cluster creation cancelled")
Expand All @@ -243,6 +275,10 @@ Examples:
if err != nil {
errsystem.New(errsystem.ErrCreateProject, err, errsystem.WithContextMessage("Failed to create cluster")).ShowErrorAndExit()
}

if err := infrastructure.Setup(ctx, logger, cluster, format); err != nil {
logger.Fatal("%s", err)
}
})

if format == "json" {
Expand Down Expand Up @@ -273,6 +309,9 @@ Examples:
apikey, _ := util.EnsureLoggedIn(ctx, logger, cmd)
apiUrl, _, _ := util.GetURLs(logger)

// Check if clustering is enabled for cluster operations
infrastructure.EnsureClusteringEnabled(ctx, logger, apiUrl, apikey)

format, _ := cmd.Flags().GetString("format")
if format != "" {
if err := validateFormat(format); err != nil {
Expand Down Expand Up @@ -358,6 +397,9 @@ Examples:
apikey, _ := util.EnsureLoggedIn(ctx, logger, cmd)
apiUrl, _, _ := util.GetURLs(logger)

// Check if clustering is enabled for cluster operations
infrastructure.EnsureClusteringEnabled(ctx, logger, apiUrl, apikey)

clusterID := args[0]
force, _ := cmd.Flags().GetBool("force")

Expand Down Expand Up @@ -399,6 +441,9 @@ Examples:
apikey, _ := util.EnsureLoggedIn(ctx, logger, cmd)
apiUrl, _, _ := util.GetURLs(logger)

// Check if clustering is enabled for cluster operations
infrastructure.EnsureClusteringEnabled(ctx, logger, apiUrl, apikey)

clusterID := args[0]
format, _ := cmd.Flags().GetString("format")

Expand Down
104 changes: 100 additions & 4 deletions cmd/machine.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
"github.com/agentuity/cli/internal/infrastructure"
"github.com/agentuity/cli/internal/util"
"github.com/agentuity/go-common/env"
"github.com/agentuity/go-common/logger"
"github.com/agentuity/go-common/tui"
"github.com/spf13/cobra"
)
Expand Down Expand Up @@ -49,6 +50,9 @@ Examples:
apikey, _ := util.EnsureLoggedIn(ctx, logger, cmd)
apiUrl, _, _ := util.GetURLs(logger)

// Check if clustering is enabled for machine operations
infrastructure.EnsureMachineClusteringEnabled(ctx, logger, apiUrl, apikey)

var clusterFilter string
if len(args) > 0 {
clusterFilter = args[0]
Expand Down Expand Up @@ -168,6 +172,9 @@ Examples:
apikey, _ := util.EnsureLoggedIn(ctx, logger, cmd)
apiUrl, _, _ := util.GetURLs(logger)

// Check if clustering is enabled for machine operations
infrastructure.EnsureMachineClusteringEnabled(ctx, logger, apiUrl, apikey)

machineID := args[0]
force, _ := cmd.Flags().GetBool("force")

Expand Down Expand Up @@ -209,6 +216,9 @@ Examples:
apikey, _ := util.EnsureLoggedIn(ctx, logger, cmd)
apiUrl, _, _ := util.GetURLs(logger)

// Check if clustering is enabled for machine operations
infrastructure.EnsureMachineClusteringEnabled(ctx, logger, apiUrl, apikey)

machineID := args[0]
format, _ := cmd.Flags().GetString("format")

Expand Down Expand Up @@ -284,7 +294,17 @@ var machineCreateCmd = &cobra.Command{
Use: "create [cluster_id] [provider] [region]",
GroupID: "info",
Short: "Create a new machine for a cluster",
Args: cobra.ExactArgs(3),
Long: `Create a new machine for a cluster.

Arguments:
[cluster_id] The cluster ID to create a machine in (optional in interactive mode)
[provider] The cloud provider (optional in interactive mode)
[region] The region to deploy in (optional in interactive mode)

Examples:
agentuity machine create
agentuity machine create cluster-001 aws us-east-1`,
Args: cobra.MaximumNArgs(3),
Aliases: []string{"new"},
Run: func(cmd *cobra.Command, args []string) {
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
Expand All @@ -293,9 +313,26 @@ var machineCreateCmd = &cobra.Command{
apikey, _ := util.EnsureLoggedIn(ctx, logger, cmd)
apiUrl, _, _ := util.GetURLs(logger)

clusterID := args[0]
provider := args[1]
region := args[2]
// Check if clustering is enabled for machine operations
infrastructure.EnsureMachineClusteringEnabled(ctx, logger, apiUrl, apikey)

var clusterID, provider, region string

// If all arguments provided, use them directly
if len(args) == 3 {
clusterID = args[0]
provider = args[1]
region = args[2]
} else if tui.HasTTY {
// Interactive mode - prompt for missing values
cluster := promptForClusterSelection(ctx, logger, apiUrl, apikey)
provider = cluster.Provider
region = promptForRegionSelection(ctx, logger, provider)
clusterID = cluster.ID
} else {
// Non-interactive mode - require all arguments
errsystem.New(errsystem.ErrMissingRequiredArgument, fmt.Errorf("cluster_id, provider, and region are required in non-interactive mode"), errsystem.WithContextMessage("Missing required arguments")).ShowErrorAndExit()
}

orgId := promptForClusterOrganization(ctx, logger, cmd, apiUrl, apikey, "What organization should we create the machine in?")

Expand Down Expand Up @@ -332,4 +369,63 @@ func init() {

// Flags for machine status command
machineStatusCmd.Flags().String("format", "table", "Output format (table, json)")

}

// promptForClusterSelection prompts the user to select a cluster from available clusters
func promptForClusterSelection(ctx context.Context, logger logger.Logger, apiUrl, apikey string) infrastructure.Cluster {
clusters, err := infrastructure.ListClusters(ctx, logger, apiUrl, apikey)
if err != nil {
errsystem.New(errsystem.ErrApiRequest, err, errsystem.WithContextMessage("Failed to list clusters")).ShowErrorAndExit()
}

if len(clusters) == 0 {
errsystem.New(errsystem.ErrApiRequest, fmt.Errorf("no clusters found"), errsystem.WithUserMessage("No clusters found. Please create a cluster first using 'agentuity cluster create'")).ShowErrorAndExit()
}

if len(clusters) == 1 {
cluster := clusters[0]
fmt.Printf("Using cluster: %s (%s)\n", cluster.Name, cluster.ID)
return cluster
}

// Sort clusters by Name then ID for deterministic display order
sort.Slice(clusters, func(i, j int) bool {
if clusters[i].Name != clusters[j].Name {
return clusters[i].Name < clusters[j].Name
}
return clusters[i].ID < clusters[j].ID
})

var opts []tui.Option
for _, cluster := range clusters {
displayText := fmt.Sprintf("%s (%s) - %s %s", cluster.Name, cluster.ID, cluster.Provider, cluster.Region)
opts = append(opts, tui.Option{ID: cluster.ID, Text: displayText})
}

id := tui.Select(logger, "Select a cluster to create a machine in:", "Choose the cluster where you want to deploy the new machine", opts)

// Handle user cancellation (empty string)
if id == "" {
errsystem.New(errsystem.ErrApiRequest, fmt.Errorf("no cluster selected"), errsystem.WithUserMessage("No cluster selected")).ShowErrorAndExit()
}

// Find the selected cluster
for _, cluster := range clusters {
if cluster.ID == id {
return cluster
}
}

// This should never happen, but handle it as an impossible path
errsystem.New(errsystem.ErrApiRequest, fmt.Errorf("selected cluster not found: %s", id), errsystem.WithUserMessage("Selected cluster not found")).ShowErrorAndExit()
return infrastructure.Cluster{} // This line will never be reached
}

// promptForRegionSelection prompts the user to select a region
func promptForRegionSelection(ctx context.Context, logger logger.Logger, provider string) string {
// Get regions for the provider (reuse the same logic from cluster.go)
fmt.Println("Provider:", provider)
opts := getRegionsForProvider(provider)
return tui.Select(logger, "Which region should we use?", "The region to deploy the machine", opts)
}
12 changes: 6 additions & 6 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ go 1.25.1

require (
github.com/Masterminds/semver v1.5.0
github.com/agentuity/go-common v1.0.91
github.com/agentuity/go-common v1.0.93
github.com/agentuity/mcp-golang/v2 v2.0.2
github.com/bmatcuk/doublestar/v4 v4.8.1
github.com/charmbracelet/bubbles v0.20.0
Expand Down Expand Up @@ -45,12 +45,12 @@ require (
github.com/catppuccin/go v0.2.0 // indirect
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/charmbracelet/colorprofile v0.3.1 // indirect
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect
github.com/charmbracelet/x/ansi v0.8.0 // indirect
github.com/charmbracelet/x/cellbuf v0.0.13 // indirect
github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd // indirect
github.com/charmbracelet/x/exp/strings v0.0.0-20240722160745-212f7b056ed0 // indirect
github.com/charmbracelet/x/term v0.2.1 // indirect
github.com/cloudflare/circl v1.6.1 // indirect
github.com/cloudflare/circl v1.6.0 // indirect
github.com/cockroachdb/errors v1.11.3 // indirect
github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 // indirect
github.com/cockroachdb/redact v1.1.6 // indirect
Expand All @@ -72,15 +72,15 @@ require (
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/invopop/jsonschema v0.13.0 // indirect
github.com/invopop/jsonschema v0.12.0 // indirect
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/kevinburke/ssh_config v1.2.0 // indirect
github.com/kr/pretty v0.3.1 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mailru/easyjson v0.9.0 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/maruel/natural v1.1.1 // indirect
github.com/mattn/go-localereader v0.0.1 // indirect
github.com/mattn/go-runewidth v0.0.16 // indirect
Expand Down
25 changes: 13 additions & 12 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERo
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
github.com/ProtonMail/go-crypto v1.1.5 h1:eoAQfK2dwL+tFSFpr7TbOaPNUbPiJj4fLYwwGE1FQO4=
github.com/ProtonMail/go-crypto v1.1.5/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
github.com/agentuity/go-common v1.0.91 h1:60CNTdJnm/KKsNG7R1NHa7bALvvROijCAzvPXmpS0iE=
github.com/agentuity/go-common v1.0.91/go.mod h1:iliwcRguPH18rPv1049wFTETZn0wUdD4SN6rN8VcAoA=
github.com/agentuity/go-common v1.0.93 h1:V08Zp6CWeVQmmIgJUIX5UD7OLarsl5Epin6xNAKaC7Y=
github.com/agentuity/go-common v1.0.93/go.mod h1:D+H8zHEHpEj7qQtZSG0ZqpAx1h2a1HHLMQJc0ZG+j/I=
github.com/agentuity/mcp-golang/v2 v2.0.2 h1:wZqS/aHWZsQoU/nd1E1/iMsVY2dywWT9+PFlf+3YJxo=
github.com/agentuity/mcp-golang/v2 v2.0.2/go.mod h1:U105tZXyTatxxOBlcObRgLb/ULvGgT2DJ1nq/8++P6Q=
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8=
Expand Down Expand Up @@ -41,8 +41,8 @@ github.com/charmbracelet/bubbles v0.20.0 h1:jSZu6qD8cRQ6k9OMfR1WlM+ruM8fkPWkHvQW
github.com/charmbracelet/bubbles v0.20.0/go.mod h1:39slydyswPy+uVOHZ5x/GjwVAFkCsV8IIVy+4MhzwwU=
github.com/charmbracelet/bubbletea v1.3.4 h1:kCg7B+jSCFPLYRA52SDZjr51kG/fMUEoPoZrkaDHyoI=
github.com/charmbracelet/bubbletea v1.3.4/go.mod h1:dtcUCyCGEX3g9tosuYiut3MXgY/Jsv9nKVdibKKRRXo=
github.com/charmbracelet/colorprofile v0.3.1 h1:k8dTHMd7fgw4bnFd7jXTLZrSU/CQrKnL3m+AxCzDz40=
github.com/charmbracelet/colorprofile v0.3.1/go.mod h1:/GkGusxNs8VB/RSOh3fu0TJmQ4ICMMPApIIVn0KszZ0=
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc h1:4pZI35227imm7yK2bGPcfpFEmuY1gc2YSTShr4iJBfs=
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc/go.mod h1:X4/0JoqgTIPSFcRA/P6INZzIuyqdFY5rm8tb41s9okk=
github.com/charmbracelet/huh v0.6.0 h1:mZM8VvZGuE0hoDXq6XLxRtgfWyTI3b2jZNKh0xWmax8=
github.com/charmbracelet/huh v0.6.0/go.mod h1:GGNKeWCeNzKpEOh/OJD8WBwTQjV3prFAtQPpLv+AVwU=
github.com/charmbracelet/huh/spinner v0.0.0-20250313000648-36d9de46d64e h1:J8uxtAwJwvw0r5Wf+dfglLl/s+LcuUwj6VvoMyFw89U=
Expand All @@ -51,16 +51,16 @@ github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoF
github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30=
github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE=
github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q=
github.com/charmbracelet/x/cellbuf v0.0.13 h1:/KBBKHuVRbq1lYx5BzEHBAFBP8VcQzJejZ/IA3iR28k=
github.com/charmbracelet/x/cellbuf v0.0.13/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs=
github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd h1:vy0GVL4jeHEwG5YOXDmi86oYw2yuYUGqz6a8sLwg0X8=
github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs=
github.com/charmbracelet/x/exp/golden v0.0.0-20240815200342-61de596daa2b h1:MnAMdlwSltxJyULnrYbkZpp4k58Co7Tah3ciKhSNo0Q=
github.com/charmbracelet/x/exp/golden v0.0.0-20240815200342-61de596daa2b/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U=
github.com/charmbracelet/x/exp/strings v0.0.0-20240722160745-212f7b056ed0 h1:qko3AQ4gK1MTS/de7F5hPGx6/k1u0w4TeYmBFwzYVP4=
github.com/charmbracelet/x/exp/strings v0.0.0-20240722160745-212f7b056ed0/go.mod h1:pBhA0ybfXv6hDjQUZ7hk1lVxBiUbupdw5R31yPUViVQ=
github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ=
github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg=
github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0=
github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
github.com/cloudflare/circl v1.6.0 h1:cr5JKic4HI+LkINy2lg3W2jF8sHCVTBncJr5gIIq7qk=
github.com/cloudflare/circl v1.6.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
github.com/cockroachdb/errors v1.11.3 h1:5bA+k2Y6r+oz/6Z/RFlNeVCesGARKuC6YymtcDrbC/I=
github.com/cockroachdb/errors v1.11.3/go.mod h1:m4UIW4CDjx+R5cybPsNrRbreomiFqt8o1h1wUVazSd8=
github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 h1:ASDL+UJcILMqgNeV5jiqR4j+sTuvQNHdf2chuKj1M5k=
Expand Down Expand Up @@ -133,10 +133,11 @@ github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSAS
github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/invopop/jsonschema v0.13.0 h1:KvpoAJWEjR3uD9Kbm2HWJmqsEaHt8lBUpd0qHcIi21E=
github.com/invopop/jsonschema v0.13.0/go.mod h1:ffZ5Km5SWWRAIN6wbDXItl95euhFz2uON45H2qjYt+0=
github.com/invopop/jsonschema v0.12.0 h1:6ovsNSuvn9wEQVOyc72aycBMVQFKz7cPdMJn10CvzRI=
github.com/invopop/jsonschema v0.12.0/go.mod h1:ffZ5Km5SWWRAIN6wbDXItl95euhFz2uON45H2qjYt+0=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
Expand All @@ -154,8 +155,8 @@ github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4=
github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/marcozac/go-jsonc v0.1.1 h1:dnZgAYinXsnI73ZemlbQYPOo1uZYD/LSYI7Aw9IbIeM=
github.com/marcozac/go-jsonc v0.1.1/go.mod h1:BFDFoML/0Y4/XnOpOdomjrDBn1nIG96p7dlVXBDaybI=
github.com/maruel/natural v1.1.1 h1:Hja7XhhmvEFhcByqDoHz9QZbkWey+COd9xWfCfn1ioo=
Expand Down
Loading