v0.1.0
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(MIT),本插件只负责预设、策略、配置页与状态条。
安装(在另一台 DSH 上)
前提:DSH ≥ 0.2.1-rc.2、pnpm 在 PATH 上、已配置好 DSH 的模型与凭据。
方式一:从 Git 仓库安装(推荐)
# 1. 克隆到任意工作目录
git clone https://www.heyoung.top/QQ597901027/dsh-abap-workbench.git
cd dsh-abap-workbench
然后二选一:
- 命令行(DSH 已提供 plugin 子命令,转发给 profile 的 pnpm):
再把包名加入 profile 的
dsh plugin --profile web add file:$(pwd)dsh.profile.bundles(见下方“手工登记”),或直接用方式二让 Plugin Manager 完成登记。 - Plugin Manager(推荐):把本仓库目录作为 bundle 安装:
它会完成 pnpm 安装 + bundle 登记;安装完成后重启 DSH。
plugin_manager { action: "install_bundle", target: "<本仓库绝对路径>" }
方式二:从 npm/其它 registry(如果已发布)
plugin_manager { action: "install_bundle", target: "dsh-abap-workbench@0.1.0" }
手工登记(仅当自行 pnpm add 时)
profile 的 package.json:
{
"dependencies": { "dsh-abap-workbench": "file:<本仓库绝对路径>" },
"dsh": { "profile": { "bundles": ["...", "dsh-abap-workbench"] } }
}
改完执行 pnpm install(关闭 DSH 后执行最稳,避免 Windows 上正在使用的原生模块被占用),再启动。
安装后
- 重启 DSH;
- 新建会话 → 预设选择器里选 “ABAP 工作台”;
- 打开 设置 → ABAP ADT:
- 填工作区与目的地(URL / client / 语言 / 用户名 /
passwordEnv); - 密码不要写明文:在 DSH 凭据库或环境变量里放
ADT_DEV_PASSWORD之类的引用名; - 点「测试连接」确认 ADT 服务可达(需在 SAP 侧 SICF 激活
/sap/bc/adt); - 选择运行模式(默认只读),需要写时切到「更改」并配置白名单。
- 填工作区与目的地(URL / client / 语言 / 用户名 /
使用
目的地与凭据
- 目的地配置写在工作区
<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 内置模块,无需额外依赖。
开发
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 作者(MIT)。
Languages
JavaScript
100%