@relace-ai/jacq 0.1.1-beta.1 → 0.1.1

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 (106) hide show
  1. package/dist/actions/messages.d.ts +41 -0
  2. package/dist/actions/messages.js +77 -0
  3. package/dist/actions/messages.js.map +1 -0
  4. package/dist/actions/prompts.d.ts +6 -0
  5. package/dist/actions/prompts.js +18 -0
  6. package/dist/actions/prompts.js.map +1 -0
  7. package/dist/actions/tasks.d.ts +13 -0
  8. package/dist/actions/tasks.js +66 -0
  9. package/dist/actions/tasks.js.map +1 -0
  10. package/dist/auth.d.ts +12 -0
  11. package/dist/auth.js +131 -0
  12. package/dist/auth.js.map +1 -0
  13. package/dist/clipboard.d.ts +21 -0
  14. package/dist/clipboard.js +126 -0
  15. package/dist/clipboard.js.map +1 -0
  16. package/dist/commands.d.ts +15 -0
  17. package/dist/commands.js +23 -0
  18. package/dist/commands.js.map +1 -0
  19. package/dist/config.d.ts +12 -0
  20. package/dist/config.js +63 -0
  21. package/dist/config.js.map +1 -0
  22. package/dist/connection.d.ts +43 -0
  23. package/dist/connection.js +231 -0
  24. package/dist/connection.js.map +1 -0
  25. package/dist/constants.d.ts +2 -0
  26. package/dist/constants.js +3 -0
  27. package/dist/constants.js.map +1 -0
  28. package/dist/debug.d.ts +96 -0
  29. package/dist/debug.js +144 -0
  30. package/dist/debug.js.map +1 -0
  31. package/dist/index.d.ts +10 -0
  32. package/dist/index.js +390 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/markdown/index.d.ts +11 -0
  35. package/dist/markdown/index.js +12 -0
  36. package/dist/markdown/index.js.map +1 -0
  37. package/dist/markdown/parser.d.ts +22 -0
  38. package/dist/markdown/parser.js +310 -0
  39. package/dist/markdown/parser.js.map +1 -0
  40. package/dist/markdown/renderer.d.ts +23 -0
  41. package/dist/markdown/renderer.js +358 -0
  42. package/dist/markdown/renderer.js.map +1 -0
  43. package/dist/markdown/types.d.ts +74 -0
  44. package/dist/markdown/types.js +12 -0
  45. package/dist/markdown/types.js.map +1 -0
  46. package/dist/protocol.d.ts +46 -0
  47. package/dist/protocol.js +608 -0
  48. package/dist/protocol.js.map +1 -0
  49. package/dist/renderer.d.ts +46 -0
  50. package/dist/renderer.js +144 -0
  51. package/dist/renderer.js.map +1 -0
  52. package/dist/screen.d.ts +34 -0
  53. package/dist/screen.js +167 -0
  54. package/dist/screen.js.map +1 -0
  55. package/dist/state.d.ts +6 -0
  56. package/dist/state.js +77 -0
  57. package/dist/state.js.map +1 -0
  58. package/dist/styles.d.ts +16 -0
  59. package/dist/styles.js +68 -0
  60. package/dist/styles.js.map +1 -0
  61. package/dist/terminal.d.ts +46 -0
  62. package/dist/terminal.js +67 -0
  63. package/dist/terminal.js.map +1 -0
  64. package/dist/tools/executor.d.ts +8 -0
  65. package/dist/tools/executor.js +20 -0
  66. package/dist/tools/executor.js.map +1 -0
  67. package/dist/tools/index.d.ts +5 -0
  68. package/dist/tools/index.js +6 -0
  69. package/dist/tools/index.js.map +1 -0
  70. package/dist/tools/registry.d.ts +32 -0
  71. package/dist/tools/registry.js +344 -0
  72. package/dist/tools/registry.js.map +1 -0
  73. package/dist/types.d.ts +200 -0
  74. package/dist/types.js +5 -0
  75. package/dist/types.js.map +1 -0
  76. package/dist/ui/backgroundTasks.d.ts +7 -0
  77. package/dist/ui/backgroundTasks.js +192 -0
  78. package/dist/ui/backgroundTasks.js.map +1 -0
  79. package/dist/ui/filePicker.d.ts +9 -0
  80. package/dist/ui/filePicker.js +315 -0
  81. package/dist/ui/filePicker.js.map +1 -0
  82. package/dist/ui/index.d.ts +33 -0
  83. package/dist/ui/index.js +289 -0
  84. package/dist/ui/index.js.map +1 -0
  85. package/dist/ui/input.d.ts +7 -0
  86. package/dist/ui/input.js +320 -0
  87. package/dist/ui/input.js.map +1 -0
  88. package/dist/ui/messages.d.ts +9 -0
  89. package/dist/ui/messages.js +329 -0
  90. package/dist/ui/messages.js.map +1 -0
  91. package/dist/ui/primitives.d.ts +35 -0
  92. package/dist/ui/primitives.js +94 -0
  93. package/dist/ui/primitives.js.map +1 -0
  94. package/dist/ui/promptInput.d.ts +8 -0
  95. package/dist/ui/promptInput.js +198 -0
  96. package/dist/ui/promptInput.js.map +1 -0
  97. package/dist/ui/promptPicker.d.ts +7 -0
  98. package/dist/ui/promptPicker.js +214 -0
  99. package/dist/ui/promptPicker.js.map +1 -0
  100. package/dist/ui/sessions.d.ts +6 -0
  101. package/dist/ui/sessions.js +214 -0
  102. package/dist/ui/sessions.js.map +1 -0
  103. package/dist/ui/welcome.d.ts +6 -0
  104. package/dist/ui/welcome.js +114 -0
  105. package/dist/ui/welcome.js.map +1 -0
  106. package/package.json +1 -1
@@ -0,0 +1,198 @@
1
+ /**
2
+ * Prompt Input Component — full-screen draw() API
3
+ * Shows when agent asks a freeform question (no options)
4
+ * or when user selects "Other" from prompt picker
5
+ */
6
+ import { drawText, drawHLine } from './primitives.js';
7
+ import { markDirty } from '../state.js';
8
+ import { cancelTask } from '../protocol.js';
9
+ import { clearPrompt } from '../actions/prompts.js';
10
+ import { addMessage } from '../actions/messages.js';
11
+ const MAX_INPUT_LINES = 4;
12
+ // === Line Wrapping ===
13
+ function wrapLines(lines, maxWidth) {
14
+ const wrapped = [];
15
+ for (const ln of lines) {
16
+ if (ln.length === 0) {
17
+ wrapped.push('');
18
+ }
19
+ else if (ln.length <= maxWidth) {
20
+ wrapped.push(ln);
21
+ }
22
+ else {
23
+ for (let i = 0; i < ln.length; i += maxWidth) {
24
+ wrapped.push(ln.slice(i, i + maxWidth));
25
+ }
26
+ }
27
+ }
28
+ return wrapped.length > 0 ? wrapped : [''];
29
+ }
30
+ function getWrappedCursorPos(lines, cursorLine, cursorCol, maxWidth) {
31
+ let visualLine = 0;
32
+ for (let i = 0; i < cursorLine; i++) {
33
+ visualLine += Math.max(1, Math.ceil((lines[i].length || 1) / maxWidth));
34
+ }
35
+ visualLine += Math.floor(cursorCol / maxWidth);
36
+ return { line: visualLine, column: cursorCol % maxWidth };
37
+ }
38
+ function getCursorPosition(text, cursor) {
39
+ const lines = text.split('\n');
40
+ let offset = 0;
41
+ for (let i = 0; i < lines.length; i++) {
42
+ if (cursor <= offset + lines[i].length) {
43
+ return { line: i, column: cursor - offset };
44
+ }
45
+ offset += lines[i].length + 1;
46
+ }
47
+ return { line: lines.length - 1, column: lines[lines.length - 1].length };
48
+ }
49
+ // === Component ===
50
+ const promptInput = {
51
+ height(state) {
52
+ const text = state.promptInputText || '';
53
+ const width = state.layout?.width || 80;
54
+ const maxWidth = width - 6;
55
+ const wrapped = wrapLines(text.split('\n'), maxWidth);
56
+ // top sep + title + sep + question + sep + input lines + extra line + bottom sep + hints
57
+ return 8 + Math.min(wrapped.length, MAX_INPUT_LINES);
58
+ },
59
+ draw(screen, y, state, layout, styles) {
60
+ const prompt = state.pendingPrompt;
61
+ if (!prompt)
62
+ return;
63
+ const width = layout.width;
64
+ const text = state.promptInputText || '';
65
+ const cursor = state.promptInputCursor || 0;
66
+ // Top separator
67
+ drawHLine(screen, 0, y, width, styles.border);
68
+ // Title row
69
+ const total = prompt.questions?.length || 1;
70
+ const qNum = (prompt.currentQuestionIndex || 0) + 1;
71
+ const titleLabel = total > 1
72
+ ? `Agent Question (${qNum}/${total})`
73
+ : 'Agent Question';
74
+ drawText(screen, 2, y + 1, titleLabel, styles.title);
75
+ // Question
76
+ const currentQ = prompt.questions?.[prompt.currentQuestionIndex] || prompt;
77
+ const maxQuestionLen = width - 4;
78
+ const question = currentQ.question || '';
79
+ const questionText = question.length > maxQuestionLen
80
+ ? question.slice(0, maxQuestionLen - 1) + '\u2026'
81
+ : question;
82
+ drawText(screen, 2, y + 3, questionText, styles.text);
83
+ // Input area
84
+ const inputStartX = 4;
85
+ const maxWidth = width - inputStartX - 2;
86
+ const logicalLines = text.split('\n');
87
+ const logicalPos = getCursorPosition(text, cursor);
88
+ const wrapped = wrapLines(logicalLines, maxWidth);
89
+ const cursorPos = getWrappedCursorPos(logicalLines, logicalPos.line, logicalPos.column, maxWidth);
90
+ let scroll = 0;
91
+ if (wrapped.length > MAX_INPUT_LINES) {
92
+ scroll = Math.max(0, Math.min(cursorPos.line - MAX_INPUT_LINES + 1, wrapped.length - MAX_INPUT_LINES));
93
+ }
94
+ const visible = wrapped.slice(scroll, scroll + MAX_INPUT_LINES);
95
+ for (let i = 0; i < visible.length; i++) {
96
+ const ln = visible[i];
97
+ const actualIdx = scroll + i;
98
+ const prefix = actualIdx === 0 ? '\u276F ' : ' ';
99
+ const row = y + 5 + i;
100
+ drawText(screen, 2, row, prefix, styles.prompt);
101
+ drawText(screen, inputStartX, row, ln, styles.input);
102
+ // Draw cursor
103
+ if (actualIdx === cursorPos.line) {
104
+ const cursorX = inputStartX + cursorPos.column;
105
+ const cursorChar = cursorPos.column < ln.length ? ln[cursorPos.column] : ' ';
106
+ screen.set(cursorX, row, cursorChar, styles.cursor);
107
+ }
108
+ }
109
+ // Bottom separator
110
+ const componentHeight = this.height(state);
111
+ const bottomY = y + componentHeight - 2;
112
+ drawHLine(screen, 0, bottomY, width, styles.border);
113
+ // Hints
114
+ const hy = bottomY + 1;
115
+ let hx = 2;
116
+ const gap = ' ';
117
+ drawText(screen, hx, hy, 'Enter', styles.value);
118
+ hx += 5;
119
+ drawText(screen, hx, hy, ' answer', styles.hint);
120
+ hx += 7 + gap.length;
121
+ drawText(screen, hx, hy, 'Esc', styles.value);
122
+ hx += 3;
123
+ drawText(screen, hx, hy, ' cancel', styles.hint);
124
+ },
125
+ handleKey(str, key, state) {
126
+ const prompt = state.pendingPrompt;
127
+ if (!prompt)
128
+ return { handled: false };
129
+ if (key.name === 'escape') {
130
+ const taskId = prompt.taskId;
131
+ clearPrompt();
132
+ if (taskId) {
133
+ addMessage('status', 'Cancelled', { taskId });
134
+ cancelTask(taskId);
135
+ }
136
+ return { handled: true };
137
+ }
138
+ if (key.name === 'return') {
139
+ if (state.promptInputText.trim()) {
140
+ const response = state.promptInputText.trim();
141
+ state.promptInputText = '';
142
+ state.promptInputCursor = 0;
143
+ state.promptFreeInput = false;
144
+ markDirty();
145
+ return { handled: true, action: 'promptResponse', response };
146
+ }
147
+ return { handled: true };
148
+ }
149
+ if (key.name === 'left') {
150
+ if (state.promptInputCursor > 0) {
151
+ state.promptInputCursor--;
152
+ markDirty();
153
+ }
154
+ return { handled: true };
155
+ }
156
+ if (key.name === 'right') {
157
+ if (state.promptInputCursor < state.promptInputText.length) {
158
+ state.promptInputCursor++;
159
+ markDirty();
160
+ }
161
+ return { handled: true };
162
+ }
163
+ if (key.name === 'home' || (key.ctrl && key.name === 'a')) {
164
+ state.promptInputCursor = 0;
165
+ markDirty();
166
+ return { handled: true };
167
+ }
168
+ if (key.name === 'end' || (key.ctrl && key.name === 'e')) {
169
+ state.promptInputCursor = state.promptInputText.length;
170
+ markDirty();
171
+ return { handled: true };
172
+ }
173
+ if (key.name === 'backspace') {
174
+ if (state.promptInputCursor > 0) {
175
+ state.promptInputText = state.promptInputText.slice(0, state.promptInputCursor - 1) + state.promptInputText.slice(state.promptInputCursor);
176
+ state.promptInputCursor--;
177
+ markDirty();
178
+ }
179
+ return { handled: true };
180
+ }
181
+ if (key.name === 'delete') {
182
+ if (state.promptInputCursor < state.promptInputText.length) {
183
+ state.promptInputText = state.promptInputText.slice(0, state.promptInputCursor) + state.promptInputText.slice(state.promptInputCursor + 1);
184
+ markDirty();
185
+ }
186
+ return { handled: true };
187
+ }
188
+ if (str && str.length === 1 && !key.ctrl && !key.meta && key.name !== 'tab') {
189
+ state.promptInputText = state.promptInputText.slice(0, state.promptInputCursor) + str + state.promptInputText.slice(state.promptInputCursor);
190
+ state.promptInputCursor++;
191
+ markDirty();
192
+ return { handled: true };
193
+ }
194
+ return { handled: false };
195
+ }
196
+ };
197
+ export default promptInput;
198
+ //# sourceMappingURL=promptInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptInput.js","sourceRoot":"","sources":["../../src/ui/promptInput.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Prompt Picker Component — full-screen draw() API
3
+ * Shows when agent asks a question with options
4
+ */
5
+ import type { UIComponent } from '../types.js';
6
+ declare const promptPicker: UIComponent;
7
+ export default promptPicker;
@@ -0,0 +1,214 @@
1
+ /**
2
+ * Prompt Picker Component — full-screen draw() API
3
+ * Shows when agent asks a question with options
4
+ */
5
+ import { drawText, drawHLine } from './primitives.js';
6
+ import { markDirty } from '../state.js';
7
+ import { cancelTask } from '../protocol.js';
8
+ import { clearPrompt } from '../actions/prompts.js';
9
+ import { addMessage } from '../actions/messages.js';
10
+ const MIN_HEIGHT = 6;
11
+ const OPTIONS_PER_PAGE = 9;
12
+ const promptPicker = {
13
+ height(state) {
14
+ const prompt = state.pendingPrompt;
15
+ if (!prompt)
16
+ return 0;
17
+ const currentQ = prompt.questions[prompt.currentQuestionIndex];
18
+ const optionCount = currentQ.options?.length || 0;
19
+ const allOptions = optionCount + 1; // +1 for "Other"
20
+ const totalPages = Math.ceil(allOptions / OPTIONS_PER_PAGE) || 1;
21
+ const visibleRows = Math.min(allOptions, OPTIONS_PER_PAGE);
22
+ const paginationRow = totalPages > 1 ? 2 : 1;
23
+ const contentHeight = 7 + visibleRows + paginationRow;
24
+ return Math.max(MIN_HEIGHT, contentHeight);
25
+ },
26
+ draw(screen, y, state, layout, styles) {
27
+ const prompt = state.pendingPrompt;
28
+ if (!prompt)
29
+ return;
30
+ const width = layout.width;
31
+ const componentHeight = this.height(state);
32
+ const currentQ = prompt.questions[prompt.currentQuestionIndex];
33
+ const options = currentQ.options?.map(o => o.label) || [];
34
+ const selectedIndex = state.promptPickerIndex || 0;
35
+ const total = prompt.questions.length;
36
+ const qNum = prompt.currentQuestionIndex + 1;
37
+ // All items: options + "Other"
38
+ const allItems = [...options, null]; // null = "Other"
39
+ const totalPages = Math.ceil(allItems.length / OPTIONS_PER_PAGE) || 1;
40
+ const currentPage = state.promptPickerPage || 0;
41
+ // Top separator
42
+ drawHLine(screen, 0, y, width, styles.border);
43
+ // Title row with question counter
44
+ const titleText = total > 1
45
+ ? `Agent Question (${qNum}/${total})`
46
+ : 'Agent Question';
47
+ drawText(screen, 2, y + 1, titleText, styles.title);
48
+ // Question
49
+ const maxQuestionLen = width - 4;
50
+ const question = currentQ.question;
51
+ const questionText = question.length > maxQuestionLen
52
+ ? question.slice(0, maxQuestionLen - 1) + '\u2026'
53
+ : question;
54
+ drawText(screen, 2, y + 3, questionText, styles.text);
55
+ // Page slice
56
+ const pageStart = currentPage * OPTIONS_PER_PAGE;
57
+ const pageEnd = Math.min(pageStart + OPTIONS_PER_PAGE, allItems.length);
58
+ const pageItems = allItems.slice(pageStart, pageEnd);
59
+ for (let i = 0; i < pageItems.length; i++) {
60
+ const globalIndex = pageStart + i;
61
+ const isSelected = selectedIndex === i;
62
+ const row = y + 5 + i;
63
+ const item = pageItems[i];
64
+ if (item === null) {
65
+ // "Other" option
66
+ const selector = isSelected ? '>' : ' ';
67
+ drawText(screen, 2, row, `${selector} `, styles.value);
68
+ drawText(screen, 4, row, '0. ', styles.dim);
69
+ drawText(screen, 7, row, '[Other (type your own)]', isSelected ? styles.title : styles.dim);
70
+ }
71
+ else {
72
+ const displayNum = globalIndex + 1;
73
+ const selector = isSelected ? '>' : ' ';
74
+ const optionText = item.length > width - 10
75
+ ? item.slice(0, width - 11) + '\u2026'
76
+ : item;
77
+ drawText(screen, 2, row, `${selector} `, styles.value);
78
+ drawText(screen, 4, row, `${displayNum}. `, styles.dim);
79
+ drawText(screen, 4 + `${displayNum}. `.length, row, optionText, isSelected ? styles.title : styles.text);
80
+ }
81
+ }
82
+ // Pagination
83
+ if (totalPages > 1) {
84
+ const paginationY = y + 5 + pageItems.length;
85
+ drawText(screen, 2, paginationY, `\u2190 Page ${currentPage + 1}/${totalPages} \u2192`, styles.dim);
86
+ }
87
+ // Bottom separator
88
+ const bottomY = y + componentHeight - 2;
89
+ drawHLine(screen, 0, bottomY, width, styles.border);
90
+ // Hints
91
+ const hy = bottomY + 1;
92
+ let hx = 2;
93
+ const gap = ' ';
94
+ if (totalPages > 1) {
95
+ drawText(screen, hx, hy, '\u2191\u2193', styles.value);
96
+ hx += 2;
97
+ drawText(screen, hx, hy, ' navigate', styles.hint);
98
+ hx += 9 + gap.length;
99
+ drawText(screen, hx, hy, '\u2190\u2192', styles.value);
100
+ hx += 2;
101
+ drawText(screen, hx, hy, ' page', styles.hint);
102
+ hx += 5 + gap.length;
103
+ }
104
+ else {
105
+ drawText(screen, hx, hy, '\u2191\u2193', styles.value);
106
+ hx += 2;
107
+ drawText(screen, hx, hy, ' navigate', styles.hint);
108
+ hx += 9 + gap.length;
109
+ }
110
+ drawText(screen, hx, hy, 'Enter', styles.value);
111
+ hx += 5;
112
+ drawText(screen, hx, hy, ' select', styles.hint);
113
+ hx += 7 + gap.length;
114
+ drawText(screen, hx, hy, '#0-9', styles.value);
115
+ hx += 4;
116
+ drawText(screen, hx, hy, ' quick', styles.hint);
117
+ hx += 6 + gap.length;
118
+ drawText(screen, hx, hy, 'Esc', styles.value);
119
+ hx += 3;
120
+ drawText(screen, hx, hy, ' cancel', styles.hint);
121
+ },
122
+ handleKey(str, key, state) {
123
+ const prompt = state.pendingPrompt;
124
+ if (!prompt)
125
+ return { handled: false };
126
+ const currentQ = prompt.questions[prompt.currentQuestionIndex];
127
+ const options = currentQ.options?.map(o => o.label) || [];
128
+ const allItems = options.length + 1; // +1 for "Other"
129
+ const totalPages = Math.ceil(allItems / OPTIONS_PER_PAGE) || 1;
130
+ const currentPage = state.promptPickerPage || 0;
131
+ const pageStart = currentPage * OPTIONS_PER_PAGE;
132
+ const pageEnd = Math.min(pageStart + OPTIONS_PER_PAGE, allItems);
133
+ const pageSize = pageEnd - pageStart;
134
+ const maxIndex = pageSize - 1;
135
+ const selectedIndex = state.promptPickerIndex || 0;
136
+ if (key.name === 'left' && totalPages > 1) {
137
+ state.promptPickerPage = currentPage > 0 ? currentPage - 1 : totalPages - 1;
138
+ state.promptPickerIndex = 0;
139
+ markDirty();
140
+ return { handled: true };
141
+ }
142
+ if (key.name === 'right' && totalPages > 1) {
143
+ state.promptPickerPage = currentPage < totalPages - 1 ? currentPage + 1 : 0;
144
+ state.promptPickerIndex = 0;
145
+ markDirty();
146
+ return { handled: true };
147
+ }
148
+ if (key.name === 'up') {
149
+ state.promptPickerIndex = selectedIndex > 0 ? selectedIndex - 1 : maxIndex;
150
+ markDirty();
151
+ return { handled: true };
152
+ }
153
+ if (key.name === 'down') {
154
+ state.promptPickerIndex = selectedIndex < maxIndex ? selectedIndex + 1 : 0;
155
+ markDirty();
156
+ return { handled: true };
157
+ }
158
+ if (key.name === 'return') {
159
+ const globalIndex = pageStart + selectedIndex;
160
+ if (globalIndex < options.length) {
161
+ const response = options[globalIndex];
162
+ state.promptPickerIndex = 0;
163
+ state.promptPickerPage = 0;
164
+ markDirty();
165
+ return { handled: true, action: 'promptResponse', response };
166
+ }
167
+ else {
168
+ state.promptPickerIndex = 0;
169
+ state.promptPickerPage = 0;
170
+ state.promptFreeInput = true;
171
+ markDirty();
172
+ return { handled: true };
173
+ }
174
+ }
175
+ if (str === '0') {
176
+ state.promptPickerIndex = 0;
177
+ state.promptPickerPage = 0;
178
+ state.promptFreeInput = true;
179
+ markDirty();
180
+ return { handled: true };
181
+ }
182
+ const num = parseInt(str || '', 10);
183
+ if (num >= 1 && num <= 9 && num <= pageSize) {
184
+ const globalIndex = pageStart + num - 1;
185
+ if (globalIndex < options.length) {
186
+ const response = options[globalIndex];
187
+ state.promptPickerIndex = 0;
188
+ state.promptPickerPage = 0;
189
+ markDirty();
190
+ return { handled: true, action: 'promptResponse', response };
191
+ }
192
+ else {
193
+ // It's the "Other" option
194
+ state.promptPickerIndex = 0;
195
+ state.promptPickerPage = 0;
196
+ state.promptFreeInput = true;
197
+ markDirty();
198
+ return { handled: true };
199
+ }
200
+ }
201
+ if (key.name === 'escape') {
202
+ const taskId = prompt.taskId;
203
+ clearPrompt();
204
+ if (taskId) {
205
+ addMessage('status', 'Cancelled', { taskId });
206
+ cancelTask(taskId);
207
+ }
208
+ return { handled: true };
209
+ }
210
+ return { handled: false };
211
+ }
212
+ };
213
+ export default promptPicker;
214
+ //# sourceMappingURL=promptPicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptPicker.js","sourceRoot":"","sources":["../../src/ui/promptPicker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Session Picker Component — full-screen draw() API
3
+ */
4
+ import type { UIComponent } from '../types.js';
5
+ declare const sessions: UIComponent;
6
+ export default sessions;