Files
dsh-abap-workbench/README.md
T

6.2 KiB
Raw Permalink Blame History

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):
    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:

{
  "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 内置模块,无需额外依赖。

开发

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)。