@dexto/tui 1.7.1 → 1.8.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 (99) hide show
  1. package/dist/agent-backend.cjs +16 -2
  2. package/dist/agent-backend.d.ts +5 -2
  3. package/dist/agent-backend.d.ts.map +1 -1
  4. package/dist/agent-backend.js +15 -2
  5. package/dist/agent-backend.test.cjs +28 -2
  6. package/dist/agent-backend.test.js +28 -2
  7. package/dist/components/ApprovalPrompt.cjs +6 -5
  8. package/dist/components/ApprovalPrompt.d.ts +1 -1
  9. package/dist/components/ApprovalPrompt.d.ts.map +1 -1
  10. package/dist/components/ApprovalPrompt.js +6 -5
  11. package/dist/components/TextBufferInput.cjs +14 -1
  12. package/dist/components/TextBufferInput.d.ts +5 -1
  13. package/dist/components/TextBufferInput.d.ts.map +1 -1
  14. package/dist/components/TextBufferInput.js +14 -1
  15. package/dist/components/chat/QueuedMessagesDisplay.cjs +17 -8
  16. package/dist/components/chat/QueuedMessagesDisplay.d.ts +7 -1
  17. package/dist/components/chat/QueuedMessagesDisplay.d.ts.map +1 -1
  18. package/dist/components/chat/QueuedMessagesDisplay.js +16 -8
  19. package/dist/components/input/InputArea.cjs +4 -0
  20. package/dist/components/input/InputArea.d.ts +5 -1
  21. package/dist/components/input/InputArea.d.ts.map +1 -1
  22. package/dist/components/input/InputArea.js +4 -0
  23. package/dist/components/modes/AlternateBufferCLI.cjs +20 -1
  24. package/dist/components/modes/AlternateBufferCLI.d.ts.map +1 -1
  25. package/dist/components/modes/AlternateBufferCLI.js +21 -2
  26. package/dist/components/modes/StaticCLI.cjs +20 -1
  27. package/dist/components/modes/StaticCLI.d.ts.map +1 -1
  28. package/dist/components/modes/StaticCLI.js +21 -2
  29. package/dist/components/overlays/LoginOverlay.cjs +2 -10
  30. package/dist/components/overlays/LoginOverlay.d.ts.map +1 -1
  31. package/dist/components/overlays/LoginOverlay.js +3 -11
  32. package/dist/containers/InputContainer.cjs +119 -18
  33. package/dist/containers/InputContainer.d.ts +6 -2
  34. package/dist/containers/InputContainer.d.ts.map +1 -1
  35. package/dist/containers/InputContainer.js +119 -18
  36. package/dist/hooks/useAgentEvents.cjs +27 -5
  37. package/dist/hooks/useAgentEvents.d.ts +3 -2
  38. package/dist/hooks/useAgentEvents.d.ts.map +1 -1
  39. package/dist/hooks/useAgentEvents.js +27 -5
  40. package/dist/hooks/useCLIState.cjs +10 -4
  41. package/dist/hooks/useCLIState.d.ts +2 -0
  42. package/dist/hooks/useCLIState.d.ts.map +1 -1
  43. package/dist/hooks/useCLIState.js +10 -4
  44. package/dist/hooks/useInputOrchestrator.cjs +15 -14
  45. package/dist/hooks/useInputOrchestrator.d.ts +6 -6
  46. package/dist/hooks/useInputOrchestrator.d.ts.map +1 -1
  47. package/dist/hooks/useInputOrchestrator.js +15 -14
  48. package/dist/host/index.cjs +6 -6
  49. package/dist/host/index.d.ts +8 -17
  50. package/dist/host/index.d.ts.map +1 -1
  51. package/dist/host/index.js +5 -5
  52. package/dist/host/index.test.cjs +47 -0
  53. package/dist/host/index.test.d.ts +2 -0
  54. package/dist/host/index.test.d.ts.map +1 -0
  55. package/dist/host/index.test.js +50 -0
  56. package/dist/index.d.cts +10 -15
  57. package/dist/interactive-commands/command-parser.cjs +1 -0
  58. package/dist/interactive-commands/command-parser.d.ts.map +1 -1
  59. package/dist/interactive-commands/command-parser.js +1 -0
  60. package/dist/interactive-commands/commands.cjs +3 -0
  61. package/dist/interactive-commands/commands.d.ts.map +1 -1
  62. package/dist/interactive-commands/commands.js +3 -0
  63. package/dist/interactive-commands/commands.test.cjs +42 -0
  64. package/dist/interactive-commands/commands.test.js +42 -0
  65. package/dist/interactive-commands/prompt-commands.cjs +4 -66
  66. package/dist/interactive-commands/prompt-commands.d.ts +1 -2
  67. package/dist/interactive-commands/prompt-commands.d.ts.map +1 -1
  68. package/dist/interactive-commands/prompt-commands.js +4 -66
  69. package/dist/interactive-commands/skill-commands.cjs +73 -0
  70. package/dist/interactive-commands/skill-commands.d.ts +9 -0
  71. package/dist/interactive-commands/skill-commands.d.ts.map +1 -0
  72. package/dist/interactive-commands/skill-commands.js +49 -0
  73. package/dist/services/processStream.cjs +23 -4
  74. package/dist/services/processStream.d.ts +3 -1
  75. package/dist/services/processStream.d.ts.map +1 -1
  76. package/dist/services/processStream.js +23 -4
  77. package/dist/services/processStream.test.cjs +52 -2
  78. package/dist/services/processStream.test.js +52 -2
  79. package/dist/state/initialState.cjs +2 -1
  80. package/dist/state/initialState.d.ts.map +1 -1
  81. package/dist/state/initialState.js +2 -1
  82. package/dist/state/reducer.cjs +10 -5
  83. package/dist/state/reducer.d.ts.map +1 -1
  84. package/dist/state/reducer.js +10 -5
  85. package/dist/state/types.d.ts +2 -0
  86. package/dist/state/types.d.ts.map +1 -1
  87. package/dist/utils/messageFormatting.cjs +0 -23
  88. package/dist/utils/messageFormatting.d.ts +0 -13
  89. package/dist/utils/messageFormatting.d.ts.map +1 -1
  90. package/dist/utils/messageFormatting.js +0 -21
  91. package/dist/utils/queuedComposerContent.cjs +148 -0
  92. package/dist/utils/queuedComposerContent.d.ts +17 -0
  93. package/dist/utils/queuedComposerContent.d.ts.map +1 -0
  94. package/dist/utils/queuedComposerContent.js +123 -0
  95. package/dist/utils/queuedComposerContent.test.cjs +176 -0
  96. package/dist/utils/queuedComposerContent.test.d.ts +2 -0
  97. package/dist/utils/queuedComposerContent.test.d.ts.map +1 -0
  98. package/dist/utils/queuedComposerContent.test.js +175 -0
  99. package/package.json +4 -4
@@ -37,6 +37,7 @@ function useAgentEvents({
37
37
  setInput,
38
38
  setApproval,
39
39
  setApprovalQueue,
40
+ setSteerMessages,
40
41
  setQueuedMessages,
41
42
  currentSessionId,
42
43
  buffer
@@ -46,6 +47,17 @@ function useAgentEvents({
46
47
  const controller = new AbortController();
47
48
  const { signal } = controller;
48
49
  (0, import_events.setMaxListeners)(25, signal);
50
+ const syncQueue = (sessionId, queue) => {
51
+ const getMessages = queue === "steer" ? agent.getSteerMessages(sessionId) : agent.getFollowUpMessages(sessionId);
52
+ void getMessages.then((messages) => {
53
+ if (queue === "steer") {
54
+ setSteerMessages(messages);
55
+ } else {
56
+ setQueuedMessages(messages);
57
+ }
58
+ }).catch(() => {
59
+ });
60
+ };
49
61
  agent.on(
50
62
  "llm:switched",
51
63
  (payload) => {
@@ -163,6 +175,7 @@ function useAgentEvents({
163
175
  setMessages([]);
164
176
  setApproval(null);
165
177
  setApprovalQueue([]);
178
+ setSteerMessages([]);
166
179
  setQueuedMessages([]);
167
180
  setUi((prev) => ({
168
181
  ...prev,
@@ -184,6 +197,7 @@ function useAgentEvents({
184
197
  setPendingMessages([]);
185
198
  setApproval(null);
186
199
  setApprovalQueue([]);
200
+ setSteerMessages([]);
187
201
  setQueuedMessages([]);
188
202
  buffer.setText("");
189
203
  setInput((prev) => ({
@@ -192,6 +206,7 @@ function useAgentEvents({
192
206
  history: [],
193
207
  historyIndex: -1,
194
208
  draftBeforeHistory: "",
209
+ editingQueuedFollowUp: false,
195
210
  images: [],
196
211
  pastedBlocks: [],
197
212
  pasteCounter: 0
@@ -227,6 +242,7 @@ function useAgentEvents({
227
242
  () => {
228
243
  setApproval(null);
229
244
  setApprovalQueue([]);
245
+ setSteerMessages([]);
230
246
  setQueuedMessages([]);
231
247
  setUi((prev) => ({
232
248
  ...prev,
@@ -272,17 +288,22 @@ function useAgentEvents({
272
288
  "message:queued",
273
289
  (payload) => {
274
290
  if (!payload.sessionId) return;
275
- agent.getQueuedMessages(payload.sessionId).then((messages) => {
276
- setQueuedMessages(messages);
277
- }).catch(() => {
278
- });
291
+ syncQueue(payload.sessionId, payload.queue);
279
292
  },
280
293
  { signal }
281
294
  );
282
295
  agent.on(
283
296
  "message:removed",
284
297
  (payload) => {
285
- setQueuedMessages((prev) => prev.filter((m) => m.id !== payload.id));
298
+ if (!payload.sessionId) {
299
+ if (payload.queue === "steer") {
300
+ setSteerMessages((prev) => prev.filter((m) => m.id !== payload.id));
301
+ } else {
302
+ setQueuedMessages((prev) => prev.filter((m) => m.id !== payload.id));
303
+ }
304
+ return;
305
+ }
306
+ syncQueue(payload.sessionId, payload.queue);
286
307
  },
287
308
  { signal }
288
309
  );
@@ -405,6 +426,7 @@ function useAgentEvents({
405
426
  setInput,
406
427
  setApproval,
407
428
  setApprovalQueue,
429
+ setSteerMessages,
408
430
  setQueuedMessages,
409
431
  currentSessionId,
410
432
  buffer
@@ -5,7 +5,7 @@
5
5
  * llm:error, run:complete, message:dequeued) are handled via agent.stream() iterator in processStream.
6
6
  *
7
7
  * This hook handles:
8
- * - approval:request - Tool/command confirmation requests
8
+ * - approval:request - Tool/command approval requests
9
9
  * - llm:switched - Model change notifications
10
10
  * - session:reset - Conversation reset
11
11
  * - session:created - New session creation (e.g., from /clear)
@@ -33,6 +33,7 @@ interface UseAgentEventsProps {
33
33
  setInput: React.Dispatch<React.SetStateAction<InputState>>;
34
34
  setApproval: React.Dispatch<React.SetStateAction<ApprovalRequest | null>>;
35
35
  setApprovalQueue: React.Dispatch<React.SetStateAction<ApprovalRequest[]>>;
36
+ setSteerMessages: React.Dispatch<React.SetStateAction<QueuedMessage[]>>;
36
37
  setQueuedMessages: React.Dispatch<React.SetStateAction<QueuedMessage[]>>;
37
38
  /** Current session ID for filtering events */
38
39
  currentSessionId: string | null;
@@ -45,6 +46,6 @@ interface UseAgentEventsProps {
45
46
  *
46
47
  * Also handles external triggers (run:invoke) from scheduler, A2A, etc.
47
48
  */
48
- export declare function useAgentEvents({ agent, setMessages, setPendingMessages, setUi, setSession, setInput, setApproval, setApprovalQueue, setQueuedMessages, currentSessionId, buffer, }: UseAgentEventsProps): void;
49
+ export declare function useAgentEvents({ agent, setMessages, setPendingMessages, setUi, setSession, setInput, setApproval, setApprovalQueue, setSteerMessages, setQueuedMessages, currentSessionId, buffer, }: UseAgentEventsProps): void;
49
50
  export {};
50
51
  //# sourceMappingURL=useAgentEvents.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useAgentEvents.d.ts","sourceRoot":"","sources":["../../src/hooks/useAgentEvents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAGH,KAAK,aAAa,EAErB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAEvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,UAAU,mBAAmB;IACzB,KAAK,EAAE,eAAe,CAAC;IACvB,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7D,kBAAkB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACpE,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACrD,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;IAC/D,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3D,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC;IAC1E,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;IAC1E,iBAAiB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IACzE,8CAA8C;IAC9C,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,iFAAiF;IACjF,MAAM,EAAE,UAAU,CAAC;CACtB;AAYD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAC3B,KAAK,EACL,WAAW,EACX,kBAAkB,EAClB,KAAK,EACL,UAAU,EACV,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,MAAM,GACT,EAAE,mBAAmB,GAAG,IAAI,CAygB5B"}
1
+ {"version":3,"file":"useAgentEvents.d.ts","sourceRoot":"","sources":["../../src/hooks/useAgentEvents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAGH,KAAK,aAAa,EAErB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAEvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,UAAU,mBAAmB;IACzB,KAAK,EAAE,eAAe,CAAC;IACvB,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7D,kBAAkB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACpE,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACrD,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;IAC/D,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3D,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC;IAC1E,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;IAC1E,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IACxE,iBAAiB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IACzE,8CAA8C;IAC9C,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,iFAAiF;IACjF,MAAM,EAAE,UAAU,CAAC;CACtB;AAYD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAC3B,KAAK,EACL,WAAW,EACX,kBAAkB,EAClB,KAAK,EACL,UAAU,EACV,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,MAAM,GACT,EAAE,mBAAmB,GAAG,IAAI,CAgiB5B"}
@@ -17,6 +17,7 @@ function useAgentEvents({
17
17
  setInput,
18
18
  setApproval,
19
19
  setApprovalQueue,
20
+ setSteerMessages,
20
21
  setQueuedMessages,
21
22
  currentSessionId,
22
23
  buffer
@@ -26,6 +27,17 @@ function useAgentEvents({
26
27
  const controller = new AbortController();
27
28
  const { signal } = controller;
28
29
  setMaxListeners(25, signal);
30
+ const syncQueue = (sessionId, queue) => {
31
+ const getMessages = queue === "steer" ? agent.getSteerMessages(sessionId) : agent.getFollowUpMessages(sessionId);
32
+ void getMessages.then((messages) => {
33
+ if (queue === "steer") {
34
+ setSteerMessages(messages);
35
+ } else {
36
+ setQueuedMessages(messages);
37
+ }
38
+ }).catch(() => {
39
+ });
40
+ };
29
41
  agent.on(
30
42
  "llm:switched",
31
43
  (payload) => {
@@ -143,6 +155,7 @@ function useAgentEvents({
143
155
  setMessages([]);
144
156
  setApproval(null);
145
157
  setApprovalQueue([]);
158
+ setSteerMessages([]);
146
159
  setQueuedMessages([]);
147
160
  setUi((prev) => ({
148
161
  ...prev,
@@ -164,6 +177,7 @@ function useAgentEvents({
164
177
  setPendingMessages([]);
165
178
  setApproval(null);
166
179
  setApprovalQueue([]);
180
+ setSteerMessages([]);
167
181
  setQueuedMessages([]);
168
182
  buffer.setText("");
169
183
  setInput((prev) => ({
@@ -172,6 +186,7 @@ function useAgentEvents({
172
186
  history: [],
173
187
  historyIndex: -1,
174
188
  draftBeforeHistory: "",
189
+ editingQueuedFollowUp: false,
175
190
  images: [],
176
191
  pastedBlocks: [],
177
192
  pasteCounter: 0
@@ -207,6 +222,7 @@ function useAgentEvents({
207
222
  () => {
208
223
  setApproval(null);
209
224
  setApprovalQueue([]);
225
+ setSteerMessages([]);
210
226
  setQueuedMessages([]);
211
227
  setUi((prev) => ({
212
228
  ...prev,
@@ -252,17 +268,22 @@ function useAgentEvents({
252
268
  "message:queued",
253
269
  (payload) => {
254
270
  if (!payload.sessionId) return;
255
- agent.getQueuedMessages(payload.sessionId).then((messages) => {
256
- setQueuedMessages(messages);
257
- }).catch(() => {
258
- });
271
+ syncQueue(payload.sessionId, payload.queue);
259
272
  },
260
273
  { signal }
261
274
  );
262
275
  agent.on(
263
276
  "message:removed",
264
277
  (payload) => {
265
- setQueuedMessages((prev) => prev.filter((m) => m.id !== payload.id));
278
+ if (!payload.sessionId) {
279
+ if (payload.queue === "steer") {
280
+ setSteerMessages((prev) => prev.filter((m) => m.id !== payload.id));
281
+ } else {
282
+ setQueuedMessages((prev) => prev.filter((m) => m.id !== payload.id));
283
+ }
284
+ return;
285
+ }
286
+ syncQueue(payload.sessionId, payload.queue);
266
287
  },
267
288
  { signal }
268
289
  );
@@ -385,6 +406,7 @@ function useAgentEvents({
385
406
  setInput,
386
407
  setApproval,
387
408
  setApprovalQueue,
409
+ setSteerMessages,
388
410
  setQueuedMessages,
389
411
  currentSessionId,
390
412
  buffer
@@ -39,6 +39,7 @@ function useCLIState({
39
39
  const [messages, setMessages] = (0, import_react.useState)([]);
40
40
  const [pendingMessages, setPendingMessages] = (0, import_react.useState)([]);
41
41
  const [dequeuedBuffer, setDequeuedBuffer] = (0, import_react.useState)([]);
42
+ const [steerMessages, setSteerMessages] = (0, import_react.useState)([]);
42
43
  const [queuedMessages, setQueuedMessages] = (0, import_react.useState)([]);
43
44
  const [todos, setTodos] = (0, import_react.useState)([]);
44
45
  const [ui, setUi] = (0, import_react.useState)({
@@ -82,7 +83,8 @@ function useCLIState({
82
83
  draftBeforeHistory: "",
83
84
  images: [],
84
85
  pastedBlocks: [],
85
- pasteCounter: 0
86
+ pasteCounter: 0,
87
+ editingQueuedFollowUp: false
86
88
  });
87
89
  const initialConfig = agent.getCurrentLLMConfig();
88
90
  const [session, setSession] = (0, import_react.useState)({
@@ -118,6 +120,7 @@ function useCLIState({
118
120
  setInput,
119
121
  setApproval,
120
122
  setApprovalQueue,
123
+ setSteerMessages,
121
124
  setQueuedMessages,
122
125
  currentSessionId: session.id,
123
126
  buffer
@@ -133,13 +136,13 @@ function useCLIState({
133
136
  approval,
134
137
  input,
135
138
  session,
136
- queuedMessages,
139
+ steerMessages,
137
140
  buffer,
138
141
  setUi,
139
142
  setInput,
140
143
  setMessages,
141
144
  setPendingMessages,
142
- setQueuedMessages,
145
+ setSteerMessages,
143
146
  agent,
144
147
  handlers: {
145
148
  approval: approvalHandler,
@@ -168,7 +171,8 @@ function useCLIState({
168
171
  setInput((prev) => ({
169
172
  ...prev,
170
173
  history: userInputHistory,
171
- historyIndex: -1
174
+ historyIndex: -1,
175
+ editingQueuedFollowUp: false
172
176
  }));
173
177
  } catch (error) {
174
178
  if (cancelled) return;
@@ -195,6 +199,8 @@ function useCLIState({
195
199
  setPendingMessages,
196
200
  dequeuedBuffer,
197
201
  setDequeuedBuffer,
202
+ steerMessages,
203
+ setSteerMessages,
198
204
  queuedMessages,
199
205
  setQueuedMessages,
200
206
  todos,
@@ -28,6 +28,8 @@ export interface CLIStateReturn {
28
28
  setPendingMessages: React.Dispatch<React.SetStateAction<Message[]>>;
29
29
  dequeuedBuffer: Message[];
30
30
  setDequeuedBuffer: React.Dispatch<React.SetStateAction<Message[]>>;
31
+ steerMessages: QueuedMessage[];
32
+ setSteerMessages: React.Dispatch<React.SetStateAction<QueuedMessage[]>>;
31
33
  queuedMessages: QueuedMessage[];
32
34
  setQueuedMessages: React.Dispatch<React.SetStateAction<QueuedMessage[]>>;
33
35
  todos: TodoItem[];
@@ -1 +1 @@
1
- {"version":3,"file":"useCLIState.d.ts","sourceRoot":"","sources":["../../src/hooks/useCLIState.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useCLIState.d.ts","sourceRoot":"","sources":["../../src/hooks/useCLIState.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ function useCLIState({
16
16
  const [messages, setMessages] = useState([]);
17
17
  const [pendingMessages, setPendingMessages] = useState([]);
18
18
  const [dequeuedBuffer, setDequeuedBuffer] = useState([]);
19
+ const [steerMessages, setSteerMessages] = useState([]);
19
20
  const [queuedMessages, setQueuedMessages] = useState([]);
20
21
  const [todos, setTodos] = useState([]);
21
22
  const [ui, setUi] = useState({
@@ -59,7 +60,8 @@ function useCLIState({
59
60
  draftBeforeHistory: "",
60
61
  images: [],
61
62
  pastedBlocks: [],
62
- pasteCounter: 0
63
+ pasteCounter: 0,
64
+ editingQueuedFollowUp: false
63
65
  });
64
66
  const initialConfig = agent.getCurrentLLMConfig();
65
67
  const [session, setSession] = useState({
@@ -95,6 +97,7 @@ function useCLIState({
95
97
  setInput,
96
98
  setApproval,
97
99
  setApprovalQueue,
100
+ setSteerMessages,
98
101
  setQueuedMessages,
99
102
  currentSessionId: session.id,
100
103
  buffer
@@ -110,13 +113,13 @@ function useCLIState({
110
113
  approval,
111
114
  input,
112
115
  session,
113
- queuedMessages,
116
+ steerMessages,
114
117
  buffer,
115
118
  setUi,
116
119
  setInput,
117
120
  setMessages,
118
121
  setPendingMessages,
119
- setQueuedMessages,
122
+ setSteerMessages,
120
123
  agent,
121
124
  handlers: {
122
125
  approval: approvalHandler,
@@ -145,7 +148,8 @@ function useCLIState({
145
148
  setInput((prev) => ({
146
149
  ...prev,
147
150
  history: userInputHistory,
148
- historyIndex: -1
151
+ historyIndex: -1,
152
+ editingQueuedFollowUp: false
149
153
  }));
150
154
  } catch (error) {
151
155
  if (cancelled) return;
@@ -172,6 +176,8 @@ function useCLIState({
172
176
  setPendingMessages,
173
177
  dequeuedBuffer,
174
178
  setDequeuedBuffer,
179
+ steerMessages,
180
+ setSteerMessages,
175
181
  queuedMessages,
176
182
  setQueuedMessages,
177
183
  todos,
@@ -72,13 +72,13 @@ function useInputOrchestrator({
72
72
  approval,
73
73
  input,
74
74
  session,
75
- queuedMessages,
75
+ steerMessages,
76
76
  buffer,
77
77
  setUi,
78
78
  setInput,
79
79
  setMessages,
80
80
  setPendingMessages,
81
- setQueuedMessages,
81
+ setSteerMessages,
82
82
  agent,
83
83
  handlers
84
84
  }) {
@@ -87,7 +87,7 @@ function useInputOrchestrator({
87
87
  const approvalRef = (0, import_react.useRef)(approval);
88
88
  const inputRef = (0, import_react.useRef)(input);
89
89
  const sessionRef = (0, import_react.useRef)(session);
90
- const queuedMessagesRef = (0, import_react.useRef)(queuedMessages);
90
+ const steerMessagesRef = (0, import_react.useRef)(steerMessages);
91
91
  const bufferRef = (0, import_react.useRef)(buffer);
92
92
  const handlersRef = (0, import_react.useRef)(handlers);
93
93
  (0, import_react.useEffect)(() => {
@@ -95,10 +95,10 @@ function useInputOrchestrator({
95
95
  approvalRef.current = approval;
96
96
  inputRef.current = input;
97
97
  sessionRef.current = session;
98
- queuedMessagesRef.current = queuedMessages;
98
+ steerMessagesRef.current = steerMessages;
99
99
  bufferRef.current = buffer;
100
100
  handlersRef.current = handlers;
101
- }, [ui, approval, input, session, queuedMessages, buffer, handlers]);
101
+ }, [ui, approval, input, session, steerMessages, buffer, handlers]);
102
102
  (0, import_react.useEffect)(() => {
103
103
  if (!ui.exitWarningShown || !ui.exitWarningTimestamp) return;
104
104
  const elapsed = Date.now() - ui.exitWarningTimestamp;
@@ -138,7 +138,7 @@ function useInputOrchestrator({
138
138
  const currentUi = uiRef.current;
139
139
  const currentApproval = approvalRef.current;
140
140
  const currentSession = sessionRef.current;
141
- const currentQueuedMessages = queuedMessagesRef.current;
141
+ const currentSteerMessages = steerMessagesRef.current;
142
142
  const currentBuffer = bufferRef.current;
143
143
  if (currentApproval !== null) {
144
144
  return false;
@@ -167,8 +167,9 @@ function useInputOrchestrator({
167
167
  if (currentSession.id) {
168
168
  void agent.cancel(currentSession.id).catch(() => {
169
169
  });
170
- void agent.clearMessageQueue(currentSession.id).catch(() => {
170
+ void agent.clearSteerQueue(currentSession.id).catch(() => {
171
171
  });
172
+ setSteerMessages([]);
172
173
  }
173
174
  setPendingMessages((pending) => {
174
175
  if (pending.length > 0) {
@@ -202,8 +203,8 @@ function useInputOrchestrator({
202
203
  timestamp: /* @__PURE__ */ new Date()
203
204
  }
204
205
  ]);
205
- if (currentQueuedMessages.length > 0) {
206
- const coalescedText = currentQueuedMessages.map(
206
+ if (currentSteerMessages.length > 0) {
207
+ const coalescedText = currentSteerMessages.map(
207
208
  (msg) => msg.content.filter(
208
209
  (part) => part.type === "text"
209
210
  ).map((part) => part.text).join("\n")
@@ -212,7 +213,7 @@ function useInputOrchestrator({
212
213
  currentBuffer.setText(coalescedText);
213
214
  setInput((prev) => ({ ...prev, value: coalescedText }));
214
215
  }
215
- setQueuedMessages([]);
216
+ setSteerMessages([]);
216
217
  }
217
218
  return true;
218
219
  }
@@ -220,7 +221,7 @@ function useInputOrchestrator({
220
221
  return false;
221
222
  }
222
223
  return false;
223
- }, [agent, setUi, setMessages, setPendingMessages, setInput, setQueuedMessages]);
224
+ }, [agent, setUi, setMessages, setPendingMessages, setSteerMessages, setInput]);
224
225
  const handleKeypress = (0, import_react.useCallback)(
225
226
  (rawKey) => {
226
227
  const currentUi = uiRef.current;
@@ -431,7 +432,7 @@ function createApprovalInputHandler({
431
432
  onCancel,
432
433
  selectedOption,
433
434
  setSelectedOption,
434
- isCommandConfirmation
435
+ isCommandApproval
435
436
  }) {
436
437
  return (_input, key) => {
437
438
  if (key.upArrow) {
@@ -440,13 +441,13 @@ function createApprovalInputHandler({
440
441
  } else if (selectedOption === "yes-session") {
441
442
  setSelectedOption("yes");
442
443
  } else {
443
- setSelectedOption(isCommandConfirmation ? "yes" : "yes-session");
444
+ setSelectedOption(isCommandApproval ? "yes" : "yes-session");
444
445
  }
445
446
  return true;
446
447
  }
447
448
  if (key.downArrow) {
448
449
  if (selectedOption === "yes") {
449
- setSelectedOption(isCommandConfirmation ? "no" : "yes-session");
450
+ setSelectedOption(isCommandApproval ? "no" : "yes-session");
450
451
  } else if (selectedOption === "yes-session") {
451
452
  setSelectedOption("no");
452
453
  } else {
@@ -62,15 +62,15 @@ export interface UseInputOrchestratorProps {
62
62
  approval: ApprovalRequest | null;
63
63
  input: InputState;
64
64
  session: SessionState;
65
- /** Queued messages (for cancel handling) */
66
- queuedMessages: QueuedMessage[];
65
+ /** Active-turn steer messages (for cancel handling) */
66
+ steerMessages: QueuedMessage[];
67
67
  /** Text buffer for clearing input on first Ctrl+C */
68
68
  buffer: TextBuffer;
69
69
  setUi: React.Dispatch<React.SetStateAction<UIState>>;
70
70
  setInput: React.Dispatch<React.SetStateAction<InputState>>;
71
71
  setMessages: React.Dispatch<React.SetStateAction<Message[]>>;
72
72
  setPendingMessages: React.Dispatch<React.SetStateAction<Message[]>>;
73
- setQueuedMessages: React.Dispatch<React.SetStateAction<QueuedMessage[]>>;
73
+ setSteerMessages: React.Dispatch<React.SetStateAction<QueuedMessage[]>>;
74
74
  agent: TuiAgentBackend;
75
75
  handlers: InputHandlers;
76
76
  }
@@ -81,7 +81,7 @@ export interface UseInputOrchestratorProps {
81
81
  * All keyboard handling is routed through this single point.
82
82
  * Mouse events are handled separately by MouseProvider/ScrollProvider.
83
83
  */
84
- export declare function useInputOrchestrator({ ui, approval, input, session, queuedMessages, buffer, setUi, setInput, setMessages, setPendingMessages, setQueuedMessages, agent, handlers, }: UseInputOrchestratorProps): void;
84
+ export declare function useInputOrchestrator({ ui, approval, input, session, steerMessages, buffer, setUi, setInput, setMessages, setPendingMessages, setSteerMessages, agent, handlers, }: UseInputOrchestratorProps): void;
85
85
  /**
86
86
  * Create an input handler for the approval prompt
87
87
  */
@@ -91,9 +91,9 @@ export interface ApprovalHandlerProps {
91
91
  onCancel: () => void;
92
92
  selectedOption: 'yes' | 'yes-session' | 'no';
93
93
  setSelectedOption: (option: 'yes' | 'yes-session' | 'no') => void;
94
- isCommandConfirmation: boolean;
94
+ isCommandApproval: boolean;
95
95
  }
96
- export declare function createApprovalInputHandler({ onApprove, onDeny, onCancel, selectedOption, setSelectedOption, isCommandConfirmation, }: ApprovalHandlerProps): InputHandler;
96
+ export declare function createApprovalInputHandler({ onApprove, onDeny, onCancel, selectedOption, setSelectedOption, isCommandApproval, }: ApprovalHandlerProps): InputHandler;
97
97
  /**
98
98
  * Create an input handler for selector components (BaseSelector pattern)
99
99
  */
@@ -1 +1 @@
1
- {"version":3,"file":"useInputOrchestrator.d.ts","sourceRoot":"","sources":["../../src/hooks/useInputOrchestrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useInputOrchestrator.d.ts","sourceRoot":"","sources":["../../src/hooks/useInputOrchestrator.ts"],"names":[],"mappings":"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"}
@@ -45,13 +45,13 @@ function useInputOrchestrator({
45
45
  approval,
46
46
  input,
47
47
  session,
48
- queuedMessages,
48
+ steerMessages,
49
49
  buffer,
50
50
  setUi,
51
51
  setInput,
52
52
  setMessages,
53
53
  setPendingMessages,
54
- setQueuedMessages,
54
+ setSteerMessages,
55
55
  agent,
56
56
  handlers
57
57
  }) {
@@ -60,7 +60,7 @@ function useInputOrchestrator({
60
60
  const approvalRef = useRef(approval);
61
61
  const inputRef = useRef(input);
62
62
  const sessionRef = useRef(session);
63
- const queuedMessagesRef = useRef(queuedMessages);
63
+ const steerMessagesRef = useRef(steerMessages);
64
64
  const bufferRef = useRef(buffer);
65
65
  const handlersRef = useRef(handlers);
66
66
  useEffect(() => {
@@ -68,10 +68,10 @@ function useInputOrchestrator({
68
68
  approvalRef.current = approval;
69
69
  inputRef.current = input;
70
70
  sessionRef.current = session;
71
- queuedMessagesRef.current = queuedMessages;
71
+ steerMessagesRef.current = steerMessages;
72
72
  bufferRef.current = buffer;
73
73
  handlersRef.current = handlers;
74
- }, [ui, approval, input, session, queuedMessages, buffer, handlers]);
74
+ }, [ui, approval, input, session, steerMessages, buffer, handlers]);
75
75
  useEffect(() => {
76
76
  if (!ui.exitWarningShown || !ui.exitWarningTimestamp) return;
77
77
  const elapsed = Date.now() - ui.exitWarningTimestamp;
@@ -111,7 +111,7 @@ function useInputOrchestrator({
111
111
  const currentUi = uiRef.current;
112
112
  const currentApproval = approvalRef.current;
113
113
  const currentSession = sessionRef.current;
114
- const currentQueuedMessages = queuedMessagesRef.current;
114
+ const currentSteerMessages = steerMessagesRef.current;
115
115
  const currentBuffer = bufferRef.current;
116
116
  if (currentApproval !== null) {
117
117
  return false;
@@ -140,8 +140,9 @@ function useInputOrchestrator({
140
140
  if (currentSession.id) {
141
141
  void agent.cancel(currentSession.id).catch(() => {
142
142
  });
143
- void agent.clearMessageQueue(currentSession.id).catch(() => {
143
+ void agent.clearSteerQueue(currentSession.id).catch(() => {
144
144
  });
145
+ setSteerMessages([]);
145
146
  }
146
147
  setPendingMessages((pending) => {
147
148
  if (pending.length > 0) {
@@ -175,8 +176,8 @@ function useInputOrchestrator({
175
176
  timestamp: /* @__PURE__ */ new Date()
176
177
  }
177
178
  ]);
178
- if (currentQueuedMessages.length > 0) {
179
- const coalescedText = currentQueuedMessages.map(
179
+ if (currentSteerMessages.length > 0) {
180
+ const coalescedText = currentSteerMessages.map(
180
181
  (msg) => msg.content.filter(
181
182
  (part) => part.type === "text"
182
183
  ).map((part) => part.text).join("\n")
@@ -185,7 +186,7 @@ function useInputOrchestrator({
185
186
  currentBuffer.setText(coalescedText);
186
187
  setInput((prev) => ({ ...prev, value: coalescedText }));
187
188
  }
188
- setQueuedMessages([]);
189
+ setSteerMessages([]);
189
190
  }
190
191
  return true;
191
192
  }
@@ -193,7 +194,7 @@ function useInputOrchestrator({
193
194
  return false;
194
195
  }
195
196
  return false;
196
- }, [agent, setUi, setMessages, setPendingMessages, setInput, setQueuedMessages]);
197
+ }, [agent, setUi, setMessages, setPendingMessages, setSteerMessages, setInput]);
197
198
  const handleKeypress = useCallback(
198
199
  (rawKey) => {
199
200
  const currentUi = uiRef.current;
@@ -404,7 +405,7 @@ function createApprovalInputHandler({
404
405
  onCancel,
405
406
  selectedOption,
406
407
  setSelectedOption,
407
- isCommandConfirmation
408
+ isCommandApproval
408
409
  }) {
409
410
  return (_input, key) => {
410
411
  if (key.upArrow) {
@@ -413,13 +414,13 @@ function createApprovalInputHandler({
413
414
  } else if (selectedOption === "yes-session") {
414
415
  setSelectedOption("yes");
415
416
  } else {
416
- setSelectedOption(isCommandConfirmation ? "yes" : "yes-session");
417
+ setSelectedOption(isCommandApproval ? "yes" : "yes-session");
417
418
  }
418
419
  return true;
419
420
  }
420
421
  if (key.downArrow) {
421
422
  if (selectedOption === "yes") {
422
- setSelectedOption(isCommandConfirmation ? "no" : "yes-session");
423
+ setSelectedOption(isCommandApproval ? "no" : "yes-session");
423
424
  } else if (selectedOption === "yes-session") {
424
425
  setSelectedOption("no");
425
426
  } else {