dsh-connect 0.2.0 → 0.5.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/lib/i18n.js ADDED
@@ -0,0 +1,469 @@
1
+ /**
2
+ * Minimal user-facing string tables for `dsh-connect`. Every message a user
3
+ * can see (menus, command replies, status lines, hints) lives here in both
4
+ * `zh` and `en`; the configured `language` picks the active table. Keep this
5
+ * file free of imports from the runner so it can be shared by any module.
6
+ * @module dsh-connect/i18n
7
+ */
8
+ const zh = {
9
+ reasonCompleted: "✅ 完成",
10
+ reasonAborted: "⏹️ 已中止",
11
+ reasonBlocked: "🚫 阻塞",
12
+ reasonError: "❌ 出错",
13
+ reasonMaxTokens: "⚠️ 达到输出上限",
14
+ reasonInterrupted: "⚠️ 被中断",
15
+ reasonUnknown: "❓ 未知",
16
+ menuRoot: "主菜单",
17
+ menuWorkspace: "切换工作目录",
18
+ menuChat: "切换对话",
19
+ menuSettings: "设置",
20
+ menuModel: "切换模型",
21
+ menuReasoning: "推理强度",
22
+ menuNotify: "通知设置",
23
+ rootSectionWorkspace: "📁 工作区",
24
+ rootSectionChat: "💬 会话",
25
+ rootSectionTask: "📋 任务",
26
+ rootSectionSystem: "🛠️ 系统",
27
+ rootMenuFooter: "轻触按钮选择 · 操作后自动返回主菜单 · 60 秒无操作自动关闭",
28
+ thinkingHint: "🤔 深度思考中…\n\n",
29
+ toolCalling: (name, summary) => `🔧 调用工具 \`${name}\`${summary === undefined || summary === "" ? "" : ` — ${summary}`}`,
30
+ processingHeartbeat: (minutes) => `⏳ 仍在处理中(已运行约 ${minutes} 分钟)…`,
31
+ processingFailed: (detail) => `⚠️ 处理失败:${detail}`,
32
+ processingStarted: (preview) => preview === "" ? "✅ 已收到,开始处理…" : `✅ 已收到,开始处理:\n「${preview}」`,
33
+ progressReminder: (minutes, status) => `⏳ 任务仍在处理中(已进行 ${minutes} 分钟)\n最近进展:${status}\n可发送 /status 查看详情,或 /stop 停止当前任务`,
34
+ progressThinking: "🤔 思考中",
35
+ progressMenuTitle: "进度提醒间隔",
36
+ progressOff: "关闭",
37
+ progressMinutes: (n) => `${n} 分钟`,
38
+ progressSet: (label) => `进度提醒间隔已设置为:${label}`,
39
+ progressSetting: (label) => `进度提醒:${label}`,
40
+ menuSettingsProgress: "⏱️ 进度提醒",
41
+ helpProgress: "设置长时间无进展时的主动进度提醒间隔(默认 5 分钟)",
42
+ compactStarted: "🔄 正在压缩上下文…(可能需要一点时间)",
43
+ compactDone: "✅ 上下文压缩完成,可继续对话。",
44
+ questionCardTitle: "🤔 需要你的选择",
45
+ questionCardHint: "点击按钮回答,或直接回复文字(编号或选项内容)",
46
+ questionMultiHint: "(可多选:回复多个编号或选项内容,用逗号分隔,如 1,3)",
47
+ questionTextHint: (question) => `✍️ 请直接回复文字回答:${question}`,
48
+ questionWaiting: (question) => `⏳ 仍在等待你的回答:${question}`,
49
+ questionStep: (index, total) => `(问题 ${index}/${total})`,
50
+ approvalCardTitle: "🔐 需要你的授权",
51
+ approvalAsk: (toolName, reason) => `工具 \`${toolName}\` 请求执行需要你授权的操作${reason === undefined || reason === "" ? "" : `:\n${reason}`}\n是否允许?`,
52
+ approveLabel: "✅ 允许一次",
53
+ rejectLabel: "❌ 拒绝",
54
+ answerReceived: "✅ 已收到你的回答,继续处理…",
55
+ questionToolCall: (text) => `🤔 需要你的选择 — ${text}`,
56
+ notifyFull: "尽量输出过程",
57
+ notifyImportant: "输出重要节点",
58
+ notifyResult: "只输出结果",
59
+ notifyFullDesc: "实时推送思考过程、工具调用和最终回答",
60
+ notifyImportantDesc: "只推送关键节点:思考开始、工具调用、最终回答",
61
+ notifyResultDesc: "只在任务结束后发送最终结果",
62
+ notifySet: (level, description) => `通知级别已设置为:${level}\n${description}`,
63
+ taskStatsHeader: (duration) => `📊 任务完成 · 耗时 ${duration}`,
64
+ taskStatsModel: (providerModel) => `模型:\`${providerModel}\``,
65
+ taskStatsTokensIn: (tokens, cached) => `输入:${tokens} tokens${cached === undefined ? "" : `(缓存 ${cached})`}`,
66
+ taskStatsTokensOut: (tokens) => `输出:${tokens} tokens`,
67
+ taskStatsSteps: (count) => `步骤:${count}`,
68
+ taskStatsContext: (usedPct, window) => `上下文占用:${usedPct}%(窗口 ${window})`,
69
+ taskStatsCompactOk: "上下文占用正常,暂无需压缩",
70
+ taskStatsCompactSuggest: "⚠️ 上下文占用较高,建议发送 /compact 压缩上下文",
71
+ taskDuration: (ms) => ms < 60_000 ? `${Math.round(ms / 1000)} 秒` : `${Math.floor(ms / 60_000)} 分 ${Math.round((ms % 60_000) / 1000)} 秒`,
72
+ imageDownloadFailed: (imageError) => `[用户发送了图片,但下载失败:${imageError}]`,
73
+ fileDownloadFailed: (fileError) => `[用户发送了文件,但下载失败:${fileError}]`,
74
+ imagesStaged: (locations, description) => description !== ""
75
+ ? `[用户发送了图片,图片已保存到以下路径(可用工具查看):\n${locations}\n图片内容说明:\n${description}]`
76
+ : `[用户发送了图片,图片已保存到以下路径(可用工具查看):\n${locations}\n(未能自动分析图片内容,请用文件/终端工具查看这些图片。)]`,
77
+ imageDescriptionLabel: (description) => `图片内容说明:\n${description}`,
78
+ imageNoDescription: "(未能自动分析图片内容,请用文件/终端工具查看这些图片。)",
79
+ visionPrompt: "请详细描述这些图片的内容(物体、场景、文字、布局、氛围等),供一个无法直接查看图片的主模型理解。",
80
+ filesStaged: (count, locations) => `[用户发送了 ${count} 个文件,已保存到以下路径(可用工具查看):\n${locations}]`,
81
+ taskEnded: (reasonLabel) => `**任务结束**:${reasonLabel}`,
82
+ errorCode: (code) => `错误码:\`${code}\``,
83
+ reasonMessage: (message) => `原因:${message}`,
84
+ produced: (text) => `已产出:${text}`,
85
+ newChatDone: "已开启新会话。",
86
+ chatCleared: "会话已清空。",
87
+ stopRequested: "已请求停止当前任务。",
88
+ dirUsage: "请输入绝对路径,例如 `/dir D:\\projects\\my-app`。",
89
+ dirNotExists: (path) => `目录不存在或不是文件夹:${path}`,
90
+ dirNotExistsHint: (path) => `目录不存在或不是文件夹:${path}\n(请先创建该目录,再执行 /workspace)`,
91
+ dirUnreadable: (path) => `无法访问目录:${path}`,
92
+ dirSwitched: (path) => `工作目录已切换为:\n${path}\n(已开启新会话)`,
93
+ workspaceUsage: "用法:`/workspace <绝对路径>`,例如 `/workspace D:\\projects\\new-app`。",
94
+ menuClosed: "菜单已关闭。",
95
+ menuExit: "❌ 退出",
96
+ menuBack: "🔙 返回",
97
+ menuWorkspaceAction: "📁 切换工作目录",
98
+ menuChatAction: "💬 切换对话",
99
+ menuStatusAction: "📊 查看状态",
100
+ menuTaskAction: "📋 查看任务",
101
+ menuHistoryAction: "🗒️ 历史消息",
102
+ menuGoalsAction: "🎯 目标",
103
+ menuScheduleAction: "⏰ 定时提醒",
104
+ menuCompactAction: "🗜️ 压缩上下文",
105
+ menuPluginsAction: "🔌 查看插件",
106
+ menuSettingsAction: "⚙️ 设置",
107
+ menuNewChat: "➕ 新建对话",
108
+ menuSettingsModel: "🤖 切换模型",
109
+ menuSettingsReasoning: "🧠 推理强度",
110
+ menuSettingsNotify: "🔔 通知设置",
111
+ menuSettingsOverview: "📄 配置总览",
112
+ menuSettingsLanguage: "🌐 语言",
113
+ languageZh: "中文",
114
+ languageEn: "English",
115
+ languageSet: (lang) => `语言已切换为 ${lang}。`,
116
+ streamLabel: (on) => `流式输出:${on ? "开" : "关"}`,
117
+ summaryLabel: (on) => `结束摘要:${on ? "开" : "关"}`,
118
+ statusNoSession: (workdir) => `状态:无活动会话\n工作目录:${workdir}`,
119
+ statusRunning: "🟢 执行中",
120
+ statusIdle: "⚪ 空闲",
121
+ statusExecuting: "🔄 正在处理任务",
122
+ statusWaiting: "⏳ 等待新消息",
123
+ statusField: (status) => `状态:${status}`,
124
+ modelField: (model) => `模型:${model}`,
125
+ workdirField: (workdir) => `工作目录:${workdir}`,
126
+ queuedField: (n) => `待处理消息:${n}`,
127
+ queueEmpty: "(队列空)",
128
+ queueDetail: (n) => `${n} 条消息排队中`,
129
+ lastTurnReason: (reason) => `上次任务:${reason}`,
130
+ lastTurnTime: (time) => `完成时间:${time}`,
131
+ noTurnHistory: "(尚无任务历史)",
132
+ sessionField: (id) => `会话:${id}`,
133
+ contextField: (total, surface) => `上下文:${total} tokens(会话 ${surface})`,
134
+ noTodos: "当前没有任务清单。",
135
+ currentTodos: (n, list) => `当前任务(${n} 项):\n${list}`,
136
+ settingsHeader: "⚙️ 设置:",
137
+ modelSetting: (model) => `模型:${model}`,
138
+ reasoningSetting: (effort) => `推理强度:${effort}`,
139
+ agentPresetSetting: (preset) => `Agent 预设:${preset}`,
140
+ workdirSetting: (workdir) => `工作目录:${workdir}`,
141
+ workspacesSetting: "工作区列表:",
142
+ notConfigured: "(未配置)",
143
+ chatCountField: (n) => `对话数:${n}`,
144
+ allowUsersField: (n, all) => `发送者白名单:${all ? "全部放行" : `${n} 人`}`,
145
+ allowChatsField: (n, all) => `会话白名单:${all ? "全部放行" : `${n} 个`}`,
146
+ stateDirField: (dir) => `状态目录:${dir}`,
147
+ noModelsFound: "(未发现可用模型)",
148
+ defaultLabel: "默认",
149
+ modelName: (name, provider) => `${name}(${provider})`,
150
+ effortLow: "低 (low)",
151
+ effortMedium: "中 (medium)",
152
+ effortHigh: "高 (high)",
153
+ effortDefault: "默认(跟随模型)",
154
+ noPlugins: "未获取到插件清单。",
155
+ pluginDisabled: "⛔ 禁用",
156
+ pluginEnabled: "✅ 启用",
157
+ pluginsTruncated: (all, shown) => `… 共 ${all} 个,仅显示前 ${shown} 个`,
158
+ pluginsCount: (n) => `插件(${n}):`,
159
+ workspaceServiceUnavailable: "工作区服务不可用。",
160
+ workspaceCreated: (title, path) => `工作区已创建:\n${title} (${path})`,
161
+ createFailed: (error) => `创建失败:${error}`,
162
+ noActiveSessionCompact: "当前没有活动会话,无法压缩。",
163
+ sessionRunning: "当前会话正在运行,请稍后再试(或先 /stop)。",
164
+ compactionUnavailable: "压缩服务不可用(当前预设未挂载压缩后端)。",
165
+ nothingToCompact: "没有可压缩的历史。",
166
+ contextCompacted: "上下文已压缩。",
167
+ compactFailed: (message) => `压缩失败:${message}`,
168
+ noActiveSession: "当前没有活动会话。",
169
+ noMessagesYet: "会话里还没有消息。",
170
+ recentMessages: (n, list) => `最近 ${n} 条消息:\n${list}`,
171
+ noActiveGoals: "当前没有进行中的目标。",
172
+ goalPhaseActive: "🟢 进行中",
173
+ goalPhasePaused: "⏸️ 已暂停",
174
+ goalPhaseBlocked: "🚫 受阻",
175
+ goalPhaseComplete: "✅ 已完成",
176
+ goalObjective: (objective) => `🎯 目标:${objective}`,
177
+ goalStatus: (status) => `状态:${status}`,
178
+ goalRounds: (started, max) => `轮次:${started}/${max}`,
179
+ goalAutoRun: (armed) => `自动续跑:${armed ? "已武装" : "已解除"}`,
180
+ goalBlockedReason: (message) => `受阻原因:${message}`,
181
+ noReminders: "本会话没有定时提醒。可对 Agent 说「5 分钟后提醒我…」来创建(需在配置里挂载 schedule 插件)。",
182
+ reminderDue: "⚠️ 已到期",
183
+ reminderClock: "⏰",
184
+ reminderEvery: (minutes) => `每 ${minutes} 分钟`,
185
+ reminderOnce: "一次性",
186
+ reminderLine: (state, id, prompt, kind, when) => `${state} [${id}] ${prompt}(${kind},${when})`,
187
+ remindersCount: (n, list) => `定时提醒(${n}):\n${list}`,
188
+ noWorkspaces: "还没有工作区。可用 `/workspace <绝对路径>` 新建。",
189
+ workspaceSessions: (n) => ` · ${n} 会话`,
190
+ workspacesCount: (n, list) => `工作区(${n}):\n${list}`,
191
+ currentDir: "当前目录",
192
+ mirrorCreated: (sessionId) => `✅ Web 镜像会话已创建:${sessionId}\n在 DSH Web 中打开此会话即可查看飞书对话历史。`,
193
+ mirrorAlreadyExists: (sessionId) => `Web 镜像会话已存在:${sessionId}`,
194
+ mirrorNotConfigured: "当前会话未配置 Web 镜像。使用 /mirror 命令创建。",
195
+ sessionLockedBy: (channel) => `⚠️ 会话正被 ${channel === "feishu" ? "飞书" : "Web"} 占用,当前为只读模式`,
196
+ sessionReadOnly: "🔒 会话锁定中,只能查看不能发送消息",
197
+ lockReleased: "🔓 会话锁已释放",
198
+ lockTimeoutReleased: (minutes) => `⏰ 会话锁已超时(${minutes} 分钟无活动),自动释放`,
199
+ unlockSuccess: "🔓 会话锁已手动释放",
200
+ unlockNoLock: "当前没有活跃的会话锁",
201
+ lockRenewed: (minutes) => `🔄 会话锁已续期 ${minutes} 分钟`,
202
+ messageQueued: (position) => `📥 消息已加入队列(第 ${position} 位),等待锁释放后自动执行`,
203
+ queueProcessed: (count) => `✅ 已处理队列中的 ${count} 条消息`,
204
+ exportMarkdown: (path) => `📄 对话历史已导出为 Markdown:\n${path}`,
205
+ exportPdfNotSupported: "⚠️ PDF 导出暂不支持,请使用 Markdown 格式",
206
+ exportNoSession: "当前没有活动会话,无法导出",
207
+ exportFailed: (error) => `❌ 导出失败:${error}`,
208
+ mirrorStatus: (sessionId, lockedBy, timeoutMin, queuedCount) => {
209
+ const lockInfo = lockedBy ? `\n锁定方:${lockedBy === "feishu" ? "飞书" : "Web"}` : "";
210
+ const timeoutInfo = timeoutMin !== undefined ? `\n超时时间:${timeoutMin} 分钟` : "";
211
+ const queueInfo = queuedCount && queuedCount > 0 ? `\n排队消息:${queuedCount} 条` : "";
212
+ return `Web 镜像会话:${sessionId}${lockInfo}${timeoutInfo}${queueInfo}`;
213
+ },
214
+ webMirrorIndicator: "🌐",
215
+ sessionAvailableOnWeb: "(同时在 Web 上可用)",
216
+ helpHeader: "可用命令(本地执行,不消耗模型):",
217
+ helpMenu: "打开主菜单(层级点选,可返回)",
218
+ helpSettings: "设置:模型 / 推理强度 / 通知 / 配置总览",
219
+ helpStatus: "查看会话状态、模型、工作目录、排队数",
220
+ helpTask: "查看当前任务清单(todo)",
221
+ helpChat: "列出对话,点选切换或新建",
222
+ helpDir: "列出工作目录,点选切换(或 `/dir <绝对路径>` 手动指定)",
223
+ helpWorkspace: "新建工作区",
224
+ helpPlugins: "查看插件清单",
225
+ helpCompact: "压缩当前会话上下文",
226
+ helpHistory: "查看最近会话消息",
227
+ helpGoals: "查看当前目标",
228
+ helpSchedule: "查看本会话的定时提醒",
229
+ helpModel: "查看 / 切换模型",
230
+ helpNotify: "选择通知程度(完整过程 / 重要节点 / 仅结果)",
231
+ helpWorkspaces: "列出所有工作区",
232
+ helpNew: "开启新对话",
233
+ helpClear: "清空当前对话",
234
+ helpStop: "停止当前任务",
235
+ helpOther: "其他文本将作为任务发送给 DSH Agent",
236
+ };
237
+ const en = {
238
+ reasonCompleted: "✅ Done",
239
+ reasonAborted: "⏹️ Aborted",
240
+ reasonBlocked: "🚫 Blocked",
241
+ reasonError: "❌ Error",
242
+ reasonMaxTokens: "⚠️ Output limit reached",
243
+ reasonInterrupted: "⚠️ Interrupted",
244
+ reasonUnknown: "❓ Unknown",
245
+ menuRoot: "Main menu",
246
+ menuWorkspace: "Switch workdir",
247
+ menuChat: "Switch conversation",
248
+ menuSettings: "Settings",
249
+ menuModel: "Switch model",
250
+ menuReasoning: "Reasoning effort",
251
+ menuNotify: "Notifications",
252
+ rootSectionWorkspace: "📁 Workspace",
253
+ rootSectionChat: "💬 Session",
254
+ rootSectionTask: "📋 Tasks",
255
+ rootSectionSystem: "🛠️ System",
256
+ rootMenuFooter: "Tap a button · returns to the main menu after an action · auto-closes after 60 s idle",
257
+ thinkingHint: "🤔 Deep thinking…\n\n",
258
+ toolCalling: (name, summary) => `🔧 Calling tool \`${name}\`${summary === undefined || summary === "" ? "" : ` — ${summary}`}`,
259
+ processingHeartbeat: (minutes) => `⏳ Still processing (~${minutes} min)…`,
260
+ processingFailed: (detail) => `⚠️ Processing failed: ${detail}`,
261
+ processingStarted: (preview) => preview === "" ? "✅ Received — starting to process…" : `✅ Received — starting to process:\n“${preview}”`,
262
+ progressReminder: (minutes, status) => `⏳ Still working on the task (${minutes} min so far)\nLatest progress: ${status}\nSend /status for details, or /stop to cancel`,
263
+ progressThinking: "🤔 Thinking",
264
+ progressMenuTitle: "Progress reminder interval",
265
+ progressOff: "Off",
266
+ progressMinutes: (n) => `${n} min`,
267
+ progressSet: (label) => `Progress reminder interval set to: ${label}`,
268
+ progressSetting: (label) => `Progress reminder: ${label}`,
269
+ menuSettingsProgress: "⏱️ Progress reminder",
270
+ helpProgress: "set the proactive progress-notice interval when a task stays silent (default 5 minutes)",
271
+ compactStarted: "🔄 Compacting context… (this may take a moment)",
272
+ compactDone: "✅ Context compaction complete — you can continue chatting.",
273
+ questionCardTitle: "🤔 Your input is needed",
274
+ questionCardHint: "Tap a button to answer, or reply with text (number or option label)",
275
+ questionMultiHint: "(multi-select: reply with several numbers or labels, comma-separated, e.g. 1,3)",
276
+ questionTextHint: (question) => `✍️ Please reply with text: ${question}`,
277
+ questionWaiting: (question) => `⏳ Still waiting for your answer: ${question}`,
278
+ questionStep: (index, total) => `(Question ${index}/${total})`,
279
+ approvalCardTitle: "🔐 Permission required",
280
+ approvalAsk: (toolName, reason) => `Tool \`${toolName}\` is requesting an action that needs your authorization${reason === undefined || reason === "" ? "" : `:\n${reason}`}\nAllow it?`,
281
+ approveLabel: "✅ Allow once",
282
+ rejectLabel: "❌ Deny",
283
+ answerReceived: "✅ Got your answer — continuing…",
284
+ questionToolCall: (text) => `🤔 Your input is needed — ${text}`,
285
+ notifyFull: "Full process",
286
+ notifyImportant: "Key milestones",
287
+ notifyResult: "Result only",
288
+ notifyFullDesc: "Stream reasoning, tool calls and the final answer live",
289
+ notifyImportantDesc: "Only key milestones: thinking start, tool calls, final answer",
290
+ notifyResultDesc: "Only the final result when the task finishes",
291
+ notifySet: (level, description) => `Notification level set to: ${level}\n${description}`,
292
+ taskStatsHeader: (duration) => `📊 Task done · took ${duration}`,
293
+ taskStatsModel: (providerModel) => `Model: \`${providerModel}\``,
294
+ taskStatsTokensIn: (tokens, cached) => `Input: ${tokens} tokens${cached === undefined ? "" : ` (cached ${cached})`}`,
295
+ taskStatsTokensOut: (tokens) => `Output: ${tokens} tokens`,
296
+ taskStatsSteps: (count) => `Steps: ${count}`,
297
+ taskStatsContext: (usedPct, window) => `Context usage: ${usedPct}% (window ${window})`,
298
+ taskStatsCompactOk: "Context usage is fine — no compaction needed",
299
+ taskStatsCompactSuggest: "⚠️ Context usage is high — consider sending /compact",
300
+ taskDuration: (ms) => ms < 60_000 ? `${Math.round(ms / 1000)}s` : `${Math.floor(ms / 60_000)}m ${Math.round((ms % 60_000) / 1000)}s`,
301
+ imageDownloadFailed: (imageError) => `[The user sent an image, but download failed: ${imageError}]`,
302
+ fileDownloadFailed: (fileError) => `[The user sent a file, but download failed: ${fileError}]`,
303
+ imagesStaged: (locations, description) => description !== ""
304
+ ? `[The user sent images, saved to the following paths (viewable with tools):\n${locations}\nImage description:\n${description}]`
305
+ : `[The user sent images, saved to the following paths (viewable with tools):\n${locations}\n(No image analysis available — inspect the files with the file/terminal tools.)]`,
306
+ imageDescriptionLabel: (description) => `Image description:\n${description}`,
307
+ imageNoDescription: "(No image analysis available — inspect the files with the file/terminal tools.)",
308
+ visionPrompt: "Describe these images in detail (objects, scene, text, layout, atmosphere, etc.) for a main model that cannot view images directly.",
309
+ filesStaged: (count, locations) => `[The user sent ${count} file(s), saved to the following paths (viewable with tools):\n${locations}]`,
310
+ taskEnded: (reasonLabel) => `**Task ended** — ${reasonLabel}`,
311
+ errorCode: (code) => `Error code: \`${code}\``,
312
+ reasonMessage: (message) => `Reason: ${message}`,
313
+ produced: (text) => `Output: ${text}`,
314
+ newChatDone: "New conversation started.",
315
+ chatCleared: "Conversation cleared.",
316
+ stopRequested: "Stop requested for the current task.",
317
+ dirUsage: "Enter an absolute path, e.g. `/dir D:\\projects\\my-app`.",
318
+ dirNotExists: (path) => `Directory does not exist or is not a folder: ${path}`,
319
+ dirNotExistsHint: (path) => `Directory does not exist or is not a folder: ${path}\n(create the directory first, then run /workspace)`,
320
+ dirUnreadable: (path) => `Cannot access directory: ${path}`,
321
+ dirSwitched: (path) => `Workdir switched to:\n${path}\n(new conversation started)`,
322
+ workspaceUsage: "Usage: `/workspace <absolute path>`, e.g. `/workspace D:\\projects\\new-app`.",
323
+ menuClosed: "Menu closed.",
324
+ menuExit: "❌ Exit",
325
+ menuBack: "🔙 Back",
326
+ menuWorkspaceAction: "📁 Switch workdir",
327
+ menuChatAction: "💬 Switch conversation",
328
+ menuStatusAction: "📊 Status",
329
+ menuTaskAction: "📋 Tasks",
330
+ menuHistoryAction: "🗒️ History",
331
+ menuGoalsAction: "🎯 Goals",
332
+ menuScheduleAction: "⏰ Reminders",
333
+ menuCompactAction: "🗜️ Compact context",
334
+ menuPluginsAction: "🔌 Plugins",
335
+ menuSettingsAction: "⚙️ Settings",
336
+ menuNewChat: "➕ New conversation",
337
+ menuSettingsModel: "🤖 Switch model",
338
+ menuSettingsReasoning: "🧠 Reasoning effort",
339
+ menuSettingsNotify: "🔔 Notifications",
340
+ menuSettingsOverview: "📄 Config overview",
341
+ menuSettingsLanguage: "🌐 Language",
342
+ languageZh: "中文",
343
+ languageEn: "English",
344
+ languageSet: (lang) => `Language switched to ${lang}.`,
345
+ streamLabel: (on) => `Streaming output: ${on ? "on" : "off"}`,
346
+ summaryLabel: (on) => `End-of-turn summary: ${on ? "on" : "off"}`,
347
+ statusNoSession: (workdir) => `Status: no active session\nWorkdir: ${workdir}`,
348
+ statusRunning: "🟢 Executing",
349
+ statusIdle: "⚪ Idle",
350
+ statusExecuting: "🔄 Processing task",
351
+ statusWaiting: "⏳ Waiting for messages",
352
+ statusField: (status) => `Status: ${status}`,
353
+ modelField: (model) => `Model: ${model}`,
354
+ workdirField: (workdir) => `Workdir: ${workdir}`,
355
+ queuedField: (n) => `Queued messages: ${n}`,
356
+ queueEmpty: "(queue empty)",
357
+ queueDetail: (n) => `${n} message(s) queued`,
358
+ lastTurnReason: (reason) => `Last turn: ${reason}`,
359
+ lastTurnTime: (time) => `Completed: ${time}`,
360
+ noTurnHistory: "(no turn history yet)",
361
+ sessionField: (id) => `Session: ${id}`,
362
+ contextField: (total, surface) => `Context: ${total} tokens (session ${surface})`,
363
+ noTodos: "No task list.",
364
+ currentTodos: (n, list) => `Current tasks (${n}):\n${list}`,
365
+ settingsHeader: "⚙️ Settings:",
366
+ modelSetting: (model) => `Model: ${model}`,
367
+ reasoningSetting: (effort) => `Reasoning effort: ${effort}`,
368
+ agentPresetSetting: (preset) => `Agent preset: ${preset}`,
369
+ workdirSetting: (workdir) => `Workdir: ${workdir}`,
370
+ workspacesSetting: "Workspaces:",
371
+ notConfigured: "(not configured)",
372
+ chatCountField: (n) => `Conversations: ${n}`,
373
+ allowUsersField: (n, all) => `Sender allowlist: ${all ? "allow all" : `${n} user(s)`}`,
374
+ allowChatsField: (n, all) => `Chat allowlist: ${all ? "allow all" : `${n} chat(s)`}`,
375
+ stateDirField: (dir) => `State dir: ${dir}`,
376
+ noModelsFound: "(no usable models found)",
377
+ defaultLabel: "Default",
378
+ modelName: (name, provider) => `${name} (${provider})`,
379
+ effortLow: "Low (low)",
380
+ effortMedium: "Medium (medium)",
381
+ effortHigh: "High (high)",
382
+ effortDefault: "Default (follow model)",
383
+ noPlugins: "Could not fetch the plugin list.",
384
+ pluginDisabled: "⛔ Disabled",
385
+ pluginEnabled: "✅ Enabled",
386
+ pluginsTruncated: (all, shown) => `… ${all} total, showing the first ${shown}`,
387
+ pluginsCount: (n) => `Plugins (${n}):`,
388
+ workspaceServiceUnavailable: "Workspace service unavailable.",
389
+ workspaceCreated: (title, path) => `Workspace created:\n${title} (${path})`,
390
+ createFailed: (error) => `Creation failed: ${error}`,
391
+ noActiveSessionCompact: "No active session to compact.",
392
+ sessionRunning: "The session is running — try again later (or `/stop` first).",
393
+ compactionUnavailable: "Compaction service unavailable (the current preset does not mount a compaction backend).",
394
+ nothingToCompact: "Nothing to compact.",
395
+ contextCompacted: "Context compacted.",
396
+ compactFailed: (message) => `Compaction failed: ${message}`,
397
+ noActiveSession: "No active session.",
398
+ noMessagesYet: "No messages in the session yet.",
399
+ recentMessages: (n, list) => `Recent ${n} message(s):\n${list}`,
400
+ noActiveGoals: "No goal in progress.",
401
+ goalPhaseActive: "🟢 Active",
402
+ goalPhasePaused: "⏸️ Paused",
403
+ goalPhaseBlocked: "🚫 Blocked",
404
+ goalPhaseComplete: "✅ Completed",
405
+ goalObjective: (objective) => `🎯 Goal: ${objective}`,
406
+ goalStatus: (status) => `Status: ${status}`,
407
+ goalRounds: (started, max) => `Rounds: ${started}/${max}`,
408
+ goalAutoRun: (armed) => `Auto-continue: ${armed ? "armed" : "disarmed"}`,
409
+ goalBlockedReason: (message) => `Blocked reason: ${message}`,
410
+ noReminders: "No scheduled reminders in this session. Tell the agent “remind me in 5 minutes…” to create one (requires the schedule plugin mounted in the profile).",
411
+ reminderDue: "⚠️ Due",
412
+ reminderClock: "⏰",
413
+ reminderEvery: (minutes) => `every ${minutes} min`,
414
+ reminderOnce: "one-time",
415
+ reminderLine: (state, id, prompt, kind, when) => `${state} [${id}] ${prompt} (${kind}, ${when})`,
416
+ remindersCount: (n, list) => `Scheduled reminders (${n}):\n${list}`,
417
+ noWorkspaces: "No workspaces yet. Create one with `/workspace <absolute path>`.",
418
+ workspaceSessions: (n) => ` · ${n} session(s)`,
419
+ workspacesCount: (n, list) => `Workspaces (${n}):\n${list}`,
420
+ currentDir: "Current directory",
421
+ mirrorCreated: (sessionId) => `✅ Web mirror session created: ${sessionId}\nOpen this session in DSH Web to view the Feishu conversation history.`,
422
+ mirrorAlreadyExists: (sessionId) => `Web mirror session already exists: ${sessionId}`,
423
+ mirrorNotConfigured: "No Web mirror configured for this session. Use /mirror to create one.",
424
+ sessionLockedBy: (channel) => `⚠️ Session is locked by ${channel === "feishu" ? "Feishu" : "Web"}, currently in read-only mode`,
425
+ sessionReadOnly: "🔒 Session locked, view-only mode",
426
+ lockReleased: "🔓 Session lock released",
427
+ lockTimeoutReleased: (minutes) => `⏰ Session lock timed out (${minutes} minutes of inactivity), auto-released`,
428
+ unlockSuccess: "🔓 Session lock manually released",
429
+ unlockNoLock: "No active session lock",
430
+ lockRenewed: (minutes) => `🔄 Session lock renewed for ${minutes} minutes`,
431
+ messageQueued: (position) => `📥 Message queued (position ${position}), will execute after lock release`,
432
+ queueProcessed: (count) => `✅ Processed ${count} queued message(s)`,
433
+ exportMarkdown: (path) => `📄 Conversation history exported to Markdown:\n${path}`,
434
+ exportPdfNotSupported: "⚠️ PDF export is not supported yet, please use Markdown format",
435
+ exportNoSession: "No active session to export",
436
+ exportFailed: (error) => `❌ Export failed: ${error}`,
437
+ mirrorStatus: (sessionId, lockedBy, timeoutMin, queuedCount) => {
438
+ const lockInfo = lockedBy ? `\nLocked by: ${lockedBy === "feishu" ? "Feishu" : "Web"}` : "";
439
+ const timeoutInfo = timeoutMin !== undefined ? `\nTimeout: ${timeoutMin} minutes` : "";
440
+ const queueInfo = queuedCount && queuedCount > 0 ? `\nQueued messages: ${queuedCount}` : "";
441
+ return `Web mirror session: ${sessionId}${lockInfo}${timeoutInfo}${queueInfo}`;
442
+ },
443
+ webMirrorIndicator: "🌐",
444
+ sessionAvailableOnWeb: "(also available on Web)",
445
+ helpHeader: "Available commands (run locally, no model tokens):",
446
+ helpMenu: "open the main menu (hierarchical, back supported)",
447
+ helpSettings: "settings: model / reasoning effort / notifications / config overview",
448
+ helpStatus: "session status, model, workdir, queue length",
449
+ helpTask: "show the current task list (todo)",
450
+ helpChat: "list conversations; tap to switch or create",
451
+ helpDir: "list workdirs; tap to switch (or `/dir <absolute path>` to set manually)",
452
+ helpWorkspace: "create a workspace",
453
+ helpPlugins: "list installed plugins",
454
+ helpCompact: "compact the current session context",
455
+ helpHistory: "show recent session messages",
456
+ helpGoals: "show current goals",
457
+ helpSchedule: "show scheduled reminders for this session",
458
+ helpModel: "view / switch the model",
459
+ helpNotify: "choose notification level (full process / key milestones / result only)",
460
+ helpWorkspaces: "list all workspaces",
461
+ helpNew: "start a new conversation",
462
+ helpClear: "clear the current conversation",
463
+ helpStop: "stop the current task",
464
+ helpOther: "any other text is sent to the DSH agent as a task",
465
+ };
466
+ export function messages(lang) {
467
+ return lang === "en" ? en : zh;
468
+ }
469
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -9,13 +9,17 @@ import z from "@deepseek-ai/schemastery";
9
9
  import { ConnectService } from "./service.js";
10
10
  import type { ConnectConfig } from "./runner.js";
11
11
  export { ConnectService } from "./service.js";
12
- export { AgentRunner, resolveConnectConfig, summarizeTurn } from "./runner.js";
13
- export type { ConnectConfig, ResolvedConnectConfig } from "./runner.js";
12
+ export { AgentRunner, applyStreamChunk, applyToolCall, questionTextOf, resolveConnectConfig, summarizeTurn, toolCallSummary } from "./runner.js";
13
+ export type { ConnectConfig, NotifyLevel, ResolvedConnectConfig, StreamChunkLike, StreamState } from "./runner.js";
14
+ export { InteractionBridge, decodeTextAnswer } from "./interaction.js";
15
+ export type { AskQuestionLike } from "./interaction.js";
14
16
  export { BindingStore } from "./binding.js";
15
17
  export type { ChatBinding, ChatSessionRecord } from "./binding.js";
16
18
  export { createAsyncQueue } from "./stream.js";
17
- export { parseCommand, HELP_TEXT } from "./commands.js";
19
+ export { parseCommand, helpText } from "./commands.js";
18
20
  export type { Command } from "./commands.js";
21
+ export { messages } from "./i18n.js";
22
+ export type { Language, Messages } from "./i18n.js";
19
23
  export type { ChatType, ChoiceOption, ChoicePrompt, ChoiceResult, InboundMessage, OutboundTarget, SummaryCard, TurnReason, TurnOutcome, AsyncQueue, ChannelAdapter, } from "./types.js";
20
24
  /** Cordis plugin name used by loader diagnostics. */
21
25
  export declare const name = "connect";
@@ -29,12 +33,28 @@ export declare const Config: z<Schemastery.ObjectS<{
29
33
  workDir: z<string, string>;
30
34
  /** Optional workspace directories offered by the `/dir` chooser. */
31
35
  workspaces: z<string[], string[]>;
36
+ /** Vision-capable model used to describe images when the main model can't see them. */
37
+ visionModel: z<Schemastery.ObjectS<{
38
+ provider: z<string, string>;
39
+ model: z<string, string>;
40
+ }>, Schemastery.ObjectT<{
41
+ provider: z<string, string>;
42
+ model: z<string, string>;
43
+ }>>;
44
+ /** User-facing message language: `zh` (default) or `en`. */
45
+ language: z<"zh" | "en", "zh" | "en">;
32
46
  /** Sender allowlist; empty = all senders allowed. */
33
47
  allowUsers: z<string[], string[]>;
34
48
  /** Chat allowlist; empty = all chats allowed. */
35
49
  allowChats: z<string[], string[]>;
36
50
  /** Directory for the bindings.json routing store. */
37
51
  stateDir: z<string, string>;
52
+ /** Liveness heartbeat interval ms for the streaming card; 0 disables it (default: 60000). */
53
+ streamHeartbeatMs: z<number, number>;
54
+ /** Default notification level for streaming replies (default: `important`). */
55
+ notifyLevel: z<"full" | "important" | "result", "full" | "important" | "result">;
56
+ /** Proactive progress-notice interval ms when a turn stays silent (default: 300000 = 5 min; 0 disables). */
57
+ progressTimeoutMs: z<number, number>;
38
58
  }>, Schemastery.ObjectT<{
39
59
  /** Agent preset id composed into each bound session; omit for the roster default. */
40
60
  agentPreset: z<string, string>;
@@ -42,12 +62,28 @@ export declare const Config: z<Schemastery.ObjectS<{
42
62
  workDir: z<string, string>;
43
63
  /** Optional workspace directories offered by the `/dir` chooser. */
44
64
  workspaces: z<string[], string[]>;
65
+ /** Vision-capable model used to describe images when the main model can't see them. */
66
+ visionModel: z<Schemastery.ObjectS<{
67
+ provider: z<string, string>;
68
+ model: z<string, string>;
69
+ }>, Schemastery.ObjectT<{
70
+ provider: z<string, string>;
71
+ model: z<string, string>;
72
+ }>>;
73
+ /** User-facing message language: `zh` (default) or `en`. */
74
+ language: z<"zh" | "en", "zh" | "en">;
45
75
  /** Sender allowlist; empty = all senders allowed. */
46
76
  allowUsers: z<string[], string[]>;
47
77
  /** Chat allowlist; empty = all chats allowed. */
48
78
  allowChats: z<string[], string[]>;
49
79
  /** Directory for the bindings.json routing store. */
50
80
  stateDir: z<string, string>;
81
+ /** Liveness heartbeat interval ms for the streaming card; 0 disables it (default: 60000). */
82
+ streamHeartbeatMs: z<number, number>;
83
+ /** Default notification level for streaming replies (default: `important`). */
84
+ notifyLevel: z<"full" | "important" | "result", "full" | "important" | "result">;
85
+ /** Proactive progress-notice interval ms when a turn stays silent (default: 300000 = 5 min; 0 disables). */
86
+ progressTimeoutMs: z<number, number>;
51
87
  }>>;
52
88
  declare module "@deepseek-ai/cordis" {
53
89
  interface Context {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,CAAC,MAAM,0BAA0B,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC/E,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACxD,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,EACd,WAAW,EACX,UAAU,EACV,WAAW,EACX,UAAU,EACV,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,qDAAqD;AACrD,eAAO,MAAM,IAAI,YAAY,CAAC;AAE9B,6EAA6E;AAC7E,eAAO,MAAM,MAAM,UAA8C,CAAC;AAElE,wEAAwE;AACxE,eAAO,MAAM,MAAM;IACjB,qFAAqF;;IAErF,yEAAyE;;IAEzE,oEAAoE;;IAEpE,qDAAqD;;IAErD,iDAAiD;;IAEjD,qDAAqD;;;IAVrD,qFAAqF;;IAErF,yEAAyE;;IAEzE,oEAAoE;;IAEpE,qDAAqD;;IAErD,iDAAiD;;IAEjD,qDAAqD;;GAErD,CAAC;AAEH,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAO;QACf,OAAO,EAAE,cAAc,CAAC;KACzB;CACF;AAED,qFAAqF;AACrF,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,aAAkB,GAAG,IAAI,CAEpE;AAED,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,CAAC,MAAM,0BAA0B,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,oBAAoB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACjJ,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,qBAAqB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACnH,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACvE,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACvD,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACpD,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,EACd,WAAW,EACX,UAAU,EACV,WAAW,EACX,UAAU,EACV,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,qDAAqD;AACrD,eAAO,MAAM,IAAI,YAAY,CAAC;AAE9B,6EAA6E;AAC7E,eAAO,MAAM,MAAM,UAA8C,CAAC;AAElE,wEAAwE;AACxE,eAAO,MAAM,MAAM;IACjB,qFAAqF;;IAErF,yEAAyE;;IAEzE,oEAAoE;;IAEpE,uFAAuF;;;;;;;;IAEvF,4DAA4D;;IAE5D,qDAAqD;;IAErD,iDAAiD;;IAEjD,qDAAqD;;IAErD,6FAA6F;;IAE7F,+EAA+E;;IAE/E,4GAA4G;;;IApB5G,qFAAqF;;IAErF,yEAAyE;;IAEzE,oEAAoE;;IAEpE,uFAAuF;;;;;;;;IAEvF,4DAA4D;;IAE5D,qDAAqD;;IAErD,iDAAiD;;IAEjD,qDAAqD;;IAErD,6FAA6F;;IAE7F,+EAA+E;;IAE/E,4GAA4G;;GAE5G,CAAC;AAEH,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAO;QACf,OAAO,EAAE,cAAc,CAAC;KACzB;CACF;AAED,qFAAqF;AACrF,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,aAAkB,GAAG,IAAI,CAEpE;AAED,eAAe,cAAc,CAAC"}
package/lib/index.js CHANGED
@@ -1,10 +1,12 @@
1
1
  import z from "@deepseek-ai/schemastery";
2
2
  import { ConnectService } from "./service.js";
3
3
  export { ConnectService } from "./service.js";
4
- export { AgentRunner, resolveConnectConfig, summarizeTurn } from "./runner.js";
4
+ export { AgentRunner, applyStreamChunk, applyToolCall, questionTextOf, resolveConnectConfig, summarizeTurn, toolCallSummary } from "./runner.js";
5
+ export { InteractionBridge, decodeTextAnswer } from "./interaction.js";
5
6
  export { BindingStore } from "./binding.js";
6
7
  export { createAsyncQueue } from "./stream.js";
7
- export { parseCommand, HELP_TEXT } from "./commands.js";
8
+ export { parseCommand, helpText } from "./commands.js";
9
+ export { messages } from "./i18n.js";
8
10
  /** Cordis plugin name used by loader diagnostics. */
9
11
  export const name = "connect";
10
12
  /** Host-plane services this plugin requires before it can route messages. */
@@ -17,12 +19,22 @@ export const Config = z.object({
17
19
  workDir: z.string(),
18
20
  /** Optional workspace directories offered by the `/dir` chooser. */
19
21
  workspaces: z.array(z.string()),
22
+ /** Vision-capable model used to describe images when the main model can't see them. */
23
+ visionModel: z.object({ provider: z.string(), model: z.string() }),
24
+ /** User-facing message language: `zh` (default) or `en`. */
25
+ language: z.union([z.const("zh"), z.const("en")]),
20
26
  /** Sender allowlist; empty = all senders allowed. */
21
27
  allowUsers: z.array(z.string()),
22
28
  /** Chat allowlist; empty = all chats allowed. */
23
29
  allowChats: z.array(z.string()),
24
30
  /** Directory for the bindings.json routing store. */
25
31
  stateDir: z.string(),
32
+ /** Liveness heartbeat interval ms for the streaming card; 0 disables it (default: 60000). */
33
+ streamHeartbeatMs: z.number(),
34
+ /** Default notification level for streaming replies (default: `important`). */
35
+ notifyLevel: z.union([z.const("full"), z.const("important"), z.const("result")]),
36
+ /** Proactive progress-notice interval ms when a turn stays silent (default: 300000 = 5 min; 0 disables). */
37
+ progressTimeoutMs: z.number(),
26
38
  });
27
39
  /** Register the `connect` service; adapters resolve it via `inject: ["connect"]`. */
28
40
  export function apply(ctx, config = {}) {