@bismawy/pi-vision-watcher 1.0.13 → 1.0.14

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bismawy/pi-vision-watcher",
3
- "version": "1.0.13",
3
+ "version": "1.0.14",
4
4
  "description": "Give text-only pi models vision — describe images with a vision model you pick via an interactive picker, then hand off the text description to non-vision models",
5
5
  "type": "module",
6
6
  "author": "bismawy",
@@ -42,7 +42,6 @@ export const MAX_FALLBACKS = 3;
42
42
  const FALLBACK_KEY = Key.ctrl("q");
43
43
  const FALLBACK_KEY_HINT = "ctrl+q";
44
44
  const RESET_FALLBACKS_KEY = Key.ctrlShift("q");
45
- const RESET_FALLBACKS_KEY_HINT = "ctrl+shift+q";
46
45
 
47
46
  /** Provider ids that don't title-case cleanly. Everything else falls back to
48
47
  * word-capitalisation (`custom-openrouter-ai` → "Custom Openrouter AI"). */
@@ -172,7 +171,6 @@ export class VisionModelSelectorComponent implements Component {
172
171
  render(width: number): string[] {
173
172
  const lines: string[] = [];
174
173
  lines.push(...new DynamicBorder((s) => this.theme.fg("accent", s)).render(width));
175
- lines.push("");
176
174
  lines.push(
177
175
  truncateToWidth(
178
176
  this.theme.fg("accent", this.theme.bold("Vision Watcher")),
@@ -339,24 +337,25 @@ export class VisionModelSelectorComponent implements Component {
339
337
 
340
338
  private getFooterText(): string {
341
339
  const totalCount = this.allItems.length - 1; // exclude the None row
342
- const matches = this.searchInput.getValue()
343
- ? `${this.filteredItems.length - 1} matches.`
344
- : `total ${totalCount} models.`;
345
-
346
- // The current selection lives in the detail pane above, so the footer only
347
- // carries keys + the model count.
348
- const parts: string[] = [
349
- `${keyText("tui.select.confirm")} = done`,
350
- "space = vision models",
351
- `${FALLBACK_KEY_HINT} = fallback models`,
352
- `${RESET_FALLBACKS_KEY_HINT} = reset fallbacks models`,
353
- "ctrl+t = thinking",
354
- "ctrl+a = async fallback",
355
- "esc = cancel",
356
- matches,
357
- ];
358
-
359
- return this.theme.fg("dim", ` ${parts.join(" | ")}`);
340
+ const count = this.searchInput.getValue()
341
+ ? `${this.filteredItems.length - 1} matches`
342
+ : `${totalCount} models`;
343
+
344
+ // One legend line: the count carries the accent colour so it is the first
345
+ // thing the eye lands on, while the keys stay dim so they do not compete
346
+ // with the picker itself. ctrl+a toggles the async clipboard handoff; it
347
+ // is deliberately left out so this line stays readable at 80 columns.
348
+ const confirm = keyText("tui.select.confirm");
349
+ const legend = [
350
+ `[${confirm.charAt(0).toUpperCase()}${confirm.slice(1)}] Done`,
351
+ "[Space] Vision",
352
+ "[Ctrl+q] Fallback",
353
+ "[Ctrl+Shift+q] Reset",
354
+ "[Ctrl+t] Think",
355
+ "[Esc] Cancel",
356
+ ].join(" ");
357
+
358
+ return `${this.theme.fg("dim", " ")}${this.theme.fg("accent", count)}${this.theme.fg("dim", ` · ${legend}`)}`;
360
359
  }
361
360
 
362
361
  private clearFallbacks(): void {