@brimveyn/aimux-config 0.4.2 → 0.4.3
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.
- package/package.json +1 -1
- package/src/actions.ts +34 -45
- package/src/defaults.ts +18 -101
- package/src/types.ts +20 -18
package/package.json
CHANGED
package/src/actions.ts
CHANGED
|
@@ -15,22 +15,26 @@ function r(
|
|
|
15
15
|
export const nextTab: KeyResult = r([{ delta: 1, type: 'move-active-tab' }])
|
|
16
16
|
export const prevTab: KeyResult = r([{ delta: -1, type: 'move-active-tab' }])
|
|
17
17
|
|
|
18
|
-
export const newTab: KeyResult = r(
|
|
18
|
+
export const newTab: KeyResult = r(
|
|
19
|
+
[{ type: 'open-new-tab-modal' }],
|
|
20
|
+
[],
|
|
21
|
+
'modal.new-tab.command-edit'
|
|
22
|
+
)
|
|
19
23
|
export const renameTab: KeyResult = r([{ type: 'open-rename-tab-modal' }], [], 'modal.rename-tab')
|
|
20
24
|
export const sessionPicker: KeyResult = r(
|
|
21
25
|
[{ type: 'open-session-picker' }],
|
|
22
26
|
[],
|
|
23
|
-
'modal.session-picker'
|
|
27
|
+
'modal.session-picker.filtering'
|
|
24
28
|
)
|
|
25
29
|
export const snippetPicker: KeyResult = r(
|
|
26
30
|
[{ type: 'open-snippet-picker' }],
|
|
27
31
|
[],
|
|
28
|
-
'modal.snippet-picker'
|
|
32
|
+
'modal.snippet-picker.filtering'
|
|
29
33
|
)
|
|
30
34
|
export const themePicker: KeyResult = r(
|
|
31
35
|
[{ type: 'open-theme-picker' }],
|
|
32
36
|
[{ action: 'open', type: 'apply-theme' }],
|
|
33
|
-
'modal.theme-picker'
|
|
37
|
+
'modal.theme-picker.filtering'
|
|
34
38
|
)
|
|
35
39
|
export function helpModal(scope?: ModeId): KeyResult {
|
|
36
40
|
return r([{ scope, type: 'open-help-modal' }])
|
|
@@ -160,25 +164,13 @@ export function moveModalSelectionWithPreview(
|
|
|
160
164
|
|
|
161
165
|
export const launchSelectedAssistant: KeyResult = r([], [{ type: 'launch-selected-assistant' }])
|
|
162
166
|
|
|
163
|
-
export const beginCommandEdit: KeyResult = r(
|
|
164
|
-
[{ type: 'begin-command-edit' }],
|
|
165
|
-
[],
|
|
166
|
-
'modal.new-tab.command-edit'
|
|
167
|
-
)
|
|
168
|
-
|
|
169
167
|
export const cancelCommandEdit = (returnTo: KeyResult['transition']): KeyResult =>
|
|
170
168
|
r([{ type: 'cancel-command-edit' }], [], returnTo)
|
|
171
169
|
|
|
172
|
-
export const commitCommandEdit: KeyResult = r(
|
|
173
|
-
[{ type: 'commit-command-edit' }],
|
|
174
|
-
[{ type: 'save-custom-command' }],
|
|
175
|
-
'modal.new-tab'
|
|
176
|
-
)
|
|
177
|
-
|
|
178
170
|
export const confirmSelectedSession: KeyResult = r([], [{ type: 'confirm-selected-session' }])
|
|
179
171
|
|
|
180
172
|
export const openCreateSessionModal: KeyResult = r(
|
|
181
|
-
[{ type: 'open-create-session-modal' }],
|
|
173
|
+
[{ returnToSessionPicker: true, type: 'open-create-session-modal' }],
|
|
182
174
|
[],
|
|
183
175
|
'modal.create-session'
|
|
184
176
|
)
|
|
@@ -190,12 +182,6 @@ export const openRenameSelectedSession: KeyResult = r(
|
|
|
190
182
|
|
|
191
183
|
export const deleteSelectedSession: KeyResult = r([], [{ type: 'delete-selected-session' }])
|
|
192
184
|
|
|
193
|
-
export const beginSessionFilter: KeyResult = r(
|
|
194
|
-
[{ type: 'begin-session-filter' }],
|
|
195
|
-
[],
|
|
196
|
-
'modal.session-picker.filtering'
|
|
197
|
-
)
|
|
198
|
-
|
|
199
185
|
export const openSnippetEditor: KeyResult = r(
|
|
200
186
|
[{ type: 'open-snippet-editor' }],
|
|
201
187
|
[],
|
|
@@ -217,24 +203,6 @@ export const pasteSnippetToGroup: KeyResult = r(
|
|
|
217
203
|
'navigation'
|
|
218
204
|
)
|
|
219
205
|
|
|
220
|
-
export const beginSnippetFilter: KeyResult = r(
|
|
221
|
-
[{ type: 'begin-snippet-filter' }],
|
|
222
|
-
[],
|
|
223
|
-
'modal.snippet-picker.filtering'
|
|
224
|
-
)
|
|
225
|
-
|
|
226
|
-
export const beginHelpFilter: KeyResult = r(
|
|
227
|
-
[{ type: 'begin-help-filter' }],
|
|
228
|
-
[],
|
|
229
|
-
'modal.help.filtering'
|
|
230
|
-
)
|
|
231
|
-
|
|
232
|
-
export const beginThemeFilter: KeyResult = r(
|
|
233
|
-
[{ type: 'begin-theme-filter' }],
|
|
234
|
-
[],
|
|
235
|
-
'modal.theme-picker.filtering'
|
|
236
|
-
)
|
|
237
|
-
|
|
238
206
|
export const confirmSplit: KeyResult = r([], [{ type: 'confirm-split' }])
|
|
239
207
|
|
|
240
208
|
export const restoreTheme: KeyResult = r(
|
|
@@ -256,19 +224,28 @@ export function previewTheme(delta: 1 | -1): KeyResult {
|
|
|
256
224
|
)
|
|
257
225
|
}
|
|
258
226
|
|
|
227
|
+
export const toggleTransparent: KeyResult = r([], [{ type: 'toggle-transparent' }])
|
|
228
|
+
|
|
259
229
|
export const switchField: KeyResult = r([{ type: 'switch-create-session-field' }])
|
|
260
230
|
export const selectDirectory: KeyResult = r([{ type: 'select-directory' }])
|
|
261
231
|
|
|
262
232
|
export const backToSessionPicker: KeyResult = r(
|
|
263
233
|
[{ type: 'open-session-picker' }],
|
|
264
234
|
[],
|
|
265
|
-
'modal.session-picker'
|
|
235
|
+
'modal.session-picker.filtering'
|
|
266
236
|
)
|
|
267
237
|
|
|
238
|
+
export const createSessionEscape: ActionFn = (ctx: ModeContext) => {
|
|
239
|
+
if (ctx.state.modal.type === 'create-session' && !ctx.state.modal.returnToSessionPicker) {
|
|
240
|
+
return r([{ type: 'close-modal' }], [], 'navigation')
|
|
241
|
+
}
|
|
242
|
+
return r([{ type: 'open-session-picker' }], [], 'modal.session-picker.filtering')
|
|
243
|
+
}
|
|
244
|
+
|
|
268
245
|
export const backToSnippetPicker: KeyResult = r(
|
|
269
246
|
[{ type: 'open-snippet-picker' }],
|
|
270
247
|
[],
|
|
271
|
-
'modal.snippet-picker'
|
|
248
|
+
'modal.snippet-picker.filtering'
|
|
272
249
|
)
|
|
273
250
|
|
|
274
251
|
export const saveSnippetEditor: KeyResult = r(
|
|
@@ -277,6 +254,18 @@ export const saveSnippetEditor: KeyResult = r(
|
|
|
277
254
|
'navigation'
|
|
278
255
|
)
|
|
279
256
|
|
|
257
|
+
export const saveCustomCommand: KeyResult = r(
|
|
258
|
+
[],
|
|
259
|
+
[{ type: 'save-custom-command' }],
|
|
260
|
+
'modal.new-tab.command-edit'
|
|
261
|
+
)
|
|
262
|
+
|
|
263
|
+
export const cancelEditCustomCommand: KeyResult = r(
|
|
264
|
+
[{ type: 'cancel-command-edit' }],
|
|
265
|
+
[],
|
|
266
|
+
'modal.new-tab.command-edit'
|
|
267
|
+
)
|
|
268
|
+
|
|
280
269
|
// ---------------------------------------------------------------------------
|
|
281
270
|
// Update-available modal
|
|
282
271
|
// ---------------------------------------------------------------------------
|
|
@@ -329,10 +318,10 @@ export const confirmSessionRename: ActionFn = (ctx: ModeContext) => {
|
|
|
329
318
|
return r(
|
|
330
319
|
[{ type: 'open-session-picker' }],
|
|
331
320
|
[{ name: trimmed, sessionId, type: 'rename-session' }],
|
|
332
|
-
'modal.session-picker'
|
|
321
|
+
'modal.session-picker.filtering'
|
|
333
322
|
)
|
|
334
323
|
}
|
|
335
|
-
return r([{ type: 'open-session-picker' }], [], 'modal.session-picker')
|
|
324
|
+
return r([{ type: 'open-session-picker' }], [], 'modal.session-picker.filtering')
|
|
336
325
|
}
|
|
337
326
|
|
|
338
327
|
// Rename tab modal
|
package/src/defaults.ts
CHANGED
|
@@ -111,26 +111,11 @@ export function getDefaultKeymapConfig(): ResolvedKeymapConfig {
|
|
|
111
111
|
)
|
|
112
112
|
|
|
113
113
|
// -----------------------------------------------------------------------
|
|
114
|
-
// Modal: help
|
|
115
|
-
// -----------------------------------------------------------------------
|
|
116
|
-
.mode('modal.help', (m) =>
|
|
117
|
-
m
|
|
118
|
-
.map('<Esc>', actions.closeOverlayModal, 'Close')
|
|
119
|
-
.map('j', actions.moveModalSelection(1), 'Next')
|
|
120
|
-
.map('k', actions.moveModalSelection(-1), 'Prev')
|
|
121
|
-
.map('<Down>', actions.moveModalSelection(1))
|
|
122
|
-
.map('<Up>', actions.moveModalSelection(-1))
|
|
123
|
-
.map('<C-n>', actions.moveModalSelection(1))
|
|
124
|
-
.map('<C-p>', actions.moveModalSelection(-1))
|
|
125
|
-
.map('/', actions.beginHelpFilter, 'Filter')
|
|
126
|
-
)
|
|
127
|
-
|
|
128
|
-
// -----------------------------------------------------------------------
|
|
129
|
-
// Modal: help filtering
|
|
114
|
+
// Modal: help (always in filter mode via Picker)
|
|
130
115
|
// -----------------------------------------------------------------------
|
|
131
116
|
.mode('modal.help.filtering', (m) =>
|
|
132
117
|
m
|
|
133
|
-
.map('<Esc>', actions.
|
|
118
|
+
.map('<Esc>', actions.closeOverlayModal, 'Close')
|
|
134
119
|
.map('<C-n>', actions.moveModalSelection(1), 'Next')
|
|
135
120
|
.map('<C-p>', actions.moveModalSelection(-1), 'Prev')
|
|
136
121
|
.map('<Down>', actions.moveModalSelection(1))
|
|
@@ -139,32 +124,17 @@ export function getDefaultKeymapConfig(): ResolvedKeymapConfig {
|
|
|
139
124
|
)
|
|
140
125
|
|
|
141
126
|
// -----------------------------------------------------------------------
|
|
142
|
-
// Modal: theme-picker
|
|
143
|
-
// -----------------------------------------------------------------------
|
|
144
|
-
.mode('modal.theme-picker', (m) =>
|
|
145
|
-
m
|
|
146
|
-
.map('<Esc>', actions.restoreTheme, 'Cancel')
|
|
147
|
-
.map('j', actions.previewTheme(1), 'Next')
|
|
148
|
-
.map('k', actions.previewTheme(-1), 'Prev')
|
|
149
|
-
.map('<Down>', actions.previewTheme(1))
|
|
150
|
-
.map('<Up>', actions.previewTheme(-1))
|
|
151
|
-
.map('<C-n>', actions.previewTheme(1))
|
|
152
|
-
.map('<C-p>', actions.previewTheme(-1))
|
|
153
|
-
.map('<CR>', actions.confirmTheme, 'Confirm')
|
|
154
|
-
.map('/', actions.beginThemeFilter, 'Filter')
|
|
155
|
-
)
|
|
156
|
-
|
|
157
|
-
// -----------------------------------------------------------------------
|
|
158
|
-
// Modal: theme-picker filtering
|
|
127
|
+
// Modal: theme-picker (always in filter mode via Picker)
|
|
159
128
|
// -----------------------------------------------------------------------
|
|
160
129
|
.mode('modal.theme-picker.filtering', (m) =>
|
|
161
130
|
m
|
|
162
|
-
.map('<Esc>', actions.
|
|
131
|
+
.map('<Esc>', actions.restoreTheme, 'Cancel')
|
|
163
132
|
.map('<C-n>', actions.previewTheme(1), 'Next')
|
|
164
133
|
.map('<C-p>', actions.previewTheme(-1), 'Prev')
|
|
165
134
|
.map('<Down>', actions.previewTheme(1))
|
|
166
135
|
.map('<Up>', actions.previewTheme(-1))
|
|
167
136
|
.map('<CR>', actions.confirmTheme, 'Confirm')
|
|
137
|
+
.map('<C-t>', actions.toggleTransparent, 'Toggle transparent')
|
|
168
138
|
.passthrough()
|
|
169
139
|
)
|
|
170
140
|
|
|
@@ -176,8 +146,6 @@ export function getDefaultKeymapConfig(): ResolvedKeymapConfig {
|
|
|
176
146
|
.map('<Esc>', actions.closeModal, 'Cancel')
|
|
177
147
|
.map('l', actions.moveModalSelection(1), 'Next')
|
|
178
148
|
.map('h', actions.moveModalSelection(-1), 'Prev')
|
|
179
|
-
.map('j', actions.moveModalSelection(1))
|
|
180
|
-
.map('k', actions.moveModalSelection(-1))
|
|
181
149
|
.map('<Right>', actions.moveModalSelection(1))
|
|
182
150
|
.map('<Left>', actions.moveModalSelection(-1))
|
|
183
151
|
.map('<Down>', actions.moveModalSelection(1))
|
|
@@ -198,28 +166,12 @@ export function getDefaultKeymapConfig(): ResolvedKeymapConfig {
|
|
|
198
166
|
)
|
|
199
167
|
|
|
200
168
|
// -----------------------------------------------------------------------
|
|
201
|
-
// Modal: new-tab
|
|
169
|
+
// Modal: new-tab (always in filter mode via Picker)
|
|
202
170
|
// -----------------------------------------------------------------------
|
|
203
|
-
.mode('modal.new-tab', (m) =>
|
|
171
|
+
.mode('modal.new-tab.command-edit', (m) =>
|
|
204
172
|
m
|
|
205
173
|
.map('<Esc>', actions.closeModal, 'Cancel')
|
|
206
|
-
.map('j', actions.moveModalSelection(1), 'Next')
|
|
207
|
-
.map('k', actions.moveModalSelection(-1), 'Prev')
|
|
208
|
-
.map('<Down>', actions.moveModalSelection(1))
|
|
209
|
-
.map('<Up>', actions.moveModalSelection(-1))
|
|
210
|
-
.map('<C-n>', actions.moveModalSelection(1))
|
|
211
|
-
.map('<C-p>', actions.moveModalSelection(-1))
|
|
212
174
|
.map('<CR>', actions.launchSelectedAssistant, 'Launch')
|
|
213
|
-
.map('e', actions.beginCommandEdit, 'Edit command')
|
|
214
|
-
)
|
|
215
|
-
|
|
216
|
-
// -----------------------------------------------------------------------
|
|
217
|
-
// Modal: new-tab command-edit
|
|
218
|
-
// -----------------------------------------------------------------------
|
|
219
|
-
.mode('modal.new-tab.command-edit', (m) =>
|
|
220
|
-
m
|
|
221
|
-
.map('<Esc>', actions.cancelCommandEdit('modal.new-tab'), 'Cancel')
|
|
222
|
-
.map('<CR>', actions.commitCommandEdit, 'Save')
|
|
223
175
|
.map('<C-n>', actions.moveModalSelection(1), 'Next')
|
|
224
176
|
.map('<C-p>', actions.moveModalSelection(-1), 'Prev')
|
|
225
177
|
.map('<Down>', actions.moveModalSelection(1))
|
|
@@ -227,31 +179,19 @@ export function getDefaultKeymapConfig(): ResolvedKeymapConfig {
|
|
|
227
179
|
.passthrough()
|
|
228
180
|
)
|
|
229
181
|
|
|
230
|
-
|
|
231
|
-
// Modal: session-picker
|
|
232
|
-
// -----------------------------------------------------------------------
|
|
233
|
-
.mode('modal.session-picker', (m) =>
|
|
182
|
+
.mode('modal.new-tab.editing-command', (m) =>
|
|
234
183
|
m
|
|
235
|
-
.map('<Esc>', actions.
|
|
236
|
-
.map('
|
|
237
|
-
.
|
|
238
|
-
.map('<Down>', actions.moveModalSelection(1))
|
|
239
|
-
.map('<Up>', actions.moveModalSelection(-1))
|
|
240
|
-
.map('<C-n>', actions.moveModalSelection(1))
|
|
241
|
-
.map('<C-p>', actions.moveModalSelection(-1))
|
|
242
|
-
.map('<CR>', actions.confirmSelectedSession, 'Open')
|
|
243
|
-
.map('n', actions.openCreateSessionModal, 'New')
|
|
244
|
-
.map('r', actions.openRenameSelectedSession, 'Rename')
|
|
245
|
-
.map('d', actions.deleteSelectedSession, 'Delete')
|
|
246
|
-
.map('/', actions.beginSessionFilter, 'Filter')
|
|
184
|
+
.map('<Esc>', actions.cancelEditCustomCommand, 'Cancel')
|
|
185
|
+
.map('<CR>', actions.saveCustomCommand, 'Save')
|
|
186
|
+
.passthrough()
|
|
247
187
|
)
|
|
248
188
|
|
|
249
189
|
// -----------------------------------------------------------------------
|
|
250
|
-
// Modal: session-picker
|
|
190
|
+
// Modal: session-picker (always in filter mode via Picker)
|
|
251
191
|
// -----------------------------------------------------------------------
|
|
252
192
|
.mode('modal.session-picker.filtering', (m) =>
|
|
253
193
|
m
|
|
254
|
-
.map('<Esc>', actions.
|
|
194
|
+
.map('<Esc>', actions.sessionPickerEscape, 'Cancel')
|
|
255
195
|
.map('<CR>', actions.confirmSelectedSession, 'Open')
|
|
256
196
|
.map('<C-n>', actions.moveModalSelection(1), 'Next')
|
|
257
197
|
.map('<C-p>', actions.moveModalSelection(-1), 'Prev')
|
|
@@ -275,7 +215,7 @@ export function getDefaultKeymapConfig(): ResolvedKeymapConfig {
|
|
|
275
215
|
// -----------------------------------------------------------------------
|
|
276
216
|
.mode('modal.create-session', (m) =>
|
|
277
217
|
m
|
|
278
|
-
.map('<Esc>', actions.
|
|
218
|
+
.map('<Esc>', actions.createSessionEscape, 'Cancel')
|
|
279
219
|
.map('<Tab>', actions.switchField, 'Next field')
|
|
280
220
|
.map('<CR>', actions.confirmCreateSession, 'Confirm')
|
|
281
221
|
.map('<C-n>', actions.moveModalSelection(1), 'Next')
|
|
@@ -286,32 +226,11 @@ export function getDefaultKeymapConfig(): ResolvedKeymapConfig {
|
|
|
286
226
|
)
|
|
287
227
|
|
|
288
228
|
// -----------------------------------------------------------------------
|
|
289
|
-
// Modal: snippet-picker
|
|
290
|
-
// -----------------------------------------------------------------------
|
|
291
|
-
.mode('modal.snippet-picker', (m) =>
|
|
292
|
-
m
|
|
293
|
-
.map('<Esc>', actions.closeModal, 'Cancel')
|
|
294
|
-
.map('j', actions.moveModalSelection(1), 'Next')
|
|
295
|
-
.map('k', actions.moveModalSelection(-1), 'Prev')
|
|
296
|
-
.map('<Down>', actions.moveModalSelection(1))
|
|
297
|
-
.map('<Up>', actions.moveModalSelection(-1))
|
|
298
|
-
.map('<C-n>', actions.moveModalSelection(1))
|
|
299
|
-
.map('<C-p>', actions.moveModalSelection(-1))
|
|
300
|
-
.map('<CR>', actions.pasteSelectedSnippet, 'Send')
|
|
301
|
-
.map('a', actions.pasteSnippetToGroup, 'Send to group')
|
|
302
|
-
.map('n', actions.openSnippetEditor, 'New')
|
|
303
|
-
.map('r', actions.editSelectedSnippet, 'Edit')
|
|
304
|
-
.map('e', actions.editSelectedSnippet)
|
|
305
|
-
.map('d', actions.deleteSelectedSnippet, 'Delete')
|
|
306
|
-
.map('/', actions.beginSnippetFilter, 'Filter')
|
|
307
|
-
)
|
|
308
|
-
|
|
309
|
-
// -----------------------------------------------------------------------
|
|
310
|
-
// Modal: snippet-picker filtering
|
|
229
|
+
// Modal: snippet-picker (always in filter mode via Picker)
|
|
311
230
|
// -----------------------------------------------------------------------
|
|
312
231
|
.mode('modal.snippet-picker.filtering', (m) =>
|
|
313
232
|
m
|
|
314
|
-
.map('<Esc>', actions.
|
|
233
|
+
.map('<Esc>', actions.closeModal, 'Cancel')
|
|
315
234
|
.map('<CR>', actions.snippetFilterPaste, 'Send')
|
|
316
235
|
.map('<C-a>', actions.snippetFilterPasteToGroup, 'Send to group')
|
|
317
236
|
.map('<C-n>', actions.moveModalSelection(1), 'Next')
|
|
@@ -342,10 +261,8 @@ export function getDefaultKeymapConfig(): ResolvedKeymapConfig {
|
|
|
342
261
|
.mode('modal.split-picker', (m) =>
|
|
343
262
|
m
|
|
344
263
|
.map('<Esc>', actions.closeModal, 'Cancel')
|
|
345
|
-
.map('
|
|
346
|
-
.map('
|
|
347
|
-
.map('<Down>', actions.moveModalSelection(1))
|
|
348
|
-
.map('<Up>', actions.moveModalSelection(-1))
|
|
264
|
+
.map('<Down>', actions.moveModalSelection(1), 'Next')
|
|
265
|
+
.map('<Up>', actions.moveModalSelection(-1), 'Prev')
|
|
349
266
|
.map('<C-n>', actions.moveModalSelection(1))
|
|
350
267
|
.map('<C-p>', actions.moveModalSelection(-1))
|
|
351
268
|
.map('<CR>', actions.confirmSplit, 'Confirm')
|
package/src/types.ts
CHANGED
|
@@ -12,19 +12,15 @@ export type ModeId =
|
|
|
12
12
|
| 'navigation'
|
|
13
13
|
| 'terminal-input'
|
|
14
14
|
| 'git-mode'
|
|
15
|
-
| 'modal.new-tab'
|
|
16
15
|
| 'modal.new-tab.command-edit'
|
|
17
|
-
| 'modal.
|
|
16
|
+
| 'modal.new-tab.editing-command'
|
|
18
17
|
| 'modal.session-picker.filtering'
|
|
19
18
|
| 'modal.session-name'
|
|
20
19
|
| 'modal.create-session'
|
|
21
20
|
| 'modal.rename-tab'
|
|
22
|
-
| 'modal.snippet-picker'
|
|
23
21
|
| 'modal.snippet-picker.filtering'
|
|
24
22
|
| 'modal.snippet-editor'
|
|
25
|
-
| 'modal.theme-picker'
|
|
26
23
|
| 'modal.theme-picker.filtering'
|
|
27
|
-
| 'modal.help'
|
|
28
24
|
| 'modal.help.filtering'
|
|
29
25
|
| 'modal.split-picker'
|
|
30
26
|
| 'modal.git-commit'
|
|
@@ -34,8 +30,18 @@ export type ModeId =
|
|
|
34
30
|
|
|
35
31
|
export type BuiltinAssistantId = 'claude' | 'codex' | 'opencode' | 'terminal'
|
|
36
32
|
export type AssistantId = BuiltinAssistantId | (string & {})
|
|
37
|
-
export type TabStatus = 'starting' | 'running' | 'disconnected' | '
|
|
38
|
-
|
|
33
|
+
export type TabStatus = 'starting' | 'running' | 'disconnected' | 'error'
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Status values that may appear in legacy on-disk workspace snapshots but are
|
|
37
|
+
* not produced by the running app anymore.
|
|
38
|
+
*/
|
|
39
|
+
export type LegacyPersistedTabStatus = TabStatus | 'exited'
|
|
40
|
+
export type TabActivity = 'working' | 'waiting-input' | 'idle'
|
|
41
|
+
export interface SessionStatus {
|
|
42
|
+
working: boolean
|
|
43
|
+
waiting: boolean
|
|
44
|
+
}
|
|
39
45
|
export type FocusMode = 'navigation' | 'terminal-input' | 'modal' | 'command-edit' | 'git'
|
|
40
46
|
export type SplitDirection = 'horizontal' | 'vertical'
|
|
41
47
|
|
|
@@ -89,7 +95,7 @@ export interface PersistedTabSnapshot {
|
|
|
89
95
|
assistant: AssistantId
|
|
90
96
|
title: string
|
|
91
97
|
command: string
|
|
92
|
-
status: Exclude<
|
|
98
|
+
status: Exclude<LegacyPersistedTabStatus, 'disconnected'>
|
|
93
99
|
buffer: string
|
|
94
100
|
viewport?: TerminalSnapshot
|
|
95
101
|
terminalModes: TerminalModeState
|
|
@@ -244,6 +250,7 @@ export interface ModalClosed extends ModalBase {
|
|
|
244
250
|
|
|
245
251
|
export interface ModalNewTab extends ModalBase {
|
|
246
252
|
type: 'new-tab'
|
|
253
|
+
editingCommand: AssistantId | null
|
|
247
254
|
}
|
|
248
255
|
export interface ModalSessionPicker extends ModalBase {
|
|
249
256
|
type: 'session-picker'
|
|
@@ -276,6 +283,7 @@ export interface ModalCreateSession extends ModalBase {
|
|
|
276
283
|
pendingProjectPath: string | null
|
|
277
284
|
activeField: 'directory' | 'name'
|
|
278
285
|
nameBuffer: string
|
|
286
|
+
returnToSessionPicker: boolean
|
|
279
287
|
}
|
|
280
288
|
export interface ModalGitCommit extends ModalBase {
|
|
281
289
|
type: 'git-commit'
|
|
@@ -328,7 +336,7 @@ export interface AppState {
|
|
|
328
336
|
tabGroupMap: Record<string, string>
|
|
329
337
|
sessions: SessionRecord[]
|
|
330
338
|
currentSessionId: string | null
|
|
331
|
-
|
|
339
|
+
sessionStatuses: Record<string, SessionStatus>
|
|
332
340
|
sessionBar: SessionBarState
|
|
333
341
|
snippets: SnippetRecord[]
|
|
334
342
|
focusMode: FocusMode
|
|
@@ -352,21 +360,15 @@ export type ModalAction =
|
|
|
352
360
|
| { type: 'open-session-name-modal'; sessionTargetId?: string; initialName?: string }
|
|
353
361
|
| { type: 'close-modal' }
|
|
354
362
|
| { type: 'move-modal-selection'; delta: number }
|
|
355
|
-
| { type: 'begin-command-edit' }
|
|
356
363
|
| { type: 'update-command-edit'; char: string }
|
|
357
|
-
| { type: 'commit-command-edit' }
|
|
358
364
|
| { type: 'cancel-command-edit' }
|
|
359
|
-
| { type: 'open-create-session-modal' }
|
|
365
|
+
| { type: 'open-create-session-modal'; returnToSessionPicker: boolean }
|
|
360
366
|
| { type: 'set-directory-results'; results: DirectoryResult[] }
|
|
361
367
|
| { type: 'switch-create-session-field' }
|
|
362
368
|
| { type: 'select-directory' }
|
|
363
|
-
| { type: 'begin-session-filter' }
|
|
364
369
|
| { type: 'open-rename-tab-modal' }
|
|
365
370
|
| { type: 'open-snippet-picker' }
|
|
366
371
|
| { type: 'open-snippet-editor'; snippetId?: string }
|
|
367
|
-
| { type: 'begin-snippet-filter' }
|
|
368
|
-
| { type: 'begin-help-filter' }
|
|
369
|
-
| { type: 'begin-theme-filter' }
|
|
370
372
|
| { type: 'set-help-entry-count'; count: number }
|
|
371
373
|
| { type: 'set-theme-entry-count'; count: number }
|
|
372
374
|
| { type: 'open-theme-picker' }
|
|
@@ -379,7 +381,7 @@ export type SessionAction =
|
|
|
379
381
|
| { type: 'rename-session-record'; sessionId: string; name: string }
|
|
380
382
|
| { type: 'delete-session-record'; sessionId: string }
|
|
381
383
|
| { type: 'reorder-sessions'; orderedIds: string[] }
|
|
382
|
-
| { type: 'set-session-
|
|
384
|
+
| { type: 'set-session-status'; sessionId: string; status: SessionStatus }
|
|
383
385
|
|
|
384
386
|
export type TabAction =
|
|
385
387
|
| { type: 'add-tab'; tab: TabSession }
|
|
@@ -406,7 +408,6 @@ export type TabAction =
|
|
|
406
408
|
terminalModes: TerminalModeState
|
|
407
409
|
}
|
|
408
410
|
| { type: 'set-tab-activity'; tabId: string; activity?: TabActivity }
|
|
409
|
-
| { type: 'set-tab-status'; tabId: string; status: TabStatus; exitCode?: number }
|
|
410
411
|
| { type: 'set-tab-error'; tabId: string; message: string }
|
|
411
412
|
|
|
412
413
|
export type LayoutAction =
|
|
@@ -545,6 +546,7 @@ export type SideEffect =
|
|
|
545
546
|
| { type: 'git-push' }
|
|
546
547
|
| { type: 'confirm-update-selection' }
|
|
547
548
|
| { type: 'switch-session-by-index'; index: number }
|
|
549
|
+
| { type: 'toggle-transparent' }
|
|
548
550
|
|
|
549
551
|
// ─── Key input / KeyResult / ModeContext ──────────────────────────────────────
|
|
550
552
|
|