@relace-ai/jacq 0.1.2-beta.3 → 0.1.2-beta.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.
Files changed (94) hide show
  1. package/dist/actions/messages.d.ts +2 -5
  2. package/dist/actions/messages.js +2 -10
  3. package/dist/actions/messages.js.map +1 -1
  4. package/dist/actions/tasks.js +6 -2
  5. package/dist/actions/tasks.js.map +1 -1
  6. package/dist/approvalGate.d.ts +42 -0
  7. package/dist/approvalGate.js +140 -0
  8. package/dist/approvalGate.js.map +1 -0
  9. package/dist/approvals.d.ts +21 -0
  10. package/dist/approvals.js +79 -0
  11. package/dist/approvals.js.map +1 -0
  12. package/dist/auth.d.ts +1 -0
  13. package/dist/auth.js +3 -0
  14. package/dist/auth.js.map +1 -1
  15. package/dist/charWidth.d.ts +11 -0
  16. package/dist/charWidth.js +31 -0
  17. package/dist/charWidth.js.map +1 -0
  18. package/dist/clipboard.d.ts +0 -5
  19. package/dist/clipboard.js +0 -5
  20. package/dist/clipboard.js.map +1 -1
  21. package/dist/commands.js +3 -0
  22. package/dist/commands.js.map +1 -1
  23. package/dist/config.d.ts +2 -1
  24. package/dist/config.js +17 -10
  25. package/dist/config.js.map +1 -1
  26. package/dist/connection.d.ts +2 -0
  27. package/dist/connection.js +199 -6
  28. package/dist/connection.js.map +1 -1
  29. package/dist/constants.d.ts +2 -2
  30. package/dist/constants.js +2 -2
  31. package/dist/constants.js.map +1 -1
  32. package/dist/index.js +202 -28
  33. package/dist/index.js.map +1 -1
  34. package/dist/markdown/parser.js +248 -60
  35. package/dist/markdown/parser.js.map +1 -1
  36. package/dist/markdown/renderer.d.ts +3 -3
  37. package/dist/markdown/renderer.js +255 -66
  38. package/dist/markdown/renderer.js.map +1 -1
  39. package/dist/markdown/types.d.ts +4 -1
  40. package/dist/markdown/types.js.map +1 -1
  41. package/dist/protocol.d.ts +5 -0
  42. package/dist/protocol.js +245 -67
  43. package/dist/protocol.js.map +1 -1
  44. package/dist/renderer.js +4 -0
  45. package/dist/renderer.js.map +1 -1
  46. package/dist/startupAnimation.d.ts +4 -0
  47. package/dist/startupAnimation.js +326 -0
  48. package/dist/startupAnimation.js.map +1 -0
  49. package/dist/state.js +22 -0
  50. package/dist/state.js.map +1 -1
  51. package/dist/styles.js +4 -1
  52. package/dist/styles.js.map +1 -1
  53. package/dist/terminal.d.ts +9 -0
  54. package/dist/terminal.js +15 -0
  55. package/dist/terminal.js.map +1 -1
  56. package/dist/tools/registry.js +138 -13
  57. package/dist/tools/registry.js.map +1 -1
  58. package/dist/types.d.ts +29 -3
  59. package/dist/ui/backgroundTasks.js +1 -1
  60. package/dist/ui/backgroundTasks.js.map +1 -1
  61. package/dist/ui/config.d.ts +6 -0
  62. package/dist/ui/config.js +53 -0
  63. package/dist/ui/config.js.map +1 -0
  64. package/dist/ui/diffViewer.d.ts +9 -0
  65. package/dist/ui/diffViewer.js +320 -0
  66. package/dist/ui/diffViewer.js.map +1 -0
  67. package/dist/ui/index.js +39 -3
  68. package/dist/ui/index.js.map +1 -1
  69. package/dist/ui/input.d.ts +1 -1
  70. package/dist/ui/input.js +40 -13
  71. package/dist/ui/input.js.map +1 -1
  72. package/dist/ui/localCommands.d.ts +8 -0
  73. package/dist/ui/localCommands.js +267 -0
  74. package/dist/ui/localCommands.js.map +1 -0
  75. package/dist/ui/messages.js +189 -54
  76. package/dist/ui/messages.js.map +1 -1
  77. package/dist/ui/primitives.d.ts +9 -1
  78. package/dist/ui/primitives.js +64 -14
  79. package/dist/ui/primitives.js.map +1 -1
  80. package/dist/ui/promptInput.js +42 -8
  81. package/dist/ui/promptInput.js.map +1 -1
  82. package/dist/ui/promptPicker.js +3 -4
  83. package/dist/ui/promptPicker.js.map +1 -1
  84. package/dist/ui/resumeTask.d.ts +6 -0
  85. package/dist/ui/resumeTask.js +136 -0
  86. package/dist/ui/resumeTask.js.map +1 -0
  87. package/dist/ui/sessions.js +2 -2
  88. package/dist/ui/sessions.js.map +1 -1
  89. package/dist/ui/welcome.js +19 -10
  90. package/dist/ui/welcome.js.map +1 -1
  91. package/dist/utils/resolvePath.d.ts +10 -0
  92. package/dist/utils/resolvePath.js +24 -0
  93. package/dist/utils/resolvePath.js.map +1 -0
  94. package/package.json +7 -4
@@ -5,29 +5,62 @@
5
5
  import { drawStyledLine, drawText } from './primitives.js';
6
6
  import { getVisibleMessages, isCurrentTaskRunning } from '../actions/messages.js';
7
7
  import { state } from '../state.js';
8
+ import { interceptsShiftScroll } from '../terminal.js';
8
9
  import { parse } from '../markdown/parser.js';
9
10
  import { renderTokens } from '../markdown/renderer.js';
10
11
  import { supportsHyperlinks } from '../terminal-caps.js';
12
+ import { displayWidth, fitToDisplayWidth } from '../charWidth.js';
11
13
  /**
12
- * Wrap text to fit within maxWidth, breaking on spaces when possible.
14
+ * Wrap text to fit within maxWidth (display columns), breaking on spaces when possible.
13
15
  */
14
16
  function wrapText(text, maxWidth) {
15
17
  if (maxWidth <= 0)
16
18
  return [text];
17
- if (text.length <= maxWidth)
19
+ if (displayWidth(text) <= maxWidth)
18
20
  return [text];
19
21
  const result = [];
20
- let remaining = text;
21
- while (remaining.length > maxWidth) {
22
- let breakAt = remaining.lastIndexOf(' ', maxWidth);
23
- if (breakAt <= 0)
24
- breakAt = maxWidth; // force break if no space
25
- result.push(remaining.slice(0, breakAt));
26
- remaining = remaining.slice(breakAt).replace(/^ /, ''); // trim leading space
22
+ const words = text.split(' ');
23
+ let currentLine = '';
24
+ let currentWidth = 0;
25
+ for (const word of words) {
26
+ const wordWidth = displayWidth(word);
27
+ const sep = currentLine ? 1 : 0;
28
+ if (currentWidth + sep + wordWidth <= maxWidth) {
29
+ currentLine += (currentLine ? ' ' : '') + word;
30
+ currentWidth += sep + wordWidth;
31
+ }
32
+ else {
33
+ if (currentLine)
34
+ result.push(currentLine);
35
+ if (wordWidth > maxWidth) {
36
+ let remaining = word;
37
+ while (displayWidth(remaining) > maxWidth) {
38
+ let chunk = '';
39
+ let chunkWidth = 0;
40
+ for (const ch of remaining) {
41
+ const cw = displayWidth(ch);
42
+ if (chunkWidth + cw > maxWidth)
43
+ break;
44
+ chunk += ch;
45
+ chunkWidth += cw;
46
+ }
47
+ if (chunk.length === 0)
48
+ chunk = [...remaining][0];
49
+ result.push(chunk);
50
+ remaining = remaining.slice(chunk.length);
51
+ }
52
+ currentLine = remaining;
53
+ currentWidth = displayWidth(remaining);
54
+ }
55
+ else {
56
+ currentLine = word;
57
+ currentWidth = wordWidth;
58
+ }
59
+ }
27
60
  }
28
- if (remaining.length > 0)
29
- result.push(remaining);
30
- return result;
61
+ if (currentLine)
62
+ result.push(currentLine);
63
+ return result.length > 0 ? result : [text];
31
64
  }
32
65
  /**
33
66
  * Format tool context (file paths, commands, etc.)
@@ -39,7 +72,7 @@ function formatToolContext(toolCall) {
39
72
  case 'bash': {
40
73
  const cmd = String(args.command || '');
41
74
  const firstLine = cmd.split('\n')[0];
42
- return firstLine.length > 80 ? firstLine.slice(0, 80) + '…' : firstLine;
75
+ return displayWidth(firstLine) > 80 ? fitToDisplayWidth(firstLine, 79) + '…' : firstLine;
43
76
  }
44
77
  case 'write_file':
45
78
  case 'read_file':
@@ -52,32 +85,59 @@ function formatToolContext(toolCall) {
52
85
  case 'grep': {
53
86
  const grepPattern = String(args.pattern || '');
54
87
  const grepPath = String(args.path || '.');
55
- return `"${grepPattern.slice(0, 40)}" in ${grepPath}`;
88
+ const truncatedPattern = displayWidth(grepPattern) > 40 ? fitToDisplayWidth(grepPattern, 39) + '…' : grepPattern;
89
+ return `"${truncatedPattern}" in ${grepPath}`;
56
90
  }
57
91
  case 'tap':
58
92
  case 'type_text': {
59
93
  const text = String(args.text || args.element_id || '');
60
- return text.length > 60 ? text.slice(0, 60) + '…' : text;
94
+ return displayWidth(text) > 60 ? fitToDisplayWidth(text, 59) + '…' : text;
61
95
  }
62
96
  case 'goto': {
63
97
  const url = String(args.path || args.url || '');
64
- return url.length > 60 ? url.slice(0, 60) + '…' : url;
98
+ return displayWidth(url) > 60 ? fitToDisplayWidth(url, 59) + '…' : url;
65
99
  }
66
100
  case 'scroll':
67
101
  return String(args.direction || '');
68
102
  case 'search': {
69
103
  const query = String(args.query || '');
70
- return query.length > 60 ? query.slice(0, 60) + '…' : query;
104
+ return displayWidth(query) > 60 ? fitToDisplayWidth(query, 59) + '…' : query;
71
105
  }
106
+ case 'ask_user':
107
+ return args.response || args.responseText || args.responseReceived
108
+ ? 'response received'
109
+ : 'awaiting response';
72
110
  default: {
73
111
  const firstArg = Object.values(args).find(v => typeof v === 'string');
74
112
  if (firstArg && typeof firstArg === 'string') {
75
- return firstArg.length > 60 ? firstArg.slice(0, 60) + '…' : firstArg;
113
+ return displayWidth(firstArg) > 60 ? fitToDisplayWidth(firstArg, 59) + '…' : firstArg;
76
114
  }
77
115
  return '';
78
116
  }
79
117
  }
80
118
  }
119
+ function formatAskUserQuestion(args) {
120
+ const questions = args.questions;
121
+ const question = questions?.[0]?.question;
122
+ if (typeof question !== 'string' || !question.trim())
123
+ return null;
124
+ return question.trim();
125
+ }
126
+ function formatAskUserAnswer(args) {
127
+ const response = args.response;
128
+ if (response && typeof response === 'object') {
129
+ const firstEntry = Object.entries(response)[0];
130
+ if (!firstEntry)
131
+ return null;
132
+ const [, value] = firstEntry;
133
+ return typeof value === 'string' ? value : JSON.stringify(value);
134
+ }
135
+ const responseText = args.responseText;
136
+ if (typeof responseText === 'string' && responseText.trim()) {
137
+ return responseText.trim();
138
+ }
139
+ return null;
140
+ }
81
141
  /**
82
142
  * Format token count (e.g., 1234 -> "1.2k")
83
143
  */
@@ -97,7 +157,8 @@ function getLines(width) {
97
157
  const maxWidth = width - 4;
98
158
  const isRunning = isCurrentTaskRunning();
99
159
  const showThinking = !state.pendingPrompt && (state.activityPhase === 'submitting' ||
100
- state.activityPhase === 'waiting_for_first_step');
160
+ state.activityPhase === 'waiting_for_step');
161
+ const showSubmitting = !state.pendingPrompt && state.activityPhase === 'resuming_from_prompt';
101
162
  let lastToolIdx = -1;
102
163
  for (let i = messages.length - 1; i >= 0; i--) {
103
164
  if (messages[i].type === 'tool') {
@@ -126,10 +187,10 @@ function getLines(width) {
126
187
  const line = userLines[i];
127
188
  if (i === 0) {
128
189
  const wrapped = wrapText(line, wrapWidth);
129
- const bubbleWidth = Math.max(...wrapped.map(w => w.length));
190
+ const bubbleWidth = Math.max(...wrapped.map(w => displayWidth(w)));
130
191
  for (let w = 0; w < wrapped.length; w++) {
131
192
  const prefix = w === 0 ? ' ▶ ' : ' ';
132
- const padded = wrapped[w].padEnd(bubbleWidth);
193
+ const padded = fitToDisplayWidth(wrapped[w], bubbleWidth);
133
194
  lines.push({ text: `${prefix}${padded} `, styleKey: 'userText' });
134
195
  }
135
196
  }
@@ -157,14 +218,15 @@ function getLines(width) {
157
218
  isRunning &&
158
219
  msgIdx === lastToolIdx &&
159
220
  !showThinking &&
160
- !stepIsDone;
221
+ !stepIsDone &&
222
+ !state.streamBuffer;
161
223
  const stepDot = isInProgress ? (state.blinkVisible ? '●' : ' ') : '●';
162
224
  let tokenSuffix = '';
163
225
  if (msg.tokens) {
164
226
  const input = msg.tokens.input || 0;
165
227
  const output = msg.tokens.output || 0;
166
228
  if (input + output > 0) {
167
- tokenSuffix = ` ↓${formatTokens(input)} ↑${formatTokens(output)}`;
229
+ tokenSuffix = ` \u2193${formatTokens(input)} \u2191${formatTokens(output)}`;
168
230
  }
169
231
  }
170
232
  const stepText = `${stepDot} ${msg.content}`;
@@ -187,21 +249,6 @@ function getLines(width) {
187
249
  : undefined;
188
250
  lines.push({ text: fullText, styleKey: 'dotDone', segments });
189
251
  }
190
- if (msg.toolCalls) {
191
- for (const tc of msg.toolCalls) {
192
- if (tc.name === 'done')
193
- continue;
194
- const context = formatToolContext(tc);
195
- let tcText = ` → ${tc.name}`;
196
- if (context) {
197
- tcText += ` ${context}`;
198
- }
199
- if (tcText.length > maxWidth) {
200
- tcText = tcText.slice(0, maxWidth - 1) + '…';
201
- }
202
- lines.push({ text: tcText, styleKey: 'toolCall' });
203
- }
204
- }
205
252
  if (msg.agentMessage) {
206
253
  lines.push({ text: '', styleKey: 'text' });
207
254
  const mdTokens = parse(msg.agentMessage);
@@ -226,16 +273,60 @@ function getLines(width) {
226
273
  });
227
274
  }
228
275
  }
276
+ const lineLinks = mdLine.links ? mdLine.links.map(l => ({
277
+ start: l.start + prefixLen,
278
+ end: l.end + prefixLen,
279
+ url: l.url,
280
+ })) : undefined;
229
281
  lines.push({
230
282
  text: prefix + mdLine.text,
231
283
  styleKey: 'text',
232
284
  segments: segments.length > 0 ? segments : undefined,
285
+ links: lineLinks,
233
286
  });
234
287
  }
235
288
  }
289
+ if (msg.toolCalls) {
290
+ const hasVisibleTools = msg.toolCalls.some(tc => tc.name !== 'done');
291
+ if (msg.agentMessage && hasVisibleTools) {
292
+ lines.push({ text: '', styleKey: 'text' });
293
+ }
294
+ for (const tc of msg.toolCalls) {
295
+ if (tc.name === 'done')
296
+ continue;
297
+ const tcArgs = tc.args || {};
298
+ const context = formatToolContext(tc);
299
+ let tcText = ` \u2192 ${tc.name}`;
300
+ if (context) {
301
+ tcText += ` ${context}`;
302
+ }
303
+ if (displayWidth(tcText) > maxWidth) {
304
+ tcText = fitToDisplayWidth(tcText, maxWidth - 1) + '…';
305
+ }
306
+ lines.push({ text: tcText, styleKey: 'toolCall' });
307
+ if (tc.name === 'ask_user') {
308
+ const question = formatAskUserQuestion(tcArgs);
309
+ const answer = formatAskUserAnswer(tcArgs);
310
+ if (question) {
311
+ for (const qLine of wrapText(`Q: ${question}`, maxWidth - 6)) {
312
+ lines.push({ text: ` ${qLine}`, styleKey: 'dim' });
313
+ }
314
+ }
315
+ if (answer) {
316
+ for (const aLine of wrapText(`A: ${answer}`, maxWidth - 6)) {
317
+ lines.push({ text: ` ${aLine}`, styleKey: 'dim' });
318
+ }
319
+ }
320
+ }
321
+ }
322
+ }
236
323
  if (stepIsDone) {
237
- lines.push({ text: '', styleKey: 'text' });
238
- lines.push({ text: ' ■ Done', styleKey: 'statusDone' });
324
+ // Skip inline Done if a status "Done" message follows
325
+ // (protocol handler already added one via task.completed)
326
+ if (!nextMsg?.statusKind || nextMsg.statusKind !== 'done') {
327
+ lines.push({ text: '', styleKey: 'text' });
328
+ lines.push({ text: ' ■ Done', styleKey: 'statusDone' });
329
+ }
239
330
  }
240
331
  break;
241
332
  }
@@ -252,18 +343,21 @@ function getLines(width) {
252
343
  start: s.start + 6,
253
344
  end: s.end + 6
254
345
  })) : undefined,
346
+ links: mdLine.links ? mdLine.links.map(l => ({
347
+ ...l,
348
+ start: l.start + 6,
349
+ end: l.end + 6
350
+ })) : undefined,
255
351
  });
256
352
  }
257
353
  break;
258
354
  }
259
355
  case 'status': {
260
356
  lines.push({ text: '', styleKey: 'text' });
261
- const isDone = msg.content.includes('Done') || msg.content.includes('completed');
262
- const isCancelled = msg.content.includes('Cancelled');
263
- if (isDone) {
357
+ if (msg.statusKind === 'done') {
264
358
  lines.push({ text: ' ■ Done', styleKey: 'statusDone' });
265
359
  }
266
- else if (isCancelled) {
360
+ else if (msg.statusKind === 'cancelled') {
267
361
  lines.push({ text: ' ⊘ Cancelled', styleKey: 'statusDone' });
268
362
  }
269
363
  else if (msg.linkUrl && !supportsHyperlinks()) {
@@ -302,11 +396,12 @@ function getLines(width) {
302
396
  lines.push({ text: ' ' + msg.content, styleKey: 'text' });
303
397
  }
304
398
  }
305
- // Show "Thinking" with blinking dot when waiting for next step
306
- if (showThinking && !state.pendingPrompt) {
399
+ // Show request-in-flight indicator before first step arrives
400
+ if ((showThinking || showSubmitting) && !state.pendingPrompt) {
307
401
  lines.push({ text: '', styleKey: 'text' });
308
402
  const thinkingDot = state.blinkVisible ? '●' : ' ';
309
- lines.push({ text: ` ${thinkingDot} Thinking...`, styleKey: 'toolStep' });
403
+ const label = showSubmitting ? 'Submitting...' : 'Thinking...';
404
+ lines.push({ text: ` ${thinkingDot} ${label}`, styleKey: 'toolStep' });
310
405
  }
311
406
  // Show pending question indicator
312
407
  if (state.pendingPrompt) {
@@ -319,15 +414,55 @@ function getLines(width) {
319
414
  lines.push({ text: ' ⊘ Cancelling...', styleKey: 'statusDefault' });
320
415
  }
321
416
  // Stream buffer (in-progress streaming text with markdown)
322
- if (state.streamBuffer) {
417
+ // Only render when pinned to bottom — avoids pushing the view when scrolled up
418
+ if (state.streamBuffer && state.isPinned) {
419
+ lines.push({ text: '', styleKey: 'text' });
420
+ // Step header with blinking dot
421
+ const currentTask = state.tasks.find(t => t.id === state.currentTaskId);
422
+ const nextStep = (currentTask?.step || 0) + 1;
423
+ const stepDot = state.blinkVisible ? '●' : ' ';
424
+ const stepText = `${stepDot} Step ${nextStep}`;
425
+ const fullStepText = ' ' + stepText;
426
+ const stepContentEnd = 2 + stepText.length;
427
+ lines.push({
428
+ text: fullStepText,
429
+ styleKey: 'dim',
430
+ segments: [{ start: 4, end: stepContentEnd, styleKey: 'dotDone' }],
431
+ });
432
+ // Agent text with │ prefix
323
433
  lines.push({ text: '', styleKey: 'text' });
324
434
  const streamTokens = parse(state.streamBuffer);
325
- const streamMdLines = renderTokens(streamTokens, maxWidth);
435
+ const prefix = ' │ ';
436
+ const prefixLen = prefix.length;
437
+ const streamMdLines = renderTokens(streamTokens, maxWidth - prefixLen);
326
438
  for (const mdLine of streamMdLines) {
439
+ const segments = [];
440
+ if (mdLine.text.length > 0 && mdLine.styleKey !== 'text') {
441
+ segments.push({
442
+ start: prefixLen,
443
+ end: prefixLen + mdLine.text.length,
444
+ styleKey: mdLine.styleKey,
445
+ });
446
+ }
447
+ if (mdLine.segments) {
448
+ for (const s of mdLine.segments) {
449
+ segments.push({
450
+ start: s.start + prefixLen,
451
+ end: s.end + prefixLen,
452
+ styleKey: s.styleKey,
453
+ });
454
+ }
455
+ }
456
+ const lineLinks = mdLine.links ? mdLine.links.map(l => ({
457
+ start: l.start + prefixLen,
458
+ end: l.end + prefixLen,
459
+ url: l.url,
460
+ })) : undefined;
327
461
  lines.push({
328
- text: mdLine.text,
329
- styleKey: 'streamText',
330
- segments: mdLine.segments,
462
+ text: prefix + mdLine.text,
463
+ styleKey: 'text',
464
+ segments: segments.length > 0 ? segments : undefined,
465
+ links: lineLinks,
331
466
  });
332
467
  }
333
468
  }
@@ -361,11 +496,11 @@ const messages = {
361
496
  }
362
497
  // Scroll indicators
363
498
  if (scrollOffset > 0) {
364
- const indicator = 'Shift+\u2B07';
499
+ const indicator = (interceptsShiftScroll ? 'Fn' : 'Shift') + '+\u2193';
365
500
  drawText(screen, layout.width - indicator.length - 1, y + height - 1, indicator, styles.dim || 0);
366
501
  }
367
502
  if (startLine > 0) {
368
- const indicator = 'Shift+\u2B06';
503
+ const indicator = (interceptsShiftScroll ? 'Fn' : 'Shift') + '+\u2191';
369
504
  drawText(screen, layout.width - indicator.length - 1, y + bottomOffset, indicator, styles.dim || 0);
370
505
  }
371
506
  },
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/ui/messages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/ui/messages.ts"],"names":[],"mappings":"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"}
@@ -2,17 +2,25 @@
2
2
  * UI Drawing Primitives — Screen-based drawing for full-screen renderer
3
3
  *
4
4
  * Components use these to draw directly to the Screen buffer.
5
+ *
6
+ * Wide characters (emojis, CJK) occupy 2 terminal cells. When drawing these,
7
+ * we place the character at position X and a placeholder at X+1 to prevent
8
+ * the next character from overwriting the wide character.
5
9
  */
6
10
  import type { Screen } from '../screen.js';
7
11
  import type { StyleMap, StyledLine, LineSegment, LineLink } from '../types.js';
8
12
  /**
9
13
  * Draw text at position, using a single style.
10
- * Clips to maxWidth if specified.
14
+ * Handles wide characters (emojis, CJK) correctly.
15
+ * Clips to maxWidth (in display cells) if specified.
11
16
  */
12
17
  export declare function drawText(screen: Screen, x: number, y: number, text: string, styleId: number, maxWidth?: number): void;
13
18
  /**
14
19
  * Draw text with per-character style overrides via segments.
15
20
  * Used for markdown rendering, syntax highlighting, etc.
21
+ *
22
+ * Note: Segment indices refer to character positions in the string,
23
+ * not display positions. This function handles the conversion.
16
24
  */
17
25
  export declare function drawTextWithSegments(screen: Screen, x: number, y: number, text: string, defaultStyleId: number, segments: LineSegment[] | undefined, styles: StyleMap, maxWidth?: number, links?: LineLink[]): void;
18
26
  /**
@@ -2,31 +2,65 @@
2
2
  * UI Drawing Primitives — Screen-based drawing for full-screen renderer
3
3
  *
4
4
  * Components use these to draw directly to the Screen buffer.
5
+ *
6
+ * Wide characters (emojis, CJK) occupy 2 terminal cells. When drawing these,
7
+ * we place the character at position X and a placeholder at X+1 to prevent
8
+ * the next character from overwriting the wide character.
5
9
  */
10
+ import { codePointWidth } from '../charWidth.js';
11
+ /** Placeholder for the second cell of a wide character */
12
+ const WIDE_PLACEHOLDER = '';
6
13
  /**
7
14
  * Draw text at position, using a single style.
8
- * Clips to maxWidth if specified.
15
+ * Handles wide characters (emojis, CJK) correctly.
16
+ * Clips to maxWidth (in display cells) if specified.
9
17
  */
10
18
  export function drawText(screen, x, y, text, styleId, maxWidth) {
11
- const limit = maxWidth !== undefined ? Math.min(text.length, maxWidth) : text.length;
12
- for (let i = 0; i < limit; i++) {
13
- screen.set(x + i, y, text[i], styleId);
19
+ let displayX = 0;
20
+ for (const ch of text) {
21
+ const cp = ch.codePointAt(0);
22
+ if (cp === undefined)
23
+ continue;
24
+ const w = codePointWidth(cp);
25
+ // Check if we'd exceed maxWidth
26
+ if (maxWidth !== undefined && displayX + w > maxWidth)
27
+ break;
28
+ screen.set(x + displayX, y, ch, styleId);
29
+ // For wide characters, fill the next cell with a placeholder
30
+ if (w === 2) {
31
+ screen.set(x + displayX + 1, y, WIDE_PLACEHOLDER, styleId);
32
+ }
33
+ displayX += w;
14
34
  }
15
35
  }
16
36
  /**
17
37
  * Draw text with per-character style overrides via segments.
18
38
  * Used for markdown rendering, syntax highlighting, etc.
39
+ *
40
+ * Note: Segment indices refer to character positions in the string,
41
+ * not display positions. This function handles the conversion.
19
42
  */
20
43
  export function drawTextWithSegments(screen, x, y, text, defaultStyleId, segments, styles, maxWidth, links) {
21
- const limit = maxWidth !== undefined ? Math.min(text.length, maxWidth) : text.length;
22
- for (let i = 0; i < limit; i++) {
44
+ let displayX = 0;
45
+ let charIndex = 0;
46
+ for (const ch of text) {
47
+ const cp = ch.codePointAt(0);
48
+ if (cp === undefined) {
49
+ charIndex++;
50
+ continue;
51
+ }
52
+ const w = codePointWidth(cp);
53
+ // Check if we'd exceed maxWidth
54
+ if (maxWidth !== undefined && displayX + w > maxWidth)
55
+ break;
56
+ // Determine style from segments
57
+ // Use the last matching segment (later segments override earlier ones)
23
58
  let styleId = defaultStyleId;
24
- // Check if this character falls within any segment
25
59
  if (segments) {
26
60
  for (const seg of segments) {
27
- if (i >= seg.start && i < seg.end) {
61
+ if (charIndex >= seg.start && charIndex < seg.end) {
28
62
  styleId = styles[seg.styleKey] ?? defaultStyleId;
29
- break;
63
+ // Don't break - keep looking for later overrides
30
64
  }
31
65
  }
32
66
  }
@@ -34,13 +68,19 @@ export function drawTextWithSegments(screen, x, y, text, defaultStyleId, segment
34
68
  let linkUrl;
35
69
  if (links) {
36
70
  for (const link of links) {
37
- if (i >= link.start && i < link.end) {
71
+ if (charIndex >= link.start && charIndex < link.end) {
38
72
  linkUrl = link.url;
39
73
  break;
40
74
  }
41
75
  }
42
76
  }
43
- screen.set(x + i, y, text[i], styleId, linkUrl);
77
+ screen.set(x + displayX, y, ch, styleId, linkUrl);
78
+ // For wide characters, fill the next cell with a placeholder
79
+ if (w === 2) {
80
+ screen.set(x + displayX + 1, y, WIDE_PLACEHOLDER, styleId, linkUrl);
81
+ }
82
+ displayX += w;
83
+ charIndex++;
44
84
  }
45
85
  }
46
86
  /**
@@ -61,9 +101,19 @@ export function drawStyledLine(screen, x, y, line, styles, maxWidth) {
61
101
  * The display text is shown; clicking opens the URL.
62
102
  */
63
103
  export function drawLink(screen, x, y, text, url, styleId, maxWidth) {
64
- const limit = maxWidth !== undefined ? Math.min(text.length, maxWidth) : text.length;
65
- for (let i = 0; i < limit; i++) {
66
- screen.set(x + i, y, text[i], styleId, url);
104
+ let displayX = 0;
105
+ for (const ch of text) {
106
+ const cp = ch.codePointAt(0);
107
+ if (cp === undefined)
108
+ continue;
109
+ const w = codePointWidth(cp);
110
+ if (maxWidth !== undefined && displayX + w > maxWidth)
111
+ break;
112
+ screen.set(x + displayX, y, ch, styleId, url);
113
+ if (w === 2) {
114
+ screen.set(x + displayX + 1, y, WIDE_PLACEHOLDER, styleId, url);
115
+ }
116
+ displayX += w;
67
117
  }
68
118
  }
69
119
  /**