@leonhardthust/dsh-decision-engine 1.9.2 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/README.zh.md +2 -2
- package/config.example.yml +50 -23
- package/docs/releasing.md +4 -4
- package/lib/client.js +695 -227
- package/lib/decision-log.js +501 -0
- package/lib/decision-store.js +756 -97
- package/lib/engine.js +38 -30
- package/lib/guard/effects.js +14 -0
- package/lib/guard/listener.js +28 -3
- package/lib/guard/messages.js +35 -0
- package/lib/index.js +312 -15
- package/lib/outcomes.js +3 -1
- package/lib/providers.js +57 -8
- package/lib/tolerance.js +50 -40
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -32,10 +32,11 @@ main model acts.
|
|
|
32
32
|
**Providers**: system one · bamboonode · 硅基流动 SiliconFlow (CN / Global) ·
|
|
33
33
|
Perplexity · OpenRouter · custom base URL
|
|
34
34
|
|
|
35
|
-
**
|
|
35
|
+
**Safety level (how often to ask)**: Don't ask · Ask less · Default · Ask more
|
|
36
|
+
(none of the four changes permission-mandated approval or denial)
|
|
36
37
|
|
|
37
38
|
**UI**: config page with collapsible sections · Decisions tab · stats ·
|
|
38
|
-
readable approval card
|
|
39
|
+
readable approval card · sharded decision logs (by date / session / workspace) with retention
|
|
39
40
|
|
|
40
41
|
| Config page | Decisions tab |
|
|
41
42
|
|---|---|
|
package/README.zh.md
CHANGED
|
@@ -31,10 +31,10 @@
|
|
|
31
31
|
**决策服务**:system one · bamboonode · 硅基流动 SiliconFlow(国内 / 国际)·
|
|
32
32
|
Perplexity · OpenRouter · 自定义 base URL
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
**安全档位(询问频率)**:不问 · 少问 · 默认 · 多问(四档都不改变权限强制的人工批准与拒绝)
|
|
35
35
|
|
|
36
36
|
**界面**:配置页(四个可折叠分组)· 决策历史标签页 · 统计与对比 ·
|
|
37
|
-
审批卡正文可读化
|
|
37
|
+
审批卡正文可读化 · 决策日志分文件(按日期 / 会话 / 工作区)与自动清理
|
|
38
38
|
|
|
39
39
|
| 配置页 | 决策历史 |
|
|
40
40
|
|---|---|
|
package/config.example.yml
CHANGED
|
@@ -232,11 +232,14 @@ cooldownProbeMs: 10000
|
|
|
232
232
|
# cooldownMs: 60000 # 首轮冷却时长(上限为其 10 倍)
|
|
233
233
|
# failureThreshold: 3 # 连续失败多少次进入冷却
|
|
234
234
|
|
|
235
|
-
#
|
|
236
|
-
# never
|
|
237
|
-
# auto
|
|
238
|
-
# always
|
|
239
|
-
#
|
|
235
|
+
# 决策模型思考(startlux / System One 的 think_mode),三档:
|
|
236
|
+
# never 跳过思考——最省延迟(bamboonode 实测约 1.9s),默认值,热路径首选
|
|
237
|
+
# auto 由服务端决定——实测比 never 慢(约 7.2s),“按需”在实践中常常等于思考
|
|
238
|
+
# always 总是思考——每次约多等 5 秒;质量收益尚未实测
|
|
239
|
+
# 它**只影响本插件发给决策端点的请求**,不改宿主主模型的推理档位(那个在
|
|
240
|
+
# 「自动审查回退 › 推理档位」)。bamboonode/startlux 已实测支持;systemone、
|
|
241
|
+
# 两个 SiliconFlow 与 custom 未实测(会照常发送,可能被忽略、不报错);
|
|
242
|
+
# Perplexity / OpenRouter 的公开 API 没有这个字段。
|
|
240
243
|
thinkMode: never
|
|
241
244
|
|
|
242
245
|
# ============================================================================
|
|
@@ -352,12 +355,20 @@ guardFallbackProvider: ""
|
|
|
352
355
|
guardFallbackModel: ""
|
|
353
356
|
guardFallbackReasoningEffort: ""
|
|
354
357
|
|
|
355
|
-
#
|
|
356
|
-
#
|
|
357
|
-
#
|
|
358
|
-
#
|
|
359
|
-
#
|
|
360
|
-
#
|
|
358
|
+
# 安全档位(tolerance):只调整**软性审查**多频繁地升级为询问。
|
|
359
|
+
# autonomous 不问 软性询问不弹窗、不按比例;权限强制的人工批准与拒绝照旧
|
|
360
|
+
# relaxed 少问 只按严重度尾部(校准后约最前 1%,校准前固定分 0.60);
|
|
361
|
+
# **替换**默认判断,因此同一次调用可能比默认多问也可能少问
|
|
362
|
+
# default 默认 沿用决策模型自己的判断(中/高风险、疑似注入、
|
|
363
|
+
# 不可逆且与任务无关会问)
|
|
364
|
+
# cautious 多问 默认判断之上再叠加严重度靠前一批(校准后约 25%,
|
|
365
|
+
# 校准前固定分 0.30),逐调用一定是默认的超集
|
|
366
|
+
#
|
|
367
|
+
# 四档都不改变权限边界:mandatory deny 全档不变;requires_approval 必须拿到
|
|
368
|
+
# 本次调用的宿主 allowed-once,没有审批通道时拒绝,模型不能代批。
|
|
369
|
+
# autonomous 也不是「关掉审查」:在宿主 auto 审查或本档下,软性 ask 会交给
|
|
370
|
+
# 上面的 guardFallback 裁决(失败即拒绝),因此它可能比 default 更严。
|
|
371
|
+
# severity 是排序分数,分位数就绪不代表危险概率已校准;冷启动比校准后更安静。
|
|
361
372
|
# tolerance: default
|
|
362
373
|
|
|
363
374
|
# ============================================================================
|
|
@@ -385,31 +396,47 @@ guardFallbackReasoningEffort: ""
|
|
|
385
396
|
# model、裁决、耗时、token,展开还能看到发给决策模型的现场(state)、
|
|
386
397
|
# 问题(questions)与它回来的回答(answers)。
|
|
387
398
|
#
|
|
388
|
-
# 数据只落在本机 $DSH_HOME/dsh-decision-engine/
|
|
389
|
-
#
|
|
399
|
+
# 数据只落在本机 $DSH_HOME/dsh-decision-engine/logs/,**不经过任何网络请求**,
|
|
400
|
+
# 也**不进**上面的匿名统计。
|
|
390
401
|
#
|
|
391
|
-
#
|
|
402
|
+
# 关掉之后**完全不写任何日志**(不采集内容、不占磁盘,标签页也随之消失)
|
|
392
403
|
# ——不是「写了藏起来」。明细里可能有会话正文与命令片段,用户说不记录
|
|
393
404
|
# 就该真的不落盘。
|
|
394
405
|
#
|
|
395
406
|
# decisionsTabEnabled: true # 默认开启;**这是唯一的开关**(DEC-026 / DEC-029):
|
|
396
407
|
# 开 = 记录明细,且**一定记录决策内容**;
|
|
397
|
-
# 关 =
|
|
408
|
+
# 关 = 完全不写日志(见上),
|
|
398
409
|
# 没有「只存元数据」的中间档。
|
|
399
410
|
#
|
|
400
|
-
#
|
|
401
|
-
#
|
|
402
|
-
#
|
|
411
|
+
# 日志怎么分文件(默认 date)。四选一:
|
|
412
|
+
# date logs/date/2026-11-15.log 一天一个文件(默认;日期跟随本机时区)
|
|
413
|
+
# session logs/session/<会话名>__<id 前 8>.log 一个会话一个文件
|
|
414
|
+
# workspace logs/workspace/<工作区名>.log 同一工作区的会话写在一起
|
|
415
|
+
# single logs/decisions.jsonl 全部追加到一个文件(升级前的行为)
|
|
416
|
+
# 文件名会包含会话名或工作区名(先脱敏再截断)。
|
|
417
|
+
# decisionsSplitMode: date
|
|
418
|
+
# 日期分隔符(只在 date 模式生效):- / _ / .
|
|
419
|
+
# decisionsDateSeparator: "-"
|
|
403
420
|
#
|
|
404
|
-
#
|
|
405
|
-
#
|
|
421
|
+
# 老旧日志自动删除:启动时与每 6 小时清理一次。
|
|
422
|
+
# 保留天数(0 = 不按天删,只受总量上限约束);绝不删今天与正在写的分片。
|
|
423
|
+
# decisionsRetentionDays: 30
|
|
406
424
|
#
|
|
407
|
-
#
|
|
425
|
+
# 下面几项是**高级档位**,配置页上没有对应的控件:需要时手改本文件。
|
|
408
426
|
#
|
|
409
|
-
#
|
|
410
|
-
#
|
|
427
|
+
# logs/ 目录的总量上限(字节,默认 64 MB);按 mtime 从最旧的删起。
|
|
428
|
+
# decisionsTotalMaxBytes: 67108864
|
|
411
429
|
#
|
|
430
|
+
# 单个分片的体积上限(字节)。到顶轮转成 <分片>.1(只留一代),
|
|
431
|
+
# 因此磁盘占用最多约两倍单文件上限。
|
|
412
432
|
# decisionsMaxBytes: 8388608 # 8 MB
|
|
433
|
+
#
|
|
434
|
+
# 单条内容的上限(字符)。超出时依次裁剪:工具参数预览 → 最近对话摘要 →
|
|
435
|
+
# 整个 state;只有连「问题 + 回答」都装不下时才退回只留元数据。
|
|
436
|
+
# decisionsMaxContentChars: 4000
|
|
437
|
+
#
|
|
438
|
+
# 升级时旧 decisions.jsonl(与 .1)会被一次性迁移进 logs/date/ 并改名
|
|
439
|
+
# .migrated 保留;迁移失败时旧文件仍可读,下次启动重试。
|
|
413
440
|
|
|
414
441
|
# ============================================================================
|
|
415
442
|
# 审批卡正文可读化(DEC-043)——审批卡上那块命令怎么显示
|
package/docs/releasing.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# npm 发布
|
|
2
2
|
|
|
3
|
-
发布目标:`@leonhardthust/dsh-decision-engine`,当前版本 `1.
|
|
3
|
+
发布目标:`@leonhardthust/dsh-decision-engine`,当前版本 `1.10.0`,公开包。
|
|
4
4
|
|
|
5
5
|
本分支基于 `zuosus/dsh-decision-engine` 的 MIT 代码,保留原作者与许可证;npm scope、源码仓库、bundle 引用和浏览器主模块 / charts chunk 标识已同步为本分支身份。内部 API、样式标识和用户数据目录保留旧名称以兼容已有配置。不要同时启用原包与本 scoped fork,它们提供相同的服务与页面。
|
|
6
6
|
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
- `.github/workflows/ci.yml`:main push、PR、手动运行或发布工作流复用;Ubuntu 24.04 + Node.js 24 + Vite+ 1.6.0。执行 frozen install、完整测试与接线、隔离情景、实际打包和 tarball 检查。失败不会被忽略。
|
|
10
10
|
- `.github/workflows/publish.yml`:每次 `main` push 自动检测版本。先比较整个 push 的 `before` 与当前 manifest,拒绝错误包名、非法或倒退版本;再只读查询 npmjs。当前版本已上传则跳过;当前版本高于 npmjs latest 且未上传则进入完整验证及发布。多提交 push 比较整个 push 前后,不仅比较 HEAD 的父提交。
|
|
11
11
|
- 后续发版只需修改 `package.json` 版本并提交到 main;无需创建 tag 或手动点运行。发布依赖检测和本次提交的完整 CI 均成功,不跳过测试。稳定版本发布到 `latest`,预发布版本自动进入 `next`。
|
|
12
|
-
- 当前 `1.
|
|
12
|
+
- 当前 `1.10.0` 包含:安全档位改名与事实修正(不问/少问/默认/多问)、`think_mode` 作用域澄清与 provider 能力位、决策日志按日期/会话/工作区分文件与保留清理、裁决列短词与结果着色、本地未知副作用不再单独触发回退模型。设计记录见 `DECISIONS.md` 的 DEC-062 ~ DEC-066。
|
|
13
13
|
- checkout 与 setup-vp Action 固定到已核对的 commit SHA;不通过 `pull_request_target` 运行不可信 PR。
|
|
14
14
|
- 验证任务只有 `contents: read`;只有发布 job 有 `id-token: write`。发布 step 只使用 OIDC(trusted publishing),不再读取任何 npm token secret。代码 checkout 不保留 Git 凭据。此工作流不会自动修改版本、提交源码或推送 Git。
|
|
15
15
|
|
|
@@ -58,7 +58,7 @@ Windows 全量测试最近仍有 3 个既有 POSIX 文件权限断言失败;
|
|
|
58
58
|
授权及完整验证均满足后:
|
|
59
59
|
|
|
60
60
|
```powershell
|
|
61
|
-
npm publish ./release-artifacts/leonhardthust-dsh-decision-engine-1.
|
|
61
|
+
npm publish ./release-artifacts/leonhardthust-dsh-decision-engine-1.10.0.tgz --registry "https://registry.npmjs.org/" --access public --tag latest
|
|
62
62
|
npm view @leonhardthust/dsh-decision-engine version --registry "https://registry.npmjs.org/" --json
|
|
63
63
|
```
|
|
64
64
|
|
|
@@ -66,4 +66,4 @@ npm view @leonhardthust/dsh-decision-engine version --registry "https://registry
|
|
|
66
66
|
|
|
67
67
|
## 安装
|
|
68
68
|
|
|
69
|
-
DSH 插件管理中使用 `@leonhardthust/dsh-decision-engine` 或指定 `@leonhardthust/dsh-decision-engine@1.
|
|
69
|
+
DSH 插件管理中使用 `@leonhardthust/dsh-decision-engine` 或指定 `@leonhardthust/dsh-decision-engine@1.10.0`。安装和启用是另外的用户动作,发布工作流不会修改本机 DSH profile。
|