@dungsil/dsh-plugin-ui-model-picker 0.2.4 → 0.2.6
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 +4 -4
- package/dist/client.js +73 -60
- package/package.json +12 -12
package/README.md
CHANGED
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|

|
|
4
4
|
|
|
5
|
-
DSH Web 입력창에서 모델과 추론 강도를 선택합니다. 하나의 선택 버튼을 누르면 추론 강도 팝오버가 먼저 열리며, 팝오버 안의 모델명을 눌러 모델 목록으로 이동합니다. 모델을 고르면 실제 모델은 바로 바뀌지 않고 추론 강도 슬라이더가 이어서 표시되며,
|
|
5
|
+
DSH Web 입력창에서 모델과 추론 강도를 선택합니다. 하나의 선택 버튼을 누르면 추론 강도 팝오버가 먼저 열리며, 팝오버 안의 모델명을 눌러 모델 목록으로 이동합니다. 모델을 고르면 실제 모델은 바로 바뀌지 않고 추론 강도 슬라이더가 이어서 표시되며, 적용 버튼을 누르면 모델과 강도가 함께 적용됩니다.
|
|
6
6
|
|
|
7
7
|
위 이미지는 플러그인 컴포넌트에 예시 모델 목록과 테마 색상을 제공한 검증 화면을 각각 캡처해 합성했습니다. 표시된 모델명과 추론 단계는 예시이며, 실제 목록은 연결한 제공자가 결정합니다.
|
|
8
8
|
|
|
9
9
|
## 사용 방법
|
|
10
10
|
|
|
11
11
|
1. DSH 플러그인 설치 화면에서 `@dungsil/dsh-plugin-ui-model-picker`를 설치하고 활성화합니다.
|
|
12
|
-
2. 입력창 오른쪽 선택 버튼을 눌러 추론 강도 슬라이더를 엽니다. 방향키와 Home/End 키도 사용할 수 있습니다.
|
|
13
|
-
3. 모델을 바꾸려면 팝오버 상단의 모델명 부분을 누르고 제공자별 모델을 선택합니다. 추론 강도를 지원하는 모델을 고르면 슬라이더가 이어서 나타나며,
|
|
12
|
+
2. 입력창 오른쪽 선택 버튼을 눌러 추론 강도 슬라이더를 엽니다. 방향키와 Home/End 키도 사용할 수 있습니다. 원하는 강도를 고른 뒤 적용 버튼을 누릅니다.
|
|
13
|
+
3. 모델을 바꾸려면 팝오버 상단의 모델명 부분을 누르고 제공자별 모델을 선택합니다. 추론 강도를 지원하는 모델을 고르면 슬라이더가 이어서 나타나며, 적용 버튼을 눌러야 모델이 적용됩니다. 오른쪽 위 재설정 아이콘은 기본 추론 강도를 복원합니다.
|
|
14
14
|
|
|
15
15
|
## 동작과 호환성
|
|
16
16
|
|
|
17
17
|
- DSH `0.2.1-rc.5` 이상 `0.3.0` 미만의 Web UI를 지원합니다. 기본 `ui-model-selection` 기능이 활성화되어 있어야 합니다.
|
|
18
18
|
- 공용 모델 디렉터리와 선택 API를 그대로 사용하므로 `/model` 명령과 선택 상태를 공유합니다. 별도 모델 설정을 저장하거나 API 키를 다루지 않습니다.
|
|
19
19
|
- 실제 제공자 목록과 모델별 추론 메타데이터만 사용합니다. 별도 모델 목록, Fast 모드, 고정 추론 단계는 추가하지 않습니다. 추론을 지원하지 않는 모델에는 슬라이더를 표시하지 않으며, 그런 모델은 목록에서 고르는 즉시 적용됩니다.
|
|
20
|
-
- 다른 모델로 바꾸면 그 모델이 지원하는 추론 강도에서 슬라이더가 시작되고,
|
|
20
|
+
- 다른 모델로 바꾸면 그 모델이 지원하는 추론 강도에서 슬라이더가 시작되고, 적용 버튼을 눌러야 모델 선택이 적용됩니다. 적용하지 않고 팝오버를 닫으면 모델은 바뀌지 않습니다. 기본값 재설정은 별도 강도 지정을 해제합니다.
|
|
21
21
|
- Escape, 바깥 클릭, 스크롤, 창 크기 변경으로 메뉴를 닫습니다. 메뉴의 방향키와 Tab 탐색을 지원합니다. 한국어·영어·중국어(간체)와 DSH 테마 색상을 따릅니다.
|
|
22
22
|
- 기본 모델 슬롯만 우선순위로 대체합니다. 제거하면 기본 선택 UI가 돌아오며 모델 선택은 유지됩니다. 같은 슬롯을 대체하는 다른 플러그인과는 함께 사용하지 마세요.
|
|
23
23
|
|
package/dist/client.js
CHANGED
|
@@ -29,7 +29,7 @@ function IconResetOutlineRegular() {
|
|
|
29
29
|
}
|
|
30
30
|
// ../../tools/ui/src/composer.tsx
|
|
31
31
|
const composerStyles = `
|
|
32
|
-
:where(.dsh-plugin-composer-trigger) { display: flex; align-items: center; gap: 4px; min-width: 0; height: 28px; padding: 0 4px 0 8px; border: 0; border-radius: var(--dsw-radius-sm); background: transparent; color: var(--dsw-alias-label-secondary); font: inherit; font-size: 13px; line-height:
|
|
32
|
+
:where(.dsh-plugin-composer-trigger) { display: flex; align-items: center; gap: 4px; min-width: 0; height: 28px; padding: 0 4px 0 8px; border: 0; border-radius: var(--dsw-radius-sm); background: transparent; color: var(--dsw-alias-label-secondary); font: inherit; font-size: 13px; line-height: 1.5385; cursor: pointer; }
|
|
33
33
|
:where(.dsh-plugin-composer-trigger):disabled { color: var(--dsw-alias-label-dimmed); cursor: default; }
|
|
34
34
|
.dsh-plugin-composer-icon, .dsh-plugin-composer-chevron { display: inline-flex; flex: none; }
|
|
35
35
|
.dsh-plugin-composer-label, .dsh-plugin-composer-detail { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
@@ -68,36 +68,39 @@ const ComposerTrigger = /* @__PURE__ */ (0, react.forwardRef)(function ComposerT
|
|
|
68
68
|
const styles = `${composerStyles}
|
|
69
69
|
.dsh-codex-picker { display: flex; align-items: center; min-width: 0; }
|
|
70
70
|
.dsh-codex-trigger { max-width: min(360px, 45cqw); font-weight: 400; outline: none; }
|
|
71
|
-
.dsh-codex-trigger:hover:not(:disabled) { background: var(--dsw-alias-interactive-bg-hover); }
|
|
72
71
|
.dsh-codex-trigger:focus-visible:not([data-dsh-automatic-focus]) { box-shadow: 0 0 0 2px var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary)); }
|
|
73
72
|
.dsh-codex-trigger .dsh-plugin-composer-icon { display: var(--dsh-composer-model-icon-display, none); }
|
|
74
73
|
.dsh-codex-trigger .dsh-plugin-composer-chevron { transition: transform .12s; }
|
|
75
74
|
.dsh-codex-trigger .dsh-plugin-composer-label, .dsh-codex-trigger .dsh-plugin-composer-detail { display: var(--dsh-composer-model-text-display, block); }
|
|
76
75
|
.dsh-codex-trigger .dsh-plugin-composer-detail { flex-shrink: 1000; }
|
|
77
|
-
.dsh-codex-popover { position: fixed; z-index: 1100; display: flex; flex-direction: column; inset: auto; margin: 0; box-sizing: border-box; width: 256px; max-width: calc(100vw - 32px); max-height: min(360px, calc(100dvh - 96px)); overflow: hidden; padding: 4px; border: 0; --dsw-elevation-stroke-color: var(--dsw-alias-border-l1); --dsh-scrollbar-thumb: var(--dsw-alias-scrollbar-bg-l2); --dsh-scrollbar-thumb-hover: var(--dsw-alias-scrollbar-hover-l2); background: transparent; color: var(--dsw-alias-label-primary); box-shadow: var(--dsw-elevation-prominent); font: 13px/
|
|
76
|
+
.dsh-codex-popover { position: fixed; z-index: 1100; display: flex; flex-direction: column; inset: auto; margin: 0; box-sizing: border-box; width: 256px; max-width: calc(100vw - 32px); max-height: min(360px, calc(100dvh - 96px)); overflow: hidden; padding: 4px; border: 0; --dsw-elevation-stroke-color: var(--dsw-alias-border-l1); --dsh-scrollbar-thumb: var(--dsw-alias-scrollbar-bg-l2); --dsh-scrollbar-thumb-hover: var(--dsw-alias-scrollbar-hover-l2); background: transparent; color: var(--dsw-alias-label-primary); box-shadow: var(--dsw-elevation-prominent); font: 13px/1.5385 var(--dsw-font-family, system-ui); }
|
|
78
77
|
@media (prefers-reduced-motion: reduce) {
|
|
79
78
|
.dsh-codex-trigger .dsh-plugin-composer-chevron { transition: none; }
|
|
80
79
|
}
|
|
81
|
-
.dsh-codex-popover > :not(
|
|
82
|
-
.dsh-codex-
|
|
83
|
-
.dsh-codex-header { display: grid; grid-template-columns: 24px minmax(0, 1fr)
|
|
84
|
-
.dsh-codex-model, .dsh-codex-reset, .dsh-codex-back { border: 0; background: transparent; color: inherit; font: inherit; cursor: pointer; border-radius: var(--dsw-radius-md); }
|
|
80
|
+
.dsh-codex-popover > :not(.dsh-codex-models) { flex-shrink: 0; }
|
|
81
|
+
.dsh-codex-models { min-height: 0; overflow-y: auto; }
|
|
82
|
+
.dsh-codex-header { display: grid; grid-template-columns: 24px minmax(0, 1fr) auto; align-items: start; gap: 4px; }
|
|
83
|
+
.dsh-codex-model, .dsh-codex-reset, .dsh-codex-back, .dsh-codex-apply { border: 0; background: transparent; color: inherit; font: inherit; cursor: pointer; border-radius: var(--dsw-radius-md); }
|
|
85
84
|
.dsh-codex-popover svg { flex: none; vertical-align: middle; }
|
|
86
|
-
.dsh-codex-model {
|
|
87
|
-
.dsh-codex-model strong { display: block; color: var(--dsw-alias-state-business-primary); font-size: 14px; line-height:
|
|
88
|
-
.dsh-codex-model > span { display: block; color: var(--dsw-alias-label-tertiary, #777); font-size: 12px; line-height:
|
|
89
|
-
.dsh-codex-model:hover, .dsh-codex-reset:hover, .dsh-codex-back:hover { background: var(--dsw-alias-interactive-bg-hover, #f2f2f2); }
|
|
85
|
+
.dsh-codex-model { justify-self: center; min-width: 0; max-width: 100%; padding: 2px 2px 3px; text-align: center; }
|
|
86
|
+
.dsh-codex-model strong { display: block; color: var(--dsw-alias-state-business-primary); font-size: 14px; line-height: 1.4286; font-weight: 600; }
|
|
87
|
+
.dsh-codex-model > span { display: block; color: var(--dsw-alias-label-tertiary, #777); font-size: 12px; line-height: 1.4167; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
90
88
|
.dsh-codex-reset { display: grid; place-items: center; width: 24px; height: 24px; color: var(--dsw-alias-label-tertiary, #999); }
|
|
91
89
|
.dsh-codex-reset svg { width: 16px; height: 16px; }
|
|
92
90
|
.dsh-codex-back { padding: 4px 8px; color: var(--dsw-alias-label-tertiary, #777); }
|
|
93
91
|
.dsh-codex-popover h2, .dsh-codex-provider { margin: 0; padding: 6px 10px; font-size: 12px; font-weight: 400; color: var(--dsw-alias-label-tertiary, #777); }
|
|
94
92
|
.dsh-codex-provider { font-size: 11px; padding-top: 10px; }
|
|
95
93
|
.dsh-codex-option { box-sizing: border-box; display: flex; align-items: center; justify-content: space-between; gap: 6px; width: 100%; min-height: 34px; padding: 5px 7px; border: 0; border-radius: var(--dsw-radius-md); color: inherit; background: transparent; text-align: left; font: inherit; cursor: pointer; }
|
|
96
|
-
.dsh-codex-option:
|
|
94
|
+
.dsh-codex-option:focus-visible { background: var(--dsw-alias-interactive-bg-hover); }
|
|
95
|
+
@media (hover: hover) {
|
|
96
|
+
.dsh-codex-trigger:hover:not(:disabled), .dsh-codex-option:hover:not(:disabled) { background: var(--dsw-alias-interactive-bg-hover); }
|
|
97
|
+
.dsh-codex-model:hover, .dsh-codex-reset:hover, .dsh-codex-back:hover, .dsh-codex-apply:hover:not(:disabled) { background: var(--dsw-alias-interactive-bg-hover, #f2f2f2); }
|
|
98
|
+
}
|
|
97
99
|
.dsh-codex-option span:first-child { min-width: 0; overflow-wrap: anywhere; }
|
|
98
100
|
.dsh-codex-option small { display: block; color: var(--dsw-alias-label-tertiary, #777); font-size: 11px; }
|
|
99
101
|
.dsh-codex-option .dsh-codex-check { display: grid; place-items: center; flex: 0 0 14px; }
|
|
100
102
|
.dsh-codex-slider { padding: 10px 2px 3px; }
|
|
103
|
+
.dsh-codex-apply { padding: 3px 8px; color: var(--dsw-alias-label-tertiary, #777); font-size: 12px; line-height: 1.5; }
|
|
101
104
|
.dsh-codex-rail { position: relative; height: 28px; }
|
|
102
105
|
.dsh-codex-track { position: absolute; inset: 3px 0; border-radius: 20px; background: linear-gradient(to right, var(--dsw-alias-state-business-primary) var(--dsh-codex-progress), var(--dsw-alias-interactive-bg-hover) var(--dsh-codex-progress)); display: flex; align-items: center; justify-content: space-between; padding: 0 12px; }
|
|
103
106
|
.dsh-codex-track span { width: 4px; height: 4px; border-radius: 50%; background: #b8b8b8; }
|
|
@@ -135,7 +138,8 @@ const copy = {
|
|
|
135
138
|
missing: "현재 모델을 사용할 수 없습니다.",
|
|
136
139
|
error: "변경하지 못했습니다. 현재 선택을 확인한 뒤 다시 시도하세요.",
|
|
137
140
|
retry: "모델 목록 새로고침",
|
|
138
|
-
busy: "변경 중…"
|
|
141
|
+
busy: "변경 중…",
|
|
142
|
+
apply: "적용"
|
|
139
143
|
},
|
|
140
144
|
en: {
|
|
141
145
|
model: "Select model",
|
|
@@ -148,7 +152,8 @@ const copy = {
|
|
|
148
152
|
missing: "The current model is unavailable.",
|
|
149
153
|
error: "Could not change the selection. Check the current selection before retrying.",
|
|
150
154
|
retry: "Reload models",
|
|
151
|
-
busy: "Changing…"
|
|
155
|
+
busy: "Changing…",
|
|
156
|
+
apply: "Apply"
|
|
152
157
|
},
|
|
153
158
|
zh: {
|
|
154
159
|
model: "选择模型",
|
|
@@ -161,7 +166,8 @@ const copy = {
|
|
|
161
166
|
missing: "当前模型不可用。",
|
|
162
167
|
error: "更改失败。请确认当前选择后重试。",
|
|
163
168
|
retry: "刷新模型列表",
|
|
164
|
-
busy: "正在更改…"
|
|
169
|
+
busy: "正在更改…",
|
|
170
|
+
apply: "应用"
|
|
165
171
|
}
|
|
166
172
|
};
|
|
167
173
|
function apply(ctx) {
|
|
@@ -209,6 +215,11 @@ function apply(ctx) {
|
|
|
209
215
|
setStaged(null);
|
|
210
216
|
if (trigger.current) (0, _deepseek_ai_dsh_client_ui_primitives.focusWithoutRing)(trigger.current);
|
|
211
217
|
};
|
|
218
|
+
const restorePopupFocus = () => {
|
|
219
|
+
if (!popup.current?.contains(document.activeElement)) return;
|
|
220
|
+
const target = trigger.current?.disabled ? anchor.current?.parentElement?.querySelector("button:not(:disabled), input:not(:disabled), textarea:not(:disabled), [tabindex=\"0\"]") : trigger.current;
|
|
221
|
+
if (target) (0, _deepseek_ai_dsh_client_ui_primitives.focusWithoutRing)(target);
|
|
222
|
+
};
|
|
212
223
|
(0, _deepseek_ai_dsh_client_ui_primitives.useDismissOnOutsidePointer)(anchor, panel !== null, () => {
|
|
213
224
|
sliderSelection.current = null;
|
|
214
225
|
setPanel(null);
|
|
@@ -250,7 +261,7 @@ function apply(ctx) {
|
|
|
250
261
|
buttons[event.key === "Home" ? 0 : event.key === "End" ? buttons.length - 1 : (index + (event.key === "ArrowUp" ? -1 : 1) + buttons.length) % buttons.length]?.focus();
|
|
251
262
|
};
|
|
252
263
|
element.addEventListener("keydown", keydown);
|
|
253
|
-
(element.querySelector("[aria-
|
|
264
|
+
(element.querySelector("[aria-current=true]") ?? element.querySelector("input:not(:disabled)") ?? element.querySelector("button:not(:disabled)"))?.focus();
|
|
254
265
|
return () => {
|
|
255
266
|
observer.disconnect();
|
|
256
267
|
window.removeEventListener("resize", close);
|
|
@@ -260,6 +271,7 @@ function apply(ctx) {
|
|
|
260
271
|
}, [panel]);
|
|
261
272
|
(0, react.useEffect)(() => {
|
|
262
273
|
if (locked) {
|
|
274
|
+
restorePopupFocus();
|
|
263
275
|
sliderSelection.current = null;
|
|
264
276
|
setPanel(null);
|
|
265
277
|
setStaged(null);
|
|
@@ -272,6 +284,7 @@ function apply(ctx) {
|
|
|
272
284
|
setStaged(null);
|
|
273
285
|
return;
|
|
274
286
|
}
|
|
287
|
+
restorePopupFocus();
|
|
275
288
|
setPanel(null);
|
|
276
289
|
setStaged(null);
|
|
277
290
|
}, [
|
|
@@ -389,36 +402,47 @@ function apply(ctx) {
|
|
|
389
402
|
]
|
|
390
403
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", {
|
|
391
404
|
className: "dsh-codex-header",
|
|
392
|
-
children: [
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
405
|
+
children: [
|
|
406
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
407
|
+
type: "button",
|
|
408
|
+
className: "dsh-codex-reset",
|
|
409
|
+
disabled: locked || !(staged ?? current),
|
|
410
|
+
"aria-disabled": disabled || !(staged ?? current),
|
|
411
|
+
"aria-label": text.reset,
|
|
412
|
+
title: text.reset,
|
|
413
|
+
onClick: () => {
|
|
414
|
+
const target = staged ?? (current ? {
|
|
415
|
+
provider: current.provider,
|
|
416
|
+
model: current.model
|
|
417
|
+
} : null);
|
|
418
|
+
if (target) select(target);
|
|
419
|
+
},
|
|
420
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconResetOutlineRegular, {})
|
|
421
|
+
}),
|
|
422
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
423
|
+
type: "button",
|
|
424
|
+
className: "dsh-codex-model",
|
|
425
|
+
disabled: locked,
|
|
426
|
+
"aria-disabled": disabled,
|
|
427
|
+
title: stagedName,
|
|
428
|
+
onClick: () => {
|
|
429
|
+
if (!disabled) setPanel("model");
|
|
430
|
+
},
|
|
431
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: stagedEfforts[draft]?.name }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [
|
|
432
|
+
stagedName,
|
|
433
|
+
" ",
|
|
434
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronRightOutlineRegular, { size: 14 })
|
|
435
|
+
] })]
|
|
436
|
+
}),
|
|
437
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
438
|
+
type: "button",
|
|
439
|
+
className: "dsh-codex-apply",
|
|
440
|
+
disabled: locked,
|
|
441
|
+
"aria-disabled": disabled,
|
|
442
|
+
onClick: () => selectEffort(draft),
|
|
443
|
+
children: text.apply
|
|
444
|
+
})
|
|
445
|
+
]
|
|
422
446
|
}),
|
|
423
447
|
state.status === "loading" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
424
448
|
className: "dsh-codex-notice",
|
|
@@ -447,7 +471,8 @@ function apply(ctx) {
|
|
|
447
471
|
}),
|
|
448
472
|
panel === "model" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
449
473
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
450
|
-
|
|
474
|
+
className: "dsh-codex-models",
|
|
475
|
+
role: "group",
|
|
451
476
|
"aria-label": text.model,
|
|
452
477
|
children: state.groups.map((provider) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
453
478
|
"aria-label": provider.name,
|
|
@@ -456,8 +481,7 @@ function apply(ctx) {
|
|
|
456
481
|
children: provider.name
|
|
457
482
|
}), provider.models.map((option) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
458
483
|
type: "button",
|
|
459
|
-
|
|
460
|
-
"aria-checked": provider.id === current?.provider && option.id === current?.model,
|
|
484
|
+
"aria-current": provider.id === current?.provider && option.id === current?.model ? "true" : void 0,
|
|
461
485
|
className: "dsh-codex-option",
|
|
462
486
|
disabled,
|
|
463
487
|
onClick: () => stageModel(provider.id, option),
|
|
@@ -506,17 +530,6 @@ function apply(ctx) {
|
|
|
506
530
|
"aria-valuetext": stagedEfforts[draft]?.name,
|
|
507
531
|
onChange: (event) => {
|
|
508
532
|
if (!disabled) setDraft(Number(event.target.value));
|
|
509
|
-
},
|
|
510
|
-
onPointerUp: (event) => selectEffort(Number(event.currentTarget.value)),
|
|
511
|
-
onKeyUp: (event) => {
|
|
512
|
-
if ([
|
|
513
|
-
"ArrowLeft",
|
|
514
|
-
"ArrowRight",
|
|
515
|
-
"ArrowUp",
|
|
516
|
-
"ArrowDown",
|
|
517
|
-
"Home",
|
|
518
|
-
"End"
|
|
519
|
-
].includes(event.key)) selectEffort(Number(event.currentTarget.value));
|
|
520
533
|
}
|
|
521
534
|
})]
|
|
522
535
|
})
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dungsil/dsh-plugin-ui-model-picker",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.6",
|
|
4
4
|
"description": "Model and reasoning effort picker for the DeepSeek Harness composer.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -26,15 +26,15 @@
|
|
|
26
26
|
"access": "public"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
|
-
"@deepseek-ai/cordis": "4.0
|
|
30
|
-
"@deepseek-ai/dsh-api-session-controller": "0.2.
|
|
31
|
-
"@deepseek-ai/dsh-client-locale": "0.2.
|
|
32
|
-
"@deepseek-ai/dsh-client-store": "0.2.
|
|
33
|
-
"@deepseek-ai/dsh-client-ui-conversation": "0.2.
|
|
34
|
-
"@deepseek-ai/dsh-client-ui-model-selection": "0.2.
|
|
35
|
-
"@deepseek-ai/dsh-client-ui-renderer": "0.2.
|
|
36
|
-
"@deepseek-ai/dsh-client-ui-session": "0.2.
|
|
37
|
-
"@deepseek-ai/dsh-client-ui-slots": "0.2.
|
|
29
|
+
"@deepseek-ai/cordis": "4.1.0",
|
|
30
|
+
"@deepseek-ai/dsh-api-session-controller": "0.2.2-rc.1",
|
|
31
|
+
"@deepseek-ai/dsh-client-locale": "0.2.2-rc.1",
|
|
32
|
+
"@deepseek-ai/dsh-client-store": "0.2.2-rc.1",
|
|
33
|
+
"@deepseek-ai/dsh-client-ui-conversation": "0.2.2-rc.1",
|
|
34
|
+
"@deepseek-ai/dsh-client-ui-model-selection": "0.2.2-rc.1",
|
|
35
|
+
"@deepseek-ai/dsh-client-ui-renderer": "0.2.2-rc.1",
|
|
36
|
+
"@deepseek-ai/dsh-client-ui-session": "0.2.2-rc.1",
|
|
37
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.2.2-rc.1",
|
|
38
38
|
"@dungsil/dsh-tsconfig": "0.0.0",
|
|
39
39
|
"@dungsil/dsh-tsdown": "0.0.0",
|
|
40
40
|
"@dungsil/dsh-ui": "0.0.0",
|
|
@@ -46,10 +46,10 @@
|
|
|
46
46
|
"tsdown": "0.23.4"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
49
|
-
"@deepseek-ai/dsh-client-ui-primitives": "^0.2.1-rc.5"
|
|
49
|
+
"@deepseek-ai/dsh-client-ui-primitives": "^0.2.1-rc.5 || ^0.2.2-rc.1"
|
|
50
50
|
},
|
|
51
51
|
"engines": {
|
|
52
|
-
"dsh": "^0.2.1-rc.5",
|
|
52
|
+
"dsh": "^0.2.1-rc.5 || ^0.2.2-rc.1",
|
|
53
53
|
"node": ">=24.9.0"
|
|
54
54
|
},
|
|
55
55
|
"dsh": {
|