guardlink 1.0.0

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 (172) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/LICENSE +21 -0
  3. package/README.md +344 -0
  4. package/dist/agents/config.d.ts +46 -0
  5. package/dist/agents/config.d.ts.map +1 -0
  6. package/dist/agents/config.js +189 -0
  7. package/dist/agents/config.js.map +1 -0
  8. package/dist/agents/index.d.ts +24 -0
  9. package/dist/agents/index.d.ts.map +1 -0
  10. package/dist/agents/index.js +42 -0
  11. package/dist/agents/index.js.map +1 -0
  12. package/dist/agents/launcher.d.ts +54 -0
  13. package/dist/agents/launcher.d.ts.map +1 -0
  14. package/dist/agents/launcher.js +152 -0
  15. package/dist/agents/launcher.js.map +1 -0
  16. package/dist/agents/prompts.d.ts +14 -0
  17. package/dist/agents/prompts.d.ts.map +1 -0
  18. package/dist/agents/prompts.js +120 -0
  19. package/dist/agents/prompts.js.map +1 -0
  20. package/dist/analyze/index.d.ts +80 -0
  21. package/dist/analyze/index.d.ts.map +1 -0
  22. package/dist/analyze/index.js +306 -0
  23. package/dist/analyze/index.js.map +1 -0
  24. package/dist/analyze/llm.d.ts +52 -0
  25. package/dist/analyze/llm.d.ts.map +1 -0
  26. package/dist/analyze/llm.js +295 -0
  27. package/dist/analyze/llm.js.map +1 -0
  28. package/dist/analyze/prompts.d.ts +14 -0
  29. package/dist/analyze/prompts.d.ts.map +1 -0
  30. package/dist/analyze/prompts.js +205 -0
  31. package/dist/analyze/prompts.js.map +1 -0
  32. package/dist/analyzer/index.d.ts +5 -0
  33. package/dist/analyzer/index.d.ts.map +1 -0
  34. package/dist/analyzer/index.js +5 -0
  35. package/dist/analyzer/index.js.map +1 -0
  36. package/dist/analyzer/sarif.d.ts +84 -0
  37. package/dist/analyzer/sarif.d.ts.map +1 -0
  38. package/dist/analyzer/sarif.js +149 -0
  39. package/dist/analyzer/sarif.js.map +1 -0
  40. package/dist/cli/index.d.ts +25 -0
  41. package/dist/cli/index.d.ts.map +1 -0
  42. package/dist/cli/index.js +821 -0
  43. package/dist/cli/index.js.map +1 -0
  44. package/dist/dashboard/data.d.ts +52 -0
  45. package/dist/dashboard/data.d.ts.map +1 -0
  46. package/dist/dashboard/data.js +93 -0
  47. package/dist/dashboard/data.js.map +1 -0
  48. package/dist/dashboard/diagrams.d.ts +25 -0
  49. package/dist/dashboard/diagrams.d.ts.map +1 -0
  50. package/dist/dashboard/diagrams.js +243 -0
  51. package/dist/dashboard/diagrams.js.map +1 -0
  52. package/dist/dashboard/generate.d.ts +17 -0
  53. package/dist/dashboard/generate.d.ts.map +1 -0
  54. package/dist/dashboard/generate.js +1258 -0
  55. package/dist/dashboard/generate.js.map +1 -0
  56. package/dist/dashboard/index.d.ts +7 -0
  57. package/dist/dashboard/index.d.ts.map +1 -0
  58. package/dist/dashboard/index.js +7 -0
  59. package/dist/dashboard/index.js.map +1 -0
  60. package/dist/diff/engine.d.ts +51 -0
  61. package/dist/diff/engine.d.ts.map +1 -0
  62. package/dist/diff/engine.js +153 -0
  63. package/dist/diff/engine.js.map +1 -0
  64. package/dist/diff/format.d.ts +10 -0
  65. package/dist/diff/format.d.ts.map +1 -0
  66. package/dist/diff/format.js +111 -0
  67. package/dist/diff/format.js.map +1 -0
  68. package/dist/diff/git.d.ts +24 -0
  69. package/dist/diff/git.d.ts.map +1 -0
  70. package/dist/diff/git.js +85 -0
  71. package/dist/diff/git.js.map +1 -0
  72. package/dist/diff/index.d.ts +7 -0
  73. package/dist/diff/index.d.ts.map +1 -0
  74. package/dist/diff/index.js +7 -0
  75. package/dist/diff/index.js.map +1 -0
  76. package/dist/index.d.ts +20 -0
  77. package/dist/index.d.ts.map +1 -0
  78. package/dist/index.js +17 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/init/detect.d.ts +42 -0
  81. package/dist/init/detect.d.ts.map +1 -0
  82. package/dist/init/detect.js +185 -0
  83. package/dist/init/detect.js.map +1 -0
  84. package/dist/init/index.d.ts +39 -0
  85. package/dist/init/index.d.ts.map +1 -0
  86. package/dist/init/index.js +228 -0
  87. package/dist/init/index.js.map +1 -0
  88. package/dist/init/picker.d.ts +32 -0
  89. package/dist/init/picker.d.ts.map +1 -0
  90. package/dist/init/picker.js +105 -0
  91. package/dist/init/picker.js.map +1 -0
  92. package/dist/init/templates.d.ts +25 -0
  93. package/dist/init/templates.d.ts.map +1 -0
  94. package/dist/init/templates.js +263 -0
  95. package/dist/init/templates.js.map +1 -0
  96. package/dist/mcp/index.d.ts +12 -0
  97. package/dist/mcp/index.d.ts.map +1 -0
  98. package/dist/mcp/index.js +18 -0
  99. package/dist/mcp/index.js.map +1 -0
  100. package/dist/mcp/lookup.d.ts +27 -0
  101. package/dist/mcp/lookup.d.ts.map +1 -0
  102. package/dist/mcp/lookup.js +282 -0
  103. package/dist/mcp/lookup.js.map +1 -0
  104. package/dist/mcp/server.d.ts +41 -0
  105. package/dist/mcp/server.d.ts.map +1 -0
  106. package/dist/mcp/server.js +388 -0
  107. package/dist/mcp/server.js.map +1 -0
  108. package/dist/mcp/suggest.d.ts +35 -0
  109. package/dist/mcp/suggest.d.ts.map +1 -0
  110. package/dist/mcp/suggest.js +268 -0
  111. package/dist/mcp/suggest.js.map +1 -0
  112. package/dist/parser/comment-strip.d.ts +15 -0
  113. package/dist/parser/comment-strip.d.ts.map +1 -0
  114. package/dist/parser/comment-strip.js +76 -0
  115. package/dist/parser/comment-strip.js.map +1 -0
  116. package/dist/parser/index.d.ts +10 -0
  117. package/dist/parser/index.d.ts.map +1 -0
  118. package/dist/parser/index.js +9 -0
  119. package/dist/parser/index.js.map +1 -0
  120. package/dist/parser/normalize.d.ts +22 -0
  121. package/dist/parser/normalize.d.ts.map +1 -0
  122. package/dist/parser/normalize.js +42 -0
  123. package/dist/parser/normalize.js.map +1 -0
  124. package/dist/parser/parse-file.d.ts +18 -0
  125. package/dist/parser/parse-file.d.ts.map +1 -0
  126. package/dist/parser/parse-file.js +68 -0
  127. package/dist/parser/parse-file.js.map +1 -0
  128. package/dist/parser/parse-line.d.ts +21 -0
  129. package/dist/parser/parse-line.d.ts.map +1 -0
  130. package/dist/parser/parse-line.js +230 -0
  131. package/dist/parser/parse-line.js.map +1 -0
  132. package/dist/parser/parse-project.d.ts +31 -0
  133. package/dist/parser/parse-project.d.ts.map +1 -0
  134. package/dist/parser/parse-project.js +281 -0
  135. package/dist/parser/parse-project.js.map +1 -0
  136. package/dist/report/index.d.ts +6 -0
  137. package/dist/report/index.d.ts.map +1 -0
  138. package/dist/report/index.js +6 -0
  139. package/dist/report/index.js.map +1 -0
  140. package/dist/report/mermaid.d.ts +15 -0
  141. package/dist/report/mermaid.d.ts.map +1 -0
  142. package/dist/report/mermaid.js +260 -0
  143. package/dist/report/mermaid.js.map +1 -0
  144. package/dist/report/report.d.ts +16 -0
  145. package/dist/report/report.d.ts.map +1 -0
  146. package/dist/report/report.js +211 -0
  147. package/dist/report/report.js.map +1 -0
  148. package/dist/tui/commands.d.ts +42 -0
  149. package/dist/tui/commands.d.ts.map +1 -0
  150. package/dist/tui/commands.js +1216 -0
  151. package/dist/tui/commands.js.map +1 -0
  152. package/dist/tui/config.d.ts +27 -0
  153. package/dist/tui/config.d.ts.map +1 -0
  154. package/dist/tui/config.js +27 -0
  155. package/dist/tui/config.js.map +1 -0
  156. package/dist/tui/format.d.ts +63 -0
  157. package/dist/tui/format.d.ts.map +1 -0
  158. package/dist/tui/format.js +253 -0
  159. package/dist/tui/format.js.map +1 -0
  160. package/dist/tui/index.d.ts +18 -0
  161. package/dist/tui/index.d.ts.map +1 -0
  162. package/dist/tui/index.js +470 -0
  163. package/dist/tui/index.js.map +1 -0
  164. package/dist/tui/input.d.ts +63 -0
  165. package/dist/tui/input.d.ts.map +1 -0
  166. package/dist/tui/input.js +454 -0
  167. package/dist/tui/input.js.map +1 -0
  168. package/dist/types/index.d.ts +254 -0
  169. package/dist/types/index.d.ts.map +1 -0
  170. package/dist/types/index.js +6 -0
  171. package/dist/types/index.js.map +1 -0
  172. package/package.json +97 -0
@@ -0,0 +1,454 @@
1
+ /**
2
+ * GuardLink TUI — Enhanced input box with bordered frame,
3
+ * placeholder text, and slash command palette.
4
+ *
5
+ * Inspired by Claude Code's input UX:
6
+ * ┌──────────────────────────────────────┐
7
+ * │ › type a command or question... │
8
+ * └──────────────────────────────────────┘
9
+ * /exposures List by severity
10
+ * /files Browse files
11
+ * /show <n> Detail + code
12
+ *
13
+ * Uses raw stdin mode for full keystroke control.
14
+ */
15
+ import chalk from 'chalk';
16
+ const BRAVOS = '#2dd4a7';
17
+ const bravos = chalk.hex(BRAVOS);
18
+ // ─── ANSI helpers ────────────────────────────────────────────────────
19
+ const ESC = '\x1b[';
20
+ const CLEAR_LINE = `${ESC}2K`;
21
+ const CURSOR_UP = (n) => `${ESC}${n}A`;
22
+ const CURSOR_DOWN = (n) => `${ESC}${n}B`;
23
+ const CURSOR_COL = (n) => `${ESC}${n}G`;
24
+ const CURSOR_HIDE = `${ESC}?25l`;
25
+ const CURSOR_SHOW = `${ESC}?25h`;
26
+ // ─── InputBox class ──────────────────────────────────────────────────
27
+ export class InputBox {
28
+ buffer = '';
29
+ cursor = 0;
30
+ placeholder;
31
+ prompt;
32
+ commands;
33
+ maxPalette;
34
+ palette = { visible: false, items: [], selected: 0 };
35
+ lastRenderHeight = 0; // total lines rendered (box + palette)
36
+ lastCursorFromBottom = 0; // cursor position relative to bottom of render
37
+ active = false;
38
+ onSubmit = null;
39
+ onClose = null;
40
+ paused = false;
41
+ rawHandler = null;
42
+ ctrlCPending = false;
43
+ ctrlCTimer = null;
44
+ showExitHint = false;
45
+ constructor(opts = {}) {
46
+ this.placeholder = opts.placeholder ?? 'Type a command or question...';
47
+ this.prompt = opts.prompt ?? '›';
48
+ this.commands = opts.commands ?? [];
49
+ this.maxPalette = opts.maxPaletteItems ?? 8;
50
+ }
51
+ /** Start listening for input. Returns cleanup function. */
52
+ start(onSubmit, onClose) {
53
+ this.onSubmit = onSubmit;
54
+ this.onClose = onClose;
55
+ this.active = true;
56
+ this.paused = false;
57
+ if (process.stdin.isTTY) {
58
+ process.stdin.setRawMode(true);
59
+ }
60
+ process.stdin.resume();
61
+ this.rawHandler = (data) => this.handleKey(data);
62
+ process.stdin.on('data', this.rawHandler);
63
+ this.render();
64
+ }
65
+ /** Pause input (while command executes) */
66
+ pause() {
67
+ this.paused = true;
68
+ if (this.rawHandler) {
69
+ process.stdin.removeListener('data', this.rawHandler);
70
+ }
71
+ if (process.stdin.isTTY) {
72
+ process.stdin.setRawMode(false);
73
+ }
74
+ // Clear the rendered box so command output flows naturally
75
+ this.clearRender();
76
+ }
77
+ /** Resume input after command completes */
78
+ resume() {
79
+ this.paused = false;
80
+ this.buffer = '';
81
+ this.cursor = 0;
82
+ this.palette = { visible: false, items: [], selected: 0 };
83
+ this.lastRenderHeight = 0;
84
+ this.lastCursorFromBottom = 0;
85
+ if (process.stdin.isTTY) {
86
+ process.stdin.setRawMode(true);
87
+ }
88
+ process.stdin.resume();
89
+ if (this.rawHandler) {
90
+ process.stdin.on('data', this.rawHandler);
91
+ }
92
+ this.render();
93
+ }
94
+ /** Stop listening entirely */
95
+ stop() {
96
+ this.active = false;
97
+ if (this.ctrlCTimer) {
98
+ clearTimeout(this.ctrlCTimer);
99
+ this.ctrlCTimer = null;
100
+ }
101
+ this.clearRender();
102
+ if (this.rawHandler) {
103
+ process.stdin.removeListener('data', this.rawHandler);
104
+ }
105
+ if (process.stdin.isTTY) {
106
+ try {
107
+ process.stdin.setRawMode(false);
108
+ }
109
+ catch { }
110
+ }
111
+ }
112
+ // ─── Key handling ─────────────────────────────────────────────────
113
+ handleKey(data) {
114
+ if (!this.active || this.paused)
115
+ return;
116
+ const key = data.toString('utf-8');
117
+ const code = data[0];
118
+ // Ctrl+C — double-tap to exit (like Claude Code)
119
+ if (code === 3) {
120
+ if (this.ctrlCPending) {
121
+ // Second Ctrl+C — just exit immediately, no cleanup possible
122
+ if (this.ctrlCTimer) {
123
+ clearTimeout(this.ctrlCTimer);
124
+ this.ctrlCTimer = null;
125
+ }
126
+ this.onClose?.();
127
+ return;
128
+ }
129
+ // First Ctrl+C — clear buffer, show hint via render
130
+ this.ctrlCPending = true;
131
+ this.showExitHint = true;
132
+ this.buffer = '';
133
+ this.cursor = 0;
134
+ this.updatePalette();
135
+ this.render();
136
+ this.ctrlCTimer = setTimeout(() => {
137
+ this.ctrlCPending = false;
138
+ this.showExitHint = false;
139
+ this.render();
140
+ }, 2000);
141
+ return;
142
+ }
143
+ // Ctrl+D — exit on empty line
144
+ if (code === 4 && this.buffer.length === 0) {
145
+ this.clearRender();
146
+ this.onClose?.();
147
+ return;
148
+ }
149
+ // Any non-Ctrl+C key resets the exit pending state
150
+ if (this.ctrlCPending) {
151
+ this.ctrlCPending = false;
152
+ this.showExitHint = false;
153
+ if (this.ctrlCTimer) {
154
+ clearTimeout(this.ctrlCTimer);
155
+ this.ctrlCTimer = null;
156
+ }
157
+ }
158
+ // Enter — submit
159
+ if (code === 13 || code === 10) {
160
+ // If palette is visible and an item is selected, use that
161
+ if (this.palette.visible && this.palette.items.length > 0) {
162
+ const selected = this.palette.items[this.palette.selected];
163
+ if (selected) {
164
+ this.buffer = selected.command + ' ';
165
+ this.cursor = this.buffer.length;
166
+ }
167
+ }
168
+ const line = this.buffer;
169
+ this.clearRender();
170
+ process.stdout.write('\n');
171
+ this.onSubmit?.(line);
172
+ return;
173
+ }
174
+ // Tab — accept palette selection
175
+ if (code === 9) {
176
+ if (this.palette.visible && this.palette.items.length > 0) {
177
+ const selected = this.palette.items[this.palette.selected];
178
+ if (selected) {
179
+ this.buffer = selected.command + ' ';
180
+ this.cursor = this.buffer.length;
181
+ this.updatePalette();
182
+ this.render();
183
+ }
184
+ }
185
+ return;
186
+ }
187
+ // Escape — close palette
188
+ if (code === 27 && data.length === 1) {
189
+ if (this.palette.visible) {
190
+ this.palette.visible = false;
191
+ this.render();
192
+ }
193
+ return;
194
+ }
195
+ // Arrow keys and other escape sequences
196
+ if (code === 27 && data[1] === 91) {
197
+ const arrow = data[2];
198
+ // Up arrow
199
+ if (arrow === 65) {
200
+ if (this.palette.visible && this.palette.items.length > 0) {
201
+ this.palette.selected = Math.max(0, this.palette.selected - 1);
202
+ this.render();
203
+ }
204
+ return;
205
+ }
206
+ // Down arrow
207
+ if (arrow === 66) {
208
+ if (this.palette.visible && this.palette.items.length > 0) {
209
+ this.palette.selected = Math.min(this.palette.items.length - 1, this.palette.selected + 1);
210
+ this.render();
211
+ }
212
+ return;
213
+ }
214
+ // Right arrow
215
+ if (arrow === 67) {
216
+ if (this.cursor < this.buffer.length)
217
+ this.cursor++;
218
+ this.render();
219
+ return;
220
+ }
221
+ // Left arrow
222
+ if (arrow === 68) {
223
+ if (this.cursor > 0)
224
+ this.cursor--;
225
+ this.render();
226
+ return;
227
+ }
228
+ // Home (ESC[H or ESC[1~)
229
+ if (arrow === 72) {
230
+ this.cursor = 0;
231
+ this.render();
232
+ return;
233
+ }
234
+ // End (ESC[F or ESC[4~)
235
+ if (arrow === 70) {
236
+ this.cursor = this.buffer.length;
237
+ this.render();
238
+ return;
239
+ }
240
+ // Delete (ESC[3~)
241
+ if (arrow === 51 && data[3] === 126) {
242
+ if (this.cursor < this.buffer.length) {
243
+ this.buffer = this.buffer.slice(0, this.cursor) + this.buffer.slice(this.cursor + 1);
244
+ this.updatePalette();
245
+ this.render();
246
+ }
247
+ return;
248
+ }
249
+ return;
250
+ }
251
+ // Backspace
252
+ if (code === 127 || code === 8) {
253
+ if (this.cursor > 0) {
254
+ this.buffer = this.buffer.slice(0, this.cursor - 1) + this.buffer.slice(this.cursor);
255
+ this.cursor--;
256
+ this.updatePalette();
257
+ this.render();
258
+ }
259
+ return;
260
+ }
261
+ // Ctrl+A — beginning of line
262
+ if (code === 1) {
263
+ this.cursor = 0;
264
+ this.render();
265
+ return;
266
+ }
267
+ // Ctrl+E — end of line
268
+ if (code === 5) {
269
+ this.cursor = this.buffer.length;
270
+ this.render();
271
+ return;
272
+ }
273
+ // Ctrl+K — kill to end
274
+ if (code === 11) {
275
+ this.buffer = this.buffer.slice(0, this.cursor);
276
+ this.updatePalette();
277
+ this.render();
278
+ return;
279
+ }
280
+ // Ctrl+U — kill to start
281
+ if (code === 21) {
282
+ this.buffer = this.buffer.slice(this.cursor);
283
+ this.cursor = 0;
284
+ this.updatePalette();
285
+ this.render();
286
+ return;
287
+ }
288
+ // Ctrl+W — delete word backward
289
+ if (code === 23) {
290
+ const before = this.buffer.slice(0, this.cursor);
291
+ const trimmed = before.replace(/\S+\s*$/, '');
292
+ this.buffer = trimmed + this.buffer.slice(this.cursor);
293
+ this.cursor = trimmed.length;
294
+ this.updatePalette();
295
+ this.render();
296
+ return;
297
+ }
298
+ // Printable characters
299
+ if (code >= 32 || (data.length > 1 && code > 127)) {
300
+ this.buffer = this.buffer.slice(0, this.cursor) + key + this.buffer.slice(this.cursor);
301
+ this.cursor += key.length;
302
+ this.updatePalette();
303
+ this.render();
304
+ }
305
+ }
306
+ // ─── Command palette ─────────────────────────────────────────────
307
+ updatePalette() {
308
+ const trimmed = this.buffer.trimStart();
309
+ // Show palette only when typing starts with /
310
+ if (!trimmed.startsWith('/') || trimmed.includes(' ')) {
311
+ this.palette.visible = false;
312
+ this.palette.items = [];
313
+ this.palette.selected = 0;
314
+ return;
315
+ }
316
+ const filter = trimmed.toLowerCase();
317
+ const filtered = this.commands.filter(c => {
318
+ if (c.command.toLowerCase().startsWith(filter))
319
+ return true;
320
+ if (c.aliases?.some(a => a.toLowerCase().startsWith(filter)))
321
+ return true;
322
+ // Also match on label words
323
+ if (filter.length > 1 && c.label.toLowerCase().includes(filter.slice(1)))
324
+ return true;
325
+ return false;
326
+ }).slice(0, this.maxPalette);
327
+ this.palette.visible = filtered.length > 0;
328
+ this.palette.items = filtered;
329
+ // Clamp selection
330
+ if (this.palette.selected >= filtered.length) {
331
+ this.palette.selected = Math.max(0, filtered.length - 1);
332
+ }
333
+ }
334
+ // ─── Rendering ──────────────────────────────────────────────────
335
+ getTermWidth() {
336
+ return process.stdout.columns || 80;
337
+ }
338
+ clearRender() {
339
+ if (this.lastRenderHeight <= 0)
340
+ return;
341
+ // Move cursor to TOP of rendered area first
342
+ const linesToTop = this.lastRenderHeight - 1 - this.lastCursorFromBottom;
343
+ if (linesToTop > 0) {
344
+ process.stdout.write(CURSOR_UP(linesToTop));
345
+ }
346
+ // Clear every line going downward from top
347
+ let out = '';
348
+ for (let i = 0; i < this.lastRenderHeight; i++) {
349
+ out += CLEAR_LINE;
350
+ if (i < this.lastRenderHeight - 1)
351
+ out += CURSOR_DOWN(1);
352
+ }
353
+ process.stdout.write(out);
354
+ // Move back to top
355
+ if (this.lastRenderHeight > 1) {
356
+ process.stdout.write(CURSOR_UP(this.lastRenderHeight - 1));
357
+ }
358
+ process.stdout.write('\r');
359
+ this.lastRenderHeight = 0;
360
+ this.lastCursorFromBottom = 0;
361
+ }
362
+ render() {
363
+ if (!this.active || this.paused)
364
+ return;
365
+ const w = this.getTermWidth();
366
+ const lineW = Math.max(30, w - 4); // width of the horizontal rule
367
+ const contentW = lineW; // no side borders, full width for content
368
+ // Hide cursor during render to prevent flicker
369
+ process.stdout.write(CURSOR_HIDE);
370
+ // Clear previous render
371
+ this.clearRender();
372
+ const lines = [];
373
+ // ── Exit hint (shown after first Ctrl+C) ──
374
+ if (this.showExitHint) {
375
+ lines.push(' ' + chalk.dim('Press Ctrl+C again to exit.'));
376
+ }
377
+ // ── Top border (horizontal line only) ──
378
+ lines.push(' ' + chalk.dim('─'.repeat(lineW)));
379
+ // ── Input line(s) ──
380
+ const promptStr = bravos(this.prompt) + ' ';
381
+ const promptVisLen = this.prompt.length + 1; // "› "
382
+ const maxTextW = contentW - promptVisLen;
383
+ if (this.buffer.length === 0) {
384
+ // Placeholder
385
+ const ph = this.placeholder.slice(0, maxTextW);
386
+ lines.push(' ' + promptStr + chalk.dim.italic(ph));
387
+ }
388
+ else {
389
+ const content = this.buffer;
390
+ if (content.length <= maxTextW) {
391
+ // Single line
392
+ lines.push(' ' + promptStr + content);
393
+ }
394
+ else {
395
+ // Multi-line wrap
396
+ const chunks = [];
397
+ for (let i = 0; i < content.length; i += maxTextW) {
398
+ chunks.push(content.slice(i, i + maxTextW));
399
+ }
400
+ for (let i = 0; i < chunks.length; i++) {
401
+ if (i === 0) {
402
+ lines.push(' ' + promptStr + chunks[i]);
403
+ }
404
+ else {
405
+ lines.push(' ' + ' '.repeat(promptVisLen) + chunks[i]);
406
+ }
407
+ }
408
+ }
409
+ }
410
+ // ── Bottom border (horizontal line only) ──
411
+ lines.push(' ' + chalk.dim('─'.repeat(lineW)));
412
+ // ── Command palette (below bottom border) ──
413
+ if (this.palette.visible && this.palette.items.length > 0) {
414
+ const cmdW = 16;
415
+ for (let i = 0; i < this.palette.items.length; i++) {
416
+ const item = this.palette.items[i];
417
+ const isSelected = i === this.palette.selected;
418
+ const cmd = item.command.padEnd(cmdW);
419
+ const desc = item.label;
420
+ if (isSelected) {
421
+ lines.push(' ' + chalk.bgHex(BRAVOS).black.bold(' ' + cmd) + chalk.bgHex(BRAVOS).black(' ' + desc + ' '));
422
+ }
423
+ else {
424
+ lines.push(' ' + bravos(cmd) + chalk.dim(desc));
425
+ }
426
+ }
427
+ }
428
+ // ── Bottom padding (breathing room — ^C echo lands here, not on input) ──
429
+ lines.push('');
430
+ lines.push('');
431
+ lines.push('');
432
+ // Write all lines
433
+ process.stdout.write('\r' + lines.join('\n'));
434
+ this.lastRenderHeight = lines.length;
435
+ // ── Position cursor ──
436
+ const cursorLine = maxTextW > 0 ? Math.floor(this.cursor / maxTextW) : 0;
437
+ const cursorCol = maxTextW > 0 ? (this.cursor % maxTextW) : this.cursor;
438
+ // Lines from bottom to cursor position
439
+ const paletteLines = this.palette.visible ? this.palette.items.length : 0;
440
+ const inputLines = this.buffer.length === 0 ? 1 :
441
+ (maxTextW > 0 ? Math.max(1, Math.ceil(this.buffer.length / maxTextW)) : 1);
442
+ const linesFromBottom = 3 /* padding */ + paletteLines + 1 /* bottom border */ + (inputLines - 1 - cursorLine);
443
+ // Column: " " (2) + prompt (2) + cursor position
444
+ const colOffset = 2 + promptVisLen + cursorCol + 1;
445
+ if (linesFromBottom > 0) {
446
+ process.stdout.write(CURSOR_UP(linesFromBottom));
447
+ }
448
+ process.stdout.write(CURSOR_COL(colOffset));
449
+ process.stdout.write(CURSOR_SHOW);
450
+ // Track cursor position for correct clearing
451
+ this.lastCursorFromBottom = linesFromBottom;
452
+ }
453
+ }
454
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/tui/input.ts"],"names":[],"mappings":"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"}