128 lines
5.8 KiB
Markdown
128 lines
5.8 KiB
Markdown
|
|
# DSH ABAP 工作台(dsh-abap-workbench)
|
|||
|
|
|
|||
|
|
一个 DeepSeek Harness (DSH) **bundle 插件**,把 SAP ABAP 开发工作流装进 DSH:
|
|||
|
|
|
|||
|
|
- **ABAP 预设「ABAP 工作台」**:新建会话时选择它,即挂载 `adt_*` 工具(32 个,经 ADT REST 访问 SAP);
|
|||
|
|
- **三种运行模式**(按工作区切换,安全基线默认只读):
|
|||
|
|
- **只读**:写/激活/删除/传输/执行/调试全部关闭,只做调查与补丁建议;
|
|||
|
|
- **调试**:允许执行触发断点 + 调试器(`adt_debug`),写与传输仍关闭;
|
|||
|
|
- **更改**:按白名单可写、允许传输(每次写需给请求号)、允许执行与调试器。
|
|||
|
|
- **可视化配置页**(设置 → ABAP ADT):工作区目的地增删改、连接测试、默认目的地、运行模式、可写白名单(`allowedPackages` / `allowedTransports`);
|
|||
|
|
- **会话状态徽章**:仅在配置了 ABAP 的工作区显示(存在 `.dsh-abap-adt/destinations.yaml`),显示默认目的地可切换 + 当前模式徽章。
|
|||
|
|
|
|||
|
|
ADT 工具本体来自依赖包 [`@nefevcore/abap-adt-dsh-plugin`](https://www.npmjs.com/package/@nefevcore/abap-adt-dsh-plugin)(MIT),本插件只负责预设、策略、配置页与状态条。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 安装(在另一台 DSH 上)
|
|||
|
|
|
|||
|
|
前提:DSH ≥ `0.2.1-rc.2`、`pnpm` 在 PATH 上、已配置好 DSH 的模型与凭据。
|
|||
|
|
|
|||
|
|
### 方式一:从 Git 仓库安装(推荐)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 1. 克隆到任意工作目录
|
|||
|
|
git clone https://www.heyoung.top/QQ597901027/dsh-abap-workbench.git
|
|||
|
|
cd dsh-abap-workbench
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
然后二选一:
|
|||
|
|
|
|||
|
|
- **命令行**(DSH 已提供 plugin 子命令,转发给 profile 的 pnpm):
|
|||
|
|
```bash
|
|||
|
|
dsh plugin --profile web add file:$(pwd)
|
|||
|
|
```
|
|||
|
|
再把包名加入 profile 的 `dsh.profile.bundles`(见下方“手工登记”),或直接用方式二让 Plugin Manager 完成登记。
|
|||
|
|
- **Plugin Manager(推荐)**:把本仓库目录作为 bundle 安装:
|
|||
|
|
```
|
|||
|
|
plugin_manager { action: "install_bundle", target: "<本仓库绝对路径>" }
|
|||
|
|
```
|
|||
|
|
它会完成 pnpm 安装 + bundle 登记;安装完成后**重启 DSH**。
|
|||
|
|
|
|||
|
|
### 方式二:从 npm/其它 registry(如果已发布)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
plugin_manager { action: "install_bundle", target: "dsh-abap-workbench@0.1.0" }
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 手工登记(仅当自行 `pnpm add` 时)
|
|||
|
|
|
|||
|
|
profile 的 `package.json`:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"dependencies": { "dsh-abap-workbench": "file:<本仓库绝对路径>" },
|
|||
|
|
"dsh": { "profile": { "bundles": ["...", "dsh-abap-workbench"] } }
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
改完执行 `pnpm install`(关闭 DSH 后执行最稳,避免 Windows 上正在使用的原生模块被占用),再启动。
|
|||
|
|
|
|||
|
|
### 安装后
|
|||
|
|
|
|||
|
|
1. **重启 DSH**;
|
|||
|
|
2. 新建会话 → 预设选择器里选 **“ABAP 工作台”**;
|
|||
|
|
3. 打开 **设置 → ABAP ADT**:
|
|||
|
|
- 填工作区与目的地(URL / client / 语言 / 用户名 / `passwordEnv`);
|
|||
|
|
- 密码不要写明文:在 DSH 凭据库或环境变量里放 `ADT_DEV_PASSWORD` 之类的引用名;
|
|||
|
|
- 点「测试连接」确认 ADT 服务可达(需在 SAP 侧 SICF 激活 `/sap/bc/adt`);
|
|||
|
|
- 选择运行模式(默认只读),需要写时切到「更改」并配置白名单。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 使用
|
|||
|
|
|
|||
|
|
### 目的地与凭据
|
|||
|
|
|
|||
|
|
- 目的地配置写在**工作区** `<workspace>/.dsh-abap-adt/destinations.yaml`(按会话工作区隔离,工具调用时热读);
|
|||
|
|
- 密码只写引用名(`passwordEnv`),真值放 DSH 凭据库(`~/.dsh/.credentials.yaml`)或进程环境变量;
|
|||
|
|
- 内置 `demo` 目的地是 in-process mock ADT 服务器(127.0.0.1),可零配置演练;它始终按预设的只读基线执行。
|
|||
|
|
|
|||
|
|
### 运行模式
|
|||
|
|
|
|||
|
|
| 模式 | 策略 | 说明 |
|
|||
|
|
|---|---|---|
|
|||
|
|
| 只读 | `allowedPackages` 哨兵值、`enableTransports=false`、`allowTransportableEdits=false`、`allowExecution=false`、`allowDebugger=false` | 安全基线 |
|
|||
|
|
| 调试 | 只读 + `allowExecution=true` + `allowDebugger=true` | 断点/单步/变量/栈 |
|
|||
|
|
| 更改 | `allowTransportableEdits=true`、`enableTransports=true`、`allowExecution=true`、`allowDebugger=true`、白名单 | 写前 diff、传输请求纪律 |
|
|||
|
|
|
|||
|
|
- 模式切换**只在设置页**,会话里不提供开关(安全);
|
|||
|
|
- 只读/调试下白名单不生效但会保留,切回更改时复用;
|
|||
|
|
- 白名单存在 `<workspace>/.dsh-abap-adt/ui-settings.json`(本插件私有,abap-adt 不会读取)。
|
|||
|
|
|
|||
|
|
### 安全
|
|||
|
|
|
|||
|
|
- 只读 ≠ 无害:仍能读取 SAP 源码与业务数据,建议连开发/测试系统 + 最小权限账号;
|
|||
|
|
- 「更改」模式是真实可写:`Z*`/`$TMP`(或你的白名单)可编辑/激活/执行/调试;传输释放没有工具,仍由人在 SE10 执行;
|
|||
|
|
- 首次接入建议先把模式保持「只读」,验证完再切换。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 目录结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
cordis.patch.yml # bundle patch:插入 preset-abap-adt(预设)+ abap-adt-ui(本插件 Host 半)
|
|||
|
|
index.js # Host 半:HTTP 接口 /abap-adt/{state,save,mode,default,ping},读写工作区配置
|
|||
|
|
client.js # Client 半:设置页(目的地/模式/白名单/连接测试)+ 会话状态徽章
|
|||
|
|
locale/{zh,en}.json# 插件显示名与描述
|
|||
|
|
icon.svg # 插件图标
|
|||
|
|
package.json # dsh.bundle / dsh.client 声明;依赖 @nefevcore/abap-adt-dsh-plugin
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
- 预设里的 `abap-adt` 行引用依赖包 `@nefevcore/abap-adt-dsh-plugin`(安装本插件时由 pnpm 拉取);
|
|||
|
|
- 运行模式通过写入工作区策略生效,预设本身只带只读安全基线;
|
|||
|
|
- `index.js` 只用 Node 内置模块,无需额外依赖。
|
|||
|
|
|
|||
|
|
## 开发
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
node --check index.js
|
|||
|
|
node --check client.js
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
修改 `cordis.patch.yml` 后重启 DSH(bundle patch 在启动时应用)。若改了依赖版本,更新 `package.json` 后重新安装本 bundle。
|
|||
|
|
|
|||
|
|
## License
|
|||
|
|
|
|||
|
|
MIT。ADT 工具本体版权归 [@nefevcore/abap-adt-dsh-plugin](https://github.com/nefevcore/dsh-adt) 作者(MIT)。
|