dsh-math-calculator 2.1.1 → 2.2.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.
Files changed (44) hide show
  1. package/CHANGELOG.md +921 -0
  2. package/README.md +64 -50
  3. package/dsh.plugin.json +2 -2
  4. package/lib/__wtest.txt +1 -0
  5. package/lib/awareness.js +69 -20
  6. package/lib/format.js +522 -13
  7. package/lib/formula-library-em.js +428 -0
  8. package/lib/formulas.js +28 -1
  9. package/lib/guards.js +653 -0
  10. package/lib/help.js +509 -0
  11. package/lib/index.js +1357 -212
  12. package/lib/ops/shared.js +547 -6
  13. package/lib/ops/units-op.js +116 -10
  14. package/lib/ops/workspace-op.js +10 -0
  15. package/lib/playbook.js +32 -7
  16. package/lib/types/format.d.ts +31 -1
  17. package/lib/types/formula-library-em.d.ts +28 -0
  18. package/lib/types/formulas.d.ts +2 -0
  19. package/lib/types/guards.d.ts +255 -0
  20. package/lib/types/help.d.ts +70 -0
  21. package/lib/types/index.d.ts +34 -1
  22. package/lib/types/ops/shared.d.ts +87 -3
  23. package/lib/types/playbook.d.ts +28 -0
  24. package/lib/types/units-data.d.ts +253 -0
  25. package/lib/types/units.d.ts +54 -4
  26. package/lib/types/workspace.d.ts +50 -0
  27. package/lib/units-data.js +1037 -0
  28. package/lib/units.js +82 -117
  29. package/lib/workspace.js +54 -0
  30. package/package.json +1 -1
  31. package/src/awareness.ts +69 -20
  32. package/src/format.ts +520 -12
  33. package/src/formula-library-em.ts +435 -0
  34. package/src/formulas.ts +35 -4
  35. package/src/guards.ts +673 -0
  36. package/src/help.ts +543 -0
  37. package/src/index.ts +1492 -213
  38. package/src/ops/shared.ts +589 -9
  39. package/src/ops/units-op.ts +125 -9
  40. package/src/ops/workspace-op.ts +10 -0
  41. package/src/playbook.ts +32 -7
  42. package/src/units-data.ts +1128 -0
  43. package/src/units.ts +149 -130
  44. package/src/workspace.ts +65 -0
package/README.md CHANGED
@@ -13,14 +13,28 @@ DSH(DeepSeek Harness)原生的**高精度数学计算器**插件,附带可
13
13
  |---|---|---|
14
14
  | 高精度计算 | 心算 / bash 拼 | BigNumber 64 位,整数输出完整定点 |
15
15
  | 符号运算 | 查表或近似 | 求导/积分/化简/展开,符号精确 |
16
- | 单位换算 | 自己查系数 | 73 个单位,温度按仿射换算 |
17
- | 写公式 | 每次都重推 | 404 条公式库,参数全可覆盖 |
16
+ | 单位换算 | 自己查系数 | 462 个单位 / 32 个量纲,温度按仿射换算 |
17
+ | 写公式 | 每次都重推 | 442 条公式库,参数全可覆盖 |
18
18
  | 改物理常数 | 无法验证 | 自动推导派生量 + 全公式偏差 |
19
19
  | 多项目数据 | 互相污染 | 工作区隔离,各持一套常数表与公式表 |
20
20
  | *(可选)* 架空世界设定 | 凭感觉 | 输入星球参数 → 出重力/气候/地形上限 |
21
21
 
22
22
  ---
23
23
 
24
+ ## 文档
25
+
26
+ | 文档 | 内容 |
27
+ |---|---|
28
+ | 本文件 | 速查:装什么、有多少能力、命令怎么用 |
29
+ | [**功能详解**](docs/功能详解.md) | 每个 operation 怎么用、结果怎么读、什么时候会被拒绝、能力边界 |
30
+ | [ADR-0002](../docs/adr/0002-plugin-ai-facing.md) | 面向 AI 的三层提示设计 |
31
+ | [docs/formula-authoring.md](../docs/formula-authoring.md) | 怎么加一条公式 |
32
+ | [docs/ui-removed.md](docs/ui-removed.md) | 界面为什么被移除 |
33
+ | [docs/实测报告1106评审.md](docs/实测报告1106评审.md) | 一份实测报告的逐条评审:哪些是真缺陷、哪些判断有误 |
34
+ | [docs/联网联动方案与价值验证.md](docs/联网联动方案与价值验证.md) | 联网联动怎么做、值不值得做(**方案稿,未实现**) |
35
+
36
+ ---
37
+
24
38
  ## 安装
25
39
 
26
40
  本插件是标准 DSH bundle(`dsh.bundle.patch` → `cordis.patch.yml`)。
@@ -47,7 +61,7 @@ npm run build
47
61
 
48
62
  ```powershell
49
63
  npm pack
50
- & "...\dsh.cmd" plugin --profile desktop add ./dsh-math-calculator-2.1.1.tgz
64
+ & "...\dsh.cmd" plugin --profile desktop add ./dsh-math-calculator-2.2.0.tgz
51
65
  ```
52
66
 
53
67
  ---
@@ -81,7 +95,7 @@ npm pack
81
95
 
82
96
  | operation | 说明 | 示例 |
83
97
  |---|---|---|
84
- | `formula` | 调用 404 条公式之一 | `{"formula":"escape_velocity","overrides":{"M":5.97e24,"r":6371000},"operation":"formula"}` |
98
+ | `formula` | 调用 442 条公式之一 | `{"formula":"escape_velocity","overrides":{"M":5.97e24,"r":6371000},"operation":"formula"}` |
85
99
  | `formulas` | 检索公式库 | `{"query":"重力","operation":"formulas"}` |
86
100
  | `world` | 星球参数 → 体感画像 | `{"world":{"planetRadius":1.4,"rotationHours":40},"operation":"world"}` |
87
101
  | `terrain` | 局地气候(配合 world) | `{"world":{"planetMass":2},"terrain":{"kind":"coastal","latitudeDeg":58},"operation":"world"}` |
@@ -89,10 +103,10 @@ npm pack
89
103
  | `quantities` | 哪些物理量该跟着变 | `{"constants":{"G":1.3e-10},"constantName":"G","operation":"quantities"}` |
90
104
  | `impact` | 改常数 → 全公式偏差 | `{"constants":{"c":1.5e8},"operation":"impact"}` |
91
105
  | `feasibility` | 设定一致性校验 | `{"world":{"planetMass":2},"claims":{"creatureHeight":50},"operation":"feasibility"}` |
92
- | `bodies` | 天体目录与类型学(26 具名天体 + 32 类型) | `{"bodyName":"mars"}` / `{"bodyType":"中子星"}` / `{"bodyConstant":"alpha_fs","bodyFactor":2}` |
93
- | `balance` | 收支盘点(多项一起看,给最短板) | `{"balance":{"grain":{"demand":2.7e6,"supply":3.1e6}}}` |
94
- | `units` | 单位换算(73 个单位,含中文古制) | `{"unitValue":30,"unitFrom":"里","unitTo":"km"}` |
95
- | `custom` | 自创常数/新物理量 | `{"operation":"custom","action2":"add"}` |
106
+ | `bodies` | 天体目录与类型学(26 具名天体 + 32 类型) | `{"bodyName":"mars"}` / `{"bodyType":"中子星"}` / `{"bodyConstant":"alpha_fs","bodyFactor":2}` |
107
+ | `balance` | 收支盘点(多项一起看,给最短板) | `{"balance":{"grain":{"demand":2.7e6,"supply":3.1e6}}}` |
108
+ | `units` | 单位换算(462 个单位 / 32 个量纲,含中外古制与 SI 全量纲) | `{"unitValue":30,"unitFrom":"里","unitTo":"km"}` |
109
+ | `custom` | 自创常数/新物理量 | `{"operation":"custom","action2":"add"}` |
96
110
 
97
111
  ### 恒星结构(S3)
98
112
 
@@ -130,44 +144,44 @@ npm pack
130
144
  后端接口一条没删,恢复界面只需重建前端(见 `docs/ui-removed.md` 第七节)。
131
145
  所有修改都落到**当前工作区**,不同世界观互不影响。
132
146
 
133
- ### 成本控制:schema 瘦身 / 缓存 / 批量
134
-
135
- 工具定义是**每轮请求都重复计费**的固定成本,所以做了三件事:
136
-
137
- | 措施 | 效果 |
138
- |---|---|
139
- | schema 瘦身(详细字段挪进 `help`) | 7789 → 6140 字符,约省 21%(≈1100 token/轮) |
140
- | 结果缓存(键含常数与工作区指纹) | 同一式子重复调用不再重算;改常数后**必然失效** |
141
- | 批量求值 `expressions` | 一次算最多 100 条,逐条独立报错 |
142
-
143
- 三条都是纯收益、不改语义:参数一个没删、缓存键漏一项就会算错(有测试守)。
144
-
145
- ### 显示精度:默认 8 位小数,可调、可固化
146
-
147
- 计算精度与显示精度**分开**:
148
-
149
- | 参数 | 语义 | 默认 |
150
- |---|---|---|
151
- | `precision` | **计算**精度(BigNumber 有效位) | 64,不要为好看调低(`(10^20+1)-(10^20)` 在 20 位时算出 0) |
152
- | `displayPrecision` | **显示**精度:**小数点后几位** | 8 |
153
-
154
- - 整数永远完整:`10^20+5` 仍是 21 位,不受显示精度影响
155
- - 截断会丢精度时主动提醒:`0.00000123456789` 在 8 位下相对误差 0.37%,会附上「请传 displayPrecision:16」
156
- - 固化一次即全局生效:`{"operation":"workspace","action2":"set","displayPrecision":8}`
157
-
158
- ### 计算需求分流:心算 / 强制用工具
159
-
160
- 预警器在外部分三档(不调用 LLM,成本近零):
161
-
162
- | 档 | 判据 | 处置 |
163
- |---|---|---|
164
- | `simple` | 短、数字少、纯四则 | 不提醒(想用工具仍可用) |
165
- | `forced` | 数据/汇总/金融/物理推演信号 | 提醒(这类心算易错且错得看不出来) |
166
- | `fuzzy` | 其它数学需求 | 按阈值提醒 |
167
-
168
- 物理推演类**一律不算 simple**——`1.5 倍重力下山能长多高` 心算给「大概 3000 米」,
169
- 工具给 3262 米并提示「已接近花岗岩极限」。差别不在精度,在于知不知道这个数意味着什么。
170
-
147
+ ### 成本控制:schema 瘦身 / 缓存 / 批量
148
+
149
+ 工具定义是**每轮请求都重复计费**的固定成本,所以做了三件事:
150
+
151
+ | 措施 | 效果 |
152
+ |---|---|
153
+ | schema 瘦身(详细字段挪进 `help`) | 7789 → 6140 字符,约省 21%(≈1100 token/轮) |
154
+ | 结果缓存(键含常数与工作区指纹) | 同一式子重复调用不再重算;改常数后**必然失效** |
155
+ | 批量求值 `expressions` | 一次算最多 100 条,逐条独立报错 |
156
+
157
+ 三条都是纯收益、不改语义:参数一个没删、缓存键漏一项就会算错(有测试守)。
158
+
159
+ ### 显示精度:默认 8 位小数,可调、可固化
160
+
161
+ 计算精度与显示精度**分开**:
162
+
163
+ | 参数 | 语义 | 默认 |
164
+ |---|---|---|
165
+ | `precision` | **计算**精度(BigNumber 有效位) | 64,不要为好看调低(`(10^20+1)-(10^20)` 在 20 位时算出 0) |
166
+ | `displayPrecision` | **显示**精度:**小数点后几位** | 8 |
167
+
168
+ - 整数永远完整:`10^20+5` 仍是 21 位,不受显示精度影响
169
+ - 截断会丢精度时主动提醒:`0.00000123456789` 在 8 位下相对误差 0.37%,会附上「请传 displayPrecision:16」
170
+ - 固化一次即全局生效:`{"operation":"workspace","action2":"set","displayPrecision":8}`
171
+
172
+ ### 计算需求分流:心算 / 强制用工具
173
+
174
+ 预警器在外部分三档(不调用 LLM,成本近零):
175
+
176
+ | 档 | 判据 | 处置 |
177
+ |---|---|---|
178
+ | `simple` | 短、数字少、纯四则 | 不提醒(想用工具仍可用) |
179
+ | `forced` | 数据/汇总/金融/物理推演信号 | 提醒(这类心算易错且错得看不出来) |
180
+ | `fuzzy` | 其它数学需求 | 按阈值提醒 |
181
+
182
+ 物理推演类**一律不算 simple**——`1.5 倍重力下山能长多高` 心算给「大概 3000 米」,
183
+ 工具给 3262 米并提示「已接近花岗岩极限」。差别不在精度,在于知不知道这个数意味着什么。
184
+
171
185
  ### 面向 AI 的设计
172
186
 
173
187
  插件对 AI 有三层提示(详见 [ADR-0002](../docs/adr/0002-plugin-ai-facing.md)):
@@ -183,7 +197,7 @@ npm pack
183
197
 
184
198
  ### 公式库扩展(全局包 + 工作区临时)
185
199
 
186
- 404 条内置公式不够时,不必改代码:
200
+ 442 条内置公式不够时,不必改代码:
187
201
 
188
202
  | 级别 | 存放 | 范围 | 用法 |
189
203
  |---|---|---|---|
@@ -223,7 +237,7 @@ npm pack
223
237
  {"operation":"formulas","query":"freq:low"} // 低频:量子/核物理/相对论/金融
224
238
  ```
225
239
 
226
- 当前分布:高频 144 / 中频 228 / 低频 32(共 404 条)。
240
+ 当前分布:高频 75 / 中频 55 / 低频 4 / 未标注 308(共 442 条)。
227
241
 
228
242
  ### 基础运算扩展
229
243
 
@@ -338,7 +352,7 @@ npm pack
338
352
  {"operation":"quantities","constants":{"G":1.3e-10},"constantName":"G"}
339
353
  // → 普朗克长度 ∝√G、玻尔半径与 G 无关、表面重力 ∝G
340
354
 
341
- // 4. 看全部 404 条公式相对现实的偏差
355
+ // 4. 看全部 442 条公式相对现实的偏差
342
356
  {"operation":"impact","constants":{"c":1.5e8}}
343
357
  // → 11 条受影响:质能 -75%、黑体辐射 +300%、维恩位移 -50%
344
358
 
@@ -475,7 +489,7 @@ node run-all-tests.mjs # 58 套 / 2321 项
475
489
  src/
476
490
  ├── index.ts 插件入口 + 工具定义 + operation 分发(2032 行)
477
491
  ├── ops/ 8 个较大的 operation 实现
478
- ├── formula-library*.ts 404 条公式(8 个批次,含势力运行与通用计算批次)
492
+ ├── formula-library*.ts 442 条公式(含势力运行、通用计算与电/光/核/化学计量批次)
479
493
  ├── constants-graph.ts 43 个常数的依赖图(23 基础旋钮 / 20 派生)
480
494
  ├── quantities.ts 量纲分析与缩放指数
481
495
  ├── feasibility.ts 11 条设定约束
package/dsh.plugin.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "id": "dsh-math-calculator",
3
- "version": "2.1.1",
3
+ "version": "2.2.0",
4
4
  "main": "lib/index.js",
5
- "description": "DSH 原生数学与架空世界推演插件:高精度计算、342 条公式、常数与星球推演。",
5
+ "description": "DSH 原生数学与架空世界推演插件:高精度计算、404 条公式、常数与星球推演。",
6
6
  "engines": {
7
7
  "dsh": ">=0.1.1-rc.2 <0.4.0"
8
8
  },
@@ -0,0 +1 @@
1
+ x
package/lib/awareness.js CHANGED
@@ -54,19 +54,48 @@ export function getPromptMode() {
54
54
  * 不能砍 —— 它们省下的重算远多于自身开销。
55
55
  */
56
56
  export const TOOL_DESCRIPTION = [
57
- '本地数学与物理推演引擎(BigNumber 64 位 + 符号代数 + 架空世界推演)。',
58
- '',
57
+ '本地数学与物理推演引擎(BigNumber 64 位 + 符号代数)。',
59
58
  '⚠️ 数值计算必须调用本工具:不要心算、不要用 bash 拼凑算术。',
60
- '触发场景:算术/三角、解方程、微积分、线代、统计、单位换算、公式求值、',
61
- '改常数看后果、推演星球/恒星/卫星/生命、势力收支。',
59
+ '触发:算术/三角、解方程、微积分、线代、统计、单位换算、公式求值、推演。',
60
+ '',
61
+ /**
62
+ * ## 为什么这条要放在正文最前
63
+ *
64
+ * 实测反馈(1107 报告 P0-1)的四起千倍级事故,共同形式都是
65
+ * **全部转成裸数字再算**:
66
+ *
67
+ * ```
68
+ * 0.907/(10*745.7/0.475/3.6/29.564)*60 ← 745.7 是瓦还是千瓦?
69
+ * 0.907/(10*0.7457/0.475/3.6/29.564)*60 ← 差 1000 倍,两条都宣告成功
70
+ * ```
71
+ *
72
+ * 工具没法从裸数字推断量纲,但**带单位时它自己会发现不对**:
73
+ * `10 hp + 3 kg` 直接报 unit_mismatch。
74
+ *
75
+ * 报告原话:「help 里确实有 `5 cm to inch`,但被埋在第 4 个例子,
76
+ * 且没有任何一句说『所有物理量计算都带单位』。」
77
+ */
78
+ '物理量一律带单位写(如 (10 hp/0.475) to kW):量纲错误当场拦下;',
79
+ '裸数字无从判断 745.7 是瓦还是千瓦,差 1000 倍也可能宣告成功。',
62
80
  '',
63
- 'operation 见参数 enum(30 个);不确定用 help。选法:一条式子用 evaluate,',
64
- '数据用 stats/dist,改设定后用 world/derivation。',
81
+ /**
82
+ * ## 为什么要把「查 help」写成一个明确的两步动作
83
+ *
84
+ * 旧版是一整块 5900 字符的能力清单,每次调用都付全量成本 ——
85
+ * 算一条 1/3 也要读 3039 字符的 world 字段表。现在改成目录:
86
+ *
87
+ * ```
88
+ * 目录 1731 字符(各节名 + 一句话简介)
89
+ * 单节 200—1900 字符,只在你真用那一节时才取
90
+ * ```
91
+ *
92
+ * 关键是**必须告诉 AI 这个两步动作存在**,否则它会以为 help 只给目录、
93
+ * 或者干脆不去查 —— 那功能就等于不存在。
94
+ */
95
+ '某功能不确定怎么用 → help 看目录(12 节带简介),再 helpTopic:"world" 取该节全文。',
65
96
  '',
66
- '读输出约定:',
67
- ' · [精确]/[标度]/[量级]/[仅方向] 是可信度标签,引用时保留;',
68
- ' · 【跨模块一致性】✓/⚠/✗,看到 ✗ 先修正设定;',
69
- ' · 【模型可信度】标出哪些数只是地球标定,常数偏离现实时会失真。',
97
+ '读输出:[精确]/[标度]/[量级]/[仅方向] 是可信度标签,引用时保留;',
98
+ '【跨模块一致性】✗ 先修正设定;【模型可信度】标出哪些数是地球标定。',
70
99
  '',
71
100
  '精度分两层:precision(计算,默认 64,调低会算错大数)不要为好看而动;',
72
101
  'displayPrecision(显示,**小数点后几位**,默认 8)只截小数、整数永远完整。',
@@ -120,24 +149,44 @@ export function buildSystemPromptSection() {
120
149
  catch {
121
150
  /* 读不到就按 0 */
122
151
  }
152
+ /**
153
+ * brief 档:默认档,每轮下发。
154
+ *
155
+ * ## 分区按「频率 × 重要度」排
156
+ *
157
+ * 原来这一段是 817 字符,其中「能力清单」占 200 字符(罗列 12 类能力),
158
+ * 而最常问的「该用哪个 operation」一句都没写 —— 比例完全反了。
159
+ *
160
+ * 现在的取舍:
161
+ * ① **行为约束**放最前(40 字符)—— 它决定「调不调」,最重要
162
+ * ② **选哪个 operation**(70 字符)—— 高频且原先缺失
163
+ * ③ **可信度标签**(60 字符)—— 决定「数能不能引用」,最重要之一
164
+ * ④ **精度两层**(50 字符)—— 中频
165
+ * ⑤ **世界推演分工**(80 字符)—— 低频,压到极限
166
+ * ⑥ **能力全清单**不再列出 —— 已在 schema 的 enum 与 help 里,
167
+ * 同一份信息付两次钱是浪费(这条有实测依据:省 21% 定义长度)
168
+ */
123
169
  if (promptMode === 'brief') {
124
170
  return [
125
171
  '## 数学计算工具(math_execute)',
126
172
  '',
127
- '涉及任何数值计算时**必须**调用 math_execute,不要心算、不要用 bash 拼凑。',
173
+ '涉及数值计算时**必须**调用,不要心算、不要用 bash 拼凑。',
128
174
  '',
129
- '能算:高精度求值、解方程、符号微积分、矩阵/特征值/秩/奇异值、统计与分布、回归、',
130
- '微分方程、' + FORMULAS.length + ' 条自然科学公式、物理常数推演、星球/天空/恒星/卫星/生命推演、',
131
- '宏观文明极限(能量/材料/交通/技术树)、观测者体感、逆推校准、混沌概率云。',
175
+ '**选哪个 operation**:一条式子 → `evaluate`(多条用 `expressions` 批量,可带 label);',
176
+ '解方程 → `solve`;数据 → `stats`/`dist`/`regression`;公式 → `formula`(' + FORMULAS.length + ' 条,参数可覆盖);',
177
+ '单位 → `units`;改设定 → `world`/`constants`/`derivation`;不确定 → `help`。',
132
178
  '',
133
- '读输出:',
134
- '· [精确]/[标度]/[量级]/[仅方向] 是可信度标签——引用结论时请保留;',
135
- '· 【跨模块一致性】的 ✗ 表示设定自相矛盾,先修正再写;',
136
- '· 【模型可信度】标出哪些数字只是地球标定。',
179
+ '**读输出的约定**:',
180
+ '· `[精确]/[标度]/[量级]/[仅方向]` 是可信度标签,引用时保留,别当装饰;',
181
+ '· 【跨模块一致性】✗ 表示设定自相矛盾,先修正再写;',
182
+ '· 【模型可信度】标出哪些数只是地球标定 —— 常数偏离现实时它会失真。',
137
183
  '',
138
- buildBriefPlaybook({ changedConstants: changedConstants, customConstants: customConstantCount }),
184
+ '**精度分两层**:`precision`(计算,默认 64)调低会算错大数,不要为好看动它;',
185
+ '`displayPrecision`(**小数点后几位**,默认 8)只截小数,整数永远完整。',
186
+ '要更多位就单次传,或 `{operation:"workspace", action2:"set", displayPrecision:N}` 固化。',
139
187
  '',
140
- '不确定能力边界时先调 operation="help"。' + changedNote + tableNote,
188
+ buildBriefPlaybook({ changedConstants: changedConstants, customConstants: customConstantCount })
189
+ + changedNote + tableNote,
141
190
  ].join('\n');
142
191
  }
143
192
  // full 档:完整清单