🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

BSL 代码编辑器 Mempemp/DSH-CodeEditor_BSL

DeepSeek Harness
Mempemp5 天前有提交已提供中文文档扫描:含敏感能力

在 DeepSeek Harness 里编辑 1СBSL代码。

36/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查有告警:未发布到 npm registry,仅可从源码安装;安装清单取自 dsh-bsl-editor/package.json。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Mempemp/DSH-CodeEditor_BSL
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · tool
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 5 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/23) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装;安装清单取自 dsh-bsl-editor/package.json

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-bsl-editor(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/2 11:43:28

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 66 处,展示前 29 条)
  • 写入剪贴板
    dsh-bsl-editor/lib/client.js:97
    try { navigator.clipboard?.writeText(ref); } catch {}
  • 发起网络请求
    dsh-bsl-editor/lib/client.js:143
    const res = await fetch(url, opts);
  • 发起网络请求
    dsh-bsl-editor/lib/client.js:295
    const r = await fetch(u);
  • 发起网络请求
    dsh-bsl-editor/lib/client.js:325
    fetch("/bsl/grammar/1c"),
  • 发起网络请求
    dsh-bsl-editor/lib/client.js:326
    fetch("/bsl/grammar/1c-query"),
  • 发起网络请求
    dsh-bsl-editor/lib/client.js:454
    await this.request("initialize", {
  • 发起网络请求
    dsh-bsl-editor/lib/client.js:1890
    const res = await fetch("/bsl/reviewed", {
  • 读取本地文件
    dsh-bsl-editor/lib/index.js:59
    const raw = readFileSync(PLUGIN_CONFIG_FILE, "utf-8");
  • 读取本地文件
    dsh-bsl-editor/lib/index.js:88
    if (existsSync(DEFAULT_BIN)) return DEFAULT_BIN;
  • 执行外部命令固定命令
    dsh-bsl-editor/lib/index.js:111
    spawnSync("taskkill", ["/PID", String(childPid), "/T", "/F"], { windowsHide: true, stdio: "ignore" });
  • 写入本地文件
    dsh-bsl-editor/lib/index.js:133
    mkdirSync(LOG_DIR, { recursive: true });
  • 读取本地文件
    dsh-bsl-editor/lib/index.js:134
    if (!existsSync(CONFIG_FILE)) {
  • 写入本地文件
    dsh-bsl-editor/lib/index.js:135
    writeFileSync(CONFIG_FILE, JSON.stringify({ language: "ru", sendErrors: "never" }, null, 2) + "\n", "utf-8");
  • 执行外部命令来自配置/变量
    dsh-bsl-editor/lib/index.js:144
    child = spawn(bin, ["-w", "--server.port=" + config.serverPort, "--configuration=" + CONFIG_FILE], {
  • 读取本地文件
    dsh-bsl-editor/lib/index.js:405
    const raw = readFileSync(abs);
  • 读取本地文件
    dsh-bsl-editor/lib/index.js:491
    if (!existsSync(exe)) continue;
  • 执行外部命令固定命令
    dsh-bsl-editor/lib/index.js:550
    spawnSync("taskkill", ["/PID", String(pid), "/T", "/F"], { windowsHide: true, stdio: "ignore" });
  • 执行外部命令来自配置/变量
    dsh-bsl-editor/lib/index.js:560
    child = spawn(bin, args, {
  • 读取本地文件
    dsh-bsl-editor/lib/index.js:683
    const head = readFileSync(abs);
  • 写入本地文件
    dsh-bsl-editor/lib/index.js:848
    mkdirSync(LOG_DIR, { recursive: true });
  • 写入本地文件
    dsh-bsl-editor/lib/index.js:850
    writeFileSync(patchFile, header + hunk, "utf-8");
  • 写入本地文件
    dsh-bsl-editor/lib/index.js:940
    mkdirSync(LOG_DIR, { recursive: true });
  • 写入本地文件
    dsh-bsl-editor/lib/index.js:941
    writeFileSync(REVIEWED_FILE, JSON.stringify(store, null, 2) + "\n", "utf-8");
  • 读取本地文件
    dsh-bsl-editor/lib/metadata.js:345
    .filter((f) => existsSync(join(ext, f)))
  • 读取本地文件
    dsh-bsl-editor/lib/metadata.js:438
    if (existsSync(p)) {
  • 读取本地文件
    dsh-bsl-editor/lib/metadata.js:604
    if (existsSync(p)) {
  • 读取本地文件
    dsh-bsl-editor/lib/metadata.js:613
    if (existsSync(p)) {
  • 读取本地文件
    dsh-bsl-editor/lib/metadata.js:625
    if (existsSync(p)) {
  • 读取本地文件
    dsh-bsl-editor/lib/metadata.js:807
    return existsSync(p) ? p : null;
扫描于 2026/11/2(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 编辑BSL代码

用于 BSL 的交互式 CodeEditor

README

由 DeepSeek 最新模型翻译生成
dsh-bsl-editor 在 DeepSeek Harness 里编辑 1С(BSL)代码。 1С 配置导出结果会直接在 DSH 的聊天标签页里打开:元数据树、带 BSL 语法高亮的 Monaco 编辑器、文件标签页、已修改文件筛选、跳转到定义,以及把代码发送到聊天。 功能 🌲 1С 元数据树 左侧面板可以在文件树和 1С:Предприятие 元数据树之间切换,元数据树带类型图标——Подсистемы、Справочники、Документы、Регистры、Общие модули…… → 对象 → Реквизиты / Табличные части / Формы / Команды / Макеты / Модули。点击模块即可在编辑器里打开。支持按对象名搜索。 支持三种导出格式:EDT(.mdo)、Конфигуратор 的 XML 导出(ConfigDumpInfo.xml)和按对象的 XML 导出。格式自动识别。树是懒加载的:展开节点时才解析。 🗂 文件标签页 每个打开的文件都是编辑器顶部栏里的一个标签页:文件名、未保存修改指示、用叉号或鼠标中键关闭。切换标签页时会保留修改后的文本、光标位置和滚动位置;重新打开编辑器时标签页状态会恢复。右侧是「从磁盘重新读取」和「保存」按钮;Ctrl+S 保存文件。
展开完整文档(README 剩余 1 节)
dsh-bsl-editor

在 DeepSeek Harness 里编辑 1С(BSL)代码。

1С 配置导出结果会直接在 DSH 的聊天标签页里打开:元数据树、带 BSL 语法高亮的 Monaco 编辑器、文件标签页、已修改文件筛选、跳转到定义,以及把代码发送到聊天。

功能

🌲 1С 元数据树

左侧面板可以在文件树和 1С:Предприятие 元数据树之间切换,元数据树带类型图标——Подсистемы、Справочники、Документы、Регистры、Общие модули…… → 对象 → Реквизиты / Табличные части / Формы / Команды / Макеты / Модули。点击模块即可在编辑器里打开。支持按对象名搜索。

支持三种导出格式:EDT(.mdo)、Конфигуратор 的 XML 导出(ConfigDumpInfo.xml)和按对象的 XML 导出。格式自动识别。树是懒加载的:展开节点时才解析。

🗂 文件标签页

每个打开的文件都是编辑器顶部栏里的一个标签页:文件名、未保存修改指示、用叉号或鼠标中键关闭。切换标签页时会保留修改后的文本、光标位置和滚动位置;重新打开编辑器时标签页状态会恢复。右侧是「从磁盘重新读取」和「保存」按钮;Ctrl+S 保存文件。

🔎 已修改文件

树上方的 「Все файлы」/「Изменённые」 切换开关:在「Изменённые」模式下会显示带 git 状态(M / A / D / +)的扁平文件列表。悬停显示完整路径;点击在标签页里打开文件。git 里还没有的文件会和已修改文件一起显示,并标记为 +。

「Изменённые」模式在元数据树里同样有效:只保留含有已修改文件的分组和对象。该模式下的搜索只限于已修改文件。

状态也会显示在树里的文件旁;已修改的行在编辑器里用标记标出。

🌆 Monokai 主题

编辑器使用 Monokai 配色:背景 #272822,关键字为粉色,函数和类为绿色,字符串为黄色,数字为紫色。

🎨 BSL 语法高亮

高亮基于 1С 官方 TextMate 语法(1c-syntax),通过 monaco-textmate + onigasm 实现。语法、Monaco 和 worker 由插件从 resources/vendor 提供;外部 CDN 源作为备用方案保留。高亮覆盖关键字、字符串、注释、&Аннотации、#Область。

⚡ 按 F12 跳转到定义

定义按元数据模型查找——不需要 language server:
- ОбщийМодуль.Метод() / Справочники.Товары.Метод() → 模块和位置;
- 不带点的方名 → 在当前模块里搜索;
- 再次按 F12 会在多个候选项之间循环。

F12 由插件处理;Monaco 原生的 Ctrl+Click 不会被拦截,查找失败时不会弹出「No definition found」提示。

上下文菜单里的「Peek Definition」只在启用 LSP 时可用。

💬 把代码发送到聊天

在编辑器里选中片段 → 右键 → 「添加到讨论」 → 代码进入 DSH 的输入框。

🔵 编辑器里的变更差异

工作副本的改动直接显示在打开的文件里:新增行是绿色背景,删除行是行间带原文的红色块。git 里还没有的文件显示为整份新增,导航面板里标注「新文件」。右上角的面板(↑ / ↓ / 计数)和快捷键 Alt+↑ / Alt+↓ 用来在改动之间跳转。计数统计变更块的数量,并跟随滚动位置。变更块可以接受或拒绝——见「接受或拒绝改动」一节。打开带改动的文件会定位到第一处改动。

✅ 接受或拒绝改动

每个变更块的正下方右侧都有 接受 和 拒绝 按钮。差异是相对 HEAD(最后一次提交)算的,不是相对「改动前」的状态,所以:

变更块的边界就是真正改动的行:差异不带上下文行,所以两处改动只要中间隔了至少一行未改动的内容,就是两个独立的块、各有各的按钮,而不是合成一个。

- 接受 —— 该块视为已查看:高亮和删除行的红色块消失,计数和 Alt+↑ / Alt+↓ 跳转只保留未查看的部分。文件本身不变——改动已经在里面了,不需要为此提交。
- 拒绝 —— 只把这一块回退到 HEAD(对单个 diff 改动执行 git apply -R)。对已进入索引的改动(git add)同样有效:那里回退会同时作用于索引和文件。如果编辑器里有未保存的改动,回退不会执行——先按 Ctrl+S。

整个文件的操作在编辑器上方标签栏的按钮里:全部接受、全部拒绝(把文件回退到 HEAD,第二次点击才生效)和 已查看:N —— 已查看的块显示为暗灰色,误接受的块可以用「还原」按钮恢复。「已查看」标记保存在本机,并按内容识别改动:文件上方改动导致的行的位移不会清除标记。提交之后,标记会留在没进提交的那些改动上——进了提交的改动则随提交一起消失。

📤 加入索引与提交

已查看的内容不只能隐藏,还能不离开编辑器就一路做到提交:
- 加入索引(在标签栏中)——只有勾选的改动会进入索引,文件里其他行不动。没看过的改动不会进索引:它留在工作区。新文件(git 里还没有它)会整个加进索引——git 对它还没有单独的改动记录。按钮的回应会说明到底发生了什么:「已向索引发送 5 处改动」。已经在索引里的改动(之前发过的)会单独说明——「9 处改动已在索引中」,这不是错误。没发出去的,按钮会直说:「4 处改动发送失败——文件在查看后被改过,请刷新视图并重新勾选」。如果压根没有看过的改动,也会照实说:「没有看过的改动——请用「接受」按钮勾选」。

- 把所有看过的加入索引(在「已更改」列表上方)——对项目里所有已更改文件做同样的事:你顺着列表走,把接受的发出去,列表就一点点变短。

- 提交——一个窗口,里面列出索引中的内容,还有写提交信息的输入框。提交的是整个索引,信息由人来写。

发进索引的改动会从文件视图和计数器里消失:它已经在索引里等着提交,而「已查看:N」只统计还没发出去的部分。按钮的回应会从顶部浮出一条,就在标签栏下面:平滑地出现又淡出,5 秒后自动熄灭,也可以点叉关掉。点击代码能穿透它——只有浮条本身会拦截点击。发送前文件必须已保存(Ctrl+S)——否则进索引的会是磁盘上的版本,而不是屏幕上看到的内容。

💬 从聊天打开文件

点击聊天消息里指向 .bsl / .xml 的链接,会在插件编辑器里打开文件:树会展开到该文件并高亮它,活动标签页切换为 Editor。指向其他格式文件以及 workspace 之外路径的链接会继续往下走——交给其他插件或系统应用处理。可以用「拦截从聊天打开文件」设置关掉。

🔄 自动刷新已打开的文件

如果已打开的文件在编辑器外被改过(智能体、外部编辑器),切换到该标签页或回到 DSH 窗口时标签页会刷新——滚动位置和光标都会保留。如果有未保存的改动,会出现「文件已在磁盘上更改」浮条,带「从磁盘重新加载」按钮:不会自动替换你的改动。

🔌 LSP

通过 WebSocket 支持 bsl-language-server(诊断、自动补全、hover、格式化)。默认关闭;在 Settings DSH →「1С-редактор」里开启。插件不会下载 bsl-language-server——需要你已装好二进制文件。在大型配置上,服务器构建配置模型时可能卡住。

⚙️ 设置

DSH 设置里的 「1С-редактор」 分区:

| 设置 | 默认值 | 含义 |
| LSP | 关闭 | bsl-language-server |
| 拦截从聊天打开文件 | 开启 | 点击指向 .bsl / .xml 的链接会在插件编辑器里打开 |
| 服务器端口 | 8025 | bsl-language-server 的 WebSocket 端口 |
| bsl-language-server.exe 路径 | (空) | 二进制文件的显式路径 |

安装

从发布页面下载 dsh-bsl-editor-0.6.2.tgz(或自行构建:cd dsh-bsl-editor && npm pack),然后安装:

dsh plugin --profile web add dsh-bsl-editor-0.6.2.tgz

或者用发布归档的直接链接:

dsh plugin --profile web add https://github.com/Mempemp/DSH-CodeEditor_BSL/releases/download/v0.6.2/dsh-bsl-editor-0.6.2.tgz

然后重启 dsh web,刷新浏览器标签页。

如果 pnpm 报 store 错误(ERR_PNPM_UNEXPECTED_STORE)——在安装命令后加上 --store-dir="<你的 pnpm store 路径>"。

默认二进制文件路径:%LOCALAPPDATA%\Programs\bsl-language-server\bsl-language-server\bsl-language-server.exe。其他路径在设置里指定。

要求

- DeepSeek Harness(dsh web)
- Node.js ≥ 20

支持的导出格式

| 格式 | 特征 | 备注 |
| EDT | Configuration/Configuration.mdo | 对象来自 .mdo 文件(属性、表格部分、表单、命令、模板) |
| XML 导出(配置器) | ConfigDumpInfo.xml + Configuration.xml | 树来自元数据列表 |
| 按对象 XML 导出 | 根目录 Configuration.xml + 类型文件夹(Catalogs/、Documents/、…) | 分区从文件系统还原:表单 / 命令 / 模板 / 模块 / 预定义 |

模块对应关系:CommonModules/<名称>/Ext/Module.bsl、Catalogs/<名称>/Ext/ObjectModule.bsl、Forms/<表单>/Ext/Form/Module.bsl、根目录 Ext/ManagedApplicationModule.bsl 等。

仓库结构

- lib/index.js —— host 部分(ESM):路由 /bsl/*(tree、read、search、git、meta、find-symbol),启动 bsl-language-server。
- lib/metadata.js —— 1С 元数据模型:格式识别、三种格式的解析器、静态符号解析。
- lib/client.js —— 客户端部分:conversation-view 里的「编辑器」标签页(文件标签、树、Monaco、变更过滤器)。
- resources/ —— 元数据节点图标、1С 的 TextMate 语法。
- tests/ —— HTTP 和 LSP 冒烟测试。

致谢

元数据树结构和节点图标改编自 zerobig/vscode-1c-metadata-viewer (MIT License,© Ilya Bushin)。
预览分享卡片长什么样 ↓Mempemp/DSH-CodeEditor_BSL
分享 · DeepSeek Harness Hub
Mempemp/DSH-CodeEditor_BSL

在 DeepSeek Harness 里编辑 1СBSL代码。

这是你的仓库?认领条目

回到顶部