agentworkshop 0.7.70 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1266) hide show
  1. package/.AgentWorkShop/prompts/host-tools.json +3943 -2786
  2. package/.output/.AgentWorkShop/aml-python/requirements.txt +3 -0
  3. package/.output/.AgentWorkShop/optimizer-python/probe.py +24 -0
  4. package/.output/.AgentWorkShop/optimizer-python/problems.py +347 -0
  5. package/.output/.AgentWorkShop/optimizer-python/worker.py +119 -0
  6. package/.output/.AgentWorkShop/prompts/host-tools.json +3943 -2786
  7. package/.output/.AgentWorkShop/schema.json +14 -5
  8. package/.output/nitro.json +1 -1
  9. package/.output/public/_nuxt/{zzV9kr9T.js → B6jtLy6z.js} +2 -2
  10. package/.output/public/_nuxt/BBw9ylUY2.js +1 -0
  11. package/.output/public/_nuxt/BH8RvpVy.js +1 -0
  12. package/.output/public/_nuxt/BO0BJx3w2.js +8 -0
  13. package/.output/public/_nuxt/Bcs9zzO62.js +1 -0
  14. package/.output/public/_nuxt/BnNmkGJS2.js +36 -0
  15. package/.output/public/_nuxt/Byf4IxU2.js +14 -0
  16. package/.output/public/_nuxt/CxVhG0Xx.js +1 -0
  17. package/.output/public/_nuxt/D0mzKkZr.js +1 -0
  18. package/.output/public/_nuxt/{DoGa0vsN.js → DBtXLkyA.js} +1 -1
  19. package/.output/public/_nuxt/DIFkTkdS.js +1 -0
  20. package/.output/public/_nuxt/DPvZxAt02.js +1 -0
  21. package/.output/public/_nuxt/DbeNMehP.js +1 -0
  22. package/.output/public/_nuxt/DgrK8UCQ.js +0 -0
  23. package/.output/public/_nuxt/NXY37IO62.js +1 -0
  24. package/.output/public/_nuxt/board.Bo35UR0e.css +1 -0
  25. package/.output/public/_nuxt/builds/latest.json +1 -1
  26. package/.output/public/_nuxt/builds/meta/7a79a7e4-d691-4cf5-ae3a-3b01814479fb.json +1 -0
  27. package/.output/public/_nuxt/{data.D7XYoiL8.css → data.jRO2K9JI.css} +1 -1
  28. package/.output/public/_nuxt/{default.C9eAl1QW.css → default.BEXGWZFQ.css} +1 -1
  29. package/.output/public/_nuxt/{entry.DI0qLRfo.css → entry.C7koBPom.css} +1 -1
  30. package/.output/public/_nuxt/ontology.QMGeh66l.css +1 -0
  31. package/.output/public/_nuxt/optimizer.B8gCbU1b.css +1 -0
  32. package/.output/public/_nuxt/studio.CjmUr8P7.css +1 -0
  33. package/.output/server/chunks/_/access.mjs +165 -0
  34. package/.output/server/chunks/_/access.mjs.map +1 -0
  35. package/.output/server/chunks/_/binding-authz.mjs +1 -1
  36. package/.output/server/chunks/_/catalog-view.mjs +2 -1
  37. package/.output/server/chunks/_/catalog-view.mjs.map +1 -1
  38. package/.output/server/chunks/_/character-asset.repo.mjs +1 -1
  39. package/.output/server/chunks/_/chart-repo.mjs +1 -1
  40. package/.output/server/chunks/_/dashboard-repo.mjs +1 -1
  41. package/.output/server/chunks/_/data-export.mjs +6 -6
  42. package/.output/server/chunks/_/data-query.mjs +3 -3
  43. package/.output/server/chunks/_/dataset-reader.mjs +61 -0
  44. package/.output/server/chunks/_/dataset-reader.mjs.map +1 -0
  45. package/.output/server/chunks/_/eda-run.repo.mjs +10 -6
  46. package/.output/server/chunks/_/eda-run.repo.mjs.map +1 -1
  47. package/.output/server/chunks/_/entity.mjs +1 -1
  48. package/.output/server/chunks/_/features.mjs +6 -5
  49. package/.output/server/chunks/_/features.mjs.map +1 -1
  50. package/.output/server/chunks/_/golden.mjs +3 -3
  51. package/.output/server/chunks/_/host-bindings.mjs +2 -1
  52. package/.output/server/chunks/_/host-bindings.mjs.map +1 -1
  53. package/.output/server/chunks/_/index.mjs +583 -0
  54. package/.output/server/chunks/_/index.mjs.map +1 -0
  55. package/.output/server/chunks/_/mes-console.mjs +1 -1
  56. package/.output/server/chunks/_/nitro.mjs +17568 -9034
  57. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  58. package/.output/server/chunks/_/ocap.mjs +1 -1
  59. package/.output/server/chunks/_/rest-auth.mjs +44 -0
  60. package/.output/server/chunks/_/rest-auth.mjs.map +1 -0
  61. package/.output/server/chunks/_/scene-layout.repo.mjs +1 -1
  62. package/.output/server/chunks/_/spc.mjs +3 -2
  63. package/.output/server/chunks/_/spc.mjs.map +1 -1
  64. package/.output/server/chunks/build/TownView-BWMDbosY.mjs +1 -1
  65. package/.output/server/chunks/build/_id_-BK-t8nRG.mjs +1 -0
  66. package/.output/server/chunks/build/_id_-BK-t8nRG.mjs.map +1 -1
  67. package/.output/server/chunks/build/_id_-CZPlPDm4.mjs +1 -0
  68. package/.output/server/chunks/build/_id_-CZPlPDm4.mjs.map +1 -1
  69. package/.output/server/chunks/build/{_wsId_-BXSYXXXX.mjs → _wsId_-BNKrrV1H.mjs} +23 -2
  70. package/.output/server/chunks/build/{_wsId_-BXSYXXXX.mjs.map → _wsId_-BNKrrV1H.mjs.map} +1 -1
  71. package/.output/server/chunks/build/agents-8tV9xL97.mjs +1 -0
  72. package/.output/server/chunks/build/agents-8tV9xL97.mjs.map +1 -1
  73. package/.output/server/chunks/build/aml-BNTEDOsl.mjs +1 -0
  74. package/.output/server/chunks/build/aml-BNTEDOsl.mjs.map +1 -1
  75. package/.output/server/chunks/build/analysis-p-dBkjoK.mjs +1 -0
  76. package/.output/server/chunks/build/analysis-p-dBkjoK.mjs.map +1 -1
  77. package/.output/server/chunks/build/api-B4Om0mEc.mjs +1 -0
  78. package/.output/server/chunks/build/api-B4Om0mEc.mjs.map +1 -1
  79. package/.output/server/chunks/build/api-BEW_ebY_.mjs +64 -0
  80. package/.output/server/chunks/build/api-BEW_ebY_.mjs.map +1 -0
  81. package/.output/server/chunks/build/api-BsAgXWxi.mjs +72 -0
  82. package/.output/server/chunks/build/api-BsAgXWxi.mjs.map +1 -0
  83. package/.output/server/chunks/build/{board-C6JysYLg.mjs → board-Dl2Ar22r.mjs} +26 -38
  84. package/.output/server/chunks/build/board-Dl2Ar22r.mjs.map +1 -0
  85. package/.output/server/chunks/build/channel-templates-Iot9Y3vV.mjs +1 -0
  86. package/.output/server/chunks/build/channel-templates-Iot9Y3vV.mjs.map +1 -1
  87. package/.output/server/chunks/build/chart-trend-BWeZh5Lv.mjs +117 -0
  88. package/.output/server/chunks/build/chart-trend-BWeZh5Lv.mjs.map +1 -0
  89. package/.output/server/chunks/build/constants-HPHJvjne.mjs +1 -0
  90. package/.output/server/chunks/build/constants-HPHJvjne.mjs.map +1 -1
  91. package/.output/server/chunks/build/daq-CdxcfY_G.mjs +2 -1
  92. package/.output/server/chunks/build/daq-CdxcfY_G.mjs.map +1 -1
  93. package/.output/server/chunks/build/{data-DL68QJ5W.mjs → data-D8uX1dnm.mjs} +37 -33
  94. package/.output/server/chunks/build/data-D8uX1dnm.mjs.map +1 -0
  95. package/.output/server/chunks/build/dcw-BlDQtS4q.mjs +2 -1
  96. package/.output/server/chunks/build/dcw-BlDQtS4q.mjs.map +1 -1
  97. package/.output/server/chunks/build/{default-Dt1B8QzV.mjs → default-CJkOcmrm.mjs} +21 -8
  98. package/.output/server/chunks/build/{default-Dt1B8QzV.mjs.map → default-CJkOcmrm.mjs.map} +1 -1
  99. package/.output/server/chunks/build/es-Bxu10NJ2.mjs +1 -0
  100. package/.output/server/chunks/build/es-Bxu10NJ2.mjs.map +1 -1
  101. package/.output/server/chunks/build/logs-BTfJQ6vQ.mjs +1 -0
  102. package/.output/server/chunks/build/logs-BTfJQ6vQ.mjs.map +1 -1
  103. package/.output/server/chunks/build/monitor-DvaR3yo8.mjs +1 -0
  104. package/.output/server/chunks/build/ontology-C3HS5pMo.mjs +977 -0
  105. package/.output/server/chunks/build/ontology-C3HS5pMo.mjs.map +1 -0
  106. package/.output/server/chunks/build/operations-Cl8nVm9D.mjs +1 -0
  107. package/.output/server/chunks/build/operations-Cl8nVm9D.mjs.map +1 -1
  108. package/.output/server/chunks/build/optimizer-BOtGWEtc.mjs +200 -0
  109. package/.output/server/chunks/build/optimizer-BOtGWEtc.mjs.map +1 -0
  110. package/.output/server/chunks/build/pages-AFRP4-EL.mjs +1 -0
  111. package/.output/server/chunks/build/pages-AFRP4-EL.mjs.map +1 -1
  112. package/.output/server/chunks/build/permissions-CVTfixZj.mjs +1 -0
  113. package/.output/server/chunks/build/permissions-CVTfixZj.mjs.map +1 -1
  114. package/.output/server/chunks/build/plugins-LRjaSEZy.mjs +1 -0
  115. package/.output/server/chunks/build/plugins-LRjaSEZy.mjs.map +1 -1
  116. package/.output/server/chunks/build/schedules-BLhn2CLn.mjs +1 -0
  117. package/.output/server/chunks/build/settings-DIf_iYdu.mjs +1 -0
  118. package/.output/server/chunks/build/settings-DIf_iYdu.mjs.map +1 -1
  119. package/.output/server/chunks/build/{studio-DjhjwH4s.mjs → studio-cdoNCfyy.mjs} +55 -106
  120. package/.output/server/chunks/build/studio-cdoNCfyy.mjs.map +1 -0
  121. package/.output/server/chunks/build/teams-B2J6ouRY.mjs +1 -0
  122. package/.output/server/chunks/build/teams-B2J6ouRY.mjs.map +1 -1
  123. package/.output/server/chunks/build/tokens-DFQGaN2n.mjs +1 -0
  124. package/.output/server/chunks/build/tokens-DFQGaN2n.mjs.map +1 -1
  125. package/.output/server/chunks/build/tools-DWJFnU_t.mjs +1 -0
  126. package/.output/server/chunks/build/tools-DWJFnU_t.mjs.map +1 -1
  127. package/.output/server/chunks/build/town-B5aoiG98.mjs +1 -0
  128. package/.output/server/chunks/build/town-B5aoiG98.mjs.map +1 -1
  129. package/.output/server/chunks/build/town-BV-hbwb5.mjs +1 -0
  130. package/.output/server/chunks/build/town-BV-hbwb5.mjs.map +1 -1
  131. package/.output/server/chunks/build/types-D6J7slEa.mjs +6 -2
  132. package/.output/server/chunks/build/types-DWqIeMRP.mjs +1 -0
  133. package/.output/server/chunks/build/types-DWqIeMRP.mjs.map +1 -1
  134. package/.output/server/chunks/build/useAgentHarnessOptions-DOrQHeBh.mjs +1 -0
  135. package/.output/server/chunks/build/useAgentHarnessOptions-DOrQHeBh.mjs.map +1 -1
  136. package/.output/server/chunks/build/useAgentTemplateActions-CzlplRWh.mjs +1 -0
  137. package/.output/server/chunks/build/useAgentTemplateActions-CzlplRWh.mjs.map +1 -1
  138. package/.output/server/chunks/build/useAgentTemplateDialogState-CZzpu5og.mjs +1 -0
  139. package/.output/server/chunks/build/useAgentTemplateDialogState-CZzpu5og.mjs.map +1 -1
  140. package/.output/server/chunks/build/useAgentTemplateForm-DQo1enf2.mjs +1 -0
  141. package/.output/server/chunks/build/useAgentTemplateForm-DQo1enf2.mjs.map +1 -1
  142. package/.output/server/chunks/build/useAgentTemplatesCatalog-DP-iMmqz.mjs +1 -0
  143. package/.output/server/chunks/build/useAgentTemplatesCatalog-DP-iMmqz.mjs.map +1 -1
  144. package/.output/server/chunks/build/useAmlDatasets-DeoE1idn.mjs +1 -0
  145. package/.output/server/chunks/build/useAmlDatasets-DeoE1idn.mjs.map +1 -1
  146. package/.output/server/chunks/build/useAmlEntities-BJhvdqHJ.mjs +1 -0
  147. package/.output/server/chunks/build/useAmlEntities-BJhvdqHJ.mjs.map +1 -1
  148. package/.output/server/chunks/build/useAmlEnv-CDIZ6xTe.mjs +1 -0
  149. package/.output/server/chunks/build/useAmlEnv-CDIZ6xTe.mjs.map +1 -1
  150. package/.output/server/chunks/build/useAmlExperiments-Dloi834i.mjs +1 -0
  151. package/.output/server/chunks/build/useAmlExperiments-Dloi834i.mjs.map +1 -1
  152. package/.output/server/chunks/build/useAmlFormat-C2sl3MGB.mjs +1 -0
  153. package/.output/server/chunks/build/useAmlFormat-C2sl3MGB.mjs.map +1 -1
  154. package/.output/server/chunks/build/useAmlJobs-BF9LpwXz.mjs +1 -0
  155. package/.output/server/chunks/build/useAmlJobs-BF9LpwXz.mjs.map +1 -1
  156. package/.output/server/chunks/build/useAmlModels-_bweOr3R.mjs +1 -0
  157. package/.output/server/chunks/build/useAmlModels-_bweOr3R.mjs.map +1 -1
  158. package/.output/server/chunks/build/useAmlNotes-DQj980iX.mjs +1 -0
  159. package/.output/server/chunks/build/useAmlNotes-DQj980iX.mjs.map +1 -1
  160. package/.output/server/chunks/build/useAmlPredict-DHNgDSJn.mjs +1 -0
  161. package/.output/server/chunks/build/useAmlPredict-DHNgDSJn.mjs.map +1 -1
  162. package/.output/server/chunks/build/useAnalysisFeed-BrEGV_9x.mjs +1 -0
  163. package/.output/server/chunks/build/useAnalysisFeed-BrEGV_9x.mjs.map +1 -1
  164. package/.output/server/chunks/build/useDaqAddNode-D_Rkju0f.mjs +2 -1
  165. package/.output/server/chunks/build/useDaqAddNode-D_Rkju0f.mjs.map +1 -1
  166. package/.output/server/chunks/build/useDaqDetailBinding-DCWaLKXT.mjs +1 -0
  167. package/.output/server/chunks/build/useDaqDetailBinding-DCWaLKXT.mjs.map +1 -1
  168. package/.output/server/chunks/build/useDaqDetailFrames-BOIcOJRB.mjs +1 -0
  169. package/.output/server/chunks/build/useDaqDetailFrames-BOIcOJRB.mjs.map +1 -1
  170. package/.output/server/chunks/build/useDaqDetailHistory-D6WulPVs.mjs +1 -0
  171. package/.output/server/chunks/build/useDaqDetailHistory-D6WulPVs.mjs.map +1 -1
  172. package/.output/server/chunks/build/useDaqDetailNode-DeOsDxK5.mjs +2 -1
  173. package/.output/server/chunks/build/useDaqDetailNode-DeOsDxK5.mjs.map +1 -1
  174. package/.output/server/chunks/build/useDaqDetailParams-Cm9a9r5G.mjs +2 -1
  175. package/.output/server/chunks/build/useDaqDetailParams-Cm9a9r5G.mjs.map +1 -1
  176. package/.output/server/chunks/build/useDaqFilters-CctmO03p.mjs +2 -1
  177. package/.output/server/chunks/build/useDaqFilters-CctmO03p.mjs.map +1 -1
  178. package/.output/server/chunks/build/useDaqNodeWindow-1DWj2H5G.mjs +1 -0
  179. package/.output/server/chunks/build/useDaqNodeWindow-1DWj2H5G.mjs.map +1 -1
  180. package/.output/server/chunks/build/useDaqOptimizations-CmX_dpBc.mjs +1 -0
  181. package/.output/server/chunks/build/useDaqOptimizations-CmX_dpBc.mjs.map +1 -1
  182. package/.output/server/chunks/build/useDaqStream-B9ZBVQrI.mjs +1 -1
  183. package/.output/server/chunks/build/useDaqTemplates-CK37sMfi.mjs +2 -1
  184. package/.output/server/chunks/build/useDaqTemplates-CK37sMfi.mjs.map +1 -1
  185. package/.output/server/chunks/build/useDashboardCharts-D45083s_.mjs +1 -0
  186. package/.output/server/chunks/build/useDashboardCharts-D45083s_.mjs.map +1 -1
  187. package/.output/server/chunks/build/useDashboardData-B36wVWo2.mjs +1 -0
  188. package/.output/server/chunks/build/useDashboardData-B36wVWo2.mjs.map +1 -1
  189. package/.output/server/chunks/build/useDcwAddNode-DACVcEHs.mjs +2 -1
  190. package/.output/server/chunks/build/useDcwAddNode-DACVcEHs.mjs.map +1 -1
  191. package/.output/server/chunks/build/useDcwCards-SaiImIYQ.mjs +1 -0
  192. package/.output/server/chunks/build/useDcwCards-SaiImIYQ.mjs.map +1 -1
  193. package/.output/server/chunks/build/useDcwDetailScope-DLOklSMO.mjs +1 -0
  194. package/.output/server/chunks/build/useDcwDetailScope-DLOklSMO.mjs.map +1 -1
  195. package/.output/server/chunks/build/useDcwDetailTemplates-ClmIdZ40.mjs +1 -0
  196. package/.output/server/chunks/build/useDcwDetailTemplates-ClmIdZ40.mjs.map +1 -1
  197. package/.output/server/chunks/build/useDcwFilter-CPMyCltx.mjs +1 -0
  198. package/.output/server/chunks/build/useDcwFilter-CPMyCltx.mjs.map +1 -1
  199. package/.output/server/chunks/build/useDcwLedger-0ie-0WTc.mjs +1 -0
  200. package/.output/server/chunks/build/useDcwLedger-0ie-0WTc.mjs.map +1 -1
  201. package/.output/server/chunks/build/useDcwLineMutations-DNxo66yM.mjs +1 -0
  202. package/.output/server/chunks/build/useDcwLineMutations-DNxo66yM.mjs.map +1 -1
  203. package/.output/server/chunks/build/useDcwLineRun-CHskwscT.mjs +1 -0
  204. package/.output/server/chunks/build/useDcwLineRun-CHskwscT.mjs.map +1 -1
  205. package/.output/server/chunks/build/useDcwParamApprovals-DtScUc-W.mjs +1 -0
  206. package/.output/server/chunks/build/useDcwParamApprovals-DtScUc-W.mjs.map +1 -1
  207. package/.output/server/chunks/build/useDcwProducts-BMaxzLu6.mjs +1 -0
  208. package/.output/server/chunks/build/useDcwProducts-BMaxzLu6.mjs.map +1 -1
  209. package/.output/server/chunks/build/useDcwQuery-TVU3Eo0M.mjs +1 -0
  210. package/.output/server/chunks/build/useDcwQuery-TVU3Eo0M.mjs.map +1 -1
  211. package/.output/server/chunks/build/useDcwQuickActions-BREFmR9T.mjs +1 -0
  212. package/.output/server/chunks/build/useDcwQuickActions-BREFmR9T.mjs.map +1 -1
  213. package/.output/server/chunks/build/useDcwRecipes-Bc9urA1N.mjs +1 -0
  214. package/.output/server/chunks/build/useDcwRecipes-Bc9urA1N.mjs.map +1 -1
  215. package/.output/server/chunks/build/useDcwStream-Dir5ufAU.mjs +1 -1
  216. package/.output/server/chunks/build/useDcwTemplates-BzagZztS.mjs +1 -0
  217. package/.output/server/chunks/build/useDcwTemplates-BzagZztS.mjs.map +1 -1
  218. package/.output/server/chunks/build/useDcwWrites-BROwTLCn.mjs +1 -0
  219. package/.output/server/chunks/build/useDcwWrites-BROwTLCn.mjs.map +1 -1
  220. package/.output/server/chunks/build/useExpConfirmations-BM626N4p.mjs +1 -0
  221. package/.output/server/chunks/build/useExpConfirmations-BM626N4p.mjs.map +1 -1
  222. package/.output/server/chunks/build/useLogsFormat-B-o4MHy7.mjs +1 -0
  223. package/.output/server/chunks/build/useLogsFormat-B-o4MHy7.mjs.map +1 -1
  224. package/.output/server/chunks/build/useLogsManual-cVBZQ_Mt.mjs +1 -0
  225. package/.output/server/chunks/build/useLogsManual-cVBZQ_Mt.mjs.map +1 -1
  226. package/.output/server/chunks/build/useLogsQuery-D7hrJ3yn.mjs +1 -0
  227. package/.output/server/chunks/build/useLogsQuery-D7hrJ3yn.mjs.map +1 -1
  228. package/.output/server/chunks/build/useLogsScope-aaPQeTRm.mjs +1 -0
  229. package/.output/server/chunks/build/useLogsScope-aaPQeTRm.mjs.map +1 -1
  230. package/.output/server/chunks/build/useMonitorColumns-vVnt3r5Q.mjs +1 -0
  231. package/.output/server/chunks/build/useMonitorColumns-vVnt3r5Q.mjs.map +1 -1
  232. package/.output/server/chunks/build/useMonitorData-DIkiLr_h.mjs +1 -0
  233. package/.output/server/chunks/build/useMonitorData-DIkiLr_h.mjs.map +1 -1
  234. package/.output/server/chunks/build/useMonitorFormat-CyURtH8N.mjs +1 -0
  235. package/.output/server/chunks/build/useMonitorFormat-CyURtH8N.mjs.map +1 -1
  236. package/.output/server/chunks/build/useMonitorTerminal-Dj4QwRNW.mjs +1 -0
  237. package/.output/server/chunks/build/useMonitorTerminal-Dj4QwRNW.mjs.map +1 -1
  238. package/.output/server/chunks/build/useOperationsFeed-Ci4mZAn_.mjs +1 -0
  239. package/.output/server/chunks/build/useOperationsFeed-Ci4mZAn_.mjs.map +1 -1
  240. package/.output/server/chunks/build/useRecipeDispatchApprovals-BYtiqfeb.mjs +1 -0
  241. package/.output/server/chunks/build/useRecipeDispatchApprovals-BYtiqfeb.mjs.map +1 -1
  242. package/.output/server/chunks/build/useTeamActions-I_8QWp9w.mjs +1 -0
  243. package/.output/server/chunks/build/useTeamActions-I_8QWp9w.mjs.map +1 -1
  244. package/.output/server/chunks/build/useTeamAddMemberDialog-BLn4nTuy.mjs +1 -0
  245. package/.output/server/chunks/build/useTeamAddMemberDialog-BLn4nTuy.mjs.map +1 -1
  246. package/.output/server/chunks/build/useTeamCreateDialog-Bp5qKtpI.mjs +1 -0
  247. package/.output/server/chunks/build/useTeamCreateDialog-Bp5qKtpI.mjs.map +1 -1
  248. package/.output/server/chunks/build/useTeamDeployDialog-DwIaz6Cx.mjs +1 -0
  249. package/.output/server/chunks/build/useTeamDeployDialog-DwIaz6Cx.mjs.map +1 -1
  250. package/.output/server/chunks/build/useTeamDialogState-CFRUQxAf.mjs +1 -0
  251. package/.output/server/chunks/build/useTeamDialogState-CFRUQxAf.mjs.map +1 -1
  252. package/.output/server/chunks/build/useTeamPluginDialog-B932gZOI.mjs +1 -0
  253. package/.output/server/chunks/build/useTeamPluginDialog-B932gZOI.mjs.map +1 -1
  254. package/.output/server/chunks/build/useTeamsCatalog-DBwaLQBw.mjs +1 -0
  255. package/.output/server/chunks/build/useTeamsCatalog-DBwaLQBw.mjs.map +1 -1
  256. package/.output/server/chunks/build/useTokenClipboard-CwQpoFeP.mjs +1 -0
  257. package/.output/server/chunks/build/useTokenClipboard-CwQpoFeP.mjs.map +1 -1
  258. package/.output/server/chunks/build/useTokenCreate-Ctl0YGhL.mjs +1 -0
  259. package/.output/server/chunks/build/useTokenCreate-Ctl0YGhL.mjs.map +1 -1
  260. package/.output/server/chunks/build/useTokenRename-Cm3ypSfN.mjs +1 -0
  261. package/.output/server/chunks/build/useTokenRename-Cm3ypSfN.mjs.map +1 -1
  262. package/.output/server/chunks/build/useTokenReveal-CeoWL5Mt.mjs +1 -0
  263. package/.output/server/chunks/build/useTokenReveal-CeoWL5Mt.mjs.map +1 -1
  264. package/.output/server/chunks/build/useTokensList-CNIzON3u.mjs +1 -0
  265. package/.output/server/chunks/build/useTokensList-CNIzON3u.mjs.map +1 -1
  266. package/.output/server/chunks/build/useWorkbenchAuth-CY-bVFMu.mjs +1 -0
  267. package/.output/server/chunks/build/useWorkbenchAuth-CY-bVFMu.mjs.map +1 -1
  268. package/.output/server/chunks/build/useWorkbenchWorkspaces-DhZQFss9.mjs +1 -0
  269. package/.output/server/chunks/build/useWorkbenchWorkspaces-DhZQFss9.mjs.map +1 -1
  270. package/.output/server/chunks/build/useWorkspaceAuth-Dlvj9csD.mjs +1 -0
  271. package/.output/server/chunks/build/useWorkspaceAuth-Dlvj9csD.mjs.map +1 -1
  272. package/.output/server/chunks/build/useWorkspaceChannels-CPFepxTN.mjs +1 -0
  273. package/.output/server/chunks/build/useWorkspaceChannels-CPFepxTN.mjs.map +1 -1
  274. package/.output/server/chunks/build/useWorkspacePanels-CTwREmq0.mjs +1 -0
  275. package/.output/server/chunks/build/useWorkspacePanels-CTwREmq0.mjs.map +1 -1
  276. package/.output/server/chunks/build/useWorkspaceShell-BCypjjjE.mjs +1 -0
  277. package/.output/server/chunks/build/useWorkspaceShell-BCypjjjE.mjs.map +1 -1
  278. package/.output/server/chunks/build/users-BWw0VCr9.mjs +1 -0
  279. package/.output/server/chunks/build/users-BWw0VCr9.mjs.map +1 -1
  280. package/.output/server/chunks/build/workshop-1gKeDASV.mjs +1 -0
  281. package/.output/server/chunks/build/workshop-1gKeDASV.mjs.map +1 -1
  282. package/.output/server/chunks/routes/api/health.get.mjs +1 -0
  283. package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
  284. package/.output/server/chunks/routes/api/index.get.mjs +1 -0
  285. package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
  286. package/.output/server/chunks/routes/api/index.post.mjs +1 -0
  287. package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
  288. package/.output/server/chunks/routes/api/mcp/workshop.mjs +32 -9
  289. package/.output/server/chunks/routes/api/mcp/workshop.mjs.map +1 -1
  290. package/.output/server/chunks/routes/api/metrics.mjs +1 -0
  291. package/.output/server/chunks/routes/api/metrics.mjs.map +1 -1
  292. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +1 -0
  293. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs.map +1 -1
  294. package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs +1 -0
  295. package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs.map +1 -1
  296. package/.output/server/chunks/routes/api/plugins/i18n.get.mjs +1 -0
  297. package/.output/server/chunks/routes/api/plugins/i18n.get.mjs.map +1 -1
  298. package/.output/server/chunks/routes/api/plugins/manifest.get.mjs +1 -0
  299. package/.output/server/chunks/routes/api/plugins/manifest.get.mjs.map +1 -1
  300. package/.output/server/chunks/routes/api/system/backup/list.get.mjs +1 -0
  301. package/.output/server/chunks/routes/api/system/backup/list.get.mjs.map +1 -1
  302. package/.output/server/chunks/routes/api/system/backup/run.post.mjs +3 -2
  303. package/.output/server/chunks/routes/api/system/backup/run.post.mjs.map +1 -1
  304. package/.output/server/chunks/routes/api/system/config-groups/_id_.delete.mjs +1 -0
  305. package/.output/server/chunks/routes/api/system/config-groups/_id_.delete.mjs.map +1 -1
  306. package/.output/server/chunks/routes/api/system/config-groups/_id_.patch.mjs +1 -0
  307. package/.output/server/chunks/routes/api/system/config-groups/_id_.patch.mjs.map +1 -1
  308. package/.output/server/chunks/routes/api/system/config.get.mjs +1 -0
  309. package/.output/server/chunks/routes/api/system/config.get.mjs.map +1 -1
  310. package/.output/server/chunks/routes/api/system/index.get.mjs +1 -0
  311. package/.output/server/chunks/routes/api/system/index.get.mjs.map +1 -1
  312. package/.output/server/chunks/routes/api/system/index.patch.mjs +1 -0
  313. package/.output/server/chunks/routes/api/system/index.patch.mjs.map +1 -1
  314. package/.output/server/chunks/routes/api/system/index.post.mjs +1 -0
  315. package/.output/server/chunks/routes/api/system/index.post.mjs.map +1 -1
  316. package/.output/server/chunks/routes/api/system/index2.get.mjs +1 -0
  317. package/.output/server/chunks/routes/api/system/index2.get.mjs.map +1 -1
  318. package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs +1 -0
  319. package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs.map +1 -1
  320. package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs +1 -0
  321. package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs.map +1 -1
  322. package/.output/server/chunks/routes/api/system/monitor.get.mjs +1 -0
  323. package/.output/server/chunks/routes/api/system/monitor.get.mjs.map +1 -1
  324. package/.output/server/chunks/routes/api/system/settings/events.get.mjs +1 -0
  325. package/.output/server/chunks/routes/api/system/settings/events.get.mjs.map +1 -1
  326. package/.output/server/chunks/routes/api/system/settings/reset.post.mjs +1 -0
  327. package/.output/server/chunks/routes/api/system/settings/reset.post.mjs.map +1 -1
  328. package/.output/server/chunks/routes/api/system/timezone.get.mjs +1 -0
  329. package/.output/server/chunks/routes/api/system/timezone.get.mjs.map +1 -1
  330. package/.output/server/chunks/routes/api/users/_id_.delete.mjs +1 -0
  331. package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
  332. package/.output/server/chunks/routes/api/users/_id_.get.mjs +1 -0
  333. package/.output/server/chunks/routes/api/users/_id_.get.mjs.map +1 -1
  334. package/.output/server/chunks/routes/api/users/_id_.put.mjs +1 -0
  335. package/.output/server/chunks/routes/api/users/_id_.put.mjs.map +1 -1
  336. package/.output/server/chunks/routes/api/users/change-password.post.mjs +1 -0
  337. package/.output/server/chunks/routes/api/users/change-password.post.mjs.map +1 -1
  338. package/.output/server/chunks/routes/api/users/index.get.mjs +1 -0
  339. package/.output/server/chunks/routes/api/users/index.get.mjs.map +1 -1
  340. package/.output/server/chunks/routes/api/users/index.post.mjs +1 -0
  341. package/.output/server/chunks/routes/api/users/index.post.mjs.map +1 -1
  342. package/.output/server/chunks/routes/api/users/login.post.mjs +1 -0
  343. package/.output/server/chunks/routes/api/users/login.post.mjs.map +1 -1
  344. package/.output/server/chunks/routes/api/users/logout.post.mjs +1 -0
  345. package/.output/server/chunks/routes/api/users/logout.post.mjs.map +1 -1
  346. package/.output/server/chunks/routes/api/users/me.get.mjs +1 -0
  347. package/.output/server/chunks/routes/api/users/me.get.mjs.map +1 -1
  348. package/.output/server/chunks/routes/api/users/register.post.mjs +1 -0
  349. package/.output/server/chunks/routes/api/users/register.post.mjs.map +1 -1
  350. package/.output/server/chunks/routes/api/users/setup-status.get.mjs +1 -0
  351. package/.output/server/chunks/routes/api/users/setup-status.get.mjs.map +1 -1
  352. package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs +1 -0
  353. package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs.map +1 -1
  354. package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs +1 -0
  355. package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs.map +1 -1
  356. package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs +1 -0
  357. package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs.map +1 -1
  358. package/.output/server/chunks/routes/api/workshop/_...path_.mjs +1 -0
  359. package/.output/server/chunks/routes/api/workshop/_...path_.mjs.map +1 -1
  360. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs +1 -0
  361. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs.map +1 -1
  362. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs +1 -0
  363. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs.map +1 -1
  364. package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs +1 -0
  365. package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs.map +1 -1
  366. package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs +47 -3
  367. package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs.map +1 -1
  368. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs +2 -1
  369. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs.map +1 -1
  370. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs +2 -1
  371. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs.map +1 -1
  372. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/grant.post.mjs +2 -1
  373. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/grant.post.mjs.map +1 -1
  374. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/revoke.post.mjs +2 -1
  375. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/revoke.post.mjs.map +1 -1
  376. package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs +2 -1
  377. package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs.map +1 -1
  378. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +2 -1
  379. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs.map +1 -1
  380. package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs +2 -1
  381. package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs.map +1 -1
  382. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +2 -1
  383. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs.map +1 -1
  384. package/.output/server/chunks/routes/api/workshop/agent-tools/list.get.mjs +51 -15
  385. package/.output/server/chunks/routes/api/workshop/agent-tools/list.get.mjs.map +1 -1
  386. package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs +1 -0
  387. package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs.map +1 -1
  388. package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs +1 -0
  389. package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs.map +1 -1
  390. package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs +1 -0
  391. package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs.map +1 -1
  392. package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs +1 -0
  393. package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs.map +1 -1
  394. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id/preview.get.mjs +2 -1
  395. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id/preview.get.mjs.map +1 -1
  396. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.delete.mjs +2 -1
  397. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.delete.mjs.map +1 -1
  398. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs +2 -1
  399. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs.map +1 -1
  400. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.patch.mjs +2 -1
  401. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.patch.mjs.map +1 -1
  402. package/.output/server/chunks/routes/api/workshop/aml/entities/prune.post.mjs +1 -0
  403. package/.output/server/chunks/routes/api/workshop/aml/entities/prune.post.mjs.map +1 -1
  404. package/.output/server/chunks/routes/api/workshop/aml/env/recheck.post.mjs +2 -1
  405. package/.output/server/chunks/routes/api/workshop/aml/env/recheck.post.mjs.map +1 -1
  406. package/.output/server/chunks/routes/api/workshop/aml/env/uv.post.mjs +2 -1
  407. package/.output/server/chunks/routes/api/workshop/aml/env/uv.post.mjs.map +1 -1
  408. package/.output/server/chunks/routes/api/workshop/aml/env/venv.post.mjs +2 -1
  409. package/.output/server/chunks/routes/api/workshop/aml/env/venv.post.mjs.map +1 -1
  410. package/.output/server/chunks/routes/api/workshop/aml/index.get.mjs +2 -1
  411. package/.output/server/chunks/routes/api/workshop/aml/index.get.mjs.map +1 -1
  412. package/.output/server/chunks/routes/api/workshop/aml/index.post.mjs +2 -1
  413. package/.output/server/chunks/routes/api/workshop/aml/index.post.mjs.map +1 -1
  414. package/.output/server/chunks/routes/api/workshop/aml/index2.get.mjs +1 -0
  415. package/.output/server/chunks/routes/api/workshop/aml/index2.get.mjs.map +1 -1
  416. package/.output/server/chunks/routes/api/workshop/aml/index2.post.mjs +2 -1
  417. package/.output/server/chunks/routes/api/workshop/aml/index2.post.mjs.map +1 -1
  418. package/.output/server/chunks/routes/api/workshop/aml/index3.get.mjs +2 -1
  419. package/.output/server/chunks/routes/api/workshop/aml/index3.get.mjs.map +1 -1
  420. package/.output/server/chunks/routes/api/workshop/aml/index3.post.mjs +2 -1
  421. package/.output/server/chunks/routes/api/workshop/aml/index3.post.mjs.map +1 -1
  422. package/.output/server/chunks/routes/api/workshop/aml/index4.get.mjs +2 -1
  423. package/.output/server/chunks/routes/api/workshop/aml/index4.get.mjs.map +1 -1
  424. package/.output/server/chunks/routes/api/workshop/aml/index5.get.mjs +2 -1
  425. package/.output/server/chunks/routes/api/workshop/aml/index5.get.mjs.map +1 -1
  426. package/.output/server/chunks/routes/api/workshop/aml/index6.get.mjs +2 -1
  427. package/.output/server/chunks/routes/api/workshop/aml/index6.get.mjs.map +1 -1
  428. package/.output/server/chunks/routes/api/workshop/aml/index7.get.mjs +2 -1
  429. package/.output/server/chunks/routes/api/workshop/aml/index7.get.mjs.map +1 -1
  430. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/cancel.post.mjs +2 -1
  431. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/cancel.post.mjs.map +1 -1
  432. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/logs.get.mjs +2 -1
  433. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/logs.get.mjs.map +1 -1
  434. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/retry.post.mjs +2 -1
  435. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/retry.post.mjs.map +1 -1
  436. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.delete.mjs +2 -1
  437. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.delete.mjs.map +1 -1
  438. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.get.mjs +2 -1
  439. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.get.mjs.map +1 -1
  440. package/.output/server/chunks/routes/api/workshop/aml/models/_id/predict.post.mjs +2 -1
  441. package/.output/server/chunks/routes/api/workshop/aml/models/_id/predict.post.mjs.map +1 -1
  442. package/.output/server/chunks/routes/api/workshop/aml/models/_id/promote.post.mjs +2 -1
  443. package/.output/server/chunks/routes/api/workshop/aml/models/_id/promote.post.mjs.map +1 -1
  444. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.delete.mjs +3 -1
  445. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.delete.mjs.map +1 -1
  446. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs +2 -1
  447. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs.map +1 -1
  448. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id/train.post.mjs +2 -1
  449. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id/train.post.mjs.map +1 -1
  450. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.delete.mjs +2 -1
  451. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.delete.mjs.map +1 -1
  452. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.patch.mjs +2 -1
  453. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.patch.mjs.map +1 -1
  454. package/.output/server/chunks/routes/api/workshop/aml/twin/providers.get.mjs +2 -1
  455. package/.output/server/chunks/routes/api/workshop/aml/twin/providers.get.mjs.map +1 -1
  456. package/.output/server/chunks/routes/api/workshop/analysis/_id_.delete.mjs +2 -1
  457. package/.output/server/chunks/routes/api/workshop/analysis/_id_.delete.mjs.map +1 -1
  458. package/.output/server/chunks/routes/api/workshop/analysis/_id_.get.mjs +2 -1
  459. package/.output/server/chunks/routes/api/workshop/analysis/_id_.get.mjs.map +1 -1
  460. package/.output/server/chunks/routes/api/workshop/analysis/_id_.patch.mjs +2 -1
  461. package/.output/server/chunks/routes/api/workshop/analysis/_id_.patch.mjs.map +1 -1
  462. package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs +2 -1
  463. package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs.map +1 -1
  464. package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs +1 -0
  465. package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs.map +1 -1
  466. package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs +1 -0
  467. package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs.map +1 -1
  468. package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs +1 -0
  469. package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs.map +1 -1
  470. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +2 -1
  471. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs.map +1 -1
  472. package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs +1 -0
  473. package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs.map +1 -1
  474. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +2 -1
  475. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs.map +1 -1
  476. package/.output/server/chunks/routes/api/workshop/audit.get.mjs +1 -0
  477. package/.output/server/chunks/routes/api/workshop/audit.get.mjs.map +1 -1
  478. package/.output/server/chunks/routes/api/workshop/caller.mjs +1 -0
  479. package/.output/server/chunks/routes/api/workshop/caller.mjs.map +1 -1
  480. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +3 -2
  481. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs.map +1 -1
  482. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs +1 -0
  483. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs.map +1 -1
  484. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs +1 -0
  485. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs.map +1 -1
  486. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs +1 -0
  487. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs.map +1 -1
  488. package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs +1 -0
  489. package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs.map +1 -1
  490. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +2 -1
  491. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs.map +1 -1
  492. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs +1 -0
  493. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs.map +1 -1
  494. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs +1 -0
  495. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs.map +1 -1
  496. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs +1 -0
  497. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs.map +1 -1
  498. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs +1 -0
  499. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs.map +1 -1
  500. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs +1 -0
  501. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs.map +1 -1
  502. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs +1 -0
  503. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs.map +1 -1
  504. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs +1 -0
  505. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs.map +1 -1
  506. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/rotate-token.post.mjs +57 -0
  507. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/rotate-token.post.mjs.map +1 -0
  508. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs +1 -0
  509. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs.map +1 -1
  510. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs +1 -0
  511. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs.map +1 -1
  512. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs +1 -0
  513. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs.map +1 -1
  514. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.get.mjs +1 -0
  515. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.get.mjs.map +1 -1
  516. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.post.mjs +2 -1
  517. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.post.mjs.map +1 -1
  518. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/messages/_messageId/read.post.mjs +1 -0
  519. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/messages/_messageId/read.post.mjs.map +1 -1
  520. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/permissions.get.mjs +1 -0
  521. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/permissions.get.mjs.map +1 -1
  522. package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs +1 -0
  523. package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs.map +1 -1
  524. package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs +1 -0
  525. package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs.map +1 -1
  526. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +2 -1
  527. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs.map +1 -1
  528. package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs +2 -1
  529. package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs.map +1 -1
  530. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs +1 -0
  531. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs.map +1 -1
  532. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs +1 -0
  533. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs.map +1 -1
  534. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.put.mjs +2 -1
  535. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.put.mjs.map +1 -1
  536. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs +1 -0
  537. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs.map +1 -1
  538. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +2 -1
  539. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs.map +1 -1
  540. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +1 -0
  541. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs.map +1 -1
  542. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +2 -1
  543. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs.map +1 -1
  544. package/.output/server/chunks/routes/api/workshop/channels/_id/index5.get.mjs +2 -1
  545. package/.output/server/chunks/routes/api/workshop/channels/_id/index5.get.mjs.map +1 -1
  546. package/.output/server/chunks/routes/api/workshop/channels/_id/index6.get.mjs +1 -0
  547. package/.output/server/chunks/routes/api/workshop/channels/_id/index6.get.mjs.map +1 -1
  548. package/.output/server/chunks/routes/api/workshop/channels/_id/index7.get.mjs +1 -0
  549. package/.output/server/chunks/routes/api/workshop/channels/_id/index7.get.mjs.map +1 -1
  550. package/.output/server/chunks/routes/api/workshop/channels/_id/line.put.mjs +2 -1
  551. package/.output/server/chunks/routes/api/workshop/channels/_id/line.put.mjs.map +1 -1
  552. package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId/approve.post.mjs +1 -0
  553. package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId/approve.post.mjs.map +1 -1
  554. package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId_.delete.mjs +1 -0
  555. package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId_.delete.mjs.map +1 -1
  556. package/.output/server/chunks/routes/api/workshop/channels/_id/members/join.post.mjs +2 -1
  557. package/.output/server/chunks/routes/api/workshop/channels/_id/members/join.post.mjs.map +1 -1
  558. package/.output/server/chunks/routes/api/workshop/channels/_id/members/leave.post.mjs +1 -0
  559. package/.output/server/chunks/routes/api/workshop/channels/_id/members/leave.post.mjs.map +1 -1
  560. package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs +1 -0
  561. package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs.map +1 -1
  562. package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs +1 -0
  563. package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs.map +1 -1
  564. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +2 -1
  565. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs.map +1 -1
  566. package/.output/server/chunks/routes/api/workshop/channels/_id/tools/reset.post.mjs +2 -1
  567. package/.output/server/chunks/routes/api/workshop/channels/_id/tools/reset.post.mjs.map +1 -1
  568. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.get.mjs +2 -1
  569. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.get.mjs.map +1 -1
  570. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.patch.mjs +2 -1
  571. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.patch.mjs.map +1 -1
  572. package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs +1 -0
  573. package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs.map +1 -1
  574. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +2 -1
  575. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs.map +1 -1
  576. package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs +1 -0
  577. package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs.map +1 -1
  578. package/.output/server/chunks/routes/api/workshop/channels.get.mjs +1 -0
  579. package/.output/server/chunks/routes/api/workshop/channels.get.mjs.map +1 -1
  580. package/.output/server/chunks/routes/api/workshop/channels.post.mjs +8 -7
  581. package/.output/server/chunks/routes/api/workshop/channels.post.mjs.map +1 -1
  582. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +2 -1
  583. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs.map +1 -1
  584. package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs +2 -1
  585. package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs.map +1 -1
  586. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs +2 -1
  587. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs.map +1 -1
  588. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs +2 -1
  589. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs.map +1 -1
  590. package/.output/server/chunks/routes/api/workshop/daq/_id/ingest.post.mjs +58 -10
  591. package/.output/server/chunks/routes/api/workshop/daq/_id/ingest.post.mjs.map +1 -1
  592. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +2 -1
  593. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs.map +1 -1
  594. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +2 -1
  595. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs.map +1 -1
  596. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +2 -1
  597. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs.map +1 -1
  598. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +2 -1
  599. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs.map +1 -1
  600. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs +2 -1
  601. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs.map +1 -1
  602. package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs +2 -1
  603. package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs.map +1 -1
  604. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +2 -1
  605. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs.map +1 -1
  606. package/.output/server/chunks/routes/api/workshop/daq/export/_id_.get.mjs +2 -1
  607. package/.output/server/chunks/routes/api/workshop/daq/export/_id_.get.mjs.map +1 -1
  608. package/.output/server/chunks/routes/api/workshop/daq/export-file.get.mjs +1 -0
  609. package/.output/server/chunks/routes/api/workshop/daq/export-file.get.mjs.map +1 -1
  610. package/.output/server/chunks/routes/api/workshop/daq/index.get.mjs +1 -0
  611. package/.output/server/chunks/routes/api/workshop/daq/index.get.mjs.map +1 -1
  612. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +1 -0
  613. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs.map +1 -1
  614. package/.output/server/chunks/routes/api/workshop/daq/index2.post.mjs +2 -1
  615. package/.output/server/chunks/routes/api/workshop/daq/index2.post.mjs.map +1 -1
  616. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +2 -1
  617. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs.map +1 -1
  618. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +2 -1
  619. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs.map +1 -1
  620. package/.output/server/chunks/routes/api/workshop/daq/query.get.mjs +1 -0
  621. package/.output/server/chunks/routes/api/workshop/daq/query.get.mjs.map +1 -1
  622. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +2 -1
  623. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs.map +1 -1
  624. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +2 -1
  625. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs.map +1 -1
  626. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +2 -1
  627. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs.map +1 -1
  628. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +2 -1
  629. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs.map +1 -1
  630. package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs +2 -1
  631. package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs.map +1 -1
  632. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +2 -1
  633. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs.map +1 -1
  634. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +2 -1
  635. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs.map +1 -1
  636. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +2 -1
  637. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs.map +1 -1
  638. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +2 -1
  639. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs.map +1 -1
  640. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +2 -1
  641. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs.map +1 -1
  642. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +2 -1
  643. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs.map +1 -1
  644. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +2 -1
  645. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs.map +1 -1
  646. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +2 -1
  647. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs.map +1 -1
  648. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +2 -1
  649. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs.map +1 -1
  650. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +2 -1
  651. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs.map +1 -1
  652. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +2 -1
  653. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs.map +1 -1
  654. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +2 -1
  655. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs.map +1 -1
  656. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +2 -1
  657. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs.map +1 -1
  658. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +2 -1
  659. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs.map +1 -1
  660. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +2 -1
  661. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs.map +1 -1
  662. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +2 -1
  663. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs.map +1 -1
  664. package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs +2 -1
  665. package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs.map +1 -1
  666. package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs +2 -1
  667. package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs.map +1 -1
  668. package/.output/server/chunks/routes/api/workshop/dcw/index7.get.mjs +2 -1
  669. package/.output/server/chunks/routes/api/workshop/dcw/index7.get.mjs.map +1 -1
  670. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +2 -1
  671. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs.map +1 -1
  672. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +2 -1
  673. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs.map +1 -1
  674. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +2 -1
  675. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs.map +1 -1
  676. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +2 -1
  677. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs.map +1 -1
  678. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +2 -1
  679. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs.map +1 -1
  680. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs +2 -1
  681. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs.map +1 -1
  682. package/.output/server/chunks/routes/api/workshop/dcw/mes-artifacts/file.get.mjs +2 -1
  683. package/.output/server/chunks/routes/api/workshop/dcw/mes-artifacts/file.get.mjs.map +1 -1
  684. package/.output/server/chunks/routes/api/workshop/dcw/mes-hook-test.post.mjs +2 -1
  685. package/.output/server/chunks/routes/api/workshop/dcw/mes-hook-test.post.mjs.map +1 -1
  686. package/.output/server/chunks/routes/api/workshop/dcw/mes-test-read.post.mjs +2 -1
  687. package/.output/server/chunks/routes/api/workshop/dcw/mes-test-read.post.mjs.map +1 -1
  688. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +2 -1
  689. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs.map +1 -1
  690. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +2 -1
  691. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs.map +1 -1
  692. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +2 -1
  693. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs.map +1 -1
  694. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +2 -1
  695. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs.map +1 -1
  696. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs +2 -1
  697. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs.map +1 -1
  698. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs +2 -1
  699. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs.map +1 -1
  700. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs +2 -1
  701. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs.map +1 -1
  702. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs +2 -1
  703. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs.map +1 -1
  704. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +2 -1
  705. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs.map +1 -1
  706. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +2 -1
  707. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs.map +1 -1
  708. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +2 -1
  709. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs.map +1 -1
  710. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +2 -1
  711. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs.map +1 -1
  712. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs +2 -1
  713. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs.map +1 -1
  714. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +2 -1
  715. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs.map +1 -1
  716. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs +2 -1
  717. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs.map +1 -1
  718. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +2 -1
  719. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs.map +1 -1
  720. package/.output/server/chunks/routes/api/workshop/dcw/recipes/index.patch.mjs +2 -1
  721. package/.output/server/chunks/routes/api/workshop/dcw/recipes/index.patch.mjs.map +1 -1
  722. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +2 -1
  723. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs.map +1 -1
  724. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +2 -1
  725. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs.map +1 -1
  726. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +2 -1
  727. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs.map +1 -1
  728. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +2 -1
  729. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs.map +1 -1
  730. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +2 -1
  731. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs.map +1 -1
  732. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +2 -1
  733. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs.map +1 -1
  734. package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs +2 -1
  735. package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs.map +1 -1
  736. package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs +2 -1
  737. package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs.map +1 -1
  738. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +2 -1
  739. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs.map +1 -1
  740. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +2 -1
  741. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs.map +1 -1
  742. package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.delete.mjs +1 -0
  743. package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.delete.mjs.map +1 -1
  744. package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.get.mjs +1 -0
  745. package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.get.mjs.map +1 -1
  746. package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.patch.mjs +1 -0
  747. package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.patch.mjs.map +1 -1
  748. package/.output/server/chunks/routes/api/workshop/eda/commonality.get.mjs +2 -1
  749. package/.output/server/chunks/routes/api/workshop/eda/commonality.get.mjs.map +1 -1
  750. package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.delete.mjs +1 -0
  751. package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.delete.mjs.map +1 -1
  752. package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.get.mjs +1 -0
  753. package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.get.mjs.map +1 -1
  754. package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.patch.mjs +1 -0
  755. package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.patch.mjs.map +1 -1
  756. package/.output/server/chunks/routes/api/workshop/eda/features/jobs.get.mjs +1 -0
  757. package/.output/server/chunks/routes/api/workshop/eda/features/jobs.get.mjs.map +1 -1
  758. package/.output/server/chunks/routes/api/workshop/eda/features/run.post.mjs +2 -1
  759. package/.output/server/chunks/routes/api/workshop/eda/features/run.post.mjs.map +1 -1
  760. package/.output/server/chunks/routes/api/workshop/eda/golden/_id_.delete.mjs +1 -0
  761. package/.output/server/chunks/routes/api/workshop/eda/golden/_id_.delete.mjs.map +1 -1
  762. package/.output/server/chunks/routes/api/workshop/eda/golden/deviation.get.mjs +1 -0
  763. package/.output/server/chunks/routes/api/workshop/eda/golden/deviation.get.mjs.map +1 -1
  764. package/.output/server/chunks/routes/api/workshop/eda/golden/single.get.mjs +1 -0
  765. package/.output/server/chunks/routes/api/workshop/eda/golden/single.get.mjs.map +1 -1
  766. package/.output/server/chunks/routes/api/workshop/eda/index.get.mjs +1 -0
  767. package/.output/server/chunks/routes/api/workshop/eda/index.get.mjs.map +1 -1
  768. package/.output/server/chunks/routes/api/workshop/eda/index.post.mjs +1 -0
  769. package/.output/server/chunks/routes/api/workshop/eda/index.post.mjs.map +1 -1
  770. package/.output/server/chunks/routes/api/workshop/eda/index2.get.mjs +1 -0
  771. package/.output/server/chunks/routes/api/workshop/eda/index2.get.mjs.map +1 -1
  772. package/.output/server/chunks/routes/api/workshop/eda/index2.post.mjs +1 -0
  773. package/.output/server/chunks/routes/api/workshop/eda/index2.post.mjs.map +1 -1
  774. package/.output/server/chunks/routes/api/workshop/eda/index3.get.mjs +2 -1
  775. package/.output/server/chunks/routes/api/workshop/eda/index3.get.mjs.map +1 -1
  776. package/.output/server/chunks/routes/api/workshop/eda/index3.post.mjs +1 -0
  777. package/.output/server/chunks/routes/api/workshop/eda/index3.post.mjs.map +1 -1
  778. package/.output/server/chunks/routes/api/workshop/eda/index4.get.mjs +1 -0
  779. package/.output/server/chunks/routes/api/workshop/eda/index4.get.mjs.map +1 -1
  780. package/.output/server/chunks/routes/api/workshop/eda/index4.post.mjs +1 -0
  781. package/.output/server/chunks/routes/api/workshop/eda/index4.post.mjs.map +1 -1
  782. package/.output/server/chunks/routes/api/workshop/eda/index5.get.mjs +1 -0
  783. package/.output/server/chunks/routes/api/workshop/eda/index5.get.mjs.map +1 -1
  784. package/.output/server/chunks/routes/api/workshop/eda/index5.post.mjs +1 -0
  785. package/.output/server/chunks/routes/api/workshop/eda/index5.post.mjs.map +1 -1
  786. package/.output/server/chunks/routes/api/workshop/eda/index6.get.mjs +2 -1
  787. package/.output/server/chunks/routes/api/workshop/eda/index6.get.mjs.map +1 -1
  788. package/.output/server/chunks/routes/api/workshop/eda/index6.post.mjs +2 -1
  789. package/.output/server/chunks/routes/api/workshop/eda/index6.post.mjs.map +1 -1
  790. package/.output/server/chunks/routes/api/workshop/eda/index7.get.mjs +1 -0
  791. package/.output/server/chunks/routes/api/workshop/eda/index7.get.mjs.map +1 -1
  792. package/.output/server/chunks/routes/api/workshop/eda/index7.post.mjs +1 -0
  793. package/.output/server/chunks/routes/api/workshop/eda/index7.post.mjs.map +1 -1
  794. package/.output/server/chunks/routes/api/workshop/eda/ocap/_id_.get.mjs +1 -0
  795. package/.output/server/chunks/routes/api/workshop/eda/ocap/_id_.get.mjs.map +1 -1
  796. package/.output/server/chunks/routes/api/workshop/eda/ocap/_id_.patch.mjs +1 -0
  797. package/.output/server/chunks/routes/api/workshop/eda/ocap/_id_.patch.mjs.map +1 -1
  798. package/.output/server/chunks/routes/api/workshop/eda/runs/_id/labels.patch.mjs +2 -1
  799. package/.output/server/chunks/routes/api/workshop/eda/runs/_id/labels.patch.mjs.map +1 -1
  800. package/.output/server/chunks/routes/api/workshop/eda/runs.get.mjs +2 -1
  801. package/.output/server/chunks/routes/api/workshop/eda/runs.get.mjs.map +1 -1
  802. package/.output/server/chunks/routes/api/workshop/eda/spc/_id/recompute.post.mjs +1 -0
  803. package/.output/server/chunks/routes/api/workshop/eda/spc/_id/recompute.post.mjs.map +1 -1
  804. package/.output/server/chunks/routes/api/workshop/eda/spc/_id_.delete.mjs +1 -0
  805. package/.output/server/chunks/routes/api/workshop/eda/spc/_id_.delete.mjs.map +1 -1
  806. package/.output/server/chunks/routes/api/workshop/eda/spc/_id_.get.mjs +1 -0
  807. package/.output/server/chunks/routes/api/workshop/eda/spc/_id_.get.mjs.map +1 -1
  808. package/.output/server/chunks/routes/api/workshop/eda/vm/predict.post.mjs +2 -1
  809. package/.output/server/chunks/routes/api/workshop/eda/vm/predict.post.mjs.map +1 -1
  810. package/.output/server/chunks/routes/api/workshop/exp/confirmations/_id/decide.post.mjs +2 -1
  811. package/.output/server/chunks/routes/api/workshop/exp/confirmations/_id/decide.post.mjs.map +1 -1
  812. package/.output/server/chunks/routes/api/workshop/exp/index.get.mjs +2 -1
  813. package/.output/server/chunks/routes/api/workshop/exp/index.get.mjs.map +1 -1
  814. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs +2 -1
  815. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs.map +1 -1
  816. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +2 -1
  817. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs.map +1 -1
  818. package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +2 -1
  819. package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs.map +1 -1
  820. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +2 -1
  821. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs.map +1 -1
  822. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +2 -1
  823. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs.map +1 -1
  824. package/.output/server/chunks/routes/api/workshop/index.get.mjs +1 -0
  825. package/.output/server/chunks/routes/api/workshop/index.get.mjs.map +1 -1
  826. package/.output/server/chunks/routes/api/workshop/index.mjs +62 -0
  827. package/.output/server/chunks/routes/api/workshop/index.mjs.map +1 -0
  828. package/.output/server/chunks/routes/api/workshop/index.post.mjs +1 -0
  829. package/.output/server/chunks/routes/api/workshop/index.post.mjs.map +1 -1
  830. package/.output/server/chunks/routes/api/workshop/index.put.mjs +2 -1
  831. package/.output/server/chunks/routes/api/workshop/index.put.mjs.map +1 -1
  832. package/.output/server/chunks/routes/api/workshop/index10.get.mjs +2 -1
  833. package/.output/server/chunks/routes/api/workshop/index10.get.mjs.map +1 -1
  834. package/.output/server/chunks/routes/api/workshop/index11.get.mjs +2 -1
  835. package/.output/server/chunks/routes/api/workshop/index11.get.mjs.map +1 -1
  836. package/.output/server/chunks/routes/api/workshop/index12.get.mjs +2 -1
  837. package/.output/server/chunks/routes/api/workshop/index12.get.mjs.map +1 -1
  838. package/.output/server/chunks/routes/api/workshop/index13.get.mjs +1 -0
  839. package/.output/server/chunks/routes/api/workshop/index13.get.mjs.map +1 -1
  840. package/.output/server/chunks/routes/api/workshop/index14.get.mjs +1 -0
  841. package/.output/server/chunks/routes/api/workshop/index14.get.mjs.map +1 -1
  842. package/.output/server/chunks/routes/api/workshop/index15.get.mjs +1 -0
  843. package/.output/server/chunks/routes/api/workshop/index15.get.mjs.map +1 -1
  844. package/.output/server/chunks/routes/api/workshop/index16.get.mjs +1 -0
  845. package/.output/server/chunks/routes/api/workshop/index16.get.mjs.map +1 -1
  846. package/.output/server/chunks/routes/api/workshop/index2.get.mjs +2 -1
  847. package/.output/server/chunks/routes/api/workshop/index2.get.mjs.map +1 -1
  848. package/.output/server/chunks/routes/api/workshop/index2.post.mjs +1 -0
  849. package/.output/server/chunks/routes/api/workshop/index2.post.mjs.map +1 -1
  850. package/.output/server/chunks/routes/api/workshop/index3.get.mjs +2 -1
  851. package/.output/server/chunks/routes/api/workshop/index3.get.mjs.map +1 -1
  852. package/.output/server/chunks/routes/api/workshop/index3.post.mjs +2 -1
  853. package/.output/server/chunks/routes/api/workshop/index3.post.mjs.map +1 -1
  854. package/.output/server/chunks/routes/api/workshop/index4.get.mjs +1 -0
  855. package/.output/server/chunks/routes/api/workshop/index4.get.mjs.map +1 -1
  856. package/.output/server/chunks/routes/api/workshop/index4.post.mjs +2 -1
  857. package/.output/server/chunks/routes/api/workshop/index4.post.mjs.map +1 -1
  858. package/.output/server/chunks/routes/api/workshop/index5.get.mjs +1 -0
  859. package/.output/server/chunks/routes/api/workshop/index5.get.mjs.map +1 -1
  860. package/.output/server/chunks/routes/api/workshop/index5.post.mjs +2 -1
  861. package/.output/server/chunks/routes/api/workshop/index5.post.mjs.map +1 -1
  862. package/.output/server/chunks/routes/api/workshop/index6.get.mjs +2 -1
  863. package/.output/server/chunks/routes/api/workshop/index6.get.mjs.map +1 -1
  864. package/.output/server/chunks/routes/api/workshop/index6.post.mjs +2 -1
  865. package/.output/server/chunks/routes/api/workshop/index6.post.mjs.map +1 -1
  866. package/.output/server/chunks/routes/api/workshop/index7.get.mjs +2 -1
  867. package/.output/server/chunks/routes/api/workshop/index7.get.mjs.map +1 -1
  868. package/.output/server/chunks/routes/api/workshop/index7.post.mjs +1 -0
  869. package/.output/server/chunks/routes/api/workshop/index7.post.mjs.map +1 -1
  870. package/.output/server/chunks/routes/api/workshop/index8.get.mjs +2 -1
  871. package/.output/server/chunks/routes/api/workshop/index8.get.mjs.map +1 -1
  872. package/.output/server/chunks/routes/api/workshop/index8.post.mjs +1 -0
  873. package/.output/server/chunks/routes/api/workshop/index8.post.mjs.map +1 -1
  874. package/.output/server/chunks/routes/api/workshop/index9.get.mjs +1 -0
  875. package/.output/server/chunks/routes/api/workshop/index9.get.mjs.map +1 -1
  876. package/.output/server/chunks/routes/api/workshop/index9.post.mjs +1 -0
  877. package/.output/server/chunks/routes/api/workshop/index9.post.mjs.map +1 -1
  878. package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs +1 -0
  879. package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs.map +1 -1
  880. package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs +1 -0
  881. package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs.map +1 -1
  882. package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs +1 -0
  883. package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs.map +1 -1
  884. package/.output/server/chunks/routes/api/workshop/mes/datasets.get.mjs +2 -1
  885. package/.output/server/chunks/routes/api/workshop/mes/datasets.get.mjs.map +1 -1
  886. package/.output/server/chunks/routes/api/workshop/mes/points.get.mjs +1 -0
  887. package/.output/server/chunks/routes/api/workshop/mes/points.get.mjs.map +1 -1
  888. package/.output/server/chunks/routes/api/workshop/mes/preview.post.mjs +2 -1
  889. package/.output/server/chunks/routes/api/workshop/mes/preview.post.mjs.map +1 -1
  890. package/.output/server/chunks/routes/api/workshop/notifications/read.post.mjs +1 -0
  891. package/.output/server/chunks/routes/api/workshop/notifications/read.post.mjs.map +1 -1
  892. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/compile.mjs +54 -0
  893. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/compile.mjs.map +1 -0
  894. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/evidence.mjs +51 -0
  895. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/evidence.mjs.map +1 -0
  896. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/publish.mjs +67 -0
  897. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/publish.mjs.map +1 -0
  898. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/approval-decision.mjs +49 -0
  899. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/approval-decision.mjs.map +1 -0
  900. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/approval.mjs +35 -0
  901. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/approval.mjs.map +1 -0
  902. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/transition.mjs +49 -0
  903. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/transition.mjs.map +1 -0
  904. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/validate.mjs +35 -0
  905. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/validate.mjs.map +1 -0
  906. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId_.mjs +70 -0
  907. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId_.mjs.map +1 -0
  908. package/.output/server/chunks/routes/api/workshop/ontology/export/_ontologyId_.mjs +64 -0
  909. package/.output/server/chunks/routes/api/workshop/ontology/export/_ontologyId_.mjs.map +1 -0
  910. package/.output/server/chunks/routes/api/workshop/ontology/index.mjs +44 -0
  911. package/.output/server/chunks/routes/api/workshop/ontology/index.mjs.map +1 -0
  912. package/.output/server/chunks/routes/api/workshop/ontology/scene.mjs +36 -0
  913. package/.output/server/chunks/routes/api/workshop/ontology/scene.mjs.map +1 -0
  914. package/.output/server/chunks/routes/api/workshop/ontology/traces/_ontologyId_.mjs +38 -0
  915. package/.output/server/chunks/routes/api/workshop/ontology/traces/_ontologyId_.mjs.map +1 -0
  916. package/.output/server/chunks/routes/api/workshop/ontology/versions/_ontologyId/compare.mjs +40 -0
  917. package/.output/server/chunks/routes/api/workshop/ontology/versions/_ontologyId/compare.mjs.map +1 -0
  918. package/.output/server/chunks/routes/api/workshop/ontology/versions/_ontologyId_.mjs +63 -0
  919. package/.output/server/chunks/routes/api/workshop/ontology/versions/_ontologyId_.mjs.map +1 -0
  920. package/.output/server/chunks/routes/api/workshop/optimization/bindings/_id_.delete.mjs +35 -0
  921. package/.output/server/chunks/routes/api/workshop/optimization/bindings/_id_.delete.mjs.map +1 -0
  922. package/.output/server/chunks/routes/api/workshop/optimization/capabilities.get.mjs +38 -0
  923. package/.output/server/chunks/routes/api/workshop/optimization/capabilities.get.mjs.map +1 -0
  924. package/.output/server/chunks/routes/api/workshop/optimization/index.get.mjs +58 -0
  925. package/.output/server/chunks/routes/api/workshop/optimization/index.get.mjs.map +1 -0
  926. package/.output/server/chunks/routes/api/workshop/optimization/index.mjs +66 -0
  927. package/.output/server/chunks/routes/api/workshop/optimization/index.mjs.map +1 -0
  928. package/.output/server/chunks/routes/api/workshop/optimization/index2.mjs +60 -0
  929. package/.output/server/chunks/routes/api/workshop/optimization/index2.mjs.map +1 -0
  930. package/.output/server/chunks/routes/api/workshop/optimization/profiles/_id/publish.post.mjs +61 -0
  931. package/.output/server/chunks/routes/api/workshop/optimization/profiles/_id/publish.post.mjs.map +1 -0
  932. package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/crosscheck.post.mjs +52 -0
  933. package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/crosscheck.post.mjs.map +1 -0
  934. package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/dispatch.post.mjs +52 -0
  935. package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/dispatch.post.mjs.map +1 -0
  936. package/.output/server/chunks/routes/api/workshop/optimization/solve.post.mjs +41 -0
  937. package/.output/server/chunks/routes/api/workshop/optimization/solve.post.mjs.map +1 -0
  938. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +2 -1
  939. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs.map +1 -1
  940. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +2 -1
  941. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs.map +1 -1
  942. package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs +1 -0
  943. package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs.map +1 -1
  944. package/.output/server/chunks/routes/api/workshop/process-model/datasets.post.mjs +167 -0
  945. package/.output/server/chunks/routes/api/workshop/process-model/datasets.post.mjs.map +1 -0
  946. package/.output/server/chunks/routes/api/workshop/process-model/eligibility.mjs +122 -0
  947. package/.output/server/chunks/routes/api/workshop/process-model/eligibility.mjs.map +1 -0
  948. package/.output/server/chunks/routes/api/workshop/process-model/experiments.mjs +119 -0
  949. package/.output/server/chunks/routes/api/workshop/process-model/experiments.mjs.map +1 -0
  950. package/.output/server/chunks/routes/api/workshop/process-model/index.mjs +55 -0
  951. package/.output/server/chunks/routes/api/workshop/process-model/index.mjs.map +1 -0
  952. package/.output/server/chunks/routes/api/workshop/process-model/specs/_id/publish.post.mjs +48 -0
  953. package/.output/server/chunks/routes/api/workshop/process-model/specs/_id/publish.post.mjs.map +1 -0
  954. package/.output/server/chunks/routes/api/workshop/process-model/train.post.mjs +58 -0
  955. package/.output/server/chunks/routes/api/workshop/process-model/train.post.mjs.map +1 -0
  956. package/.output/server/chunks/routes/api/workshop/runtime.get.mjs +1 -0
  957. package/.output/server/chunks/routes/api/workshop/runtime.get.mjs.map +1 -1
  958. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +2 -1
  959. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs.map +1 -1
  960. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +2 -1
  961. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs.map +1 -1
  962. package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs +1 -0
  963. package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs.map +1 -1
  964. package/.output/server/chunks/routes/api/workshop/schedules/_id/run.post.mjs +1 -0
  965. package/.output/server/chunks/routes/api/workshop/schedules/_id/run.post.mjs.map +1 -1
  966. package/.output/server/chunks/routes/api/workshop/schedules/_id/runs.get.mjs +1 -0
  967. package/.output/server/chunks/routes/api/workshop/schedules/_id/runs.get.mjs.map +1 -1
  968. package/.output/server/chunks/routes/api/workshop/schedules/_id_.delete.mjs +1 -0
  969. package/.output/server/chunks/routes/api/workshop/schedules/_id_.delete.mjs.map +1 -1
  970. package/.output/server/chunks/routes/api/workshop/schedules/_id_.get.mjs +1 -0
  971. package/.output/server/chunks/routes/api/workshop/schedules/_id_.get.mjs.map +1 -1
  972. package/.output/server/chunks/routes/api/workshop/schedules/_id_.patch.mjs +1 -0
  973. package/.output/server/chunks/routes/api/workshop/schedules/_id_.patch.mjs.map +1 -1
  974. package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs +1 -0
  975. package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs.map +1 -1
  976. package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs +1 -0
  977. package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs.map +1 -1
  978. package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs +1 -0
  979. package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs.map +1 -1
  980. package/.output/server/chunks/routes/api/workshop/tasks/_id/reassign.post.mjs +1 -0
  981. package/.output/server/chunks/routes/api/workshop/tasks/_id/reassign.post.mjs.map +1 -1
  982. package/.output/server/chunks/routes/api/workshop/tasks/_id/reopen.post.mjs +1 -0
  983. package/.output/server/chunks/routes/api/workshop/tasks/_id/reopen.post.mjs.map +1 -1
  984. package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs +1 -0
  985. package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs.map +1 -1
  986. package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs +1 -0
  987. package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs.map +1 -1
  988. package/.output/server/chunks/routes/api/workshop/tasks/_id/update.post.mjs +1 -0
  989. package/.output/server/chunks/routes/api/workshop/tasks/_id/update.post.mjs.map +1 -1
  990. package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs +1 -0
  991. package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs.map +1 -1
  992. package/.output/server/chunks/routes/api/workshop/tasks.get.mjs +1 -0
  993. package/.output/server/chunks/routes/api/workshop/tasks.get.mjs.map +1 -1
  994. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +2 -1
  995. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs.map +1 -1
  996. package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs +1 -0
  997. package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs.map +1 -1
  998. package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs +1 -0
  999. package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs.map +1 -1
  1000. package/.output/server/chunks/routes/api/workshop/teams/_id/index.put.mjs +2 -1
  1001. package/.output/server/chunks/routes/api/workshop/teams/_id/index.put.mjs.map +1 -1
  1002. package/.output/server/chunks/routes/api/workshop/teams/_id/index2.get.mjs +2 -1
  1003. package/.output/server/chunks/routes/api/workshop/teams/_id/index2.get.mjs.map +1 -1
  1004. package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs +1 -0
  1005. package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs.map +1 -1
  1006. package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs +1 -0
  1007. package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs.map +1 -1
  1008. package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs +1 -0
  1009. package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs.map +1 -1
  1010. package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs +1 -0
  1011. package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs.map +1 -1
  1012. package/.output/server/chunks/routes/api/workshop/tools/_name_.get.mjs +2 -1
  1013. package/.output/server/chunks/routes/api/workshop/tools/_name_.get.mjs.map +1 -1
  1014. package/.output/server/chunks/routes/api/workshop/tools/sync.post.mjs +2 -1
  1015. package/.output/server/chunks/routes/api/workshop/tools/sync.post.mjs.map +1 -1
  1016. package/.output/server/chunks/routes/api/workshop/users/me.get.mjs +1 -0
  1017. package/.output/server/chunks/routes/api/workshop/users/me.get.mjs.map +1 -1
  1018. package/.output/server/chunks/routes/api/workshop/users/register.post.mjs +1 -0
  1019. package/.output/server/chunks/routes/api/workshop/users/register.post.mjs.map +1 -1
  1020. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +3 -2
  1021. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs.map +1 -1
  1022. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs +1 -0
  1023. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs.map +1 -1
  1024. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs +1 -0
  1025. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs.map +1 -1
  1026. package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs +1 -0
  1027. package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs.map +1 -1
  1028. package/.output/server/chunks/routes/renderer.mjs +2 -2
  1029. package/.output/server/chunks/virtual/entry.mjs +455 -11
  1030. package/.output/server/chunks/virtual/entry.mjs.map +1 -1
  1031. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  1032. package/.output/server/index.mjs +1 -0
  1033. package/.output/server/index.mjs.map +1 -1
  1034. package/.output/server/package.json +1 -1
  1035. package/README-zh.md +38 -10
  1036. package/README.md +37 -8
  1037. package/app/components/AppSidebar.vue +2 -0
  1038. package/app/components/AwChart.vue +21 -2
  1039. package/app/components/data/DataMirrorPanel.vue +1 -1
  1040. package/app/composables/workshop/event-blocks/constants.ts +99 -94
  1041. package/app/composables/workshop/operation-events.ts +1 -1
  1042. package/app/composables/workshop/useWorkshopApi.ts +2 -1
  1043. package/app/pages/ontology/api.ts +18 -0
  1044. package/app/pages/ontology/index.vue +779 -0
  1045. package/app/pages/ontology/types.ts +122 -0
  1046. package/app/pages/optimizer/api.ts +21 -0
  1047. package/app/pages/optimizer/index.vue +669 -0
  1048. package/app/pages/studio/board.vue +18 -13
  1049. package/app/pages/studio/index.vue +6 -33
  1050. package/app/utils/chart-trend.ts +97 -0
  1051. package/config.yml +14 -1
  1052. package/docs/cli.en.md +4 -4
  1053. package/docs/cli.md +4 -4
  1054. package/docs/plugins.en.md +1 -1
  1055. package/docs/plugins.md +1 -1
  1056. package/docs/sdk.en.md +1 -1
  1057. package/docs/sdk.md +1 -1
  1058. package/i18n/locales/en.ts +159 -0
  1059. package/i18n/locales/zh-CN.ts +159 -0
  1060. package/mcp/aw-mcp-server.mjs +35 -1
  1061. package/nuxt.config.ts +14 -0
  1062. package/package.json +3 -1
  1063. package/scripts/_audit/eda-ui-fix-acceptance.mjs +212 -0
  1064. package/scripts/_i18n-verify-keys.mjs +52 -50
  1065. package/scripts/acceptance-optimizer-process-model.mjs +9 -0
  1066. package/scripts/acceptance-optimizer-process-model.ts +863 -0
  1067. package/scripts/agent-binding-matrix-e2e.mjs +240 -0
  1068. package/scripts/docs-shots.mjs +36 -0
  1069. package/scripts/e2e-model-loop-live.mjs +731 -0
  1070. package/scripts/e2e-ontology-live.mjs +774 -0
  1071. package/scripts/e2e-ontology.mjs +328 -0
  1072. package/scripts/e2e-optimizer-live.mjs +1342 -0
  1073. package/scripts/e2e-optimizer-plc.mjs +222 -0
  1074. package/scripts/e2e-optimizer-restart.mjs +125 -0
  1075. package/scripts/e2e-plc-excite.mjs +75 -0
  1076. package/scripts/e2e-simulator-optimizer.mjs +262 -0
  1077. package/scripts/e2e-tool-surface-multiagent.mjs +353 -0
  1078. package/scripts/idd-rag-aml-regression.mjs +348 -0
  1079. package/scripts/idd-rag-aml-ui-demo.mjs +93 -0
  1080. package/scripts/ontology-idd-rag-e2e.mjs +449 -0
  1081. package/scripts/run-quality-gates.mjs +58 -0
  1082. package/scripts/tool-references-migrate.ts +82 -0
  1083. package/scripts/tool-registry-e2e.mjs +2 -2
  1084. package/scripts/ui/optimizer-ui-playwright.py +152 -0
  1085. package/scripts/ui/system-e2e-playwright.py +460 -0
  1086. package/sdk/context.mjs +32 -4
  1087. package/server/api/mcp/workshop.ts +37 -10
  1088. package/server/api/workshop/agent-tools/approvals/[id]/decide.post.ts +140 -90
  1089. package/server/api/workshop/agent-tools/list.get.ts +60 -15
  1090. package/server/api/workshop/aml/models/[id].delete.ts +38 -35
  1091. package/server/api/workshop/channels/[id]/agents/[agentId]/rotate-token.post.ts +45 -0
  1092. package/server/api/workshop/daq/[id]/ingest.post.ts +192 -166
  1093. package/server/api/workshop/ontology/drafts/[draftId]/compile.ts +39 -0
  1094. package/server/api/workshop/ontology/drafts/[draftId]/evidence.ts +33 -0
  1095. package/server/api/workshop/ontology/drafts/[draftId]/publish.ts +44 -0
  1096. package/server/api/workshop/ontology/drafts/[draftId]/rules/[ruleId]/approval-decision.ts +28 -0
  1097. package/server/api/workshop/ontology/drafts/[draftId]/rules/[ruleId]/approval.ts +17 -0
  1098. package/server/api/workshop/ontology/drafts/[draftId]/rules/[ruleId]/transition.ts +32 -0
  1099. package/server/api/workshop/ontology/drafts/[draftId]/validate.ts +16 -0
  1100. package/server/api/workshop/ontology/drafts/[draftId].ts +52 -0
  1101. package/server/api/workshop/ontology/drafts/index.ts +20 -0
  1102. package/server/api/workshop/ontology/export/[ontologyId].ts +50 -0
  1103. package/server/api/workshop/ontology/index.ts +38 -0
  1104. package/server/api/workshop/ontology/scene.ts +21 -0
  1105. package/server/api/workshop/ontology/traces/[ontologyId].ts +19 -0
  1106. package/server/api/workshop/ontology/versions/[ontologyId]/compare.ts +21 -0
  1107. package/server/api/workshop/ontology/versions/[ontologyId].ts +42 -0
  1108. package/server/api/workshop/optimization/bindings/[id].delete.ts +12 -0
  1109. package/server/api/workshop/optimization/bindings/index.ts +47 -0
  1110. package/server/api/workshop/optimization/capabilities.get.ts +19 -0
  1111. package/server/api/workshop/optimization/profiles/[id]/publish.post.ts +41 -0
  1112. package/server/api/workshop/optimization/profiles/index.ts +41 -0
  1113. package/server/api/workshop/optimization/recommendations/[id]/crosscheck.post.ts +29 -0
  1114. package/server/api/workshop/optimization/recommendations/[id]/dispatch.post.ts +33 -0
  1115. package/server/api/workshop/optimization/runs/index.get.ts +41 -0
  1116. package/server/api/workshop/optimization/solve.post.ts +23 -0
  1117. package/server/api/workshop/process-model/datasets.post.ts +26 -0
  1118. package/server/api/workshop/process-model/eligibility.ts +40 -0
  1119. package/server/api/workshop/process-model/experiments.ts +43 -0
  1120. package/server/api/workshop/process-model/specs/[id]/publish.post.ts +22 -0
  1121. package/server/api/workshop/process-model/specs/index.ts +34 -0
  1122. package/server/api/workshop/process-model/train.post.ts +36 -0
  1123. package/server/harness/aw-mcp-bridge.mjs +24 -4
  1124. package/server/harness/aw-mcp-signature.mjs +20 -0
  1125. package/server/plugins/workshop.ts +20 -0
  1126. package/server/plugins-builtin/rag-bridge/index.mjs +7 -8
  1127. package/server/services/workshop/agents/adapters/omp-rpc-client/types.ts +121 -115
  1128. package/server/services/workshop/agents/hitl-decision/dispatcher.ts +127 -96
  1129. package/server/services/workshop/agents/host-tool-bridge/catalog.ts +19 -6
  1130. package/server/services/workshop/agents/host-tool-bridge/description-budget.ts +34 -0
  1131. package/server/services/workshop/agents/host-tool-bridge/dispatch.ts +83 -1
  1132. package/server/services/workshop/agents/host-tool-bridge/optimizer-gate.ts +72 -0
  1133. package/server/services/workshop/agents/host-tool-bridge/per-agent.ts +48 -13
  1134. package/server/services/workshop/agents/host-tool-bridge/tools/industrial.ts +123 -101
  1135. package/server/services/workshop/agents/industrial/grant-guard.ts +77 -0
  1136. package/server/services/workshop/agents/industrial/index.ts +38 -32
  1137. package/server/services/workshop/agents/industrial/line-tools.ts +8 -3
  1138. package/server/services/workshop/agents/industrial/ontology-tools.ts +320 -0
  1139. package/server/services/workshop/agents/industrial/optimizer-tools.ts +272 -0
  1140. package/server/services/workshop/agents/industrial/resource-paging.ts +31 -0
  1141. package/server/services/workshop/agents/industrial/resources-tools.ts +79 -0
  1142. package/server/services/workshop/agents/industrial/tool-verify-legacy-specs.ts +73 -0
  1143. package/server/services/workshop/agents/industrial/tool-verify.ts +416 -381
  1144. package/server/services/workshop/agents/plugin-governance.ts +148 -0
  1145. package/server/services/workshop/agents/plugin-tools.ts +11 -0
  1146. package/server/services/workshop/agents/registry.ts +21 -1
  1147. package/server/services/workshop/agents/tool-approvals.ts +7 -5
  1148. package/server/services/workshop/agents/tool-reference-kinds.ts +2 -0
  1149. package/server/services/workshop/agents/tool-reference-spec.ts +114 -0
  1150. package/server/services/workshop/aml/aml.repo.ts +73 -18
  1151. package/server/services/workshop/aml/dataset-builder.ts +195 -25
  1152. package/server/services/workshop/aml/env-lease.ts +148 -0
  1153. package/server/services/workshop/aml/env-manager.ts +6 -1
  1154. package/server/services/workshop/aml/gates.ts +163 -121
  1155. package/server/services/workshop/aml/job-orchestrator/stages.ts +36 -15
  1156. package/server/services/workshop/aml/job-orchestrator/start-job.ts +44 -0
  1157. package/server/services/workshop/aml/job-orchestrator/submit.ts +6 -0
  1158. package/server/services/workshop/aml/model-references.ts +83 -0
  1159. package/server/services/workshop/aml/model-registry.ts +183 -11
  1160. package/server/services/workshop/aml/predictor.ts +147 -5
  1161. package/server/services/workshop/aml/python/requirements.txt +3 -0
  1162. package/server/services/workshop/aml/python-runtime.ts +39 -4
  1163. package/server/services/workshop/aml/retention.ts +104 -98
  1164. package/server/services/workshop/aml/twin/physics-spec.ts +6 -22
  1165. package/server/services/workshop/aml/twin/provider-contracts.ts +45 -1
  1166. package/server/services/workshop/aml/twin/provider-loader.ts +13 -4
  1167. package/server/services/workshop/aml/twin/provider-registry.ts +145 -2
  1168. package/server/services/workshop/daq/ingest-policy.ts +43 -0
  1169. package/server/services/workshop/daq/storage/index.ts +6 -5
  1170. package/server/services/workshop/daq/storage/sqlite.adapter.ts +95 -24
  1171. package/server/services/workshop/daq/storage/timescale.adapter.ts +34 -11
  1172. package/server/services/workshop/daq/storage/tsdb-port.ts +36 -0
  1173. package/server/services/workshop/db/channel-agent.repo.ts +58 -3
  1174. package/server/services/workshop/db/database/migrations.ts +75 -0
  1175. package/server/services/workshop/db/database/open.ts +9 -1
  1176. package/server/services/workshop/db/database/schema.ts +356 -2
  1177. package/server/services/workshop/db/retention.ts +9 -0
  1178. package/server/services/workshop/db/tool-registry.repo.ts +5 -1
  1179. package/server/services/workshop/dcw/dcw-controller/lines.ts +11 -0
  1180. package/server/services/workshop/dcw/dcw-controller/recipes.ts +27 -0
  1181. package/server/services/workshop/dcw/dcw-line.repo.ts +3 -0
  1182. package/server/services/workshop/dcw/dcw-recipe.repo.ts +4 -2
  1183. package/server/services/workshop/dcw/line-run.ts +2 -0
  1184. package/server/services/workshop/eda/eda-run.repo.ts +8 -5
  1185. package/server/services/workshop/ontology/compiler.ts +474 -0
  1186. package/server/services/workshop/ontology/contracts.ts +441 -0
  1187. package/server/services/workshop/ontology/guards.ts +139 -0
  1188. package/server/services/workshop/ontology/index.ts +10 -0
  1189. package/server/services/workshop/ontology/ontology.service.ts +892 -0
  1190. package/server/services/workshop/ontology/repo.ts +449 -0
  1191. package/server/services/workshop/ontology/semantic-binding.service.ts +226 -0
  1192. package/server/services/workshop/ontology/validator.ts +218 -0
  1193. package/server/services/workshop/optimization/access.ts +210 -0
  1194. package/server/services/workshop/optimization/binding.repo.ts +135 -0
  1195. package/server/services/workshop/optimization/binding.service.ts +128 -0
  1196. package/server/services/workshop/optimization/contracts.ts +360 -0
  1197. package/server/services/workshop/optimization/crosscheck.service.ts +351 -0
  1198. package/server/services/workshop/optimization/dispatch.service.ts +462 -0
  1199. package/server/services/workshop/optimization/manager.ts +315 -0
  1200. package/server/services/workshop/optimization/problem-builder.ts +359 -0
  1201. package/server/services/workshop/optimization/profile-adopt.service.ts +256 -0
  1202. package/server/services/workshop/optimization/profile.repo.ts +174 -0
  1203. package/server/services/workshop/optimization/python/.mimosa/hook-state/session_187ec97f45d4bd02369bbe94da527cf1.json +1 -0
  1204. package/server/services/workshop/optimization/python/.mimosa/hook-state/session_187ec97f45d4bd02369bbe94da527cf1.mvjqkcs6-68688-fb7131a89c.baseline/190a6772a4e43801737b4ba6072eb9d53d3099b5d8a9e6f57bc5e8592a26a6c4.source +274 -0
  1205. package/server/services/workshop/optimization/python/.mimosa/hook-status/session_187ec97f45d4bd02369bbe94da527cf1-01ed7f04fa.json +14 -0
  1206. package/server/services/workshop/optimization/python/__pycache__/problems.cpython-312.pyc +0 -0
  1207. package/server/services/workshop/optimization/python/probe.py +24 -0
  1208. package/server/services/workshop/optimization/python/problems.py +347 -0
  1209. package/server/services/workshop/optimization/python/worker.py +119 -0
  1210. package/server/services/workshop/optimization/recommendation.service.ts +100 -0
  1211. package/server/services/workshop/optimization/rest-auth.ts +61 -0
  1212. package/server/services/workshop/optimization/run.repo.ts +158 -0
  1213. package/server/services/workshop/optimization/templates.ts +3 -0
  1214. package/server/services/workshop/optimization/uq-evidence.ts +144 -0
  1215. package/server/services/workshop/optimization/worker-client.ts +358 -0
  1216. package/server/services/workshop/process-model/artifact-validation.ts +19 -0
  1217. package/server/services/workshop/process-model/conditions.ts +43 -0
  1218. package/server/services/workshop/process-model/context-segments.repo.ts +100 -0
  1219. package/server/services/workshop/process-model/context.ts +202 -0
  1220. package/server/services/workshop/process-model/contracts.ts +344 -0
  1221. package/server/services/workshop/process-model/dataset.ts +144 -0
  1222. package/server/services/workshop/process-model/eligibility-service.ts +83 -0
  1223. package/server/services/workshop/process-model/eligibility.ts +305 -0
  1224. package/server/services/workshop/process-model/experiment.ts +100 -0
  1225. package/server/services/workshop/process-model/spec.repo.ts +127 -0
  1226. package/server/services/workshop/process-model/spec.ts +302 -0
  1227. package/server/services/workshop/process-model/trainers/dataset-reader.ts +80 -0
  1228. package/server/services/workshop/process-model/trainers/index.ts +150 -0
  1229. package/server/services/workshop/process-model/trainers/linear-arx.ts +325 -0
  1230. package/server/services/workshop/process-model/trainers/static-response.ts +211 -0
  1231. package/server/services/workshop/process-model/watermark.ts +18 -0
  1232. package/server/services/workshop/prompts/loader.ts +7 -0
  1233. package/server/services/workshop/runtime/manager/admin-channel.ts +14 -1
  1234. package/server/services/workshop/runtime/manager/host-tools.ts +65 -8
  1235. package/server/services/workshop/runtime/manager/types.ts +2 -2
  1236. package/server/services/workshop/settings.ts +33 -0
  1237. package/server/services/workshop/tools/catalog-view.ts +4 -1
  1238. package/server/services/workshop/tools/policy.ts +60 -10
  1239. package/server/services/workshop/tools/registry.ts +42 -1
  1240. package/shared/config/schema.json +14 -5
  1241. package/shared/dcw-protocol/line.ts +9 -0
  1242. package/shared/dcw-protocol/recipe.ts +2 -0
  1243. package/shared/dimensions.ts +124 -0
  1244. package/shared/units.ts +50 -0
  1245. package/.output/public/_nuxt/B1OMZaQh.js +0 -1
  1246. package/.output/public/_nuxt/BNNtKbSV.js +0 -14
  1247. package/.output/public/_nuxt/BYLc8cfE.js +0 -1
  1248. package/.output/public/_nuxt/Bq9DDqiq2.js +0 -1
  1249. package/.output/public/_nuxt/C1vvxGo02.js +0 -1
  1250. package/.output/public/_nuxt/SF0I6Hzp2.js +0 -36
  1251. package/.output/public/_nuxt/board.jjp4MSZR.css +0 -1
  1252. package/.output/public/_nuxt/builds/meta/cd7ec308-625f-4eb8-a841-11f3127fbf66.json +0 -1
  1253. package/.output/public/_nuxt/studio.DiCFYeMk.css +0 -1
  1254. package/.output/public/_nuxt/w5BEz70W.js +0 -1
  1255. package/.output/server/chunks/build/board-C6JysYLg.mjs.map +0 -1
  1256. package/.output/server/chunks/build/data-DL68QJ5W.mjs.map +0 -1
  1257. package/.output/server/chunks/build/studio-DjhjwH4s.mjs.map +0 -1
  1258. /package/.output/public/_nuxt/{2KE8xGVm2.js → 2KE8xGVm.js} +0 -0
  1259. /package/.output/public/_nuxt/{62J4vljm2.js → 62J4vljm.js} +0 -0
  1260. /package/.output/public/_nuxt/{B8cViLJT2.js → B8cViLJT.js} +0 -0
  1261. /package/.output/public/_nuxt/{C-MY-JQE2.js → C-MY-JQE.js} +0 -0
  1262. /package/.output/public/_nuxt/{D5kCimyw.js → D5kCimyw2.js} +0 -0
  1263. /package/.output/public/_nuxt/{DF32f5EL.js → DF32f5EL2.js} +0 -0
  1264. /package/.output/public/_nuxt/{DGrrucbG2.js → DGrrucbG.js} +0 -0
  1265. /package/.output/public/_nuxt/{TOWR4WpO2.js → TOWR4WpO.js} +0 -0
  1266. /package/.output/public/_nuxt/{Y4sMSPrS.js → Y4sMSPrS2.js} +0 -0
@@ -0,0 +1,863 @@
1
+ /* eslint-disable @stylistic/max-statements-per-line */
2
+ /**
3
+ * G6 系统验收:A1–A22 机器可判定断言(进程内 + 真实 Python solver + 真实 SQLite/Timescale)。
4
+ *
5
+ * 运行:npx tsx scripts/acceptance-optimizer-process-model.ts
6
+ * 证据:docs/audit/evidence/2026-10-22-optimizer-process-model/acceptance.json
7
+ *
8
+ * 边界(如实记录,不静默通过):
9
+ * - 不启动 HTTP 服务;REST 层用同一服务函数 + 持久状态断言(UI 与 Agent 共用服务层)。
10
+ * - A9 的浏览器点击不在本脚本范围:判定"接口载荷/持久状态/零写计数 + UI 路由契约"。
11
+ * - ingestedAt 的到达时间语义仅 SQLite 实现;Timescale 分支只断言 state/分页。
12
+ */
13
+ import { mkdirSync, mkdtempSync, writeFileSync, readFileSync, existsSync, cpSync } from 'node:fs'
14
+ import { join } from 'node:path'
15
+ import { tmpdir } from 'node:os'
16
+ import { createHash } from 'node:crypto'
17
+
18
+ const evidenceDir = process.env.AW_E2E_EVIDENCE_DIR || join(process.cwd(), 'docs', 'audit', 'evidence', '2026-10-22-optimizer-process-model')
19
+ mkdirSync(evidenceDir, { recursive: true })
20
+
21
+ const results: Array<{ id: string, name: string, pass: boolean, detail: string, extra?: unknown }> = []
22
+ function record(id: string, name: string, pass: boolean, detail: string, extra?: unknown) {
23
+ results.push({ id, name, pass, detail, extra })
24
+ console.log(`${pass ? 'PASS' : 'FAIL'} ${id} ${name} — ${detail}`)
25
+ }
26
+ function section(name: string) { console.log(`\n=== ${name} ===`) }
27
+
28
+ const home = mkdtempSync(join(tmpdir(), 'aw-accept-optimizer-'))
29
+ process.env.AGENTWORKSHOP_TEST = '1'
30
+ process.env.AW_MODE = 'home'
31
+ process.env.AW_HOME = home
32
+ process.env.AW_AML_DIR = join(home, 'aml')
33
+
34
+ const started = Date.now()
35
+ section('boot')
36
+ const { openWorkshopDb } = await import('../server/services/workshop/db/database/open')
37
+ const { configureAmlRuntime, getAmlRuntime } = await import('../server/services/workshop/aml/runtime')
38
+ const { registerBuiltinOptimizerAdapters } = await import('../server/services/workshop/process-model/trainers')
39
+ const db = openWorkshopDb(join(home, 'accept.sqlite'))
40
+ configureAmlRuntime(db)
41
+ const rt = getAmlRuntime()
42
+ // 复用真实 AML venv(只写 marker);否则每次验收都会重装 torch
43
+ const realVenv = join(process.env.USERPROFILE ?? process.env.HOME ?? home, '.AgentWorkShop', 'aml', '.venv')
44
+ if (existsSync(realVenv)) rt.venvDir = realVenv
45
+ registerBuiltinOptimizerAdapters()
46
+
47
+ const { getDcwLineRepo } = await import('../server/services/workshop/dcw/dcw-line.repo')
48
+ const { getDcwProductRepo } = await import('../server/services/workshop/dcw/dcw-product.repo')
49
+ const { getDcwRecipeRepo } = await import('../server/services/workshop/dcw/dcw-recipe.repo')
50
+ const { getDaqNodeRepo } = await import('../server/services/workshop/daq/daq-node.repo')
51
+ const { DaqNode } = await import('../server/services/workshop/daq/daq-node')
52
+ const { getTsdb } = await import('../server/services/workshop/daq/storage')
53
+ const { hashDatasetDir } = await import('../server/services/workshop/aml/dataset-builder')
54
+ const { submitJob } = await import('../server/services/workshop/aml/job-orchestrator')
55
+ const { readDataset } = await import('../server/services/workshop/process-model/trainers/dataset-reader')
56
+ const { trainLinearArx } = await import('../server/services/workshop/process-model/trainers/linear-arx')
57
+ const { evaluateEligibility } = await import('../server/services/workshop/process-model/eligibility')
58
+ const { evaluateEligibilityFromDataset } = await import('../server/services/workshop/process-model/eligibility-service')
59
+ const { parseProcessModelSpec } = await import('../server/services/workshop/process-model/spec')
60
+ const { createProcessModelSpecRepo } = await import('../server/services/workshop/process-model/spec.repo')
61
+ const { getContextSegmentRepo, recipeContentHash } = await import('../server/services/workshop/process-model/context-segments.repo')
62
+ const { createProfileRepo } = await import('../server/services/workshop/optimization/profile.repo')
63
+ const { createBinding, resolveBinding } = await import('../server/services/workshop/optimization/binding.service')
64
+ const { getBindingRepo } = await import('../server/services/workshop/optimization/binding.repo')
65
+ const { solve } = await import('../server/services/workshop/optimization/manager')
66
+ const { evaluateCandidateCost, constraintReport, simulateLinear } = await import('../server/services/workshop/optimization/problem-builder')
67
+ const { getSolverWorkerPool, SolverWorkerPool } = await import('../server/services/workshop/optimization/worker-client')
68
+ const { assertModelNotReferenced } = await import('../server/services/workshop/aml/model-references')
69
+ const { createExperimentPlan, assertSimulatedLine } = await import('../server/services/workshop/process-model/experiment')
70
+ const { toolSignature } = await import('../server/harness/aw-mcp-signature.mjs')
71
+ const { HOST_TOOLS, OPTIMIZER_TOOL_NAMES, hostToolsForRole } = await import('../server/services/workshop/agents/host-tool-bridge/catalog')
72
+ const { INDUSTRIAL_TOOL_NAMES } = await import('../server/services/workshop/agents/host-tool-bridge/tools/industrial')
73
+ const { buildToolRegistrySnapshot } = await import('../server/services/workshop/tools/registry')
74
+ const { optimizerDispatchGate, legacyMpcAliasGate } = await import('../server/services/workshop/agents/host-tool-bridge/optimizer-gate')
75
+ const { boundModelHasEligibility, dispatchHostTool } = await import('../server/services/workshop/agents/host-tool-bridge/dispatch')
76
+ const { setHybridChannelProfile } = await import('../server/services/workshop/aml/twin/channel-profile')
77
+
78
+ // =====================================================================
79
+ section('fixtures')
80
+ const now = Date.now()
81
+ const line = getDcwLineRepo().create({ name: '验收模拟线', simulated: true, simSceneId: 'film-line' })
82
+ const product = getDcwProductRepo().create({ name: '验收产品', lineId: line.id })
83
+ getDaqNodeRepo().insert(DaqNode.fromRow({ id: 'n-mv-acc', templateRef: 'tpl-acc', name: 'MV', unit: 'bar', min: 0, max: 100, lineId: line.id, driver: 'mock' }))
84
+ getDaqNodeRepo().insert(DaqNode.fromRow({ id: 'n-cv-acc', templateRef: 'tpl-acc', name: 'CV', unit: 'μm', min: 0, max: 200, lineId: line.id, driver: 'mock' }))
85
+ const recipe = getDcwRecipeRepo().create({
86
+ name: '验收配方', productId: product.id,
87
+ params: [],
88
+ daqWindows: [{ nodeId: 'n-mv-acc', min: 0, max: 100 }, { nodeId: 'n-cv-acc', min: 0, max: 200 }],
89
+ })
90
+ const run = getDcwRecipeRepo().createRun(recipe)
91
+ getDcwRecipeRepo().closeRun(run.id)
92
+
93
+ const BEAT = 5000
94
+ const DELAY = 2
95
+ const H = 24
96
+ const P = 6
97
+ const TRUE_A = 0.3
98
+ const TRUE_B = 0.7
99
+ const N_RUNS = 4
100
+ const STEPS = 160
101
+ const samples: Array<{ nodeId: string, tsMs: number, value: number, state: string, lineId?: string, productId?: string, recipeId?: string, runId?: string }> = []
102
+ const plant: Array<{ u: number[], y: number[] }> = []
103
+ for (let r = 0; r < N_RUNS; r++) {
104
+ let y = 52
105
+ const uq: number[] = []
106
+ const us: number[] = []
107
+ const ys: number[] = []
108
+ for (let k = 0; k < STEPS; k++) {
109
+ const u = 50 + 20 * Math.sin((k + r * 11) / 9) + 6 * Math.sin((k + r * 3) / 4)
110
+ uq.push(u)
111
+ const uDelayed = uq[Math.max(0, uq.length - 1 - DELAY)]!
112
+ y = TRUE_A * y + TRUE_B * uDelayed + 8 + 0.02 * Math.sin((k + r) / 3)
113
+ us.push(u); ys.push(y)
114
+ const ts = now - (N_RUNS - r) * STEPS * BEAT + k * BEAT
115
+ const tags = { lineId: line.id, productId: product.id, recipeId: recipe.id, runId: run.id }
116
+ samples.push({ nodeId: 'n-mv-acc', tsMs: ts, value: u, state: 'ok', ...tags })
117
+ samples.push({ nodeId: 'n-cv-acc', tsMs: ts, value: y, state: 'ok', ...tags })
118
+ }
119
+ plant.push({ u: us, y: ys })
120
+ }
121
+ await getTsdb().writeSamples(samples)
122
+
123
+ const datasetDir = join(rt.datasetsDir, 'ds-acc')
124
+ mkdirSync(join(datasetDir, 'arrays'), { recursive: true })
125
+ {
126
+ const xRows: number[] = []
127
+ const uRows: number[] = []
128
+ const yRows: number[] = []
129
+ const tRows: number[] = []
130
+ const mRows: number[] = []
131
+ let windows = 0
132
+ for (const series of plant) {
133
+ for (let t = H; t + P <= series.y.length; t++) {
134
+ for (let i = 0; i < H; i++) xRows.push(series.y[t - H + i]!, series.u[t - H + i]!)
135
+ for (let p = 0; p < P; p++) { uRows.push(series.u[t + p]!); yRows.push(series.y[t + p]!) }
136
+ for (let i = 0; i < H + P; i++) { tRows.push((t - H + i) * BEAT); mRows.push(1) }
137
+ windows++
138
+ }
139
+ }
140
+ const nTest = Math.max(1, Math.floor(windows * 0.25))
141
+ const nVal = Math.max(1, Math.floor(windows * 0.2))
142
+ // 与真实 builder 一致:工件里存的是**归一化**数组;训练器用 manifest.norm 反归一化。
143
+ const mean = (arr: number[]) => arr.reduce((a, b) => a + b, 0) / Math.max(1, arr.length)
144
+ const std = (arr: number[]) => {
145
+ const m = mean(arr)
146
+ return Math.sqrt(arr.reduce((a, b) => a + (b - m) ** 2, 0) / Math.max(1, arr.length)) || 1
147
+ }
148
+ const yMean = mean(yRows); const yStd = std(yRows)
149
+ const uMean = mean(uRows); const uStd = std(uRows)
150
+ // x 列顺序 = allNodes ['n-cv','n-mv'] → 偶数列 y,奇数列 u
151
+ const xNorm = xRows.map((v, i) => (i % 2 === 0 ? (v - yMean) / yStd : (v - uMean) / uStd))
152
+ writeFileSync(join(datasetDir, 'arrays', 'x.f32'), Buffer.from(new Float32Array(xNorm).buffer))
153
+ writeFileSync(join(datasetDir, 'arrays', 'u.f32'), Buffer.from(new Float32Array(uRows.map(v => (v - uMean) / uStd)).buffer))
154
+ writeFileSync(join(datasetDir, 'arrays', 'y.f32'), Buffer.from(new Float32Array(yRows.map(v => (v - yMean) / yStd)).buffer))
155
+ writeFileSync(join(datasetDir, 'arrays', 'timestamps.f64'), Buffer.from(new Float64Array(tRows).buffer))
156
+ writeFileSync(join(datasetDir, 'arrays', 'mask.f32'), Buffer.from(new Float32Array(mRows).buffer))
157
+ writeFileSync(join(datasetDir, 'arrays', 'sidecar.json'), JSON.stringify({ label: 'accept', delays: { mv1: DELAY * BEAT }, variableOrder: ['mv1', 'cv1'] }))
158
+ writeFileSync(join(datasetDir, 'manifest.json'), JSON.stringify({
159
+ version: 2, dataKind: 'dynamic',
160
+ allNodes: ['n-cv-acc', 'n-mv-acc'], controlNodes: ['n-mv-acc'], targetNodes: ['n-cv-acc'], featureNodes: [],
161
+ shapes: { x: [windows, H, 2], u: [windows, P, 1], y: [windows, P, 1] },
162
+ split: { train: windows - nTest - nVal, val: nVal, test: nTest, trainRunIds: [run.id], valRunIds: [run.id], testRunIds: [run.id] },
163
+ norm: { x: { mean: [yMean, uMean], std: [yStd, uStd] }, u: { mean: [uMean], std: [uStd] }, y: { mean: [yMean], std: [yStd] } },
164
+ beatMs: BEAT,
165
+ variables: [
166
+ { id: 'mv1', nodeId: 'n-mv-acc', role: 'mv', unit: 'bar', scale: 1, offset: 0, delayMs: DELAY * BEAT },
167
+ { id: 'cv1', nodeId: 'n-cv-acc', role: 'cv', unit: 'μm', scale: 1, offset: 0 },
168
+ ],
169
+ artifacts: { x: 'arrays/x.f32', u: 'arrays/u.f32', y: 'arrays/y.f32', timestamps: 'arrays/timestamps.f64', mask: 'arrays/mask.f32', sidecar: 'arrays/sidecar.json' },
170
+ provenance: { lineId: line.id, productId: product.id, recipeId: recipe.id, recipeVersion: recipe.version ?? 1, runIds: [run.id], recipeContentHash: recipeContentHash(recipe), evidenceSource: 'simulation', availabilityWatermark: now, capturedAt: new Date().toISOString() },
171
+ }, null, 2))
172
+ const sha = hashDatasetDir(datasetDir, '{}')
173
+ rt.repo.dataset.insert({
174
+ id: 'ds-acc', lineId: line.id, productId: product.id, recipeId: recipe.id, runIds: [run.id],
175
+ specJson: '{}', sha256: sha, rowCount: windows, fromMs: now - N_RUNS * STEPS * BEAT, toMs: now,
176
+ path: datasetDir, createdBy: 'acceptance', createdByKind: 'user', note: 'acceptance fixture', createdAt: new Date().toISOString(),
177
+ specRef: 'pms-acc', specVersion: 1,
178
+ // D18/SW2.4:验收 fixture 显式置 1(手插路径,不经 builder;每 run 的 confirmed segment 见 A13 段插入)
179
+ lineageVerified: 1,
180
+ })
181
+ }
182
+
183
+ function specOf(overrides: Record<string, unknown> = {}) {
184
+ return {
185
+ schemaVersion: 2, id: 'pms-acc', version: 1,
186
+ lineId: line.id, productId: product.id, recipeId: recipe.id, recipeVersion: recipe.version ?? 1,
187
+ conditions: [{ id: 'c1', match: [{ field: 'recipeId', op: 'eq', value: recipe.id }] }],
188
+ variables: [
189
+ { id: 'mv1', nodeId: 'n-mv-acc', role: 'mv', field: 'value', unit: 'bar', scale: 1, offset: 0, delayMs: DELAY * BEAT, min: 0, max: 100, maxStep: 20 },
190
+ { id: 'cv1', nodeId: 'n-cv-acc', role: 'cv', field: 'value', unit: 'μm', scale: 1, offset: 0, min: 0, max: 200 },
191
+ ],
192
+ timing: { beatMs: BEAT, historySteps: H, horizonSteps: P, fixedDt: true },
193
+ trainer: { ref: 'linear_arx@1', config: { arOrder: 1, inputOrder: 1, ridgeLambda: 1e-6, standardize: true } },
194
+ datasetPolicy: { runIds: [run.id], split: { valRatio: 0.2, testRatio: 0.2, seed: 42 }, cleaning: { hampelK: 0 } },
195
+ gatePolicyRef: 'process-model.gates@1',
196
+ modelInterface: { id: 'linear_state_space', version: 1, inputSemantics: 'setpoint', mode: 'state_space' },
197
+ effectiveDomain: { mv: { mv1: { min: 0, max: 100, maxStep: 20 } }, cv: { cv1: { min: 0, max: 200 } } },
198
+ purpose: 'mpc_surrogate',
199
+ ...overrides,
200
+ }
201
+ }
202
+ const spec = parseProcessModelSpec(specOf())
203
+ const specRepo = createProcessModelSpecRepo(db)
204
+ specRepo.insert(spec)
205
+ specRepo.publish(spec.id, spec.version)
206
+
207
+ const job = submitJob({
208
+ datasetId: 'ds-acc', purpose: 'mpc_surrogate', trainerRef: 'linear_arx@1',
209
+ processModelSpec: spec as unknown as Record<string, unknown>, modelName: '验收线性模型',
210
+ })
211
+ await (async () => {
212
+ // 让作业编排器自己跑(生产路径)。不要手动 startJob:队列 tick 会双跑同一作业,
213
+ // 第二次 finish 必然竞争失败。
214
+ const terminal = new Set(['done', 'failed', 'cancelled', 'timeout', 'interrupted'])
215
+ for (let i = 0; i < 240; i++) {
216
+ const row = rt.repo.job.get(job.id)
217
+ if (row && terminal.has(row.status)) return
218
+ await new Promise(resolve => setTimeout(resolve, 500))
219
+ }
220
+ throw new Error('训练作业 120s 未到终态')
221
+ })()
222
+ const finishedJob = rt.repo.job.get(job.id)!
223
+ const modelId = finishedJob.modelId ?? ''
224
+
225
+ // =====================================================================
226
+ section('A1/A15/A16 data')
227
+ {
228
+ const tsdb = getTsdb()
229
+ const pages: Array<{ at: number }> = []
230
+ let after: number | undefined
231
+ for (let i = 0; i < 6; i++) {
232
+ const page = await tsdb.queryTaggedPage!('n-cv-acc', { fromMs: 0, toMs: now, limit: 41, afterTs: after, withState: true })
233
+ pages.push(...page.points)
234
+ if (page.done) break
235
+ after = page.nextCursor ?? undefined
236
+ }
237
+ const unique = new Set(pages.map(p => p.at))
238
+ record('A1', '逐节点分页:续读无漏无重 + ASC', pages.length > 0 && unique.size === pages.length && pages.every((p, i, a) => i === 0 || p.at > a[i - 1]!.at), `${pages.length} 点 / ${unique.size} 唯一`)
239
+
240
+ const tagged = await tsdb.queryTagged({ nodeIds: ['n-cv-acc'], fromMs: 0, toMs: now, limit: 100 })
241
+ const pts = tagged.get('n-cv-acc') ?? []
242
+ record('A15', 'queryTagged raw 返回真实 state(非空)', pts.length > 0 && pts.every(p => typeof p.state === 'string' && p.state.length > 0), `${pts.length} 点`)
243
+
244
+ const firstTs = samples.find(s => s.nodeId === 'n-cv-acc')!.tsMs
245
+ const before = tsdb.stats?.().correctionDropped ?? 0
246
+ await tsdb.writeSamples([{ nodeId: 'n-cv-acc', tsMs: firstTs, value: 999, state: 'alarm' }])
247
+ const afterStats = tsdb.stats?.().correctionDropped ?? 0
248
+ const orig = await tsdb.query('n-cv-acc', { fromMs: firstTs, toMs: firstTs })
249
+ record('A16', '首写胜出 + 同键更正被计数丢弃', afterStats === before + 1 && orig[0]?.value !== 999, `dropped ${before}→${afterStats}`)
250
+
251
+ const tampered = join(rt.datasetsDir, 'ds-tamper')
252
+ cpSync(datasetDir, tampered, { recursive: true })
253
+ const h1 = hashDatasetDir(tampered, '{}')
254
+ writeFileSync(join(tampered, 'arrays', 'sidecar.json'), '{"tampered":true}')
255
+ const h2 = hashDatasetDir(tampered, '{}')
256
+ record('A1', 'manifest v2 sidecar 篡改使 hash 失败', h1 !== h2 && h1.length === 64, `${h1.slice(0, 10)} ≠ ${h2.slice(0, 10)}`)
257
+
258
+ try {
259
+ const { TimescaleAdapter } = await import('../server/services/workshop/daq/storage/timescale.adapter')
260
+ const url = process.env.ACCEPT_TSDB_URL ?? 'postgres://postgres:awshop@127.0.0.1:5432/awshop'
261
+ const ts = new TimescaleAdapter(url)
262
+ await ts.init()
263
+ const node = `acc-ts-${Date.now().toString(36)}`
264
+ await ts.writeSamples([{ nodeId: node, tsMs: now - 3000, value: 1, state: 'ok' }, { nodeId: node, tsMs: now - 2000, value: 2, state: 'alarm' }])
265
+ const readback = await ts.query(node, { fromMs: now - 10_000, toMs: now })
266
+ const latestOne = (await ts.latest()).get(node)
267
+ record('A1', 'Timescale 同 fixture(写入/raw 读取/state)', readback.some(p => p.state === 'alarm') && latestOne?.state === 'alarm', `rows=${readback.length} state=${readback.map(p => p.state).join(',')} latest=${latestOne?.state ?? 'none'}`)
268
+ await ts.close()
269
+ }
270
+ catch (err) {
271
+ record('A1', 'Timescale 同 fixture(state + 分页)', false, `不可判定:${err instanceof Error ? err.message : String(err)}`)
272
+ }
273
+ }
274
+
275
+ // =====================================================================
276
+ section('A2 eligibility')
277
+ {
278
+ const n = 80
279
+ const constU = evaluateEligibility({ spec, scope: 'simulation', conditionId: 'c1', series: [{ variableId: 'mv1', role: 'mv', values: new Array(n).fill(50) }, { variableId: 'cv1', role: 'cv', values: Array.from({ length: n }, (_, i) => 50 + 10 * Math.sin(i / 3)) }], actionEvidence: 'simulation_commanded' })
280
+ record('A2', 'U 恒定 + Y 波动 → 不可优化', constU.optimizationEligible === false && constU.gaps.some(g => g.code === 'MV_CONSTANT'), constU.gaps.map(g => g.code).join(','))
281
+ const ack = evaluateEligibility({ spec, scope: 'real', conditionId: 'c1', series: [{ variableId: 'mv1', role: 'mv', values: Array.from({ length: 120 }, (_, i) => 50 + 20 * Math.sin(i / 5)) }, { variableId: 'cv1', role: 'cv', values: Array.from({ length: 120 }, (_, i) => 50 + 4 * Math.sin(i / 5 - 1)) }], actionEvidence: 'ack_only' })
282
+ record('A2', '仅 ACK 动作 → 不可优化', ack.optimizationEligible === false && ack.gaps.some(g => g.code === 'ACTION_ACK_ONLY'), ack.gaps.map(g => g.code).join(','))
283
+ const real = evaluateEligibilityFromDataset({ specId: spec.id, datasetId: 'ds-acc', scope: 'simulation' })
284
+ record('A2', '激励充分的模拟数据 → 具备优化资格', real.optimizationEligible === true, `gaps=${real.gaps.map(g => g.code).join(',') || 'none'}`)
285
+ }
286
+
287
+ // =====================================================================
288
+ section('A3 dynamic model')
289
+ const artifact = trainLinearArx(readDataset(datasetDir), { arOrder: 1, inputOrder: 1, ridgeLambda: 1e-6, standardize: true }, { variables: spec.variables, beatMs: BEAT })
290
+ {
291
+ const a = artifact.A[0]![0]!
292
+ const bIndex = artifact.layout.uOffset + Math.max(0, DELAY - 1)
293
+ const b = artifact.A[0]![bIndex] ?? 0
294
+ record('A3', 'ARX 辨识系数接近真值(0.82/0.18)', Math.abs(a - TRUE_A) < 0.05 && Math.abs(b - TRUE_B) < 0.05, `a=${a.toFixed(4)} b=${b.toFixed(4)} (index ${bIndex})`)
295
+ record('A3', '多步 RMSE 比持值基线降低 ≥20%', artifact.metrics.rolloutImprovement >= 0.2, `${(artifact.metrics.rolloutImprovement * 100).toFixed(1)}%`)
296
+ const x0 = Array.from({ length: artifact.stateDim }, (_, i) => {
297
+ // y 状态寄存器 = plant 在 u=50 的稳态;u 延迟线 = 50
298
+ const ySteady = (TRUE_B * 50 + 8) / (1 - TRUE_A)
299
+ return i < artifact.C.length * artifact.arOrder ? ySteady : 50
300
+ })
301
+ const step = simulateLinear({ A: artifact.A.flat(), B: artifact.B.flat(), C: artifact.C.flat(), D: artifact.D.flat(), bias: artifact.bias, stateDim: artifact.stateDim, x0 }, 1, 1, [50], Array.from({ length: DELAY + 2 }, () => [60]))
302
+ const y0 = step[0]?.[0] ?? 0
303
+ const firstMove = step.findIndex(r => Math.abs((r[0] ?? 0) - y0) > 0.5)
304
+ const startOk = firstMove >= 0 && Math.abs(firstMove - DELAY) <= 1
305
+ record('A3', '阶跃响应起点误差 ≤1 采样步(延迟不提前/不双计)', startOk, `firstMove=${firstMove} d=${DELAY} y=${step.map(r => r[0]!.toFixed(3)).join(',')}`)
306
+ record('A3', '训练作业 done 且模型已登记(两阶段成功语义)', finishedJob.status === 'done' && Boolean(modelId) && rt.repo.model.get(modelId)?.artifactKind === 'linear_state_space@1', `job=${finishedJob.status} model=${modelId || 'none'} err=${finishedJob.error ?? ''}`)
307
+ }
308
+
309
+ // =====================================================================
310
+ section('A4 solver')
311
+ const pool = getSolverWorkerPool()
312
+ const steadyIr = {
313
+ irVersion: 1, hash: 'acc-steady', profileRef: 'p@1',
314
+ modelRef: { modelId: 'm', artifactKind: 'static_response@1', artifactHash: 'h', modelInterface: 'static_response', stage: 'production' },
315
+ solverRef: 'scipy_slsqp@1',
316
+ conditions: { conditionId: 'c', lineId: line.id, productId: product.id, recipeId: recipe.id, recipeVersion: 1 },
317
+ horizon: 1, beatMs: BEAT,
318
+ scaling: { mv: { mv1: { scale: 1, offset: 0 } }, cv: { cv1: { scale: 1, offset: 0 } } },
319
+ weights: { cv: { cv1: 1 }, du: {}, terminal: 0, economic: {} },
320
+ context: { capturedAt: '', eventAsOf: 0, availabilityWatermark: null, evidenceSource: 'simulation' },
321
+ problem: { template: 'steady_response@1', mvOrder: ['mv1'], cvOrder: ['cv1'], coefficients: { cv1: [0, 1] }, featureOrder: ['bias', 'mv1'], cvTargets: [3], mvBounds: [{ min: -10, max: 10, maxStep: 10 }], cvBounds: [{}], uPrev: [0] },
322
+ } as never
323
+ const mpcProblem = {
324
+ template: 'linear_mpc_quadratic@1',
325
+ dynamics: { stateDim: 1, A: [0.82], B: [0.18], C: [1], D: [0], delays: { mv1: DELAY }, x0: [55] },
326
+ cvSetpoints: [50], cvBounds: [{}], mvOrder: ['mv1'], cvOrder: ['cv1'], mvBounds: [{ min: 0, max: 100, maxStep: 20 }], uPrev: [50],
327
+ }
328
+ const mpcIr = {
329
+ irVersion: 1, hash: 'acc-mpc', profileRef: 'p@1',
330
+ modelRef: { modelId: 'm', artifactKind: 'linear_state_space@1', artifactHash: 'h', modelInterface: 'linear_state_space', stage: 'production' },
331
+ solverRef: 'osqp_mpc@1',
332
+ conditions: { conditionId: 'c', lineId: line.id, productId: product.id, recipeId: recipe.id, recipeVersion: 1 },
333
+ horizon: 12, beatMs: BEAT,
334
+ scaling: { mv: { mv1: { scale: 1, offset: 0 } }, cv: { cv1: { scale: 1, offset: 0 } } },
335
+ weights: { cv: { cv1: 1 }, du: { mv1: 0.05 }, terminal: 2 },
336
+ context: { capturedAt: '', eventAsOf: 0, availabilityWatermark: null, evidenceSource: 'simulation' },
337
+ problem: mpcProblem,
338
+ } as never
339
+ {
340
+ const probe = await pool.probe()
341
+ record('A7', 'AML venv 内 osqp/scipy 可用(同一解释器)', probe.ok && probe.osqp && probe.scipy, probe.pythonPath)
342
+ const r1 = await pool.solve(steadyIr)
343
+ const u = (r1.result as { controls: number[][] }).controls[0]![0]!
344
+ record('A4', 'SciPy 解析解误差 ≤1e-4', Math.abs(u - 3) <= 1e-4, `u=${u}`)
345
+ const r2 = await pool.solve(mpcIr)
346
+ const payload = r2.result as { status: string, controls: number[][], predicted: number[][], cost: number }
347
+ const candidate = { seq: 0, controls: payload.controls, predicted: payload.predicted, cost: payload.cost, constraints: [], feasible: true }
348
+ const independent = evaluateCandidateCost(mpcIr, candidate)
349
+ const mismatch = Math.abs(payload.cost - independent) / Math.max(1, Math.abs(independent))
350
+ const reports = constraintReport(mpcIr, candidate)
351
+ const maxResidual = Math.max(...reports.map(r => r.residual))
352
+ record('A4', 'OSQP 收敛 + 约束残差 ≤1e-5', payload.status === 'optimal' && maxResidual <= 1e-5, `status=${payload.status} residual=${maxResidual.toExponential(2)}`)
353
+ record('A4', 'Solver 代价与平台独立重算相对差 ≤1e-6', mismatch <= 1e-6, `solver=${payload.cost.toFixed(6)} independent=${independent.toFixed(6)} diff=${mismatch.toExponential(2)}`)
354
+ record('A4', 'MPC 候选非恒值', new Set(payload.controls.map(c => c[0]!.toFixed(6))).size >= 2, payload.controls.slice(0, 4).map(c => c[0]!.toFixed(2)).join(','))
355
+ }
356
+
357
+ // =====================================================================
358
+ section('A5/A22 worker lifecycle')
359
+ {
360
+ const infeasible = { ...mpcIr, hash: 'inf', horizon: 3, problem: { ...mpcProblem, cvSetpoints: [0], cvBounds: [{ min: 100, max: 200 }], mvBounds: [{ min: 0, max: 0 }], uPrev: [0] } } as never
361
+ const r = await pool.solve(infeasible)
362
+ record('A5', '不可行问题返回 infeasible(不崩溃)', (r.result as { status: string }).status === 'infeasible', (r.result as { status: string }).status)
363
+
364
+ const big = { ...mpcIr, hash: 'big', horizon: 1200, problem: { ...mpcProblem, cvSetpoints: [50] } } as never
365
+ let timedOut = false
366
+ try { await pool.solve(big, { timeoutMs: 40 }) }
367
+ catch (err) { timedOut = (err as { code?: string }).code === 'SOLVE_TIMEOUT' }
368
+ await new Promise(resolve => setTimeout(resolve, 1800))
369
+ const recovered = await pool.solve(steadyIr, { timeoutMs: 15_000 })
370
+ record('A5', '超时明确返回 SOLVE_TIMEOUT 且池可恢复', timedOut && (recovered.result as { status: string }).status === 'optimal', `timedOut=${timedOut}`)
371
+
372
+ const pids = pool.workerPids()
373
+ if (pids[0]) {
374
+ try { process.kill(pids[0]) }
375
+ catch { /* 已退出 */ }
376
+ }
377
+ await new Promise(resolve => setTimeout(resolve, 600))
378
+ const afterCrash = await pool.solve(steadyIr, { timeoutMs: 20_000 })
379
+ record('A22', 'Worker 崩溃后池自动补位(在途无重放)', (afterCrash.result as { status: string }).status === 'optimal' && pool.stats().degraded === false, JSON.stringify(pool.stats()))
380
+
381
+ const pool2 = new SolverWorkerPool({ poolSize: 2, requestTimeoutMs: 30_000, threads: 1 })
382
+ const aP = pool2.solve({ ...big, hash: 'cancel-a' } as never, { requestId: 'req-a', timeoutMs: 30_000 }).catch(err => ({ error: (err as { code?: string }).code }))
383
+ const bP = pool2.solve(steadyIr, { requestId: 'req-b', timeoutMs: 30_000 })
384
+ await new Promise(resolve => setTimeout(resolve, 120))
385
+ await pool2.cancel('req-a')
386
+ const [aRes, bRes] = await Promise.all([aP, bP])
387
+ record('A5', '取消 A 不影响 B(B 仍 optimal)', (bRes as { result: { status: string } }).result.status === 'optimal', `A=${'error' in (aRes as object) ? (aRes as { error?: string }).error : 'result'}`)
388
+ await pool2.shutdown()
389
+ }
390
+
391
+ // =====================================================================
392
+ section('A6/A17 binding')
393
+ {
394
+ const nowIso = new Date().toISOString()
395
+ db.prepare(`INSERT INTO workspaces (id, owner_user_id, name, created_at) VALUES ('ws-acc','u-acc','ws',?)`).run(nowIso)
396
+ db.prepare(`INSERT INTO channels (id, name, description, enabled, created_at, updated_at) VALUES ('ch-acc','ch','',1,?,?)`).run(nowIso, nowIso)
397
+ db.prepare(`INSERT INTO workspace_channels (workspace_id, channel_id, created_at) VALUES ('ws-acc','ch-acc',?)`).run(nowIso)
398
+ db.prepare(`INSERT INTO agents (id, name, harness, created_at, updated_at) VALUES ('tpl-acc','tpl','mock',?,?)`).run(nowIso, nowIso)
399
+ db.prepare(`INSERT INTO channel_agents (id, channel_id, template_id, name, harness, token, created_at, updated_at) VALUES ('ca-acc','ch-acc','tpl-acc','a','mock','tok-acc',?,?), ('ca-acc2','ch-acc','tpl-acc','a2','mock','tok-acc2',?,?)`).run(nowIso, nowIso, nowIso, nowIso)
400
+
401
+ const profileRepo = createProfileRepo(db)
402
+ profileRepo.insert({
403
+ schemaVersion: 1, id: 'optp-acc', version: 1,
404
+ modelRef: { modelId, artifactKind: 'linear_state_space@1', artifactHash: rt.repo.model.get(modelId)?.artifactHash ?? '', modelInterface: 'linear_state_space', stage: 'candidate' },
405
+ problemTemplateRef: 'linear_mpc_quadratic@1',
406
+ problemConfig: { linear_mpc_quadratic: { cvWeights: { cv1: 1 }, duWeights: { mv1: 0.05 }, terminalWeight: 2, targets: { cv1: 50 } } },
407
+ solverRef: 'osqp_mpc@1', solverVersion: '1', processSpecRef: `${spec.id}@${spec.version}`,
408
+ conditionIds: ['c1'], status: 'draft',
409
+ }, 'u-acc')
410
+ profileRepo.publish('optp-acc', 1)
411
+
412
+ const binding = createBinding({ workspaceId: 'ws-acc', channelId: 'ch-acc', agentInstanceId: 'ca-acc', profileId: 'optp-acc', profileVersion: 1 })
413
+ let templateRejected = false
414
+ try { createBinding({ workspaceId: 'ws-acc', channelId: 'ch-acc', agentInstanceId: 'tpl-acc', profileId: 'optp-acc', profileVersion: 1 }) }
415
+ catch (err) { templateRejected = (err as { code?: string }).code === 'AGENT_TEMPLATE_ID_NOT_ALLOWED' }
416
+ record('A17', '模板 id 明确拒绝(AGENT_TEMPLATE_ID_NOT_ALLOWED)', templateRejected, 'tpl-acc')
417
+ const resolved = resolveBinding('ca-acc')
418
+ resolved.lease.release()
419
+ record('A6', '唯一绑定可默认解析', resolved.binding.id === binding.id, binding.id)
420
+ let notOwned = false
421
+ try { resolveBinding('ca-acc2', binding.id) }
422
+ catch (err) { notOwned = ['BINDING_NOT_OWNED', 'BINDING_NOT_FOUND'].includes((err as { code?: string }).code ?? '') }
423
+ record('A6', '他人 binding → NOT_OWNED', notOwned, 'ca-acc2')
424
+ getBindingRepo().remove(binding.id)
425
+ let revoked = false
426
+ try { resolveBinding('ca-acc') }
427
+ catch (err) { revoked = (err as { code?: string }).code === 'BINDING_NOT_FOUND' }
428
+ record('A6', '撤权后立即拒绝', revoked, 'removed')
429
+ }
430
+
431
+ // =====================================================================
432
+ section('A8 simulated benefit')
433
+ {
434
+ // 闭环:延迟 FOPDT fixture(与训练数据同结构)。每 1 拍求解一次,只应用首步;
435
+ // 保持方案恒 u=50。history 的 u 延迟线由真实已应用输入填充。
436
+ const mkIr = (y0: number, uHist: number[]) => {
437
+ const last = uHist[uHist.length - 1] ?? 50
438
+ const x0 = Array.from({ length: artifact.stateDim }, (_, i) => {
439
+ if (i === 0) return y0
440
+ if (i >= artifact.layout.uOffset) return uHist[uHist.length - 1 - (i - artifact.layout.uOffset)] ?? last
441
+ return 0
442
+ })
443
+ return {
444
+ irVersion: 1, hash: 'a8', profileRef: 'p@1',
445
+ modelRef: { modelId: 'm', artifactKind: 'linear_state_space@1', artifactHash: 'h', modelInterface: 'linear_state_space', stage: 'production' },
446
+ solverRef: 'osqp_mpc@1',
447
+ conditions: { conditionId: 'c', lineId: line.id, productId: product.id, recipeId: recipe.id, recipeVersion: 1 },
448
+ horizon: 10, beatMs: BEAT,
449
+ scaling: { mv: { mv1: { scale: 1, offset: 0 } }, cv: { cv1: { scale: 1, offset: 0 } } },
450
+ weights: { cv: { cv1: 1 }, du: { mv1: 0.01 }, terminal: 2 },
451
+ context: { capturedAt: '', eventAsOf: 0, availabilityWatermark: null, evidenceSource: 'simulation' },
452
+ problem: {
453
+ template: 'linear_mpc_quadratic@1',
454
+ dynamics: { stateDim: artifact.stateDim, A: artifact.A.flat(), B: artifact.B.flat(), C: artifact.C.flat(), D: artifact.D.flat(), bias: artifact.bias, delays: artifact.delaysSteps, x0 },
455
+ cvSetpoints: [50], cvBounds: [{}], mvOrder: ['mv1'], cvOrder: ['cv1'], mvBounds: [{ min: 0, max: 100, maxStep: 20 }], uPrev: [last],
456
+ },
457
+ } as never
458
+ }
459
+ const errHold: number[] = []
460
+ const errMpc: number[] = []
461
+ const STEPS_A8 = 8
462
+ const EVAL_FROM = 4
463
+ for (let seed = 0; seed < 20; seed++) {
464
+ let yHold = 56 + 0.4 * Math.sin(seed)
465
+ let yMpc = yHold
466
+ const uHoldQ: number[] = []
467
+ const uMpcQ: number[] = []
468
+ for (let k = 0; k < STEPS_A8; k++) {
469
+ const disturb = 0.6 * Math.sin((seed * 7 + k) / 3)
470
+ // 保持方案
471
+ const uHold = 50
472
+ uHoldQ.push(uHold)
473
+ const uDelayedHold = uHoldQ[Math.max(0, uHoldQ.length - 1 - DELAY)]!
474
+ yHold = TRUE_A * yHold + TRUE_B * uDelayedHold + 8 + disturb
475
+ // MPC:用当前真实 history(简化:近 H 拍 y 取 yMpc、u 取已应用历史)
476
+ const uHist = [...uMpcQ.slice(-24)]
477
+ const solveRes = await pool.solve(mkIr(yMpc, uHist.length ? uHist : [50]))
478
+ const uMpc = (solveRes.result as { controls: number[][], status: string }).status === 'optimal'
479
+ ? (solveRes.result as { controls: number[][] }).controls[0]![0]!
480
+ : 50
481
+ uMpcQ.push(uMpc)
482
+ const uDelayedMpc = uMpcQ[Math.max(0, uMpcQ.length - 1 - DELAY)]!
483
+ yMpc = TRUE_A * yMpc + TRUE_B * uDelayedMpc + 8 + disturb
484
+ if (k >= EVAL_FROM) {
485
+ errHold.push(Math.abs(yHold - 50))
486
+ errMpc.push(Math.abs(yMpc - 50))
487
+ }
488
+ }
489
+ }
490
+ const med = (a: number[]) => [...a].sort((x, y) => x - y)[Math.floor(a.length / 2)]!
491
+ const diffs = errHold.map((h, i) => h - errMpc[i]!)
492
+ const mean = diffs.reduce((a, b) => a + b, 0) / diffs.length
493
+ const sd = Math.sqrt(diffs.reduce((a, b) => a + (b - mean) ** 2, 0) / (diffs.length - 1))
494
+ const lower = mean - 1.729 * sd / Math.sqrt(diffs.length)
495
+ const improve = 1 - med(errMpc) / med(errHold)
496
+ record('A8', '延迟 FOPDT fixture:MPC 相对保持中位误差改善 ≥15% 且 95% 下界>0', improve >= 0.15 && lower > 0, `improve=${(improve * 100).toFixed(1)}% hold=${med(errHold).toFixed(3)} mpc=${med(errMpc).toFixed(3)} lower=${lower.toFixed(4)}`)
497
+
498
+ const staticIr = {
499
+ irVersion: 1, hash: 'anneal', profileRef: 'p@1',
500
+ modelRef: { modelId: 'm', artifactKind: 'static_response@1', artifactHash: 'h', modelInterface: 'static_response', stage: 'production' },
501
+ solverRef: 'scipy_slsqp@1',
502
+ conditions: { conditionId: 'c', lineId: line.id, productId: product.id, recipeId: recipe.id, recipeVersion: 1 },
503
+ horizon: 1, beatMs: BEAT,
504
+ scaling: { mv: { speed: { scale: 1, offset: 0 }, zone: { scale: 1, offset: 0 } }, cv: { cv1: { scale: 1, offset: 0 } } },
505
+ weights: { cv: { cv1: 0 }, du: {}, terminal: 0, economic: { speed: -1 } },
506
+ context: { capturedAt: '', eventAsOf: 0, availabilityWatermark: null, evidenceSource: 'simulation' },
507
+ problem: {
508
+ template: 'steady_response@1', mvOrder: ['speed', 'zone'], cvOrder: ['cv1'],
509
+ coefficients: { cv1: [22, 0.85, 0.2, -0.01] }, featureOrder: ['bias', 'speed', 'zone', 'speed^2'],
510
+ cvTargets: [50], mvBounds: [{ min: 20, max: 80 }, { min: 50, max: 50 }], cvBounds: [{ min: 48, max: 52 }], uPrev: [40, 50],
511
+ },
512
+ } as never
513
+ const ra = await pool.solve(staticIr)
514
+ const cost = (ra.result as { cost?: number }).cost ?? 0
515
+ const improveEcon = (-cost - 40) / 40
516
+ record('A8', '退火响应面 fixture:SciPy 质量约束下经济代价改善 ≥15%', (ra.result as { status: string }).status === 'optimal' && improveEcon >= 0.15, `baseline=-40 optimized=${cost.toFixed(2)} improve=${(improveEcon * 100).toFixed(1)}%`)
517
+ }
518
+
519
+ // =====================================================================
520
+ section('A9/A13/A14')
521
+ {
522
+ const plan = createExperimentPlan({ lineId: line.id, specId: spec.id, levels: { mv1: [40, 50, 60] }, repeats: 2 })
523
+ record('A9', '模拟线可创建参数试验计划', Boolean(plan.id) && JSON.parse(plan.planJson).design === 'stepped_multi_level', plan.id)
524
+ const realLine = getDcwLineRepo().create({ name: '验收真实线', simulated: false })
525
+ let violation = false
526
+ try { assertSimulatedLine(realLine.id) }
527
+ catch (err) { violation = (err as { code?: string }).code === 'SIM_ONLY_VIOLATION' }
528
+ record('A9', '真实线发起模拟试验 → SIM_ONLY_VIOLATION', violation, realLine.id)
529
+
530
+ const writesPath = join(home, 'data', 'dcw-writes.json')
531
+ mkdirSync(join(home, 'data'), { recursive: true })
532
+ if (!existsSync(writesPath)) writeFileSync(writesPath, '[]')
533
+ const before = readFileSync(writesPath, 'utf8')
534
+ // 让上下文新鲜:把最后一个 run 的末 H 拍平移到现在(A9 在 fixture 之后运行,
535
+ // 原始样本已超出 context 的 maxAge=1.5×beat)。
536
+ const fresh = Date.now()
537
+ const lastPlant = plant[plant.length - 1]!
538
+ const tail: Array<{ nodeId: string, tsMs: number, value: number, state: string, lineId: string, productId: string, recipeId: string, runId: string }> = []
539
+ for (let i = 0; i < H; i++) {
540
+ const ts = fresh - (H - 1 - i) * BEAT
541
+ const idx = lastPlant.y.length - H + i
542
+ const tags = { lineId: line.id, productId: product.id, recipeId: recipe.id, runId: run.id }
543
+ tail.push({ nodeId: 'n-mv-acc', tsMs: ts, value: lastPlant.u[idx]!, state: 'ok', ...tags })
544
+ tail.push({ nodeId: 'n-cv-acc', tsMs: ts, value: lastPlant.y[idx]!, state: 'ok', ...tags })
545
+ }
546
+ await getTsdb().writeSamples(tail)
547
+ db.prepare(`INSERT INTO channel_agents (id, channel_id, template_id, name, harness, token, created_at, updated_at) VALUES ('ca-acc3','ch-acc','tpl-acc','a3','mock','tok-acc3',?,?)`).run(new Date().toISOString(), new Date().toISOString())
548
+ createBinding({ workspaceId: 'ws-acc', channelId: 'ch-acc', agentInstanceId: 'ca-acc3', profileId: 'optp-acc', profileVersion: 1 })
549
+ const outcome = await solve('ca-acc3')
550
+ const after = readFileSync(writesPath, 'utf8')
551
+ record('A9', 'solve 链路零 DCW 写入 + 持久运行/建议', before === after && outcome.runId.length > 0 && Boolean(outcome.recommendation), `run=${outcome.runId} status=${outcome.result.status} rec=${outcome.recommendation?.status ?? 'none'} diag=${outcome.result.diagnostics.message ?? ''}`)
552
+ record('A6', '缺 UQ 证据 → unverified(不得显示已验证)', outcome.recommendation?.status === 'unverified' && (outcome.recommendation?.statusLabel ?? '').includes('未验证'), outcome.recommendation?.statusLabel ?? 'none')
553
+
554
+ const h1 = recipeContentHash(recipe)
555
+ const h2 = recipeContentHash({ ...recipe, version: (recipe.version ?? 1) + 1 })
556
+ record('A13', '同 recipeId 升版 → 内容 hash 不同', h1 !== h2, `${h1.slice(0, 10)} vs ${h2.slice(0, 10)}`)
557
+ const seg = getContextSegmentRepo().insert({ lineId: line.id, runId: run.id, fromTs: now - 1000, toTs: now, recipeId: recipe.id, recipeVersion: recipe.version ?? 1, recipeContentHash: h1, conditionId: 'c1', source: 'line_run', confirmed: true })
558
+ record('A13', '批次谱系段记录版本与内容 hash', seg.recipeVersion === (recipe.version ?? 1) && seg.recipeContentHash === h1, seg.id)
559
+ let stageRejected = false
560
+ try {
561
+ parseProcessModelSpec({
562
+ ...specOf({ id: 'pms-stage-check' }),
563
+ conditions: [{ id: 's', match: [{ field: 'stage', op: 'eq', value: 'low' }] }],
564
+ })
565
+ }
566
+ catch (err) { stageRejected = (err as { code?: string }).code === 'CONDITION_FIELD_UNSUPPORTED' }
567
+ record('A13', 'stage 工况显式拒绝(首版无结构化阶段来源)', stageRejected, 'CONDITION_FIELD_UNSUPPORTED')
568
+ const { isRuntimeConditionChanged } = await import('../server/services/workshop/process-model/conditions')
569
+ const switchedAt = Date.now() + 1000
570
+ getContextSegmentRepo().insert({
571
+ lineId: line.id, runId: run.id, fromTs: switchedAt, toTs: null,
572
+ recipeId: 'rc-other', recipeVersion: 9, recipeContentHash: 'other-hash', conditionId: '', source: 'line_run', confirmed: true,
573
+ })
574
+ const changed = await isRuntimeConditionChanged(spec, {
575
+ lineId: line.id, productId: product.id, recipeId: recipe.id, recipeVersion: spec.recipeVersion,
576
+ conditionId: 'c1', capturedAt: '', eventAsOf: switchedAt, availabilityWatermark: null, dtMs: BEAT,
577
+ variables: [], history: [], timestamps: [], qualityMask: [], currentInputs: {}, currentOutputs: {}, evidenceSource: 'simulation',
578
+ })
579
+ record('A13', '运行中切换到不同配方 → 旧计划失效', changed, `recipeId=rc-other@${switchedAt}`)
580
+ // 真实切换链:lineStart(R1) → applyRecipe(R2) → 活动窗口/入库样本/谱系段必须同步
581
+ {
582
+ const { getActiveLineRun } = await import('../server/services/workshop/dcw/line-run')
583
+ const { getDcwController } = await import('../server/services/workshop/dcw/dcw-controller')
584
+ const { getDcwNodeRepo } = await import('../server/services/workshop/dcw/dcw-node.repo')
585
+ const { DcwNode } = await import('../server/services/workshop/dcw/dcw-node')
586
+ const { bindDaqHost } = await import('../server/services/workshop/daq/host-bindings')
587
+ const { getDaqHostPorts } = await import('../server/services/workshop/daq/host-ports')
588
+ bindDaqHost(null)
589
+ const ctrl = getDcwController()
590
+ // 控制节点(DCW 面)与数据节点(DAQ 面)是两类实体:配方参数只能挂控制节点
591
+ getDcwNodeRepo().insert(new DcwNode({ id: 'dcw-acc-mv', templateRef: 'dcw-temp-sp', driver: 'mock', lineId: line.id, min: 0, max: 100, unit: 'bar' }))
592
+ const r1 = getDcwRecipeRepo().create({ name: 'A13运行配方R1', productId: product.id, params: [{ nodeId: 'dcw-acc-mv', value: 40 }] })
593
+ const r2 = getDcwRecipeRepo().create({ name: 'A13运行配方R2', productId: product.id, params: [{ nodeId: 'dcw-acc-mv', value: 60 }] })
594
+ let switchOk = false
595
+ let switchDetail: string
596
+ try {
597
+ await ctrl.lineStart(line.id, r1.id)
598
+ const activeRunId = getActiveLineRun(line.id)?.runId ?? ''
599
+ const beforeSeg = getContextSegmentRepo().listByLine(line.id).find(s => s.runId === activeRunId && s.toTs == null)
600
+ await ctrl.applyRecipe(r2.id)
601
+ const afterSeg = getContextSegmentRepo().listByLine(line.id).find(s => s.runId === activeRunId && s.toTs == null)
602
+ const snap = getDaqHostPorts()?.lineRun.activeRun(line.id) ?? null
603
+ const sampleTs = afterSeg?.fromTs ?? Date.now()
604
+ // 与 ingest.ts 同源:样本标签直接取活动窗口端口(不是另造标签)
605
+ await getTsdb().writeSamples([{
606
+ nodeId: 'n-mv-acc', tsMs: sampleTs, value: 55, state: 'ok',
607
+ lineId: snap?.lineId ?? null, productId: snap?.productId ?? null, recipeId: snap?.recipeId ?? null, runId: snap?.runId ?? null,
608
+ }])
609
+ const read = await getTsdb().queryTagged({ nodeIds: ['n-mv-acc'], fromMs: sampleTs - 1, toMs: sampleTs + 1, limit: 5 })
610
+ const sample = read.get('n-mv-acc')?.[0]
611
+ // queryTagged 只回 at/value/state(标签只用于过滤):标签落库事实直接读 TSDB 行
612
+ const { ensureDataDir } = await import('../shared/config/home.mjs')
613
+ const { DatabaseSync } = await import('node:sqlite')
614
+ const tsdbRead = new DatabaseSync(join(ensureDataDir(), 'daq-timeseries.sqlite'), { readOnly: true })
615
+ const tagRow = tsdbRead.prepare('SELECT recipe_id AS recipeId, run_id AS runId, line_id AS lineId FROM daq_samples WHERE node_id = ? AND ts_ms = ?')
616
+ .get('n-mv-acc', sampleTs) as { recipeId: string | null, runId: string | null, lineId: string | null } | undefined
617
+ tsdbRead.close()
618
+ const covering = getContextSegmentRepo().at(line.id, sampleTs)
619
+ switchOk = beforeSeg?.recipeId === r1.id && snap?.recipeId === r2.id && Boolean(sample)
620
+ && tagRow?.recipeId === r2.id && tagRow?.runId === snap?.runId && tagRow?.lineId === line.id
621
+ && covering?.recipeId === r2.id && covering?.recipeVersion === (r2.version ?? 1)
622
+ switchDetail = `active=${snap?.recipeId ?? 'none'} sampleTag=${tagRow?.recipeId ?? 'none'}@${sampleTs} seg=${covering?.recipeId ?? 'none'}@${covering?.recipeVersion ?? '?'}`
623
+ }
624
+ catch (err) {
625
+ switchDetail = `不可判定:${err instanceof Error ? err.message : String(err)}`
626
+ }
627
+ finally {
628
+ try { ctrl.lineStop(line.id) }
629
+ catch { /* 已停线/未开跑 */ }
630
+ }
631
+ record('A13', '运行中 applyRecipe → 活动窗口/入库样本/谱系段同步切换到新配方', switchOk, switchDetail)
632
+ }
633
+
634
+ let immutable = false
635
+ try { specRepo.insert({ ...spec, note: 'mutated' }) }
636
+ catch (err) { immutable = (err as { code?: string }).code === 'SPEC_VERSION_IMMUTABLE' }
637
+ record('A14', '发布版不可原地修改', immutable, `${spec.id}@${spec.version}`)
638
+ let referenced = false
639
+ try { assertModelNotReferenced(db, modelId) }
640
+ catch (err) { referenced = (err as { code?: string }).code === 'MODEL_IN_USE' }
641
+ record('A14', '被 Profile 引用的模型拒删', referenced, modelId)
642
+ // 资格按绑定模型自身规格/版本溯源:同线第二个规格的模型不得借用规格 A 的合格报告
643
+ const qualifiedModel = boundModelHasEligibility(modelId)
644
+ const specB = specRepo.insert(parseProcessModelSpec(specOf({ id: 'pms-acc-b', version: 1, note: '无资格模型 fixture' })))
645
+ rt.repo.dataset.insert({
646
+ id: 'ds-acc-b', lineId: line.id, productId: product.id, recipeId: recipe.id, runIds: [run.id],
647
+ specJson: '{}', sha256: 'x', rowCount: 1, fromMs: null, toMs: null, path: datasetDir,
648
+ createdBy: 'acceptance', createdByKind: 'user', note: '', createdAt: new Date().toISOString(),
649
+ specRef: specB.id, specVersion: specB.version,
650
+ })
651
+ const experimentRow = db.prepare('SELECT id FROM aml_experiments WHERE job_id = ? ORDER BY created_at DESC LIMIT 1').get(job.id) as { id: string } | undefined
652
+ const unqualifiedModelId = 'mdl-acc-unqualified'
653
+ db.prepare(`INSERT INTO aml_models (id, experiment_id, dataset_id, product_id, recipe_id, purpose, stage,
654
+ io_spec_json, metrics_json, path, created_by, note, label, description, line_id, objective_id,
655
+ artifact_kind, schema_version, model_interface, artifact_hash, legacy, created_at)
656
+ VALUES (?, ?, 'ds-acc-b', ?, ?, 'mpc_surrogate', 'shadow', '{}', '{}', '', 'acceptance', '', '无资格模型', 'A14 fixture', ?, '',
657
+ 'linear_state_space@1', 2, 'linear_state_space', 'x', '', ?)`)
658
+ .run(unqualifiedModelId, experimentRow?.id ?? '', product.id, recipe.id, line.id, new Date().toISOString())
659
+ const unqualifiedModel = boundModelHasEligibility(unqualifiedModelId)
660
+ record('A14', '资格按绑定模型自身规格溯源(同线其他规格的合格报告不放行)', qualifiedModel && !unqualifiedModel, `qualified=${qualifiedModel} unqualified=${unqualifiedModel}`)
661
+ setHybridChannelProfile({
662
+ channelId: 'ch-acc', profile: 'aml_optimization', optimizationMode: 'aml',
663
+ boundModelId: unqualifiedModelId, capability: {}, controlPolicy: 'bounded_auto', createdBy: 'acc',
664
+ })
665
+ const legacyDispatch = await dispatchHostTool(
666
+ {
667
+ identity: { agentId: 'ca-acc-nobind', channelId: 'ch-acc', role: 'worker', name: 'a4' },
668
+ state: { currentTaskId: null, sourceChatMessageId: null, sourceChatDeliveryId: null, replyContext: null },
669
+ getWorkspace: () => null,
670
+ },
671
+ { toolName: 'mpc_optimize', arguments: {} },
672
+ )
673
+ record('A14', 'dispatch 复核:绑定模型无真实优化资格 → OPTIMIZATION_NOT_ELIGIBLE(不返回候选)',
674
+ legacyDispatch.isError === true && legacyDispatch.text.includes('OPTIMIZATION_NOT_ELIGIBLE'), legacyDispatch.text.slice(0, 100))
675
+ const legacyBlocked = legacyMpcAliasGate({ toolName: 'mpc_optimize', hasOptimizerBinding: false, hasBoundModel: false })
676
+ const legacyUnqualified = legacyMpcAliasGate({ toolName: 'mpc_optimize', hasOptimizerBinding: false, hasBoundModel: true, hasEligibleModel: unqualifiedModel })
677
+ const legacyQualified = legacyMpcAliasGate({ toolName: 'mpc_optimize', hasOptimizerBinding: false, hasBoundModel: true, hasEligibleModel: qualifiedModel })
678
+ record('A14', '旧 mpc_optimize:无绑定/无模型或无资格 → 引导;有资格模型 → 保留旧路径',
679
+ !legacyBlocked.allowed && legacyBlocked.code === 'BINDING_NOT_FOUND'
680
+ && !legacyUnqualified.allowed && legacyUnqualified.code === 'OPTIMIZATION_NOT_ELIGIBLE'
681
+ && legacyQualified.allowed,
682
+ `${legacyBlocked.code ?? ''}/${legacyUnqualified.code ?? ''}`)
683
+ }
684
+
685
+ // =====================================================================
686
+ section('A11 config generality')
687
+ {
688
+ const altSpec = specOf({
689
+ id: 'pms-acc-alt', version: 1,
690
+ conditions: [
691
+ { id: 'c-low', match: [{ field: 'recipeId', op: 'eq', value: recipe.id }, { field: 'recipeVersion', op: 'range', value: [0, 1] }] },
692
+ { id: 'c-high', match: [{ field: 'recipeId', op: 'eq', value: recipe.id }, { field: 'recipeVersion', op: 'range', value: [2, 5] }] },
693
+ ],
694
+ variables: [
695
+ { id: 'screw_speed', nodeId: 'n-mv-acc', role: 'mv', field: 'value', unit: 'rpm', modelUnit: 'bar', scale: 1, offset: 0, delayMs: DELAY * BEAT, min: 0, max: 100, maxStep: 20 },
696
+ { id: 'thickness_um', nodeId: 'n-cv-acc', role: 'cv', field: 'value', unit: 'μm', scale: 1, offset: 0, min: 0, max: 200 },
697
+ ],
698
+ effectiveDomain: { mv: { screw_speed: { min: 0, max: 100, maxStep: 20 } }, cv: { thickness_um: { min: 0, max: 200 } } },
699
+ })
700
+ const altRow = specRepo.insert(parseProcessModelSpec(altSpec))
701
+ record('A11', '第三留出场景(新 id/变量名/单位/两个互斥工况)通过校验', Boolean(altRow.id) && altRow.contentHash !== specRepo.get(spec.id, 1)!.contentHash, `${altRow.id}@${altRow.version}`)
702
+ const altArt = trainLinearArx(readDataset(datasetDir), { arOrder: 1, inputOrder: 1, ridgeLambda: 1e-6, standardize: true }, { variables: [{ id: 'screw_speed', nodeId: 'n-mv-acc', role: 'mv', delayMs: DELAY * BEAT }, { id: 'thickness_um', nodeId: 'n-cv-acc', role: 'cv' }], beatMs: BEAT })
703
+ record('A11', '变量名/单位变化不改核心代码(同训练器可训练)', altArt.metrics.rolloutImprovement >= 0.2 && altArt.mvOrder[0] === 'screw_speed', `${(altArt.metrics.rolloutImprovement * 100).toFixed(1)}%`)
704
+ }
705
+
706
+ // =====================================================================
707
+ section('A12 artifact dispatch')
708
+ {
709
+ const model = rt.repo.model.get(modelId)!
710
+ record('A12', '新工件走对应 loader/io_spec', model.artifactKind === 'linear_state_space@1' && model.modelInterface === 'linear_state_space' && model.artifactHash.length === 64, `${model.artifactKind}/${model.modelInterface}`)
711
+ const v1Dir = join(rt.datasetsDir, 'ds-v1')
712
+ mkdirSync(join(v1Dir, 'arrays'), { recursive: true })
713
+ writeFileSync(join(v1Dir, 'manifest.json'), JSON.stringify({ version: 1 }))
714
+ for (const f of ['x.f32', 'u.f32', 'y.f32']) writeFileSync(join(v1Dir, 'arrays', f), Buffer.from(new Float32Array([1, 2, 3]).buffer))
715
+ const h1 = hashDatasetDir(v1Dir, '{"a":1}')
716
+ const h2 = hashDatasetDir(v1Dir, '{"a":1}')
717
+ record('A12', 'v1 数据集 hash 兼容(无新增文件参与)', h1 === h2 && h1.length === 64, h1.slice(0, 10))
718
+ }
719
+
720
+ // =====================================================================
721
+ section('A18/A21 tools')
722
+ {
723
+ const defs = HOST_TOOLS.filter(t => OPTIMIZER_TOOL_NAMES.has(t.name))
724
+ record('A21', 'HOST_TOOLS 含 5 个 optimizer_* 且处理器命中', defs.length === 5 && [...OPTIMIZER_TOOL_NAMES].every(n => INDUSTRIAL_TOOL_NAMES.has(n)), defs.map(t => t.name).join(','))
725
+ const solveDef = defs.find(t => t.name === 'optimizer_solve')
726
+ record('A21', 'optimizer_solve schema 含 binding_id 且 type=object', (solveDef?.parameters as { type?: string })?.type === 'object' && Boolean((solveDef?.parameters as { properties?: Record<string, unknown> })?.properties?.binding_id))
727
+ const builtin = buildToolRegistrySnapshot().filter(t => t.source === 'builtin')
728
+ record('A21', 'tool_registry builtin 计数 = HOST_TOOLS.length', builtin.length === HOST_TOOLS.length, `${builtin.length}/${HOST_TOOLS.length}`)
729
+
730
+ setHybridChannelProfile({ channelId: 'ch-acc', profile: 'aml_optimization', capability: {}, controlPolicy: 'bounded_auto', createdBy: 'acc' })
731
+ const nowIso = new Date().toISOString()
732
+ db.prepare(`INSERT INTO channels (id, name, description, enabled, created_at, updated_at) VALUES ('ch-legacy','l','',1,?,?)`).run(nowIso, nowIso)
733
+ setHybridChannelProfile({ channelId: 'ch-legacy', profile: 'legacy', capability: {}, controlPolicy: 'manual', createdBy: 'acc' })
734
+ const opt = hostToolsForRole('worker', 'ch-acc').map(t => t.name)
735
+ const legacy = hostToolsForRole('worker', 'ch-legacy').map(t => t.name)
736
+ record('A21', 'optimizer 工具仅注入优化档位', opt.includes('optimizer_solve') && !legacy.includes('optimizer_solve'), `opt=${opt.filter(n => n.startsWith('optimizer_')).length} legacy=${legacy.filter(n => n.startsWith('optimizer_')).length}`)
737
+
738
+ const legacyDenied = optimizerDispatchGate({ toolName: 'optimizer_solve', twinKind: 'legacy', bindingCount: 1 })
739
+ record('A21', 'legacy 直调 optimizer_solve 明确拒绝(非未知工具)', legacyDenied.allowed === false && legacyDenied.code === 'OPTIMIZER_CHANNEL_DISABLED', legacyDenied.code ?? '')
740
+ const trainingDenied = optimizerDispatchGate({ toolName: 'optimizer_solve', twinKind: 'aml_training', bindingCount: 1 })
741
+ record('A21', '训练档位直调 optimizer_solve 明确拒绝(非未知工具)', trainingDenied.allowed === false && trainingDenied.code === 'OPTIMIZER_PROFILE_DENIED', trainingDenied.code ?? '')
742
+ const noBinding = optimizerDispatchGate({ toolName: 'optimizer_solve', twinKind: 'aml_optimization', bindingCount: 0 })
743
+ record('A21', '无绑定 solve → BINDING_NOT_FOUND(capabilities 仍可调)', noBinding.allowed === false && noBinding.code === 'BINDING_NOT_FOUND' && optimizerDispatchGate({ toolName: 'optimizer_capabilities', twinKind: 'aml_optimization', bindingCount: 0 }).allowed, noBinding.code ?? '')
744
+
745
+ const t1 = [{ name: 'a', description: 'd', parameters: { type: 'object', properties: { x: { type: 'string' } } } }]
746
+ const t2 = [{ name: 'a', description: 'd', parameters: { type: 'object', properties: { x: { type: 'number' } } } }]
747
+ record('A18', 'schema-only 变更触发签名变化', toolSignature(t1) !== toolSignature(t2))
748
+ record('A18', '空工具表签名 ≠ 非空(解绑后清空)', toolSignature([]) !== toolSignature(t1) && toolSignature([]) === '[]')
749
+ }
750
+
751
+ // =====================================================================
752
+ section('A19 retention')
753
+ {
754
+ const tables = ['process_model_specs', 'process_model_eligibility', 'optimizer_runs', 'optimizer_candidates', 'optimizer_recommendations']
755
+ const names = new Set((db.prepare('SELECT name FROM sqlite_master WHERE type = \'table\'').all() as Array<{ name: string }>).map(r => r.name))
756
+ record('A19', '新表纳入主库(备份/保留同一连接)', tables.every(t => names.has(t)), tables.join(','))
757
+ const { retentionSettings } = await import('../server/services/workshop/settings')
758
+ const s = retentionSettings() as unknown as Record<string, number>
759
+ record('A19', 'retention.optimizer_days / process_model_days 可读', Number.isFinite(s.optimizer_days) && Number.isFinite(s.process_model_days), `optimizer=${s.optimizer_days} process=${s.process_model_days}`)
760
+ }
761
+
762
+ // =====================================================================
763
+ section('A7 performance')
764
+ {
765
+ const perfIr = { ...mpcIr, hash: 'perf', horizon: 20, problem: { ...mpcProblem, cvSetpoints: [50] } } as never
766
+ await pool.solve(perfIr)
767
+ const lat: number[] = []
768
+ for (let i = 0; i < 100; i++) {
769
+ const t0 = Date.now()
770
+ await pool.solve(perfIr)
771
+ lat.push(Date.now() - t0)
772
+ }
773
+ lat.sort((a, b) => a - b)
774
+ const p95 = lat[Math.floor(lat.length * 0.95) - 1]!
775
+ record('A7', 'horizon=20 求解 p95 ≤1s(含 IPC,100 次)', p95 <= 1000, `p95=${p95}ms p50=${lat[50]}ms`)
776
+ }
777
+
778
+ // =====================================================================
779
+ section('A20 gates')
780
+ {
781
+ // i18n parity 直接读取两语言字典(不 spawn 子进程;退出码由最终门禁承载)
782
+ const zh = (await import('../i18n/locales/zh-CN')).default as Record<string, unknown>
783
+ const en = (await import('../i18n/locales/en')).default as Record<string, unknown>
784
+ const flat = (o: Record<string, unknown>, p = ''): string[] => Object.entries(o).flatMap(([k, v]) => (v && typeof v === 'object' ? flat(v as Record<string, unknown>, `${p}${k}.`) : [`${p}${k}`]))
785
+ const zhKeys = new Set(flat(zh))
786
+ const enKeys = new Set(flat(en))
787
+ const missing = [...zhKeys].filter(k => !enKeys.has(k)).length + [...enKeys].filter(k => !zhKeys.has(k)).length
788
+ record('A20', 'i18n 双语 key 齐备(PARITY)', missing === 0 && zhKeys.size === enKeys.size, `zh=${zhKeys.size} en=${enKeys.size}`)
789
+ // 门禁以外部真实运行结果为准(scripts/run-quality-gates.mjs 写 gates.json)
790
+ let gateRuns: Array<{ id: string, exitCode: number }> = []
791
+ try {
792
+ const gates = JSON.parse(readFileSync(join(evidenceDir, 'gates.json'), 'utf8')) as { ok?: boolean, results?: Array<{ id: string, exitCode: number }> }
793
+ gateRuns = gates.results ?? []
794
+ }
795
+ catch { gateRuns = [] }
796
+ const requiredGates = ['lint', 'typecheck', 'unit', 'i18n']
797
+ const gatesOk = requiredGates.every(id => gateRuns.some(r => r.id === id && r.exitCode === 0))
798
+ record('A20', '四项门禁真实 exitCode=0(lint/typecheck/unit/i18n)', gatesOk, gateRuns.length ? gateRuns.map(r => `${r.id}:${r.exitCode}`).join(' ') : 'gates.json 缺失(先运行 scripts/run-quality-gates.mjs)')
799
+ }
800
+
801
+ // =====================================================================
802
+ section('A22 environment')
803
+ {
804
+ const { requirementsHash, venvIdentity } = await import('../server/services/workshop/aml/python-runtime')
805
+ const req = readFileSync(join(process.cwd(), 'server', 'services', 'workshop', 'aml', 'python', 'requirements.txt'), 'utf8')
806
+ record('A22', 'requirements 锁定 osqp', req.includes('osqp=='), requirementsHash())
807
+ const outReq = join(process.cwd(), '.output', '.AgentWorkShop', 'aml-python', 'requirements.txt')
808
+ const outHas = existsSync(outReq) && readFileSync(outReq, 'utf8').includes('osqp')
809
+ record('A22', '.output 打包 requirements 含 osqp(构建后检查)', outHas || !existsSync(join(process.cwd(), '.output')), outHas ? 'present' : '.output 未构建(记为待构建)')
810
+ const outWorker = join(process.cwd(), '.output', '.AgentWorkShop', 'optimizer-python', 'worker.py')
811
+ record('A22', '.output 打包 Solver Worker(worker.py/problems.py/probe.py)', existsSync(outWorker) && existsSync(join(process.cwd(), '.output', '.AgentWorkShop', 'optimizer-python', 'problems.py')) && existsSync(join(process.cwd(), '.output', '.AgentWorkShop', 'optimizer-python', 'probe.py')), outWorker)
812
+ const id = venvIdentity(rt)
813
+ record('A22', 'AML 与 Solver 同一解释器/锁', Boolean(id.pythonPath) && id.requirementsHash === requirementsHash(), id.requirementsHash)
814
+ record('A22', '线程预算显式注入(源码断言)', readFileSync(join(process.cwd(), 'server', 'services', 'workshop', 'optimization', 'worker-client.ts'), 'utf8').includes('OMP_NUM_THREADS'))
815
+ record('A22', '桥签名覆盖 parameters(源码断言)', readFileSync(join(process.cwd(), 'server', 'harness', 'aw-mcp-bridge.mjs'), 'utf8').includes('bridgeSignature'))
816
+ }
817
+
818
+ // =====================================================================
819
+ section('A10 regression')
820
+ {
821
+ const suites = ['optimizer-contracts', 'optimizer-schema', 'tsdb-quality', 'optimizer-adapter-registry', 'process-model-trainers', 'optimizer-binding', 'aml-job-success', 'optimizer-solver', 'aml-env-lease', 'tool-face-authz']
822
+ record('A10', '新增单测文件齐备', suites.every(n => existsSync(join(process.cwd(), 'tests', `${n}.test.ts`))), `${suites.length} 套`)
823
+ record('A10', '既有 AML/Twin/DCW 套件保留', existsSync(join(process.cwd(), 'tests', 'aml-twin-provider-registry.test.ts')) && existsSync(join(process.cwd(), 'tests', 'recipe-approval-snapshot.test.ts')))
824
+ }
825
+
826
+ const passed = results.filter(r => r.pass).length
827
+ const failed = results.length - passed
828
+ const evidence = {
829
+ at: new Date().toISOString(),
830
+ durationMs: Date.now() - started,
831
+ base: 'in-process(no HTTP server)',
832
+ env: { node: process.version, platform: `${process.platform}-${process.arch}`, cwd: process.cwd() },
833
+ versions: { acceptance: '2026-10-22-optimizer-process-model/v1', schema: 2, plan: 'docs/plans/2026-10-22-optimizer-process-model-plan.md' },
834
+ commands: [
835
+ 'node scripts/run-quality-gates.mjs',
836
+ 'npx tsx --tsconfig .nuxt/tsconfig.server.json scripts/acceptance-optimizer-process-model.ts',
837
+ 'npm run build',
838
+ ],
839
+ gateRuns: (() => {
840
+ try {
841
+ return (JSON.parse(readFileSync(join(evidenceDir, 'gates.json'), 'utf8')) as { results?: unknown[] }).results ?? []
842
+ }
843
+ catch { return [] }
844
+ })(),
845
+ hash: createHash('sha256').update(JSON.stringify(results)).digest('hex'),
846
+ limitations: [
847
+ 'Timescale queryTagged(raw) 仍未返回 state/ingested_at,且未实现 queryTaggedPage(C5/C6/C7 的 SQLite 分支完整;Timescale 的 query()/latest() 已返回 state)',
848
+ 'A9 的浏览器点击未在本脚本执行;判定覆盖接口载荷/持久状态/零写计数 + UI 路由与 i18n 契约',
849
+ 'A7 p95 为本地单机 fixture(horizon=20,1 MV/1 CV),不含冷启动与训练',
850
+ 'A8 使用延迟 FOPDT 与静态响应面 fixture(闭环只应用首步);未耦合 plc-node-simulator 的真实 CastFilmModel/AnnealModel',
851
+ '旧 mpc_optimize 仍走 TS 启发式,未路由到 Manager/资格门(计划 G4.6 未完成)',
852
+ '单长 run 的时间块隔离切分未实现(数据集按 run 切分;gates 以 train/val/test 非空判定)',
853
+ 'static_response 的 训练→权威评估→注册→预测 全链未在验收中端到端执行(训练器与求解器已单测)',
854
+ 'A18 仅验证签名算法与 gate(未测 omp≤5s / bridge≤15s / pi 次回合的实际时序)',
855
+ ],
856
+ pass: passed,
857
+ total: results.length,
858
+ results,
859
+ }
860
+ writeFileSync(join(evidenceDir, 'acceptance.json'), JSON.stringify(evidence, null, 2))
861
+ console.log(`\n${passed}/${results.length} 通过;证据:${join(evidenceDir, 'acceptance.json')}`)
862
+ await pool.shutdown()
863
+ if (failed > 0) process.exitCode = 1