@sparkelf/dsh-plus 0.2.2-alpha.2.4 → 0.2.2-alpha.2.41
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.md +5 -7
- package/README.zh.md +5 -7
- package/lib/bin.js +33 -1
- package/lib/types/standalone-profile.js +44 -1
- package/package.json +84 -25
- package/patches/dsh-resource-ref-chip.patch +40 -0
- package/patches/ui-schedule-plaza-tab.patch +217 -0
- package/patches/ui-sidebar-right-global-panel.patch +36 -0
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ English | [中文](README.zh.md)
|
|
|
9
9
|
|
|
10
10
|
## Summary
|
|
11
11
|
|
|
12
|
-
This distribution composes official `@deepseek-ai/dsh-base` and `@deepseek-ai/dsh-web-app` with selected Office, MinerU, mobile, market, GenUI, and Supervisor packages, four in-repository Plus capability packages, and
|
|
12
|
+
This distribution composes official `@deepseek-ai/dsh-base` and `@deepseek-ai/dsh-web-app` with selected Office, MinerU, mobile, market, GenUI, and Supervisor packages, four in-repository Plus capability packages, and twelve independent patch packages. It owns only ordered composition, minimum compatibility metadata, dependency closure, explicit materialization, and the credential-free deployment lock; capability behavior and patch payloads stay in their owning packages.
|
|
13
13
|
|
|
14
14
|
## Table of Contents
|
|
15
15
|
|
|
@@ -23,17 +23,15 @@ This distribution composes official `@deepseek-ai/dsh-base` and `@deepseek-ai/ds
|
|
|
23
23
|
<a id="use-this-package"></a>
|
|
24
24
|
## Use this package
|
|
25
25
|
|
|
26
|
-
Install
|
|
26
|
+
Install and materialize Plus without Desktop or the tray:
|
|
27
27
|
|
|
28
28
|
```bash
|
|
29
|
-
|
|
30
|
-
dsh
|
|
29
|
+
dsh plugin --profile plus add @sparkelf/dsh-plus
|
|
30
|
+
dsh plugin --profile plus exec dsh-plus apply --dsh-root /path/to/official-dsh
|
|
31
31
|
dsh --profile plus
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
The
|
|
35
|
-
|
|
36
|
-
For a source checkout, the explicit apply step requires the exact official revision declared by `dshPlus.sourceBase.revision`, applies the embedded `dshPlus.patchSet` to that checkout, configures the npm patches the set declares, and writes `.dsh-plus/patchset.lock.json` with mode `0600`. Patched official source workspaces always replace clean CLI packages in the profile scope. The profile resolves its pinned third-party and Plus capability packages from npm. Version conflicts, source mismatches, missing bundles, and runtime closure drift stop promotion.
|
|
34
|
+
The explicit rc24 apply step requires official revision `fb2c4b9e698e30edb738bca4cf0618587db7d203`, applies every pending source payload, configures exact npm patches, removes retired Plus-owned entries, and writes `.dsh-plus/patchset.lock.json` with mode `0600`. Patched official source workspaces always replace clean CLI packages in the profile scope. The profile resolves SQL Workbench 0.5.0, Workbench Vault 0.1.1, SSH Manager 0.7.0, API Client 0.5.0, Supervisor 0.1.4, GenUI 0.9.9, dshmarket 1.45.1, OfficeCLI 0.1.1, MinerU 0.1.1, and Mobile Bridge 0.2.11 from npm. Version conflicts, source mismatches, missing bundles, and runtime closure drift stop promotion.
|
|
37
35
|
|
|
38
36
|
Official DSH supplies Sidebar navigation, file and text preview, Session search, generic file upload, durable attachment cards, read-only model paths, onboarding, Workspace selection, Session export, and Turn folding. Plus configures the official SQLite Session query provider to open on first search with a durable derived index at `$DSH_HOME/storages/session-query.sqlite`; canonical compressed JSONL remains the history source. Plus adds an OfficeCLI tool for original DOCX/XLSX/PPTX production and a MinerU PDF tool that consumes the official uploaded-file path without a prompt hook. It replaces mixed English `Session` wording in the Simplified-Chinese export UI, places the desktop Session-log action immediately before Trajectory search while retaining its Header position on phones, and keeps composer permission and model popovers inside the center column with 12px horizontal clearance. `@changfenhuang/dsh-genui@0.9.9` now contains the previously patched streaming EChart behavior. The registry-pinned Supervisor manages the materialized runtime and restores Sessions interrupted by its own restart. DataOps and MinerU mount only when their endpoint environment variables exist. Agent Teams remains excluded because official shipped profiles disable those private experimental packages.
|
|
39
37
|
|
package/README.zh.md
CHANGED
|
@@ -9,7 +9,7 @@ kind: "package-bundle"
|
|
|
9
9
|
|
|
10
10
|
## 概述
|
|
11
11
|
|
|
12
|
-
该distribution把official `@deepseek-ai/dsh-base`及`@deepseek-ai/dsh-web-app`与selected Office、MinerU、mobile、market、GenUI及Supervisor packages、四个in-repository Plus capability packages
|
|
12
|
+
该distribution把official `@deepseek-ai/dsh-base`及`@deepseek-ai/dsh-web-app`与selected Office、MinerU、mobile、market、GenUI及Supervisor packages、四个in-repository Plus capability packages及十二个independent patch packages组合起来。它只持有ordered composition、minimum compatibility metadata、dependency closure、explicit materialization及credential-free deployment lock;capability behavior和patch payloads仍属于各自package。
|
|
13
13
|
|
|
14
14
|
## 目录
|
|
15
15
|
|
|
@@ -23,17 +23,15 @@ kind: "package-bundle"
|
|
|
23
23
|
<a id="use-this-package"></a>
|
|
24
24
|
## 使用此软件包
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
无需Desktop或tray即可安装并materialize Plus:
|
|
27
27
|
|
|
28
28
|
```bash
|
|
29
|
-
|
|
30
|
-
dsh
|
|
29
|
+
dsh plugin --profile plus add @sparkelf/dsh-plus
|
|
30
|
+
dsh plugin --profile plus exec dsh-plus apply --dsh-root /path/to/official-dsh
|
|
31
31
|
dsh --profile plus
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
source checkout 的显式 apply 步骤要求`dshPlus.sourceBase.revision`声明的精确official revision,把内嵌的`dshPlus.patchSet`应用到该checkout,配置patch set声明的npm patches,并以`0600` mode写入`.dsh-plus/patchset.lock.json`。profile中的patched official source workspaces始终覆盖clean CLI packages。profile从npm解析其pinned third-party与Plus capability packages。version conflict、source mismatch、bundle缺失和runtime closure drift都会阻止promotion。
|
|
34
|
+
rc24 explicit apply步骤固定official revision `fb2c4b9e698e30edb738bca4cf0618587db7d203`,一次应用全部pending source payloads,配置exact npm patches,删除retired Plus-owned entries,并以`0600` mode写入`.dsh-plus/patchset.lock.json`。profile中的patched official source workspaces始终覆盖clean CLI packages。profile从npm解析SQL Workbench 0.5.0、Workbench Vault 0.1.1、SSH Manager 0.7.0、API Client 0.5.0、Supervisor 0.1.4、GenUI 0.9.9、dshmarket 1.45.1、OfficeCLI 0.1.1、MinerU 0.1.1及Mobile Bridge 0.2.11。version conflict、source mismatch、bundle缺失和runtime closure drift都会阻止promotion。
|
|
37
35
|
|
|
38
36
|
Official DSH提供Sidebar navigation、file与text preview、Session search、generic file upload、durable attachment cards、model-visible readonly paths、onboarding、Workspace selection、Session export及Turn folding。Plus把official SQLite Session query provider配置为首次搜索时打开,持久派生索引位于`$DSH_HOME/storages/session-query.sqlite`,canonical compressed JSONL仍为history source。Plus增加用于生成原始DOCX/XLSX/PPTX的OfficeCLI工具,以及无需prompt hook、直接消费official uploaded-file path的MinerU PDF工具;同时把简体中文导出界面中混用的英文`Session`替换为中文,在桌面端把会话日志操作放到Trajectory搜索框紧邻左侧,在手机上保留其Header位置,并让composer permission与model popover保持在center column内且水平边缘各留12px间距。`@changfenhuang/dsh-genui@0.9.9`已内含此前patch的streaming EChart behavior。registry-pinned Supervisor管理materialized runtime并恢复被自身restart中断的Sessions。DataOps和MinerU仅在对应endpoint environment variables存在时mount。Agent Teams仍被排除,因为official shipped profiles禁用这些private experimental packages。
|
|
39
37
|
|
package/lib/bin.js
CHANGED
|
@@ -1202,12 +1202,44 @@ function ensureProfile(paths, consumerDirectory, edition) {
|
|
|
1202
1202
|
"@deepseek-ai/cordis-plugin-loader": "^1.0.7-alpha.1",
|
|
1203
1203
|
"@deepseek-ai/dsh-home-paths": runtime,
|
|
1204
1204
|
"@deepseek-ai/dsh-launch-environment": runtime,
|
|
1205
|
+
"@deepseek-ai/dsh-agent": runtime,
|
|
1206
|
+
"@deepseek-ai/dsh-llm": runtime,
|
|
1207
|
+
"@deepseek-ai/dsh-scope": runtime,
|
|
1208
|
+
"@deepseek-ai/dsh-session": runtime,
|
|
1209
|
+
"@deepseek-ai/dsh-system-prompt": runtime,
|
|
1210
|
+
"@deepseek-ai/dsh-user-approval": runtime,
|
|
1211
|
+
"@deepseek-ai/dsh-attachment": runtime,
|
|
1212
|
+
"@deepseek-ai/dsh-compaction": runtime,
|
|
1213
|
+
"@deepseek-ai/dsh-fs": runtime,
|
|
1214
|
+
"@deepseek-ai/dsh-shell": runtime,
|
|
1215
|
+
"@deepseek-ai/dsh-spill": runtime,
|
|
1216
|
+
"@deepseek-ai/dsh-sandbox": runtime,
|
|
1217
|
+
"@deepseek-ai/dsh-ptc-runtime": runtime,
|
|
1218
|
+
"@deepseek-ai/dsh-llm-deepseek": runtime,
|
|
1219
|
+
"@deepseek-ai/dsh-deepseek-account": runtime,
|
|
1220
|
+
"@deepseek-ai/dsh-anonymous-user-id": runtime,
|
|
1221
|
+
"@deepseek-ai/dsh-bash-local": runtime,
|
|
1222
|
+
"@deepseek-ai/dsh-client-store": runtime,
|
|
1223
|
+
"@deepseek-ai/dsh-jobs": runtime,
|
|
1224
|
+
"@deepseek-ai/dsh-sdk-protocol": runtime,
|
|
1225
|
+
"@deepseek-ai/dsh-session-persistence": runtime,
|
|
1226
|
+
"@deepseek-ai/dsh-session-telemetry": runtime,
|
|
1227
|
+
"@deepseek-ai/dsh-session-title-llm": runtime,
|
|
1228
|
+
"@deepseek-ai/dsh-util-workspace-path": runtime,
|
|
1229
|
+
"@deepseek-ai/dsh-workflow": runtime,
|
|
1205
1230
|
...Object.fromEntries(baseBundles.filter((bundle) => bundle.startsWith("@deepseek-ai/dsh-")).map((bundle) => [bundle, runtime]))
|
|
1206
1231
|
};
|
|
1207
1232
|
const compositionPackages = composition === void 0 ? basePackages : {
|
|
1208
1233
|
...basePackages,
|
|
1209
1234
|
...composition.packages
|
|
1210
1235
|
};
|
|
1236
|
+
for (const [alias, target] of Object.entries({
|
|
1237
|
+
"dsh-better-sidebar": "@sparkelf/dsh-better-sidebar",
|
|
1238
|
+
"dsh-sql-workbench": "@sparkelf/dsh-sql-workbench"
|
|
1239
|
+
})) {
|
|
1240
|
+
const spec = compositionPackages[target];
|
|
1241
|
+
if (spec !== void 0 && compositionPackages[alias] === void 0) compositionPackages[alias] = "npm:" + target + "@" + spec;
|
|
1242
|
+
}
|
|
1211
1243
|
const compositionBundles = composition === void 0 ? baseBundles : [...baseBundles, ...composition.bundles];
|
|
1212
1244
|
if (existsSync(manifestPath)) {
|
|
1213
1245
|
if (composition !== void 0) {
|
|
@@ -1267,7 +1299,7 @@ function writeProfileOverrides(profileDirectory, overrides, allowBuilds, omitted
|
|
|
1267
1299
|
for (const [name, spec] of Object.entries(omittedPackages)) document.setIn(["overrides", name], spec);
|
|
1268
1300
|
for (const [name, allowed] of Object.entries(allowBuilds)) document.setIn(["allowBuilds", name], allowed);
|
|
1269
1301
|
if (document.get("nodeLinker") === void 0) document.set("nodeLinker", "hoisted");
|
|
1270
|
-
if (document.get("autoInstallPeers") === void 0) document.set("autoInstallPeers",
|
|
1302
|
+
if (document.get("autoInstallPeers") === void 0) document.set("autoInstallPeers", true);
|
|
1271
1303
|
writeFileSync(workspacePath, String(document));
|
|
1272
1304
|
}
|
|
1273
1305
|
/** Run git in one directory, returning undefined instead of throwing when asked to. */
|
|
@@ -510,6 +510,36 @@ export function ensureProfile(paths, consumerDirectory, edition) {
|
|
|
510
510
|
'@deepseek-ai/cordis-plugin-loader': '^1.0.7-alpha.1',
|
|
511
511
|
'@deepseek-ai/dsh-home-paths': runtime,
|
|
512
512
|
'@deepseek-ai/dsh-launch-environment': runtime,
|
|
513
|
+
// `dsh-session` / `dsh-tools` declare the rest of the runtime as peers; pnpm leaves
|
|
514
|
+
// them out of a profile install for the same reason as the launcher peers above.
|
|
515
|
+
'@deepseek-ai/dsh-agent': runtime,
|
|
516
|
+
'@deepseek-ai/dsh-llm': runtime,
|
|
517
|
+
'@deepseek-ai/dsh-scope': runtime,
|
|
518
|
+
'@deepseek-ai/dsh-session': runtime,
|
|
519
|
+
'@deepseek-ai/dsh-system-prompt': runtime,
|
|
520
|
+
'@deepseek-ai/dsh-user-approval': runtime,
|
|
521
|
+
// Capability packages that the official plugins import but declare only as peers.
|
|
522
|
+
// A profile install leaves them out and boot then fails inside an otherwise
|
|
523
|
+
// healthy plugin's import with ERR_MODULE_NOT_FOUND.
|
|
524
|
+
'@deepseek-ai/dsh-attachment': runtime,
|
|
525
|
+
'@deepseek-ai/dsh-compaction': runtime,
|
|
526
|
+
'@deepseek-ai/dsh-fs': runtime,
|
|
527
|
+
'@deepseek-ai/dsh-shell': runtime,
|
|
528
|
+
'@deepseek-ai/dsh-spill': runtime,
|
|
529
|
+
'@deepseek-ai/dsh-sandbox': runtime,
|
|
530
|
+
'@deepseek-ai/dsh-ptc-runtime': runtime,
|
|
531
|
+
'@deepseek-ai/dsh-llm-deepseek': runtime,
|
|
532
|
+
'@deepseek-ai/dsh-deepseek-account': runtime,
|
|
533
|
+
'@deepseek-ai/dsh-anonymous-user-id': runtime,
|
|
534
|
+
'@deepseek-ai/dsh-bash-local': runtime,
|
|
535
|
+
'@deepseek-ai/dsh-client-store': runtime,
|
|
536
|
+
'@deepseek-ai/dsh-jobs': runtime,
|
|
537
|
+
'@deepseek-ai/dsh-sdk-protocol': runtime,
|
|
538
|
+
'@deepseek-ai/dsh-session-persistence': runtime,
|
|
539
|
+
'@deepseek-ai/dsh-session-telemetry': runtime,
|
|
540
|
+
'@deepseek-ai/dsh-session-title-llm': runtime,
|
|
541
|
+
'@deepseek-ai/dsh-util-workspace-path': runtime,
|
|
542
|
+
'@deepseek-ai/dsh-workflow': runtime,
|
|
513
543
|
...Object.fromEntries(baseBundles
|
|
514
544
|
.filter(bundle => bundle.startsWith('@deepseek-ai/dsh-'))
|
|
515
545
|
.map(bundle => [bundle, runtime])),
|
|
@@ -517,6 +547,19 @@ export function ensureProfile(paths, consumerDirectory, edition) {
|
|
|
517
547
|
const compositionPackages = composition === undefined
|
|
518
548
|
? basePackages
|
|
519
549
|
: { ...basePackages, ...composition.packages };
|
|
550
|
+
// Official cordis rows name the historical unscoped packages. The fork ships under
|
|
551
|
+
// `@sparkelf/*`, so the row would fail to resolve unless the profile also carries the
|
|
552
|
+
// historical name as an alias to the same version.
|
|
553
|
+
const rowAliases = {
|
|
554
|
+
'dsh-better-sidebar': '@sparkelf/dsh-better-sidebar',
|
|
555
|
+
'dsh-sql-workbench': '@sparkelf/dsh-sql-workbench',
|
|
556
|
+
};
|
|
557
|
+
for (const [alias, target] of Object.entries(rowAliases)) {
|
|
558
|
+
const spec = compositionPackages[target];
|
|
559
|
+
if (spec !== undefined && compositionPackages[alias] === undefined) {
|
|
560
|
+
compositionPackages[alias] = 'npm:' + target + '@' + spec;
|
|
561
|
+
}
|
|
562
|
+
}
|
|
520
563
|
const compositionBundles = composition === undefined
|
|
521
564
|
? baseBundles
|
|
522
565
|
: [...baseBundles, ...composition.bundles];
|
|
@@ -599,7 +642,7 @@ function writeProfileOverrides(profileDirectory, overrides, allowBuilds, omitted
|
|
|
599
642
|
if (document.get('nodeLinker') === undefined)
|
|
600
643
|
document.set('nodeLinker', 'hoisted');
|
|
601
644
|
if (document.get('autoInstallPeers') === undefined)
|
|
602
|
-
document.set('autoInstallPeers',
|
|
645
|
+
document.set('autoInstallPeers', true);
|
|
603
646
|
writeFileSync(workspacePath, String(document));
|
|
604
647
|
}
|
|
605
648
|
/** Run git in one directory, returning undefined instead of throwing when asked to. */
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sparkelf/dsh-plus",
|
|
3
3
|
"description": "DeepSeek Harness Plus official-base Web distribution profile and ranged compatibility patchset",
|
|
4
|
-
"version": "0.2.2-alpha.2.
|
|
4
|
+
"version": "0.2.2-alpha.2.41",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -65,27 +65,41 @@
|
|
|
65
65
|
"@sparkelf/dsh-api-client",
|
|
66
66
|
"dsh-right-bg-anim",
|
|
67
67
|
"@sparkelf/dsh-mobile-bridge",
|
|
68
|
-
"@sparkelf/dsh-quant"
|
|
69
|
-
"@sparkelf/dsh-client-ui-diagram-viewer"
|
|
68
|
+
"@sparkelf/dsh-quant"
|
|
70
69
|
],
|
|
71
70
|
"dependencies": {
|
|
72
71
|
"@sparkelf/dsh-mineru": "0.1.4",
|
|
73
72
|
"@sparkelf/dsh-officecli": "0.1.4",
|
|
74
73
|
"@sparkelf/dsh-plugin-supervisor": "0.1.9",
|
|
75
|
-
"dsh-sql-workbench": "0.5.
|
|
74
|
+
"dsh-sql-workbench": "npm:@sparkelf/dsh-sql-workbench@0.5.4-sparkelf.1",
|
|
76
75
|
"@sparkelf/dsh-workbench-vault": "0.1.2",
|
|
77
|
-
"@sparkelf/dsh-ssh-manager": "0.7.
|
|
76
|
+
"@sparkelf/dsh-ssh-manager": "0.7.5",
|
|
78
77
|
"@sparkelf/dsh-api-client": "0.5.3",
|
|
79
|
-
"dsh-better-sidebar": "0.
|
|
80
|
-
"@sparkelf/dsh-office-viewer-fonts": "0.1.
|
|
78
|
+
"dsh-better-sidebar": "npm:@sparkelf/dsh-better-sidebar@0.29.0-sparkelf.17",
|
|
79
|
+
"@sparkelf/dsh-office-viewer-fonts": "0.1.6",
|
|
81
80
|
"dsh-video-preview": "0.1.4",
|
|
82
81
|
"dsh-right-bg-anim": "1.1.0",
|
|
83
|
-
"@deepseek-ai/dsh-experimental-agent-team-profile": "
|
|
82
|
+
"@deepseek-ai/dsh-experimental-agent-team-profile": "0.2.2-alpha.2",
|
|
84
83
|
"@sparkelf/dsh-mobile-bridge": "0.2.18",
|
|
85
84
|
"@sparkelf/dsh-quant": "0.91.0-sparkelf.13",
|
|
85
|
+
"@sparkelf/dsh-task-bus": "0.1.4",
|
|
86
86
|
"@deepseek-ai/dsh-experimental-auto-review": "0.2.2-alpha.2",
|
|
87
|
-
"@sparkelf/dsh-genui": "0.
|
|
88
|
-
"@
|
|
87
|
+
"@sparkelf/dsh-genui": "0.15.0-sparkelf.1",
|
|
88
|
+
"@deepseek-ai/dsh-anonymous-user-id": "0.2.2-alpha.2",
|
|
89
|
+
"@deepseek-ai/dsh-attachment": "0.2.2-alpha.2",
|
|
90
|
+
"@deepseek-ai/dsh-compaction": "0.2.2-alpha.2",
|
|
91
|
+
"@deepseek-ai/dsh-deepseek-account": "0.2.2-alpha.2",
|
|
92
|
+
"@deepseek-ai/dsh-fs": "0.2.2-alpha.2",
|
|
93
|
+
"@deepseek-ai/dsh-jobs": "0.2.2-alpha.2",
|
|
94
|
+
"@deepseek-ai/dsh-llm-deepseek": "0.2.2-alpha.2",
|
|
95
|
+
"@deepseek-ai/dsh-ptc-runtime": "0.2.2-alpha.2",
|
|
96
|
+
"@deepseek-ai/dsh-sandbox": "0.2.2-alpha.2",
|
|
97
|
+
"@deepseek-ai/dsh-session-persistence": "0.2.2-alpha.2",
|
|
98
|
+
"@deepseek-ai/dsh-session-telemetry": "0.2.2-alpha.2",
|
|
99
|
+
"@deepseek-ai/dsh-session-title-llm": "0.2.2-alpha.2",
|
|
100
|
+
"@deepseek-ai/dsh-shell": "0.2.2-alpha.2",
|
|
101
|
+
"@deepseek-ai/dsh-spill": "0.2.2-alpha.2",
|
|
102
|
+
"@deepseek-ai/dsh-workflow": "0.2.2-alpha.2"
|
|
89
103
|
},
|
|
90
104
|
"allowBuilds": {
|
|
91
105
|
"@deepseek-ai/dsh-subprocess-local": true,
|
|
@@ -132,7 +146,8 @@
|
|
|
132
146
|
"@deepseek-ai/dsh-client-ui-schedule": "npm:@sparkelf/dsh-client-ui-schedule@0.2.2-alpha.2",
|
|
133
147
|
"@deepseek-ai/dsh-client-ui-sidebar-right": "npm:@sparkelf/dsh-client-ui-sidebar-right@0.2.2-alpha.2",
|
|
134
148
|
"@deepseek-ai/dsh-atomic-write": "npm:@sparkelf/dsh-atomic-write@0.2.2-alpha.2",
|
|
135
|
-
"@deepseek-ai/dsh-tool-executor-ptc": "npm:@sparkelf/dsh-tool-executor-ptc@0.2.2-alpha.2"
|
|
149
|
+
"@deepseek-ai/dsh-tool-executor-ptc": "npm:@sparkelf/dsh-tool-executor-ptc@0.2.2-alpha.2",
|
|
150
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.2.2-alpha.2"
|
|
136
151
|
},
|
|
137
152
|
"standaloneVariants": {
|
|
138
153
|
"dataops": {
|
|
@@ -499,6 +514,21 @@
|
|
|
499
514
|
"file": "./patches/ui-settings-compact-phone.patch",
|
|
500
515
|
"retireWhen": "官方 ui-settings-general 为窄屏提供手机布局后退役"
|
|
501
516
|
},
|
|
517
|
+
{
|
|
518
|
+
"id": "ui-schedule-plaza-tab",
|
|
519
|
+
"dsh": ">=0.2.2-alpha.2",
|
|
520
|
+
"target": {
|
|
521
|
+
"kind": "dsh-source",
|
|
522
|
+
"paths": [
|
|
523
|
+
"packages/client/ui-schedule/"
|
|
524
|
+
],
|
|
525
|
+
"packages": [
|
|
526
|
+
"@deepseek-ai/dsh-client-ui-schedule"
|
|
527
|
+
]
|
|
528
|
+
},
|
|
529
|
+
"file": "./patches/ui-schedule-plaza-tab.patch",
|
|
530
|
+
"retireWhen": "官方 ui-schedule 自动化任务页自行声明并渲染 schedule.manager.tabs 座位后退役"
|
|
531
|
+
},
|
|
502
532
|
{
|
|
503
533
|
"id": "web-runtime-compat",
|
|
504
534
|
"dsh": ">=0.2.2-alpha.2",
|
|
@@ -545,6 +575,38 @@
|
|
|
545
575
|
},
|
|
546
576
|
"file": "./patches/wsl-native-open.patch",
|
|
547
577
|
"retireWhen": "官方 open-in-app 为 Windows 解释器翻译 POSIX 路径后退役"
|
|
578
|
+
},
|
|
579
|
+
{
|
|
580
|
+
"id": "ui-sidebar-right-global-panel",
|
|
581
|
+
"dsh": ">=0.2.2-alpha.2",
|
|
582
|
+
"target": {
|
|
583
|
+
"kind": "dsh-source",
|
|
584
|
+
"paths": [
|
|
585
|
+
"packages/client/ui-sidebar-right/"
|
|
586
|
+
],
|
|
587
|
+
"packages": [
|
|
588
|
+
"@deepseek-ai/dsh-client-ui-sidebar-right"
|
|
589
|
+
]
|
|
590
|
+
},
|
|
591
|
+
"file": "./patches/ui-sidebar-right-global-panel.patch",
|
|
592
|
+
"retireWhen": "官方 ui-sidebar-right 的 RightbarRoot 在 global panel(activePanelId !== null)下渲染 rightbar.session 后退役"
|
|
593
|
+
},
|
|
594
|
+
{
|
|
595
|
+
"id": "dsh-resource-ref-chip",
|
|
596
|
+
"dsh": ">=0.2.2-alpha.2",
|
|
597
|
+
"target": {
|
|
598
|
+
"kind": "dsh-source",
|
|
599
|
+
"paths": [
|
|
600
|
+
"packages/client/ui-primitives/",
|
|
601
|
+
"packages/client/ui-conversation/"
|
|
602
|
+
],
|
|
603
|
+
"packages": [
|
|
604
|
+
"@deepseek-ai/dsh-client-ui-primitives",
|
|
605
|
+
"@deepseek-ai/dsh-client-ui-conversation"
|
|
606
|
+
]
|
|
607
|
+
},
|
|
608
|
+
"file": "./patches/dsh-resource-ref-chip.patch",
|
|
609
|
+
"retireWhen": "官方 primitives 的 ReferenceIconKind 增加 resource 类型后退役"
|
|
548
610
|
}
|
|
549
611
|
]
|
|
550
612
|
},
|
|
@@ -566,8 +628,7 @@
|
|
|
566
628
|
"@sparkelf/dsh-api-client",
|
|
567
629
|
"dsh-right-bg-anim",
|
|
568
630
|
"@sparkelf/dsh-mobile-bridge",
|
|
569
|
-
"@sparkelf/dsh-quant"
|
|
570
|
-
"@sparkelf/dsh-client-ui-diagram-viewer"
|
|
631
|
+
"@sparkelf/dsh-quant"
|
|
571
632
|
],
|
|
572
633
|
"packages": {
|
|
573
634
|
"@sparkelf/dsh-mineru": "0.1.4",
|
|
@@ -582,7 +643,6 @@
|
|
|
582
643
|
"@sparkelf/dsh-mobile-bridge": "0.2.18",
|
|
583
644
|
"@sparkelf/dsh-quant": "0.91.0-sparkelf.13",
|
|
584
645
|
"@sparkelf/dsh-genui": "0.15.0-sparkelf.1",
|
|
585
|
-
"@sparkelf/dsh-client-ui-diagram-viewer": "0.2.1-alpha.28",
|
|
586
646
|
"@sparkelf/dsh-sql-workbench": "0.5.4-sparkelf.1",
|
|
587
647
|
"@sparkelf/dsh-better-sidebar": "0.29.0-sparkelf.2"
|
|
588
648
|
}
|
|
@@ -592,7 +652,6 @@
|
|
|
592
652
|
"bundles": [
|
|
593
653
|
"@sparkelf/dsh-mineru",
|
|
594
654
|
"@sparkelf/dsh-officecli",
|
|
595
|
-
"dshmarket",
|
|
596
655
|
"@sparkelf/dsh-office-viewer-fonts",
|
|
597
656
|
"@sparkelf/dsh-genui",
|
|
598
657
|
"@sparkelf/dsh-plugin-supervisor",
|
|
@@ -600,7 +659,6 @@
|
|
|
600
659
|
"@sparkelf/dsh-ssh-manager",
|
|
601
660
|
"@sparkelf/dsh-api-client",
|
|
602
661
|
"dsh-right-bg-anim",
|
|
603
|
-
"@sparkelf/dsh-client-ui-diagram-viewer",
|
|
604
662
|
"@sparkelf/dsh-dataops-managed",
|
|
605
663
|
"@sparkelf/dsh-query-result-analysis",
|
|
606
664
|
"@sparkelf/dsh-better-sidebar",
|
|
@@ -610,14 +668,14 @@
|
|
|
610
668
|
"@sparkelf/dsh-ocr",
|
|
611
669
|
"@sparkelf/dsh-dataops-account",
|
|
612
670
|
"@sparkelf/dsh-kb-citation",
|
|
613
|
-
"@sparkelf/dsh-task-bus"
|
|
671
|
+
"@sparkelf/dsh-task-bus",
|
|
672
|
+
"dsh-video-preview"
|
|
614
673
|
],
|
|
615
674
|
"packages": {
|
|
616
675
|
"@sparkelf/dsh-api-client": "0.5.3",
|
|
617
|
-
"@sparkelf/dsh-
|
|
618
|
-
"@sparkelf/dsh-dataops-managed": "0.3.21",
|
|
676
|
+
"@sparkelf/dsh-dataops-managed": "0.3.29",
|
|
619
677
|
"@sparkelf/dsh-genui": "0.15.0-sparkelf.1",
|
|
620
|
-
"@sparkelf/dsh-knowledge-base": "0.1.
|
|
678
|
+
"@sparkelf/dsh-knowledge-base": "0.1.27",
|
|
621
679
|
"@sparkelf/dsh-mineru": "0.1.4",
|
|
622
680
|
"@sparkelf/dsh-office-viewer-fonts": "0.1.6",
|
|
623
681
|
"@sparkelf/dsh-officecli": "0.1.4",
|
|
@@ -625,16 +683,17 @@
|
|
|
625
683
|
"@sparkelf/dsh-ssh-manager": "0.7.5",
|
|
626
684
|
"@sparkelf/dsh-workbench-vault": "0.1.2",
|
|
627
685
|
"dsh-right-bg-anim": "1.1.0",
|
|
628
|
-
"@sparkelf/dsh-task-bus": "0.1.
|
|
629
|
-
"@sparkelf/dsh-credential-manager": "0.1.
|
|
686
|
+
"@sparkelf/dsh-task-bus": "0.1.4",
|
|
687
|
+
"@sparkelf/dsh-credential-manager": "0.1.3",
|
|
630
688
|
"@sparkelf/dsh-dataops-account": "0.2.0",
|
|
631
689
|
"@sparkelf/dsh-group-chat": "0.5.1",
|
|
632
690
|
"@sparkelf/dsh-kb-citation": "0.1.3",
|
|
633
691
|
"@sparkelf/dsh-ocr": "0.1.0",
|
|
634
692
|
"@sparkelf/dsh-query-result-analysis": "0.1.4",
|
|
635
|
-
"@sparkelf/dsh-better-sidebar": "0.29.0-sparkelf.
|
|
693
|
+
"@sparkelf/dsh-better-sidebar": "0.29.0-sparkelf.17",
|
|
636
694
|
"dsh-video-preview": "0.1.4",
|
|
637
|
-
"@sparkelf/dsh-sql-workbench": "0.5.4-sparkelf.1"
|
|
695
|
+
"@sparkelf/dsh-sql-workbench": "0.5.4-sparkelf.1",
|
|
696
|
+
"@sparkelf/dsh-client-ui-skill-center": "0.2.2-alpha.2.5"
|
|
638
697
|
}
|
|
639
698
|
}
|
|
640
699
|
}
|
|
@@ -644,7 +703,7 @@
|
|
|
644
703
|
"@deepseek-ai/dsh-experimental-computer-use-cua-driver-mcp": ">=0.2.2-alpha.2",
|
|
645
704
|
"@deepseek-ai/dsh-tool-session-query": ">=0.2.2-alpha.2",
|
|
646
705
|
"@deepseek-ai/dsh-web-search-exa": ">=0.1.6-alpha.1",
|
|
647
|
-
"@sparkelf/dsh-client-ui-skill-center": "
|
|
706
|
+
"@sparkelf/dsh-client-ui-skill-center": "0.2.2-alpha.2.5",
|
|
648
707
|
"@sparkelf/dsh-image-hoist": ">=0.1.3",
|
|
649
708
|
"@sparkelf/dsh-plugin-backup": ">=0.2.1-alpha.1",
|
|
650
709
|
"@sparkelf/dsh-plugin-mcp-credentials": ">=0.2.1-alpha.1",
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
diff --git a/packages/client/ui-conversation/src/client/contract/draft-editor.ts b/packages/client/ui-conversation/src/client/contract/draft-editor.ts
|
|
2
|
+
index b305bb3a3c..0aee9f6be2 100644
|
|
3
|
+
--- a/packages/client/ui-conversation/src/client/contract/draft-editor.ts
|
|
4
|
+
+++ b/packages/client/ui-conversation/src/client/contract/draft-editor.ts
|
|
5
|
+
@@ -15,7 +15,7 @@ export interface ReferenceInsert {
|
|
6
|
+
readonly source: string
|
|
7
|
+
readonly ref: string
|
|
8
|
+
readonly label: string
|
|
9
|
+
- readonly appearance?: 'session' | 'file' | 'folder'
|
|
10
|
+
+ readonly appearance?: 'session' | 'file' | 'folder' | 'resource'
|
|
11
|
+
readonly clipboardText: string
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
diff --git a/packages/client/ui-primitives/src/ReferenceIcon.tsx b/packages/client/ui-primitives/src/ReferenceIcon.tsx
|
|
15
|
+
index ca566c40f6..198e6bbb1d 100644
|
|
16
|
+
--- a/packages/client/ui-primitives/src/ReferenceIcon.tsx
|
|
17
|
+
+++ b/packages/client/ui-primitives/src/ReferenceIcon.tsx
|
|
18
|
+
@@ -6,7 +6,7 @@ import {
|
|
19
|
+
} from './icons/shared-artwork.tsx'
|
|
20
|
+
|
|
21
|
+
/** Reference domains with distinct composer and transcript glyphs. */
|
|
22
|
+
-export type ReferenceIconKind = 'session' | 'file' | 'folder'
|
|
23
|
+
+export type ReferenceIconKind = 'session' | 'file' | 'folder' | 'resource'
|
|
24
|
+
|
|
25
|
+
/** Props shared by inline reference glyphs. */
|
|
26
|
+
export interface ReferenceIconProps extends IconProps {
|
|
27
|
+
@@ -27,6 +27,13 @@ function ReferenceIconArtwork({ kind, size = 16, className, strokeWidth }: Weigh
|
|
28
|
+
case 'session': return <ChatLinesOutlineArtwork size={size} className={className} strokeWidth={strokeWidth} />
|
|
29
|
+
case 'file': return <BrowseOutlineArtwork size={size} className={className} strokeWidth={strokeWidth} />
|
|
30
|
+
case 'folder': return <FolderCloseArtwork size={size} className={className} strokeWidth={strokeWidth} />
|
|
31
|
+
+ case 'resource': return (
|
|
32
|
+
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" className={className} aria-hidden>
|
|
33
|
+
+ <path d="M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z" />
|
|
34
|
+
+ <path d="m3.3 7 8.7 5 8.7-5" />
|
|
35
|
+
+ <path d="M12 22V12" />
|
|
36
|
+
+ </svg>
|
|
37
|
+
+ )
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
diff --git a/packages/client/ui-schedule/src/client/TaskManagerPage.module.css b/packages/client/ui-schedule/src/client/TaskManagerPage.module.css
|
|
2
|
+
index 7c4acf5a3d..ea9d29e2e3 100644
|
|
3
|
+
--- a/packages/client/ui-schedule/src/client/TaskManagerPage.module.css
|
|
4
|
+
+++ b/packages/client/ui-schedule/src/client/TaskManagerPage.module.css
|
|
5
|
+
@@ -149,6 +149,12 @@
|
|
6
|
+
neutral hairline, the 10px radius, and the mock's `--muted` leading icon. The
|
|
7
|
+
mock brightens the border on hover and takes the brand stroke on focus
|
|
8
|
+
rather than drawing a ring around the control. */
|
|
9
|
+
+/* The runtime extension tab keeps the page's centered column, so a contributor
|
|
10
|
+
+ body lines up with the search field and the task rows. */
|
|
11
|
+
+.plazaBody {
|
|
12
|
+
+ min-width: 0;
|
|
13
|
+
+}
|
|
14
|
+
+
|
|
15
|
+
.searchTools {
|
|
16
|
+
--task-search-height: 36px;
|
|
17
|
+
display: flex;
|
|
18
|
+
diff --git a/packages/client/ui-schedule/src/client/TaskManagerPage.tsx b/packages/client/ui-schedule/src/client/TaskManagerPage.tsx
|
|
19
|
+
index 3c330c9f26..f7e7b78312 100644
|
|
20
|
+
--- a/packages/client/ui-schedule/src/client/TaskManagerPage.tsx
|
|
21
|
+
+++ b/packages/client/ui-schedule/src/client/TaskManagerPage.tsx
|
|
22
|
+
@@ -5,7 +5,7 @@ import {
|
|
23
|
+
Button, IconClockOutlineRegular, IconCloseOutlineRegular, IconEllipsisOutlineRegular, IconPlusOutlineRegular,
|
|
24
|
+
IconSearchOutlineRegular, IconTrashOutlineRegular, Input, Menu, Modal, Tooltip,
|
|
25
|
+
} from '@deepseek-ai/dsh-client-ui-primitives'
|
|
26
|
+
-import type { HostObservable, InjectFace, PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots'
|
|
27
|
+
+import type { HostObservable, InjectFace, PropsLocale, PropsRenderSlots, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots'
|
|
28
|
+
import type {} from '@deepseek-ai/dsh-client-ui-layout/client'
|
|
29
|
+
import type { ScheduleCatalogEntry, ScheduleId } from '@deepseek-ai/dsh-schedule/client'
|
|
30
|
+
import type { CatalogSnapshot } from './catalog-source.ts'
|
|
31
|
+
@@ -36,14 +36,26 @@ export interface TaskManagerInjected extends TaskDetailInjected {
|
|
32
|
+
* @returns resolution after the outcome is reported.
|
|
33
|
+
*/
|
|
34
|
+
readonly onClearEnded: () => Promise<void>
|
|
35
|
+
+ /**
|
|
36
|
+
+ * Whether a plugin currently contributes the page's runtime extension tab.
|
|
37
|
+
+ *
|
|
38
|
+
+ * The page reads this while rendering, so a contributor that registers after
|
|
39
|
+
+ * the page mounted still makes its tab appear on the next render; with no
|
|
40
|
+
+ * contributor the page keeps exactly its three status tabs.
|
|
41
|
+
+ * @returns true when the `schedule.manager.tabs` seat has an occupant.
|
|
42
|
+
+ */
|
|
43
|
+
+ readonly plazaAvailable?: () => boolean
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** Root-scoped task catalog props derived from the framework and injected actions. */
|
|
47
|
+
export type TaskManagerPageProps = PropsRuntime<'main'>
|
|
48
|
+
& InjectFace<TaskManagerInjected>
|
|
49
|
+
& PropsLocale<'schedule.manager'>
|
|
50
|
+
+ // Narrowed to the one seat this page declares; optional so a unit test can
|
|
51
|
+
+ // render the page without a slot host, as every other page-level test does.
|
|
52
|
+
+ & Partial<PropsRenderSlots<'schedule.manager.tabs'>>
|
|
53
|
+
|
|
54
|
+
-type StatusFilter = 'all' | ScheduleCatalogEntry['status']
|
|
55
|
+
+type StatusFilter = 'all' | ScheduleCatalogEntry['status'] | 'plaza'
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Render retained tasks with authoritative deletion and timing-only edits.
|
|
59
|
+
@@ -51,7 +63,7 @@ type StatusFilter = 'all' | ScheduleCatalogEntry['status']
|
|
60
|
+
* @returns the searchable task list beside the selected task's detail.
|
|
61
|
+
*/
|
|
62
|
+
export function TaskManagerPage(props: TaskManagerPageProps) {
|
|
63
|
+
- const { useCatalog, onNewTask, onClearEnded, onRetry, t } = props
|
|
64
|
+
+ const { useCatalog, onNewTask, onClearEnded, onRetry, plazaAvailable, renderSlot, t } = props
|
|
65
|
+
const catalog = useCatalog(snapshot => snapshot)
|
|
66
|
+
const { records, status } = catalog
|
|
67
|
+
const [search, setSearch] = useState('')
|
|
68
|
+
@@ -85,7 +97,7 @@ export function TaskManagerPage(props: TaskManagerPageProps) {
|
|
69
|
+
const rows = useMemo(() => {
|
|
70
|
+
const query = search.trim().toLowerCase()
|
|
71
|
+
return records.filter(record => (
|
|
72
|
+
- (statusFilter === 'all' || record.status === statusFilter)
|
|
73
|
+
+ (statusFilter === 'all' || (statusFilter !== 'plaza' && record.status === statusFilter))
|
|
74
|
+
&& (record.prompt.toLowerCase().includes(query)
|
|
75
|
+
|| record.sessionId.toLowerCase().includes(query)
|
|
76
|
+
|| taskName(record).toLowerCase().includes(query))
|
|
77
|
+
@@ -202,8 +214,24 @@ export function TaskManagerPage(props: TaskManagerPageProps) {
|
|
78
|
+
{t(value === 'all' ? 'statusFilter.all' : `status.${value}`)}
|
|
79
|
+
</button>
|
|
80
|
+
))}
|
|
81
|
+
+ {plazaAvailable?.() === true && (
|
|
82
|
+
+ <button
|
|
83
|
+
+ type="button"
|
|
84
|
+
+ className={clsx(css.filterTab, statusFilter === 'plaza' && css.filterTabActive)}
|
|
85
|
+
+ aria-pressed={statusFilter === 'plaza'}
|
|
86
|
+
+ data-testid="task-manager-plaza-tab"
|
|
87
|
+
+ onClick={() => { setStatusFilter('plaza') }}
|
|
88
|
+
+ >
|
|
89
|
+
+ {t('statusFilter.plaza')}
|
|
90
|
+
+ </button>
|
|
91
|
+
+ )}
|
|
92
|
+
</div>
|
|
93
|
+
</div>
|
|
94
|
+
+ {statusFilter === 'plaza' ? (
|
|
95
|
+
+ <div className={css.plazaBody} data-testid="task-manager-plaza-body">
|
|
96
|
+
+ {renderSlot?.('schedule.manager.tabs', {})}
|
|
97
|
+
+ </div>
|
|
98
|
+
+ ) : (<>
|
|
99
|
+
<div className={css.searchTools}>
|
|
100
|
+
<div className={css.searchField}>
|
|
101
|
+
<Input
|
|
102
|
+
@@ -299,6 +327,7 @@ export function TaskManagerPage(props: TaskManagerPageProps) {
|
|
103
|
+
})}
|
|
104
|
+
</ul>
|
|
105
|
+
</div>
|
|
106
|
+
+ </>)}
|
|
107
|
+
</div>
|
|
108
|
+
</div>
|
|
109
|
+
</div>
|
|
110
|
+
diff --git a/packages/client/ui-schedule/src/client/index.ts b/packages/client/ui-schedule/src/client/index.ts
|
|
111
|
+
index 7dcbc32ee3..cd072150e7 100644
|
|
112
|
+
--- a/packages/client/ui-schedule/src/client/index.ts
|
|
113
|
+
+++ b/packages/client/ui-schedule/src/client/index.ts
|
|
114
|
+
@@ -73,6 +73,21 @@ declare module '@deepseek-ai/dsh-client-ui-slots' {
|
|
115
|
+
/** Host task management page and task tab copy. */
|
|
116
|
+
'schedule.manager': TaskManagerKey
|
|
117
|
+
}
|
|
118
|
+
+ interface SlotMap {
|
|
119
|
+
+ /**
|
|
120
|
+
+ * One extension body contributed at runtime to the automation-task page.
|
|
121
|
+
+ *
|
|
122
|
+
+ * The page renders the single occupant as an additional status tab and
|
|
123
|
+
+ * supplies no owner props: a contributor owns its own data and needs no
|
|
124
|
+
+ * identity from the page. The seat belongs to no Session, so opening the
|
|
125
|
+
+ * page never mounts a contributor against an arbitrary conversation.
|
|
126
|
+
+ */
|
|
127
|
+
+ 'schedule.manager.tabs': {
|
|
128
|
+
+ kind: 'single'
|
|
129
|
+
+ scope: 'root'
|
|
130
|
+
+ owner: Record<string, never>
|
|
131
|
+
+ }
|
|
132
|
+
+ }
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/** Required services for catalogs, ambient Session marks, the right Sidebar, Remote queries, original-Session navigation, and access. */
|
|
136
|
+
@@ -197,8 +212,13 @@ export function apply(ctx: ClientContext): void {
|
|
137
|
+
name: 'main',
|
|
138
|
+
key: PANEL_ID,
|
|
139
|
+
locale: MANAGER_NS,
|
|
140
|
+
+ // The automation page is the one first-level page that accepts a runtime
|
|
141
|
+
+ // extension tab. Declaring the seat here is what lets a plugin contribute
|
|
142
|
+
+ // a tab body without this package importing that plugin.
|
|
143
|
+
+ children: { 'schedule.manager.tabs': { kind: 'single', scope: 'root' } },
|
|
144
|
+
inject: (): TaskManagerInjected => ({
|
|
145
|
+
...detail,
|
|
146
|
+
+ plazaAvailable: () => ctx.slots.entriesOfSlot('schedule.manager.tabs').length > 0,
|
|
147
|
+
// The page has no creation form: a new reminder starts in a Session.
|
|
148
|
+
onNewTask: () => { ctx.uiWorkspace.startSession() },
|
|
149
|
+
onClearEnded: async () => {
|
|
150
|
+
diff --git a/packages/client/ui-schedule/src/client/task-manager-locales.ts b/packages/client/ui-schedule/src/client/task-manager-locales.ts
|
|
151
|
+
index fffde14568..145b05a825 100644
|
|
152
|
+
--- a/packages/client/ui-schedule/src/client/task-manager-locales.ts
|
|
153
|
+
+++ b/packages/client/ui-schedule/src/client/task-manager-locales.ts
|
|
154
|
+
@@ -20,6 +20,7 @@ export const en = {
|
|
155
|
+
'empty.action': 'New automation task',
|
|
156
|
+
'statusFilter.label': 'Task status',
|
|
157
|
+
'statusFilter.all': 'All',
|
|
158
|
+
+ 'statusFilter.plaza': 'Workflow plaza',
|
|
159
|
+
'status.active': 'Enabled',
|
|
160
|
+
'status.inactive': 'Inactive',
|
|
161
|
+
'detail.label': 'Task details',
|
|
162
|
+
@@ -176,6 +177,7 @@ export const zh: Record<TaskManagerKey, string> = {
|
|
163
|
+
'empty.action': '新建自动化任务',
|
|
164
|
+
'statusFilter.label': '任务状态',
|
|
165
|
+
'statusFilter.all': '全部',
|
|
166
|
+
+ 'statusFilter.plaza': '工作流广场',
|
|
167
|
+
'status.active': '已开启',
|
|
168
|
+
'status.inactive': '已结束',
|
|
169
|
+
'detail.label': '任务详情',
|
|
170
|
+
@@ -327,6 +329,7 @@ export const ja = {
|
|
171
|
+
'empty.action': '新規自動化タスク',
|
|
172
|
+
'statusFilter.label': 'タスクの状態',
|
|
173
|
+
'statusFilter.all': 'すべて',
|
|
174
|
+
+ 'statusFilter.plaza': 'ワークフロープラザ',
|
|
175
|
+
'status.active': '有効',
|
|
176
|
+
'status.inactive': '無効',
|
|
177
|
+
'detail.label': 'タスクの詳細',
|
|
178
|
+
@@ -476,6 +479,7 @@ export const es = {
|
|
179
|
+
'empty.action': 'Nueva tarea de automatización',
|
|
180
|
+
'statusFilter.label': 'Estado de la tarea',
|
|
181
|
+
'statusFilter.all': 'Todos',
|
|
182
|
+
+ 'statusFilter.plaza': 'Plaza de flujos',
|
|
183
|
+
'status.active': 'Habilitado',
|
|
184
|
+
'status.inactive': 'Inactivo',
|
|
185
|
+
'detail.label': 'Detalles de la tarea',
|
|
186
|
+
@@ -628,6 +632,7 @@ export const fr = {
|
|
187
|
+
'empty.action': "Nouvelle tâche d'automatisation",
|
|
188
|
+
'statusFilter.label': 'Statut de la tâche',
|
|
189
|
+
'statusFilter.all': 'Tout',
|
|
190
|
+
+ 'statusFilter.plaza': 'Place des workflows',
|
|
191
|
+
'status.active': 'Activé',
|
|
192
|
+
'status.inactive': 'Inactif',
|
|
193
|
+
'detail.label': 'Détails de la tâche',
|
|
194
|
+
@@ -780,6 +785,7 @@ export const de = {
|
|
195
|
+
'empty.action': 'Neue Automatisierungsaufgabe',
|
|
196
|
+
'statusFilter.label': 'Aufgabenstatus',
|
|
197
|
+
'statusFilter.all': 'Alle',
|
|
198
|
+
+ 'statusFilter.plaza': 'Workflow-Plaza',
|
|
199
|
+
'status.active': 'Aktiviert',
|
|
200
|
+
'status.inactive': 'Inaktiv',
|
|
201
|
+
'detail.label': 'Aufgabendetails',
|
|
202
|
+
@@ -932,6 +938,7 @@ export const ru = {
|
|
203
|
+
'empty.action': 'Новая задача автоматизации',
|
|
204
|
+
'statusFilter.label': 'Статус задачи',
|
|
205
|
+
'statusFilter.all': 'Все',
|
|
206
|
+
+ 'statusFilter.plaza': 'Витрина сценариев',
|
|
207
|
+
'status.active': 'Включено',
|
|
208
|
+
'status.inactive': 'Неактивный',
|
|
209
|
+
'detail.label': 'Подробности задачи',
|
|
210
|
+
@@ -1084,6 +1091,7 @@ export const pt = {
|
|
211
|
+
'empty.action': 'Nova tarefa de automação',
|
|
212
|
+
'statusFilter.label': 'Status da tarefa',
|
|
213
|
+
'statusFilter.all': 'Todos',
|
|
214
|
+
+ 'statusFilter.plaza': 'Praça de fluxos',
|
|
215
|
+
'status.active': 'Habilitado',
|
|
216
|
+
'status.inactive': 'Inativo',
|
|
217
|
+
'detail.label': 'Detalhes da tarefa',
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
diff --git a/packages/client/ui-sidebar-right/src/client/index.ts b/packages/client/ui-sidebar-right/src/client/index.ts
|
|
2
|
+
index 99b800b6c8..9b317464e1 100644
|
|
3
|
+
--- a/packages/client/ui-sidebar-right/src/client/index.ts
|
|
4
|
+
+++ b/packages/client/ui-sidebar-right/src/client/index.ts
|
|
5
|
+
@@ -138,7 +138,10 @@ export function apply(ctx: ClientContext): void {
|
|
6
|
+
ctx.effect(() => {
|
|
7
|
+
const sync = (): void => {
|
|
8
|
+
const selected = views.source.getSnapshot().find(view => view.selected)
|
|
9
|
+
- show(layout.panelInfo.getSnapshot().activePanelId === null ? selected?.sessionId : undefined)
|
|
10
|
+
+ // The right column stays addressable from a global main panel; the layout
|
|
11
|
+
+ // still decides the track's width, so a session tab is named whenever a
|
|
12
|
+
+ // Session is selected rather than only while the Conversation is focused.
|
|
13
|
+
+ show(selected?.sessionId)
|
|
14
|
+
}
|
|
15
|
+
const unsubscribeViews = views.source.subscribe(sync)
|
|
16
|
+
const unsubscribePanel = layout.panelInfo.subscribe(sync)
|
|
17
|
+
diff --git a/packages/client/ui-sidebar-right/src/client/shell/RightbarRoot.tsx b/packages/client/ui-sidebar-right/src/client/shell/RightbarRoot.tsx
|
|
18
|
+
index 26bedb1d18..bebc73706d 100644
|
|
19
|
+
--- a/packages/client/ui-sidebar-right/src/client/shell/RightbarRoot.tsx
|
|
20
|
+
+++ b/packages/client/ui-sidebar-right/src/client/shell/RightbarRoot.tsx
|
|
21
|
+
@@ -31,8 +31,12 @@ function SessionView({ view, visible, SessionProvider, renderSlot, mountView, wi
|
|
22
|
+
* @param props - frame geometry, view targets and the authorized Session renderer.
|
|
23
|
+
* @returns the foreground and retained background Sidebars.
|
|
24
|
+
*/
|
|
25
|
+
-export function RightbarRoot({ usePanelInfo, useViews, ...props }: RootProps) {
|
|
26
|
+
- const visible = usePanelInfo(info => info.activePanelId === null)
|
|
27
|
+
+export function RightbarRoot({ useViews, ...props }: RootProps) {
|
|
28
|
+
+ // A global main panel (the knowledge base) keeps the right column usable: the
|
|
29
|
+
+ // layout already owns whether the track takes width, so gating the Session
|
|
30
|
+
+ // content on `activePanelId === null` only made the column render empty there.
|
|
31
|
+
+ // Retained views still hide themselves through `view.selected`, so conversation
|
|
32
|
+
+ // behaviour is unchanged.
|
|
33
|
+
const views = useViews(value => value)
|
|
34
|
+
- return <>{views.map(view => <SessionView key={view.sessionId} {...props} view={view} visible={visible} />)}</>
|
|
35
|
+
+ return <>{views.map(view => <SessionView key={view.sessionId} {...props} view={view} visible />)}</>
|
|
36
|
+
}
|