@deepseek-ai/dsh-client-ui-workspace 0.1.7-rc.2 → 0.2.0-rc.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 +6 -6
- package/README.md +5 -1
- package/README.zh.md +5 -1
- package/lib/client.js +24 -13
- package/lib/types/client/contract/slots.d.ts +1 -1
- package/lib/types/client/index.d.ts +0 -17
- package/lib/types/client/locales.d.ts +2 -0
- package/lib/types/client/navigation.d.ts +4 -3
- package/lib/types/client/session-actions/RenameSession.d.ts +1 -1
- package/lib/types/client/shortcuts.d.ts +1 -0
- package/lib/types/client/tree.d.ts +1 -1
- package/package.json +25 -24
package/README.i18n.yaml
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
en: 7c0f613105d4008a
|
|
7
7
|
zh: c36c0cdff7e77576
|
|
8
8
|
/deepseek-ai-dsh-client-ui-workspace:
|
|
9
|
-
en:
|
|
10
|
-
zh:
|
|
9
|
+
en: b286adf3aca51710
|
|
10
|
+
zh: 6122f6e7c8015197
|
|
11
11
|
/deepseek-ai-dsh-client-ui-workspace/summary:
|
|
12
12
|
en: 1a76ace6a18e3ab5
|
|
13
13
|
zh: b274d1e98e133851
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
en: d152484eb41ac6b4
|
|
16
16
|
zh: 09388d293f9be9cb
|
|
17
17
|
/deepseek-ai-dsh-client-ui-workspace/use-this-package:
|
|
18
|
-
en:
|
|
19
|
-
zh:
|
|
18
|
+
en: b164014ee565be16
|
|
19
|
+
zh: 6a741647932b93e6
|
|
20
20
|
/deepseek-ai-dsh-client-ui-workspace/use-this-package/reordering-and-view-options:
|
|
21
21
|
en: 1fe0693758e0536b
|
|
22
22
|
zh: ef30198bc767fc04
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
en: 9eab3bfbaf98c987
|
|
28
28
|
zh: 54e7e141dae5c9e8
|
|
29
29
|
/deepseek-ai-dsh-client-ui-workspace/use-this-package/managing-sessions:
|
|
30
|
-
en:
|
|
31
|
-
zh:
|
|
30
|
+
en: 6b5c96c5b723c5f8
|
|
31
|
+
zh: f8ae5f73860dce45
|
|
32
32
|
/deepseek-ai-dsh-client-ui-workspace/use-this-package/pending-interactions:
|
|
33
33
|
en: 9fb88260380bf093
|
|
34
34
|
zh: 3bace2b96ecd4a82
|
package/README.md
CHANGED
|
@@ -7,6 +7,8 @@ kind: "package-reference"
|
|
|
7
7
|
|
|
8
8
|
English | [中文](README.zh.md)
|
|
9
9
|
|
|
10
|
+
Desktop product events use the optional [product analytics service](../product-analytics/README.md); ordinary Web interactions are excluded.
|
|
11
|
+
|
|
10
12
|
## Summary
|
|
11
13
|
|
|
12
14
|
This package lets users browse grouped or flat Session lists, choose a Workspace for a new Session, and manage Workspaces and Sessions through add, rename, reorder, search, fork, archive, and Workspace deletion; the Session row menu and its hover buttons are slot lists that client plugins extend. Pending interactions appear as warning dots, and subagent-origin Sessions remain hidden. An idle, unarchived Session row with active scheduled tasks shows a clock mark, and its hover card lists those tasks. Canonically distinct folder paths remain separate Workspaces. Adding a Workspace requires a composed directory picker; without one, adding is unavailable.
|
|
@@ -27,6 +29,8 @@ This package lets users browse grouped or flat Session lists, choose a Workspace
|
|
|
27
29
|
|
|
28
30
|
Use the sidebar to browse Workspaces and their Sessions, reorder them, and start new ones; use the picker in the Session Intent hero to choose a Workspace for a new session. An open Workspace shows five idle, non-blank Sessions by default. Running Sessions, including parents with running children, remain visible in their ordered positions without using that quota; the selected blank **New Session** is also an extra row until its first prompt. Each **Show more** click reveals up to five more idle Sessions; after the final batch, **Show less** restores the initial rows while keeping running Sessions visible. Closing and reopening the Workspace also restores this folded projection.
|
|
29
31
|
|
|
32
|
+
History rows without a stored title use the localized unnamed label (未命名 / Untitled), rather than a directory name. The current blank row remains New Session; other blank rows remain hidden. Rename drafts use the stored title, or start empty when unnamed; unnamed rows do not offer title copying.
|
|
33
|
+
|
|
30
34
|
### Reordering and view options
|
|
31
35
|
|
|
32
36
|
Pinned Sessions lead ordinary Sessions in both grouped and flat views. **Last updated** sorts each partition strictly by the latest user prompt or steer time, newest first; pin time does not affect it. **Manual** uses the relative positions in one complete Session sequence, including hidden archives. Returning to Last updated discards the manual layout, and entering Manual again freezes the then-current chronological order. The browser defaults to Last updated and remembers the selected mode across reloads.
|
|
@@ -53,7 +57,7 @@ Archive commits without a confirmation dialog for a quiet Session and retains th
|
|
|
53
57
|
|
|
54
58
|
Session update times use the tertiary label color, including on archived rows. A Session title wider than its row is clipped with an ellipsis at rest. Hovering the row scrolls the title to its far edge — the incremented title of a fork, for example — and reveals it without the ellipsis; leaving the row returns the title to its start.
|
|
55
59
|
|
|
56
|
-
The keyboard reference exposes New Session, Search sessions, Add workspace, Rename session, Fork session, and Archive session. Desktop defaults use the platform's primary modifier, with Mod+K for search; Windows and macOS Web use the [shortcut service’s platform defaults](../shortcuts/README.md); Linux Web leaves these commands unbound until configured. Button tooltips and Session row menus display the effective bindings. Clicking a menu item targets that row; pressing its shortcut targets the main Session. Windows and macOS Desktop bindings also execute from terminal input and modal dialogs; other environments follow the command's region and modal restrictions. Search and rename requests belong to this package; input drafts remain in the browser. The directory picker rejects another open while selection or Workspace adoption is pending. Fork captures the source Session and uses the row action's Host operation to select its last completed turn, without loading older Client history. Missing or blank Sessions are unavailable; the Host rejects a source with no completed turn. A rejected shortcut fork preserves the current selection, displays a localized notification, and can be retried; unexpected failures also retain diagnostic logging.
|
|
60
|
+
The keyboard reference exposes New Session, Search sessions, Add workspace, Rename session, Fork session, and Archive session. Desktop defaults use the platform's primary modifier, with Mod+K for search; Windows and macOS Web use the [shortcut service’s platform defaults](../shortcuts/README.md); Linux Web leaves these commands unbound until configured. Button tooltips and Session row menus display the effective bindings. Clicking a menu item targets that row; pressing its shortcut targets the main Session. Desktop and Windows/macOS Web rename use Mod+Alt+G, leaving Mod+Shift+R to browser reload. Rename requires a nonblank main Conversation with no modal obscuring it; a retained Session behind another main panel is unavailable. Other Windows and macOS Desktop bindings also execute from terminal input and modal dialogs; other environments follow the command's region and modal restrictions. Search and rename requests belong to this package; input drafts remain in the browser. The directory picker rejects another open while selection or Workspace adoption is pending. Fork captures the source Session and uses the row action's Host operation to select its last completed turn, without loading older Client history. Missing or blank Sessions are unavailable; the Host rejects a source with no completed turn. A rejected shortcut fork preserves the current selection, displays a localized notification, and can be retried; unexpected failures also retain diagnostic logging.
|
|
57
61
|
|
|
58
62
|
### Pending interactions
|
|
59
63
|
|
package/README.zh.md
CHANGED
|
@@ -7,6 +7,8 @@ kind: "package-reference"
|
|
|
7
7
|
|
|
8
8
|
[English](README.md) | 中文
|
|
9
9
|
|
|
10
|
+
桌面端产品事件使用可选的[产品埋点服务](../product-analytics/README.zh.md),不包含普通 Web 交互。
|
|
11
|
+
|
|
10
12
|
## 概述
|
|
11
13
|
|
|
12
14
|
本包让用户浏览分组或扁平的 Session 列表、为新 Session 选择 Workspace,并通过添加、重命名、重排序、搜索、fork、归档和删除 Workspace 来管理 Workspace 与 Session;Session 行菜单及其悬停按钮是可由客户端插件扩展的 slot 列表。待处理交互显示为警告点,subagent 来源的 Session 则保持隐藏。处于空闲状态且未归档、其 Session 有活动定时任务的 Session 行会显示时钟标记,其悬浮卡片会列出这些任务。规范化后仍有差异的文件夹路径会保留为独立 Workspace。添加 Workspace 需要组合目录选择器;没有目录选择器时,添加操作不可用。
|
|
@@ -27,6 +29,8 @@ kind: "package-reference"
|
|
|
27
29
|
|
|
28
30
|
用侧边栏浏览 Workspace 及其 Session、重排它们并新建会话;在 Session Intent 主视觉区用选择器为新会话选择 Workspace。打开的 Workspace 默认显示五条空闲的非空白 Session。正在运行的 Session(包括有子会话正在运行的父会话)始终按原顺序显示,不占用这五条配额;当前选中的空白**新会话**在首条提示词落地前也作为额外行。每次点击**展开其余**最多再显示五条空闲 Session;全部显示后,**收起**恢复初始行数,但仍显示正在运行的 Session。关闭再打开 Workspace 也会恢复该折叠投影。
|
|
29
31
|
|
|
32
|
+
未保存标题的历史会话显示本地化名称「未命名 / Untitled」,不使用目录名兜底。当前空会话仍显示「新会话」,其他空会话仍隐藏。重命名草稿使用已保存标题,无标题时留空;无标题行不提供标题复制。
|
|
33
|
+
|
|
30
34
|
### 重排序与视图选项
|
|
31
35
|
|
|
32
36
|
分组和平铺视图都先显示置顶 Session,再显示普通 Session。**最近更新**在各分区内严格按最近一次用户提示词或 steering(中途引导)时间降序排列,置顶时间不影响它。**手动排序**使用同一条完整 Session 序列中的相对位置,包括隐藏的归档项。返回最近更新会丢弃手动布局,再次进入手动排序时冻结当时的时间顺序。浏览器默认采用最近更新,并在重新加载后记住所选模式。
|
|
@@ -53,7 +57,7 @@ Session 行内的 Rename 操作打开一个以该行显示标题预填的对话
|
|
|
53
57
|
|
|
54
58
|
会话更新时间使用 tertiary 文本色,包括已归档行。标题宽于所在行时,静止状态以省略号裁切。把指针停在行上,标题会滚动到远端——例如 fork 递增后的标题——并在揭示时不显示省略号;指针离开后标题回到开头。
|
|
55
59
|
|
|
56
|
-
快捷键速查提供新建会话、搜索会话、添加工作区、重命名会话、分叉会话和归档会话。桌面默认使用平台的主修饰键,搜索为 Mod+K;Windows 和 macOS Web 使用[快捷键服务的平台默认值](../shortcuts/README.zh.md);Linux Web 在用户配置前不绑定这些命令。按钮提示和会话行菜单显示当前有效绑定。点击菜单项操作该行,按快捷键操作主会话。Windows 和 macOS Desktop
|
|
60
|
+
快捷键速查提供新建会话、搜索会话、添加工作区、重命名会话、分叉会话和归档会话。桌面默认使用平台的主修饰键,搜索为 Mod+K;Windows 和 macOS Web 使用[快捷键服务的平台默认值](../shortcuts/README.zh.md);Linux Web 在用户配置前不绑定这些命令。按钮提示和会话行菜单显示当前有效绑定。点击菜单项操作该行,按快捷键操作主会话。Desktop 和 Windows/macOS Web 的重命名均使用 Mod+Alt+G,将 Mod+Shift+R 留给浏览器刷新。重命名要求主区域正在显示非空会话,且没有模态对话框遮挡;切换到其他主面板后,后台保留的会话不可作为重命名目标。其他 Windows 和 macOS Desktop 绑定也可从终端输入区域和模态对话框中执行;其他环境遵循命令的区域和模态限制。搜索和重命名的打开请求归本包管理,输入草稿保留在浏览器中。目录选择或工作区接纳尚未结束时,目录选择器拒绝重复打开。分叉捕获源会话,并使用会话行相同的 Host 操作选择最近已完成轮次,不读取更早的 Client 历史。没有会话或会话为空时不可用;没有已完成轮次的源会话由 Host 拒绝。快捷键分叉被拒绝时保留当前选择、显示本地化提示,并允许重试;非预期失败还会保留诊断日志。
|
|
57
61
|
|
|
58
62
|
### 待处理交互
|
|
59
63
|
|
package/lib/client.js
CHANGED
|
@@ -95,6 +95,7 @@ window.__ModuleLoader__.load({
|
|
|
95
95
|
}
|
|
96
96
|
/**
|
|
97
97
|
* Register navigation commands against the existing workspace owner.
|
|
98
|
+
* Rename requires a nonblank main Conversation with no modal obscuring it.
|
|
98
99
|
* @param ctx - plugin context with the shortcut, locale, and model services.
|
|
99
100
|
* @param navigation - session creation and forking from the pointer controls' navigation service.
|
|
100
101
|
* @param controls - browser-owned opening requests.
|
|
@@ -156,15 +157,15 @@ window.__ModuleLoader__.load({
|
|
|
156
157
|
reason
|
|
157
158
|
};
|
|
158
159
|
});
|
|
159
|
-
register("session.rename", () => t("rename.session.title"), ["rename session"], "
|
|
160
|
+
register("session.rename", () => t("rename.session.title"), ["rename session"], "KeyG", ["primary", "alt"], ["primary", "alt"], (context) => {
|
|
160
161
|
const target = current();
|
|
161
|
-
return target === void 0 ? {
|
|
162
|
+
return target === void 0 || target.blank || context.modal !== null || ctx.layout.panelInfo.getSnapshot().activePanelId !== null ? {
|
|
162
163
|
status: "blocked",
|
|
163
164
|
reason: t("shortcut.noSession")
|
|
164
165
|
} : {
|
|
165
166
|
status: "handled",
|
|
166
167
|
run: () => {
|
|
167
|
-
controls.rename(target.id, target.
|
|
168
|
+
controls.rename(target.id, target.title?.trim() ?? "");
|
|
168
169
|
}
|
|
169
170
|
};
|
|
170
171
|
});
|
|
@@ -384,10 +385,11 @@ window.__ModuleLoader__.load({
|
|
|
384
385
|
/**
|
|
385
386
|
* A blank session is the selected Workspace's provisional New Session row;
|
|
386
387
|
* its canonical title never enters search (blank rows are query-excluded)
|
|
387
|
-
* and the renderer localizes its display label.
|
|
388
|
+
* and the renderer localizes its display label. Unnamed history also yields an
|
|
389
|
+
* empty title for localization and does not match a directory-name title search.
|
|
388
390
|
*/
|
|
389
391
|
function sessionTitle(session) {
|
|
390
|
-
return session.blank ? "" : session.
|
|
392
|
+
return session.blank ? "" : session.title?.trim() ?? "";
|
|
391
393
|
}
|
|
392
394
|
/** Build one group without projecting session lineage into presentation. */
|
|
393
395
|
function buildGroup(key, workspaceId, cwd, createdAt, label, members) {
|
|
@@ -834,10 +836,11 @@ window.__ModuleLoader__.load({
|
|
|
834
836
|
if (navigation.aborted) return;
|
|
835
837
|
this.replaceMain(sessionId, navigation, "reveal", beforeOpen);
|
|
836
838
|
}
|
|
837
|
-
async forkSession(sessionId) {
|
|
838
|
-
|
|
839
|
+
async forkSession(sessionId, onCreated) {
|
|
840
|
+
return this.sessions.fork({
|
|
839
841
|
sessionId,
|
|
840
|
-
increaseTitle: true
|
|
842
|
+
increaseTitle: true,
|
|
843
|
+
...onCreated === void 0 ? {} : { onCreated }
|
|
841
844
|
});
|
|
842
845
|
}
|
|
843
846
|
startSession(workspaceId) {
|
|
@@ -1117,7 +1120,7 @@ window.__ModuleLoader__.load({
|
|
|
1117
1120
|
*/
|
|
1118
1121
|
/** Row display title: blank rows show the localized New Session label. */
|
|
1119
1122
|
function displayTitle(node, t) {
|
|
1120
|
-
return node.blank ? t("session.new") : node.title;
|
|
1123
|
+
return node.blank ? t("session.new") : node.title || t("session.untitled");
|
|
1121
1124
|
}
|
|
1122
1125
|
const MIN_TITLE_REVEAL_PX = 8;
|
|
1123
1126
|
const TITLE_MARQUEE_PX_PER_MS = .03;
|
|
@@ -1511,7 +1514,7 @@ window.__ModuleLoader__.load({
|
|
|
1511
1514
|
}),
|
|
1512
1515
|
(0, react_jsx_runtime.jsx)("span", {
|
|
1513
1516
|
className: Rows_module_css_default.searchResultTitle,
|
|
1514
|
-
children: result.title
|
|
1517
|
+
children: result.title || t("session.untitled")
|
|
1515
1518
|
}),
|
|
1516
1519
|
result.archived && (0, react_jsx_runtime.jsx)("span", {
|
|
1517
1520
|
className: Rows_module_css_default.rowActions,
|
|
@@ -1674,7 +1677,7 @@ window.__ModuleLoader__.load({
|
|
|
1674
1677
|
}),
|
|
1675
1678
|
openDelayMs: 800,
|
|
1676
1679
|
disabled: menuOpen || drag?.active === true,
|
|
1677
|
-
copyText: row.blank ? void 0 : row.title,
|
|
1680
|
+
copyText: row.blank || row.title === "" ? void 0 : row.title,
|
|
1678
1681
|
copyLabel: t("copy"),
|
|
1679
1682
|
copiedLabel: t("hover.copied")
|
|
1680
1683
|
});
|
|
@@ -3696,7 +3699,7 @@ window.__ModuleLoader__.load({
|
|
|
3696
3699
|
* one dialog per request (keyed by the Session, so a new request starts a
|
|
3697
3700
|
* fresh draft). Sessions have no client-side name-conflict rule (the host
|
|
3698
3701
|
* normalizes), and unlike Workspace rename an unchanged title is NOT
|
|
3699
|
-
* blocked
|
|
3702
|
+
* blocked. An unnamed Session starts with an empty draft and requires a name.
|
|
3700
3703
|
* @param props - the request hook, its settlement, the rename hop, and the locale seat.
|
|
3701
3704
|
* @returns the open dialog, or null.
|
|
3702
3705
|
*/
|
|
@@ -3865,6 +3868,7 @@ window.__ModuleLoader__.load({
|
|
|
3865
3868
|
"defaultWorkspace.failed": "无法创建默认工作区,请通过“选择工作区”选择文件夹",
|
|
3866
3869
|
"group.ungrouped": "未分组",
|
|
3867
3870
|
"session.new": "新会话",
|
|
3871
|
+
"session.untitled": "未命名",
|
|
3868
3872
|
"shortcut.noSession": "请先选择一个会话",
|
|
3869
3873
|
"shortcut.noPicker": "目录选择器不可用",
|
|
3870
3874
|
"shortcut.directoryBusy": "正在选择或添加工作区",
|
|
@@ -3979,6 +3983,7 @@ window.__ModuleLoader__.load({
|
|
|
3979
3983
|
"defaultWorkspace.failed": "Unable to create default workspace. Use Choose workspace to select a folder.",
|
|
3980
3984
|
"group.ungrouped": "Ungrouped",
|
|
3981
3985
|
"session.new": "New Session",
|
|
3986
|
+
"session.untitled": "Untitled",
|
|
3982
3987
|
"shortcut.noSession": "Select a session first",
|
|
3983
3988
|
"shortcut.noPicker": "Directory picker unavailable",
|
|
3984
3989
|
"shortcut.directoryBusy": "Selecting or adding a workspace",
|
|
@@ -4227,7 +4232,13 @@ window.__ModuleLoader__.load({
|
|
|
4227
4232
|
}
|
|
4228
4233
|
});
|
|
4229
4234
|
const forkInjected = () => ({ forkSession: (sessionId) => {
|
|
4230
|
-
uiWorkspace.forkSession(sessionId
|
|
4235
|
+
uiWorkspace.forkSession(sessionId, (childId) => {
|
|
4236
|
+
ctx.get("productAnalytics")?.track("branch_session_click", {
|
|
4237
|
+
session_id: childId,
|
|
4238
|
+
parent_session_id: sessionId,
|
|
4239
|
+
click_position: "sidebar"
|
|
4240
|
+
});
|
|
4241
|
+
}).catch(() => {});
|
|
4231
4242
|
} });
|
|
4232
4243
|
const renameInjected = () => ({ requestSessionRename });
|
|
4233
4244
|
const renameDialogInjected = () => ({
|
|
@@ -67,7 +67,7 @@ export interface DirectoryFlowOwnerProps {
|
|
|
67
67
|
export interface SessionRowOwnerProps {
|
|
68
68
|
/** Session the row shows. */
|
|
69
69
|
sessionId: SessionId;
|
|
70
|
-
/** Row display title: persisted title,
|
|
70
|
+
/** Row display title: persisted title, or empty when the Session has none. */
|
|
71
71
|
displayTitle: string;
|
|
72
72
|
}
|
|
73
73
|
/** The row menu's open state as its owner holds it: the `useState` pair. */
|
|
@@ -1,20 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Workspace plugin, browser half. Two registrations: WorkspaceBrowser fills
|
|
3
|
-
* the sidebar shell's `sidebar.workspaces` hole (the whole browsing region),
|
|
4
|
-
* and WorkspacePicker fills the conversation hero's picker hole
|
|
5
|
-
* (`conversation.hero.workspace` — both hero forms). Both read real Host
|
|
6
|
-
* Workspaces through the global useWorkspaces hook, and each declares its
|
|
7
|
-
* own `single` directory-flow child hole for the composed picker package's
|
|
8
|
-
* client half. WorkspaceBrowser additionally declares the two Session row
|
|
9
|
-
* action lists, and this apply registers the shipped actions — pin, rename,
|
|
10
|
-
* fork, archive — into them the way any client plugin would, each with its
|
|
11
|
-
* own behavior, plus the rename dialog and the row-action notice into
|
|
12
|
-
* `shell.overlay` (see the contract module doc). It also declares two
|
|
13
|
-
* Session-row seats: the leading decoration a row renders only while its own
|
|
14
|
-
* primary state is idle, and the section the row's hover card renders between
|
|
15
|
-
* its relative time and its trailing status line. Export discipline:
|
|
16
|
-
* packages/client/AGENTS.md.
|
|
17
|
-
*/
|
|
18
1
|
import type { Context } from '@deepseek-ai/cordis';
|
|
19
2
|
import type { WorkspaceSnapshot } from '@deepseek-ai/dsh-api-workspace-controller/client';
|
|
20
3
|
import type { SnapshotSelectorHook } from '@deepseek-ai/dsh-client-ui-slots';
|
|
@@ -8,6 +8,7 @@ export declare const zh: {
|
|
|
8
8
|
'defaultWorkspace.failed': string;
|
|
9
9
|
'group.ungrouped': string;
|
|
10
10
|
'session.new': string;
|
|
11
|
+
'session.untitled': string;
|
|
11
12
|
'shortcut.noSession': string;
|
|
12
13
|
'shortcut.noPicker': string;
|
|
13
14
|
'shortcut.directoryBusy': string;
|
|
@@ -124,6 +125,7 @@ export declare const en: {
|
|
|
124
125
|
'defaultWorkspace.failed': string;
|
|
125
126
|
'group.ungrouped': string;
|
|
126
127
|
'session.new': string;
|
|
128
|
+
'session.untitled': string;
|
|
127
129
|
'shortcut.noSession': string;
|
|
128
130
|
'shortcut.noPicker': string;
|
|
129
131
|
'shortcut.directoryBusy': string;
|
|
@@ -26,9 +26,10 @@ export interface UiWorkspace {
|
|
|
26
26
|
/**
|
|
27
27
|
* Fork a Session without changing the current selection.
|
|
28
28
|
* @param sessionId - source Session.
|
|
29
|
-
* @
|
|
29
|
+
* @param onCreated - observer before the optional child-title update.
|
|
30
|
+
* @returns the child SessionId after creation and inherited-title increment.
|
|
30
31
|
*/
|
|
31
|
-
forkSession(sessionId: SessionId): Promise<
|
|
32
|
+
forkSession(sessionId: SessionId, onCreated?: (childId: SessionId) => void): Promise<SessionId>;
|
|
32
33
|
/**
|
|
33
34
|
* Resolve the reusable or newly created blank Session for a Workspace.
|
|
34
35
|
* @param workspaceId - target Workspace.
|
|
@@ -125,7 +126,7 @@ declare class UiWorkspaceService extends Service implements UiWorkspace {
|
|
|
125
126
|
private reuseBlank;
|
|
126
127
|
openSession(target: SessionTarget): void;
|
|
127
128
|
openWorkspace(workspaceId: WorkspaceId, beforeOpen?: (sessionId: SessionId) => void): Promise<void>;
|
|
128
|
-
forkSession(sessionId: SessionId): Promise<
|
|
129
|
+
forkSession(sessionId: SessionId, onCreated?: (childId: SessionId) => void): Promise<SessionId>;
|
|
129
130
|
startSession(workspaceId?: WorkspaceId): void;
|
|
130
131
|
archiveSession(sessionId: SessionId, options?: {
|
|
131
132
|
readonly stopActivity?: boolean;
|
|
@@ -10,7 +10,7 @@ export declare function RenameSessionMenuItem({ sessionId, displayTitle, useMenu
|
|
|
10
10
|
* one dialog per request (keyed by the Session, so a new request starts a
|
|
11
11
|
* fresh draft). Sessions have no client-side name-conflict rule (the host
|
|
12
12
|
* normalizes), and unlike Workspace rename an unchanged title is NOT
|
|
13
|
-
* blocked
|
|
13
|
+
* blocked. An unnamed Session starts with an empty draft and requires a name.
|
|
14
14
|
* @param props - the request hook, its settlement, the rename hop, and the locale seat.
|
|
15
15
|
* @returns the open dialog, or null.
|
|
16
16
|
*/
|
|
@@ -35,6 +35,7 @@ interface WorkspaceShortcutControls {
|
|
|
35
35
|
export declare function createWorkspaceShortcutControls(): WorkspaceShortcutControls;
|
|
36
36
|
/**
|
|
37
37
|
* Register navigation commands against the existing workspace owner.
|
|
38
|
+
* Rename requires a nonblank main Conversation with no modal obscuring it.
|
|
38
39
|
* @param ctx - plugin context with the shortcut, locale, and model services.
|
|
39
40
|
* @param navigation - session creation and forking from the pointer controls' navigation service.
|
|
40
41
|
* @param controls - browser-owned opening requests.
|
|
@@ -22,7 +22,7 @@ type SessionStatuses = SessionStatusSnapshot;
|
|
|
22
22
|
/** One top-level session row in a group or the flat list. */
|
|
23
23
|
export interface SessionNode {
|
|
24
24
|
id: SessionId;
|
|
25
|
-
/** Stored
|
|
25
|
+
/** Stored title, or empty; the renderer localizes blank and unnamed row labels. */
|
|
26
26
|
title: string;
|
|
27
27
|
/** The provisional blank session (renderer shows the localized New Session title). */
|
|
28
28
|
blank: boolean;
|
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.
|
|
4
|
+
"version": "0.2.0-rc.2",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -51,30 +51,31 @@
|
|
|
51
51
|
"@types/react": "~18.3.1",
|
|
52
52
|
"clsx": "^2.0.0",
|
|
53
53
|
"react": "^18.2.0",
|
|
54
|
+
"@deepseek-ai/dsh-agent": "0.2.0-rc.2",
|
|
55
|
+
"@deepseek-ai/dsh-api-session-controller": "0.2.0-rc.2",
|
|
56
|
+
"@deepseek-ai/dsh-api-workspace-controller": "0.2.0-rc.2",
|
|
57
|
+
"@deepseek-ai/dsh-client-connection": "0.2.0-rc.2",
|
|
54
58
|
"@deepseek-ai/cordis": "~4.0.4",
|
|
55
|
-
"@deepseek-ai/dsh-
|
|
56
|
-
"@deepseek-ai/dsh-
|
|
57
|
-
"@deepseek-ai/dsh-
|
|
58
|
-
"@deepseek-ai/dsh-
|
|
59
|
-
"@deepseek-ai/dsh-client-
|
|
60
|
-
"@deepseek-ai/dsh-client-
|
|
61
|
-
"@deepseek-ai/dsh-client-
|
|
62
|
-
"@deepseek-ai/dsh-client-
|
|
63
|
-
"@deepseek-ai/dsh-client-ui-
|
|
64
|
-
"@deepseek-ai/dsh-client-ui-
|
|
65
|
-
"@deepseek-ai/dsh-
|
|
66
|
-
"@deepseek-ai/dsh-
|
|
67
|
-
"@deepseek-ai/dsh-
|
|
68
|
-
"@deepseek-ai/dsh-
|
|
69
|
-
"@deepseek-ai/dsh-
|
|
70
|
-
"@deepseek-ai/dsh-
|
|
71
|
-
"@deepseek-ai/dsh-
|
|
72
|
-
"@deepseek-ai/dsh-
|
|
73
|
-
"@deepseek-ai/dsh-
|
|
74
|
-
"@deepseek-ai/dsh-
|
|
75
|
-
"@deepseek-ai/dsh-util-workspace-path": "0.1.7-rc.2",
|
|
76
|
-
"@deepseek-ai/dsh-client-shortcuts": "0.1.7-rc.2",
|
|
77
|
-
"@deepseek-ai/dsh-util-values": "0.1.7-rc.2"
|
|
59
|
+
"@deepseek-ai/dsh-client-locale": "0.2.0-rc.2",
|
|
60
|
+
"@deepseek-ai/dsh-client-store": "0.2.0-rc.2",
|
|
61
|
+
"@deepseek-ai/dsh-client-test-runtime": "0.2.0-rc.2",
|
|
62
|
+
"@deepseek-ai/dsh-client-ui-layout": "0.2.0-rc.2",
|
|
63
|
+
"@deepseek-ai/dsh-client-ui-primitives": "0.2.0-rc.2",
|
|
64
|
+
"@deepseek-ai/dsh-client-ui-session": "0.2.0-rc.2",
|
|
65
|
+
"@deepseek-ai/dsh-client-ui-renderer": "0.2.0-rc.2",
|
|
66
|
+
"@deepseek-ai/dsh-client-ui-conversation": "0.2.0-rc.2",
|
|
67
|
+
"@deepseek-ai/dsh-client-ui-sidebar": "0.2.0-rc.2",
|
|
68
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.2",
|
|
69
|
+
"@deepseek-ai/dsh-session": "0.2.0-rc.2",
|
|
70
|
+
"@deepseek-ai/dsh-subagent": "0.2.0-rc.2",
|
|
71
|
+
"@deepseek-ai/dsh-typert-protocol": "0.2.0-rc.2",
|
|
72
|
+
"@deepseek-ai/dsh-schedule": "0.2.0-rc.2",
|
|
73
|
+
"@deepseek-ai/dsh-util-values": "0.2.0-rc.2",
|
|
74
|
+
"@deepseek-ai/dsh-jobs": "0.2.0-rc.2",
|
|
75
|
+
"@deepseek-ai/dsh-util-workspace-path": "0.2.0-rc.2",
|
|
76
|
+
"@deepseek-ai/dsh-client-shortcuts": "0.2.0-rc.2",
|
|
77
|
+
"@deepseek-ai/dsh-client-product-analytics": "0.2.0-rc.2",
|
|
78
|
+
"@deepseek-ai/dsh-api-remotes": "0.2.0-rc.2"
|
|
78
79
|
},
|
|
79
80
|
"files": [
|
|
80
81
|
"lib/index.js",
|