refactor(cli): wire commandRole into dispatch; doc + comment cleanup
Resolve final-review findings: commandRole is now the single source of truth (Run resolves role once and threads it to handlers, replacing hardcoded openStore roles). Tighten crypto/SKILL/SPEC/USER-MANUAL wording and document init's agent-key-on-first-init-only semantics. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+14
-13
@@ -99,7 +99,7 @@ func newDepsLive(st *store.Store, out io.Writer) Deps {
|
||||
}
|
||||
|
||||
// runDoctor handles `doctor [--account <name>]` (human-readable diagnostics).
|
||||
func runDoctor(args []string, out, errOut io.Writer) int {
|
||||
func runDoctor(args []string, role store.Role, out, errOut io.Writer) int {
|
||||
fs := flag.NewFlagSet("doctor", flag.ContinueOnError)
|
||||
fs.SetOutput(errOut)
|
||||
usageFlags(fs, "doctor", errOut)
|
||||
@@ -110,7 +110,7 @@ func runDoctor(args []string, out, errOut io.Writer) int {
|
||||
}
|
||||
return 2
|
||||
}
|
||||
st, err := openStore(store.RoleAgent)
|
||||
st, err := openStore(role)
|
||||
if err != nil {
|
||||
fmt.Fprintf(errOut, "emcli: %v\n", err)
|
||||
return 1
|
||||
@@ -135,21 +135,22 @@ func Run(args []string, out, errOut io.Writer) int {
|
||||
return 0
|
||||
}
|
||||
cmd, rest := args[0], args[1:]
|
||||
role := commandRole(cmd)
|
||||
switch cmd {
|
||||
case "list", "get", "search", "ack":
|
||||
return runAgent(cmd, rest, out, errOut)
|
||||
return runAgent(cmd, rest, role, out, errOut)
|
||||
case "send":
|
||||
return runSend(rest, out, errOut)
|
||||
return runSend(rest, role, out, errOut)
|
||||
case "account":
|
||||
return runAccount(rest, out, errOut)
|
||||
return runAccount(rest, role, out, errOut)
|
||||
case "whitelist":
|
||||
return runWhitelist(rest, out, errOut)
|
||||
return runWhitelist(rest, role, out, errOut)
|
||||
case "config":
|
||||
return runConfig(rest, out, errOut)
|
||||
return runConfig(rest, role, out, errOut)
|
||||
case "audit":
|
||||
return runAudit(rest, out, errOut)
|
||||
return runAudit(rest, role, out, errOut)
|
||||
case "doctor":
|
||||
return runDoctor(rest, out, errOut)
|
||||
return runDoctor(rest, role, out, errOut)
|
||||
case "init":
|
||||
return runInit(rest, out, errOut)
|
||||
default:
|
||||
@@ -159,7 +160,7 @@ func Run(args []string, out, errOut io.Writer) int {
|
||||
}
|
||||
|
||||
// runAgent handles JSON-emitting commands. Errors are emitted as JSON envelopes.
|
||||
func runAgent(cmd string, args []string, out, errOut io.Writer) int {
|
||||
func runAgent(cmd string, args []string, role store.Role, out, errOut io.Writer) int {
|
||||
fs := flag.NewFlagSet(cmd, flag.ContinueOnError)
|
||||
fs.SetOutput(errOut)
|
||||
usageFlags(fs, cmd, errOut)
|
||||
@@ -190,7 +191,7 @@ func runAgent(cmd string, args []string, out, errOut io.Writer) int {
|
||||
_ = Failure(CodeUsage, "--account is required").Write(out)
|
||||
return 2
|
||||
}
|
||||
st, err := openStore(store.RoleAgent)
|
||||
st, err := openStore(role)
|
||||
if err != nil {
|
||||
_ = Failure(CodeConfig, err.Error()).Write(out)
|
||||
return 1
|
||||
@@ -255,7 +256,7 @@ func (s *stringSlice) Set(v string) error {
|
||||
}
|
||||
|
||||
// runSend handles the `send` agent command (JSON envelope output).
|
||||
func runSend(args []string, out, errOut io.Writer) int {
|
||||
func runSend(args []string, role store.Role, out, errOut io.Writer) int {
|
||||
fs := flag.NewFlagSet("send", flag.ContinueOnError)
|
||||
fs.SetOutput(errOut)
|
||||
usageFlags(fs, "send", errOut)
|
||||
@@ -280,7 +281,7 @@ func runSend(args []string, out, errOut io.Writer) int {
|
||||
_ = Failure(CodeUsage, "--account is required").Write(out)
|
||||
return 2
|
||||
}
|
||||
st, err := openStore(store.RoleAgent)
|
||||
st, err := openStore(role)
|
||||
if err != nil {
|
||||
_ = Failure(CodeConfig, err.Error()).Write(out)
|
||||
return 1
|
||||
|
||||
Reference in New Issue
Block a user