'hyperguild mode <cloud|client-local|sovereign>' writes a per-mode
.mcp.json template:
- cloud: brain MCP only
- client-local: brain + routing placeholder with _routing_pending
pointer to Plan 6
- sovereign: brain only + top-level _mode_note explaining Crush
is primary; .mcp.json is Claude Code fallback
Default output is ./.mcp.json; --out overrides; --force overwrites.
Brain URL sourced from BRAIN_URL (default http://koala:30330) so the
template stays in lockstep with the user's brain host.
All three subcommands now wired; notYet/errNotImplemented removed
from main.go.
46 lines
1.5 KiB
Go
46 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestDispatch_Help_PrintsUsageAndReturnsZero(t *testing.T) {
|
|
var out, errBuf bytes.Buffer
|
|
code := dispatch(context.Background(), []string{"--help"}, strings.NewReader(""), &out, &errBuf)
|
|
assert.Equal(t, 0, code)
|
|
assert.Contains(t, out.String(), "Usage: hyperguild")
|
|
assert.Contains(t, out.String(), "tier")
|
|
assert.Contains(t, out.String(), "brain")
|
|
assert.Contains(t, out.String(), "mode")
|
|
}
|
|
|
|
func TestDispatch_NoArgs_PrintsUsageAndReturnsTwo(t *testing.T) {
|
|
var out, errBuf bytes.Buffer
|
|
code := dispatch(context.Background(), []string{}, strings.NewReader(""), &out, &errBuf)
|
|
assert.Equal(t, 2, code)
|
|
assert.Contains(t, errBuf.String(), "Usage: hyperguild")
|
|
}
|
|
|
|
func TestDispatch_UnknownSubcommand_ReturnsTwo(t *testing.T) {
|
|
var out, errBuf bytes.Buffer
|
|
code := dispatch(context.Background(), []string{"bogus"}, strings.NewReader(""), &out, &errBuf)
|
|
assert.Equal(t, 2, code)
|
|
assert.Contains(t, errBuf.String(), "unknown subcommand: bogus")
|
|
}
|
|
|
|
func TestDispatch_KnownSubcommand_RoutesToHandler(t *testing.T) {
|
|
// "mode" without args fails → exit 1, message on stderr.
|
|
// (Confirms dispatch reached the handler rather than printing "unknown
|
|
// subcommand: mode".)
|
|
var out, errBuf bytes.Buffer
|
|
code := dispatch(context.Background(), []string{"mode"}, strings.NewReader(""), &out, &errBuf)
|
|
assert.Equal(t, 1, code)
|
|
assert.Contains(t, errBuf.String(), "name required")
|
|
assert.NotContains(t, errBuf.String(), "unknown subcommand")
|
|
}
|