acuvo-code 0.3.4 → 0.3.5

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/ENTERPRISE.md CHANGED
@@ -189,7 +189,7 @@ are the numbers to quote. Counting is the first thing a reviewer does.
189
189
 
190
190
  ⚠️ **This said "18 shipped files", then "41", then "90", then "101", then "108", and every
191
191
  one went stale in turn.** The package ships **119 files — 117 in `lib/`, 2 in
192
- `bin/` — about 77552 lines**, with **234 test files** beside them (counted 2026-08-22).
192
+ `bin/` — about 77604 lines**, with **235 test files** beside them (counted 2026-08-22).
193
193
 
194
194
  ⭐ **AND THE 108 WENT STALE IN THE MOST INSTRUCTIVE WAY POSSIBLE: THREE OF THE FILES IT
195
195
  MISSED WERE REACHABLE FROM NOTHING.** `wiring-reach.test.mjs` was naming
package/lib/chat.mjs CHANGED
@@ -353,9 +353,33 @@ export async function runChat({
353
353
 
354
354
  try {
355
355
  for (;;) {
356
+ /**
357
+ * ── ⭐⭐ THE INPUT IS A BOX, BECAUSE A BARE `› ` IS NOT A PLACE TO TYPE ──
358
+ *
359
+ * Roman, comparing against a real Claude Code screenshot: *"you can see
360
+ * the box where you type, acuvo doesn't have that."* He is right — the
361
+ * prompt was two characters floating in the scrollback, which reads as
362
+ * output rather than as somewhere input goes.
363
+ *
364
+ * ⚠️ THE BOX OPENS BEFORE THE LINE AND CLOSES AFTER IT, deliberately.
365
+ * Drawing all four sides up front needs absolute cursor control, and
366
+ * readline owns the cursor once `question()` starts — every version of
367
+ * that fights the line editor the moment input wraps, a history entry is
368
+ * recalled, or the window is resized. Opening on entry and closing on
369
+ * submit needs no cursor math at all, survives all three, and leaves a
370
+ * transcript where each turn is visibly a closed unit.
371
+ *
372
+ * ⚠️ WIDTH IS READ FRESH EACH TURN — a terminal resized mid-session would
373
+ * otherwise draw rules at the old width for the rest of the run. Clamped,
374
+ * because `columns` is `undefined` when stdout is not a TTY and enormous
375
+ * when someone maximises on an ultrawide.
376
+ */
377
+ const width = Math.max(40, Math.min(100, (output.columns ?? process.stdout.columns ?? 80) - 1));
378
+ if (interactive) output.write(`\n╭${'─'.repeat(width - 1)}\n`);
356
379
  const line = interactive
357
- ? await ask(rl, '› ', state)
380
+ ? await ask(rl, '› ', state)
358
381
  : (queueIndex < queued.length ? queued[queueIndex++] : null);
382
+ if (interactive && line !== null) output.write(`╰${'─'.repeat(width - 1)}\n`);
359
383
  // Echo a piped prompt so a scripted transcript reads like a session.
360
384
  if (!interactive && line !== null && line.trim()) output.write(`› ${line.trim()}
361
385
  `);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "acuvo-code",
3
- "version": "0.3.4",
3
+ "version": "0.3.5",
4
4
  "description": "Acuvo Code — the terminal client for the Acuvo capability registry. Zero dependencies, by design.",
5
5
  "type": "module",
6
6
  "bin": {