@deepseek-ai/dsh-client-ui-workspace 0.2.1-rc.1 → 0.2.1-rc.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/README.i18n.yaml +4 -4
- package/README.md +3 -3
- package/README.zh.md +3 -3
- package/lib/client.js +7 -6
- package/lib/types/client/navigation.d.ts +10 -8
- package/package.json +27 -27
package/README.i18n.yaml
CHANGED
|
@@ -33,11 +33,11 @@
|
|
|
33
33
|
en: 9fb88260380bf093
|
|
34
34
|
zh: 3bace2b96ecd4a82
|
|
35
35
|
/deepseek-ai-dsh-client-ui-workspace/use-this-package/active-schedule-markers:
|
|
36
|
-
en:
|
|
37
|
-
zh:
|
|
36
|
+
en: 0ae90db57a09c62c
|
|
37
|
+
zh: 453f350f1dea2ac4
|
|
38
38
|
/deepseek-ai-dsh-client-ui-workspace/understand-the-implementation:
|
|
39
|
-
en:
|
|
40
|
-
zh:
|
|
39
|
+
en: 3e17f5f0867bb1b4
|
|
40
|
+
zh: 8b012092767a7430
|
|
41
41
|
/deepseek-ai-dsh-client-ui-workspace/understand-the-implementation/the-directory-flow-hole:
|
|
42
42
|
en: 868904dbfb5713f8
|
|
43
43
|
zh: 225906bfef7398bf
|
package/README.md
CHANGED
|
@@ -71,11 +71,11 @@ Grouped and flat Session rows show a clock mark when the Session has active sche
|
|
|
71
71
|
|
|
72
72
|
-----
|
|
73
73
|
|
|
74
|
-
`ctx.uiWorkspace.openSession(target)` synchronously replaces the owned `mainView` reference and returns the main area to Conversation without waiting for `reference.ready`, so history loading renders inside the selected Session view. The target may be a known Session id or a durable direct-parent subagent address; an explicit address does not require a preloaded parent catalog. `openWorkspace(id, beforeOpen?, options?)` opens a Workspace blank only if no later navigation has superseded the request;
|
|
74
|
+
`ctx.uiWorkspace.openSession(target)` synchronously replaces the owned `mainView` reference and returns the main area to Conversation without waiting for `reference.ready`, so history loading renders inside the selected Session view. The target may be a known Session id or a durable direct-parent subagent address; an explicit address does not require a preloaded parent catalog. `openWorkspace(id, beforeOpen?, options?)` opens a Workspace blank only if no later navigation has superseded the request; New Session opens the same blank as Workspace reopening, so it returns to that blank's unsent draft. `forkSession(id)` creates the child without navigating or superseding a pending navigation. The optional synchronous preparation callback runs after the target is retained and only for a current Workspace request, so superseded requests do not move composer drafts. Navigation or owner disposal suppresses the late UI commit, not the underlying Session creation. Startup restoration retains its main reference without changing the selected panel or cancelling a later navigation. Archiving the main Session releases its reference and clears the main selection. Selection failure leaves a global panel visible. Session rows read `usePanelInfo` to suppress their selected appearance while a global panel is active; search and directory-picker focus alone do not leave that panel.
|
|
75
75
|
|
|
76
76
|
Navigation and startup restoration obtain the selected Session's projections from its `follow`; neither issues a separate projection refresh for that Session or its parent, except that restoring a saved blank first reloads that Session's projections, because listed values are cached hints that can lag its log after an unclean Host exit.
|
|
77
77
|
|
|
78
|
-
Workspace reopening and explicit draft preparation name the first eligible blank in catalog order
|
|
78
|
+
New Session, Workspace reopening, and explicit draft preparation name the first eligible blank in catalog order. A request that names a preset skips a blank whose listed preset is a different one, so a preset flow such as the creator entry does not take over another preset's draft; a request without a preset may name any eligible blank, which the Host switches to its default. A reused blank may keep the preset composition it was created with. Startup restoration names the saved blank. The Host reuses the named blank under the requested preset, or under its default when the request names none, and creates another Session when the blank has started, left the Workspace, or is held by another writer; navigation opens the returned Session without trying other blanks. `startSession` with draft options, `openWorkspace`, and `connectWorkspace` accept `{ agentPreset }` for a flow that knows its preset before it starts, such as the creator entry; a connection joins the latest in-flight connection to its Workspace only when both request the same preset, so the latest request always reaches the Host. Startup restoration passes the preset the saved blank's log recorded, so the draft keeps that preset; when the Host reports the preset as missing (`agent-preset/not-found`) or failing to activate (`agent-preset/invalid`), restoration asks again without a preset and the draft continues under the Host default. Other failures abort the request: an explicit New Session or hero Workspace pick shows the failure as a transient notice quoting the Host's code and message (for example a preset that fails to mount) or, for a failure that is not a Host refusal, that failure's own message; a request a later navigation or owner disposal superseded raises no notice, and startup restoration reports only to the console. Released blanks retain their slash-command state when reused. Later navigation cancels a pending startup selection.
|
|
79
79
|
|
|
80
80
|
Once both Workspace and Session startup baselines are ready, an empty installation calls `workspaces.initializeDefault` and creates or reuses its blank Session. The composer becomes editable when that Session is selected; no message is submitted automatically. Later navigation or owner disposal prevents startup from selecting its result. Ineligible first use leaves the folder picker available without an error. Default Workspace creation failure shows a transient notice directing the user to Choose workspace, and is not retried until the next startup. Session creation failures use the ordinary restoration error handling. The registered Workspace remains available if Session creation or later submission fails.
|
|
81
81
|
|
|
@@ -93,7 +93,7 @@ The package is one composition: both target slots are declared by other plugins,
|
|
|
93
93
|
|
|
94
94
|
The browser entry also declares two root-scoped `list` child seats on each Session row: `sidebar.session.row.leading`, rendered only while that row's primary status is idle and left blank on an archived row, and `sidebar.session.row.hover`, mounted only while that row's hover card is open. Both take the row's Session identity and nothing else, so an occupant reads its own data by that id; a Session-scoped seat would force a Session binding, which would activate and retain every listed Session.
|
|
95
95
|
|
|
96
|
-
Client callers can pass `prompt` and `clearPreviousDraft` in the second argument to `uiWorkspace.startSession`. A prompt is plain text; structured drafts are handled internally during restoration and Workspace transfer.
|
|
96
|
+
Client callers can pass `prompt`, `whenDraftExists`, and `clearPreviousDraft` in the second argument to `uiWorkspace.startSession`. A prompt is plain text; structured drafts are handled internally during restoration and Workspace transfer. An empty draft adopts the prompt. When the target already has text or attachments, `whenDraftExists: 'keep'` (the default) preserves them, `'replace'` replaces only the target Session's text and inline references with the prompt or clears them without one, and `'append'` adds the prompt as new paragraphs after the existing text; attachments stay in every case. `clearPreviousDraft: true` acts as `'replace'` only when `whenDraftExists` is omitted. Option values are captured before asynchronous creation and applied to the exact retained binding before navigation commits. Superseded navigation does not write content; a submission-blocked input refuses preparation and keeps the previous selection. Calls with or without options open the blank Session chosen as described above, so New Session returns to its unsent draft. The [draft initialization decision](../../../.agents/notes/implemented/architecture/2026-09-30-structured-draft-initialization.md) describes the input owner's data flow.
|
|
97
97
|
|
|
98
98
|
### The directory-flow hole
|
|
99
99
|
|
package/README.zh.md
CHANGED
|
@@ -71,11 +71,11 @@ Session 行渲染运行时的实时 `pendingInteraction` 分类:审批显示**
|
|
|
71
71
|
|
|
72
72
|
-----
|
|
73
73
|
|
|
74
|
-
`ctx.uiWorkspace.openSession(target)` 会同步替换其拥有的 `mainView` reference,并让主区域返回 Conversation,而不等待 `reference.ready`,因此历史加载会显示在已经选中的 Session 视图内。目标可以是已知 Session id,也可以是持久的直接父子 subagent 地址;显式地址不要求预先加载 parent catalog。`openWorkspace(id, beforeOpen?, options?)` 仅在请求未被后续导航替代时打开工作区空白 Session
|
|
74
|
+
`ctx.uiWorkspace.openSession(target)` 会同步替换其拥有的 `mainView` reference,并让主区域返回 Conversation,而不等待 `reference.ready`,因此历史加载会显示在已经选中的 Session 视图内。目标可以是已知 Session id,也可以是持久的直接父子 subagent 地址;显式地址不要求预先加载 parent catalog。`openWorkspace(id, beforeOpen?, options?)` 仅在请求未被后续导航替代时打开工作区空白 Session;新会话与重新打开工作区打开同一个空白会话,因此会回到该空白会话中未发送的草稿。`forkSession(id)` 创建子会话,不导航,也不替代尚未完成的导航。可选的同步准备回调在目标被 retain 后执行,并且仅对仍有效的 Workspace 请求执行,因此过期请求不会搬移 composer 草稿。后续导航或 owner 释放会阻止晚到的 UI 提交,但不取消底层 Session 创建。启动恢复会 retain 主 reference,不改变已选面板,也不取消后续导航。归档主 Session 会释放其 reference 并清除主选择。选择失败时保留当前全局面板。Session 行读取 `usePanelInfo`,在全局面板活跃时不显示 Session 选中样式;仅把焦点移到搜索框或目录选择器不会离开该面板。
|
|
75
75
|
|
|
76
76
|
导航和启动恢复通过所选 Session 的 `follow` 获取投影,不会另行刷新该 Session 或其父会话的投影;例外是恢复已保存的空白会话时先重新加载该 Session 的投影,因为列表中的值是缓存提示,Host 非正常退出后可能落后于其日志。
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
新会话、重新打开工作区和显式准备草稿向 Host 请求 Session 时,指明列表中第一个符合条件的空白会话。指明 preset 的请求会跳过列出其他 preset 的空白会话,因此创造模式入口等 preset 流程不会接管其他 preset 的草稿;未指明 preset 的请求可以指明任何符合条件的空白会话,由 Host 切换到其默认 preset。被复用的空白会话可能沿用创建时的 preset 装配。启动恢复指明已保存的空白会话。Host 以请求的 preset 复用该空白会话,请求未指明 preset 时使用其默认 preset;若该空白会话已开始、已离开该工作区或写锁被其他写者占用,Host 改为新建 Session;导航打开 Host 返回的 Session,不再尝试其他空白会话。带草稿选项的 `startSession`、`openWorkspace` 和 `connectWorkspace` 接受 `{ agentPreset }`,供开始前已确定 preset 的流程使用,例如创造模式入口;一次连接仅在与该工作区最近一次进行中的连接请求相同 preset 时与之合并,因此最新的请求总会到达 Host。启动恢复传入已保存空白会话日志记录的 preset,使草稿保留该 preset;当 Host 报告该 preset 不存在(`agent-preset/not-found`)或无法激活(`agent-preset/invalid`)时,启动恢复改为不带 preset 再请求一次,草稿在 Host 默认 preset 下继续。其他错误会中止请求:显式新建会话或在 hero 中选择工作区时,失败以短暂提示展示,引用 Host 的错误码和消息(例如 preset 挂载失败),非 Host 拒绝的失败则显示其自身消息;已被后续导航或 owner 销毁取代的请求不弹提示,启动恢复仍只报告到控制台。已释放的空白会话被复用时保留 slash 命令状态。后续导航会取消尚未完成的启动选择。
|
|
79
79
|
|
|
80
80
|
Workspace 和 Session 的启动基线均就绪后,空安装环境调用 `workspaces.initializeDefault`,创建或复用其空白 Session。选中该 Session 后输入框才可编辑,不会自动提交消息。后续导航或所属上下文销毁会阻止启动流程选中其结果。不符合首次使用条件时仍可选择文件夹,不显示错误。默认工作区创建失败时显示短暂提示,引导用户通过“选择工作区”选择文件夹,直到下次启动才重试。Session 创建失败沿用普通的恢复错误处理。登记成功的工作区在 Session 创建或后续提交失败时仍然保留。
|
|
81
81
|
|
|
@@ -93,7 +93,7 @@ Workspace 和 Session 的启动基线均就绪后,空安装环境调用 `works
|
|
|
93
93
|
|
|
94
94
|
浏览器入口还为每个 Session 行声明两个 root 作用域的 `list` 子 slot:`sidebar.session.row.leading` 仅在该行主状态为 idle 时渲染、归档行留空,`sidebar.session.row.hover` 仅在该行的悬浮卡片打开时挂载。两者只接收行的 Session 身份,占用方据此读取自己的数据;Session 作用域的 slot 会强制建立 Session 绑定,从而激活并保留列表中每个 Session。
|
|
95
95
|
|
|
96
|
-
客户端调用方可以在 `uiWorkspace.startSession` 的第二参数中传入 `prompt` 与 `clearPreviousDraft
|
|
96
|
+
客户端调用方可以在 `uiWorkspace.startSession` 的第二参数中传入 `prompt`、`whenDraftExists` 与 `clearPreviousDraft`。提示词仅接受普通文字;结构化草稿由内部恢复和工作区携带流程处理。空稿直接采用提示词。目标已有文字或附件时,`whenDraftExists: 'keep'`(默认)保留原稿,`'replace'` 只用提示词替换目标 Session 的文字和内联引用、无提示词时清空,`'append'` 在原有文字之后另起段落追加提示词;附件在各种情况下都保留。只有未传 `whenDraftExists` 时,`clearPreviousDraft: true` 才等同 `'replace'`。在异步创建前捕获选项值,在导航提交前应用到准确保留的 binding。已被后续操作取代的导航不写内容;输入处于提交阻塞状态时拒绝准备并保留原选择。无论是否传入选项,都按上文所述选择并打开空白 Session,因此新会话会回到其未发送的草稿。[草稿初始化决策](../../../.agents/notes/implemented/architecture/2026-09-30-structured-draft-initialization.zh.md)说明输入 owner 的数据流。
|
|
97
97
|
|
|
98
98
|
### 目录流子 slot
|
|
99
99
|
|
package/lib/client.js
CHANGED
|
@@ -1398,12 +1398,11 @@ window.__ModuleLoader__.load({
|
|
|
1398
1398
|
return this.connectBlank(workspaceId, options);
|
|
1399
1399
|
}
|
|
1400
1400
|
/**
|
|
1401
|
-
* @param reuse - preset for the reused or created blank
|
|
1401
|
+
* @param reuse - preset for the reused or created blank.
|
|
1402
1402
|
*/
|
|
1403
1403
|
async connectBlank(workspaceId, reuse) {
|
|
1404
1404
|
const workspace = this.workspaces.list.getSnapshot().items.find((item) => item.workspaceId === workspaceId);
|
|
1405
1405
|
if (workspace === void 0) throw new Error(`uiWorkspace.connectWorkspace: unknown workspace ${workspaceId}`);
|
|
1406
|
-
if (reuse === void 0) return this.sessions.create({ workspaceId });
|
|
1407
1406
|
const inflight = this.connecting.get(workspaceId);
|
|
1408
1407
|
if (inflight !== void 0 && inflight.agentPreset === reuse.agentPreset) return inflight.attempt;
|
|
1409
1408
|
const attempt = this.createInWorkspace(workspace, reuse).finally(() => {
|
|
@@ -1415,12 +1414,14 @@ window.__ModuleLoader__.load({
|
|
|
1415
1414
|
});
|
|
1416
1415
|
return attempt;
|
|
1417
1416
|
}
|
|
1417
|
+
/** Name the first reusable member blank; a requested preset also skips blanks listing another preset. */
|
|
1418
1418
|
createInWorkspace(workspace, options) {
|
|
1419
1419
|
const archived = this.workspaces.list.getSnapshot().archivedSessionIds;
|
|
1420
1420
|
const sessions = this.sessions.list.getSnapshot();
|
|
1421
1421
|
const blank = sessions.ids.find((id) => {
|
|
1422
1422
|
const summary = sessions.byId[id];
|
|
1423
|
-
|
|
1423
|
+
const listed = summary?.projectionValues?.agentPreset;
|
|
1424
|
+
return summary !== void 0 && summary.blank && summary.cwd === workspace.path && workspace.sessionIds.includes(id) && !archived.includes(id) && (options.agentPreset === void 0 || typeof listed !== "string" || listed === options.agentPreset);
|
|
1424
1425
|
});
|
|
1425
1426
|
return this.createNamed({
|
|
1426
1427
|
workspaceId: workspace.workspaceId,
|
|
@@ -1499,7 +1500,7 @@ window.__ModuleLoader__.load({
|
|
|
1499
1500
|
startSession(workspaceId, options) {
|
|
1500
1501
|
const { agentPreset, ...draft } = options ?? {};
|
|
1501
1502
|
const draftOptions = options === void 0 ? void 0 : draft;
|
|
1502
|
-
const initializeDraft = draftOptions !== void 0 && (draftOptions.prompt !== void 0 || draftOptions.clearPreviousDraft === true);
|
|
1503
|
+
const initializeDraft = draftOptions !== void 0 && (draftOptions.prompt !== void 0 || (draftOptions.whenDraftExists ?? (draftOptions.clearPreviousDraft === true ? "replace" : "keep")) === "replace");
|
|
1503
1504
|
const workspace = this.workspaces.list.getSnapshot();
|
|
1504
1505
|
const sessions = this.sessions.list.getSnapshot();
|
|
1505
1506
|
const current = this.mainReference?.sessionId;
|
|
@@ -1517,11 +1518,11 @@ window.__ModuleLoader__.load({
|
|
|
1517
1518
|
this.clearMain();
|
|
1518
1519
|
return;
|
|
1519
1520
|
}
|
|
1520
|
-
|
|
1521
|
+
this.openWorkspace(target, initializeDraft ? (id) => {
|
|
1521
1522
|
const binding = this.sessions.binding(id);
|
|
1522
1523
|
if (binding === void 0) this.draftPreparationFailed();
|
|
1523
1524
|
this.prepareDraft(binding, draftOptions);
|
|
1524
|
-
} : void 0, agentPreset === void 0 ? {} : { agentPreset })
|
|
1525
|
+
} : void 0, agentPreset === void 0 ? {} : { agentPreset }).catch((reason) => {
|
|
1525
1526
|
console.warn("new session failed:", reason);
|
|
1526
1527
|
});
|
|
1527
1528
|
}
|
|
@@ -39,20 +39,21 @@ export interface UiWorkspace {
|
|
|
39
39
|
*/
|
|
40
40
|
forkSession(sessionId: SessionId, onCreated?: (childId: SessionId) => void, options?: Pick<Parameters<ISessions['fork']>[0], 'allowMigration'>): Promise<SessionId>;
|
|
41
41
|
/**
|
|
42
|
-
* Resolve the Session for a new conversation in a Workspace: the
|
|
43
|
-
*
|
|
44
|
-
* under the requested preset or
|
|
42
|
+
* Resolve the Session for a new conversation in a Workspace: navigation names the first
|
|
43
|
+
* reusable blank member, skipping blanks that list a preset other than a requested one, and
|
|
44
|
+
* the Host reuses it under the requested preset or its default, or creates another Session.
|
|
45
45
|
* @param workspaceId - target Workspace.
|
|
46
46
|
* @param options - choices for the created or reused Session.
|
|
47
47
|
* @returns a Session already addressable through the Session Controller.
|
|
48
48
|
*/
|
|
49
49
|
connectWorkspace(workspaceId: WorkspaceId, options?: Pick<StartSessionOptions, 'agentPreset'>): Promise<SessionId>;
|
|
50
50
|
/**
|
|
51
|
-
*
|
|
52
|
-
* refuses is shown through the Workspace notice and leaves the
|
|
51
|
+
* Open the Workspace blank `connectWorkspace` resolves, so New Session returns to that blank's
|
|
52
|
+
* unsent draft. A creation the Host refuses is shown through the Workspace notice and leaves the
|
|
53
|
+
* selection as it was.
|
|
53
54
|
* @param workspaceId - explicit target; absent inherits the current or most recent Workspace.
|
|
54
|
-
* @param options - initial content
|
|
55
|
-
* are
|
|
55
|
+
* @param options - initial content, the blank's preset, and `whenDraftExists`, which decides
|
|
56
|
+
* whether existing text or attachments are kept, replaced, or followed by the prompt.
|
|
56
57
|
*/
|
|
57
58
|
startSession(workspaceId?: WorkspaceId, options?: StartSessionOptions): void;
|
|
58
59
|
/**
|
|
@@ -137,9 +138,10 @@ declare class UiWorkspaceService extends Service implements UiWorkspace {
|
|
|
137
138
|
constructor(ctx: Context, directoryPicker: ClientRemote['directoryPicker'], workspaces: IWorkspaces, sessions: ISessions, view: Pick<WorkspaceViewStoreActions, 'pinSessionOrder'>, notify: (toast: RowToast) => void);
|
|
138
139
|
connectWorkspace(workspaceId: WorkspaceId, options?: Pick<StartSessionOptions, 'agentPreset'>): Promise<SessionId>;
|
|
139
140
|
/**
|
|
140
|
-
* @param reuse - preset for the reused or created blank
|
|
141
|
+
* @param reuse - preset for the reused or created blank.
|
|
141
142
|
*/
|
|
142
143
|
private connectBlank;
|
|
144
|
+
/** Name the first reusable member blank; a requested preset also skips blanks listing another preset. */
|
|
143
145
|
private createInWorkspace;
|
|
144
146
|
/**
|
|
145
147
|
* Create through the Host. A named blank the Host declined may still read as
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deepseek-ai/dsh-client-ui-workspace",
|
|
3
3
|
"description": "Workspace picker plugin: one WorkspacePicker registered into the sidebar and empty-state workspace slots",
|
|
4
|
-
"version": "0.2.1-rc.
|
|
4
|
+
"version": "0.2.1-rc.3",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -50,35 +50,35 @@
|
|
|
50
50
|
"@deepseek-ai/cordis": "~4.0.5"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
|
-
"@deepseek-ai/dsh-api-remote-access": "0.2.1-rc.
|
|
53
|
+
"@deepseek-ai/dsh-api-remote-access": "0.2.1-rc.3",
|
|
54
54
|
"@deepseek-ai/cordis": "~4.0.5",
|
|
55
|
-
"@deepseek-ai/dsh-api-remotes": "0.2.1-rc.
|
|
56
|
-
"@deepseek-ai/dsh-agent": "0.2.1-rc.
|
|
57
|
-
"@deepseek-ai/dsh-agent-preset-registry": "0.2.1-rc.
|
|
58
|
-
"@deepseek-ai/dsh-api-session-controller": "0.2.1-rc.
|
|
59
|
-
"@deepseek-ai/dsh-api-workspace-controller": "0.2.1-rc.
|
|
60
|
-
"@deepseek-ai/dsh-client-connection": "0.2.1-rc.
|
|
61
|
-
"@deepseek-ai/dsh-client-locale": "0.2.1-rc.
|
|
62
|
-
"@deepseek-ai/dsh-client-store": "0.2.1-rc.
|
|
63
|
-
"@deepseek-ai/dsh-client-test-runtime": "0.2.1-rc.
|
|
64
|
-
"@deepseek-ai/dsh-client-ui-conversation": "0.2.1-rc.
|
|
65
|
-
"@deepseek-ai/dsh-client-ui-layout": "0.2.1-rc.
|
|
66
|
-
"@deepseek-ai/dsh-client-ui-primitives": "0.2.1-rc.
|
|
67
|
-
"@deepseek-ai/dsh-client-ui-renderer": "0.2.1-rc.
|
|
68
|
-
"@deepseek-ai/dsh-client-ui-session": "0.2.1-rc.
|
|
69
|
-
"@deepseek-ai/dsh-client-ui-sidebar": "0.2.1-rc.
|
|
70
|
-
"@deepseek-ai/dsh-client-ui-slots": "0.2.1-rc.
|
|
71
|
-
"@deepseek-ai/dsh-jobs": "0.2.1-rc.
|
|
72
|
-
"@deepseek-ai/dsh-schedule": "0.2.1-rc.
|
|
73
|
-
"@deepseek-ai/dsh-session": "0.2.1-rc.
|
|
74
|
-
"@deepseek-ai/dsh-subagent": "0.2.1-rc.
|
|
75
|
-
"@deepseek-ai/dsh-typert-protocol": "0.2.1-rc.
|
|
76
|
-
"@deepseek-ai/dsh-util-values": "0.2.1-rc.
|
|
77
|
-
"@deepseek-ai/dsh-util-workspace-path": "0.2.1-rc.
|
|
55
|
+
"@deepseek-ai/dsh-api-remotes": "0.2.1-rc.3",
|
|
56
|
+
"@deepseek-ai/dsh-agent": "0.2.1-rc.3",
|
|
57
|
+
"@deepseek-ai/dsh-agent-preset-registry": "0.2.1-rc.3",
|
|
58
|
+
"@deepseek-ai/dsh-api-session-controller": "0.2.1-rc.3",
|
|
59
|
+
"@deepseek-ai/dsh-api-workspace-controller": "0.2.1-rc.3",
|
|
60
|
+
"@deepseek-ai/dsh-client-connection": "0.2.1-rc.3",
|
|
61
|
+
"@deepseek-ai/dsh-client-locale": "0.2.1-rc.3",
|
|
62
|
+
"@deepseek-ai/dsh-client-store": "0.2.1-rc.3",
|
|
63
|
+
"@deepseek-ai/dsh-client-test-runtime": "0.2.1-rc.3",
|
|
64
|
+
"@deepseek-ai/dsh-client-ui-conversation": "0.2.1-rc.3",
|
|
65
|
+
"@deepseek-ai/dsh-client-ui-layout": "0.2.1-rc.3",
|
|
66
|
+
"@deepseek-ai/dsh-client-ui-primitives": "0.2.1-rc.3",
|
|
67
|
+
"@deepseek-ai/dsh-client-ui-renderer": "0.2.1-rc.3",
|
|
68
|
+
"@deepseek-ai/dsh-client-ui-session": "0.2.1-rc.3",
|
|
69
|
+
"@deepseek-ai/dsh-client-ui-sidebar": "0.2.1-rc.3",
|
|
70
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.2.1-rc.3",
|
|
71
|
+
"@deepseek-ai/dsh-jobs": "0.2.1-rc.3",
|
|
72
|
+
"@deepseek-ai/dsh-schedule": "0.2.1-rc.3",
|
|
73
|
+
"@deepseek-ai/dsh-session": "0.2.1-rc.3",
|
|
74
|
+
"@deepseek-ai/dsh-subagent": "0.2.1-rc.3",
|
|
75
|
+
"@deepseek-ai/dsh-typert-protocol": "0.2.1-rc.3",
|
|
76
|
+
"@deepseek-ai/dsh-util-values": "0.2.1-rc.3",
|
|
77
|
+
"@deepseek-ai/dsh-util-workspace-path": "0.2.1-rc.3",
|
|
78
78
|
"clsx": "^2.0.0",
|
|
79
79
|
"react": "^18.2.0",
|
|
80
|
-
"@deepseek-ai/dsh-client-shortcuts": "0.2.1-rc.
|
|
81
|
-
"@deepseek-ai/dsh-client-product-analytics": "0.2.1-rc.
|
|
80
|
+
"@deepseek-ai/dsh-client-shortcuts": "0.2.1-rc.3",
|
|
81
|
+
"@deepseek-ai/dsh-client-product-analytics": "0.2.1-rc.3"
|
|
82
82
|
},
|
|
83
83
|
"files": [
|
|
84
84
|
"locale/*.json",
|