MCPcopy Create free account
hub / github.com/diillson/chatcli / handleMoACommand

Method handleMoACommand

cli/moa_command.go:36–102  ·  view source on GitHub ↗
(ctx context.Context, input string)

Source from the content-addressed store, hash-verified

34)
35
36func (cli *ChatCLI) handleMoACommand(ctx context.Context, input string) {
37 prompt := strings.TrimSpace(strings.TrimPrefix(input, "/moa"))
38 if prompt == "" {
39 fmt.Println(colorize(" "+i18n.T("moa.usage"), ColorGray))
40 return
41 }
42
43 refs := moa.ParseRefs(os.Getenv("CHATCLI_MOA_MODELS"))
44 if len(refs) == 0 {
45 // No env configured → behave like the @moa tool: use the configured
46 // providers (capped) so /moa works out of the box.
47 refs = cli.defaultMoaRefs()
48 }
49 if len(refs) == 0 {
50 fmt.Println(colorize(" "+i18n.T("moa.no_models"), ColorYellow))
51 return
52 }
53
54 aggregator := moa.Ref{Provider: cli.Provider, Model: cli.Model}
55 if agg := moa.ParseRefs(os.Getenv("CHATCLI_MOA_AGGREGATOR")); len(agg) > 0 {
56 aggregator = agg[0]
57 }
58
59 // Every panel member gets the same briefing a regular chat turn gets: the
60 // structured system prompt (attached contexts, workspace memory, skills,
61 // retrieval) plus the prior conversation. Assembled ONCE per run — it
62 // consumes per-turn staging state (e.g. a pending manual skill) — and
63 // shared read-only by all participants.
64 assembly := cli.assembleChatSystemPrompt(ctx, prompt, "")
65 tempHistory := cli.buildChatTempHistory(assembly.parts, prompt, "", nil)
66
67 // Panel members also get the chat-sanctioned read-only tool exceptions
68 // (knowledge retrieval, CCR marker recall) when they apply to this session.
69 toolset := cli.moaToolsetForRun(tempHistory)
70 turn := cli.moaTurn(toolset)
71
72 fmt.Printf(" %s\n", colorize(i18n.T("moa.running", len(refs)), ColorCyan))
73 if caps := moaToolsetLabel(toolset); caps != "" {
74 fmt.Printf(" %s\n", colorize(i18n.T("moa.tools", caps), ColorGray))
75 }
76
77 runCtx, cancel := context.WithTimeout(ctx, 5*time.Minute)
78 defer cancel()
79
80 final, results, err := moa.RunSession(runCtx, prompt, tempHistory, refs, aggregator, turn)
81 if err != nil {
82 fmt.Printf(" %s %v\n", colorize("ERR", ColorRed), err)
83 return
84 }
85
86 // Show which references contributed.
87 for _, r := range results {
88 status := colorize("✓", ColorGreen)
89 if !r.OK() {
90 status = colorize("✗", ColorRed)
91 }
92 fmt.Printf(" %s %s\n", status, colorize(r.Ref.String(), ColorGray))
93 }

Callers 1

buildRoutesMethod · 0.80

Calls 14

defaultMoaRefsMethod · 0.95
buildChatTempHistoryMethod · 0.95
moaToolsetForRunMethod · 0.95
moaTurnMethod · 0.95
renderMarkdownMethod · 0.95
mirrorHubTurnMethod · 0.95
TFunction · 0.92
ParseRefsFunction · 0.92
RunSessionFunction · 0.92
colorizeFunction · 0.85
moaToolsetLabelFunction · 0.85

Tested by

no test coverage detected