wormclaude 1.0.28 → 1.0.29

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/ansi.js CHANGED
@@ -72,9 +72,11 @@ const CLAUDE_ROWS = [
72
72
  ];
73
73
  /** Banner'ı ANSI olarak üretir (dar ekranda tek kelime, geniş ekranda yan yana). */
74
74
  export function bannerAnsi(cols) {
75
- if (cols < 64)
75
+ // Responsive: çok dar → tek kelime; orta → WORM üstte CLAUDE altta; geniş → yan yana.
76
+ // (TUI resize'da yeniden bastığı için bozulmaz.)
77
+ if (cols < 50)
76
78
  return paint('WORMCLAUDE', theme.red, true) + '\n' + paint(' ' + t('banner.subtitle'), theme.greyDim);
77
- const rows = cols >= 100 ? WORM_ROWS.map((w, i) => w + CLAUDE_ROWS[i]) : [...WORM_ROWS, ...CLAUDE_ROWS];
79
+ const rows = cols >= 90 ? WORM_ROWS.map((w, i) => w + CLAUDE_ROWS[i]) : [...WORM_ROWS, ...CLAUDE_ROWS];
78
80
  return rows.map((r) => paint(r, theme.red, true)).join('\n') + '\n' + paint(' ' + t('banner.subtitle'), theme.greyDim);
79
81
  }
80
82
  // ── Markdown bloğu → ANSI (kod blokları sözdizimi-vurgulu) ──
package/dist/theme.js CHANGED
@@ -16,4 +16,4 @@ export const theme = {
16
16
  synType: '#a78bfa', // tip/sınıf adları, sabitler
17
17
  synProp: '#e0e0e0', // özellik/anahtar adları
18
18
  };
19
- export const VERSION = '1.0.28';
19
+ export const VERSION = '1.0.29';
package/dist/tui.js CHANGED
@@ -46,8 +46,20 @@ export async function runTui() {
46
46
  let streamPreview = ''; // akış sırasında footer'da gösterilen ham metin
47
47
  let spin = 0;
48
48
  const SPIN = ['·', '✢', '✳', '✶', '✻', '✽', '✶', '✳', '✢'];
49
- // ── Geçmişe kalıcı yaz (scrollback) ──
50
- const printItem = (it) => { logUpdate.clear(); process.stdout.write(itemAnsi(it, cols()) + '\n'); renderFooter(); };
49
+ // Tüm görsel öğeler bellekte (resize'da yeni genişlikte yeniden basmak için).
50
+ const displayItems = [
51
+ { kind: 'banner' },
52
+ { kind: 'note', text: `v${VERSION} · özel renderer (deneysel) · /help komutlar · /kopyala panoya` },
53
+ ];
54
+ // ── Geçmişe kalıcı yaz (scrollback) + belleğe ekle ──
55
+ const printItem = (it) => { displayItems.push(it); logUpdate.clear(); process.stdout.write(itemAnsi(it, cols()) + '\n'); renderFooter(); };
56
+ // ── Resize: ekranı temizle, HER ŞEYİ o anki genişlikte yeniden bas (banner + kod responsive) ──
57
+ function redrawAll() {
58
+ process.stdout.write('\x1b[2J\x1b[3J\x1b[H');
59
+ for (const it of displayItems)
60
+ process.stdout.write(itemAnsi(it, cols()) + '\n');
61
+ renderFooter();
62
+ }
51
63
  // ── Canlı footer (log-update yönetir) ──
52
64
  function renderFooter() {
53
65
  const W = Math.max(8, cols());
@@ -116,12 +128,8 @@ export async function runTui() {
116
128
  process.stdout.write('\x1b[?1000l\x1b[?1002l\x1b[?1003l\x1b[?1006l\x1b[?1015l\x1b[?1007l');
117
129
  }
118
130
  catch { }
119
- // Temiz başlangıç: önceki terminal içeriğini ve scrollback'i temizle.
120
- process.stdout.write('\x1b[2J\x1b[3J\x1b[H');
121
- // KOMPAKT banner (tek satır) — büyük ASCII scrollback'te küçültünce bozuluyordu; bu bozulmaz.
122
- process.stdout.write(paint(' ● WORMCLAUDE', theme.red, true) + paint(' · uncensored security + code', theme.greyDim) + '\n');
123
- process.stdout.write(paint(` v${VERSION} · özel renderer (deneysel) · /help komutlar · /kopyala panoya`, theme.greyDim) + '\n\n');
124
- renderFooter();
131
+ // Temiz başlangıç + banner'ı o anki genişlikte bas (responsive: geniş→büyük ASCII, dar→tek kelime).
132
+ redrawAll();
125
133
  const quit = () => { logUpdate.clear(); process.stdout.write('\x1b[2J\x1b[3J\x1b[H'); process.exit(0); };
126
134
  let ctrlcAt = 0;
127
135
  process.stdin.on('keypress', (str, key) => {
@@ -189,6 +197,8 @@ export async function runTui() {
189
197
  renderFooter();
190
198
  }
191
199
  });
192
- // resize → footer'ı yeniden çiz (geçmiş scrollback'te terminalce sarılır)
193
- process.stdout.on('resize', () => renderFooter());
200
+ // resize → debounce sonra HER ŞEYİ yeni genişlikte yeniden bas (banner/kod responsive, bozulmaz).
201
+ let rzTimer = null;
202
+ process.stdout.on('resize', () => { if (rzTimer)
203
+ clearTimeout(rzTimer); rzTimer = setTimeout(redrawAll, 120); });
194
204
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wormclaude",
3
- "version": "1.0.28",
3
+ "version": "1.0.29",
4
4
  "description": "WormClaude CLI - uncensored security+code assistant (ink TUI, Claude-style)",
5
5
  "type": "module",
6
6
  "bin": {