@deepseek-ai/dsh-experimental-client-ui-voice-input 0.1.7-alpha.1
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 +6 -0
- package/README.md +76 -0
- package/README.zh.md +76 -0
- package/lib/client.js +5714 -0
- package/lib/index.js +6 -0
- package/lib/types/client/PreparationCard.d.ts +14 -0
- package/lib/types/client/VoiceInput.d.ts +27 -0
- package/lib/types/client/VoiceSetupPrompt.d.ts +12 -0
- package/lib/types/client/Waveform.d.ts +7 -0
- package/lib/types/client/audio.d.ts +55 -0
- package/lib/types/client/index.d.ts +10 -0
- package/lib/types/client/locales.d.ts +108 -0
- package/lib/types/client/mount.d.ts +12 -0
- package/lib/types/client/readiness.d.ts +20 -0
- package/lib/types/index.d.ts +4 -0
- package/package.json +97 -0
package/lib/index.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { InjectFace, PropsLocale } from '@deepseek-ai/dsh-client-ui-slots';
|
|
2
|
+
import type { SpeechProviderView } from '@deepseek-ai/dsh-experimental-speech-to-text/types';
|
|
3
|
+
import type { VoiceInputInjected } from './VoiceInput.tsx';
|
|
4
|
+
import { NS } from './locales.ts';
|
|
5
|
+
/** One recognizer's resource readiness and explicit preparation controls. */
|
|
6
|
+
export type PreparationCardProps = Pick<InjectFace<VoiceInputInjected>, 'prepare' | 'cancelPreparation'> & PropsLocale<typeof NS> & {
|
|
7
|
+
readonly provider: SpeechProviderView;
|
|
8
|
+
readonly connected: boolean;
|
|
9
|
+
};
|
|
10
|
+
/** Render a collapsed current-step summary or all Host-owned preparation steps. */
|
|
11
|
+
export declare function PreparationCard({ provider, connected, prepare, cancelPreparation, t }: PreparationCardProps): import("react").JSX.Element;
|
|
12
|
+
/** Recognition preferences and preparation cards shared by plugin details and Settings. */
|
|
13
|
+
export declare function VoicePreparation({ useSpeechReadiness, ...props }: InjectFace<VoiceInputInjected> & PropsLocale<typeof NS>): import("react").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=PreparationCard.d.ts.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { HostObservable, InjectFace, PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';
|
|
2
|
+
import type { TranscriptionRequest } from '@deepseek-ai/dsh-experimental-api-speech-to-text/types';
|
|
3
|
+
import type { SpeechProviderId, SpeechSelectionPatch, Transcript } from '@deepseek-ai/dsh-experimental-speech-to-text/types';
|
|
4
|
+
import type { RemoteResult } from '@deepseek-ai/dsh-typert-protocol';
|
|
5
|
+
import { type Recording } from './audio.ts';
|
|
6
|
+
import type { SpeechReadiness } from './readiness.ts';
|
|
7
|
+
import { NS } from './locales.ts';
|
|
8
|
+
/** Host calls injected without exposing a Cordis Context to React. */
|
|
9
|
+
export interface VoiceInputActions {
|
|
10
|
+
/** @returns one microphone operation owned by the plugin lifecycle. */
|
|
11
|
+
createRecording: () => Recording;
|
|
12
|
+
transcribe: (request: TranscriptionRequest, signal: AbortSignal) => Promise<RemoteResult<Transcript>>;
|
|
13
|
+
prepare: (providerId: SpeechProviderId) => Promise<void>;
|
|
14
|
+
cancelPreparation: (providerId: SpeechProviderId) => Promise<void>;
|
|
15
|
+
configure: (patch: SpeechSelectionPatch) => Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
/** Entry-injected Host readiness and microphone operations. */
|
|
18
|
+
export interface VoiceInputInjected extends VoiceInputActions {
|
|
19
|
+
hooks: {
|
|
20
|
+
speechReadiness: HostObservable<SpeechReadiness>;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/** Composer-owned expansion and draft actions; preferences stay in plugin settings. */
|
|
24
|
+
export type VoiceInputProps = Pick<PropsRuntime<'conversation.input.activity'>, 'sessionId' | 'inputActions' | 'locked' | 'onActiveChange'> & PropsLocale<typeof NS> & InjectFace<VoiceInputInjected>;
|
|
25
|
+
/** Render a compact microphone or an expanded capture, transcription, or retry row. */
|
|
26
|
+
export declare function VoiceInput({ sessionId, inputActions, locked, onActiveChange, createRecording, transcribe, useSpeechReadiness, t }: VoiceInputProps): import("react").JSX.Element;
|
|
27
|
+
//# sourceMappingURL=VoiceInput.d.ts.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { InjectFace, PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';
|
|
2
|
+
import type { VoiceInputInjected } from './VoiceInput.tsx';
|
|
3
|
+
import type { NS } from './locales.ts';
|
|
4
|
+
/** Registration shares for the bundle's activation guidance. */
|
|
5
|
+
export type VoiceSetupPromptProps = PropsRuntime<'plugins.bundle.activation'> & PropsLocale<typeof NS> & Pick<InjectFace<VoiceInputInjected>, 'useSpeechReadiness'>;
|
|
6
|
+
/**
|
|
7
|
+
* Offer navigation to installation without starting a download.
|
|
8
|
+
* @param props - activation navigation and the shared Host readiness observer.
|
|
9
|
+
* @returns the shared modal only when the selected local provider needs preparation.
|
|
10
|
+
*/
|
|
11
|
+
export declare function VoiceSetupPrompt({ useSpeechReadiness, onDismiss, onOpenDetails, t }: VoiceSetupPromptProps): import("react").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=VoiceSetupPrompt.d.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Recording } from './audio.ts';
|
|
2
|
+
/** Render recent measured microphone levels; silent audio remains a dotted baseline. */
|
|
3
|
+
export declare function Waveform({ recording, label }: {
|
|
4
|
+
readonly recording: Recording | undefined;
|
|
5
|
+
readonly label: string;
|
|
6
|
+
}): import("react").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=Waveform.d.ts.map
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/** Browser-owned microphone capture and native Web Audio resampling. */
|
|
2
|
+
/** Capture failure whose message is localized by the caller. */
|
|
3
|
+
export declare class RecordingError extends Error {
|
|
4
|
+
readonly kind: 'unavailable' | 'permission' | 'empty' | 'cancelled' | 'interrupted';
|
|
5
|
+
constructor(kind: 'unavailable' | 'permission' | 'empty' | 'cancelled' | 'interrupted');
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Encode mono floating-point samples as the canonical PCM16 WAV accepted by the Host.
|
|
9
|
+
* @param samples - native-resampled 16 kHz mono samples.
|
|
10
|
+
* @returns complete little-endian WAV bytes.
|
|
11
|
+
*/
|
|
12
|
+
export declare function encodeWave(samples: Float32Array): Uint8Array<ArrayBuffer>;
|
|
13
|
+
/**
|
|
14
|
+
* Encode the binary recording for the existing JSON Remote carrier.
|
|
15
|
+
* @param bytes - complete recording.
|
|
16
|
+
* @returns base64 with no data URL prefix.
|
|
17
|
+
*/
|
|
18
|
+
export declare function audioBase64(bytes: Uint8Array): string;
|
|
19
|
+
/** One microphone acquisition, including a permission prompt that may settle after cancellation. */
|
|
20
|
+
export declare class Recording {
|
|
21
|
+
private readonly onDispose;
|
|
22
|
+
private stream;
|
|
23
|
+
private recorder;
|
|
24
|
+
private context;
|
|
25
|
+
private analyser;
|
|
26
|
+
private samples;
|
|
27
|
+
private chunks;
|
|
28
|
+
private readonly lifetime;
|
|
29
|
+
private disposal;
|
|
30
|
+
constructor(onDispose: () => void);
|
|
31
|
+
/**
|
|
32
|
+
* Acquire the microphone for this recording.
|
|
33
|
+
* @param onError - receives failures during capture, before asynchronous resource release finishes.
|
|
34
|
+
* @returns after capture starts; a cancelled permission grant immediately releases its tracks.
|
|
35
|
+
*/
|
|
36
|
+
start(onError?: (error: RecordingError) => void): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Read the live microphone signal.
|
|
39
|
+
* @returns the measured RMS level, or zero outside capture.
|
|
40
|
+
*/
|
|
41
|
+
amplitude(): number;
|
|
42
|
+
/**
|
|
43
|
+
* Finish capture and resample the recording.
|
|
44
|
+
* @param maxDurationSeconds - truncate timer overshoot to the Host limit.
|
|
45
|
+
* @returns one recording after the final MediaRecorder chunk arrives.
|
|
46
|
+
*/
|
|
47
|
+
stop(maxDurationSeconds: number): Promise<Uint8Array<ArrayBuffer>>;
|
|
48
|
+
/**
|
|
49
|
+
* Release this recording and invalidate pending permission grants.
|
|
50
|
+
* @returns the shared release promise, including any AudioContext close failure.
|
|
51
|
+
*/
|
|
52
|
+
dispose(): Promise<void>;
|
|
53
|
+
private release;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=audio.d.ts.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Browser entry for the optional speech Remote contribution and composer control. */
|
|
2
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
3
|
+
export { inject } from './mount.ts';
|
|
4
|
+
/**
|
|
5
|
+
* Activate the experimental microphone contribution.
|
|
6
|
+
* @param ctx - Client runtime.
|
|
7
|
+
* @returns complete UI and Remote disposer.
|
|
8
|
+
*/
|
|
9
|
+
export declare function apply(ctx: Context): Promise<() => Promise<void>>;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/** Dictionary namespace for every voice control. */
|
|
2
|
+
export declare const NS = "voice-input";
|
|
3
|
+
/** Chinese dictionary and key source. */
|
|
4
|
+
export declare const zh: {
|
|
5
|
+
readonly dictate: "听写";
|
|
6
|
+
readonly 'setupPrompt.title': "使用语音输入前需要安装";
|
|
7
|
+
readonly 'setupPrompt.body': "语音输入插件已开启。首次使用需要在本机下载并准备识别模型,请前往插件详情页查看空间、内存和时间说明,再开始安装。";
|
|
8
|
+
readonly 'setupPrompt.later': "稍后";
|
|
9
|
+
readonly 'setupPrompt.open': "前往安装";
|
|
10
|
+
readonly 'setup.local': "将在运行 DSH 的机器上下载本地模型,无需安装 Python 或编译工具。";
|
|
11
|
+
readonly 'setup.disk': "硬盘空间";
|
|
12
|
+
readonly 'setup.diskValue': "建议预留约 {gb} GB,包含模型、运行时和下载缓存";
|
|
13
|
+
readonly 'setup.memory': "运行内存";
|
|
14
|
+
readonly 'setup.memoryValue': "模型加载后约 {gb} GB,识别时可能更高";
|
|
15
|
+
readonly 'setup.time': "首次准备";
|
|
16
|
+
readonly 'setup.timeValue': "参考 {min}–{max} 分钟,取决于网络和机器性能";
|
|
17
|
+
readonly 'setup.estimateNote': "以上为估算;网络较慢时可能更久。已下载的资源会复用,默认在闲置后释放模型内存。";
|
|
18
|
+
readonly 'step.check': "检查本地资源";
|
|
19
|
+
readonly 'step.model': "准备语音识别模型";
|
|
20
|
+
readonly 'step.vad': "准备语音检测模型";
|
|
21
|
+
readonly 'step.verify': "校验模型文件";
|
|
22
|
+
readonly 'step.load': "加载 {name}";
|
|
23
|
+
readonly 'stepStatus.pending': "未开始";
|
|
24
|
+
readonly 'stepStatus.running': "进行中";
|
|
25
|
+
readonly 'stepStatus.complete': "已完成";
|
|
26
|
+
readonly 'stepStatus.failed': "失败";
|
|
27
|
+
readonly 'stepStatus.cancelled': "已取消";
|
|
28
|
+
readonly 'short.downloading': "下载中";
|
|
29
|
+
readonly 'short.failed': "准备失败";
|
|
30
|
+
readonly retryRecording: "重新录音";
|
|
31
|
+
readonly preparationSteps: "准备步骤";
|
|
32
|
+
readonly prepare: "下载并准备";
|
|
33
|
+
readonly retryPrepare: "重试准备";
|
|
34
|
+
readonly cancelPrepare: "取消准备";
|
|
35
|
+
readonly downloadProgress: "下载进度";
|
|
36
|
+
readonly downloadBytes: "下载:{completed} / {total} MB,{percent}%";
|
|
37
|
+
readonly downloadUnknown: "已下载 {completed} MB";
|
|
38
|
+
readonly elapsed: "已等待 {seconds} 秒";
|
|
39
|
+
readonly preparationFailed: "准备失败:{message}";
|
|
40
|
+
readonly 'download.network': "无法下载 {resource}:连接下载服务失败。";
|
|
41
|
+
readonly 'download.dns': "无法下载 {resource}:无法解析下载地址。";
|
|
42
|
+
readonly 'download.timeout': "下载 {resource} 超时。";
|
|
43
|
+
readonly 'download.certificate': "无法下载 {resource}:安全连接的证书校验失败。";
|
|
44
|
+
readonly 'download.http': "无法下载 {resource}:下载服务返回 HTTP {status}。";
|
|
45
|
+
readonly 'download.integrity': "{resource} 下载不完整或文件校验失败。";
|
|
46
|
+
readonly 'download.storage': "无法保存 {resource}:磁盘空间不足或没有写入权限。";
|
|
47
|
+
readonly 'download.unknown': "准备 {resource} 失败。";
|
|
48
|
+
readonly 'downloadAdvice.network': "请检查运行 DSH 的机器能否访问下载来源及其模型下载服务;如需代理,请在该机器上配置后重试。";
|
|
49
|
+
readonly 'downloadAdvice.dns': "请检查运行 DSH 的机器的 DNS 和代理设置,确认可以解析下载来源的域名后重试。";
|
|
50
|
+
readonly 'downloadAdvice.timeout': "请检查运行 DSH 的机器的网络或代理连接,稍后重试。已下载并通过校验的文件会保留。";
|
|
51
|
+
readonly 'downloadAdvice.certificate': "请检查运行 DSH 的机器的系统时间、受信任证书和代理设置后重试。";
|
|
52
|
+
readonly 'downloadAdvice.http': "请确认下载地址可用、代理可正常连接下载服务,或稍后重试。";
|
|
53
|
+
readonly 'downloadAdvice.integrity': "请重试下载。已完成并通过校验的其他文件会保留。";
|
|
54
|
+
readonly 'downloadAdvice.storage': "请检查运行 DSH 的机器的剩余磁盘空间,以及模型目录的写入权限后重试。";
|
|
55
|
+
readonly 'downloadAdvice.unknown': "请检查运行 DSH 的机器的网络、磁盘空间和模型目录权限后重试。";
|
|
56
|
+
readonly downloadSource: "下载来源:{source}";
|
|
57
|
+
readonly downloadCode: "错误码:{code}";
|
|
58
|
+
readonly reconnecting: "正在连接语音服务…";
|
|
59
|
+
readonly 'preparation.unprepared': "首次使用需要下载本地识别模型。";
|
|
60
|
+
readonly 'preparation.checking': "正在检查本地资源…";
|
|
61
|
+
readonly 'preparation.loading': "正在加载 {name}…";
|
|
62
|
+
readonly 'preparation.waking': "正在唤醒本地语音…";
|
|
63
|
+
readonly 'preparation.ready': "本地语音已就绪。";
|
|
64
|
+
readonly 'preparation.standby': "本地资源已准备,录音时自动唤醒。";
|
|
65
|
+
readonly 'preparation.cancelled': "准备已取消,已完成的下载会保留。";
|
|
66
|
+
readonly 'preparation.cancelling': "正在取消准备…";
|
|
67
|
+
readonly cloudReady: "云端语音识别已就绪。";
|
|
68
|
+
readonly prepareRequired: "请先在语音插件设置中准备识别服务";
|
|
69
|
+
readonly discard: "丢弃识别文字";
|
|
70
|
+
readonly transcribingShort: "识别中…";
|
|
71
|
+
readonly wakingShort: "唤醒中…";
|
|
72
|
+
readonly provider: "识别服务";
|
|
73
|
+
readonly language: "识别语言";
|
|
74
|
+
readonly auto: "自动识别";
|
|
75
|
+
readonly zh: "中文";
|
|
76
|
+
readonly en: "英语";
|
|
77
|
+
readonly yue: "粤语";
|
|
78
|
+
readonly ja: "日语";
|
|
79
|
+
readonly ko: "韩语";
|
|
80
|
+
readonly start: "开始录音";
|
|
81
|
+
readonly stop: "停止并识别";
|
|
82
|
+
readonly cancel: "取消";
|
|
83
|
+
readonly insert: "插入文字";
|
|
84
|
+
readonly loading: "正在读取识别服务…";
|
|
85
|
+
readonly requesting: "请允许使用麦克风…";
|
|
86
|
+
readonly recording: "正在录音…";
|
|
87
|
+
readonly interrupted: "录音中断,请重试。";
|
|
88
|
+
readonly local: "音频在运行 DSH 的机器上识别。首次准备默认从 Hugging Face 下载模型,该机器需要能访问 Hugging Face 及其模型下载服务。如需代理,请在该机器上配置。";
|
|
89
|
+
readonly cloud: "音频将发送至所选云端服务。";
|
|
90
|
+
readonly empty: "未识别到语音";
|
|
91
|
+
readonly cancelled: "已取消语音输入。";
|
|
92
|
+
readonly conflict: "草稿已被修改。识别文字已保留,可在当前光标位置插入。";
|
|
93
|
+
readonly failed: "语音识别失败:{message}";
|
|
94
|
+
readonly unavailable: "当前浏览器不支持录音,请使用支持麦克风的浏览器。";
|
|
95
|
+
readonly permission: "麦克风权限未开启,请在浏览器和系统设置中允许访问。";
|
|
96
|
+
readonly tooLarge: "录音超过服务限制,请缩短录音后重试。";
|
|
97
|
+
};
|
|
98
|
+
/** Keys accepted by the voice input translator. */
|
|
99
|
+
export type VoiceKey = keyof typeof zh;
|
|
100
|
+
/** English dictionary with the same complete key set. */
|
|
101
|
+
export declare const en: Record<VoiceKey, string>;
|
|
102
|
+
declare module '@deepseek-ai/dsh-client-ui-slots' {
|
|
103
|
+
interface LocaleNamespaceMap {
|
|
104
|
+
/** Experimental microphone and transcription controls. */
|
|
105
|
+
'voice-input': VoiceKey;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=locales.d.ts.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Source-safe lifecycle for the optional speech Remote and browser UI. */
|
|
2
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
3
|
+
import type { TypertRemoteContribution } from '@deepseek-ai/dsh-typert-protocol';
|
|
4
|
+
export declare const inject: string[];
|
|
5
|
+
/**
|
|
6
|
+
* Mount this experimental namespace without adding it to stable API Remotes.
|
|
7
|
+
* @param ctx - Client runtime owning the Remote, dictionaries and slots.
|
|
8
|
+
* @param contribution - generated speech Remote definitions.
|
|
9
|
+
* @returns disposer joining UI and Remote withdrawal.
|
|
10
|
+
*/
|
|
11
|
+
export declare function mountVoiceInput(ctx: Context, contribution: TypertRemoteContribution): Promise<() => Promise<void>>;
|
|
12
|
+
//# sourceMappingURL=mount.d.ts.map
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** One reconnecting Host readiness mirror shared by every voice UI occurrence. */
|
|
2
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
3
|
+
import { type SnapshotStore } from '@deepseek-ai/dsh-client-store';
|
|
4
|
+
import type { SpeechCatalog } from '@deepseek-ai/dsh-experimental-api-speech-to-text/types';
|
|
5
|
+
/** Complete provider state, with a separate transport failure that never rewrites Host readiness. */
|
|
6
|
+
export interface SpeechReadiness {
|
|
7
|
+
readonly catalog: SpeechCatalog | null;
|
|
8
|
+
readonly connected: boolean;
|
|
9
|
+
readonly error: string | null;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Subscribe once per Client plugin, independent of rendered pages and Sessions.
|
|
13
|
+
* @param ctx - mounted speech Remote owner.
|
|
14
|
+
* @returns shared readiness snapshot and joined observation cleanup.
|
|
15
|
+
*/
|
|
16
|
+
export declare function observeReadiness(ctx: Context): {
|
|
17
|
+
state: SnapshotStore<SpeechReadiness>;
|
|
18
|
+
dispose: () => Promise<void>;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=readiness.d.ts.map
|
package/package.json
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@deepseek-ai/dsh-experimental-client-ui-voice-input",
|
|
3
|
+
"description": "Record speech and insert editable text into the conversation draft",
|
|
4
|
+
"version": "0.1.7-alpha.1",
|
|
5
|
+
"publishConfig": {
|
|
6
|
+
"access": "public"
|
|
7
|
+
},
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/deepseek-ai/deepseek-harness.git",
|
|
11
|
+
"directory": "packages/experimental/client-ui-voice-input"
|
|
12
|
+
},
|
|
13
|
+
"type": "module",
|
|
14
|
+
"main": "lib/index.js",
|
|
15
|
+
"types": "lib/types/index.d.ts",
|
|
16
|
+
"exports": {
|
|
17
|
+
".": {
|
|
18
|
+
"types": "./lib/types/index.d.ts",
|
|
19
|
+
"default": "./lib/index.js"
|
|
20
|
+
},
|
|
21
|
+
"./src/*": "./src/*",
|
|
22
|
+
"./package.json": "./package.json",
|
|
23
|
+
"./client": {
|
|
24
|
+
"types": "./lib/types/client/index.d.ts",
|
|
25
|
+
"default": "./lib/client.js"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
"lib/index.js",
|
|
30
|
+
"lib/client.js",
|
|
31
|
+
"lib/types/**/*.d.ts"
|
|
32
|
+
],
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"dependencies": {},
|
|
35
|
+
"peerDependencies": {
|
|
36
|
+
"@deepseek-ai/cordis": "^4.0.3",
|
|
37
|
+
"@deepseek-ai/dsh-api-remotes": "^0.1.7-alpha.1",
|
|
38
|
+
"@deepseek-ai/dsh-api-session-controller": "^0.1.7-alpha.1",
|
|
39
|
+
"@deepseek-ai/dsh-client-locale": "^0.1.7-alpha.1",
|
|
40
|
+
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.7-alpha.1",
|
|
41
|
+
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.7-alpha.1",
|
|
42
|
+
"@deepseek-ai/dsh-client-ui-session": "^0.1.7-alpha.1",
|
|
43
|
+
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.7-alpha.1",
|
|
44
|
+
"@deepseek-ai/dsh-client-ui-slots": "^0.1.7-alpha.1",
|
|
45
|
+
"@deepseek-ai/dsh-session": "^0.1.7-alpha.1",
|
|
46
|
+
"@deepseek-ai/dsh-experimental-speech-to-text": "^0.1.7-alpha.1",
|
|
47
|
+
"@deepseek-ai/dsh-api-gateway": "^0.1.7-alpha.1",
|
|
48
|
+
"@deepseek-ai/dsh-client-store": "^0.1.7-alpha.1",
|
|
49
|
+
"@deepseek-ai/dsh-typert-protocol": "^0.1.7-alpha.1",
|
|
50
|
+
"@deepseek-ai/dsh-client-ui-plugin-manager": "^0.1.7-alpha.1",
|
|
51
|
+
"@deepseek-ai/dsh-experimental-api-speech-to-text": "^0.1.7-alpha.1"
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"@types/react": "~18.3.1",
|
|
55
|
+
"react": "^18.2.0",
|
|
56
|
+
"react-dom": "^18.2.0",
|
|
57
|
+
"@testing-library/react": "^16.1.0",
|
|
58
|
+
"@deepseek-ai/dsh-api-remotes": "^0.1.7-alpha.1",
|
|
59
|
+
"@deepseek-ai/dsh-api-session-controller": "^0.1.7-alpha.1",
|
|
60
|
+
"@deepseek-ai/cordis": "^4.0.3",
|
|
61
|
+
"@deepseek-ai/dsh-client-locale": "^0.1.7-alpha.1",
|
|
62
|
+
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.7-alpha.1",
|
|
63
|
+
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.7-alpha.1",
|
|
64
|
+
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.7-alpha.1",
|
|
65
|
+
"@deepseek-ai/dsh-client-ui-session": "^0.1.7-alpha.1",
|
|
66
|
+
"@deepseek-ai/dsh-client-ui-slots": "^0.1.7-alpha.1",
|
|
67
|
+
"@deepseek-ai/dsh-session": "^0.1.7-alpha.1",
|
|
68
|
+
"@deepseek-ai/dsh-typert-protocol": "^0.1.7-alpha.1",
|
|
69
|
+
"@deepseek-ai/dsh-experimental-api-speech-to-text": "^0.1.7-alpha.1",
|
|
70
|
+
"@deepseek-ai/dsh-experimental-speech-to-text": "^0.1.7-alpha.1",
|
|
71
|
+
"@deepseek-ai/dsh-client-test-runtime": "^0.1.7-alpha.1",
|
|
72
|
+
"@deepseek-ai/dsh-api-gateway": "^0.1.7-alpha.1",
|
|
73
|
+
"@deepseek-ai/dsh-client-store": "^0.1.7-alpha.1",
|
|
74
|
+
"@deepseek-ai/dsh-client-ui-plugin-manager": "^0.1.7-alpha.1"
|
|
75
|
+
},
|
|
76
|
+
"dsh": {
|
|
77
|
+
"client": {
|
|
78
|
+
"inject": [
|
|
79
|
+
"@deepseek-ai/dsh-api-remotes",
|
|
80
|
+
"@deepseek-ai/dsh-api-session-controller",
|
|
81
|
+
"@deepseek-ai/dsh-client-locale",
|
|
82
|
+
"@deepseek-ai/dsh-client-ui-conversation",
|
|
83
|
+
"@deepseek-ai/dsh-client-ui-primitives",
|
|
84
|
+
"@deepseek-ai/dsh-api-gateway",
|
|
85
|
+
"@deepseek-ai/dsh-client-ui-plugin-manager"
|
|
86
|
+
],
|
|
87
|
+
"platform": "web",
|
|
88
|
+
"external": [
|
|
89
|
+
"@deepseek-ai/dsh-api-gateway/client"
|
|
90
|
+
]
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
"scripts": {
|
|
94
|
+
"bundle": "tsdown",
|
|
95
|
+
"watch": "tsdown --watch"
|
|
96
|
+
}
|
|
97
|
+
}
|