@lardexx/arenacode 2.6.1 → 2.6.2
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/docs/tui-preview.html +1 -1
- package/docs/tui-session.png +0 -0
- package/package.json +1 -1
- package/src/tui/widgets.js +14 -4
package/docs/tui-preview.html
CHANGED
|
@@ -24,5 +24,5 @@
|
|
|
24
24
|
<body>
|
|
25
25
|
<h1>arenacode — terminal UI</h1>
|
|
26
26
|
<p>captured from a real pty · opencode-style layout, ANSI colours preserved</p>
|
|
27
|
-
<div class="frame"><pre><div class="ln"> </div><div class="ln"> </div><div class="ln"> </div><div class="ln"> </div><div class="ln"> </div><div class="ln"> </div><div class="ln"> </div><div class="ln"> <span style="color:rgb(92,156,245)">┃</span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> <span style="color:rgb(92,156,245)">┃</span><span style="background:rgb(20,20,20)"> </span><span style="color:rgb(238,238,238);background:rgb(20,20,20)">read hello.txt and run a command</span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> <span style="color:rgb(92,156,245)">┃</span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> <span style="color:rgb(245,167,66)">Thought for 0.0s</span><span style="color:rgb(128,128,128)">: Looking at the folder</span> </div><div class="ln"> </div><div class="ln"> <span style="color:rgb(10,10,10)">┃</span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> <span style="color:rgb(10,10,10)">┃</span><span style="background:rgb(20,20,20)"> </span><span style="color:rgb(128,128,128);background:rgb(20,20,20)">→</span><span style="background:rgb(20,20,20)"> </span><span style="color:rgb(238,238,238);background:rgb(20,20,20)">Reading file: hello.txt</span><span style="color:rgb(128,128,128);background:rgb(20,20,20)"> (23 B)</span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> <span style="color:rgb(10,10,10)">┃</span><span style="background:rgb(20,20,20)"> </span><span style="color:rgb(128,128,128);background:rgb(20,20,20)">hello from the project</span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> <span style="color:rgb(10,10,10)">┃</span><span style="background:rgb(20,20,20)"> </span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> </div><div class="ln"> <span style="color:rgb(10,10,10)">┃</span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> <span style="color:rgb(10,10,10)">┃</span><span style="background:rgb(20,20,20)"> </span><span style="color:rgb(128,128,128);background:rgb(20,20,20)">$</span><span style="background:rgb(20,20,20)"> </span><span style="color:rgb(238,238,238);background:rgb(20,20,20)">echo from-pc</span><span style="color:rgb(128,128,128);background:rgb(20,20,20)"> (exit 0)</span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> <span style="color:rgb(10,10,10)">┃</span><span style="background:rgb(20,20,20)"> </span><span style="color:rgb(128,128,128);background:rgb(20,20,20)">from-pc</span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> </div><div class="ln"> <span style="color:rgb(10,10,10)">┃</span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> <span style="color:rgb(10,10,10)">┃</span><span style="background:rgb(20,20,20)"> </span><span style="color:rgb(128,128,128);background:rgb(20,20,20)">←</span><span style="background:rgb(20,20,20)"> </span><span style="color:rgb(238,238,238);background:rgb(20,20,20)">Writing file: written.txt</span><span style="color:rgb(128,128,128);background:rgb(20,20,20)"> (17 B)</span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> <span style="color:rgb(10,10,10)">┃</span><span style="background:rgb(20,20,20)"> </span><span style="color:rgb(128,128,128);background:rgb(20,20,20)">`write written.txt`</span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> <span style="color:rgb(238,238,238)">All done: the client answered every card.</span> </div><div class="ln"> </div><div class="ln"> <span style="color:rgb(250,178,131)">▣</span> <span style="color:rgb(238,238,238)">Build</span><span style="color:rgb(128,128,128)"> · auto · 0.2s</span> </div><div class="ln"> </div><div class="ln"> <span style="color:rgb(92,156,245)">┃</span><span style="background:rgb(30,30,30)"> </span> </div><div class="ln"> <span style="color:rgb(92,156,245)">┃</span><span style="background:rgb(30,30,30)"> </span><span style="color:rgb(128,128,128);background:rgb(30,30,30)">Ask anything… "Read package.json and add a lint script"</span><span style="background:rgb(30,30,30)"> </span> </div><div class="ln"> <span style="color:rgb(92,156,245)">┃</span><span style="background:rgb(30,30,30)"> </span> </div><div class="ln"> <span style="color:rgb(92,156,245)">┃</span><span style="background:rgb(30,30,30)"> </span><span style="color:rgb(92,156,245);background:rgb(30,30,30)">Build</span><span style="background:rgb(30,30,30)"> </span><span style="color:rgb(128,128,128);background:rgb(30,30,30)">·</span><span style="background:rgb(30,30,30)"> </span><span style="color:rgb(238,238,238);background:rgb(30,30,30)">auto</span><span style="background:rgb(30,30,30)"> </span><span style="color:rgb(128,128,128);background:rgb(30,30,30)">Arena</span><span style="background:rgb(30,30,30)"> </span> </div><div class="ln"> <span style="color:rgb(92,156,245)">╹</span><span style="color:rgb(30,30,30)">▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀</span> </div><div class="ln"> <span style="color:rgb(238,238,238)">tab</span> <span style="color:rgb(128,128,128)">agents</span> <span style="color:rgb(238,238,238)">ctrl+p</span> <span style="color:rgb(128,128,128)">commands</span> </div><div class="ln"> </div><div class="ln"> <span style="color:rgb(128,128,128)">/tmp/arenacode-tui-GcVXOG/project</span> <span style="color:rgb(128,128,128)">ce08de · v2.5.2</span> </div></pre></div>
|
|
27
|
+
<div class="frame"><pre><div class="ln"> </div><div class="ln"> </div><div class="ln"> </div><div class="ln"> </div><div class="ln"> </div><div class="ln"> <span style="color:rgb(92,156,245)">┃</span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> <span style="color:rgb(92,156,245)">┃</span><span style="background:rgb(20,20,20)"> </span><span style="color:rgb(238,238,238);background:rgb(20,20,20)">read hello.txt and run a command</span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> <span style="color:rgb(92,156,245)">┃</span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> </div><div class="ln"> <span style="color:rgb(245,167,66)">Thought for 0.0s</span><span style="color:rgb(128,128,128)">: Looking at the folder</span> </div><div class="ln"> </div><div class="ln"> <span style="color:rgb(10,10,10)">┃</span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> <span style="color:rgb(10,10,10)">┃</span><span style="background:rgb(20,20,20)"> </span><span style="color:rgb(128,128,128);background:rgb(20,20,20)">→</span><span style="background:rgb(20,20,20)"> </span><span style="color:rgb(238,238,238);background:rgb(20,20,20)">Reading file: hello.txt</span><span style="color:rgb(128,128,128);background:rgb(20,20,20)"> (23 B)</span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> <span style="color:rgb(10,10,10)">┃</span><span style="background:rgb(20,20,20)"> </span><span style="color:rgb(128,128,128);background:rgb(20,20,20)">hello from the project</span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> <span style="color:rgb(10,10,10)">┃</span><span style="background:rgb(20,20,20)"> </span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> </div><div class="ln"> <span style="color:rgb(10,10,10)">┃</span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> <span style="color:rgb(10,10,10)">┃</span><span style="background:rgb(20,20,20)"> </span><span style="color:rgb(128,128,128);background:rgb(20,20,20)">$</span><span style="background:rgb(20,20,20)"> </span><span style="color:rgb(238,238,238);background:rgb(20,20,20)">echo from-pc</span><span style="color:rgb(128,128,128);background:rgb(20,20,20)"> (exit 0)</span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> <span style="color:rgb(10,10,10)">┃</span><span style="background:rgb(20,20,20)"> </span><span style="color:rgb(128,128,128);background:rgb(20,20,20)">from-pc</span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> </div><div class="ln"> <span style="color:rgb(10,10,10)">┃</span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> <span style="color:rgb(10,10,10)">┃</span><span style="background:rgb(20,20,20)"> </span><span style="color:rgb(128,128,128);background:rgb(20,20,20)">←</span><span style="background:rgb(20,20,20)"> </span><span style="color:rgb(238,238,238);background:rgb(20,20,20)">Writing file: written.txt</span><span style="color:rgb(128,128,128);background:rgb(20,20,20)"> (17 B)</span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> <span style="color:rgb(10,10,10)">┃</span><span style="background:rgb(20,20,20)"> </span><span style="color:rgb(128,128,128);background:rgb(20,20,20)">`write written.txt`</span><span style="background:rgb(20,20,20)"> </span> </div><div class="ln"> </div><div class="ln"> <span style="color:rgb(238,238,238)">All done: the client answered every card.</span> </div><div class="ln"> </div><div class="ln"> <span style="color:rgb(250,178,131)">▣</span> <span style="color:rgb(238,238,238)">Build</span><span style="color:rgb(128,128,128)"> · auto · 0.2s</span> </div><div class="ln"> </div><div class="ln"> <span style="color:rgb(92,156,245)">┃</span><span style="background:rgb(30,30,30)"> </span> </div><div class="ln"> <span style="color:rgb(92,156,245)">┃</span><span style="background:rgb(30,30,30)"> </span><span style="color:rgb(128,128,128);background:rgb(30,30,30)">Ask anything… "Read package.json and add a lint script"</span><span style="background:rgb(30,30,30)"> </span> </div><div class="ln"> <span style="color:rgb(92,156,245)">┃</span><span style="background:rgb(30,30,30)"> </span> </div><div class="ln"> <span style="color:rgb(92,156,245)">┃</span><span style="background:rgb(30,30,30)"> </span><span style="color:rgb(92,156,245);background:rgb(30,30,30)">Build</span><span style="background:rgb(30,30,30)"> </span><span style="color:rgb(128,128,128);background:rgb(30,30,30)">·</span><span style="background:rgb(30,30,30)"> </span><span style="color:rgb(238,238,238);background:rgb(30,30,30)">auto</span><span style="background:rgb(30,30,30)"> </span><span style="color:rgb(128,128,128);background:rgb(30,30,30)">Arena</span><span style="background:rgb(30,30,30)"> </span> </div><div class="ln"> <span style="color:rgb(92,156,245)">╹</span><span style="color:rgb(30,30,30)">▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀</span> </div><div class="ln"> <span style="color:rgb(238,238,238)">tab</span> <span style="color:rgb(128,128,128)">build</span> <span style="color:rgb(238,238,238)">ctrl+p</span> <span style="color:rgb(128,128,128)">commands</span> </div><div class="ln"> </div><div class="ln"> <span style="color:rgb(128,128,128)">/tmp/arenacode-tui-6d6dX9/project</span> <span style="color:rgb(128,128,128)">703aa1 · v2.5.2</span> </div></pre></div>
|
|
28
28
|
</body></html>
|
package/docs/tui-session.png
CHANGED
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lardexx/arenacode",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.2",
|
|
4
4
|
"description": "Terminal client for ArenaCode: talks to an arena-bridge, streams the Agent Mode timeline, and runs local commands and file operations on your PC. Node port of the ArenaCode desktop client.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "commonjs",
|
package/src/tui/widgets.js
CHANGED
|
@@ -174,11 +174,16 @@ function chatLines(t, items, opts = {}) {
|
|
|
174
174
|
const { width, frame = 0, agent = 'Build', model = '', details = true } = opts;
|
|
175
175
|
const out = [];
|
|
176
176
|
let prevKind = null;
|
|
177
|
+
// Blocks (a message, a card) get one empty line above and below; single lines
|
|
178
|
+
// (thoughts, notices) stay together, so nothing looks glued to its neighbour.
|
|
179
|
+
const pushBlank = () => {
|
|
180
|
+
if (out.length && out[out.length - 1] !== '') out.push('');
|
|
181
|
+
};
|
|
177
182
|
|
|
178
183
|
for (const item of items) {
|
|
179
184
|
switch (item.kind) {
|
|
180
185
|
case 'user': {
|
|
181
|
-
|
|
186
|
+
pushBlank();
|
|
182
187
|
const bg = bgSeq(t.c.backgroundPanel);
|
|
183
188
|
const color = item.color || t.c.secondary;
|
|
184
189
|
const bar = `${fgSeq(color)}┃${RESET}`;
|
|
@@ -191,11 +196,12 @@ function chatLines(t, items, opts = {}) {
|
|
|
191
196
|
out.push(bar + bgWrap(bg, spaces(2) + tags, width - 1));
|
|
192
197
|
}
|
|
193
198
|
out.push(bar + bgWrap(bg, '', width - 1));
|
|
199
|
+
out.push('');
|
|
194
200
|
prevKind = 'user';
|
|
195
201
|
break;
|
|
196
202
|
}
|
|
197
203
|
case 'text': {
|
|
198
|
-
|
|
204
|
+
pushBlank();
|
|
199
205
|
for (const line of R.wrap(item.text || '', Math.max(10, width - 3))) {
|
|
200
206
|
out.push(spaces(3) + `${fgSeq(t.c.text)}${line}${RESET}`);
|
|
201
207
|
}
|
|
@@ -227,9 +233,9 @@ function chatLines(t, items, opts = {}) {
|
|
|
227
233
|
const color = item.state === 'failed' ? t.c.error : running ? t.c.text : t.c.textMuted;
|
|
228
234
|
const label = item.label || 'step';
|
|
229
235
|
const meta = item.meta ? ` (${item.meta})` : '';
|
|
236
|
+
pushBlank();
|
|
230
237
|
if (item.detail && details) {
|
|
231
238
|
// block tool: left border, panel background, command then output
|
|
232
|
-
out.push('');
|
|
233
239
|
const bg = bgSeq(t.c.backgroundPanel);
|
|
234
240
|
const bar = `${fgSeq(t.c.background)}┃${RESET}`;
|
|
235
241
|
out.push(bar + bgWrap(bg, '', width - 1));
|
|
@@ -253,6 +259,7 @@ function chatLines(t, items, opts = {}) {
|
|
|
253
259
|
: `${fgSeq(item.state === 'failed' ? t.c.error : t.c.textMuted)}${icon}${RESET} `;
|
|
254
260
|
out.push(spaces(3) + iconPaint + head + `${fgSeq(t.c.textMuted)}${meta}${RESET}`);
|
|
255
261
|
}
|
|
262
|
+
out.push('');
|
|
256
263
|
prevKind = 'tool';
|
|
257
264
|
break;
|
|
258
265
|
}
|
|
@@ -269,6 +276,7 @@ function chatLines(t, items, opts = {}) {
|
|
|
269
276
|
out.push(spaces(3) + `${fgSeq(t.c.error)}${R.vclip(item.text || 'error', width - 4)}${RESET}`);
|
|
270
277
|
break;
|
|
271
278
|
case 'done': {
|
|
279
|
+
pushBlank();
|
|
272
280
|
const tone = item.state === 'error' ? t.c.error : item.state === 'cancelled' ? t.c.textMuted : t.c.primary;
|
|
273
281
|
const secs = item.secs ? ` · ${Number(item.secs).toFixed(1)}s` : '';
|
|
274
282
|
out.push(
|
|
@@ -345,13 +353,15 @@ function sessionScreen(t, opts) {
|
|
|
345
353
|
const out = [];
|
|
346
354
|
const footerH = 2;
|
|
347
355
|
const statusH = statusLine ? 1 : 0;
|
|
348
|
-
const
|
|
356
|
+
const gapH = 1; // breathing room between the conversation and the prompt box
|
|
357
|
+
const bodyH = Math.max(1, height - promptLines.length - footerH - statusH - gapH);
|
|
349
358
|
const maxScroll = Math.max(0, chat.length - bodyH);
|
|
350
359
|
const scroll = Math.min(Math.max(0, opts.scroll || 0), maxScroll);
|
|
351
360
|
const start = Math.max(0, chat.length - bodyH - scroll);
|
|
352
361
|
const visible = chat.slice(start, start + bodyH);
|
|
353
362
|
while (visible.length < bodyH) visible.unshift('');
|
|
354
363
|
for (const line of visible) out.push(line);
|
|
364
|
+
out.push('');
|
|
355
365
|
out.push(...promptLines);
|
|
356
366
|
if (statusLine) out.push(statusLine);
|
|
357
367
|
out.push('');
|