lazyclaw 5.0.2 → 5.0.3

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/cli.mjs CHANGED
@@ -1634,31 +1634,28 @@ function _renderBanner(version) {
1634
1634
  ];
1635
1635
  }
1636
1636
 
1637
- // v5 sloth banner — shared with the ink splash (tui/splash.mjs).
1638
- // Single-tone orange like _renderBanner so the no-arg launcher and the
1639
- // chat splash share a visual identity. Opt out with LAZYCLAW_LEGACY_MENU=1
1640
- // to fall back to the boxed figlet variant above.
1641
- let _v5BannerRowsCache = null;
1642
- async function _renderV5Banner(version) {
1643
- if (!_v5BannerRowsCache) {
1644
- try {
1645
- const { banner } = await import('./tui/banner.generated.mjs');
1646
- _v5BannerRowsCache = banner.rows;
1647
- } catch {
1648
- _v5BannerRowsCache = null;
1649
- }
1650
- }
1651
- if (!_v5BannerRowsCache) return _renderBanner(version);
1637
+ // v5 wordmark banner — ANSI Shadow style "LAZYCLAW" rendered in box-drawing
1638
+ // + half-block glyphs at 67 cols x 6 rows. Wider than the chat splash gutter
1639
+ // because the no-arg launcher has the full terminal width to work with.
1640
+ // Single-tone orange. Opt out with LAZYCLAW_LEGACY_MENU=1 to fall back to
1641
+ // the boxed figlet variant above.
1642
+ const _V5_WORDMARK = [
1643
+ " ██╗ █████╗ ███████╗██╗ ██╗ ██████╗██╗ █████╗ ██╗ ██╗",
1644
+ " ██║ ██╔══██╗╚══███╔╝╚██╗ ██╔╝██╔════╝██║ ██╔══██╗██║ ██║",
1645
+ " ██║ ███████║ ███╔╝ ╚████╔╝ ██║ ██║ ███████║██║ █╗ ██║",
1646
+ " ██║ ██╔══██║ ███╔╝ ╚██╔╝ ██║ ██║ ██╔══██║██║███╗██║",
1647
+ " ███████╗██║ ██║███████╗ ██║ ╚██████╗███████╗██║ ██║╚███╔███╔╝",
1648
+ " ╚══════╝╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═════╝╚══════╝╚═╝ ╚═╝ ╚══╝╚══╝ ",
1649
+ ];
1650
+
1651
+ function _renderV5Banner(version) {
1652
1652
  const v = String(version || '?.?.?');
1653
- return _v5BannerRowsCache.map((row, i) => {
1654
- if (i === 8) {
1655
- // Caption row — overlay "lazyclaw v<version>" centered on the 24-wide art
1656
- const cap = `lazyclaw v${v}`;
1657
- const pad = Math.max(0, Math.floor((24 - cap.length) / 2));
1658
- return _orange(' '.repeat(pad) + cap + ' '.repeat(24 - pad - cap.length));
1659
- }
1660
- return _orange(row);
1661
- });
1653
+ const wmCols = 69; // width of _V5_WORDMARK rows including leading " "
1654
+ const versionLine = ` v${v}`;
1655
+ return [
1656
+ ..._V5_WORDMARK.map(_orange),
1657
+ _orange(versionLine.padEnd(wmCols)),
1658
+ ];
1662
1659
  }
1663
1660
 
1664
1661
  function _printChatBanner(activeProvName, activeModel, version) {
@@ -6749,7 +6746,7 @@ async function cmdLauncher() {
6749
6746
  const useLegacyBanner = !!process.env.LAZYCLAW_LEGACY_MENU;
6750
6747
  const bannerRowsCached = useLegacyBanner
6751
6748
  ? _renderBanner(readVersionFromRepo())
6752
- : await _renderV5Banner(readVersionFromRepo());
6749
+ : _renderV5Banner(readVersionFromRepo());
6753
6750
  const draw = () => {
6754
6751
  process.stdout.write('\x1b[?25l\x1b[2J\x1b[H'); // hide cursor + clear
6755
6752
  bannerRowsCached.forEach((l) => process.stdout.write(l + '\n'));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lazyclaw",
3
- "version": "5.0.2",
3
+ "version": "5.0.3",
4
4
  "description": "Lazy, elegant terminal CLI for chatting with Claude / OpenAI / Gemini / Ollama, orchestrating multi-step LLM workflows, and running multi-agent Slack teams with cross-task memory. Banner-on-launch, slash-command ghost autocomplete, persistent sessions, local HTTP gateway.",
5
5
  "keywords": [
6
6
  "claude",
@@ -1,18 +1,29 @@
1
- // AUTO-GENERATED placeholder replace by running `npm run build:splash`.
1
+ // Hand-crafted 24x12 sleepy sloth icon replaces the chafa-generated
2
+ // placeholder. Source image (docs/assets/sleepy-sloth-source.png) is a
3
+ // circle silhouette with no internal detail, so chafa --symbols=braille
4
+ // renders an oval-of-dots at this resolution. A hand drawing reads as
5
+ // a creature; the rasterised conversion did not.
6
+ //
7
+ // All rows are exactly 24 East-Asian-Width cells. Render width matches
8
+ // the splash gutter (GUTTER_WIDTH = 24 in tui/splash.mjs). Don't change
9
+ // row widths without updating tests/phaseC-build-splash.test.mjs (width
10
+ // strict-equals 24, height <= 12).
2
11
  export const banner = {
3
12
  rows: [
4
- " ⣀⣠⣤⣶⣶⣦⣄⡀ ",
5
- " ⢠⣾⠟⠉ ⠈⠙⢿⣦ ",
6
- " ⣿⠁ ● ● ⣿ ",
7
- " ⣿⡀ ⠈⠉⠉⠁ ⣿ ",
8
- " ⠘⢿⣦⡀ ⢀⣴⡿⠃ ",
9
- " ⠈⠙⠻⠷⠶⠶⠿⠟⠋ ",
10
- " ⢸⠁ ⢸ ",
11
- " ⢸⠉ ⠉⠉⠉⠉ ",
12
- " lazyclaw ",
13
- " "
13
+ " ╭──╮ ╭──╮ ",
14
+ " ╭╯ ╰────╯ ╰╮ ",
15
+ " │ ─ ─ │ ",
16
+ " │ │ ",
17
+ " ‿‿‿ │ ",
18
+ " ╰╮ ╭╯ ",
19
+ " ╰─┬─────┬─╯ ",
20
+ " │ │ ",
21
+ " ╱│ z │╲ ",
22
+ " ╱ │ z │ ╲ ",
23
+ " ✦ ╰─────╯ ✦ ",
24
+ " lazyclaw "
14
25
  ],
15
26
  width: 24,
16
- height: 10,
27
+ height: 12,
17
28
  fg: "#FFB347"
18
29
  };