dsh-math-calculator 0.0.0-stage → 2.0.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 (254) hide show
  1. package/CHANGELOG.md +221 -0
  2. package/LICENSE +21 -0
  3. package/README.md +454 -3
  4. package/cordis.patch.yml +7 -0
  5. package/dsh.plugin.json +8 -0
  6. package/lib/ai-brief.js +119 -0
  7. package/lib/anchor-solve.js +217 -0
  8. package/lib/api.js +798 -0
  9. package/lib/awareness.js +219 -0
  10. package/lib/back-solve.js +232 -0
  11. package/lib/balance.js +154 -0
  12. package/lib/civilization.js +329 -0
  13. package/lib/climate.js +388 -0
  14. package/lib/compute-budget.js +173 -0
  15. package/lib/consequences.js +342 -0
  16. package/lib/constants-core.js +241 -0
  17. package/lib/constants-graph.js +692 -0
  18. package/lib/custom-constants.js +320 -0
  19. package/lib/dead-universe.js +288 -0
  20. package/lib/derivation-log.js +186 -0
  21. package/lib/derivation-stack.js +471 -0
  22. package/lib/detector.js +237 -0
  23. package/lib/ecosystem.js +231 -0
  24. package/lib/fantasy-layer.js +213 -0
  25. package/lib/feasibility.js +386 -0
  26. package/lib/flip-claims.js +93 -0
  27. package/lib/flip.js +166 -0
  28. package/lib/format.js +217 -0
  29. package/lib/formula-bridge.js +78 -0
  30. package/lib/formula-builtins.js +110 -0
  31. package/lib/formula-library-basic.js +712 -0
  32. package/lib/formula-library-ext.js +1036 -0
  33. package/lib/formula-library-perception.js +593 -0
  34. package/lib/formula-library-power.js +276 -0
  35. package/lib/formula-library-story.js +487 -0
  36. package/lib/formula-library-story2.js +420 -0
  37. package/lib/formula-library.js +1333 -0
  38. package/lib/formula-pack.js +173 -0
  39. package/lib/formula-table.js +221 -0
  40. package/lib/formulas.js +475 -0
  41. package/lib/graph-layout.js +172 -0
  42. package/lib/graph-render.js +136 -0
  43. package/lib/heatmap.js +93 -0
  44. package/lib/impact.js +326 -0
  45. package/lib/index.js +2408 -0
  46. package/lib/integration.js +145 -0
  47. package/lib/life.js +172 -0
  48. package/lib/moons.js +221 -0
  49. package/lib/numeric.js +282 -0
  50. package/lib/observer.js +187 -0
  51. package/lib/ode.js +320 -0
  52. package/lib/ops/balance-op.js +141 -0
  53. package/lib/ops/constants-op.js +278 -0
  54. package/lib/ops/custom-op.js +191 -0
  55. package/lib/ops/derivation-op.js +710 -0
  56. package/lib/ops/feasibility-op.js +160 -0
  57. package/lib/ops/formula-table-op.js +261 -0
  58. package/lib/ops/impact-op.js +150 -0
  59. package/lib/ops/ode-op.js +113 -0
  60. package/lib/ops/quantities-op.js +176 -0
  61. package/lib/ops/shared.js +168 -0
  62. package/lib/ops/units-op.js +227 -0
  63. package/lib/ops/workspace-op.js +341 -0
  64. package/lib/ops/world-op.js +301 -0
  65. package/lib/pipeline.js +304 -0
  66. package/lib/playbook.js +352 -0
  67. package/lib/provenance-graph.js +262 -0
  68. package/lib/provenance.js +152 -0
  69. package/lib/quantities.js +530 -0
  70. package/lib/sky.js +348 -0
  71. package/lib/star-catalog.js +120 -0
  72. package/lib/stats.js +373 -0
  73. package/lib/stellar.js +175 -0
  74. package/lib/summary.js +225 -0
  75. package/lib/symbolic.js +264 -0
  76. package/lib/symbols.js +190 -0
  77. package/lib/systems.js +280 -0
  78. package/lib/taxonomy.js +278 -0
  79. package/lib/terrain.js +350 -0
  80. package/lib/timeline.js +244 -0
  81. package/lib/types/ai-brief.d.ts +72 -0
  82. package/lib/types/anchor-solve.d.ts +67 -0
  83. package/lib/types/api.d.ts +75 -0
  84. package/lib/types/awareness.d.ts +53 -0
  85. package/lib/types/back-solve.d.ts +70 -0
  86. package/lib/types/balance.d.ts +94 -0
  87. package/lib/types/civilization.d.ts +98 -0
  88. package/lib/types/client.d.ts +353 -0
  89. package/lib/types/climate.d.ts +256 -0
  90. package/lib/types/compute-budget.d.ts +103 -0
  91. package/lib/types/consequences.d.ts +49 -0
  92. package/lib/types/constants-core.d.ts +125 -0
  93. package/lib/types/constants-graph.d.ts +122 -0
  94. package/lib/types/custom-constants.d.ts +136 -0
  95. package/lib/types/dead-universe.d.ts +80 -0
  96. package/lib/types/derivation-log.d.ts +110 -0
  97. package/lib/types/derivation-stack.d.ts +191 -0
  98. package/lib/types/detector.d.ts +87 -0
  99. package/lib/types/ecosystem.d.ts +140 -0
  100. package/lib/types/fantasy-layer.d.ts +145 -0
  101. package/lib/types/feasibility.d.ts +136 -0
  102. package/lib/types/flip-claims.d.ts +51 -0
  103. package/lib/types/flip.d.ts +81 -0
  104. package/lib/types/format.d.ts +41 -0
  105. package/lib/types/formula-bridge.d.ts +51 -0
  106. package/lib/types/formula-builtins.d.ts +29 -0
  107. package/lib/types/formula-library-basic.d.ts +31 -0
  108. package/lib/types/formula-library-ext.d.ts +18 -0
  109. package/lib/types/formula-library-perception.d.ts +25 -0
  110. package/lib/types/formula-library-power.d.ts +37 -0
  111. package/lib/types/formula-library-story.d.ts +19 -0
  112. package/lib/types/formula-library-story2.d.ts +16 -0
  113. package/lib/types/formula-library.d.ts +65 -0
  114. package/lib/types/formula-pack.d.ts +65 -0
  115. package/lib/types/formula-table.d.ts +96 -0
  116. package/lib/types/formulas.d.ts +100 -0
  117. package/lib/types/graph-layout.d.ts +82 -0
  118. package/lib/types/graph-render.d.ts +68 -0
  119. package/lib/types/heatmap.d.ts +91 -0
  120. package/lib/types/impact.d.ts +89 -0
  121. package/lib/types/index.d.ts +95 -0
  122. package/lib/types/integration.d.ts +69 -0
  123. package/lib/types/life.d.ts +91 -0
  124. package/lib/types/moons.d.ts +103 -0
  125. package/lib/types/numeric.d.ts +61 -0
  126. package/lib/types/observer.d.ts +104 -0
  127. package/lib/types/ode.d.ts +104 -0
  128. package/lib/types/ops/balance-op.d.ts +26 -0
  129. package/lib/types/ops/constants-op.d.ts +16 -0
  130. package/lib/types/ops/custom-op.d.ts +19 -0
  131. package/lib/types/ops/derivation-op.d.ts +31 -0
  132. package/lib/types/ops/feasibility-op.d.ts +19 -0
  133. package/lib/types/ops/formula-table-op.d.ts +16 -0
  134. package/lib/types/ops/impact-op.d.ts +15 -0
  135. package/lib/types/ops/ode-op.d.ts +16 -0
  136. package/lib/types/ops/quantities-op.d.ts +22 -0
  137. package/lib/types/ops/shared.d.ts +334 -0
  138. package/lib/types/ops/units-op.d.ts +31 -0
  139. package/lib/types/ops/workspace-op.d.ts +20 -0
  140. package/lib/types/ops/world-op.d.ts +15 -0
  141. package/lib/types/pipeline.d.ts +69 -0
  142. package/lib/types/playbook.d.ts +157 -0
  143. package/lib/types/provenance-graph.d.ts +101 -0
  144. package/lib/types/provenance.d.ts +41 -0
  145. package/lib/types/quantities.d.ts +117 -0
  146. package/lib/types/sky.d.ts +137 -0
  147. package/lib/types/star-catalog.d.ts +57 -0
  148. package/lib/types/stats.d.ts +95 -0
  149. package/lib/types/stellar.d.ts +69 -0
  150. package/lib/types/summary.d.ts +75 -0
  151. package/lib/types/symbolic.d.ts +58 -0
  152. package/lib/types/symbols.d.ts +67 -0
  153. package/lib/types/systems.d.ts +41 -0
  154. package/lib/types/taxonomy.d.ts +75 -0
  155. package/lib/types/terrain.d.ts +95 -0
  156. package/lib/types/timeline.d.ts +156 -0
  157. package/lib/types/units.d.ts +115 -0
  158. package/lib/types/universe-ops.d.ts +143 -0
  159. package/lib/types/whitepaper.d.ts +106 -0
  160. package/lib/types/workspace.d.ts +315 -0
  161. package/lib/types/world-params.d.ts +111 -0
  162. package/lib/types/world-validation.d.ts +74 -0
  163. package/lib/types/world.d.ts +255 -0
  164. package/lib/units.js +294 -0
  165. package/lib/universe-ops.js +209 -0
  166. package/lib/whitepaper.js +219 -0
  167. package/lib/workspace.js +741 -0
  168. package/lib/world-params.js +369 -0
  169. package/lib/world-validation.js +296 -0
  170. package/lib/world.js +608 -0
  171. package/package.json +94 -4
  172. package/src/ai-brief.ts +141 -0
  173. package/src/algebrite.d.ts +19 -0
  174. package/src/anchor-solve.ts +262 -0
  175. package/src/api.ts +885 -0
  176. package/src/awareness.ts +240 -0
  177. package/src/back-solve.ts +274 -0
  178. package/src/balance.ts +205 -0
  179. package/src/civilization.ts +385 -0
  180. package/src/climate.ts +586 -0
  181. package/src/compute-budget.ts +204 -0
  182. package/src/consequences.ts +401 -0
  183. package/src/constants-core.ts +336 -0
  184. package/src/constants-graph.ts +772 -0
  185. package/src/custom-constants.ts +389 -0
  186. package/src/dead-universe.ts +328 -0
  187. package/src/derivation-log.ts +257 -0
  188. package/src/derivation-stack.ts +600 -0
  189. package/src/detector.ts +296 -0
  190. package/src/ecosystem.ts +271 -0
  191. package/src/fantasy-layer.ts +295 -0
  192. package/src/feasibility.ts +519 -0
  193. package/src/flip-claims.ts +119 -0
  194. package/src/flip.ts +210 -0
  195. package/src/format.ts +203 -0
  196. package/src/formula-bridge.ts +92 -0
  197. package/src/formula-builtins.ts +108 -0
  198. package/src/formula-library-basic.ts +747 -0
  199. package/src/formula-library-ext.ts +1048 -0
  200. package/src/formula-library-perception.ts +604 -0
  201. package/src/formula-library-power.ts +297 -0
  202. package/src/formula-library-story.ts +496 -0
  203. package/src/formula-library-story2.ts +428 -0
  204. package/src/formula-library.ts +1396 -0
  205. package/src/formula-pack.ts +189 -0
  206. package/src/formula-table.ts +277 -0
  207. package/src/formulas.ts +494 -0
  208. package/src/graph-layout.ts +209 -0
  209. package/src/graph-render.ts +158 -0
  210. package/src/heatmap.ts +139 -0
  211. package/src/impact.ts +393 -0
  212. package/src/index.ts +2679 -0
  213. package/src/integration.ts +198 -0
  214. package/src/life.ts +233 -0
  215. package/src/moons.ts +341 -0
  216. package/src/numeric.ts +268 -0
  217. package/src/observer.ts +245 -0
  218. package/src/ode.ts +415 -0
  219. package/src/ops/balance-op.ts +170 -0
  220. package/src/ops/constants-op.ts +324 -0
  221. package/src/ops/custom-op.ts +188 -0
  222. package/src/ops/derivation-op.ts +677 -0
  223. package/src/ops/feasibility-op.ts +174 -0
  224. package/src/ops/formula-table-op.ts +309 -0
  225. package/src/ops/impact-op.ts +166 -0
  226. package/src/ops/ode-op.ts +127 -0
  227. package/src/ops/quantities-op.ts +178 -0
  228. package/src/ops/shared.ts +483 -0
  229. package/src/ops/units-op.ts +261 -0
  230. package/src/ops/workspace-op.ts +392 -0
  231. package/src/ops/world-op.ts +333 -0
  232. package/src/pipeline.ts +386 -0
  233. package/src/playbook.ts +424 -0
  234. package/src/provenance-graph.ts +297 -0
  235. package/src/provenance.ts +176 -0
  236. package/src/quantities.ts +617 -0
  237. package/src/sky.ts +465 -0
  238. package/src/star-catalog.ts +241 -0
  239. package/src/stats.ts +409 -0
  240. package/src/stellar.ts +227 -0
  241. package/src/summary.ts +275 -0
  242. package/src/symbolic.ts +279 -0
  243. package/src/symbols.ts +216 -0
  244. package/src/systems.ts +320 -0
  245. package/src/taxonomy.ts +312 -0
  246. package/src/terrain.ts +461 -0
  247. package/src/timeline.ts +315 -0
  248. package/src/units.ts +353 -0
  249. package/src/universe-ops.ts +283 -0
  250. package/src/whitepaper.ts +278 -0
  251. package/src/workspace.ts +877 -0
  252. package/src/world-params.ts +440 -0
  253. package/src/world-validation.ts +314 -0
  254. package/src/world.ts +941 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,221 @@
1
+ # 更新日志
2
+
3
+ 本项目遵循 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/) 与 [语义化版本](https://semver.org/lang/zh-CN/)。
4
+
5
+ ## [2.0.0] — 2026-10-26
6
+
7
+ 首个公开发布版本。
8
+
9
+ ### 新增
10
+
11
+ - **公式库 355 → 395 条**,补的是**通用计算**(第七批 `formula-library-basic.ts`)。
12
+ 起因是实测:35 个常见计算需求只命中 17 个,缺的全在金融/几何/化学/电学/工程:
13
+ - 金融 10 条:等额本息月供、单利、年金现值、NPV、直线折旧、盈亏平衡销量、
14
+ 实际年利率、复利翻倍时间、通胀后购买力、毛利率
15
+ - 几何 8 条:余弦定理、正弦定理、扇形面积、球冠体积、梯形、椭圆、圆环体、正多边形
16
+ - 化学 8 条:溶度积、滴定体积、质量摩尔浓度、质量百分比、ppm、标准气体体积、
17
+ 摩尔数换粒子数、放射性剩余量
18
+ - 电学 7 条:容抗、感抗、LC 谐振、分压、用电量、电池续航、变压器匝数
19
+ - 工程 6 条:齿轮比、雷诺数、热应力、弹簧储能、液压推力、皮带轮转速比
20
+ - 天文 1 条:主序星寿命(此前只在 `world` 内部算,没暴露成公式)
21
+
22
+ 这批全部做了数值验算,且尽量带**可自证的端点**:余弦定理在 3-4-5 直角三角形
23
+ 上应得 5;球冠 h=r 得半球 2π/3、h=2r 得整球 4π/3;正多边形 n=4,s=2 得正方形面积 4;
24
+ 单利与年复利在 t=1 时必须相等。
25
+
26
+ ### 修复
27
+
28
+ - **检索查不到中文复合词**(比补公式更影响体感):`findFormulas` 只做整串子串匹配,
29
+ 于是 `粮食` 能查到 4 条、`粮食产量` 却是 0 条;`比热` 能查到、`比热容` 查不到。
30
+ 用户和 AI 不会总说最短形式。现在加了:
31
+ - 中文 2—4 字滑窗子词匹配(`粮食产量` 能对上关键词「粮食」「产量」)
32
+ - 同义词表(`比热容`→`比热`、`月供`→`贷款`、`粘度`→`黏度` 等 30 组)
33
+ - 词元按长度加权,长词命中排前面,避免「粮食产量」把所有含「量」的公式挤上来
34
+ - 默认返回上限 10 → 20(宽查询不再被截断)
35
+
36
+ - **`world` 顶层参数静默失效**:此前只认 4 个便捷参数
37
+ (`planetRadius`/`planetMass`/`rotationHours`/`obliquityDeg`),
38
+ 于是 `{operation:'world', starMass:10}` 里的 `starMass` 被**静默丢弃** ——
39
+ 输出仍是太阳(主序寿命 10 Gyr),一句报错都没有。作者以为算的是 10 倍质量恒星。
40
+ 现在改为遍历 `WORLD_PARAMS` 全量白名单派生便捷参数,且 `world` 内同名键优先。
41
+
42
+ - **频次测试写死绝对值**:`formula-story.mjs` 断言「高频 50—130 条」,
43
+ 公式库一扩容就误报失败。它本意是「高频不应占满全库」的比例约束,
44
+ 改成占 20%—60% 的比例断言。
45
+
46
+ ### 修复
47
+
48
+ - **主动提醒命中率归零**(最严重的一条):`agent/pre-step` 钩子用
49
+ `content.includes('math_execute')` 判断「本会话是否已用过插件」,而我们的系统提示
50
+ 每轮都注入、且必然包含这个词 —— 于是 `toolUsedInSession` 恒为 `true`,
51
+ 检测器从第一轮之后**永久静默**。
52
+
53
+ 实测:检测器本身命中率 72%(13/18 条真实作者语句,误报 0/6),但经过钩子后
54
+ 实际命中率 **0**。修法是改成**结构化判断**:只看 `role === 'tool'` 消息、
55
+ assistant 的 `tool_calls` 数组、或 content 里的 `type: 'tool_use'` 块。
56
+ 「用户问 math_execute 怎么用」也不再被误判成「已用过」。
57
+
58
+ 修后实测:真实对话历史(含系统提示)下命中率 **90%**(9/10),
59
+ 真调过工具后仍正确静默(4/4)。
60
+
61
+ - **工具描述漏了 3 个 operation**:`TOOL_DESCRIPTION` 里没有 `derivation`、
62
+ `custom`、`feasibility`,模型因此不知道它们存在 —— 而所有测试全绿。
63
+ 原因是 `test/awareness.mjs` 里手写了一份 operation 清单,加新 op 时没同步。
64
+ 现在清单**从 schema enum 派生**(唯一真相),并加反向断言与长度预算(≤900 字符)。
65
+ 描述长度 810 → 718 字符,同时覆盖全部 29 个 operation。
66
+
67
+ - **检测器缺势力收支类词表**:`balance` 是新增能力,但检测器词表里没有
68
+ 「养得起/够不够/军费/粮草」这类说法,导致「这个王国养得起二十万兵吗」评分 0。
69
+ 已补两条意图模式,命中率 72% → 83%。
70
+
71
+ - **`help` 让作者去点一个不存在的面板**:数据管理那段还写着「侧栏『数学工作区』入口
72
+ 可图形化管理」,但界面 2026-10-25 已全部移除。AI 照读会把作者引到一个点不开的入口。
73
+ 已改成「本插件没有图形界面,全部经工具与 HTTP 路由操作」。
74
+ 同时 `test/advanced.mjs` 里那条「help 必须提到侧栏入口」的断言原本把错误行为
75
+ 写成了预期,改为反向断言(不许出现「侧栏」,必须说明「没有图形界面」)。
76
+
77
+ - **世界推演的措辞违反项目铁律**:1.4 g 以上会输出「生物**必须**更矮壮」,
78
+ 而铁律要求输出措辞不出现「错误/禁止/必须」(`test/ai-brief.mjs` 守着这条)。
79
+ 改成「生物得长成矮壮型才撑得住」。这一条是**实际使用验收**跑出来的,
80
+ 原来的世界推演测试只看数值不看措辞。
81
+
82
+ - **单位清单的伪精度**:`亩` 的系数是 666.6…(无限循环),清单里显示成
83
+ `666.6666666666666`,看着像精确值。系数改用独立格式化,显示 `666.667`。
84
+
85
+ ### 测试
86
+
87
+ - 新增 `test/real-usage.mjs`(94 项):**作者视角的实际使用验收**。
88
+ 与其它套件不同,它验的是「拿去能不能用」而不是「算得对不对」:
89
+ 输出里不许出现已删界面、`Infinity`/`NaN`/`undefined`/`[object Object]`;
90
+ 必须有单位与可信度标签;措辞不许反驳作者设定;错误必须给修复方向;
91
+ 输出体积有上限(AI 读得下);并把「1.5 g 星球 → 50 米巨兽站不住 →
92
+ 300 米塔能建 → 王国养不养得起兵 → 火箭飞不出去 → 三十里多长」串成一个
93
+ 完整场景,检查前后自洽。
94
+
95
+ ### 移除
96
+
97
+ - **UI 全部移除**(2026-10-25,`14f6ed0`)。做了三版(目录树 18 节点 → 精简 10 节点 →
98
+ 单页工作台)效果始终不好,决定砍掉:`src/client.ts`(2497 行)、`lib/client.js`
99
+ (138.8 KB)、9 个客户端测试套件、`tsconfig.client.json`、`package.json` 的
100
+ `dsh.client` 与 `exports["./client"]`。**后端模块一个没动**,能力全部保留,
101
+ 只经 `math_execute`(27 种 operation)与 HTTP 路由给 AI。见 `docs/ui-removed.md`。
102
+
103
+ ### 新增
104
+
105
+ - **世界参数校验(三档)**:`world-params.ts` 的 `range` 此前是**纯装饰** ——
106
+ 22 处声明没有任何代码读取,实测 `planetMass=-5`、`planetRadius=0`、`albedo=5`
107
+ 都 200 OK 存进去了。新增 `src/world-validation.ts` 让范围真正生效:
108
+ - **硬拒绝 400**:`range.hard` 且**低于下界** —— 会算出无穷/非数/负物理量
109
+ (零半径 → 重力 Infinity、零质量 → 离心比 Infinity、零轨道 → 80 处 Infinity);
110
+ - **软警告 200 + `warnings[]`**:越界但仍照设定算(`planetMass=500`、`albedo=1.5`),
111
+ 消息里给出范围与代价。**上界一律走这一档** —— 「质量大得离谱」是设定自由,
112
+ 拦了就违反「不反驳用户设定」;
113
+ - **静默接受**:在范围内。
114
+
115
+ 哪些参数标 `hard` 是**实测**出来的(逐个取极端值跑推演、统计产物里 `Infinity`/`NaN`
116
+ 个数),不是拍的。实测还暴露了探针自身的 bug:`planet.surfaceGravity` 其实是
117
+ 显示串(`'Infinity'` 字符串),只看 `typeof === 'number'` 会整片漏判。
118
+
119
+ - **`invalid` 判定档**(`dead-universe.ts`):检出物理量非有限/为负时判 `invalid`,
120
+ 与 `dead` 分开 —— `dead` 是「死寂宇宙」这种合法设定,`invalid` 是「参数本身算不出数」。
121
+ 混在一起会让作者以为「世界设得太狠」,实际是把半径写成了 0。渲染措辞仍只讲怎么改,
122
+ 不写「错误/禁止/必须」。
123
+
124
+ - **逐颗卫星 `moons` 可存档**:`world.ts` 早已支持 `MoonSpec[]`(洛希极限/希尔球/
125
+ 相邻间距/观感),但 `moons` 不在白名单里,导致「多卫星系统」只能直接调 tool、
126
+ 存不进工作区。`ParamSpec.kind` 新增 `'array'` 与 `itemShape`,现在能存能校验。
127
+
128
+ ### 修复
129
+
130
+ - **`Infinity`/`NaN` 会流到 AI**(最伤可信度的一条):`/summary` 的
131
+ `derived[].value` 曾是裸 `Infinity`(只有 `text` 被格式化成 `—`),
132
+ `verdict.causes` 里也有 `"表面重力不成立:Infinity m/s²"`。AI 会当成真数字写进结语
133
+ ——「这颗星球重力是 Infinity」。现在 `deriveAll` 用 `finite()` 统一归一化,
134
+ `judgeDead` 的原因描述改成中文(不出现字面量),整个响应不含 `Infinity`。
135
+ - **`save-world` 的双白名单事故**:该路由曾自带一份 14 键硬编码白名单,
136
+ 而 `WORLD_PARAMS` 有 23 个基础量 —— 于是 `starClass`(「我要 G2V 恒星」)、
137
+ `hasLiquid`、`materialStrength/Density`、`moonCount/Mass/Distance`、
138
+ `lightPollution`、`galaxyBand` 共 9 个键被**静默丢弃**:返回 200 OK,不报错不提示。
139
+ 现在白名单只留一个真相。
140
+ - **类型静默强转**:`Number(true)===1`、`Number([])===0`、`Number(['7'])===7` ——
141
+ `{planetMass:true}` 曾静默存成 1。现在只接受 `number` 与数字字符串,其余 400。
142
+ - **注入给 AI 的 operation 数量是旧的**:`awareness.ts` 的系统提示写「共 25 个」,
143
+ 实际 27 个(漏了 `derivation` 与 `custom`)。`integration.mjs` 的断言清单同样只有 25 个,
144
+ 现在补齐到 27 并加了**反向断言**(schema 里不许有清单外的名字)。
145
+ - **`npm run preflight` 因 UI 移除而崩溃**:它仍在 `readFileSync('lib/client.js')`,
146
+ 文件已删 → `ENOENT`,装机前自检直接非零退出。改为反向断言(客户端产物确实不存在、
147
+ 无 `dsh.client`、无 `exports["./client"]`、无 `tsconfig.client.json`),
148
+ 与 `test/integration.mjs` 第 5 节互为印证。
149
+ - **`tsconfig.json` 仍排除 `src/client.ts`**:文件早不存在,排除项清掉。
150
+
151
+ ### 测试
152
+
153
+ - 新增 `test/validation.mjs`(82 项):硬边界拒绝、软范围只警告、类型严格性、
154
+ 逐颗卫星校验、元数据自身完整性(标了 hard 的必须有上下界、array 型必须有 itemShape)。
155
+ - 新增 `test/sanity.mjs`(34 项):`findPhysicsIssues` 检出能力、`invalid` 与 `dead`
156
+ 分离、渲染不泄 `Infinity`、坏存档兜底、正常链路不受影响。
157
+ - 新增 `test/summary.mjs`(37 项):`deriveAll()` 的白名单过滤 —— UI 三版删掉后,
158
+ 它是「`派生量绝不入库`」唯一还在运行的实现点。
159
+ - 新增 `test/ai-journey.mjs`(58 项):把「作者说一句话 → AI 该走的那条链」复刻成路由调用
160
+ (`world-params` → `solve-anchor` → `save-world` → `summary` → `derive/dead`),
161
+ 跑在真派发上(含路由顺序与前缀);逐个试存全部 24 个基础量。
162
+ 取代了原来「重启 DSH 人肉看」的验证方式。
163
+ - 四个新套件都做过**反向对照**(故意破坏实现确认测试变红),避免装饰性测试。
164
+ - 全量基线:**56 套 / 2232 项 → 60 套 / 2444 项**,全绿。
165
+
166
+ ### 文档
167
+
168
+ - 删除 7 篇只描述已删界面的文档(`ui-simplified.md`、`ui-v3-workbench.md`、
169
+ `ui-feedback-fixes.md`、`ui-implementation-status.md`、`ui-v2-panels.md`、
170
+ `client-ui-architecture.md`、`ui-conventions.md`)。
171
+ - 另外 12 篇加「已作废 / 仍有效」说明而非删除 —— 它们承载的知识比界面更长久:
172
+ `ui-redesign-v3.md` 改题为「参数分层与自洽推演」(三层结构与四条自洽规则是领域核心)、
173
+ `ui-design-v2.md` 是用户原始设计稿、`adr/0002` 是决策历史(只追加 superseded 说明)。
174
+ - `README.md`:UI 章节改为「AI 调用,没有面板」,operation 数量 25 → 27,
175
+ 补「世界参数校验三档」与「逐颗卫星」两节。
176
+
177
+ ## [2.0.0] — 2026-10-24(内部定稿,未发布)
178
+
179
+ > 这是公开发布前的内部定稿,内容并入上方 2.0.0 一起发布。
180
+ > 保留原文是为了记录当时的取舍(例如那版还带界面,后来整体移除了)。
181
+
182
+ ### 能力
183
+
184
+ - **计算内核**:BigNumber 64 位高精度求值、符号微积分(求导/积分/化简/展开)、
185
+ 解方程与线性系统、矩阵(秩/行列式/迹/奇异值/零空间/逆)、统计与概率分布、
186
+ 回归、ODE(RK4)。
187
+ - **UI(令牌化)**:左栏「全局管理」与右栏「本工作区工作台」共用同一套宿主设计令牌
188
+ (`--dsw-alias-*` / `--dsw-font-*` / `--dsw-radius-*`),无写死颜色;
189
+ **新建工作区即生成同名数据表**(`<工作区名>.json`,含常数/公式/地点/变量四张子表),
190
+ 切换工作区后右栏自动跟随。
191
+ - **公式库 342 条**,每条带**三轴标签**:
192
+ `layer`(离最底层规则的远近:基本/数学/导出/经验/工程/约定)、
193
+ `domains`(学科领域,多标签)、`frequency`(**主角视角感知频率**)。
194
+ 检索:`freq:` / `layer:` / `domain:` / `symbol:` / `keyword`。
195
+ - **两级公式扩展**:全局公式包(`$DSH_HOME/math-calc/formula-packs/global.json`,写盘即生效)
196
+ + 工作区临时公式;新增时校验 id、表达式可解析、**符号必须已定义**(拼错变量当场拒绝)。
197
+ - **符号消歧**:同一字母不同含义(`m` = 质量/米)可查 `symbol:m@质量`。
198
+ - **常数推演**:无量纲优先(α/μ/α_s/α_G)、尺度阶梯、单位旋钮与物理改动分离、矛盾清单。
199
+ - **世界推演**:恒星(质光/寿命/宜居带/α 敏感度)→ 气候 → 天空配色 → 卫星系统 →
200
+ 化学窗口与生命硬否决 → 跨模块一致性检查 → 经验系数可信度标注。
201
+ - **UI**:左侧入口 = **全局管理**(所有工作区:创建/切换/删除,常数表、公式表、设置);
202
+ 右侧边栏页签 = **本工作区工作台** —— 工作区切换器、本区数据表(常数/公式/地点/变量)、
203
+ **开关**(提示档位、公式启停)、**管理**(变量与地点的增删)。
204
+ 左栏切换工作区后右栏**自动跟随**(同一 client bundle 内的订阅 + 宿主 `sidebarRight` store)。
205
+
206
+ ### 工程质量
207
+
208
+ - 全量 **41 套 / 1716 项**测试;含确定性、真机宿主契约、**对抗性兼容性**(敌意 ctx、
209
+ 服务抢占、全局污染、数据损坏)与**客户端注册契约**回归。
210
+ - `preflight` 装机前自检:入口契约、客户端席位、运行期依赖、注释覆盖、清单一致性、
211
+ peer 版本可接受性。
212
+ - `doccheck` 强制:每个模块有头注释、每条导出有文档注释(321 导出 / 0 缺失)。
213
+
214
+ ### 修复(相对内部早期版本)
215
+
216
+ - **客户端注册 id 必须等于包名**:此前用 `<包名>-client`,宿主按包名查找不到模块,
217
+ 导致桌面端每次启动都报 `import failed` 并致命退出。
218
+ - **客户端入口幂等**:宿主会重放 bundle,重复注册会抛错并升级为致命错误。
219
+ - **peer 依赖接受 prerelease**:`>=0.1.0 <0.3.0` 不接受 `0.1.7-rc.2`,改为 `>=0.1.0-0 <0.3.0`。
220
+ - **工作区切换自动落盘**:此前切到不存在的工作区只产生内存对象,`current` 会指向幽灵工作区。
221
+ - 工作区创建兼容 `name` 参数(此前只认 `workspace`,误报「不能是 default」)。
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 czkssg
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.