agentworkshop 0.7.54 → 0.7.59

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 (1356) hide show
  1. package/.AgentWorkShop/prompts/host-tools.json +2418 -2184
  2. package/.env.example +1 -0
  3. package/.output/.AgentWorkShop/prompts/host-tools.json +2418 -2184
  4. package/.output/.AgentWorkShop/schema.json +140 -138
  5. package/.output/nitro.json +1 -1
  6. package/.output/public/_nuxt/2pU5BiaQ2.js +1 -0
  7. package/.output/public/_nuxt/{BdF9OAZq2.js → 4RTUlYvj2.js} +1 -1
  8. package/.output/public/_nuxt/AuthGate.Cvsc4atp.css +1 -0
  9. package/.output/public/_nuxt/B-Y_rsfn.js +106 -0
  10. package/.output/public/_nuxt/{BhcbvVOa2.js → B02cxZz72.js} +1 -1
  11. package/.output/public/_nuxt/{DNZmwhSD.js → B03LfmKR.js} +1 -1
  12. package/.output/public/_nuxt/{BZtgVXC5.js → B4R5CHkk.js} +3 -3
  13. package/.output/public/_nuxt/{B3zB6K6m.js → BAqtRt0q.js} +1 -1
  14. package/.output/public/_nuxt/BDC8YDyc.js +1 -0
  15. package/.output/public/_nuxt/{uY58gQqR2.js → BG7XSX-S2.js} +1 -1
  16. package/.output/public/_nuxt/{DUribplv2.js → BH30ZaLl2.js} +1 -1
  17. package/.output/public/_nuxt/BKHd_sKD2.js +47 -0
  18. package/.output/public/_nuxt/{S9rLP7_v.js → BMUEVeOK.js} +1 -1
  19. package/.output/public/_nuxt/{D9TpiWjt.js → BMZ1d25O.js} +1 -1
  20. package/.output/public/_nuxt/{DFhyhDGa2.js → BNl_jGa12.js} +1 -1
  21. package/.output/public/_nuxt/{BxoaZc_U2.js → BSG-4Ecg2.js} +1 -1
  22. package/.output/public/_nuxt/{BPqXOlYX.js → BU7WuuKh.js} +1 -1
  23. package/.output/public/_nuxt/{BP8TgWo02.js → BVH9j8dQ2.js} +1 -1
  24. package/.output/public/_nuxt/{C7_F68I7.js → BXKCB3rS.js} +1 -1
  25. package/.output/public/_nuxt/{DioKmYyB2.js → Bd85nb9X2.js} +1 -1
  26. package/.output/public/_nuxt/BhrnGVGz.js +1 -0
  27. package/.output/public/_nuxt/BikIgp9R.js +1 -0
  28. package/.output/public/_nuxt/Bj7BcqHn.js +1 -0
  29. package/.output/public/_nuxt/BkGqyjWm.js +3 -0
  30. package/.output/public/_nuxt/{CP0Nep9S.js → BkO2MZZU.js} +1 -1
  31. package/.output/public/_nuxt/{KXjvpIk2.js → Bn1N3mJv.js} +1 -1
  32. package/.output/public/_nuxt/Br2LgfbH2.js +13 -0
  33. package/.output/public/_nuxt/BrFF_9742.js +1 -0
  34. package/.output/public/_nuxt/{tKxYgsf-.js → BtDBBofS.js} +1 -1
  35. package/.output/public/_nuxt/BtNT93vm2.js +1 -0
  36. package/.output/public/_nuxt/{BxWvUgMz2.js → BtYg4aGR2.js} +1 -1
  37. package/.output/public/_nuxt/BuVH9MB-.js +1 -0
  38. package/.output/public/_nuxt/BupBjt6B2.js +1 -0
  39. package/.output/public/_nuxt/{D2Sm-GTk2.js → ByvqxkcN.js} +1 -1
  40. package/.output/public/_nuxt/{CzlUIbK32.js → BzKT-ne_2.js} +3 -3
  41. package/.output/public/_nuxt/{vPfDYgvR.js → C4X_Z1lA.js} +1 -1
  42. package/.output/public/_nuxt/C5wBzGO7.js +1 -0
  43. package/.output/public/_nuxt/{BgnhB8r5.js → C8uaVABF.js} +1 -1
  44. package/.output/public/_nuxt/{BmTzcKJg2.js → C98jxVaK.js} +1 -1
  45. package/.output/public/_nuxt/CBATzTUf.js +13 -0
  46. package/.output/public/_nuxt/{B9rIcCX12.js → CCCq9H7D2.js} +1 -1
  47. package/.output/public/_nuxt/{CvGYm7w8.js → CEP4UrDv.js} +1 -1
  48. package/.output/public/_nuxt/CHyzK5m52.js +1 -0
  49. package/.output/public/_nuxt/CIPKYgrH2.js +1 -0
  50. package/.output/public/_nuxt/{Drq9iy6V.js → CIz7SM4H.js} +1 -1
  51. package/.output/public/_nuxt/{PY2GW_3N2.js → CKE_kTL92.js} +1 -1
  52. package/.output/public/_nuxt/CPSHP_EI.js +1 -0
  53. package/.output/public/_nuxt/{DCPhrNWR2.js → CSyIwYcJ2.js} +1 -1
  54. package/.output/public/_nuxt/{v55S8LnT.js → CW1HGp5X.js} +1 -1
  55. package/.output/public/_nuxt/{Yv9YItEX2.js → CYGkUj5M2.js} +1 -1
  56. package/.output/public/_nuxt/{DppqsiPC.js → CZ0Gt81h.js} +2 -2
  57. package/.output/public/_nuxt/{Cg8Pgbeu.js → CZkTlW93.js} +2 -2
  58. package/.output/public/_nuxt/{Dz2SLIde.js → CZwDnomB.js} +1 -1
  59. package/.output/public/_nuxt/{DnAn2LgG.js → CZyYdpqZ2.js} +1 -1
  60. package/.output/public/_nuxt/{BJhsCisg2.js → CaBVMdqG2.js} +1 -1
  61. package/.output/public/_nuxt/{CMWyj56j.js → CeDkXWCz.js} +1 -1
  62. package/.output/public/_nuxt/{C-y_g11k.js → Cl19UD7U.js} +1 -1
  63. package/.output/public/_nuxt/ClEbKcuS.js +1 -0
  64. package/.output/public/_nuxt/{B4ujjkUI.js → ClrkV0C4.js} +1 -1
  65. package/.output/public/_nuxt/{nT-bgxvf.js → CmTqFlYZ.js} +1 -1
  66. package/.output/public/_nuxt/{deBcbALe2.js → CnF6dXcZ2.js} +1 -1
  67. package/.output/public/_nuxt/CoGETbe-2.js +1 -0
  68. package/.output/public/_nuxt/{Dq0emNZi2.js → CuRtzvsa2.js} +1 -1
  69. package/.output/public/_nuxt/{CBUIODly2.js → Cv_H1gOM2.js} +1 -1
  70. package/.output/public/_nuxt/{Cmp8PMrA.js → CxLxiOGV.js} +1 -1
  71. package/.output/public/_nuxt/{MbT4wXb62.js → D1Xw30Dj2.js} +1 -1
  72. package/.output/public/_nuxt/{DJyNDnag.js → D5hI4Fhu.js} +1 -1
  73. package/.output/public/_nuxt/D5i2ofVw2.js +1 -0
  74. package/.output/public/_nuxt/D6XGn5vM.js +2 -0
  75. package/.output/public/_nuxt/{DjefmmJu.js → D6c5ppqB.js} +1 -1
  76. package/.output/public/_nuxt/D8VQGThE.js +28 -0
  77. package/.output/public/_nuxt/{DmzmgYHb2.js → DBwuADr82.js} +1 -1
  78. package/.output/public/_nuxt/{DO9xaI9a.js → DEhjFhZ2.js} +1 -1
  79. package/.output/public/_nuxt/{DuPM4HXw.js → DIDbAMv5.js} +1 -1
  80. package/.output/public/_nuxt/{CfLUvgr32.js → DJZzthKt2.js} +1 -1
  81. package/.output/public/_nuxt/{Bpkm4W5P.js → DKhRushG.js} +1 -1
  82. package/.output/public/_nuxt/DLAFNaPf.js +1 -0
  83. package/.output/public/_nuxt/{DffgG8vT.js → DMPpE41S2.js} +1 -1
  84. package/.output/public/_nuxt/{CPeZNE4S2.js → DTZO6WMs2.js} +1 -1
  85. package/.output/public/_nuxt/{Dk6Zf3-L.js → DTx_DtUo.js} +1 -1
  86. package/.output/public/_nuxt/DYtV50yi2.js +1 -0
  87. package/.output/public/_nuxt/{CV61ysvv.js → DctCtJq7.js} +1 -1
  88. package/.output/public/_nuxt/{xX7ccjDl2.js → DelESEcl2.js} +1 -1
  89. package/.output/public/_nuxt/DfqRQSFn.js +19 -0
  90. package/.output/public/_nuxt/{BFZIll912.js → DgldLfCZ2.js} +1 -1
  91. package/.output/public/_nuxt/Dmgqz2np.js +16 -0
  92. package/.output/public/_nuxt/Do0dCE8C2.js +1 -0
  93. package/.output/public/_nuxt/DraEWn4N2.js +1 -0
  94. package/.output/public/_nuxt/{Bwc6lt2X.js → Drhta6gr.js} +2 -2
  95. package/.output/public/_nuxt/{Cn6ihm8j.js → Du0zf-d3.js} +1 -1
  96. package/.output/public/_nuxt/{DqtnqNgL2.js → DvUt9uMt2.js} +1 -1
  97. package/.output/public/_nuxt/{C5cf3T4d.js → Dxo1GW5U.js} +1 -1
  98. package/.output/public/_nuxt/{Ca3iDJwu2.js → Dy-V8OEW2.js} +9 -9
  99. package/.output/public/_nuxt/{BWowAAJb.js → DyMgrV29.js} +1 -1
  100. package/.output/public/_nuxt/{Dm_iKz8k2.js → Eo2BYEIo2.js} +1 -1
  101. package/.output/public/_nuxt/{aV6YPjg02.js → H7Rbu32y2.js} +1 -1
  102. package/.output/public/_nuxt/{vXrNItas2.js → KS3KQF222.js} +1 -1
  103. package/.output/public/_nuxt/{BjWbbMHs.js → M58CVYnv.js} +1 -1
  104. package/.output/public/_nuxt/M6NcguDO.js +1 -0
  105. package/.output/public/_nuxt/{CtPNnATm2.js → MEwEMEMl2.js} +6 -6
  106. package/.output/public/_nuxt/MW-V7IIP2.js +1 -0
  107. package/.output/public/_nuxt/{tq3HbWr9.js → P0EcfD3j.js} +1 -1
  108. package/.output/public/_nuxt/{CHrErv1E.js → TjGWqrHo.js} +1 -1
  109. package/.output/public/_nuxt/{TownView.Xt1yygrh.css → TownView.BuMpDRkf.css} +1 -1
  110. package/.output/public/_nuxt/VVomhVqu2.js +1 -0
  111. package/.output/public/_nuxt/{QHo9mN-M2.js → WYqAa0r52.js} +1 -1
  112. package/.output/public/_nuxt/YDs3mbQu2.js +1 -0
  113. package/.output/public/_nuxt/{Dep0Hc9w2.js → Z3MSTcdu2.js} +1 -1
  114. package/.output/public/_nuxt/_id_.DOqX4gwB.css +1 -0
  115. package/.output/public/_nuxt/_vR_sc7t.js +24 -0
  116. package/.output/public/_nuxt/{aml.-czpKIs8.css → aml.BeFTP6_M.css} +1 -1
  117. package/.output/public/_nuxt/bTFhJlrI2.js +1 -0
  118. package/.output/public/_nuxt/builds/latest.json +1 -1
  119. package/.output/public/_nuxt/builds/meta/92fd7e2e-18f2-45c3-8588-d93004dda6e3.json +1 -0
  120. package/.output/public/_nuxt/daq.YQas76du.css +1 -0
  121. package/.output/public/_nuxt/dcw.UIcWRyIS.css +1 -0
  122. package/.output/public/_nuxt/{default.CyLpQD1C.css → default.8ac6QU28.css} +1 -1
  123. package/.output/public/_nuxt/{entry.JdEG3KJg.css → entry.BHNNQA9H.css} +1 -1
  124. package/.output/public/_nuxt/{D-Xyb3DA.js → gbaq2UOO.js} +1 -1
  125. package/.output/public/_nuxt/goF_oZHF.js +2 -0
  126. package/.output/public/_nuxt/h46i74oE.js +14 -0
  127. package/.output/public/_nuxt/{Cpm5JYv4.js → iZa330UY.js} +1 -1
  128. package/.output/public/_nuxt/logs.Bf65Kw17.css +1 -0
  129. package/.output/public/_nuxt/lyJsJl_G.js +1 -0
  130. package/.output/public/_nuxt/o-G6YtmK2.js +1 -0
  131. package/.output/public/_nuxt/{BkfA3BbD.js → pNy4V4kd.js} +1 -1
  132. package/.output/public/_nuxt/{C_sjV3Ee.js → pncSmP5n.js} +1 -1
  133. package/.output/public/_nuxt/{DVOR2pWg.js → qIQFsHtF.js} +1 -1
  134. package/.output/public/_nuxt/town.DFotRPod.css +1 -0
  135. package/.output/public/_nuxt/workshop.BX2YeO0g.css +1 -0
  136. package/.output/public/_nuxt/yPlLXpEw2.js +1 -0
  137. package/.output/public/_nuxt/ylowSquM2.js +1 -0
  138. package/.output/public/_nuxt/{Da0h_6VA.js → zGDAozGA.js} +4 -4
  139. package/.output/server/chunks/_/binding-authz.mjs +8 -4
  140. package/.output/server/chunks/_/binding-authz.mjs.map +1 -1
  141. package/.output/server/chunks/_/character-asset.repo.mjs +1 -1
  142. package/.output/server/chunks/_/entity.mjs +1 -1
  143. package/.output/server/chunks/_/host-bindings.mjs +22 -2
  144. package/.output/server/chunks/_/host-bindings.mjs.map +1 -1
  145. package/.output/server/chunks/_/nitro.mjs +13085 -8339
  146. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  147. package/.output/server/chunks/_/scene-layout.repo.mjs +1 -1
  148. package/.output/server/chunks/_/user.schema.mjs +5 -1
  149. package/.output/server/chunks/_/user.schema.mjs.map +1 -1
  150. package/.output/server/chunks/build/{workshop-BDqWzJtr.mjs → AuthGate-DDPYswkA.mjs} +22 -327
  151. package/.output/server/chunks/build/AuthGate-DDPYswkA.mjs.map +1 -0
  152. package/.output/server/chunks/build/FormItemContext-4ORSzhWv.mjs +1 -1
  153. package/.output/server/chunks/build/{OmpTerminalPanel-mk31gVzA.mjs → OmpTerminalPanel-DZ2wHMS1.mjs} +4 -4
  154. package/.output/server/chunks/build/{OmpTerminalPanel-mk31gVzA.mjs.map → OmpTerminalPanel-DZ2wHMS1.mjs.map} +1 -1
  155. package/.output/server/chunks/build/{TownView-Bf5VFYFj.mjs → TownView-CZbFn6mO.mjs} +216 -107
  156. package/.output/server/chunks/build/TownView-CZbFn6mO.mjs.map +1 -0
  157. package/.output/server/chunks/build/{_id_-WF20tjqT.mjs → _id_-CCVhpJtj.mjs} +7 -6
  158. package/.output/server/chunks/build/_id_-CCVhpJtj.mjs.map +1 -0
  159. package/.output/server/chunks/build/{_id_-CuUmVPRg.mjs → _id_-Df2pgsAq.mjs} +521 -94
  160. package/.output/server/chunks/build/_id_-Df2pgsAq.mjs.map +1 -0
  161. package/.output/server/chunks/build/{_wsId_-BUIKB68b.mjs → _wsId_-CJqF-hmP.mjs} +19 -19
  162. package/.output/server/chunks/build/{_wsId_-BUIKB68b.mjs.map → _wsId_-CJqF-hmP.mjs.map} +1 -1
  163. package/.output/server/chunks/build/{agents-DqICy4AL.mjs → agents-BTsbna5H.mjs} +13 -13
  164. package/.output/server/chunks/build/{agents-DqICy4AL.mjs.map → agents-BTsbna5H.mjs.map} +1 -1
  165. package/.output/server/chunks/build/{aml-C55iuLn-.mjs → aml-BBKfWto1.mjs} +28 -27
  166. package/.output/server/chunks/build/aml-BBKfWto1.mjs.map +1 -0
  167. package/.output/server/chunks/build/api-B4Om0mEc.mjs +2 -1
  168. package/.output/server/chunks/build/api-B4Om0mEc.mjs.map +1 -1
  169. package/.output/server/chunks/build/{card-CUSocE9p.mjs → card-DJOYGuVH.mjs} +4 -4
  170. package/.output/server/chunks/build/{card-CUSocE9p.mjs.map → card-DJOYGuVH.mjs.map} +1 -1
  171. package/.output/server/chunks/build/{channel-templates-gdCLajKy.mjs → channel-templates-BPKJ8e4l.mjs} +9 -9
  172. package/.output/server/chunks/build/{channel-templates-gdCLajKy.mjs.map → channel-templates-BPKJ8e4l.mjs.map} +1 -1
  173. package/.output/server/chunks/build/constants-HPHJvjne.mjs +2 -1
  174. package/.output/server/chunks/build/constants-HPHJvjne.mjs.map +1 -1
  175. package/.output/server/chunks/build/{daq-D0kLscVr.mjs → daq-Cz7TaUAM.mjs} +38 -29
  176. package/.output/server/chunks/build/daq-Cz7TaUAM.mjs.map +1 -0
  177. package/.output/server/chunks/build/{dcw-DuhEyu7S.mjs → dcw-EhjJpVQM.mjs} +45 -20
  178. package/.output/server/chunks/build/dcw-EhjJpVQM.mjs.map +1 -0
  179. package/.output/server/chunks/build/{default-aFGiNebw.mjs → default-DweMY872.mjs} +260 -48
  180. package/.output/server/chunks/build/{default-aFGiNebw.mjs.map → default-DweMY872.mjs.map} +1 -1
  181. package/.output/server/chunks/build/{dropdown-Yev6knaj.mjs → dropdown-CIsqbX4P.mjs} +2 -2
  182. package/.output/server/chunks/build/{dropdown-Yev6knaj.mjs.map → dropdown-CIsqbX4P.mjs.map} +1 -1
  183. package/.output/server/chunks/build/{dropdown-KdKWCS5K.mjs → dropdown-CV9GW3z9.mjs} +5 -5
  184. package/.output/server/chunks/build/{dropdown-KdKWCS5K.mjs.map → dropdown-CV9GW3z9.mjs.map} +1 -1
  185. package/.output/server/chunks/build/{form-uSlNqIAV.mjs → form-cs_RcfGx.mjs} +4 -5
  186. package/.output/server/chunks/build/{form-uSlNqIAV.mjs.map → form-cs_RcfGx.mjs.map} +1 -1
  187. package/.output/server/chunks/{_/SearchOutlined.mjs → build/input-CobQ5LJ5.mjs} +1476 -103
  188. package/.output/server/chunks/build/input-CobQ5LJ5.mjs.map +1 -0
  189. package/.output/server/chunks/build/{input-number-BRVnxeiA.mjs → input-number-BpPYAWMk.mjs} +4 -4
  190. package/.output/server/chunks/build/{input-number-BRVnxeiA.mjs.map → input-number-BpPYAWMk.mjs.map} +1 -1
  191. package/.output/server/chunks/build/{logs-BlOalbsZ.mjs → logs-As9fZqU-.mjs} +49 -35
  192. package/.output/server/chunks/build/logs-As9fZqU-.mjs.map +1 -0
  193. package/.output/server/chunks/build/{menu-BgkRSSx7.mjs → menu-CVmvHyFT.mjs} +3 -3
  194. package/.output/server/chunks/build/{menu-BgkRSSx7.mjs.map → menu-CVmvHyFT.mjs.map} +1 -1
  195. package/.output/server/chunks/build/{monitor-DX_K0WMq.mjs → monitor-CdFQ2z4g.mjs} +17 -17
  196. package/.output/server/chunks/build/{monitor-DX_K0WMq.mjs.map → monitor-CdFQ2z4g.mjs.map} +1 -1
  197. package/.output/server/chunks/build/{operations-BD6LK-Yz.mjs → operations-B2gHCWgZ.mjs} +7 -6
  198. package/.output/server/chunks/build/operations-B2gHCWgZ.mjs.map +1 -0
  199. package/.output/server/chunks/build/{pages-DloBBvU5.mjs → pages-BItCt1ar.mjs} +5 -4
  200. package/.output/server/chunks/build/pages-BItCt1ar.mjs.map +1 -0
  201. package/.output/server/chunks/build/{permissions-BvmodvsO.mjs → permissions-D6mQw_9j.mjs} +12 -12
  202. package/.output/server/chunks/build/{permissions-BvmodvsO.mjs.map → permissions-D6mQw_9j.mjs.map} +1 -1
  203. package/.output/server/chunks/build/plugins-NAS9MQ5r.mjs +2 -1
  204. package/.output/server/chunks/build/plugins-NAS9MQ5r.mjs.map +1 -1
  205. package/.output/server/chunks/build/{popconfirm-Ox-_2V8A.mjs → popconfirm-DFfoFhmt.mjs} +2 -2
  206. package/.output/server/chunks/build/{popconfirm-Ox-_2V8A.mjs.map → popconfirm-DFfoFhmt.mjs.map} +1 -1
  207. package/.output/server/chunks/build/{schedules-D8vYHgQ5.mjs → schedules-BjWNDWL5.mjs} +16 -16
  208. package/.output/server/chunks/build/{schedules-D8vYHgQ5.mjs.map → schedules-BjWNDWL5.mjs.map} +1 -1
  209. package/.output/server/chunks/build/{segmented-C61yLHvo.mjs → segmented-D7FkCgg7.mjs} +2 -2
  210. package/.output/server/chunks/build/{segmented-C61yLHvo.mjs.map → segmented-D7FkCgg7.mjs.map} +1 -1
  211. package/.output/server/chunks/build/{select-rdBWytVK.mjs → select-FqBNxgxT.mjs} +3 -3
  212. package/.output/server/chunks/build/{select-rdBWytVK.mjs.map → select-FqBNxgxT.mjs.map} +1 -1
  213. package/.output/server/chunks/build/{settings-B7HA-sdb.mjs → settings-Cl_KRyEn.mjs} +9 -9
  214. package/.output/server/chunks/build/{settings-B7HA-sdb.mjs.map → settings-Cl_KRyEn.mjs.map} +1 -1
  215. package/.output/server/chunks/build/{table-DOFAvY-v.mjs → table-CeOYERqr.mjs} +8 -9
  216. package/.output/server/chunks/build/{table-DOFAvY-v.mjs.map → table-CeOYERqr.mjs.map} +1 -1
  217. package/.output/server/chunks/build/{tabs-DTeIuZeP.mjs → tabs-LLNSdLl2.mjs} +5 -6
  218. package/.output/server/chunks/build/{tabs-DTeIuZeP.mjs.map → tabs-LLNSdLl2.mjs.map} +1 -1
  219. package/.output/server/chunks/build/{tag-CHLGvNM6.mjs → tag-Dwvkh0Dj.mjs} +2 -3
  220. package/.output/server/chunks/build/{tag-CHLGvNM6.mjs.map → tag-Dwvkh0Dj.mjs.map} +1 -1
  221. package/.output/server/chunks/build/{teams-wM-MdLv9.mjs → teams-CGDZHaQl.mjs} +11 -11
  222. package/.output/server/chunks/build/{teams-wM-MdLv9.mjs.map → teams-CGDZHaQl.mjs.map} +1 -1
  223. package/.output/server/chunks/build/{tokens-CloWk4x_.mjs → tokens-BOYkZuoB.mjs} +13 -13
  224. package/.output/server/chunks/build/{tokens-CloWk4x_.mjs.map → tokens-BOYkZuoB.mjs.map} +1 -1
  225. package/.output/server/chunks/build/{town-BIn3be5v.mjs → town-BV-hbwb5.mjs} +41 -6
  226. package/.output/server/chunks/build/town-BV-hbwb5.mjs.map +1 -0
  227. package/.output/server/chunks/build/{town-B2gBu_ZE.mjs → town-P1rYoi0v.mjs} +7 -6
  228. package/.output/server/chunks/build/town-P1rYoi0v.mjs.map +1 -0
  229. package/.output/server/chunks/build/types-D6J7slEa.mjs +1 -1
  230. package/.output/server/chunks/build/useAgentHarnessOptions-BnFCh23W.mjs +2 -1
  231. package/.output/server/chunks/build/useAgentHarnessOptions-BnFCh23W.mjs.map +1 -1
  232. package/.output/server/chunks/build/useAgentTemplateActions-DsBRUQni.mjs +2 -1
  233. package/.output/server/chunks/build/useAgentTemplateActions-DsBRUQni.mjs.map +1 -1
  234. package/.output/server/chunks/build/useAgentTemplateDialogState-CZzpu5og.mjs +2 -1
  235. package/.output/server/chunks/build/useAgentTemplateDialogState-CZzpu5og.mjs.map +1 -1
  236. package/.output/server/chunks/build/useAgentTemplateForm-DzQ_t2Ue.mjs +2 -1
  237. package/.output/server/chunks/build/useAgentTemplateForm-DzQ_t2Ue.mjs.map +1 -1
  238. package/.output/server/chunks/build/useAgentTemplatesCatalog-Q7LgG1Af.mjs +2 -1
  239. package/.output/server/chunks/build/useAgentTemplatesCatalog-Q7LgG1Af.mjs.map +1 -1
  240. package/.output/server/chunks/build/useAmlDatasets-DeoE1idn.mjs +2 -1
  241. package/.output/server/chunks/build/useAmlDatasets-DeoE1idn.mjs.map +1 -1
  242. package/.output/server/chunks/build/useAmlEntities-BMLHU_39.mjs +3 -2
  243. package/.output/server/chunks/build/useAmlEntities-BMLHU_39.mjs.map +1 -1
  244. package/.output/server/chunks/build/useAmlEnv-DdlyVzPu.mjs +2 -1
  245. package/.output/server/chunks/build/useAmlEnv-DdlyVzPu.mjs.map +1 -1
  246. package/.output/server/chunks/build/useAmlExperiments-Dloi834i.mjs +2 -1
  247. package/.output/server/chunks/build/useAmlExperiments-Dloi834i.mjs.map +1 -1
  248. package/.output/server/chunks/build/useAmlFormat-C2sl3MGB.mjs +2 -1
  249. package/.output/server/chunks/build/useAmlFormat-C2sl3MGB.mjs.map +1 -1
  250. package/.output/server/chunks/build/{useAmlJobs--a_1ovew.mjs → useAmlJobs-BG_v21hJ.mjs} +4 -3
  251. package/.output/server/chunks/build/useAmlJobs-BG_v21hJ.mjs.map +1 -0
  252. package/.output/server/chunks/build/useAmlModels-D7MuOWOy.mjs +2 -1
  253. package/.output/server/chunks/build/useAmlModels-D7MuOWOy.mjs.map +1 -1
  254. package/.output/server/chunks/build/useAmlNotes-CTZe-GI0.mjs +2 -1
  255. package/.output/server/chunks/build/useAmlNotes-CTZe-GI0.mjs.map +1 -1
  256. package/.output/server/chunks/build/useAmlPredict-BToRrVRV.mjs +2 -1
  257. package/.output/server/chunks/build/useAmlPredict-BToRrVRV.mjs.map +1 -1
  258. package/.output/server/chunks/build/useDaqAddNode-CaOCbe4-.mjs +3 -2
  259. package/.output/server/chunks/build/useDaqAddNode-CaOCbe4-.mjs.map +1 -1
  260. package/.output/server/chunks/build/useDaqDetailBinding-C7AbGIdP.mjs +2 -1
  261. package/.output/server/chunks/build/useDaqDetailBinding-C7AbGIdP.mjs.map +1 -1
  262. package/.output/server/chunks/build/useDaqDetailFrames-CmAEdbAL.mjs +2 -1
  263. package/.output/server/chunks/build/useDaqDetailFrames-CmAEdbAL.mjs.map +1 -1
  264. package/.output/server/chunks/build/{useDaqDetailHistory-pfi6zXWU.mjs → useDaqDetailHistory-C4LWayu1.mjs} +4 -3
  265. package/.output/server/chunks/build/useDaqDetailHistory-C4LWayu1.mjs.map +1 -0
  266. package/.output/server/chunks/build/{useDaqDetailNode-qT7MjqJ7.mjs → useDaqDetailNode-DXgwAu5u.mjs} +5 -4
  267. package/.output/server/chunks/build/useDaqDetailNode-DXgwAu5u.mjs.map +1 -0
  268. package/.output/server/chunks/build/useDaqDetailParams-CrTMDs-2.mjs +3 -2
  269. package/.output/server/chunks/build/useDaqDetailParams-CrTMDs-2.mjs.map +1 -1
  270. package/.output/server/chunks/build/{useDaqFilters-CMysN13f.mjs → useDaqFilters-Jx6EERfr.mjs} +5 -4
  271. package/.output/server/chunks/build/useDaqFilters-Jx6EERfr.mjs.map +1 -0
  272. package/.output/server/chunks/build/useDaqNodeWindow-1DWj2H5G.mjs +2 -1
  273. package/.output/server/chunks/build/useDaqNodeWindow-1DWj2H5G.mjs.map +1 -1
  274. package/.output/server/chunks/build/{useDaqOptimizations-Coq5lsfM.mjs → useDaqOptimizations-C5N4bcu4.mjs} +4 -3
  275. package/.output/server/chunks/build/useDaqOptimizations-C5N4bcu4.mjs.map +1 -0
  276. package/.output/server/chunks/build/useDaqStream-DhzdoyIR.mjs +1 -1
  277. package/.output/server/chunks/build/useDaqTemplates-C7GzQmdJ.mjs +3 -2
  278. package/.output/server/chunks/build/useDaqTemplates-C7GzQmdJ.mjs.map +1 -1
  279. package/.output/server/chunks/build/useDashboardCharts-D45083s_.mjs +2 -1
  280. package/.output/server/chunks/build/useDashboardCharts-D45083s_.mjs.map +1 -1
  281. package/.output/server/chunks/build/{useDashboardData-DgJcGJaF.mjs → useDashboardData-Ce-EU5DJ.mjs} +4 -3
  282. package/.output/server/chunks/build/useDashboardData-Ce-EU5DJ.mjs.map +1 -0
  283. package/.output/server/chunks/build/{useDcwAddNode-C9DbEKHi.mjs → useDcwAddNode-4mTPQ6T8.mjs} +38 -4
  284. package/.output/server/chunks/build/useDcwAddNode-4mTPQ6T8.mjs.map +1 -0
  285. package/.output/server/chunks/build/{useDcwCards-VDoMYG7l.mjs → useDcwCards-DvLGgUYr.mjs} +4 -3
  286. package/.output/server/chunks/build/useDcwCards-DvLGgUYr.mjs.map +1 -0
  287. package/.output/server/chunks/build/{useDcwDetailScope-CL97tJdJ.mjs → useDcwDetailScope-4j3B03Pi.mjs} +4 -3
  288. package/.output/server/chunks/build/useDcwDetailScope-4j3B03Pi.mjs.map +1 -0
  289. package/.output/server/chunks/build/{useDcwDetailTemplates-OLmjMSGD.mjs → useDcwDetailTemplates-yzNEAMK-.mjs} +4 -3
  290. package/.output/server/chunks/build/useDcwDetailTemplates-yzNEAMK-.mjs.map +1 -0
  291. package/.output/server/chunks/build/{useDcwFilter-Bs9C6-h_.mjs → useDcwFilter-BQDmQYY0.mjs} +4 -3
  292. package/.output/server/chunks/build/useDcwFilter-BQDmQYY0.mjs.map +1 -0
  293. package/.output/server/chunks/build/{useDcwLedger-Bbf_iFOY.mjs → useDcwLedger-DWGufEor.mjs} +4 -3
  294. package/.output/server/chunks/build/useDcwLedger-DWGufEor.mjs.map +1 -0
  295. package/.output/server/chunks/build/{useDcwLineMutations-Bhtuqw7J.mjs → useDcwLineMutations-DHF-Bemn.mjs} +4 -3
  296. package/.output/server/chunks/build/useDcwLineMutations-DHF-Bemn.mjs.map +1 -0
  297. package/.output/server/chunks/build/{useDcwLineRun-CGqZSnG4.mjs → useDcwLineRun-VFe35xou.mjs} +4 -3
  298. package/.output/server/chunks/build/useDcwLineRun-VFe35xou.mjs.map +1 -0
  299. package/.output/server/chunks/build/{useDcwParamApprovals-BBwdFsKv.mjs → useDcwParamApprovals-Bc0BGBds.mjs} +8 -7
  300. package/.output/server/chunks/build/useDcwParamApprovals-Bc0BGBds.mjs.map +1 -0
  301. package/.output/server/chunks/build/{useDcwProducts-BoBkJqpv.mjs → useDcwProducts-DXisXYMh.mjs} +4 -3
  302. package/.output/server/chunks/build/useDcwProducts-DXisXYMh.mjs.map +1 -0
  303. package/.output/server/chunks/build/{useDcwQuery-DP7b2qb6.mjs → useDcwQuery-Cmo3UtIQ.mjs} +4 -3
  304. package/.output/server/chunks/build/useDcwQuery-Cmo3UtIQ.mjs.map +1 -0
  305. package/.output/server/chunks/build/{useDcwQuickActions-DHRiA9KN.mjs → useDcwQuickActions-BkAcxVnj.mjs} +4 -3
  306. package/.output/server/chunks/build/useDcwQuickActions-BkAcxVnj.mjs.map +1 -0
  307. package/.output/server/chunks/build/{useDcwRecipes-CIMeH2oF.mjs → useDcwRecipes-BvtGPQJ9.mjs} +16 -5
  308. package/.output/server/chunks/build/useDcwRecipes-BvtGPQJ9.mjs.map +1 -0
  309. package/.output/server/chunks/build/{useDcwStream-B9ugUWRq.mjs → useDcwStream-BXJ2V8HM.mjs} +12 -2
  310. package/.output/server/chunks/build/{useDcwStream-B9ugUWRq.mjs.map → useDcwStream-BXJ2V8HM.mjs.map} +1 -1
  311. package/.output/server/chunks/build/{useDcwTemplates-M_-qjV8E.mjs → useDcwTemplates-Zxz2DPdu.mjs} +4 -3
  312. package/.output/server/chunks/build/useDcwTemplates-Zxz2DPdu.mjs.map +1 -0
  313. package/.output/server/chunks/build/{useDcwWrites-D94dAzqr.mjs → useDcwWrites-66CKxcos.mjs} +4 -3
  314. package/.output/server/chunks/build/useDcwWrites-66CKxcos.mjs.map +1 -0
  315. package/.output/server/chunks/build/useExpConfirmations-BbInIHsn.mjs +106 -0
  316. package/.output/server/chunks/build/useExpConfirmations-BbInIHsn.mjs.map +1 -0
  317. package/.output/server/chunks/build/{useLocalTime-DZ2RAtVs.mjs → useLocalTime-CUnDHV5V.mjs} +8 -2
  318. package/.output/server/chunks/build/useLocalTime-CUnDHV5V.mjs.map +1 -0
  319. package/.output/server/chunks/build/useLogsFormat-B-o4MHy7.mjs +2 -1
  320. package/.output/server/chunks/build/useLogsFormat-B-o4MHy7.mjs.map +1 -1
  321. package/.output/server/chunks/build/useLogsManual-CMjD62nt.mjs +2 -1
  322. package/.output/server/chunks/build/useLogsManual-CMjD62nt.mjs.map +1 -1
  323. package/.output/server/chunks/build/{useLogsQuery-2x1mKxT1.mjs → useLogsQuery-C5nadU1m.mjs} +15 -4
  324. package/.output/server/chunks/build/useLogsQuery-C5nadU1m.mjs.map +1 -0
  325. package/.output/server/chunks/build/{useLogsScope-04cUJCU-.mjs → useLogsScope-DgrB1ur3.mjs} +4 -3
  326. package/.output/server/chunks/build/useLogsScope-DgrB1ur3.mjs.map +1 -0
  327. package/.output/server/chunks/build/useMonitorColumns-DhYvkLDq.mjs +2 -1
  328. package/.output/server/chunks/build/useMonitorColumns-DhYvkLDq.mjs.map +1 -1
  329. package/.output/server/chunks/build/{useMonitorData-guVjMDtR.mjs → useMonitorData-D2gFSonG.mjs} +4 -3
  330. package/.output/server/chunks/build/useMonitorData-D2gFSonG.mjs.map +1 -0
  331. package/.output/server/chunks/build/{useMonitorFormat-C7lhZe4g.mjs → useMonitorFormat-DRCXsKwh.mjs} +4 -3
  332. package/.output/server/chunks/build/useMonitorFormat-DRCXsKwh.mjs.map +1 -0
  333. package/.output/server/chunks/build/useMonitorTerminal-Dj4QwRNW.mjs +2 -1
  334. package/.output/server/chunks/build/useMonitorTerminal-Dj4QwRNW.mjs.map +1 -1
  335. package/.output/server/chunks/build/useOperationsFeed-DsA2ym7M.mjs +2 -1
  336. package/.output/server/chunks/build/useOperationsFeed-DsA2ym7M.mjs.map +1 -1
  337. package/.output/server/chunks/build/useOpsLog-SnWPuRtK.mjs.map +1 -1
  338. package/.output/server/chunks/build/useRecipeDispatchApprovals-CbL2El3n.mjs +155 -0
  339. package/.output/server/chunks/build/useRecipeDispatchApprovals-CbL2El3n.mjs.map +1 -0
  340. package/.output/server/chunks/build/useTeamActions-BOLQkYxg.mjs +2 -1
  341. package/.output/server/chunks/build/useTeamActions-BOLQkYxg.mjs.map +1 -1
  342. package/.output/server/chunks/build/useTeamAddMemberDialog-BCgrLPxI.mjs +2 -1
  343. package/.output/server/chunks/build/useTeamAddMemberDialog-BCgrLPxI.mjs.map +1 -1
  344. package/.output/server/chunks/build/useTeamCreateDialog-CJk40LqS.mjs +2 -1
  345. package/.output/server/chunks/build/useTeamCreateDialog-CJk40LqS.mjs.map +1 -1
  346. package/.output/server/chunks/build/useTeamDeployDialog-49hdUXQP.mjs +2 -1
  347. package/.output/server/chunks/build/useTeamDeployDialog-49hdUXQP.mjs.map +1 -1
  348. package/.output/server/chunks/build/useTeamDialogState-CFRUQxAf.mjs +2 -1
  349. package/.output/server/chunks/build/useTeamDialogState-CFRUQxAf.mjs.map +1 -1
  350. package/.output/server/chunks/build/useTeamPluginDialog-Dh-QOoiU.mjs +2 -1
  351. package/.output/server/chunks/build/useTeamPluginDialog-Dh-QOoiU.mjs.map +1 -1
  352. package/.output/server/chunks/build/useTeamsCatalog-HBSyKt5P.mjs +2 -1
  353. package/.output/server/chunks/build/useTeamsCatalog-HBSyKt5P.mjs.map +1 -1
  354. package/.output/server/chunks/build/useTokenClipboard-CwQpoFeP.mjs +2 -1
  355. package/.output/server/chunks/build/useTokenClipboard-CwQpoFeP.mjs.map +1 -1
  356. package/.output/server/chunks/build/useTokenCreate-DkYvEQUD.mjs +2 -1
  357. package/.output/server/chunks/build/useTokenCreate-DkYvEQUD.mjs.map +1 -1
  358. package/.output/server/chunks/build/useTokenRename-DOCP4aeI.mjs +2 -1
  359. package/.output/server/chunks/build/useTokenRename-DOCP4aeI.mjs.map +1 -1
  360. package/.output/server/chunks/build/useTokenReveal-CybwwflV.mjs +2 -1
  361. package/.output/server/chunks/build/useTokenReveal-CybwwflV.mjs.map +1 -1
  362. package/.output/server/chunks/build/useTokensList-BLiMvrc4.mjs +2 -1
  363. package/.output/server/chunks/build/useTokensList-BLiMvrc4.mjs.map +1 -1
  364. package/.output/server/chunks/build/{useWorkbenchAuth-DqjBX-6w.mjs → useWorkbenchAuth-DAabQl7X.mjs} +6 -2
  365. package/.output/server/chunks/build/useWorkbenchAuth-DAabQl7X.mjs.map +1 -0
  366. package/.output/server/chunks/build/{useWorkbenchWorkspaces-GQVU9BLv.mjs → useWorkbenchWorkspaces-6-mpCGCR.mjs} +5 -4
  367. package/.output/server/chunks/build/useWorkbenchWorkspaces-6-mpCGCR.mjs.map +1 -0
  368. package/.output/server/chunks/build/{useWorkshopWs-CgeCsaYJ.mjs → useWorkshopWs-CM-Ywk4h.mjs} +2 -2
  369. package/.output/server/chunks/build/{useWorkshopWs-CgeCsaYJ.mjs.map → useWorkshopWs-CM-Ywk4h.mjs.map} +1 -1
  370. package/.output/server/chunks/build/useWorkspaceAuth-Dlvj9csD.mjs +2 -1
  371. package/.output/server/chunks/build/useWorkspaceAuth-Dlvj9csD.mjs.map +1 -1
  372. package/.output/server/chunks/build/{useWorkspaceChannels-B13vROC1.mjs → useWorkspaceChannels--65yU02b.mjs} +5 -4
  373. package/.output/server/chunks/build/useWorkspaceChannels--65yU02b.mjs.map +1 -0
  374. package/.output/server/chunks/build/useWorkspacePanels-CTwREmq0.mjs +2 -1
  375. package/.output/server/chunks/build/useWorkspacePanels-CTwREmq0.mjs.map +1 -1
  376. package/.output/server/chunks/build/useWorkspaceShell-BCypjjjE.mjs +2 -1
  377. package/.output/server/chunks/build/useWorkspaceShell-BCypjjjE.mjs.map +1 -1
  378. package/.output/server/chunks/build/{users-CCf5PgRs.mjs → users-B_pHStEa.mjs} +13 -13
  379. package/.output/server/chunks/build/{users-CCf5PgRs.mjs.map → users-B_pHStEa.mjs.map} +1 -1
  380. package/.output/server/chunks/build/workshop-C0DefygA.mjs +522 -0
  381. package/.output/server/chunks/build/workshop-C0DefygA.mjs.map +1 -0
  382. package/.output/server/chunks/routes/api/health.get.mjs +12 -2
  383. package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
  384. package/.output/server/chunks/routes/api/index.get.mjs +4 -3
  385. package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
  386. package/.output/server/chunks/routes/api/index.post.mjs +3 -2
  387. package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
  388. package/.output/server/chunks/routes/api/mcp/workshop.mjs +3 -2
  389. package/.output/server/chunks/routes/api/mcp/workshop.mjs.map +1 -1
  390. package/.output/server/chunks/routes/api/metrics.mjs +11 -1
  391. package/.output/server/chunks/routes/api/metrics.mjs.map +1 -1
  392. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +2 -1
  393. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs.map +1 -1
  394. package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs +2 -1
  395. package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs.map +1 -1
  396. package/.output/server/chunks/routes/api/plugins/i18n.get.mjs +2 -1
  397. package/.output/server/chunks/routes/api/plugins/i18n.get.mjs.map +1 -1
  398. package/.output/server/chunks/routes/api/plugins/manifest.get.mjs +2 -1
  399. package/.output/server/chunks/routes/api/plugins/manifest.get.mjs.map +1 -1
  400. package/.output/server/chunks/routes/api/system/backup/list.get.mjs +2 -1
  401. package/.output/server/chunks/routes/api/system/backup/list.get.mjs.map +1 -1
  402. package/.output/server/chunks/routes/api/system/backup/run.post.mjs +4 -3
  403. package/.output/server/chunks/routes/api/system/backup/run.post.mjs.map +1 -1
  404. package/.output/server/chunks/routes/api/system/config-groups/_id_.delete.mjs +2 -1
  405. package/.output/server/chunks/routes/api/system/config-groups/_id_.delete.mjs.map +1 -1
  406. package/.output/server/chunks/routes/api/system/config-groups/_id_.patch.mjs +2 -1
  407. package/.output/server/chunks/routes/api/system/config-groups/_id_.patch.mjs.map +1 -1
  408. package/.output/server/chunks/routes/api/system/config.get.mjs +2 -1
  409. package/.output/server/chunks/routes/api/system/config.get.mjs.map +1 -1
  410. package/.output/server/chunks/routes/api/system/index.get.mjs +2 -1
  411. package/.output/server/chunks/routes/api/system/index.get.mjs.map +1 -1
  412. package/.output/server/chunks/routes/api/system/index.patch.mjs +2 -1
  413. package/.output/server/chunks/routes/api/system/index.patch.mjs.map +1 -1
  414. package/.output/server/chunks/routes/api/system/index.post.mjs +2 -1
  415. package/.output/server/chunks/routes/api/system/index.post.mjs.map +1 -1
  416. package/.output/server/chunks/routes/api/system/index2.get.mjs +2 -1
  417. package/.output/server/chunks/routes/api/system/index2.get.mjs.map +1 -1
  418. package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs +2 -1
  419. package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs.map +1 -1
  420. package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs +2 -1
  421. package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs.map +1 -1
  422. package/.output/server/chunks/routes/api/system/monitor.get.mjs +2 -1
  423. package/.output/server/chunks/routes/api/system/monitor.get.mjs.map +1 -1
  424. package/.output/server/chunks/routes/api/system/settings/events.get.mjs +2 -1
  425. package/.output/server/chunks/routes/api/system/settings/events.get.mjs.map +1 -1
  426. package/.output/server/chunks/routes/api/system/settings/reset.post.mjs +2 -1
  427. package/.output/server/chunks/routes/api/system/settings/reset.post.mjs.map +1 -1
  428. package/.output/server/chunks/routes/api/system/timezone.get.mjs +2 -1
  429. package/.output/server/chunks/routes/api/system/timezone.get.mjs.map +1 -1
  430. package/.output/server/chunks/routes/api/users/_id_.delete.mjs +2 -1
  431. package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
  432. package/.output/server/chunks/routes/api/users/_id_.get.mjs +2 -1
  433. package/.output/server/chunks/routes/api/users/_id_.get.mjs.map +1 -1
  434. package/.output/server/chunks/routes/api/users/_id_.put.mjs +2 -1
  435. package/.output/server/chunks/routes/api/users/_id_.put.mjs.map +1 -1
  436. package/.output/server/chunks/routes/api/users/change-password.post.mjs +35 -0
  437. package/.output/server/chunks/routes/api/users/change-password.post.mjs.map +1 -0
  438. package/.output/server/chunks/routes/api/users/index.get.mjs +3 -2
  439. package/.output/server/chunks/routes/api/users/index.get.mjs.map +1 -1
  440. package/.output/server/chunks/routes/api/users/index.post.mjs +4 -3
  441. package/.output/server/chunks/routes/api/users/index.post.mjs.map +1 -1
  442. package/.output/server/chunks/routes/api/users/login.post.mjs +4 -3
  443. package/.output/server/chunks/routes/api/users/login.post.mjs.map +1 -1
  444. package/.output/server/chunks/routes/api/users/logout.post.mjs +3 -2
  445. package/.output/server/chunks/routes/api/users/logout.post.mjs.map +1 -1
  446. package/.output/server/chunks/routes/api/users/me.get.mjs +3 -2
  447. package/.output/server/chunks/routes/api/users/me.get.mjs.map +1 -1
  448. package/.output/server/chunks/routes/api/users/register.post.mjs +3 -2
  449. package/.output/server/chunks/routes/api/users/register.post.mjs.map +1 -1
  450. package/.output/server/chunks/routes/api/users/setup-status.get.mjs +6 -3
  451. package/.output/server/chunks/routes/api/users/setup-status.get.mjs.map +1 -1
  452. package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs +3 -2
  453. package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs.map +1 -1
  454. package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs +3 -2
  455. package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs.map +1 -1
  456. package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs +4 -3
  457. package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs.map +1 -1
  458. package/.output/server/chunks/routes/api/workshop/_...path_.mjs +2 -1
  459. package/.output/server/chunks/routes/api/workshop/_...path_.mjs.map +1 -1
  460. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs +2 -1
  461. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs.map +1 -1
  462. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs +2 -1
  463. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs.map +1 -1
  464. package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs +2 -1
  465. package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs.map +1 -1
  466. package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs +15 -5
  467. package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs.map +1 -1
  468. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs +3 -2
  469. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs.map +1 -1
  470. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs +24 -3
  471. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs.map +1 -1
  472. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/grant.post.mjs +3 -2
  473. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/grant.post.mjs.map +1 -1
  474. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/revoke.post.mjs +3 -2
  475. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/revoke.post.mjs.map +1 -1
  476. package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs +3 -2
  477. package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs.map +1 -1
  478. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +48 -8
  479. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs.map +1 -1
  480. package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs +3 -2
  481. package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs.map +1 -1
  482. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +3 -2
  483. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs.map +1 -1
  484. package/.output/server/chunks/routes/api/workshop/agent-tools/list.get.mjs +3 -2
  485. package/.output/server/chunks/routes/api/workshop/agent-tools/list.get.mjs.map +1 -1
  486. package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs +2 -1
  487. package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs.map +1 -1
  488. package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs +2 -1
  489. package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs.map +1 -1
  490. package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs +2 -1
  491. package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs.map +1 -1
  492. package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs +2 -1
  493. package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs.map +1 -1
  494. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id/preview.get.mjs +3 -2
  495. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id/preview.get.mjs.map +1 -1
  496. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.delete.mjs +3 -2
  497. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.delete.mjs.map +1 -1
  498. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs +3 -2
  499. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs.map +1 -1
  500. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.patch.mjs +3 -2
  501. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.patch.mjs.map +1 -1
  502. package/.output/server/chunks/routes/api/workshop/aml/entities/prune.post.mjs +2 -1
  503. package/.output/server/chunks/routes/api/workshop/aml/entities/prune.post.mjs.map +1 -1
  504. package/.output/server/chunks/routes/api/workshop/aml/env/recheck.post.mjs +3 -2
  505. package/.output/server/chunks/routes/api/workshop/aml/env/recheck.post.mjs.map +1 -1
  506. package/.output/server/chunks/routes/api/workshop/aml/env/uv.post.mjs +3 -2
  507. package/.output/server/chunks/routes/api/workshop/aml/env/uv.post.mjs.map +1 -1
  508. package/.output/server/chunks/routes/api/workshop/aml/env/venv.post.mjs +3 -2
  509. package/.output/server/chunks/routes/api/workshop/aml/env/venv.post.mjs.map +1 -1
  510. package/.output/server/chunks/routes/api/workshop/aml/index.get.mjs +3 -2
  511. package/.output/server/chunks/routes/api/workshop/aml/index.get.mjs.map +1 -1
  512. package/.output/server/chunks/routes/api/workshop/aml/index.post.mjs +3 -2
  513. package/.output/server/chunks/routes/api/workshop/aml/index.post.mjs.map +1 -1
  514. package/.output/server/chunks/routes/api/workshop/aml/index2.get.mjs +2 -1
  515. package/.output/server/chunks/routes/api/workshop/aml/index2.get.mjs.map +1 -1
  516. package/.output/server/chunks/routes/api/workshop/aml/index2.post.mjs +3 -2
  517. package/.output/server/chunks/routes/api/workshop/aml/index2.post.mjs.map +1 -1
  518. package/.output/server/chunks/routes/api/workshop/aml/index3.get.mjs +3 -2
  519. package/.output/server/chunks/routes/api/workshop/aml/index3.get.mjs.map +1 -1
  520. package/.output/server/chunks/routes/api/workshop/aml/index3.post.mjs +3 -2
  521. package/.output/server/chunks/routes/api/workshop/aml/index3.post.mjs.map +1 -1
  522. package/.output/server/chunks/routes/api/workshop/aml/index4.get.mjs +3 -2
  523. package/.output/server/chunks/routes/api/workshop/aml/index4.get.mjs.map +1 -1
  524. package/.output/server/chunks/routes/api/workshop/aml/index5.get.mjs +3 -2
  525. package/.output/server/chunks/routes/api/workshop/aml/index5.get.mjs.map +1 -1
  526. package/.output/server/chunks/routes/api/workshop/aml/index6.get.mjs +3 -2
  527. package/.output/server/chunks/routes/api/workshop/aml/index6.get.mjs.map +1 -1
  528. package/.output/server/chunks/routes/api/workshop/aml/index7.get.mjs +3 -2
  529. package/.output/server/chunks/routes/api/workshop/aml/index7.get.mjs.map +1 -1
  530. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/cancel.post.mjs +3 -2
  531. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/cancel.post.mjs.map +1 -1
  532. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/logs.get.mjs +3 -2
  533. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/logs.get.mjs.map +1 -1
  534. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/retry.post.mjs +3 -2
  535. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/retry.post.mjs.map +1 -1
  536. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.delete.mjs +3 -2
  537. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.delete.mjs.map +1 -1
  538. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.get.mjs +3 -2
  539. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.get.mjs.map +1 -1
  540. package/.output/server/chunks/routes/api/workshop/aml/models/_id/predict.post.mjs +3 -2
  541. package/.output/server/chunks/routes/api/workshop/aml/models/_id/predict.post.mjs.map +1 -1
  542. package/.output/server/chunks/routes/api/workshop/aml/models/_id/promote.post.mjs +3 -2
  543. package/.output/server/chunks/routes/api/workshop/aml/models/_id/promote.post.mjs.map +1 -1
  544. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.delete.mjs +3 -2
  545. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.delete.mjs.map +1 -1
  546. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs +3 -2
  547. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs.map +1 -1
  548. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id/train.post.mjs +3 -2
  549. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id/train.post.mjs.map +1 -1
  550. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.delete.mjs +3 -2
  551. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.delete.mjs.map +1 -1
  552. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.patch.mjs +3 -2
  553. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.patch.mjs.map +1 -1
  554. package/.output/server/chunks/routes/api/workshop/aml/twin/providers.get.mjs +3 -2
  555. package/.output/server/chunks/routes/api/workshop/aml/twin/providers.get.mjs.map +1 -1
  556. package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs +3 -2
  557. package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs.map +1 -1
  558. package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs +2 -1
  559. package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs.map +1 -1
  560. package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs +2 -1
  561. package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs.map +1 -1
  562. package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs +2 -1
  563. package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs.map +1 -1
  564. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +3 -2
  565. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs.map +1 -1
  566. package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs +2 -1
  567. package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs.map +1 -1
  568. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +3 -2
  569. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs.map +1 -1
  570. package/.output/server/chunks/routes/api/workshop/audit.get.mjs +2 -1
  571. package/.output/server/chunks/routes/api/workshop/audit.get.mjs.map +1 -1
  572. package/.output/server/chunks/routes/api/workshop/caller.mjs +3 -2
  573. package/.output/server/chunks/routes/api/workshop/caller.mjs.map +1 -1
  574. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +5 -4
  575. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs.map +1 -1
  576. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs +2 -1
  577. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs.map +1 -1
  578. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs +2 -1
  579. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs.map +1 -1
  580. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs +2 -1
  581. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs.map +1 -1
  582. package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs +2 -1
  583. package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs.map +1 -1
  584. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +3 -2
  585. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs.map +1 -1
  586. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs +2 -1
  587. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs.map +1 -1
  588. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs +2 -1
  589. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs.map +1 -1
  590. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs +2 -1
  591. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs.map +1 -1
  592. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs +2 -1
  593. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs.map +1 -1
  594. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs +2 -1
  595. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs.map +1 -1
  596. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs +2 -1
  597. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs.map +1 -1
  598. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs +2 -1
  599. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs.map +1 -1
  600. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs +2 -1
  601. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs.map +1 -1
  602. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs +2 -1
  603. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs.map +1 -1
  604. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs +2 -1
  605. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs.map +1 -1
  606. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.get.mjs +2 -1
  607. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.get.mjs.map +1 -1
  608. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.post.mjs +3 -2
  609. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.post.mjs.map +1 -1
  610. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/messages/_messageId/read.post.mjs +2 -1
  611. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/messages/_messageId/read.post.mjs.map +1 -1
  612. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/permissions.get.mjs +2 -1
  613. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/permissions.get.mjs.map +1 -1
  614. package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs +2 -1
  615. package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs.map +1 -1
  616. package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs +2 -1
  617. package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs.map +1 -1
  618. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +3 -2
  619. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs.map +1 -1
  620. package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs +3 -2
  621. package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs.map +1 -1
  622. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs +2 -1
  623. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs.map +1 -1
  624. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs +2 -1
  625. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs.map +1 -1
  626. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs +2 -1
  627. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs.map +1 -1
  628. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +3 -2
  629. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs.map +1 -1
  630. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +2 -1
  631. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs.map +1 -1
  632. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +3 -2
  633. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs.map +1 -1
  634. package/.output/server/chunks/routes/api/workshop/channels/_id/index5.get.mjs +3 -2
  635. package/.output/server/chunks/routes/api/workshop/channels/_id/index5.get.mjs.map +1 -1
  636. package/.output/server/chunks/routes/api/workshop/channels/_id/index6.get.mjs +2 -1
  637. package/.output/server/chunks/routes/api/workshop/channels/_id/index6.get.mjs.map +1 -1
  638. package/.output/server/chunks/routes/api/workshop/channels/_id/line.put.mjs +9 -2
  639. package/.output/server/chunks/routes/api/workshop/channels/_id/line.put.mjs.map +1 -1
  640. package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId/approve.post.mjs +2 -1
  641. package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId/approve.post.mjs.map +1 -1
  642. package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId_.delete.mjs +2 -1
  643. package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId_.delete.mjs.map +1 -1
  644. package/.output/server/chunks/routes/api/workshop/channels/_id/members/join.post.mjs +5 -2
  645. package/.output/server/chunks/routes/api/workshop/channels/_id/members/join.post.mjs.map +1 -1
  646. package/.output/server/chunks/routes/api/workshop/channels/_id/members/leave.post.mjs +2 -1
  647. package/.output/server/chunks/routes/api/workshop/channels/_id/members/leave.post.mjs.map +1 -1
  648. package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs +2 -1
  649. package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs.map +1 -1
  650. package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs +2 -1
  651. package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs.map +1 -1
  652. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +3 -2
  653. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs.map +1 -1
  654. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.get.mjs +3 -2
  655. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.get.mjs.map +1 -1
  656. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.patch.mjs +3 -2
  657. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.patch.mjs.map +1 -1
  658. package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs +2 -1
  659. package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs.map +1 -1
  660. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +3 -2
  661. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs.map +1 -1
  662. package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs +2 -1
  663. package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs.map +1 -1
  664. package/.output/server/chunks/routes/api/workshop/channels.get.mjs +2 -1
  665. package/.output/server/chunks/routes/api/workshop/channels.get.mjs.map +1 -1
  666. package/.output/server/chunks/routes/api/workshop/channels.post.mjs +18 -5
  667. package/.output/server/chunks/routes/api/workshop/channels.post.mjs.map +1 -1
  668. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +4 -3
  669. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs.map +1 -1
  670. package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs +4 -3
  671. package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs.map +1 -1
  672. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs +3 -2
  673. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs.map +1 -1
  674. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs +3 -2
  675. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs.map +1 -1
  676. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +3 -2
  677. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs.map +1 -1
  678. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +4 -3
  679. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs.map +1 -1
  680. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +4 -3
  681. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs.map +1 -1
  682. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +4 -3
  683. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs.map +1 -1
  684. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs +3 -2
  685. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs.map +1 -1
  686. package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs +3 -2
  687. package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs.map +1 -1
  688. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +4 -3
  689. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs.map +1 -1
  690. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +3 -2
  691. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs.map +1 -1
  692. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +3 -2
  693. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs.map +1 -1
  694. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +3 -2
  695. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs.map +1 -1
  696. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +3 -2
  697. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs.map +1 -1
  698. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +3 -2
  699. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs.map +1 -1
  700. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +5 -4
  701. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs.map +1 -1
  702. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +3 -2
  703. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs.map +1 -1
  704. package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs +3 -2
  705. package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs.map +1 -1
  706. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +3 -2
  707. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs.map +1 -1
  708. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +3 -2
  709. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs.map +1 -1
  710. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +3 -2
  711. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs.map +1 -1
  712. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +3 -2
  713. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs.map +1 -1
  714. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +3 -2
  715. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs.map +1 -1
  716. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +3 -2
  717. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs.map +1 -1
  718. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +3 -2
  719. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs.map +1 -1
  720. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +3 -2
  721. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs.map +1 -1
  722. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +4 -3
  723. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs.map +1 -1
  724. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +3 -2
  725. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs.map +1 -1
  726. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +3 -2
  727. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs.map +1 -1
  728. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +15 -12
  729. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs.map +1 -1
  730. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +7 -4
  731. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs.map +1 -1
  732. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +15 -14
  733. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs.map +1 -1
  734. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +12 -4
  735. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs.map +1 -1
  736. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +16 -5
  737. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs.map +1 -1
  738. package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs +3 -2
  739. package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs.map +1 -1
  740. package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs +6 -4
  741. package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs.map +1 -1
  742. package/.output/server/chunks/routes/api/workshop/dcw/index7.get.mjs +30 -0
  743. package/.output/server/chunks/routes/api/workshop/dcw/index7.get.mjs.map +1 -0
  744. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +3 -2
  745. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs.map +1 -1
  746. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +3 -2
  747. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs.map +1 -1
  748. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +3 -2
  749. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs.map +1 -1
  750. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +3 -2
  751. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs.map +1 -1
  752. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +5 -4
  753. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs.map +1 -1
  754. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs +5 -4
  755. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs.map +1 -1
  756. package/.output/server/chunks/routes/api/workshop/dcw/mes-artifacts/file.get.mjs +62 -0
  757. package/.output/server/chunks/routes/api/workshop/dcw/mes-artifacts/file.get.mjs.map +1 -0
  758. package/.output/server/chunks/routes/api/workshop/dcw/mes-hook-test.post.mjs +99 -0
  759. package/.output/server/chunks/routes/api/workshop/dcw/mes-hook-test.post.mjs.map +1 -0
  760. package/.output/server/chunks/routes/api/workshop/dcw/mes-test-read.post.mjs +3 -2
  761. package/.output/server/chunks/routes/api/workshop/dcw/mes-test-read.post.mjs.map +1 -1
  762. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +3 -2
  763. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs.map +1 -1
  764. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +3 -2
  765. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs.map +1 -1
  766. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +3 -2
  767. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs.map +1 -1
  768. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +3 -2
  769. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs.map +1 -1
  770. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs +3 -2
  771. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs.map +1 -1
  772. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs +3 -2
  773. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs.map +1 -1
  774. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs +3 -2
  775. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs.map +1 -1
  776. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs +3 -2
  777. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs.map +1 -1
  778. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +3 -2
  779. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs.map +1 -1
  780. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +3 -2
  781. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs.map +1 -1
  782. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +7 -4
  783. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs.map +1 -1
  784. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +7 -4
  785. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs.map +1 -1
  786. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs +7 -4
  787. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs.map +1 -1
  788. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +7 -4
  789. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs.map +1 -1
  790. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs +3 -2
  791. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs.map +1 -1
  792. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +3 -2
  793. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs.map +1 -1
  794. package/.output/server/chunks/routes/api/workshop/dcw/recipes/index.patch.mjs +3 -2
  795. package/.output/server/chunks/routes/api/workshop/dcw/recipes/index.patch.mjs.map +1 -1
  796. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +3 -2
  797. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs.map +1 -1
  798. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +3 -2
  799. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs.map +1 -1
  800. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +3 -2
  801. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs.map +1 -1
  802. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +3 -2
  803. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs.map +1 -1
  804. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +3 -2
  805. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs.map +1 -1
  806. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +3 -2
  807. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs.map +1 -1
  808. package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs +3 -2
  809. package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs.map +1 -1
  810. package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs +3 -2
  811. package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs.map +1 -1
  812. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +3 -2
  813. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs.map +1 -1
  814. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +3 -2
  815. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs.map +1 -1
  816. package/.output/server/chunks/routes/api/workshop/exp/confirmations/_id/decide.post.mjs +55 -0
  817. package/.output/server/chunks/routes/api/workshop/exp/confirmations/_id/decide.post.mjs.map +1 -0
  818. package/.output/server/chunks/routes/api/workshop/exp/index.get.mjs +38 -0
  819. package/.output/server/chunks/routes/api/workshop/exp/index.get.mjs.map +1 -0
  820. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs +3 -2
  821. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs.map +1 -1
  822. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +3 -2
  823. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs.map +1 -1
  824. package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +3 -2
  825. package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs.map +1 -1
  826. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +8 -2
  827. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs.map +1 -1
  828. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +6 -3
  829. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs.map +1 -1
  830. package/.output/server/chunks/routes/api/workshop/index.get.mjs +2 -1
  831. package/.output/server/chunks/routes/api/workshop/index.get.mjs.map +1 -1
  832. package/.output/server/chunks/routes/api/workshop/index.post.mjs +2 -1
  833. package/.output/server/chunks/routes/api/workshop/index.post.mjs.map +1 -1
  834. package/.output/server/chunks/routes/api/workshop/index.put.mjs +3 -2
  835. package/.output/server/chunks/routes/api/workshop/index.put.mjs.map +1 -1
  836. package/.output/server/chunks/routes/api/workshop/index10.get.mjs +3 -2
  837. package/.output/server/chunks/routes/api/workshop/index10.get.mjs.map +1 -1
  838. package/.output/server/chunks/routes/api/workshop/index11.get.mjs +2 -1
  839. package/.output/server/chunks/routes/api/workshop/index11.get.mjs.map +1 -1
  840. package/.output/server/chunks/routes/api/workshop/index12.get.mjs +2 -1
  841. package/.output/server/chunks/routes/api/workshop/index12.get.mjs.map +1 -1
  842. package/.output/server/chunks/routes/api/workshop/index13.get.mjs +2 -1
  843. package/.output/server/chunks/routes/api/workshop/index13.get.mjs.map +1 -1
  844. package/.output/server/chunks/routes/api/workshop/index14.get.mjs +2 -1
  845. package/.output/server/chunks/routes/api/workshop/index14.get.mjs.map +1 -1
  846. package/.output/server/chunks/routes/api/workshop/index2.get.mjs +3 -2
  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 +2 -1
  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 +8 -4
  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 +2 -1
  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 +8 -4
  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 +4 -3
  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 +3 -2
  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 +3 -2
  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 +3 -2
  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 +3 -2
  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 +2 -1
  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 +2 -1
  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 +3 -1
  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 +2 -1
  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 +2 -1
  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 +2 -1
  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 +2 -1
  883. package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs.map +1 -1
  884. package/.output/server/chunks/routes/api/workshop/notifications/read.post.mjs +2 -1
  885. package/.output/server/chunks/routes/api/workshop/notifications/read.post.mjs.map +1 -1
  886. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +3 -2
  887. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs.map +1 -1
  888. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +3 -2
  889. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs.map +1 -1
  890. package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs +2 -1
  891. package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs.map +1 -1
  892. package/.output/server/chunks/routes/api/workshop/runtime.get.mjs +2 -1
  893. package/.output/server/chunks/routes/api/workshop/runtime.get.mjs.map +1 -1
  894. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +3 -2
  895. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs.map +1 -1
  896. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +3 -2
  897. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs.map +1 -1
  898. package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs +2 -1
  899. package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs.map +1 -1
  900. package/.output/server/chunks/routes/api/workshop/schedules/_id/run.post.mjs +2 -1
  901. package/.output/server/chunks/routes/api/workshop/schedules/_id/run.post.mjs.map +1 -1
  902. package/.output/server/chunks/routes/api/workshop/schedules/_id/runs.get.mjs +2 -1
  903. package/.output/server/chunks/routes/api/workshop/schedules/_id/runs.get.mjs.map +1 -1
  904. package/.output/server/chunks/routes/api/workshop/schedules/_id_.delete.mjs +2 -1
  905. package/.output/server/chunks/routes/api/workshop/schedules/_id_.delete.mjs.map +1 -1
  906. package/.output/server/chunks/routes/api/workshop/schedules/_id_.get.mjs +2 -1
  907. package/.output/server/chunks/routes/api/workshop/schedules/_id_.get.mjs.map +1 -1
  908. package/.output/server/chunks/routes/api/workshop/schedules/_id_.patch.mjs +2 -1
  909. package/.output/server/chunks/routes/api/workshop/schedules/_id_.patch.mjs.map +1 -1
  910. package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs +2 -1
  911. package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs.map +1 -1
  912. package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs +2 -1
  913. package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs.map +1 -1
  914. package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs +2 -1
  915. package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs.map +1 -1
  916. package/.output/server/chunks/routes/api/workshop/tasks/_id/reassign.post.mjs +2 -1
  917. package/.output/server/chunks/routes/api/workshop/tasks/_id/reassign.post.mjs.map +1 -1
  918. package/.output/server/chunks/routes/api/workshop/tasks/_id/reopen.post.mjs +48 -0
  919. package/.output/server/chunks/routes/api/workshop/tasks/_id/reopen.post.mjs.map +1 -0
  920. package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs +2 -1
  921. package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs.map +1 -1
  922. package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs +2 -1
  923. package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs.map +1 -1
  924. package/.output/server/chunks/routes/api/workshop/tasks/_id/update.post.mjs +2 -1
  925. package/.output/server/chunks/routes/api/workshop/tasks/_id/update.post.mjs.map +1 -1
  926. package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs +2 -1
  927. package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs.map +1 -1
  928. package/.output/server/chunks/routes/api/workshop/tasks.get.mjs +2 -1
  929. package/.output/server/chunks/routes/api/workshop/tasks.get.mjs.map +1 -1
  930. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +3 -2
  931. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs.map +1 -1
  932. package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs +2 -1
  933. package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs.map +1 -1
  934. package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs +2 -1
  935. package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs.map +1 -1
  936. package/.output/server/chunks/routes/api/workshop/teams/_id/index.put.mjs +3 -2
  937. package/.output/server/chunks/routes/api/workshop/teams/_id/index.put.mjs.map +1 -1
  938. package/.output/server/chunks/routes/api/workshop/teams/_id/index2.get.mjs +3 -2
  939. package/.output/server/chunks/routes/api/workshop/teams/_id/index2.get.mjs.map +1 -1
  940. package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs +2 -1
  941. package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs.map +1 -1
  942. package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs +2 -1
  943. package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs.map +1 -1
  944. package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs +2 -1
  945. package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs.map +1 -1
  946. package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs +2 -1
  947. package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs.map +1 -1
  948. package/.output/server/chunks/routes/api/workshop/users/me.get.mjs +2 -1
  949. package/.output/server/chunks/routes/api/workshop/users/me.get.mjs.map +1 -1
  950. package/.output/server/chunks/routes/api/workshop/users/register.post.mjs +2 -1
  951. package/.output/server/chunks/routes/api/workshop/users/register.post.mjs.map +1 -1
  952. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +4 -3
  953. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs.map +1 -1
  954. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs +2 -1
  955. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs.map +1 -1
  956. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs +2 -1
  957. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs.map +1 -1
  958. package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs +2 -1
  959. package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs.map +1 -1
  960. package/.output/server/chunks/routes/renderer.mjs +3 -3
  961. package/.output/server/chunks/virtual/entry.mjs +250 -57
  962. package/.output/server/chunks/virtual/entry.mjs.map +1 -1
  963. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  964. package/.output/server/index.mjs +2 -1
  965. package/.output/server/index.mjs.map +1 -1
  966. package/.output/server/package.json +1 -1
  967. package/LICENSE +69 -91
  968. package/README-zh.md +928 -833
  969. package/README.md +949 -845
  970. package/app/components/AppSidebar.vue +1 -1
  971. package/app/components/aml/AmlEnvPanel.vue +230 -230
  972. package/app/components/app-header/LoginModal.vue +131 -0
  973. package/app/components/app-header/UserChip.vue +161 -150
  974. package/app/components/dcw/DcwAddNodeModal.vue +29 -1
  975. package/app/components/dcw/DcwEditLineModal.vue +216 -108
  976. package/app/components/dcw/DcwLineCard.vue +129 -117
  977. package/app/components/dcw/DcwMesArtifacts.vue +140 -0
  978. package/app/components/dcw/DcwNodesTable.vue +9 -0
  979. package/app/components/dcw/DcwParamApprovalCard.vue +116 -110
  980. package/app/components/dcw/DcwRecipeEditModal.vue +399 -306
  981. package/app/components/dcw/ExpConfirmCard.vue +103 -0
  982. package/app/components/dcw/RecipeDispatchApprovalCard.vue +330 -0
  983. package/app/components/dcw/RecipeGateApprovalCard.vue +159 -0
  984. package/app/components/logs/LogsEventTable.vue +321 -309
  985. package/app/components/logs/LogsFilterCard.vue +253 -234
  986. package/app/components/workshop/DaqNodeRow.vue +616 -592
  987. package/app/components/workshop/town/TownView.vue +6 -2
  988. package/app/components/workshop/town/components/AutoModeConfirmModal.vue +94 -0
  989. package/app/components/workshop/town/components/TownAgentBindings.vue +18 -2
  990. package/app/components/workshop/town/components/TownAgentInspector.vue +10 -2
  991. package/app/components/workshop/town/components/TownRightRail.vue +4 -1
  992. package/app/components/workshop/workbench/AuthGate.vue +182 -179
  993. package/app/components/workshop/workbench/ChangePasswordModal.vue +106 -0
  994. package/app/composables/workshop/town/town-relay-props.ts +6 -1
  995. package/app/composables/workshop/town/useTownAgentBindings.ts +73 -6
  996. package/app/composables/workshop/useDcwStream.ts +374 -362
  997. package/app/composables/workshop/useOpsLog.ts +3 -0
  998. package/app/layouts/default.vue +201 -161
  999. package/app/layouts/town.vue +40 -21
  1000. package/app/pages/daq/composables/useDaqDetailHistory.ts +199 -199
  1001. package/app/pages/dcw/[id].vue +380 -318
  1002. package/app/pages/dcw/composables/useDcwAddNode.ts +29 -0
  1003. package/app/pages/dcw/composables/useDcwParamApprovals.ts +123 -119
  1004. package/app/pages/dcw/composables/useDcwRecipes.ts +256 -242
  1005. package/app/pages/dcw/composables/useExpConfirmations.ts +108 -0
  1006. package/app/pages/dcw/composables/useRecipeDispatchApprovals.ts +200 -0
  1007. package/app/pages/dcw/dcw-page.css +360 -344
  1008. package/app/pages/dcw/index.vue +11 -0
  1009. package/app/pages/logs/composables/useLogsQuery.ts +57 -52
  1010. package/app/pages/logs/index.vue +95 -94
  1011. package/app/pages/workshop/composables/useWorkbenchAuth.ts +131 -125
  1012. package/app/pages/workshop/index.vue +121 -116
  1013. package/app/plugins/http.ts +6 -0
  1014. package/app/stores/workshop/auth-ui.ts +26 -0
  1015. package/app/stores/workshop/user.ts +19 -2
  1016. package/cli/commands/mcp.mjs +6 -0
  1017. package/config.yml +180 -180
  1018. package/docker-compose.yml +4 -0
  1019. package/docs/cli.en.md +447 -447
  1020. package/docs/cli.md +412 -412
  1021. package/docs/plugins.en.md +621 -621
  1022. package/docs/plugins.md +610 -610
  1023. package/docs/sdk.en.md +964 -964
  1024. package/docs/sdk.md +900 -900
  1025. package/i18n/locales/en.ts +2812 -2738
  1026. package/i18n/locales/zh-CN.ts +2812 -2738
  1027. package/mcp/aw-mcp-server.mjs +4 -1
  1028. package/package.json +181 -181
  1029. package/scripts/_audit/feature-audit-e2e.mjs +12 -9
  1030. package/scripts/_audit/idd-scenarios-e2e.mjs +239 -0
  1031. package/scripts/aw-start-smoke.mjs +7 -1
  1032. package/scripts/check-docs-sync.mjs +417 -367
  1033. package/scripts/dev-guard.mjs +2 -1
  1034. package/scripts/dev-mes-simulator.mjs +456 -0
  1035. package/scripts/feature-sweep-e2e.mjs +176 -0
  1036. package/scripts/onboarding/forge-channel.mjs +157 -0
  1037. package/scripts/onboarding/lib.mjs +78 -0
  1038. package/scripts/onboarding/onboard.mjs +196 -0
  1039. package/scripts/onboarding/provision-line.mjs +179 -0
  1040. package/scripts/onboarding/test-connection.mjs +42 -0
  1041. package/scripts/onboarding/verify-line.mjs +95 -0
  1042. package/scripts/perm-isolation-e2e.mjs +188 -0
  1043. package/scripts/render-opt-curve.mjs +97 -0
  1044. package/scripts/render-pressure-curve.mjs +89 -0
  1045. package/scripts/start.mjs +126 -2
  1046. package/scripts/testing/aep-live.mjs +60 -0
  1047. package/scripts/testing/aggregate-benchmarks.mjs +79 -0
  1048. package/scripts/testing/api-full-loop.mjs +172 -0
  1049. package/scripts/testing/benchmark.config.json +66 -0
  1050. package/scripts/testing/game-host.mjs +63 -0
  1051. package/scripts/testing/hitl-expert.mjs +143 -0
  1052. package/scripts/testing/idd-kb-smoke.mjs +46 -0
  1053. package/scripts/testing/run-benchmark.mjs +984 -0
  1054. package/scripts/testing/sdk-live.mjs +55 -0
  1055. package/scripts/ui/e2e-interactive.mjs +14 -14
  1056. package/scripts/ui/lib.mjs +210 -210
  1057. package/server/api/health.get.ts +12 -1
  1058. package/server/api/metrics.ts +89 -78
  1059. package/server/api/users/change-password.post.ts +18 -0
  1060. package/server/api/users/setup-status.get.ts +13 -8
  1061. package/server/api/workshop/agent-tools/approvals/[id]/decide.post.ts +21 -6
  1062. package/server/api/workshop/agent-tools/bindings/[id].patch.ts +36 -3
  1063. package/server/api/workshop/agent-tools/bindings/index.post.ts +60 -9
  1064. package/server/api/workshop/caller.ts +3 -2
  1065. package/server/api/workshop/channel-templates/[id]/instantiate.post.ts +1 -1
  1066. package/server/api/workshop/channels/[id]/line.put.ts +41 -30
  1067. package/server/api/workshop/channels/[id]/members/join.post.ts +35 -30
  1068. package/server/api/workshop/channels.post.ts +13 -0
  1069. package/server/api/workshop/daq/index.post.ts +6 -1
  1070. package/server/api/workshop/daq/test-driver.post.ts +3 -3
  1071. package/server/api/workshop/dcw/index.post.ts +26 -20
  1072. package/server/api/workshop/dcw/lines/[id].delete.ts +3 -2
  1073. package/server/api/workshop/dcw/lines/[id].patch.ts +5 -3
  1074. package/server/api/workshop/dcw/lines/index.post.ts +1 -1
  1075. package/server/api/workshop/dcw/mes-artifacts/file.get.ts +50 -0
  1076. package/server/api/workshop/dcw/mes-artifacts/index.get.ts +27 -0
  1077. package/server/api/workshop/dcw/mes-hook-test.post.ts +105 -0
  1078. package/server/api/workshop/dcw/products/index.post.ts +6 -2
  1079. package/server/api/workshop/dcw/recipes/[id]/apply.post.ts +6 -2
  1080. package/server/api/workshop/dcw/recipes/[id]/mark-good.post.ts +6 -2
  1081. package/server/api/workshop/dcw/recipes/[id]/revert.post.ts +33 -29
  1082. package/server/api/workshop/dcw/recipes/[id]/rollback-good.post.ts +7 -3
  1083. package/server/api/workshop/dcw/recipes/index.post.ts +27 -15
  1084. package/server/api/workshop/exp/confirmations/[id]/decide.post.ts +41 -0
  1085. package/server/api/workshop/exp/confirmations/index.get.ts +25 -0
  1086. package/server/api/workshop/hitl/pending.get.ts +57 -48
  1087. package/server/api/workshop/hitl/respond.post.ts +10 -2
  1088. package/server/api/workshop/ops-logs/index.get.ts +1 -0
  1089. package/server/api/workshop/tasks/[id]/reopen.post.ts +35 -0
  1090. package/server/api/workshop/ws/peer-sub.ts +135 -128
  1091. package/server/api/workshop/ws/subscriptions.ts +15 -1
  1092. package/server/plugins/backup.ts +94 -11
  1093. package/server/plugins/daq.ts +3 -0
  1094. package/server/plugins/memory-watch.ts +92 -0
  1095. package/server/plugins/parent-watch.ts +22 -0
  1096. package/server/plugins/workshop.ts +258 -230
  1097. package/server/plugins-builtin/diag-bridge/client.mjs +49 -1
  1098. package/server/plugins-builtin/diag-bridge/host/diagnosis.mjs +15 -6
  1099. package/server/plugins-builtin/diag-bridge/host/exports.mjs +104 -0
  1100. package/server/plugins-builtin/diag-bridge/host/plugin.mjs +120 -17
  1101. package/server/plugins-builtin/diag-bridge/host/sweep.mjs +47 -0
  1102. package/server/plugins-builtin/diag-bridge/i18n.json +82 -72
  1103. package/server/repositories/user.repository.ts +36 -12
  1104. package/server/schemas/user.schema.ts +7 -0
  1105. package/server/services/user.service.ts +50 -8
  1106. package/server/services/workshop/agents/agent-interface.ts +1 -1
  1107. package/server/services/workshop/agents/base-agent.ts +8 -1
  1108. package/server/services/workshop/agents/binding-authz.ts +8 -5
  1109. package/server/services/workshop/agents/binding-mode.ts +51 -0
  1110. package/server/services/workshop/agents/hitl-decision/dispatcher.ts +16 -3
  1111. package/server/services/workshop/agents/hitl-decision/index.ts +24 -24
  1112. package/server/services/workshop/agents/hitl-decision/line-of.ts +38 -0
  1113. package/server/services/workshop/agents/hitl-decision/reconcile.ts +152 -70
  1114. package/server/services/workshop/agents/hitl-decision/shared.ts +2 -0
  1115. package/server/services/workshop/agents/hitl-registry.ts +582 -577
  1116. package/server/services/workshop/agents/host-tool-bridge/catalog.ts +86 -2
  1117. package/server/services/workshop/agents/host-tool-bridge/dispatch.ts +25 -0
  1118. package/server/services/workshop/agents/host-tool-bridge/tools/industrial.ts +13 -1
  1119. package/server/services/workshop/agents/host-tool-bridge/tools/memory.ts +4 -1
  1120. package/server/services/workshop/agents/host-tool-bridge/tools/messaging.ts +45 -11
  1121. package/server/services/workshop/agents/host-tool-bridge/tools/tasks.ts +5 -1
  1122. package/server/services/workshop/agents/industrial/aml-activity.ts +131 -0
  1123. package/server/services/workshop/agents/industrial/aml-dataset-tools.ts +21 -0
  1124. package/server/services/workshop/agents/industrial/aml-job-tools.ts +9 -3
  1125. package/server/services/workshop/agents/industrial/daq-export.ts +510 -0
  1126. package/server/services/workshop/agents/industrial/dcw-judge-tools.ts +160 -149
  1127. package/server/services/workshop/agents/industrial/dcw-tools.ts +68 -21
  1128. package/server/services/workshop/agents/industrial/exp-tools.ts +104 -0
  1129. package/server/services/workshop/agents/industrial/grant-guard.ts +145 -0
  1130. package/server/services/workshop/agents/industrial/index.ts +4 -0
  1131. package/server/services/workshop/agents/industrial/line-tools.ts +151 -0
  1132. package/server/services/workshop/agents/industrial/manual-approval.ts +3 -2
  1133. package/server/services/workshop/agents/industrial/mes-tools.ts +143 -135
  1134. package/server/services/workshop/agents/industrial/ops-tools.ts +267 -68
  1135. package/server/services/workshop/agents/industrial/optimization-tools.ts +19 -9
  1136. package/server/services/workshop/agents/industrial/param-tools.ts +192 -169
  1137. package/server/services/workshop/agents/industrial/recipe-gate.ts +96 -0
  1138. package/server/services/workshop/agents/industrial/recipe-propose-tools.ts +366 -0
  1139. package/server/services/workshop/agents/industrial/twin-tools.ts +38 -4
  1140. package/server/services/workshop/agents/industrial-context.ts +122 -24
  1141. package/server/services/workshop/agents/mock-agent.ts +17 -0
  1142. package/server/services/workshop/agents/node-bindings.repo.ts +207 -206
  1143. package/server/services/workshop/agents/node-delegation.ts +4 -4
  1144. package/server/services/workshop/agents/omp-agent/event-mapping.ts +178 -142
  1145. package/server/services/workshop/agents/tool-approvals.ts +261 -13
  1146. package/server/services/workshop/aml/dataset-builder.ts +8 -1
  1147. package/server/services/workshop/aml/env-manager.ts +242 -242
  1148. package/server/services/workshop/aml/job-orchestrator/failure.ts +19 -0
  1149. package/server/services/workshop/aml/job-orchestrator/stages.ts +27 -0
  1150. package/server/services/workshop/aml/python-runtime.ts +600 -552
  1151. package/server/services/workshop/aml/twin/binding-snapshot.ts +637 -603
  1152. package/server/services/workshop/aml/twin/channel-profile.ts +3 -2
  1153. package/server/services/workshop/daq/bus/queue-port.ts +3 -0
  1154. package/server/services/workshop/daq/daq-controller/crud.ts +206 -202
  1155. package/server/services/workshop/daq/daq-controller/driver-probe.ts +64 -64
  1156. package/server/services/workshop/daq/daq-controller/ingest.ts +189 -189
  1157. package/server/services/workshop/daq/daq-controller/state.ts +204 -197
  1158. package/server/services/workshop/daq/daq-controller/views.ts +85 -84
  1159. package/server/services/workshop/daq/daq-node.repo.ts +27 -4
  1160. package/server/services/workshop/daq/daq-node.ts +4 -2
  1161. package/server/services/workshop/daq/daq-runtime.ts +2 -1
  1162. package/server/services/workshop/daq/drivers/index.ts +29 -29
  1163. package/server/services/workshop/daq/drivers/mqtt.ts +217 -182
  1164. package/server/services/workshop/daq/drivers/registry.ts +35 -1
  1165. package/server/services/workshop/daq/drivers/shared.ts +63 -60
  1166. package/server/services/workshop/daq/objectstore/disk.adapter.ts +48 -2
  1167. package/server/services/workshop/daq/objectstore/gc.ts +92 -0
  1168. package/server/services/workshop/daq/objectstore/objectstore-port.ts +12 -0
  1169. package/server/services/workshop/daq/storage/sqlite.adapter.ts +318 -318
  1170. package/server/services/workshop/daq/storage/timescale.adapter.ts +37 -3
  1171. package/server/services/workshop/db/database/migrations.ts +12 -1
  1172. package/server/services/workshop/db/database/open.ts +5 -1
  1173. package/server/services/workshop/db/database/rows.ts +4 -0
  1174. package/server/services/workshop/db/database/schema.ts +7 -2
  1175. package/server/services/workshop/db/database/seed.ts +71 -0
  1176. package/server/services/workshop/db/memory.repo.ts +1 -1
  1177. package/server/services/workshop/db/ops.repo.ts +24 -7
  1178. package/server/services/workshop/dcw/dcw-controller/actuation.ts +140 -127
  1179. package/server/services/workshop/dcw/dcw-controller/bindings.ts +97 -83
  1180. package/server/services/workshop/dcw/dcw-controller/crud.ts +19 -4
  1181. package/server/services/workshop/dcw/dcw-controller/gate-persist.ts +80 -0
  1182. package/server/services/workshop/dcw/dcw-controller/lines.ts +229 -213
  1183. package/server/services/workshop/dcw/dcw-controller/recipes.ts +286 -196
  1184. package/server/services/workshop/dcw/dcw-controller/state.ts +71 -66
  1185. package/server/services/workshop/dcw/dcw-controller/write-verify.ts +98 -0
  1186. package/server/services/workshop/dcw/dcw-controller/write.ts +51 -9
  1187. package/server/services/workshop/dcw/dcw-line.repo.ts +17 -1
  1188. package/server/services/workshop/dcw/dcw-node.repo.ts +110 -87
  1189. package/server/services/workshop/dcw/dcw-node.ts +8 -3
  1190. package/server/services/workshop/dcw/dcw-recipe.repo.ts +32 -0
  1191. package/server/services/workshop/dcw/dcw-runtime.ts +8 -1
  1192. package/server/services/workshop/dcw/drivers/http.ts +68 -66
  1193. package/server/services/workshop/dcw/drivers/index.ts +27 -27
  1194. package/server/services/workshop/dcw/drivers/mes-rest.ts +707 -543
  1195. package/server/services/workshop/dcw/drivers/mock.ts +47 -44
  1196. package/server/services/workshop/dcw/drivers/modbus-rtu.ts +1 -1
  1197. package/server/services/workshop/dcw/drivers/modbus.ts +1 -1
  1198. package/server/services/workshop/dcw/drivers/mqtt.ts +109 -108
  1199. package/server/services/workshop/dcw/drivers/opcua.ts +1 -1
  1200. package/server/services/workshop/dcw/drivers/registry.ts +142 -100
  1201. package/server/services/workshop/dcw/drivers/shared.ts +186 -161
  1202. package/server/services/workshop/dcw/param-map.repo.ts +349 -321
  1203. package/server/services/workshop/dcw/recipe-op-anchor.ts +117 -0
  1204. package/server/services/workshop/dcw/recipe-rollback.repo.ts +26 -0
  1205. package/server/services/workshop/exp/exp-collector.ts +275 -0
  1206. package/server/services/workshop/exp/exp-state.repo.ts +339 -0
  1207. package/server/services/workshop/json-store.mjs +137 -105
  1208. package/server/services/workshop/mes/mes-controller.ts +274 -26
  1209. package/server/services/workshop/mes/mes-datasets.ts +503 -441
  1210. package/server/services/workshop/mes/mes-hook.ts +567 -0
  1211. package/server/services/workshop/ops/ops.ts +3 -0
  1212. package/server/services/workshop/permissions.ts +7 -7
  1213. package/server/services/workshop/plugin-driver-registry.ts +123 -108
  1214. package/server/services/workshop/plugins/host/services.mjs +10 -0
  1215. package/server/services/workshop/prompts/loader.ts +11 -2
  1216. package/server/services/workshop/runtime/agent-runtime/lifecycle.ts +18 -0
  1217. package/server/services/workshop/runtime/agent-runtime/message.ts +10 -0
  1218. package/server/services/workshop/runtime/line-notify.ts +76 -0
  1219. package/server/services/workshop/runtime/manager/access.ts +488 -483
  1220. package/server/services/workshop/runtime/manager/channel-templates.ts +21 -2
  1221. package/server/services/workshop/runtime/manager/runtime-wiring.ts +96 -1
  1222. package/server/services/workshop/runtime/manager/state.ts +106 -1
  1223. package/server/services/workshop/runtime/manager/tasks.ts +67 -4
  1224. package/server/services/workshop/runtime/manager/workspace.ts +8 -2
  1225. package/server/services/workshop/runtime/memory/recall.ts +20 -1
  1226. package/server/services/workshop/runtime/memory/write.ts +149 -93
  1227. package/server/services/workshop/runtime/platform-notice.ts +113 -0
  1228. package/server/services/workshop/runtime/scheduler-loop/execute.ts +44 -12
  1229. package/server/services/workshop/runtime/scheduler-loop/rules.ts +24 -7
  1230. package/server/services/workshop/runtime/scheduler-loop/tick.ts +44 -1
  1231. package/server/services/workshop/runtime/task-engine/lifecycle.ts +11 -0
  1232. package/server/services/workshop/runtime/task-engine/update.ts +11 -0
  1233. package/server/services/workshop/settings.ts +17 -0
  1234. package/server/types/user.ts +4 -0
  1235. package/server/utils/errors.ts +1 -0
  1236. package/server/utils/response.ts +6 -0
  1237. package/shared/config/schema.json +140 -138
  1238. package/shared/config/single-instance.mjs +28 -1
  1239. package/shared/daq-protocol.ts +12 -2
  1240. package/shared/dcw-protocol/catalog.ts +6 -1
  1241. package/shared/dcw-protocol/index.ts +19 -19
  1242. package/shared/dcw-protocol/line.ts +34 -0
  1243. package/shared/dcw-protocol/recipe.ts +33 -3
  1244. package/shared/local-time.mjs +37 -13
  1245. package/shared/workshop-protocol.ts +4 -0
  1246. package/.output/public/_nuxt/B2x8SKRO2.js +0 -1
  1247. package/.output/public/_nuxt/BOhcoxIu.js +0 -2
  1248. package/.output/public/_nuxt/BQy0Yy7S.js +0 -1
  1249. package/.output/public/_nuxt/BTVyPFng2.js +0 -1
  1250. package/.output/public/_nuxt/BXR3tgEk.js +0 -1
  1251. package/.output/public/_nuxt/B_9_BM9G.js +0 -3
  1252. package/.output/public/_nuxt/BcX4fktE.js +0 -1
  1253. package/.output/public/_nuxt/Bfe2qOYs.js +0 -1
  1254. package/.output/public/_nuxt/BnoyYd0Z2.js +0 -1
  1255. package/.output/public/_nuxt/BqYO-UfR.js +0 -1
  1256. package/.output/public/_nuxt/Btv3HXrq.js +0 -1
  1257. package/.output/public/_nuxt/BuXaEtBG2.js +0 -1
  1258. package/.output/public/_nuxt/Bub2P5me.js +0 -28
  1259. package/.output/public/_nuxt/CAaSPBqk.js +0 -1
  1260. package/.output/public/_nuxt/CD9lpEz22.js +0 -13
  1261. package/.output/public/_nuxt/CFjveTJh.js +0 -1
  1262. package/.output/public/_nuxt/CI2yXRr42.js +0 -1
  1263. package/.output/public/_nuxt/COQM2L1M.js +0 -1
  1264. package/.output/public/_nuxt/Ch9KdZWb2.js +0 -1
  1265. package/.output/public/_nuxt/CtXOpljm2.js +0 -1
  1266. package/.output/public/_nuxt/CwLQAKay2.js +0 -1
  1267. package/.output/public/_nuxt/DB4ma-iU2.js +0 -1
  1268. package/.output/public/_nuxt/DV5joWTn2.js +0 -47
  1269. package/.output/public/_nuxt/DVKXGuMz2.js +0 -1
  1270. package/.output/public/_nuxt/DZDi8inD.js +0 -1
  1271. package/.output/public/_nuxt/DZuXfuXS.js +0 -14
  1272. package/.output/public/_nuxt/Db4_F1T2.js +0 -1
  1273. package/.output/public/_nuxt/DlX0nqUe.js +0 -1
  1274. package/.output/public/_nuxt/Dqz5HiXa.js +0 -2
  1275. package/.output/public/_nuxt/I1cI6sPJ2.js +0 -1
  1276. package/.output/public/_nuxt/Sjjmp5OD2.js +0 -1
  1277. package/.output/public/_nuxt/WVTVkqef.js +0 -1
  1278. package/.output/public/_nuxt/_id_.DZbVLNnu.css +0 -1
  1279. package/.output/public/_nuxt/a4X3ARNm2.js +0 -1
  1280. package/.output/public/_nuxt/bt__BP-I.js +0 -13
  1281. package/.output/public/_nuxt/builds/meta/af879435-fc74-4017-ade0-3b92c1ab35bb.json +0 -1
  1282. package/.output/public/_nuxt/cY_5jwFz2.js +0 -1
  1283. package/.output/public/_nuxt/daq.0uieKcZk.css +0 -1
  1284. package/.output/public/_nuxt/dcw.pQRVkAi_.css +0 -1
  1285. package/.output/public/_nuxt/eutnXI4F.js +0 -24
  1286. package/.output/public/_nuxt/k5K6Jj6g.js +0 -19
  1287. package/.output/public/_nuxt/logs.CD0Olr3c.css +0 -1
  1288. package/.output/public/_nuxt/wDPc4SSR.js +0 -106
  1289. package/.output/public/_nuxt/workshop.b4YRXEe0.css +0 -1
  1290. package/.output/server/chunks/_/SearchOutlined.mjs.map +0 -1
  1291. package/.output/server/chunks/build/TownView-Bf5VFYFj.mjs.map +0 -1
  1292. package/.output/server/chunks/build/_id_-CuUmVPRg.mjs.map +0 -1
  1293. package/.output/server/chunks/build/_id_-WF20tjqT.mjs.map +0 -1
  1294. package/.output/server/chunks/build/aml-C55iuLn-.mjs.map +0 -1
  1295. package/.output/server/chunks/build/daq-D0kLscVr.mjs.map +0 -1
  1296. package/.output/server/chunks/build/dcw-DuhEyu7S.mjs.map +0 -1
  1297. package/.output/server/chunks/build/input-Cr_KFj4T.mjs +0 -1381
  1298. package/.output/server/chunks/build/input-Cr_KFj4T.mjs.map +0 -1
  1299. package/.output/server/chunks/build/logs-BlOalbsZ.mjs.map +0 -1
  1300. package/.output/server/chunks/build/operations-BD6LK-Yz.mjs.map +0 -1
  1301. package/.output/server/chunks/build/pages-DloBBvU5.mjs.map +0 -1
  1302. package/.output/server/chunks/build/town-B2gBu_ZE.mjs.map +0 -1
  1303. package/.output/server/chunks/build/town-BIn3be5v.mjs.map +0 -1
  1304. package/.output/server/chunks/build/useAmlJobs--a_1ovew.mjs.map +0 -1
  1305. package/.output/server/chunks/build/useDaqDetailHistory-pfi6zXWU.mjs.map +0 -1
  1306. package/.output/server/chunks/build/useDaqDetailNode-qT7MjqJ7.mjs.map +0 -1
  1307. package/.output/server/chunks/build/useDaqFilters-CMysN13f.mjs.map +0 -1
  1308. package/.output/server/chunks/build/useDaqOptimizations-Coq5lsfM.mjs.map +0 -1
  1309. package/.output/server/chunks/build/useDashboardData-DgJcGJaF.mjs.map +0 -1
  1310. package/.output/server/chunks/build/useDcwAddNode-C9DbEKHi.mjs.map +0 -1
  1311. package/.output/server/chunks/build/useDcwCards-VDoMYG7l.mjs.map +0 -1
  1312. package/.output/server/chunks/build/useDcwDetailScope-CL97tJdJ.mjs.map +0 -1
  1313. package/.output/server/chunks/build/useDcwDetailTemplates-OLmjMSGD.mjs.map +0 -1
  1314. package/.output/server/chunks/build/useDcwFilter-Bs9C6-h_.mjs.map +0 -1
  1315. package/.output/server/chunks/build/useDcwLedger-Bbf_iFOY.mjs.map +0 -1
  1316. package/.output/server/chunks/build/useDcwLineMutations-Bhtuqw7J.mjs.map +0 -1
  1317. package/.output/server/chunks/build/useDcwLineRun-CGqZSnG4.mjs.map +0 -1
  1318. package/.output/server/chunks/build/useDcwParamApprovals-BBwdFsKv.mjs.map +0 -1
  1319. package/.output/server/chunks/build/useDcwProducts-BoBkJqpv.mjs.map +0 -1
  1320. package/.output/server/chunks/build/useDcwQuery-DP7b2qb6.mjs.map +0 -1
  1321. package/.output/server/chunks/build/useDcwQuickActions-DHRiA9KN.mjs.map +0 -1
  1322. package/.output/server/chunks/build/useDcwRecipes-CIMeH2oF.mjs.map +0 -1
  1323. package/.output/server/chunks/build/useDcwTemplates-M_-qjV8E.mjs.map +0 -1
  1324. package/.output/server/chunks/build/useDcwWrites-D94dAzqr.mjs.map +0 -1
  1325. package/.output/server/chunks/build/useLocalTime-DZ2RAtVs.mjs.map +0 -1
  1326. package/.output/server/chunks/build/useLogsQuery-2x1mKxT1.mjs.map +0 -1
  1327. package/.output/server/chunks/build/useLogsScope-04cUJCU-.mjs.map +0 -1
  1328. package/.output/server/chunks/build/useMonitorData-guVjMDtR.mjs.map +0 -1
  1329. package/.output/server/chunks/build/useMonitorFormat-C7lhZe4g.mjs.map +0 -1
  1330. package/.output/server/chunks/build/useWorkbenchAuth-DqjBX-6w.mjs.map +0 -1
  1331. package/.output/server/chunks/build/useWorkbenchWorkspaces-GQVU9BLv.mjs.map +0 -1
  1332. package/.output/server/chunks/build/useWorkspaceChannels-B13vROC1.mjs.map +0 -1
  1333. package/.output/server/chunks/build/workshop-BDqWzJtr.mjs.map +0 -1
  1334. package/scripts/_aw0746-stage5.mjs +0 -159
  1335. package/scripts/_aw0746-stage6-aml.mjs +0 -177
  1336. package/scripts/_aw0746-train-strong.py +0 -142
  1337. package/scripts/_aw0747-readme-rows.mjs +0 -32
  1338. package/scripts/_aw0748-fresh-channel.mjs +0 -21
  1339. package/scripts/_aw0748-mock-dispatch-diag.mjs +0 -66
  1340. package/scripts/_aw0748-wake-channel.mjs +0 -46
  1341. package/scripts/_aw0749-readme-rows.mjs +0 -23
  1342. package/scripts/_dbg-comm-verify.mjs +0 -188
  1343. package/scripts/_dbg-im-e2e.mjs +0 -169
  1344. package/scripts/_dbg-opt2-run.mjs +0 -114
  1345. package/scripts/_dbg-opt2-setup.mjs +0 -95
  1346. package/scripts/_dbg-param-map-e2e.ts +0 -248
  1347. package/scripts/_dbg-param-map-rest-smoke.mjs +0 -73
  1348. package/scripts/_dbg-param-real-scenario.mjs +0 -153
  1349. package/scripts/_dbg-real-scenario-e2e.mjs +0 -246
  1350. package/scripts/_dbg-recipe-stale-e2e.mjs +0 -135
  1351. package/scripts/_dbg-schedule-ui-verify.mjs +0 -115
  1352. package/scripts/_dbg-team-matrix.mjs +0 -148
  1353. package/scripts/_dbg-ui-fullcrawl.mjs +0 -91
  1354. package/scripts/_dbg-ui-static-audit.mjs +0 -65
  1355. package/scripts/_dbg-write-lock-e2e.mjs +0 -131
  1356. /package/.output/public/_nuxt/{DdNujZN52.js → DdNujZN5.js} +0 -0
@@ -1,577 +1,582 @@
1
- /**
2
- * HitlRegistry —— 全局"待人工处理"登记处(进程内缓存门面,globalThis 单例)。
3
- *
4
- * 把两条互相独立的 HITL 链路统一成一个可发现的视图:
5
- * - omp-dialog omp `rpc-ui` 的 extension_ui_request 对话框(harness-terminal 登记;
6
- * park/暂停计时语义由 terminal 订阅者状态驱动,本模块只存状态与广播)
7
- * - dcw-approval 手动确认模式的工具执行审批(tool-approvals 登记/裁决)
8
- * - codex/opencode/dsh/claude/qwen/hermes 各 harness 的原生审批与提问(adapter 登记)
9
- *
10
- * 职责:登记(hitl.request)/ 落定(hitl.resolved)事件经 per-channel 订阅扇出,
11
- * 由 workshop ws hub 转接进 AEP 频道流(seq/落库);统一 REST 快照与应答路由
12
- * (/api/workshop/hitl/pending、/respond)也读本模块。
13
- *
14
- * **v17 定位变更(主计划 §13.4):本模块降级为缓存门面,事实源是 `hitl_requests` 表。**
15
- * - register() 在登记内存快照的同时**尽力持久化**一行(冻结策略快照 eligibleUserIds/
16
- * memberGenerations/policyVersion)并按审批策略生成定向通知(manager.notifyUser,
17
- * 禁止 broadcastPeerEvent 全局广播)。持久化失败只降级(打日志),绝不抛出 ——
18
- * 旧测试脚手架在 :memory: 上只装 11 个 repo、没有群聊层仓储,register 必须照常工作。
19
- * - resolve() 保持**旧语义完全不变**(未登记的 key 返回 false → 上层 409 ALREADY_RESOLVED);
20
- * 适配器仍在原生应答成功后调用它。
21
- * - settle() 供决策服务(hitl-decision)落定:带持久化状态与 nativeConfirmed 的 hitl.resolved。
22
- *
23
- * 依赖方向:本模块**不** import runtime/manager(避免循环初始化)——运行时能力经
24
- * `configureHitlRuntime()` 注入(测试显式注入),缺省回落到插件挂载的 globalThis.__workshopManager。
25
- */
26
- import { createLogger } from '../logger'
27
- import type { AepHitlItem, AepHitlQuestion, AepHitlRequestType, AepHitlResolved, AepHitlStatus } from '../../../../shared/workshop-protocol'
28
- import type { ChannelRow } from '../db/database'
29
- import type { HitlPolicySnapshot, HitlRequestRepo } from '../db/hitl-request.repo'
30
- import type { ChannelMemberRepo } from '../db/channel-member.repo'
31
-
32
- const log = createLogger('workshop.hitl-registry')
33
-
34
- export type HitlKind = AepHitlItem['kind']
35
- export type HitlOutcome = AepHitlResolved['outcome']
36
-
37
- /** hitl 帧事件(ws hub 按 channelId 转接进频道流) */
38
- export interface HitlEvent {
39
- type: 'hitl.request' | 'hitl.resolved'
40
- payload: AepHitlItem | AepHitlResolved
41
- agentId?: string
42
- }
43
-
44
- type HitlListener = (e: HitlEvent) => void
45
-
46
- /** 登记入参(channelId/agentName 可由 resolver 补全;缺 channelId 的条目仅入全局快照) */
47
- export interface HitlRegisterInput {
48
- kind: HitlKind
49
- id: string
50
- agentId: string
51
- agentName?: string
52
- channelId?: string
53
- pid?: number
54
- method?: AepHitlItem['method']
55
- title: string
56
- detail?: string
57
- options?: string[]
58
- message?: string
59
- createdAt?: string
60
- expiresAt?: string | null
61
- // ===== v17 增量(全部可选:旧调用方零改动)=====
62
- /** question(提问) | approval(授权);缺省按 kind/method 推定 */
63
- requestType?: AepHitlRequestType
64
- /** 引擎原生 requestId(与 id 区分:omp 用 id,codex/opencode 另有 rpcId) */
65
- nativeRequestId?: string
66
- /** 引擎会话 id(重启恢复对账用) */
67
- sessionId?: string
68
- /** harness 标识(mock/omp/codex/opencode/dsh/claude/qwen/hermes) */
69
- harness?: string
70
- /** 结构化多问题(question 型;单选/多选/自由文本)**原样全量**承载,不得只取第一题 */
71
- questions?: AepHitlQuestion[]
72
- /** 结构化应答 schema(引擎原生) */
73
- schema?: Record<string, unknown>
74
- }
75
-
76
- /**
77
- * HITL 运行时能力面(manager 的**结构性**子集)。
78
- * 只声明本层真正消费的方法,避免 import runtime/manager 造成模块循环初始化;
79
- * 真实 manager 直接满足该结构(丁点不改 manager.ts)。
80
- */
81
- export interface HitlRuntimePort {
82
- groupChat: {
83
- hitl: HitlRequestRepo
84
- members: ChannelMemberRepo
85
- }
86
- notifyUser(input: {
87
- recipientUserId: string
88
- channelId?: string | null
89
- type: 'mention' | 'agent_reply' | 'hitl_request' | 'hitl_resolved' | 'member'
90
- eventId: string
91
- title?: string
92
- body?: string
93
- hitlKind?: string | null
94
- hitlId?: string | null
95
- payload?: Record<string, unknown>
96
- }): { id: string, inserted: boolean }
97
- /** 读视角可见 Channel(admin → 全部) */
98
- listChannelsVisibleTo(user: { id: string, role?: string }): ChannelRow[]
99
- /** 本人 owner 的 + owner=NULL 遗留公共(**只读兼容**,不得用于放宽管理面) */
100
- listChannelsForUser(userId: string): ChannelRow[]
101
- requireChannelMember(channelId: string, user: { id: string, role?: string }): ChannelRow
102
- requireCanApprove(
103
- channelId: string,
104
- user: { id: string, role?: string },
105
- opts?: { policy?: string, snapshot?: { eligibleUserIds?: string[], memberGenerations?: Record<string, number> } },
106
- ): ChannelRow
107
- /** 旧口径守卫(owner / 遗留公共);仅用于无持久化行的历史条目 */
108
- getChannelForUser(channelId: string, userId: string): ChannelRow
109
- findChannelAgentById(agentId: string): { id: string, channelId: string, templateId: string | null } | undefined
110
- /** 原生应答传导(codex/opencode/dsh/claude/qwen/hermes) */
111
- respondHarnessHitl(agentId: string, kind: string, id: string, outcome: {
112
- confirmed?: boolean
113
- cancelled?: boolean
114
- value?: string
115
- response?: string
116
- comment?: string
117
- }): Promise<void>
118
- }
119
-
120
- /** kind → harness 推定(omp-dialog 由 harness-terminal 登记,不回传 harness 时的兜底) */
121
- const KIND_HARNESS: Record<string, string> = {
122
- 'omp-dialog': 'omp',
123
- 'dcw-approval': 'dcw',
124
- 'codex-approval': 'codex',
125
- 'opencode-permission': 'opencode',
126
- 'dsh-permission': 'dsh',
127
- 'claude-permission': 'claude',
128
- 'qwen-permission': 'qwen',
129
- 'hermes-permission': 'hermes',
130
- }
131
-
132
- export function harnessOfKind(kind: string): string {
133
- return KIND_HARNESS[kind] ?? kind
134
- }
135
-
136
- /**
137
- * requestType 推定(§8 question/approval 必须分开建模):
138
- * - 显式声明优先;
139
- * - dcw/codex 的 confirm 类审批 = approval;
140
- * - input/select/editor 形态 = question(自由文本/选择即"内容是答案")。
141
- */
142
- export function requestTypeOf(input: { kind: string, requestType?: AepHitlRequestType, method?: AepHitlItem['method'] }): AepHitlRequestType {
143
- if (input.requestType === 'question' || input.requestType === 'approval') return input.requestType
144
- if (input.method === 'input' || input.method === 'select' || input.method === 'editor') return 'question'
145
- return 'approval'
146
- }
147
-
148
- /**
149
- * 引擎原生 questions[] 归一化(§13.5:必须**全量**承载,不得只取第一题)。
150
- * 兼容 codex `tool/requestUserInput`({id,header,question,options:[{label,description}]})
151
- * 与 opencode `question.asked`({id,header,question,options,multiple})两种形态;
152
- * 无法解析的条目按自由文本保留,绝不静默丢弃(丢题 = 丢答案)。
153
- */
154
- export function normalizeHitlQuestions(raw: unknown): AepHitlQuestion[] {
155
- if (!Array.isArray(raw)) return []
156
- return raw.map((q, i) => {
157
- const o = (q ?? {}) as Record<string, unknown>
158
- const rawOptions = Array.isArray(o.options) ? o.options : (Array.isArray(o.choices) ? o.choices : [])
159
- const options = rawOptions
160
- .map((op) => {
161
- // 字符串选项(部分 ACP/omp 形态)与对象选项都接
162
- if (typeof op === 'string') return { label: op }
163
- const oo = (op ?? {}) as Record<string, unknown>
164
- const label = String(oo.label ?? oo.value ?? oo.title ?? oo.name ?? '')
165
- const description = oo.description ?? oo.detail
166
- return { label, description: description ? String(description) : undefined }
167
- })
168
- .filter(x => x.label !== '')
169
- const question = String(o.question ?? o.label ?? o.header ?? o.prompt ?? `问题 ${i + 1}`)
170
- return {
171
- id: String(o.id ?? o.questionId ?? i),
172
- header: o.header !== undefined ? String(o.header) : undefined,
173
- question,
174
- options: options.length > 0 ? options : undefined,
175
- multiSelect: o.multiSelect === true || o.multiple === true || o.multi === true,
176
- // 无选项 = 自由文本;有选项时是否允许补充文本由引擎显式声明
177
- freeText: o.freeText === true || o.allowFreeText === true || options.length === 0,
178
- } satisfies AepHitlQuestion
179
- })
180
- }
181
-
182
- /**
183
- * 结构化答案的线上编码(适配器与决策服务共用;放在本模块以保持 adapter 的依赖图轻量)。
184
- *
185
- * 为什么需要信封:manager.respondHarnessHitl 的 outcome 契约是**冻结**的(只有 value:string),
186
- * 而多问题必须逐题回传。约定:单问题 = 裸文本(旧行为不变);多问题 = JSON 信封
187
- * `{"x-aw-hitl-answers":[{id,answer},…]}`。非信封字符串一律按单答案处理。
188
- */
189
- const ANSWER_ENVELOPE = 'x-aw-hitl-answers'
190
-
191
- /** 编码:单问题 → 裸文本;多问题 → 信封 JSON */
192
- export function encodeHitlAnswers(answers: Array<{ id: string, answer: string }>, fallback = ''): string {
193
- if (answers.length === 0) return fallback
194
- if (answers.length === 1) return answers[0]!.answer
195
- return JSON.stringify({ [ANSWER_ENVELOPE]: answers })
196
- }
197
-
198
- /** 解码(适配器用):非信封格式返回 null,调用方按单答案处理 */
199
- export function decodeHitlAnswers(value: string | undefined): Array<{ id: string, answer: string }> | null {
200
- if (!value || value[0] !== '{') return null
201
- try {
202
- const parsed = JSON.parse(value) as Record<string, unknown>
203
- const raw = parsed?.[ANSWER_ENVELOPE]
204
- if (!Array.isArray(raw)) return null
205
- return raw.map((r) => {
206
- const o = (r ?? {}) as Record<string, unknown>
207
- return { id: String(o.id ?? ''), answer: String(o.answer ?? '') }
208
- })
209
- }
210
- catch {
211
- return null
212
- }
213
- }
214
-
215
- /** 运行时注入点(测试/嵌入场景);缺省回落 globalThis.__workshopManager(插件挂载) */
216
- let runtimeResolver: (() => HitlRuntimePort | null) | null = null
217
-
218
- export function configureHitlRuntime(fn: (() => HitlRuntimePort | null) | null): void {
219
- runtimeResolver = fn
220
- }
221
-
222
- /** 解析 HITL 运行时能力面;不可用返回 null(旧测试脚手架/未装配) */
223
- export function resolveHitlRuntime(): HitlRuntimePort | null {
224
- if (runtimeResolver) {
225
- try {
226
- return runtimeResolver()
227
- }
228
- catch {
229
- return null
230
- }
231
- }
232
- const g = globalThis as typeof globalThis & { __workshopManager?: HitlRuntimePort }
233
- return g.__workshopManager ?? null
234
- }
235
-
236
- /** 频道行读取(内部快照用;admin 视角 = 全量,无需额外权限面) */
237
- export function channelRowOf(manager: HitlRuntimePort, channelId: string): ChannelRow | undefined {
238
- try {
239
- return manager.listChannelsVisibleTo({ id: '__hitl__', role: 'admin' }).find(c => c.id === channelId)
240
- }
241
- catch {
242
- return undefined
243
- }
244
- }
245
-
246
- /**
247
- * 冻结策略快照(§13.4:资格判定 = 创建时资格 ∩ 当前资格)。
248
- * - eligibleUserIds = 创建时 active 成员 ∪ owner;
249
- * - memberGenerations = 其会员代数(退出再加入 → 代数 +1,旧请求资格不恢复);
250
- * - policyVersion = channels.version(群聊维度变更 +1),policy = channels.approval_policy。
251
- */
252
- export function buildHitlPolicySnapshot(
253
- manager: HitlRuntimePort,
254
- channelId: string,
255
- createdAt = new Date().toISOString(),
256
- ): HitlPolicySnapshot {
257
- const channel = channelRowOf(manager, channelId)
258
- const eligible = new Set<string>()
259
- const generations: Record<string, number> = {}
260
- for (const m of manager.groupChat.members.listActiveByChannel(channelId)) {
261
- eligible.add(m.userId)
262
- generations[m.userId] = m.generation
263
- }
264
- const owner = channel?.ownerUserId ?? null
265
- if (owner) {
266
- eligible.add(owner)
267
- // owner 成员行缺省时(迁移窗口)按 ensureOwner 的初值 1 记账:
268
- // requireCanApprove 的代数比对在 requireChannelMember 自愈 owner 行之后进行,故恒等。
269
- if (generations[owner] === undefined) generations[owner] = 1
270
- }
271
- return {
272
- policy: channel?.approvalPolicy ?? 'owner_only',
273
- policyVersion: channel?.version ?? 0,
274
- eligibleUserIds: [...eligible],
275
- memberGenerations: generations,
276
- createdAt,
277
- }
278
- }
279
-
280
- class HitlRegistryService {
281
- /** key = `${kind}:${id}`;value 为 AepHitlItem(parkDeadline 单独存,避免污染协议对象) */
282
- private items = new Map<string, AepHitlItem>()
283
- private parkDeadline = new Map<string, string | null>()
284
- private listeners = new Map<string, Set<HitlListener>>()
285
- /** agentId → { channelId, agentName }(插件装配 repos 后注入;避免反向依赖 manager) */
286
- private resolver: ((agentId: string) => { channelId: string, agentName: string } | null) | null = null
287
- /** 已持久化的条目(防止降级重试时重复写;register 已保证幂等,这里是双保险) */
288
- private persisted = new Set<string>()
289
- /**
290
- * 决策上下文标记(hitl-decision 在传导原生应答前后 begin/end):
291
- * 适配器应答成功后会调用 resolve() —— 处于决策上下文时只清缓存、**不**广播,
292
- * 由决策服务的 settle() 统一广播带 status/nativeConfirmed 的 hitl.resolved(一次请求一帧)。
293
- */
294
- private deciding = new Set<string>()
295
-
296
- configureResolver(fn: (agentId: string) => { channelId: string, agentName: string } | null): void {
297
- this.resolver = fn
298
- }
299
-
300
- private key(kind: HitlKind, id: string): string {
301
- return `${kind}:${id}`
302
- }
303
-
304
- /**
305
- * 登记(幂等:同 kind+id 重复登记直接 early-return,不重发事件、不重写持久化行)。
306
- * v17:登记时尽力持久化事实行 + 生成定向审批通知;任何持久化异常都只降级打日志。
307
- */
308
- register(input: HitlRegisterInput): void {
309
- const key = this.key(input.kind, input.id)
310
- const existing = this.items.get(key)
311
- if (existing) return
312
- let channelId = input.channelId ?? ''
313
- let agentName = input.agentName ?? ''
314
- if ((!channelId || !agentName) && this.resolver) {
315
- try {
316
- const resolved = this.resolver(input.agentId)
317
- channelId = channelId || resolved?.channelId || ''
318
- agentName = agentName || resolved?.agentName || ''
319
- }
320
- catch { /* resolver 异常不阻断登记 */ }
321
- }
322
- // 策略快照先取:item 需要带 policy/approvalPolicyVersion 供前端展示与 ws 帧消费
323
- const manager = resolveHitlRuntime()
324
- let snapshot: HitlPolicySnapshot | null = null
325
- if (manager && channelId) {
326
- try {
327
- snapshot = buildHitlPolicySnapshot(manager, channelId)
328
- }
329
- catch (err) {
330
- log.warn('[hitl] 策略快照构建失败(降级为无快照):', err instanceof Error ? err.message : err)
331
- }
332
- }
333
- const requestType = requestTypeOf(input)
334
- const item: AepHitlItem = {
335
- kind: input.kind,
336
- id: input.id,
337
- channelId,
338
- agentId: input.agentId,
339
- agentName: agentName || input.agentId.slice(0, 8),
340
- pid: input.pid,
341
- method: input.method,
342
- title: input.title,
343
- detail: input.detail,
344
- options: input.options,
345
- message: input.message,
346
- createdAt: input.createdAt ?? new Date().toISOString(),
347
- expiresAt: input.expiresAt ?? null,
348
- // v17 增量
349
- requestType,
350
- nativeRequestId: input.nativeRequestId,
351
- sessionId: input.sessionId,
352
- harness: input.harness ?? harnessOfKind(input.kind),
353
- questions: input.questions,
354
- schema: input.schema,
355
- status: 'pending',
356
- policy: snapshot?.policy,
357
- approvalPolicyVersion: snapshot?.policyVersion,
358
- channelVersion: snapshot?.policyVersion,
359
- }
360
- this.items.set(key, item)
361
- this.parkDeadline.set(key, item.expiresAt ?? null)
362
- // ① 事实落库(事实源);② 广播;③ 定向通知(禁止全局广播)
363
- this.persist(item, snapshot)
364
- this.emit({ type: 'hitl.request', payload: item, agentId: item.agentId })
365
- this.notifyRequest(item, snapshot)
366
- }
367
-
368
- /**
369
- * 落定(幂等:未登记的 key 返回 false —— 上层据此实现 409 ALREADY_RESOLVED)。
370
- * outcome:answered(人类已答复/批准/拒绝)/ cancelled(人工放弃或 omp 撤销)/ expired(超时)。
371
- * 适配器在原生应答成功后调用;细粒度状态由决策服务的 settle() 承载。
372
- */
373
- resolve(kind: HitlKind, id: string, outcome: HitlOutcome, by?: string): boolean {
374
- const key = this.key(kind, id)
375
- const item = this.items.get(key)
376
- if (!item) return false
377
- this.items.delete(key)
378
- this.parkDeadline.delete(key)
379
- // 决策上下文:广播交给 settle()(同样返回 true,调用方语义不变)
380
- if (this.deciding.has(key)) return true
381
- const payload: AepHitlResolved = {
382
- kind,
383
- id,
384
- channelId: item.channelId,
385
- agentId: item.agentId,
386
- outcome,
387
- by,
388
- }
389
- this.emit({ type: 'hitl.resolved', payload, agentId: item.agentId })
390
- return true
391
- }
392
-
393
- /** 进入决策上下文(见 deciding 注释;必须在 finally 中 endDecision) */
394
- beginDecision(kind: HitlKind, id: string): void {
395
- this.deciding.add(this.key(kind, id))
396
- }
397
-
398
- /** 退出决策上下文 */
399
- endDecision(kind: HitlKind, id: string): void {
400
- this.deciding.delete(this.key(kind, id))
401
- }
402
-
403
- /**
404
- * 决策服务落定:带持久化细粒度状态与 nativeConfirmed 的 hitl.resolved。
405
- * 内存条目已被适配器 resolve 掉时,靠调用方传入的 channelId/agentId 补全并广播
406
- * (决策上下文的唯一广播出口);非决策上下文且条目不存在 → 返回 false,不重复广播。
407
- */
408
- settle(kind: HitlKind, id: string, opts: {
409
- outcome: HitlOutcome
410
- by?: string
411
- status?: AepHitlStatus
412
- nativeConfirmed?: boolean
413
- /** 条目已被适配器清缓存时的兜底路由信息(决策服务从持久化行取得) */
414
- channelId?: string
415
- agentId?: string
416
- }): boolean {
417
- const key = this.key(kind, id)
418
- const item = this.items.get(key)
419
- if (!item && !opts.channelId) return false
420
- this.items.delete(key)
421
- this.parkDeadline.delete(key)
422
- const payload: AepHitlResolved = {
423
- kind,
424
- id,
425
- channelId: item?.channelId || opts.channelId || '',
426
- agentId: item?.agentId || opts.agentId || '',
427
- outcome: opts.outcome,
428
- by: opts.by,
429
- status: opts.status,
430
- nativeConfirmed: opts.nativeConfirmed,
431
- }
432
- this.emit({ type: 'hitl.resolved', payload, agentId: payload.agentId })
433
- return true
434
- }
435
-
436
- /** 查询单条(应答路由用:取 pid / channelId / method) */
437
- find(kind: HitlKind, id: string): AepHitlItem | null {
438
- return this.items.get(this.key(kind, id)) ?? null
439
- }
440
-
441
- /** park 截止更新(harness-terminal 订阅者增减时静默修正;null = 计时暂停) */
442
- setParkDeadline(kind: HitlKind, id: string, expiresAt: string | null): void {
443
- const key = this.key(kind, id)
444
- if (!this.items.has(key)) return
445
- this.parkDeadline.set(key, expiresAt)
446
- const item = this.items.get(key)!
447
- item.expiresAt = expiresAt
448
- }
449
-
450
- /** 全局(或指定 channel)待处理快照 */
451
- snapshot(channelId?: string): AepHitlItem[] {
452
- return [...this.items.values()].filter(i => !channelId || i.channelId === channelId)
453
- }
454
-
455
- /** per-channel 事件订阅(ws hub ensureStream 时接线;返回退订函数) */
456
- subscribe(channelId: string, fn: HitlListener): () => void {
457
- let set = this.listeners.get(channelId)
458
- if (!set) {
459
- set = new Set()
460
- this.listeners.set(channelId, set)
461
- }
462
- set.add(fn)
463
- return () => {
464
- set.delete(fn)
465
- if (set.size === 0) this.listeners.delete(channelId)
466
- }
467
- }
468
-
469
- /** 持久化事实行(失败只降级:旧脚手架无群聊层仓储时 register 必须照常工作) */
470
- private persist(item: AepHitlItem, snapshot: HitlPolicySnapshot | null): void {
471
- const manager = resolveHitlRuntime()
472
- if (!manager || !item.channelId) return
473
- const key = this.key(item.kind, item.id)
474
- if (this.persisted.has(key)) return
475
- try {
476
- const repo = manager.groupChat.hitl
477
- if (!repo.findById(item.id)) {
478
- repo.create({
479
- id: item.id,
480
- kind: item.kind,
481
- requestType: requestTypeOf(item),
482
- nativeRequestId: item.nativeRequestId,
483
- channelId: item.channelId,
484
- agentId: item.agentId,
485
- agentName: item.agentName,
486
- sessionId: item.sessionId,
487
- harness: item.harness,
488
- mode: item.requestType,
489
- title: item.title,
490
- detail: item.detail,
491
- options: item.options,
492
- questions: item.questions,
493
- schema: item.schema,
494
- policy: snapshot?.policy ?? 'owner_only',
495
- policySnapshot: snapshot ?? buildHitlPolicySnapshot(manager, item.channelId),
496
- expiresAt: item.expiresAt ?? null,
497
- })
498
- }
499
- this.persisted.add(key)
500
- }
501
- catch (err) {
502
- log.warn('[hitl] 持久化登记失败(降级为纯内存):', err instanceof Error ? err.message : err)
503
- }
504
- }
505
-
506
- /**
507
- * 登记时按策略生成**定向**审批通知(§8 步骤 3)。
508
- * - any_member:创建时冻结的合格成员全体(∩ 当前 active,退出者不再打扰);
509
- * - owner_only:仅 owner(其余成员无权决策,通知即噪音)。
510
- * eventId 幂等(`hitl_request:${kind}:${id}`),重复投递不产生重复弹窗。
511
- */
512
- private notifyRequest(item: AepHitlItem, snapshot: HitlPolicySnapshot | null): void {
513
- const manager = resolveHitlRuntime()
514
- if (!manager || !snapshot || !item.channelId) return
515
- try {
516
- const owner = channelRowOf(manager, item.channelId)?.ownerUserId ?? null
517
- const active = new Set(manager.groupChat.members.listActiveByChannel(item.channelId).map(m => m.userId))
518
- if (owner) active.add(owner)
519
- const policy = snapshot.policy
520
- const recipients = policy === 'any_member'
521
- ? snapshot.eligibleUserIds.filter(u => active.has(u))
522
- : (owner ? [owner] : [])
523
- for (const recipientUserId of recipients) {
524
- manager.notifyUser({
525
- recipientUserId,
526
- channelId: item.channelId,
527
- type: 'hitl_request',
528
- eventId: `hitl_request:${item.kind}:${item.id}`,
529
- title: item.title,
530
- body: item.detail ?? '',
531
- hitlKind: item.kind,
532
- hitlId: item.id,
533
- payload: {
534
- requestType: requestTypeOf(item),
535
- harness: item.harness,
536
- agentId: item.agentId,
537
- agentName: item.agentName,
538
- policy,
539
- approvalPolicyVersion: snapshot.policyVersion,
540
- questions: item.questions ?? [],
541
- },
542
- })
543
- }
544
- }
545
- catch (err) {
546
- log.warn('[hitl] 登记通知投递失败(不影响待办):', err instanceof Error ? err.message : err)
547
- }
548
- }
549
-
550
- private emit(e: HitlEvent): void {
551
- const channelId = (e.payload as AepHitlItem).channelId
552
- const set = channelId ? this.listeners.get(channelId) : undefined
553
- if (!set) return
554
- for (const fn of set) {
555
- try {
556
- fn(e)
557
- }
558
- catch { /* 单个订阅者异常不影响扇出 */ }
559
- }
560
- }
561
- }
562
-
563
- const g = globalThis as typeof globalThis & { __hitlRegistry?: HitlRegistryService }
564
-
565
- export function getHitlRegistry(): HitlRegistryService {
566
- g.__hitlRegistry ??= new HitlRegistryService()
567
- return g.__hitlRegistry
568
- }
569
-
570
- /** 插件接线用别名(语义直白) */
571
- export const configureHitlResolver = (fn: (agentId: string) => { channelId: string, agentName: string } | null): void =>
572
- getHitlRegistry().configureResolver(fn)
573
-
574
- /** per-channel 事件订阅(ws hub 建流时挂接;hitl.request/hitl.resolved 扇出) */
575
- export function subscribeHitlEvents(channelId: string, fn: HitlListener): () => void {
576
- return getHitlRegistry().subscribe(channelId, fn)
577
- }
1
+ /**
2
+ * HitlRegistry —— 全局"待人工处理"登记处(进程内缓存门面,globalThis 单例)。
3
+ *
4
+ * 把两条互相独立的 HITL 链路统一成一个可发现的视图:
5
+ * - omp-dialog omp `rpc-ui` 的 extension_ui_request 对话框(harness-terminal 登记;
6
+ * park/暂停计时语义由 terminal 订阅者状态驱动,本模块只存状态与广播)
7
+ * - dcw-approval 手动确认模式的工具执行审批(tool-approvals 登记/裁决)
8
+ * - codex/opencode/dsh/claude/qwen/hermes 各 harness 的原生审批与提问(adapter 登记)
9
+ *
10
+ * 职责:登记(hitl.request)/ 落定(hitl.resolved)事件经 per-channel 订阅扇出,
11
+ * 由 workshop ws hub 转接进 AEP 频道流(seq/落库);统一 REST 快照与应答路由
12
+ * (/api/workshop/hitl/pending、/respond)也读本模块。
13
+ *
14
+ * **v17 定位变更(主计划 §13.4):本模块降级为缓存门面,事实源是 `hitl_requests` 表。**
15
+ * - register() 在登记内存快照的同时**尽力持久化**一行(冻结策略快照 eligibleUserIds/
16
+ * memberGenerations/policyVersion)并按审批策略生成定向通知(manager.notifyUser,
17
+ * 禁止 broadcastPeerEvent 全局广播)。持久化失败只降级(打日志),绝不抛出 ——
18
+ * 旧测试脚手架在 :memory: 上只装 11 个 repo、没有群聊层仓储,register 必须照常工作。
19
+ * - resolve() 保持**旧语义完全不变**(未登记的 key 返回 false → 上层 409 ALREADY_RESOLVED);
20
+ * 适配器仍在原生应答成功后调用它。
21
+ * - settle() 供决策服务(hitl-decision)落定:带持久化状态与 nativeConfirmed 的 hitl.resolved。
22
+ *
23
+ * 依赖方向:本模块**不** import runtime/manager(避免循环初始化)——运行时能力经
24
+ * `configureHitlRuntime()` 注入(测试显式注入),缺省回落到插件挂载的 globalThis.__workshopManager。
25
+ */
26
+ import { createLogger } from '../logger'
27
+ import type { AepHitlItem, AepHitlQuestion, AepHitlRequestType, AepHitlResolved, AepHitlStatus } from '../../../../shared/workshop-protocol'
28
+ import type { ChannelRow } from '../db/database'
29
+ import type { HitlPolicySnapshot, HitlRequestRepo } from '../db/hitl-request.repo'
30
+ import type { ChannelMemberRepo } from '../db/channel-member.repo'
31
+
32
+ const log = createLogger('workshop.hitl-registry')
33
+
34
+ export type HitlKind = AepHitlItem['kind']
35
+ export type HitlOutcome = AepHitlResolved['outcome']
36
+
37
+ /** hitl 帧事件(ws hub 按 channelId 转接进频道流) */
38
+ export interface HitlEvent {
39
+ type: 'hitl.request' | 'hitl.resolved'
40
+ payload: AepHitlItem | AepHitlResolved
41
+ agentId?: string
42
+ }
43
+
44
+ type HitlListener = (e: HitlEvent) => void
45
+
46
+ /** 登记入参(channelId/agentName 可由 resolver 补全;缺 channelId 的条目仅入全局快照) */
47
+ export interface HitlRegisterInput {
48
+ kind: HitlKind
49
+ id: string
50
+ agentId: string
51
+ agentName?: string
52
+ channelId?: string
53
+ pid?: number
54
+ method?: AepHitlItem['method']
55
+ title: string
56
+ detail?: string
57
+ options?: string[]
58
+ message?: string
59
+ createdAt?: string
60
+ expiresAt?: string | null
61
+ // ===== v17 增量(全部可选:旧调用方零改动)=====
62
+ /** question(提问) | approval(授权);缺省按 kind/method 推定 */
63
+ requestType?: AepHitlRequestType
64
+ /** 引擎原生 requestId(与 id 区分:omp 用 id,codex/opencode 另有 rpcId) */
65
+ nativeRequestId?: string
66
+ /** 引擎会话 id(重启恢复对账用) */
67
+ sessionId?: string
68
+ /** harness 标识(mock/omp/codex/opencode/dsh/claude/qwen/hermes) */
69
+ harness?: string
70
+ /** 结构化多问题(question 型;单选/多选/自由文本)**原样全量**承载,不得只取第一题 */
71
+ questions?: AepHitlQuestion[]
72
+ /** 结构化应答 schema(引擎原生) */
73
+ schema?: Record<string, unknown>
74
+ /** 权限模型 v3:dcw-approval 的目标对象 id(recipe-propose:<配方id> 或 节点 id;产线锚点推导用) */
75
+ nodeId?: string
76
+ }
77
+
78
+ /**
79
+ * HITL 运行时能力面(manager 的**结构性**子集)。
80
+ * 只声明本层真正消费的方法,避免 import runtime/manager 造成模块循环初始化;
81
+ * 真实 manager 直接满足该结构(丁点不改 manager.ts)。
82
+ */
83
+ export interface HitlRuntimePort {
84
+ groupChat: {
85
+ hitl: HitlRequestRepo
86
+ members: ChannelMemberRepo
87
+ }
88
+ notifyUser(input: {
89
+ recipientUserId: string
90
+ channelId?: string | null
91
+ type: 'mention' | 'agent_reply' | 'hitl_request' | 'hitl_resolved' | 'member'
92
+ eventId: string
93
+ title?: string
94
+ body?: string
95
+ hitlKind?: string | null
96
+ hitlId?: string | null
97
+ payload?: Record<string, unknown>
98
+ }): { id: string, inserted: boolean }
99
+ /** 读视角可见 Channel(admin → 全部) */
100
+ listChannelsVisibleTo(user: { id: string, role?: string }): ChannelRow[]
101
+ /** 本人 owner 的 + owner=NULL 遗留公共(**只读兼容**,不得用于放宽管理面) */
102
+ listChannelsForUser(userId: string): ChannelRow[]
103
+ requireChannelMember(channelId: string, user: { id: string, role?: string }): ChannelRow
104
+ requireCanApprove(
105
+ channelId: string,
106
+ user: { id: string, role?: string },
107
+ opts?: { policy?: string, snapshot?: { eligibleUserIds?: string[], memberGenerations?: Record<string, number> } },
108
+ ): ChannelRow
109
+ /** 旧口径守卫(owner / 遗留公共);仅用于无持久化行的历史条目 */
110
+ getChannelForUser(channelId: string, userId: string): ChannelRow
111
+ findChannelAgentById(agentId: string): { id: string, channelId: string, templateId: string | null } | undefined
112
+ /** 原生应答传导(codex/opencode/dsh/claude/qwen/hermes) */
113
+ respondHarnessHitl(agentId: string, kind: string, id: string, outcome: {
114
+ confirmed?: boolean
115
+ cancelled?: boolean
116
+ value?: string
117
+ response?: string
118
+ comment?: string
119
+ }): Promise<void>
120
+ }
121
+
122
+ /** kind → harness 推定(omp-dialog 由 harness-terminal 登记,不回传 harness 时的兜底) */
123
+ const KIND_HARNESS: Record<string, string> = {
124
+ 'omp-dialog': 'omp',
125
+ 'dcw-approval': 'dcw',
126
+ 'codex-approval': 'codex',
127
+ 'opencode-permission': 'opencode',
128
+ 'dsh-permission': 'dsh',
129
+ 'claude-permission': 'claude',
130
+ 'qwen-permission': 'qwen',
131
+ 'hermes-permission': 'hermes',
132
+ }
133
+
134
+ export function harnessOfKind(kind: string): string {
135
+ return KIND_HARNESS[kind] ?? kind
136
+ }
137
+
138
+ /**
139
+ * requestType 推定(§8 question/approval 必须分开建模):
140
+ * - 显式声明优先;
141
+ * - dcw/codex 的 confirm 类审批 = approval;
142
+ * - input/select/editor 形态 = question(自由文本/选择即"内容是答案")。
143
+ */
144
+ export function requestTypeOf(input: { kind: string, requestType?: AepHitlRequestType, method?: AepHitlItem['method'] }): AepHitlRequestType {
145
+ if (input.requestType === 'question' || input.requestType === 'approval') return input.requestType
146
+ if (input.method === 'input' || input.method === 'select' || input.method === 'editor') return 'question'
147
+ return 'approval'
148
+ }
149
+
150
+ /**
151
+ * 引擎原生 questions[] 归一化(§13.5:必须**全量**承载,不得只取第一题)。
152
+ * 兼容 codex `tool/requestUserInput`({id,header,question,options:[{label,description}]})
153
+ * 与 opencode `question.asked`({id,header,question,options,multiple})两种形态;
154
+ * 无法解析的条目按自由文本保留,绝不静默丢弃(丢题 = 丢答案)。
155
+ */
156
+ export function normalizeHitlQuestions(raw: unknown): AepHitlQuestion[] {
157
+ if (!Array.isArray(raw)) return []
158
+ return raw.map((q, i) => {
159
+ const o = (q ?? {}) as Record<string, unknown>
160
+ const rawOptions = Array.isArray(o.options) ? o.options : (Array.isArray(o.choices) ? o.choices : [])
161
+ const options = rawOptions
162
+ .map((op) => {
163
+ // 字符串选项(部分 ACP/omp 形态)与对象选项都接
164
+ if (typeof op === 'string') return { label: op }
165
+ const oo = (op ?? {}) as Record<string, unknown>
166
+ const label = String(oo.label ?? oo.value ?? oo.title ?? oo.name ?? '')
167
+ const description = oo.description ?? oo.detail
168
+ return { label, description: description ? String(description) : undefined }
169
+ })
170
+ .filter(x => x.label !== '')
171
+ const question = String(o.question ?? o.label ?? o.header ?? o.prompt ?? `问题 ${i + 1}`)
172
+ return {
173
+ id: String(o.id ?? o.questionId ?? i),
174
+ header: o.header !== undefined ? String(o.header) : undefined,
175
+ question,
176
+ options: options.length > 0 ? options : undefined,
177
+ multiSelect: o.multiSelect === true || o.multiple === true || o.multi === true,
178
+ // 无选项 = 自由文本;有选项时是否允许补充文本由引擎显式声明
179
+ freeText: o.freeText === true || o.allowFreeText === true || options.length === 0,
180
+ } satisfies AepHitlQuestion
181
+ })
182
+ }
183
+
184
+ /**
185
+ * 结构化答案的线上编码(适配器与决策服务共用;放在本模块以保持 adapter 的依赖图轻量)。
186
+ *
187
+ * 为什么需要信封:manager.respondHarnessHitl 的 outcome 契约是**冻结**的(只有 value:string),
188
+ * 而多问题必须逐题回传。约定:单问题 = 裸文本(旧行为不变);多问题 = JSON 信封
189
+ * `{"x-aw-hitl-answers":[{id,answer},…]}`。非信封字符串一律按单答案处理。
190
+ */
191
+ const ANSWER_ENVELOPE = 'x-aw-hitl-answers'
192
+
193
+ /** 编码:单问题 → 裸文本;多问题 → 信封 JSON */
194
+ export function encodeHitlAnswers(answers: Array<{ id: string, answer: string }>, fallback = ''): string {
195
+ if (answers.length === 0) return fallback
196
+ if (answers.length === 1) return answers[0]!.answer
197
+ return JSON.stringify({ [ANSWER_ENVELOPE]: answers })
198
+ }
199
+
200
+ /** 解码(适配器用):非信封格式返回 null,调用方按单答案处理 */
201
+ export function decodeHitlAnswers(value: string | undefined): Array<{ id: string, answer: string }> | null {
202
+ if (!value || value[0] !== '{') return null
203
+ try {
204
+ const parsed = JSON.parse(value) as Record<string, unknown>
205
+ const raw = parsed?.[ANSWER_ENVELOPE]
206
+ if (!Array.isArray(raw)) return null
207
+ return raw.map((r) => {
208
+ const o = (r ?? {}) as Record<string, unknown>
209
+ return { id: String(o.id ?? ''), answer: String(o.answer ?? '') }
210
+ })
211
+ }
212
+ catch {
213
+ return null
214
+ }
215
+ }
216
+
217
+ /** 运行时注入点(测试/嵌入场景);缺省回落 globalThis.__workshopManager(插件挂载) */
218
+ let runtimeResolver: (() => HitlRuntimePort | null) | null = null
219
+
220
+ export function configureHitlRuntime(fn: (() => HitlRuntimePort | null) | null): void {
221
+ runtimeResolver = fn
222
+ }
223
+
224
+ /** 解析 HITL 运行时能力面;不可用返回 null(旧测试脚手架/未装配) */
225
+ export function resolveHitlRuntime(): HitlRuntimePort | null {
226
+ if (runtimeResolver) {
227
+ try {
228
+ return runtimeResolver()
229
+ }
230
+ catch {
231
+ return null
232
+ }
233
+ }
234
+ const g = globalThis as typeof globalThis & { __workshopManager?: HitlRuntimePort }
235
+ return g.__workshopManager ?? null
236
+ }
237
+
238
+ /** 频道行读取(内部快照用;admin 视角 = 全量,无需额外权限面) */
239
+ export function channelRowOf(manager: HitlRuntimePort, channelId: string): ChannelRow | undefined {
240
+ try {
241
+ return manager.listChannelsVisibleTo({ id: '__hitl__', role: 'admin' }).find(c => c.id === channelId)
242
+ }
243
+ catch {
244
+ return undefined
245
+ }
246
+ }
247
+
248
+ /**
249
+ * 冻结策略快照(§13.4:资格判定 = 创建时资格 ∩ 当前资格)。
250
+ * - eligibleUserIds = 创建时 active 成员 ∪ owner;
251
+ * - memberGenerations = 其会员代数(退出再加入 → 代数 +1,旧请求资格不恢复);
252
+ * - policyVersion = channels.version(群聊维度变更 +1),policy = channels.approval_policy。
253
+ */
254
+ export function buildHitlPolicySnapshot(
255
+ manager: HitlRuntimePort,
256
+ channelId: string,
257
+ createdAt = new Date().toISOString(),
258
+ ): HitlPolicySnapshot {
259
+ const channel = channelRowOf(manager, channelId)
260
+ const eligible = new Set<string>()
261
+ const generations: Record<string, number> = {}
262
+ for (const m of manager.groupChat.members.listActiveByChannel(channelId)) {
263
+ eligible.add(m.userId)
264
+ generations[m.userId] = m.generation
265
+ }
266
+ const owner = channel?.ownerUserId ?? null
267
+ if (owner) {
268
+ eligible.add(owner)
269
+ // owner 成员行缺省时(迁移窗口)按 ensureOwner 的初值 1 记账:
270
+ // requireCanApprove 的代数比对在 requireChannelMember 自愈 owner 行之后进行,故恒等。
271
+ if (generations[owner] === undefined) generations[owner] = 1
272
+ }
273
+ return {
274
+ policy: channel?.approvalPolicy ?? 'owner_only',
275
+ policyVersion: channel?.version ?? 0,
276
+ eligibleUserIds: [...eligible],
277
+ memberGenerations: generations,
278
+ createdAt,
279
+ }
280
+ }
281
+
282
+ class HitlRegistryService {
283
+ /** key = `${kind}:${id}`;value 为 AepHitlItem(parkDeadline 单独存,避免污染协议对象) */
284
+ private items = new Map<string, AepHitlItem>()
285
+ private parkDeadline = new Map<string, string | null>()
286
+ private listeners = new Map<string, Set<HitlListener>>()
287
+ /** agentId → { channelId, agentName }(插件装配 repos 后注入;避免反向依赖 manager) */
288
+ private resolver: ((agentId: string) => { channelId: string, agentName: string } | null) | null = null
289
+ /** 已持久化的条目(防止降级重试时重复写;register 已保证幂等,这里是双保险) */
290
+ private persisted = new Set<string>()
291
+ /**
292
+ * 决策上下文标记(hitl-decision 在传导原生应答前后 begin/end):
293
+ * 适配器应答成功后会调用 resolve() —— 处于决策上下文时只清缓存、**不**广播,
294
+ * 由决策服务的 settle() 统一广播带 status/nativeConfirmed 的 hitl.resolved(一次请求一帧)。
295
+ */
296
+ private deciding = new Set<string>()
297
+
298
+ configureResolver(fn: (agentId: string) => { channelId: string, agentName: string } | null): void {
299
+ this.resolver = fn
300
+ }
301
+
302
+ private key(kind: HitlKind, id: string): string {
303
+ return `${kind}:${id}`
304
+ }
305
+
306
+ /**
307
+ * 登记(幂等:同 kind+id 重复登记直接 early-return,不重发事件、不重写持久化行)。
308
+ * v17:登记时尽力持久化事实行 + 生成定向审批通知;任何持久化异常都只降级打日志。
309
+ */
310
+ register(input: HitlRegisterInput): void {
311
+ const key = this.key(input.kind, input.id)
312
+ const existing = this.items.get(key)
313
+ if (existing) return
314
+ let channelId = input.channelId ?? ''
315
+ let agentName = input.agentName ?? ''
316
+ if ((!channelId || !agentName) && this.resolver) {
317
+ try {
318
+ const resolved = this.resolver(input.agentId)
319
+ channelId = channelId || resolved?.channelId || ''
320
+ agentName = agentName || resolved?.agentName || ''
321
+ }
322
+ catch { /* resolver 异常不阻断登记 */ }
323
+ }
324
+ // 策略快照先取:item 需要带 policy/approvalPolicyVersion 供前端展示与 ws 帧消费
325
+ const manager = resolveHitlRuntime()
326
+ let snapshot: HitlPolicySnapshot | null = null
327
+ if (manager && channelId) {
328
+ try {
329
+ snapshot = buildHitlPolicySnapshot(manager, channelId)
330
+ }
331
+ catch (err) {
332
+ log.warn('[hitl] 策略快照构建失败(降级为无快照):', err instanceof Error ? err.message : err)
333
+ }
334
+ }
335
+ const requestType = requestTypeOf(input)
336
+ const item: AepHitlItem = {
337
+ kind: input.kind,
338
+ id: input.id,
339
+ channelId,
340
+ agentId: input.agentId,
341
+ agentName: agentName || input.agentId.slice(0, 8),
342
+ pid: input.pid,
343
+ method: input.method,
344
+ title: input.title,
345
+ detail: input.detail,
346
+ options: input.options,
347
+ message: input.message,
348
+ createdAt: input.createdAt ?? new Date().toISOString(),
349
+ expiresAt: input.expiresAt ?? null,
350
+ // v17 增量
351
+ requestType,
352
+ nativeRequestId: input.nativeRequestId,
353
+ sessionId: input.sessionId,
354
+ harness: input.harness ?? harnessOfKind(input.kind),
355
+ questions: input.questions,
356
+ schema: input.schema,
357
+ // 权限模型 v3:工具审批单锚点(recipe-propose:<id>/节点 id)必须透传,
358
+ // 否则 lineOfHitlItem 退化到 channel.lineId,未绑线频道的审批漏过产线过滤
359
+ ...(input.nodeId ? { nodeId: input.nodeId } : {}),
360
+ status: 'pending',
361
+ policy: snapshot?.policy,
362
+ approvalPolicyVersion: snapshot?.policyVersion,
363
+ channelVersion: snapshot?.policyVersion,
364
+ }
365
+ this.items.set(key, item)
366
+ this.parkDeadline.set(key, item.expiresAt ?? null)
367
+ // ① 事实落库(事实源);② 广播;③ 定向通知(禁止全局广播)
368
+ this.persist(item, snapshot)
369
+ this.emit({ type: 'hitl.request', payload: item, agentId: item.agentId })
370
+ this.notifyRequest(item, snapshot)
371
+ }
372
+
373
+ /**
374
+ * 落定(幂等:未登记的 key 返回 false —— 上层据此实现 409 ALREADY_RESOLVED)。
375
+ * outcome:answered(人类已答复/批准/拒绝)/ cancelled(人工放弃或 omp 撤销)/ expired(超时)。
376
+ * 适配器在原生应答成功后调用;细粒度状态由决策服务的 settle() 承载。
377
+ */
378
+ resolve(kind: HitlKind, id: string, outcome: HitlOutcome, by?: string): boolean {
379
+ const key = this.key(kind, id)
380
+ const item = this.items.get(key)
381
+ if (!item) return false
382
+ this.items.delete(key)
383
+ this.parkDeadline.delete(key)
384
+ // 决策上下文:广播交给 settle()(同样返回 true,调用方语义不变)
385
+ if (this.deciding.has(key)) return true
386
+ const payload: AepHitlResolved = {
387
+ kind,
388
+ id,
389
+ channelId: item.channelId,
390
+ agentId: item.agentId,
391
+ outcome,
392
+ by,
393
+ }
394
+ this.emit({ type: 'hitl.resolved', payload, agentId: item.agentId })
395
+ return true
396
+ }
397
+
398
+ /** 进入决策上下文(见 deciding 注释;必须在 finally 中 endDecision) */
399
+ beginDecision(kind: HitlKind, id: string): void {
400
+ this.deciding.add(this.key(kind, id))
401
+ }
402
+
403
+ /** 退出决策上下文 */
404
+ endDecision(kind: HitlKind, id: string): void {
405
+ this.deciding.delete(this.key(kind, id))
406
+ }
407
+
408
+ /**
409
+ * 决策服务落定:带持久化细粒度状态与 nativeConfirmed 的 hitl.resolved。
410
+ * 内存条目已被适配器 resolve 掉时,靠调用方传入的 channelId/agentId 补全并广播
411
+ * (决策上下文的唯一广播出口);非决策上下文且条目不存在 → 返回 false,不重复广播。
412
+ */
413
+ settle(kind: HitlKind, id: string, opts: {
414
+ outcome: HitlOutcome
415
+ by?: string
416
+ status?: AepHitlStatus
417
+ nativeConfirmed?: boolean
418
+ /** 条目已被适配器清缓存时的兜底路由信息(决策服务从持久化行取得) */
419
+ channelId?: string
420
+ agentId?: string
421
+ }): boolean {
422
+ const key = this.key(kind, id)
423
+ const item = this.items.get(key)
424
+ if (!item && !opts.channelId) return false
425
+ this.items.delete(key)
426
+ this.parkDeadline.delete(key)
427
+ const payload: AepHitlResolved = {
428
+ kind,
429
+ id,
430
+ channelId: item?.channelId || opts.channelId || '',
431
+ agentId: item?.agentId || opts.agentId || '',
432
+ outcome: opts.outcome,
433
+ by: opts.by,
434
+ status: opts.status,
435
+ nativeConfirmed: opts.nativeConfirmed,
436
+ }
437
+ this.emit({ type: 'hitl.resolved', payload, agentId: payload.agentId })
438
+ return true
439
+ }
440
+
441
+ /** 查询单条(应答路由用:取 pid / channelId / method) */
442
+ find(kind: HitlKind, id: string): AepHitlItem | null {
443
+ return this.items.get(this.key(kind, id)) ?? null
444
+ }
445
+
446
+ /** park 截止更新(harness-terminal 订阅者增减时静默修正;null = 计时暂停) */
447
+ setParkDeadline(kind: HitlKind, id: string, expiresAt: string | null): void {
448
+ const key = this.key(kind, id)
449
+ if (!this.items.has(key)) return
450
+ this.parkDeadline.set(key, expiresAt)
451
+ const item = this.items.get(key)!
452
+ item.expiresAt = expiresAt
453
+ }
454
+
455
+ /** 全局(或指定 channel)待处理快照 */
456
+ snapshot(channelId?: string): AepHitlItem[] {
457
+ return [...this.items.values()].filter(i => !channelId || i.channelId === channelId)
458
+ }
459
+
460
+ /** per-channel 事件订阅(ws hub ensureStream 时接线;返回退订函数) */
461
+ subscribe(channelId: string, fn: HitlListener): () => void {
462
+ let set = this.listeners.get(channelId)
463
+ if (!set) {
464
+ set = new Set()
465
+ this.listeners.set(channelId, set)
466
+ }
467
+ set.add(fn)
468
+ return () => {
469
+ set.delete(fn)
470
+ if (set.size === 0) this.listeners.delete(channelId)
471
+ }
472
+ }
473
+
474
+ /** 持久化事实行(失败只降级:旧脚手架无群聊层仓储时 register 必须照常工作) */
475
+ private persist(item: AepHitlItem, snapshot: HitlPolicySnapshot | null): void {
476
+ const manager = resolveHitlRuntime()
477
+ if (!manager || !item.channelId) return
478
+ const key = this.key(item.kind, item.id)
479
+ if (this.persisted.has(key)) return
480
+ try {
481
+ const repo = manager.groupChat.hitl
482
+ if (!repo.findById(item.id)) {
483
+ repo.create({
484
+ id: item.id,
485
+ kind: item.kind,
486
+ requestType: requestTypeOf(item),
487
+ nativeRequestId: item.nativeRequestId,
488
+ channelId: item.channelId,
489
+ agentId: item.agentId,
490
+ agentName: item.agentName,
491
+ sessionId: item.sessionId,
492
+ harness: item.harness,
493
+ mode: item.requestType,
494
+ title: item.title,
495
+ detail: item.detail,
496
+ options: item.options,
497
+ questions: item.questions,
498
+ schema: item.schema,
499
+ policy: snapshot?.policy ?? 'owner_only',
500
+ policySnapshot: snapshot ?? buildHitlPolicySnapshot(manager, item.channelId),
501
+ expiresAt: item.expiresAt ?? null,
502
+ })
503
+ }
504
+ this.persisted.add(key)
505
+ }
506
+ catch (err) {
507
+ log.warn('[hitl] 持久化登记失败(降级为纯内存):', err instanceof Error ? err.message : err)
508
+ }
509
+ }
510
+
511
+ /**
512
+ * 登记时按策略生成**定向**审批通知(§8 步骤 3)。
513
+ * - any_member:创建时冻结的合格成员全体(∩ 当前 active,退出者不再打扰);
514
+ * - owner_only:仅 owner(其余成员无权决策,通知即噪音)。
515
+ * eventId 幂等(`hitl_request:${kind}:${id}`),重复投递不产生重复弹窗。
516
+ */
517
+ private notifyRequest(item: AepHitlItem, snapshot: HitlPolicySnapshot | null): void {
518
+ const manager = resolveHitlRuntime()
519
+ if (!manager || !snapshot || !item.channelId) return
520
+ try {
521
+ const owner = channelRowOf(manager, item.channelId)?.ownerUserId ?? null
522
+ const active = new Set(manager.groupChat.members.listActiveByChannel(item.channelId).map(m => m.userId))
523
+ if (owner) active.add(owner)
524
+ const policy = snapshot.policy
525
+ const recipients = policy === 'any_member'
526
+ ? snapshot.eligibleUserIds.filter(u => active.has(u))
527
+ : (owner ? [owner] : [])
528
+ for (const recipientUserId of recipients) {
529
+ manager.notifyUser({
530
+ recipientUserId,
531
+ channelId: item.channelId,
532
+ type: 'hitl_request',
533
+ eventId: `hitl_request:${item.kind}:${item.id}`,
534
+ title: item.title,
535
+ body: item.detail ?? '',
536
+ hitlKind: item.kind,
537
+ hitlId: item.id,
538
+ payload: {
539
+ requestType: requestTypeOf(item),
540
+ harness: item.harness,
541
+ agentId: item.agentId,
542
+ agentName: item.agentName,
543
+ policy,
544
+ approvalPolicyVersion: snapshot.policyVersion,
545
+ questions: item.questions ?? [],
546
+ },
547
+ })
548
+ }
549
+ }
550
+ catch (err) {
551
+ log.warn('[hitl] 登记通知投递失败(不影响待办):', err instanceof Error ? err.message : err)
552
+ }
553
+ }
554
+
555
+ private emit(e: HitlEvent): void {
556
+ const channelId = (e.payload as AepHitlItem).channelId
557
+ const set = channelId ? this.listeners.get(channelId) : undefined
558
+ if (!set) return
559
+ for (const fn of set) {
560
+ try {
561
+ fn(e)
562
+ }
563
+ catch { /* 单个订阅者异常不影响扇出 */ }
564
+ }
565
+ }
566
+ }
567
+
568
+ const g = globalThis as typeof globalThis & { __hitlRegistry?: HitlRegistryService }
569
+
570
+ export function getHitlRegistry(): HitlRegistryService {
571
+ g.__hitlRegistry ??= new HitlRegistryService()
572
+ return g.__hitlRegistry
573
+ }
574
+
575
+ /** 插件接线用别名(语义直白) */
576
+ export const configureHitlResolver = (fn: (agentId: string) => { channelId: string, agentName: string } | null): void =>
577
+ getHitlRegistry().configureResolver(fn)
578
+
579
+ /** per-channel 事件订阅(ws hub 建流时挂接;hitl.request/hitl.resolved 扇出) */
580
+ export function subscribeHitlEvents(channelId: string, fn: HitlListener): () => void {
581
+ return getHitlRegistry().subscribe(channelId, fn)
582
+ }