@agi-fans/dsh-tui 0.1.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 (156) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +13 -0
  3. package/lib/autocomplete.d.ts +80 -0
  4. package/lib/autocomplete.js +320 -0
  5. package/lib/autocomplete.js.map +1 -0
  6. package/lib/box.d.ts +79 -0
  7. package/lib/box.js +276 -0
  8. package/lib/box.js.map +1 -0
  9. package/lib/clipboard.d.ts +19 -0
  10. package/lib/clipboard.js +77 -0
  11. package/lib/clipboard.js.map +1 -0
  12. package/lib/command-integrations.d.ts +10 -0
  13. package/lib/command-integrations.js +49 -0
  14. package/lib/command-integrations.js.map +1 -0
  15. package/lib/command-mode.d.ts +5 -0
  16. package/lib/command-mode.js +73 -0
  17. package/lib/command-mode.js.map +1 -0
  18. package/lib/command-model.d.ts +5 -0
  19. package/lib/command-model.js +87 -0
  20. package/lib/command-model.js.map +1 -0
  21. package/lib/command-output.d.ts +6 -0
  22. package/lib/command-output.js +33 -0
  23. package/lib/command-output.js.map +1 -0
  24. package/lib/command-queue.d.ts +5 -0
  25. package/lib/command-queue.js +62 -0
  26. package/lib/command-queue.js.map +1 -0
  27. package/lib/command-registration.d.ts +5 -0
  28. package/lib/command-registration.js +20 -0
  29. package/lib/command-registration.js.map +1 -0
  30. package/lib/command-session.d.ts +5 -0
  31. package/lib/command-session.js +153 -0
  32. package/lib/command-session.js.map +1 -0
  33. package/lib/command-transcript.d.ts +5 -0
  34. package/lib/command-transcript.js +85 -0
  35. package/lib/command-transcript.js.map +1 -0
  36. package/lib/copy-selector.d.ts +52 -0
  37. package/lib/copy-selector.js +136 -0
  38. package/lib/copy-selector.js.map +1 -0
  39. package/lib/copy-targets.d.ts +34 -0
  40. package/lib/copy-targets.js +170 -0
  41. package/lib/copy-targets.js.map +1 -0
  42. package/lib/definition.d.ts +171 -0
  43. package/lib/definition.js +14 -0
  44. package/lib/definition.js.map +1 -0
  45. package/lib/editor.d.ts +66 -0
  46. package/lib/editor.js +365 -0
  47. package/lib/editor.js.map +1 -0
  48. package/lib/event-views.d.ts +188 -0
  49. package/lib/event-views.js +678 -0
  50. package/lib/event-views.js.map +1 -0
  51. package/lib/external-editor.d.ts +2 -0
  52. package/lib/external-editor.js +31 -0
  53. package/lib/external-editor.js.map +1 -0
  54. package/lib/history-search.d.ts +61 -0
  55. package/lib/history-search.js +239 -0
  56. package/lib/history-search.js.map +1 -0
  57. package/lib/history-store.d.ts +8 -0
  58. package/lib/history-store.js +36 -0
  59. package/lib/history-store.js.map +1 -0
  60. package/lib/hotkeys.d.ts +14 -0
  61. package/lib/hotkeys.js +115 -0
  62. package/lib/hotkeys.js.map +1 -0
  63. package/lib/human-interaction.d.ts +5 -0
  64. package/lib/human-interaction.js +8 -0
  65. package/lib/human-interaction.js.map +1 -0
  66. package/lib/image-paste.d.ts +21 -0
  67. package/lib/image-paste.js +277 -0
  68. package/lib/image-paste.js.map +1 -0
  69. package/lib/index.d.ts +10 -0
  70. package/lib/index.js +11 -0
  71. package/lib/index.js.map +1 -0
  72. package/lib/interaction-adapter.d.ts +18 -0
  73. package/lib/interaction-adapter.js +93 -0
  74. package/lib/interaction-adapter.js.map +1 -0
  75. package/lib/keybindings-config.d.ts +5 -0
  76. package/lib/keybindings-config.js +28 -0
  77. package/lib/keybindings-config.js.map +1 -0
  78. package/lib/keys.d.ts +59 -0
  79. package/lib/keys.js +263 -0
  80. package/lib/keys.js.map +1 -0
  81. package/lib/markdown.d.ts +13 -0
  82. package/lib/markdown.js +453 -0
  83. package/lib/markdown.js.map +1 -0
  84. package/lib/path-complete.d.ts +85 -0
  85. package/lib/path-complete.js +231 -0
  86. package/lib/path-complete.js.map +1 -0
  87. package/lib/path-mentions.d.ts +4 -0
  88. package/lib/path-mentions.js +50 -0
  89. package/lib/path-mentions.js.map +1 -0
  90. package/lib/project-context.d.ts +13 -0
  91. package/lib/project-context.js +52 -0
  92. package/lib/project-context.js.map +1 -0
  93. package/lib/project-file-search.d.ts +25 -0
  94. package/lib/project-file-search.js +207 -0
  95. package/lib/project-file-search.js.map +1 -0
  96. package/lib/prompt-selector.d.ts +56 -0
  97. package/lib/prompt-selector.js +297 -0
  98. package/lib/prompt-selector.js.map +1 -0
  99. package/lib/provider-local.d.ts +115 -0
  100. package/lib/provider-local.js +1760 -0
  101. package/lib/provider-local.js.map +1 -0
  102. package/lib/pwd.d.ts +13 -0
  103. package/lib/pwd.js +14 -0
  104. package/lib/pwd.js.map +1 -0
  105. package/lib/relative-time.d.ts +2 -0
  106. package/lib/relative-time.js +11 -0
  107. package/lib/relative-time.js.map +1 -0
  108. package/lib/renderer.d.ts +112 -0
  109. package/lib/renderer.js +181 -0
  110. package/lib/renderer.js.map +1 -0
  111. package/lib/runner.d.ts +9 -0
  112. package/lib/runner.js +94 -0
  113. package/lib/runner.js.map +1 -0
  114. package/lib/session-controller.d.ts +92 -0
  115. package/lib/session-controller.js +571 -0
  116. package/lib/session-controller.js.map +1 -0
  117. package/lib/session-runtime.d.ts +16 -0
  118. package/lib/session-runtime.js +17 -0
  119. package/lib/session-runtime.js.map +1 -0
  120. package/lib/settings-list.d.ts +67 -0
  121. package/lib/settings-list.js +380 -0
  122. package/lib/settings-list.js.map +1 -0
  123. package/lib/status-config.d.ts +32 -0
  124. package/lib/status-config.js +52 -0
  125. package/lib/status-config.js.map +1 -0
  126. package/lib/status-line.d.ts +41 -0
  127. package/lib/status-line.js +351 -0
  128. package/lib/status-line.js.map +1 -0
  129. package/lib/style.d.ts +22 -0
  130. package/lib/style.js +23 -0
  131. package/lib/style.js.map +1 -0
  132. package/lib/theme.d.ts +83 -0
  133. package/lib/theme.js +317 -0
  134. package/lib/theme.js.map +1 -0
  135. package/lib/tool-presentation.d.ts +20 -0
  136. package/lib/tool-presentation.js +79 -0
  137. package/lib/tool-presentation.js.map +1 -0
  138. package/lib/tool-renderers.d.ts +21 -0
  139. package/lib/tool-renderers.js +133 -0
  140. package/lib/tool-renderers.js.map +1 -0
  141. package/lib/tools-list.d.ts +14 -0
  142. package/lib/tools-list.js +61 -0
  143. package/lib/tools-list.js.map +1 -0
  144. package/lib/transcript-export.d.ts +4 -0
  145. package/lib/transcript-export.js +66 -0
  146. package/lib/transcript-export.js.map +1 -0
  147. package/lib/tui-settings.d.ts +20 -0
  148. package/lib/tui-settings.js +23 -0
  149. package/lib/tui-settings.js.map +1 -0
  150. package/lib/welcome-tips.d.ts +10 -0
  151. package/lib/welcome-tips.js +36 -0
  152. package/lib/welcome-tips.js.map +1 -0
  153. package/lib/width.d.ts +54 -0
  154. package/lib/width.js +323 -0
  155. package/lib/width.js.map +1 -0
  156. package/package.json +119 -0
package/lib/keys.js ADDED
@@ -0,0 +1,263 @@
1
+ /**
2
+ * Terminal key decoder. Turns raw stdin (legacy CSI, SS3, Kitty CSI-u,
3
+ * modifyOtherKeys) into the same key-id vocabulary oh-my-pi uses:
4
+ * `enter`, `ctrl+a`, `alt+left`, `shift+enter`, …
5
+ * @module @agi-fans/dsh-tui
6
+ */
7
+ /** Enable SGR button tracking (wheel + clicks; no motion flood). */
8
+ export const MOUSE_TRACKING_ON = '\x1b[?1000h\x1b[?1006h';
9
+ /** Disable the modes enabled by {@link MOUSE_TRACKING_ON}. */
10
+ export const MOUSE_TRACKING_OFF = '\x1b[?1006l\x1b[?1000l';
11
+ const CTRL = {
12
+ 0x01: 'ctrl+a',
13
+ 0x02: 'ctrl+b',
14
+ 0x03: 'ctrl+c',
15
+ 0x04: 'ctrl+d',
16
+ 0x05: 'ctrl+e',
17
+ 0x06: 'ctrl+f',
18
+ 0x07: 'ctrl+g',
19
+ 0x08: 'backspace',
20
+ 0x09: 'tab',
21
+ 0x0a: 'ctrl+j',
22
+ 0x0b: 'ctrl+k',
23
+ 0x0c: 'ctrl+l',
24
+ 0x0d: 'enter',
25
+ 0x0e: 'ctrl+n',
26
+ 0x0f: 'ctrl+o',
27
+ 0x10: 'ctrl+p',
28
+ 0x11: 'ctrl+q',
29
+ 0x12: 'ctrl+r',
30
+ 0x13: 'ctrl+s',
31
+ 0x14: 'ctrl+t',
32
+ 0x15: 'ctrl+u',
33
+ 0x16: 'ctrl+v',
34
+ 0x17: 'ctrl+w',
35
+ 0x18: 'ctrl+x',
36
+ 0x19: 'ctrl+y',
37
+ 0x1a: 'ctrl+z',
38
+ 0x1d: 'ctrl+]',
39
+ 0x1f: 'ctrl+-',
40
+ 0x7f: 'backspace',
41
+ };
42
+ const CSI_LETTER = {
43
+ A: 'up',
44
+ B: 'down',
45
+ C: 'right',
46
+ D: 'left',
47
+ H: 'home',
48
+ F: 'end',
49
+ Z: 'shift+tab',
50
+ };
51
+ const CSI_TILDE = {
52
+ 1: 'home',
53
+ 2: 'insert',
54
+ 3: 'delete',
55
+ 4: 'end',
56
+ 5: 'pageUp',
57
+ 6: 'pageDown',
58
+ };
59
+ const KITTY = {
60
+ 9: 'tab',
61
+ 13: 'enter',
62
+ 27: 'escape',
63
+ 127: 'backspace',
64
+ 57399: 'escape',
65
+ };
66
+ const ALT_SPECIAL = {
67
+ '\x7f': 'alt+backspace',
68
+ '\x08': 'alt+backspace',
69
+ '\r': 'alt+enter',
70
+ '\n': 'alt+enter',
71
+ '\x1d': 'ctrl+alt+]',
72
+ };
73
+ /** Build `ctrl+shift+alt+name` from a CSI modifier parameter (1 = none). */
74
+ export function withMods(name, modifier) {
75
+ const bits = Math.max(0, modifier - 1);
76
+ const parts = [];
77
+ if (bits & 4)
78
+ parts.push('ctrl');
79
+ if (bits & 1)
80
+ parts.push('shift');
81
+ if (bits & 2)
82
+ parts.push('alt');
83
+ if (bits & 8)
84
+ parts.push('super');
85
+ if (parts.length === 0)
86
+ return name;
87
+ return `${parts.join('+')}+${name}`;
88
+ }
89
+ function asEvent(id) {
90
+ if (id.length === 1 && id >= ' ')
91
+ return { type: 'text', value: id };
92
+ return { type: 'key', id };
93
+ }
94
+ function kittyEvent(code, modifier) {
95
+ const named = KITTY[code];
96
+ if (named !== undefined)
97
+ return asEvent(withMods(named, modifier));
98
+ if (code >= 32 && code < 127)
99
+ return asEvent(withMods(String.fromCharCode(code), modifier));
100
+ return { type: 'key', id: withMods(`code${code}`, modifier) };
101
+ }
102
+ /**
103
+ * Decode one SGR mouse report. `data` is the full CSI including ESC
104
+ * (`\x1b[<64;10;5M`); returns null when the string is not a complete report.
105
+ */
106
+ export function parseSgrMouse(data) {
107
+ const match = /^\x1b\[<(\d+);(\d+);(\d+)([Mm])/.exec(data);
108
+ if (match === null)
109
+ return null;
110
+ const button = Number(match[1]);
111
+ const col = Number(match[2]) - 1;
112
+ const row = Number(match[3]) - 1;
113
+ const release = match[4] === 'm';
114
+ const wheel = (button & 64) !== 0 ? ((button & 1) !== 0 ? 1 : -1) : null;
115
+ const motion = (button & 32) !== 0 && wheel === null;
116
+ const leftClick = !release && wheel === null && !motion && (button & 3) === 0;
117
+ return { type: 'mouse', button, col, row, release, wheel, motion, leftClick };
118
+ }
119
+ function parseSgr(body) {
120
+ // body is the CSI payload after '['
121
+ const match = /^<(\d+);(\d+);(\d+)([Mm])/.exec(body);
122
+ if (match !== null) {
123
+ const event = parseSgrMouse('\x1b[' + match[0]);
124
+ if (event === null)
125
+ return null;
126
+ return { event, used: 1 + match[0].length };
127
+ }
128
+ if (body.length < 32 && /^<\d*(?:;\d*){0,2}$/.test(body))
129
+ return 'partial';
130
+ return null;
131
+ }
132
+ function parseCsi(seq) {
133
+ // seq starts after ESC; first char is '['
134
+ const body = seq.slice(1);
135
+ if (body === '')
136
+ return 'partial';
137
+ if (body[0] === '<')
138
+ return parseSgr(body);
139
+ const match = /^(?:(\d+)?(?:;(\d+))?(?:;(\d+))?)?([A-Za-z~u])/.exec(body);
140
+ if (match === null) {
141
+ if (/^[\d;]*$/.test(body) && body.length < 32)
142
+ return 'partial';
143
+ return null;
144
+ }
145
+ const used = 1 + match[0].length;
146
+ const p1 = match[1] === undefined || match[1] === '' ? 1 : Number(match[1]);
147
+ const p2 = match[2] === undefined || match[2] === '' ? 1 : Number(match[2]);
148
+ const p3 = match[3] === undefined || match[3] === '' ? undefined : Number(match[3]);
149
+ const cmd = match[4] ?? '';
150
+ if (cmd === 'u')
151
+ return { event: kittyEvent(p1, p2), used };
152
+ if (cmd === '~') {
153
+ if (p1 === 200)
154
+ return { event: { type: 'paste-start' }, used };
155
+ if (p1 === 201)
156
+ return { event: { type: 'paste-end' }, used };
157
+ if (p1 === 27 && p3 !== undefined) {
158
+ return { event: kittyEvent(p3, p2), used };
159
+ }
160
+ const name = CSI_TILDE[p1];
161
+ if (name === undefined)
162
+ return { event: { type: 'key', id: `csi-${p1}` }, used };
163
+ return { event: asEvent(withMods(name, p2)), used };
164
+ }
165
+ const letter = CSI_LETTER[cmd];
166
+ if (letter === undefined)
167
+ return { event: { type: 'key', id: `csi-${cmd}` }, used };
168
+ return { event: asEvent(withMods(letter, p2 === 1 && p1 > 1 ? p1 : p2)), used };
169
+ }
170
+ function parseSs3(seq) {
171
+ const next = seq[1];
172
+ if (next === undefined)
173
+ return 'partial';
174
+ const letter = CSI_LETTER[next];
175
+ if (letter === undefined)
176
+ return null;
177
+ return { event: asEvent(letter), used: 2 };
178
+ }
179
+ /**
180
+ * Decode a stdin string into events, leaving an incomplete escape in `rest`.
181
+ */
182
+ export function parseKeys(input) {
183
+ const events = [];
184
+ let i = 0;
185
+ while (i < input.length) {
186
+ const code = input.charCodeAt(i);
187
+ if (code === 0x1b) {
188
+ const tail = input.slice(i);
189
+ const second = tail[1];
190
+ if (second === undefined)
191
+ return { events, rest: tail };
192
+ if (second === '[') {
193
+ const parsed = parseCsi(tail.slice(1));
194
+ if (parsed === 'partial')
195
+ return { events, rest: tail };
196
+ if (parsed === null) {
197
+ i += 1;
198
+ continue;
199
+ }
200
+ events.push(parsed.event);
201
+ i += 1 + parsed.used;
202
+ continue;
203
+ }
204
+ if (second === 'O') {
205
+ const parsed = parseSs3(tail.slice(1));
206
+ if (parsed === 'partial')
207
+ return { events, rest: tail };
208
+ if (parsed === null) {
209
+ i += 1;
210
+ continue;
211
+ }
212
+ events.push(parsed.event);
213
+ i += 1 + parsed.used;
214
+ continue;
215
+ }
216
+ const alt = ALT_SPECIAL[second];
217
+ if (alt !== undefined) {
218
+ events.push({ type: 'key', id: alt });
219
+ i += 2;
220
+ continue;
221
+ }
222
+ if (second >= ' ' && second !== '\x7f') {
223
+ events.push({ type: 'key', id: `alt+${second.toLowerCase()}` });
224
+ i += 2;
225
+ continue;
226
+ }
227
+ events.push({ type: 'key', id: 'escape' });
228
+ i += 1;
229
+ continue;
230
+ }
231
+ const ctrl = CTRL[code];
232
+ if (ctrl !== undefined) {
233
+ events.push({ type: 'key', id: ctrl });
234
+ i += 1;
235
+ continue;
236
+ }
237
+ if (code < 0x20) {
238
+ i += 1;
239
+ continue;
240
+ }
241
+ // Consume a run of printable text (no ESC / C0).
242
+ let j = i + 1;
243
+ while (j < input.length) {
244
+ const next = input.charCodeAt(j);
245
+ if (next < 0x20 || next === 0x1b || next === 0x7f)
246
+ break;
247
+ j += 1;
248
+ }
249
+ events.push({ type: 'text', value: input.slice(i, j) });
250
+ i = j;
251
+ }
252
+ return { events, rest: '' };
253
+ }
254
+ /**
255
+ * Turn a leftover incomplete sequence into events when the ESC timeout fires.
256
+ * A lone ESC becomes `escape`; anything else is dropped.
257
+ */
258
+ export function flushPending(rest) {
259
+ if (rest === '\x1b')
260
+ return [{ type: 'key', id: 'escape' }];
261
+ return [];
262
+ }
263
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Compact markdown → terminal lines. Enough of OMP's Markdown component for
3
+ * the transcript: headings, emphasis, links, strikethrough, inline/fenced
4
+ * code, nested/task lists, quotes, tables, hr.
5
+ * @module @agi-fans/dsh-tui
6
+ */
7
+ import { type Theme } from './theme.ts';
8
+ /** Inline markdown: code, links, strike, bold, italic. */
9
+ export declare function renderInline(text: string, theme: Theme): string;
10
+ /**
11
+ * Render markdown to display lines already wrapped to `width`.
12
+ */
13
+ export declare function renderMarkdown(source: string, theme: Theme, width: number): string[];