@dsh-workbench/core 1.0.0-beta.1 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -16
- package/bin/dsh-workbench +59 -26
- package/client.js +227 -328
- package/dist/client/client.body.js +227 -328
- package/dist/client/index.js +227 -328
- package/dist/host/index.js +108 -74
- package/dist/types/app/layouts/rightbar/market-shared-rows.d.ts +0 -1
- package/dist/types/app/layouts/workbench-settings/ConfigSyncRows.d.ts +1 -3
- package/dist/types/kernel/contract/config-sync.d.ts +1 -1
- package/dist/types/modules/panels/model/diy-context.d.ts +14 -4
- package/dist/types/modules/panels/model/diy-report.d.ts +2 -0
- package/dist/types/modules/panels/model/diy-tools.d.ts +2 -1
- package/package.json +5 -3
- package/profile/sandbox.patch.yml +7 -5
- package/scripts/clone-profile.mjs +11 -199
- package/scripts/create-workbench.mjs +7 -20
- package/scripts/patch-blocks.mjs +60 -0
- package/scripts/seed-profile.sh +17 -28
- package/scripts/share-data-root.mjs +419 -0
- package/skills/workbench-module-diy/FAMILY.md +4 -6
- package/skills/workbench-module-diy/SKILL.md +4 -5
- package/skills/workbench-module-diy/WIRING.md +4 -13
- package/dist/types/shared/api/host/git.test.d.ts +0 -1
- package/profile/isolation.patch.yml +0 -46
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
| 装法 | 命令 | 得到什么 |
|
|
14
14
|
|---|---|---|
|
|
15
|
-
| 独立实例(推荐) | `npx @dsh-workbench/core create` | 自己的 profile、`:3081
|
|
15
|
+
| 独立实例(推荐) | `npx @dsh-workbench/core create` | 自己的 profile、`:3081`、独立进程;会话 / 项目 / 附件跟 web 共用 |
|
|
16
16
|
| 装进现有 `dsh web` | 侧栏 Plugins → Add plugin → `@dsh-workbench/core` → Install → Enable now → 刷新 | 当前实例多一列面板,会话不变 |
|
|
17
17
|
| 装进 Desktop | 同上,装完重开窗口 | Desktop 里多一列面板 |
|
|
18
18
|
|
|
@@ -24,23 +24,32 @@ npx --yes @dsh-workbench/core@latest setup # 或非交互:建默认的
|
|
|
24
24
|
npx @dsh-workbench/core # 起 :3081
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
`create` 有 `dsh web`
|
|
28
|
-
|
|
27
|
+
`create` 有 `dsh web` 就拿它当模板,并问要不要复制设置;会话、项目、附件本来就共用,
|
|
28
|
+
不用复制。本机一个 profile 都没有时,用 dsh 出厂的 web 模板建一个空的。脚本 / CI 里直接给参数:
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
|
-
npx --yes @dsh-workbench/core@latest setup --from web --profile wb2
|
|
31
|
+
npx --yes @dsh-workbench/core@latest setup --from web --profile wb2
|
|
32
32
|
npx @dsh-workbench/core --profile wb2
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
全局装过就不用 `npx`:`npm i -g @dsh-workbench/core` 之后直接 `dsh-workbench`。
|
|
36
36
|
|
|
37
|
+
从 1.0.0 之前的独立实例升上来:旧数据**不会**自动并。先退出所有 dsh,再跑:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
dsh-workbench migrate # 切共用根 + 并旧会话/项目/附件
|
|
41
|
+
dsh-workbench migrate --force # 已经迁过一次、想再补并一次
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
只会补缺、不覆盖;旧目录保留。npx 用户把 `dsh-workbench` 换成 `npx @dsh-workbench/core`。
|
|
45
|
+
|
|
37
46
|
先决条件(就三条):
|
|
38
47
|
|
|
39
48
|
| 要有 | 为什么 |
|
|
40
49
|
|---|---|
|
|
41
50
|
| `dsh` ≥ 0.2.1-rc.2 | 本体。更旧的会被拒绝:`engines.dsh` 声明了下限,老到不认这个字段的 dsh 由启动器当场拒绝并给升级命令 |
|
|
42
51
|
| Node + pnpm | dsh 的 `plugin` 子命令转发给 pnpm;没有 pnpm 会报 `dsh: pnpm was not found` |
|
|
43
|
-
| 可选:跑过一次 `dsh web` | 想继承它的设置 /
|
|
52
|
+
| 可选:跑过一次 `dsh web` | 想继承它的设置 / 项目时。只建工作台不需要 |
|
|
44
53
|
|
|
45
54
|
## 命令行
|
|
46
55
|
|
|
@@ -48,10 +57,11 @@ npx @dsh-workbench/core --profile wb2
|
|
|
48
57
|
|---|---|
|
|
49
58
|
| `dsh-workbench create` | 交互式新建一个工作台实例 |
|
|
50
59
|
| `dsh-workbench setup` | 幂等建默认的 `workbench` profile;配 `--from` 建别的名字 |
|
|
60
|
+
| `dsh-workbench migrate` | 把旧实例的会话 / 项目 / 附件并到共用数据根(`--force` 可重跑) |
|
|
51
61
|
| `dsh-workbench` | 起工作台(默认端口 `:3081`,其余参数透传给 `dsh web`) |
|
|
52
62
|
| `dsh-workbench --profile <名字>` | 起指定实例 |
|
|
53
63
|
| `dsh-workbench setup --from <来源> --profile <新名>` | 以某个现有 profile 为模板建一个 |
|
|
54
|
-
| `--
|
|
64
|
+
| `--no-settings` | 不复制来源的设置(默认复制 `--from` 那份里改已有插件的行) |
|
|
55
65
|
| `dsh-workbench --help` | 用法;其余参数透传给 `dsh web` |
|
|
56
66
|
|
|
57
67
|
环境变量:
|
|
@@ -60,8 +70,8 @@ npx @dsh-workbench/core --profile wb2
|
|
|
60
70
|
|---|---|---|
|
|
61
71
|
| `WORKBENCH_PORT` | `3081` | 端口;`dsh web` 默认 `:3080`,两边可以同时开 |
|
|
62
72
|
| `WORKBENCH_PROFILE` | `workbench` | 用哪个 profile(等价于 `--profile`) |
|
|
63
|
-
| `DSH_HOME` | `~/.dsh` | dsh
|
|
64
|
-
| `DSH_WORKBENCH_HOME` | `$DSH_HOME
|
|
73
|
+
| `DSH_HOME` | `~/.dsh` | dsh 的数据根;会话 / 项目 / 附件都在这里,工作台跟 web 共用 |
|
|
74
|
+
| `DSH_WORKBENCH_HOME` | `$DSH_HOME/<profile>` | 工作台运行时根(opencli 隔离运行时、工坊、模块市场、自更新) |
|
|
65
75
|
|
|
66
76
|
装进 `dsh web` 或 Desktop 时没有启动命令:它们用自己那一份 profile,工作台只是其中一层插件。
|
|
67
77
|
|
|
@@ -75,28 +85,31 @@ npx @dsh-workbench/core --profile wb2
|
|
|
75
85
|
| `client.js` | 浏览器侧 bundle,dsh 客户端按 `dsh.client` 加载 |
|
|
76
86
|
| `cordis.patch.yml` | 把自己插进 profile 组合图的补丁(装载) |
|
|
77
87
|
| `preset/diy.patch.yml` | 「工作台 DIY 模式」的 preset;由 `scripts/gen-diy-preset.mjs` 从 dsh 出厂那份 `standard.patch.yml` 派生(生成后提交,selfcheck 盯过期) |
|
|
78
|
-
| `profile/` | 出厂 profile
|
|
88
|
+
| `profile/` | 出厂 profile 模板:可写根那一行(启动器 `--patch` 用,seed 也抄进 profile) |
|
|
79
89
|
| `skills/` | 模块 DIY 指引,装好后挂给 agent;漏了不报错,只是 agent 不知道要怎么做模块 |
|
|
80
90
|
| `bin/` | `dsh-workbench` 启动器、隔离 opencli 的入口 |
|
|
81
|
-
| `scripts/` | 随包出货的脚本:`seed-profile.sh` / `seed-workshop.sh` / `create-workbench.mjs` / `clone-profile.mjs` |
|
|
91
|
+
| `scripts/` | 随包出货的脚本:`seed-profile.sh` / `seed-workshop.sh` / `create-workbench.mjs` / `clone-profile.mjs` / `share-data-root.mjs` |
|
|
82
92
|
|
|
83
93
|
## 数据落在哪
|
|
84
94
|
|
|
85
95
|
| 内容 | 位置 |
|
|
86
96
|
|---|---|
|
|
87
97
|
| profile(设置、`node_modules`、`cordis.patch.yml`) | `~/.dsh/profiles/<名字>` |
|
|
88
|
-
|
|
|
98
|
+
| 会话、项目列表、附件 | `~/.dsh/{sessions,storages,attachments}` —— 跟 `dsh web` / Desktop **共用一份** |
|
|
99
|
+
| 工作台运行时(opencli 隔离运行时、工坊、模块市场、自更新日志) | `~/.dsh/workbench/**`;别的 profile 是 `~/.dsh/<名字>/**` |
|
|
100
|
+
| 面板与模块配置 | `~/.dsh/workbench/workspaces/**` |
|
|
89
101
|
| API 凭据 | `~/.dsh/.credentials.yaml` —— 它与 `dsh web` **有意共用**,一台机器一把 key |
|
|
90
102
|
| DIY 工坊依赖安装日志 | `~/.dsh/workbench/seed.log` |
|
|
91
103
|
|
|
92
|
-
|
|
93
|
-
|
|
104
|
+
独立实例**只分 profile,不分数据根**:会话、项目、附件跟 `dsh web` 和 Desktop 是同一份,
|
|
105
|
+
只有设置与插件各一份。旧版本分过家的实例,启动时**不会**自动并;先退出所有 dsh,再跑
|
|
106
|
+
`dsh-workbench migrate`(只补不覆盖,旧目录保留)。
|
|
94
107
|
|
|
95
108
|
设置只有一份,写在哪都看得见:
|
|
96
109
|
|
|
97
110
|
- 独立实例:`:3081` → Settings,落进 `profiles/<名字>/cordis.patch.yml`,每一行都改得动。
|
|
98
111
|
- 想用 `dsh web` 已经配好的行:`:3081` → `Meta+,` → 「工作台设置」→「配置同步」→
|
|
99
|
-
选来源 → 勾行 →
|
|
112
|
+
选来源 → 勾行 → 同步,即时生效。只同步显式配过的行,同 id 内容不同默认不覆盖;
|
|
100
113
|
web 后来改的不会自动过来,再打开这一页拉一次即可。
|
|
101
114
|
|
|
102
115
|
## 日常
|
|
@@ -108,9 +121,9 @@ npx @dsh-workbench/core --profile wb2
|
|
|
108
121
|
| 升级 | 重跑一次 `npx --yes @dsh-workbench/core@latest setup`(幂等),然后重启工作台。工坊工具链会在下一次启动时自动跟到同代,不必手动删工坊 |
|
|
109
122
|
| 重建 profile | `mv ~/.dsh/profiles/workbench ~/.dsh/profiles/workbench.bak`,再跑一次 `setup` |
|
|
110
123
|
| 换左栏 | 设置 → 工作台设置 → 会话列表:默认官方;切完自动刷新页面生效(从旧版升上来第一次要重启) |
|
|
111
|
-
| 从 `dsh web`
|
|
124
|
+
| 从 `dsh web` 同步设置 | 设置 → 工作台设置 → 配置同步 → 选来源 → 勾行 → 同步 |
|
|
112
125
|
| 装模块 | `:3081` 的「工作台模块市场」,或让 agent 装 |
|
|
113
|
-
| 彻底不用了 | 删 `~/.dsh/profiles/workbench` 与 `~/.dsh/workbench`
|
|
126
|
+
| 彻底不用了 | 删 `~/.dsh/profiles/workbench` 与 `~/.dsh/workbench` 两个目录(会话 / 项目 / 附件在 `~/.dsh` 下,不跟着删) |
|
|
114
127
|
|
|
115
128
|
外壳本身**零业务模块**:右侧面板装什么有什么。装进 `dsh web` / Desktop 时少一条命令 ——
|
|
116
129
|
没有独立端口与进程,改用它们自己的插件页装模块。
|
package/bin/dsh-workbench
CHANGED
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
# ./bin/dsh-workbench setup # 建默认 workbench profile(幂等)
|
|
7
7
|
# ./bin/dsh-workbench setup --from web --profile wb2
|
|
8
8
|
# # 以 web 为模板建一个独立工作台
|
|
9
|
-
# ./bin/dsh-workbench setup --from web --profile wb2 --with-sessions
|
|
10
|
-
# # 连会话一起复制
|
|
11
9
|
# ./bin/dsh-workbench --profile wb2 # ② 起指定 profile,默认 :3081
|
|
12
10
|
# ./bin/dsh-workbench --no-open # 其余参数透传给 dsh web
|
|
11
|
+
# ./bin/dsh-workbench migrate # 把旧实例的会话/项目/附件并到共用数据根(--force 可重跑)
|
|
13
12
|
# ./bin/dsh-workbench --help
|
|
14
13
|
#
|
|
15
|
-
# 与 `dsh web`
|
|
16
|
-
#
|
|
14
|
+
# 与 `dsh web` 并存:不同的 profile、不同的 node_modules、不同的端口、独立的进程。
|
|
15
|
+
# 会话 / 项目 / 附件跟 `dsh web` 和 Desktop 共用一份(都在 $DSH_HOME 下),
|
|
16
|
+
# 只有设置与插件分家;运行时的 opencli、工坊、模块市场仍按 profile 各一份。
|
|
17
17
|
#
|
|
18
18
|
# ── 这份脚本有两种身份,它自己分得清 ──────────────────────────────────────
|
|
19
19
|
# · **仓库副本**(这个包落在一个 git 工作树里):开发用。bundle 以 link 方式装本目录,
|
|
@@ -36,6 +36,8 @@ PROFILE_EXPLICIT=0
|
|
|
36
36
|
[ -n "${WORKBENCH_PROFILE:-}" ] && PROFILE_EXPLICIT=1
|
|
37
37
|
SETUP=0
|
|
38
38
|
CREATE=0
|
|
39
|
+
MIGRATE=0
|
|
40
|
+
FORCE=0
|
|
39
41
|
DSH_ARGS=()
|
|
40
42
|
|
|
41
43
|
die() {
|
|
@@ -44,7 +46,7 @@ die() {
|
|
|
44
46
|
}
|
|
45
47
|
|
|
46
48
|
usage() {
|
|
47
|
-
sed -n '3,
|
|
49
|
+
sed -n '3,12p' "${BASH_SOURCE[0]}" | sed 's/^# \{0,1\}//'
|
|
48
50
|
}
|
|
49
51
|
|
|
50
52
|
if [ "${1:-}" = "create" ]; then
|
|
@@ -55,6 +57,10 @@ if [ "${1:-}" = "setup" ]; then
|
|
|
55
57
|
SETUP=1
|
|
56
58
|
shift
|
|
57
59
|
fi
|
|
60
|
+
if [ "${1:-}" = "migrate" ]; then
|
|
61
|
+
MIGRATE=1
|
|
62
|
+
shift
|
|
63
|
+
fi
|
|
58
64
|
|
|
59
65
|
while [ $# -gt 0 ]; do
|
|
60
66
|
case "$1" in
|
|
@@ -72,11 +78,16 @@ while [ $# -gt 0 ]; do
|
|
|
72
78
|
WB_CLONE=1
|
|
73
79
|
shift 2
|
|
74
80
|
;;
|
|
75
|
-
--with-sessions
|
|
76
|
-
|
|
81
|
+
--with-sessions | --no-sessions | --no-projects)
|
|
82
|
+
echo "dsh-workbench: 会话与项目跟 dsh web 共用一份数据根,$1 不再需要(忽略)。" >&2
|
|
83
|
+
shift
|
|
84
|
+
;;
|
|
85
|
+
--force)
|
|
86
|
+
[ "$MIGRATE" = "1" ] || die "--force 只用于 migrate"
|
|
87
|
+
FORCE=1
|
|
88
|
+
shift
|
|
89
|
+
;;
|
|
77
90
|
--no-settings) WB_COPY_SETTINGS=0; shift ;;
|
|
78
|
-
--no-plugins) WB_COPY_PLUGINS=0; shift ;;
|
|
79
|
-
--no-projects) WB_COPY_PROJECTS=0; shift ;;
|
|
80
91
|
help | --help | -h) usage; exit 0 ;;
|
|
81
92
|
--) shift; DSH_ARGS+=("$@"); break ;;
|
|
82
93
|
*) DSH_ARGS+=("$1"); shift ;;
|
|
@@ -86,14 +97,25 @@ done
|
|
|
86
97
|
if [ "$SETUP" = "1" ] && [ ${#DSH_ARGS[@]} -gt 0 ]; then
|
|
87
98
|
die "setup 不认识这些参数:${DSH_ARGS[*]}"
|
|
88
99
|
fi
|
|
100
|
+
if [ "$MIGRATE" = "1" ] && [ ${#DSH_ARGS[@]} -gt 0 ]; then
|
|
101
|
+
die "migrate 不认识这些参数:${DSH_ARGS[*]}"
|
|
102
|
+
fi
|
|
89
103
|
if [ "${WB_CLONE:-0}" = "1" ] && [ "$PROFILE_EXPLICIT" = "0" ]; then
|
|
90
104
|
die "用 --from 时还要指定 --profile <新名字>(例如 --from web --profile wb2)"
|
|
91
105
|
fi
|
|
92
106
|
|
|
107
|
+
# `desktop` 只归 Desktop app 管(Electron 自己起 profile、自己决定数据根),dsh 那边也拒。
|
|
108
|
+
# 更要紧的是 setup:它把隔离层**追加**进目标 profile —— 目标是 desktop 时,那个 profile
|
|
109
|
+
# 就再也看不到 `$DSH_HOME/sessions` 里的历史,而且一声不响(2026-10-23 发生过一次)。
|
|
110
|
+
if [ "$PROFILE" = "desktop" ]; then
|
|
111
|
+
die "'desktop' 只归 Desktop app 管(dsh 自己也拒)—— 换一个名字,例如 --profile wb2"
|
|
112
|
+
fi
|
|
113
|
+
|
|
93
114
|
export WORKBENCH_PROFILE="$PROFILE"
|
|
94
115
|
export WB_CLONE="${WB_CLONE:-0}"
|
|
95
116
|
PROFILE_DIR="$DSH_HOME/profiles/$PROFILE"
|
|
96
|
-
# 每个 profile
|
|
117
|
+
# 每个 profile 一份自己的**运行时**根(opencli 隔离运行时、工坊、模块市场);
|
|
118
|
+
# 会话 / 项目 / 附件不在这里 —— 它们跟 `dsh web` / Desktop 共用 $DSH_HOME。
|
|
97
119
|
WORKBENCH_HOME="${DSH_WORKBENCH_HOME:-$DSH_HOME/$PROFILE}"
|
|
98
120
|
export DSH_WORKBENCH_HOME="$WORKBENCH_HOME"
|
|
99
121
|
|
|
@@ -203,25 +225,9 @@ run_setup() {
|
|
|
203
225
|
bash "$REPO_DIR/scripts/seed-profile.sh"
|
|
204
226
|
|
|
205
227
|
if [ "${WB_CLONE:-0}" = "1" ]; then
|
|
206
|
-
if [ -z "${WB_SOURCE_HOME:-}" ]; then
|
|
207
|
-
SRC_PATCH="$DSH_HOME/profiles/$SRC_PROFILE/cordis.patch.yml"
|
|
208
|
-
if grep -q 'id: session-persistence-jsonl' "$SRC_PATCH" 2>/dev/null; then
|
|
209
|
-
if [ "$SRC_PROFILE" != "workbench" ] && grep -q 'DSH_WORKBENCH_HOME' "$SRC_PATCH" 2>/dev/null; then
|
|
210
|
-
WB_SOURCE_HOME="$DSH_HOME/$SRC_PROFILE"
|
|
211
|
-
else
|
|
212
|
-
WB_SOURCE_HOME="$DSH_HOME/workbench"
|
|
213
|
-
fi
|
|
214
|
-
else
|
|
215
|
-
WB_SOURCE_HOME="$DSH_HOME"
|
|
216
|
-
fi
|
|
217
|
-
fi
|
|
218
228
|
WB_SOURCE_PROFILE="$SRC_PROFILE" \
|
|
219
229
|
WB_TARGET_PROFILE="$PROFILE" \
|
|
220
|
-
WB_SOURCE_HOME="$WB_SOURCE_HOME" \
|
|
221
230
|
WB_COPY_SETTINGS="${WB_COPY_SETTINGS:-1}" \
|
|
222
|
-
WB_COPY_PLUGINS="${WB_COPY_PLUGINS:-1}" \
|
|
223
|
-
WB_COPY_PROJECTS="${WB_COPY_PROJECTS:-1}" \
|
|
224
|
-
WB_COPY_SESSIONS="${WB_COPY_SESSIONS:-0}" \
|
|
225
231
|
node "$REPO_DIR/scripts/clone-profile.mjs" || die "从 $SRC_PROFILE 初始化 $PROFILE 失败"
|
|
226
232
|
fi
|
|
227
233
|
|
|
@@ -281,6 +287,22 @@ if [ ! -f "$PROFILE_DIR/package.json" ]; then
|
|
|
281
287
|
exit 1
|
|
282
288
|
fi
|
|
283
289
|
|
|
290
|
+
if [ "$MIGRATE" = "1" ]; then
|
|
291
|
+
MIGRATE_ARGS=(--migrate)
|
|
292
|
+
[ "$FORCE" = "1" ] && MIGRATE_ARGS+=(--force)
|
|
293
|
+
WORKBENCH_PROFILE="$PROFILE" DSH_HOME="$DSH_HOME" DSH_WORKBENCH_HOME="$WORKBENCH_HOME" \
|
|
294
|
+
node "$REPO_DIR/scripts/share-data-root.mjs" "${MIGRATE_ARGS[@]}" || exit 1
|
|
295
|
+
if [ "$PROFILE" = "workbench" ]; then
|
|
296
|
+
START_CMD="$REPO_DIR/bin/dsh-workbench"
|
|
297
|
+
else
|
|
298
|
+
START_CMD="$REPO_DIR/bin/dsh-workbench --profile $PROFILE"
|
|
299
|
+
fi
|
|
300
|
+
echo
|
|
301
|
+
echo "迁移结束。现在起工作台:$START_CMD"
|
|
302
|
+
echo "如果 dsh web 刚才也开着,先重启它,让它从共用根重新读一遍。"
|
|
303
|
+
exit 0
|
|
304
|
+
fi
|
|
305
|
+
|
|
284
306
|
# ── 硬门禁:工作台 bundle 必须**被选中**(在 `dsh.profile.bundles` 里)─────────
|
|
285
307
|
#
|
|
286
308
|
# 判据只能是 `dsh.profile.bundles`,**不能** grep 整个 package.json:依赖装着 ≠ 被选中。
|
|
@@ -316,6 +338,17 @@ if [ "$BUNDLE_GUARD" -ne 0 ]; then
|
|
|
316
338
|
exit 1
|
|
317
339
|
fi
|
|
318
340
|
|
|
341
|
+
# ── 已有实例:只整理配置,旧数据不自动迁移
|
|
342
|
+
#
|
|
343
|
+
# 旧版本给 workbench profile 追加过隔离的三行(sessions / storages / attachment 指到
|
|
344
|
+
# `$DSH_HOME/workbench/**`)。现在缺省跟 Desktop 一样「只分 profile、不分数据根」;
|
|
345
|
+
# 但如果旧目录里还有数据、且没有 `.data-root-shared`,这里只打印 migrate 提示,
|
|
346
|
+
# 不改 profile、不动数据 —— 由用户自己决定什么时候并。
|
|
347
|
+
# 必须排在这里(exec dsh 之前):配置要在这一代 dsh 读进去之前就定好。
|
|
348
|
+
WORKBENCH_PROFILE="$PROFILE" DSH_HOME="$DSH_HOME" DSH_WORKBENCH_HOME="$WORKBENCH_HOME" \
|
|
349
|
+
node "$REPO_DIR/scripts/share-data-root.mjs" ||
|
|
350
|
+
echo "dsh-workbench: 提醒 —— 数据根配置没整理成(见上一行),这次仍按现在的 profile 起。" >&2
|
|
351
|
+
|
|
319
352
|
# 清掉从父 dsh 会话继承来的身份变量。
|
|
320
353
|
#
|
|
321
354
|
# 它们描述的是**另一个** profile 和会话。如果你是在某个 dsh 会话的 shell 里
|