按项目保存 1С 连接与配置参数,随项目一起走
31.6/100
综合分
4
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/17 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Mempemp/DSH-1CProjectProperties该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 114 处,展示前 66 条)
- 读取本地文件dsh-1c-project-properties/lib/index.js:82
const parsed = JSON.parse(readFileSync(file, "utf-8")); - 写入本地文件dsh-1c-project-properties/lib/index.js:91
mkdirSync(dirname(file), { recursive: true }); - 写入本地文件dsh-1c-project-properties/lib/index.js:93
writeFileSync(tmp, JSON.stringify(value, null, 2) + "\n", "utf-8"); - 写入本地文件dsh-1c-project-properties/lib/index.js:94
renameSync(tmp, file); - 读取本地文件dsh-1c-project-properties/lib/index.js:112
return statSync(p).isDirectory(); - 读取本地文件dsh-1c-project-properties/lib/index.js:190
entries = readdirSync(root, { withFileTypes: true }); - 读取本地文件dsh-1c-project-properties/lib/index.js:197
if (existsSync(exe) && !found.has(entry.name)) found.set(entry.name, exe); - 读取本地文件dsh-1c-project-properties/lib/index.js:230
raw = readFileSync(file); - 读取本地文件dsh-1c-project-properties/lib/index.js:336
if (!existsSync(file)) continue; - 删除本地文件dsh-1c-project-properties/lib/index.js:452
unlinkSync(join(dir, name)); - 执行外部命令固定命令dsh-1c-project-properties/lib/index.js:557
spawnSync("taskkill", ["/PID", String(dumpJob.child.pid), "/T", "/F"], { windowsHide: true, stdio: "ignore" }); - 写入本地文件dsh-1c-project-properties/lib/index.js:709
mkdirSync(targetDir, { recursive: true }); - 写入本地文件dsh-1c-project-properties/lib/index.js:732
mkdirSync(jobDir, { recursive: true }); - 执行外部命令来自配置/变量dsh-1c-project-properties/lib/index.js:781
child = spawn(platform.exe, args, { cwd: platform.cwd, windowsHide: true, stdio: "ignore" }); - 执行外部命令固定命令dsh-1c-project-properties/lib/index.js:794
spawnSync("taskkill", ["/PID", String(child.pid), "/T", "/F"], { windowsHide: true, stdio: "ignore" }); - 写入本地文件dsh-1c-project-properties/lib/index.js:1110
mkdirSync(jobDir, { recursive: true }); - 执行外部命令来自配置/变量dsh-1c-project-properties/lib/index.js:1121
child = spawn(shell.exe, ["-NoProfile", "-NonInteractive", "-ExecutionPolicy", "Bypass", "-File", COM_SCRIPT], { - 执行外部命令固定命令dsh-1c-project-properties/lib/index.js:1131
spawnSync("taskkill", ["/PID", String(child.pid), "/T", "/F"], { windowsHide: true, stdio: "ignore" }); - 删除本地文件dsh-1c-project-properties/lib/index.js:1134
unlinkSync(outFile); - 删除本地文件dsh-1c-project-properties/lib/index.js:1149
unlinkSync(outFile); - 删除本地文件dsh-1c-project-properties/lib/index.js:1503
unlinkSync(file); - 执行外部命令固定命令dsh-1c-project-properties/lib/index.js:1735
spawnSync("taskkill", ["/PID", String(dumpJob.child.pid), "/T", "/F"], { windowsHide: true, stdio: "ignore" }); - 读取本地文件dsh-1c-project-properties/lib/platform-context.js:76
isDir = statSync(value).isDirectory(); - 读取本地文件dsh-1c-project-properties/lib/platform-context.js:82
if (existsSync(join(dir, "shcntx_ru.hbk"))) return { dir }; - 发起网络请求dsh-1c-project-properties/lib/platform-context.js:127
const response = await fetch(`http://127.0.0.1:${port}/health`, { - 执行外部命令固定命令dsh-1c-project-properties/lib/platform-context.js:157
spawnSync("taskkill", ["/PID", String(child.pid), "/T", "/F"], { - 读取本地文件dsh-1c-project-properties/lib/platform-context.js:194
if (!existsSync(VENDOR_EXE)) { - 写入本地文件dsh-1c-project-properties/lib/platform-context.js:199
mkdirSync(dataDir, { recursive: true }); - 写入本地文件dsh-1c-project-properties/lib/platform-context.js:202
writeFileSync(configFile, writeConfig({ dir: dataDir, platformPath: wanted, port: chosen }), "utf8"); - 执行外部命令来自配置/变量dsh-1c-project-properties/lib/platform-context.js:205
const child = spawn(VENDOR_EXE, ["--config", configFile], { - 读取本地文件dsh-1c-project-properties/lib/rlm-runner.js:75
for (const entry of readdirSync(PROFILES_DIR, { withFileTypes: true })) { - 读取本地文件dsh-1c-project-properties/lib/rlm-runner.js:81
return candidates.filter((dir) => existsSync(dir)); - 读取本地文件dsh-1c-project-properties/lib/rlm-runner.js:87
const version = JSON.parse(readFileSync(join(dir, "package.json"), "utf8")).version; - 读取本地文件dsh-1c-project-properties/lib/rlm-runner.js:100
if (existsSync(MCP_MANAGER_STORE) || existsSync(MCP_MANAGER_HOME)) return true; - 读取本地文件dsh-1c-project-properties/lib/rlm-runner.js:101
if (existsSync(MCP_MANAGER_LEGACY_STORE)) return false; - 读取本地文件dsh-1c-project-properties/lib/rlm-runner.js:158
const parsed = JSON.parse(readFileSync(file, "utf-8")); - 写入本地文件dsh-1c-project-properties/lib/rlm-runner.js:167
mkdirSync(dirname(file), { recursive: true }); - 写入本地文件dsh-1c-project-properties/lib/rlm-runner.js:169
writeFileSync(tmp, JSON.stringify(value, null, 2) + "\n", "utf-8"); - 写入本地文件dsh-1c-project-properties/lib/rlm-runner.js:170
renameSync(tmp, file); - 执行外部命令来自配置/变量dsh-1c-project-properties/lib/rlm-runner.js:236
const found = spawnSync(probe, [SERVER_NAME], { encoding: "utf8", windowsHide: true, timeout: 5000 }); - 执行外部命令来自配置/变量dsh-1c-project-properties/lib/rlm-runner.js:258
const found = spawnSync(probe, ["uv"], { encoding: "utf8", windowsHide: true, timeout: 5000 }); - 执行外部命令固定命令dsh-1c-project-properties/lib/rlm-runner.js:406
const net = spawnSync("netstat", ["-ano"], { encoding: "utf8", windowsHide: true, timeout: 8000 }); - 执行外部命令固定命令dsh-1c-project-properties/lib/rlm-runner.js:418
const list = spawnSync("tasklist", ["/FI", "PID eq " + pid, "/FO", "CSV", "/NH"], { encoding: "utf8", windowsHide: true, timeout: 8000 }); - 执行外部命令固定命令dsh-1c-project-properties/lib/rlm-runner.js:433
spawnSync("taskkill", ["/PID", String(pid), "/T", "/F"], { windowsHide: true, stdio: "ignore", timeout: 15000 }); - 执行外部命令固定命令dsh-1c-project-properties/lib/rlm-runner.js:459
const run = spawnSync("powershell", ["-NoProfile", "-NonInteractive", "-Command", script], { encoding: "utf8", windowsHide: true, timeout: 20000 }); - 发起网络请求dsh-1c-project-properties/lib/rlm-runner.js:525
const response = await fetch(`http://${HOST}:${port}/mcp`, { - 写入本地文件dsh-1c-project-properties/lib/rlm-runner.js:633
writeFileSync(LOG_FILE, `\n===== ${new Date().toISOString()} ${command} ${args.join(" ")}\n`, { encoding: "utf8", flag: "a" }); - 写入本地文件dsh-1c-project-properties/lib/rlm-runner.js:643
writeFileSync(LOG_FILE, output, { encoding: "utf8", flag: "a" }); - 写入本地文件dsh-1c-project-properties/lib/rlm-runner.js:676
mkdirSync(DIR, { recursive: true }); - 读取本地文件dsh-1c-project-properties/lib/rules-deploy.js:100
return createHash("sha256").update(readFileSync(file)).digest("hex"); - 读取本地文件dsh-1c-project-properties/lib/rules-deploy.js:109
return statSync(path).isDirectory(); - 读取本地文件dsh-1c-project-properties/lib/rules-deploy.js:117
return statSync(path).isFile(); - 读取本地文件dsh-1c-project-properties/lib/rules-deploy.js:125
return readFileSync(file, "utf8"); - 读取本地文件dsh-1c-project-properties/lib/rules-deploy.js:135
entries = readdirSync(dir, { withFileTypes: true }); - 写入本地文件dsh-1c-project-properties/lib/rules-deploy.js:148
mkdirSync(dirname(file), { recursive: true }); - 写入本地文件dsh-1c-project-properties/lib/rules-deploy.js:150
writeFileSync(tmp, text, "utf8"); - 写入本地文件dsh-1c-project-properties/lib/rules-deploy.js:151
renameSync(tmp, file); - 写入本地文件dsh-1c-project-properties/lib/rules-deploy.js:155
mkdirSync(dirname(to), { recursive: true }); - 读取本地文件dsh-1c-project-properties/lib/rules-deploy.js:164
if (readdirSync(current).length === 0) { - 删除本地文件递归dsh-1c-project-properties/lib/rules-deploy.js:165
rmSync(current, { recursive: true, force: true }); - 写入本地文件dsh-1c-project-properties/lib/rules-deploy.js:574
if (!journal.dryRun) renameSync(targets.agents, backup); - 删除本地文件dsh-1c-project-properties/lib/rules-deploy.js:794
unlinkSync(file); - 写入本地文件dsh-1c-project-properties/lib/rules-deploy.js:863
renameSync(source, entryFile); - 删除本地文件dsh-1c-project-properties/lib/rules-deploy.js:872
unlinkSync(entryFile); - 删除本地文件dsh-1c-project-properties/lib/rules-deploy.js:891
unlinkSync(file); - 删除本地文件dsh-1c-project-properties/lib/rules-deploy.js:896
unlinkSync(join(projectPath, MANIFEST_REL));
扫描于 2026/11/2(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DeepSeek Harness:按项目拆分的 1С 参数——设置里的标签页,值存在项目文件夹内的 .dsh/1c-project.json
README
由 DeepSeek 最新模型翻译生成dsh-1c-project-properties
Параметры 1С в разрезе проекта внутри DeepSeek Harness.
Отдельная вкладка «1С: Параметры проектов» в настройках DSH: общие значения для машины, список проектов и форма параметров выбранного проекта. Значения проекта лежат в его собственной папке — в файле .dsh/1c-project.json, поэтому переезжают вместе с проектом, видны в git и доступны другим инструментам.
Возможности
⚙️ Вкладка «1С: Параметры проектов» в настройках DSH
展开完整文档(README 剩余 1 节)
dsh-1c-project-properties
Параметры 1С в разрезе проекта внутри DeepSeek Harness.
Отдельная вкладка «1С: Параметры проектов» в настройках DSH: общие значения для машины, список проектов и форма параметров выбранного проекта. Значения проекта лежат в его собственной папке — в файле .dsh/1c-project.json, поэтому переезжают вместе с проектом, видны в git и доступны другим инструментам.
Возможности
⚙️ Вкладка «1С: Параметры проектов» в настройках DSH
Секция в Settings — рядом с «Основные» и «Плагины». Внутри: карточка общих значений для машины и список проектов (название, путь, точка «файл параметров есть»). Параметры проекта открываются в отдельном окне — по клику на проект: колонка настроек шириной около 520 px, в неё форма не помещалась.
Окно параметров собрано из трёх карточек: «Подключение» (данные базы), «Выгрузка и загрузка конфигурации» (операции Конфигуратора), «Правила 1С в проекте». Шапка и подвал закреплены, прокручивается только содержимое; технические ключи команд не выносятся в подписи (они в подсказках при наведении), а длинные пояснения свёрнуты в раскрывающиеся блоки. Отказы операций и развёртывания показываются в тех же карточках, где нажата кнопка.
Скриншоты предыдущей версии интерфейса — в v0.5.0 окно параметров переработано (карточки-секции, закреплённые шапка и подвал):
📜 Правила 1С в проекте
Набор 1c-rules раскладывается в проект одной кнопкой «Развернуть» — в ту структуру, которую читает DSH:
| Что | Куда |
| Правила (48 файлов) | .dsh/rules-1c/ — читаются по ссылкам |
| Роли субагентов (13) | .dsh/agents-1c/ |
| Сценарии-команды (30) | .dsh/commands-1c/ |
| Навыки (12 + 4 OpenSpec) | .dsh/skills/ — DSH видит их как проектные |
| Точка входа (always-on контекст) | AGENTS.md в корне проекта |
| Параметры для правил | .dev.env из .dsh/1c-project.json |
| Workspace OpenSpec | openspec/ (skip-if-exists) |
Ссылки внутри правил написаны под раскладку репозитория-источника (content/rules/…, content/agents/…, content/commands/…, content/skills/…) и при развёртывании переписываются на проектные — иначе агент получил бы указатели в никуда. Рядом кладётся сгенерированный .dsh/rules-1c/dsh-environment.md: где что лежит, какие MCP-серверы из ожидаемых правилами реально установлены, и чем механика DSH отличается от хостов, под которые правила писались (нет markdown-субагентов, нет проектных slash-команд, USER-RULES.md не загружается сам).
Развёртывание идемпотентно и не разрушительно:
- существующий AGENTS.md не затирается: он сохраняется как AGENTS.md.bak.md и вклеивается в USER-RULES.md между маркерами (штатное поведение 1c-rules);
- .dev.env、openspec/、USER-RULES.md、memory.md、LLM-RULES.md 只创建一次,之后不再改动;
- 用户在展开文件里的修改会保留:内容被改过的文件不会覆盖,删除规则时也保留;
- 再次点击不会重写多余的东西(报告里显示「无变化」)。
插件不跟踪规则集版本,也不跟踪项目里的展开状态。只检查一件事:$DSH_HOME/1c-rules 里有没有规则集。没有规则集,卡片会说明这一点,按钮禁用:在 standalone 安装里,规则集要自己放进这个目录(DSH Desktop 首次启动时会放进去)。展开报告,包括失败和错误文本,都显示在卡片里。
.dev.env 里的数据库密码默认不迁移(.dev.env 经常进 git)——要单独勾选才会迁移。
📁 值存在项目文件夹里
项目根目录下的 .dsh/1c-project.json 文件:数据库路径、用户、密码、平台路径。写入是原子的(临时文件 + 重命名),文件里的其他键会保留,编码为 UTF-8。文件可以手动编辑——插件会在下次打开标签页时读取这些值。
🧩 平台路径:通用值和覆盖
在通用设置里指定默认平台路径。项目里这个字段可以留空——那就用通用值;填了自己的值就覆盖通用值。生效的路径始终显示在项目表单里。
🔎 自动查找已安装的平台
宿主部分扫描 %ProgramFiles%\1cv8、%ProgramFiles(x86)%\1cv8 和 %LOCALAPPDATA%\Programs\1cv8,收集带 bin\1cv8.exe 的版本,作为自动补全列表交给输入框。什么都没找到——就手动输入路径。
🗂 项目 = DSH 工作区加上手动添加的
列表取自 DSH 工作区注册表(ctx.workspaceRegistry),而不是进程的工作目录。没注册为工作区的文件夹可以在标签页里添加——路径会保存,参数也放在它里面。项目旁的 ● 标记表示参数文件已存在,○ 表示还没有。
⤓ 把配置导出到文件
「Выгрузить конфигурацию в файлы」 按钮以批处理模式启动 1С 配置器(DESIGNER /DumpConfigToFiles),把 XML 直接放进项目文件夹——旁边会出现 Configuration.xml、ConfigDumpInfo.xml 和对象目录。可选导出格式(分层/扁平)、-update 模式(只导出改动的对象)以及解除 .cfl 锁文件。进度、耗时、文件数、配置版本和配置器日志都显示在同一个标签页里;导出可以取消。
操作状态放在单独的带框区块里:标题(「操作进行中 / 已完成 / 失败 / 已取消」)和操作类型,指标「耗时」「文件数」「版本」,导出目录,以及失败原因。在操作未重置之前,主标签页里也会显示同样的区块,带 「Открыть」 和 「Отменить」 按钮。
⇧ 把配置从文件导入数据库
按钮 「从文件加载配置」 执行反向操作:DESIGNER /LoadConfigFromFiles <каталог> -Format <формат>,如果勾选了复选框,还会执行 /UpdateDBCfg —— 数据库配置随之更新。默认情况下更新是动态的(-Dynamic+ -SessionTerminate force):会话不会中断;取消勾选则进行非动态更新,这种更新需要独占访问数据库。
加载读取的目录与导出相同(项目参数中的 Каталог выгрузки,默认是项目根目录)。插件会拒绝加载没有 Configuration.xml 的目录:这样的加载会用空配置替换数据库配置。启动前会显示确认提示,列出后果 —— 替换配置不可逆,只能从你的备份(.cf / .dt)回滚。
🧩 导出扩展
按钮 「导出扩展」 把数据库的所有扩展导出为源码:DESIGNER /DumpConfigToFiles <каталог>\Extensions -Format Hierarchical -AllExtensions。配置旁边必须有单独的 Extensions 子文件夹:放在同一个目录里,扩展对象会和主配置对象混在一起。
/DumpConfigToFiles 的 -AllExtensions 参数使用 1c-rules 套件中的脚本 db-dump-xml.ps1,ibcmd 也支持它(infobase config export all-extensions);在这个插件可访问的 Конфигуратор 参数手册中没找到佐证。所以如果平台版本不认识这个参数,导出会以错误结束 —— 这种情况下插件会直接说明问题出在版本,而不是数据库。手动检查:
& "C:\Program Files\1cv8\8.3.27.2130\bin\1cv8.exe" DESIGNER /F"C:\Bases\Buh"
/DumpConfigToFiles "C:\Projects\Buh\Extensions" -Format Hierarchical -AllExtensions
/DisableStartupDialogs /Out"C:\Temp\ext.log" /DumpResult"C:\Temp\ext.result"
参照文件是 /DumpResult:0 表示成功。
📚 从 1С 列表中选择数据库
「数据库路径」字段会提示 1С 自带列表中的数据库:读取 %APPDATA%\1C\1CEStart\ibases.v8i(用户列表)和 %PROGRAMDATA%\1C\1CEStart\ibases.v8i(公共列表),以及通过 1cestart.cfg 中 CommonInfoBases 参数连接的外部列表。文件数据库填入文件夹路径,客户端-服务器数据库填入字符串 Srvr="…";Ref="…";;通过 Web 服务器的数据库会跳过(批处理模式下无法连接它们)。手动输入仍然可用。
🔌 供其他插件和智能体使用的 /1cprops/ 路由
所有工作都通过宿主路由进行,也可以从外部使用:GET /1cprops/project?path=… 返回项目的当前参数,其中平台路径已经填好。
参数
| 字段 | JSON 中的键 | 值 |
| 数据库路径 | infobasePath | 文件数据库文件夹,或连接字符串 Srvr="srv";Ref="base"; |
| 用户 | user | 1С 用户名 |
| 密码 | password | 授权密码 |
| 平台路径 | platformPath | …\bin\1cv8.exe;留空则取通用值 |
| 数据库访问码 | unlockCode | 用于绕过连接锁定(/UC)的代码;留空则不传递 |
| 导出目录 | dumpDir | XML 写入位置;留空则为项目根目录 |
通用值按机器保存:$DSH_HOME/1c-project-properties/settings.json($DSH_HOME 是环境变量,否则为 ~/.dsh)。
项目参数文件
<项目文件夹>/.dsh/1c-project.json,UTF-8,缩进 2:
{
"$schema": "dsh-1c-project-properties/v1",
"infobasePath": "Srvr=\"srv-1c\";Ref=\"buh\";",
"user": "Администратор",
"password": "",
"platformPath": "",
"unlockCode": "",
"dumpDir": ""
}
- 写入是原子操作(临时文件 + 重命名)——不会出现被截断的 JSON。
- 插件只写自己的键;文件里的其他键会保留。
- 密码以明文保存——不要把文件提交到 git。
使用
1. 打开 Settings → 「1С: Параметры проектов」。
2. 在 「Общие」 区块中指定默认平台路径——它会填入所有未填写该字段的项目。
3. 项目:DSH 工作区会自动进入列表,没有工作区的文件夹用列表下方的字段添加。
4. 点击项目或该行的齿轮——会打开 「Параметры проекта」 窗口。填写数据库路径、用户名和密码,点击 「Сохранить」:项目旁边会出现 .dsh/1c-project.json。
5. 只有当项目中的平台路径与通用路径不同时,才在项目中设置它。同一个窗口中:「Удалить файл」 删除项目参数,「Убрать из списка」 移除手动添加的路径。
6. 导出时:检查 「Каталог выгрузки」(留空 = 项目根目录),选择格式并点击 「Выгрузить конфигурацию в файлы」。一次只能进行一个导出——Конфигуратор 会锁定数据库配置。
7. 完成后,标签页会显示文件数量、配置版本和 Конфигуратор 日志。如果数据库中还残留 .cfl lock 文件,请勾选同名复选框——否则导出会因锁定而报错。
8. 反向导入时:「Загрузить конфигурацию из файлов」(「обновить конфигурацию базы данных」和「динамическое обновление」两个复选框在按钮上方)。插件会显示确认及后果;没有 Configuration.xml 的目录它会拒绝导入。
9. 「Выгрузить расширения」 会把数据库中所有扩展的源代码放到同一目录的 Extensions 子文件夹。
10. 对于 1С 规则:打开项目窗口并点击 「Развернуть」——1c-rules 规则集会被展开到 .dsh/rules-1c、.dsh/agents-1c、.dsh/commands-1c、.dsh/skills 和项目的 AGENTS.md。再次点击会更新规则集,不会覆盖你的修改;展开区块中是上次运行的报告。
安装
需要 dsh ≥ 0.1.2-rc.1。有三种安装方式——结果都一样。
从 release 安装(无需下载任何东西):
dsh plugin --profile web add https://github.com/Mempemp/DSH-1CProjectProperties/releases/download/v0.5.0/dsh-1c-project-properties-0.5.0.tgz
本地归档包 dsh-1c-project-properties-0.5.0.tgz(从发布页面下载,或自己打包:cd dsh-1c-project-properties && npm pack):
dsh plugin --profile web add dsh-1c-project-properties-0.5.0.tgz
插件文件夹(开发模式,改 lib/.js 后无需重装即可生效):
dsh plugin --profile web add <插件文件夹路径>/dsh-1c-project-properties
安装完成后重启 DSH(插件组合在启动时读取),然后在浏览器里刷新页面。
dsh 不在 PATH 里怎么办
本地安装和 DSH Desktop 都不会把 dsh 加进 PATH —— 改用 node 调用入口。bin.js 的路径:
| DSH 的安装方式 | bin.js 路径 |
| 本地安装(npm install @deepseek-ai/dsh) | <安装文件夹>\node_modules\@deepseek-ai\dsh\lib\bin.js |
| DSH Desktop | %LOCALAPPDATA%\Programs\DSH Desktop\resources\app\node_modules\@deepseek-ai\dsh\lib\bin.js |
node "C:\путь\к\dsh\lib\bin.js" plugin --profile web add "C:\путь\к\dsh-1c-project-properties-0.5.0.tgz"
可能遇到的麻烦
| 现象 | 怎么办 |
| ERR_PNPM_UNEXPECTED_STORE | 在安装命令后面加上 --store-dir="<你的 pnpm store 路径>" |
| 写入 …\profiles\web 时报 EPERM | 没有配置档文件夹的写权限(沙箱、杀毒软件):关掉 DSH,放开写入权限,再重试 |
| 提示 peer 依赖(cordis、react、react-dom) | 忽略即可:插件没有外部依赖,react 由 DSH 运行时提供 |
| 归档包路径里有空格 | pnpm 的 .cmd 垫片会出错 —— 把归档包放到没有空格的路径下,或者改用文件夹方式安装 |
| 安装后 dsh.profile.bundles 里多出一些包 | dsh plugin add 会重写层列表:dshmarket 之前保持「热」状态的插件(.dsh-market\hot-.yml)会被永久激活。不需要的行可以从配置档的 package.json 里删掉,不影响插件工作 |
| 安装后没有出现标签页 | DSH 没重启,或者页面没有强制刷新(Ctrl+Shift+R) |
| 导出时提示「Ошибка блокировки информационной базы для конфигурирования」 | 文件型数据库目录里还留着 .cfl 锁文件 —— 勾上 「导出前清除 .cfl」(或者关掉别人的 Конфигуратор 会话) |
| 导出时提示「Информационная база не обнаружена!」 | 数据库路径不对:要填含 1Cv8.1CD 的文件夹路径,或者 Srvr="…";Ref="…"; 字符串 |
| 导出瞬间就「成功」结束,文件数为 0 | 填的是 1cv8s.exe(服务器代理)—— 在用户会话里它什么也不做,静默退出。改成同一个 bin 里的 1cv8.exe |
| 只填平台目录时导出不启动 | 插件会自己在目录及其 bin 里找 1cv8.exe —— 给它文件或文件夹都行 |
| 「数据库路径」字段没有列表提示 | 插件会读取 %APPDATA%\1C\1CEStart\ibases.v8i 和 %PROGRAMDATA%\1C\1CEStart\ibases.v8i;如果列表放在别的文件里,请在 1С 中通过「Настройка → Списки общих баз」把它接进来(会写进 1cestart.cfg 的 CommonInfoBases,插件也会读这个文件) |
检查宿主部分是否已启动:curl -s http://127.0.0.1:<порт>/1cprops/state —— 应返回 JSON,里面是项目列表。
环境要求
- DeepSeek Harness(dsh web 或 DSH Desktop)≥ 0.1.2-rc.1 —— 该标签页使用 settings.section 插槽
- Node.js ≥ 20
- 1С:Предприятие 8.3 平台 —— 仅导出按钮需要;路径在参数里指定(1cv8.exe 或 bin 目录)
HTTP 路由
| 方法与路径 | 用途 |
| GET /1cprops/state | 通用设置、项目列表、检测到的 1С 平台、来自 1С 列表的数据库(infobases)、规则集是否存在(rulesPayload) |
| POST /1cprops/common | {platformPath} —— 保存通用值 |
| POST /1cprops/project-save | {path, params} —— 写入项目参数文件 |
| GET /1cprops/project?path=… | 项目当前生效的参数(已填入平台的通用路径) |
| POST /1cprops/project-clear | {path} —— 删除参数文件 |
| POST /1cprops/project-add | {path} —— 把文件夹加入项目列表 |
| POST /1cprops/project-forget | {path} —— 从列表中移除附加路径 |
| POST /1cprops/dump-start | {path, dir?, format?, update?, cleanLocks?} —— 把配置导出为文件(202,若已有操作在进行则返回 409) |
| POST /1cprops/load-start | {path, dir?, format?, updateDb?, dynamic?, cleanLocks?} —— 从文件加载配置;updateDb(默认 true)会加上 /UpdateDBCfg,dynamic(默认 true)会加上 -Dynamic+ -SessionTerminate force |
| POST /1cprops/extensions-start | {path, dir?, extensionsDir?, cleanLocks?} —— 把所有扩展导出到 <dir>/Extensions(默认是项目根目录);extensionsDir 可覆盖子文件夹名 |
| GET /1cprops/dump-status | 当前操作的状态:state、operation、label、counts、时间、文件、配置版本、Конфигуратор 日志 |
| POST /1cprops/dump-cancel | 停止操作(会杀掉 1С 的进程树) |
| POST /1cprops/rules-deploy | {path, sections?, includePassword?, useEdt?, dryRun?, force?} —— 在项目中部署/更新规则;dryRun: true 为预览 |
| POST /1cprops/rules-remove | {path, force?} —— 移除已部署的规则,从备份恢复原来的 AGENTS.md |
规则集由宿主部分从 $DSH_HOME/1c-rules 读取(DSH Desktop 首次启动时会放进去),日志写入 $DSH_HOME/1c-project-properties/jobs。
仓库结构
- dsh-1c-project-properties/lib/index.js —— 宿主部分(ESM):/1cprops/ 路由、JSON 读写、查找已安装的 1С 平台、以批处理模式启动 Конфигуратор。
- dsh-1c-project-properties/lib/rules-deploy.js — 把 1c-rules 规则铺到项目里:规划和执行、重写链接、从项目参数生成 .dev.env、部署清单 .dsh/1c-rules.json、删除。
- dsh-1c-project-properties/lib/client.js — 客户端部分:settings.section 区块(「1С: Параметры проектов」)、项目列表和参数弹窗。样式是一个注入的 ,带 p1c- 类和 DSH 主题变量(--dsw-);标记里没有内联样式。
- dsh-1c-project-properties/cordis.patch.yml — 把插件挂载进配置档组合的那一行。
- dsh-1c-project-properties/README.md — 包说明(与发布归档里的相同)。
- dsh-1c-project-properties/test/rules-deploy.smoke.mjs — 在合成数据集上检查规则部署契约:重写链接、别人的 AGENTS.md、幂等性、保留改动、删除。运行:node test/rules-deploy.smoke.mjs(无外部依赖)。
没有外部依赖:只有 node: 和 DSH 运行时的 React。
安全
密码以明文存在项目文件里——不要把 .dsh/1c-project.json 提交到项目仓库。宿主路由在本地可访问,不需要会话 token(其他插件通过 ctx.webServer.register 注册的路由也一样);DSH 服务器监听 127.0.0.1。
部署规则时,.dev.env 里的数据库密码不会被带过去,除非勾上对应的复选框:上游规则在 git 里忽略 .dev.env,但你的项目未必如此。插件不改项目的 .gitignore,只会提醒你该把 .dev.env 加进去。
许可证
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Mempemp/DSH-1CProjectProperties
按项目保存 1С 连接与配置参数,随项目一起走
相关插件 · 其他
模型破甲清洗YuJunZhiXue/dsh-purge
⚔️ DeepSeek Harness 网络安全红队工具dsh-purge
★ 16,148已汉化DeepSeek 客户端
73
女娲蒸馏alchaincyf/nuwa-skill
输入名人名字,提炼其思维模型与决策方式供你调用
★ 37,308已汉化DSH
72
逆向分析桥接Fanqi89/dsh-rea
REA(Reverse Engineer Anything)MCP 桥接,用来把 REA 逆向工具接入 DSH 插件
★ 51已汉化DSH
72
语音女友beiyege-01/dsh-voice-ai-girlfriend
语音 AI 女友Voice AI girlfriend for DeepSeek Harness:Whisper…
★ 888已汉化DSH
71.6
红队越狱测试套件Minglink/dsh-infinite-gen-5
DeepSeek v4.1 flash 逆向工具无限五代 求 Star 收藏 ⭐欢迎大家提交项目的改进
★ 3,759已汉化DSH
71.4
协同办公空间dream-num/univer-workspace
一个让人类与 AI Agent 共同创作、协作和审阅的开源 Office 工作空间。
★ 2,266已汉化DSH
70.7
这是你的仓库?认领条目