@zenera/cli 1.1.20 → 1.1.21

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/dist/banner.d.ts CHANGED
@@ -20,6 +20,10 @@ declare const ACCENTS: {
20
20
  readonly face: "\u001B[1;38;5;220m";
21
21
  readonly shade: "\u001B[0;38;5;178m";
22
22
  };
23
+ readonly dusk: {
24
+ readonly face: "\u001B[1;38;5;141m";
25
+ readonly shade: "\u001B[0;38;5;97m";
26
+ };
23
27
  };
24
28
  export type Hue = keyof typeof ACCENTS;
25
29
  export interface BannerText {
@@ -38,6 +42,14 @@ export interface PrintBannerOptions {
38
42
  }
39
43
  export declare const NEO_BANNER: BannerText;
40
44
  export declare function bannerLines(text: BannerText, columns?: number): string[];
45
+ /**
46
+ * The same letters, unpainted and still split by word, for a renderer that is
47
+ * not a terminal and colours the two halves its own way.
48
+ */
49
+ export declare function bannerArt(text: BannerText): {
50
+ head: string[];
51
+ accent: string[];
52
+ };
41
53
  /** Narration, and only for someone watching. */
42
54
  export declare function printBanner(text: BannerText, options?: PrintBannerOptions): void;
43
55
  export {};
package/dist/banner.js CHANGED
@@ -76,6 +76,7 @@ const ACCENTS = {
76
76
  cyan: { face: '\u001b[1;38;5;51m', shade: '\u001b[0;38;5;37m' },
77
77
  mint: { face: '\u001b[1;38;5;121m', shade: '\u001b[0;38;5;78m' },
78
78
  gold: { face: '\u001b[1;38;5;220m', shade: '\u001b[0;38;5;178m' },
79
+ dusk: { face: '\u001b[1;38;5;141m', shade: '\u001b[0;38;5;97m' },
79
80
  };
80
81
  /** Runs of stroke and runs of bevel, alternating; spaces stay unstyled. */
81
82
  const RUNS = /[█▀▄]+|[^█▀▄ ]+/g;
@@ -120,6 +121,13 @@ export function bannerLines(text, columns = process.stderr.columns || 80) {
120
121
  lines.push(`${' '.repeat(Math.max(INDENT, Math.round((width - caption.length) / 2)))}${dim(caption)}`);
121
122
  return lines;
122
123
  }
124
+ /**
125
+ * The same letters, unpainted and still split by word, for a renderer that is
126
+ * not a terminal and colours the two halves its own way.
127
+ */
128
+ export function bannerArt(text) {
129
+ return { head: big(text.head), accent: big(text.accent).map((row) => row.trimEnd()) };
130
+ }
123
131
  /** Narration, and only for someone watching. */
124
132
  export function printBanner(text, options = {}) {
125
133
  if (!process.stderr.isTTY) {
@@ -540,6 +540,7 @@ const SUBS = {
540
540
  export const models = {
541
541
  summary: 'What this machine can use: list, search, test and pick models.',
542
542
  usage: USAGE,
543
+ banner: { head: 'Zenera', accent: 'Models', subtitle: 'Model Catalog', hue: 'dusk' },
543
544
  details: [
544
545
  'Answers "what can I use", using the credentials already on this',
545
546
  'machine. `zen check` answers the other question — whether one',
package/dist/lib.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { extract, invokedAs, one, parse, split, type Parsed, type Split } from './args.ts';
2
- export { printBanner, type BannerText } from './banner.ts';
2
+ export { bannerArt, printBanner, type BannerText } from './banner.ts';
3
3
  export { Cache, items as cacheItems, cacheKey, kinds as cacheKinds, clear as clearCache, NO_CACHE, sweep as sweepCache, type CacheEntry, type CacheItem, type CacheKind, type CacheOptions, type CacheStore, type Swept, } from './cache.ts';
4
4
  export { CATALOG_TTL_MS, CURATED, fetchCatalog, loadCatalog, loadCatalogs, matches, PREFERRED, type Catalog, type CatalogEntry, type CatalogOptions, type Filters, type Role, } from './catalog.ts';
5
5
  export type { Command, Context } from './command.ts';
package/dist/lib.js CHANGED
@@ -22,7 +22,7 @@
22
22
  // must not let a `CliError` escape into a request handler.
23
23
  // ---------------------------------------------------------------------------
24
24
  export { extract, invokedAs, one, parse, split } from "./args.js";
25
- export { printBanner } from "./banner.js";
25
+ export { bannerArt, printBanner } from "./banner.js";
26
26
  export { Cache, items as cacheItems, cacheKey, kinds as cacheKinds, clear as clearCache, NO_CACHE, sweep as sweepCache, } from "./cache.js";
27
27
  export { CATALOG_TTL_MS, CURATED, fetchCatalog, loadCatalog, loadCatalogs, matches, PREFERRED, } from "./catalog.js";
28
28
  export { assertPrivate, ensureDir, ensureHome, home, paths, readJson, writeJson } from "./home.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zenera/cli",
3
- "version": "1.1.20",
3
+ "version": "1.1.21",
4
4
  "description": "Command-line front end for @zenera/neo: agentic projects you can run, share and commit.",
5
5
  "keywords": [
6
6
  "agents",
@@ -51,7 +51,7 @@
51
51
  "@inkjs/ui": "^2.0.0",
52
52
  "ink": "^7.1.1",
53
53
  "react": "^19.2.8",
54
- "@zenera/neo": "^1.1.20",
54
+ "@zenera/neo": "^1.1.21",
55
55
  "@anthropic-ai/sdk": "^0.120.0",
56
56
  "@google/genai": "^2.18.0",
57
57
  "@openrouter/sdk": "^1.2.80",