@deepseek-ai/dsh-client-ui-workspace 0.1.1-rc.2 → 0.1.2-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 +94 -11
- package/README.zh.md +96 -13
- package/lib/client.js +425 -146
- package/lib/types/client/WorkspacePicker.d.ts +2 -2
- package/lib/types/client/contract/slots.d.ts +11 -4
- package/lib/types/client/index.d.ts +19 -2
- package/lib/types/client/locales.d.ts +2 -0
- package/lib/types/client/navigation.d.ts +82 -0
- package/lib/types/client/rows/WorkspaceBrowser.d.ts +8 -0
- package/lib/types/client/stores.d.ts +1 -1
- package/lib/types/client/subagent-lineage.d.ts +21 -0
- package/lib/types/client/tree.d.ts +23 -26
- package/package.json +26 -19
- package/lib/types/client/WorkspaceBrowser.d.ts +0 -8
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* occupant's own create-folder affordance already covers creating one.
|
|
10
10
|
*/
|
|
11
11
|
import type { ReactNode, RefObject } from 'react';
|
|
12
|
-
import type { WorkspaceId,
|
|
12
|
+
import type { WorkspaceId, WorkspaceSnapshot, WorkspaceView } from '@deepseek-ai/dsh-api-workspace-controller/client';
|
|
13
13
|
import type { SnapshotSelectorHook } from '@deepseek-ai/dsh-client-ui-slots';
|
|
14
14
|
import type { DirectoryFlowOwnerProps, WorkspacePickerProps } from './contract/slots.ts';
|
|
15
15
|
/** Core flow props: the owner supplies popover control and pick semantics. */
|
|
@@ -21,7 +21,7 @@ export interface WorkspacePickFlowProps {
|
|
|
21
21
|
/** The anchor button element — the popover's placement anchor. */
|
|
22
22
|
anchorRef?: RefObject<HTMLElement | null> | undefined;
|
|
23
23
|
/** Selector hook over the workspace list (framework standard hook). */
|
|
24
|
-
useWorkspaces: <S>(selector: (state:
|
|
24
|
+
useWorkspaces: <S>(selector: (state: WorkspaceSnapshot) => S) => S;
|
|
25
25
|
/** Adopt a picked host directory as a real Workspace. */
|
|
26
26
|
createWorkspace: (input: {
|
|
27
27
|
path: string;
|
|
@@ -22,9 +22,11 @@
|
|
|
22
22
|
* and a hole has exactly one declaring entry — they carry the same owner
|
|
23
23
|
* contract and the same occupant.
|
|
24
24
|
*/
|
|
25
|
-
import type { HostDescriptionSource } from '@deepseek-ai/dsh-client-connection/client';
|
|
26
25
|
import type { HostObservable, PropsHooks, PropsLocale, PropsRenderSlots, PropsRuntime, PropsStore } from '@deepseek-ai/dsh-client-ui-slots';
|
|
27
|
-
import type {
|
|
26
|
+
import type { SessionSearchResultItem } from '@deepseek-ai/dsh-api-session-controller/client';
|
|
27
|
+
import type { RemoteHostFacts } from '@deepseek-ai/dsh-api-remotes/client';
|
|
28
|
+
import type { WorkspaceId, WorkspaceView } from '@deepseek-ai/dsh-api-workspace-controller/client';
|
|
29
|
+
import type { SessionId } from '@deepseek-ai/dsh-session/types';
|
|
28
30
|
import type { createWorkspaceViewStore } from '../stores.ts';
|
|
29
31
|
/**
|
|
30
32
|
* Owner share of the directory-flow holes: the complete conversation between
|
|
@@ -83,8 +85,13 @@ export type DirectoryPickingHooks = PropsHooks<DirectoryPickingInjected['hooks']
|
|
|
83
85
|
*/
|
|
84
86
|
export type WorkspaceBrowserInjected = {
|
|
85
87
|
hooks: DirectoryPickingInjected['hooks'] & {
|
|
86
|
-
/**
|
|
87
|
-
|
|
88
|
+
/**
|
|
89
|
+
* Fixed Host facts, reached through a hook rather than injected as values:
|
|
90
|
+
* the renderer memoizes an entry's inject result for the registration's
|
|
91
|
+
* lifetime, so facts read there would freeze at whatever the first render
|
|
92
|
+
* saw. Select the field the surface needs (`info => info.home`).
|
|
93
|
+
*/
|
|
94
|
+
hostInfo: HostObservable<RemoteHostFacts>;
|
|
88
95
|
};
|
|
89
96
|
/**
|
|
90
97
|
* Start a New Session in a Workspace: reuse-or-create its blank session and
|
|
@@ -1,8 +1,25 @@
|
|
|
1
|
-
|
|
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 (see the contract module doc). Export discipline:
|
|
9
|
+
* packages/client/AGENTS.md.
|
|
10
|
+
*/
|
|
11
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
12
|
+
import type { WorkspaceSnapshot } from '@deepseek-ai/dsh-api-workspace-controller/client';
|
|
13
|
+
import type { SnapshotSelectorHook } from '@deepseek-ai/dsh-client-ui-slots';
|
|
2
14
|
import { type WorkspaceKey } from './locales.ts';
|
|
15
|
+
export type { UiWorkspace } from './navigation.ts';
|
|
3
16
|
export type { DirectoryFlowOwnerProps, DirectoryFlowSlotName, DirectoryPickingHooks, DirectoryPickingInjected, WorkspaceBrowserInjected, WorkspaceBrowserProps, WorkspacePickerInjected, WorkspacePickerProps, } from './contract/slots.ts';
|
|
4
17
|
export type { WorkspaceKey } from './locales.ts';
|
|
5
18
|
declare module '@deepseek-ai/dsh-client-ui-slots' {
|
|
19
|
+
interface GlobalStandardProps {
|
|
20
|
+
/** Selector hook over the pure Workspace Controller snapshot. */
|
|
21
|
+
useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>;
|
|
22
|
+
}
|
|
6
23
|
interface LocaleNamespaceMap {
|
|
7
24
|
/** The workspace browsing region and pick/create flow copy. */
|
|
8
25
|
workspace: WorkspaceKey;
|
|
@@ -23,5 +40,5 @@ export declare const inject: string[];
|
|
|
23
40
|
* framework's global hooks.
|
|
24
41
|
* @param ctx - client root context.
|
|
25
42
|
*/
|
|
26
|
-
export declare function apply(ctx:
|
|
43
|
+
export declare function apply(ctx: Context): void;
|
|
27
44
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -57,6 +57,7 @@ export declare const zh: {
|
|
|
57
57
|
'status.planReview': string;
|
|
58
58
|
'status.waitingAnswer': string;
|
|
59
59
|
'status.completed': string;
|
|
60
|
+
'schedule.active': string;
|
|
60
61
|
'hover.created': string;
|
|
61
62
|
'hover.copied': string;
|
|
62
63
|
'date.ymd': string;
|
|
@@ -124,6 +125,7 @@ export declare const en: {
|
|
|
124
125
|
'status.planReview': string;
|
|
125
126
|
'status.waitingAnswer': string;
|
|
126
127
|
'status.completed': string;
|
|
128
|
+
'schedule.active': string;
|
|
127
129
|
'hover.created': string;
|
|
128
130
|
'hover.copied': string;
|
|
129
131
|
'date.ymd': string;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/** Workspace archive and directory UI capability. */
|
|
2
|
+
import { Service, type Context } from '@deepseek-ai/cordis';
|
|
3
|
+
import type { ClientRemote, DirectoryListing, RemoteFailure } from '@deepseek-ai/dsh-api-remotes/client';
|
|
4
|
+
import type { ISessions } from '@deepseek-ai/dsh-api-session-controller/client';
|
|
5
|
+
import type { IWorkspaces, WorkspaceId } from '@deepseek-ai/dsh-api-workspace-controller/client';
|
|
6
|
+
import type { SessionId } from '@deepseek-ai/dsh-session/types';
|
|
7
|
+
/** Workspace archive and directory operations consumed by Client UI domains. */
|
|
8
|
+
export interface UiWorkspace {
|
|
9
|
+
/**
|
|
10
|
+
* Resolve the reusable or newly created blank Session for a Workspace.
|
|
11
|
+
* @param workspaceId - target Workspace.
|
|
12
|
+
* @returns a Session already addressable through the Session Controller.
|
|
13
|
+
*/
|
|
14
|
+
connectWorkspace(workspaceId: WorkspaceId): Promise<SessionId>;
|
|
15
|
+
/**
|
|
16
|
+
* Start a New Session flow and navigate to its Session.
|
|
17
|
+
* @param workspaceId - explicit target; absent inherits the current or most recent Workspace.
|
|
18
|
+
*/
|
|
19
|
+
startSession(workspaceId?: WorkspaceId): void;
|
|
20
|
+
/**
|
|
21
|
+
* Archive a Session and clear it when it is the current selection.
|
|
22
|
+
* @param sessionId - Session to archive.
|
|
23
|
+
*/
|
|
24
|
+
archiveSession(sessionId: SessionId): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Open the Host-native directory picker.
|
|
27
|
+
* @returns the selected directory, or null when cancelled.
|
|
28
|
+
*/
|
|
29
|
+
pickDirectory(): Promise<string | null>;
|
|
30
|
+
/**
|
|
31
|
+
* List one Host directory level.
|
|
32
|
+
* @param path - directory path; absent selects the Host home.
|
|
33
|
+
* @param signal - cancellation for a superseded scan.
|
|
34
|
+
* @returns directory entries and breadcrumb ancestry.
|
|
35
|
+
*/
|
|
36
|
+
listDirectory(path?: string, signal?: AbortSignal): Promise<DirectoryListing>;
|
|
37
|
+
/**
|
|
38
|
+
* Create a child directory.
|
|
39
|
+
* @param path - existing parent directory.
|
|
40
|
+
* @param name - child directory name.
|
|
41
|
+
* @returns created absolute path.
|
|
42
|
+
*/
|
|
43
|
+
createDirectory(path: string, name: string): Promise<string>;
|
|
44
|
+
}
|
|
45
|
+
declare module '@deepseek-ai/cordis' {
|
|
46
|
+
interface Context {
|
|
47
|
+
/** Cross-Controller Workspace navigation and directory UI capability. */
|
|
48
|
+
uiWorkspace: UiWorkspace;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/** Structured directory failure exposed to directory UI consumers. */
|
|
52
|
+
export declare class DirectoryBrowseError extends Error {
|
|
53
|
+
readonly rpcError: RemoteFailure;
|
|
54
|
+
readonly name = "DirectoryBrowseError";
|
|
55
|
+
/** @param rpcError - Host directory business failure. */
|
|
56
|
+
constructor(rpcError: RemoteFailure);
|
|
57
|
+
}
|
|
58
|
+
/** Implements Workspace archive and directory UI operations. */
|
|
59
|
+
declare class UiWorkspaceService extends Service implements UiWorkspace {
|
|
60
|
+
private readonly directoryPicker;
|
|
61
|
+
private readonly workspaces;
|
|
62
|
+
private readonly sessions;
|
|
63
|
+
private readonly connecting;
|
|
64
|
+
/**
|
|
65
|
+
* @param ctx - Client root Context.
|
|
66
|
+
* @param directoryPicker - the directory-picking Remote namespace.
|
|
67
|
+
* @param workspaces - pure Workspace Controller.
|
|
68
|
+
* @param sessions - pure Session Controller.
|
|
69
|
+
*/
|
|
70
|
+
constructor(ctx: Context, directoryPicker: ClientRemote['directoryPicker'], workspaces: IWorkspaces, sessions: ISessions);
|
|
71
|
+
connectWorkspace(workspaceId: WorkspaceId): Promise<SessionId>;
|
|
72
|
+
startSession(workspaceId?: WorkspaceId): void;
|
|
73
|
+
archiveSession(sessionId: SessionId): Promise<void>;
|
|
74
|
+
pickDirectory(): Promise<string | null>;
|
|
75
|
+
listDirectory(path?: string, signal?: AbortSignal): Promise<DirectoryListing>;
|
|
76
|
+
createDirectory(path: string, name: string): Promise<string>;
|
|
77
|
+
private watchNavigation;
|
|
78
|
+
/** @returns true when an archived current selection was cleared. */
|
|
79
|
+
private clearArchivedCurrent;
|
|
80
|
+
}
|
|
81
|
+
export { UiWorkspaceService };
|
|
82
|
+
//# sourceMappingURL=navigation.d.ts.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { WorkspaceBrowserProps } from '../contract/slots.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Render the browsing region.
|
|
4
|
+
* @param props - composed slot props (shell owner share + store + injected actions).
|
|
5
|
+
* @returns the region element tree.
|
|
6
|
+
*/
|
|
7
|
+
export declare function WorkspaceBrowser({ wide, expandSidebar, useSessions, useSessionPendingInteraction, useWorkspaces, useStore, actions, startSession, open, renameSession, forkSession, renameWorkspace, deleteWorkspace, insertWorkspaceBefore, archiveSession, insertSessionBefore, createWorkspace, searchSessions, searchResultLimit, useDirectoryFlow, useHostInfo, renderSlot, t, }: WorkspaceBrowserProps): import("react").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=WorkspaceBrowser.d.ts.map
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* register() receives the factory and the browser derives its PropsStore
|
|
6
6
|
* share from the return type.
|
|
7
7
|
*/
|
|
8
|
-
import { type EngineStoreHandle } from '@deepseek-ai/dsh-client-
|
|
8
|
+
import { type EngineStoreHandle } from '@deepseek-ai/dsh-client-store';
|
|
9
9
|
/** Browser-local order account for the hierarchy-free flat Session list. */
|
|
10
10
|
export declare const FLAT_SESSION_ORDER_KEY = "__flat_session_order__";
|
|
11
11
|
/** Session-list grouping mode: workspace sections or one flat recency list. */
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** UI Workspace-owned projection of descendant counts from Session summaries. */
|
|
2
|
+
import type { SessionId } from '@deepseek-ai/dsh-session/types';
|
|
3
|
+
interface LineageEntry {
|
|
4
|
+
readonly id: SessionId;
|
|
5
|
+
readonly parentId?: SessionId;
|
|
6
|
+
readonly origin?: 'subagent';
|
|
7
|
+
readonly running: boolean;
|
|
8
|
+
}
|
|
9
|
+
/** Descendant counts for one possible parent Session. */
|
|
10
|
+
export interface SubagentDescendantSummary {
|
|
11
|
+
readonly count: number;
|
|
12
|
+
readonly runningCount: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Index uninterrupted subagent descendants under each ancestor.
|
|
16
|
+
* @param summaries - Session summaries keyed by id.
|
|
17
|
+
* @returns descendant totals keyed by possible parent id.
|
|
18
|
+
*/
|
|
19
|
+
export declare function indexSubagentDescendants(summaries: Readonly<Record<SessionId, LineageEntry>>): ReadonlyMap<SessionId, SubagentDescendantSummary>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=subagent-lineage.d.ts.map
|
|
@@ -3,11 +3,15 @@
|
|
|
3
3
|
* Unassigned Sessions trail under Ungrouped; only the selected blank Session
|
|
4
4
|
* remains visible.
|
|
5
5
|
*/
|
|
6
|
-
import { type
|
|
6
|
+
import { type SessionListState, type SessionSearchResultItem } from '@deepseek-ai/dsh-api-session-controller/client';
|
|
7
|
+
import type { WorkspaceId, WorkspaceView } from '@deepseek-ai/dsh-api-workspace-controller/client';
|
|
8
|
+
import type { SessionPendingInteractionBase } from '@deepseek-ai/dsh-client-ui-session/client';
|
|
9
|
+
import type { SessionId } from '@deepseek-ai/dsh-session/types';
|
|
7
10
|
/** Group key for Sessions outside every Workspace. */
|
|
8
11
|
export declare const UNGROUPED_KEY = "";
|
|
9
|
-
/**
|
|
10
|
-
export
|
|
12
|
+
/** Pending interaction kinds with dedicated Workspace-row presentation. */
|
|
13
|
+
export type SessionPendingInteractionStatus = 'approval' | 'plan-review' | 'question';
|
|
14
|
+
type SessionPendingInteractions = ReadonlyMap<SessionId, SessionPendingInteractionBase>;
|
|
11
15
|
/** One top-level session row in a group or the flat list. */
|
|
12
16
|
export interface SessionNode {
|
|
13
17
|
id: SessionId;
|
|
@@ -15,13 +19,15 @@ export interface SessionNode {
|
|
|
15
19
|
title: string;
|
|
16
20
|
/** The provisional blank session (renderer shows the localized New Session title). */
|
|
17
21
|
blank: boolean;
|
|
18
|
-
/**
|
|
19
|
-
pendingInteraction?:
|
|
22
|
+
/** A Session-scoped UI consumer is awaiting this user. */
|
|
23
|
+
pendingInteraction?: SessionPendingInteractionStatus;
|
|
20
24
|
running: boolean;
|
|
21
25
|
/** Running descendants connected through uninterrupted subagent-origin lineage. */
|
|
22
26
|
runningSubagentCount: number;
|
|
23
27
|
/** Finished running while not selected and not yet opened (the green "done" reminder dot). */
|
|
24
28
|
completed: boolean;
|
|
29
|
+
/** The current list projection contains at least one active Schedule record. */
|
|
30
|
+
hasActiveSchedule: boolean;
|
|
25
31
|
updatedAt: number;
|
|
26
32
|
}
|
|
27
33
|
/** Session order selected by the Workspace browser. */
|
|
@@ -49,13 +55,15 @@ export interface SearchResultNode {
|
|
|
49
55
|
id: SessionId;
|
|
50
56
|
title: string;
|
|
51
57
|
workspace: string;
|
|
52
|
-
/**
|
|
53
|
-
pendingInteraction?:
|
|
58
|
+
/** A Session-scoped UI consumer is awaiting this user. */
|
|
59
|
+
pendingInteraction?: SessionPendingInteractionStatus;
|
|
54
60
|
running: boolean;
|
|
55
61
|
/** Running descendants connected through uninterrupted subagent-origin lineage. */
|
|
56
62
|
runningSubagentCount: number;
|
|
57
63
|
/** Finished running while not selected and not yet opened (the green "done" reminder dot). */
|
|
58
64
|
completed: boolean;
|
|
65
|
+
/** The current list projection contains at least one active Schedule record. */
|
|
66
|
+
hasActiveSchedule: boolean;
|
|
59
67
|
snippet?: string;
|
|
60
68
|
}
|
|
61
69
|
/** Bounded merged search projection plus the refine-query hint bit. */
|
|
@@ -73,7 +81,7 @@ export interface TreeView {
|
|
|
73
81
|
* Directory display label: basename of the path (both separators accepted).
|
|
74
82
|
* Ungrouped-bucket fallback for surfaces without a workspace title.
|
|
75
83
|
* @param cwd - directory path, or undefined for the ungrouped bucket.
|
|
76
|
-
* @returns basename, the raw cwd when it has no basename, or
|
|
84
|
+
* @returns basename, the raw cwd when it has no basename, or an empty ungrouped marker.
|
|
77
85
|
*/
|
|
78
86
|
export declare function workspaceLabel(cwd: string | undefined): string;
|
|
79
87
|
/**
|
|
@@ -87,10 +95,11 @@ export declare function workspaceLabel(cwd: string | undefined): string;
|
|
|
87
95
|
* @param list - sessions list snapshot (`current` feeds containsCurrent).
|
|
88
96
|
* @param workspaces - real workspaces in stable Host order.
|
|
89
97
|
* @param archivedSessionIds - registry-global archive set.
|
|
98
|
+
* @param pendingInteractions - pending UI interactions by Session.
|
|
90
99
|
* @param view - local expansion arrays.
|
|
91
100
|
* @returns group sections in render order.
|
|
92
101
|
*/
|
|
93
|
-
export declare function deriveGroups(list: SessionListState, workspaces: readonly WorkspaceView[], archivedSessionIds: readonly SessionId[], view: TreeView): GroupNode[];
|
|
102
|
+
export declare function deriveGroups(list: SessionListState, workspaces: readonly WorkspaceView[], archivedSessionIds: readonly SessionId[], pendingInteractions: SessionPendingInteractions, view: TreeView): GroupNode[];
|
|
94
103
|
/**
|
|
95
104
|
* Derive the flat session list ("In one list" mode): every session — fork
|
|
96
105
|
* children included — as a top-level row, strictly newest-first. No grouping,
|
|
@@ -98,16 +107,10 @@ export declare function deriveGroups(list: SessionListState, workspaces: readonl
|
|
|
98
107
|
* (see {@link deriveSearchResults}).
|
|
99
108
|
* @param list - sessions list snapshot.
|
|
100
109
|
* @param archivedSessionIds - registry-global archive set.
|
|
110
|
+
* @param pendingInteractions - pending UI interactions by Session.
|
|
101
111
|
* @returns flat rows in render order.
|
|
102
112
|
*/
|
|
103
|
-
export declare function deriveFlat(list: SessionListState, archivedSessionIds: readonly SessionId[]): SessionNode[];
|
|
104
|
-
/** Relative-time bucket of a session row's trailing label. */
|
|
105
|
-
export type RelativeTimeUnit = 'now' | 'minutes' | 'hours' | 'days' | 'months' | 'years';
|
|
106
|
-
/** Structured relative time: the bucket plus its magnitude (0 for 'now'). */
|
|
107
|
-
export interface RelativeTime {
|
|
108
|
-
unit: RelativeTimeUnit;
|
|
109
|
-
n: number;
|
|
110
|
-
}
|
|
113
|
+
export declare function deriveFlat(list: SessionListState, archivedSessionIds: readonly SessionId[], pendingInteractions: SessionPendingInteractions): SessionNode[];
|
|
111
114
|
/**
|
|
112
115
|
* Merge immediate title/Workspace substring matches with ranked Host content
|
|
113
116
|
* matches. Local rows lead newest-first, content-only rows retain backend
|
|
@@ -116,20 +119,14 @@ export interface RelativeTime {
|
|
|
116
119
|
* @param workspaces - Workspace membership and display labels.
|
|
117
120
|
* @param query - caller text; surrounding whitespace is ignored.
|
|
118
121
|
* @param archivedSessionIds - registry-global archive set (members never match).
|
|
122
|
+
* @param pendingInteractions - pending UI interactions by Session.
|
|
119
123
|
* @param content - ranked Host content-search page.
|
|
120
124
|
* @param limit - protocol-owned maximum merged row count.
|
|
121
125
|
* @returns bounded deduplicated flat rows and a refine-query hint bit.
|
|
122
126
|
*/
|
|
123
|
-
export declare function deriveSearchResults(list: SessionListState, workspaces: readonly WorkspaceView[], query: string, archivedSessionIds: readonly SessionId[], content: {
|
|
127
|
+
export declare function deriveSearchResults(list: SessionListState, workspaces: readonly WorkspaceView[], query: string, archivedSessionIds: readonly SessionId[], pendingInteractions: SessionPendingInteractions, content: {
|
|
124
128
|
items: readonly SessionSearchResultItem[];
|
|
125
129
|
hasMore: boolean;
|
|
126
130
|
}, limit: number): SearchResultSet;
|
|
127
|
-
|
|
128
|
-
* Compact relative time for session rows, as a structured bucket the
|
|
129
|
-
* renderer localizes ("now"/"5min"/"3h"/"2d"/"4mo"/"1y" in en).
|
|
130
|
-
* @param updatedAt - epoch ms of the session's last activity.
|
|
131
|
-
* @param now - current epoch ms (injected for pure rendering).
|
|
132
|
-
* @returns the row's trailing time bucket and magnitude.
|
|
133
|
-
*/
|
|
134
|
-
export declare function relativeTime(updatedAt: number, now: number): RelativeTime;
|
|
131
|
+
export {};
|
|
135
132
|
//# sourceMappingURL=tree.d.ts.map
|
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.1.
|
|
4
|
+
"version": "0.1.2-alpha.2",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -32,10 +32,14 @@
|
|
|
32
32
|
"dsh": {
|
|
33
33
|
"client": {
|
|
34
34
|
"inject": [
|
|
35
|
+
"@deepseek-ai/dsh-api-remotes",
|
|
36
|
+
"@deepseek-ai/dsh-api-session-controller",
|
|
37
|
+
"@deepseek-ai/dsh-api-workspace-controller",
|
|
35
38
|
"@deepseek-ai/dsh-client-connection",
|
|
36
39
|
"@deepseek-ai/dsh-client-locale",
|
|
37
|
-
"@deepseek-ai/dsh-client-runtime",
|
|
38
40
|
"@deepseek-ai/dsh-client-ui-conversation",
|
|
41
|
+
"@deepseek-ai/dsh-client-ui-renderer",
|
|
42
|
+
"@deepseek-ai/dsh-client-ui-session",
|
|
39
43
|
"@deepseek-ai/dsh-client-ui-sidebar"
|
|
40
44
|
],
|
|
41
45
|
"platform": "web"
|
|
@@ -46,27 +50,30 @@
|
|
|
46
50
|
"clsx": "^2.0.0"
|
|
47
51
|
},
|
|
48
52
|
"peerDependencies": {
|
|
49
|
-
"@deepseek-ai/
|
|
50
|
-
"@deepseek-ai/dsh-client-locale": "^0.1.1-rc.2",
|
|
51
|
-
"@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.2",
|
|
52
|
-
"@deepseek-ai/cordis": "^4.0.1",
|
|
53
|
-
"@deepseek-ai/dsh-invariants": "^0.1.1-rc.2",
|
|
54
|
-
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.1-rc.2",
|
|
55
|
-
"@deepseek-ai/dsh-client-ui-sidebar": "^0.1.1-rc.2"
|
|
53
|
+
"@deepseek-ai/cordis": "^4.0.2"
|
|
56
54
|
},
|
|
57
55
|
"devDependencies": {
|
|
58
56
|
"@types/react": "~18.3.1",
|
|
59
57
|
"react": "^18.2.0",
|
|
60
|
-
"@deepseek-ai/dsh-
|
|
61
|
-
"@deepseek-ai/dsh-
|
|
62
|
-
"@deepseek-ai/dsh-
|
|
63
|
-
"@deepseek-ai/dsh-client-
|
|
64
|
-
"@deepseek-ai/dsh-client-
|
|
65
|
-
"@deepseek-ai/dsh-client-
|
|
66
|
-
"@deepseek-ai/dsh-client-ui-
|
|
67
|
-
"@deepseek-ai/dsh-client-ui-
|
|
68
|
-
"@deepseek-ai/dsh-
|
|
69
|
-
"@deepseek-ai/
|
|
58
|
+
"@deepseek-ai/dsh-api-remotes": "^0.1.2-alpha.2",
|
|
59
|
+
"@deepseek-ai/dsh-api-session-controller": "^0.1.2-alpha.2",
|
|
60
|
+
"@deepseek-ai/dsh-api-workspace-controller": "^0.1.2-alpha.2",
|
|
61
|
+
"@deepseek-ai/dsh-client-connection": "^0.1.2-alpha.2",
|
|
62
|
+
"@deepseek-ai/dsh-client-locale": "^0.1.2-alpha.2",
|
|
63
|
+
"@deepseek-ai/dsh-client-store": "^0.1.2-alpha.2",
|
|
64
|
+
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.2-alpha.2",
|
|
65
|
+
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.2-alpha.2",
|
|
66
|
+
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.2-alpha.2",
|
|
67
|
+
"@deepseek-ai/dsh-client-ui-session": "^0.1.2-alpha.2",
|
|
68
|
+
"@deepseek-ai/dsh-client-ui-sidebar": "^0.1.2-alpha.2",
|
|
69
|
+
"@deepseek-ai/dsh-client-ui-slots": "^0.1.2-alpha.2",
|
|
70
|
+
"@deepseek-ai/dsh-invariants": "^0.1.2-alpha.2",
|
|
71
|
+
"@deepseek-ai/dsh-schedule": "^0.1.2-alpha.2",
|
|
72
|
+
"@deepseek-ai/dsh-util-workspace-path": "^0.1.2-alpha.2",
|
|
73
|
+
"@deepseek-ai/cordis": "^4.0.2",
|
|
74
|
+
"@deepseek-ai/dsh-client-test-runtime": "^0.1.2-alpha.2",
|
|
75
|
+
"@deepseek-ai/dsh-session": "^0.1.2-alpha.2",
|
|
76
|
+
"@deepseek-ai/dsh-typert-protocol": "^0.1.2-alpha.2"
|
|
70
77
|
},
|
|
71
78
|
"files": [
|
|
72
79
|
"lib/index.js",
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { WorkspaceBrowserProps } from './contract/slots.ts';
|
|
2
|
-
/**
|
|
3
|
-
* Render the browsing region.
|
|
4
|
-
* @param props - composed slot props (shell owner share + store + injected actions).
|
|
5
|
-
* @returns the region element tree.
|
|
6
|
-
*/
|
|
7
|
-
export declare function WorkspaceBrowser({ wide, expandSidebar, useSessions, useWorkspaces, useStore, actions, startSession, open, renameSession, forkSession, renameWorkspace, deleteWorkspace, insertWorkspaceBefore, archiveSession, insertSessionBefore, createWorkspace, searchSessions, searchResultLimit, useDirectoryFlow, useHostDescription, renderSlot, t, }: WorkspaceBrowserProps): import("react").JSX.Element;
|
|
8
|
-
//# sourceMappingURL=WorkspaceBrowser.d.ts.map
|