mirror of
https://github.com/Tencent/WeKnora.git
synced 2026-08-31 00:50:02 +08:00
77b9b6a465
Make the agent-facing contract uniform across the whole surface: - cobra parse errors (unknown flag, arg-count) emit the JSON envelope by default, not bare prose — via a single DefaultFormatMode shared by the early resolver and ResolveDefault. - a malformed --jq is input.invalid_argument (exit 5), not internal.error. - destructive-confirmation messages name the real operation (edit/remove, not a hardcoded "delete"). - `doc wait` emits one envelope (Silent failure, no contradictory stderr); completed marshals as [] not null. - WEKNORA_AGENT_HELP covers every leaf command, enforced by a coverage drift guard; a sibling guard enforces --dry-run on every mutation. - `search docs`/`search chunks` resolve --kb through the same flag→env→project-link chain as `doc list`/`chat` (no longer a hard --kb requirement); a linked dir or WEKNORA_KB_ID now works without --kb, and an unresolved KB is local.kb_id_required (exit 1). The destructive `doc delete --all` keeps its explicit-only rule. - exit-code and batch/wait ok-semantics documented in the shared skill, README, and AGENTS.md.
29 lines
827 B
Go
29 lines
827 B
Go
package cmd
|
|
|
|
import "github.com/spf13/cobra"
|
|
|
|
// eachLeafCommand invokes fn for every runnable leaf command (no real
|
|
// subcommands) in the tree rooted at root, skipping cobra's generated
|
|
// `completion`/`help` subtrees and hidden commands. Shared by the agent-help
|
|
// and dry-run coverage drift guards so they agree, byte-for-byte, on what
|
|
// counts as a leaf.
|
|
func eachLeafCommand(root *cobra.Command, fn func(*cobra.Command)) {
|
|
exempt := map[string]bool{"completion": true, "help": true}
|
|
var walk func(c *cobra.Command)
|
|
walk = func(c *cobra.Command) {
|
|
realKids := 0
|
|
for _, k := range c.Commands() {
|
|
if exempt[k.Name()] || k.Hidden {
|
|
continue
|
|
}
|
|
realKids++
|
|
walk(k)
|
|
}
|
|
if c == root || realKids > 0 || exempt[c.Name()] {
|
|
return // group command or exempt — not a leaf
|
|
}
|
|
fn(c)
|
|
}
|
|
walk(root)
|
|
}
|