@dsh-workbench/core 1.1.14-beta.2 → 1.1.15
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 +1 -1
- package/bin/dsh-workbench +6 -52
- package/client.js +59 -16
- package/cordis.patch.yml +5 -6
- package/dist/client/client.body.js +59 -16
- package/dist/client/index.js +59 -16
- package/dist/host/index.js +1873 -680
- package/dist/types/app/layouts/env-gate/gate-text.d.ts +2 -3
- package/dist/types/app/units/manifests.d.ts +2 -0
- package/dist/types/kernel/host/mount-units.d.ts +2 -1
- package/dist/types/modules/panels/model/diy-browser-act.d.ts +2 -3
- package/dist/types/modules/panels/model/diy-browser-clip.d.ts +14 -0
- package/dist/types/modules/panels/model/diy-browser-tools.d.ts +1 -14
- package/dist/types/modules/panels/model/diy-browser.d.ts +6 -6
- package/dist/types/modules/panels/model/diy-page.d.ts +3 -2
- package/dist/types/modules/panels/model/diy-record-open.d.ts +2 -2
- package/dist/types/modules/panels/model/diy-record.d.ts +14 -14
- package/dist/types/modules/panels/model/market-discover.d.ts +2 -2
- package/dist/types/modules/panels/model/market-follow-up.d.ts +2 -1
- package/dist/types/modules/panels/model/market-route.d.ts +2 -3
- package/dist/types/modules/panels/model/market-update-bundle.d.ts +2 -3
- package/dist/types/modules/panels/model/market-workbench-update.d.ts +2 -2
- package/dist/types/modules/panels/model/market.d.ts +2 -2
- package/dist/types/modules/panels/model/plugin-actions.d.ts +2 -3
- package/dist/types/modules/panels/model/plugin-section.d.ts +3 -4
- package/dist/types/shared/api/host/bundle-routes.d.ts +3 -3
- package/dist/types/shared/api/host/diy-artifacts.d.ts +1 -2
- package/dist/types/shared/api/host/diy-capture-live.d.ts +25 -0
- package/dist/types/shared/api/host/diy-components.d.ts +2 -2
- package/dist/types/shared/api/host/diy-release-staging.d.ts +6 -0
- package/dist/types/shared/api/host/diy.d.ts +1 -1
- package/dist/types/shared/api/host/git-exec.d.ts +1 -1
- package/dist/types/shared/api/host/git-process.d.ts +3 -0
- package/dist/types/shared/api/host/shipped-adapter-set.d.ts +4 -0
- package/dist/types/shared/api/host/workbench-seam.d.ts +3 -0
- package/package.json +3 -6
- package/scripts/seed-profile.sh +3 -3
- package/scripts/share-data-root.mjs +10 -13
- package/skills/workbench-module-diy/BUILD.md +38 -0
- package/skills/workbench-module-diy/SKILL.md +1 -0
- package/profile/sandbox.patch.yml +0 -28
|
@@ -107,3 +107,41 @@ export const apply = plugin.apply;
|
|
|
107
107
|
|
|
108
108
|
`idle` 是独立态(无工作区或 `enabled: false`),不画成空态。
|
|
109
109
|
卡片在任意输入下不得抛异常或出现 `undefined` / `NaN`(`check --only cards`)。
|
|
110
|
+
|
|
111
|
+
## 5 起子进程:走执行缝门面
|
|
112
|
+
|
|
113
|
+
模块要在宿主侧跑命令(构建、git、打包……)时,用外壳放进 `mount(deps)` 的执行缝门面 `deps.seam`。
|
|
114
|
+
`ctx.get('shell')` / `ctx.get('workbenchShell')` / `ctx.get('seam')`、`runShell` / `shellOf`、裸
|
|
115
|
+
`child_process` 都不给模块用,`check --only seam` 会判红。
|
|
116
|
+
|
|
117
|
+
先在清单里声明要哪几档写入域(只认两档):
|
|
118
|
+
|
|
119
|
+
```json
|
|
120
|
+
{ "host": { "inject": [], "writes": ["unit"] } }
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
| 档 | 可写在哪 | 什么时候给 |
|
|
124
|
+
|---|---|---|
|
|
125
|
+
| `unit` | `<运行时根>/units/<unit>/`(模块自己的数据目录;`HOME`、npm/pnpm 缓存与日志也注入到这里) | 声明了就常开、不用审批 |
|
|
126
|
+
| `workspace` | 当前会话的工作区 | 声明了才给;调用时还要带上会话对象 |
|
|
127
|
+
|
|
128
|
+
不写 `writes`(或写 `[]`)= 不拿门面:`deps.seam` 是 `undefined`,代码里按可选处理。
|
|
129
|
+
|
|
130
|
+
```ts
|
|
131
|
+
const result = await deps.seam?.run({
|
|
132
|
+
scope: 'unit',
|
|
133
|
+
command: 'git rev-parse --short HEAD',
|
|
134
|
+
timeoutMs: 10_000,
|
|
135
|
+
});
|
|
136
|
+
if (result === undefined || result.exitCode !== 0) {
|
|
137
|
+
return { ok: false, text: '这条命令没跑通' };
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
- `workspace` 档的 `session` 从工具运行上下文拿(`execute(raw, exec)` 的 `exec.agent?.session`);
|
|
142
|
+
路由 / 动作这些没有会话的调用点不要请求这一档。
|
|
143
|
+
- 一条命令只声明一个写入域;要写两棵树就在步骤边界拆成两次调用。
|
|
144
|
+
- `retry: 'safe'` 只给幂等 / 只读命令(查询、列清单);写命令用默认的 `'never'`。
|
|
145
|
+
- 请求没声明的档在起进程前就失败(`SeamError` 的 `scope-not-declared` / `workspace-unknown`),别吞掉。
|
|
146
|
+
- 这层门面是**约定 + 门禁 + 归因**,不是进程隔离:模块宿主代码与外壳同进程。真正的安全边界仍是
|
|
147
|
+
「装不装模块 + 审批」。
|
|
@@ -76,6 +76,7 @@ description: 在工作台里把当前面板调明白,或者给它造一块新
|
|
|
76
76
|
| DIY 工具族的参数与返回 | [FAMILY.md](FAMILY.md) |
|
|
77
77
|
| 面板何时刷新、事实名 | [LINKAGE.md](LINKAGE.md) |
|
|
78
78
|
| 落点、模板文件、命令、两个面 | [BUILD.md](BUILD.md) |
|
|
79
|
+
| 起子进程、写入域(执行缝门面) | [BUILD.md](BUILD.md) §5 |
|
|
79
80
|
| 依赖、禁区、安装、热换、发布 | [WIRING.md](WIRING.md) |
|
|
80
81
|
| 门禁报错、卡片故障取证 | [REVIEW.md](REVIEW.md) |
|
|
81
82
|
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
# 工作台运行时的**可写根**声明。两个入口共用同一行:
|
|
2
|
-
# 1. 启动器每次启动用 `--patch` 叠一层(对新旧 profile 都生效);
|
|
3
|
-
# 2. `scripts/share-data-root.mjs` 把这一行补进 profile 的 cordis.patch.yml,
|
|
4
|
-
# 给不带启动器的 `dsh <profile>` 兜底(只抄这一行,不抄注释)。
|
|
5
|
-
#
|
|
6
|
-
# 为什么必须有它:工作台自己要跑命令(启动体检自动装 opencli、模块市场装/升插件、
|
|
7
|
-
# 查源上有没有新版),而这些命令走 dsh 的**执行缝**,执行缝带**文件沙箱**。
|
|
8
|
-
# 插件发起的调用**没有会话**,于是回落到部署策略;dsh-base 出厂那一条写的是
|
|
9
|
-
# `workspaceRoot: !!js process.cwd()` —— 而安装目标是 `$DSH_HOME/workbench/...`,
|
|
10
|
-
# 不在启动目录下面,沙箱拒写(实测 EPERM:mkdir ~/.npm/_cacache、mkdir
|
|
11
|
-
# $DSH_HOME/workbench/...,见 内部设计记录 第 10.3 节)。
|
|
12
|
-
# 症状:自动安装死在第一步,界面只能退化成"让用户去终端抄一条命令" ——
|
|
13
|
-
# 终端没有沙箱,抄过去反而能跑,于是这个缺口一直看不出来。
|
|
14
|
-
#
|
|
15
|
-
# 指到运行时根之后,沙箱放行的是**同一棵树**:
|
|
16
|
-
# 隔离运行时的工具链 + npm 缓存(opencli-runtime.ts)、
|
|
17
|
-
# 模块专属文件夹(ADR-0011 的 workspaces/)、模块市场的 plugins-npm。
|
|
18
|
-
# 也就是 ADR-0011 说的"启动器给插件声明的可写根"。
|
|
19
|
-
#
|
|
20
|
-
# 会话 / 项目 / 附件**不在这里**:它们跟 `dsh web` / Desktop 共用 `$DSH_HOME`,
|
|
21
|
-
# 不再由工作台按 profile 隔离(见 ADR-0085)。
|
|
22
|
-
#
|
|
23
|
-
# mode 与 base 出厂值**一致**(只重述,不改变语义):patch 的 config 是**整体替换**、
|
|
24
|
-
# 不深合并,所以两个字段都得写全,否则 workspaceRoot 会被替换掉 mode 丢失。
|
|
25
|
-
- id: sandbox-policy
|
|
26
|
-
config:
|
|
27
|
-
mode: !!js process.env.DSH_PERMISSION_MODE ?? 'workspace-write'
|
|
28
|
-
workspaceRoot: !!js process.env.DSH_WORKBENCH_HOME ?? dshHomePath('workbench')
|