feat(hyperguild): mode subcommand

'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.
This commit is contained in:
2026-05-03 21:50:05 +02:00
parent 8f9642df69
commit a0d0914a85
4 changed files with 229 additions and 11 deletions
+1 -9
View File
@@ -4,7 +4,6 @@ package main
import (
"context"
"errors"
"fmt"
"io"
"os"
@@ -16,18 +15,11 @@ import (
// touching os.Stdin / os.Stdout / os.Exit.
type subcommand func(ctx context.Context, args []string, stdin io.Reader, stdout, stderr io.Writer) error
// errNotImplemented is returned by stub subcommands until their task lands.
var errNotImplemented = errors.New("not implemented")
func notYet(ctx context.Context, args []string, stdin io.Reader, stdout, stderr io.Writer) error {
return errNotImplemented
}
func subcommands() map[string]subcommand {
return map[string]subcommand{
"tier": runTier,
"brain": runBrain,
"mode": notYet,
"mode": runMode,
}
}