@qilin-agent/client-ui-conversation 0.0.0-stage → 3.1.4
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/LICENSE +21 -0
- package/README.i18n.yaml +37 -0
- package/README.md +149 -2
- package/README.zh.md +150 -0
- package/lib/client.js +19208 -0
- package/lib/index.js +46 -0
- package/lib/types/client/apply.d.ts +25 -0
- package/lib/types/client/context-occupancy.d.ts +14 -0
- package/lib/types/client/contract/composer-blocks.d.ts +28 -0
- package/lib/types/client/contract/composer-submission.d.ts +8 -0
- package/lib/types/client/contract/context-producer.d.ts +29 -0
- package/lib/types/client/contract/conversation.d.ts +279 -0
- package/lib/types/client/contract/draft-editor.d.ts +102 -0
- package/lib/types/client/contract/groups.d.ts +116 -0
- package/lib/types/client/contract/input.d.ts +361 -0
- package/lib/types/client/contract/records.d.ts +301 -0
- package/lib/types/client/contract/request-inspection.d.ts +132 -0
- package/lib/types/client/contract/slots.d.ts +541 -0
- package/lib/types/client/contract/snapshot.d.ts +20 -0
- package/lib/types/client/contract/system-prompt.d.ts +35 -0
- package/lib/types/client/contract/views.d.ts +36 -0
- package/lib/types/client/conversation/assembler.d.ts +151 -0
- package/lib/types/client/conversation/assembly.d.ts +128 -0
- package/lib/types/client/conversation/definition-registry.d.ts +33 -0
- package/lib/types/client/conversation/event-registry.d.ts +40 -0
- package/lib/types/client/conversation/group-registry.d.ts +30 -0
- package/lib/types/client/conversation/group-store.d.ts +29 -0
- package/lib/types/client/conversation/historical-images.d.ts +49 -0
- package/lib/types/client/conversation/location-index.d.ts +91 -0
- package/lib/types/client/conversation/view-registry.d.ts +12 -0
- package/lib/types/client/image-labels.d.ts +23 -0
- package/lib/types/client/index.d.ts +39 -0
- package/lib/types/client/input/blocks.d.ts +27 -0
- package/lib/types/client/input/decorations.d.ts +32 -0
- package/lib/types/client/input/editor/ComposerContentEditable.d.ts +16 -0
- package/lib/types/client/input/editor/DecoratorPortals.d.ts +14 -0
- package/lib/types/client/input/editor/DraftEditor.d.ts +27 -0
- package/lib/types/client/input/editor/ReferenceChip.d.ts +17 -0
- package/lib/types/client/input/editor/chip-node.d.ts +110 -0
- package/lib/types/client/input/editor/claim-decor.d.ts +23 -0
- package/lib/types/client/input/editor/keymap.d.ts +43 -0
- package/lib/types/client/input/editor/projection.d.ts +93 -0
- package/lib/types/client/input/editor/reference-activation.d.ts +10 -0
- package/lib/types/client/input/editor/runtime.d.ts +123 -0
- package/lib/types/client/input/editor/span-map.d.ts +38 -0
- package/lib/types/client/input/editor/text-ref.d.ts +49 -0
- package/lib/types/client/input/editor/view-binding.d.ts +60 -0
- package/lib/types/client/input/facade.d.ts +303 -0
- package/lib/types/client/input/hub.d.ts +100 -0
- package/lib/types/client/input/machine.d.ts +46 -0
- package/lib/types/client/input/submission-policy.d.ts +52 -0
- package/lib/types/client/layout-policy.d.ts +42 -0
- package/lib/types/client/locales.d.ts +772 -0
- package/lib/types/client/queue/QueueDock.d.ts +27 -0
- package/lib/types/client/service.d.ts +192 -0
- package/lib/types/client/settings/ContentWidthRow.d.ts +26 -0
- package/lib/types/client/settings/EnterBehaviorRow.d.ts +21 -0
- package/lib/types/client/skeleton/ContextMeter.d.ts +14 -0
- package/lib/types/client/skeleton/ConversationContent.d.ts +8 -0
- package/lib/types/client/skeleton/ConversationHeader.d.ts +8 -0
- package/lib/types/client/skeleton/ConversationMainPanel.d.ts +3 -0
- package/lib/types/client/skeleton/ConversationPanel.d.ts +9 -0
- package/lib/types/client/skeleton/ConversationRoot.d.ts +5 -0
- package/lib/types/client/skeleton/ConversationSession.d.ts +21 -0
- package/lib/types/client/skeleton/ConversationWidthControls.d.ts +14 -0
- package/lib/types/client/skeleton/DefaultConversationViews.d.ts +9 -0
- package/lib/types/client/skeleton/EmptyHero.d.ts +49 -0
- package/lib/types/client/skeleton/InputBar.d.ts +18 -0
- package/lib/types/client/skeleton/TodoPanel.d.ts +21 -0
- package/lib/types/client/skeleton/control-row-layout.d.ts +10 -0
- package/lib/types/client/skeleton/safari.d.ts +18 -0
- package/lib/types/client/stop-sequence.d.ts +32 -0
- package/lib/types/client/stop-shortcut.d.ts +17 -0
- package/lib/types/client/stores.d.ts +24 -0
- package/lib/types/client/view-selection.d.ts +11 -0
- package/lib/types/conversation-settings.d.ts +38 -0
- package/lib/types/index.d.ts +9 -0
- package/package.json +106 -3
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Context } from '@qilin-agent/kylin';
|
|
2
|
+
import type { ImageAttachmentRef } from '@qilin-agent/attachment';
|
|
3
|
+
import type { PropsLocale, PropsRuntime } from '@qilin-agent/client-ui-slots';
|
|
4
|
+
import type { QueueAction } from '@qilin-agent/api-session-controller/types';
|
|
5
|
+
import type { MessageId } from '@qilin-agent/llm/brand';
|
|
6
|
+
/** Queue operations injected by the session-scoped registration. */
|
|
7
|
+
export interface QueueDockInjected {
|
|
8
|
+
updateQueue: (itemId: MessageId, action: QueueAction) => Promise<void>;
|
|
9
|
+
notify: (level: 'info' | 'error', text: string) => void;
|
|
10
|
+
/** Resolve one durable queued image into a session-scoped browser URL. */
|
|
11
|
+
loadImage: (attachment: ImageAttachmentRef) => Promise<string>;
|
|
12
|
+
}
|
|
13
|
+
/** Full props of a dock entry: InputZone owner share + session standard kit + global seat + the locale seat. */
|
|
14
|
+
export type QueueDockProps = PropsRuntime<'conversation.input.dock'> & QueueDockInjected & PropsLocale<'conversation'>;
|
|
15
|
+
/**
|
|
16
|
+
* Queue strip: one item renders directly; multiple items default to a
|
|
17
|
+
* collapsible count header; an empty queue renders nothing. Local submissions
|
|
18
|
+
* show sending status and disabled actions until their Host queue rows arrive.
|
|
19
|
+
*/
|
|
20
|
+
export declare function QueueDock({ useSession, useProjection, updateQueue, notify, loadImage, t }: QueueDockProps): import("react").JSX.Element | null;
|
|
21
|
+
/** Registers queue actions backed by the session-scoped conversation service. */
|
|
22
|
+
export declare const queueDockEntry: {
|
|
23
|
+
name: string;
|
|
24
|
+
inject: string[];
|
|
25
|
+
apply(ctx: Context): void;
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=QueueDock.d.ts.map
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scope-addressed conversation send, cancel, and history orchestration.
|
|
3
|
+
*
|
|
4
|
+
* Scope addressing rides the cordis Service tracker: property access through
|
|
5
|
+
* `ctx.conversation` rebinds `this.ctx` to the caller's context, so methods
|
|
6
|
+
* read the session tag with `scopeOf`. Mutable state must remain reachable
|
|
7
|
+
* through one property read; assignment through the tracker proxy and `#`
|
|
8
|
+
* private fields bypass that rebinding.
|
|
9
|
+
*/
|
|
10
|
+
import { Service } from '@qilin-agent/kylin';
|
|
11
|
+
import type { Context } from '@qilin-agent/kylin';
|
|
12
|
+
import type { SessionFace } from '@qilin-agent/api-session-controller/client';
|
|
13
|
+
import type { SessionId } from '@qilin-agent/session/types';
|
|
14
|
+
import type { SnapshotStore } from '@qilin-agent/client-store';
|
|
15
|
+
import type { ComposerAttachment, DraftFileUpload } from './contract/slots.ts';
|
|
16
|
+
import type { QueueAction } from '@qilin-agent/api-session-controller/types';
|
|
17
|
+
import type { MessageId } from '@qilin-agent/llm/brand';
|
|
18
|
+
import type { ComposerBlocks } from './contract/composer-blocks.ts';
|
|
19
|
+
import type { DraftAttachmentId, DraftAttachmentSerializationResult, SessionInputResolver, SubmitOutcome } from './contract/input.ts';
|
|
20
|
+
import type { InputSubmitMode } from './contract/composer-submission.ts';
|
|
21
|
+
/**
|
|
22
|
+
* The outward conversation face (`ctx.conversation`): the scope-addressed
|
|
23
|
+
* verbs and the input registry other plugins may reach — and exactly what a
|
|
24
|
+
* test fake must supply.
|
|
25
|
+
*/
|
|
26
|
+
export interface IConversation {
|
|
27
|
+
/** The per-session input machine registry (SessionInputResolver face). */
|
|
28
|
+
readonly input: SessionInputResolver;
|
|
29
|
+
/**
|
|
30
|
+
* The per-session composer-block registry: how a plugin the composer
|
|
31
|
+
* cannot import makes a session's input inert with its own reason.
|
|
32
|
+
*/
|
|
33
|
+
readonly blocks: ComposerBlocks;
|
|
34
|
+
/**
|
|
35
|
+
* Send a prompt into the caller scope's session (queued turn).
|
|
36
|
+
* @param text - prompt text, sent verbatim as one text block.
|
|
37
|
+
* @returns completion; business failures reject (and land in promptError).
|
|
38
|
+
*/
|
|
39
|
+
send(text: string): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Apply one edit, remove, or Steer operation to a pending queue occurrence.
|
|
42
|
+
* @param itemId - agent-owned inbox occurrence identity.
|
|
43
|
+
* @param action - requested queue operation.
|
|
44
|
+
* @returns completion; converged QueueDock races resolve, while other failures reject.
|
|
45
|
+
*/
|
|
46
|
+
updateQueue(itemId: MessageId, action: QueueAction): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Cancel the scoped session's in-flight turn while preserving its pending Queue.
|
|
49
|
+
* @returns completion; failures reject as in send.
|
|
50
|
+
*/
|
|
51
|
+
cancel(): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Pull one older history page for the scoped session.
|
|
54
|
+
* @returns completion of the page pull.
|
|
55
|
+
*/
|
|
56
|
+
loadOlder(): Promise<void>;
|
|
57
|
+
}
|
|
58
|
+
/** Unsupported browser-declared image type, localized by the UI boundary. */
|
|
59
|
+
export declare class UnsupportedImageMediaTypeError extends Error {
|
|
60
|
+
/** Browser-declared MIME value, possibly empty. */
|
|
61
|
+
readonly mediaType: string;
|
|
62
|
+
/** @param mediaType - Browser-declared MIME value, possibly empty. */
|
|
63
|
+
constructor(mediaType: string);
|
|
64
|
+
}
|
|
65
|
+
/** Scope-addressed conversation service (root singleton, provided as `conversation`). */
|
|
66
|
+
export declare class ConversationController extends Service implements IConversation {
|
|
67
|
+
/** The per-session input machine registry (SessionInputResolver face). */
|
|
68
|
+
readonly input: SessionInputResolver;
|
|
69
|
+
/** The per-session composer-block registry. */
|
|
70
|
+
readonly blocks: ComposerBlocks;
|
|
71
|
+
/** Live upload state per file-kind draft; images never appear here. */
|
|
72
|
+
readonly fileUploads: SnapshotStore<Record<string, DraftFileUpload>>;
|
|
73
|
+
private readonly draftAttachments;
|
|
74
|
+
private readonly fileUploadOperations;
|
|
75
|
+
private readonly pendingFileUploads;
|
|
76
|
+
private readonly fileUploadQueue;
|
|
77
|
+
private activeFileUploads;
|
|
78
|
+
private readonly maxConcurrentFileUploads;
|
|
79
|
+
/**
|
|
80
|
+
* @param ctx - owning root context (the plugin apply context; the service
|
|
81
|
+
* registers itself and follows that fiber's lifetime).
|
|
82
|
+
* @param config - carries the SessionInputResolver and composer-block registry
|
|
83
|
+
* constructed by the plugin apply (the same instances the slot inject
|
|
84
|
+
* factories close over).
|
|
85
|
+
*/
|
|
86
|
+
constructor(ctx: Context, config: {
|
|
87
|
+
input: SessionInputResolver;
|
|
88
|
+
blocks: ComposerBlocks;
|
|
89
|
+
maxConcurrentFileUploads: number;
|
|
90
|
+
});
|
|
91
|
+
/**
|
|
92
|
+
* Send a prompt into the scoped session. Business failures also land in the
|
|
93
|
+
* session snapshot's promptError (object-layer state); the rejection here
|
|
94
|
+
* exists for caller choreography (the composer restores the draft on it).
|
|
95
|
+
* @param text - prompt text, sent verbatim as one text block.
|
|
96
|
+
*/
|
|
97
|
+
send(text: string): Promise<void>;
|
|
98
|
+
/**
|
|
99
|
+
* Submit ordered draft attachments with text through one host admission. A local
|
|
100
|
+
* submission echo enters the session snapshot synchronously; serialization
|
|
101
|
+
* and the prompt round-trip start after the browser can paint it. On the
|
|
102
|
+
* echo's observed retirement seeds admitted image previews into the durable
|
|
103
|
+
* cache and removes every attachment from the draft registry. On failure,
|
|
104
|
+
* every attachment remains registered so the composer can restore it.
|
|
105
|
+
* @param session - target session.
|
|
106
|
+
* @param text - serialized prompt text.
|
|
107
|
+
* @param attachmentIds - ordered draft-local attachment ids.
|
|
108
|
+
* @param mode - queue or steer delivery selected by composer policy.
|
|
109
|
+
* @param signal - optional cancellation for the complete Host admission.
|
|
110
|
+
* @returns the Host admission outcome; local attachment preparation failures reject.
|
|
111
|
+
*/
|
|
112
|
+
sendSession(session: SessionFace, text: string, attachmentIds: readonly DraftAttachmentId[], mode: InputSubmitMode, signal?: AbortSignal): Promise<SubmitOutcome>;
|
|
113
|
+
/**
|
|
114
|
+
* Create runtime-only draft attachments. Files whose browser MIME is an
|
|
115
|
+
* accepted image type become image drafts (object URL preview, bytes sent
|
|
116
|
+
* with the prompt); every other file becomes a file draft whose background
|
|
117
|
+
* upload starts immediately and remains owned by this service across Session
|
|
118
|
+
* navigation until completion or explicit removal.
|
|
119
|
+
* @param sessionId - target Agent-scope identity.
|
|
120
|
+
* @param files - browser files to register.
|
|
121
|
+
* @returns ordered draft descriptors.
|
|
122
|
+
*/
|
|
123
|
+
createDrafts(sessionId: SessionId, files: readonly File[]): readonly ComposerAttachment[];
|
|
124
|
+
/**
|
|
125
|
+
* Restart one failed file upload.
|
|
126
|
+
* @param sessionId - target Agent-scope identity.
|
|
127
|
+
* @param id - draft attachment id whose upload previously failed.
|
|
128
|
+
*/
|
|
129
|
+
retryFileUpload(sessionId: SessionId, id: DraftAttachmentId): void;
|
|
130
|
+
/**
|
|
131
|
+
* Stage carried file drafts again for a new Session.
|
|
132
|
+
* @param sessionId - target Agent-scope identity after a Workspace switch.
|
|
133
|
+
* @param ids - carried draft attachment ids.
|
|
134
|
+
*/
|
|
135
|
+
rebindDraftFiles(sessionId: SessionId, ids: readonly DraftAttachmentId[]): void;
|
|
136
|
+
private beginFileUpload;
|
|
137
|
+
/** Start queued upload Workers until the configured concurrency is occupied. */
|
|
138
|
+
private pumpFileUploads;
|
|
139
|
+
/**
|
|
140
|
+
* Resolve ordered input-state ids to runtime-owned draft attachments.
|
|
141
|
+
* @param ids - draft attachment ids.
|
|
142
|
+
* @returns descriptors that remain live, in requested order.
|
|
143
|
+
*/
|
|
144
|
+
resolveDraftAttachments(ids: readonly DraftAttachmentId[]): readonly ComposerAttachment[];
|
|
145
|
+
/**
|
|
146
|
+
* Serialize ordered draft attachments to command-submit wire payloads without
|
|
147
|
+
* sending or releasing them. Images are encoded; generic files cite receipts
|
|
148
|
+
* from their completed background uploads and never reread browser bytes.
|
|
149
|
+
* @param attachmentIds - ordered draft-local attachment ids.
|
|
150
|
+
* @returns wire payloads in id order.
|
|
151
|
+
*/
|
|
152
|
+
serializeDraftAttachments(attachmentIds: readonly DraftAttachmentId[]): Promise<DraftAttachmentSerializationResult>;
|
|
153
|
+
/**
|
|
154
|
+
* Release one browser-owned draft attachment, aborting its active upload.
|
|
155
|
+
* @param id - draft attachment id.
|
|
156
|
+
*/
|
|
157
|
+
releaseDraftAttachment(id: DraftAttachmentId): void;
|
|
158
|
+
/**
|
|
159
|
+
* Release a set of browser-owned draft attachments.
|
|
160
|
+
* @param attachments - descriptors to release.
|
|
161
|
+
*/
|
|
162
|
+
releaseDraftAttachments(attachments: readonly ComposerAttachment[]): void;
|
|
163
|
+
/** Apply one operation to a pending queue occurrence. */
|
|
164
|
+
updateQueue(itemId: MessageId, action: QueueAction): Promise<void>;
|
|
165
|
+
/** Cancel the scoped session's in-flight turn while preserving Queue (failures land in promptError and reject, as in send). */
|
|
166
|
+
cancel(): Promise<void>;
|
|
167
|
+
/** Pull one older history page for the scoped Session. */
|
|
168
|
+
loadOlder(): Promise<void>;
|
|
169
|
+
/** Resolve the caller scope's session face or throw on root contexts. */
|
|
170
|
+
private scopedSession;
|
|
171
|
+
/** Read the caller's session scope tag via the sessions service; root contexts fail loud. */
|
|
172
|
+
private scopeId;
|
|
173
|
+
private requireSessions;
|
|
174
|
+
/**
|
|
175
|
+
* Settle one submission's draft attachments when its echo retires. Observed:
|
|
176
|
+
* each image leaves the registry, handing its preview URL to the durable
|
|
177
|
+
* image cache (seeded under the admitted reference so the transcript node
|
|
178
|
+
* renders immediately while the cache reads canonical bytes) or revoking it
|
|
179
|
+
* when the cache already holds that reference. Failed: nothing changes;
|
|
180
|
+
* the ids stay registered for the composer's rail restore.
|
|
181
|
+
*/
|
|
182
|
+
private settleSubmittedAttachments;
|
|
183
|
+
/** Canonical base64 wire form of one browser image file. */
|
|
184
|
+
private encodeImage;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Whether a browser-declared MIME selects the image draft path.
|
|
188
|
+
* @param value - browser-declared MIME string from the picked file.
|
|
189
|
+
* @returns true when the platform supports previewing and uploading it as an image.
|
|
190
|
+
*/
|
|
191
|
+
export declare function isImageMediaType(value: string): boolean;
|
|
192
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* General Settings row for the transcript content width. The pill carries the
|
|
3
|
+
* persisted width — the word for the adaptive column clamp, otherwise the px
|
|
4
|
+
* value — and steps it by CONTENT_WIDTH_STEP. Reverting to the clamp is an
|
|
5
|
+
* explicit action, never a stepper bound.
|
|
6
|
+
*/
|
|
7
|
+
import type { SnapshotStore } from '@qilin-agent/client-store';
|
|
8
|
+
import type { InjectFace, PropsLocale, PropsRuntime } from '@qilin-agent/client-ui-slots';
|
|
9
|
+
/** Registration-side preference face. */
|
|
10
|
+
export interface ContentWidthRowInjected {
|
|
11
|
+
hooks: {
|
|
12
|
+
/** Persisted transcript width bound as useContentWidth. */
|
|
13
|
+
contentWidth: SnapshotStore<number>;
|
|
14
|
+
};
|
|
15
|
+
/** Persist a width, or {@link CONTENT_WIDTH_ADAPTIVE} to return to the adaptive clamp. */
|
|
16
|
+
setContentWidth: (px: number) => void;
|
|
17
|
+
}
|
|
18
|
+
/** Full Settings-row props. */
|
|
19
|
+
export type ContentWidthRowProps = PropsRuntime<'settings.general.item'> & PropsLocale<'conversation'> & InjectFace<ContentWidthRowInjected>;
|
|
20
|
+
/**
|
|
21
|
+
* Render the transcript width row.
|
|
22
|
+
* @param props - composed Settings slot props.
|
|
23
|
+
* @returns the preference row.
|
|
24
|
+
*/
|
|
25
|
+
export declare function ContentWidthRow({ t, useContentWidth, setContentWidth }: ContentWidthRowProps): import("react").JSX.Element;
|
|
26
|
+
//# sourceMappingURL=ContentWidthRow.d.ts.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { SnapshotStore } from '@qilin-agent/client-store';
|
|
2
|
+
import type { InjectFace, PropsLocale, PropsRuntime } from '@qilin-agent/client-ui-slots';
|
|
3
|
+
import type { BusyEnterBehavior } from '../contract/composer-submission.ts';
|
|
4
|
+
/** Registration-side preference face. */
|
|
5
|
+
export interface EnterBehaviorRowInjected {
|
|
6
|
+
hooks: {
|
|
7
|
+
/** Persisted busy-state preference bound as useBusyEnter. */
|
|
8
|
+
busyEnter: SnapshotStore<BusyEnterBehavior>;
|
|
9
|
+
};
|
|
10
|
+
/** Change the busy-state plain-Enter behavior. */
|
|
11
|
+
setBusyEnter: (behavior: BusyEnterBehavior) => void;
|
|
12
|
+
}
|
|
13
|
+
/** Full Settings-row props. */
|
|
14
|
+
export type EnterBehaviorRowProps = PropsRuntime<'settings.general.item'> & PropsLocale<'conversation'> & InjectFace<EnterBehaviorRowInjected>;
|
|
15
|
+
/**
|
|
16
|
+
* Render the busy-state Enter behavior selector.
|
|
17
|
+
* @param props - composed Settings slot props.
|
|
18
|
+
* @returns the preference row.
|
|
19
|
+
*/
|
|
20
|
+
export declare function EnterBehaviorRow({ useBusyEnter, setBusyEnter, t }: EnterBehaviorRowProps): import("react").JSX.Element;
|
|
21
|
+
//# sourceMappingURL=EnterBehaviorRow.d.ts.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Composer context-occupancy meter: a ring and percentage below the card fed by the
|
|
2
|
+
* `contextPressure` projection, with a click-open panel of the heuristic
|
|
3
|
+
* `contextBreakdown` composition (system prompt, tools, conversation).
|
|
4
|
+
* Renders nothing until a provider reports both pressure and a route
|
|
5
|
+
* capacity. */
|
|
6
|
+
import type { UseProjection } from '@qilin-agent/api-session-controller/client';
|
|
7
|
+
import type { ComposerBarProps } from '../contract/slots.ts';
|
|
8
|
+
export interface ContextMeterProps {
|
|
9
|
+
useProjection: UseProjection;
|
|
10
|
+
/** The owning bar's locale seat, passed down as a plain prop. */
|
|
11
|
+
t: ComposerBarProps['t'];
|
|
12
|
+
}
|
|
13
|
+
export declare function ContextMeter({ useProjection, t }: ContextMeterProps): import("react").JSX.Element | null;
|
|
14
|
+
//# sourceMappingURL=ContextMeter.d.ts.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ConversationContentProps } from '../contract/slots.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Render the shared Conversation body and its occurrence-selected local Components.
|
|
4
|
+
* @param props - Factory input, standard Session sources, and Conversation seats.
|
|
5
|
+
* @returns the Conversation view, Composer, and optional width controls.
|
|
6
|
+
*/
|
|
7
|
+
export declare function ConversationContent(props: ConversationContentProps): import("react").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=ConversationContent.d.ts.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ConversationHeaderProps } from '../contract/slots.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Keeps global navigation available before a Session exists.
|
|
4
|
+
* @param props - Optional Session sources and authorized header slots.
|
|
5
|
+
* @returns The persistent header with any selected Session's title and views.
|
|
6
|
+
*/
|
|
7
|
+
export declare function ConversationHeader({ sessionId, useSession, useConversation, renderSlot }: ConversationHeaderProps): import("react").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=ConversationHeader.d.ts.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Root-scoped main occupant; Session binding belongs to its Conversation child. */
|
|
2
|
+
import type { PropsRenderSlots, PropsRuntime } from '@qilin-agent/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
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ConversationSlotProps } from '../contract/slots.ts';
|
|
2
|
+
/** Full props composed from the slot contract. */
|
|
3
|
+
export type ConversationRootProps = ConversationSlotProps;
|
|
4
|
+
export declare function ConversationRoot(props: ConversationRootProps): import("react").JSX.Element;
|
|
5
|
+
//# sourceMappingURL=ConversationRoot.d.ts.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** Strict per-session header/body content inserted into the resident conversation layout. */
|
|
2
|
+
import type { ConversationSessionHeaderSlotProps, ConversationSessionSlotProps } from '../contract/slots.ts';
|
|
3
|
+
/** Full props composed from the strict session body contract. */
|
|
4
|
+
export type ConversationSessionProps = ConversationSessionSlotProps;
|
|
5
|
+
/** Full props composed from the strict session header contract. */
|
|
6
|
+
export type ConversationSessionHeaderProps = ConversationSessionHeaderSlotProps;
|
|
7
|
+
/**
|
|
8
|
+
* Renders the Session-specific half of the resident header: breadcrumbs,
|
|
9
|
+
* Session actions, utilities, and the View tab strip.
|
|
10
|
+
* @param props - Session identity, parent-owned chrome visibility, view ledger, navigation, render, and locale shares.
|
|
11
|
+
* @returns the title row and, with more than one View, the tab strip.
|
|
12
|
+
*/
|
|
13
|
+
export declare function ConversationSessionHeader({ sessionId, hideChrome, useSessions, useConversationViews, useStore, renderSlot, open, selectView, t, }: ConversationSessionHeaderProps): import("react").JSX.Element;
|
|
14
|
+
/**
|
|
15
|
+
* Renders the active Session view inside the resident scrollport and keeps
|
|
16
|
+
* the input draft mirrored while blank Hero chrome is visible.
|
|
17
|
+
* @param props - Strict Session input/store, view ledger, and render shares.
|
|
18
|
+
* @returns the active view area, or null while the Session remains blank.
|
|
19
|
+
*/
|
|
20
|
+
export declare function ConversationSession(props: ConversationSessionProps): import("react").JSX.Element;
|
|
21
|
+
//# sourceMappingURL=ConversationSession.d.ts.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ConversationWidthControlsProps } from '../contract/slots.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Install the main Conversation width axis and render its drag handles.
|
|
4
|
+
*
|
|
5
|
+
* The width is the Host settings document's durable value, read through the
|
|
6
|
+
* injected content-width hook and written back through `setContentWidth`, so a
|
|
7
|
+
* drag and the Settings row share one source of truth. The preference is read
|
|
8
|
+
* through a ref, so a width change never rebuilds the measurement observer; the
|
|
9
|
+
* second effect republishes when it moves.
|
|
10
|
+
* @param props - Mounted Conversation body, presentation phase, and the durable width share.
|
|
11
|
+
* @returns two active-phase width handles, or no controls outside the active phase.
|
|
12
|
+
*/
|
|
13
|
+
export declare function ConversationWidthControls({ container, phase, useContentWidth, setContentWidth, }: ConversationWidthControlsProps): import("react").JSX.Element[] | null;
|
|
14
|
+
//# sourceMappingURL=ConversationWidthControls.d.ts.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ConversationSessionSlotProps } from '../contract/slots.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Renders the active Session view inside the resident scrollport and keeps
|
|
4
|
+
* the input draft mirrored while blank Hero chrome is visible.
|
|
5
|
+
* @param props - Strict Session input/store, view ledger, and render shares.
|
|
6
|
+
* @returns the active view area, or null while the Session remains blank.
|
|
7
|
+
*/
|
|
8
|
+
export declare function DefaultConversationViews({ view, useSession, useConversation, useConversationViews, useInput, inputActions, useStore, actions, renderSlot, bindDraftMirror, openView, }: ConversationSessionSlotProps): import("react").JSX.Element | null;
|
|
9
|
+
//# sourceMappingURL=DefaultConversationViews.d.ts.map
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { ReactNode, RefObject } from 'react';
|
|
2
|
+
import type { ConversationContentProps } from '../contract/slots.ts';
|
|
3
|
+
/** The owner's locale seat type, passed to hero chrome as a plain prop. */
|
|
4
|
+
type HeroTranslate = ConversationContentProps['t'];
|
|
5
|
+
/**
|
|
6
|
+
* Basename label for the workspace chip (the shared derivation);
|
|
7
|
+
* separator-only paths echo the raw cwd.
|
|
8
|
+
* @param cwd - workspace directory path (non-empty).
|
|
9
|
+
* @returns chip label.
|
|
10
|
+
*/
|
|
11
|
+
export declare function workspaceLabel(cwd: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* The workspace chip (folder + label + chevron), always interactive: before
|
|
14
|
+
* the first message the workspace stays switchable — picking another one
|
|
15
|
+
* moves the New Session flow to that workspace's blank session. Without a
|
|
16
|
+
* label the chip renders its placeholder state: closed folder + the
|
|
17
|
+
* "Choose workspace" call to action.
|
|
18
|
+
* @param props.label - chip label (see {@link workspaceLabel}); omitted → placeholder.
|
|
19
|
+
* @param props.menuOpen - menu expansion echo.
|
|
20
|
+
* @param props.onClick - menu toggle.
|
|
21
|
+
* @returns the chip button element.
|
|
22
|
+
*/
|
|
23
|
+
export declare function WorkspaceChip({ buttonRef, label, menuOpen, onClick, t }: {
|
|
24
|
+
buttonRef?: RefObject<HTMLButtonElement>;
|
|
25
|
+
label?: string | undefined;
|
|
26
|
+
menuOpen?: boolean;
|
|
27
|
+
onClick?: () => void;
|
|
28
|
+
t: HeroTranslate;
|
|
29
|
+
}): import("react").JSX.Element;
|
|
30
|
+
/** Hero chrome props. The workspace row rides the InputBar accessory hole, not here. */
|
|
31
|
+
export interface HeroShellProps {
|
|
32
|
+
/** The owner's locale seat, passed down as a plain prop. */
|
|
33
|
+
t: HeroTranslate;
|
|
34
|
+
/** Authorized renderer for the hero brand-mark slot. */
|
|
35
|
+
renderSlot: ConversationContentProps['renderSlot'];
|
|
36
|
+
/** Overlay content after the stack (modals). */
|
|
37
|
+
children?: ReactNode;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Render the hero chrome (brand mark, greeting, tagline; no composer, no
|
|
41
|
+
* workspace row). The ambient wordmark behind the text is decoration: it carries
|
|
42
|
+
* the product name at a size that reads as background rather than a second
|
|
43
|
+
* headline, and it is hidden from the accessibility tree.
|
|
44
|
+
* @param props - see {@link HeroShellProps}.
|
|
45
|
+
* @returns the centered hero element tree.
|
|
46
|
+
*/
|
|
47
|
+
export declare function HeroShell({ t, renderSlot, children }: HeroShellProps): import("react").JSX.Element;
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=EmptyHero.d.ts.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** The default composer body: the 'conversation.composer.bar' slot entry.
|
|
2
|
+
* Machine state arrives through the standard provide channel
|
|
3
|
+
* (useInput + inputActions); the keyboard/DOM command face and stop arrive
|
|
4
|
+
* through this entry's own inject, whose hooks compartment binds
|
|
5
|
+
* useNotices/useLexicon; layout-phase inputs (variant and placeholder) ride
|
|
6
|
+
* the owner props. Session facts
|
|
7
|
+
* (running/removed/promptError) are self-selected via useSession.
|
|
8
|
+
*
|
|
9
|
+
* The text surface is the shell-owned Lexical editor bound here through
|
|
10
|
+
* ComposerContentEditable; chips render as decorator portals, and the
|
|
11
|
+
* keymap registers submit/menu/paste gestures on the editor command layer.
|
|
12
|
+
* The no-session state renders the SAME div inert as the Workspace-picker
|
|
13
|
+
* trigger instead of a parallel tree.
|
|
14
|
+
*/
|
|
15
|
+
import type { ComposerBarProps } from '../contract/slots.ts';
|
|
16
|
+
export type InputBarProps = ComposerBarProps;
|
|
17
|
+
export declare const InputBar: import("react").MemoExoticComponent<({ useSession, useInput, inputActions, keyboard, addFiles, removeAttachment, resolveDraftAttachments, retryFileUpload, toggleCommandMenu, stop, t, renderSlot, useBusyEnter, useFileUploads, useNotices, useLexicon, useMenuLauncher, useProjection, sessionId, variant, disabled: inert, blocked, workspacePickerOpen, onRequestWorkspace, placeholder, accessory, }: InputBarProps) => import("react").JSX.Element>;
|
|
18
|
+
//# sourceMappingURL=InputBar.d.ts.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Context } from '@qilin-agent/kylin';
|
|
2
|
+
import type { PropsLocale, PropsRuntime } from '@qilin-agent/client-ui-slots';
|
|
3
|
+
import type { TodoItem } from '@qilin-agent/tool-todo/client';
|
|
4
|
+
export interface TodoPanelProps {
|
|
5
|
+
/** The session's current plan (empty renders nothing) — selected by the dock adapter. */
|
|
6
|
+
todos: readonly TodoItem[];
|
|
7
|
+
/** The dock entry's locale seat, passed down as a plain prop. */
|
|
8
|
+
t: TodoDockProps['t'];
|
|
9
|
+
}
|
|
10
|
+
export declare function TodoPanel({ todos, t }: TodoPanelProps): import("react").JSX.Element | null;
|
|
11
|
+
/** Props for the projected todo dock. */
|
|
12
|
+
export type TodoDockProps = PropsRuntime<'conversation.input.dock'> & PropsLocale<'conversation'>;
|
|
13
|
+
/** Renders the current todo projection, or nothing when it is absent. */
|
|
14
|
+
export declare function TodoDock({ useProjection, t }: TodoDockProps): import("react").JSX.Element;
|
|
15
|
+
/** Registers the projected todo dock. */
|
|
16
|
+
export declare const todoDockEntry: {
|
|
17
|
+
name: string;
|
|
18
|
+
inject: string[];
|
|
19
|
+
apply(ctx: Context): void;
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=TodoPanel.d.ts.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Content-sized model collapse for the composer's two control groups. */
|
|
2
|
+
/**
|
|
3
|
+
* Collapse the model text only when the expanded controls cannot share a line.
|
|
4
|
+
* The model seat consumes the row's inherited display variables; wrapping remains
|
|
5
|
+
* available when even the icon cannot fit. Each notification is measured synchronously.
|
|
6
|
+
* @param row - Composer control row with its leading and trailing groups.
|
|
7
|
+
* @returns Disconnect the layout observers and font listener.
|
|
8
|
+
*/
|
|
9
|
+
export declare function observeControlRow(row: HTMLElement): () => void;
|
|
10
|
+
//# sourceMappingURL=control-row-layout.d.ts.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Safari-specific textarea layout recovery for the conversation composer. */
|
|
2
|
+
/** Browser identity fields needed to distinguish Safari from other WebKit-based browsers. */
|
|
3
|
+
export interface BrowserIdentity {
|
|
4
|
+
readonly userAgent: string;
|
|
5
|
+
readonly vendor: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Detect Safari's `Version/... Safari/...` form while excluding known alternate iOS browser tokens.
|
|
9
|
+
* @param identity - Browser user-agent and vendor values.
|
|
10
|
+
* @returns Whether the identity should use the Safari-specific recovery.
|
|
11
|
+
*/
|
|
12
|
+
export declare function isSafariBrowser(identity: BrowserIdentity): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Repair Safari's stale native textarea layout and the scrollport auto height it can contaminate.
|
|
15
|
+
* @param input - Composer textarea whose own scrollable overflow must stay zero.
|
|
16
|
+
*/
|
|
17
|
+
export declare function repairSafariTextareaLayout(input: HTMLTextAreaElement | null): void;
|
|
18
|
+
//# sourceMappingURL=safari.d.ts.map
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** Two independent Escape presses addressed to one Conversation occurrence and live turn. */
|
|
2
|
+
import type { SessionId } from '@qilin-agent/session/types';
|
|
3
|
+
/** Freshly resolved cancellation target; occurrence and region preserve focus ownership. */
|
|
4
|
+
export interface StopTarget {
|
|
5
|
+
readonly sessionId: SessionId;
|
|
6
|
+
readonly turn: number;
|
|
7
|
+
/** Materialized Session binding identity; replacement invalidates an earlier press. */
|
|
8
|
+
readonly generation: object;
|
|
9
|
+
readonly region: Element;
|
|
10
|
+
readonly cancel: () => void;
|
|
11
|
+
}
|
|
12
|
+
/** One short-lived first press, cleared before an accepted cancellation runs. */
|
|
13
|
+
export declare class StopSequence {
|
|
14
|
+
private readonly intervalMs;
|
|
15
|
+
private readonly release;
|
|
16
|
+
private first;
|
|
17
|
+
private timer;
|
|
18
|
+
/**
|
|
19
|
+
* @param intervalMs - validated maximum time between independent presses.
|
|
20
|
+
* @param release - releases observations retained by the pending first press.
|
|
21
|
+
*/
|
|
22
|
+
constructor(intervalMs: number, release: () => void);
|
|
23
|
+
/** Clear the first press and its expiry timer. */
|
|
24
|
+
reset(): void;
|
|
25
|
+
/**
|
|
26
|
+
* Accept one eligible, non-repeated Escape against freshly resolved current state.
|
|
27
|
+
* @param target - live turn and actual focused input region.
|
|
28
|
+
* @returns whether this press requested cancellation.
|
|
29
|
+
*/
|
|
30
|
+
press(target: StopTarget): boolean;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=stop-sequence.d.ts.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** Fixed Escape routing into the current Conversation turn's scoped cancellation. */
|
|
2
|
+
import type { ISessions, SessionBinding } from '@qilin-agent/api-session-controller/client';
|
|
3
|
+
import type { Shortcuts } from '@qilin-agent/client-shortcuts/client';
|
|
4
|
+
import type { UiSession } from '@qilin-agent/client-ui-session/client';
|
|
5
|
+
import type { SessionId } from '@qilin-agent/session/types';
|
|
6
|
+
import type { ObservableSnapshot } from '@qilin-agent/client-store';
|
|
7
|
+
/**
|
|
8
|
+
* Subscribe fixed input to the same Session cancellation used by the stop button.
|
|
9
|
+
* @param shortcuts - window keyboard arbitration and validated sequence interval.
|
|
10
|
+
* @param sessions - live Session identities and lifecycle sources.
|
|
11
|
+
* @param openTurn - stable current-turn source for a live Session binding.
|
|
12
|
+
* @param uiSession - current pending-interaction status.
|
|
13
|
+
* @param cancel - scoped stop operation that preserves Queue and reports failures.
|
|
14
|
+
* @returns disposer releasing the input subscription, pending watches and expiry timer.
|
|
15
|
+
*/
|
|
16
|
+
export declare function installStopShortcut(shortcuts: Shortcuts, sessions: ISessions, openTurn: (binding: SessionBinding) => ObservableSnapshot<number | undefined>, uiSession: UiSession, cancel: (sessionId: SessionId) => void): () => void;
|
|
17
|
+
//# sourceMappingURL=stop-shortcut.d.ts.map
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** Per-session Conversation store shared by the shell body and header. */
|
|
2
|
+
import { type EngineStoreHandle } from '@qilin-agent/client-store';
|
|
3
|
+
import type { SessionId } from '@qilin-agent/session/types';
|
|
4
|
+
import type { ConversationStoreState } from './contract/views.ts';
|
|
5
|
+
/** Declared write set for the Conversation shell. */
|
|
6
|
+
type ConversationActions = {
|
|
7
|
+
setDraft: (draft: ConversationStoreState, text: string) => void;
|
|
8
|
+
setView: (draft: ConversationStoreState, view: string) => void;
|
|
9
|
+
openView: (draft: ConversationStoreState, view: string, focus: string) => void;
|
|
10
|
+
completeViewRequest: (draft: ConversationStoreState) => void;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Declare per-session draft persistence and View selection.
|
|
14
|
+
* @returns the store handle.
|
|
15
|
+
*/
|
|
16
|
+
export declare function createConversationStore(): EngineStoreHandle<ConversationStoreState, ConversationActions>;
|
|
17
|
+
/**
|
|
18
|
+
* Read the persisted View preference before the Slot store is materialized.
|
|
19
|
+
* @param sessionId - Session-scoped persistence suffix.
|
|
20
|
+
* @returns the preferred View id, or null when storage has no usable value.
|
|
21
|
+
*/
|
|
22
|
+
export declare function readConversationViewPreference(sessionId: SessionId): string | null;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=stores.d.ts.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ViewTab } from './contract/views.ts';
|
|
2
|
+
/** Registered identity of the trajectory View; hidden while Developer tools are off. */
|
|
3
|
+
export declare const TRAJECTORY_VIEW_ID = "trajectory";
|
|
4
|
+
/**
|
|
5
|
+
* Resolve a preferred registered View, then Chat, without choosing another View.
|
|
6
|
+
* @param tabs - currently registered Views.
|
|
7
|
+
* @param selectedId - preferred View identity, when one is stored.
|
|
8
|
+
* @returns the selected View, Chat fallback, or undefined when neither is registered.
|
|
9
|
+
*/
|
|
10
|
+
export declare function resolveActiveView(tabs: readonly ViewTab[], selectedId: string | null): ViewTab | undefined;
|
|
11
|
+
//# sourceMappingURL=view-selection.d.ts.map
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/** Conversation preferences stored in the Host user-settings document. */
|
|
2
|
+
import z from '@qilin-agent/schemastery';
|
|
3
|
+
/** Settings namespace owned by the conversation plugin. */
|
|
4
|
+
export declare const CONVERSATION_SETTINGS_NAMESPACE = "ui-conversation";
|
|
5
|
+
/** Field carrying the delivery mode for plain Enter while an agent is busy. */
|
|
6
|
+
export declare const BUSY_ENTER_FIELD = "busyEnter";
|
|
7
|
+
/** Field carrying the transcript content width. */
|
|
8
|
+
export declare const CONTENT_WIDTH_FIELD = "contentWidth";
|
|
9
|
+
/** Busy-Enter behaviors accepted at settings and input boundaries. */
|
|
10
|
+
export declare const BUSY_ENTER_BEHAVIORS: readonly ["queue", "steer"];
|
|
11
|
+
/** Configurable meaning of plain Enter while the addressed agent is busy. */
|
|
12
|
+
export type BusyEnterBehavior = typeof BUSY_ENTER_BEHAVIORS[number];
|
|
13
|
+
/** Default preserves Enter-as-Queue for running conversations. */
|
|
14
|
+
export declare const DEFAULT_BUSY_ENTER_BEHAVIOR: BusyEnterBehavior;
|
|
15
|
+
/**
|
|
16
|
+
* Content width that leaves the transcript to the layout's adaptive clamp
|
|
17
|
+
* (`clamp(680px, 64% of the column, 920px)`); any other value is an explicit
|
|
18
|
+
* width in px.
|
|
19
|
+
*/
|
|
20
|
+
export declare const CONTENT_WIDTH_ADAPTIVE = 0;
|
|
21
|
+
/** Narrowest explicit content width (px); the layout center-column floor. */
|
|
22
|
+
export declare const CONTENT_WIDTH_MIN = 640;
|
|
23
|
+
/** Widest persistable content width (px), bounding a hand-edited settings document. */
|
|
24
|
+
export declare const CONTENT_WIDTH_MAX = 2400;
|
|
25
|
+
/** Increment one stepper click moves the content width (px). */
|
|
26
|
+
export declare const CONTENT_WIDTH_STEP = 20;
|
|
27
|
+
/** Content width before the user picks one. */
|
|
28
|
+
export declare const DEFAULT_CONTENT_WIDTH = 0;
|
|
29
|
+
/** Durable conversation section shared by the Host schema and the browser scope. */
|
|
30
|
+
export interface ConversationSettings {
|
|
31
|
+
/** Delivery mode for plain Enter while the addressed agent is busy. */
|
|
32
|
+
busyEnter: BusyEnterBehavior;
|
|
33
|
+
/** Transcript content width in px, or {@link CONTENT_WIDTH_ADAPTIVE} for the layout clamp. */
|
|
34
|
+
contentWidth: number;
|
|
35
|
+
}
|
|
36
|
+
/** Durable conversation schema; also the wire envelope the browser scope validates against. */
|
|
37
|
+
export declare const ConversationSettingsSchema: z<ConversationSettings>;
|
|
38
|
+
//# sourceMappingURL=conversation-settings.d.ts.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Host registration for browser conversation preferences. */
|
|
2
|
+
import type { Context } from '@qilin-agent/kylin';
|
|
3
|
+
export { BUSY_ENTER_BEHAVIORS, BUSY_ENTER_FIELD, CONVERSATION_SETTINGS_NAMESPACE, CONTENT_WIDTH_ADAPTIVE, CONTENT_WIDTH_FIELD, CONTENT_WIDTH_MAX, CONTENT_WIDTH_MIN, CONTENT_WIDTH_STEP, DEFAULT_BUSY_ENTER_BEHAVIOR, DEFAULT_CONTENT_WIDTH, type BusyEnterBehavior, type ConversationSettings, } from './conversation-settings.ts';
|
|
4
|
+
/**
|
|
5
|
+
* Register the durable conversation section when a settings provider exists.
|
|
6
|
+
* @param ctx - Host context whose optional settings service owns the section.
|
|
7
|
+
*/
|
|
8
|
+
export declare function apply(ctx: Context): void;
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|