@faicad/faijs 0.13.2 → 0.16.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 (485) hide show
  1. package/dist/api/api-namespace.d.ts +7 -0
  2. package/dist/api/api-namespace.d.ts.map +1 -1
  3. package/dist/api/api-namespace.js +44 -17
  4. package/dist/api/api-namespace.js.map +1 -1
  5. package/dist/api/boolean.d.ts +19 -0
  6. package/dist/api/boolean.d.ts.map +1 -1
  7. package/dist/api/boolean.js +71 -12
  8. package/dist/api/boolean.js.map +1 -1
  9. package/dist/api/chamfer.d.ts.map +1 -1
  10. package/dist/api/chamfer.js +12 -8
  11. package/dist/api/chamfer.js.map +1 -1
  12. package/dist/api/compound-geom.d.ts +45 -0
  13. package/dist/api/compound-geom.d.ts.map +1 -0
  14. package/dist/api/compound-geom.js +85 -0
  15. package/dist/api/compound-geom.js.map +1 -0
  16. package/dist/api/edge-ref.d.ts.map +1 -1
  17. package/dist/api/edge-ref.js +7 -4
  18. package/dist/api/edge-ref.js.map +1 -1
  19. package/dist/api/engrave.d.ts.map +1 -1
  20. package/dist/api/engrave.js +1 -0
  21. package/dist/api/engrave.js.map +1 -1
  22. package/dist/api/extrude.d.ts.map +1 -1
  23. package/dist/api/extrude.js +131 -3
  24. package/dist/api/extrude.js.map +1 -1
  25. package/dist/api/face-ref.d.ts.map +1 -1
  26. package/dist/api/face-ref.js +7 -4
  27. package/dist/api/face-ref.js.map +1 -1
  28. package/dist/api/fillet.d.ts.map +1 -1
  29. package/dist/api/fillet.js +6 -5
  30. package/dist/api/fillet.js.map +1 -1
  31. package/dist/api/generated/cad/script-face.d.ts +1 -1
  32. package/dist/api/generated/cad/script-face.d.ts.map +1 -1
  33. package/dist/api/generated/cad/script-face.js +1 -2
  34. package/dist/api/generated/cad/script-face.js.map +1 -1
  35. package/dist/api/generated/operations.js +16 -16
  36. package/dist/api/generated/operations.js.map +1 -1
  37. package/dist/api/generated/script-face-manifest.d.ts.map +1 -1
  38. package/dist/api/generated/script-face-manifest.js +0 -2
  39. package/dist/api/generated/script-face-manifest.js.map +1 -1
  40. package/dist/api/generated/script-face.d.ts +1 -7
  41. package/dist/api/generated/script-face.d.ts.map +1 -1
  42. package/dist/api/generated/script-face.js +2 -4
  43. package/dist/api/generated/script-face.js.map +1 -1
  44. package/dist/api/generated/sketching.js +1 -1
  45. package/dist/api/generated/sketching.js.map +1 -1
  46. package/dist/api/generated/topology.d.ts +0 -56
  47. package/dist/api/generated/topology.d.ts.map +1 -1
  48. package/dist/api/generated/topology.js +19 -68
  49. package/dist/api/generated/topology.js.map +1 -1
  50. package/dist/api/import-brep.d.ts +36 -0
  51. package/dist/api/import-brep.d.ts.map +1 -0
  52. package/dist/api/import-brep.js +72 -0
  53. package/dist/api/import-brep.js.map +1 -0
  54. package/dist/api/import-step.d.ts +28 -0
  55. package/dist/api/import-step.d.ts.map +1 -0
  56. package/dist/api/import-step.js +57 -0
  57. package/dist/api/import-step.js.map +1 -0
  58. package/dist/api/index.d.ts +8 -12
  59. package/dist/api/index.d.ts.map +1 -1
  60. package/dist/api/index.js +22 -16
  61. package/dist/api/index.js.map +1 -1
  62. package/dist/api/internal/compat-op.d.ts.map +1 -1
  63. package/dist/api/internal/compat-op.js +2 -1
  64. package/dist/api/internal/compat-op.js.map +1 -1
  65. package/dist/api/internal/compat-projection.d.ts +3 -1
  66. package/dist/api/internal/compat-projection.d.ts.map +1 -1
  67. package/dist/api/internal/compat-projection.js +8 -5
  68. package/dist/api/internal/compat-projection.js.map +1 -1
  69. package/dist/api/internal/replica-role-table.d.ts +36 -0
  70. package/dist/api/internal/replica-role-table.d.ts.map +1 -0
  71. package/dist/api/internal/replica-role-table.js +73 -0
  72. package/dist/api/internal/replica-role-table.js.map +1 -0
  73. package/dist/api/internal/result-unwrap.d.ts +3 -1
  74. package/dist/api/internal/result-unwrap.d.ts.map +1 -1
  75. package/dist/api/internal/result-unwrap.js +2 -2
  76. package/dist/api/internal/result-unwrap.js.map +1 -1
  77. package/dist/api/knurl.d.ts.map +1 -1
  78. package/dist/api/knurl.js +1 -0
  79. package/dist/api/knurl.js.map +1 -1
  80. package/dist/api/occt-kernel-bridge.d.ts +105 -27
  81. package/dist/api/occt-kernel-bridge.d.ts.map +1 -1
  82. package/dist/api/occt-kernel-bridge.js +255 -41
  83. package/dist/api/occt-kernel-bridge.js.map +1 -1
  84. package/dist/api/pattern.d.ts +32 -0
  85. package/dist/api/pattern.d.ts.map +1 -0
  86. package/dist/api/pattern.js +85 -0
  87. package/dist/api/pattern.js.map +1 -0
  88. package/dist/api/place.d.ts +35 -0
  89. package/dist/api/place.d.ts.map +1 -0
  90. package/dist/api/place.js +113 -0
  91. package/dist/api/place.js.map +1 -0
  92. package/dist/api/primitives.d.ts.map +1 -1
  93. package/dist/api/primitives.js +10 -3
  94. package/dist/api/primitives.js.map +1 -1
  95. package/dist/api/replicate.d.ts +145 -0
  96. package/dist/api/replicate.d.ts.map +1 -0
  97. package/dist/api/replicate.js +351 -0
  98. package/dist/api/replicate.js.map +1 -0
  99. package/dist/api/revolve.d.ts +36 -0
  100. package/dist/api/revolve.d.ts.map +1 -0
  101. package/dist/api/revolve.js +165 -0
  102. package/dist/api/revolve.js.map +1 -0
  103. package/dist/api/screw.d.ts.map +1 -1
  104. package/dist/api/screw.js +1 -0
  105. package/dist/api/screw.js.map +1 -1
  106. package/dist/api/sdf.d.ts.map +1 -1
  107. package/dist/api/sdf.js +1 -0
  108. package/dist/api/sdf.js.map +1 -1
  109. package/dist/api/sketch.d.ts.map +1 -1
  110. package/dist/api/sketch.js +1 -0
  111. package/dist/api/sketch.js.map +1 -1
  112. package/dist/api/split.d.ts +31 -0
  113. package/dist/api/split.d.ts.map +1 -0
  114. package/dist/api/split.js +96 -0
  115. package/dist/api/split.js.map +1 -0
  116. package/dist/api/surface/arg-spec.d.ts +17 -0
  117. package/dist/api/surface/arg-spec.d.ts.map +1 -1
  118. package/dist/api/surface/arg-spec.js +86 -66
  119. package/dist/api/surface/arg-spec.js.map +1 -1
  120. package/dist/api/surface/projection-overrides.d.ts.map +1 -1
  121. package/dist/api/surface/projection-overrides.js +6 -0
  122. package/dist/api/surface/projection-overrides.js.map +1 -1
  123. package/dist/api/topo-resolve.d.ts.map +1 -1
  124. package/dist/api/topo-resolve.js +65 -3
  125. package/dist/api/topo-resolve.js.map +1 -1
  126. package/dist/api/transform.d.ts +4 -0
  127. package/dist/api/transform.d.ts.map +1 -1
  128. package/dist/api/transform.js +44 -12
  129. package/dist/api/transform.js.map +1 -1
  130. package/dist/boolean/deriveNormals.d.ts +5 -4
  131. package/dist/boolean/deriveNormals.d.ts.map +1 -1
  132. package/dist/boolean/deriveNormals.js +24 -7
  133. package/dist/boolean/deriveNormals.js.map +1 -1
  134. package/dist/brep/brep-ops.d.ts +34 -1
  135. package/dist/brep/brep-ops.d.ts.map +1 -1
  136. package/dist/brep/brep-ops.js +62 -22
  137. package/dist/brep/brep-ops.js.map +1 -1
  138. package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
  139. package/dist/brep/engine/adapters/brep-mock.js +66 -0
  140. package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
  141. package/dist/brep/engine/adapters/brepkit.d.ts.map +1 -1
  142. package/dist/brep/engine/adapters/brepkit.js +44 -1
  143. package/dist/brep/engine/adapters/brepkit.js.map +1 -1
  144. package/dist/brep/engine/adapters/occt.d.ts +1 -5
  145. package/dist/brep/engine/adapters/occt.d.ts.map +1 -1
  146. package/dist/brep/engine/adapters/occt.js +246 -9
  147. package/dist/brep/engine/adapters/occt.js.map +1 -1
  148. package/dist/brep/engine/primitives.d.ts +96 -0
  149. package/dist/brep/engine/primitives.d.ts.map +1 -1
  150. package/dist/brep/engine/primitives.js.map +1 -1
  151. package/dist/brep/engine/types.d.ts +66 -6
  152. package/dist/brep/engine/types.d.ts.map +1 -1
  153. package/dist/brep/engine/types.js.map +1 -1
  154. package/dist/brep/export/step.d.ts.map +1 -1
  155. package/dist/brep/export/step.js +6 -1
  156. package/dist/brep/export/step.js.map +1 -1
  157. package/dist/brep/face-evolution.d.ts +78 -8
  158. package/dist/brep/face-evolution.d.ts.map +1 -1
  159. package/dist/brep/face-evolution.js +130 -17
  160. package/dist/brep/face-evolution.js.map +1 -1
  161. package/dist/brepkit-kernel/brepkitKernel.d.ts +1 -1
  162. package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
  163. package/dist/brepkit-kernel/brepkitKernel.js +108 -12
  164. package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
  165. package/dist/browser.d.ts +6 -28
  166. package/dist/browser.d.ts.map +1 -1
  167. package/dist/browser.js +6 -17
  168. package/dist/browser.js.map +1 -1
  169. package/dist/cad-runtime/admit-compat-lib.d.ts +13 -0
  170. package/dist/cad-runtime/admit-compat-lib.d.ts.map +1 -1
  171. package/dist/cad-runtime/admit-compat-lib.js +27 -0
  172. package/dist/cad-runtime/admit-compat-lib.js.map +1 -1
  173. package/dist/cad-runtime/backend-dispatch.d.ts +46 -3
  174. package/dist/cad-runtime/backend-dispatch.d.ts.map +1 -1
  175. package/dist/cad-runtime/backend-dispatch.js +48 -3
  176. package/dist/cad-runtime/backend-dispatch.js.map +1 -1
  177. package/dist/cad-runtime/browser-lib-loader.d.ts +4 -4
  178. package/dist/cad-runtime/browser-lib-loader.d.ts.map +1 -1
  179. package/dist/cad-runtime/browser-lib-loader.js +7 -4
  180. package/dist/cad-runtime/browser-lib-loader.js.map +1 -1
  181. package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
  182. package/dist/cad-runtime/direct-executor.js +14 -4
  183. package/dist/cad-runtime/direct-executor.js.map +1 -1
  184. package/dist/cad-runtime/module-registry.d.ts +3 -1
  185. package/dist/cad-runtime/module-registry.d.ts.map +1 -1
  186. package/dist/cad-runtime/module-registry.js +13 -1
  187. package/dist/cad-runtime/module-registry.js.map +1 -1
  188. package/dist/cad-runtime/runtime-concurrent-error.d.ts +38 -0
  189. package/dist/cad-runtime/runtime-concurrent-error.d.ts.map +1 -0
  190. package/dist/cad-runtime/runtime-concurrent-error.js +43 -0
  191. package/dist/cad-runtime/runtime-concurrent-error.js.map +1 -0
  192. package/dist/cad-runtime/runtime.d.ts +52 -2
  193. package/dist/cad-runtime/runtime.d.ts.map +1 -1
  194. package/dist/cad-runtime/runtime.js +180 -9
  195. package/dist/cad-runtime/runtime.js.map +1 -1
  196. package/dist/define-op.d.ts +22 -0
  197. package/dist/define-op.d.ts.map +1 -1
  198. package/dist/define-op.js +82 -12
  199. package/dist/define-op.js.map +1 -1
  200. package/dist/env-agnostic.d.ts +38 -0
  201. package/dist/env-agnostic.d.ts.map +1 -0
  202. package/dist/env-agnostic.js +29 -0
  203. package/dist/env-agnostic.js.map +1 -0
  204. package/dist/fcstd/attachment.d.ts +8 -1
  205. package/dist/fcstd/attachment.d.ts.map +1 -1
  206. package/dist/fcstd/attachment.js +7 -1
  207. package/dist/fcstd/attachment.js.map +1 -1
  208. package/dist/fcstd/build-fai-zip.d.ts.map +1 -1
  209. package/dist/fcstd/build-fai-zip.js +12 -7
  210. package/dist/fcstd/build-fai-zip.js.map +1 -1
  211. package/dist/fcstd/codegen.d.ts +10 -1
  212. package/dist/fcstd/codegen.d.ts.map +1 -1
  213. package/dist/fcstd/codegen.js +158 -49
  214. package/dist/fcstd/codegen.js.map +1 -1
  215. package/dist/fcstd/contour.d.ts.map +1 -1
  216. package/dist/fcstd/contour.js +23 -24
  217. package/dist/fcstd/contour.js.map +1 -1
  218. package/dist/fcstd/convert.d.ts +2 -18
  219. package/dist/fcstd/convert.d.ts.map +1 -1
  220. package/dist/fcstd/convert.js +35 -53
  221. package/dist/fcstd/convert.js.map +1 -1
  222. package/dist/fcstd/expressions.d.ts +24 -0
  223. package/dist/fcstd/expressions.d.ts.map +1 -1
  224. package/dist/fcstd/expressions.js +91 -0
  225. package/dist/fcstd/expressions.js.map +1 -1
  226. package/dist/fcstd/external-geo.d.ts +12 -1
  227. package/dist/fcstd/external-geo.d.ts.map +1 -1
  228. package/dist/fcstd/external-geo.js +15 -1
  229. package/dist/fcstd/external-geo.js.map +1 -1
  230. package/dist/fcstd/feature-translate.d.ts +21 -1
  231. package/dist/fcstd/feature-translate.d.ts.map +1 -1
  232. package/dist/fcstd/feature-translate.js +124 -8
  233. package/dist/fcstd/feature-translate.js.map +1 -1
  234. package/dist/fcstd/structural-types.d.ts +83 -0
  235. package/dist/fcstd/structural-types.d.ts.map +1 -0
  236. package/dist/fcstd/structural-types.js +121 -0
  237. package/dist/fcstd/structural-types.js.map +1 -0
  238. package/dist/index.d.ts +7 -23
  239. package/dist/index.d.ts.map +1 -1
  240. package/dist/index.js +10 -16
  241. package/dist/index.js.map +1 -1
  242. package/dist/lang/determinism-scanner.d.ts +71 -0
  243. package/dist/lang/determinism-scanner.d.ts.map +1 -0
  244. package/dist/lang/determinism-scanner.js +625 -0
  245. package/dist/lang/determinism-scanner.js.map +1 -0
  246. package/dist/lang/symbol-table.d.ts +31 -0
  247. package/dist/lang/symbol-table.d.ts.map +1 -1
  248. package/dist/lang/symbol-table.generated.d.ts +13 -19
  249. package/dist/lang/symbol-table.generated.d.ts.map +1 -1
  250. package/dist/lang/symbol-table.generated.js +13 -19
  251. package/dist/lang/symbol-table.generated.js.map +1 -1
  252. package/dist/lang/symbol-table.js +50 -1
  253. package/dist/lang/symbol-table.js.map +1 -1
  254. package/dist/mesh/creased-normals.d.ts +50 -0
  255. package/dist/mesh/creased-normals.d.ts.map +1 -0
  256. package/dist/mesh/creased-normals.js +114 -0
  257. package/dist/mesh/creased-normals.js.map +1 -0
  258. package/dist/mesh/decoration-provider.d.ts +53 -0
  259. package/dist/mesh/decoration-provider.d.ts.map +1 -0
  260. package/dist/mesh/decoration-provider.js +21 -0
  261. package/dist/mesh/decoration-provider.js.map +1 -0
  262. package/dist/mesh/engrave.d.ts +4 -0
  263. package/dist/mesh/engrave.d.ts.map +1 -1
  264. package/dist/mesh/engrave.js +22 -31
  265. package/dist/mesh/engrave.js.map +1 -1
  266. package/dist/mesh/index.d.ts +5 -14
  267. package/dist/mesh/index.d.ts.map +1 -1
  268. package/dist/mesh/index.js +7 -18
  269. package/dist/mesh/index.js.map +1 -1
  270. package/dist/mesh/io.d.ts +2 -1
  271. package/dist/mesh/io.d.ts.map +1 -1
  272. package/dist/mesh/io.js +5 -7
  273. package/dist/mesh/io.js.map +1 -1
  274. package/dist/mesh/primitives.d.ts +5 -18
  275. package/dist/mesh/primitives.d.ts.map +1 -1
  276. package/dist/mesh/primitives.js +4 -48
  277. package/dist/mesh/primitives.js.map +1 -1
  278. package/dist/mesh/stl-loader.d.ts +23 -0
  279. package/dist/mesh/stl-loader.d.ts.map +1 -0
  280. package/dist/mesh/stl-loader.js +139 -0
  281. package/dist/mesh/stl-loader.js.map +1 -0
  282. package/dist/module-resolver/parse-imports.d.ts +37 -0
  283. package/dist/module-resolver/parse-imports.d.ts.map +1 -0
  284. package/dist/module-resolver/parse-imports.js +39 -0
  285. package/dist/module-resolver/parse-imports.js.map +1 -0
  286. package/dist/module-resolver/resolver.d.ts +1 -1
  287. package/dist/module-resolver/resolver.js +2 -2
  288. package/dist/module-resolver/resolver.js.map +1 -1
  289. package/dist/node-host/cli.d.ts.map +1 -1
  290. package/dist/node-host/cli.js +37 -4
  291. package/dist/node-host/cli.js.map +1 -1
  292. package/dist/primitives/text/cjk-font.d.ts +42 -0
  293. package/dist/primitives/text/cjk-font.d.ts.map +1 -0
  294. package/dist/primitives/text/cjk-font.js +86 -0
  295. package/dist/primitives/text/cjk-font.js.map +1 -0
  296. package/dist/runtime-state.d.ts +18 -6
  297. package/dist/runtime-state.d.ts.map +1 -1
  298. package/dist/runtime-state.js +9 -1
  299. package/dist/runtime-state.js.map +1 -1
  300. package/dist/sdk.d.ts +2 -2
  301. package/dist/sdk.js +2 -2
  302. package/dist/sdk.js.map +1 -1
  303. package/dist/shape.d.ts +15 -0
  304. package/dist/shape.d.ts.map +1 -1
  305. package/dist/shape.js +26 -3
  306. package/dist/shape.js.map +1 -1
  307. package/dist/symbol-table.d.ts +15 -0
  308. package/dist/symbol-table.d.ts.map +1 -0
  309. package/dist/symbol-table.js +14 -0
  310. package/dist/symbol-table.js.map +1 -0
  311. package/dist/topology/naming/build-naming.d.ts +14 -30
  312. package/dist/topology/naming/build-naming.d.ts.map +1 -1
  313. package/dist/topology/naming/build-naming.js +21 -54
  314. package/dist/topology/naming/build-naming.js.map +1 -1
  315. package/dist/topology/naming/capture-topo-ref.d.ts.map +1 -1
  316. package/dist/topology/naming/capture-topo-ref.js +5 -0
  317. package/dist/topology/naming/capture-topo-ref.js.map +1 -1
  318. package/dist/topology/naming/index.d.ts +3 -0
  319. package/dist/topology/naming/index.d.ts.map +1 -1
  320. package/dist/topology/naming/index.js +3 -0
  321. package/dist/topology/naming/index.js.map +1 -1
  322. package/dist/topology/naming/lineage-resolve.d.ts +80 -0
  323. package/dist/topology/naming/lineage-resolve.d.ts.map +1 -0
  324. package/dist/topology/naming/lineage-resolve.js +120 -0
  325. package/dist/topology/naming/lineage-resolve.js.map +1 -0
  326. package/dist/topology/naming/lineage.d.ts +349 -0
  327. package/dist/topology/naming/lineage.d.ts.map +1 -0
  328. package/dist/topology/naming/lineage.js +398 -0
  329. package/dist/topology/naming/lineage.js.map +1 -0
  330. package/dist/topology/naming/migrate.d.ts +41 -0
  331. package/dist/topology/naming/migrate.d.ts.map +1 -0
  332. package/dist/topology/naming/migrate.js +88 -0
  333. package/dist/topology/naming/migrate.js.map +1 -0
  334. package/dist/topology/naming/role-name.d.ts +176 -0
  335. package/dist/topology/naming/role-name.d.ts.map +1 -0
  336. package/dist/topology/naming/role-name.js +344 -0
  337. package/dist/topology/naming/role-name.js.map +1 -0
  338. package/dist/topology/naming/roles.d.ts +20 -22
  339. package/dist/topology/naming/roles.d.ts.map +1 -1
  340. package/dist/topology/naming/roles.js +51 -49
  341. package/dist/topology/naming/roles.js.map +1 -1
  342. package/dist/topology/naming/types.d.ts +65 -18
  343. package/dist/topology/naming/types.d.ts.map +1 -1
  344. package/dist/topology/naming/types.js.map +1 -1
  345. package/dist/vendored/brepjs/kernel/index.d.ts +5 -0
  346. package/dist/vendored/brepjs/kernel/index.d.ts.map +1 -1
  347. package/dist/vendored/brepjs/kernel/index.js +11 -0
  348. package/dist/vendored/brepjs/kernel/index.js.map +1 -1
  349. package/dist/weapp.d.ts +4 -4
  350. package/dist/weapp.d.ts.map +1 -1
  351. package/dist/weapp.js +7 -4
  352. package/dist/weapp.js.map +1 -1
  353. package/package.json +16 -14
  354. package/dist/api/compat/index.d.ts +0 -173
  355. package/dist/api/compat/index.d.ts.map +0 -1
  356. package/dist/api/compat/index.js +0 -222
  357. package/dist/api/compat/index.js.map +0 -1
  358. package/dist/api/compound.d.ts +0 -108
  359. package/dist/api/compound.d.ts.map +0 -1
  360. package/dist/api/compound.js +0 -162
  361. package/dist/api/compound.js.map +0 -1
  362. package/dist/api/copy.d.ts +0 -39
  363. package/dist/api/copy.d.ts.map +0 -1
  364. package/dist/api/copy.js +0 -81
  365. package/dist/api/copy.js.map +0 -1
  366. package/dist/api/fai_drill.d.ts +0 -46
  367. package/dist/api/fai_drill.d.ts.map +0 -1
  368. package/dist/api/fai_drill.js +0 -230
  369. package/dist/api/fai_drill.js.map +0 -1
  370. package/dist/api/fai_extrude.d.ts +0 -36
  371. package/dist/api/fai_extrude.d.ts.map +0 -1
  372. package/dist/api/fai_extrude.js +0 -78
  373. package/dist/api/fai_extrude.js.map +0 -1
  374. package/dist/api/fai_split.d.ts +0 -46
  375. package/dist/api/fai_split.d.ts.map +0 -1
  376. package/dist/api/fai_split.js +0 -253
  377. package/dist/api/fai_split.js.map +0 -1
  378. package/dist/api/load.d.ts +0 -39
  379. package/dist/api/load.d.ts.map +0 -1
  380. package/dist/api/load.js +0 -82
  381. package/dist/api/load.js.map +0 -1
  382. package/dist/api/svgExtrude.d.ts +0 -32
  383. package/dist/api/svgExtrude.d.ts.map +0 -1
  384. package/dist/api/svgExtrude.js +0 -73
  385. package/dist/api/svgExtrude.js.map +0 -1
  386. package/dist/api/text.d.ts +0 -34
  387. package/dist/api/text.d.ts.map +0 -1
  388. package/dist/api/text.js +0 -100
  389. package/dist/api/text.js.map +0 -1
  390. package/dist/brep/text/fontTestHelper.d.ts +0 -30
  391. package/dist/brep/text/fontTestHelper.d.ts.map +0 -1
  392. package/dist/brep/text/fontTestHelper.js +0 -57
  393. package/dist/brep/text/fontTestHelper.js.map +0 -1
  394. package/dist/cad-runtime/module-executor.d.ts +0 -271
  395. package/dist/cad-runtime/module-executor.d.ts.map +0 -1
  396. package/dist/cad-runtime/module-executor.js +0 -630
  397. package/dist/cad-runtime/module-executor.js.map +0 -1
  398. package/dist/cad-runtime/terminal-dag.d.ts +0 -65
  399. package/dist/cad-runtime/terminal-dag.d.ts.map +0 -1
  400. package/dist/cad-runtime/terminal-dag.js +0 -167
  401. package/dist/cad-runtime/terminal-dag.js.map +0 -1
  402. package/dist/faqts/browser.d.ts +0 -16
  403. package/dist/faqts/browser.d.ts.map +0 -1
  404. package/dist/faqts/browser.js +0 -13
  405. package/dist/faqts/browser.js.map +0 -1
  406. package/dist/faqts/exec-blob.d.ts +0 -14
  407. package/dist/faqts/exec-blob.d.ts.map +0 -1
  408. package/dist/faqts/exec-blob.js +0 -22
  409. package/dist/faqts/exec-blob.js.map +0 -1
  410. package/dist/faqts/exec-node.d.ts +0 -15
  411. package/dist/faqts/exec-node.d.ts.map +0 -1
  412. package/dist/faqts/exec-node.js +0 -29
  413. package/dist/faqts/exec-node.js.map +0 -1
  414. package/dist/faqts/imports.d.ts +0 -74
  415. package/dist/faqts/imports.d.ts.map +0 -1
  416. package/dist/faqts/imports.js +0 -95
  417. package/dist/faqts/imports.js.map +0 -1
  418. package/dist/faqts/index.d.ts +0 -22
  419. package/dist/faqts/index.d.ts.map +0 -1
  420. package/dist/faqts/index.js +0 -21
  421. package/dist/faqts/index.js.map +0 -1
  422. package/dist/faqts/node.d.ts +0 -23
  423. package/dist/faqts/node.d.ts.map +0 -1
  424. package/dist/faqts/node.js +0 -23
  425. package/dist/faqts/node.js.map +0 -1
  426. package/dist/faqts/run.d.ts +0 -62
  427. package/dist/faqts/run.d.ts.map +0 -1
  428. package/dist/faqts/run.js +0 -62
  429. package/dist/faqts/run.js.map +0 -1
  430. package/dist/faqts/transform.d.ts +0 -43
  431. package/dist/faqts/transform.d.ts.map +0 -1
  432. package/dist/faqts/transform.js +0 -35
  433. package/dist/faqts/transform.js.map +0 -1
  434. package/dist/lang/compile.d.ts +0 -50
  435. package/dist/lang/compile.d.ts.map +0 -1
  436. package/dist/lang/compile.js +0 -368
  437. package/dist/lang/compile.js.map +0 -1
  438. package/dist/lang/keep.d.ts +0 -109
  439. package/dist/lang/keep.d.ts.map +0 -1
  440. package/dist/lang/keep.js +0 -226
  441. package/dist/lang/keep.js.map +0 -1
  442. package/dist/lang/parser.d.ts +0 -91
  443. package/dist/lang/parser.d.ts.map +0 -1
  444. package/dist/lang/parser.js +0 -1594
  445. package/dist/lang/parser.js.map +0 -1
  446. package/dist/mesh/drill-hole/DrillHoleCore.d.ts +0 -90
  447. package/dist/mesh/drill-hole/DrillHoleCore.d.ts.map +0 -1
  448. package/dist/mesh/drill-hole/DrillHoleCore.js +0 -287
  449. package/dist/mesh/drill-hole/DrillHoleCore.js.map +0 -1
  450. package/dist/mesh/drill-hole/drill-types.d.ts +0 -34
  451. package/dist/mesh/drill-hole/drill-types.d.ts.map +0 -1
  452. package/dist/mesh/drill-hole/drill-types.js +0 -7
  453. package/dist/mesh/drill-hole/drill-types.js.map +0 -1
  454. package/dist/mesh/fai_drill.d.ts +0 -21
  455. package/dist/mesh/fai_drill.d.ts.map +0 -1
  456. package/dist/mesh/fai_drill.js +0 -92
  457. package/dist/mesh/fai_drill.js.map +0 -1
  458. package/dist/mesh/fai_extrude.d.ts +0 -24
  459. package/dist/mesh/fai_extrude.d.ts.map +0 -1
  460. package/dist/mesh/fai_extrude.js +0 -42
  461. package/dist/mesh/fai_extrude.js.map +0 -1
  462. package/dist/mesh/fai_split.d.ts +0 -164
  463. package/dist/mesh/fai_split.d.ts.map +0 -1
  464. package/dist/mesh/fai_split.js +0 -269
  465. package/dist/mesh/fai_split.js.map +0 -1
  466. package/dist/primitives/svg-extrude.d.ts +0 -43
  467. package/dist/primitives/svg-extrude.d.ts.map +0 -1
  468. package/dist/primitives/svg-extrude.js +0 -78
  469. package/dist/primitives/svg-extrude.js.map +0 -1
  470. package/dist/primitives/text/cjk.d.ts +0 -61
  471. package/dist/primitives/text/cjk.d.ts.map +0 -1
  472. package/dist/primitives/text/cjk.js +0 -215
  473. package/dist/primitives/text/cjk.js.map +0 -1
  474. package/dist/primitives/text-geometry.d.ts +0 -47
  475. package/dist/primitives/text-geometry.d.ts.map +0 -1
  476. package/dist/primitives/text-geometry.js +0 -127
  477. package/dist/primitives/text-geometry.js.map +0 -1
  478. package/dist/test-helpers.d.ts +0 -31
  479. package/dist/test-helpers.d.ts.map +0 -1
  480. package/dist/test-helpers.js +0 -55
  481. package/dist/test-helpers.js.map +0 -1
  482. package/dist/vendored/brepjs/core/kernelReentrancy.d.ts +0 -41
  483. package/dist/vendored/brepjs/core/kernelReentrancy.d.ts.map +0 -1
  484. package/dist/vendored/brepjs/core/kernelReentrancy.js +0 -68
  485. package/dist/vendored/brepjs/core/kernelReentrancy.js.map +0 -1
@@ -22,6 +22,7 @@
22
22
  */
23
23
  import { extractMetadata } from '../lang/metadata-extractor.js';
24
24
  import { assertSecure, S6_MAX_DEPTH, S6_MAX_MODULES } from '../lang/security-scanner.js';
25
+ import { scanDeterminism } from '../lang/determinism-scanner.js';
25
26
  import { computeLiveShapes } from './live-shapes.js';
26
27
  import { asPartName } from '../identity.js';
27
28
  import { ParseError } from '../lang/parse-error.js';
@@ -83,12 +84,14 @@ export class ModuleRegistry {
83
84
  loader;
84
85
  run;
85
86
  securityPolicy;
87
+ determinismPolicy;
86
88
  cache = new Map();
87
89
  loadCount = 0;
88
- constructor(loader, run, securityPolicy = 'strict') {
90
+ constructor(loader, run, securityPolicy = 'strict', determinismPolicy = 'off') {
89
91
  this.loader = loader;
90
92
  this.run = run;
91
93
  this.securityPolicy = securityPolicy;
94
+ this.determinismPolicy = determinismPolicy;
92
95
  }
93
96
  /**
94
97
  * 装载 import 表对应的全部依赖并返回 seed(绑定名 → 值)。
@@ -163,6 +166,15 @@ export class ModuleRegistry {
163
166
  }
164
167
  this.loadCount++;
165
168
  const meta = extractMetadata(source, { security: 'strict' });
169
+ // 确定性扫描(B 档 taint):违规 → MODULE_SECURITY(error 档);warn 档静默放行
170
+ if (this.determinismPolicy !== 'off') {
171
+ const ns = (meta.imports ?? []).filter((i) => i.kind === 'namespace' && i.localName).map((i) => i.localName);
172
+ const cals = (meta.imports ?? []).filter((i) => i.kind === 'named').flatMap((i) => i.bindings);
173
+ const det = scanDeterminism(source, { defaultNs: 'cad', extraNamespaces: ns, extraCallees: cals });
174
+ if (det.violations.length > 0 && this.determinismPolicy === 'error') {
175
+ throw new ModuleRegistryError('MODULE_SECURITY', `module "${key}" failed determinism check: ${det.violations[0].message}`, { lineNo: det.violations[0].lineNo, callee: 'determinism' });
176
+ }
177
+ }
166
178
  const seed = await this.resolveImports(meta.imports ?? [], key, [...stack, key]);
167
179
  const result = await this.run(source, seed); // 执行失败 → runner 抛 ModuleRegistryError
168
180
  const module = { key, exports: this.buildExports(meta, result) };
@@ -1 +1 @@
1
- {"version":3,"file":"module-registry.js","sourceRoot":"","sources":["../../src/cad-runtime/module-registry.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * module-registry — 多文件模块注册表(§4.5 / A-8/A-9/A-10)\n *\n * 无 IR 通道的多文件装载:主模块(runtime 直接执行)的顶层相对 import\n * (`import { bp } from './x.fai.js'`)指向项目内其它 `.fai.js` 模块。\n * 每个依赖模块用**独立 ctx** 执行(经注入的 ModuleRunner),产出导出面:\n * - values:模块存活 ctx 键中的 shape/常量(非函数);\n * - fns:模块内顶层函数;\n * - liveShapes:computeLiveShapes 对该模块自身的存活终端(模块内消费判定生效——\n * A-9:A 内被消费的 shape 不在 liveShapes → B 引用报错)。\n *\n * 名字契约(D6):A 的 LHS 名 = 导出名;B 的 import 绑定名 = 引用名;绑定必须 ∈\n * A.liveShapes ∪ A.fns(A-8 缺失导出名 → ModuleRegistryError)。普通常量不在此列——\n * 具名 import 常量被拒,见\n * .agents/notes/rejected/architecture/2026-09-09-named-import-of-constants.md。\n * 跨文件引用 ≠ 消费:B 引用 A 的 shape 不影响 A 的 liveShapes(A 单独执行时计算)。\n *\n * 装载:DFS 递归(相对 specifier → moduleKey 归一 → readSource → 提取其 import →\n * 先装依赖 → 带 seed 执行自身);循环依赖 → MODULE_CYCLE(failedAt 带环路径)。\n * 本实现每次调用重建缓存(execute/append 各轮全量重读重执行;fingerprint 增量缓存\n * 留作 v2)。\n */\n\nimport { extractMetadata } from '../lang/metadata-extractor'\nimport type { UiMetadata } from '../lang/metadata-extractor'\nimport { assertSecure, type SecurityPolicy, S6_MAX_DEPTH, S6_MAX_MODULES } from '../lang/security-scanner'\nimport { computeLiveShapes, type KeepRegistration } from './live-shapes'\nimport type { ExecKeepRecord } from './direct-executor'\nimport type { ProjectLoader } from './ports'\nimport { asPartName, type PartName } from '../identity'\nimport { ParseError } from '../lang/parse-error'\n\n// ── 导出类型 ──\n\n/** 模块导出面(§4.5 FaiModuleExports)。 */\nexport interface FaiModuleExports {\n /** 存活 shape + 常量(params)——ctx 非函数键 */\n values: Record<string, unknown>\n /** 顶层函数(ctx 函数键) */\n fns: Record<string, (...a: unknown[]) => unknown>\n /** 存活 shape 名(引用校验;模块内消费生效) */\n liveShapes: Set<string>\n}\n\n/** 已装载模块。 */\nexport interface FaiModule {\n key: string\n exports: FaiModuleExports\n}\n\n/** 模块执行视图(ModuleRunner 返回;DirectExecutor 满足该形状)。 */\nexport interface ModuleRunResult {\n listCtxKeys(): string[]\n getCtxVar(name: string): unknown\n listKeepLines(): number[]\n getKeepByLine(lineNo: number): ExecKeepRecord | undefined\n /** P25 §3.7.4:原地写回登记(裸调用行 → 写回目标变量名;DirectExecutor 提供)。 */\n getInplaceWrites?(): Map<number, string>\n}\n\n/** 模块执行回调:独立 ctx 执行模块源码(imports = 该模块自己的 seed)。 */\nexport type ModuleRunner = (code: string, imports: Record<string, unknown>) => Promise<ModuleRunResult>\n\n/** 多文件装载错误码(runtime 归并为 ExecutionResult.failedAt)。 */\nexport type ModuleRegistryErrorCode =\n | 'MODULE_NOT_FOUND'\n | 'MODULE_CYCLE'\n | 'MODULE_EXEC_FAILED'\n | 'BINDING_NOT_EXPORTED'\n | 'MODULE_SECURITY'\n | 'MODULE_DEPTH_EXCEEDED'\n | 'MODULE_COUNT_EXCEEDED'\n\n/** 多文件装载错误(带 lineNo/callee,供 failedAt 定位 import 行)。 */\nexport class ModuleRegistryError extends Error {\n /** 错误码(MODULE_NOT_FOUND / MODULE_CYCLE / MODULE_EXEC_FAILED / BINDING_NOT_EXPORTED)。 */\n readonly code: ModuleRegistryErrorCode\n /** import 行号(failedAt.lineNo 定位用;可选)。 */\n readonly lineNo?: number\n /** 绑定名 / callee(failedAt.callee 用;可选)。 */\n readonly callee?: string\n constructor(code: ModuleRegistryErrorCode, message: string, info?: { lineNo?: number; callee?: string }) {\n super(message)\n this.name = 'ModuleRegistryError'\n this.code = code\n this.lineNo = info?.lineNo\n this.callee = info?.callee\n }\n}\n\n// ── 路径归一 ──\n\n/**\n * 相对 specifier 判定('./x' / '../x' / '/x';裸 specifier = libLoader 通道,不在此)。\n * @param specifier - import 说明符。\n * @returns 该 specifier 是否指向项目内相对路径模块。\n */\nexport function isRelativeSpecifier(specifier: string): boolean {\n return specifier.startsWith('./') || specifier.startsWith('../') || specifier.startsWith('/')\n}\n\n/**\n * 相对 specifier → moduleKey(POSIX 斜杠归一 + ./.. 段消解;相对 baseKey 目录)。\n * @param specifier - import 说明符(如 './bp.fai.js')。\n * @param baseKey - 所在模块的 moduleKey(取其目录为解析基准);主模块可省。\n * @returns 归一后的 moduleKey(与 loader.listModules() 精确匹配)。\n */\nexport function normalizeModuleKey(specifier: string, baseKey?: string): string {\n const spec = specifier.replace(/\\\\/g, '/')\n const baseDir = baseKey && baseKey.includes('/')\n ? baseKey.slice(0, baseKey.lastIndexOf('/') + 1)\n : ''\n // 绝对形态(/x)不拼 baseDir;相对形态按 baseKey 目录解析\n const combined = spec.startsWith('/') ? spec.slice(1) : `${baseDir}${spec}`\n const segs: string[] = []\n for (const seg of combined.split('/')) {\n if (seg === '' || seg === '.') continue\n if (seg === '..') {\n segs.pop()\n continue\n }\n segs.push(seg)\n }\n return segs.join('/')\n}\n\n// ── ModuleRegistry ──\n\n/**\n * 多文件模块注册表:装载/导出/绑定校验。每次调用实例化(缓存仅存活单轮装载)。\n */\nexport class ModuleRegistry {\n private cache = new Map<string, FaiModule>()\n private loadCount = 0\n\n constructor(\n private readonly loader: ProjectLoader,\n private readonly run: ModuleRunner,\n private readonly securityPolicy: SecurityPolicy = 'strict',\n ) {}\n\n /**\n * 装载 import 表对应的全部依赖并返回 seed(绑定名 → 值)。\n * @param imports - 顶层 import 条目(UiMetadata.imports 同构)。\n * @param baseKey - 所在模块的 moduleKey(相对 specifier 解析基准);主模块无 key。\n * @returns seed map(供 DirectExecutor opts.imports / params 预置 ctx)。\n * @throws ModuleRegistryError — 环 / 模块缺失 / 依赖执行失败 / 绑定未导出。\n */\n /**\n * 装载 import 表对应的全部依赖并返回 seed(绑定名 → 值)。\n * @param imports - 顶层 import 条目(UiMetadata.imports 同构)。\n * @param baseKey - 所在模块的 moduleKey(相对 specifier 解析基准);主模块无 key。\n * @param stack - 循环依赖检测栈(内部递归使用;外部调用缺省 [])。\n * @returns seed map(供 DirectExecutor opts.imports / params 预置 ctx)。\n * @throws ModuleRegistryError — 环 / 模块缺失 / 依赖执行失败 / 绑定未导出。\n */\n async resolveImports(\n imports: UiMetadata['imports'],\n baseKey?: string,\n stack: string[] = [],\n ): Promise<Record<string, unknown>> {\n const seed: Record<string, unknown> = {}\n for (const imp of imports ?? []) {\n if (!isRelativeSpecifier(imp.specifier)) continue // 裸 specifier → libLoader 通道\n const depKey = normalizeModuleKey(imp.specifier, baseKey)\n const dep = await this.load(depKey, stack)\n if (imp.kind === 'namespace' || imp.kind === 'default') {\n if (imp.localName) seed[imp.localName] = this.namespaceView(dep)\n continue\n }\n // named:每个绑定分别校验\n for (const binding of imp.bindings) {\n const value = this.resolveBinding(binding, dep, imp.lineNo)\n if (value !== undefined) seed[binding] = value\n }\n }\n return seed\n }\n\n /** 装载并执行单个模块(递归装其依赖;缓存本装载轮)。 */\n private async load(key: string, stack: string[]): Promise<FaiModule> {\n const cached = this.cache.get(key)\n if (cached) return cached\n if (stack.includes(key)) {\n throw new ModuleRegistryError(\n 'MODULE_CYCLE',\n `module cycle detected: ${[...stack, key].join(' -> ')}`,\n )\n }\n // S6:装载深度上限\n if (stack.length >= S6_MAX_DEPTH) {\n throw new ModuleRegistryError(\n 'MODULE_DEPTH_EXCEEDED',\n `module loading depth exceeded ${S6_MAX_DEPTH} (stack: ${stack.join(' -> ')})`,\n )\n }\n // S6:模块总数上限\n if (this.loadCount >= S6_MAX_MODULES) {\n throw new ModuleRegistryError(\n 'MODULE_COUNT_EXCEEDED',\n `total module count exceeded ${S6_MAX_MODULES} limit`,\n )\n }\n const available = this.loader.listModules()\n if (!available.includes(key)) {\n throw new ModuleRegistryError(\n 'MODULE_NOT_FOUND',\n `module \"${key}\" not found in project (available: ${available.length > 0 ? available.join(', ') : 'none'})`,\n )\n }\n const source = await this.loader.readSource(key)\n // A3:子模块安全扫描前置(固定 strict;违规 → MODULE_SECURITY)\n try {\n assertSecure(source, {\n policy: 'strict',\n knownNames: ['cad'],\n defaultNs: 'cad',\n })\n } catch (err) {\n if (err instanceof ParseError) {\n throw new ModuleRegistryError(\n 'MODULE_SECURITY',\n `module \"${key}\" failed security check: ${err.message}`,\n { lineNo: err.line, callee: key },\n )\n }\n throw err\n }\n this.loadCount++\n const meta = extractMetadata(source, { security: 'strict' })\n const seed = await this.resolveImports(meta.imports ?? [], key, [...stack, key])\n const result = await this.run(source, seed) // 执行失败 → runner 抛 ModuleRegistryError\n const module = { key, exports: this.buildExports(meta, result) }\n this.cache.set(key, module)\n return module\n }\n\n private buildExports(meta: UiMetadata, result: ModuleRunResult): FaiModuleExports {\n const values: Record<string, unknown> = {}\n const fns: Record<string, (...a: unknown[]) => unknown> = {}\n const shapeVarNames = new Set<PartName>()\n for (const name of result.listCtxKeys()) {\n const v = result.getCtxVar(name)\n if (v === undefined) continue\n if (typeof v === 'function') {\n fns[name] = v as (...a: unknown[]) => unknown\n } else {\n values[name] = v\n if (v !== null && typeof v === 'object' && ('positions' in v || 'children' in v)) {\n shapeVarNames.add(asPartName(name))\n }\n }\n }\n // 模块自身的存活终端:函数体 keep 登记读 ModuleRunResult(DirectExecutor.keepByLine)\n const ipw = result.getInplaceWrites?.()\n const terminals = computeLiveShapes({\n lines: meta.lines,\n blocks: meta.blocks,\n keep: {\n lineEntries: (lineNo) => meta.keep.get(lineNo),\n functionBody: (lineNo): KeepRegistration | undefined => result.getKeepByLine(lineNo),\n },\n shapeVarNames,\n ...(ipw && ipw.size > 0 ? { inplaceWrites: ipw } : {}),\n })\n const liveShapes = new Set<string>(terminals.map((t) => String(t.id)))\n return { values, fns, liveShapes }\n }\n\n /** named 绑定解析:liveShapes ∪ fns;缺失 → BINDING_NOT_EXPORTED。 */\n private resolveBinding(binding: string, dep: FaiModule, lineNo: number): unknown | undefined {\n if (dep.exports.liveShapes.has(binding)) return dep.exports.values[binding]\n if (Object.prototype.hasOwnProperty.call(dep.exports.fns, binding)) return dep.exports.fns[binding]\n throw new ModuleRegistryError(\n 'BINDING_NOT_EXPORTED',\n `\"${binding}\" is not exported by module \"${dep.key}\" (live shapes: ${[...dep.exports.liveShapes].join(', ') || 'none'})`,\n { lineNo, callee: binding },\n )\n }\n\n /** 命名空间/默认 import 的模块视图:values + fns。 */\n private namespaceView(dep: FaiModule): Record<string, unknown> {\n return { ...dep.exports.values, ...dep.exports.fns }\n }\n}\n"]}
1
+ {"version":3,"file":"module-registry.js","sourceRoot":"","sources":["../../src/cad-runtime/module-registry.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * module-registry — 多文件模块注册表(§4.5 / A-8/A-9/A-10)\n *\n * 无 IR 通道的多文件装载:主模块(runtime 直接执行)的顶层相对 import\n * (`import { bp } from './x.fai.js'`)指向项目内其它 `.fai.js` 模块。\n * 每个依赖模块用**独立 ctx** 执行(经注入的 ModuleRunner),产出导出面:\n * - values:模块存活 ctx 键中的 shape/常量(非函数);\n * - fns:模块内顶层函数;\n * - liveShapes:computeLiveShapes 对该模块自身的存活终端(模块内消费判定生效——\n * A-9:A 内被消费的 shape 不在 liveShapes → B 引用报错)。\n *\n * 名字契约(D6):A 的 LHS 名 = 导出名;B 的 import 绑定名 = 引用名;绑定必须 ∈\n * A.liveShapes ∪ A.fns(A-8 缺失导出名 → ModuleRegistryError)。普通常量不在此列——\n * 具名 import 常量被拒,见\n * .agents/notes/rejected/architecture/2026-09-09-named-import-of-constants.md。\n * 跨文件引用 ≠ 消费:B 引用 A 的 shape 不影响 A 的 liveShapes(A 单独执行时计算)。\n *\n * 装载:DFS 递归(相对 specifier → moduleKey 归一 → readSource → 提取其 import →\n * 先装依赖 → 带 seed 执行自身);循环依赖 → MODULE_CYCLE(failedAt 带环路径)。\n * 本实现每次调用重建缓存(execute/append 各轮全量重读重执行;fingerprint 增量缓存\n * 留作 v2)。\n */\n\nimport { extractMetadata } from '../lang/metadata-extractor'\nimport type { UiMetadata } from '../lang/metadata-extractor'\nimport { assertSecure, type SecurityPolicy, S6_MAX_DEPTH, S6_MAX_MODULES } from '../lang/security-scanner'\nimport { scanDeterminism, type DeterminismPolicy } from '../lang/determinism-scanner'\nimport { computeLiveShapes, type KeepRegistration } from './live-shapes'\nimport type { ExecKeepRecord } from './direct-executor'\nimport type { ProjectLoader } from './ports'\nimport { asPartName, type PartName } from '../identity'\nimport { ParseError } from '../lang/parse-error'\n\n// ── 导出类型 ──\n\n/** 模块导出面(§4.5 FaiModuleExports)。 */\nexport interface FaiModuleExports {\n /** 存活 shape + 常量(params)——ctx 非函数键 */\n values: Record<string, unknown>\n /** 顶层函数(ctx 函数键) */\n fns: Record<string, (...a: unknown[]) => unknown>\n /** 存活 shape 名(引用校验;模块内消费生效) */\n liveShapes: Set<string>\n}\n\n/** 已装载模块。 */\nexport interface FaiModule {\n key: string\n exports: FaiModuleExports\n}\n\n/** 模块执行视图(ModuleRunner 返回;DirectExecutor 满足该形状)。 */\nexport interface ModuleRunResult {\n listCtxKeys(): string[]\n getCtxVar(name: string): unknown\n listKeepLines(): number[]\n getKeepByLine(lineNo: number): ExecKeepRecord | undefined\n /** P25 §3.7.4:原地写回登记(裸调用行 → 写回目标变量名;DirectExecutor 提供)。 */\n getInplaceWrites?(): Map<number, string>\n}\n\n/** 模块执行回调:独立 ctx 执行模块源码(imports = 该模块自己的 seed)。 */\nexport type ModuleRunner = (code: string, imports: Record<string, unknown>) => Promise<ModuleRunResult>\n\n/** 多文件装载错误码(runtime 归并为 ExecutionResult.failedAt)。 */\nexport type ModuleRegistryErrorCode =\n | 'MODULE_NOT_FOUND'\n | 'MODULE_CYCLE'\n | 'MODULE_EXEC_FAILED'\n | 'BINDING_NOT_EXPORTED'\n | 'MODULE_SECURITY'\n | 'MODULE_DEPTH_EXCEEDED'\n | 'MODULE_COUNT_EXCEEDED'\n\n/** 多文件装载错误(带 lineNo/callee,供 failedAt 定位 import 行)。 */\nexport class ModuleRegistryError extends Error {\n /** 错误码(MODULE_NOT_FOUND / MODULE_CYCLE / MODULE_EXEC_FAILED / BINDING_NOT_EXPORTED)。 */\n readonly code: ModuleRegistryErrorCode\n /** import 行号(failedAt.lineNo 定位用;可选)。 */\n readonly lineNo?: number\n /** 绑定名 / callee(failedAt.callee 用;可选)。 */\n readonly callee?: string\n constructor(code: ModuleRegistryErrorCode, message: string, info?: { lineNo?: number; callee?: string }) {\n super(message)\n this.name = 'ModuleRegistryError'\n this.code = code\n this.lineNo = info?.lineNo\n this.callee = info?.callee\n }\n}\n\n// ── 路径归一 ──\n\n/**\n * 相对 specifier 判定('./x' / '../x' / '/x';裸 specifier = libLoader 通道,不在此)。\n * @param specifier - import 说明符。\n * @returns 该 specifier 是否指向项目内相对路径模块。\n */\nexport function isRelativeSpecifier(specifier: string): boolean {\n return specifier.startsWith('./') || specifier.startsWith('../') || specifier.startsWith('/')\n}\n\n/**\n * 相对 specifier → moduleKey(POSIX 斜杠归一 + ./.. 段消解;相对 baseKey 目录)。\n * @param specifier - import 说明符(如 './bp.fai.js')。\n * @param baseKey - 所在模块的 moduleKey(取其目录为解析基准);主模块可省。\n * @returns 归一后的 moduleKey(与 loader.listModules() 精确匹配)。\n */\nexport function normalizeModuleKey(specifier: string, baseKey?: string): string {\n const spec = specifier.replace(/\\\\/g, '/')\n const baseDir = baseKey && baseKey.includes('/')\n ? baseKey.slice(0, baseKey.lastIndexOf('/') + 1)\n : ''\n // 绝对形态(/x)不拼 baseDir;相对形态按 baseKey 目录解析\n const combined = spec.startsWith('/') ? spec.slice(1) : `${baseDir}${spec}`\n const segs: string[] = []\n for (const seg of combined.split('/')) {\n if (seg === '' || seg === '.') continue\n if (seg === '..') {\n segs.pop()\n continue\n }\n segs.push(seg)\n }\n return segs.join('/')\n}\n\n// ── ModuleRegistry ──\n\n/**\n * 多文件模块注册表:装载/导出/绑定校验。每次调用实例化(缓存仅存活单轮装载)。\n */\nexport class ModuleRegistry {\n private cache = new Map<string, FaiModule>()\n private loadCount = 0\n\n constructor(\n private readonly loader: ProjectLoader,\n private readonly run: ModuleRunner,\n private readonly securityPolicy: SecurityPolicy = 'strict',\n private readonly determinismPolicy: DeterminismPolicy = 'off',\n ) {}\n\n /**\n * 装载 import 表对应的全部依赖并返回 seed(绑定名 → 值)。\n * @param imports - 顶层 import 条目(UiMetadata.imports 同构)。\n * @param baseKey - 所在模块的 moduleKey(相对 specifier 解析基准);主模块无 key。\n * @returns seed map(供 DirectExecutor opts.imports / params 预置 ctx)。\n * @throws ModuleRegistryError — 环 / 模块缺失 / 依赖执行失败 / 绑定未导出。\n */\n /**\n * 装载 import 表对应的全部依赖并返回 seed(绑定名 → 值)。\n * @param imports - 顶层 import 条目(UiMetadata.imports 同构)。\n * @param baseKey - 所在模块的 moduleKey(相对 specifier 解析基准);主模块无 key。\n * @param stack - 循环依赖检测栈(内部递归使用;外部调用缺省 [])。\n * @returns seed map(供 DirectExecutor opts.imports / params 预置 ctx)。\n * @throws ModuleRegistryError — 环 / 模块缺失 / 依赖执行失败 / 绑定未导出。\n */\n async resolveImports(\n imports: UiMetadata['imports'],\n baseKey?: string,\n stack: string[] = [],\n ): Promise<Record<string, unknown>> {\n const seed: Record<string, unknown> = {}\n for (const imp of imports ?? []) {\n if (!isRelativeSpecifier(imp.specifier)) continue // 裸 specifier → libLoader 通道\n const depKey = normalizeModuleKey(imp.specifier, baseKey)\n const dep = await this.load(depKey, stack)\n if (imp.kind === 'namespace' || imp.kind === 'default') {\n if (imp.localName) seed[imp.localName] = this.namespaceView(dep)\n continue\n }\n // named:每个绑定分别校验\n for (const binding of imp.bindings) {\n const value = this.resolveBinding(binding, dep, imp.lineNo)\n if (value !== undefined) seed[binding] = value\n }\n }\n return seed\n }\n\n /** 装载并执行单个模块(递归装其依赖;缓存本装载轮)。 */\n private async load(key: string, stack: string[]): Promise<FaiModule> {\n const cached = this.cache.get(key)\n if (cached) return cached\n if (stack.includes(key)) {\n throw new ModuleRegistryError(\n 'MODULE_CYCLE',\n `module cycle detected: ${[...stack, key].join(' -> ')}`,\n )\n }\n // S6:装载深度上限\n if (stack.length >= S6_MAX_DEPTH) {\n throw new ModuleRegistryError(\n 'MODULE_DEPTH_EXCEEDED',\n `module loading depth exceeded ${S6_MAX_DEPTH} (stack: ${stack.join(' -> ')})`,\n )\n }\n // S6:模块总数上限\n if (this.loadCount >= S6_MAX_MODULES) {\n throw new ModuleRegistryError(\n 'MODULE_COUNT_EXCEEDED',\n `total module count exceeded ${S6_MAX_MODULES} limit`,\n )\n }\n const available = this.loader.listModules()\n if (!available.includes(key)) {\n throw new ModuleRegistryError(\n 'MODULE_NOT_FOUND',\n `module \"${key}\" not found in project (available: ${available.length > 0 ? available.join(', ') : 'none'})`,\n )\n }\n const source = await this.loader.readSource(key)\n // A3:子模块安全扫描前置(固定 strict;违规 → MODULE_SECURITY)\n try {\n assertSecure(source, {\n policy: 'strict',\n knownNames: ['cad'],\n defaultNs: 'cad',\n })\n } catch (err) {\n if (err instanceof ParseError) {\n throw new ModuleRegistryError(\n 'MODULE_SECURITY',\n `module \"${key}\" failed security check: ${err.message}`,\n { lineNo: err.line, callee: key },\n )\n }\n throw err\n }\n this.loadCount++\n const meta = extractMetadata(source, { security: 'strict' })\n // 确定性扫描(B 档 taint):违规 → MODULE_SECURITY(error 档);warn 档静默放行\n if (this.determinismPolicy !== 'off') {\n const ns = (meta.imports ?? []).filter((i) => i.kind === 'namespace' && i.localName).map((i) => i.localName!)\n const cals = (meta.imports ?? []).filter((i) => i.kind === 'named').flatMap((i) => i.bindings)\n const det = scanDeterminism(source, { defaultNs: 'cad', extraNamespaces: ns, extraCallees: cals })\n if (det.violations.length > 0 && this.determinismPolicy === 'error') {\n throw new ModuleRegistryError(\n 'MODULE_SECURITY',\n `module \"${key}\" failed determinism check: ${det.violations[0]!.message}`,\n { lineNo: det.violations[0]!.lineNo, callee: 'determinism' },\n )\n }\n }\n const seed = await this.resolveImports(meta.imports ?? [], key, [...stack, key])\n const result = await this.run(source, seed) // 执行失败 → runner 抛 ModuleRegistryError\n const module = { key, exports: this.buildExports(meta, result) }\n this.cache.set(key, module)\n return module\n }\n\n private buildExports(meta: UiMetadata, result: ModuleRunResult): FaiModuleExports {\n const values: Record<string, unknown> = {}\n const fns: Record<string, (...a: unknown[]) => unknown> = {}\n const shapeVarNames = new Set<PartName>()\n for (const name of result.listCtxKeys()) {\n const v = result.getCtxVar(name)\n if (v === undefined) continue\n if (typeof v === 'function') {\n fns[name] = v as (...a: unknown[]) => unknown\n } else {\n values[name] = v\n if (v !== null && typeof v === 'object' && ('positions' in v || 'children' in v)) {\n shapeVarNames.add(asPartName(name))\n }\n }\n }\n // 模块自身的存活终端:函数体 keep 登记读 ModuleRunResult(DirectExecutor.keepByLine)\n const ipw = result.getInplaceWrites?.()\n const terminals = computeLiveShapes({\n lines: meta.lines,\n blocks: meta.blocks,\n keep: {\n lineEntries: (lineNo) => meta.keep.get(lineNo),\n functionBody: (lineNo): KeepRegistration | undefined => result.getKeepByLine(lineNo),\n },\n shapeVarNames,\n ...(ipw && ipw.size > 0 ? { inplaceWrites: ipw } : {}),\n })\n const liveShapes = new Set<string>(terminals.map((t) => String(t.id)))\n return { values, fns, liveShapes }\n }\n\n /** named 绑定解析:liveShapes ∪ fns;缺失 → BINDING_NOT_EXPORTED。 */\n private resolveBinding(binding: string, dep: FaiModule, lineNo: number): unknown | undefined {\n if (dep.exports.liveShapes.has(binding)) return dep.exports.values[binding]\n if (Object.prototype.hasOwnProperty.call(dep.exports.fns, binding)) return dep.exports.fns[binding]\n throw new ModuleRegistryError(\n 'BINDING_NOT_EXPORTED',\n `\"${binding}\" is not exported by module \"${dep.key}\" (live shapes: ${[...dep.exports.liveShapes].join(', ') || 'none'})`,\n { lineNo, callee: binding },\n )\n }\n\n /** 命名空间/默认 import 的模块视图:values + fns。 */\n private namespaceView(dep: FaiModule): Record<string, unknown> {\n return { ...dep.exports.values, ...dep.exports.fns }\n }\n}\n"]}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * runtime-concurrent-error — 并发执行拒绝错误(C1)
3
+ *
4
+ * 独立叶子文件(与 execution-limit-error.ts 同法):CadRuntime 的三个执行入口
5
+ * (execute / append / update)共用,code = 'E_RUNTIME_CONCURRENT'
6
+ * (宿主可按 code 识别,区别于普通执行错误)。
7
+ *
8
+ * ## 为什么必须拒绝,而不是"尽力而为"
9
+ *
10
+ * `setCurrentStmt`、全局 backends 配置(`configureBackends`)、BREP 内核单例都是
11
+ * **进程级单例**。两个 CadRuntime 交错执行时,后进入者的 `claimBackends()` 会把
12
+ * 全局 backends 指向自己,先进入者的后续语句被**静默劫持**(dispatch 走错槽、
13
+ * 缓存键漂移、顶替释放旧句柄后拓扑重建撞悬空句柄)——症状远离根因,是最难查的一类。
14
+ *
15
+ * 旧代码只在注释里承认"并发交错仍会互踩"(`runtime.ts` 的 claimBackends 文档)。
16
+ * 按项目红线「能力缺口要暴露,不是加旁路开关」,这里改成**显式抛错**:
17
+ * 并发不是"可能不安全",而是**不受支持**,必须让调用方当场知道。
18
+ *
19
+ * 用户已裁决:**不允许并发执行多 runtime**(开发计划 §4.7 C1)。
20
+ */
21
+ export declare class RuntimeConcurrentError extends Error {
22
+ /** 当前持有执行态的那个 runtime 的 id。 */
23
+ readonly holderId: number;
24
+ /** 被拒绝的 runtime 的 id。 */
25
+ readonly rejectedId: number;
26
+ /** 被拒绝的入口名(execute / append / update)。 */
27
+ readonly entry: string;
28
+ /** 宿主可按 code 识别的错误码:'E_RUNTIME_CONCURRENT'。 */
29
+ readonly code = "E_RUNTIME_CONCURRENT";
30
+ constructor(
31
+ /** 当前持有执行态的那个 runtime 的 id。 */
32
+ holderId: number,
33
+ /** 被拒绝的 runtime 的 id。 */
34
+ rejectedId: number,
35
+ /** 被拒绝的入口名(execute / append / update)。 */
36
+ entry: string);
37
+ }
38
+ //# sourceMappingURL=runtime-concurrent-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-concurrent-error.d.ts","sourceRoot":"","sources":["../../src/cad-runtime/runtime-concurrent-error.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;IAI7C,+BAA+B;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,yBAAyB;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM;IAC3B,0CAA0C;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM;IARxB,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,0BAAyB;;IAEpC,+BAA+B;IACtB,QAAQ,EAAE,MAAM;IACzB,yBAAyB;IAChB,UAAU,EAAE,MAAM;IAC3B,0CAA0C;IACjC,KAAK,EAAE,MAAM;CASzB"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * runtime-concurrent-error — 并发执行拒绝错误(C1)
3
+ *
4
+ * 独立叶子文件(与 execution-limit-error.ts 同法):CadRuntime 的三个执行入口
5
+ * (execute / append / update)共用,code = 'E_RUNTIME_CONCURRENT'
6
+ * (宿主可按 code 识别,区别于普通执行错误)。
7
+ *
8
+ * ## 为什么必须拒绝,而不是"尽力而为"
9
+ *
10
+ * `setCurrentStmt`、全局 backends 配置(`configureBackends`)、BREP 内核单例都是
11
+ * **进程级单例**。两个 CadRuntime 交错执行时,后进入者的 `claimBackends()` 会把
12
+ * 全局 backends 指向自己,先进入者的后续语句被**静默劫持**(dispatch 走错槽、
13
+ * 缓存键漂移、顶替释放旧句柄后拓扑重建撞悬空句柄)——症状远离根因,是最难查的一类。
14
+ *
15
+ * 旧代码只在注释里承认"并发交错仍会互踩"(`runtime.ts` 的 claimBackends 文档)。
16
+ * 按项目红线「能力缺口要暴露,不是加旁路开关」,这里改成**显式抛错**:
17
+ * 并发不是"可能不安全",而是**不受支持**,必须让调用方当场知道。
18
+ *
19
+ * 用户已裁决:**不允许并发执行多 runtime**(开发计划 §4.7 C1)。
20
+ */
21
+ export class RuntimeConcurrentError extends Error {
22
+ holderId;
23
+ rejectedId;
24
+ entry;
25
+ /** 宿主可按 code 识别的错误码:'E_RUNTIME_CONCURRENT'。 */
26
+ code = 'E_RUNTIME_CONCURRENT';
27
+ constructor(
28
+ /** 当前持有执行态的那个 runtime 的 id。 */
29
+ holderId,
30
+ /** 被拒绝的 runtime 的 id。 */
31
+ rejectedId,
32
+ /** 被拒绝的入口名(execute / append / update)。 */
33
+ entry) {
34
+ super(`[faijs] E_RUNTIME_CONCURRENT: runtime #${rejectedId} cannot ${entry} ` +
35
+ `while runtime #${holderId} is executing — concurrent multi-runtime execution is not supported ` +
36
+ `(setCurrentStmt / backends / kernel are process-wide singletons). Serialize your runtimes.`);
37
+ this.holderId = holderId;
38
+ this.rejectedId = rejectedId;
39
+ this.entry = entry;
40
+ this.name = 'RuntimeConcurrentError';
41
+ }
42
+ }
43
+ //# sourceMappingURL=runtime-concurrent-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-concurrent-error.js","sourceRoot":"","sources":["../../src/cad-runtime/runtime-concurrent-error.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAKpC;IAEA;IAEA;IARX,+CAA+C;IACtC,IAAI,GAAG,sBAAsB,CAAA;IACtC;IACE,+BAA+B;IACtB,QAAgB;IACzB,yBAAyB;IAChB,UAAkB;IAC3B,0CAA0C;IACjC,KAAa;QAEtB,KAAK,CACH,0CAA0C,UAAU,WAAW,KAAK,GAAG;YACrE,kBAAkB,QAAQ,sEAAsE;YAChG,4FAA4F,CAC/F,CAAA;QAVQ,aAAQ,GAAR,QAAQ,CAAQ;QAEhB,eAAU,GAAV,UAAU,CAAQ;QAElB,UAAK,GAAL,KAAK,CAAQ;QAOtB,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAA;IACtC,CAAC;CACF","sourcesContent":["/**\n * runtime-concurrent-error — 并发执行拒绝错误(C1)\n *\n * 独立叶子文件(与 execution-limit-error.ts 同法):CadRuntime 的三个执行入口\n * (execute / append / update)共用,code = 'E_RUNTIME_CONCURRENT'\n * (宿主可按 code 识别,区别于普通执行错误)。\n *\n * ## 为什么必须拒绝,而不是\"尽力而为\"\n *\n * `setCurrentStmt`、全局 backends 配置(`configureBackends`)、BREP 内核单例都是\n * **进程级单例**。两个 CadRuntime 交错执行时,后进入者的 `claimBackends()` 会把\n * 全局 backends 指向自己,先进入者的后续语句被**静默劫持**(dispatch 走错槽、\n * 缓存键漂移、顶替释放旧句柄后拓扑重建撞悬空句柄)——症状远离根因,是最难查的一类。\n *\n * 旧代码只在注释里承认\"并发交错仍会互踩\"(`runtime.ts` 的 claimBackends 文档)。\n * 按项目红线「能力缺口要暴露,不是加旁路开关」,这里改成**显式抛错**:\n * 并发不是\"可能不安全\",而是**不受支持**,必须让调用方当场知道。\n *\n * 用户已裁决:**不允许并发执行多 runtime**(开发计划 §4.7 C1)。\n */\nexport class RuntimeConcurrentError extends Error {\n /** 宿主可按 code 识别的错误码:'E_RUNTIME_CONCURRENT'。 */\n readonly code = 'E_RUNTIME_CONCURRENT'\n constructor(\n /** 当前持有执行态的那个 runtime 的 id。 */\n readonly holderId: number,\n /** 被拒绝的 runtime 的 id。 */\n readonly rejectedId: number,\n /** 被拒绝的入口名(execute / append / update)。 */\n readonly entry: string,\n ) {\n super(\n `[faijs] E_RUNTIME_CONCURRENT: runtime #${rejectedId} cannot ${entry} ` +\n `while runtime #${holderId} is executing — concurrent multi-runtime execution is not supported ` +\n `(setCurrentStmt / backends / kernel are process-wide singletons). Serialize your runtimes.`,\n )\n this.name = 'RuntimeConcurrentError'\n }\n}\n"]}
@@ -32,6 +32,7 @@ export { computeContentKey } from './content-key.js';
32
32
  export { stableFingerprint } from './content-key.js';
33
33
  import { type CompoundShape } from '../shape.js';
34
34
  import type { PartNaming } from '../topology/naming/types.js';
35
+ import { type DeterminismPolicy } from '../lang/determinism-scanner.js';
35
36
  /**
36
37
  * A single validation error produced by CadRuntime.check.
37
38
  */
@@ -186,6 +187,7 @@ export interface ExecuteOptions {
186
187
  executionTimeoutMs?: number;
187
188
  }
188
189
  export { ExecutionLimitError } from './execution-limit-error.js';
190
+ export { RuntimeConcurrentError } from './runtime-concurrent-error.js';
189
191
  /**
190
192
  * Thrown by CadRuntime.append when a newly appended statement references a
191
193
  * variable that is not in the persistent context — its producer was never
@@ -203,11 +205,13 @@ export declare class AppendPrefixError extends Error {
203
205
  /** The referenced variable missing from the persistent ctx. */
204
206
  missingVar: string);
205
207
  }
208
+ export type { DeterminismPolicy };
206
209
  /**
207
210
  * CadRuntime 构造选项(第 4 参;缺省全部可选)。
208
211
  *
209
212
  * direct 是唯一执行路径。security 透传给 DirectExecutor 与 extractMetadata
210
- * (A1/A2/A3 缺省 'strict')。
213
+ * (A1/A2/A3 缺省 'strict')。determinism 在 execute/append 前 对源码做 B 档
214
+ * taint 扫描(缺省 'error',见 docs/reproducibility-contract.md §3)。
211
215
  */
212
216
  export interface CadRuntimeOptions {
213
217
  /** 安全策略档位(缺省 'strict';透传给 DirectExecutor 与 extractMetadata) */
@@ -218,6 +222,12 @@ export interface CadRuntimeOptions {
218
222
  * 使用——见 docs/plans/2026-09-14-no-eval-interpreter-backend-design.md。
219
223
  */
220
224
  execBackend?: ExecBackendChoice;
225
+ /**
226
+ * 确定性扫描档位(缺省 'error')。执行前对 .fai.js 源码及其 import 的项目模块
227
+ * / @faicad/* 库源码做 B 档 taint 扫描,违规按档位处理。库源码经
228
+ * `ports.libLoader.loadSource` 获取(宿主未提供则跳过库扫描)。
229
+ */
230
+ determinism?: DeterminismPolicy;
221
231
  }
222
232
  /**
223
233
  * CadRuntime is the execution core of the L2 orchestration layer.
@@ -270,8 +280,14 @@ export declare class CadRuntime {
270
280
  private topologyCache;
271
281
  /** 无 IR 执行器(DirectExecutor,T5 后唯一执行路径) */
272
282
  private readonly directExecutor;
283
+ /** 实例 id(仅用于 C1 并发错误信息里的定位,不参与任何语义判定)。 */
284
+ private readonly runtimeId;
273
285
  /** 安全策略档位(透传给 extractMetadata 与 DirectExecutor;缺省 'strict') */
274
286
  private readonly securityPolicy;
287
+ /** 确定性扫描档位(缺省 'error';execute/append 前对源码做 B 档 taint 扫描)。 */
288
+ private readonly determinismPolicy;
289
+ /** warn 档位下收集的确定性警告,合并进最终 ExecutionResult.infos。 */
290
+ private determinismWarnings;
275
291
  /** 宿主注册库(含 cad:由根门面 createRuntime 包装注入;注入编译产物 fn 的第二参 ns) */
276
292
  private readonly libs;
277
293
  /** 库内容身份表 (binding → content hash),增量 key 用(B2,§7.3) */
@@ -328,7 +344,11 @@ export declare class CadRuntime {
328
344
  * 先前 runtime 的后续 execute 会被静默劫持(dispatch 走错槽、缓存键漂移、
329
345
  * 顶替释放旧 BREP 句柄后拓扑重建撞上悬空句柄)。因此除构造外,每个执行入口
330
346
  * (execute,所有执行路径的汇聚点)都必须先重新认领本实例的配置。
331
- * 限制:并发交错执行多个 runtime 仍会互踩(与 setCurrentStmt 同级的串行假设)。
347
+ *
348
+ * ⚠️ 并发交错执行多个 runtime **仍会互踩**——这条限制现在由全局执行态锁强制
349
+ * ({@link withExecutionLock}):第二个 runtime 在他人执行态时抛
350
+ * {@link RuntimeConcurrentError}(E_RUNTIME_CONCURRENT),不再"尽力而为"。
351
+ * 用户已裁决不允许并发(开发计划 §4.7 C1)。
332
352
  * ⚠️ getter 的 this 指向所在对象字面量,用箭头闭包捕获实例(避免 no-this-alias)。
333
353
  */
334
354
  private claimBackends;
@@ -339,11 +359,25 @@ export declare class CadRuntime {
339
359
  * 现有宿主无需改动即恢复默认 BREP 行为;换引擎仍是静态的(装配期注册其它引擎即可)。
340
360
  */
341
361
  private ensureBrepChain;
362
+ /**
363
+ * 取全局执行态锁并运行 `fn`(C1)。跨实例并发 → 抛 {@link RuntimeConcurrentError};
364
+ * 本实例重入(update 内部落到 executeDirectText/appendDirectText)放行。
365
+ *
366
+ * 刻意**同步**取锁(不在取锁前 await):这样 `runtimeA.execute(...)` 尚未 await 时
367
+ * 紧接着调 `runtimeB.execute(...)` 必然被拒绝,行为可确定、可测试。
368
+ * @param entry - 入口名(execute / append / update),仅用于错误信息。
369
+ * @param fn - 实际执行体。
370
+ * @returns fn 的结果;无论成功失败都释放锁(finally)。
371
+ */
372
+ private withExecutionLock;
373
+ /** 当前执行态持有者的入口名(诊断;无持有者时 null)。 */
374
+ static get executingEntry(): string | null;
342
375
  /**
343
376
  * Full execution from code text: parse → execute every statement.
344
377
  * @param code - the .fai.js source text.
345
378
  * @param opts - optional execution options.
346
379
  * @returns promise resolving to the ExecutionResult.
380
+ * @throws {RuntimeConcurrentError} when another CadRuntime is already executing (C1).
347
381
  */
348
382
  execute(code: string, opts?: ExecuteOptions): Promise<ExecutionResult>;
349
383
  /**
@@ -353,8 +387,23 @@ export declare class CadRuntime {
353
387
  * @param code - the new .fai.js source text to append.
354
388
  * @param opts - optional execution options.
355
389
  * @returns promise resolving to the ExecutionResult.
390
+ * @throws {RuntimeConcurrentError} when another CadRuntime is already executing (C1).
356
391
  */
357
392
  append(code: string, opts?: ExecuteOptions): Promise<ExecutionResult>;
393
+ /**
394
+ * 确定性扫描门(B 档 taint):执行前对源码做静态扫描,违规按 determinismPolicy 处理。
395
+ *
396
+ * 扫描范围:主文件 + @faicad/* 库源码(经 libLoader.loadSource,若宿主提供)。
397
+ * 项目内相对 import 模块的扫描由 ModuleRegistry.load 内部完成(构造时传入 policy)。
398
+ *
399
+ * @returns ExecutionResult(违规 + policy='error' 时),null(通过或 warn/off)。
400
+ * warn 档位下警告收集到 this.determinismWarnings,由调用方合并进 infos。
401
+ */
402
+ private runDeterminismGate;
403
+ /** 从 meta.imports 提取扫描提示:namespace import → extraNamespaces,named import → extraCallees。 */
404
+ private extractDeterminismHints;
405
+ /** 扫描库源码(契约:输入必须是编译后的纯 JS;含 TS 语法/解析失败 → 显式报错,无剥离、无回退)。 */
406
+ private scanLibrarySource;
358
407
  /**
359
408
  * Direct-mode full execution: the code text runs on the DirectExecutor
360
409
  * and outputs/terminals are assembled from the persistent ctx +
@@ -444,6 +493,7 @@ export declare class CadRuntime {
444
493
  * @param newCode - the .fai.js source text after the edit.
445
494
  * @param opts - optional execution options.
446
495
  * @returns promise resolving to the ExecutionResult.
496
+ * @throws {RuntimeConcurrentError} when another CadRuntime is already executing (C1).
447
497
  */
448
498
  update(oldCode: string, newCode: string, opts?: ExecuteOptions): Promise<ExecutionResult>;
449
499
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/cad-runtime/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/cad-runtime/runtime.ts"],"names":[],"mappings":"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"}