From 4d1147dbf13d5a3d34a12d1217ad3c2ca325a13e Mon Sep 17 00:00:00 2001 From: SuperCLI Dev Date: Wed, 24 Jun 2026 02:12:58 +0000 Subject: [PATCH] =?UTF-8?q?feat(plugins):=20add=205=20new=20bundled=20plug?= =?UTF-8?q?ins=20=E2=80=94=20mockery,=20mailhog,=20xcaddy,=20hostctl,=20ma?= =?UTF-8?q?ddy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/hostctl/install-guidance.json | 12 ++ plugins/hostctl/meta.json | 5 + plugins/hostctl/plugin.json | 169 ++++++++++++++++++++++++++ plugins/maddy/install-guidance.json | 13 ++ plugins/maddy/meta.json | 5 + plugins/maddy/plugin.json | 86 +++++++++++++ plugins/mailhog/install-guidance.json | 12 ++ plugins/mailhog/meta.json | 5 + plugins/mailhog/plugin.json | 86 +++++++++++++ plugins/mockery/install-guidance.json | 12 ++ plugins/mockery/meta.json | 5 + plugins/mockery/plugin.json | 80 ++++++++++++ plugins/xcaddy/install-guidance.json | 12 ++ plugins/xcaddy/meta.json | 5 + plugins/xcaddy/plugin.json | 56 +++++++++ 15 files changed, 563 insertions(+) create mode 100644 plugins/hostctl/install-guidance.json create mode 100644 plugins/hostctl/meta.json create mode 100644 plugins/hostctl/plugin.json create mode 100644 plugins/maddy/install-guidance.json create mode 100644 plugins/maddy/meta.json create mode 100644 plugins/maddy/plugin.json create mode 100644 plugins/mailhog/install-guidance.json create mode 100644 plugins/mailhog/meta.json create mode 100644 plugins/mailhog/plugin.json create mode 100644 plugins/mockery/install-guidance.json create mode 100644 plugins/mockery/meta.json create mode 100644 plugins/mockery/plugin.json create mode 100644 plugins/xcaddy/install-guidance.json create mode 100644 plugins/xcaddy/meta.json create mode 100644 plugins/xcaddy/plugin.json diff --git a/plugins/hostctl/install-guidance.json b/plugins/hostctl/install-guidance.json new file mode 100644 index 000000000..ca777d3a8 --- /dev/null +++ b/plugins/hostctl/install-guidance.json @@ -0,0 +1,12 @@ +{ + "plugin": "hostctl", + "binary": "hostctl", + "check": "hostctl version", + "install_steps": [ + "go install github.com/guumaster/hostctl@latest", + "Verify: hostctl version", + "Or install via Homebrew: brew tap guumaster/tap && brew install hostctl", + "supercli plugins install ./plugins/hostctl --on-conflict replace --json" + ], + "note": "Requires Go 1.18+. Profiles make it easy to switch between different /etc/hosts configurations." +} diff --git a/plugins/hostctl/meta.json b/plugins/hostctl/meta.json new file mode 100644 index 000000000..f69507835 --- /dev/null +++ b/plugins/hostctl/meta.json @@ -0,0 +1,5 @@ +{ + "description": "Manage /etc/hosts entries using named profiles for easy switching between environments", + "tags": ["hosts", "dns", "networking", "development", "devops"], + "has_learn": false +} diff --git a/plugins/hostctl/plugin.json b/plugins/hostctl/plugin.json new file mode 100644 index 000000000..99983ddb7 --- /dev/null +++ b/plugins/hostctl/plugin.json @@ -0,0 +1,169 @@ +{ + "name": "hostctl", + "version": "0.1.0", + "description": "hostctl — Manage /etc/hosts with profiles. Organize host entries into named profiles, switch between them, and maintain a clean hosts file with simple CLI commands.", + "source": "https://github.com/guumaster/hostctl", + "checks": [ + { "type": "binary", "name": "hostctl" } + ], + "install_guidance": { + "plugin": "hostctl", + "binary": "hostctl", + "check": "hostctl version", + "install_steps": [ + "go install github.com/guumaster/hostctl@latest", + "Verify: hostctl version", + "Add profile: hostctl profile add myprofile", + "supercli plugins install ./plugins/hostctl --on-conflict replace --json" + ], + "note": "Requires Go 1.18+. Also available via Homebrew: brew tap guumaster/tap && brew install hostctl" + }, + "commands": [ + { + "namespace": "hostctl", + "resource": "profile", + "action": "list", + "description": "List all host profiles", + "adapter": "process", + "adapterConfig": { + "command": "hostctl", + "baseArgs": ["profile", "list"], + "timeout_ms": 5000, + "missingDependencyHelp": "Install hostctl: go install github.com/guumaster/hostctl@latest" + }, + "args": [] + }, + { + "namespace": "hostctl", + "resource": "profile", + "action": "add", + "description": "Add a new host profile", + "adapter": "process", + "adapterConfig": { + "command": "hostctl", + "baseArgs": ["profile", "add"], + "positionalArgs": ["name"], + "timeout_ms": 5000, + "missingDependencyHelp": "Install hostctl: go install github.com/guumaster/hostctl@latest" + }, + "args": [ + { "name": "name", "type": "string", "required": true, "description": "Profile name" } + ] + }, + { + "namespace": "hostctl", + "resource": "profile", + "action": "remove", + "description": "Remove a host profile", + "adapter": "process", + "adapterConfig": { + "command": "hostctl", + "baseArgs": ["profile", "remove"], + "positionalArgs": ["name"], + "timeout_ms": 5000, + "missingDependencyHelp": "Install hostctl: go install github.com/guumaster/hostctl@latest" + }, + "args": [ + { "name": "name", "type": "string", "required": true, "description": "Profile name" } + ] + }, + { + "namespace": "hostctl", + "resource": "host", + "action": "add", + "description": "Add a host entry to a profile", + "adapter": "process", + "adapterConfig": { + "command": "hostctl", + "baseArgs": ["host", "add"], + "timeout_ms": 5000, + "missingDependencyHelp": "Install hostctl: go install github.com/guumaster/hostctl@latest" + }, + "args": [ + { "name": "--profile", "type": "string", "required": true, "description": "Profile name" }, + { "name": "--ip", "type": "string", "required": true, "description": "IP address" }, + { "name": "--hostname", "type": "string", "required": true, "description": "Hostname" } + ] + }, + { + "namespace": "hostctl", + "resource": "host", + "action": "remove", + "description": "Remove a host entry from a profile", + "adapter": "process", + "adapterConfig": { + "command": "hostctl", + "baseArgs": ["host", "remove"], + "timeout_ms": 5000, + "missingDependencyHelp": "Install hostctl: go install github.com/guumaster/hostctl@latest" + }, + "args": [ + { "name": "--profile", "type": "string", "required": true, "description": "Profile name" }, + { "name": "--hostname", "type": "string", "required": true, "description": "Hostname" } + ] + }, + { + "namespace": "hostctl", + "resource": "host", + "action": "list", + "description": "List hosts in a profile", + "adapter": "process", + "adapterConfig": { + "command": "hostctl", + "baseArgs": ["host", "list"], + "timeout_ms": 5000, + "missingDependencyHelp": "Install hostctl: go install github.com/guumaster/hostctl@latest" + }, + "args": [ + { "name": "--profile", "type": "string", "required": true, "description": "Profile name" } + ] + }, + { + "namespace": "hostctl", + "resource": "host", + "action": "enable", + "description": "Enable a profile (activate hosts)", + "adapter": "process", + "adapterConfig": { + "command": "hostctl", + "baseArgs": ["host", "enable"], + "positionalArgs": ["profile"], + "timeout_ms": 5000, + "missingDependencyHelp": "Install hostctl" + }, + "args": [ + { "name": "profile", "type": "string", "required": true, "description": "Profile name to enable" } + ] + }, + { + "namespace": "hostctl", + "resource": "host", + "action": "disable", + "description": "Disable a profile (deactivate hosts)", + "adapter": "process", + "adapterConfig": { + "command": "hostctl", + "baseArgs": ["host", "disable"], + "positionalArgs": ["profile"], + "timeout_ms": 5000, + "missingDependencyHelp": "Install hostctl" + }, + "args": [ + { "name": "profile", "type": "string", "required": true, "description": "Profile name to disable" } + ] + }, + { + "namespace": "hostctl", + "resource": "_", + "action": "_", + "description": "Passthrough to hostctl for any command", + "adapter": "process", + "adapterConfig": { + "command": "hostctl", + "passthrough": true, + "missingDependencyHelp": "Install hostctl: go install github.com/guumaster/hostctl@latest" + }, + "args": [] + } + ] +} diff --git a/plugins/maddy/install-guidance.json b/plugins/maddy/install-guidance.json new file mode 100644 index 000000000..9c26cb2a7 --- /dev/null +++ b/plugins/maddy/install-guidance.json @@ -0,0 +1,13 @@ +{ + "plugin": "maddy", + "binary": "maddy", + "check": "maddy --version", + "install_steps": [ + "Download from https://github.com/foxcpp/maddy/releases", + "Or install via distro packages (see https://maddy.email/)", + "Configure: maddy test --config /etc/maddy/maddy.conf", + "Run: maddy run", + "supercli plugins install ./plugins/maddy --on-conflict replace --json" + ], + "note": "All-in-one mail server. Configuration at https://maddy.email/." +} diff --git a/plugins/maddy/meta.json b/plugins/maddy/meta.json new file mode 100644 index 000000000..3344e7f07 --- /dev/null +++ b/plugins/maddy/meta.json @@ -0,0 +1,5 @@ +{ + "description": "Composable all-in-one mail server replacing Postfix, Dovecot, and OpenDKIM with a single daemon", + "tags": ["email", "mail-server", "smtp", "imap", "self-hosted"], + "has_learn": false +} diff --git a/plugins/maddy/plugin.json b/plugins/maddy/plugin.json new file mode 100644 index 000000000..cf4a3d5f7 --- /dev/null +++ b/plugins/maddy/plugin.json @@ -0,0 +1,86 @@ +{ + "name": "maddy", + "version": "0.1.0", + "description": "maddy — Composable all-in-one mail server. Replace Postfix, Dovecot, OpenDKIM, OpenSPF, OpenDMARC with a single daemon with SMTP, IMAP, JMAP, and submission support.", + "source": "https://github.com/foxcpp/maddy", + "checks": [ + { "type": "binary", "name": "maddy" } + ], + "install_guidance": { + "plugin": "maddy", + "binary": "maddy", + "check": "maddy --version", + "install_steps": [ + "Download from https://github.com/foxcpp/maddy/releases", + "Or use distribution packages: https://maddy.email/", + "Configure: edit /etc/maddy/maddy.conf", + "Run: maddy run", + "supercli plugins install ./plugins/maddy --on-conflict replace --json" + ], + "note": "Replaces multiple mail server components with a single binary. See https://maddy.email/ for configuration guide." + }, + "commands": [ + { + "namespace": "maddy", + "resource": "server", + "action": "run", + "description": "Start maddy mail server", + "adapter": "process", + "adapterConfig": { + "command": "maddy", + "baseArgs": ["run"], + "timeout_ms": 5000, + "missingDependencyHelp": "Install maddy from https://github.com/foxcpp/maddy/releases" + }, + "args": [ + { "name": "--config", "type": "string", "required": false, "description": "Config file path" } + ] + }, + { + "namespace": "maddy", + "resource": "server", + "action": "test", + "description": "Test maddy configuration", + "adapter": "process", + "adapterConfig": { + "command": "maddy", + "baseArgs": ["test"], + "timeout_ms": 10000, + "missingDependencyHelp": "Install maddy" + }, + "args": [ + { "name": "--config", "type": "string", "required": false, "description": "Config file to test" } + ] + }, + { + "namespace": "maddy", + "resource": "creds", + "action": "hash", + "description": "Hash a password for maddy authentication", + "adapter": "process", + "adapterConfig": { + "command": "maddy", + "baseArgs": ["hash"], + "positionalArgs": ["password"], + "timeout_ms": 5000, + "missingDependencyHelp": "Install maddy" + }, + "args": [ + { "name": "password", "type": "string", "required": true, "description": "Password to hash" } + ] + }, + { + "namespace": "maddy", + "resource": "_", + "action": "_", + "description": "Passthrough to maddy for any command", + "adapter": "process", + "adapterConfig": { + "command": "maddy", + "passthrough": true, + "missingDependencyHelp": "Install maddy from https://github.com/foxcpp/maddy/releases" + }, + "args": [] + } + ] +} diff --git a/plugins/mailhog/install-guidance.json b/plugins/mailhog/install-guidance.json new file mode 100644 index 000000000..dd84773e4 --- /dev/null +++ b/plugins/mailhog/install-guidance.json @@ -0,0 +1,12 @@ +{ + "plugin": "mailhog", + "binary": "mailhog", + "check": "mailhog version", + "install_steps": [ + "brew install mailhog", + "Or download binary from https://github.com/mailhog/MailHog/releases", + "Run: mailhog (starts SMTP on :1025, web UI on :8025)", + "supercli plugins install ./plugins/mailhog --on-conflict replace --json" + ], + "note": "Starts SMTP server on port 1025 and web UI on port 8025. Use with mhsendmail for PHP integration." +} diff --git a/plugins/mailhog/meta.json b/plugins/mailhog/meta.json new file mode 100644 index 000000000..eb252ea52 --- /dev/null +++ b/plugins/mailhog/meta.json @@ -0,0 +1,5 @@ +{ + "description": "Web and API-based SMTP testing tool for capturing and viewing test emails during development", + "tags": ["email", "smtp", "testing", "development", "web-ui"], + "has_learn": false +} diff --git a/plugins/mailhog/plugin.json b/plugins/mailhog/plugin.json new file mode 100644 index 000000000..661604073 --- /dev/null +++ b/plugins/mailhog/plugin.json @@ -0,0 +1,86 @@ +{ + "name": "mailhog", + "version": "0.1.0", + "description": "MailHog — Web and API-based SMTP testing tool. Catch and view test emails in a local web UI during development with JSON API access and auto-reload.", + "source": "https://github.com/mailhog/MailHog", + "checks": [ + { "type": "binary", "name": "mailhog" }, + { "type": "binary", "name": "mhsendmail" } + ], + "install_guidance": { + "plugin": "mailhog", + "binary": "mailhog", + "check": "mailhog version", + "install_steps": [ + "brew install mailhog", + "Or download from https://github.com/mailhog/MailHog/releases", + "Run: mailhog (starts SMTP on :1025, web UI on :8025)", + "supercli plugins install ./plugins/mailhog --on-conflict replace --json" + ], + "note": "Also install mhsendmail to redirect PHP sendmail to MailHog: go install github.com/mailhog/mhsendmail@latest" + }, + "commands": [ + { + "namespace": "mailhog", + "resource": "server", + "action": "start", + "description": "Start MailHog SMTP test server (default :1025 SMTP, :8025 HTTP)", + "adapter": "process", + "adapterConfig": { + "command": "mailhog", + "timeout_ms": 5000, + "missingDependencyHelp": "Install mailhog: brew install mailhog" + }, + "args": [ + { "name": "--smtp-bind-addr", "type": "string", "required": false, "description": "SMTP bind address (default 0.0.0.0:1025)" }, + { "name": "--api-bind-addr", "type": "string", "required": false, "description": "API bind address (default 0.0.0.0:8025)" }, + { "name": "--ui-bind-addr", "type": "string", "required": false, "description": "Web UI bind address (default 0.0.0.0:8025)" }, + { "name": "--storage", "type": "string", "required": false, "description": "Storage type: memory or mongodb (default memory)" } + ] + }, + { + "namespace": "mailhog", + "resource": "api", + "action": "messages", + "description": "List captured messages via MailHog API", + "adapter": "process", + "adapterConfig": { + "command": "curl", + "baseArgs": ["-s", "http://localhost:8025/api/v2/messages"], + "timeout_ms": 5000, + "missingDependencyHelp": "Start MailHog first: mailhog" + }, + "args": [ + { "name": "--limit", "type": "number", "required": false, "description": "Limit results (default 50)" }, + { "name": "--start", "type": "number", "required": false, "description": "Start offset" } + ] + }, + { + "namespace": "mailhog", + "resource": "api", + "action": "delete", + "description": "Delete all captured messages", + "adapter": "process", + "adapterConfig": { + "command": "curl", + "baseArgs": ["-s", "-X", "DELETE", "http://localhost:8025/api/v1/messages"], + "timeout_ms": 5000, + "missingDependencyHelp": "Start MailHog first: mailhog" + }, + "args": [] + }, + { + "namespace": "mailhog", + "resource": "_", + "action": "_", + "description": "Passthrough to mailhog for any command", + "adapter": "process", + "adapterConfig": { + "command": "mailhog", + "passthrough": true, + "missingDependencyHelp": "Install mailhog: brew install mailhog" + }, + "args": [] + } + ] +} diff --git a/plugins/mockery/install-guidance.json b/plugins/mockery/install-guidance.json new file mode 100644 index 000000000..e44056886 --- /dev/null +++ b/plugins/mockery/install-guidance.json @@ -0,0 +1,12 @@ +{ + "plugin": "mockery", + "binary": "mockery", + "check": "mockery --version", + "install_steps": [ + "go install github.com/vektra/mockery/v2@latest", + "Verify: mockery --version", + "Or install via Homebrew: brew install mockery", + "supercli plugins install ./plugins/mockery --on-conflict replace --json" + ], + "note": "Requires Go 1.20+. Homebrew is an alternative install method." +} diff --git a/plugins/mockery/meta.json b/plugins/mockery/meta.json new file mode 100644 index 000000000..8d98babbf --- /dev/null +++ b/plugins/mockery/meta.json @@ -0,0 +1,5 @@ +{ + "description": "Go mock code generator that automatically generates mock implementations from Go interface definitions with testify support", + "tags": ["go", "testing", "mocking", "code-generation", "golang"], + "has_learn": false +} diff --git a/plugins/mockery/plugin.json b/plugins/mockery/plugin.json new file mode 100644 index 000000000..e11bee87c --- /dev/null +++ b/plugins/mockery/plugin.json @@ -0,0 +1,80 @@ +{ + "name": "mockery", + "version": "0.1.0", + "description": "mockery — Go mock code generator. Automatically generates mock implementations from Go interface definitions with support for testify, mockgen compatibility, and in-package mocks.", + "source": "https://github.com/vektra/mockery", + "checks": [ + { "type": "binary", "name": "mockery" } + ], + "install_guidance": { + "plugin": "mockery", + "binary": "mockery", + "check": "mockery --version", + "install_steps": [ + "go install github.com/vektra/mockery/v2@latest", + "Verify: mockery --version", + "supercli plugins install ./plugins/mockery --on-conflict replace --json" + ], + "note": "Requires Go 1.20+. Alternatively install via brew: brew install mockery" + }, + "commands": [ + { + "namespace": "mockery", + "resource": "mock", + "action": "generate", + "description": "Generate mock for a Go interface by name", + "adapter": "process", + "adapterConfig": { + "command": "mockery", + "baseArgs": ["--name"], + "positionalArgs": ["name"], + "timeout_ms": 60000, + "missingDependencyHelp": "Install mockery: go install github.com/vektra/mockery/v2@latest" + }, + "args": [ + { "name": "name", "type": "string", "required": true, "description": "Interface name to mock" }, + { "name": "--srcpkg", "type": "string", "required": false, "description": "Source package path" }, + { "name": "--dir", "type": "string", "required": false, "description": "Directory to search for interfaces" }, + { "name": "--output", "type": "string", "required": false, "description": "Output directory for mocks" }, + { "name": "--testonly", "type": "boolean", "required": false, "description": "Generate mocks in _test.go files" }, + { "name": "--inpackage", "type": "boolean", "required": false, "description": "Generate mock inside the source package" }, + { "name": "--all", "type": "boolean", "required": false, "description": "Generate mocks for all interfaces found" }, + { "name": "--recursive", "type": "boolean", "required": false, "description": "Search directories recursively" } + ] + }, + { + "namespace": "mockery", + "resource": "mock", + "action": "all", + "description": "Generate mocks for all interfaces in a package", + "adapter": "process", + "adapterConfig": { + "command": "mockery", + "baseArgs": ["--all"], + "passthrough": true, + "timeout_ms": 120000, + "missingDependencyHelp": "Install mockery: go install github.com/vektra/mockery/v2@latest" + }, + "args": [ + { "name": "--dir", "type": "string", "required": false, "description": "Root directory to search" }, + { "name": "--recursive", "type": "boolean", "required": false, "description": "Search recursively" }, + { "name": "--output", "type": "string", "required": false, "description": "Output directory" }, + { "name": "--inpackage", "type": "boolean", "required": false, "description": "In-package mocks" }, + { "name": "--testonly", "type": "boolean", "required": false, "description": "Test-only mocks" } + ] + }, + { + "namespace": "mockery", + "resource": "_", + "action": "_", + "description": "Passthrough to mockery for any command", + "adapter": "process", + "adapterConfig": { + "command": "mockery", + "passthrough": true, + "missingDependencyHelp": "Install mockery: go install github.com/vektra/mockery/v2@latest" + }, + "args": [] + } + ] +} diff --git a/plugins/xcaddy/install-guidance.json b/plugins/xcaddy/install-guidance.json new file mode 100644 index 000000000..96a512d33 --- /dev/null +++ b/plugins/xcaddy/install-guidance.json @@ -0,0 +1,12 @@ +{ + "plugin": "xcaddy", + "binary": "xcaddy", + "check": "xcaddy version", + "install_steps": [ + "go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest", + "Verify: xcaddy version", + "Or install via Homebrew: brew install xcaddy", + "supercli plugins install ./plugins/xcaddy --on-conflict replace --json" + ], + "note": "Requires Go 1.20+. Build a custom Caddy: xcaddy build --with github.com/caddyserver/nginx-adapter" +} diff --git a/plugins/xcaddy/meta.json b/plugins/xcaddy/meta.json new file mode 100644 index 000000000..bafaca752 --- /dev/null +++ b/plugins/xcaddy/meta.json @@ -0,0 +1,5 @@ +{ + "description": "Build Caddy web server with custom plugins and modules from the command line", + "tags": ["caddy", "web-server", "go", "build-tool", "plugins"], + "has_learn": false +} diff --git a/plugins/xcaddy/plugin.json b/plugins/xcaddy/plugin.json new file mode 100644 index 000000000..0163959bc --- /dev/null +++ b/plugins/xcaddy/plugin.json @@ -0,0 +1,56 @@ +{ + "name": "xcaddy", + "version": "0.1.0", + "description": "xcaddy — Build Caddy with custom plugins. Compile a custom Caddy binary with specific modules and versions using a simple command-line interface.", + "source": "https://github.com/caddyserver/xcaddy", + "checks": [ + { "type": "binary", "name": "xcaddy" } + ], + "install_guidance": { + "plugin": "xcaddy", + "binary": "xcaddy", + "check": "xcaddy version", + "install_steps": [ + "go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest", + "Verify: xcaddy version", + "Build Caddy with plugins: xcaddy build --with github.com/caddyserver/nginx-adapter", + "supercli plugins install ./plugins/xcaddy --on-conflict replace --json" + ], + "note": "Requires Go 1.20+. Alternatively install via brew: brew install xcaddy" + }, + "commands": [ + { + "namespace": "xcaddy", + "resource": "build", + "action": "caddy", + "description": "Build Caddy with specified plugins", + "adapter": "process", + "adapterConfig": { + "command": "xcaddy", + "baseArgs": ["build"], + "passthrough": true, + "timeout_ms": 300000, + "missingDependencyHelp": "Install xcaddy: go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest" + }, + "args": [ + { "name": "version", "type": "string", "required": false, "description": "Caddy version to build (default latest)" }, + { "name": "--with", "type": "string", "required": false, "description": "Plugin to include (can repeat: --with foo --with bar)" }, + { "name": "--output", "type": "string", "required": false, "description": "Output binary path" }, + { "name": "--replace", "type": "string", "required": false, "description": "Go module replacement directive" } + ] + }, + { + "namespace": "xcaddy", + "resource": "_", + "action": "_", + "description": "Passthrough to xcaddy for any command", + "adapter": "process", + "adapterConfig": { + "command": "xcaddy", + "passthrough": true, + "missingDependencyHelp": "Install xcaddy: go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest" + }, + "args": [] + } + ] +}