@faicad/faijs 0.13.2 → 0.14.1

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 (285) hide show
  1. package/dist/api/api-namespace.d.ts.map +1 -1
  2. package/dist/api/api-namespace.js +30 -4
  3. package/dist/api/api-namespace.js.map +1 -1
  4. package/dist/api/boolean.d.ts +19 -0
  5. package/dist/api/boolean.d.ts.map +1 -1
  6. package/dist/api/boolean.js +51 -10
  7. package/dist/api/boolean.js.map +1 -1
  8. package/dist/api/chamfer.d.ts.map +1 -1
  9. package/dist/api/chamfer.js +8 -7
  10. package/dist/api/chamfer.js.map +1 -1
  11. package/dist/api/compound-geom.d.ts +45 -0
  12. package/dist/api/compound-geom.d.ts.map +1 -0
  13. package/dist/api/compound-geom.js +85 -0
  14. package/dist/api/compound-geom.js.map +1 -0
  15. package/dist/api/compound.d.ts +2 -0
  16. package/dist/api/compound.d.ts.map +1 -1
  17. package/dist/api/compound.js +2 -0
  18. package/dist/api/compound.js.map +1 -1
  19. package/dist/api/copy.d.ts +1 -0
  20. package/dist/api/copy.d.ts.map +1 -1
  21. package/dist/api/copy.js +4 -2
  22. package/dist/api/copy.js.map +1 -1
  23. package/dist/api/edge-ref.d.ts.map +1 -1
  24. package/dist/api/edge-ref.js +7 -4
  25. package/dist/api/edge-ref.js.map +1 -1
  26. package/dist/api/engrave.d.ts.map +1 -1
  27. package/dist/api/engrave.js +1 -0
  28. package/dist/api/engrave.js.map +1 -1
  29. package/dist/api/extrude.d.ts.map +1 -1
  30. package/dist/api/extrude.js +131 -3
  31. package/dist/api/extrude.js.map +1 -1
  32. package/dist/api/face-ref.d.ts.map +1 -1
  33. package/dist/api/face-ref.js +7 -4
  34. package/dist/api/face-ref.js.map +1 -1
  35. package/dist/api/fai_drill.d.ts +1 -1
  36. package/dist/api/fai_drill.d.ts.map +1 -1
  37. package/dist/api/fai_drill.js +31 -18
  38. package/dist/api/fai_drill.js.map +1 -1
  39. package/dist/api/fai_extrude.d.ts +1 -1
  40. package/dist/api/fai_extrude.d.ts.map +1 -1
  41. package/dist/api/fai_extrude.js +2 -1
  42. package/dist/api/fai_extrude.js.map +1 -1
  43. package/dist/api/fai_split.d.ts +1 -1
  44. package/dist/api/fai_split.d.ts.map +1 -1
  45. package/dist/api/fai_split.js +2 -1
  46. package/dist/api/fai_split.js.map +1 -1
  47. package/dist/api/fillet.d.ts.map +1 -1
  48. package/dist/api/fillet.js +6 -5
  49. package/dist/api/fillet.js.map +1 -1
  50. package/dist/api/generated/operations.js +16 -16
  51. package/dist/api/generated/operations.js.map +1 -1
  52. package/dist/api/generated/script-face-manifest.d.ts.map +1 -1
  53. package/dist/api/generated/script-face-manifest.js +0 -1
  54. package/dist/api/generated/script-face-manifest.js.map +1 -1
  55. package/dist/api/generated/script-face.d.ts +1 -4
  56. package/dist/api/generated/script-face.d.ts.map +1 -1
  57. package/dist/api/generated/script-face.js +2 -3
  58. package/dist/api/generated/script-face.js.map +1 -1
  59. package/dist/api/generated/sketching.js +1 -1
  60. package/dist/api/generated/sketching.js.map +1 -1
  61. package/dist/api/generated/topology.d.ts +0 -48
  62. package/dist/api/generated/topology.d.ts.map +1 -1
  63. package/dist/api/generated/topology.js +20 -62
  64. package/dist/api/generated/topology.js.map +1 -1
  65. package/dist/api/import-brep.d.ts +36 -0
  66. package/dist/api/import-brep.d.ts.map +1 -0
  67. package/dist/api/import-brep.js +72 -0
  68. package/dist/api/import-brep.js.map +1 -0
  69. package/dist/api/import-step.d.ts +28 -0
  70. package/dist/api/import-step.d.ts.map +1 -0
  71. package/dist/api/import-step.js +57 -0
  72. package/dist/api/import-step.js.map +1 -0
  73. package/dist/api/index.d.ts +7 -2
  74. package/dist/api/index.d.ts.map +1 -1
  75. package/dist/api/index.js +19 -5
  76. package/dist/api/index.js.map +1 -1
  77. package/dist/api/internal/compat-op.d.ts.map +1 -1
  78. package/dist/api/internal/compat-op.js +2 -1
  79. package/dist/api/internal/compat-op.js.map +1 -1
  80. package/dist/api/knurl.d.ts.map +1 -1
  81. package/dist/api/knurl.js +1 -0
  82. package/dist/api/knurl.js.map +1 -1
  83. package/dist/api/load.d.ts +3 -1
  84. package/dist/api/load.d.ts.map +1 -1
  85. package/dist/api/load.js +3 -1
  86. package/dist/api/load.js.map +1 -1
  87. package/dist/api/pattern.d.ts +32 -0
  88. package/dist/api/pattern.d.ts.map +1 -0
  89. package/dist/api/pattern.js +121 -0
  90. package/dist/api/pattern.js.map +1 -0
  91. package/dist/api/place.d.ts +35 -0
  92. package/dist/api/place.d.ts.map +1 -0
  93. package/dist/api/place.js +113 -0
  94. package/dist/api/place.js.map +1 -0
  95. package/dist/api/primitives.d.ts.map +1 -1
  96. package/dist/api/primitives.js +10 -3
  97. package/dist/api/primitives.js.map +1 -1
  98. package/dist/api/screw.d.ts.map +1 -1
  99. package/dist/api/screw.js +1 -0
  100. package/dist/api/screw.js.map +1 -1
  101. package/dist/api/sdf.d.ts.map +1 -1
  102. package/dist/api/sdf.js +1 -0
  103. package/dist/api/sdf.js.map +1 -1
  104. package/dist/api/sketch.d.ts.map +1 -1
  105. package/dist/api/sketch.js +1 -0
  106. package/dist/api/sketch.js.map +1 -1
  107. package/dist/api/split.d.ts +31 -0
  108. package/dist/api/split.d.ts.map +1 -0
  109. package/dist/api/split.js +96 -0
  110. package/dist/api/split.js.map +1 -0
  111. package/dist/api/surface/arg-spec.d.ts +9 -0
  112. package/dist/api/surface/arg-spec.d.ts.map +1 -1
  113. package/dist/api/surface/arg-spec.js +49 -30
  114. package/dist/api/surface/arg-spec.js.map +1 -1
  115. package/dist/api/svgExtrude.d.ts.map +1 -1
  116. package/dist/api/svgExtrude.js +1 -0
  117. package/dist/api/svgExtrude.js.map +1 -1
  118. package/dist/api/text.d.ts.map +1 -1
  119. package/dist/api/text.js +1 -0
  120. package/dist/api/text.js.map +1 -1
  121. package/dist/api/topo-resolve.d.ts.map +1 -1
  122. package/dist/api/topo-resolve.js +65 -3
  123. package/dist/api/topo-resolve.js.map +1 -1
  124. package/dist/api/transform.d.ts +4 -0
  125. package/dist/api/transform.d.ts.map +1 -1
  126. package/dist/api/transform.js +44 -12
  127. package/dist/api/transform.js.map +1 -1
  128. package/dist/brep/brep-ops.d.ts +34 -1
  129. package/dist/brep/brep-ops.d.ts.map +1 -1
  130. package/dist/brep/brep-ops.js +62 -22
  131. package/dist/brep/brep-ops.js.map +1 -1
  132. package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
  133. package/dist/brep/engine/adapters/brep-mock.js +8 -0
  134. package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
  135. package/dist/brep/engine/adapters/brepkit.d.ts.map +1 -1
  136. package/dist/brep/engine/adapters/brepkit.js +6 -1
  137. package/dist/brep/engine/adapters/brepkit.js.map +1 -1
  138. package/dist/brep/engine/adapters/occt.d.ts.map +1 -1
  139. package/dist/brep/engine/adapters/occt.js +24 -1
  140. package/dist/brep/engine/adapters/occt.js.map +1 -1
  141. package/dist/brep/engine/primitives.d.ts +17 -0
  142. package/dist/brep/engine/primitives.d.ts.map +1 -1
  143. package/dist/brep/engine/primitives.js.map +1 -1
  144. package/dist/brep/engine/types.d.ts +49 -6
  145. package/dist/brep/engine/types.d.ts.map +1 -1
  146. package/dist/brep/engine/types.js.map +1 -1
  147. package/dist/brep/export/step.d.ts.map +1 -1
  148. package/dist/brep/export/step.js +6 -1
  149. package/dist/brep/export/step.js.map +1 -1
  150. package/dist/brep/face-evolution.d.ts +78 -8
  151. package/dist/brep/face-evolution.d.ts.map +1 -1
  152. package/dist/brep/face-evolution.js +130 -17
  153. package/dist/brep/face-evolution.js.map +1 -1
  154. package/dist/brepkit-kernel/brepkitKernel.d.ts +1 -1
  155. package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
  156. package/dist/brepkit-kernel/brepkitKernel.js +27 -1
  157. package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
  158. package/dist/cad-runtime/admit-compat-lib.d.ts +19 -1
  159. package/dist/cad-runtime/admit-compat-lib.d.ts.map +1 -1
  160. package/dist/cad-runtime/admit-compat-lib.js +21 -1
  161. package/dist/cad-runtime/admit-compat-lib.js.map +1 -1
  162. package/dist/cad-runtime/backend-dispatch.d.ts +44 -3
  163. package/dist/cad-runtime/backend-dispatch.d.ts.map +1 -1
  164. package/dist/cad-runtime/backend-dispatch.js +46 -3
  165. package/dist/cad-runtime/backend-dispatch.js.map +1 -1
  166. package/dist/cad-runtime/browser-lib-loader.d.ts +2 -0
  167. package/dist/cad-runtime/browser-lib-loader.d.ts.map +1 -1
  168. package/dist/cad-runtime/browser-lib-loader.js +9 -1
  169. package/dist/cad-runtime/browser-lib-loader.js.map +1 -1
  170. package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
  171. package/dist/cad-runtime/direct-executor.js +14 -4
  172. package/dist/cad-runtime/direct-executor.js.map +1 -1
  173. package/dist/cad-runtime/module-registry.d.ts +3 -1
  174. package/dist/cad-runtime/module-registry.d.ts.map +1 -1
  175. package/dist/cad-runtime/module-registry.js +13 -1
  176. package/dist/cad-runtime/module-registry.js.map +1 -1
  177. package/dist/cad-runtime/ports.d.ts +7 -0
  178. package/dist/cad-runtime/ports.d.ts.map +1 -1
  179. package/dist/cad-runtime/ports.js.map +1 -1
  180. package/dist/cad-runtime/runtime-concurrent-error.d.ts +38 -0
  181. package/dist/cad-runtime/runtime-concurrent-error.d.ts.map +1 -0
  182. package/dist/cad-runtime/runtime-concurrent-error.js +43 -0
  183. package/dist/cad-runtime/runtime-concurrent-error.js.map +1 -0
  184. package/dist/cad-runtime/runtime.d.ts +54 -2
  185. package/dist/cad-runtime/runtime.d.ts.map +1 -1
  186. package/dist/cad-runtime/runtime.js +186 -10
  187. package/dist/cad-runtime/runtime.js.map +1 -1
  188. package/dist/define-op.d.ts +22 -0
  189. package/dist/define-op.d.ts.map +1 -1
  190. package/dist/define-op.js +82 -12
  191. package/dist/define-op.js.map +1 -1
  192. package/dist/fcstd/attachment.d.ts +8 -1
  193. package/dist/fcstd/attachment.d.ts.map +1 -1
  194. package/dist/fcstd/attachment.js +7 -1
  195. package/dist/fcstd/attachment.js.map +1 -1
  196. package/dist/fcstd/build-fai-zip.d.ts.map +1 -1
  197. package/dist/fcstd/build-fai-zip.js +12 -7
  198. package/dist/fcstd/build-fai-zip.js.map +1 -1
  199. package/dist/fcstd/codegen.d.ts +10 -1
  200. package/dist/fcstd/codegen.d.ts.map +1 -1
  201. package/dist/fcstd/codegen.js +150 -48
  202. package/dist/fcstd/codegen.js.map +1 -1
  203. package/dist/fcstd/contour.d.ts.map +1 -1
  204. package/dist/fcstd/contour.js +23 -24
  205. package/dist/fcstd/contour.js.map +1 -1
  206. package/dist/fcstd/convert.d.ts +2 -18
  207. package/dist/fcstd/convert.d.ts.map +1 -1
  208. package/dist/fcstd/convert.js +35 -53
  209. package/dist/fcstd/convert.js.map +1 -1
  210. package/dist/fcstd/external-geo.d.ts +12 -1
  211. package/dist/fcstd/external-geo.d.ts.map +1 -1
  212. package/dist/fcstd/external-geo.js +15 -1
  213. package/dist/fcstd/external-geo.js.map +1 -1
  214. package/dist/fcstd/feature-translate.d.ts +21 -1
  215. package/dist/fcstd/feature-translate.d.ts.map +1 -1
  216. package/dist/fcstd/feature-translate.js +108 -6
  217. package/dist/fcstd/feature-translate.js.map +1 -1
  218. package/dist/fcstd/structural-types.d.ts +83 -0
  219. package/dist/fcstd/structural-types.d.ts.map +1 -0
  220. package/dist/fcstd/structural-types.js +116 -0
  221. package/dist/fcstd/structural-types.js.map +1 -0
  222. package/dist/index.d.ts +1 -0
  223. package/dist/index.d.ts.map +1 -1
  224. package/dist/index.js.map +1 -1
  225. package/dist/lang/determinism-scanner.d.ts +62 -0
  226. package/dist/lang/determinism-scanner.d.ts.map +1 -0
  227. package/dist/lang/determinism-scanner.js +619 -0
  228. package/dist/lang/determinism-scanner.js.map +1 -0
  229. package/dist/lang/symbol-table.generated.d.ts +7 -3
  230. package/dist/lang/symbol-table.generated.d.ts.map +1 -1
  231. package/dist/lang/symbol-table.generated.js +7 -3
  232. package/dist/lang/symbol-table.generated.js.map +1 -1
  233. package/dist/mesh/index.d.ts.map +1 -1
  234. package/dist/mesh/index.js +3 -2
  235. package/dist/mesh/index.js.map +1 -1
  236. package/dist/node-host/cli.d.ts.map +1 -1
  237. package/dist/node-host/cli.js +56 -2
  238. package/dist/node-host/cli.js.map +1 -1
  239. package/dist/runtime-state.d.ts +18 -6
  240. package/dist/runtime-state.d.ts.map +1 -1
  241. package/dist/runtime-state.js +9 -1
  242. package/dist/runtime-state.js.map +1 -1
  243. package/dist/shape.d.ts +15 -0
  244. package/dist/shape.d.ts.map +1 -1
  245. package/dist/shape.js +26 -3
  246. package/dist/shape.js.map +1 -1
  247. package/dist/topology/naming/build-naming.d.ts +14 -30
  248. package/dist/topology/naming/build-naming.d.ts.map +1 -1
  249. package/dist/topology/naming/build-naming.js +21 -54
  250. package/dist/topology/naming/build-naming.js.map +1 -1
  251. package/dist/topology/naming/capture-topo-ref.d.ts.map +1 -1
  252. package/dist/topology/naming/capture-topo-ref.js +5 -0
  253. package/dist/topology/naming/capture-topo-ref.js.map +1 -1
  254. package/dist/topology/naming/index.d.ts +3 -0
  255. package/dist/topology/naming/index.d.ts.map +1 -1
  256. package/dist/topology/naming/index.js +3 -0
  257. package/dist/topology/naming/index.js.map +1 -1
  258. package/dist/topology/naming/lineage-resolve.d.ts +80 -0
  259. package/dist/topology/naming/lineage-resolve.d.ts.map +1 -0
  260. package/dist/topology/naming/lineage-resolve.js +120 -0
  261. package/dist/topology/naming/lineage-resolve.js.map +1 -0
  262. package/dist/topology/naming/lineage.d.ts +349 -0
  263. package/dist/topology/naming/lineage.d.ts.map +1 -0
  264. package/dist/topology/naming/lineage.js +398 -0
  265. package/dist/topology/naming/lineage.js.map +1 -0
  266. package/dist/topology/naming/migrate.d.ts +41 -0
  267. package/dist/topology/naming/migrate.d.ts.map +1 -0
  268. package/dist/topology/naming/migrate.js +88 -0
  269. package/dist/topology/naming/migrate.js.map +1 -0
  270. package/dist/topology/naming/role-name.d.ts +176 -0
  271. package/dist/topology/naming/role-name.d.ts.map +1 -0
  272. package/dist/topology/naming/role-name.js +344 -0
  273. package/dist/topology/naming/role-name.js.map +1 -0
  274. package/dist/topology/naming/roles.d.ts +20 -22
  275. package/dist/topology/naming/roles.d.ts.map +1 -1
  276. package/dist/topology/naming/roles.js +51 -49
  277. package/dist/topology/naming/roles.js.map +1 -1
  278. package/dist/topology/naming/types.d.ts +65 -18
  279. package/dist/topology/naming/types.d.ts.map +1 -1
  280. package/dist/topology/naming/types.js.map +1 -1
  281. package/dist/weapp.d.ts +1 -1
  282. package/dist/weapp.d.ts.map +1 -1
  283. package/dist/weapp.js +1 -1
  284. package/dist/weapp.js.map +1 -1
  285. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/cad-runtime/runtime.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * CadRuntime — 执行核心(L2 编排层)\n *\n * Direct-only execution: the runtime runs only the direct path\n * (extractMetadata → DirectExecutor → computeLiveShapes).\n *\n * 职责:\n * - 执行 .fai.js 源码文本,产出 ExecutionResult(纯计算,不碰 store/DOM)\n * - 管理 statementCache 作为实例成员\n * - 执行模式感知(auto / brep / mesh)\n *\n * 不做的事(留给 browser host):\n * - undo 快照\n * - SceneMutator.createPart / commitGeometry\n * - scriptStore 写入\n * - group/assembly 重建\n * - window.dispatchEvent / toast\n */\n\nimport type { TerminalShape } from '../lang/types'\nimport type { Shape } from '../mesh/types'\nimport type { BrepChainState } from '../brep/brep-chain'\nimport type { BrepHandle } from '../brep/engine/types'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\nimport { getBrepEngine, hasBrepEngine, getActiveBrepEngineId } from '../brep/engine/registry'\nimport { ensureOcctDefaultEngine } from '../brep/engine/adapters/occt'\nimport { ParseError } from '../lang/parse-error'\nimport type { SecurityPolicy } from '../lang/security-scanner'\nimport type { HostPorts, ExecutionMode } from './ports'\nimport type { SelectorRuntimeData } from '../topology/build-selector-runtime'\nimport type { SelectorRuntime } from '../topology/types'\nimport { buildSolidTopologyRuntime } from '../brep/brep-topology'\nimport type { SolidTopologyResult } from '../brep/brep-topology'\nimport { buildTopologyFromMesh } from '../brep/brep-topology'\nimport type { BrepMeshResult } from '../brep/engine/types'\nimport { asPartName, type PartName, type StmtId } from '../identity'\nimport { DirectExecutor, type Namespaces, type DirectExecOpts } from './direct-executor'\nimport type { ExecBackendChoice } from './exec-backend'\nimport { ModuleRegistry, ModuleRegistryError, isRelativeSpecifier } from './module-registry'\nimport type { ModuleRunResult } from './module-registry'\nimport { computeLiveShapes, lineConsumes, blockConsumes, type KeepView } from './live-shapes'\nimport { extractMetadata, type UiMetadata } from '../lang/metadata-extractor'\nimport {\n configureBackends, CONTRACT_VERSION,\n assertContractVersion, type StdlibNamespace,\n type AssemblyKinematicsPose,\n} from '../runtime-state'\nimport { admitCompatLib } from './admit-compat-lib'\nimport { hasDualOp } from '../define-op'\nimport { computeLibId } from './lib-id'\nimport { computeContentKey, stableFingerprint } from './content-key'\nexport { computeContentKey } from './content-key'\nexport { stableFingerprint } from './content-key'\nimport { isCompoundLike, getSlot, ensureSlot, type CompoundShape } from '../shape'\nimport type { PartNaming } from '../topology/naming/types'\nimport { buildPartNaming, assignPrimitiveFaceRoles, type PartNamingInput } from '../topology/naming/build-naming'\nimport { faceRowToHint } from '../topology/naming/geom-hint'\nimport { HASH_UPPER_BOUND } from '../brep/face-evolution'\n\n\n// ── 装配变换死代码已删除 ──\n// v8: applyPrecomputedTransform / eulerDegToMatrix3 / propagateTransform 已删除。\n// 装配 pass 委托 executeDoAssemble(唯一真源),约束只存 face 数据、由 api/assembly 实时求解。\n\n// ── 类型定义 ──\n\n/**\n * A single validation error produced by CadRuntime.check.\n */\nexport interface CheckError {\n /** The stage that produced the error ('keep' = keep directive validation). */\n stage: 'parse' | 'symbol' | 'reference' | 'keep' | 'security'\n message: string\n line?: number\n stmtId?: string\n /** Parse diagnostic code (e.g. E_CONTROL_FLOW, passed through from parser ParseError.code). */\n code?: string\n /** SecurityScanner rule ID (only when stage='security'; e.g. SEC_IDENT / SEC_SYNTAX / ...). */\n ruleId?: string\n}\n\n/**\n * The aggregated result of a CadRuntime.check dry run.\n */\nexport interface CheckResult {\n ok: boolean\n errors: CheckError[]\n warnings: string[]\n /** Structured context for AI self-correction. */\n script?: { statements: number; callees: string[] }\n}\n\n/**\n * 拓扑来源类型 — 静态判定,不混用。\n * - `brep`:BREP 真拓扑(stepRuntimes),由 OCCT solid 构建\n * - `primitive`:primitive 假拓扑(primitiveRuntimes),创建时刻快照\n * - `mesh`:mesh 假拓扑(meshRuntimes),加载时刻快照\n */\nexport type TopologySource = 'brep' | 'primitive' | 'mesh'\n\n/**\n * 单个 part 的拓扑数据 — 由 ExecutionResult 携带,宿主从结果消费。\n *\n * 宿主不应再直接 import faijs 的拓扑构建函数(buildSelectorRuntime 等),\n * 而是从 ExecutionResult.topology 中读取。\n */\nexport interface PartTopology {\n /** partName 即 faijs 变量名(PartName,品牌型) */\n partName: PartName\n /** 拓扑来源(静态判定) */\n source: TopologySource\n /** 序列化的拓扑数据(可跨 Worker 传输) */\n data: SelectorRuntimeData\n}\n\n/**\n * The result of a CadRuntime execution, carrying geometry, chain state, and\n * host-consumable topology data.\n */\nexport interface ExecutionResult {\n /**\n * Statement output cache (PartName → Shape or compound; includes the dual\n * front/back outputs of a split). UI query entry point listing every shape\n * variable — unregistered compounds returned by third parties (structural\n * test isCompoundLike) enter as well.\n */\n outputs: Map<PartName, Shape | CompoundShape>\n /** BREP 链状态(含逐 part solid 句柄) */\n brepChain: BrepChainState\n /** 终端几何列表 */\n terminals: TerminalShape[]\n /** 信息/警告列表 */\n infos: string[]\n /** 失败信息(如果执行中途出错);lineNo 为 DirectExecutor 路径新增(§4.2 E-add,宿主按现状读前三个字段不破裂);code 为原始错误码(如有,如 E_TOPO_NOT_FOUND / E_ARGS_FORM) */\n failedAt?: { index: number; callee: string; message: string; lineNo?: number; code?: string }\n /** 逐终端的 BREP 实体(仅持有 solid 的终端出现在此表)。key 为终端 PartName。 */\n brepSolids?: Map<PartName, { solid: BrepHandle; kernel: BrepEngineApi }>\n /**\n * 拓扑数据 — 每个 part 的拓扑运行时。\n * key 为 PartName。\n * E13:由 ExecutionResult 携带,宿主从结果消费。\n * 拓扑来源静态判定:BREP 成功时 source='brep',否则根据 part 类型判定。\n */\n topology?: Map<PartName, PartTopology>\n /**\n * 拓扑命名数据 — 每个 part 的命名行(§3.7 of\n *\n * 宿主拾取到 Reference(序号)后 O(1) 反查命名行 → captureTopoRef 造 TopoRef。\n * BREP/primitive 完整(faceNaming 有 origin+role),mesh 只给 hint(role='')。\n * 与 topology 并列、选择器 manifest 不改动;命名数据不进 topology-store。\n */\n naming?: Map<PartName, PartNaming>\n /**\n * 装配/分组结构 — 每个 compound 变量(group/assembly 产物)的成员变量名列表。\n * key 为 compound 变量名(PartName),value 为成员变量名列表。\n */\n compounds?: Map<PartName, PartName[]>\n /** 被 touch 声明的原地修改 Shape 的持有变量名(装配变换后 collectResult 填充,去重) */\n changed?: PartName[]\n /**\n * 活跃但非几何的值(keep-syntax 设计 §5.2,UI 可选消费)。\n * DAG 叶子且非 shape/compound:第三方测量/查询函数返回的 number/普通对象等。\n * 不进 terminals(terminals 只含几何,零回归)。\n */\n activeValues?: Map<PartName, unknown>\n /**\n * P3:装配运动副 per-member 位姿(键 = 成员名;含恒等链根),仅在含 joints 的\n * assembly solve 语句执行后出现。宿主从本字段读取(动画/导出),不新增返回值\n * 消费语义(asm.solve() 保持 R0 语句形态,与 do_assemble 现状一致)。\n */\n kinematics?: Map<PartName, AssemblyKinematicsPose>\n}\n\n/**\n * Options controlling a single CadRuntime execution. All inputs are code text\n * or plain values — the engine's internal IR is never part of this surface.\n */\nexport interface ExecuteOptions {\n /** The parameter table. */\n params?: Record<string, unknown>\n /** partTransform(世界→局部坐标偏移 + 单位缩放) */\n partTransform?: { position: [number, number, number]; scale?: [number, number, number] }\n /** 语句前钩子(用于 undo 逐语句快照);参数为语句 id(sN)与语句下标 */\n beforeStatement?: (stmtId: string, index: number) => void\n /**\n * 增量执行起点(兼容旧签名):从指定位置开始顺序执行,\n * 之前的语句不进执行循环(缺省 0 = 全量执行)。\n */\n startIndex?: number\n /**\n * 拓扑构建开关(Phase 2.6):\n * - 'auto'(默认):为\"在 BREP 链上\"的终端自动构建 BREP 真拓扑\n * - 'brep':为所有在 BREP 链上的输出构建拓扑(含非终端)\n * - 'off':不自动构建(只返回宿主 setTopology 注入的拓扑)\n */\n topology?: 'auto' | 'brep' | 'off'\n /**\n * 主模块 key(相对项目根的路径,如 `src/assembly.fai.js`;多文件 §4.5)。\n * 宿主执行某个文件时传入——主模块的相对 import 以此为解析基准;不传则视为\n * 位于项目根(存量单文件行为不变:无 key 时 `./x.fai.js` 相对根解析)。\n */\n entryKey?: string\n /**\n * 执行护栏(§6.3 / D8,v1 可选、默认关闭):**整轮超时**(覆盖 execute/append/update\n * 全程,含全部函数体重放),超时抛 {@link ExecutionLimitError}(E_EXEC_LIMIT)。\n * 防 `while(true)` 死循环挂死 worker/UI;不传则无超时(现状行为不变)。\n */\n executionTimeoutMs?: number\n}\n\n// 执行护栏超时错误(§6.3 / D8)定义在独立叶子文件 execution-limit-error.ts,\n// DirectExecutor(direct 路径单元循环内检查)与本文件共用;此处 import + re-export\n// 保持宿主 import 面不变(module 路径 runWithFailureHandling 的 Promise.race 使用)。\nexport { ExecutionLimitError } from './execution-limit-error'\n\n/**\n * Thrown by CadRuntime.append when a newly appended statement references a\n * variable that is not in the persistent context — its producer was never\n * executed (cross-file reference to an unloaded part, or ctx cleared by\n * dispose). The host should upgrade to a full `execute(code)`.\n */\nexport class AppendPrefixError extends Error {\n constructor(\n /** The source statement id (sN) whose reference is missing. */\n readonly statementId: string,\n /** The referenced variable missing from the persistent ctx. */\n readonly missingVar: string,\n ) {\n super(\n `[faijs] append: prefix missing — statement \"${statementId}\" references ` +\n `\"${missingVar}\" which is not in the persistent context; ` +\n `run execute(code) for a full execution`,\n )\n this.name = 'AppendPrefixError'\n }\n}\n\n// ── CadRuntime ──\n\n/** Shape 形状守卫(positions/indices 结构) */\nfunction isShapeLike(v: unknown): v is Shape {\n return !!v && typeof v === 'object' && 'positions' in v && 'indices' in v\n}\n\n/** SelectorRuntime → SelectorRuntimeData:剥离 Map 字段(跨 Worker 传输用)。 */\nfunction runtimeToData(rt: SelectorRuntime): SelectorRuntimeData {\n const {\n referenceMap: _referenceMap,\n referenceByNormalizedSelector: _referenceByNormalizedSelector,\n referenceByDisplaySelector: _referenceByDisplaySelector,\n faceReferenceByRowIndex: _faceReferenceByRowIndex,\n edgeReferenceByRowIndex: _edgeReferenceByRowIndex,\n vertexReferenceByRowIndex: _vertexReferenceByRowIndex,\n occurrenceIdByRowIndex: _occurrenceIdByRowIndex,\n faceReferenceMap: _faceReferenceMap,\n edgeReferenceMap: _edgeReferenceMap,\n vertexReferenceMap: _vertexReferenceMap,\n ...data\n } = rt\n return data as SelectorRuntimeData\n}\n\n/**\n * CadRuntime 构造选项(第 4 参;缺省全部可选)。\n *\n * direct 是唯一执行路径。security 透传给 DirectExecutor 与 extractMetadata\n * (A1/A2/A3 缺省 'strict')。\n */\nexport interface CadRuntimeOptions {\n /** 安全策略档位(缺省 'strict';透传给 DirectExecutor 与 extractMetadata) */\n security?: SecurityPolicy\n /**\n * 执行后端(缺省 'vm';静态选定,无运行时回退)。'interpreter' 为无\n * `new Function`/eval 的 AST 解释器后端,供禁 eval 环境(weapp / 严格 CSP)\n * 使用——见 docs/plans/2026-09-14-no-eval-interpreter-backend-design.md。\n */\n execBackend?: ExecBackendChoice\n}\n\n/**\n * CadRuntime is the execution core of the L2 orchestration layer.\n *\n * It executes a .fai.js source text and produces an ExecutionResult\n * (pure computation that touches neither the scene store nor the DOM), manages\n * the statementCache as an instance member, resolves shape references\n * internally, and is execution-mode aware (auto/brep/mesh). Hosts own undoing,\n * scene mutation, script-store writes, group/assembly rebuilding, and event\n * dispatch.\n */\nexport class CadRuntime {\n /** The host-injected environment capabilities. */\n readonly ports: HostPorts\n /** The execution mode (auto/brep/mesh). */\n readonly mode: ExecutionMode\n /** direct 是唯一执行路径。保留属性以兼容外部读取。 */\n readonly executorMode = 'direct' as const\n\n /** 语句缓存(实例级,不再是模块单例)。key = 可命中的 PartName(stmt.id 即其首输出名) */\n private statementCache = new Map<PartName, {\n statementKey: string\n outputContentKey: string\n output: Shape\n }>()\n\n /** 场景代码累积(三接口收敛:append 只传新行,faijs 累积全文使 id 按位置稳定 + DAG/keep 分析可见全场景)。 */\n private accumulatedCode: string | null = null\n /** 已累积场景的语句 id 集(append 据此判定「新增语句」)。 */\n private accumulatedIds = new Set<StmtId>()\n\n // P0 增量闸门用:上次成功执行的指纹快照\n private lastParamsFingerprint: string | null = null\n private lastLibIdsFingerprint: string | null = null\n private lastPartTransformFingerprint: string | null = null\n private lastHadKinematics = false\n\n /**\n * PartName → OCCT 实体句柄,跨 execute 存活,持有所有权(顶替释放/删除/dispose 的唯一操作对象)。\n * op 层通过 brepChain.solidCache 读写——该引用指向此持久 Map(见 ensureBrepChain)。\n */\n private solidCache = new Map<PartName, BrepHandle>()\n\n /** 面演化映射缓存(PartName → FaceEvolution),随 solidCache 一并持久。 */\n private faceEvolutionCache = new Map<PartName, Map<number, number[]>>()\n\n /** 拓扑命名 RoleTable 缓存(PartName → RoleTable,§2.3),与 faceEvolutionCache 同生命周期。 */\n private roleTableCache = new Map<PartName, unknown>()\n\n /** OCCT 内核引用(环境级单例,initOcctWasm() 幂等;mesh 模式为 null)。供顶替释放用。 */\n private kernel: BrepEngineApi | null = null\n\n /**\n * 惰性初始化的 BREP 链:solidCache / faceEvolutionCache 引用实例持久 Map,\n * kernel 取环境单例。首次需要时创建一次,跨 execute 复用(不再每次新建)。\n */\n private brepChain: BrepChainState | null = null\n\n /**\n * 拓扑数据缓存:partName → PartTopology(实例级)\n * E13:宿主不再直接 import faijs 拓扑构建函数,而是从 ExecutionResult.topology 消费。\n * 拓扑构建由宿主在 execute 后调用 setTopology 注入(BREP 路径)或由加载时注入(mesh/primitive 路径)。\n */\n private topologyCache = new Map<PartName, PartTopology>()\n\n /** 无 IR 执行器(DirectExecutor,T5 后唯一执行路径) */\n private readonly directExecutor: DirectExecutor\n\n /** 安全策略档位(透传给 extractMetadata 与 DirectExecutor;缺省 'strict') */\n private readonly securityPolicy: SecurityPolicy\n\n /** 宿主注册库(含 cad:由根门面 createRuntime 包装注入;注入编译产物 fn 的第二参 ns) */\n private readonly libs: Record<string, StdlibNamespace>\n /** 库内容身份表 (binding → content hash),增量 key 用(B2,§7.3) */\n private readonly libIds = new Map<string, string>()\n /** import specifier → binding 映射(registerLib 的 packageName 声明;check ①.5 校验 specifier) */\n private readonly specifierToBinding = new Map<string, string>()\n private readonly namespaces: Namespaces\n /** 默认命名空间绑定名(U10/R2):根门面经 registerLib(binding, ns, {default: true}) 显式声明;\n * 缺省 'cad'(与 parser 缺省 defaultNs 一致)。namespace 字段缺省的语句归属该绑定。 */\n private defaultNsName = 'cad'\n\n /**\n * Register a library namespace. A version mismatch throws (no silent\n * degradation); afterwards compiled products may use the library via\n * `ns.<binding>.<callee>`. `cad` is registered the same way: the root facade\n * injects it through registerLib('cad', createInternalStdlib(), { default: true }).\n * @param binding - the namespace binding name.\n * @param ns - the namespace object to register.\n * @param options - `{ default: true }` declares this binding as the default\n * namespace (host-declared default binding name, U10/R2).\n */\n /**\n * Register a library namespace under a statement-level binding.\n *\n * Third-party libraries (no defineOp / no contractVersion) are admitted\n * through compatOp so bare functions cannot silently bypass the statement\n * boundary contract (B4, §4.3.3). The `autoLift` option controls this:\n * - `true` → bare functions are lifted via compatOp (brep-only, B4).\n * - `false` → no lifting (the library's functions are used as-is; the\n * built-in cad surface uses this since its ops already carry\n * `DUAL_OP_META`).\n * - omitted → inferred: `!hasDualOp(ns)`. Libraries that already declare\n * dual-ops (cad, gear-lib-demo's defineOp mocks) auto-lift `false`;\n * all-bare-function libraries (sheetmetal) auto-lift `true`.\n *\n * The engine's built-in L3 surface is registered without `autoLift` by the\n * facade: inferred `false` (all ops carry `DUAL_OP_META`).\n * @param binding - the name scripts use to reach the namespace (e.g. 'cad').\n * @param ns - the library's export object.\n * @param options - registration hints. `packageName` declares the npm package\n * backing this binding so `check()` can validate script import specifiers\n * against registered libraries (specifier mismatch = hard check error).\n */\n registerLib(binding: string, ns: StdlibNamespace, options?: { default?: boolean; autoLift?: boolean; packageName?: string }): void {\n assertContractVersion(ns as unknown as { contractVersion?: number })\n // B4: admit bare (non-dual-op) library functions through compatOp when\n // autoLift is true (or inferred true — the library has no dual-op).\n // Hard ordering: assertLibConforms runs inside admitCompatLib BEFORE\n // wrapping — DUAL_OP_META hangs on the function object with\n // enumerable:false, and wrapping first would let bare functions silently\n // skip the strict validation pass (R8).\n const lift = options?.autoLift ?? !hasDualOp(ns as unknown as Record<string, unknown>)\n const admitted = lift\n ? (admitCompatLib(ns as unknown as Record<string, unknown>) as StdlibNamespace)\n : ns\n this.libs[binding] = admitted\n this.libIds.set(binding, computeLibId(binding, ns as unknown as Record<string, unknown>))\n if (options?.packageName) {\n this.specifierToBinding.set(options.packageName, binding)\n }\n if (options?.default === true) {\n this.defaultNsName = binding\n }\n this.directExecutor.setNamespaces({ ...this.libs } as Namespaces)\n }\n\n /** The runtime's default namespace binding name (host-declared; 'cad' by default). */\n get defaultNs(): string {\n return this.defaultNsName\n }\n\n constructor(\n ports: HostPorts,\n mode: ExecutionMode = 'auto',\n libs: Record<string, StdlibNamespace> = {},\n options: CadRuntimeOptions = {},\n ) {\n this.ports = ports\n this.mode = mode\n this.libs = libs\n this.namespaces = { ...libs } as Namespaces\n this.securityPolicy = options.security ?? 'strict'\n this.directExecutor = new DirectExecutor({\n namespaces: this.namespaces,\n setSolid: (partName, solid) => { this.solidCache.set(partName, solid) },\n setFaceEvolution: (partName, evo) => { this.faceEvolutionCache.set(partName, evo as Map<number, number[]>) },\n setRoleTable: (partName, roleTable) => { this.roleTableCache.set(partName, roleTable) },\n security: this.securityPolicy,\n ...(options.execBackend !== undefined ? { execBackend: options.execBackend } : {}),\n })\n\n // P2:装配全局 backends(stdlib 经 getBackends() 取资源)。\n this.claimBackends()\n }\n\n /**\n * 认领全局 backends 配置(P2 修复):全局 backends 是单例,任何 runtime 创建都会\n * 覆盖它——后创建的实例(如预览用 mesh runtime)会把 mode/kernel getter 指向自己,\n * 先前 runtime 的后续 execute 会被静默劫持(dispatch 走错槽、缓存键漂移、\n * 顶替释放旧 BREP 句柄后拓扑重建撞上悬空句柄)。因此除构造外,每个执行入口\n * (execute,所有执行路径的汇聚点)都必须先重新认领本实例的配置。\n * 限制:并发交错执行多个 runtime 仍会互踩(与 setCurrentStmt 同级的串行假设)。\n * ⚠️ getter 的 this 指向所在对象字面量,用箭头闭包捕获实例(避免 no-this-alias)。\n */\n private claimBackends(): void {\n const brepChainOf = (): BrepChainState | null => this.brepChain\n const portsOf = (): HostPorts => this.ports\n configureBackends({\n contractVersion: CONTRACT_VERSION,\n config: {\n mode: this.mode,\n get brepEngineId() {\n return getActiveBrepEngineId()\n },\n get brepCapabilities() {\n return brepChainOf()?.capabilities\n },\n get partTransform() {\n return brepChainOf()?.partTransform\n },\n },\n kernel: {\n get brep() {\n return brepChainOf()?.kernel ?? null\n },\n get csg() {\n return portsOf().csg\n },\n get sdf() {\n return portsOf().sdf\n },\n },\n fonts: this.ports.fonts,\n texture: this.ports.texture,\n assets: this.ports.assets,\n events: this.ports.events,\n cad: this.namespaces.cad,\n })\n }\n\n /**\n * 确保持久 BREP 链存在(惰性初始化)。\n * 引擎从注册表取当前 BREP 引擎(宿主装配时注册);无引擎或 mesh 模式 → kernel 为 null。\n * OCCT 是内置默认引擎:宿主未注册任何引擎时,非 mesh 模式自动装配 OCCT——\n * 现有宿主无需改动即恢复默认 BREP 行为;换引擎仍是静态的(装配期注册其它引擎即可)。\n */\n private async ensureBrepChain(): Promise<BrepChainState> {\n if (this.brepChain) return this.brepChain\n if (this.mode !== 'mesh') {\n await ensureOcctDefaultEngine()\n }\n const engine = this.mode === 'mesh' || !hasBrepEngine()\n ? null\n : await getBrepEngine()\n const kernel = engine?.primitives ?? null\n this.kernel = kernel\n this.brepChain = {\n solidCache: this.solidCache,\n kernel,\n capabilities: engine?.capabilities,\n faceEvolutionCache: this.faceEvolutionCache,\n roleTableCache: this.roleTableCache,\n meshShapeCache: new Map<PartName, BrepMeshResult>(),\n }\n return this.brepChain\n }\n\n // ── 公开入口:execute / append / update(输入一律是代码文本,IR 在引擎内部) ──\n\n /**\n * Full execution from code text: parse → execute every statement.\n * @param code - the .fai.js source text.\n * @param opts - optional execution options.\n * @returns promise resolving to the ExecutionResult.\n */\n async execute(code: string, opts?: ExecuteOptions): Promise<ExecutionResult> {\n return this.executeDirectText(code, opts)\n }\n\n /**\n * Append new statements (incremental execution): only execute the new code\n * text on the persistent ctx; prefix validation enforces that references\n * must already exist (AppendPrefixError otherwise).\n * @param code - the new .fai.js source text to append.\n * @param opts - optional execution options.\n * @returns promise resolving to the ExecutionResult.\n */\n async append(code: string, opts?: ExecuteOptions): Promise<ExecutionResult> {\n return this.appendDirectText(code, opts)\n }\n\n /**\n * Direct-mode full execution: the code text runs on the DirectExecutor\n * and outputs/terminals are assembled from the persistent ctx +\n * extractMetadata + computeLiveShapes.\n */\n private async executeDirectText(code: string, opts?: ExecuteOptions): Promise<ExecutionResult> {\n const de = this.directExecutor\n // P2 修复:执行前重新认领全局 backends(本实例配置为准)。\n this.claimBackends()\n this.accumulatedCode = code\n const meta = extractMetadata(code, { defaultNs: this.defaultNsName, security: this.securityPolicy, namespaces: Object.keys(this.libs) })\n const libLoadFailure = await this.autoLoadLibsFromImports(meta.imports)\n if (libLoadFailure) return libLoadFailure\n // 多文件(§4.5):相对 import 依赖装载 → 绑定 seed;装载错误 → failedAt 短路。\n const moduleLoad = await this.loadDirectModuleImports(meta, opts?.entryKey)\n if (!('seed' in moduleLoad)) return moduleLoad\n const brepChain = await this.ensureBrepChain()\n if (opts?.partTransform?.position) {\n brepChain.partTransform = {\n position: opts.partTransform.position,\n scale: opts.partTransform.scale,\n }\n }\n const outcome = await de.execute(code, {\n imports: moduleLoad.seed,\n params: opts?.params,\n ...(opts?.startIndex !== undefined ? { startLine: opts.startIndex } : {}),\n ...(opts?.beforeStatement ? { beforeStatement: opts.beforeStatement } : {}),\n ...(opts?.executionTimeoutMs !== undefined ? { executionTimeoutMs: opts.executionTimeoutMs } : {}),\n })\n if (outcome.failedAt) {\n return this.directFailedAtOrThrow(outcome.failedAt, meta)\n }\n const result = this.collectDirectResult(meta, opts)\n this.recordFingerprints(opts)\n return result\n }\n\n /** E6:DirectExecutor 失败行 → 场景语句序数(meta.lines 下标);不在 lines → undefined。 */\n private directStmtOrdinal(meta: UiMetadata, lineNo: number | undefined): number | undefined {\n if (lineNo === undefined) return undefined\n const idx = meta.lines.findIndex((l) => l.line === lineNo)\n return idx < 0 ? undefined : idx\n }\n\n /**\n * Direct-mode failedAt handling (T5 direct-only path): all execution errors\n * from DirectExecutor's catch block are statement-level failures → keep in\n * failedAt (no re-throw). This includes OpError / BrepUnsupportedError /\n * MeshUnsupportedError (engine capability failures), TypeError (no_such_op),\n * and business parameter errors (e.g. E_ARGS_FORM, E_CHAMFER_NO_EDGES,\n * E_TOPO_NOT_FOUND). ParseError is re-thrown by DirectExecutor (not here).\n * The original error's `code` (e.g. E_TOPO_NOT_FOUND) is surfaced on\n * failedAt.code so hosts can programmatically distinguish error kinds.\n */\n private directFailedAtOrThrow(\n failedAt: { index: number; callee: string; message: string; lineNo?: number; error?: unknown },\n meta: UiMetadata,\n ): ExecutionResult {\n const index = this.directStmtOrdinal(meta, failedAt.lineNo) ?? failedAt.index\n const rawCode = failedAt.error instanceof Error ? (failedAt.error as { code?: unknown }).code : undefined\n const code = typeof rawCode === 'string' ? rawCode : undefined\n return {\n outputs: this.directShapes(),\n brepChain: this.brepChain!,\n terminals: [],\n infos: [],\n failedAt: { index, callee: failedAt.callee, message: failedAt.message, lineNo: failedAt.lineNo, code },\n }\n }\n\n /**\n * Direct-mode update: R3 语义——清 ctx 全量重跑新文本\n * (DirectExecutor.update 即 execute;无需 oldCode 差量)。\n */\n private async updateDirectText(_oldCode: string, newCode: string, opts?: ExecuteOptions): Promise<ExecutionResult> {\n this.accumulatedCode = newCode\n return this.executeDirectText(newCode, opts)\n }\n\n /**\n * Direct-mode append: DirectExecutor 共享 ctx 只执行新单元\n * (行号即边界);prefix 校验保留 AppendPrefixError 语义(引用不在持久 ctx → 抛错,\n * 宿主升级为全量 execute)。\n */\n private async appendDirectText(code: string, opts?: ExecuteOptions): Promise<ExecutionResult> {\n const de = this.directExecutor\n if (!de) throw new Error('[faijs] direct executor is unavailable in module mode')\n this.claimBackends()\n const fullCode = this.accumulatedCode === null ? code : `${this.accumulatedCode}\\n${code}`\n this.accumulatedCode = fullCode\n // Append never reconciles:持久 ctx 中先前已执行语句必须原样保留;缺引用的新单元\n // 在 DirectExecutor 内会静默拿到 undefined —— 这里按 module 路径语义前置抛错。\n // 先做 prefix 校验(skipSecurity=true,预检不触发安全扫描),再做 A1 安全扫描。\n const missing = de.missingPrefixVar(code)\n if (missing) throw new AppendPrefixError(`s${missing.unitLine}`, missing.varName)\n // looseVars: true (same semantics as the deleted module append path): references to\n // 已执行产出/其它文件的变量作为外部 var 透传,由 missingPrefixVar 前置校验决定成败。\n // A1 安全扫描需把 ctx 已有键 + 已注册命名空间都作为 knownNames(避免 SEC_FREE_IDENT 误杀 append 场景)。\n const appendKnownNames = [...Object.keys(this.libs), ...de.listCtxKeys()]\n const meta = extractMetadata(fullCode, { defaultNs: this.defaultNsName, looseVars: true, security: this.securityPolicy, namespaces: appendKnownNames, nsNames: Object.keys(this.libs) })\n const libLoadFailure = await this.autoLoadLibsFromImports(meta.imports)\n if (libLoadFailure) return libLoadFailure\n // 多文件(§4.5):相对 import 依赖装载 → 绑定 seed(覆盖刷新 ctx 中旧 import 绑定)。\n const moduleLoad = await this.loadDirectModuleImports(meta, opts?.entryKey)\n if (!('seed' in moduleLoad)) return moduleLoad\n const brepChain = await this.ensureBrepChain()\n if (opts?.partTransform?.position) {\n brepChain.partTransform = {\n position: opts.partTransform.position,\n scale: opts.partTransform.scale,\n }\n }\n const outcome = await de.append(code, {\n imports: moduleLoad.seed,\n params: opts?.params,\n ...(opts?.beforeStatement ? { beforeStatement: opts.beforeStatement } : {}),\n ...(opts?.executionTimeoutMs !== undefined ? { executionTimeoutMs: opts.executionTimeoutMs } : {}),\n })\n if (outcome.failedAt) {\n return this.directFailedAtOrThrow(outcome.failedAt, meta)\n }\n const result = this.collectDirectResult(meta, opts)\n this.recordFingerprints(opts)\n return result\n }\n\n /** Direct-mode 失败结果的 outputs 部分:持久 ctx 中已产出的 shape/compound。 */\n private directShapes(): Map<PartName, Shape | CompoundShape> {\n const de = this.directExecutor!\n const outputs = new Map<PartName, Shape | CompoundShape>()\n for (const name of de.listCtxKeys()) {\n const v = de.getCtxVar(name)\n if (isShapeLike(v) || isCompoundLike(v)) outputs.set(asPartName(name), v as Shape | CompoundShape)\n }\n return outputs\n }\n\n /**\n * 多文件装载(direct 模式,§4.5):项目内相对 import 依赖经 ModuleRegistry 装载\n * (每依赖独立 ctx 执行 + 绑定校验),返回 seed(绑定名 → 值,供 DirectExecutor\n * opts.imports 预置)。装载错误 → failedAt 短路结果(不抛穿)。\n */\n private async loadDirectModuleImports(\n meta: UiMetadata,\n baseKey?: string,\n ): Promise<{ seed: Record<string, unknown> } | ExecutionResult> {\n const loader = this.ports.projectLoader\n if (!loader) return { seed: {} }\n if (!(meta.imports ?? []).some((imp) => isRelativeSpecifier(imp.specifier))) return { seed: {} }\n const registry = new ModuleRegistry(loader, (code, imports) => this.runDirectModule(code, imports), this.securityPolicy)\n try {\n const seed = await registry.resolveImports(meta.imports ?? [], baseKey)\n return { seed }\n } catch (err) {\n if (err instanceof ModuleRegistryError) {\n return {\n outputs: new Map(),\n brepChain: this.brepChain!,\n terminals: [],\n infos: [],\n failedAt: {\n index: -1,\n callee: err.callee ?? 'import',\n message: err.message,\n lineNo: err.lineNo,\n },\n }\n }\n throw err\n }\n }\n\n /** 依赖模块执行(direct):独立 DirectExecutor + 独立 ctx;失败抛 ModuleRegistryError。 */\n private async runDirectModule(code: string, imports: Record<string, unknown>): Promise<ModuleRunResult> {\n // A3:子模块固定 strict 策略(不接受降档)\n // BREP kernel 必须在依赖执行前就绪——模块装载排在 ensureBrepChain 之前,\n // 否则子模块里的 BREP op 会以 \"no OCCT kernel\" 失败。\n await this.ensureBrepChain()\n // 钩子必须复用主 executor 的那套:子模块产出的 BREP solid 要登记进本实例的\n // solidCache,否则主模块的 brepSolids 查不到它们(装配体 STEP 导不出精确曲面)。\n const de = new DirectExecutor({\n namespaces: { ...this.libs } as Namespaces,\n setSolid: (partName, solid) => { this.solidCache.set(partName, solid) },\n setFaceEvolution: (partName, evo) => { this.faceEvolutionCache.set(partName, evo as Map<number, number[]>) },\n setRoleTable: (partName, roleTable) => { this.roleTableCache.set(partName, roleTable) },\n security: 'strict',\n })\n const outcome = await de.execute(code, { imports })\n if (outcome.failedAt) {\n throw new ModuleRegistryError(\n 'MODULE_EXEC_FAILED',\n `dependency module failed at line ${outcome.failedAt.lineNo ?? '?'}: ${outcome.failedAt.message}`,\n { lineNo: outcome.failedAt.lineNo, callee: outcome.failedAt.callee },\n )\n }\n return de\n }\n\n /**\n * Direct-mode result assembly:ctx → outputs / statementCache / terminals /\n * brepSolids / compounds(与 collectResult 的 mesh 面同构;输入换源为\n * DirectExecutor ctx + UiMetadata + computeLiveShapes,§4.2/§4.4)。\n */\n private collectDirectResult(meta: UiMetadata, opts?: ExecuteOptions): ExecutionResult {\n const de = this.directExecutor!\n const outputs = new Map<PartName, Shape | CompoundShape>()\n const shapeVarNames = new Set<PartName>()\n const compounds = new Map<PartName, PartName[]>()\n for (const name of de.listCtxKeys()) {\n const v = de.getCtxVar(name)\n if (!isShapeLike(v) && !isCompoundLike(v)) continue\n outputs.set(asPartName(name), v as Shape | CompoundShape)\n shapeVarNames.add(asPartName(name))\n if (isCompoundLike(v)) {\n const behavior = getSlot(v)?.behavior as { memberNames?: string[] } | undefined\n compounds.set(asPartName(name), (behavior?.memberNames ?? []).map(asPartName))\n }\n }\n // statementCache 同步(E8 getCachedOutput):direct 无语句 key——用行级身份键填\n // content key,宿主继续从实例缓存读几何。\n for (const name of shapeVarNames) {\n const v = de.getCtxVar(String(name))\n if (isShapeLike(v)) {\n const shape = v as Shape\n this.statementCache.set(name, {\n statementKey: `direct:${String(name)}`,\n outputContentKey: computeContentKey(shape.positions, shape.indices),\n output: shape,\n })\n }\n }\n // T3-cond:DAG 叶子终端判定换 computeLiveShapes(§4.4)——输入换源:\n // 候选 = ctx 键;行内 keep 查 metadata.keep 表;函数体 exec.keep 登记读\n // DirectExecutor.keepByLine(行号键,与 computeLiveShapes KeepView 对齐)。\n const keepView: KeepView = {\n lineEntries: (lineNo) => meta.keep.get(lineNo),\n functionBody: (lineNo) => de.getKeepByLine(lineNo),\n }\n let terminals = computeLiveShapes({\n lines: meta.lines,\n blocks: meta.blocks,\n keep: keepView,\n shapeVarNames,\n ...(de.getBlockOutputs().size > 0 ? { blockOutputs: de.getBlockOutputs() } : {}),\n // P25 §3.7.4:修改类裸调用原地写回的 producer 精确化(行号 → 写回变量名)\n ...(de.getInplaceWrites().size > 0 ? { inplaceWrites: de.getInplaceWrites() } : {}),\n explicitTerminals: meta.terminalShapes,\n })\n // 显式 return 优先(与 collectResult 同):非显式分支按值判定补 compound kind。\n if (!meta.terminalShapes || meta.terminalShapes.length === 0) {\n terminals = terminals.map((t) => {\n const v = de.getCtxVar(String(t.id))\n return isCompoundLike(v) ? { ...t, kind: 'compound' } : t\n })\n }\n const brepSolids = this.directBrepSolids(terminals, compounds)\n // T3:拓扑——宿主注入(mesh/primitive,setTopology 缓存)原样带出 + BREP 真拓扑\n // 自动构建(与 collectResult 的 topology='auto'/'brep' 面同构)。solidCache 已由\n // DirectExecutor 的 setSolid 钩子同步(逐单元执行后写入),此处 buildBrepTopology\n // 命中缓存构建拓扑。\n const topology = new Map<PartName, PartTopology>(this.topologyCache)\n const topoMode = opts?.topology ?? 'auto'\n if (topoMode !== 'off') {\n const buildFor = (partName: PartName): void => {\n if (topology.has(partName)) return\n const rt = this.buildBrepTopology(partName)\n if (rt) topology.set(partName, { partName, source: 'brep', data: runtimeToData(rt) })\n }\n if (topoMode === 'brep') {\n for (const name of shapeVarNames) {\n const v = de.getCtxVar(String(name))\n if (isShapeLike(v)) buildFor(name)\n }\n } else {\n for (const t of terminals) buildFor(t.id)\n }\n }\n // T3:命名——与 topology 同 set(与 collectResult 的 naming 面同构)\n const naming = new Map<PartName, PartNaming>()\n for (const [partName, partTopo] of topology) {\n const input = this.buildNamingInput(partName, partTopo)\n if (input) naming.set(partName, buildPartNaming(input))\n }\n // T2:activeValues —— 镜像 collectActiveValues,输入换 meta.lines + lineConsumes/\n // blockConsumes。候选 = ctx 中非 shape/compound 键(第三方测量/查询函数返回的\n // number/普通对象)。DAG 叶子且非几何 → activeValues(不进 terminals,零回归)。\n const activeValues = this.collectDirectActiveValues(meta, keepView, shapeVarNames)\n // T2:changed —— DirectExecutor 逐单元写值前后比对(与 module 路径 exec.changed 同语义)。\n const deChanged = de.getChanged()\n return {\n outputs,\n brepChain: this.brepChain!,\n terminals,\n infos: [],\n brepSolids: brepSolids.size > 0 ? brepSolids : undefined,\n topology: topology.size > 0 ? topology : undefined,\n naming: naming.size > 0 ? naming : undefined,\n compounds: compounds.size > 0 ? compounds : undefined,\n kinematics: de.kinematicsSnapshot.size > 0 ? de.kinematicsSnapshot : undefined,\n changed: deChanged ? deChanged.map(asPartName) : undefined,\n activeValues: activeValues.size > 0 ? activeValues : undefined,\n }\n }\n\n /** 块起始行 → lines 中第一个 >= 该行的下标(与 live-shapes.blockIdxOf 同逻辑)。 */\n private static blockIdxOfLine(lines: UiMetadata['lines'], blockLine: number): number {\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].line >= blockLine) return i\n }\n return lines.length\n }\n\n /**\n * T2:Direct-mode activeValues 收集——镜像 collectActiveValues(module 路径),\n * 输入换 meta.lines + lineConsumes/blockConsumes。\n *\n * 判定与 computeLiveShapes 同构:变量 v 的最后写者行(lines 下标 + blockOutputs)\n * 之后没有语句/块消费 v → DAG 叶子。叶子且非 shape/compound → activeValues。\n * 几何叶子走 terminals(跳过,零回归)。\n */\n private collectDirectActiveValues(\n meta: UiMetadata,\n keepView: KeepView,\n shapeVarNames: Set<PartName>,\n ): Map<PartName, unknown> {\n const de = this.directExecutor!\n const active = new Map<PartName, unknown>()\n // lastProducer:lines 中最后写者下标(与 computeLiveShapes 同逻辑)\n const lastProducer = new Map<string, number>()\n for (let i = 0; i < meta.lines.length; i++) {\n const line = meta.lines[i]\n if (!line.hasAssignment) continue\n for (const out of line.outputs) lastProducer.set(String(out), i)\n }\n // 候选 = ctx 中非 shape/compound 键\n for (const name of de.listCtxKeys()) {\n const v = de.getCtxVar(name)\n if (v === undefined || isShapeLike(v) || isCompoundLike(v)) continue\n // producerIdx:lines 中最后写者下标,或 blockOutputs 的块行号锚点\n const lineIdx = lastProducer.get(name)\n const blockLine = de.getBlockOutputs().get(name)\n let producerIdx: number | undefined\n let producerLine: number\n if (lineIdx !== undefined && blockLine !== undefined) {\n // 取较大者:块在 lines 之后时块是最后写者\n const blockIdx = CadRuntime.blockIdxOfLine(meta.lines, blockLine)\n producerIdx = blockIdx > lineIdx ? blockIdx : lineIdx\n producerLine = blockIdx > lineIdx ? blockLine : (meta.lines[lineIdx]?.line ?? 0)\n } else if (lineIdx !== undefined) {\n producerIdx = lineIdx\n producerLine = meta.lines[lineIdx]?.line ?? 0\n } else if (blockLine !== undefined) {\n producerIdx = CadRuntime.blockIdxOfLine(meta.lines, blockLine)\n producerLine = blockLine\n } else {\n // 无生产者(宿主注入 / 跨文件引用)→ 不进 activeValues(与 module 路径一致)\n continue\n }\n if (producerIdx === undefined) continue\n // 消费判定:producer 之后的 lines + blocks\n let consumed = false\n for (let i = producerIdx + 1; i < meta.lines.length; i++) {\n if (lineConsumes(meta.lines[i], asPartName(name), keepView, shapeVarNames)) {\n consumed = true\n break\n }\n }\n if (!consumed && meta.blocks.length > 0) {\n if (blockConsumes(meta.blocks, name, producerLine)) consumed = true\n }\n if (!consumed) active.set(asPartName(name), v)\n }\n return active\n }\n\n /** Direct-mode 逐终端 BREP solid 提取(终端 + 装配成员;无 kernel → 空)。 */\n private directBrepSolids(\n terminals: TerminalShape[],\n compounds: Map<PartName, PartName[]>,\n ): Map<PartName, { solid: BrepHandle; kernel: BrepEngineApi }> {\n const brepSolids = new Map<PartName, { solid: BrepHandle; kernel: BrepEngineApi }>()\n if (!this.kernel) return brepSolids\n for (const t of terminals) {\n const s = this.solidCache.get(t.id)\n if (s && this.kernel) brepSolids.set(t.id, { solid: s, kernel: this.kernel })\n }\n for (const members of compounds.values()) {\n for (const m of members) {\n if (brepSolids.has(m)) continue\n const s = this.solidCache.get(m)\n if (s && this.kernel) brepSolids.set(m, { solid: s, kernel: this.kernel })\n }\n }\n return brepSolids\n }\n\n /**\n * P 四(4.2):execute 阶段自动装载未注册的库。\n *\n * import 表(UiMetadata.imports)驱动的自动装载。\n */\n private async autoLoadLibsFromImports(\n imports: ReadonlyArray<{ kind?: string; localName?: string; packageName?: string; specifier?: string }>,\n ): Promise<ExecutionResult | undefined> {\n if (!this.ports.libLoader) return undefined\n for (const imp of imports) {\n if (imp.kind !== 'namespace') continue // named/default import 不作语句级绑定,不在此装载\n // 相对 specifier 属多文件通道(§4.5),不是库——留给 ModuleRegistry 处理,\n // 否则会被当作裸包名送进 libLoader 而报\"不在白名单\"。\n if (isRelativeSpecifier(imp.specifier ?? '')) continue\n if (!imp.localName) continue\n if (this.libs[imp.localName]) continue // 已注册(宿主注入或此前自动装载)→ 不覆盖\n let ns: StdlibNamespace\n try {\n ns = await this.ports.libLoader.loadLib(imp.packageName ?? imp.specifier ?? '')\n } catch (err) {\n return {\n outputs: new Map(),\n brepChain: this.brepChain!,\n terminals: [],\n infos: [],\n failedAt: {\n index: -1,\n callee: imp.localName,\n message: `import specifier \"${imp.specifier}\" cannot be auto-loaded: ${err instanceof Error ? err.message : String(err)}`,\n },\n }\n }\n const resolved = imp.packageName ?? imp.specifier ?? ''\n this.registerLib(imp.localName, ns, {\n autoLift: this.ports.libLoader.options?.autoLiftFor?.(resolved) ?? this.ports.libLoader.options?.autoLift ?? !hasDualOp(ns as unknown as Record<string, unknown>),\n packageName: imp.packageName,\n })\n }\n return undefined\n }\n\n\n /**\n * 构建一个 part 的命名输入(§3.7)。\n *\n * - BREP:roleTableCache 反查 {origin, role} + subShapeHashes 序号对照 + 面/边行 hint;\n * - primitive:assignPrimitiveFaceRoles 按固定面序给语义 role(§5.2,与 BREP 同一套命名器);\n * - mesh:只填 hint(role='',§5.3)。\n */\n private buildNamingInput(partName: PartName, partTopo: PartTopology): PartNamingInput | undefined {\n const faces = (partTopo.data.faces ?? []) as Array<{\n surfaceType?: string; normal?: readonly number[] | null; center?: readonly number[] | null; area?: number\n }>\n const edges = (partTopo.data.edges ?? []) as Array<{\n length?: number; center?: readonly number[] | null\n }>\n const edgeFaceOrdinals = this.edgeFaceOrdinalsOf(partTopo.data)\n\n if (partTopo.source === 'brep') {\n const roleTable = this.roleTableCache.get(partName) as PartNamingInput['roleTable']\n const solid = this.solidCache.get(partName)\n let ordinalToHash: readonly number[] | undefined\n if (solid && this.kernel) {\n ordinalToHash = Array.from(this.kernel.subShapeHashes(solid, 'face', HASH_UPPER_BOUND))\n }\n return {\n source: 'brep',\n partName,\n faces,\n edges,\n roleTable,\n ordinalToHash,\n edgeFaceOrdinals,\n }\n }\n if (partTopo.source === 'primitive') {\n const primitiveRoles = assignPrimitiveFaceRoles(faces, partName)\n return { source: 'primitive', partName, faces, edges, primitiveRoles, edgeFaceOrdinals }\n }\n return { source: partTopo.source, partName, faces, edges, edgeFaceOrdinals }\n }\n\n /**\n * 从 SelectorRuntimeData 的 edgeFaceRows 提取每条边的两邻面序号(1 起;§3.7)。\n * mesh 无邻接 → undefined(edgeNaming.faces=null,只能 hint 兜底,§5.3)。\n */\n private edgeFaceOrdinalsOf(data: SelectorRuntimeData): ReadonlyArray<readonly [number, number] | null> | undefined {\n const edgeFaceRows = data.proxy?.edgeFaceRows\n const edges = (data.edges ?? []) as Array<{ faceStart?: number; faceCount?: number }>\n if (!Array.isArray(edgeFaceRows) && !(edgeFaceRows instanceof Uint32Array)) return undefined\n const rows = edgeFaceRows as ArrayLike<number>\n const out: Array<readonly [number, number] | null> = []\n for (const edge of edges) {\n const start = edge.faceStart ?? 0\n const count = edge.faceCount ?? 0\n if (count < 2) {\n out.push(null)\n continue\n }\n const a = rows[start]\n const b = rows[start + 1]\n if (a === undefined || b === undefined) {\n out.push(null)\n continue\n }\n out.push([a + 1, b + 1])\n }\n return out\n }\n\n // ── 语义入口:update / append(增量执行) ──\n\n /**\n * Update from the two code texts (before/after an edit): the diff is derived\n * from the passed codes themselves — the engine's persistent ctx is only an\n * execution cache, never the diff authority. Changed statements (paired by\n * positional id, S-2) plus their downstream closure are recomputed in\n * topological order; when nothing changed, the result is assembled from the\n * persistent ctx with zero execution.\n * @param oldCode - the .fai.js source text before the edit.\n * @param newCode - the .fai.js source text after the edit.\n * @param opts - optional execution options.\n * @returns promise resolving to the ExecutionResult.\n */\n async update(oldCode: string, newCode: string, opts?: ExecuteOptions): Promise<ExecutionResult> {\n return this.updateIncremental(oldCode, newCode, opts)\n }\n\n // ── 公开:缓存访问 ──\n\n /**\n * Get the output geometry from the statement cache (keyed by PartName).\n * @param partName - the part name to look up.\n * @returns the cached shape, or undefined.\n */\n getCachedOutput(partName: PartName): Shape | undefined {\n return this.statementCache.get(partName)?.output\n }\n\n /**\n * Get a statement cache's full entry (statementKey / outputContentKey / output;\n * used by tests and host diagnostics).\n * @param partName - the part name to look up.\n * @returns the cached entry, or undefined.\n */\n getStatementCacheEntry(\n partName: PartName,\n ): { statementKey: string; outputContentKey: string; output: Shape } | undefined {\n return this.statementCache.get(partName)\n }\n\n /**\n * Write an entry into the statement cache (keyed by PartName).\n * @param partName - the part name to store under.\n * @param _stmt - unused (T5: direct path has no StatementIR).\n * @param output - the shape output.\n * @param outputContentKey - the output's content key.\n */\n writeToStatementCache(\n partName: PartName,\n _stmt: unknown,\n output: Shape,\n outputContentKey: string,\n ): void {\n this.statementCache.set(partName, {\n statementKey: `direct:${String(partName)}`,\n outputContentKey,\n output,\n })\n }\n\n /** 清除语句缓存(含 statementCache + DirectExecutor ctx 变量) */\n clearStatementCache(): void {\n this.statementCache.clear()\n this.directExecutor.reset()\n }\n\n // ── 公开:拓扑数据缓存 ──\n\n /**\n * Write an entry into the topology data cache. Hosts call this after a\n * successful BREP execution (building source='brep' topology via\n * buildSolidTopologyRuntime), on file load (source='mesh' via\n * buildSelectorRuntime), and on primitive creation (source='primitive' via the\n * primitive topology builder). The topology returned by execute()'s\n * ExecutionResult includes these cached entries.\n * @param partName - the part name to store under.\n * @param source - the topology source (brep/primitive/mesh).\n * @param data - the serialized topology data.\n */\n setTopology(partName: PartName, source: TopologySource, data: SelectorRuntimeData): void {\n this.topologyCache.set(partName, { partName, source, data })\n // §3.6:mesh/primitive 面 hint 快照——从拓扑行提炼写入对应 Shape 槽,\n // op 解析 TopoRef 时经输入 Shape 的命名槽走 geometric-fallback。\n const v = this.directExecutor.getCtxVar(partName)\n if (v && typeof v === 'object') {\n const hints = (data.faces ?? []).map((f) => faceRowToHint(f))\n ensureSlot(v).faceHints = hints\n }\n }\n\n /**\n * Get the topology data for a part.\n * @param partName - the part name to look up.\n * @returns the part topology, or undefined.\n */\n getTopology(partName: PartName): PartTopology | undefined {\n return this.topologyCache.get(partName)\n }\n\n /**\n * Delete the topology data for a part.\n * @param partName - the part name to delete.\n */\n deleteTopology(partName: PartName): void {\n this.topologyCache.delete(partName)\n }\n\n /**\n * 从 BREP solid 构建拓扑数据(接口分离 P0)。\n *\n * 宿主不再直接 import faijs 内部构建函数(buildSolidTopologyRuntime),\n * 而是通过此方法从 runtime 获取 BREP 拓扑。\n *\n * 按 PartName 直接查持久 solidCache + brepChain.meshShapeCache(均为 PartName key),\n * 不再需要 scopedId 投影。单一真源:solidCache(PartName → BrepHandle)。\n *\n * @param partName 终端变量名(PartName,在 brepChain.solidCache 中查找)\n * @returns SelectorRuntime,或 null(无可用 BREP solid)\n */\n buildBrepTopology(partName: PartName): SelectorRuntime | null {\n const brepChain = this.brepChain\n if (!brepChain?.kernel) return null\n\n // partName 即该变量的首输出变量名,按 PartName 查持久 solidCache\n const solid = brepChain.solidCache.get(partName)\n if (!solid) return null\n\n // 规则 1:优先从 brepChain.meshShapeCache 复用执行链产出的三角化结果\n // (与显示 mesh 完全同一份 mesh,不二次 meshShape)\n const cachedMesh = brepChain.meshShapeCache?.get(partName)\n if (cachedMesh && brepChain.kernel) {\n return buildTopologyFromMesh(brepChain.kernel, solid, cachedMesh)\n }\n\n // 无缓存(非执行链路径,如 STEP 导入后直接构建拓扑)→ 执行完整构建(含 meshShape 三角化)\n const result: SolidTopologyResult = buildSolidTopologyRuntime(brepChain.kernel, solid)\n return result.runtime\n }\n\n // ── 公开:dryRun 校验 ──\n\n /**\n * dryRun:acorn 语法门禁 + 元数据提取(T5 后唯一路径)。\n *\n * extractMetadata 全量解析(语法 + 引用),不查符号表。未知 callee 放行,\n * 试执行见 execute 的 failedAt。\n *\n * @param code .fai.js 文本\n * @returns CheckResult\n */\n check(code: string): CheckResult {\n try {\n const meta = extractMetadata(code, { defaultNs: this.defaultNsName, security: this.securityPolicy, namespaces: Object.keys(this.libs) })\n return {\n ok: true,\n errors: [],\n warnings: [],\n script: {\n statements: meta.lines.length,\n callees: meta.lines.map((l) => l.callee),\n },\n }\n } catch (err) {\n if (err instanceof ParseError) {\n const stage = err.code === 'E_SECURITY' ? 'security' : 'parse'\n return {\n ok: false,\n errors: [{ stage, message: err.message, line: err.line, ...(err.code ? { code: err.code } : {}), ...(err.ruleId ? { ruleId: err.ruleId } : {}) }],\n warnings: [],\n }\n }\n return {\n ok: false,\n errors: [{ stage: 'parse', message: err instanceof Error ? err.message : String(err) }],\n warnings: [],\n }\n }\n }\n\n // ── P0 增量:releasePartCaches / updateIncremental ──\n\n /**\n * 派生缓存失效(P0-4):重放前对 `replayKeys`(经 `asPartName()` 转换)逐一清理\n * 所有派生缓存,确保重放后几何/拓扑/mesh 不命中旧值。\n *\n * 清理清单(§4.4):\n * - `solidCache`:先 `kernel.release(handle)`,再删键(参照 dispose 的 try/catch);\n * - `brepChain.meshShapeCache`:删键(跨轮保留,不清会返回旧 solid 的三角化);\n * - `faceEvolutionCache` / `roleTableCache`:删键(与 runtime 同 Map 引用,删键即生效);\n * - `topologyCache` / `statementCache`:删键(collectDirectResult 按新几何重新填充)。\n */\n private releasePartCaches(partNames: PartName[]): void {\n for (const name of partNames) {\n // solidCache: release OCCT handle first, then delete key\n const handle = this.solidCache.get(name)\n if (handle) {\n try { this.kernel?.release(handle) } catch { /* already released */ }\n this.solidCache.delete(name)\n }\n // brepChain.meshShapeCache\n this.brepChain?.meshShapeCache?.delete(name)\n // faceEvolutionCache / roleTableCache (same Map refs as runtime's)\n this.faceEvolutionCache.delete(name)\n this.roleTableCache.delete(name)\n // topologyCache / statementCache\n this.topologyCache.delete(name)\n this.statementCache.delete(name)\n }\n }\n\n /**\n * 前缀重放式 update 增量执行(P0-5)。\n *\n * 流程:\n * 1. 保守闸门 G0–G8 判定——任一命中则退化为全量 `executeDirectText`;\n * 2. 公共前缀扫描定位首个变更行 → 物理行;\n * 3. `unitRanges(newCode)` 映射物理行 → 单元起始行 `startLine`;\n * 4. `releasePartCaches(replayKeys)` 失效派生缓存;\n * 5. `directExecutor.replayFrom(newCode, startLine, opts)` 重放后缀区间;\n * 6. `outcome.failedAt` → 降级全量(§4.7);\n * 7. `collectDirectResult` 组装结果。\n *\n * @param oldCode - 变更前文本(不信任,G3 校验与内部 accumulatedCode 一致)。\n * @param newCode - 变更后文本。\n * @param opts - 执行选项。\n * @returns ExecutionResult。\n */\n private async updateIncremental(\n oldCode: string,\n newCode: string,\n opts?: ExecuteOptions,\n ): Promise<ExecutionResult> {\n const de = this.directExecutor\n this.claimBackends()\n\n // ── 保守闸门 G0–G8 ──\n\n // G1: 本实例从未执行过\n if (this.accumulatedCode === null) {\n return this.executeDirectText(newCode, opts)\n }\n\n // G3: 宿主传入的 oldCode 与内部基准不一致\n if (oldCode.trim() !== this.accumulatedCode.trim()) {\n return this.executeDirectText(newCode, opts)\n }\n\n // 切分行数组(两侧均按 \\r?\\n 切分)\n const oldLines = this.accumulatedCode.split(/\\r?\\n/)\n const newLines = newCode.split(/\\r?\\n/)\n\n // G2: 存在删除(new 比旧短)\n if (newLines.length < oldLines.length) {\n return this.executeDirectText(newCode, opts)\n }\n\n // G0: 非标准解析基线\n const { ranges, lineOffset } = de.unitRanges(newCode)\n if (lineOffset !== 0) {\n return this.executeDirectText(newCode, opts)\n }\n\n // G6: params 变化\n const paramsFp = stableFingerprint(opts?.params ?? null)\n if (paramsFp !== this.lastParamsFingerprint) {\n return this.executeDirectText(newCode, opts)\n }\n\n // G7: 注册库集合变化\n const libIdsEntries = [...this.libIds.entries()].sort((a, b) =>\n a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0,\n )\n const libIdsFp = stableFingerprint(libIdsEntries)\n if (libIdsFp !== this.lastLibIdsFingerprint) {\n return this.executeDirectText(newCode, opts)\n }\n\n // G8: partTransform 变化\n const ptFp = stableFingerprint(opts?.partTransform ?? null)\n if (ptFp !== this.lastPartTransformFingerprint) {\n return this.executeDirectText(newCode, opts)\n }\n\n // G5: 上一轮产生了装配运动学位姿\n if (this.lastHadKinematics) {\n return this.executeDirectText(newCode, opts)\n }\n\n // G4: 含相对 import 的多文件场景\n const meta = extractMetadata(newCode, { defaultNs: this.defaultNsName, security: this.securityPolicy, namespaces: Object.keys(this.libs) })\n if ((meta.imports ?? []).some((imp) => isRelativeSpecifier(imp.specifier))) {\n return this.executeDirectText(newCode, opts)\n }\n\n // ── 公共前缀扫描 ──\n // 逐行 trim 比较;空行/纯空白行等价\n let firstDiff = -1\n const maxLen = Math.max(oldLines.length, newLines.length)\n for (let i = 0; i < maxLen; i++) {\n const a = oldLines[i] ?? ''\n const b = newLines[i] ?? ''\n if (a.trim() !== b.trim()) {\n firstDiff = i\n break\n }\n }\n\n // 零变更路径(§4.6)\n if (firstDiff === -1) {\n return this.zeroChangePath(newCode, meta, opts)\n }\n\n // ── 映射物理行 → 单元起始行 ──\n const physicalLine = firstDiff + 1\n const adjusted = physicalLine - lineOffset\n let startLine: number | undefined\n // 找包含该行的单元(物理行落在块单元内部 → 块起始行)\n for (const r of ranges) {\n if (r.lineNo <= adjusted && adjusted <= r.endLine) {\n startLine = r.lineNo\n break\n }\n }\n if (startLine === undefined) {\n // 找首个 lineNo > physical 的单元(纯追加场景)\n for (const r of ranges) {\n if (r.lineNo > adjusted) {\n startLine = r.lineNo\n break\n }\n }\n }\n // 映射结果为空(改动只落在末尾注释/空行,其后无任何单元)\n if (startLine === undefined) {\n return this.zeroChangePath(newCode, meta, opts)\n }\n\n // ── 计算 replayKeys(与 DirectExecutor.replayFrom 同逻辑,用于 releasePartCaches) ──\n const allUnitsParsed = de.unitRangesWithWrites(newCode)\n const replayUnits = allUnitsParsed.filter((u) => u.lineNo >= startLine)\n const suffixWrites = new Set<string>()\n for (const u of replayUnits) for (const w of u.writes) suffixWrites.add(w)\n const prefixWrites = new Set<string>()\n for (const u of allUnitsParsed) {\n if (u.lineNo < startLine!) for (const w of u.writes) prefixWrites.add(w)\n }\n const replayKeys: string[] = []\n for (const w of suffixWrites) {\n if (!prefixWrites.has(w)) replayKeys.push(w)\n }\n\n // ── 派生缓存失效 ──\n this.releasePartCaches(replayKeys.map((k) => asPartName(k)))\n\n // ── BREP 链与 partTransform 同步 ──\n const brepChain = await this.ensureBrepChain()\n if (opts?.partTransform?.position) {\n brepChain.partTransform = {\n position: opts.partTransform.position,\n scale: opts.partTransform.scale,\n }\n }\n\n // ── 重放 ──\n // G4 already checked: no relative imports → moduleLoad.seed = {}\n const libLoadFailure = await this.autoLoadLibsFromImports(meta.imports)\n if (libLoadFailure) return libLoadFailure\n\n const execOpts: DirectExecOpts = {\n params: opts?.params,\n ...(opts?.beforeStatement ? { beforeStatement: opts.beforeStatement } : {}),\n ...(opts?.executionTimeoutMs !== undefined ? { executionTimeoutMs: opts.executionTimeoutMs } : {}),\n }\n\n // ExecutionLimitError / ParseError / security scan errors propagate\n // (not degraded — only failedAt triggers degradation below)\n const outcome = await de.replayFrom(newCode, startLine, execOpts)\n\n // ── 失败降级(§4.7)──\n if (outcome.failedAt) {\n de.reset()\n return this.executeDirectText(newCode, opts)\n }\n\n // ── 组装结果 ──\n this.accumulatedCode = newCode\n const result = this.collectDirectResult(meta, opts)\n // Record fingerprints after successful execution\n this.recordFingerprints(opts)\n return result\n }\n\n /**\n * 零变更路径(§4.6):不执行任何语句,但需重新 collectDirectResult。\n */\n private async zeroChangePath(\n newCode: string,\n meta: UiMetadata,\n opts?: ExecuteOptions,\n ): Promise<ExecutionResult> {\n const de = this.directExecutor\n this.claimBackends()\n this.accumulatedCode = newCode\n const libLoadFailure = await this.autoLoadLibsFromImports(meta.imports)\n if (libLoadFailure) return libLoadFailure\n const brepChain = await this.ensureBrepChain()\n if (opts?.partTransform?.position) {\n brepChain.partTransform = {\n position: opts.partTransform.position,\n scale: opts.partTransform.scale,\n }\n }\n de.clearRoundState()\n return this.collectDirectResult(meta, opts)\n }\n\n /**\n * 记录指纹快照(每次成功执行结束时调用)。\n */\n private recordFingerprints(opts?: ExecuteOptions): void {\n this.lastParamsFingerprint = stableFingerprint(opts?.params ?? null)\n const libIdsEntries = [...this.libIds.entries()].sort((a, b) =>\n a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0,\n )\n this.lastLibIdsFingerprint = stableFingerprint(libIdsEntries)\n this.lastPartTransformFingerprint = stableFingerprint(opts?.partTransform ?? null)\n this.lastHadKinematics = this.directExecutor.kinematicsSnapshot.size > 0\n }\n\n // ── 公开:释放 ──\n\n /**\n * Dispose the runtime, releasing all acquired OCCT handles and clearing every\n * cache. The instance is unusable afterwards.\n */\n dispose(): void {\n // 所有权在持久 solidCache:释放全部 OCCT handle(§9 决策 2)\n for (const [, handle] of this.solidCache) {\n try { this.kernel?.release(handle) } catch { /* 已释放 */ }\n }\n this.solidCache.clear()\n this.faceEvolutionCache.clear()\n this.roleTableCache.clear()\n this.statementCache.clear()\n this.topologyCache.clear()\n this.brepChain = null\n this.kernel = null\n this.directExecutor.reset()\n }\n}\n\n// ── 工厂函数 ──\n\n/**\n * Create a CadRuntime instance.\n * @param ports - the host-injected environment capabilities.\n * @param mode - the execution mode (default 'auto').\n * @param libs - the host-injected library namespaces (including `cad`, which the\n * root facade injects automatically; core does not assemble it by default).\n * @param options - optional runtime options (e.g. `executor: 'direct' | 'module'`).\n * @returns a new CadRuntime.\n */\nexport function createRuntime(ports: HostPorts, mode?: ExecutionMode, libs?: Record<string, StdlibNamespace>, options?: CadRuntimeOptions): CadRuntime {\n return new CadRuntime(ports, mode, libs, options)\n}\n"]}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/cad-runtime/runtime.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * CadRuntime — 执行核心(L2 编排层)\n *\n * Direct-only execution: the runtime runs only the direct path\n * (extractMetadata → DirectExecutor → computeLiveShapes).\n *\n * 职责:\n * - 执行 .fai.js 源码文本,产出 ExecutionResult(纯计算,不碰 store/DOM)\n * - 管理 statementCache 作为实例成员\n * - 执行模式感知(auto / brep / mesh)\n *\n * 不做的事(留给 browser host):\n * - undo 快照\n * - SceneMutator.createPart / commitGeometry\n * - scriptStore 写入\n * - group/assembly 重建\n * - window.dispatchEvent / toast\n */\n\nimport type { TerminalShape } from '../lang/types'\nimport type { Shape } from '../mesh/types'\nimport type { BrepChainState } from '../brep/brep-chain'\nimport type { BrepHandle } from '../brep/engine/types'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\nimport { getBrepEngine, hasBrepEngine, getActiveBrepEngineId } from '../brep/engine/registry'\nimport { ensureOcctDefaultEngine } from '../brep/engine/adapters/occt'\nimport { ParseError } from '../lang/parse-error'\nimport type { SecurityPolicy } from '../lang/security-scanner'\nimport type { HostPorts, ExecutionMode } from './ports'\nimport type { SelectorRuntimeData } from '../topology/build-selector-runtime'\nimport type { SelectorRuntime } from '../topology/types'\nimport { buildSolidTopologyRuntime } from '../brep/brep-topology'\nimport type { SolidTopologyResult } from '../brep/brep-topology'\nimport { buildTopologyFromMesh } from '../brep/brep-topology'\nimport type { BrepMeshResult } from '../brep/engine/types'\nimport { asPartName, type PartName, type StmtId } from '../identity'\nimport { DirectExecutor, type Namespaces, type DirectExecOpts } from './direct-executor'\nimport type { ExecBackendChoice } from './exec-backend'\nimport { ModuleRegistry, ModuleRegistryError, isRelativeSpecifier } from './module-registry'\nimport type { ModuleRunResult } from './module-registry'\nimport { computeLiveShapes, lineConsumes, blockConsumes, type KeepView } from './live-shapes'\nimport { extractMetadata, type UiMetadata } from '../lang/metadata-extractor'\nimport {\n configureBackends, CONTRACT_VERSION,\n assertContractVersion, type StdlibNamespace,\n type AssemblyKinematicsPose,\n} from '../runtime-state'\nimport { admitCompatLib } from './admit-compat-lib'\nimport { hasDualOp } from '../define-op'\nimport { computeLibId } from './lib-id'\nimport { computeContentKey, stableFingerprint } from './content-key'\nexport { computeContentKey } from './content-key'\nexport { stableFingerprint } from './content-key'\nimport { isCompoundLike, getSlot, ensureSlot, type CompoundShape } from '../shape'\nimport type { PartNaming } from '../topology/naming/types'\nimport type { Provenance } from '../topology/naming/lineage'\nimport { buildPartNaming, type PartNamingInput } from '../topology/naming/build-naming'\nimport { faceRowToHint } from '../topology/naming/geom-hint'\nimport { HASH_UPPER_BOUND } from '../brep/face-evolution'\nimport { scanDeterminism, type DeterminismViolation, type DeterminismPolicy } from '../lang/determinism-scanner'\nimport { transform as sucraseTransform } from 'sucrase'\n\n\n// ── 装配变换死代码已删除 ──\n// v8: applyPrecomputedTransform / eulerDegToMatrix3 / propagateTransform 已删除。\n// 装配 pass 委托 executeDoAssemble(唯一真源),约束只存 face 数据、由 api/assembly 实时求解。\n\n// ── 类型定义 ──\n\n/**\n * A single validation error produced by CadRuntime.check.\n */\nexport interface CheckError {\n /** The stage that produced the error ('keep' = keep directive validation). */\n stage: 'parse' | 'symbol' | 'reference' | 'keep' | 'security'\n message: string\n line?: number\n stmtId?: string\n /** Parse diagnostic code (e.g. E_CONTROL_FLOW, passed through from parser ParseError.code). */\n code?: string\n /** SecurityScanner rule ID (only when stage='security'; e.g. SEC_IDENT / SEC_SYNTAX / ...). */\n ruleId?: string\n}\n\n/**\n * The aggregated result of a CadRuntime.check dry run.\n */\nexport interface CheckResult {\n ok: boolean\n errors: CheckError[]\n warnings: string[]\n /** Structured context for AI self-correction. */\n script?: { statements: number; callees: string[] }\n}\n\n/**\n * 拓扑来源类型 — 静态判定,不混用。\n * - `brep`:BREP 真拓扑(stepRuntimes),由 OCCT solid 构建\n * - `primitive`:primitive 假拓扑(primitiveRuntimes),创建时刻快照\n * - `mesh`:mesh 假拓扑(meshRuntimes),加载时刻快照\n */\nexport type TopologySource = 'brep' | 'primitive' | 'mesh'\n\n/**\n * 单个 part 的拓扑数据 — 由 ExecutionResult 携带,宿主从结果消费。\n *\n * 宿主不应再直接 import faijs 的拓扑构建函数(buildSelectorRuntime 等),\n * 而是从 ExecutionResult.topology 中读取。\n */\nexport interface PartTopology {\n /** partName 即 faijs 变量名(PartName,品牌型) */\n partName: PartName\n /** 拓扑来源(静态判定) */\n source: TopologySource\n /** 序列化的拓扑数据(可跨 Worker 传输) */\n data: SelectorRuntimeData\n}\n\n/**\n * The result of a CadRuntime execution, carrying geometry, chain state, and\n * host-consumable topology data.\n */\nexport interface ExecutionResult {\n /**\n * Statement output cache (PartName → Shape or compound; includes the dual\n * front/back outputs of a split). UI query entry point listing every shape\n * variable — unregistered compounds returned by third parties (structural\n * test isCompoundLike) enter as well.\n */\n outputs: Map<PartName, Shape | CompoundShape>\n /** BREP 链状态(含逐 part solid 句柄) */\n brepChain: BrepChainState\n /** 终端几何列表 */\n terminals: TerminalShape[]\n /** 信息/警告列表 */\n infos: string[]\n /** 失败信息(如果执行中途出错);lineNo 为 DirectExecutor 路径新增(§4.2 E-add,宿主按现状读前三个字段不破裂);code 为原始错误码(如有,如 E_TOPO_NOT_FOUND / E_ARGS_FORM) */\n failedAt?: { index: number; callee: string; message: string; lineNo?: number; code?: string }\n /** 逐终端的 BREP 实体(仅持有 solid 的终端出现在此表)。key 为终端 PartName。 */\n brepSolids?: Map<PartName, { solid: BrepHandle; kernel: BrepEngineApi }>\n /**\n * 拓扑数据 — 每个 part 的拓扑运行时。\n * key 为 PartName。\n * E13:由 ExecutionResult 携带,宿主从结果消费。\n * 拓扑来源静态判定:BREP 成功时 source='brep',否则根据 part 类型判定。\n */\n topology?: Map<PartName, PartTopology>\n /**\n * 拓扑命名数据 — 每个 part 的命名行(§3.7 of\n *\n * 宿主拾取到 Reference(序号)后 O(1) 反查命名行 → captureTopoRef 造 TopoRef。\n * BREP/primitive 完整(faceNaming 有 origin+role),mesh 只给 hint(role='')。\n * 与 topology 并列、选择器 manifest 不改动;命名数据不进 topology-store。\n */\n naming?: Map<PartName, PartNaming>\n /**\n * 装配/分组结构 — 每个 compound 变量(group/assembly 产物)的成员变量名列表。\n * key 为 compound 变量名(PartName),value 为成员变量名列表。\n */\n compounds?: Map<PartName, PartName[]>\n /** 被 touch 声明的原地修改 Shape 的持有变量名(装配变换后 collectResult 填充,去重) */\n changed?: PartName[]\n /**\n * 活跃但非几何的值(keep-syntax 设计 §5.2,UI 可选消费)。\n * DAG 叶子且非 shape/compound:第三方测量/查询函数返回的 number/普通对象等。\n * 不进 terminals(terminals 只含几何,零回归)。\n */\n activeValues?: Map<PartName, unknown>\n /**\n * P3:装配运动副 per-member 位姿(键 = 成员名;含恒等链根),仅在含 joints 的\n * assembly solve 语句执行后出现。宿主从本字段读取(动画/导出),不新增返回值\n * 消费语义(asm.solve() 保持 R0 语句形态,与 do_assemble 现状一致)。\n */\n kinematics?: Map<PartName, AssemblyKinematicsPose>\n}\n\n/**\n * Options controlling a single CadRuntime execution. All inputs are code text\n * or plain values — the engine's internal IR is never part of this surface.\n */\nexport interface ExecuteOptions {\n /** The parameter table. */\n params?: Record<string, unknown>\n /** partTransform(世界→局部坐标偏移 + 单位缩放) */\n partTransform?: { position: [number, number, number]; scale?: [number, number, number] }\n /** 语句前钩子(用于 undo 逐语句快照);参数为语句 id(sN)与语句下标 */\n beforeStatement?: (stmtId: string, index: number) => void\n /**\n * 增量执行起点(兼容旧签名):从指定位置开始顺序执行,\n * 之前的语句不进执行循环(缺省 0 = 全量执行)。\n */\n startIndex?: number\n /**\n * 拓扑构建开关(Phase 2.6):\n * - 'auto'(默认):为\"在 BREP 链上\"的终端自动构建 BREP 真拓扑\n * - 'brep':为所有在 BREP 链上的输出构建拓扑(含非终端)\n * - 'off':不自动构建(只返回宿主 setTopology 注入的拓扑)\n */\n topology?: 'auto' | 'brep' | 'off'\n /**\n * 主模块 key(相对项目根的路径,如 `src/assembly.fai.js`;多文件 §4.5)。\n * 宿主执行某个文件时传入——主模块的相对 import 以此为解析基准;不传则视为\n * 位于项目根(存量单文件行为不变:无 key 时 `./x.fai.js` 相对根解析)。\n */\n entryKey?: string\n /**\n * 执行护栏(§6.3 / D8,v1 可选、默认关闭):**整轮超时**(覆盖 execute/append/update\n * 全程,含全部函数体重放),超时抛 {@link ExecutionLimitError}(E_EXEC_LIMIT)。\n * 防 `while(true)` 死循环挂死 worker/UI;不传则无超时(现状行为不变)。\n */\n executionTimeoutMs?: number\n}\n\n// 执行护栏超时错误(§6.3 / D8)定义在独立叶子文件 execution-limit-error.ts,\n// DirectExecutor(direct 路径单元循环内检查)与本文件共用;此处 import + re-export\n// 保持宿主 import 面不变(module 路径 runWithFailureHandling 的 Promise.race 使用)。\nexport { ExecutionLimitError } from './execution-limit-error'\nimport { RuntimeConcurrentError } from './runtime-concurrent-error'\nexport { RuntimeConcurrentError } from './runtime-concurrent-error'\n\n/**\n * 全局执行态锁(C1):进程内同一时刻只允许一个 runtime 处于执行态。\n *\n * 进程级单例(`setCurrentStmt` / backends / 内核)决定了并发执行多 runtime 不可支持;\n * 旧行为是\"互踩\"(见 {@link CadRuntime.claimBackends} 文档),现在改为显式拒绝。\n *\n * **同实例的重入放行**:`update` 内部会经 `executeDirectText`/`appendDirectText` 落入\n * 同一调用栈——那已被\"同一栈上串行\"保证,不构成并发。跨实例一律拒绝。\n */\nlet executingRuntimeId: number | null = null\n/** 执行态持有者(诊断用:错误信息里给出被谁挡住)。 */\nlet executingEntry: string | null = null\n/** runtime id 分配器(仅用于错误信息定位,不参与任何语义判定)。 */\nlet nextRuntimeId = 1\n\n/**\n * Thrown by CadRuntime.append when a newly appended statement references a\n * variable that is not in the persistent context — its producer was never\n * executed (cross-file reference to an unloaded part, or ctx cleared by\n * dispose). The host should upgrade to a full `execute(code)`.\n */\nexport class AppendPrefixError extends Error {\n constructor(\n /** The source statement id (sN) whose reference is missing. */\n readonly statementId: string,\n /** The referenced variable missing from the persistent ctx. */\n readonly missingVar: string,\n ) {\n super(\n `[faijs] append: prefix missing — statement \"${statementId}\" references ` +\n `\"${missingVar}\" which is not in the persistent context; ` +\n `run execute(code) for a full execution`,\n )\n this.name = 'AppendPrefixError'\n }\n}\n\n// ── CadRuntime ──\n\n/** Shape 形状守卫(positions/indices 结构) */\nfunction isShapeLike(v: unknown): v is Shape {\n return !!v && typeof v === 'object' && 'positions' in v && 'indices' in v\n}\n\n/** SelectorRuntime → SelectorRuntimeData:剥离 Map 字段(跨 Worker 传输用)。 */\nfunction runtimeToData(rt: SelectorRuntime): SelectorRuntimeData {\n const {\n referenceMap: _referenceMap,\n referenceByNormalizedSelector: _referenceByNormalizedSelector,\n referenceByDisplaySelector: _referenceByDisplaySelector,\n faceReferenceByRowIndex: _faceReferenceByRowIndex,\n edgeReferenceByRowIndex: _edgeReferenceByRowIndex,\n vertexReferenceByRowIndex: _vertexReferenceByRowIndex,\n occurrenceIdByRowIndex: _occurrenceIdByRowIndex,\n faceReferenceMap: _faceReferenceMap,\n edgeReferenceMap: _edgeReferenceMap,\n vertexReferenceMap: _vertexReferenceMap,\n ...data\n } = rt\n return data as SelectorRuntimeData\n}\n\nexport type { DeterminismPolicy }\n\n/**\n * CadRuntime 构造选项(第 4 参;缺省全部可选)。\n *\n * direct 是唯一执行路径。security 透传给 DirectExecutor 与 extractMetadata\n * (A1/A2/A3 缺省 'strict')。determinism 在 execute/append 前 对源码做 B 档\n * taint 扫描(缺省 'error',见 docs/reproducibility-contract.md §3)。\n */\nexport interface CadRuntimeOptions {\n /** 安全策略档位(缺省 'strict';透传给 DirectExecutor 与 extractMetadata) */\n security?: SecurityPolicy\n /**\n * 执行后端(缺省 'vm';静态选定,无运行时回退)。'interpreter' 为无\n * `new Function`/eval 的 AST 解释器后端,供禁 eval 环境(weapp / 严格 CSP)\n * 使用——见 docs/plans/2026-09-14-no-eval-interpreter-backend-design.md。\n */\n execBackend?: ExecBackendChoice\n /**\n * 确定性扫描档位(缺省 'error')。执行前对 .fai.js 源码及其 import 的项目模块\n * / @faicad/* 库源码做 B 档 taint 扫描,违规按档位处理。库源码经\n * `ports.libLoader.loadSource` 获取(宿主未提供则跳过库扫描)。\n */\n determinism?: DeterminismPolicy\n}\n\n/**\n * CadRuntime is the execution core of the L2 orchestration layer.\n *\n * It executes a .fai.js source text and produces an ExecutionResult\n * (pure computation that touches neither the scene store nor the DOM), manages\n * the statementCache as an instance member, resolves shape references\n * internally, and is execution-mode aware (auto/brep/mesh). Hosts own undoing,\n * scene mutation, script-store writes, group/assembly rebuilding, and event\n * dispatch.\n */\nexport class CadRuntime {\n /** The host-injected environment capabilities. */\n readonly ports: HostPorts\n /** The execution mode (auto/brep/mesh). */\n readonly mode: ExecutionMode\n /** direct 是唯一执行路径。保留属性以兼容外部读取。 */\n readonly executorMode = 'direct' as const\n\n /** 语句缓存(实例级,不再是模块单例)。key = 可命中的 PartName(stmt.id 即其首输出名) */\n private statementCache = new Map<PartName, {\n statementKey: string\n outputContentKey: string\n output: Shape\n }>()\n\n /** 场景代码累积(三接口收敛:append 只传新行,faijs 累积全文使 id 按位置稳定 + DAG/keep 分析可见全场景)。 */\n private accumulatedCode: string | null = null\n /** 已累积场景的语句 id 集(append 据此判定「新增语句」)。 */\n private accumulatedIds = new Set<StmtId>()\n\n // P0 增量闸门用:上次成功执行的指纹快照\n private lastParamsFingerprint: string | null = null\n private lastLibIdsFingerprint: string | null = null\n private lastPartTransformFingerprint: string | null = null\n private lastHadKinematics = false\n\n /**\n * PartName → OCCT 实体句柄,跨 execute 存活,持有所有权(顶替释放/删除/dispose 的唯一操作对象)。\n * op 层通过 brepChain.solidCache 读写——该引用指向此持久 Map(见 ensureBrepChain)。\n */\n private solidCache = new Map<PartName, BrepHandle>()\n\n /** 面演化映射缓存(PartName → FaceEvolution),随 solidCache 一并持久。 */\n private faceEvolutionCache = new Map<PartName, Map<number, number[]>>()\n\n /** 拓扑命名 RoleTable 缓存(PartName → RoleTable,§2.3),与 faceEvolutionCache 同生命周期。 */\n private roleTableCache = new Map<PartName, unknown>()\n\n /** OCCT 内核引用(环境级单例,initOcctWasm() 幂等;mesh 模式为 null)。供顶替释放用。 */\n private kernel: BrepEngineApi | null = null\n\n /**\n * 惰性初始化的 BREP 链:solidCache / faceEvolutionCache 引用实例持久 Map,\n * kernel 取环境单例。首次需要时创建一次,跨 execute 复用(不再每次新建)。\n */\n private brepChain: BrepChainState | null = null\n\n /**\n * 拓扑数据缓存:partName → PartTopology(实例级)\n * E13:宿主不再直接 import faijs 拓扑构建函数,而是从 ExecutionResult.topology 消费。\n * 拓扑构建由宿主在 execute 后调用 setTopology 注入(BREP 路径)或由加载时注入(mesh/primitive 路径)。\n */\n private topologyCache = new Map<PartName, PartTopology>()\n\n /** 无 IR 执行器(DirectExecutor,T5 后唯一执行路径) */\n private readonly directExecutor: DirectExecutor\n\n /** 实例 id(仅用于 C1 并发错误信息里的定位,不参与任何语义判定)。 */\n private readonly runtimeId = nextRuntimeId++\n\n /** 安全策略档位(透传给 extractMetadata 与 DirectExecutor;缺省 'strict') */\n private readonly securityPolicy: SecurityPolicy\n /** 确定性扫描档位(缺省 'error';execute/append 前对源码做 B 档 taint 扫描)。 */\n private readonly determinismPolicy: DeterminismPolicy\n /** warn 档位下收集的确定性警告,合并进最终 ExecutionResult.infos。 */\n private determinismWarnings: string[] = []\n\n /** 宿主注册库(含 cad:由根门面 createRuntime 包装注入;注入编译产物 fn 的第二参 ns) */\n private readonly libs: Record<string, StdlibNamespace>\n /** 库内容身份表 (binding → content hash),增量 key 用(B2,§7.3) */\n private readonly libIds = new Map<string, string>()\n /** import specifier → binding 映射(registerLib 的 packageName 声明;check ①.5 校验 specifier) */\n private readonly specifierToBinding = new Map<string, string>()\n private readonly namespaces: Namespaces\n /** 默认命名空间绑定名(U10/R2):根门面经 registerLib(binding, ns, {default: true}) 显式声明;\n * 缺省 'cad'(与 parser 缺省 defaultNs 一致)。namespace 字段缺省的语句归属该绑定。 */\n private defaultNsName = 'cad'\n\n /**\n * Register a library namespace. A version mismatch throws (no silent\n * degradation); afterwards compiled products may use the library via\n * `ns.<binding>.<callee>`. `cad` is registered the same way: the root facade\n * injects it through registerLib('cad', createInternalStdlib(), { default: true }).\n * @param binding - the namespace binding name.\n * @param ns - the namespace object to register.\n * @param options - `{ default: true }` declares this binding as the default\n * namespace (host-declared default binding name, U10/R2).\n */\n /**\n * Register a library namespace under a statement-level binding.\n *\n * Third-party libraries (no defineOp / no contractVersion) are admitted\n * through compatOp so bare functions cannot silently bypass the statement\n * boundary contract (B4, §4.3.3). The `autoLift` option controls this:\n * - `true` → bare functions are lifted via compatOp (brep-only, B4).\n * - `false` → no lifting (the library's functions are used as-is; the\n * built-in cad surface uses this since its ops already carry\n * `DUAL_OP_META`).\n * - omitted → inferred: `!hasDualOp(ns)`. Libraries that already declare\n * dual-ops (cad, gear-lib-demo's defineOp mocks) auto-lift `false`;\n * all-bare-function libraries (sheetmetal) auto-lift `true`.\n *\n * The engine's built-in L3 surface is registered without `autoLift` by the\n * facade: inferred `false` (all ops carry `DUAL_OP_META`).\n * @param binding - the name scripts use to reach the namespace (e.g. 'cad').\n * @param ns - the library's export object.\n * @param options - registration hints. `packageName` declares the npm package\n * backing this binding so `check()` can validate script import specifiers\n * against registered libraries (specifier mismatch = hard check error).\n */\n registerLib(binding: string, ns: StdlibNamespace, options?: { default?: boolean; autoLift?: boolean; packageName?: string; naming?: Provenance }): void {\n assertContractVersion(ns as unknown as { contractVersion?: number })\n // B4: admit bare (non-dual-op) library functions through compatOp when\n // autoLift is true (or inferred true — the library has no dual-op).\n // Hard ordering: assertLibConforms runs inside admitCompatLib BEFORE\n // wrapping — DUAL_OP_META hangs on the function object with\n // enumerable:false, and wrapping first would let bare functions silently\n // skip the strict validation pass (R8).\n // Phase 2.11-①: `options.naming` is the library-level provenance default;\n // a bare function's own `fn.naming` wins over it (see admit-compat-lib.ts).\n const lift = options?.autoLift ?? !hasDualOp(ns as unknown as Record<string, unknown>)\n const admitted = lift\n ? (admitCompatLib(ns as unknown as Record<string, unknown>, { naming: options?.naming }) as StdlibNamespace)\n : ns\n this.libs[binding] = admitted\n this.libIds.set(binding, computeLibId(binding, ns as unknown as Record<string, unknown>))\n if (options?.packageName) {\n this.specifierToBinding.set(options.packageName, binding)\n }\n if (options?.default === true) {\n this.defaultNsName = binding\n }\n this.directExecutor.setNamespaces({ ...this.libs } as Namespaces)\n }\n\n /** The runtime's default namespace binding name (host-declared; 'cad' by default). */\n get defaultNs(): string {\n return this.defaultNsName\n }\n\n constructor(\n ports: HostPorts,\n mode: ExecutionMode = 'auto',\n libs: Record<string, StdlibNamespace> = {},\n options: CadRuntimeOptions = {},\n ) {\n this.ports = ports\n this.mode = mode\n this.libs = libs\n this.namespaces = { ...libs } as Namespaces\n this.securityPolicy = options.security ?? 'strict'\n this.determinismPolicy = options.determinism ?? 'error'\n this.directExecutor = new DirectExecutor({\n namespaces: this.namespaces,\n setSolid: (partName, solid) => { this.solidCache.set(partName, solid) },\n setFaceEvolution: (partName, evo) => { this.faceEvolutionCache.set(partName, evo as Map<number, number[]>) },\n setRoleTable: (partName, roleTable) => { this.roleTableCache.set(partName, roleTable) },\n security: this.securityPolicy,\n ...(options.execBackend !== undefined ? { execBackend: options.execBackend } : {}),\n })\n\n // P2:装配全局 backends(stdlib 经 getBackends() 取资源)。\n this.claimBackends()\n }\n\n /**\n * 认领全局 backends 配置(P2 修复):全局 backends 是单例,任何 runtime 创建都会\n * 覆盖它——后创建的实例(如预览用 mesh runtime)会把 mode/kernel getter 指向自己,\n * 先前 runtime 的后续 execute 会被静默劫持(dispatch 走错槽、缓存键漂移、\n * 顶替释放旧 BREP 句柄后拓扑重建撞上悬空句柄)。因此除构造外,每个执行入口\n * (execute,所有执行路径的汇聚点)都必须先重新认领本实例的配置。\n *\n * ⚠️ 并发交错执行多个 runtime **仍会互踩**——这条限制现在由全局执行态锁强制\n * ({@link withExecutionLock}):第二个 runtime 在他人执行态时抛\n * {@link RuntimeConcurrentError}(E_RUNTIME_CONCURRENT),不再\"尽力而为\"。\n * 用户已裁决不允许并发(开发计划 §4.7 C1)。\n * ⚠️ getter 的 this 指向所在对象字面量,用箭头闭包捕获实例(避免 no-this-alias)。\n */\n private claimBackends(): void {\n const brepChainOf = (): BrepChainState | null => this.brepChain\n const portsOf = (): HostPorts => this.ports\n configureBackends({\n contractVersion: CONTRACT_VERSION,\n config: {\n mode: this.mode,\n get brepEngineId() {\n return getActiveBrepEngineId()\n },\n get brepCapabilities() {\n return brepChainOf()?.capabilities\n },\n get partTransform() {\n return brepChainOf()?.partTransform\n },\n },\n kernel: {\n get brep() {\n return brepChainOf()?.kernel ?? null\n },\n get csg() {\n return portsOf().csg\n },\n get sdf() {\n return portsOf().sdf\n },\n },\n fonts: this.ports.fonts,\n texture: this.ports.texture,\n assets: this.ports.assets,\n events: this.ports.events,\n cad: this.namespaces.cad,\n })\n }\n\n /**\n * 确保持久 BREP 链存在(惰性初始化)。\n * 引擎从注册表取当前 BREP 引擎(宿主装配时注册);无引擎或 mesh 模式 → kernel 为 null。\n * OCCT 是内置默认引擎:宿主未注册任何引擎时,非 mesh 模式自动装配 OCCT——\n * 现有宿主无需改动即恢复默认 BREP 行为;换引擎仍是静态的(装配期注册其它引擎即可)。\n */\n private async ensureBrepChain(): Promise<BrepChainState> {\n if (this.brepChain) return this.brepChain\n if (this.mode !== 'mesh') {\n await ensureOcctDefaultEngine()\n }\n const engine = this.mode === 'mesh' || !hasBrepEngine()\n ? null\n : await getBrepEngine()\n const kernel = engine?.primitives ?? null\n this.kernel = kernel\n this.brepChain = {\n solidCache: this.solidCache,\n kernel,\n capabilities: engine?.capabilities,\n faceEvolutionCache: this.faceEvolutionCache,\n roleTableCache: this.roleTableCache,\n meshShapeCache: new Map<PartName, BrepMeshResult>(),\n }\n return this.brepChain\n }\n\n // ── 公开入口:execute / append / update(输入一律是代码文本,IR 在引擎内部) ──\n\n /**\n * 取全局执行态锁并运行 `fn`(C1)。跨实例并发 → 抛 {@link RuntimeConcurrentError};\n * 本实例重入(update 内部落到 executeDirectText/appendDirectText)放行。\n *\n * 刻意**同步**取锁(不在取锁前 await):这样 `runtimeA.execute(...)` 尚未 await 时\n * 紧接着调 `runtimeB.execute(...)` 必然被拒绝,行为可确定、可测试。\n * @param entry - 入口名(execute / append / update),仅用于错误信息。\n * @param fn - 实际执行体。\n * @returns fn 的结果;无论成功失败都释放锁(finally)。\n */\n private async withExecutionLock<T>(entry: string, fn: () => Promise<T>): Promise<T> {\n if (executingRuntimeId !== null && executingRuntimeId !== this.runtimeId) {\n throw new RuntimeConcurrentError(executingRuntimeId, this.runtimeId, entry)\n }\n const reentrant = executingRuntimeId === this.runtimeId\n if (!reentrant) {\n executingRuntimeId = this.runtimeId\n executingEntry = entry\n }\n try {\n return await fn()\n } finally {\n if (!reentrant) {\n executingRuntimeId = null\n executingEntry = null\n }\n }\n }\n\n /** 当前执行态持有者的入口名(诊断;无持有者时 null)。 */\n static get executingEntry(): string | null {\n return executingEntry\n }\n\n /**\n * Full execution from code text: parse → execute every statement.\n * @param code - the .fai.js source text.\n * @param opts - optional execution options.\n * @returns promise resolving to the ExecutionResult.\n * @throws {RuntimeConcurrentError} when another CadRuntime is already executing (C1).\n */\n async execute(code: string, opts?: ExecuteOptions): Promise<ExecutionResult> {\n return this.withExecutionLock('execute', () => this.executeDirectText(code, opts))\n }\n\n /**\n * Append new statements (incremental execution): only execute the new code\n * text on the persistent ctx; prefix validation enforces that references\n * must already exist (AppendPrefixError otherwise).\n * @param code - the new .fai.js source text to append.\n * @param opts - optional execution options.\n * @returns promise resolving to the ExecutionResult.\n * @throws {RuntimeConcurrentError} when another CadRuntime is already executing (C1).\n */\n async append(code: string, opts?: ExecuteOptions): Promise<ExecutionResult> {\n return this.withExecutionLock('append', () => this.appendDirectText(code, opts))\n }\n\n /**\n * 确定性扫描门(B 档 taint):执行前对源码做静态扫描,违规按 determinismPolicy 处理。\n *\n * 扫描范围:主文件 + @faicad/* 库源码(经 libLoader.loadSource,若宿主提供)。\n * 项目内相对 import 模块的扫描由 ModuleRegistry.load 内部完成(构造时传入 policy)。\n *\n * @returns ExecutionResult(违规 + policy='error' 时),null(通过或 warn/off)。\n * warn 档位下警告收集到 this.determinismWarnings,由调用方合并进 infos。\n */\n private async runDeterminismGate(code: string, meta: UiMetadata): Promise<ExecutionResult | null> {\n if (this.determinismPolicy === 'off') return null\n this.determinismWarnings = []\n const hints = this.extractDeterminismHints(meta)\n const violations: DeterminismViolation[] = scanDeterminism(code, {\n defaultNs: this.defaultNsName,\n extraNamespaces: hints.namespaces,\n extraCallees: hints.callees,\n }).violations\n // 库源码扫描(@faicad/* 非引擎;经 libLoader.loadSource,宿主未提供则跳过)\n const loadSource = this.ports.libLoader?.loadSource\n if (loadSource) {\n for (const imp of meta.imports ?? []) {\n const spec = imp.packageName ?? imp.specifier ?? ''\n if (!spec.startsWith('@faicad/')) continue\n if (spec === '@faicad/faijs' || spec.startsWith('@faicad/faijs/')) continue\n try {\n const src = await loadSource(spec)\n if (src) {\n violations.push(...this.scanLibrarySource(src, hints).violations)\n }\n } catch {\n // 库源码不可读 → 跳过(不阻断执行;库违规由库作者负责)\n }\n }\n }\n if (violations.length === 0) return null\n const formatted = violations.map((v) => `[determinism] line ${v.lineNo} [${v.source}]: ${v.message}`)\n if (this.determinismPolicy === 'warn') {\n this.determinismWarnings = formatted\n return null\n }\n // 'error'\n const first = violations[0]\n return {\n outputs: new Map(),\n brepChain: this.brepChain!,\n terminals: [],\n infos: [],\n failedAt: {\n index: -1,\n callee: 'determinism',\n message: formatted[0],\n lineNo: first.lineNo,\n code: 'E_DETERMINISM',\n },\n }\n }\n\n /** 从 meta.imports 提取扫描提示:namespace import → extraNamespaces,named import → extraCallees。 */\n private extractDeterminismHints(meta: UiMetadata): { namespaces: string[]; callees: string[] } {\n const namespaces: string[] = []\n const callees: string[] = []\n for (const imp of meta.imports ?? []) {\n if (imp.kind === 'namespace' && imp.localName) namespaces.push(imp.localName)\n if (imp.kind === 'named') callees.push(...imp.bindings)\n }\n return { namespaces, callees }\n }\n\n /** 扫描库源码(可能含 TS 语法 → sucrase 脱后扫;失败则当 JS 直扫)。 */\n private scanLibrarySource(src: string, hints: { namespaces: string[]; callees: string[] }): { violations: DeterminismViolation[] } {\n let js = src\n try {\n js = sucraseTransform(src, { transforms: ['typescript'] }).code\n } catch {\n // 非 TS 或 sucrase 转换失败 → 当 JS 直扫\n }\n return {\n violations: scanDeterminism(js, {\n defaultNs: this.defaultNsName,\n extraNamespaces: hints.namespaces,\n extraCallees: hints.callees,\n }).violations,\n }\n }\n\n /**\n * Direct-mode full execution: the code text runs on the DirectExecutor\n * and outputs/terminals are assembled from the persistent ctx +\n * extractMetadata + computeLiveShapes.\n */\n private async executeDirectText(code: string, opts?: ExecuteOptions): Promise<ExecutionResult> {\n const de = this.directExecutor\n // P2 修复:执行前重新认领全局 backends(本实例配置为准)。\n this.claimBackends()\n this.accumulatedCode = code\n const meta = extractMetadata(code, { defaultNs: this.defaultNsName, security: this.securityPolicy, namespaces: Object.keys(this.libs) })\n const determinismFailure = await this.runDeterminismGate(code, meta)\n if (determinismFailure) return determinismFailure\n const libLoadFailure = await this.autoLoadLibsFromImports(meta.imports)\n if (libLoadFailure) return libLoadFailure\n // 多文件(§4.5):相对 import 依赖装载 → 绑定 seed;装载错误 → failedAt 短路。\n const moduleLoad = await this.loadDirectModuleImports(meta, opts?.entryKey)\n if (!('seed' in moduleLoad)) return moduleLoad\n const brepChain = await this.ensureBrepChain()\n if (opts?.partTransform?.position) {\n brepChain.partTransform = {\n position: opts.partTransform.position,\n scale: opts.partTransform.scale,\n }\n }\n const outcome = await de.execute(code, {\n imports: moduleLoad.seed,\n params: opts?.params,\n ...(opts?.startIndex !== undefined ? { startLine: opts.startIndex } : {}),\n ...(opts?.beforeStatement ? { beforeStatement: opts.beforeStatement } : {}),\n ...(opts?.executionTimeoutMs !== undefined ? { executionTimeoutMs: opts.executionTimeoutMs } : {}),\n })\n if (outcome.failedAt) {\n return this.directFailedAtOrThrow(outcome.failedAt, meta)\n }\n const result = this.collectDirectResult(meta, opts)\n if (this.determinismWarnings.length > 0) result.infos.push(...this.determinismWarnings)\n this.recordFingerprints(opts)\n return result\n }\n\n /** E6:DirectExecutor 失败行 → 场景语句序数(meta.lines 下标);不在 lines → undefined。 */\n private directStmtOrdinal(meta: UiMetadata, lineNo: number | undefined): number | undefined {\n if (lineNo === undefined) return undefined\n const idx = meta.lines.findIndex((l) => l.line === lineNo)\n return idx < 0 ? undefined : idx\n }\n\n /**\n * Direct-mode failedAt handling (T5 direct-only path): all execution errors\n * from DirectExecutor's catch block are statement-level failures → keep in\n * failedAt (no re-throw). This includes OpError / BrepUnsupportedError /\n * MeshUnsupportedError (engine capability failures), TypeError (no_such_op),\n * and business parameter errors (e.g. E_ARGS_FORM, E_CHAMFER_NO_EDGES,\n * E_TOPO_NOT_FOUND). ParseError is re-thrown by DirectExecutor (not here).\n * The original error's `code` (e.g. E_TOPO_NOT_FOUND) is surfaced on\n * failedAt.code so hosts can programmatically distinguish error kinds.\n */\n private directFailedAtOrThrow(\n failedAt: { index: number; callee: string; message: string; lineNo?: number; error?: unknown },\n meta: UiMetadata,\n ): ExecutionResult {\n const index = this.directStmtOrdinal(meta, failedAt.lineNo) ?? failedAt.index\n const rawCode = failedAt.error instanceof Error ? (failedAt.error as { code?: unknown }).code : undefined\n const code = typeof rawCode === 'string' ? rawCode : undefined\n return {\n outputs: this.directShapes(),\n brepChain: this.brepChain!,\n terminals: [],\n infos: [],\n failedAt: { index, callee: failedAt.callee, message: failedAt.message, lineNo: failedAt.lineNo, code },\n }\n }\n\n /**\n * Direct-mode update: R3 语义——清 ctx 全量重跑新文本\n * (DirectExecutor.update 即 execute;无需 oldCode 差量)。\n */\n private async updateDirectText(_oldCode: string, newCode: string, opts?: ExecuteOptions): Promise<ExecutionResult> {\n this.accumulatedCode = newCode\n return this.executeDirectText(newCode, opts)\n }\n\n /**\n * Direct-mode append: DirectExecutor 共享 ctx 只执行新单元\n * (行号即边界);prefix 校验保留 AppendPrefixError 语义(引用不在持久 ctx → 抛错,\n * 宿主升级为全量 execute)。\n */\n private async appendDirectText(code: string, opts?: ExecuteOptions): Promise<ExecutionResult> {\n const de = this.directExecutor\n if (!de) throw new Error('[faijs] direct executor is unavailable in module mode')\n this.claimBackends()\n const fullCode = this.accumulatedCode === null ? code : `${this.accumulatedCode}\\n${code}`\n this.accumulatedCode = fullCode\n // Append never reconciles:持久 ctx 中先前已执行语句必须原样保留;缺引用的新单元\n // 在 DirectExecutor 内会静默拿到 undefined —— 这里按 module 路径语义前置抛错。\n // 先做 prefix 校验(skipSecurity=true,预检不触发安全扫描),再做 A1 安全扫描。\n const missing = de.missingPrefixVar(code)\n if (missing) throw new AppendPrefixError(`s${missing.unitLine}`, missing.varName)\n // looseVars: true (same semantics as the deleted module append path): references to\n // 已执行产出/其它文件的变量作为外部 var 透传,由 missingPrefixVar 前置校验决定成败。\n // A1 安全扫描需把 ctx 已有键 + 已注册命名空间都作为 knownNames(避免 SEC_FREE_IDENT 误杀 append 场景)。\n const appendKnownNames = [...Object.keys(this.libs), ...de.listCtxKeys()]\n const meta = extractMetadata(fullCode, { defaultNs: this.defaultNsName, looseVars: true, security: this.securityPolicy, namespaces: appendKnownNames, nsNames: Object.keys(this.libs) })\n const determinismFailure = await this.runDeterminismGate(fullCode, meta)\n if (determinismFailure) return determinismFailure\n const libLoadFailure = await this.autoLoadLibsFromImports(meta.imports)\n if (libLoadFailure) return libLoadFailure\n // 多文件(§4.5):相对 import 依赖装载 → 绑定 seed(覆盖刷新 ctx 中旧 import 绑定)。\n const moduleLoad = await this.loadDirectModuleImports(meta, opts?.entryKey)\n if (!('seed' in moduleLoad)) return moduleLoad\n const brepChain = await this.ensureBrepChain()\n if (opts?.partTransform?.position) {\n brepChain.partTransform = {\n position: opts.partTransform.position,\n scale: opts.partTransform.scale,\n }\n }\n const outcome = await de.append(code, {\n imports: moduleLoad.seed,\n params: opts?.params,\n ...(opts?.beforeStatement ? { beforeStatement: opts.beforeStatement } : {}),\n ...(opts?.executionTimeoutMs !== undefined ? { executionTimeoutMs: opts.executionTimeoutMs } : {}),\n })\n if (outcome.failedAt) {\n return this.directFailedAtOrThrow(outcome.failedAt, meta)\n }\n const result = this.collectDirectResult(meta, opts)\n if (this.determinismWarnings.length > 0) result.infos.push(...this.determinismWarnings)\n this.recordFingerprints(opts)\n return result\n }\n\n /** Direct-mode 失败结果的 outputs 部分:持久 ctx 中已产出的 shape/compound。 */\n private directShapes(): Map<PartName, Shape | CompoundShape> {\n const de = this.directExecutor!\n const outputs = new Map<PartName, Shape | CompoundShape>()\n for (const name of de.listCtxKeys()) {\n const v = de.getCtxVar(name)\n if (isShapeLike(v) || isCompoundLike(v)) outputs.set(asPartName(name), v as Shape | CompoundShape)\n }\n return outputs\n }\n\n /**\n * 多文件装载(direct 模式,§4.5):项目内相对 import 依赖经 ModuleRegistry 装载\n * (每依赖独立 ctx 执行 + 绑定校验),返回 seed(绑定名 → 值,供 DirectExecutor\n * opts.imports 预置)。装载错误 → failedAt 短路结果(不抛穿)。\n */\n private async loadDirectModuleImports(\n meta: UiMetadata,\n baseKey?: string,\n ): Promise<{ seed: Record<string, unknown> } | ExecutionResult> {\n const loader = this.ports.projectLoader\n if (!loader) return { seed: {} }\n if (!(meta.imports ?? []).some((imp) => isRelativeSpecifier(imp.specifier))) return { seed: {} }\n const registry = new ModuleRegistry(loader, (code, imports) => this.runDirectModule(code, imports), this.securityPolicy, this.determinismPolicy)\n try {\n const seed = await registry.resolveImports(meta.imports ?? [], baseKey)\n return { seed }\n } catch (err) {\n if (err instanceof ModuleRegistryError) {\n return {\n outputs: new Map(),\n brepChain: this.brepChain!,\n terminals: [],\n infos: [],\n failedAt: {\n index: -1,\n callee: err.callee ?? 'import',\n message: err.message,\n lineNo: err.lineNo,\n },\n }\n }\n throw err\n }\n }\n\n /** 依赖模块执行(direct):独立 DirectExecutor + 独立 ctx;失败抛 ModuleRegistryError。 */\n private async runDirectModule(code: string, imports: Record<string, unknown>): Promise<ModuleRunResult> {\n // A3:子模块固定 strict 策略(不接受降档)\n // BREP kernel 必须在依赖执行前就绪——模块装载排在 ensureBrepChain 之前,\n // 否则子模块里的 BREP op 会以 \"no OCCT kernel\" 失败。\n await this.ensureBrepChain()\n // 钩子必须复用主 executor 的那套:子模块产出的 BREP solid 要登记进本实例的\n // solidCache,否则主模块的 brepSolids 查不到它们(装配体 STEP 导不出精确曲面)。\n const de = new DirectExecutor({\n namespaces: { ...this.libs } as Namespaces,\n setSolid: (partName, solid) => { this.solidCache.set(partName, solid) },\n setFaceEvolution: (partName, evo) => { this.faceEvolutionCache.set(partName, evo as Map<number, number[]>) },\n setRoleTable: (partName, roleTable) => { this.roleTableCache.set(partName, roleTable) },\n security: 'strict',\n })\n const outcome = await de.execute(code, { imports })\n if (outcome.failedAt) {\n throw new ModuleRegistryError(\n 'MODULE_EXEC_FAILED',\n `dependency module failed at line ${outcome.failedAt.lineNo ?? '?'}: ${outcome.failedAt.message}`,\n { lineNo: outcome.failedAt.lineNo, callee: outcome.failedAt.callee },\n )\n }\n return de\n }\n\n /**\n * Direct-mode result assembly:ctx → outputs / statementCache / terminals /\n * brepSolids / compounds(与 collectResult 的 mesh 面同构;输入换源为\n * DirectExecutor ctx + UiMetadata + computeLiveShapes,§4.2/§4.4)。\n */\n private collectDirectResult(meta: UiMetadata, opts?: ExecuteOptions): ExecutionResult {\n const de = this.directExecutor!\n const outputs = new Map<PartName, Shape | CompoundShape>()\n const shapeVarNames = new Set<PartName>()\n const compounds = new Map<PartName, PartName[]>()\n for (const name of de.listCtxKeys()) {\n const v = de.getCtxVar(name)\n if (!isShapeLike(v) && !isCompoundLike(v)) continue\n outputs.set(asPartName(name), v as Shape | CompoundShape)\n shapeVarNames.add(asPartName(name))\n if (isCompoundLike(v)) {\n const behavior = getSlot(v)?.behavior as { memberNames?: string[] } | undefined\n compounds.set(asPartName(name), (behavior?.memberNames ?? []).map(asPartName))\n }\n }\n // statementCache 同步(E8 getCachedOutput):direct 无语句 key——用行级身份键填\n // content key,宿主继续从实例缓存读几何。\n for (const name of shapeVarNames) {\n const v = de.getCtxVar(String(name))\n if (isShapeLike(v)) {\n const shape = v as Shape\n // 非实体导入(C6 线框/面/壳)不携带显示网格——positions/indices 为\n // undefined 是已知限制(load-nonsolid.test.ts),content key 退化为\n // 占位值而不是崩溃。\n const hasMesh = shape.positions instanceof Float32Array && shape.indices instanceof Uint32Array\n this.statementCache.set(name, {\n statementKey: `direct:${String(name)}`,\n outputContentKey: hasMesh\n ? computeContentKey(shape.positions, shape.indices)\n : `direct:nomesh:${String(name)}`,\n output: shape,\n })\n }\n }\n // T3-cond:DAG 叶子终端判定换 computeLiveShapes(§4.4)——输入换源:\n // 候选 = ctx 键;行内 keep 查 metadata.keep 表;函数体 exec.keep 登记读\n // DirectExecutor.keepByLine(行号键,与 computeLiveShapes KeepView 对齐)。\n const keepView: KeepView = {\n lineEntries: (lineNo) => meta.keep.get(lineNo),\n functionBody: (lineNo) => de.getKeepByLine(lineNo),\n }\n let terminals = computeLiveShapes({\n lines: meta.lines,\n blocks: meta.blocks,\n keep: keepView,\n shapeVarNames,\n ...(de.getBlockOutputs().size > 0 ? { blockOutputs: de.getBlockOutputs() } : {}),\n // P25 §3.7.4:修改类裸调用原地写回的 producer 精确化(行号 → 写回变量名)\n ...(de.getInplaceWrites().size > 0 ? { inplaceWrites: de.getInplaceWrites() } : {}),\n explicitTerminals: meta.terminalShapes,\n })\n // 显式 return 优先(与 collectResult 同):非显式分支按值判定补 compound kind。\n if (!meta.terminalShapes || meta.terminalShapes.length === 0) {\n terminals = terminals.map((t) => {\n const v = de.getCtxVar(String(t.id))\n return isCompoundLike(v) ? { ...t, kind: 'compound' } : t\n })\n }\n const brepSolids = this.directBrepSolids(terminals, compounds)\n // T3:拓扑——宿主注入(mesh/primitive,setTopology 缓存)原样带出 + BREP 真拓扑\n // 自动构建(与 collectResult 的 topology='auto'/'brep' 面同构)。solidCache 已由\n // DirectExecutor 的 setSolid 钩子同步(逐单元执行后写入),此处 buildBrepTopology\n // 命中缓存构建拓扑。\n const topology = new Map<PartName, PartTopology>(this.topologyCache)\n const topoMode = opts?.topology ?? 'auto'\n if (topoMode !== 'off') {\n const buildFor = (partName: PartName): void => {\n if (topology.has(partName)) return\n const rt = this.buildBrepTopology(partName)\n if (rt) topology.set(partName, { partName, source: 'brep', data: runtimeToData(rt) })\n }\n if (topoMode === 'brep') {\n for (const name of shapeVarNames) {\n const v = de.getCtxVar(String(name))\n if (isShapeLike(v)) buildFor(name)\n }\n } else {\n for (const t of terminals) buildFor(t.id)\n }\n }\n // T3:命名——与 topology 同 set(与 collectResult 的 naming 面同构)\n const naming = new Map<PartName, PartNaming>()\n for (const [partName, partTopo] of topology) {\n const input = this.buildNamingInput(partName, partTopo)\n if (input) naming.set(partName, buildPartNaming(input))\n }\n // T2:activeValues —— 镜像 collectActiveValues,输入换 meta.lines + lineConsumes/\n // blockConsumes。候选 = ctx 中非 shape/compound 键(第三方测量/查询函数返回的\n // number/普通对象)。DAG 叶子且非几何 → activeValues(不进 terminals,零回归)。\n const activeValues = this.collectDirectActiveValues(meta, keepView, shapeVarNames)\n // T2:changed —— DirectExecutor 逐单元写值前后比对(与 module 路径 exec.changed 同语义)。\n const deChanged = de.getChanged()\n return {\n outputs,\n brepChain: this.brepChain!,\n terminals,\n infos: [],\n brepSolids: brepSolids.size > 0 ? brepSolids : undefined,\n topology: topology.size > 0 ? topology : undefined,\n naming: naming.size > 0 ? naming : undefined,\n compounds: compounds.size > 0 ? compounds : undefined,\n kinematics: de.kinematicsSnapshot.size > 0 ? de.kinematicsSnapshot : undefined,\n changed: deChanged ? deChanged.map(asPartName) : undefined,\n activeValues: activeValues.size > 0 ? activeValues : undefined,\n }\n }\n\n /** 块起始行 → lines 中第一个 >= 该行的下标(与 live-shapes.blockIdxOf 同逻辑)。 */\n private static blockIdxOfLine(lines: UiMetadata['lines'], blockLine: number): number {\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].line >= blockLine) return i\n }\n return lines.length\n }\n\n /**\n * T2:Direct-mode activeValues 收集——镜像 collectActiveValues(module 路径),\n * 输入换 meta.lines + lineConsumes/blockConsumes。\n *\n * 判定与 computeLiveShapes 同构:变量 v 的最后写者行(lines 下标 + blockOutputs)\n * 之后没有语句/块消费 v → DAG 叶子。叶子且非 shape/compound → activeValues。\n * 几何叶子走 terminals(跳过,零回归)。\n */\n private collectDirectActiveValues(\n meta: UiMetadata,\n keepView: KeepView,\n shapeVarNames: Set<PartName>,\n ): Map<PartName, unknown> {\n const de = this.directExecutor!\n const active = new Map<PartName, unknown>()\n // lastProducer:lines 中最后写者下标(与 computeLiveShapes 同逻辑)\n const lastProducer = new Map<string, number>()\n for (let i = 0; i < meta.lines.length; i++) {\n const line = meta.lines[i]\n if (!line.hasAssignment) continue\n for (const out of line.outputs) lastProducer.set(String(out), i)\n }\n // 候选 = ctx 中非 shape/compound 键\n for (const name of de.listCtxKeys()) {\n const v = de.getCtxVar(name)\n if (v === undefined || isShapeLike(v) || isCompoundLike(v)) continue\n // producerIdx:lines 中最后写者下标,或 blockOutputs 的块行号锚点\n const lineIdx = lastProducer.get(name)\n const blockLine = de.getBlockOutputs().get(name)\n let producerIdx: number | undefined\n let producerLine: number\n if (lineIdx !== undefined && blockLine !== undefined) {\n // 取较大者:块在 lines 之后时块是最后写者\n const blockIdx = CadRuntime.blockIdxOfLine(meta.lines, blockLine)\n producerIdx = blockIdx > lineIdx ? blockIdx : lineIdx\n producerLine = blockIdx > lineIdx ? blockLine : (meta.lines[lineIdx]?.line ?? 0)\n } else if (lineIdx !== undefined) {\n producerIdx = lineIdx\n producerLine = meta.lines[lineIdx]?.line ?? 0\n } else if (blockLine !== undefined) {\n producerIdx = CadRuntime.blockIdxOfLine(meta.lines, blockLine)\n producerLine = blockLine\n } else {\n // 无生产者(宿主注入 / 跨文件引用)→ 不进 activeValues(与 module 路径一致)\n continue\n }\n if (producerIdx === undefined) continue\n // 消费判定:producer 之后的 lines + blocks\n let consumed = false\n for (let i = producerIdx + 1; i < meta.lines.length; i++) {\n if (lineConsumes(meta.lines[i], asPartName(name), keepView, shapeVarNames)) {\n consumed = true\n break\n }\n }\n if (!consumed && meta.blocks.length > 0) {\n if (blockConsumes(meta.blocks, name, producerLine)) consumed = true\n }\n if (!consumed) active.set(asPartName(name), v)\n }\n return active\n }\n\n /** Direct-mode 逐终端 BREP solid 提取(终端 + 装配成员;无 kernel → 空)。 */\n private directBrepSolids(\n terminals: TerminalShape[],\n compounds: Map<PartName, PartName[]>,\n ): Map<PartName, { solid: BrepHandle; kernel: BrepEngineApi }> {\n const brepSolids = new Map<PartName, { solid: BrepHandle; kernel: BrepEngineApi }>()\n if (!this.kernel) return brepSolids\n for (const t of terminals) {\n const s = this.solidCache.get(t.id)\n if (s && this.kernel) brepSolids.set(t.id, { solid: s, kernel: this.kernel })\n }\n for (const members of compounds.values()) {\n for (const m of members) {\n if (brepSolids.has(m)) continue\n const s = this.solidCache.get(m)\n if (s && this.kernel) brepSolids.set(m, { solid: s, kernel: this.kernel })\n }\n }\n return brepSolids\n }\n\n /**\n * P 四(4.2):execute 阶段自动装载未注册的库。\n *\n * import 表(UiMetadata.imports)驱动的自动装载。\n */\n private async autoLoadLibsFromImports(\n imports: ReadonlyArray<{ kind?: string; localName?: string; packageName?: string; specifier?: string }>,\n ): Promise<ExecutionResult | undefined> {\n if (!this.ports.libLoader) return undefined\n for (const imp of imports) {\n if (imp.kind !== 'namespace') continue // named/default import 不作语句级绑定,不在此装载\n // 相对 specifier 属多文件通道(§4.5),不是库——留给 ModuleRegistry 处理,\n // 否则会被当作裸包名送进 libLoader 而报\"不在白名单\"。\n if (isRelativeSpecifier(imp.specifier ?? '')) continue\n if (!imp.localName) continue\n if (this.libs[imp.localName]) continue // 已注册(宿主注入或此前自动装载)→ 不覆盖\n let ns: StdlibNamespace\n try {\n ns = await this.ports.libLoader.loadLib(imp.packageName ?? imp.specifier ?? '')\n } catch (err) {\n return {\n outputs: new Map(),\n brepChain: this.brepChain!,\n terminals: [],\n infos: [],\n failedAt: {\n index: -1,\n callee: imp.localName,\n message: `import specifier \"${imp.specifier}\" cannot be auto-loaded: ${err instanceof Error ? err.message : String(err)}`,\n },\n }\n }\n const resolved = imp.packageName ?? imp.specifier ?? ''\n this.registerLib(imp.localName, ns, {\n autoLift: this.ports.libLoader.options?.autoLiftFor?.(resolved) ?? this.ports.libLoader.options?.autoLift ?? !hasDualOp(ns as unknown as Record<string, unknown>),\n naming: this.ports.libLoader.options?.namingFor?.(resolved),\n packageName: imp.packageName,\n })\n }\n return undefined\n }\n\n\n /**\n * 构建一个 part 的命名输入(§3.7)。\n *\n * - BREP:roleTableCache 反查 {origin, role} + subShapeHashes 序号对照 + 面/边行 hint;\n * - primitive:assignPrimitiveFaceRoles 按固定面序给语义 role(§5.2,与 BREP 同一套命名器);\n * - mesh:只填 hint(role='',§5.3)。\n */\n private buildNamingInput(partName: PartName, partTopo: PartTopology): PartNamingInput | undefined {\n const faces = (partTopo.data.faces ?? []) as Array<{\n surfaceType?: string; normal?: readonly number[] | null; center?: readonly number[] | null; area?: number\n }>\n const edges = (partTopo.data.edges ?? []) as Array<{\n length?: number; center?: readonly number[] | null\n }>\n const edgeFaceOrdinals = this.edgeFaceOrdinalsOf(partTopo.data)\n\n if (partTopo.source === 'brep') {\n const roleTable = this.roleTableCache.get(partName) as PartNamingInput['roleTable']\n const solid = this.solidCache.get(partName)\n let ordinalToHash: readonly number[] | undefined\n if (solid && this.kernel) {\n ordinalToHash = Array.from(this.kernel.subShapeHashes(solid, 'face', HASH_UPPER_BOUND))\n }\n return {\n source: 'brep',\n partName,\n faces,\n edges,\n roleTable,\n ordinalToHash,\n edgeFaceOrdinals,\n }\n }\n if (partTopo.source === 'primitive') {\n // Phase 1.8(D6):primitive 不再派生伪拓扑 role——拓扑身份是 BREP 专有能力,\n // primitive/mesh 一致只填 hint(naming 行 origin/role 显式 null)。\n return { source: partTopo.source, partName, faces, edges, edgeFaceOrdinals }\n }\n return { source: partTopo.source, partName, faces, edges, edgeFaceOrdinals }\n }\n\n /**\n * 从 SelectorRuntimeData 的 edgeFaceRows 提取每条边的两邻面序号(1 起;§3.7)。\n * mesh 无邻接 → undefined(edgeNaming.faces=null,只能 hint 兜底,§5.3)。\n */\n private edgeFaceOrdinalsOf(data: SelectorRuntimeData): ReadonlyArray<readonly [number, number] | null> | undefined {\n const edgeFaceRows = data.proxy?.edgeFaceRows\n const edges = (data.edges ?? []) as Array<{ faceStart?: number; faceCount?: number }>\n if (!Array.isArray(edgeFaceRows) && !(edgeFaceRows instanceof Uint32Array)) return undefined\n const rows = edgeFaceRows as ArrayLike<number>\n const out: Array<readonly [number, number] | null> = []\n for (const edge of edges) {\n const start = edge.faceStart ?? 0\n const count = edge.faceCount ?? 0\n if (count < 2) {\n out.push(null)\n continue\n }\n const a = rows[start]\n const b = rows[start + 1]\n if (a === undefined || b === undefined) {\n out.push(null)\n continue\n }\n out.push([a + 1, b + 1])\n }\n return out\n }\n\n // ── 语义入口:update / append(增量执行) ──\n\n /**\n * Update from the two code texts (before/after an edit): the diff is derived\n * from the passed codes themselves — the engine's persistent ctx is only an\n * execution cache, never the diff authority. Changed statements (paired by\n * positional id, S-2) plus their downstream closure are recomputed in\n * topological order; when nothing changed, the result is assembled from the\n * persistent ctx with zero execution.\n * @param oldCode - the .fai.js source text before the edit.\n * @param newCode - the .fai.js source text after the edit.\n * @param opts - optional execution options.\n * @returns promise resolving to the ExecutionResult.\n * @throws {RuntimeConcurrentError} when another CadRuntime is already executing (C1).\n */\n async update(oldCode: string, newCode: string, opts?: ExecuteOptions): Promise<ExecutionResult> {\n return this.withExecutionLock('update', () => this.updateIncremental(oldCode, newCode, opts))\n }\n\n // ── 公开:缓存访问 ──\n\n /**\n * Get the output geometry from the statement cache (keyed by PartName).\n * @param partName - the part name to look up.\n * @returns the cached shape, or undefined.\n */\n getCachedOutput(partName: PartName): Shape | undefined {\n return this.statementCache.get(partName)?.output\n }\n\n /**\n * Get a statement cache's full entry (statementKey / outputContentKey / output;\n * used by tests and host diagnostics).\n * @param partName - the part name to look up.\n * @returns the cached entry, or undefined.\n */\n getStatementCacheEntry(\n partName: PartName,\n ): { statementKey: string; outputContentKey: string; output: Shape } | undefined {\n return this.statementCache.get(partName)\n }\n\n /**\n * Write an entry into the statement cache (keyed by PartName).\n * @param partName - the part name to store under.\n * @param _stmt - unused (T5: direct path has no StatementIR).\n * @param output - the shape output.\n * @param outputContentKey - the output's content key.\n */\n writeToStatementCache(\n partName: PartName,\n _stmt: unknown,\n output: Shape,\n outputContentKey: string,\n ): void {\n this.statementCache.set(partName, {\n statementKey: `direct:${String(partName)}`,\n outputContentKey,\n output,\n })\n }\n\n /** 清除语句缓存(含 statementCache + DirectExecutor ctx 变量) */\n clearStatementCache(): void {\n this.statementCache.clear()\n this.directExecutor.reset()\n }\n\n // ── 公开:拓扑数据缓存 ──\n\n /**\n * Write an entry into the topology data cache. Hosts call this after a\n * successful BREP execution (building source='brep' topology via\n * buildSolidTopologyRuntime), on file load (source='mesh' via\n * buildSelectorRuntime), and on primitive creation (source='primitive' via the\n * primitive topology builder). The topology returned by execute()'s\n * ExecutionResult includes these cached entries.\n * @param partName - the part name to store under.\n * @param source - the topology source (brep/primitive/mesh).\n * @param data - the serialized topology data.\n */\n setTopology(partName: PartName, source: TopologySource, data: SelectorRuntimeData): void {\n this.topologyCache.set(partName, { partName, source, data })\n // §3.6:mesh/primitive 面 hint 快照——从拓扑行提炼写入对应 Shape 槽,\n // op 解析 TopoRef 时经输入 Shape 的命名槽走 geometric-fallback。\n const v = this.directExecutor.getCtxVar(partName)\n if (v && typeof v === 'object') {\n const hints = (data.faces ?? []).map((f) => faceRowToHint(f))\n ensureSlot(v).faceHints = hints\n }\n }\n\n /**\n * Get the topology data for a part.\n * @param partName - the part name to look up.\n * @returns the part topology, or undefined.\n */\n getTopology(partName: PartName): PartTopology | undefined {\n return this.topologyCache.get(partName)\n }\n\n /**\n * Delete the topology data for a part.\n * @param partName - the part name to delete.\n */\n deleteTopology(partName: PartName): void {\n this.topologyCache.delete(partName)\n }\n\n /**\n * 从 BREP solid 构建拓扑数据(接口分离 P0)。\n *\n * 宿主不再直接 import faijs 内部构建函数(buildSolidTopologyRuntime),\n * 而是通过此方法从 runtime 获取 BREP 拓扑。\n *\n * 按 PartName 直接查持久 solidCache + brepChain.meshShapeCache(均为 PartName key),\n * 不再需要 scopedId 投影。单一真源:solidCache(PartName → BrepHandle)。\n *\n * @param partName 终端变量名(PartName,在 brepChain.solidCache 中查找)\n * @returns SelectorRuntime,或 null(无可用 BREP solid)\n */\n buildBrepTopology(partName: PartName): SelectorRuntime | null {\n const brepChain = this.brepChain\n if (!brepChain?.kernel) return null\n\n // partName 即该变量的首输出变量名,按 PartName 查持久 solidCache\n const solid = brepChain.solidCache.get(partName)\n if (!solid) return null\n\n // 规则 1:优先从 brepChain.meshShapeCache 复用执行链产出的三角化结果\n // (与显示 mesh 完全同一份 mesh,不二次 meshShape)\n const cachedMesh = brepChain.meshShapeCache?.get(partName)\n if (cachedMesh && brepChain.kernel) {\n return buildTopologyFromMesh(brepChain.kernel, solid, cachedMesh)\n }\n\n // 无缓存(非执行链路径,如 STEP 导入后直接构建拓扑)→ 执行完整构建(含 meshShape 三角化)\n const result: SolidTopologyResult = buildSolidTopologyRuntime(brepChain.kernel, solid)\n return result.runtime\n }\n\n // ── 公开:dryRun 校验 ──\n\n /**\n * dryRun:acorn 语法门禁 + 元数据提取(T5 后唯一路径)。\n *\n * extractMetadata 全量解析(语法 + 引用),不查符号表。未知 callee 放行,\n * 试执行见 execute 的 failedAt。\n *\n * @param code .fai.js 文本\n * @returns CheckResult\n */\n check(code: string): CheckResult {\n try {\n const meta = extractMetadata(code, { defaultNs: this.defaultNsName, security: this.securityPolicy, namespaces: Object.keys(this.libs) })\n return {\n ok: true,\n errors: [],\n warnings: [],\n script: {\n statements: meta.lines.length,\n callees: meta.lines.map((l) => l.callee),\n },\n }\n } catch (err) {\n if (err instanceof ParseError) {\n const stage = err.code === 'E_SECURITY' ? 'security' : 'parse'\n return {\n ok: false,\n errors: [{ stage, message: err.message, line: err.line, ...(err.code ? { code: err.code } : {}), ...(err.ruleId ? { ruleId: err.ruleId } : {}) }],\n warnings: [],\n }\n }\n return {\n ok: false,\n errors: [{ stage: 'parse', message: err instanceof Error ? err.message : String(err) }],\n warnings: [],\n }\n }\n }\n\n // ── P0 增量:releasePartCaches / updateIncremental ──\n\n /**\n * 派生缓存失效(P0-4):重放前对 `replayKeys`(经 `asPartName()` 转换)逐一清理\n * 所有派生缓存,确保重放后几何/拓扑/mesh 不命中旧值。\n *\n * 清理清单(§4.4):\n * - `solidCache`:先 `kernel.release(handle)`,再删键(参照 dispose 的 try/catch);\n * - `brepChain.meshShapeCache`:删键(跨轮保留,不清会返回旧 solid 的三角化);\n * - `faceEvolutionCache` / `roleTableCache`:删键(与 runtime 同 Map 引用,删键即生效);\n * - `topologyCache` / `statementCache`:删键(collectDirectResult 按新几何重新填充)。\n */\n private releasePartCaches(partNames: PartName[]): void {\n for (const name of partNames) {\n // solidCache: release OCCT handle first, then delete key\n const handle = this.solidCache.get(name)\n if (handle) {\n try { this.kernel?.release(handle) } catch { /* already released */ }\n this.solidCache.delete(name)\n }\n // brepChain.meshShapeCache\n this.brepChain?.meshShapeCache?.delete(name)\n // faceEvolutionCache / roleTableCache (same Map refs as runtime's)\n this.faceEvolutionCache.delete(name)\n this.roleTableCache.delete(name)\n // topologyCache / statementCache\n this.topologyCache.delete(name)\n this.statementCache.delete(name)\n }\n }\n\n /**\n * 前缀重放式 update 增量执行(P0-5)。\n *\n * 流程:\n * 1. 保守闸门 G0–G8 判定——任一命中则退化为全量 `executeDirectText`;\n * 2. 公共前缀扫描定位首个变更行 → 物理行;\n * 3. `unitRanges(newCode)` 映射物理行 → 单元起始行 `startLine`;\n * 4. `releasePartCaches(replayKeys)` 失效派生缓存;\n * 5. `directExecutor.replayFrom(newCode, startLine, opts)` 重放后缀区间;\n * 6. `outcome.failedAt` → 降级全量(§4.7);\n * 7. `collectDirectResult` 组装结果。\n *\n * @param oldCode - 变更前文本(不信任,G3 校验与内部 accumulatedCode 一致)。\n * @param newCode - 变更后文本。\n * @param opts - 执行选项。\n * @returns ExecutionResult。\n */\n private async updateIncremental(\n oldCode: string,\n newCode: string,\n opts?: ExecuteOptions,\n ): Promise<ExecutionResult> {\n const de = this.directExecutor\n this.claimBackends()\n\n // ── 保守闸门 G0–G8 ──\n\n // G1: 本实例从未执行过\n if (this.accumulatedCode === null) {\n return this.executeDirectText(newCode, opts)\n }\n\n // G3: 宿主传入的 oldCode 与内部基准不一致\n if (oldCode.trim() !== this.accumulatedCode.trim()) {\n return this.executeDirectText(newCode, opts)\n }\n\n // 切分行数组(两侧均按 \\r?\\n 切分)\n const oldLines = this.accumulatedCode.split(/\\r?\\n/)\n const newLines = newCode.split(/\\r?\\n/)\n\n // G2: 存在删除(new 比旧短)\n if (newLines.length < oldLines.length) {\n return this.executeDirectText(newCode, opts)\n }\n\n // G0: 非标准解析基线\n const { ranges, lineOffset } = de.unitRanges(newCode)\n if (lineOffset !== 0) {\n return this.executeDirectText(newCode, opts)\n }\n\n // G6: params 变化\n const paramsFp = stableFingerprint(opts?.params ?? null)\n if (paramsFp !== this.lastParamsFingerprint) {\n return this.executeDirectText(newCode, opts)\n }\n\n // G7: 注册库集合变化\n const libIdsEntries = [...this.libIds.entries()].sort((a, b) =>\n a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0,\n )\n const libIdsFp = stableFingerprint(libIdsEntries)\n if (libIdsFp !== this.lastLibIdsFingerprint) {\n return this.executeDirectText(newCode, opts)\n }\n\n // G8: partTransform 变化\n const ptFp = stableFingerprint(opts?.partTransform ?? null)\n if (ptFp !== this.lastPartTransformFingerprint) {\n return this.executeDirectText(newCode, opts)\n }\n\n // G5: 上一轮产生了装配运动学位姿\n if (this.lastHadKinematics) {\n return this.executeDirectText(newCode, opts)\n }\n\n // G4: 含相对 import 的多文件场景\n const meta = extractMetadata(newCode, { defaultNs: this.defaultNsName, security: this.securityPolicy, namespaces: Object.keys(this.libs) })\n if ((meta.imports ?? []).some((imp) => isRelativeSpecifier(imp.specifier))) {\n return this.executeDirectText(newCode, opts)\n }\n\n // ── 公共前缀扫描 ──\n // 逐行 trim 比较;空行/纯空白行等价\n let firstDiff = -1\n const maxLen = Math.max(oldLines.length, newLines.length)\n for (let i = 0; i < maxLen; i++) {\n const a = oldLines[i] ?? ''\n const b = newLines[i] ?? ''\n if (a.trim() !== b.trim()) {\n firstDiff = i\n break\n }\n }\n\n // 零变更路径(§4.6)\n if (firstDiff === -1) {\n return this.zeroChangePath(newCode, meta, opts)\n }\n\n // ── 映射物理行 → 单元起始行 ──\n const physicalLine = firstDiff + 1\n const adjusted = physicalLine - lineOffset\n let startLine: number | undefined\n // 找包含该行的单元(物理行落在块单元内部 → 块起始行)\n for (const r of ranges) {\n if (r.lineNo <= adjusted && adjusted <= r.endLine) {\n startLine = r.lineNo\n break\n }\n }\n if (startLine === undefined) {\n // 找首个 lineNo > physical 的单元(纯追加场景)\n for (const r of ranges) {\n if (r.lineNo > adjusted) {\n startLine = r.lineNo\n break\n }\n }\n }\n // 映射结果为空(改动只落在末尾注释/空行,其后无任何单元)\n if (startLine === undefined) {\n return this.zeroChangePath(newCode, meta, opts)\n }\n\n // ── 计算 replayKeys(与 DirectExecutor.replayFrom 同逻辑,用于 releasePartCaches) ──\n const allUnitsParsed = de.unitRangesWithWrites(newCode)\n const replayUnits = allUnitsParsed.filter((u) => u.lineNo >= startLine)\n const suffixWrites = new Set<string>()\n for (const u of replayUnits) for (const w of u.writes) suffixWrites.add(w)\n const prefixWrites = new Set<string>()\n for (const u of allUnitsParsed) {\n if (u.lineNo < startLine!) for (const w of u.writes) prefixWrites.add(w)\n }\n const replayKeys: string[] = []\n for (const w of suffixWrites) {\n if (!prefixWrites.has(w)) replayKeys.push(w)\n }\n\n // ── 派生缓存失效 ──\n this.releasePartCaches(replayKeys.map((k) => asPartName(k)))\n\n // ── BREP 链与 partTransform 同步 ──\n const brepChain = await this.ensureBrepChain()\n if (opts?.partTransform?.position) {\n brepChain.partTransform = {\n position: opts.partTransform.position,\n scale: opts.partTransform.scale,\n }\n }\n\n // ── 重放 ──\n // G4 already checked: no relative imports → moduleLoad.seed = {}\n const libLoadFailure = await this.autoLoadLibsFromImports(meta.imports)\n if (libLoadFailure) return libLoadFailure\n\n const execOpts: DirectExecOpts = {\n params: opts?.params,\n ...(opts?.beforeStatement ? { beforeStatement: opts.beforeStatement } : {}),\n ...(opts?.executionTimeoutMs !== undefined ? { executionTimeoutMs: opts.executionTimeoutMs } : {}),\n }\n\n // ExecutionLimitError / ParseError / security scan errors propagate\n // (not degraded — only failedAt triggers degradation below)\n const outcome = await de.replayFrom(newCode, startLine, execOpts)\n\n // ── 失败降级(§4.7)──\n if (outcome.failedAt) {\n de.reset()\n return this.executeDirectText(newCode, opts)\n }\n\n // ── 组装结果 ──\n this.accumulatedCode = newCode\n const result = this.collectDirectResult(meta, opts)\n // Record fingerprints after successful execution\n this.recordFingerprints(opts)\n return result\n }\n\n /**\n * 零变更路径(§4.6):不执行任何语句,但需重新 collectDirectResult。\n */\n private async zeroChangePath(\n newCode: string,\n meta: UiMetadata,\n opts?: ExecuteOptions,\n ): Promise<ExecutionResult> {\n const de = this.directExecutor\n this.claimBackends()\n this.accumulatedCode = newCode\n const libLoadFailure = await this.autoLoadLibsFromImports(meta.imports)\n if (libLoadFailure) return libLoadFailure\n const brepChain = await this.ensureBrepChain()\n if (opts?.partTransform?.position) {\n brepChain.partTransform = {\n position: opts.partTransform.position,\n scale: opts.partTransform.scale,\n }\n }\n de.clearRoundState()\n return this.collectDirectResult(meta, opts)\n }\n\n /**\n * 记录指纹快照(每次成功执行结束时调用)。\n */\n private recordFingerprints(opts?: ExecuteOptions): void {\n this.lastParamsFingerprint = stableFingerprint(opts?.params ?? null)\n const libIdsEntries = [...this.libIds.entries()].sort((a, b) =>\n a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0,\n )\n this.lastLibIdsFingerprint = stableFingerprint(libIdsEntries)\n this.lastPartTransformFingerprint = stableFingerprint(opts?.partTransform ?? null)\n this.lastHadKinematics = this.directExecutor.kinematicsSnapshot.size > 0\n }\n\n // ── 公开:释放 ──\n\n /**\n * Dispose the runtime, releasing all acquired OCCT handles and clearing every\n * cache. The instance is unusable afterwards.\n */\n dispose(): void {\n // 所有权在持久 solidCache:释放全部 OCCT handle(§9 决策 2)\n for (const [, handle] of this.solidCache) {\n try { this.kernel?.release(handle) } catch { /* 已释放 */ }\n }\n this.solidCache.clear()\n this.faceEvolutionCache.clear()\n this.roleTableCache.clear()\n this.statementCache.clear()\n this.topologyCache.clear()\n this.brepChain = null\n this.kernel = null\n this.directExecutor.reset()\n }\n}\n\n// ── 工厂函数 ──\n\n/**\n * Create a CadRuntime instance.\n * @param ports - the host-injected environment capabilities.\n * @param mode - the execution mode (default 'auto').\n * @param libs - the host-injected library namespaces (including `cad`, which the\n * root facade injects automatically; core does not assemble it by default).\n * @param options - optional runtime options (e.g. `executor: 'direct' | 'module'`).\n * @returns a new CadRuntime.\n */\nexport function createRuntime(ports: HostPorts, mode?: ExecutionMode, libs?: Record<string, StdlibNamespace>, options?: CadRuntimeOptions): CadRuntime {\n return new CadRuntime(ports, mode, libs, options)\n}\n"]}
@@ -29,6 +29,7 @@ import { type BrepCapabilityName } from './cad-runtime/backend-dispatch.js';
29
29
  import { type SlotMap } from './api/internal/dual-form-args.js';
30
30
  import type { Shape } from './mesh/types.js';
31
31
  import type { BrepHandle } from './brep/engine/types.js';
32
+ import { type Provenance } from './topology/naming/lineage.js';
32
33
  /** Raw mesh data (structurally identical to Shape; mesh impls return it). */
33
34
  export type MeshData = {
34
35
  positions: Float32Array;
@@ -49,6 +50,18 @@ export type MeshData = {
49
50
  * @returns true when the argument is a geometry input (registered shape or bare mesh data).
50
51
  */
51
52
  export declare function isGeometryInput(v: unknown): v is Shape;
53
+ /**
54
+ * §1.4 registration guard: the StmtId whose top-level `wrapped` is currently
55
+ * registering a lineage node. Nested op calls (an impl invoking another op /
56
+ * itself) share the same `getCurrentStmt()` anchor and are skipped so they
57
+ * don't trip N3 (E_TOPO_DUPLICATE_STMT) with identical content. C1 (single
58
+ * live runtime) means at most one statement registers at a time.
59
+ *
60
+ * The marker lives on the runtime state and is reset at statement boundaries
61
+ * (runtime-state.setCurrentStmt: anchor change / end-of-statement), NOT at op
62
+ * granularity — a TS library function (cq-compat Workplane op, etc.) may call
63
+ * several defineOps within one statement, and only the first one must register.
64
+ */
52
65
  /** Product of a mesh implementation: raw mesh data, a wrapped Shape, or (with `outputs`) a record of named products. */
53
66
  export type MeshProduct = MeshData | Shape | Record<string, MeshData | Shape>;
54
67
  /** Mesh implementation: sync or async (stdlib mesh paths are often async); returns a mesh product. */
@@ -77,6 +90,13 @@ export interface DualOpOptions {
77
90
  * natively takes.
78
91
  */
79
92
  slotMap?: SlotMap;
93
+ /**
94
+ * Topology identity provenance (plan §4.4 / Phase 2.3, **required**).
95
+ * Declares the op's face-mapping category + new-face vocabulary.
96
+ * The lineage registrar (§4.3) reads this to build the blood-line graph;
97
+ * missing naming = compile-time error (G4: no undeclared ops).
98
+ */
99
+ naming: Provenance;
80
100
  }
81
101
  /** Implementation set (at least one of mesh/brep is required, D1/D1b); options are siblings of the implementations. */
82
102
  export type DualOpImpls<A extends unknown[]> = (DualOpOptions & {
@@ -98,6 +118,8 @@ export interface DualOpMeta {
98
118
  schema?: Record<string, string>;
99
119
  /** D11 slot-map declaration (positional → object boxing table, §9 naming). */
100
120
  slotMap?: SlotMap;
121
+ /** Topology identity provenance (Phase 2.3, mirrors DualOpOptions.naming). */
122
+ naming: Provenance;
101
123
  }
102
124
  /** Property key carrying DualOpMeta on wrapped functions. */
103
125
  export declare const DUAL_OP_META = "__faijs__dualOp";
@@ -1 +1 @@
1
- {"version":3,"file":"define-op.d.ts","sourceRoot":"","sources":["../src/define-op.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"define-op.d.ts","sourceRoot":"","sources":["../src/define-op.ts"],"names":[],"mappings":"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"}