mirror of
https://github.com/Tencent/WeKnora.git
synced 2026-09-01 14:53:07 +08:00
0e081aec5c
Operability surface and the bulk of the jopts→fopts migration: * --log-level error|warn|info|debug + WEKNORA_LOG_LEVEL env, wired to the SDK via client.SetDebugLevel. Invalid --log-level returns FlagError (exit 2). * kb status <kb-id> / kb check <kb-id> verb split (1 HTTP vs 1+N for failed_count aggregation). * agent status <agent-id> / agent check <agent-id> verb split (probes kb_scope_all_reachable via 1+N HTTP). * kb create <name> positional (matches agent create). * Positional id help strings namespaced (<kb-id> / <agent-id>). * All auth / context / link / doctor / kb / agent CRUD commands migrated to the FormatOptions API. * root.go Execute(ctx) takes a context so signal-cancellation propagates via cmd.Context() into long-running commands. * Pagination termination uses len(accum) >= total (not page*pageSize) so server-capped page sizes do not truncate aggregations.
89 lines
2.9 KiB
Go
89 lines
2.9 KiB
Go
package kb
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/spf13/cobra"
|
|
|
|
"github.com/Tencent/WeKnora/cli/internal/cmdutil"
|
|
"github.com/Tencent/WeKnora/cli/internal/iostreams"
|
|
"github.com/Tencent/WeKnora/cli/internal/prompt"
|
|
sdk "github.com/Tencent/WeKnora/client"
|
|
)
|
|
|
|
// kbEmptyFields enumerates the fields surfaced for `--format json` discovery on
|
|
// `kb empty`. The result payload is {id, deleted_count}.
|
|
var kbEmptyFields = []string{"id", "deleted_count"}
|
|
|
|
type EmptyOptions struct {
|
|
Yes bool
|
|
}
|
|
|
|
type EmptyService interface {
|
|
ClearKnowledgeBaseContents(ctx context.Context, id string) (*sdk.ClearKnowledgeBaseContentsResponse, error)
|
|
}
|
|
|
|
// emptyResult is the typed payload emitted under data on success.
|
|
type emptyResult struct {
|
|
ID string `json:"id"`
|
|
DeletedCount int `json:"deleted_count"`
|
|
}
|
|
|
|
// NewCmdEmpty builds `weknora kb empty <id>`. Wipes every document inside
|
|
// the knowledge base; the KB itself is preserved. The server runs the
|
|
// delete asynchronously and reports the count of documents that were
|
|
// enqueued for removal.
|
|
func NewCmdEmpty(f *cmdutil.Factory) *cobra.Command {
|
|
opts := &EmptyOptions{}
|
|
cmd := &cobra.Command{
|
|
Use: "empty <kb-id>",
|
|
Short: "Delete every document in a knowledge base (preserves the KB)",
|
|
Long: `Removes all documents and chunks from a knowledge base while keeping the
|
|
KB record (its name, description, and config) intact. The delete is async;
|
|
the server reports the count of items enqueued for removal.
|
|
|
|
Prompts for confirmation by default; pass -y/--yes to skip in agent / CI /
|
|
piped contexts. Without -y the CLI exits 10 in non-interactive mode.`,
|
|
Example: ` weknora kb empty kb_abc # interactive confirm
|
|
weknora kb empty kb_abc -y --format json # agent-friendly`,
|
|
Args: cobra.ExactArgs(1),
|
|
RunE: func(c *cobra.Command, args []string) error {
|
|
fopts, err := cmdutil.CheckFormatFlag(c)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
fopts.ResolveDefault(iostreams.IO.IsStdoutTTY())
|
|
opts.Yes, _ = c.Flags().GetBool("yes")
|
|
cli, err := f.Client()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return runEmpty(c.Context(), opts, fopts, cli, f.Prompter(), args[0])
|
|
},
|
|
}
|
|
cmdutil.AddFormatFlag(cmd, kbEmptyFields...)
|
|
return cmd
|
|
}
|
|
|
|
func runEmpty(ctx context.Context, opts *EmptyOptions, fopts *cmdutil.FormatOptions, svc EmptyService, p prompt.Prompter, id string) error {
|
|
if err := cmdutil.ConfirmDestructive(p, opts.Yes, fopts.WantsJSON(), "all contents of knowledge base", id); err != nil {
|
|
return err
|
|
}
|
|
|
|
resp, err := svc.ClearKnowledgeBaseContents(ctx, id)
|
|
if err != nil {
|
|
return cmdutil.WrapHTTP(err, "empty knowledge base %s", id)
|
|
}
|
|
deleted := 0
|
|
if resp != nil {
|
|
deleted = resp.DeletedCount
|
|
}
|
|
|
|
if fopts.WantsJSON() {
|
|
return fopts.Emit(iostreams.IO.Out, emptyResult{ID: id, DeletedCount: deleted})
|
|
}
|
|
fmt.Fprintf(iostreams.IO.Out, "✓ Emptied knowledge base %s (%d document(s) cleared)\n", id, deleted)
|
|
return nil
|
|
}
|