@askdkc/dsh-cli 0.11.3 → 0.11.5
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/README.md +77 -81
- package/bin/dsh-tui.js +88 -88
- package/cordis.patch.yml +9 -9
- package/cordis.yml +8 -8
- package/lib/types/adapter/standard/descriptor.js +2 -2
- package/lib/types/components/LogoV2.d.ts +1 -1
- package/lib/types/components/LogoV2.js +2 -2
- package/lib/types/components/ModelPicker.d.ts +6 -0
- package/lib/types/components/ModelPicker.d.ts.map +1 -1
- package/lib/types/components/ModelPicker.js +9 -6
- package/lib/types/dsh-adapter/cli-registration.d.ts +17 -0
- package/lib/types/dsh-adapter/cli-registration.d.ts.map +1 -0
- package/lib/types/dsh-adapter/cli-registration.js +157 -0
- package/lib/types/dsh-adapter/invariant.js +1 -1
- package/lib/types/dsh-adapter/migrate/cli.js +9 -9
- package/lib/types/dsh-adapter/packaged-presets.d.ts.map +1 -1
- package/lib/types/dsh-adapter/packaged-presets.js +3 -2
- package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin.js +16 -0
- package/lib/types/i18n.d.ts +20 -4
- package/lib/types/i18n.d.ts.map +1 -1
- package/lib/types/i18n.js +5 -1
- package/lib/types/modelGroups.d.ts +2 -0
- package/lib/types/modelGroups.d.ts.map +1 -1
- package/lib/types/modelGroups.js +11 -0
- package/lib/types/screens/Chat.d.ts.map +1 -1
- package/lib/types/screens/Chat.js +147 -39
- package/lib/types/screens/chatOverlay.d.ts +6 -0
- package/lib/types/screens/chatOverlay.d.ts.map +1 -1
- package/lib/types/screens/chatOverlay.js +4 -0
- package/lib/types/screens/modelSearchInput.d.ts +4 -0
- package/lib/types/screens/modelSearchInput.d.ts.map +1 -0
- package/lib/types/screens/modelSearchInput.js +19 -0
- package/lib/types/update.d.ts +2 -2
- package/lib/types/update.d.ts.map +1 -1
- package/lib/types/update.js +33 -32
- package/package.json +5 -4
|
@@ -17,7 +17,8 @@ import { formatTokens } from '../terminal-utils/format.js';
|
|
|
17
17
|
import { homeDir } from '../utils/paths.js';
|
|
18
18
|
import { execFileNoThrow } from '../utils/execFileNoThrow.js';
|
|
19
19
|
import { cleanRenderText, cleanScalarText } from '../dsh-adapter/sanitize.js';
|
|
20
|
-
import {
|
|
20
|
+
import { nextModelQueryBoundary, previousModelQueryBoundary } from './modelSearchInput.js';
|
|
21
|
+
import { deriveModelGroups, filterModels, modelPickerLanding, recentCatalogModels, RECENTS_GROUP_PROVIDER, } from '../modelGroups.js';
|
|
21
22
|
import { readModelRecents, recordModelUse } from '../modelRecents.js';
|
|
22
23
|
import { TuiDialogStore } from '../dsh-adapter/dialogs.js';
|
|
23
24
|
import { TuiStatusStore } from '../dsh-adapter/status.js';
|
|
@@ -99,8 +100,6 @@ import { markHomeSeen } from '../homePrefs.js';
|
|
|
99
100
|
import { extendTrajectory, projectWave } from '../dsh-adapter/trajectory/index.js';
|
|
100
101
|
import { miniWakeWidth } from '../components/trajectory/MiniWake.js';
|
|
101
102
|
import { readTrajectorySeen, writeTrajectorySeen } from '../trajectoryPrefs.js';
|
|
102
|
-
import { LoadingState } from '../components/design-system/LoadingState.js';
|
|
103
|
-
import { Pane } from '../components/design-system/Pane.js';
|
|
104
103
|
import { loadHistory } from '../history.js';
|
|
105
104
|
import { formatLoadedContextReport } from '../utils/loaded-context.js';
|
|
106
105
|
import { NO_OVERLAY, chatOverlayReducer, dialogOverlayVisible, wrapIndex, } from './chatOverlay.js';
|
|
@@ -343,18 +342,10 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
|
|
|
343
342
|
}
|
|
344
343
|
}, [overlay]);
|
|
345
344
|
const [models, setModels] = React.useState([]);
|
|
345
|
+
const [modelCatalogStatus, setModelCatalogStatus] = React.useState('loading');
|
|
346
|
+
const modelRequestRef = React.useRef(0);
|
|
346
347
|
/** Provider display identities for the /model group level; refreshed alongside `models`. */
|
|
347
348
|
const [providerInfos, setProviderInfos] = React.useState([]);
|
|
348
|
-
React.useEffect(() => {
|
|
349
|
-
const subscribe = channel.providerSetup?.()?.oauth?.onCredentialChange;
|
|
350
|
-
if (subscribe === undefined)
|
|
351
|
-
return;
|
|
352
|
-
return subscribe(() => {
|
|
353
|
-
channel.invalidateModelCompletion();
|
|
354
|
-
void channel.listModels().then(setModels).catch(() => setModels([]));
|
|
355
|
-
void channel.listProviders().then(setProviderInfos).catch(() => setProviderInfos([]));
|
|
356
|
-
});
|
|
357
|
-
}, [channel]);
|
|
358
349
|
/** /model 最近使用分组:成功切换即记录(去重置顶,上限 10),重启保留。 */
|
|
359
350
|
const [modelRecents, setModelRecents] = React.useState(() => readModelRecents());
|
|
360
351
|
/** Two-level /model: the drilled-in provider route; undefined = group level.
|
|
@@ -379,6 +370,69 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
|
|
|
379
370
|
return recentCatalogModels(modelRecents, models);
|
|
380
371
|
return models.filter(model => model.provider === activeModelGroup);
|
|
381
372
|
}, [models, modelRecents, activeModelGroup]);
|
|
373
|
+
const modelQuery = overlay.kind === 'model' ? (overlay.query ?? '') : '';
|
|
374
|
+
const modelSearchActive = modelQuery.trim() !== '';
|
|
375
|
+
const visibleModelRows = React.useMemo(() => filterModels(activeModelGroup === undefined ? models : groupModels, modelQuery, providerInfos), [activeModelGroup, groupModels, models, modelQuery, providerInfos]);
|
|
376
|
+
const visibleModelGroups = activeModelGroup === undefined && !modelSearchActive ? modelGroups : [];
|
|
377
|
+
const modelRowsAreGroups = activeModelGroup === undefined && !modelSearchActive;
|
|
378
|
+
const modelRowCount = modelRowsAreGroups ? visibleModelGroups.length : visibleModelRows.length;
|
|
379
|
+
const modelFocus = overlay.kind === 'model'
|
|
380
|
+
? Math.max(0, Math.min(overlay.index, modelRowCount - 1))
|
|
381
|
+
: 0;
|
|
382
|
+
const modelFocusedRef = React.useRef(null);
|
|
383
|
+
React.useEffect(() => {
|
|
384
|
+
modelFocusedRef.current = overlay.kind === 'model' ? {
|
|
385
|
+
query: modelQuery,
|
|
386
|
+
group: activeModelGroup,
|
|
387
|
+
provider: modelRowsAreGroups ? undefined : visibleModelRows[modelFocus]?.provider,
|
|
388
|
+
id: modelRowsAreGroups ? undefined : visibleModelRows[modelFocus]?.id,
|
|
389
|
+
groupKey: modelRowsAreGroups ? visibleModelGroups[modelFocus]?.provider : undefined,
|
|
390
|
+
} : null;
|
|
391
|
+
}, [overlay, modelQuery, activeModelGroup, modelRowsAreGroups, visibleModelRows, visibleModelGroups, modelFocus]);
|
|
392
|
+
React.useEffect(() => {
|
|
393
|
+
const subscribe = channel.providerSetup?.()?.oauth?.onCredentialChange;
|
|
394
|
+
if (subscribe === undefined)
|
|
395
|
+
return;
|
|
396
|
+
return subscribe(() => {
|
|
397
|
+
channel.invalidateModelCompletion();
|
|
398
|
+
const request = ++modelRequestRef.current;
|
|
399
|
+
void channel.listModels().then(list => {
|
|
400
|
+
if (request !== modelRequestRef.current)
|
|
401
|
+
return;
|
|
402
|
+
const focused = modelFocusedRef.current;
|
|
403
|
+
if (focused !== null) {
|
|
404
|
+
const freshGroups = deriveModelGroups(list, providerInfos, modelRecents);
|
|
405
|
+
if (focused.group !== undefined && !freshGroups.some(group => group.provider === focused.group)) {
|
|
406
|
+
setModelGroup(undefined);
|
|
407
|
+
setModelPickerDirect(false);
|
|
408
|
+
dispatchOverlay({ type: 'model-edit', query: '', cursor: 0 });
|
|
409
|
+
dispatchOverlay({ type: 'set-index', kind: 'model', index: 0 });
|
|
410
|
+
}
|
|
411
|
+
else {
|
|
412
|
+
const scope = focused.group === undefined ? list
|
|
413
|
+
: focused.group === RECENTS_GROUP_PROVIDER ? recentCatalogModels(modelRecents, list)
|
|
414
|
+
: list.filter(model => model.provider === focused.group);
|
|
415
|
+
const rows = filterModels(scope, focused.query, providerInfos);
|
|
416
|
+
const index = focused.group === undefined && focused.query.trim() === ''
|
|
417
|
+
? freshGroups.findIndex(group => group.provider === focused.groupKey)
|
|
418
|
+
: rows.findIndex(model => model.provider === focused.provider && model.id === focused.id);
|
|
419
|
+
dispatchOverlay({ type: 'set-index', kind: 'model', index: Math.max(0, index) });
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
setModels(list);
|
|
423
|
+
setModelCatalogStatus('ready');
|
|
424
|
+
}).catch(() => {
|
|
425
|
+
if (request === modelRequestRef.current) {
|
|
426
|
+
setModelCatalogStatus('error');
|
|
427
|
+
channel.notify(t('picker-model-error'), { color: 'warning' });
|
|
428
|
+
}
|
|
429
|
+
});
|
|
430
|
+
void channel.listProviders().then(list => {
|
|
431
|
+
if (request === modelRequestRef.current)
|
|
432
|
+
setProviderInfos(list);
|
|
433
|
+
}).catch(() => undefined);
|
|
434
|
+
});
|
|
435
|
+
}, [channel, providerInfos, modelRecents]);
|
|
382
436
|
/** Switch + record: every successful switch feeds the /model recents group
|
|
383
437
|
* (picker Enter/click, `/model provider/id`, the wizard's live switch,
|
|
384
438
|
* and /reload's applied model all ride this one path). */
|
|
@@ -1809,16 +1863,51 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
|
|
|
1809
1863
|
const landing = modelPickerLanding(models, channel.provider, channel.model, recentsNow);
|
|
1810
1864
|
setModelGroup(landing.group);
|
|
1811
1865
|
setModelPickerDirect(landing.group !== undefined);
|
|
1812
|
-
dispatchOverlay({ type: 'open', overlay: { kind: 'model', index: landing.index } });
|
|
1866
|
+
dispatchOverlay({ type: 'open', overlay: { kind: 'model', index: landing.index, query: '', cursor: 0 } });
|
|
1813
1867
|
}
|
|
1868
|
+
const modelRequest = ++modelRequestRef.current;
|
|
1869
|
+
setModelCatalogStatus('loading');
|
|
1814
1870
|
void channel.listModels().then((list) => {
|
|
1871
|
+
if (modelRequest !== modelRequestRef.current)
|
|
1872
|
+
return;
|
|
1873
|
+
const focused = modelFocusedRef.current;
|
|
1874
|
+
if (models.length === 0 && (focused === null || (focused.group === undefined && focused.query === ''))) {
|
|
1875
|
+
const landing = modelPickerLanding(list, channel.provider, channel.model, recentsNow);
|
|
1876
|
+
setModelGroup(landing.group);
|
|
1877
|
+
setModelPickerDirect(landing.group !== undefined);
|
|
1878
|
+
dispatchOverlay({ type: 'set-index', kind: 'model', index: landing.index });
|
|
1879
|
+
}
|
|
1880
|
+
else if (focused !== null) {
|
|
1881
|
+
const freshGroups = deriveModelGroups(list, providerInfos, recentsNow);
|
|
1882
|
+
if (focused.group !== undefined && !freshGroups.some(group => group.provider === focused.group)) {
|
|
1883
|
+
setModelGroup(undefined);
|
|
1884
|
+
setModelPickerDirect(false);
|
|
1885
|
+
dispatchOverlay({ type: 'model-edit', query: '', cursor: 0 });
|
|
1886
|
+
dispatchOverlay({ type: 'set-index', kind: 'model', index: 0 });
|
|
1887
|
+
}
|
|
1888
|
+
else {
|
|
1889
|
+
const scope = focused.group === undefined ? list
|
|
1890
|
+
: focused.group === RECENTS_GROUP_PROVIDER ? recentCatalogModels(recentsNow, list)
|
|
1891
|
+
: list.filter(model => model.provider === focused.group);
|
|
1892
|
+
const rows = filterModels(scope, focused.query, providerInfos);
|
|
1893
|
+
const index = focused.group === undefined && focused.query.trim() === ''
|
|
1894
|
+
? freshGroups.findIndex(group => group.provider === focused.groupKey)
|
|
1895
|
+
: rows.findIndex(model => model.provider === focused.provider && model.id === focused.id);
|
|
1896
|
+
dispatchOverlay({ type: 'set-index', kind: 'model', index: Math.max(0, index) });
|
|
1897
|
+
}
|
|
1898
|
+
}
|
|
1815
1899
|
setModels(list);
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1900
|
+
setModelCatalogStatus('ready');
|
|
1901
|
+
}).catch(() => {
|
|
1902
|
+
if (modelRequest === modelRequestRef.current) {
|
|
1903
|
+
setModelCatalogStatus('error');
|
|
1904
|
+
channel.notify(t('picker-model-error'), { color: 'warning' });
|
|
1905
|
+
}
|
|
1820
1906
|
});
|
|
1821
|
-
void channel.listProviders().then(
|
|
1907
|
+
void channel.listProviders().then(list => {
|
|
1908
|
+
if (modelRequest === modelRequestRef.current)
|
|
1909
|
+
setProviderInfos(list);
|
|
1910
|
+
}).catch(() => undefined);
|
|
1822
1911
|
return true;
|
|
1823
1912
|
}
|
|
1824
1913
|
case 'skills': {
|
|
@@ -3176,22 +3265,24 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
|
|
|
3176
3265
|
return;
|
|
3177
3266
|
}
|
|
3178
3267
|
if (overlay.kind === 'model') {
|
|
3268
|
+
event.stopImmediatePropagation();
|
|
3179
3269
|
// Two-level picker: group rows at the top (Enter drills in), one
|
|
3180
3270
|
// provider's models below (Enter switches, the same live-fork path as
|
|
3181
3271
|
// the flat picker always had). Esc/⌫ climbs one level and only closes
|
|
3182
3272
|
// at the top; a single-group catalog never shows the group level, so
|
|
3183
3273
|
// Esc there closes directly.
|
|
3184
|
-
const rowCount =
|
|
3274
|
+
const rowCount = modelRowCount;
|
|
3275
|
+
const query = overlay.query ?? '';
|
|
3276
|
+
const cursor = overlay.cursor ?? query.length;
|
|
3277
|
+
const editModelQuery = (value, nextCursor) => dispatchOverlay({ type: 'model-edit', query: value, cursor: nextCursor });
|
|
3185
3278
|
if (key.upArrow || key.downArrow) {
|
|
3186
3279
|
dispatchOverlay({ type: 'move', delta: key.upArrow ? -1 : 1, count: rowCount });
|
|
3187
3280
|
}
|
|
3188
3281
|
else if (plainReturn) {
|
|
3189
|
-
if (
|
|
3190
|
-
const group =
|
|
3191
|
-
if (!group)
|
|
3192
|
-
dispatchOverlay({ type: 'close' });
|
|
3282
|
+
if (modelRowsAreGroups) {
|
|
3283
|
+
const group = visibleModelGroups[modelFocus];
|
|
3284
|
+
if (!group)
|
|
3193
3285
|
return;
|
|
3194
|
-
}
|
|
3195
3286
|
setModelGroup(group.provider);
|
|
3196
3287
|
// The recents group opens on its most-recent entry; a provider
|
|
3197
3288
|
// group on its current model when it owns one, else its first row.
|
|
@@ -3203,7 +3294,7 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
|
|
|
3203
3294
|
dispatchOverlay({ type: 'set-index', kind: 'model', index: landing.index });
|
|
3204
3295
|
return;
|
|
3205
3296
|
}
|
|
3206
|
-
const model =
|
|
3297
|
+
const model = visibleModelRows[modelFocus];
|
|
3207
3298
|
// oxlint-disable-next-line typescript/no-unnecessary-condition -- runtime guard: out-of-range index on an empty list
|
|
3208
3299
|
if (model) {
|
|
3209
3300
|
// Enter switches the live model right away: the conversation is
|
|
@@ -3212,20 +3303,41 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
|
|
|
3212
3303
|
dispatchOverlay({ type: 'close' });
|
|
3213
3304
|
void switchModelRecorded(model.provider, model.id, model.name);
|
|
3214
3305
|
}
|
|
3215
|
-
else {
|
|
3216
|
-
dispatchOverlay({ type: 'close' });
|
|
3217
|
-
}
|
|
3218
3306
|
}
|
|
3219
|
-
else if (key.
|
|
3307
|
+
else if (key.backspace && cursor > 0) {
|
|
3308
|
+
const start = previousModelQueryBoundary(query, cursor);
|
|
3309
|
+
editModelQuery(query.slice(0, start) + query.slice(cursor), start);
|
|
3310
|
+
}
|
|
3311
|
+
else if (key.delete && cursor < query.length) {
|
|
3312
|
+
editModelQuery(query.slice(0, cursor) + query.slice(nextModelQueryBoundary(query, cursor)), cursor);
|
|
3313
|
+
}
|
|
3314
|
+
else if (key.leftArrow && cursor > 0) {
|
|
3315
|
+
editModelQuery(query, previousModelQueryBoundary(query, cursor));
|
|
3316
|
+
}
|
|
3317
|
+
else if (key.rightArrow && cursor < query.length) {
|
|
3318
|
+
editModelQuery(query, nextModelQueryBoundary(query, cursor));
|
|
3319
|
+
}
|
|
3320
|
+
else if (key.home) {
|
|
3321
|
+
editModelQuery(query, 0);
|
|
3322
|
+
}
|
|
3323
|
+
else if (key.end) {
|
|
3324
|
+
editModelQuery(query, query.length);
|
|
3325
|
+
}
|
|
3326
|
+
else if (key.escape || (key.backspace && query === '')) {
|
|
3220
3327
|
if (activeModelGroup !== undefined && modelGroups.length > 1 && !modelPickerDirect) {
|
|
3221
3328
|
setModelGroup(undefined);
|
|
3222
3329
|
const groupIndex = Math.max(0, modelGroups.findIndex(group => group.provider === activeModelGroup));
|
|
3330
|
+
dispatchOverlay({ type: 'model-edit', query: '', cursor: 0 });
|
|
3223
3331
|
dispatchOverlay({ type: 'set-index', kind: 'model', index: groupIndex });
|
|
3224
3332
|
}
|
|
3225
3333
|
else {
|
|
3226
3334
|
dispatchOverlay({ type: 'close' });
|
|
3227
3335
|
}
|
|
3228
3336
|
}
|
|
3337
|
+
else if (input.length > 0 && !key.ctrl && !key.meta && !key.super) {
|
|
3338
|
+
const inserted = input.replace(/[\r\n\t]+/gu, ' ');
|
|
3339
|
+
editModelQuery(query.slice(0, cursor) + inserted + query.slice(cursor), cursor + inserted.length);
|
|
3340
|
+
}
|
|
3229
3341
|
return;
|
|
3230
3342
|
}
|
|
3231
3343
|
if (overlay.kind === 'skills') {
|
|
@@ -4142,9 +4254,9 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
|
|
|
4142
4254
|
return;
|
|
4143
4255
|
dispatchOverlay({ type: 'set-index', kind: 'workspace-flow', index });
|
|
4144
4256
|
runWorkspaceFlowAction(signal => choice.choose(signal));
|
|
4145
|
-
} }) })), overlay.kind === 'model' && (_jsx(Box, { flexDirection: "column", marginTop: 1, children: models.length === 0 ?
|
|
4257
|
+
} }) })), overlay.kind === 'model' && (_jsx(Box, { flexDirection: "column", marginTop: 1, children: modelRowsAreGroups ? (_jsx(ModelPicker, { groups: visibleModelGroups, query: modelQuery, cursor: overlay.cursor ?? modelQuery.length, emptyReason: modelCatalogStatus === 'loading' && models.length === 0 ? 'loading' : modelCatalogStatus === 'error' ? 'error' : 'empty', focusIndex: modelFocus, currentProvider: channel.provider, onPick: (index) => {
|
|
4146
4258
|
// 点击分组行 = 进入该组(与 Enter 同一条路径)
|
|
4147
|
-
const group =
|
|
4259
|
+
const group = visibleModelGroups[index];
|
|
4148
4260
|
if (!group)
|
|
4149
4261
|
return;
|
|
4150
4262
|
setModelGroup(group.provider);
|
|
@@ -4154,11 +4266,11 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
|
|
|
4154
4266
|
}
|
|
4155
4267
|
const landing = modelPickerLanding(models.filter(model => model.provider === group.provider), channel.provider, channel.model);
|
|
4156
4268
|
dispatchOverlay({ type: 'set-index', kind: 'model', index: landing.index });
|
|
4157
|
-
} })) : (_jsx(ModelPicker, { models:
|
|
4269
|
+
} })) : (_jsx(ModelPicker, { models: visibleModelRows, query: modelQuery, cursor: overlay.cursor ?? modelQuery.length, emptyReason: modelCatalogStatus === 'loading' && models.length === 0 ? 'loading' : modelCatalogStatus === 'error' ? 'error' : models.length === 0 ? 'empty' : 'no-match', groupLabel: activeModelGroup === RECENTS_GROUP_PROVIDER
|
|
4158
4270
|
? t('picker-group-recent')
|
|
4159
|
-
: modelGroups.find(group => group.provider === activeModelGroup)?.label, showBack: modelGroups.length > 1 && !modelPickerDirect, showProviderPrefix: activeModelGroup === RECENTS_GROUP_PROVIDER, focusIndex:
|
|
4271
|
+
: modelGroups.find(group => group.provider === activeModelGroup)?.label, showBack: modelGroups.length > 1 && !modelPickerDirect, showProviderPrefix: activeModelGroup === RECENTS_GROUP_PROVIDER || activeModelGroup === undefined, focusIndex: modelFocus, currentModel: `${channel.provider}/${channel.model}`, onPick: (index) => {
|
|
4160
4272
|
// 点击行 = 应用该行模型(与 Enter 同一条路径)
|
|
4161
|
-
const model =
|
|
4273
|
+
const model = visibleModelRows[index];
|
|
4162
4274
|
if (!model)
|
|
4163
4275
|
return;
|
|
4164
4276
|
dispatchOverlay({ type: 'close' });
|
|
@@ -4285,10 +4397,6 @@ function NewMessagesPill({ count, onClick, }) {
|
|
|
4285
4397
|
? t(count === 1 ? 'new-message' : 'new-messages', { n: count })
|
|
4286
4398
|
: t('back-to-bottom'), ' '] }) }) }));
|
|
4287
4399
|
}
|
|
4288
|
-
/** /model while the provider catalog is still loading. */
|
|
4289
|
-
function ModelPickerLoading() {
|
|
4290
|
-
return (_jsx(Pane, { color: "permission", children: _jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsx(Text, { bold: true, color: "permission", children: t('picker-title-model') }), _jsx(LoadingState, { message: t('model-loading'), bold: true, subtitle: t('model-loading-subtitle') })] }) }));
|
|
4291
|
-
}
|
|
4292
4400
|
/**
|
|
4293
4401
|
* The `/` incsearch bar: a
|
|
4294
4402
|
* single row above the prompt input with the query, a block cursor, and the
|
|
@@ -63,6 +63,8 @@ export type ChatOverlay = {
|
|
|
63
63
|
} | {
|
|
64
64
|
kind: 'model';
|
|
65
65
|
index: number;
|
|
66
|
+
query?: string;
|
|
67
|
+
cursor?: number;
|
|
66
68
|
} | {
|
|
67
69
|
kind: 'skills';
|
|
68
70
|
index: number;
|
|
@@ -204,6 +206,10 @@ export type ChatOverlayAction =
|
|
|
204
206
|
query?: string;
|
|
205
207
|
cursor?: number;
|
|
206
208
|
focus?: number;
|
|
209
|
+
} | {
|
|
210
|
+
type: 'model-edit';
|
|
211
|
+
query: string;
|
|
212
|
+
cursor: number;
|
|
207
213
|
}
|
|
208
214
|
/** Workspace flow: an action is running (keys except Esc are swallowed). */
|
|
209
215
|
| {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatOverlay.d.ts","sourceRoot":"","sources":["../../../src/screens/chatOverlay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA;AACvE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAA;AAEjE,mEAAmE;AACnE,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,yBAAyB,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,CAAA;AAE1F,8EAA8E;AAC9E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACzC;IACE,IAAI,EAAE,gBAAgB,CAAA;IACtB,IAAI,EAAE,oBAAoB,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAA;CACjC,GACD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"chatOverlay.d.ts","sourceRoot":"","sources":["../../../src/screens/chatOverlay.ts"],"names":[],"mappings":"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"}
|
|
@@ -69,6 +69,10 @@ export function chatOverlayReducer(state, action) {
|
|
|
69
69
|
}
|
|
70
70
|
case 'set-index':
|
|
71
71
|
return state.kind === action.kind ? { ...state, index: action.index } : state;
|
|
72
|
+
case 'model-edit':
|
|
73
|
+
return state.kind === 'model'
|
|
74
|
+
? { ...state, query: action.query, cursor: action.cursor, index: action.query === (state.query ?? '') ? state.index : 0 }
|
|
75
|
+
: state;
|
|
72
76
|
case 'history-edit':
|
|
73
77
|
return state.kind === 'history'
|
|
74
78
|
? {
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** UTF-16 offsets used by SearchBox, stepped at complete Unicode characters. */
|
|
2
|
+
export declare function previousModelQueryBoundary(query: string, cursor: number): number;
|
|
3
|
+
export declare function nextModelQueryBoundary(query: string, cursor: number): number;
|
|
4
|
+
//# sourceMappingURL=modelSearchInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modelSearchInput.d.ts","sourceRoot":"","sources":["../../../src/screens/modelSearchInput.ts"],"names":[],"mappings":"AAEA,gFAAgF;AAChF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAOhF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAM5E"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { getGraphemeSegmenter } from '../utils/intl.js';
|
|
2
|
+
/** UTF-16 offsets used by SearchBox, stepped at complete Unicode characters. */
|
|
3
|
+
export function previousModelQueryBoundary(query, cursor) {
|
|
4
|
+
let previous = 0;
|
|
5
|
+
for (const { index } of getGraphemeSegmenter().segment(query)) {
|
|
6
|
+
if (index >= cursor)
|
|
7
|
+
break;
|
|
8
|
+
previous = index;
|
|
9
|
+
}
|
|
10
|
+
return previous;
|
|
11
|
+
}
|
|
12
|
+
export function nextModelQueryBoundary(query, cursor) {
|
|
13
|
+
for (const { index, segment } of getGraphemeSegmenter().segment(query)) {
|
|
14
|
+
const end = index + segment.length;
|
|
15
|
+
if (end > cursor)
|
|
16
|
+
return end;
|
|
17
|
+
}
|
|
18
|
+
return query.length;
|
|
19
|
+
}
|
package/lib/types/update.d.ts
CHANGED
|
@@ -460,7 +460,7 @@ export interface TuiUpdateOutcome {
|
|
|
460
460
|
* Install-only half of `/update`: run `dsh plugin add`, refuse boot-deadlock
|
|
461
461
|
* targets, verify the profile actually advanced, and migrate the global
|
|
462
462
|
* launcher. No restart — `updateTuiAndRestart` layers the session-preserving
|
|
463
|
-
* restart on top, and the `dsh-
|
|
463
|
+
* restart on top, and the `dsh-cli update` CLI stops here.
|
|
464
464
|
*
|
|
465
465
|
* @param profile - The dsh profile to update.
|
|
466
466
|
* @param targetVersion - Exact version from the preflight registry check, or
|
|
@@ -488,7 +488,7 @@ export declare function updateTui(profile: string, targetVersion?: string): Prom
|
|
|
488
488
|
*/
|
|
489
489
|
export declare function updateTuiAndRestart(sessionId: string, profile: string, targetVersion?: string): Promise<TuiUpdateResult>;
|
|
490
490
|
/**
|
|
491
|
-
* Headless `dsh-
|
|
491
|
+
* Headless `dsh-cli update`: the `/update` decision flow (preflight, deadlock
|
|
492
492
|
* refusal, mirror-lag note, `--latest` fallback) followed by the install-only
|
|
493
493
|
* half — no TUI, no restart. The bin launcher dynamic-imports this from the
|
|
494
494
|
* profile copy's compiled lib.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/update.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAKlD,OAAO,EAAE,UAAU,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/update.ts"],"names":[],"mappings":"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"}
|