Files
dsh-abap-workbench/README.md
T

135 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 不会读取)。
### 显示名(中文)
- 每个目的地可设置**显示名**(如「广东开发」),只影响界面展示;工具调用仍使用稳定的「标识」(`name`);
- 显示名存在 `ui-settings.json` 的 `labels` 里,不影响 abap-adt 的 schema;
- 改名(标识)时默认目的地下拉会自动跟随,不会出现 `defaultDestination ... is not a destination name`;
- 会话状态徽章、目的地表格、默认目的地选择都会显示「显示名(标识)」。
### 安全
- 只读 ≠ 无害:仍能读取 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)。