@deepseek-ai/dsh-client-ui-conversation 0.1.7-alpha.2 → 0.1.7-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.i18n.yaml +36 -5
- package/README.md +10 -4
- package/README.zh.md +10 -4
- package/lib/client.js +361 -58
- package/lib/types/client/contract/conversation.d.ts +6 -6
- package/lib/types/client/contract/records.d.ts +15 -5
- package/lib/types/client/contract/slots.d.ts +2 -0
- package/lib/types/client/conversation/assembler.d.ts +8 -0
- package/lib/types/client/conversation/assembly.d.ts +6 -0
- package/lib/types/client/index.d.ts +1 -1
- package/lib/types/client/input/editor/keymap.d.ts +1 -1
- package/lib/types/client/locales.d.ts +36 -0
- package/lib/types/client/skeleton/InputBar.d.ts +1 -1
- package/lib/types/client/stop-sequence.d.ts +32 -0
- package/lib/types/client/stop-shortcut.d.ts +17 -0
- package/lib/types/client/view-selection.d.ts +2 -2
- package/package.json +33 -32
package/lib/client.js
CHANGED
|
@@ -1860,15 +1860,7 @@ window.__ModuleLoader__.load({
|
|
|
1860
1860
|
}
|
|
1861
1861
|
return merged;
|
|
1862
1862
|
}
|
|
1863
|
-
function conversationMatch(
|
|
1864
|
-
if (role === "start") {
|
|
1865
|
-
if (input.type !== "event") throw new Error(`conversation Context ${key} received a transient start Match`);
|
|
1866
|
-
return {
|
|
1867
|
-
event: input.event,
|
|
1868
|
-
role,
|
|
1869
|
-
location
|
|
1870
|
-
};
|
|
1871
|
-
}
|
|
1863
|
+
function conversationMatch(input, role, location) {
|
|
1872
1864
|
return {
|
|
1873
1865
|
event: input.event,
|
|
1874
1866
|
role,
|
|
@@ -1916,6 +1908,16 @@ window.__ModuleLoader__.load({
|
|
|
1916
1908
|
this.resetViewBuilders();
|
|
1917
1909
|
}
|
|
1918
1910
|
/**
|
|
1911
|
+
* Read the current open turn without activating a View.
|
|
1912
|
+
* @returns the latest turn number when its start is loaded and it remains open, otherwise undefined.
|
|
1913
|
+
*/
|
|
1914
|
+
openTurn() {
|
|
1915
|
+
const snapshot = this.locationIndex.snapshot();
|
|
1916
|
+
const latest = snapshot.turnOrder.at(-1);
|
|
1917
|
+
const turn = latest === void 0 ? void 0 : snapshot.turns.get(latest);
|
|
1918
|
+
return turn?.status === "open" && turn.start !== void 0 ? turn.turn : void 0;
|
|
1919
|
+
}
|
|
1920
|
+
/**
|
|
1919
1921
|
* Replace the complete loaded window after open, resync, or gap repair.
|
|
1920
1922
|
* @param entries - complete contiguous window.
|
|
1921
1923
|
* @param hasMore - whether older history remains outside the window.
|
|
@@ -1971,6 +1973,8 @@ window.__ModuleLoader__.load({
|
|
|
1971
1973
|
}
|
|
1972
1974
|
/**
|
|
1973
1975
|
* Retire one Assistant attempt's transient matches and apply its optional durable settlement.
|
|
1976
|
+
* Empty Contexts retain their keys and published nodes until the loaded window is rebuilt;
|
|
1977
|
+
* Definitions may hide those nodes when no start remains instead of withdrawing their identities.
|
|
1974
1978
|
* @param attemptId - process-local attempt whose transient presentation ended.
|
|
1975
1979
|
* @param entry - durable message or attempt event committed for the stream.
|
|
1976
1980
|
* @returns highest requested publication cadence.
|
|
@@ -2126,7 +2130,7 @@ window.__ModuleLoader__.load({
|
|
|
2126
2130
|
collectInput(input, pending) {
|
|
2127
2131
|
return this.dispatchInput(input, (definition, id, role) => {
|
|
2128
2132
|
const key = conversationContextKey(definition.kind, id);
|
|
2129
|
-
const match = conversationMatch(
|
|
2133
|
+
const match = conversationMatch(input, role, this.locationIndex.locationOf(input.event));
|
|
2130
2134
|
const matches = pending.get(key) ?? [];
|
|
2131
2135
|
matches.push({
|
|
2132
2136
|
definition,
|
|
@@ -2177,14 +2181,14 @@ window.__ModuleLoader__.load({
|
|
|
2177
2181
|
acceptMatch(definition, id, role, input) {
|
|
2178
2182
|
const key = conversationContextKey(definition.kind, id);
|
|
2179
2183
|
let context = this.contexts.get(key);
|
|
2180
|
-
if (role === "start" && context?.start !== void 0) throw new Error(`conversation Context ${key} received more than one start Match`);
|
|
2181
2184
|
context ??= this.createContext(definition, id, key);
|
|
2182
|
-
const
|
|
2185
|
+
const starting = role === "start" && context.start === void 0;
|
|
2186
|
+
const match = conversationMatch(input, role, this.locationIndex.locationOf(input.event));
|
|
2183
2187
|
const previous = context.matches.at(-1);
|
|
2184
2188
|
if (previous !== void 0 && previous.event.seq >= input.event.seq) throw new Error(`conversation Context ${key} received non-appended Match ${input.event.seq}`);
|
|
2185
|
-
if (
|
|
2189
|
+
if (starting && context.matches.length > 0) throw new Error(`conversation Context ${key} received an update before its start Match`);
|
|
2186
2190
|
context.matches.push(match);
|
|
2187
|
-
if (match.role === "start") {
|
|
2191
|
+
if (starting && match.role === "start") {
|
|
2188
2192
|
context.startSeq = input.event.seq;
|
|
2189
2193
|
context.start = match;
|
|
2190
2194
|
this.indexStartedContext(context);
|
|
@@ -2192,7 +2196,7 @@ window.__ModuleLoader__.load({
|
|
|
2192
2196
|
const owners = this.contextsBySeq.get(input.event.seq) ?? /* @__PURE__ */ new Set();
|
|
2193
2197
|
owners.add(context);
|
|
2194
2198
|
this.contextsBySeq.set(input.event.seq, owners);
|
|
2195
|
-
if (
|
|
2199
|
+
if (starting) this.replayContext(context);
|
|
2196
2200
|
else if (context.state !== void 0) {
|
|
2197
2201
|
const typed = contextSnapshot(context);
|
|
2198
2202
|
context.state = requireState(definition, "update", definition.update(typed, match));
|
|
@@ -2203,49 +2207,57 @@ window.__ModuleLoader__.load({
|
|
|
2203
2207
|
return definition.publication?.(match) ?? "immediate";
|
|
2204
2208
|
}
|
|
2205
2209
|
applyPendingMatches(pending, affected) {
|
|
2206
|
-
const startsByKind = /* @__PURE__ */ new Map();
|
|
2207
2210
|
for (const [key, entries] of pending) {
|
|
2208
2211
|
const first = entries[0];
|
|
2209
2212
|
if (first === void 0) continue;
|
|
2210
2213
|
let context = this.contexts.get(key);
|
|
2211
2214
|
context ??= this.createContext(first.definition, first.id, key);
|
|
2212
|
-
let discoveredStart;
|
|
2213
2215
|
const additions = entries.map((entry) => {
|
|
2214
2216
|
if (entry.definition !== context.definition || entry.id !== context.id) throw new Error(`conversation Context ${key} received inconsistent Definition identity`);
|
|
2215
|
-
if (entry.match.role === "start") {
|
|
2216
|
-
if (discoveredStart !== void 0 || context.start !== void 0) throw new Error(`conversation Context ${key} received more than one start Match`);
|
|
2217
|
-
discoveredStart = entry.match;
|
|
2218
|
-
}
|
|
2219
2217
|
const owners = this.contextsBySeq.get(entry.match.event.seq) ?? /* @__PURE__ */ new Set();
|
|
2220
2218
|
owners.add(context);
|
|
2221
2219
|
this.contextsBySeq.set(entry.match.event.seq, owners);
|
|
2222
2220
|
return entry.match;
|
|
2223
2221
|
}).sort((left, right) => left.event.seq - right.event.seq);
|
|
2224
2222
|
context.matches = mergeMatches(context.key, additions, context.matches);
|
|
2225
|
-
if (discoveredStart !== void 0) {
|
|
2226
|
-
context.start = discoveredStart;
|
|
2227
|
-
context.startSeq = discoveredStart.event.seq;
|
|
2228
|
-
const starts = startsByKind.get(context.kind) ?? [];
|
|
2229
|
-
starts.push(context);
|
|
2230
|
-
startsByKind.set(context.kind, starts);
|
|
2231
|
-
}
|
|
2232
|
-
if (context.start !== void 0 && context.matches[0] !== context.start) throw new Error(`conversation Context ${context.key} received an update before its start Match`);
|
|
2233
2223
|
affected.add(context);
|
|
2234
2224
|
this.markDirty(context);
|
|
2235
2225
|
}
|
|
2236
|
-
for (const [kind, contexts] of startsByKind) this.indexStartedContexts(kind, contexts);
|
|
2237
2226
|
}
|
|
2238
2227
|
replayContexts(contexts) {
|
|
2228
|
+
this.refreshStarts(contexts);
|
|
2239
2229
|
const ordered = [...contexts].sort((left, right) => (left.startSeq ?? Number.POSITIVE_INFINITY) - (right.startSeq ?? Number.POSITIVE_INFINITY));
|
|
2240
2230
|
for (const context of ordered) {
|
|
2241
2231
|
if (context.start === void 0) {
|
|
2242
2232
|
context.state = void 0;
|
|
2233
|
+
this.replaceDependencies(context, /* @__PURE__ */ new Map());
|
|
2234
|
+
context.revision++;
|
|
2235
|
+
this.revised.add(context);
|
|
2243
2236
|
this.markDirty(context);
|
|
2244
2237
|
continue;
|
|
2245
2238
|
}
|
|
2246
2239
|
this.replayContext(context);
|
|
2247
2240
|
}
|
|
2248
2241
|
}
|
|
2242
|
+
refreshStarts(contexts) {
|
|
2243
|
+
const changed = /* @__PURE__ */ new Set();
|
|
2244
|
+
const startsByKind = /* @__PURE__ */ new Map();
|
|
2245
|
+
for (const context of contexts) {
|
|
2246
|
+
const start = context.matches.find((match) => match.role === "start");
|
|
2247
|
+
if (start === context.start) continue;
|
|
2248
|
+
context.start = start;
|
|
2249
|
+
context.startSeq = start?.event.seq;
|
|
2250
|
+
changed.add(context);
|
|
2251
|
+
const starts = startsByKind.get(context.kind) ?? [];
|
|
2252
|
+
if (start !== void 0) starts.push(context);
|
|
2253
|
+
startsByKind.set(context.kind, starts);
|
|
2254
|
+
}
|
|
2255
|
+
for (const [kind, starts] of startsByKind) {
|
|
2256
|
+
const existing = this.contextsByKind.get(kind) ?? [];
|
|
2257
|
+
this.contextsByKind.set(kind, existing.filter((context) => !changed.has(context)));
|
|
2258
|
+
this.indexStartedContexts(kind, starts);
|
|
2259
|
+
}
|
|
2260
|
+
}
|
|
2249
2261
|
replayContext(context) {
|
|
2250
2262
|
const start = context.start;
|
|
2251
2263
|
if (start === void 0) {
|
|
@@ -2260,7 +2272,7 @@ window.__ModuleLoader__.load({
|
|
|
2260
2272
|
this.replaceDependencies(context, dependencies);
|
|
2261
2273
|
for (let index = 1; index < context.matches.length; index++) {
|
|
2262
2274
|
const match = context.matches[index];
|
|
2263
|
-
if (match === void 0
|
|
2275
|
+
if (match === void 0) continue;
|
|
2264
2276
|
const typed = contextSnapshot(context);
|
|
2265
2277
|
context.state = requireState(context.definition, "update", context.definition.update(typed, match));
|
|
2266
2278
|
}
|
|
@@ -2908,6 +2920,7 @@ window.__ModuleLoader__.load({
|
|
|
2908
2920
|
var BoundConversation = class {
|
|
2909
2921
|
assembler;
|
|
2910
2922
|
snapshot;
|
|
2923
|
+
openTurn;
|
|
2911
2924
|
viewStore;
|
|
2912
2925
|
targetSources = /* @__PURE__ */ new Map();
|
|
2913
2926
|
revision = -1;
|
|
@@ -2917,6 +2930,7 @@ window.__ModuleLoader__.load({
|
|
|
2917
2930
|
this.assembler = assembler;
|
|
2918
2931
|
this.viewStore = assembler;
|
|
2919
2932
|
this.snapshot = (0, _deepseek_ai_dsh_client_store.createSnapshotStore)(this.currentSnapshot());
|
|
2933
|
+
this.openTurn = (0, _deepseek_ai_dsh_client_store.createSnapshotStore)(assembler.openTurn());
|
|
2920
2934
|
this.replace(feed.getSnapshot());
|
|
2921
2935
|
this.disposeFeed = feed.subscribe(() => {
|
|
2922
2936
|
this.accept(feed.getSnapshot());
|
|
@@ -2940,6 +2954,7 @@ window.__ModuleLoader__.load({
|
|
|
2940
2954
|
}
|
|
2941
2955
|
activate(target) {
|
|
2942
2956
|
if (this.assembler.activateTarget(target)) this.snapshot.set(this.currentSnapshot());
|
|
2957
|
+
this.openTurn.set(this.assembler.openTurn());
|
|
2943
2958
|
}
|
|
2944
2959
|
rebuild() {
|
|
2945
2960
|
this.publish(this.assembler.rebuildRegistry());
|
|
@@ -3000,6 +3015,7 @@ window.__ModuleLoader__.load({
|
|
|
3000
3015
|
}
|
|
3001
3016
|
flush() {
|
|
3002
3017
|
if (this.assembler.flush()) this.snapshot.set(this.currentSnapshot());
|
|
3018
|
+
this.openTurn.set(this.assembler.openTurn());
|
|
3003
3019
|
}
|
|
3004
3020
|
currentSnapshot() {
|
|
3005
3021
|
return {
|
|
@@ -3058,6 +3074,7 @@ window.__ModuleLoader__.load({
|
|
|
3058
3074
|
* Resolve the Conversation binding for one Controller binding or Session id.
|
|
3059
3075
|
* @param source - Session binding or identity.
|
|
3060
3076
|
* @returns stable Conversation binding.
|
|
3077
|
+
* @throws if the Session is unknown or its binding is no longer current.
|
|
3061
3078
|
*/
|
|
3062
3079
|
binding(source) {
|
|
3063
3080
|
const sessionId = typeof source === "string" ? source : source.sessionId;
|
|
@@ -6215,7 +6232,7 @@ window.__ModuleLoader__.load({
|
|
|
6215
6232
|
function po(t) {
|
|
6216
6233
|
return t instanceof _o;
|
|
6217
6234
|
}
|
|
6218
|
-
const mo = "history-push", xo = "history-merge", Co = "paste", ko = "skip-scroll-into-view", No = "skip-selection-focus", wo = "composition-end", Oo = "!important";
|
|
6235
|
+
const mo = "history-push", xo = "history-merge", Co = "paste", ko = "skip-scroll-into-view", bo = "skip-dom-selection", No = "skip-selection-focus", wo = "composition-end", Oo = "!important";
|
|
6219
6236
|
function Mo(t) {
|
|
6220
6237
|
const e = {};
|
|
6221
6238
|
if (!t) return e;
|
|
@@ -12322,7 +12339,7 @@ window.__ModuleLoader__.load({
|
|
|
12322
12339
|
};
|
|
12323
12340
|
//#endregion
|
|
12324
12341
|
//#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/input/editor/composer-editor.module.css.mjs
|
|
12325
|
-
const css$7 = ".q44v1G_reference{line-height:inherit;vertical-align:baseline;color:var(--dsw-alias-state-business-primary);-webkit-box-decoration-break:clone;box-decoration-break:clone;background:0 0;
|
|
12342
|
+
const css$7 = ".q44v1G_reference{border-radius:var(--dsw-radius-sm);line-height:inherit;vertical-align:baseline;color:var(--dsw-alias-state-business-primary);-webkit-box-decoration-break:clone;box-decoration-break:clone;background:0 0;padding:0 4px}.q44v1G_reference:hover{background:var(--dsw-alias-state-business-tertiary)}.q44v1G_openable{cursor:pointer}.q44v1G_textRef{max-width:100%;display:inline-block}";
|
|
12326
12343
|
const tagId$7 = "@deepseek-ai/dsh-client-ui-conversation/composer-editor.module.css";
|
|
12327
12344
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$7) + "]") === null) {
|
|
12328
12345
|
const tag = document.createElement("style");
|
|
@@ -13137,7 +13154,15 @@ window.__ModuleLoader__.load({
|
|
|
13137
13154
|
* @returns unregister callback that also detaches the editor root.
|
|
13138
13155
|
*/
|
|
13139
13156
|
register() {
|
|
13140
|
-
const
|
|
13157
|
+
const preserveExternalSelection = () => {
|
|
13158
|
+
const root = this.editor.getRootElement();
|
|
13159
|
+
if (root !== null && !root.contains(root.ownerDocument.activeElement)) Al(bo);
|
|
13160
|
+
return false;
|
|
13161
|
+
};
|
|
13162
|
+
const unregister = Eu(O$1(this.editor), this.editor.registerCommand(Mn$1, () => {
|
|
13163
|
+
this.editor.update(preserveExternalSelection, { discrete: true });
|
|
13164
|
+
return false;
|
|
13165
|
+
}, 4), this.editor.registerCommand(Ie$2, preserveExternalSelection, 4), this.editor.registerNodeTransform(zi, preserveExternalSelection), registerReferenceActivation(this.editor, (source, reference) => this.deps.openReference(source, reference)), O(this.editor, z(), HISTORY_MERGE_DELAY_MS), this.editor.registerUpdateListener(() => {
|
|
13141
13166
|
this.deps.onUpdate();
|
|
13142
13167
|
}), registerClaimDecoration(this.editor, () => this.deps.activeClaimToken()), registerTextRefDecoration(this.editor, () => this.deps.lexicon(), () => this.deps.activeClaimToken()), () => {
|
|
13143
13168
|
this.lexiconOff?.();
|
|
@@ -14379,6 +14404,10 @@ window.__ModuleLoader__.load({
|
|
|
14379
14404
|
const PLAN_NEXT_ACTION_EN = "describe your task to generate plan";
|
|
14380
14405
|
/** Simplified Chinese dictionary (the key-set source of truth). */
|
|
14381
14406
|
const zh = {
|
|
14407
|
+
"shortcut.newline": "换行",
|
|
14408
|
+
"shortcut.complementary": "使用互补的 Queue/Steer 方式",
|
|
14409
|
+
"shortcut.slash": "打开命令菜单",
|
|
14410
|
+
"shortcut.mention": "打开引用菜单",
|
|
14382
14411
|
"hint.plan": PLAN_NEXT_ACTION_ZH,
|
|
14383
14412
|
"hint.goal": "输入目标,智能体将持续执行",
|
|
14384
14413
|
"hint.goal.active": "当前目标进行中。可输入 edit 修改 / pause 暂停 / resume 继续 / clear 清除",
|
|
@@ -14455,9 +14484,11 @@ window.__ModuleLoader__.load({
|
|
|
14455
14484
|
"tool.title.createGoal": "创建目标",
|
|
14456
14485
|
"tool.title.getGoal": "查看目标",
|
|
14457
14486
|
"tool.title.updateGoal": "更新目标",
|
|
14487
|
+
"tool.preparing.content": "正在准备内容 {kilobytes}KB",
|
|
14458
14488
|
"tool.title.createSchedule": "创建定时任务",
|
|
14459
14489
|
"tool.title.listSchedules": "查看定时任务",
|
|
14460
14490
|
"tool.title.deleteSchedule": "删除定时任务",
|
|
14491
|
+
"tool.title.updateSchedule": "修改定时任务",
|
|
14461
14492
|
"detail.state": "状态",
|
|
14462
14493
|
"detail.todo.completed": "已完成",
|
|
14463
14494
|
"detail.todo.in_progress": "进行中",
|
|
@@ -14496,18 +14527,29 @@ window.__ModuleLoader__.load({
|
|
|
14496
14527
|
"detail.schedule.empty": "没有定时任务",
|
|
14497
14528
|
"detail.schedule.deleted": "已删除",
|
|
14498
14529
|
"detail.schedule.count": "{count} 个定时任务",
|
|
14530
|
+
"detail.schedule.daily": "每天 {time}({zone})",
|
|
14531
|
+
"detail.schedule.weekly": "每周 {days} {time}({zone})",
|
|
14532
|
+
"detail.schedule.cron": "Cron {expression}({zone})",
|
|
14533
|
+
"detail.weekday.1": "周一",
|
|
14534
|
+
"detail.weekday.2": "周二",
|
|
14535
|
+
"detail.weekday.3": "周三",
|
|
14536
|
+
"detail.weekday.4": "周四",
|
|
14537
|
+
"detail.weekday.5": "周五",
|
|
14538
|
+
"detail.weekday.6": "周六",
|
|
14539
|
+
"detail.weekday.7": "周日",
|
|
14540
|
+
"detail.weekday.join": "、",
|
|
14499
14541
|
"tool.title.inspectProviders": "检查提供方",
|
|
14500
14542
|
"tool.title.queryRuntime": "查询运行时",
|
|
14501
14543
|
"tool.title.inspectPlugins": "检查动态插件",
|
|
14502
14544
|
"tool.title.workflow": "运行工作流",
|
|
14503
|
-
"tool.title.ralph": "
|
|
14545
|
+
"tool.title.ralph": "运行循环工作流",
|
|
14504
14546
|
"tool.title.readEvent": "读取事件",
|
|
14505
14547
|
"tool.title.searchEvents": "搜索事件",
|
|
14506
14548
|
"tool.title.traceEvent": "追踪事件",
|
|
14507
14549
|
"tool.title.searchSessions": "搜索会话",
|
|
14508
14550
|
"tool.title.traceSession": "追踪会话",
|
|
14509
14551
|
"tool.title.listModels": "查看可用模型",
|
|
14510
|
-
"tool.title.subagent": "
|
|
14552
|
+
"tool.title.subagent": "创建代理",
|
|
14511
14553
|
"tool.title.listAgents": "查看代理",
|
|
14512
14554
|
"tool.title.sendMessage": "发送消息",
|
|
14513
14555
|
"tool.title.interruptAgent": "中断代理",
|
|
@@ -14529,7 +14571,7 @@ window.__ModuleLoader__.load({
|
|
|
14529
14571
|
"tool.title.getTeamTask": "读取团队任务",
|
|
14530
14572
|
"tool.title.updateTeamTask": "更新团队任务",
|
|
14531
14573
|
"tool.title.listTeamTasks": "查看团队任务",
|
|
14532
|
-
"tool.title.waitAgent": "
|
|
14574
|
+
"tool.title.waitAgent": "等待子智能体",
|
|
14533
14575
|
"detail.recordedResult": "调用结果",
|
|
14534
14576
|
"detail.empty": "暂无结果",
|
|
14535
14577
|
"detail.none": "无",
|
|
@@ -14613,8 +14655,8 @@ window.__ModuleLoader__.load({
|
|
|
14613
14655
|
"detail.receipt.signal": "信号已发送",
|
|
14614
14656
|
"detail.receipt.closed": "已关闭",
|
|
14615
14657
|
"detail.receipt.closing": "关闭中",
|
|
14616
|
-
"detail.wait.noProgress": "
|
|
14617
|
-
"detail.wait.title": "
|
|
14658
|
+
"detail.wait.noProgress": "没有正在运行的子智能体",
|
|
14659
|
+
"detail.wait.title": "子智能体状态",
|
|
14618
14660
|
"detail.wait.timeout": "等待超时",
|
|
14619
14661
|
"detail.wait.changed": "检测到变化",
|
|
14620
14662
|
"detail.agent.reply": "代理回复",
|
|
@@ -14652,6 +14694,7 @@ window.__ModuleLoader__.load({
|
|
|
14652
14694
|
"bash.failed": "失败",
|
|
14653
14695
|
"bash.stopped": "已停止",
|
|
14654
14696
|
"row.running": "运行中",
|
|
14697
|
+
"row.preparing": "正在准备调用",
|
|
14655
14698
|
"row.failed": "失败",
|
|
14656
14699
|
"row.stopped": "已停止",
|
|
14657
14700
|
"row.input": "输入",
|
|
@@ -14664,7 +14707,7 @@ window.__ModuleLoader__.load({
|
|
|
14664
14707
|
"tool.title.edit": "编辑",
|
|
14665
14708
|
"tool.title.code": "代码",
|
|
14666
14709
|
"tool.title.generic": "工具调用",
|
|
14667
|
-
"tool.title.inspect": "
|
|
14710
|
+
"tool.title.inspect": "查询 Cordis 环境",
|
|
14668
14711
|
"tool.title.runCordis": "运行 Cordis 插件",
|
|
14669
14712
|
"tool.title.stopCordis": "停止 Cordis 插件",
|
|
14670
14713
|
"tool.title.removeCordis": "移除 Cordis 插件",
|
|
@@ -14727,6 +14770,10 @@ window.__ModuleLoader__.load({
|
|
|
14727
14770
|
};
|
|
14728
14771
|
/** English dictionary, checked complete against the zh key set. */
|
|
14729
14772
|
const en = {
|
|
14773
|
+
"shortcut.newline": "New line",
|
|
14774
|
+
"shortcut.complementary": "Use the complementary Queue / Steer action",
|
|
14775
|
+
"shortcut.slash": "Open command menu",
|
|
14776
|
+
"shortcut.mention": "Open reference menu",
|
|
14730
14777
|
"hint.plan": PLAN_NEXT_ACTION_EN,
|
|
14731
14778
|
"hint.goal": "describe the objective for a long-running task",
|
|
14732
14779
|
"hint.goal.active": "goal active — edit / pause / resume / clear",
|
|
@@ -14803,9 +14850,11 @@ window.__ModuleLoader__.load({
|
|
|
14803
14850
|
"tool.title.createGoal": "Create goal",
|
|
14804
14851
|
"tool.title.getGoal": "View goal",
|
|
14805
14852
|
"tool.title.updateGoal": "Update goal",
|
|
14853
|
+
"tool.preparing.content": "Preparing content {kilobytes}KB",
|
|
14806
14854
|
"tool.title.createSchedule": "Create reminder",
|
|
14807
14855
|
"tool.title.listSchedules": "List reminders",
|
|
14808
14856
|
"tool.title.deleteSchedule": "Delete reminder",
|
|
14857
|
+
"tool.title.updateSchedule": "Update reminder",
|
|
14809
14858
|
"detail.state": "Status",
|
|
14810
14859
|
"detail.todo.completed": "Completed",
|
|
14811
14860
|
"detail.todo.in_progress": "In progress",
|
|
@@ -14844,19 +14893,30 @@ window.__ModuleLoader__.load({
|
|
|
14844
14893
|
"detail.schedule.empty": "No reminders",
|
|
14845
14894
|
"detail.schedule.deleted": "Deleted",
|
|
14846
14895
|
"detail.schedule.count": "{count} reminders",
|
|
14896
|
+
"detail.schedule.daily": "Every day at {time} ({zone})",
|
|
14897
|
+
"detail.schedule.weekly": "Weekly on {days} at {time} ({zone})",
|
|
14898
|
+
"detail.schedule.cron": "Cron {expression} ({zone})",
|
|
14899
|
+
"detail.weekday.1": "Mon",
|
|
14900
|
+
"detail.weekday.2": "Tue",
|
|
14901
|
+
"detail.weekday.3": "Wed",
|
|
14902
|
+
"detail.weekday.4": "Thu",
|
|
14903
|
+
"detail.weekday.5": "Fri",
|
|
14904
|
+
"detail.weekday.6": "Sat",
|
|
14905
|
+
"detail.weekday.7": "Sun",
|
|
14906
|
+
"detail.weekday.join": ", ",
|
|
14847
14907
|
"tool.title.inspectProviders": "Inspect providers",
|
|
14848
14908
|
"tool.title.queryRuntime": "Query runtime",
|
|
14849
14909
|
"tool.title.inspectPlugins": "Inspect plugins",
|
|
14850
14910
|
"tool.title.workflow": "Run workflow",
|
|
14851
|
-
"tool.title.ralph": "Run
|
|
14911
|
+
"tool.title.ralph": "Run ralph loop",
|
|
14852
14912
|
"tool.title.readEvent": "Read event",
|
|
14853
14913
|
"tool.title.searchEvents": "Search events",
|
|
14854
14914
|
"tool.title.traceEvent": "Trace event",
|
|
14855
14915
|
"tool.title.searchSessions": "Search sessions",
|
|
14856
14916
|
"tool.title.traceSession": "Trace session",
|
|
14857
14917
|
"tool.title.listModels": "List models",
|
|
14858
|
-
"tool.title.subagent": "
|
|
14859
|
-
"tool.title.listAgents": "List
|
|
14918
|
+
"tool.title.subagent": "Create subagent",
|
|
14919
|
+
"tool.title.listAgents": "List subagents",
|
|
14860
14920
|
"tool.title.sendMessage": "Send message",
|
|
14861
14921
|
"tool.title.interruptAgent": "Interrupt agent",
|
|
14862
14922
|
"tool.title.listJobs": "List background jobs",
|
|
@@ -14877,7 +14937,7 @@ window.__ModuleLoader__.load({
|
|
|
14877
14937
|
"tool.title.getTeamTask": "Read team task",
|
|
14878
14938
|
"tool.title.updateTeamTask": "Update team task",
|
|
14879
14939
|
"tool.title.listTeamTasks": "List team tasks",
|
|
14880
|
-
"tool.title.waitAgent": "Wait for
|
|
14940
|
+
"tool.title.waitAgent": "Wait for subagent",
|
|
14881
14941
|
"detail.recordedResult": "Recorded result",
|
|
14882
14942
|
"detail.empty": "No results",
|
|
14883
14943
|
"detail.none": "None",
|
|
@@ -14961,8 +15021,8 @@ window.__ModuleLoader__.load({
|
|
|
14961
15021
|
"detail.receipt.signal": "Signal delivered",
|
|
14962
15022
|
"detail.receipt.closed": "Closed",
|
|
14963
15023
|
"detail.receipt.closing": "Closing",
|
|
14964
|
-
"detail.wait.noProgress": "No active
|
|
14965
|
-
"detail.wait.title": "
|
|
15024
|
+
"detail.wait.noProgress": "No active subagents",
|
|
15025
|
+
"detail.wait.title": "Subagent activity",
|
|
14966
15026
|
"detail.wait.timeout": "Wait timed out",
|
|
14967
15027
|
"detail.wait.changed": "Change detected",
|
|
14968
15028
|
"detail.agent.reply": "Agent response",
|
|
@@ -15000,6 +15060,7 @@ window.__ModuleLoader__.load({
|
|
|
15000
15060
|
"bash.failed": "Failed",
|
|
15001
15061
|
"bash.stopped": "Stopped",
|
|
15002
15062
|
"row.running": "Running",
|
|
15063
|
+
"row.preparing": "Preparing tool call",
|
|
15003
15064
|
"row.failed": "Failed",
|
|
15004
15065
|
"row.stopped": "Stopped",
|
|
15005
15066
|
"row.input": "IN",
|
|
@@ -15012,7 +15073,7 @@ window.__ModuleLoader__.load({
|
|
|
15012
15073
|
"tool.title.edit": "Edit",
|
|
15013
15074
|
"tool.title.code": "Code",
|
|
15014
15075
|
"tool.title.generic": "Tool call",
|
|
15015
|
-
"tool.title.inspect": "
|
|
15076
|
+
"tool.title.inspect": "Query Cordis environment",
|
|
15016
15077
|
"tool.title.runCordis": "Run Cordis Plugin",
|
|
15017
15078
|
"tool.title.stopCordis": "Stop Cordis Plugin",
|
|
15018
15079
|
"tool.title.removeCordis": "Remove Cordis Plugin",
|
|
@@ -15075,7 +15136,7 @@ window.__ModuleLoader__.load({
|
|
|
15075
15136
|
};
|
|
15076
15137
|
//#endregion
|
|
15077
15138
|
//#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/queue/QueueDock.module.css.mjs
|
|
15078
|
-
const css$6 = "._7yHdaG_dock{box-sizing:border-box;width:calc(100% - var(--dsh-composer-side-clearance) - var(--dsh-composer-side-clearance) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset));max-width:calc(var(--dsh-composer-card-max-width) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset));margin:0 auto calc(0px - var(--dsh-composer-stack-gap) - 3px);padding:0 var(--dsh-composer-dock-inset);flex:none}._7yHdaG_panel{isolation:isolate;--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);
|
|
15139
|
+
const css$6 = "._7yHdaG_dock{box-sizing:border-box;width:calc(100% - var(--dsh-composer-side-clearance) - var(--dsh-composer-side-clearance) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset));max-width:calc(var(--dsh-composer-card-max-width) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset));margin:0 auto calc(0px - var(--dsh-composer-stack-gap) - 3px);padding:0 var(--dsh-composer-dock-inset);flex:none}._7yHdaG_panel{isolation:isolate;border-radius:var(--dsw-radius-lg) var(--dsw-radius-lg) 0 0;--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);width:100%;padding:2px 0;position:relative;overflow:hidden}._7yHdaG_panel:before{z-index:-1;border-radius:inherit;background:var(--dsw-specific-menu);backdrop-filter:var(--dsw-menu-backdrop-filter);content:\"\";pointer-events:none;position:absolute;inset:0}._7yHdaG_panel:after{border:.5px solid var(--dsw-alias-border-l1);border-radius:inherit;content:\"\";pointer-events:none;border-bottom:none;position:absolute;inset:0}._7yHdaG_header{box-sizing:border-box;border-radius:var(--dsw-radius-md);width:100%;height:36px;color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:10px;padding:4px 12px;display:flex}._7yHdaG_header:focus-visible{outline:var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}._7yHdaG_header:disabled{cursor:default}._7yHdaG_lead{color:var(--dsw-alias-label-tertiary);flex:none;place-items:center;display:grid}._7yHdaG_count{min-width:0;font-family:Inter, var(--dsw-font-family);flex:auto;font-size:13px;font-weight:500;line-height:24px}._7yHdaG_chevron{width:14px;height:14px;color:var(--dsw-alias-label-tertiary);flex:none;place-items:center;display:grid}._7yHdaG_list{max-height:180px;margin:0;padding:0;list-style:none;overflow-y:auto}._7yHdaG_row{box-sizing:border-box;border-radius:var(--dsw-radius-md);align-items:center;gap:10px;width:100%;min-height:36px;padding:4px 5px 4px 12px;display:flex}._7yHdaG_row+._7yHdaG_row{box-shadow:inset 0 1px 0 var(--dsw-alias-border-l1)}._7yHdaG_attachments{flex:none;gap:4px;min-width:0;max-width:55%;display:flex;overflow:hidden}._7yHdaG_pendingRow ._7yHdaG_attachments{flex-shrink:1}._7yHdaG_file{border:.5px solid var(--dsw-alias-border-l1);border-radius:var(--dsw-radius-sm);background:var(--dsw-alias-bg-base);box-sizing:border-box;flex:0 180px;align-items:center;gap:4px;min-width:74px;height:24px;padding:0 6px;display:inline-flex;overflow:hidden}._7yHdaG_fileIcon{flex:none;width:16px;height:16px;display:inline-flex}._7yHdaG_fileName{min-width:0;color:var(--dsw-alias-label-primary-dimmed);font:var(--dsw-font-xs-13);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._7yHdaG_fileSize{color:var(--dsw-alias-label-tertiary);white-space:nowrap;flex:none;font-size:10px}._7yHdaG_thumb{border:.5px solid var(--dsw-alias-border-l1);border-radius:var(--dsw-radius-xs);background:var(--dsw-alias-bg-base);object-fit:cover;width:24px;height:24px}._7yHdaG_preview,._7yHdaG_editor{min-width:0;font:var(--dsw-font-xs-13);font-family:Inter, var(--dsw-font-family);flex:auto}._7yHdaG_preview{color:var(--dsw-alias-label-primary-dimmed);text-overflow:ellipsis;white-space:nowrap;word-break:break-word;overflow:hidden}._7yHdaG_editor{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-sm);background:var(--dsw-alias-bg-base);min-height:28px;max-height:127px;color:var(--dsw-alias-label-primary);resize:none;outline:none;padding:3px 8px;overflow-y:auto}._7yHdaG_editor:focus{border-color:var(--dsw-alias-state-business-primary)}._7yHdaG_actions{flex:none;align-items:center;gap:10px;display:flex}._7yHdaG_status{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xs-13);white-space:nowrap;flex:none}._7yHdaG_action{corner-shape:round;width:28px;height:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:999px;flex:none;place-items:center;padding:0;display:grid}._7yHdaG_action:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}._7yHdaG_action:focus-visible{outline:var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}._7yHdaG_action:disabled{cursor:default;opacity:.45}";
|
|
15079
15140
|
const tagId$6 = "@deepseek-ai/dsh-client-ui-conversation/QueueDock.module.css";
|
|
15080
15141
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$6) + "]") === null) {
|
|
15081
15142
|
const tag = document.createElement("style");
|
|
@@ -15372,6 +15433,7 @@ window.__ModuleLoader__.load({
|
|
|
15372
15433
|
queueMutable && (0, react_jsx_runtime.jsx)("div", {
|
|
15373
15434
|
className: QueueDock_module_css_default.actions,
|
|
15374
15435
|
children: editing?.id === row.id ? (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
15436
|
+
portal: true,
|
|
15375
15437
|
label: t("queue.save"),
|
|
15376
15438
|
side: "bottom",
|
|
15377
15439
|
delayMs: 500,
|
|
@@ -15386,6 +15448,7 @@ window.__ModuleLoader__.load({
|
|
|
15386
15448
|
children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutlineRegular, { size: 14 })
|
|
15387
15449
|
})
|
|
15388
15450
|
}), (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
15451
|
+
portal: true,
|
|
15389
15452
|
label: t("queue.cancelEdit"),
|
|
15390
15453
|
side: "bottom",
|
|
15391
15454
|
delayMs: 500,
|
|
@@ -15401,6 +15464,7 @@ window.__ModuleLoader__.load({
|
|
|
15401
15464
|
})
|
|
15402
15465
|
})] }) : (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
15403
15466
|
(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
15467
|
+
portal: true,
|
|
15404
15468
|
label: t("queue.edit"),
|
|
15405
15469
|
side: "bottom",
|
|
15406
15470
|
delayMs: 500,
|
|
@@ -15421,6 +15485,7 @@ window.__ModuleLoader__.load({
|
|
|
15421
15485
|
})
|
|
15422
15486
|
}),
|
|
15423
15487
|
(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
15488
|
+
portal: true,
|
|
15424
15489
|
label: t("queue.remove"),
|
|
15425
15490
|
side: "bottom",
|
|
15426
15491
|
delayMs: 500,
|
|
@@ -15436,6 +15501,7 @@ window.__ModuleLoader__.load({
|
|
|
15436
15501
|
})
|
|
15437
15502
|
}),
|
|
15438
15503
|
(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
15504
|
+
portal: true,
|
|
15439
15505
|
label: t("queue.steer"),
|
|
15440
15506
|
side: "bottom",
|
|
15441
15507
|
delayMs: 500,
|
|
@@ -15555,7 +15621,7 @@ window.__ModuleLoader__.load({
|
|
|
15555
15621
|
};
|
|
15556
15622
|
//#endregion
|
|
15557
15623
|
//#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/settings/EnterBehaviorRow.module.css.mjs
|
|
15558
|
-
const css$5 = ".T1PP_q_row{border-bottom:.5px solid var(--dsw-alias-border-l2);align-items:center;gap:8px;padding:16px 0;display:flex}.T1PP_q_rowText{flex-direction:column;flex:1;gap:4px;min-width:0;padding-right:48px;display:flex}.T1PP_q_title{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:400;line-height:22px}.T1PP_q_desc{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:18px}.T1PP_q_selector{background:var(--dsw-alias-bg-module-platform);height:36px;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;
|
|
15624
|
+
const css$5 = ".T1PP_q_row{border-bottom:.5px solid var(--dsw-alias-border-l2);align-items:center;gap:8px;padding:16px 0;display:flex}.T1PP_q_rowText{flex-direction:column;flex:1;gap:4px;min-width:0;padding-right:48px;display:flex}.T1PP_q_title{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:400;line-height:22px}.T1PP_q_desc{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:18px}.T1PP_q_selector{border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-module-platform);height:36px;font:inherit;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;align-items:center;gap:12px;padding:0 14px;font-size:14px;line-height:22px;display:inline-flex}.T1PP_q_selector:hover{background:var(--dsw-alias-interactive-bg-hover)}.T1PP_q_chevron{flex:none}";
|
|
15559
15625
|
const tagId$5 = "@deepseek-ai/dsh-client-ui-conversation/EnterBehaviorRow.module.css";
|
|
15560
15626
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$5) + "]") === null) {
|
|
15561
15627
|
const tag = document.createElement("style");
|
|
@@ -15652,7 +15718,7 @@ window.__ModuleLoader__.load({
|
|
|
15652
15718
|
}
|
|
15653
15719
|
//#endregion
|
|
15654
15720
|
//#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/skeleton/ConversationRoot.module.css.mjs
|
|
15655
|
-
const css$4 = ".wSkVaW_root{background:var(--dsw-alias-bg-base);flex-direction:column;min-width:0;height:100%;display:flex;position:relative}.wSkVaW_header{box-sizing:border-box;border-bottom:.5px solid var(--dsw-alias-border-l3);flex:none;grid-template-columns:auto minmax(0,1fr);min-height:76px;padding:10px 28px 0 20px;display:grid}.wSkVaW_header:where(:not(:has(.wSkVaW_tabs))){min-height:0;padding-bottom:10px}.wSkVaW_headerBlank{border-bottom:none;min-height:0;padding-bottom:0}.wSkVaW_headerBlank .wSkVaW_headerCorner{margin-left:auto}html:not([data-platform=darwin]) .wSkVaW_headerSessionless{padding-top:0}html:not([data-platform=darwin]) .wSkVaW_headerSessionless .wSkVaW_titleRow{min-height:0}[data-platform=darwin] .wSkVaW_headerLeading,[data-platform=darwin] .wSkVaW_headerActions,[data-platform=darwin] .wSkVaW_headerUtilities,[data-platform=darwin] .wSkVaW_headerCorner{-webkit-app-region:no-drag}.wSkVaW_titleRow{min-height:30px;grid-column:2;align-items:center;gap:0;padding-inline-start:max(0px, calc(var(--dsh-frame-leading-clearance,0px) - 20px));display:flex}.wSkVaW_titleCluster{flex:1;align-items:center;gap:10px;min-width:0;display:flex}.wSkVaW_headerLeading{flex:none;grid-area:1/1;align-items:center;gap:8px;display:flex}.wSkVaW_crumbs{white-space:nowrap;align-items:center;gap:4px;min-width:0;display:flex;overflow:hidden}.wSkVaW_crumbSeg{align-items:center;gap:4px;min-width:0;display:inline-flex}.wSkVaW_crumbSep{color:var(--dsw-alias-label-caption);font-size:14px;line-height:20px}.wSkVaW_crumb{max-width:220px;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;cursor:pointer;background:0 0;border:none;
|
|
15721
|
+
const css$4 = ".wSkVaW_root{background:var(--dsw-alias-bg-base);flex-direction:column;min-width:0;height:100%;display:flex;position:relative}.wSkVaW_header{box-sizing:border-box;border-bottom:.5px solid var(--dsw-alias-border-l3);flex:none;grid-template-columns:auto minmax(0,1fr);min-height:76px;padding:10px 28px 0 20px;display:grid}.wSkVaW_header:where(:not(:has(.wSkVaW_tabs))){min-height:0;padding-bottom:10px}.wSkVaW_headerBlank{border-bottom:none;min-height:0;padding-bottom:0}.wSkVaW_headerBlank .wSkVaW_headerCorner{margin-left:auto}html:not([data-platform=darwin]) .wSkVaW_headerSessionless{padding-top:0}html:not([data-platform=darwin]) .wSkVaW_headerSessionless .wSkVaW_titleRow{min-height:0}[data-platform=darwin] .wSkVaW_headerLeading,[data-platform=darwin] .wSkVaW_headerActions,[data-platform=darwin] .wSkVaW_headerUtilities,[data-platform=darwin] .wSkVaW_headerCorner{-webkit-app-region:no-drag}.wSkVaW_titleRow{min-height:30px;grid-column:2;align-items:center;gap:0;padding-inline-start:max(0px, calc(var(--dsh-frame-leading-clearance,0px) - 20px));display:flex;container-type:inline-size}.wSkVaW_titleCluster{flex:1;align-items:center;gap:10px;min-width:0;display:flex}.wSkVaW_headerLeading{flex:none;grid-area:1/1;align-items:center;gap:8px;display:flex}.wSkVaW_crumbs{white-space:nowrap;align-items:center;gap:4px;min-width:0;display:flex;overflow:hidden}.wSkVaW_crumbSeg{align-items:center;gap:4px;min-width:0;display:inline-flex}.wSkVaW_crumbSep{color:var(--dsw-alias-label-caption);font-size:14px;line-height:20px}.wSkVaW_crumb{border-radius:var(--dsw-radius-md);max-width:220px;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;cursor:pointer;background:0 0;border:none;padding:4px 8px;font-size:14px;line-height:20px;display:inline-block;overflow:hidden}.wSkVaW_crumbSubagent{font-size:12px;line-height:18px}button.wSkVaW_crumb:hover{background:var(--dsw-alias-interactive-bg-hover)}.wSkVaW_crumbCurrent{color:var(--dsw-alias-label-primary);cursor:default;font-weight:500}.wSkVaW_headerActions{flex:none;align-items:center;gap:8px;display:flex}.wSkVaW_headerUtilities{flex:none;align-items:center;gap:8px;margin-left:20px;display:flex}.wSkVaW_headerUtilities:empty{display:none}.wSkVaW_headerCorner{flex:none;align-items:center;margin-left:8px;margin-right:-16px;display:flex}.wSkVaW_headerCorner:empty{display:none}.wSkVaW_tabs{z-index:1;grid-column:1/-1;gap:36px;margin-top:10px;padding-left:8px;display:flex;position:relative}.wSkVaW_tab{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;padding:0 0 9px;font-size:13px;font-weight:500;line-height:16px;position:relative}.wSkVaW_tab:after{content:\"\";background:0 0;border-radius:2px;height:2px;position:absolute;bottom:-1px;left:0;right:0}.wSkVaW_tabActive{color:var(--dsw-alias-state-business-primary)}.wSkVaW_tabActive:after{background:var(--dsw-alias-state-business-primary)}.wSkVaW_viewArea{flex-direction:column;flex:1;min-height:0;display:flex}.wSkVaW_widthHandle{z-index:0;width:min(10px, calc((100% - var(--dsh-chat-content-width)) / 2 - 24px - 24px));cursor:col-resize;position:absolute;top:0;bottom:0}.wSkVaW_widthHandle[data-side=left]{right:calc(50% + var(--dsh-chat-content-width) / 2 + 24px)}.wSkVaW_widthHandle[data-side=right]{left:calc(50% + var(--dsh-chat-content-width) / 2 + 24px)}.wSkVaW_widthHandle:after{content:\"\";background:linear-gradient(to bottom, transparent calc(var(--dsh-width-handle-pointer-y,50%) - 36px), var(--dsw-alias-scrollbar-bg-l1) calc(var(--dsh-width-handle-pointer-y,50%) - 8px), var(--dsw-alias-scrollbar-bg-l1) calc(var(--dsh-width-handle-pointer-y,50%) + 8px), transparent calc(var(--dsh-width-handle-pointer-y,50%) + 36px));opacity:0;pointer-events:none;border-radius:2px;width:2px;position:absolute;top:0;bottom:0}.wSkVaW_widthHandle[data-side=left]:after{right:4px}.wSkVaW_widthHandle[data-side=right]:after{left:4px}.wSkVaW_widthHandle:hover:after,.wSkVaW_widthHandle[data-dragging]:after{opacity:1}.wSkVaW_widthHandle[data-dragging]{z-index:8}.wSkVaW_root:has([data-conversation-composer-overlay]) .wSkVaW_widthHandle{display:none}.wSkVaW_composerStack{--dsh-composer-stack-gap:6px;gap:var(--dsh-composer-stack-gap);flex-direction:column;display:flex}.wSkVaW_composerSeat{--dsh-composer-text-max-height:336px;flex-direction:column;flex:none;display:flex}.wSkVaW_root[data-phase=active]{overflow:hidden}.wSkVaW_root[data-phase=active] .wSkVaW_header{flex:none}.wSkVaW_body{--dsh-chat-content-width:var(--dsh-chat-user-width,clamp(680px, calc(var(--dsh-conversation-column-width,0px) * .64), 920px));--dsh-composer-card-max-width:calc(var(--dsh-chat-content-width) + 32px);--dsh-composer-side-clearance:16px;--dsh-composer-dock-inset:8px;flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.wSkVaW_embeddedBody{--dsh-chat-content-width:min(calc(100% - 32px), 920px);--dsh-composer-card-max-width:min(calc(100% - 16px), 952px);--dsh-composer-side-clearance:8px;--dsh-composer-dock-inset:8px;overflow:hidden}.wSkVaW_scrollBody{scrollbar-gutter:stable;flex-direction:column;flex:1;min-height:0;margin-right:2px;display:flex;overflow-y:auto}.wSkVaW_scrollBody::-webkit-scrollbar-track{margin:2px}.wSkVaW_root[data-phase=active] .wSkVaW_viewArea,.wSkVaW_embeddedBody[data-content-phase=active] .wSkVaW_viewArea{flex:1 0 auto;min-height:auto}.wSkVaW_root[data-phase=active] .wSkVaW_composerSeat,.wSkVaW_embeddedBody[data-content-phase=active] .wSkVaW_composerSeat{z-index:7;background:linear-gradient(180deg, color-mix(in srgb, var(--dsw-alias-bg-base) 0%, transparent) 0px, var(--dsw-alias-bg-base) 36px);position:sticky;bottom:0}.wSkVaW_root[data-phase=active] .wSkVaW_composerSeat:has([data-trigger-menu]){z-index:9}.wSkVaW_scrollBody:has([data-conversation-composer-overlay]){scrollbar-gutter:auto;position:relative;overflow:hidden auto}.wSkVaW_scrollBody:has([data-conversation-composer-overlay])>[data-slot=conversation\\.session]>.wSkVaW_viewArea{flex:1 1 0;min-height:0;overflow:hidden}.wSkVaW_scrollBody:has([data-conversation-composer-overlay])>.wSkVaW_composerSeat{right:var(--dsh-scrollbar-width);position:absolute;bottom:0;left:0}.wSkVaW_composerHero{width:min(calc(var(--dsh-composer-card-max-width) + 2 * var(--dsh-composer-side-clearance)), 100%);z-index:1;align-self:center;gap:8px;padding-bottom:32px}.wSkVaW_heroWorkspaceRow{align-items:center;gap:2px;min-width:0;margin-top:4px;padding:0 16px 0 20px;display:flex}.wSkVaW_root[data-phase=hero] .wSkVaW_scrollBody,.wSkVaW_embeddedBody[data-content-phase=hero] .wSkVaW_scrollBody{justify-content:center;overflow-y:auto}.wSkVaW_root[data-phase=settling] .wSkVaW_composerSeat,.wSkVaW_embeddedBody[data-content-phase=settling] .wSkVaW_composerSeat{visibility:hidden}";
|
|
15656
15722
|
const tagId$4 = "@deepseek-ai/dsh-client-ui-conversation/ConversationRoot.module.css";
|
|
15657
15723
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$4) + "]") === null) {
|
|
15658
15724
|
const tag = document.createElement("style");
|
|
@@ -15887,9 +15953,22 @@ window.__ModuleLoader__.load({
|
|
|
15887
15953
|
function ConversationRoot(props) {
|
|
15888
15954
|
return (0, react_jsx_runtime.jsx)(ConversationMainPanel, { ...props });
|
|
15889
15955
|
}
|
|
15956
|
+
/**
|
|
15957
|
+
* The text one Workspace is labeled with. A Workspace still carrying the
|
|
15958
|
+
* automatic first-use title reads as the caller's localized default name; every
|
|
15959
|
+
* other title reads verbatim in every language. A title the user typed as
|
|
15960
|
+
* exactly {@link DEFAULT_WORKSPACE_DIRECTORY} is labeled as the default too;
|
|
15961
|
+
* nothing else depends on the distinction.
|
|
15962
|
+
* @param title - stored Workspace title.
|
|
15963
|
+
* @param localizedDefault - the default Workspace name in the active language.
|
|
15964
|
+
* @returns the title to display.
|
|
15965
|
+
*/
|
|
15966
|
+
function workspaceDisplayTitle(title, localizedDefault) {
|
|
15967
|
+
return title === "default-workspace" ? localizedDefault : title;
|
|
15968
|
+
}
|
|
15890
15969
|
//#endregion
|
|
15891
15970
|
//#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/skeleton/HeroShell.module.css.mjs
|
|
15892
|
-
const css$3 = ".pXSMma_root{justify-content:center;align-items:center;min-width:0;height:100%;padding:0 24px;display:flex}.pXSMma_stack{width:100%;max-width:var(--dsh-composer-card-max-width);flex-direction:column;align-items:stretch;gap:12px;display:flex;overflow:visible}.pXSMma_headline{color:var(--dsw-alias-label-primary);flex-wrap:wrap;justify-content:center;align-items:center;gap:12px 10px;font-size:26px;font-weight:500;line-height:32px;display:flex}.pXSMma_titleGroup{flex-wrap:wrap;justify-content:center;align-items:center;gap:4px 7px;min-width:0;display:flex}.pXSMma_previewBadge{border:.5px solid var(--dsw-alias-interactive-bg-hover);background:var(--dsw-alias-state-business-tertiary);color:var(--dsw-alias-label-primary-bluish);font-family:var(--ds-font-family-code);white-space:nowrap;border-radius:
|
|
15971
|
+
const css$3 = ".pXSMma_root{justify-content:center;align-items:center;min-width:0;height:100%;padding:0 24px;display:flex}.pXSMma_stack{width:100%;max-width:var(--dsh-composer-card-max-width);flex-direction:column;align-items:stretch;gap:12px;display:flex;overflow:visible}.pXSMma_headline{color:var(--dsw-alias-label-primary);flex-wrap:wrap;justify-content:center;align-items:center;gap:12px 10px;font-size:26px;font-weight:500;line-height:32px;display:flex}.pXSMma_titleGroup{flex-wrap:wrap;justify-content:center;align-items:center;gap:4px 7px;min-width:0;display:flex}.pXSMma_previewBadge{border:.5px solid var(--dsw-alias-interactive-bg-hover);corner-shape:round;background:var(--dsw-alias-state-business-tertiary);color:var(--dsw-alias-label-primary-bluish);font-family:var(--ds-font-family-code);white-space:nowrap;border-radius:999px;align-self:flex-start;margin-top:2px;padding:1px 7px 0;font-size:12px;font-weight:500;line-height:18px}.pXSMma_fishHitbox{flex:none;justify-content:center;align-items:center;display:inline-flex}.pXSMma_fish{transform-origin:50% 60%;color:var(--dsw-alias-label-primary);display:block;overflow:visible}@keyframes pXSMma_hero-fish-swim{0%,to{transform:none}35%{transform:rotate(-4deg)translate(-.4px,-.9px)}70%{transform:rotate(1.6deg)translate(.3px,.2px)}}@media (hover:hover) and (prefers-reduced-motion:no-preference){.pXSMma_fishHitbox:hover .pXSMma_fish{animation:1.6s ease-in-out infinite pXSMma_hero-fish-swim}}.pXSMma_body{flex-direction:column;gap:12px;min-width:0;display:flex;position:relative;overflow:visible}.pXSMma_body>*{z-index:1;position:relative}.pXSMma_body>.pXSMma_workspaceRow{z-index:10;align-items:center;min-width:0;padding-left:8px;display:flex}.pXSMma_workspace{border-radius:var(--dsw-radius-sm);max-width:min(100%,360px);min-height:28px;color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border:none;align-items:center;gap:4px;padding:0 8px;font-size:13px;font-weight:500;line-height:20px;display:inline-flex}.pXSMma_workspace:not(:disabled):hover,.pXSMma_workspace[aria-expanded=true]{background:var(--dsw-alias-interactive-bg-hover)}.pXSMma_workspace:disabled{cursor:default}.pXSMma_folder{color:var(--dsw-alias-label-primary);flex:none}.pXSMma_workspaceLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.pXSMma_chevron{color:var(--dsw-alias-label-caption);flex:none}.pXSMma_modalInput{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-lg);width:100%;height:44px;color:var(--dsw-alias-label-primary);background:0 0;outline:none;padding:7px 14px;font-size:14px;font-weight:400;line-height:22px}.pXSMma_modalInput::placeholder{color:var(--dsw-alias-label-caption)}.pXSMma_modalInput:disabled{color:var(--dsw-alias-label-dimmed)}.pXSMma_modalAction{min-width:72px}.pXSMma_modalError{color:var(--dsw-alias-state-error-primary);margin-top:8px;font-size:12px;line-height:18px}";
|
|
15893
15972
|
const tagId$3 = "@deepseek-ai/dsh-client-ui-conversation/HeroShell.module.css";
|
|
15894
15973
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$3) + "]") === null) {
|
|
15895
15974
|
const tag = document.createElement("style");
|
|
@@ -16095,7 +16174,8 @@ window.__ModuleLoader__.load({
|
|
|
16095
16174
|
session,
|
|
16096
16175
|
input: inputState
|
|
16097
16176
|
};
|
|
16098
|
-
const
|
|
16177
|
+
const storedChipTitle = pendingWorkspace?.title ?? (sessionId === void 0 ? void 0 : sessionWorkspace?.title ?? (workspaces.phase === "ready" || cwd === void 0 || cwd === "" ? void 0 : workspaceLabel(cwd)));
|
|
16178
|
+
const chipTitle = storedChipTitle === void 0 ? void 0 : workspaceDisplayTitle(storedChipTitle, t("workspace.defaultName"));
|
|
16099
16179
|
const heroWorkspaceRow = (0, react_jsx_runtime.jsxs)("div", {
|
|
16100
16180
|
className: ConversationRoot_module_css_default.heroWorkspaceRow,
|
|
16101
16181
|
children: [
|
|
@@ -16166,12 +16246,15 @@ window.__ModuleLoader__.load({
|
|
|
16166
16246
|
ref: seatResizeRef,
|
|
16167
16247
|
className: ConversationRoot_module_css_default.composerSeat,
|
|
16168
16248
|
"data-composer-seat": "",
|
|
16249
|
+
"data-conversation-region": "composer",
|
|
16169
16250
|
children: composer
|
|
16170
16251
|
});
|
|
16171
16252
|
return (0, react_jsx_runtime.jsxs)("div", {
|
|
16172
16253
|
ref: setBody,
|
|
16173
16254
|
className: clsx(ConversationRoot_module_css_default.body, props.variant === "embedded" && ConversationRoot_module_css_default.embeddedBody),
|
|
16174
16255
|
"data-conversation-content": "",
|
|
16256
|
+
"data-conversation-session": sessionId,
|
|
16257
|
+
"data-conversation-region": "chat",
|
|
16175
16258
|
"data-content-phase": phase,
|
|
16176
16259
|
children: [(0, react_jsx_runtime.jsxs)("div", {
|
|
16177
16260
|
className: ConversationRoot_module_css_default.scrollBody,
|
|
@@ -16207,6 +16290,7 @@ window.__ModuleLoader__.load({
|
|
|
16207
16290
|
const blank = session === void 0 || conversation === void 0 || session.blank && conversationPhase(session, conversation) === "blank";
|
|
16208
16291
|
return (0, react_jsx_runtime.jsxs)("header", {
|
|
16209
16292
|
className: clsx(ConversationRoot_module_css_default.header, blank && ConversationRoot_module_css_default.headerBlank, sessionId === void 0 && ConversationRoot_module_css_default.headerSessionless),
|
|
16293
|
+
"data-window-drag": true,
|
|
16210
16294
|
children: [(0, react_jsx_runtime.jsx)("div", {
|
|
16211
16295
|
className: ConversationRoot_module_css_default.headerLeading,
|
|
16212
16296
|
"data-conversation-header-leading": "",
|
|
@@ -16541,6 +16625,7 @@ window.__ModuleLoader__.load({
|
|
|
16541
16625
|
}
|
|
16542
16626
|
return false;
|
|
16543
16627
|
}, 4), editor.registerCommand(cn$1, (event) => {
|
|
16628
|
+
if (event !== null && (event.altKey || event.getModifierState("AltGraph") || event.ctrlKey && event.metaKey || event.shiftKey && (event.ctrlKey || event.metaKey))) return true;
|
|
16544
16629
|
if (event?.shiftKey === true) return false;
|
|
16545
16630
|
if (event !== null && isComposingEvent(event, recentlyComposing)) return true;
|
|
16546
16631
|
if (handlers.arbitrate("enter", false) !== "pass") {
|
|
@@ -16758,7 +16843,7 @@ window.__ModuleLoader__.load({
|
|
|
16758
16843
|
}
|
|
16759
16844
|
//#endregion
|
|
16760
16845
|
//#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/skeleton/ContextMeter.module.css.mjs
|
|
16761
|
-
const css$2 = ".JObwrW_root{flex:none;display:inline-flex}.JObwrW_trigger{color:var(--dsw-alias-label-tertiary);font-family:inherit;font-size:var(--dsh-content-font-size-secondary,13px);font-variant-numeric:tabular-nums;line-height:calc(20px + var(--dsh-content-font-delta-secondary,0px));white-space:nowrap;cursor:pointer;background:0 0;border:none;
|
|
16846
|
+
const css$2 = ".JObwrW_root{flex:none;display:inline-flex}.JObwrW_trigger{border-radius:var(--dsw-radius-sm);color:var(--dsw-alias-label-tertiary);font-family:inherit;font-size:var(--dsh-content-font-size-secondary,13px);font-variant-numeric:tabular-nums;line-height:calc(20px + var(--dsh-content-font-delta-secondary,0px));white-space:nowrap;cursor:pointer;background:0 0;border:none;flex:none;align-items:center;gap:6px;padding:1px 8px;display:inline-flex}.JObwrW_trigger:hover,.JObwrW_trigger[aria-expanded=true]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary)}.JObwrW_track{fill:none;stroke:var(--dsw-alias-border-l3);stroke-width:2px}.JObwrW_fill{fill:none;stroke:var(--dsw-alias-label-tertiary);stroke-width:2px;stroke-linecap:round}.JObwrW_panel{z-index:1100;box-sizing:border-box;border-radius:var(--dsw-radius-lg);background:var(--dsw-specific-menu);width:min(264px,100vw - 24px);backdrop-filter:var(--dsw-menu-backdrop-filter);--dsw-elevation-stroke-color:var(--dsw-alias-border-l1);box-shadow:var(--dsw-elevation-prominent);color:var(--dsw-alias-label-secondary);cursor:default;border:0;padding:12px;font-size:12px;line-height:20px;position:fixed}.JObwrW_header{align-items:center;gap:6px;display:flex}.JObwrW_figures{font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-primary);margin-left:auto;font-weight:500}.JObwrW_percent{color:var(--dsw-alias-label-primary);font-weight:500}.JObwrW_headline{color:var(--dsw-alias-label-tertiary)}.JObwrW_headline:empty{display:none}.JObwrW_bar{corner-shape:round;background:var(--dsw-alias-interactive-bg-hover);border-radius:999px;gap:1px;height:4px;margin:10px 0 12px;display:flex;overflow:hidden}.JObwrW_segment{background:var(--meter-tint,var(--dsw-alias-label-tertiary));border-radius:1px;flex:none;min-width:2px;height:100%}.JObwrW_swatch{background:var(--meter-tint);vertical-align:baseline;border-radius:2px;width:8px;height:8px;margin-right:6px;display:inline-block}.JObwrW_colorSystem{--meter-tint:var(--dsw-static-neutral-bluish-400)}.JObwrW_colorTools{--meter-tint:#a78bfa}.JObwrW_colorMessages{--meter-tint:var(--dsw-static-blue-450)}.JObwrW_rows{margin:6px 0 0}.JObwrW_row{justify-content:space-between;align-items:center;gap:12px;padding:2px 0;display:flex}.JObwrW_row dt{color:var(--dsw-alias-label-secondary)}.JObwrW_row dd{font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-primary);margin:0}";
|
|
16762
16847
|
const tagId$2 = "@deepseek-ai/dsh-client-ui-conversation/ContextMeter.module.css";
|
|
16763
16848
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$2) + "]") === null) {
|
|
16764
16849
|
const tag = document.createElement("style");
|
|
@@ -17007,7 +17092,7 @@ window.__ModuleLoader__.load({
|
|
|
17007
17092
|
}
|
|
17008
17093
|
//#endregion
|
|
17009
17094
|
//#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/skeleton/InputBar.module.css.mjs
|
|
17010
|
-
const css$1 = ".uV2eYG_root{padding:0 var(--dsh-composer-side-clearance) 4px;flex-direction:column;align-items:center;display:flex}.uV2eYG_dock{justify-content:center;align-items:center;gap:12px;max-width:100%;padding-top:4px;display:flex}.uV2eYG_hero .uV2eYG_dock:empty{display:none}.uV2eYG_hero{padding:0 var(--dsh-composer-side-clearance)}.uV2eYG_notice{width:100%;max-width:var(--dsh-composer-card-max-width);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);
|
|
17095
|
+
const css$1 = ".uV2eYG_root{padding:0 var(--dsh-composer-side-clearance) 4px;flex-direction:column;align-items:center;display:flex}.uV2eYG_dock{justify-content:center;align-items:center;gap:12px;max-width:100%;padding-top:4px;display:flex}.uV2eYG_hero .uV2eYG_dock:empty{display:none}.uV2eYG_hero{padding:0 var(--dsh-composer-side-clearance)}.uV2eYG_notice{width:100%;max-width:var(--dsh-composer-card-max-width);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);margin-bottom:6px;padding:4px 8px;font-size:12px;line-height:18px}.uV2eYG_card{box-sizing:border-box;width:100%;max-width:var(--dsh-composer-card-max-width);--dsw-elevation-stroke-color:var(--dsw-alias-border-l2);border-radius:var(--dsw-radius-panel);background:var(--dsw-specific-input-major);box-shadow:var(--dsw-elevation-soft);font-size:var(--dsh-content-font-size,14px);line-height:calc(24px + var(--dsh-content-font-delta,0px));--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border:0;flex-direction:column;gap:12px;padding-top:8px;display:flex;position:relative}.uV2eYG_cardWorkspaceTrigger{--dsw-elevation-stroke-color:transparent;cursor:pointer}.uV2eYG_cardWorkspaceTrigger:after{content:\"\";box-sizing:border-box;border-radius:var(--dsw-radius-panel);color:var(--dsw-alias-border-l4);pointer-events:none;border:1px dashed;transition:color .1s;position:absolute;inset:0}.uV2eYG_cardWorkspaceTrigger :disabled{pointer-events:none}.uV2eYG_cardWorkspaceTrigger:hover:after{color:var(--dsw-alias-state-business-primary)}.uV2eYG_accessory{align-items:center;gap:8px;padding:10px 12px 0;display:flex}.uV2eYG_overlayAnchor{height:0;position:absolute;inset:0 0 auto}.uV2eYG_scroll{max-height:var(--dsh-composer-text-max-height);margin-right:4px;overflow-y:auto}.uV2eYG_scroll::-webkit-scrollbar-track{margin-top:8px}.uV2eYG_grow{position:relative}.uV2eYG_pending{corner-shape:round;background:var(--dsw-alias-state-business-primary);border-radius:50%;width:8px;height:8px;animation:1s ease-in-out infinite alternate uV2eYG_input-pending}@keyframes uV2eYG_input-pending{0%{opacity:.35}to{opacity:1}}.uV2eYG_input{box-sizing:border-box;min-height:36px;font-family:var(--dsw-font-family);font-size:inherit;line-height:inherit;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;color:var(--dsw-alias-label-primary);caret-color:var(--dsw-alias-state-business-primary);outline:none;padding:4px 8px 0 14px}.uV2eYG_input p{margin:0}.uV2eYG_input p:last-child:after{content:var(--dsh-composer-hint);color:var(--dsw-alias-label-caption)}.uV2eYG_input[data-composer-composing] p:last-child:after{content:none}.uV2eYG_input[data-composer-composing]+.uV2eYG_placeholder{visibility:hidden}.uV2eYG_placeholder{color:var(--dsw-alias-label-caption);white-space:nowrap;text-overflow:ellipsis;pointer-events:none;user-select:none;position:absolute;inset:4px 8px auto 14px;overflow:hidden}.uV2eYG_inputDisabled{color:var(--dsw-alias-label-tertiary);cursor:not-allowed}.uV2eYG_input[aria-haspopup=menu]{cursor:pointer}.uV2eYG_hero .uV2eYG_input{min-height:52px}.uV2eYG_hero .uV2eYG_placeholder{white-space:normal;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box}.uV2eYG_row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;min-width:0;padding:2px 8px 6px;display:flex;container-type:inline-size}.uV2eYG_row[data-model-compact]{--dsh-composer-model-text-display:none;--dsh-composer-model-icon-display:block}.uV2eYG_tools,.uV2eYG_modes,.uV2eYG_trailing{align-items:center;min-width:0;display:flex}.uV2eYG_tools,.uV2eYG_modes{gap:12px}.uV2eYG_trailing{flex:none;gap:12px;margin-left:auto}@container (width<=560px){.uV2eYG_tools,.uV2eYG_modes,.uV2eYG_trailing{gap:8px}}.uV2eYG_add{corner-shape:round;background:var(--dsw-specific-selector);width:28px;height:28px;color:var(--dsw-alias-label-primary);cursor:pointer;border:none;border-radius:999px;flex:none;place-items:center;display:grid}.uV2eYG_add:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-solid)}.uV2eYG_add:disabled{opacity:.5;cursor:default}.uV2eYG_select{border-radius:var(--dsw-radius-sm);max-width:220px;height:28px;color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;appearance:none;background-color:#0000;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none'%3E%3Cpath d='M3 4.5L6 7.5L9 4.5' stroke='%2381858C' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");background-position:right 4px center;background-repeat:no-repeat;background-size:12px 12px;border:none;outline:none;padding:0 20px 0 8px;font-size:13px;font-weight:500;line-height:20px}.uV2eYG_select:hover:not(:disabled){background-color:var(--dsw-alias-interactive-bg-hover)}.uV2eYG_select:disabled{opacity:.5;cursor:default}.uV2eYG_primary{corner-shape:round;background:var(--dsw-alias-button-info-fill);color:#fff;cursor:pointer;border:none;border-radius:999px;flex:none;place-items:center;width:34px;height:34px;transition:background-color .1s;display:grid;transform:translateY(-2px)}.uV2eYG_primary:hover:not(:disabled){background:var(--dsw-alias-button-info-hover)}.uV2eYG_primary:disabled{opacity:.4;cursor:default}.uV2eYG_retry{border-radius:var(--dsw-radius-sm);color:inherit;cursor:pointer;background:0 0;border:1px solid;margin-left:8px;padding:1px 8px;font-size:12px}.uV2eYG_standardControls{align-items:center;gap:12px;min-width:0;display:flex}.uV2eYG_tools[hidden],.uV2eYG_standardControls[hidden]{display:none}.uV2eYG_trailingActive{flex:1;margin-left:0}.uV2eYG_activity{flex:none;align-items:center;display:flex}.uV2eYG_activity:empty{display:none}.uV2eYG_activityExpanded{flex:1;min-width:0}";
|
|
17011
17096
|
const tagId$1 = "@deepseek-ai/dsh-client-ui-conversation/InputBar.module.css";
|
|
17012
17097
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
|
|
17013
17098
|
const tag = document.createElement("style");
|
|
@@ -17061,10 +17146,11 @@ window.__ModuleLoader__.load({
|
|
|
17061
17146
|
* The no-session state renders the SAME div inert as the Workspace-picker
|
|
17062
17147
|
* trigger instead of a parallel tree.
|
|
17063
17148
|
*/
|
|
17064
|
-
const InputBar = (0, react.memo)(function InputBar({ useSession, useInput, inputActions, keyboard, addFiles, removeAttachment, resolveDraftAttachments, retryFileUpload, toggleCommandMenu, stop, t, renderSlot, useBusyEnter, useFileUploads, useNotices, useLexicon, useMenuLauncher, useProjection, sessionId, variant, disabled: inert = false, blocked, workspacePickerOpen = false, onRequestWorkspace, placeholder, accessory }) {
|
|
17149
|
+
const InputBar = (0, react.memo)(function InputBar({ useSession, useInput, inputActions, keyboard, addFiles, removeAttachment, resolveDraftAttachments, retryFileUpload, toggleCommandMenu, stop, t, renderSlot, useBusyEnter, useFileUploads, useNotices, useLexicon, useMenuLauncher, useStopShortcut, useProjection, sessionId, variant, disabled: inert = false, blocked, workspacePickerOpen = false, onRequestWorkspace, placeholder, accessory }) {
|
|
17065
17150
|
const input = useInput((s) => s);
|
|
17066
17151
|
const notice = useNotices((s) => s);
|
|
17067
17152
|
const busyEnter = useBusyEnter((s) => s);
|
|
17153
|
+
const stopKeys = useStopShortcut((keys) => keys);
|
|
17068
17154
|
const commandMenuOpen = useMenuLauncher((source) => source === "command");
|
|
17069
17155
|
const [activity, setActivity] = (0, react.useState)(false);
|
|
17070
17156
|
(0, react.useEffect)(() => {
|
|
@@ -17377,6 +17463,7 @@ window.__ModuleLoader__.load({
|
|
|
17377
17463
|
}),
|
|
17378
17464
|
interruptible && (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
17379
17465
|
label: t("input.stop"),
|
|
17466
|
+
shortcutKeys: stopKeys,
|
|
17380
17467
|
side: "top",
|
|
17381
17468
|
delayMs: 500,
|
|
17382
17469
|
disabled: stop === void 0,
|
|
@@ -17404,7 +17491,8 @@ window.__ModuleLoader__.load({
|
|
|
17404
17491
|
})
|
|
17405
17492
|
}),
|
|
17406
17493
|
(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
17407
|
-
label: primaryLabel,
|
|
17494
|
+
label: primaryStops ? t("input.stop") : primaryLabel,
|
|
17495
|
+
shortcutKeys: primaryStops ? stopKeys : void 0,
|
|
17408
17496
|
side: "top",
|
|
17409
17497
|
delayMs: 500,
|
|
17410
17498
|
disabled: primaryDisabled,
|
|
@@ -17457,7 +17545,7 @@ window.__ModuleLoader__.load({
|
|
|
17457
17545
|
});
|
|
17458
17546
|
//#endregion
|
|
17459
17547
|
//#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-conversation/src/client/skeleton/TodoPanel.module.css.mjs
|
|
17460
|
-
const css = ".lXshSW_root{box-sizing:border-box;width:calc(100% - var(--dsh-composer-side-clearance) - var(--dsh-composer-side-clearance) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset));max-width:calc(var(--dsh-composer-card-max-width) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset));--dsw-elevation-stroke-color:var(--dsw-alias-border-l1);background:var(--dsw-specific-menu);backdrop-filter:var(--dsw-menu-backdrop-filter);box-shadow:var(--dsw-elevation-panel);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border:0;
|
|
17548
|
+
const css = ".lXshSW_root{box-sizing:border-box;width:calc(100% - var(--dsh-composer-side-clearance) - var(--dsh-composer-side-clearance) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset));max-width:calc(var(--dsh-composer-card-max-width) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset) - var(--dsh-composer-dock-inset));--dsw-elevation-stroke-color:var(--dsw-alias-border-l1);border-radius:var(--dsw-radius-lg);background:var(--dsw-specific-menu);backdrop-filter:var(--dsw-menu-backdrop-filter);box-shadow:var(--dsw-elevation-panel);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);border:0;flex:none;margin:0 auto;overflow:hidden}.lXshSW_body{flex-direction:column;gap:8px;padding:6px 12px;display:flex}.lXshSW_header{text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:10px;width:100%;padding:0;display:flex}.lXshSW_lead{color:var(--dsw-alias-label-tertiary);flex:none;place-items:center;display:grid}.lXshSW_title{color:var(--dsw-alias-label-primary);flex:none;font-size:13px;font-weight:500;line-height:24px}.lXshSW_progress{min-width:0;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:auto;font-size:13px;font-weight:400;line-height:20px;overflow:hidden}.lXshSW_chevron{color:var(--dsw-alias-label-tertiary);flex:none;place-items:center;display:grid}.lXshSW_list{flex-direction:column;gap:8px;max-height:180px;margin:0;padding:0;list-style:none;display:flex;overflow-y:auto}.lXshSW_item{min-width:0;color:var(--dsw-alias-label-secondary);align-items:center;gap:10px;font-size:13px;line-height:20px;display:flex}.lXshSW_glyph{flex:none;place-items:center;width:16px;height:16px;display:grid}.lXshSW_content{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}";
|
|
17461
17549
|
const tagId = "@deepseek-ai/dsh-client-ui-conversation/TodoPanel.module.css";
|
|
17462
17550
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
|
|
17463
17551
|
const tag = document.createElement("style");
|
|
@@ -17593,6 +17681,132 @@ window.__ModuleLoader__.load({
|
|
|
17593
17681
|
}
|
|
17594
17682
|
};
|
|
17595
17683
|
//#endregion
|
|
17684
|
+
//#region lib/types/client/stop-sequence.js
|
|
17685
|
+
/** One short-lived first press, cleared before an accepted cancellation runs. */
|
|
17686
|
+
var StopSequence = class {
|
|
17687
|
+
intervalMs;
|
|
17688
|
+
release;
|
|
17689
|
+
first;
|
|
17690
|
+
timer;
|
|
17691
|
+
/**
|
|
17692
|
+
* @param intervalMs - validated maximum time between independent presses.
|
|
17693
|
+
* @param release - releases observations retained by the pending first press.
|
|
17694
|
+
*/
|
|
17695
|
+
constructor(intervalMs, release) {
|
|
17696
|
+
this.intervalMs = intervalMs;
|
|
17697
|
+
this.release = release;
|
|
17698
|
+
}
|
|
17699
|
+
/** Clear the first press and its expiry timer. */
|
|
17700
|
+
reset() {
|
|
17701
|
+
this.first = void 0;
|
|
17702
|
+
clearTimeout(this.timer);
|
|
17703
|
+
this.timer = void 0;
|
|
17704
|
+
this.release();
|
|
17705
|
+
}
|
|
17706
|
+
/**
|
|
17707
|
+
* Accept one eligible, non-repeated Escape against freshly resolved current state.
|
|
17708
|
+
* @param target - live turn and actual focused input region.
|
|
17709
|
+
* @returns whether this press requested cancellation.
|
|
17710
|
+
*/
|
|
17711
|
+
press(target) {
|
|
17712
|
+
const first = this.first;
|
|
17713
|
+
this.reset();
|
|
17714
|
+
if (first !== void 0 && performance.now() <= first.deadline && first.target.sessionId === target.sessionId && first.target.turn === target.turn && first.target.generation === target.generation && first.target.region === target.region) {
|
|
17715
|
+
target.cancel();
|
|
17716
|
+
return true;
|
|
17717
|
+
}
|
|
17718
|
+
this.first = {
|
|
17719
|
+
target,
|
|
17720
|
+
deadline: performance.now() + this.intervalMs
|
|
17721
|
+
};
|
|
17722
|
+
this.timer = setTimeout(() => {
|
|
17723
|
+
this.reset();
|
|
17724
|
+
}, this.intervalMs + 1);
|
|
17725
|
+
return false;
|
|
17726
|
+
}
|
|
17727
|
+
};
|
|
17728
|
+
//#endregion
|
|
17729
|
+
//#region lib/types/client/stop-shortcut.js
|
|
17730
|
+
/**
|
|
17731
|
+
* Subscribe fixed input to the same Session cancellation used by the stop button.
|
|
17732
|
+
* @param shortcuts - window keyboard arbitration and validated sequence interval.
|
|
17733
|
+
* @param sessions - live Session identities and lifecycle sources.
|
|
17734
|
+
* @param openTurn - stable current-turn source for a live Session binding.
|
|
17735
|
+
* @param uiSession - current pending-interaction status.
|
|
17736
|
+
* @param cancel - scoped stop operation that preserves Queue and reports failures.
|
|
17737
|
+
* @returns disposer releasing the input subscription, pending watches and expiry timer.
|
|
17738
|
+
*/
|
|
17739
|
+
function installStopShortcut(shortcuts, sessions, openTurn, uiSession, cancel) {
|
|
17740
|
+
let unwatch = () => {};
|
|
17741
|
+
const sequence = new StopSequence(shortcuts.stopSequenceMs, () => {
|
|
17742
|
+
unwatch();
|
|
17743
|
+
unwatch = () => {};
|
|
17744
|
+
});
|
|
17745
|
+
const reset = () => {
|
|
17746
|
+
sequence.reset();
|
|
17747
|
+
};
|
|
17748
|
+
const off = shortcuts.observeFixedInput((input) => {
|
|
17749
|
+
if (input.type === "reset") {
|
|
17750
|
+
reset();
|
|
17751
|
+
return;
|
|
17752
|
+
}
|
|
17753
|
+
const { gesture, context } = input;
|
|
17754
|
+
if (gesture.code !== "Escape" || gesture.repeat || gesture.composing || gesture.defaultPrevented || gesture.control || gesture.alt || gesture.shift || gesture.meta || context.modal !== null || context.region === "terminal" || context.target === null) {
|
|
17755
|
+
reset();
|
|
17756
|
+
return;
|
|
17757
|
+
}
|
|
17758
|
+
const target = context.target;
|
|
17759
|
+
const occurrence = target.closest("[data-conversation-session]");
|
|
17760
|
+
const region = target.closest("[data-conversation-region]");
|
|
17761
|
+
if (occurrence === null || region === null || !occurrence.contains(region) || target.closest("[data-approval-key], iframe, .xterm, [inert]") !== null) {
|
|
17762
|
+
reset();
|
|
17763
|
+
return;
|
|
17764
|
+
}
|
|
17765
|
+
const sessionId = occurrence.dataset.conversationSession;
|
|
17766
|
+
const binding = sessions.binding(sessionId);
|
|
17767
|
+
if (binding === void 0) {
|
|
17768
|
+
reset();
|
|
17769
|
+
return;
|
|
17770
|
+
}
|
|
17771
|
+
const turnSource = openTurn(binding);
|
|
17772
|
+
const currentTurn = () => {
|
|
17773
|
+
const session = binding.session.getSnapshot();
|
|
17774
|
+
if (!session.running || session.removed || session.subagent !== null && session.subagent.address.mode !== "continuable" || uiSession.sessionStatus.getSnapshot().get(sessionId)?.pendingInteraction !== void 0) return void 0;
|
|
17775
|
+
return turnSource.getSnapshot();
|
|
17776
|
+
};
|
|
17777
|
+
const turn = currentTurn();
|
|
17778
|
+
if (turn === void 0) {
|
|
17779
|
+
reset();
|
|
17780
|
+
return;
|
|
17781
|
+
}
|
|
17782
|
+
input.consume();
|
|
17783
|
+
if (sequence.press({
|
|
17784
|
+
sessionId,
|
|
17785
|
+
turn,
|
|
17786
|
+
generation: binding,
|
|
17787
|
+
region,
|
|
17788
|
+
cancel: () => {
|
|
17789
|
+
cancel(sessionId);
|
|
17790
|
+
}
|
|
17791
|
+
})) return;
|
|
17792
|
+
const changed = () => {
|
|
17793
|
+
if (sessions.binding(sessionId) !== binding || currentTurn() !== turn) reset();
|
|
17794
|
+
};
|
|
17795
|
+
const disposers = [
|
|
17796
|
+
turnSource.subscribe(changed),
|
|
17797
|
+
binding.session.subscribe(changed),
|
|
17798
|
+
uiSession.sessionStatus.subscribe(changed)
|
|
17799
|
+
];
|
|
17800
|
+
unwatch = () => {
|
|
17801
|
+
for (const dispose of disposers) dispose();
|
|
17802
|
+
};
|
|
17803
|
+
});
|
|
17804
|
+
return () => {
|
|
17805
|
+
off();
|
|
17806
|
+
reset();
|
|
17807
|
+
};
|
|
17808
|
+
}
|
|
17809
|
+
//#endregion
|
|
17596
17810
|
//#region lib/types/client/apply.js
|
|
17597
17811
|
/** Services required by the Conversation plugin. */
|
|
17598
17812
|
const inject = [
|
|
@@ -17728,6 +17942,93 @@ window.__ModuleLoader__.load({
|
|
|
17728
17942
|
disposeViews();
|
|
17729
17943
|
};
|
|
17730
17944
|
}, "ui-conversation: View selection");
|
|
17945
|
+
const stop = (sessionId) => {
|
|
17946
|
+
scopedConversation(sessions, sessionId).cancel().catch((_error) => {});
|
|
17947
|
+
};
|
|
17948
|
+
const stopShortcut = (0, _deepseek_ai_dsh_client_store.createSnapshotStore)([]);
|
|
17949
|
+
ctx.inject(["shortcuts"], (scope) => {
|
|
17950
|
+
const fixedInputs = [
|
|
17951
|
+
{
|
|
17952
|
+
id: "fixed.send",
|
|
17953
|
+
label: () => t("input.send"),
|
|
17954
|
+
keys: ["Enter"],
|
|
17955
|
+
bindings: [{
|
|
17956
|
+
code: "Enter",
|
|
17957
|
+
modifiers: []
|
|
17958
|
+
}],
|
|
17959
|
+
group: "input"
|
|
17960
|
+
},
|
|
17961
|
+
{
|
|
17962
|
+
id: "fixed.newline",
|
|
17963
|
+
label: () => t("shortcut.newline"),
|
|
17964
|
+
keys: scope.shortcuts.describeBinding({
|
|
17965
|
+
code: "Enter",
|
|
17966
|
+
modifiers: ["shift"]
|
|
17967
|
+
}).keys,
|
|
17968
|
+
bindings: [{
|
|
17969
|
+
code: "Enter",
|
|
17970
|
+
modifiers: ["shift"]
|
|
17971
|
+
}],
|
|
17972
|
+
group: "input"
|
|
17973
|
+
},
|
|
17974
|
+
{
|
|
17975
|
+
id: "fixed.complementary",
|
|
17976
|
+
label: () => t("shortcut.complementary"),
|
|
17977
|
+
keys: scope.shortcuts.describeBinding({
|
|
17978
|
+
code: "Enter",
|
|
17979
|
+
modifiers: ["primary"]
|
|
17980
|
+
}).keys,
|
|
17981
|
+
bindings: [{
|
|
17982
|
+
code: "Enter",
|
|
17983
|
+
modifiers: ["control"]
|
|
17984
|
+
}, {
|
|
17985
|
+
code: "Enter",
|
|
17986
|
+
modifiers: ["meta"]
|
|
17987
|
+
}],
|
|
17988
|
+
group: "input"
|
|
17989
|
+
},
|
|
17990
|
+
{
|
|
17991
|
+
id: "fixed.slash",
|
|
17992
|
+
label: () => t("shortcut.slash"),
|
|
17993
|
+
keys: ["/"],
|
|
17994
|
+
bindings: [{
|
|
17995
|
+
code: "Slash",
|
|
17996
|
+
modifiers: []
|
|
17997
|
+
}],
|
|
17998
|
+
group: "input"
|
|
17999
|
+
},
|
|
18000
|
+
{
|
|
18001
|
+
id: "fixed.mention",
|
|
18002
|
+
label: () => t("shortcut.mention"),
|
|
18003
|
+
keys: ["@"],
|
|
18004
|
+
bindings: [{
|
|
18005
|
+
code: "Digit2",
|
|
18006
|
+
modifiers: ["shift"]
|
|
18007
|
+
}],
|
|
18008
|
+
group: "input"
|
|
18009
|
+
}
|
|
18010
|
+
];
|
|
18011
|
+
for (const command of fixedInputs) scope.effect(() => scope.shortcuts.registerFixed(command), `ui-conversation: ${command.id}`);
|
|
18012
|
+
scope.effect(() => installStopShortcut(scope.shortcuts, sessions, (binding) => uiConversation.binding(binding).openTurn, ctx.uiSession, stop), "ui-conversation: fixed stop input");
|
|
18013
|
+
scope.effect(() => {
|
|
18014
|
+
const command = {
|
|
18015
|
+
id: "response.stop",
|
|
18016
|
+
label: () => t("input.stop"),
|
|
18017
|
+
keys: ["Esc", "Esc"],
|
|
18018
|
+
bindings: [{
|
|
18019
|
+
code: "Escape",
|
|
18020
|
+
modifiers: []
|
|
18021
|
+
}],
|
|
18022
|
+
group: "input"
|
|
18023
|
+
};
|
|
18024
|
+
const dispose = scope.shortcuts.registerFixed(command);
|
|
18025
|
+
stopShortcut.set(command.keys);
|
|
18026
|
+
return () => {
|
|
18027
|
+
stopShortcut.set([]);
|
|
18028
|
+
dispose();
|
|
18029
|
+
};
|
|
18030
|
+
}, "ui-conversation: fixed stop reference");
|
|
18031
|
+
});
|
|
17731
18032
|
const inputHub = new InputHub(ctx, t);
|
|
17732
18033
|
const composerBlocks = new ComposerBlockRegistry();
|
|
17733
18034
|
ctx.inject(["commandUi"], (scope) => {
|
|
@@ -17963,6 +18264,7 @@ window.__ModuleLoader__.load({
|
|
|
17963
18264
|
toggleCommandMenu: void 0,
|
|
17964
18265
|
stop: void 0,
|
|
17965
18266
|
hooks: {
|
|
18267
|
+
stopShortcut,
|
|
17966
18268
|
busyEnter: submissionPolicy.busyEnter,
|
|
17967
18269
|
fileUploads: ABSENT_FILE_UPLOADS,
|
|
17968
18270
|
notices: ABSENT_NOTICES,
|
|
@@ -18040,9 +18342,10 @@ window.__ModuleLoader__.load({
|
|
|
18040
18342
|
});
|
|
18041
18343
|
},
|
|
18042
18344
|
stop: () => {
|
|
18043
|
-
|
|
18345
|
+
stop(sessionId);
|
|
18044
18346
|
},
|
|
18045
18347
|
hooks: {
|
|
18348
|
+
stopShortcut,
|
|
18046
18349
|
busyEnter: submissionPolicy.busyEnter,
|
|
18047
18350
|
fileUploads: conversation.fileUploads,
|
|
18048
18351
|
notices: shell.notices,
|