lazyclaw 3.99.27 → 3.99.28

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.
Files changed (2) hide show
  1. package/cli.mjs +55 -49
  2. package/package.json +1 -1
package/cli.mjs CHANGED
@@ -1469,69 +1469,70 @@ function _attachGhostAutocomplete(rl) {
1469
1469
  // border off the box (which is exactly the bug v3.99.5 shipped:
1470
1470
  // two of the inner lines were 33 cols vs the others' 32, so the
1471
1471
  // ╮ rendered into the next line).
1472
- // v3.99.26canonical Big ASCII mascot from the v0.1 Claude Design
1473
- // handoff bundle. 12 rows. Claude's square body + lobster pincers (◂▸)
1474
- // + helmet (╔═╗) + asterisk-star tail. Sleepy slit eyes (│ │) by
1475
- // default name says lazyclaw.
1476
- //
1477
- // State variants live in _renderMascot(state). Big variant = banner.
1478
- // Inline 3-row Tiny variant lives in _renderMascotTiny(state).
1472
+ // v3.99.28 — Big ASCII mascot, rebuilt on a strict 17-wide canvas so
1473
+ // every row aligns (the v3.99.26 port copied the design handoff's
1474
+ // mixed 15/16/17 widths which made the helmet drift left of the
1475
+ // body in any monospace font). Layout: pincers ◂▸ at cols 2-3 and
1476
+ // 13-14, stems │ at cols 2 and 14, helmet box from col 1 to col 15
1477
+ // (13-wide interior), body box same width directly below, legs ┃ at
1478
+ // cols 4 and 12 symmetric on the central axis (col 8).
1479
+ const _MASCOT_W = 17;
1479
1480
  const _MASCOT_BIG = {
1480
1481
  idle: [
1481
- ' ◂▸ ◂▸ ',
1482
+ ' ◂▸ ◂▸ ',
1482
1483
  ' │ │ ',
1483
1484
  ' │ │ ',
1484
- '╔═════════════╗',
1485
- '║ ║',
1486
- '╚═════════════╝',
1487
- '┌─────────────┐',
1488
- '│ │ │ │',
1489
- '┤ │ │ ├',
1490
- '└─────────────┘',
1491
- ' ',
1492
- ' ',
1485
+ ' ╔═════════════╗ ',
1486
+ ' ║ ║ ',
1487
+ ' ╚═════════════╝ ',
1488
+ ' ┌─────────────┐ ',
1489
+ ' │ │ │ │ ',
1490
+ ' ┤ │ │ ├ ',
1491
+ ' └─────────────┘ ',
1492
+ ' ',
1493
+ ' ',
1493
1494
  ],
1494
1495
  working: [
1495
- ' ◂▸ ◂▸ ',
1496
+ ' ◂▸ ◂▸ ',
1496
1497
  ' │ ··· │ ',
1497
1498
  ' │ │ ',
1498
- '╔═════════════╗',
1499
- '║ * ║',
1500
- '╚═════════════╝',
1501
- '┌─────────────┐',
1502
- '│ · · │',
1503
- '┤ ├',
1504
- '└─────────────┘',
1505
- ' ',
1506
- ' ',
1499
+ ' ╔═════════════╗ ',
1500
+ ' * ',
1501
+ ' ╚═════════════╝ ',
1502
+ ' ┌─────────────┐ ',
1503
+ ' │ · · │ ',
1504
+ ' ',
1505
+ ' └─────────────┘ ',
1506
+ ' ',
1507
+ ' ',
1507
1508
  ],
1508
1509
  done: [
1509
- '✦ ◂▸ ◂▸ ✦',
1510
+ '✦ ◂▸ ◂▸ ✦',
1510
1511
  ' │ │ ',
1511
1512
  ' │ │ ',
1512
- '╔═════════════╗',
1513
- '║ ║',
1514
- '╚═════════════╝',
1515
- '┌─────────────┐',
1516
- '│ ^ ^ │',
1517
- '┤ ‿‿‿ ├',
1518
- '└─────────────┘',
1519
- ' ',
1520
- ' ',
1513
+ ' ╔═════════════╗ ',
1514
+ ' ║ ║ ',
1515
+ ' ╚═════════════╝ ',
1516
+ ' ┌─────────────┐ ',
1517
+ ' │ ^ ^ │ ',
1518
+ ' ‿‿‿‿‿ ',
1519
+ ' └─────────────┘ ',
1520
+ ' ',
1521
+ ' ',
1521
1522
  ],
1522
1523
  error: [
1523
- ' ▾ ▾ ',
1524
+ ' ▾ ▾ ',
1524
1525
  ' │ │ ',
1525
1526
  ' │ │ ',
1526
- '╔═════════════╗',
1527
- '║ ~ ║',
1528
- '╚═════════════╝',
1529
- '┌─────────────┐',
1530
- '│ × × │',
1531
- '┤ ├',
1532
- '└─────────────┘',
1533
- ' ',
1534
- ' ',
1527
+ ' ╔═════════════╗ ',
1528
+ ' ~ ',
1529
+ ' ╚═════════════╝ ',
1530
+ ' ┌─────────────┐ ',
1531
+ ' │ × × │ ',
1532
+ ' ⏜⏜⏜⏜⏜ ',
1533
+ ' └─────────────┘ ',
1534
+ ' ',
1535
+ ' ',
1535
1536
  ],
1536
1537
  };
1537
1538
  const _MASCOT_TINY = {
@@ -4803,8 +4804,13 @@ async function cmdLauncher() {
4803
4804
  });
4804
4805
 
4805
4806
  if (!picked || picked.id === 'quit' || !picked.argv) {
4806
- // Plain return so main() can exit naturally.
4807
- return;
4807
+ // v3.99.28 break out of the while loop, fall through the
4808
+ // finally (stdin cleanup), then hit the explicit process.exit(0)
4809
+ // at the function tail. Previously this was `return`, which
4810
+ // jumped over the explicit exit and left dangling timers /
4811
+ // sockets (ollama probe, registry retry, etc.) keeping the
4812
+ // event loop alive — visible to the user as "Quit didn't quit."
4813
+ break;
4808
4814
  }
4809
4815
 
4810
4816
  // Two menu items need a follow-up question before they can run:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lazyclaw",
3
- "version": "3.99.27",
3
+ "version": "3.99.28",
4
4
  "description": "Lazy, elegant terminal CLI for chatting with Claude / OpenAI / Gemini / Ollama and orchestrating multi-step LLM workflows. Banner-on-launch, slash-command ghost autocomplete, persistent sessions, local HTTP gateway.",
5
5
  "keywords": [
6
6
  "claude",