d54a7a5834
Roadmap 3-1. Verb-noun shape borrowed from gh search (gh search repos / code / commits / issues / prs verified against the gh manual). Subcommands: - `search chunks "<q>" --kb X` — hybrid retrieval (RAG search). - `search kb "<q>"` — case-insensitive substring match across KB names and descriptions; sorted by name length (shortest hits first). - `search docs "<q>" --kb X` — pages through ListKnowledge filtering by title / file_name; stops once --limit matches are found. - `search sessions "<q>"` — pages through GetSessionsByTenant filtering by title / description. kb / docs / sessions are client-side filters because the server has no fuzzy search endpoint for any of them. ListKnowledgeBases returns the full tenant catalog in one call; the doc/session walkers chunk at 200 per request and stop early on limit. The parent `search` command is a pure dispatcher — there is no bare- positional form (no `weknora search "<q>"`). Cleanups surfaced by the post-commit reviewer round: - UX consistency: search docs's displayDocName ordered Title → FileName → "-", while doc list's displayName uses FileName → Title → ID. Same Knowledge rendered differently across commands. Aligned search docs on doc list's existing FileName-first convention. - cmdutil.ResolveKBFlag(ctx, lister, raw) — extracted the `IsKBID ? raw : ResolveKBNameToID` block duplicated across chunks and docs. - text.ContainsFold(needle, fields...) — replaces inline `strings.Contains(strings.ToLower(field), needle)` patterns. 37 unit tests across chunks/kb/docs/sessions plus the parent registration smoke-test. Roadmap: 3-1.
18 lines
581 B
Go
18 lines
581 B
Go
package text
|
|
|
|
import "strings"
|
|
|
|
// ContainsFold reports whether any of fields contains needle, comparing
|
|
// case-insensitively. Avoids the inline `strings.Contains(strings.ToLower
|
|
// (field), needle)` triple-pattern when callers want to OR-match across
|
|
// several columns of the same record. The caller passes the needle in
|
|
// lowercase form so we don't lowercase the same string per call site.
|
|
func ContainsFold(lowerNeedle string, fields ...string) bool {
|
|
for _, f := range fields {
|
|
if strings.Contains(strings.ToLower(f), lowerNeedle) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|