@deepseek-ai/dsh-client-ui-model-selection 0.1.3-alpha.2 → 0.1.5-alpha.2
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.i18n.yaml +2 -2
- package/README.md +2 -2
- package/README.zh.md +2 -2
- package/lib/client.js +78 -12
- package/lib/types/client/locales.d.ts +4 -0
- package/package.json +18 -18
package/README.i18n.yaml
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
# side as of the last confirmed-consistent state. Both languages carry equal authority;
|
|
3
3
|
# after editing either side, bring the other along and re-record with:
|
|
4
4
|
# pnpm run verify-translation-pairing --write packages/client/ui-model-selection/README.md
|
|
5
|
-
README.md:
|
|
6
|
-
README.zh.md:
|
|
5
|
+
README.md: ae939ce678bcc50aa69c6c260f1782830eea103f
|
|
6
|
+
README.zh.md: d9826f55a48f141f8baa65f230e24ea8d0254e30
|
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ English | [中文](README.zh.md)
|
|
|
9
9
|
|
|
10
10
|
## Summary
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
The Web GUI lets users switch the model and reasoning effort for an existing session through either the `/model` popup or the composer's model control. Both surfaces present the same provider-grouped choices, and the selected model determines the available effort names and default. A complete selection applies to the next request; a running step keeps the model and effort it started with. If no adapter can serve the session's route, the composer remains disabled until routing becomes available.
|
|
13
13
|
|
|
14
14
|
## Table of Contents
|
|
15
15
|
|
|
@@ -29,7 +29,7 @@ Mount this plugin alongside `ui-conversation` and the commands package; the comp
|
|
|
29
29
|
|
|
30
30
|
### Model and effort
|
|
31
31
|
|
|
32
|
-
Models stay grouped by provider. The menu shows model and effort names only
|
|
32
|
+
Models stay grouped by provider. The composer menu shows model and effort names only. The `/model` popup shows provider names and catalog descriptions; it localizes the two built-in DeepSeek descriptions and leaves external provider descriptions verbatim. The popup applies the selected model's default effort; the composer can then choose any advertised effort. An adapter without reasoning metadata leaves the Effort row absent; there is no arbitrary effort input.
|
|
33
33
|
|
|
34
34
|
### Unroutable sessions
|
|
35
35
|
|
package/README.zh.md
CHANGED
|
@@ -9,7 +9,7 @@ kind: "package-reference"
|
|
|
9
9
|
|
|
10
10
|
## 概述
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
Web GUI 允许用户通过 `/model` 弹窗或 composer 模型控件切换既有会话使用的模型与推理强度。两个界面呈现同一组按提供方分组的选择;所选模型决定可用的推理强度名称与默认值。完整选择从下一次请求开始生效;运行中的步骤保留其启动时的模型与推理强度。如果没有适配器可以服务会话路由,composer 会保持停用,直至路由恢复可用。
|
|
13
13
|
|
|
14
14
|
## 目录
|
|
15
15
|
|
|
@@ -29,7 +29,7 @@ kind: "package-reference"
|
|
|
29
29
|
|
|
30
30
|
### 模型与推理强度
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
模型按提供方分组。composer 菜单只显示模型与推理强度名称。`/model` 弹窗显示提供方名称与目录说明;其中两个内置 DeepSeek 模型的说明使用当前语言,外部提供方说明保持原文。弹窗应用所选模型的默认推理强度;composer 随后可以选择任一已公布的推理强度。适配器没有推理元数据时不显示 Effort 行;不存在任意推理强度输入。
|
|
33
33
|
|
|
34
34
|
### 不可路由的会话
|
|
35
35
|
|
package/lib/client.js
CHANGED
|
@@ -8,6 +8,7 @@ window.__ModuleLoader__.load({
|
|
|
8
8
|
let _deepseek_ai_dsh_client_store = require("@deepseek-ai/dsh-client-store");
|
|
9
9
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
10
10
|
let react = require("react");
|
|
11
|
+
let react_dom = require("react-dom");
|
|
11
12
|
let _deepseek_ai_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives");
|
|
12
13
|
//#region lib/types/client/catalog.js
|
|
13
14
|
/** One Host-generation model catalog shared by every Session selector. */
|
|
@@ -341,7 +342,7 @@ window.__ModuleLoader__.load({
|
|
|
341
342
|
}
|
|
342
343
|
//#endregion
|
|
343
344
|
//#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-model-selection/src/client/ModelSelect.module.css.mjs
|
|
344
|
-
const css = "._7KE1Ra_root{min-width:0;position:relative}._7KE1Ra_trigger{min-width:0;max-width:min(360px,45cqw);height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:24px;outline:none;align-items:center;gap:4px;padding:0 4px 0 8px;font-size:13px;font-weight:500;line-height:20px;display:flex}._7KE1Ra_trigger:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}._7KE1Ra_trigger:focus-visible{box-shadow:0 0 0 2px var(--dsw-alias-border-l3)}._7KE1Ra_trigger:disabled{color:var(--dsw-alias-label-dimmed);cursor:default}._7KE1Ra_triggerLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}._7KE1Ra_triggerEffort{color:var(--dsw-alias-label-caption);flex:none}._7KE1Ra_chevron{color:var(--dsw-alias-label-caption);flex:none;transition:transform .12s}._7KE1Ra_chevronOpen{transform:rotate(180deg)}._7KE1Ra_menu{z-index:
|
|
345
|
+
const css = "._7KE1Ra_root{min-width:0;position:relative}._7KE1Ra_trigger{min-width:0;max-width:min(360px,45cqw);height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:24px;outline:none;align-items:center;gap:4px;padding:0 4px 0 8px;font-size:13px;font-weight:500;line-height:20px;display:flex}._7KE1Ra_trigger:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}._7KE1Ra_trigger:focus-visible{box-shadow:0 0 0 2px var(--dsw-alias-border-l3)}._7KE1Ra_trigger:disabled{color:var(--dsw-alias-label-dimmed);cursor:default}._7KE1Ra_triggerLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}._7KE1Ra_triggerEffort{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-alias-label-caption);flex-shrink:1000;overflow:hidden}._7KE1Ra_triggerIcon{flex:none;display:none}@container (width<=360px){._7KE1Ra_triggerIcon{display:block}._7KE1Ra_triggerLabel,._7KE1Ra_triggerEffort{display:none}}._7KE1Ra_chevron{color:var(--dsw-alias-label-caption);flex:none;transition:transform .12s}._7KE1Ra_chevronOpen{transform:rotate(180deg)}._7KE1Ra_menu{z-index:1100;background:var(--dsw-specific-menu);--dsw-elevation-stroke-color:var(--dsw-alias-border-l1);width:max-content;min-width:min(240px,100vw - 32px);max-width:min(420px,100vw - 32px);max-height:min(360px,100vh - 96px);box-shadow:var(--dsw-elevation-prominent);color:var(--dsw-alias-label-primary);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border:0;border-radius:20px;flex-direction:column;padding:4px;display:flex;position:fixed;overflow:hidden}._7KE1Ra_status,._7KE1Ra_empty{color:var(--dsw-alias-label-tertiary);padding:10px;font-size:13px;line-height:20px}._7KE1Ra_error,._7KE1Ra_warning{background:var(--dsw-alias-interactive-bg-hover-danger);color:var(--dsw-alias-state-error-primary);border-radius:8px;justify-content:space-between;align-items:flex-start;gap:8px;margin-bottom:4px;padding:7px 8px;font-size:12px;line-height:18px;display:flex}._7KE1Ra_warning{background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-state-warn-label)}._7KE1Ra_retry{color:inherit;font:inherit;cursor:pointer;background:0 0;border:none;flex:none;padding:0;font-weight:600}._7KE1Ra_groups{min-height:0;overflow-y:auto}._7KE1Ra_group+._7KE1Ra_group{margin-top:4px}._7KE1Ra_groupTitle{z-index:1;background:var(--dsw-specific-menu);color:var(--dsw-alias-label-tertiary);padding:5px 8px 3px;font-size:12px;font-weight:500;line-height:18px;position:sticky;top:0}._7KE1Ra_option{box-sizing:border-box;width:auto;min-width:100%;min-height:38px;color:inherit;text-align:left;cursor:pointer;background:0 0;border:none;border-radius:10px;outline:none;align-items:center;gap:8px;padding:6px 8px;display:flex}._7KE1Ra_option:hover:not(:disabled),._7KE1Ra_option:focus-visible{background:var(--dsw-alias-interactive-bg-hover)}._7KE1Ra_selected{background:0 0}._7KE1Ra_option:disabled{color:var(--dsw-alias-label-dimmed);cursor:default}._7KE1Ra_optionCopy{flex-direction:column;flex:1;min-width:0;display:flex}._7KE1Ra_modelName{color:inherit;text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;line-height:20px;overflow:hidden}._7KE1Ra_check{color:var(--dsw-alias-label-primary);flex:0 0 18px;place-items:center;display:grid}._7KE1Ra_cell{box-sizing:border-box;width:auto;min-width:100%;height:40px;color:var(--dsw-alias-label-primary);cursor:pointer;text-align:left;background:0 0;border:none;border-radius:10px;align-items:center;gap:8px;padding:0 10px;font-size:14px;line-height:22px;display:flex}._7KE1Ra_cell:hover{background:var(--dsw-alias-interactive-bg-hover)}._7KE1Ra_cellLabel{white-space:nowrap;flex:none}._7KE1Ra_cellValue{text-overflow:ellipsis;white-space:nowrap;text-align:right;min-width:0;color:var(--dsw-alias-label-tertiary);flex:auto;overflow:hidden}._7KE1Ra_cellChevron{color:var(--dsw-alias-label-tertiary);flex:none}";
|
|
345
346
|
const tagId = "@deepseek-ai/dsh-client-ui-model-selection/ModelSelect.module.css";
|
|
346
347
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
|
|
347
348
|
const tag = document.createElement("style");
|
|
@@ -373,6 +374,7 @@ window.__ModuleLoader__.load({
|
|
|
373
374
|
"status": "_7KE1Ra_status",
|
|
374
375
|
"trigger": "_7KE1Ra_trigger",
|
|
375
376
|
"triggerEffort": "_7KE1Ra_triggerEffort",
|
|
377
|
+
"triggerIcon": "_7KE1Ra_triggerIcon",
|
|
376
378
|
"triggerLabel": "_7KE1Ra_triggerLabel",
|
|
377
379
|
"warning": "_7KE1Ra_warning"
|
|
378
380
|
};
|
|
@@ -391,6 +393,12 @@ window.__ModuleLoader__.load({
|
|
|
391
393
|
* announces through the shared transient Toast anchored to the composer
|
|
392
394
|
* card; the in-menu strip with Retry remains the catalog-load surface.
|
|
393
395
|
*/
|
|
396
|
+
/** Unplaced portal card: hidden but laid out at a fixed origin so offsetWidth/offsetHeight are real (Menu primitive's measure pass). */
|
|
397
|
+
const MEASURE_STYLE = {
|
|
398
|
+
visibility: "hidden",
|
|
399
|
+
left: 0,
|
|
400
|
+
top: 0
|
|
401
|
+
};
|
|
394
402
|
/**
|
|
395
403
|
* Render the composer model seat.
|
|
396
404
|
* @param props - owner share (locked) + injected face (shared directory
|
|
@@ -406,6 +414,8 @@ window.__ModuleLoader__.load({
|
|
|
406
414
|
const toastSeq = (0, react.useRef)(0);
|
|
407
415
|
const rootRef = (0, react.useRef)(null);
|
|
408
416
|
const triggerRef = (0, react.useRef)(null);
|
|
417
|
+
const menuRef = (0, react.useRef)(null);
|
|
418
|
+
const [menuPos, setMenuPos] = (0, react.useState)(null);
|
|
409
419
|
const itemRefs = (0, react.useRef)([]);
|
|
410
420
|
const id = (0, react.useId)();
|
|
411
421
|
const choices = (0, react.useMemo)(() => state.groups.flatMap((group) => group.models.map((model) => ({
|
|
@@ -438,13 +448,48 @@ window.__ModuleLoader__.load({
|
|
|
438
448
|
(0, react.useEffect)(() => {
|
|
439
449
|
if (!open) return;
|
|
440
450
|
const closeOutside = (event) => {
|
|
441
|
-
if (
|
|
451
|
+
if (rootRef.current?.contains(event.target) === true) return;
|
|
452
|
+
if (menuRef.current?.contains(event.target) === true) return;
|
|
453
|
+
setOpen(false);
|
|
442
454
|
};
|
|
443
455
|
document.addEventListener("mousedown", closeOutside);
|
|
444
456
|
return () => {
|
|
445
457
|
document.removeEventListener("mousedown", closeOutside);
|
|
446
458
|
};
|
|
447
459
|
}, [open]);
|
|
460
|
+
(0, react.useLayoutEffect)(() => {
|
|
461
|
+
if (!open) {
|
|
462
|
+
setMenuPos(null);
|
|
463
|
+
return;
|
|
464
|
+
}
|
|
465
|
+
const place = () => {
|
|
466
|
+
/* v8 ignore next 2 -- the trigger ref is attached whenever the menu is open. */
|
|
467
|
+
const rect = triggerRef.current?.getBoundingClientRect();
|
|
468
|
+
if (rect === void 0) return;
|
|
469
|
+
const MARGIN = 12;
|
|
470
|
+
const lw = menuRef.current?.offsetWidth ?? 0;
|
|
471
|
+
const lh = menuRef.current?.offsetHeight ?? 0;
|
|
472
|
+
let x = rect.right - lw;
|
|
473
|
+
let y = rect.top - 8 - lh;
|
|
474
|
+
if (lw > 0) x = Math.min(Math.max(x, MARGIN), window.innerWidth - lw - MARGIN);
|
|
475
|
+
if (lh > 0) y = Math.min(Math.max(y, MARGIN), window.innerHeight - lh - MARGIN);
|
|
476
|
+
setMenuPos({
|
|
477
|
+
left: x,
|
|
478
|
+
top: y
|
|
479
|
+
});
|
|
480
|
+
};
|
|
481
|
+
place();
|
|
482
|
+
window.addEventListener("scroll", place, true);
|
|
483
|
+
window.addEventListener("resize", place);
|
|
484
|
+
return () => {
|
|
485
|
+
window.removeEventListener("scroll", place, true);
|
|
486
|
+
window.removeEventListener("resize", place);
|
|
487
|
+
};
|
|
488
|
+
}, [
|
|
489
|
+
open,
|
|
490
|
+
pane,
|
|
491
|
+
state
|
|
492
|
+
]);
|
|
448
493
|
if (!available) return null;
|
|
449
494
|
const show = () => {
|
|
450
495
|
setPane("root");
|
|
@@ -478,7 +523,7 @@ window.__ModuleLoader__.load({
|
|
|
478
523
|
}
|
|
479
524
|
};
|
|
480
525
|
const onBlur = (event) => {
|
|
481
|
-
if (event.relatedTarget instanceof Node && rootRef.current?.contains(event.relatedTarget)) return;
|
|
526
|
+
if (event.relatedTarget instanceof Node && (rootRef.current?.contains(event.relatedTarget) === true || menuRef.current?.contains(event.relatedTarget) === true)) return;
|
|
482
527
|
close();
|
|
483
528
|
};
|
|
484
529
|
const settleSelection = (accepted) => {
|
|
@@ -553,6 +598,10 @@ window.__ModuleLoader__.load({
|
|
|
553
598
|
else show();
|
|
554
599
|
},
|
|
555
600
|
children: [
|
|
601
|
+
(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconDataOutline16, {
|
|
602
|
+
className: ModelSelect_module_css_default.triggerIcon,
|
|
603
|
+
size: 16
|
|
604
|
+
}),
|
|
556
605
|
(0, react_jsx_runtime.jsx)("span", {
|
|
557
606
|
className: ModelSelect_module_css_default.triggerLabel,
|
|
558
607
|
children: modelLabel
|
|
@@ -564,9 +613,11 @@ window.__ModuleLoader__.load({
|
|
|
564
613
|
(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutline14, { className: clsx(ModelSelect_module_css_default.chevron, open && ModelSelect_module_css_default.chevronOpen) })
|
|
565
614
|
]
|
|
566
615
|
}),
|
|
567
|
-
open && (0, react_jsx_runtime.jsxs)("div", {
|
|
616
|
+
open && (0, react_dom.createPortal)((0, react_jsx_runtime.jsxs)("div", {
|
|
617
|
+
ref: menuRef,
|
|
568
618
|
id: `${id}-menu`,
|
|
569
619
|
className: ModelSelect_module_css_default.menu,
|
|
620
|
+
style: menuPos ?? MEASURE_STYLE,
|
|
570
621
|
role: "menu",
|
|
571
622
|
"aria-label": t("menu.aria"),
|
|
572
623
|
"aria-busy": state.status === "loading" || busy,
|
|
@@ -717,7 +768,7 @@ window.__ModuleLoader__.load({
|
|
|
717
768
|
})]
|
|
718
769
|
}, level.key))] })
|
|
719
770
|
]
|
|
720
|
-
}),
|
|
771
|
+
}), document.body),
|
|
721
772
|
toast !== null && (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Toast, {
|
|
722
773
|
text: toast.text,
|
|
723
774
|
icon: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutline16, {}),
|
|
@@ -744,6 +795,8 @@ window.__ModuleLoader__.load({
|
|
|
744
795
|
const zh = {
|
|
745
796
|
"command.description": "选择本会话使用的模型",
|
|
746
797
|
"option.loadError": "目录加载失败:{message}",
|
|
798
|
+
"option.deepseekV4Flash.description": "快速、高效且经济;适合目标明确、常规或并行任务。",
|
|
799
|
+
"option.deepseekV4Pro.description": "更强的自主编码、知识与复杂推理能力;适合复杂或质量优先的任务,但成本更高。",
|
|
747
800
|
"trigger.fallback": "选择模型",
|
|
748
801
|
"trigger.loading": "正在加载模型…",
|
|
749
802
|
"trigger.selectAria": "选择模型",
|
|
@@ -765,6 +818,8 @@ window.__ModuleLoader__.load({
|
|
|
765
818
|
const en = {
|
|
766
819
|
"command.description": "Select the model for this conversation",
|
|
767
820
|
"option.loadError": "Catalog failed to load: {message}",
|
|
821
|
+
"option.deepseekV4Flash.description": "Fast, efficient, and economical; suited to focused, routine, or parallel tasks.",
|
|
822
|
+
"option.deepseekV4Pro.description": "Stronger agentic coding, knowledge, and difficult reasoning; suited to complex or quality-critical tasks at higher cost.",
|
|
768
823
|
"trigger.fallback": "Select model",
|
|
769
824
|
"trigger.loading": "Loading models…",
|
|
770
825
|
"trigger.selectAria": "Select model",
|
|
@@ -788,15 +843,26 @@ window.__ModuleLoader__.load({
|
|
|
788
843
|
function rowId(providerId, modelId) {
|
|
789
844
|
return `${providerId}/${modelId}`;
|
|
790
845
|
}
|
|
846
|
+
const BUILTIN_DESCRIPTION_KEYS = {
|
|
847
|
+
"deepseek-official/deepseek-v4-flash": "option.deepseekV4Flash.description",
|
|
848
|
+
"deepseek-official/deepseek-v4-pro": "option.deepseekV4Pro.description"
|
|
849
|
+
};
|
|
850
|
+
function descriptionOf(providerId, model, t) {
|
|
851
|
+
const key = BUILTIN_DESCRIPTION_KEYS[rowId(providerId, model.id)];
|
|
852
|
+
return key !== void 0 && model.description === en[key] ? t(key) : model.description;
|
|
853
|
+
}
|
|
791
854
|
/** Flatten the directory into popup rows; failure rows are listed for visibility but never selectable. */
|
|
792
855
|
function optionsOf(directory, t) {
|
|
793
856
|
const rows = [];
|
|
794
|
-
for (const group of directory.groups) for (const model of group.models)
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
857
|
+
for (const group of directory.groups) for (const model of group.models) {
|
|
858
|
+
const description = descriptionOf(group.id, model, t);
|
|
859
|
+
rows.push({
|
|
860
|
+
id: rowId(group.id, model.id),
|
|
861
|
+
label: model.name,
|
|
862
|
+
detail: description !== void 0 ? `${group.name} · ${description}` : group.name,
|
|
863
|
+
...directory.current !== null && directory.current.provider === group.id && directory.current.model === model.id ? { active: true } : {}
|
|
864
|
+
});
|
|
865
|
+
}
|
|
800
866
|
for (const failure of directory.failures) rows.push({
|
|
801
867
|
id: `failure/${failure.id}`,
|
|
802
868
|
label: failure.name,
|
|
@@ -852,7 +918,7 @@ window.__ModuleLoader__.load({
|
|
|
852
918
|
const sessions = scope.sessions;
|
|
853
919
|
scope.effect(() => command.register({
|
|
854
920
|
name: "model",
|
|
855
|
-
description: t("command.description"),
|
|
921
|
+
description: () => t("command.description"),
|
|
856
922
|
available: (session) => sessions.subagentAddress(session.sessionId) === void 0,
|
|
857
923
|
ui: {
|
|
858
924
|
kind: "popupSelect",
|
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
export declare const zh: {
|
|
12
12
|
'command.description': string;
|
|
13
13
|
'option.loadError': string;
|
|
14
|
+
'option.deepseekV4Flash.description': string;
|
|
15
|
+
'option.deepseekV4Pro.description': string;
|
|
14
16
|
'trigger.fallback': string;
|
|
15
17
|
'trigger.loading': string;
|
|
16
18
|
'trigger.selectAria': string;
|
|
@@ -34,6 +36,8 @@ export type ModelKey = keyof typeof zh;
|
|
|
34
36
|
export declare const en: {
|
|
35
37
|
'command.description': string;
|
|
36
38
|
'option.loadError': string;
|
|
39
|
+
'option.deepseekV4Flash.description': string;
|
|
40
|
+
'option.deepseekV4Pro.description': string;
|
|
37
41
|
'trigger.fallback': string;
|
|
38
42
|
'trigger.loading': string;
|
|
39
43
|
'trigger.selectAria': string;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deepseek-ai/dsh-client-ui-model-selection",
|
|
3
3
|
"description": "Model selection over the shared model catalog, Session projection, and session.selectModel",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.5-alpha.2",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -43,30 +43,30 @@
|
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@types/react": "~18.3.1",
|
|
45
45
|
"react": "^18.2.0",
|
|
46
|
-
"
|
|
47
|
-
"@
|
|
48
|
-
"
|
|
49
|
-
"@deepseek-ai/dsh-
|
|
50
|
-
"@deepseek-ai/dsh-
|
|
51
|
-
"@deepseek-ai/dsh-client-
|
|
52
|
-
"@deepseek-ai/dsh-client-ui-
|
|
53
|
-
"@deepseek-ai/dsh-client-ui-
|
|
54
|
-
"@deepseek-ai/dsh-client-
|
|
55
|
-
"@deepseek-ai/dsh-
|
|
46
|
+
"react-dom": "^18.2.0",
|
|
47
|
+
"@types/react-dom": "~18.3.0",
|
|
48
|
+
"clsx": "^2.1.1",
|
|
49
|
+
"@deepseek-ai/dsh-api-session-controller": "^0.1.5-alpha.2",
|
|
50
|
+
"@deepseek-ai/dsh-api-remotes": "^0.1.5-alpha.2",
|
|
51
|
+
"@deepseek-ai/dsh-client-locale": "^0.1.5-alpha.2",
|
|
52
|
+
"@deepseek-ai/dsh-client-ui-commands": "^0.1.5-alpha.2",
|
|
53
|
+
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.5-alpha.2",
|
|
54
|
+
"@deepseek-ai/dsh-client-test-runtime": "^0.1.5-alpha.2",
|
|
55
|
+
"@deepseek-ai/dsh-client-ui-slots": "^0.1.5-alpha.2",
|
|
56
|
+
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.5-alpha.2",
|
|
57
|
+
"@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.5-alpha.2",
|
|
58
|
+
"@deepseek-ai/dsh-typert-protocol": "^0.1.5-alpha.2",
|
|
56
59
|
"@deepseek-ai/cordis": "^4.0.2",
|
|
57
|
-
"@deepseek-ai/dsh-
|
|
58
|
-
"@deepseek-ai/dsh-
|
|
59
|
-
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.
|
|
60
|
-
"@deepseek-ai/dsh-client-ui-session": "^0.1.
|
|
60
|
+
"@deepseek-ai/dsh-client-store": "^0.1.5-alpha.2",
|
|
61
|
+
"@deepseek-ai/dsh-session": "^0.1.5-alpha.2",
|
|
62
|
+
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.5-alpha.2",
|
|
63
|
+
"@deepseek-ai/dsh-client-ui-session": "^0.1.5-alpha.2"
|
|
61
64
|
},
|
|
62
65
|
"files": [
|
|
63
66
|
"lib/index.js",
|
|
64
67
|
"lib/client.js",
|
|
65
68
|
"lib/types/**/*.d.ts"
|
|
66
69
|
],
|
|
67
|
-
"dependencies": {
|
|
68
|
-
"clsx": "^2.1.1"
|
|
69
|
-
},
|
|
70
70
|
"scripts": {
|
|
71
71
|
"bundle": "tsdown",
|
|
72
72
|
"watch": "tsdown --watch"
|