@deepseek-ai/dsh-client-ui-conversation 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 +6 -4
- package/README.zh.md +6 -4
- package/lib/client.js +266 -127
- package/lib/types/client/contract/input.d.ts +1 -1
- package/lib/types/client/contract/records.d.ts +4 -3
- package/lib/types/client/contract/request-inspection.d.ts +43 -9
- package/lib/types/client/contract/slots.d.ts +29 -4
- package/lib/types/client/contract/system-prompt.d.ts +35 -0
- package/lib/types/client/conversation/assembly.d.ts +13 -3
- package/lib/types/client/index.d.ts +3 -2
- package/lib/types/client/input/submission-policy.d.ts +22 -17
- package/lib/types/client/locales.d.ts +4 -0
- package/lib/types/client/skeleton/ConversationPanel.d.ts +9 -0
- package/lib/types/client/skeleton/InputBar.d.ts +1 -1
- package/package.json +36 -36
|
@@ -239,7 +239,7 @@ export interface ComposerKeyboard {
|
|
|
239
239
|
readonly snapshot: InputState;
|
|
240
240
|
/** The shell-owned Lexical editor the composer binds its contenteditable to. */
|
|
241
241
|
readonly editor: LexicalEditor;
|
|
242
|
-
/** Submit with an explicit delivery mode resolved by the
|
|
242
|
+
/** Submit with an explicit delivery mode resolved by the submission policy (Enter gestures and the primary Send button). */
|
|
243
243
|
submit(mode: InputSubmitMode): void;
|
|
244
244
|
/**
|
|
245
245
|
* Steer every still-pending queued message into the running turn (the
|
|
@@ -200,9 +200,10 @@ export interface CompactionSummaryNode {
|
|
|
200
200
|
* Fallback for surface events this UI version does not know: the documented
|
|
201
201
|
* default arm of `SessionEventMap`, which is merge-extensible, so the
|
|
202
202
|
* projection's switch cannot end in `assertNever`. No event produces this node
|
|
203
|
-
* because `isAppendSurfaceEvent` admits only the
|
|
204
|
-
* `SurfaceEventType`, and each has its own arm
|
|
205
|
-
*
|
|
203
|
+
* because `isAppendSurfaceEvent` admits only the four types in core's
|
|
204
|
+
* `SurfaceEventType`, and each has its own arm (`system/message` is claimed by
|
|
205
|
+
* a Chat Definition that renders no transcript row) — and it exists so widening
|
|
206
|
+
* that set core-side degrades to a raw row instead of dropping the event silently.
|
|
206
207
|
*/
|
|
207
208
|
export interface UnknownSurfaceNode {
|
|
208
209
|
kind: 'unknown';
|
|
@@ -2,20 +2,51 @@ import type { ContentBlock, ToolSchema } from '@deepseek-ai/dsh-llm/types';
|
|
|
2
2
|
import type { SessionEvent } from '@deepseek-ai/dsh-session/types';
|
|
3
3
|
import type { AssistantProvenanceView, AssistantRequestConfig } from './records.ts';
|
|
4
4
|
export type { AssistantProvenanceView, AssistantRequestConfig, } from './records.ts';
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* Complete model-visible request state in force for an ordinary generation:
|
|
7
|
+
* the `request/header` config and tools plus the system prompt held by the
|
|
8
|
+
* current `system/message` surface node.
|
|
9
|
+
*/
|
|
6
10
|
export interface ConversationPromptSnapshot {
|
|
7
11
|
/** Provider/model and sampling configuration from the effective request header. */
|
|
8
12
|
config: AssistantRequestConfig;
|
|
9
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* Rendered text of the `system/message` surface node in force for the
|
|
15
|
+
* request; empty when the surface has no system prompt or the node lies
|
|
16
|
+
* outside the loaded history window.
|
|
17
|
+
*/
|
|
10
18
|
system: string;
|
|
11
19
|
/** Complete tool catalog sent with the request, including tools that were never called. */
|
|
12
20
|
tools: readonly ToolSchema[];
|
|
13
21
|
}
|
|
14
|
-
/**
|
|
22
|
+
/** Effective prompt or introduced system node, anchored at the event that establishes it. */
|
|
23
|
+
export interface SystemPromptNode {
|
|
24
|
+
/** Sequence of the system event or replacement that establishes this prompt. */
|
|
25
|
+
seq: number;
|
|
26
|
+
/** Unix epoch ms of that event. */
|
|
27
|
+
time: number;
|
|
28
|
+
/** Turn the loop committed the node in. */
|
|
29
|
+
turn: number;
|
|
30
|
+
/** Step the loop committed the node in. */
|
|
31
|
+
step: number;
|
|
32
|
+
/** Rendered system prompt text; empty records "no system prompt". */
|
|
33
|
+
text: string;
|
|
34
|
+
/**
|
|
35
|
+
* True for a prompt appended after an earlier loaded system node: an
|
|
36
|
+
* in-history update the model reads at this position, presented where it
|
|
37
|
+
* was committed rather than by the next request header.
|
|
38
|
+
*/
|
|
39
|
+
update: boolean;
|
|
40
|
+
}
|
|
41
|
+
/** System/tool change introduced while preparing one ordinary request, or by an in-history prompt update. */
|
|
15
42
|
export interface RequestPromptChange {
|
|
16
|
-
/**
|
|
43
|
+
/**
|
|
44
|
+
* Sequence of the event that introduced this state: the `system/message`
|
|
45
|
+
* node when it introduced, replaced, or updated the system prompt, otherwise the
|
|
46
|
+
* `request/header` event.
|
|
47
|
+
*/
|
|
17
48
|
seq: number;
|
|
18
|
-
/** Unix epoch ms
|
|
49
|
+
/** Unix epoch ms of that event. */
|
|
19
50
|
time: number;
|
|
20
51
|
/** How the model-visible prompt differs from the previous recorded state. */
|
|
21
52
|
kind: 'initial' | 'system' | 'tools' | 'system-and-tools';
|
|
@@ -24,7 +55,7 @@ export interface RequestPromptChange {
|
|
|
24
55
|
}
|
|
25
56
|
/** Canonical prompt snapshot and any model-visible change introduced by one request header. */
|
|
26
57
|
export interface RequestPromptInspection {
|
|
27
|
-
/** Complete prompt state
|
|
58
|
+
/** Complete prompt state in force for the header's request. */
|
|
28
59
|
prompt: ConversationPromptSnapshot;
|
|
29
60
|
/** System/tool change relative to the preceding loaded header. */
|
|
30
61
|
change?: RequestPromptChange;
|
|
@@ -34,14 +65,17 @@ export interface RequestPromptInspection {
|
|
|
34
65
|
* Trajectory Definitions receive it from the uiConversation service because a
|
|
35
66
|
* client bundle cannot value-import another plugin's module.
|
|
36
67
|
*/
|
|
37
|
-
export type RequestPromptInspector = (previous: ConversationPromptSnapshot | undefined, event: SessionEvent<'request/header'
|
|
68
|
+
export type RequestPromptInspector = (previous: ConversationPromptSnapshot | undefined, event: SessionEvent<'request/header'>, system: SystemPromptNode | undefined) => RequestPromptInspection;
|
|
38
69
|
/**
|
|
39
|
-
* Canonicalize one request header
|
|
70
|
+
* Canonicalize one request header against the system node in force and
|
|
71
|
+
* classify the model-visible prompt change.
|
|
40
72
|
* @param previous - Prompt from the preceding loaded request header, when available.
|
|
41
73
|
* @param event - Durable full request header to inspect.
|
|
74
|
+
* @param system - Effective nonempty system prompt after loaded surface replacements; empty when removed.
|
|
75
|
+
* An in-history update already presented its text at its own position, so the header reports no system change for it.
|
|
42
76
|
* @returns The canonical prompt and an initial/system/tool change when it can be established.
|
|
43
77
|
*/
|
|
44
|
-
export declare function inspectRequestPrompt(previous: ConversationPromptSnapshot | undefined, event: SessionEvent<'request/header'
|
|
78
|
+
export declare function inspectRequestPrompt(previous: ConversationPromptSnapshot | undefined, event: SessionEvent<'request/header'>, system: SystemPromptNode | undefined): RequestPromptInspection;
|
|
45
79
|
/** Lifecycle fields shared by ordinary generation and compaction requests. */
|
|
46
80
|
interface RequestViewBase {
|
|
47
81
|
/** Sequence that opened the operation represented by this request. */
|
|
@@ -12,7 +12,7 @@ import type { WorkspaceId } from '@deepseek-ai/dsh-workspace/types';
|
|
|
12
12
|
import type { ComposerBlock } from './composer-blocks.ts';
|
|
13
13
|
import type { ComposerKeyboard, DraftAttachmentId, EditSelection, InputActions, InputNotice, InputState } from './input.ts';
|
|
14
14
|
import type { createConversationStore } from '../stores.ts';
|
|
15
|
-
import type {
|
|
15
|
+
import type { BusyEnterBehavior } from './composer-submission.ts';
|
|
16
16
|
import type { ConversationSnapshot } from './snapshot.ts';
|
|
17
17
|
import type { ViewTab } from './views.ts';
|
|
18
18
|
/** Browser-owned draft attachment that has not crossed the durable Host boundary. */
|
|
@@ -109,6 +109,11 @@ export type UseConversation = SnapshotSelectorHook<ConversationSnapshot>;
|
|
|
109
109
|
export type UseConversationViews = SnapshotSelectorHook<readonly ViewTab[]>;
|
|
110
110
|
declare module '@deepseek-ai/dsh-client-ui-slots' {
|
|
111
111
|
interface SlotMap {
|
|
112
|
+
/** Conversation shell beneath its root-scoped main-panel entry. */
|
|
113
|
+
'main.conversation': {
|
|
114
|
+
kind: 'single';
|
|
115
|
+
scope: 'session-maybe';
|
|
116
|
+
};
|
|
112
117
|
/** Strict per-Session Conversation body. */
|
|
113
118
|
'conversation.session': {
|
|
114
119
|
kind: 'single';
|
|
@@ -137,6 +142,17 @@ declare module '@deepseek-ai/dsh-client-ui-slots' {
|
|
|
137
142
|
scope: 'session';
|
|
138
143
|
owner: ConversationHeaderActionOwnerProps;
|
|
139
144
|
};
|
|
145
|
+
/**
|
|
146
|
+
* The header's far-right corner, past the utilities' edge and into the
|
|
147
|
+
* header's own padding, for one control. The corner is laid out only while
|
|
148
|
+
* its occupant renders something; an occupant with nothing to show renders
|
|
149
|
+
* nothing, and the utilities take the header's edge.
|
|
150
|
+
*/
|
|
151
|
+
'conversation.session.header.corner': {
|
|
152
|
+
kind: 'single';
|
|
153
|
+
scope: 'session';
|
|
154
|
+
owner: ConversationHeaderCornerOwnerProps;
|
|
155
|
+
};
|
|
140
156
|
/** Registered Conversation target Views, rendered one at a time. */
|
|
141
157
|
'conversation.view': {
|
|
142
158
|
kind: 'list';
|
|
@@ -249,6 +265,11 @@ export interface ConversationHeaderActionOwnerProps {
|
|
|
249
265
|
/** Marker field: entries receive no owner-specific values. */
|
|
250
266
|
children?: never;
|
|
251
267
|
}
|
|
268
|
+
/** The header corner's occupant derives its state from standard Session props. */
|
|
269
|
+
export interface ConversationHeaderCornerOwnerProps {
|
|
270
|
+
/** Marker field: the occupant receives no owner-specific values. */
|
|
271
|
+
children?: never;
|
|
272
|
+
}
|
|
252
273
|
/** Plain breadcrumb data handed to the optional lineage renderer. */
|
|
253
274
|
export interface ConversationHeaderLineageOwnerProps {
|
|
254
275
|
/** Session represented by this breadcrumb title. */
|
|
@@ -331,11 +352,15 @@ export interface ComposerBarInjected {
|
|
|
331
352
|
resolveDraftAttachments: ((ids: readonly DraftAttachmentId[]) => readonly ComposerAttachment[]) | undefined;
|
|
332
353
|
/** Restart one failed file upload; absent without a session. */
|
|
333
354
|
retryFileUpload: ((id: DraftAttachmentId) => void) | undefined;
|
|
334
|
-
resolveSubmitMode: (running: boolean, gesture: ComposerSubmitGesture, steeringAvailable: boolean) => InputSubmitMode;
|
|
335
355
|
toggleCommandMenu: ((selection: EditSelection) => void) | undefined;
|
|
336
356
|
stop: (() => void) | undefined;
|
|
337
357
|
command: ((line: string) => Promise<boolean>) | undefined;
|
|
338
358
|
hooks: {
|
|
359
|
+
/**
|
|
360
|
+
* Live busy-state submission preference: the delivery mode plain Enter
|
|
361
|
+
* and the primary Send button use while the addressed agent is busy.
|
|
362
|
+
*/
|
|
363
|
+
busyEnter: ObservableSnapshot<BusyEnterBehavior>;
|
|
339
364
|
/** Live per-draft upload states for file-kind drafts. */
|
|
340
365
|
fileUploads: ObservableSnapshot<DraftFileUploads>;
|
|
341
366
|
notices: ObservableSnapshot<InputNotice | null>;
|
|
@@ -367,13 +392,13 @@ export interface HeroBrandMarkOwnerProps {
|
|
|
367
392
|
className?: string | undefined;
|
|
368
393
|
}
|
|
369
394
|
/** Full props of the resident optional-Session Conversation shell. */
|
|
370
|
-
export type ConversationSlotProps = PropsRuntime<'conversation'> & PropsRenderSlots<'conversation.session' | 'conversation.session.header' | 'conversation.composer' | 'conversation.composer.bar' | 'conversation.input.dock' | 'conversation.hero.brand.mark' | 'conversation.hero.workspace' | 'conversation.hero.agentPreset'> & InjectFace<ConversationInjected> & PropsLocale<'conversation'>;
|
|
395
|
+
export type ConversationSlotProps = PropsRuntime<'main.conversation'> & PropsRenderSlots<'conversation.session' | 'conversation.session.header' | 'conversation.composer' | 'conversation.composer.bar' | 'conversation.input.dock' | 'conversation.hero.brand.mark' | 'conversation.hero.workspace' | 'conversation.hero.agentPreset'> & InjectFace<ConversationInjected> & PropsLocale<'conversation'>;
|
|
371
396
|
/** Shared target-neutral Conversation store handle. */
|
|
372
397
|
export type ConversationStore = ReturnType<typeof createConversationStore>;
|
|
373
398
|
/** Full props of the strict Session body. */
|
|
374
399
|
export type ConversationSessionSlotProps = PropsRuntime<'conversation.session'> & PropsRenderSlots<'conversation.view'> & PropsStore<ConversationStore> & InjectFace<ConversationSessionInjected>;
|
|
375
400
|
/** Full props of the strict Session header. */
|
|
376
|
-
export type ConversationSessionHeaderSlotProps = PropsRuntime<'conversation.session.header'> & PropsRenderSlots<'conversation.session.header.lineage' | 'conversation.session.header.actions' | 'conversation.session.header.utilities'> & PropsStore<ConversationStore> & InjectFace<ConversationSessionHeaderInjected> & PropsLocale<'conversation'>;
|
|
401
|
+
export type ConversationSessionHeaderSlotProps = PropsRuntime<'conversation.session.header'> & PropsRenderSlots<'conversation.session.header.lineage' | 'conversation.session.header.actions' | 'conversation.session.header.utilities' | 'conversation.session.header.corner'> & PropsStore<ConversationStore> & InjectFace<ConversationSessionHeaderInjected> & PropsLocale<'conversation'>;
|
|
377
402
|
/** Full props of the draft-attachment renderer. */
|
|
378
403
|
export type ComposerAttachmentsProps = PropsRuntime<'conversation.input.attachments'> & PropsLocale<'conversation'>;
|
|
379
404
|
/** Owner share common to blank-session Workspace pickers. */
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/** Immutable system-only interpretation of the loaded Session surface. */
|
|
2
|
+
import type { SessionEvent } from '@deepseek-ai/dsh-session/types';
|
|
3
|
+
import type { SystemPromptNode } from './request-inspection.ts';
|
|
4
|
+
interface PositionedSystem {
|
|
5
|
+
readonly position: number;
|
|
6
|
+
readonly node: SystemPromptNode;
|
|
7
|
+
}
|
|
8
|
+
/** Prompt facts at one log prefix; earlier instances remain valid for historical cards. */
|
|
9
|
+
export interface SystemPromptState {
|
|
10
|
+
/** Earliest relevant loaded event; older unindexed endpoints have unknown surface positions. */
|
|
11
|
+
readonly firstSeq: number;
|
|
12
|
+
/** Missing endpoint order makes the prompt unavailable until prepend replay supplies it. */
|
|
13
|
+
readonly uncertain: boolean;
|
|
14
|
+
/** Loaded system nodes in surface order, including empty dormant nodes. */
|
|
15
|
+
readonly nodes: readonly PositionedSystem[];
|
|
16
|
+
/** Surviving replacement endpoints only, mapped to inherited surface positions. */
|
|
17
|
+
readonly replacements: ReadonlyMap<number, number>;
|
|
18
|
+
/** Effective prompt and its change origin; empty text records removal, undefined means unavailable. */
|
|
19
|
+
readonly effective: SystemPromptNode | undefined;
|
|
20
|
+
/** System event at this position, if any; only this node may own an update card. */
|
|
21
|
+
readonly introduced: SystemPromptNode | undefined;
|
|
22
|
+
}
|
|
23
|
+
/** Pure interpretation supplied to target-owned Definitions through uiConversation. */
|
|
24
|
+
export type SystemPromptInspector = (previous: SystemPromptState | undefined, event: SessionEvent) => SystemPromptState;
|
|
25
|
+
/**
|
|
26
|
+
* Apply a system event or positional replacement without retaining ordinary messages.
|
|
27
|
+
* Replacement positions inherit their start endpoint, not their chronological seq.
|
|
28
|
+
* Unknown older endpoint order withholds the prompt until prepend replay resolves it.
|
|
29
|
+
* @param previous - Interpretation at the preceding relevant event in the loaded window.
|
|
30
|
+
* @param event - System message or surface replacement already admitted by Session.
|
|
31
|
+
* @returns Immutable surviving system facts and the effective nonempty prompt.
|
|
32
|
+
*/
|
|
33
|
+
export declare function inspectSystemPrompt(previous: SystemPromptState | undefined, event: SessionEvent): SystemPromptState;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=system-prompt.d.ts.map
|
|
@@ -6,7 +6,8 @@ import type { SessionEvent, SessionId } from '@deepseek-ai/dsh-session/types';
|
|
|
6
6
|
import { type ObservableSnapshot } from '@deepseek-ai/dsh-client-store';
|
|
7
7
|
import type { ConversationViewSnapshotMap } from '../contract/conversation.ts';
|
|
8
8
|
import type { ConversationSnapshot } from '../contract/snapshot.ts';
|
|
9
|
-
import type { ConversationPromptSnapshot, RequestPromptInspection } from '../contract/request-inspection.ts';
|
|
9
|
+
import type { ConversationPromptSnapshot, RequestPromptInspection, SystemPromptNode } from '../contract/request-inspection.ts';
|
|
10
|
+
import { type SystemPromptState } from '../contract/system-prompt.ts';
|
|
10
11
|
import { ConversationEventRegistry } from './event-registry.ts';
|
|
11
12
|
import { ConversationViewRegistry } from './view-registry.ts';
|
|
12
13
|
/** Observable faces published for one Session's Conversation assembly. */
|
|
@@ -72,16 +73,25 @@ export declare class UiConversation extends Service {
|
|
|
72
73
|
*/
|
|
73
74
|
seedImageUrl(sessionId: SessionId, attachment: ImageAttachmentRef, url: string): boolean;
|
|
74
75
|
/**
|
|
75
|
-
*
|
|
76
|
+
* Interpret a system message or surface replacement for target-owned prompt Definitions.
|
|
77
|
+
* @param previous - System facts at the preceding relevant loaded event.
|
|
78
|
+
* @param event - Durable system message or positional replacement.
|
|
79
|
+
* @returns Immutable prompt interpretation at this event.
|
|
80
|
+
*/
|
|
81
|
+
inspectSystemPrompt(previous: SystemPromptState | undefined, event: SessionEvent): SystemPromptState;
|
|
82
|
+
/**
|
|
83
|
+
* Canonicalize one `request/header` event against the previous prompt state
|
|
84
|
+
* and the `system/message` node in force.
|
|
76
85
|
*
|
|
77
86
|
* A pure interpretation shared by the Chat and Trajectory Definitions, exposed
|
|
78
87
|
* as a service method because cross-plugin value imports are forbidden in
|
|
79
88
|
* client bundles.
|
|
80
89
|
* @param previous - prompt recorded by the preceding loaded header, if any.
|
|
81
90
|
* @param event - the `request/header` session event to interpret.
|
|
91
|
+
* @param system - effective prompt after loaded surface replacements, if any.
|
|
82
92
|
* @returns the canonical prompt snapshot and any model-visible change.
|
|
83
93
|
*/
|
|
84
|
-
inspectRequestPrompt(previous: ConversationPromptSnapshot | undefined, event: SessionEvent<'request/header'
|
|
94
|
+
inspectRequestPrompt(previous: ConversationPromptSnapshot | undefined, event: SessionEvent<'request/header'>, system: SystemPromptNode | undefined): RequestPromptInspection;
|
|
85
95
|
private drop;
|
|
86
96
|
}
|
|
87
97
|
//# sourceMappingURL=assembly.d.ts.map
|
|
@@ -10,8 +10,9 @@ export { EMPTY_CONVERSATION_SNAPSHOT, conversationPhase } from './contract/snaps
|
|
|
10
10
|
export type { ConversationPhase, ConversationSnapshot, } from './contract/snapshot.ts';
|
|
11
11
|
export type { AssistantBlock, AssistantMessageNode, AssistantProvenanceView, AssistantRequestConfig, AssistantTiming, CommandNode, CompactionSummaryNode, ContextMessageNode, ConversationNode, ModelRetryNode, PartialAssistant, RunningToolCall, SteeringMessageNode, TodoItem, ToolCallBlock, ToolResultNode, TurnErrorNode, TurnMaxTokensNode, UnknownSurfaceNode, UserMessageNode, } from './contract/records.ts';
|
|
12
12
|
export type { ContextProvenanceView, ContextRole, KnownContextForm, } from './contract/context-provenance.ts';
|
|
13
|
-
export type { ConversationPromptSnapshot, RequestInspectionSnapshot, RequestPromptChange, RequestPromptInspection, RequestPromptInspector, RequestView, } from './contract/request-inspection.ts';
|
|
13
|
+
export type { ConversationPromptSnapshot, RequestInspectionSnapshot, RequestPromptChange, RequestPromptInspection, RequestPromptInspector, RequestView, SystemPromptNode, } from './contract/request-inspection.ts';
|
|
14
14
|
export { inspectRequestPrompt } from './contract/request-inspection.ts';
|
|
15
|
+
export type { SystemPromptState, SystemPromptInspector } from './contract/system-prompt.ts';
|
|
15
16
|
export type { ConversationStoreState, ConversationViewRequest, ViewTab } from './contract/views.ts';
|
|
16
17
|
export { ConversationNodeAssembler } from './conversation/assembler.ts';
|
|
17
18
|
export type { ConversationEventDefinitions, ConversationViewDefinitions, } from './conversation/assembler.ts';
|
|
@@ -21,7 +22,7 @@ export { ConversationLocationIndex } from './conversation/location-index.ts';
|
|
|
21
22
|
export type { ConversationLocationDataChange } from './conversation/location-index.ts';
|
|
22
23
|
export { ConversationViewRegistry } from './conversation/view-registry.ts';
|
|
23
24
|
export type { ConversationKey } from './locales.ts';
|
|
24
|
-
export type { ComposerAttachment, ComposerAttachmentsOwnerProps, ComposerAttachmentsProps, ComposerFileAttachment, ComposerImageAttachment, DraftFileUpload, DraftFileUploads, ComposerBarInjected, ComposerBarOwnerProps, ComposerBarProps, ComposerChainProps, ConversationHeaderActionOwnerProps, ConversationHeaderLineageOwnerProps, ConversationInjected, ConversationSessionHeaderInjected, ConversationSessionHeaderSlotProps, ConversationSessionInjected, ConversationSessionSlotProps, ConversationSlotProps, ConversationStore, ConvViewOwnerProps, ConvViewProps, EmptyWorkspaceOwnerProps, HeroAgentPresetOwnerProps, HeroBrandMarkOwnerProps, InputControlOwnerProps, InputZone, MessageImageLoader, MessageImageSource, MessageImagesOwnerProps, RenderMessageImages, UseConversation, UseConversationViews, } from './contract/slots.ts';
|
|
25
|
+
export type { ComposerAttachment, ComposerAttachmentsOwnerProps, ComposerAttachmentsProps, ComposerFileAttachment, ComposerImageAttachment, DraftFileUpload, DraftFileUploads, ComposerBarInjected, ComposerBarOwnerProps, ComposerBarProps, ComposerChainProps, ConversationHeaderActionOwnerProps, ConversationHeaderCornerOwnerProps, ConversationHeaderLineageOwnerProps, ConversationInjected, ConversationSessionHeaderInjected, ConversationSessionHeaderSlotProps, ConversationSessionInjected, ConversationSessionSlotProps, ConversationSlotProps, ConversationStore, ConvViewOwnerProps, ConvViewProps, EmptyWorkspaceOwnerProps, HeroAgentPresetOwnerProps, HeroBrandMarkOwnerProps, InputControlOwnerProps, InputZone, MessageImageLoader, MessageImageSource, MessageImagesOwnerProps, RenderMessageImages, UseConversation, UseConversationViews, } from './contract/slots.ts';
|
|
25
26
|
export type { ArbitrateKey, ArbitrateOutcome, BeginCommandRequest, CommandClaim, ConsumeTokenRequest, DraftAttachmentId, InputActions, InputState, InsertReferenceRequest, InsertTextRequest, PickOutcome, ReferenceInsert, SessionInput, SessionInputResolver, SubmitAttachment, SubmitOutcome, TokenSpan, } from './contract/input.ts';
|
|
26
27
|
export type { ComposerBlock, ComposerBlocks } from './contract/composer-blocks.ts';
|
|
27
28
|
declare module '@deepseek-ai/cordis' {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Composer submission policy. It owns the live busy-Enter
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Composer submission policy. It owns the live busy-Enter preference and
|
|
3
|
+
* resolves submission gestures into queue/steer delivery modes; Host and
|
|
4
|
+
* Agent keep the actual delivery-window authority.
|
|
5
5
|
*/
|
|
6
6
|
import { type SnapshotStore } from '@deepseek-ai/dsh-client-store';
|
|
7
7
|
import type { SettingsScope } from '@deepseek-ai/dsh-client-ui-settings/client';
|
|
@@ -9,12 +9,25 @@ import type { BusyEnterBehavior, ComposerSubmitGesture, InputSubmitMode } from '
|
|
|
9
9
|
import type { ConversationSettings } from '../../submission-settings.ts';
|
|
10
10
|
export { DEFAULT_BUSY_ENTER_BEHAVIOR } from '../../submission-settings.ts';
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
12
|
+
* Resolve one submission gesture against the busy-Enter preference. Plain
|
|
13
|
+
* Enter and the primary Send button share the `enter` gesture, so the button
|
|
14
|
+
* delivers exactly what Enter would. Direct `steer` is intentionally
|
|
15
|
+
* best-effort: AgentLoop turns a closed-window submission into the next waking
|
|
16
|
+
* Queue item.
|
|
17
|
+
* @param preferred - the live busy-Enter preference.
|
|
18
|
+
* @param running - whether the addressed agent currently reports busy.
|
|
19
|
+
* @param gesture - plain Enter (or the Send button) or the Cmd/Ctrl-accelerated chord.
|
|
20
|
+
* @param steeringAvailable - whether this session transport supports steering.
|
|
21
|
+
* @returns Queue outside steer-capable busy state; otherwise the preferred mode or its opposite.
|
|
22
|
+
*/
|
|
23
|
+
export declare function resolveSubmitMode(preferred: BusyEnterBehavior, running: boolean, gesture: ComposerSubmitGesture, steeringAvailable: boolean): InputSubmitMode;
|
|
24
|
+
/**
|
|
25
|
+
* Busy-Enter preference shared by the composer bar inject face and its
|
|
26
|
+
* Settings row: one live store the bar's submission gestures and Send label
|
|
27
|
+
* read, backed by the Host user-settings document when one is composed.
|
|
15
28
|
*/
|
|
16
29
|
export declare class ComposerSubmissionPolicy {
|
|
17
|
-
/** Reactive preference source for the Settings row. */
|
|
30
|
+
/** Reactive preference source for the composer bar and the Settings row. */
|
|
18
31
|
readonly busyEnter: SnapshotStore<BusyEnterBehavior>;
|
|
19
32
|
private readonly host;
|
|
20
33
|
/**
|
|
@@ -25,16 +38,8 @@ export declare class ComposerSubmissionPolicy {
|
|
|
25
38
|
*/
|
|
26
39
|
constructor(host?: SettingsScope<ConversationSettings>);
|
|
27
40
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* @param gesture - plain Enter or the Cmd/Ctrl-accelerated chord.
|
|
31
|
-
* @param steeringAvailable - whether this session transport supports steering.
|
|
32
|
-
* @returns Queue outside steer-capable busy state; otherwise the preferred mode or its opposite.
|
|
33
|
-
*/
|
|
34
|
-
resolve(running: boolean, gesture: ComposerSubmitGesture, steeringAvailable: boolean): InputSubmitMode;
|
|
35
|
-
/**
|
|
36
|
-
* Change the plain-Enter behavior used during busy state; the live value
|
|
37
|
-
* publishes before the durable write starts.
|
|
41
|
+
* Change the busy-state submission behavior; the live value publishes
|
|
42
|
+
* before the durable write starts.
|
|
38
43
|
* @param behavior - Queue or Steer.
|
|
39
44
|
*/
|
|
40
45
|
setBusyEnter(behavior: BusyEnterBehavior): void;
|
|
@@ -16,6 +16,8 @@ export declare const zh: {
|
|
|
16
16
|
'input.commands': string;
|
|
17
17
|
'input.stop': string;
|
|
18
18
|
'input.send': string;
|
|
19
|
+
'input.send.queue': string;
|
|
20
|
+
'input.send.steer': string;
|
|
19
21
|
'input.accessMode': string;
|
|
20
22
|
'attachment.pending': string;
|
|
21
23
|
'attachment.scrollLeft': string;
|
|
@@ -178,6 +180,8 @@ export declare const en: {
|
|
|
178
180
|
'input.commands': string;
|
|
179
181
|
'input.stop': string;
|
|
180
182
|
'input.send': string;
|
|
183
|
+
'input.send.queue': string;
|
|
184
|
+
'input.send.steer': string;
|
|
181
185
|
'input.accessMode': string;
|
|
182
186
|
'attachment.pending': string;
|
|
183
187
|
'attachment.scrollLeft': string;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Root-scoped main occupant; Session binding belongs to its Conversation child. */
|
|
2
|
+
import type { PropsRenderSlots, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';
|
|
3
|
+
/**
|
|
4
|
+
* Render the Conversation with optional current-Session binding.
|
|
5
|
+
* @param props - main-slot inputs and the declared Conversation renderer.
|
|
6
|
+
* @returns the Conversation subtree.
|
|
7
|
+
*/
|
|
8
|
+
export declare function ConversationPanel({ renderSlot }: PropsRuntime<'main'> & PropsRenderSlots<'main.conversation'>): import("react").ReactNode;
|
|
9
|
+
//# sourceMappingURL=ConversationPanel.d.ts.map
|
|
@@ -14,5 +14,5 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import type { ComposerBarProps } from '../contract/slots.ts';
|
|
16
16
|
export type InputBarProps = ComposerBarProps;
|
|
17
|
-
export declare const InputBar: import("react").MemoExoticComponent<({ useSession, useInput, inputActions, keyboard, addFiles, removeAttachment, resolveDraftAttachments, retryFileUpload,
|
|
17
|
+
export declare const InputBar: import("react").MemoExoticComponent<({ useSession, useInput, inputActions, keyboard, addFiles, removeAttachment, resolveDraftAttachments, retryFileUpload, toggleCommandMenu, stop, command, t, renderSlot, useBusyEnter, useFileUploads, useNotices, useLexicon, useMenuLauncher, useProjection, sessionId, variant, disabled: inert, blocked, workspacePickerOpen, onRequestWorkspace, placeholder, accessory, }: InputBarProps) => import("react").JSX.Element>;
|
|
18
18
|
//# sourceMappingURL=InputBar.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deepseek-ai/dsh-client-ui-conversation",
|
|
3
3
|
"description": "Target-neutral Conversation assembly, shell, composer, queue, and view navigation",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.5-alpha.2",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -42,12 +42,6 @@
|
|
|
42
42
|
},
|
|
43
43
|
"license": "MIT",
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"clsx": "^2.0.0",
|
|
46
|
-
"@lexical/history": "^0.49.0",
|
|
47
|
-
"@lexical/plain-text": "^0.49.0",
|
|
48
|
-
"@lexical/text": "^0.49.0",
|
|
49
|
-
"@lexical/utils": "^0.49.0",
|
|
50
|
-
"lexical": "^0.49.0",
|
|
51
45
|
"@deepseek-ai/schemastery": "^3.18.2"
|
|
52
46
|
},
|
|
53
47
|
"peerDependencies": {
|
|
@@ -60,36 +54,42 @@
|
|
|
60
54
|
"react-dom": "^18.2.0",
|
|
61
55
|
"@types/react-dom": "~18.3.0",
|
|
62
56
|
"zod": "^4.4.3",
|
|
57
|
+
"lexical": "^0.49.0",
|
|
58
|
+
"clsx": "^2.0.0",
|
|
59
|
+
"@lexical/utils": "^0.49.0",
|
|
60
|
+
"@lexical/text": "^0.49.0",
|
|
61
|
+
"@lexical/plain-text": "^0.49.0",
|
|
62
|
+
"@lexical/history": "^0.49.0",
|
|
63
63
|
"@deepseek-ai/cordis": "^4.0.2",
|
|
64
|
-
"@deepseek-ai/dsh-api-
|
|
65
|
-
"@deepseek-ai/dsh-api-
|
|
66
|
-
"@deepseek-ai/dsh-
|
|
67
|
-
"@deepseek-ai/dsh-
|
|
68
|
-
"@deepseek-ai/dsh-
|
|
69
|
-
"@deepseek-ai/dsh-client-
|
|
70
|
-
"@deepseek-ai/dsh-client-
|
|
71
|
-
"@deepseek-ai/dsh-client-
|
|
72
|
-
"@deepseek-ai/dsh-client-
|
|
73
|
-
"@deepseek-ai/dsh-client-ui-
|
|
74
|
-
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.
|
|
75
|
-
"@deepseek-ai/dsh-client-ui-session": "^0.1.
|
|
76
|
-
"@deepseek-ai/dsh-client-ui-settings": "^0.1.
|
|
77
|
-
"@deepseek-ai/dsh-client-ui-workspace": "^0.1.
|
|
78
|
-
"@deepseek-ai/dsh-client-ui-slots": "^0.1.
|
|
79
|
-
"@deepseek-ai/dsh-
|
|
80
|
-
"@deepseek-ai/dsh-
|
|
81
|
-
"@deepseek-ai/dsh-
|
|
82
|
-
"@deepseek-ai/dsh-llm": "^0.1.
|
|
83
|
-
"@deepseek-ai/dsh-
|
|
84
|
-
"@deepseek-ai/dsh-
|
|
85
|
-
"@deepseek-ai/dsh-
|
|
86
|
-
"@deepseek-ai/dsh-
|
|
87
|
-
"@deepseek-ai/dsh-
|
|
88
|
-
"@deepseek-ai/dsh-
|
|
89
|
-
"@deepseek-ai/dsh-
|
|
90
|
-
"@deepseek-ai/dsh-workspace": "^0.1.
|
|
91
|
-
"@deepseek-ai/dsh-util-workspace-path": "^0.1.
|
|
92
|
-
"@deepseek-ai/dsh-settings": "^0.1.
|
|
64
|
+
"@deepseek-ai/dsh-api-session-controller": "^0.1.5-alpha.2",
|
|
65
|
+
"@deepseek-ai/dsh-api-remotes": "^0.1.5-alpha.2",
|
|
66
|
+
"@deepseek-ai/dsh-attachment": "^0.1.5-alpha.2",
|
|
67
|
+
"@deepseek-ai/dsh-api-workspace-controller": "^0.1.5-alpha.2",
|
|
68
|
+
"@deepseek-ai/dsh-client-locale": "^0.1.5-alpha.2",
|
|
69
|
+
"@deepseek-ai/dsh-client-file-upload": "^0.1.5-alpha.2",
|
|
70
|
+
"@deepseek-ai/dsh-client-store": "^0.1.5-alpha.2",
|
|
71
|
+
"@deepseek-ai/dsh-client-test-runtime": "^0.1.5-alpha.2",
|
|
72
|
+
"@deepseek-ai/dsh-client-ui-layout": "^0.1.5-alpha.2",
|
|
73
|
+
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.5-alpha.2",
|
|
74
|
+
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.5-alpha.2",
|
|
75
|
+
"@deepseek-ai/dsh-client-ui-session": "^0.1.5-alpha.2",
|
|
76
|
+
"@deepseek-ai/dsh-client-ui-settings": "^0.1.5-alpha.2",
|
|
77
|
+
"@deepseek-ai/dsh-client-ui-workspace": "^0.1.5-alpha.2",
|
|
78
|
+
"@deepseek-ai/dsh-client-ui-slots": "^0.1.5-alpha.2",
|
|
79
|
+
"@deepseek-ai/dsh-commands": "^0.1.5-alpha.2",
|
|
80
|
+
"@deepseek-ai/dsh-goal": "^0.1.5-alpha.2",
|
|
81
|
+
"@deepseek-ai/dsh-llm": "^0.1.5-alpha.2",
|
|
82
|
+
"@deepseek-ai/dsh-llm-retry": "^0.1.5-alpha.2",
|
|
83
|
+
"@deepseek-ai/dsh-permission-presets": "^0.1.5-alpha.2",
|
|
84
|
+
"@deepseek-ai/dsh-plan-mode": "^0.1.5-alpha.2",
|
|
85
|
+
"@deepseek-ai/dsh-session": "^0.1.5-alpha.2",
|
|
86
|
+
"@deepseek-ai/dsh-token-meter": "^0.1.5-alpha.2",
|
|
87
|
+
"@deepseek-ai/dsh-tool-todo": "^0.1.5-alpha.2",
|
|
88
|
+
"@deepseek-ai/dsh-util-crypto": "^0.1.5-alpha.2",
|
|
89
|
+
"@deepseek-ai/dsh-brand": "^0.1.5-alpha.2",
|
|
90
|
+
"@deepseek-ai/dsh-workspace": "^0.1.5-alpha.2",
|
|
91
|
+
"@deepseek-ai/dsh-util-workspace-path": "^0.1.5-alpha.2",
|
|
92
|
+
"@deepseek-ai/dsh-settings": "^0.1.5-alpha.2"
|
|
93
93
|
},
|
|
94
94
|
"files": [
|
|
95
95
|
"lib/index.js",
|