@konitif/workbench 0.284.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 (373) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +54 -0
  3. package/dist/application/boot/applicationBoot.d.ts +48 -0
  4. package/dist/application/boot/applicationBoot.js +174 -0
  5. package/dist/application/experiment/ControlledExperimentCampaign.d.ts +12 -0
  6. package/dist/application/experiment/ControlledExperimentCampaign.js +159 -0
  7. package/dist/application/experiment/ControlledExperimentRecorder.d.ts +17 -0
  8. package/dist/application/experiment/ControlledExperimentRecorder.js +215 -0
  9. package/dist/application/i18n/WorkbenchTranslationRegistry.d.ts +19 -0
  10. package/dist/application/i18n/WorkbenchTranslationRegistry.js +179 -0
  11. package/dist/application/layout/surfaceCommandRouter.d.ts +18 -0
  12. package/dist/application/layout/surfaceCommandRouter.js +247 -0
  13. package/dist/application/physics/NoopPhysicsBackend.d.ts +2 -0
  14. package/dist/application/physics/NoopPhysicsBackend.js +2 -0
  15. package/dist/application/physics/PhysicsService.d.ts +2 -0
  16. package/dist/application/physics/PhysicsService.js +2 -0
  17. package/dist/application/project/ProjectManifest.d.ts +15 -0
  18. package/dist/application/project/ProjectManifest.js +107 -0
  19. package/dist/application/repository/RepositoryPreflightEngine.d.ts +6 -0
  20. package/dist/application/repository/RepositoryPreflightEngine.js +301 -0
  21. package/dist/application/runtime/RuntimeBackendConnection.d.ts +9 -0
  22. package/dist/application/runtime/RuntimeBackendConnection.js +34 -0
  23. package/dist/application/runtime/RuntimeBackendSubscription.d.ts +8 -0
  24. package/dist/application/runtime/RuntimeBackendSubscription.js +52 -0
  25. package/dist/application/runtime/RuntimeCheckpointStore.d.ts +20 -0
  26. package/dist/application/runtime/RuntimeCheckpointStore.js +65 -0
  27. package/dist/application/runtime/RuntimeLaunchProgress.d.ts +3 -0
  28. package/dist/application/runtime/RuntimeLaunchProgress.js +38 -0
  29. package/dist/application/runtime/RuntimeLaunchStateSnapshot.d.ts +48 -0
  30. package/dist/application/runtime/RuntimeLaunchStateSnapshot.js +73 -0
  31. package/dist/application/runtime/RuntimeObservabilityHub.d.ts +28 -0
  32. package/dist/application/runtime/RuntimeObservabilityHub.js +262 -0
  33. package/dist/application/runtime/RuntimeObservationEvents.d.ts +15 -0
  34. package/dist/application/runtime/RuntimeObservationEvents.js +18 -0
  35. package/dist/application/runtime/RuntimeOffloadManager.d.ts +24 -0
  36. package/dist/application/runtime/RuntimeOffloadManager.js +96 -0
  37. package/dist/application/runtime/RuntimePlanEngine.d.ts +11 -0
  38. package/dist/application/runtime/RuntimePlanEngine.js +67 -0
  39. package/dist/application/runtime/RuntimeProjectionCatalog.d.ts +5 -0
  40. package/dist/application/runtime/RuntimeProjectionCatalog.js +48 -0
  41. package/dist/application/runtime/RuntimeProjectionSession.d.ts +5 -0
  42. package/dist/application/runtime/RuntimeProjectionSession.js +4 -0
  43. package/dist/application/runtime/RuntimeProjectionSessionKeys.d.ts +5 -0
  44. package/dist/application/runtime/RuntimeProjectionSessionKeys.js +10 -0
  45. package/dist/application/runtime/RuntimeProjectionSessionReducers.d.ts +7 -0
  46. package/dist/application/runtime/RuntimeProjectionSessionReducers.js +101 -0
  47. package/dist/application/runtime/RuntimeProjectionSessionSerialization.d.ts +5 -0
  48. package/dist/application/runtime/RuntimeProjectionSessionSerialization.js +89 -0
  49. package/dist/application/runtime/RuntimeProjectionSessionSharedState.d.ts +3 -0
  50. package/dist/application/runtime/RuntimeProjectionSessionSharedState.js +53 -0
  51. package/dist/application/runtime/RuntimeProjectionSessionTypes.d.ts +38 -0
  52. package/dist/application/runtime/RuntimeProjectionSessionTypes.js +1 -0
  53. package/dist/application/runtime/RuntimeProjectionViewerSessionSync.d.ts +29 -0
  54. package/dist/application/runtime/RuntimeProjectionViewerSessionSync.js +39 -0
  55. package/dist/application/runtime/RuntimeProjectionViewerSessionUpdates.d.ts +27 -0
  56. package/dist/application/runtime/RuntimeProjectionViewerSessionUpdates.js +38 -0
  57. package/dist/application/runtime/RuntimeRegistryOwner.d.ts +20 -0
  58. package/dist/application/runtime/RuntimeRegistryOwner.js +71 -0
  59. package/dist/application/runtime/RuntimeRegistrySnapshots.d.ts +6 -0
  60. package/dist/application/runtime/RuntimeRegistrySnapshots.js +51 -0
  61. package/dist/application/runtime/RuntimeRegistryTypes.d.ts +29 -0
  62. package/dist/application/runtime/RuntimeRegistryTypes.js +1 -0
  63. package/dist/application/runtime/RuntimeSharedState.d.ts +6 -0
  64. package/dist/application/runtime/RuntimeSharedState.js +47 -0
  65. package/dist/application/runtime/WorkbenchRuntimeCore.d.ts +82 -0
  66. package/dist/application/runtime/WorkbenchRuntimeCore.js +463 -0
  67. package/dist/application/runtime/WorkbenchRuntimeSanitizers.d.ts +9 -0
  68. package/dist/application/runtime/WorkbenchRuntimeSanitizers.js +62 -0
  69. package/dist/application/shell/state.d.ts +22 -0
  70. package/dist/application/shell/state.js +308 -0
  71. package/dist/application/widgets/createWorkbenchWidgetAdapter.d.ts +9 -0
  72. package/dist/application/widgets/createWorkbenchWidgetAdapter.js +30 -0
  73. package/dist/application/workspace/canonicalizeLayout.d.ts +2 -0
  74. package/dist/application/workspace/canonicalizeLayout.js +91 -0
  75. package/dist/application/workspace/closePanel.d.ts +6 -0
  76. package/dist/application/workspace/closePanel.js +43 -0
  77. package/dist/application/workspace/collapseSplit.d.ts +7 -0
  78. package/dist/application/workspace/collapseSplit.js +45 -0
  79. package/dist/application/workspace/collapseSplitBoundary.d.ts +8 -0
  80. package/dist/application/workspace/collapseSplitBoundary.js +106 -0
  81. package/dist/application/workspace/commands.d.ts +71 -0
  82. package/dist/application/workspace/commands.js +216 -0
  83. package/dist/application/workspace/createPeripheralBands.d.ts +14 -0
  84. package/dist/application/workspace/createPeripheralBands.js +62 -0
  85. package/dist/application/workspace/createWorkspace.d.ts +7 -0
  86. package/dist/application/workspace/createWorkspace.js +12 -0
  87. package/dist/application/workspace/detachPanelToWindow.d.ts +12 -0
  88. package/dist/application/workspace/detachPanelToWindow.js +57 -0
  89. package/dist/application/workspace/dockPanel.d.ts +10 -0
  90. package/dist/application/workspace/dockPanel.js +399 -0
  91. package/dist/application/workspace/finalizeWorkspace.d.ts +4 -0
  92. package/dist/application/workspace/finalizeWorkspace.js +23 -0
  93. package/dist/application/workspace/focusPanel.d.ts +2 -0
  94. package/dist/application/workspace/focusPanel.js +19 -0
  95. package/dist/application/workspace/joinPanelArea.d.ts +13 -0
  96. package/dist/application/workspace/joinPanelArea.js +281 -0
  97. package/dist/application/workspace/layoutInteraction.d.ts +176 -0
  98. package/dist/application/workspace/layoutInteraction.js +852 -0
  99. package/dist/application/workspace/layoutTree.d.ts +34 -0
  100. package/dist/application/workspace/layoutTree.js +135 -0
  101. package/dist/application/workspace/openTool.d.ts +15 -0
  102. package/dist/application/workspace/openTool.js +89 -0
  103. package/dist/application/workspace/presetArtifacts.d.ts +60 -0
  104. package/dist/application/workspace/presetArtifacts.js +231 -0
  105. package/dist/application/workspace/presets.d.ts +5 -0
  106. package/dist/application/workspace/presets.js +12 -0
  107. package/dist/application/workspace/reattachWorkspaceWindow.d.ts +7 -0
  108. package/dist/application/workspace/reattachWorkspaceWindow.js +24 -0
  109. package/dist/application/workspace/resizeSplit.d.ts +7 -0
  110. package/dist/application/workspace/resizeSplit.js +12 -0
  111. package/dist/application/workspace/resizeSplitBoundary.d.ts +10 -0
  112. package/dist/application/workspace/resizeSplitBoundary.js +115 -0
  113. package/dist/application/workspace/runToolShellCommand.d.ts +11 -0
  114. package/dist/application/workspace/runToolShellCommand.js +133 -0
  115. package/dist/application/workspace/session.d.ts +9 -0
  116. package/dist/application/workspace/session.js +36 -0
  117. package/dist/application/workspace/setActiveStackChild.d.ts +7 -0
  118. package/dist/application/workspace/setActiveStackChild.js +12 -0
  119. package/dist/application/workspace/setDesignSystemThemeSession.d.ts +3 -0
  120. package/dist/application/workspace/setDesignSystemThemeSession.js +12 -0
  121. package/dist/application/workspace/setPanelFullscreenToggleVisibility.d.ts +7 -0
  122. package/dist/application/workspace/setPanelFullscreenToggleVisibility.js +7 -0
  123. package/dist/application/workspace/setStackHeaderVisibility.d.ts +7 -0
  124. package/dist/application/workspace/setStackHeaderVisibility.js +7 -0
  125. package/dist/application/workspace/setToolPanelTitleOverride.d.ts +9 -0
  126. package/dist/application/workspace/setToolPanelTitleOverride.js +33 -0
  127. package/dist/application/workspace/setToolShellStatus.d.ts +8 -0
  128. package/dist/application/workspace/setToolShellStatus.js +32 -0
  129. package/dist/application/workspace/setWorkspaceFullscreenPanel.d.ts +3 -0
  130. package/dist/application/workspace/setWorkspaceFullscreenPanel.js +26 -0
  131. package/dist/application/workspace/snapshots.d.ts +10 -0
  132. package/dist/application/workspace/snapshots.js +34 -0
  133. package/dist/application/workspace/splitPanel.d.ts +10 -0
  134. package/dist/application/workspace/splitPanel.js +21 -0
  135. package/dist/application/workspace/subdividePanel.d.ts +39 -0
  136. package/dist/application/workspace/subdividePanel.js +128 -0
  137. package/dist/application/workspace/swapPanelArea.d.ts +11 -0
  138. package/dist/application/workspace/swapPanelArea.js +163 -0
  139. package/dist/application/workspace/targetWindow.d.ts +4 -0
  140. package/dist/application/workspace/targetWindow.js +22 -0
  141. package/dist/application/workspace/toolCapabilities.d.ts +11 -0
  142. package/dist/application/workspace/toolCapabilities.js +59 -0
  143. package/dist/application/workspace/toolRuntime.d.ts +32 -0
  144. package/dist/application/workspace/toolRuntime.js +65 -0
  145. package/dist/application/workspace/updateToolState.d.ts +8 -0
  146. package/dist/application/workspace/updateToolState.js +20 -0
  147. package/dist/boot/applicationBoot.d.ts +1 -0
  148. package/dist/boot/applicationBoot.js +2 -0
  149. package/dist/boot/events.d.ts +43 -0
  150. package/dist/boot/events.js +16 -0
  151. package/dist/boot/executor.d.ts +13 -0
  152. package/dist/boot/executor.js +210 -0
  153. package/dist/boot/graph.d.ts +16 -0
  154. package/dist/boot/graph.js +126 -0
  155. package/dist/boot/index.d.ts +2 -0
  156. package/dist/boot/index.js +3 -0
  157. package/dist/boot/mechanism.d.ts +5 -0
  158. package/dist/boot/mechanism.js +6 -0
  159. package/dist/boot/projection.d.ts +72 -0
  160. package/dist/boot/projection.js +398 -0
  161. package/dist/boot/types.d.ts +80 -0
  162. package/dist/boot/types.js +46 -0
  163. package/dist/domain/composition/dockArrangement.d.ts +57 -0
  164. package/dist/domain/composition/dockArrangement.js +304 -0
  165. package/dist/domain/composition/docking.d.ts +68 -0
  166. package/dist/domain/composition/docking.js +187 -0
  167. package/dist/domain/design-system/themeSession.d.ts +12 -0
  168. package/dist/domain/design-system/themeSession.js +42 -0
  169. package/dist/domain/experiment/model.d.ts +149 -0
  170. package/dist/domain/experiment/model.js +1 -0
  171. package/dist/domain/i18n/languageRegistry.d.ts +57 -0
  172. package/dist/domain/i18n/languageRegistry.js +1 -0
  173. package/dist/domain/i18n/model.d.ts +31 -0
  174. package/dist/domain/i18n/model.js +1 -0
  175. package/dist/domain/icon/model.d.ts +8 -0
  176. package/dist/domain/icon/model.js +1 -0
  177. package/dist/domain/input/interactionBindings.d.ts +2 -0
  178. package/dist/domain/input/interactionBindings.js +2 -0
  179. package/dist/domain/launch/model.d.ts +58 -0
  180. package/dist/domain/launch/model.js +109 -0
  181. package/dist/domain/layout/interaction.d.ts +90 -0
  182. package/dist/domain/layout/interaction.js +1 -0
  183. package/dist/domain/layout/model.d.ts +28 -0
  184. package/dist/domain/layout/model.js +1 -0
  185. package/dist/domain/layout/selectors.d.ts +12 -0
  186. package/dist/domain/layout/selectors.js +84 -0
  187. package/dist/domain/layout/surfaceProjection.d.ts +56 -0
  188. package/dist/domain/layout/surfaceProjection.js +249 -0
  189. package/dist/domain/layout/validation.d.ts +9 -0
  190. package/dist/domain/layout/validation.js +71 -0
  191. package/dist/domain/panel/model.d.ts +9 -0
  192. package/dist/domain/panel/model.js +1 -0
  193. package/dist/domain/physics/colliderGeometry.d.ts +2 -0
  194. package/dist/domain/physics/colliderGeometry.js +1 -0
  195. package/dist/domain/physics/contracts.d.ts +2 -0
  196. package/dist/domain/physics/contracts.js +1 -0
  197. package/dist/domain/physics/kinematicBinding.d.ts +22 -0
  198. package/dist/domain/physics/kinematicBinding.js +1 -0
  199. package/dist/domain/physics/model.d.ts +4 -0
  200. package/dist/domain/physics/model.js +1 -0
  201. package/dist/domain/physics/mujoco.d.ts +5 -0
  202. package/dist/domain/physics/mujoco.js +1 -0
  203. package/dist/domain/physics/observationProfile.d.ts +2 -0
  204. package/dist/domain/physics/observationProfile.js +1 -0
  205. package/dist/domain/physics/presentationBinding.d.ts +6 -0
  206. package/dist/domain/physics/presentationBinding.js +1 -0
  207. package/dist/domain/physics/simulationProfile.d.ts +2 -0
  208. package/dist/domain/physics/simulationProfile.js +1 -0
  209. package/dist/domain/physics/visualAlignment.d.ts +17 -0
  210. package/dist/domain/physics/visualAlignment.js +1 -0
  211. package/dist/domain/presentation/readingLevel.d.ts +12 -0
  212. package/dist/domain/presentation/readingLevel.js +29 -0
  213. package/dist/domain/project/model.d.ts +55 -0
  214. package/dist/domain/project/model.js +1 -0
  215. package/dist/domain/repo-quality/model.d.ts +111 -0
  216. package/dist/domain/repo-quality/model.js +1 -0
  217. package/dist/domain/repository/model.d.ts +110 -0
  218. package/dist/domain/repository/model.js +1 -0
  219. package/dist/domain/runtime/checkpoint.d.ts +37 -0
  220. package/dist/domain/runtime/checkpoint.js +87 -0
  221. package/dist/domain/runtime/hydration.d.ts +26 -0
  222. package/dist/domain/runtime/hydration.js +92 -0
  223. package/dist/domain/runtime/initialization.d.ts +25 -0
  224. package/dist/domain/runtime/initialization.js +87 -0
  225. package/dist/domain/runtime/lifecycle.d.ts +51 -0
  226. package/dist/domain/runtime/lifecycle.js +118 -0
  227. package/dist/domain/runtime/model.d.ts +252 -0
  228. package/dist/domain/runtime/model.js +13 -0
  229. package/dist/domain/runtime/observability.d.ts +142 -0
  230. package/dist/domain/runtime/observability.js +1 -0
  231. package/dist/domain/runtime/offload.d.ts +56 -0
  232. package/dist/domain/runtime/offload.js +129 -0
  233. package/dist/domain/runtime/plan.d.ts +26 -0
  234. package/dist/domain/runtime/plan.js +1 -0
  235. package/dist/domain/runtime/qualityPolicy.d.ts +28 -0
  236. package/dist/domain/runtime/qualityPolicy.js +97 -0
  237. package/dist/domain/runtime/recovery.d.ts +61 -0
  238. package/dist/domain/runtime/recovery.js +129 -0
  239. package/dist/domain/runtime/suspension.d.ts +32 -0
  240. package/dist/domain/runtime/suspension.js +107 -0
  241. package/dist/domain/runtime/teardown.d.ts +33 -0
  242. package/dist/domain/runtime/teardown.js +109 -0
  243. package/dist/domain/shared/id.d.ts +1 -0
  244. package/dist/domain/shared/id.js +5 -0
  245. package/dist/domain/shared/json.d.ts +9 -0
  246. package/dist/domain/shared/json.js +24 -0
  247. package/dist/domain/shell/model.d.ts +40 -0
  248. package/dist/domain/shell/model.js +1 -0
  249. package/dist/domain/shell/runtime.d.ts +76 -0
  250. package/dist/domain/shell/runtime.js +40 -0
  251. package/dist/domain/surface/model.d.ts +97 -0
  252. package/dist/domain/surface/model.js +71 -0
  253. package/dist/domain/temporal/model.d.ts +95 -0
  254. package/dist/domain/temporal/model.js +45 -0
  255. package/dist/domain/tool/internalTab.d.ts +11 -0
  256. package/dist/domain/tool/internalTab.js +20 -0
  257. package/dist/domain/tool/model.d.ts +207 -0
  258. package/dist/domain/tool/model.js +1 -0
  259. package/dist/domain/tool/runtime.d.ts +122 -0
  260. package/dist/domain/tool/runtime.js +2 -0
  261. package/dist/domain/tool/shell.d.ts +38 -0
  262. package/dist/domain/tool/shell.js +175 -0
  263. package/dist/domain/widget/composition.d.ts +79 -0
  264. package/dist/domain/widget/composition.js +250 -0
  265. package/dist/domain/widget/model.d.ts +35 -0
  266. package/dist/domain/widget/model.js +8 -0
  267. package/dist/domain/widget/toolDock.d.ts +30 -0
  268. package/dist/domain/widget/toolDock.js +52 -0
  269. package/dist/domain/workbench/model.d.ts +35 -0
  270. package/dist/domain/workbench/model.js +1 -0
  271. package/dist/domain/workbench/routing.d.ts +17 -0
  272. package/dist/domain/workbench/routing.js +72 -0
  273. package/dist/domain/workspace/factories.d.ts +9 -0
  274. package/dist/domain/workspace/factories.js +47 -0
  275. package/dist/domain/workspace/model.d.ts +23 -0
  276. package/dist/domain/workspace/model.js +1 -0
  277. package/dist/domain/workspace/persistence.d.ts +5 -0
  278. package/dist/domain/workspace/persistence.js +1 -0
  279. package/dist/domain/workspace/selectors.d.ts +19 -0
  280. package/dist/domain/workspace/selectors.js +90 -0
  281. package/dist/domain/workspace/session.d.ts +9 -0
  282. package/dist/domain/workspace/session.js +1 -0
  283. package/dist/domain/workspace/validation.d.ts +10 -0
  284. package/dist/domain/workspace/validation.js +231 -0
  285. package/dist/hosting.d.ts +15 -0
  286. package/dist/hosting.js +12 -0
  287. package/dist/index.d.ts +111 -0
  288. package/dist/index.js +111 -0
  289. package/dist/infrastructure/audio/WorkbenchAudioManager.d.ts +36 -0
  290. package/dist/infrastructure/audio/WorkbenchAudioManager.js +100 -0
  291. package/dist/infrastructure/backend/HttpWorkbenchBackendClient.d.ts +30 -0
  292. package/dist/infrastructure/backend/HttpWorkbenchBackendClient.js +314 -0
  293. package/dist/infrastructure/persistence/LocalWorkspacePersistence.d.ts +8 -0
  294. package/dist/infrastructure/persistence/LocalWorkspacePersistence.js +29 -0
  295. package/dist/infrastructure/surfaces/InMemorySurfaceViewerRegistry.d.ts +58 -0
  296. package/dist/infrastructure/surfaces/InMemorySurfaceViewerRegistry.js +121 -0
  297. package/dist/infrastructure/temporal/InMemoryTemporalDialectRegistry.d.ts +8 -0
  298. package/dist/infrastructure/temporal/InMemoryTemporalDialectRegistry.js +38 -0
  299. package/dist/infrastructure/tools/InMemoryToolRegistry.d.ts +46 -0
  300. package/dist/infrastructure/tools/InMemoryToolRegistry.js +82 -0
  301. package/dist/infrastructure/widgets/InMemoryShellWidgetRegistry.d.ts +42 -0
  302. package/dist/infrastructure/widgets/InMemoryShellWidgetRegistry.js +66 -0
  303. package/dist/infrastructure/widgets/InMemoryWorkbenchWidgetRegistry.d.ts +20 -0
  304. package/dist/infrastructure/widgets/InMemoryWorkbenchWidgetRegistry.js +35 -0
  305. package/dist/infrastructure/workbenches/InMemoryWorkbenchRegistry.d.ts +7 -0
  306. package/dist/infrastructure/workbenches/InMemoryWorkbenchRegistry.js +28 -0
  307. package/dist/physics-runtime.d.ts +4 -0
  308. package/dist/physics-runtime.js +2 -0
  309. package/dist/stage/easing.d.ts +5 -0
  310. package/dist/stage/easing.js +15 -0
  311. package/dist/stage/index.d.ts +6 -0
  312. package/dist/stage/index.js +6 -0
  313. package/dist/stage/projection.d.ts +4 -0
  314. package/dist/stage/projection.js +74 -0
  315. package/dist/stage/stageRuntime.d.ts +2 -0
  316. package/dist/stage/stageRuntime.js +32 -0
  317. package/dist/stage/timeline.d.ts +3 -0
  318. package/dist/stage/timeline.js +69 -0
  319. package/dist/stage/tween.d.ts +3 -0
  320. package/dist/stage/tween.js +104 -0
  321. package/dist/stage/types.d.ts +104 -0
  322. package/dist/stage/types.js +30 -0
  323. package/dist/temporal/clock/audioClock.d.ts +1 -0
  324. package/dist/temporal/clock/audioClock.js +1 -0
  325. package/dist/temporal/clock/clockGraph.d.ts +1 -0
  326. package/dist/temporal/clock/clockGraph.js +1 -0
  327. package/dist/temporal/clock/clockTypes.d.ts +1 -0
  328. package/dist/temporal/clock/clockTypes.js +1 -0
  329. package/dist/temporal/clock/fixedStepClock.d.ts +1 -0
  330. package/dist/temporal/clock/fixedStepClock.js +1 -0
  331. package/dist/temporal/clock/musicalClock.d.ts +7 -0
  332. package/dist/temporal/clock/musicalClock.js +35 -0
  333. package/dist/temporal/clock/rootClock.d.ts +1 -0
  334. package/dist/temporal/clock/rootClock.js +1 -0
  335. package/dist/temporal/clock/videoClock.d.ts +1 -0
  336. package/dist/temporal/clock/videoClock.js +1 -0
  337. package/dist/temporal/easing/easingFunctions.d.ts +2 -0
  338. package/dist/temporal/easing/easingFunctions.js +19 -0
  339. package/dist/temporal/easing/easingRegistry.d.ts +10 -0
  340. package/dist/temporal/easing/easingRegistry.js +32 -0
  341. package/dist/temporal/easing/easingShaderSource.d.ts +2 -0
  342. package/dist/temporal/easing/easingShaderSource.js +16 -0
  343. package/dist/temporal/easing/easingTypes.d.ts +9 -0
  344. package/dist/temporal/easing/easingTypes.js +1 -0
  345. package/dist/temporal/history/runtimeHistory.d.ts +77 -0
  346. package/dist/temporal/history/runtimeHistory.js +5 -0
  347. package/dist/temporal/history/temporalHistoryCore.d.ts +1 -0
  348. package/dist/temporal/history/temporalHistoryCore.js +1 -0
  349. package/dist/temporal/index.d.ts +20 -0
  350. package/dist/temporal/index.js +20 -0
  351. package/dist/temporal/invalidation/invalidationController.d.ts +1 -0
  352. package/dist/temporal/invalidation/invalidationController.js +1 -0
  353. package/dist/temporal/scheduler/browserSchedulerHost.d.ts +3 -0
  354. package/dist/temporal/scheduler/browserSchedulerHost.js +19 -0
  355. package/dist/temporal/scheduler/frameBudget.d.ts +1 -0
  356. package/dist/temporal/scheduler/frameBudget.js +1 -0
  357. package/dist/temporal/scheduler/temporalScheduler.d.ts +4 -0
  358. package/dist/temporal/scheduler/temporalScheduler.js +6 -0
  359. package/dist/temporal/scheduler/temporalSchedulerCore.d.ts +1 -0
  360. package/dist/temporal/scheduler/temporalSchedulerCore.js +1 -0
  361. package/dist/temporal/scheduler/visibilityPolicy.d.ts +2 -0
  362. package/dist/temporal/scheduler/visibilityPolicy.js +1 -0
  363. package/dist/temporal/transport/temporalTransport.d.ts +1 -0
  364. package/dist/temporal/transport/temporalTransport.js +1 -0
  365. package/dist/temporal/transport/transportScope.d.ts +7 -0
  366. package/dist/temporal/transport/transportScope.js +3 -0
  367. package/dist/temporal/transport/transportTimeline.d.ts +22 -0
  368. package/dist/temporal/transport/transportTimeline.js +36 -0
  369. package/dist/temporal/transport/transportTypes.d.ts +1 -0
  370. package/dist/temporal/transport/transportTypes.js +1 -0
  371. package/dist/workspace-contracts.d.ts +36 -0
  372. package/dist/workspace-contracts.js +28 -0
  373. package/package.json +57 -0
package/LICENSE.md ADDED
@@ -0,0 +1,21 @@
1
+ # Licence — @konitif/workbench
2
+
3
+ SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
4
+
5
+ The original KONITIF / Workbench code in this v0.x package is made available
6
+ under the PolyForm Noncommercial License 1.0.0:
7
+ https://polyformproject.org/licenses/noncommercial/1.0.0
8
+
9
+ This notice incorporates the standard terms by reference; it is not a modified
10
+ version of the licence. This is source-available software, not OSI open source.
11
+ Third-party components retain their own licences and notices.
12
+
13
+ Uses outside the standard licence's permitted purposes require a separate
14
+ written licence. A public repository or npm download grants no additional
15
+ commercial rights. Any free professional authorization must be explicit,
16
+ nominative and limited to the agreed products; none is granted by this notice.
17
+
18
+ The KONITIF name, logo and official identity belong to Maxime Mouflard.
19
+ Descriptive reference is permitted. No third-party version may claim to be
20
+ official, certified or approved without authorization. This trademark notice
21
+ is separate from the software licence and does not amend its terms.
package/README.md ADDED
@@ -0,0 +1,54 @@
1
+ # @konitif/workbench
2
+
3
+ ## Build and distribution
4
+
5
+ Run `npm run build` to produce `dist` with the locked TypeScript compiler. The
6
+ published contract exposes compiled ESM and declarations only. Run `npm test`
7
+ then `npm run verify:package`; the latter packs the exact payload and consumes
8
+ all four public entries from an isolated Node ESM/NodeNext fixture.
9
+
10
+ The build does not install dependencies or publish. Release remains a separate,
11
+ protected operation after the repository and archive have been qualified.
12
+
13
+ Product-neutral Workbench authority for workspace composition, docking,
14
+ registries, persistence ports and shell lifecycle contracts.
15
+
16
+ The package hosts tools and widgets through generic definitions. It must not
17
+ depend on a private product package or specialize product-specific behavior.
18
+
19
+ ## Product color policy migration
20
+
21
+ The development barrel no longer exports `getRobotJointColor`. Consumers must
22
+ obtain their color policy from their product layer; generic viewers accept an
23
+ injected color provider. This is a source API change, with no persisted-data migration.
24
+ No compatibility reexport is provided because Workbench must not depend on a
25
+ product package. This migration does not publish either package.
26
+
27
+ Widget definitions and lazy bindings belong to `@konitif/widgets`.
28
+ Workbench provides `createWorkbenchWidgetAdapter` to project an admitted
29
+ definition into its hosting contract without loading or registering it.
30
+ Widget registries, zones, placements and docking helpers remain here.
31
+ Consumers of the former Widgets facade should import these host contracts
32
+ from `@konitif/workbench`; no persisted placement migration is required.
33
+
34
+ ## Selected workspace contracts
35
+
36
+ `@konitif/workbench/workspace-contracts` exposes an explicit selection of
37
+ workspace, shell, layout and tool-state contracts for state orchestration.
38
+ It reexports the existing implementations without including audio, HTTP or
39
+ local-storage adapters. The root entry and `hosting` remain compatible.
40
+ This source-level boundary is tested; standalone archive qualification and
41
+ publication remain separate gates.
42
+
43
+ ## Transitional headless physics entry
44
+
45
+ `@konitif/workbench/physics-runtime` forwards `PhysicsService`,
46
+ `NoopPhysicsBackend` and physical contracts to the published `@konitif/physics`
47
+ package. Their implementations do not live in Workbench.
48
+ Consumers inject backend factories and explicitly drive stepping and disposal.
49
+ No worker, engine binary, visual alignment or product configuration is loaded
50
+ by this entry. The former UI paths reexport the same classes for compatibility.
51
+
52
+ This is a compatibility boundary, not a permanent Workbench responsibility.
53
+ Backend identifiers and source shapes
54
+ remain unchanged; the no-op backend does not simulate physical effects.
@@ -0,0 +1,48 @@
1
+ import type { BootProjection } from "../../boot/projection.js";
2
+ import type { BootMode, BootPhase } from "../../boot/types.js";
3
+ export type ApplicationBootSource = 'desktop_host' | 'frontend' | 'backend' | 'resources' | 'configuration' | 'registry' | 'workspace' | 'runtime' | 'product';
4
+ export type ApplicationBootEventStatus = 'pending' | 'running' | 'completed' | 'completed_with_warnings' | 'blocked' | 'failed' | 'cancelled' | 'skipped' | 'unknown';
5
+ export type ApplicationBootSeverity = 'info' | 'warning' | 'error';
6
+ export interface ApplicationBootJournalEntry {
7
+ eventId: string;
8
+ phase: BootPhase;
9
+ stepId: string;
10
+ source: ApplicationBootSource;
11
+ status: ApplicationBootEventStatus;
12
+ message: string;
13
+ diagnosticCode?: string;
14
+ severity: ApplicationBootSeverity;
15
+ startedAt?: number;
16
+ completedAt?: number;
17
+ details: Record<string, unknown>;
18
+ }
19
+ export type ApplicationRevealReadinessStatus = 'ready' | 'ready_with_warnings' | 'blocked' | 'safe_mode' | 'unknown';
20
+ export interface ApplicationRevealReadiness {
21
+ status: ApplicationRevealReadinessStatus;
22
+ reasons: string[];
23
+ blockingDiagnostic?: string;
24
+ }
25
+ export interface ApplicationBootLifecycleProjection {
26
+ executionId: string;
27
+ mode: BootMode;
28
+ phase: BootPhase;
29
+ status: 'idle' | 'running' | 'success' | 'failed';
30
+ currentStep: ApplicationBootJournalEntry | null;
31
+ journal: ApplicationBootJournalEntry[];
32
+ completedSteps: number;
33
+ totalSteps: number;
34
+ warningCount: number;
35
+ blockingDiagnostics: string[];
36
+ revealReadiness: ApplicationRevealReadiness;
37
+ progress: {
38
+ kind: 'planned-steps' | 'indeterminate';
39
+ completed: number;
40
+ total: number;
41
+ };
42
+ }
43
+ export interface CreateApplicationBootLifecycleProjectionOptions {
44
+ firstFrameReady?: boolean;
45
+ requiredResourcesReady?: boolean;
46
+ workspaceShellMounted?: boolean;
47
+ }
48
+ export declare function createApplicationBootLifecycleProjection(bootProjection: BootProjection, options?: CreateApplicationBootLifecycleProjectionOptions): ApplicationBootLifecycleProjection;
@@ -0,0 +1,174 @@
1
+ export function createApplicationBootLifecycleProjection(bootProjection, options = {}) {
2
+ const journal = bootProjection.steps.map((step) => createJournalEntry(step));
3
+ const completedSteps = bootProjection.steps.filter((step) => isCompletedStepStatus(step.status)).length;
4
+ const warningCount = bootProjection.steps.reduce((count, step) => count + step.warnings.length, 0);
5
+ const blockingDiagnostics = bootProjection.steps
6
+ .filter((step) => step.status === 'failed' || step.status === 'blocked')
7
+ .map((step) => step.error ?? `${step.label} ${step.status}`);
8
+ const status = resolveApplicationBootStatus(bootProjection);
9
+ const currentStep = resolveCurrentJournalEntry(journal);
10
+ const revealReadiness = resolveApplicationRevealReadiness(bootProjection, warningCount, blockingDiagnostics, options);
11
+ return {
12
+ executionId: bootProjection.executionId,
13
+ mode: bootProjection.mode,
14
+ phase: bootProjection.currentPhase,
15
+ status,
16
+ currentStep,
17
+ journal,
18
+ completedSteps,
19
+ totalSteps: bootProjection.steps.length,
20
+ warningCount,
21
+ blockingDiagnostics,
22
+ revealReadiness,
23
+ progress: bootProjection.steps.length > 0
24
+ ? {
25
+ kind: 'planned-steps',
26
+ completed: completedSteps,
27
+ total: bootProjection.steps.length,
28
+ }
29
+ : {
30
+ kind: 'indeterminate',
31
+ completed: 0,
32
+ total: 0,
33
+ },
34
+ };
35
+ }
36
+ function createJournalEntry(step) {
37
+ const status = mapBootStepStatus(step.status, step.warnings.length);
38
+ return {
39
+ eventId: `${step.id}:${status}`,
40
+ phase: step.phase,
41
+ stepId: step.id,
42
+ source: resolveApplicationBootSource(step),
43
+ status,
44
+ message: step.label,
45
+ diagnosticCode: step.error ? `boot.${step.status}.${step.id}` : undefined,
46
+ severity: resolveApplicationBootSeverity(status),
47
+ startedAt: step.startedAt,
48
+ completedAt: step.endedAt,
49
+ details: {
50
+ attempts: step.attempts,
51
+ criticality: step.criticality,
52
+ dependencies: step.dependencies.map((dependency) => dependency.stepId),
53
+ warnings: [...step.warnings],
54
+ ...(step.error ? { error: step.error } : {}),
55
+ ...step.metadata,
56
+ },
57
+ };
58
+ }
59
+ function mapBootStepStatus(status, warningCount) {
60
+ switch (status) {
61
+ case 'success':
62
+ return warningCount > 0 ? 'completed_with_warnings' : 'completed';
63
+ case 'failed':
64
+ return 'failed';
65
+ case 'blocked':
66
+ return 'blocked';
67
+ case 'skipped':
68
+ return 'skipped';
69
+ case 'running':
70
+ return 'running';
71
+ case 'pending':
72
+ default:
73
+ return 'pending';
74
+ }
75
+ }
76
+ function resolveApplicationBootSource(step) {
77
+ const source = step.metadata.source;
78
+ if (isApplicationBootSource(source)) {
79
+ return source;
80
+ }
81
+ if (step.id.includes('desktop'))
82
+ return 'desktop_host';
83
+ if (step.id.includes('resource'))
84
+ return 'resources';
85
+ if (step.id.includes('registry'))
86
+ return 'registry';
87
+ if (step.id.includes('persistence') || step.id.includes('workspace'))
88
+ return 'workspace';
89
+ if (step.id.includes('runtime'))
90
+ return 'runtime';
91
+ if (step.id.includes('profile') || step.id.includes('configuration'))
92
+ return 'configuration';
93
+ return 'frontend';
94
+ }
95
+ function isApplicationBootSource(value) {
96
+ return (value === 'desktop_host' ||
97
+ value === 'frontend' ||
98
+ value === 'backend' ||
99
+ value === 'resources' ||
100
+ value === 'configuration' ||
101
+ value === 'registry' ||
102
+ value === 'workspace' ||
103
+ value === 'runtime' ||
104
+ value === 'product');
105
+ }
106
+ function resolveApplicationBootSeverity(status) {
107
+ if (status === 'failed' || status === 'blocked') {
108
+ return 'error';
109
+ }
110
+ if (status === 'completed_with_warnings' || status === 'skipped') {
111
+ return 'warning';
112
+ }
113
+ return 'info';
114
+ }
115
+ function resolveApplicationBootStatus(bootProjection) {
116
+ if (bootProjection.failed) {
117
+ return 'failed';
118
+ }
119
+ if (bootProjection.lastEvent?.type === 'boot:success') {
120
+ return 'success';
121
+ }
122
+ if (bootProjection.lastEvent) {
123
+ return 'running';
124
+ }
125
+ return 'idle';
126
+ }
127
+ function resolveCurrentJournalEntry(journal) {
128
+ return (journal.find((entry) => entry.status === 'running') ??
129
+ [...journal].reverse().find((entry) => entry.status !== 'pending') ??
130
+ journal[0] ??
131
+ null);
132
+ }
133
+ function resolveApplicationRevealReadiness(bootProjection, warningCount, blockingDiagnostics, options) {
134
+ if (bootProjection.mode === 'safe') {
135
+ return {
136
+ status: 'safe_mode',
137
+ reasons: ['Boot is running in safe mode.'],
138
+ };
139
+ }
140
+ if (bootProjection.failed || blockingDiagnostics.length > 0) {
141
+ return {
142
+ status: 'blocked',
143
+ reasons: blockingDiagnostics.length > 0 ? [...blockingDiagnostics] : ['Boot failed.'],
144
+ blockingDiagnostic: blockingDiagnostics[0] ?? 'Boot failed.',
145
+ };
146
+ }
147
+ const readinessGates = [
148
+ [options.requiredResourcesReady, 'Required resources are not ready.'],
149
+ [options.workspaceShellMounted, 'Workspace shell is not mounted.'],
150
+ [options.firstFrameReady, 'First application frame is not ready.'],
151
+ ];
152
+ const openReasons = readinessGates
153
+ .filter(([isReady]) => isReady !== true)
154
+ .map(([, reason]) => reason);
155
+ if (bootProjection.lastEvent?.type !== 'boot:success') {
156
+ return {
157
+ status: 'unknown',
158
+ reasons: ['Boot DAG has not reached RUNNING.'],
159
+ };
160
+ }
161
+ if (openReasons.length > 0) {
162
+ return {
163
+ status: 'unknown',
164
+ reasons: openReasons,
165
+ };
166
+ }
167
+ return {
168
+ status: warningCount > 0 ? 'ready_with_warnings' : 'ready',
169
+ reasons: warningCount > 0 ? [`Boot completed with ${warningCount} warning(s).`] : ['Application is ready to reveal.'],
170
+ };
171
+ }
172
+ function isCompletedStepStatus(status) {
173
+ return status === 'success' || status === 'skipped';
174
+ }
@@ -0,0 +1,12 @@
1
+ import type { ControlledExperimentCampaignDefinition, ControlledExperimentCampaignRunAssessment, ControlledExperimentCampaignSnapshot, ControlledExperimentDefinition, ControlledExperimentRunArtifact } from "../../domain/experiment/model.js";
2
+ export declare class ControlledExperimentCampaign {
3
+ readonly definition: ControlledExperimentCampaignDefinition;
4
+ readonly experiment: ControlledExperimentDefinition;
5
+ private readonly plannedRuns;
6
+ private readonly conditionIds;
7
+ private readonly assessments;
8
+ constructor(definition: ControlledExperimentCampaignDefinition, experiment: ControlledExperimentDefinition);
9
+ assessArtifact(artifact: ControlledExperimentRunArtifact): ControlledExperimentCampaignRunAssessment;
10
+ registerArtifact(artifact: ControlledExperimentRunArtifact): ControlledExperimentCampaignRunAssessment;
11
+ snapshot(): ControlledExperimentCampaignSnapshot;
12
+ }
@@ -0,0 +1,159 @@
1
+ export class ControlledExperimentCampaign {
2
+ definition;
3
+ experiment;
4
+ plannedRuns;
5
+ conditionIds;
6
+ assessments = new Map();
7
+ constructor(definition, experiment) {
8
+ this.definition = definition;
9
+ this.experiment = experiment;
10
+ assertCampaignDefinition(definition, experiment);
11
+ this.plannedRuns = new Map(definition.runs.map((run) => [run.runId, { ...run }]));
12
+ this.conditionIds = experiment.conditions.map(({ id }) => id);
13
+ }
14
+ assessArtifact(artifact) {
15
+ const planned = this.plannedRuns.get(artifact.run.id);
16
+ if (!planned) {
17
+ throw new Error(`Run ${artifact.run.id} is not part of campaign ${this.definition.id}.`);
18
+ }
19
+ const reasons = [];
20
+ if (artifact.experiment.id !== this.definition.experimentId ||
21
+ artifact.experiment.version !== this.definition.experimentVersion) {
22
+ reasons.push('experiment_identity_mismatch');
23
+ }
24
+ if (artifact.experiment.condition.id !== planned.conditionId) {
25
+ reasons.push('condition_mismatch');
26
+ }
27
+ if (artifact.run.status !== 'completed') {
28
+ reasons.push(`artifact_status_${artifact.run.status}`);
29
+ }
30
+ if (Math.abs(artifact.run.durationMs - this.definition.expectedDurationMs) >
31
+ this.definition.durationToleranceMs) {
32
+ reasons.push('duration_out_of_tolerance');
33
+ }
34
+ if (artifact.retention.truncated || artifact.retention.droppedObservations > 0) {
35
+ reasons.push('observation_retention_incomplete');
36
+ }
37
+ const observedPhaseIds = new Set(artifact.phaseMarkers.map(({ phaseId }) => phaseId));
38
+ for (const phaseId of this.definition.requiredPhaseIds) {
39
+ if (!observedPhaseIds.has(phaseId)) {
40
+ reasons.push(`missing_phase:${phaseId}`);
41
+ }
42
+ }
43
+ for (const metricId of this.definition.requiredMetricIds) {
44
+ if (!artifact.metricSummaries[metricId] || artifact.metricSummaries[metricId].count < 1) {
45
+ reasons.push(`missing_metric:${metricId}`);
46
+ }
47
+ }
48
+ for (const requirement of this.definition.environmentRequirements) {
49
+ const actual = readJsonPath(artifact.run.environment, requirement.path);
50
+ if (!jsonValuesEqual(actual, requirement.value)) {
51
+ reasons.push(`environment_mismatch:${requirement.path.join('.')}`);
52
+ }
53
+ }
54
+ return {
55
+ runId: planned.runId,
56
+ blindId: planned.blindId,
57
+ conditionId: planned.conditionId,
58
+ disposition: reasons.length === 0 ? 'accepted' : 'rejected',
59
+ reasons,
60
+ artifactStatus: artifact.run.status
61
+ };
62
+ }
63
+ registerArtifact(artifact) {
64
+ if (this.assessments.has(artifact.run.id)) {
65
+ throw new Error(`Run ${artifact.run.id} already has a registered artifact.`);
66
+ }
67
+ const assessment = this.assessArtifact(artifact);
68
+ this.assessments.set(assessment.runId, assessment);
69
+ return cloneAssessment(assessment);
70
+ }
71
+ snapshot() {
72
+ const acceptedRunCounts = Object.fromEntries(this.conditionIds.map((conditionId) => [conditionId, 0]));
73
+ const runs = this.definition.runs.map((run) => {
74
+ const assessment = this.assessments.get(run.runId) ?? pendingAssessment(run);
75
+ if (assessment.disposition === 'accepted') {
76
+ acceptedRunCounts[assessment.conditionId] = (acceptedRunCounts[assessment.conditionId] ?? 0) + 1;
77
+ }
78
+ return cloneAssessment(assessment);
79
+ });
80
+ const readyForReview = this.conditionIds.every((conditionId) => (acceptedRunCounts[conditionId] ?? 0) >= this.definition.validRunsRequiredPerCondition);
81
+ const next = runs.find(({ disposition }) => disposition === 'pending');
82
+ return {
83
+ campaignId: this.definition.id,
84
+ campaignVersion: this.definition.version,
85
+ readyForReview,
86
+ acceptedRunCounts,
87
+ runs,
88
+ nextRun: next ? { ...this.plannedRuns.get(next.runId) } : null
89
+ };
90
+ }
91
+ }
92
+ function assertCampaignDefinition(campaign, experiment) {
93
+ if (!campaign.id.trim() || !Number.isInteger(campaign.version) || campaign.version < 1) {
94
+ throw new Error('A controlled experiment campaign requires a stable id and positive integer version.');
95
+ }
96
+ if (campaign.experimentId !== experiment.id || campaign.experimentVersion !== experiment.version) {
97
+ throw new Error('Campaign and experiment identities must match.');
98
+ }
99
+ if (!Number.isFinite(campaign.expectedDurationMs) || campaign.expectedDurationMs <= 0) {
100
+ throw new Error('A campaign requires a positive expected run duration.');
101
+ }
102
+ if (!Number.isFinite(campaign.durationToleranceMs) || campaign.durationToleranceMs < 0) {
103
+ throw new Error('A campaign duration tolerance cannot be negative.');
104
+ }
105
+ if (!Number.isInteger(campaign.validRunsRequiredPerCondition) || campaign.validRunsRequiredPerCondition < 1) {
106
+ throw new Error('A campaign requires at least one valid run per condition.');
107
+ }
108
+ assertUniqueValues('run id', campaign.runs.map(({ runId }) => runId));
109
+ assertUniqueValues('blind id', campaign.runs.map(({ blindId }) => blindId));
110
+ assertUniqueValues('required phase id', campaign.requiredPhaseIds);
111
+ assertUniqueValues('required metric id', campaign.requiredMetricIds);
112
+ const conditionIds = new Set(experiment.conditions.map(({ id }) => id));
113
+ const phaseIds = new Set(experiment.phases.map(({ id }) => id));
114
+ const metricIds = new Set(experiment.metrics.map(({ id }) => id));
115
+ if (campaign.runs.some(({ conditionId }) => !conditionIds.has(conditionId))) {
116
+ throw new Error('Every campaign run must reference a declared experiment condition.');
117
+ }
118
+ if (campaign.requiredPhaseIds.some((phaseId) => !phaseIds.has(phaseId))) {
119
+ throw new Error('Every required campaign phase must exist in the experiment definition.');
120
+ }
121
+ if (campaign.requiredMetricIds.some((metricId) => !metricIds.has(metricId))) {
122
+ throw new Error('Every required campaign metric must exist in the experiment definition.');
123
+ }
124
+ for (const conditionId of conditionIds) {
125
+ const plannedCount = campaign.runs.filter((run) => run.conditionId === conditionId).length;
126
+ if (plannedCount < campaign.validRunsRequiredPerCondition) {
127
+ throw new Error(`Campaign condition ${conditionId} does not have enough planned runs.`);
128
+ }
129
+ }
130
+ }
131
+ function assertUniqueValues(kind, values) {
132
+ if (values.some((value) => !value.trim()) || new Set(values).size !== values.length) {
133
+ throw new Error(`Campaign ${kind}s must be non-empty and unique.`);
134
+ }
135
+ }
136
+ function pendingAssessment(run) {
137
+ return {
138
+ ...run,
139
+ disposition: 'pending',
140
+ reasons: [],
141
+ artifactStatus: null
142
+ };
143
+ }
144
+ function cloneAssessment(assessment) {
145
+ return { ...assessment, reasons: [...assessment.reasons] };
146
+ }
147
+ function readJsonPath(root, path) {
148
+ let current = root;
149
+ for (const segment of path) {
150
+ if (!current || typeof current !== 'object' || Array.isArray(current)) {
151
+ return undefined;
152
+ }
153
+ current = current[segment];
154
+ }
155
+ return current;
156
+ }
157
+ function jsonValuesEqual(left, right) {
158
+ return left !== undefined && JSON.stringify(left) === JSON.stringify(right);
159
+ }
@@ -0,0 +1,17 @@
1
+ import { type JsonObject } from "../../domain/shared/json.js";
2
+ import type { ControlledExperimentDefinition, ControlledExperimentObservationInput, ControlledExperimentRecorderSnapshot, ControlledExperimentRunArtifact, ControlledExperimentRunStart, ControlledExperimentRunStop } from "../../domain/experiment/model.js";
3
+ export declare class ControlledExperimentRecorder {
4
+ readonly definition: ControlledExperimentDefinition;
5
+ private readonly conditionIds;
6
+ private readonly metricIds;
7
+ private readonly metricIdSet;
8
+ private readonly phaseIds;
9
+ private activeRun;
10
+ constructor(definition: ControlledExperimentDefinition);
11
+ start(input: ControlledExperimentRunStart): void;
12
+ markPhase(phaseId: string, observedAtMs: number, provenance?: JsonObject): boolean;
13
+ record(input: ControlledExperimentObservationInput): boolean;
14
+ stop(input: ControlledExperimentRunStop): ControlledExperimentRunArtifact;
15
+ isRecording(): boolean;
16
+ snapshot(): ControlledExperimentRecorderSnapshot;
17
+ }