@gmickel/gno 0.20.0 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -32,7 +32,15 @@ GNO is a local knowledge engine that turns your documents into a searchable, con
32
32
 
33
33
  ---
34
34
 
35
- ## What's New in v0.19
35
+ ## What's New in v0.21
36
+
37
+ - **Ask CLI Query Modes**: `gno ask` now accepts repeatable `--query-mode term|intent|hyde` entries, matching the existing Ask API and Web controls
38
+
39
+ ### v0.20
40
+
41
+ - **Improved Model Init Fallbacks**: upgraded `node-llama-cpp` to `3.17.1` and switched to `build: "autoAttempt"` for better backend selection/fallback behavior
42
+
43
+ ### v0.19
36
44
 
37
45
  - **Exclusion Filters**: explicit `exclude` controls across CLI, API, Web, and MCP to hard-prune unwanted docs by title/path/body text
38
46
  - **Ask Query-Mode Parity**: Ask now supports structured `term` / `intent` / `hyde` controls in both API and Web UI
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gmickel/gno",
3
- "version": "0.20.0",
3
+ "version": "0.21.0",
4
4
  "description": "Local semantic search for your documents. Index Markdown, PDF, and Office files with hybrid BM25 + vector search.",
5
5
  "keywords": [
6
6
  "embeddings",
@@ -200,6 +200,7 @@ export async function ask(
200
200
  tagsAll: options.tagsAll,
201
201
  tagsAny: options.tagsAny,
202
202
  exclude: options.exclude,
203
+ queryModes: options.queryModes,
203
204
  noExpand: options.noExpand,
204
205
  noRerank: options.noRerank,
205
206
  candidateLimit: options.candidateLimit,
@@ -608,6 +608,12 @@ function wireSearchCommands(program: Command): void {
608
608
  "--exclude <values>",
609
609
  "exclude docs containing any term (comma-separated)"
610
610
  )
611
+ .option(
612
+ "--query-mode <mode:text>",
613
+ "structured mode entry (repeatable): term:<text>, intent:<text>, or hyde:<text>",
614
+ (value: string, previous: string[] = []) => [...previous, value],
615
+ []
616
+ )
611
617
  .option("--fast", "skip expansion and reranking (fastest)")
612
618
  .option("--thorough", "enable query expansion (slower)")
613
619
  .option("-C, --candidate-limit <num>", "max candidates passed to reranking")
@@ -640,6 +646,16 @@ function wireSearchCommands(program: Command): void {
640
646
  const categories = parseCsvValues(cmdOpts.category);
641
647
  const exclude = parseCsvValues(cmdOpts.exclude);
642
648
 
649
+ let queryModes: import("../pipeline/types").QueryModeInput[] | undefined;
650
+ if (Array.isArray(cmdOpts.queryMode) && cmdOpts.queryMode.length > 0) {
651
+ const { parseQueryModeSpecs } = await import("../pipeline/query-modes");
652
+ const parsed = parseQueryModeSpecs(cmdOpts.queryMode as string[]);
653
+ if (!parsed.ok) {
654
+ throw new CliError("VALIDATION", parsed.error.message);
655
+ }
656
+ queryModes = parsed.value;
657
+ }
658
+
643
659
  // Determine expansion/rerank settings based on flags
644
660
  // Default: skip expansion (balanced mode)
645
661
  let noExpand = true;
@@ -665,6 +681,7 @@ function wireSearchCommands(program: Command): void {
665
681
  author: cmdOpts.author as string | undefined,
666
682
  intent: cmdOpts.intent as string | undefined,
667
683
  exclude,
684
+ queryModes,
668
685
  noExpand,
669
686
  noRerank,
670
687
  candidateLimit,