agentworkshop 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (540) hide show
  1. package/.AgentWorkShop/prompts/host-tools.json +17 -0
  2. package/.env.example +37 -0
  3. package/.output/.AgentWorkShop/prompts/host-tools.json +17 -0
  4. package/.output/nitro.json +1 -1
  5. package/.output/public/_nuxt/{Bc_mM2cU.js → BH0Z05CS.js} +1 -1
  6. package/.output/public/_nuxt/Bxgaym6j.js +1 -0
  7. package/.output/public/_nuxt/{DRlJ2-4p.js → By-LNp3k.js} +1 -1
  8. package/.output/public/_nuxt/{C2QSTAWf.js → Bz40vyZS.js} +1 -1
  9. package/.output/public/_nuxt/{CwS_UHeH.js → CS8R0_J3.js} +1 -1
  10. package/.output/public/_nuxt/{ClptO7LA.js → CUxV8Bw_.js} +1 -1
  11. package/.output/public/_nuxt/CXmkVXS5.js +1 -0
  12. package/.output/public/_nuxt/DC-QMEk1.js +2 -0
  13. package/.output/public/_nuxt/{C-Y5ydB6.js → Dgp2wK2U.js} +6 -6
  14. package/.output/public/_nuxt/{Ck6tznoQ.js → DjqcbFBE.js} +1 -1
  15. package/.output/public/_nuxt/{B0haAGoq.js → GP2wXyuY.js} +1 -1
  16. package/.output/public/_nuxt/TownView.Bt33bo1M.css +1 -0
  17. package/.output/public/_nuxt/{MhK4buEJ.js → XVB9_zwP.js} +1 -1
  18. package/.output/public/_nuxt/_id_.BeqSLvl_.css +1 -0
  19. package/.output/public/_nuxt/builds/latest.json +1 -1
  20. package/.output/public/_nuxt/builds/meta/90ae66f6-f649-4b44-8df9-bcd9e9a957a2.json +1 -0
  21. package/.output/public/_nuxt/{Bq_KKxCg.js → i_MKObHo.js} +1 -1
  22. package/.output/public/_nuxt/settings.DeRNNUcP.css +1 -0
  23. package/.output/public/_nuxt/{CclO6GyL.js → tpDMVY5w.js} +1 -1
  24. package/.output/public/_nuxt/{C0FogB-p.js → zwdqvGN_.js} +1 -1
  25. package/.output/server/chunks/_/nitro.mjs +2672 -2350
  26. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  27. package/.output/server/chunks/build/{TownView-D9yCQe1T.mjs → TownView-BkHxMiwZ.mjs} +168 -159
  28. package/.output/server/chunks/build/{TownView-D9yCQe1T.mjs.map → TownView-BkHxMiwZ.mjs.map} +1 -1
  29. package/.output/server/chunks/build/{_id_-xR3AChMO.mjs → _id_-Bna1_JuB.mjs} +5 -4
  30. package/.output/server/chunks/build/_id_-Bna1_JuB.mjs.map +1 -0
  31. package/.output/server/chunks/build/{_id_-CmKAEFHV.mjs → _id_-GnRJPykX.mjs} +161 -119
  32. package/.output/server/chunks/build/_id_-GnRJPykX.mjs.map +1 -0
  33. package/.output/server/chunks/build/{_wsId_-C45nVrl-.mjs → _wsId_-CzLDGT_V.mjs} +6 -5
  34. package/.output/server/chunks/build/{_wsId_-C45nVrl-.mjs.map → _wsId_-CzLDGT_V.mjs.map} +1 -1
  35. package/.output/server/chunks/build/agents-D4l1icvn.mjs +1 -0
  36. package/.output/server/chunks/build/agents-D4l1icvn.mjs.map +1 -1
  37. package/.output/server/chunks/build/channel-templates-DqjtC-R0.mjs +1 -0
  38. package/.output/server/chunks/build/channel-templates-DqjtC-R0.mjs.map +1 -1
  39. package/.output/server/chunks/build/{daq-Boz_dlAQ.mjs → daq-D_W59QOe.mjs} +6 -5
  40. package/.output/server/chunks/build/daq-D_W59QOe.mjs.map +1 -0
  41. package/.output/server/chunks/build/{dcw-wTRwBAUi.mjs → dcw-BTM5YU-B.mjs} +3 -2
  42. package/.output/server/chunks/build/dcw-BTM5YU-B.mjs.map +1 -0
  43. package/.output/server/chunks/build/default-Dt6xLdpd.mjs +1 -0
  44. package/.output/server/chunks/build/{logs-Cdi-eXlN.mjs → logs-CUQt1z7D.mjs} +4 -3
  45. package/.output/server/chunks/build/logs-CUQt1z7D.mjs.map +1 -0
  46. package/.output/server/chunks/build/monitor-yNoV98rf.mjs +1 -0
  47. package/.output/server/chunks/build/{pages-bWKy0ZsA.mjs → pages-DR2bzczM.mjs} +4 -3
  48. package/.output/server/chunks/build/pages-DR2bzczM.mjs.map +1 -0
  49. package/.output/server/chunks/build/plugins-B-ZNey0Z.mjs +1 -0
  50. package/.output/server/chunks/build/plugins-B-ZNey0Z.mjs.map +1 -1
  51. package/.output/server/chunks/build/{settings-C3T5hR2A.mjs → settings-Cr06lbRy.mjs} +26 -18
  52. package/.output/server/chunks/build/settings-Cr06lbRy.mjs.map +1 -0
  53. package/.output/server/chunks/build/teams-QR3BBF7A.mjs +1 -0
  54. package/.output/server/chunks/build/teams-QR3BBF7A.mjs.map +1 -1
  55. package/.output/server/chunks/build/tokens-DFvr_TLj.mjs +1 -0
  56. package/.output/server/chunks/build/tokens-DFvr_TLj.mjs.map +1 -1
  57. package/.output/server/chunks/build/{town-CKg6Qxba.mjs → town-BN4vQPb8.mjs} +6 -5
  58. package/.output/server/chunks/build/town-BN4vQPb8.mjs.map +1 -0
  59. package/.output/server/chunks/build/town-BUqRobze.mjs +1 -0
  60. package/.output/server/chunks/build/town-BUqRobze.mjs.map +1 -1
  61. package/.output/server/chunks/build/{useDaqStream-zHEptJQ_.mjs → useDaqStream-hwkhJHFU.mjs} +2 -2
  62. package/.output/server/chunks/build/{useDaqStream-zHEptJQ_.mjs.map → useDaqStream-hwkhJHFU.mjs.map} +1 -1
  63. package/.output/server/chunks/build/{useDcwStream-BkWDGaWp.mjs → useDcwStream-Bdew_yrr.mjs} +16 -1
  64. package/.output/server/chunks/build/useDcwStream-Bdew_yrr.mjs.map +1 -0
  65. package/.output/server/chunks/build/{useDeviceTwins-NhtXqSkU.mjs → useDeviceTwins-C6EBg9oN.mjs} +2 -2
  66. package/.output/server/chunks/build/{useDeviceTwins-NhtXqSkU.mjs.map → useDeviceTwins-C6EBg9oN.mjs.map} +1 -1
  67. package/.output/server/chunks/build/{useOpsLog-CU64VDg5.mjs → useOpsLog-DdCqKVVG.mjs} +2 -2
  68. package/.output/server/chunks/build/{useOpsLog-CU64VDg5.mjs.map → useOpsLog-DdCqKVVG.mjs.map} +1 -1
  69. package/.output/server/chunks/build/users-4FZ0yFUO.mjs +1 -0
  70. package/.output/server/chunks/build/users-4FZ0yFUO.mjs.map +1 -1
  71. package/.output/server/chunks/build/workshop-CLhwe5eo.mjs +1 -0
  72. package/.output/server/chunks/build/workshop-CLhwe5eo.mjs.map +1 -1
  73. package/.output/server/chunks/routes/api/health.get.mjs +1 -0
  74. package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
  75. package/.output/server/chunks/routes/api/index.get.mjs +1 -0
  76. package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
  77. package/.output/server/chunks/routes/api/index.post.mjs +1 -0
  78. package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
  79. package/.output/server/chunks/routes/api/mcp/workshop.mjs +1 -0
  80. package/.output/server/chunks/routes/api/mcp/workshop.mjs.map +1 -1
  81. package/.output/server/chunks/routes/api/metrics.mjs +1 -0
  82. package/.output/server/chunks/routes/api/metrics.mjs.map +1 -1
  83. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +1 -0
  84. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs.map +1 -1
  85. package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs +1 -0
  86. package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs.map +1 -1
  87. package/.output/server/chunks/routes/api/plugins/manifest.get.mjs +1 -0
  88. package/.output/server/chunks/routes/api/plugins/manifest.get.mjs.map +1 -1
  89. package/.output/server/chunks/routes/api/system/config.get.mjs +1 -0
  90. package/.output/server/chunks/routes/api/system/config.get.mjs.map +1 -1
  91. package/.output/server/chunks/routes/api/system/index.get.mjs +1 -0
  92. package/.output/server/chunks/routes/api/system/index.get.mjs.map +1 -1
  93. package/.output/server/chunks/routes/api/system/index.patch.mjs +1 -0
  94. package/.output/server/chunks/routes/api/system/index.patch.mjs.map +1 -1
  95. package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs +1 -0
  96. package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs.map +1 -1
  97. package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs +1 -0
  98. package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs.map +1 -1
  99. package/.output/server/chunks/routes/api/system/monitor.get.mjs +1 -0
  100. package/.output/server/chunks/routes/api/system/monitor.get.mjs.map +1 -1
  101. package/.output/server/chunks/routes/api/system/settings/events.get.mjs +1 -0
  102. package/.output/server/chunks/routes/api/system/settings/events.get.mjs.map +1 -1
  103. package/.output/server/chunks/routes/api/system/settings/reset.post.mjs +1 -0
  104. package/.output/server/chunks/routes/api/system/settings/reset.post.mjs.map +1 -1
  105. package/.output/server/chunks/routes/api/users/_id_.delete.mjs +1 -0
  106. package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
  107. package/.output/server/chunks/routes/api/users/_id_.get.mjs +1 -0
  108. package/.output/server/chunks/routes/api/users/_id_.get.mjs.map +1 -1
  109. package/.output/server/chunks/routes/api/users/_id_.put.mjs +1 -0
  110. package/.output/server/chunks/routes/api/users/_id_.put.mjs.map +1 -1
  111. package/.output/server/chunks/routes/api/users/index.get.mjs +1 -0
  112. package/.output/server/chunks/routes/api/users/index.get.mjs.map +1 -1
  113. package/.output/server/chunks/routes/api/users/index.post.mjs +1 -0
  114. package/.output/server/chunks/routes/api/users/index.post.mjs.map +1 -1
  115. package/.output/server/chunks/routes/api/users/login.post.mjs +1 -0
  116. package/.output/server/chunks/routes/api/users/login.post.mjs.map +1 -1
  117. package/.output/server/chunks/routes/api/users/logout.post.mjs +1 -0
  118. package/.output/server/chunks/routes/api/users/logout.post.mjs.map +1 -1
  119. package/.output/server/chunks/routes/api/users/me.get.mjs +1 -0
  120. package/.output/server/chunks/routes/api/users/me.get.mjs.map +1 -1
  121. package/.output/server/chunks/routes/api/users/register.post.mjs +1 -0
  122. package/.output/server/chunks/routes/api/users/register.post.mjs.map +1 -1
  123. package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs +1 -0
  124. package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs.map +1 -1
  125. package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs +1 -0
  126. package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs.map +1 -1
  127. package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs +1 -0
  128. package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs.map +1 -1
  129. package/.output/server/chunks/routes/api/workshop/_...path_.mjs +1 -0
  130. package/.output/server/chunks/routes/api/workshop/_...path_.mjs.map +1 -1
  131. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs +1 -0
  132. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs.map +1 -1
  133. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs +1 -0
  134. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs.map +1 -1
  135. package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs +1 -0
  136. package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs.map +1 -1
  137. package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs +1 -0
  138. package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs.map +1 -1
  139. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs +1 -0
  140. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs.map +1 -1
  141. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs +1 -0
  142. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs.map +1 -1
  143. package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs +1 -0
  144. package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs.map +1 -1
  145. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +1 -0
  146. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs.map +1 -1
  147. package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs +1 -0
  148. package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs.map +1 -1
  149. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +1 -0
  150. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs.map +1 -1
  151. package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs +1 -0
  152. package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs.map +1 -1
  153. package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs +1 -0
  154. package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs.map +1 -1
  155. package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs +1 -0
  156. package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs.map +1 -1
  157. package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs +1 -0
  158. package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs.map +1 -1
  159. package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs +1 -0
  160. package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs.map +1 -1
  161. package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs +1 -0
  162. package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs.map +1 -1
  163. package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs +1 -0
  164. package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs.map +1 -1
  165. package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs +1 -0
  166. package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs.map +1 -1
  167. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +1 -0
  168. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs.map +1 -1
  169. package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs +1 -0
  170. package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs.map +1 -1
  171. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +1 -0
  172. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs.map +1 -1
  173. package/.output/server/chunks/routes/api/workshop/audit.get.mjs +1 -0
  174. package/.output/server/chunks/routes/api/workshop/audit.get.mjs.map +1 -1
  175. package/.output/server/chunks/routes/api/workshop/caller.mjs +1 -0
  176. package/.output/server/chunks/routes/api/workshop/caller.mjs.map +1 -1
  177. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +1 -0
  178. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs.map +1 -1
  179. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs +1 -0
  180. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs.map +1 -1
  181. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs +1 -0
  182. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs.map +1 -1
  183. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs +1 -0
  184. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs.map +1 -1
  185. package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs +1 -0
  186. package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs.map +1 -1
  187. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +1 -0
  188. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs.map +1 -1
  189. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs +1 -0
  190. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs.map +1 -1
  191. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs +1 -0
  192. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs.map +1 -1
  193. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs +1 -0
  194. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs.map +1 -1
  195. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs +1 -0
  196. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs.map +1 -1
  197. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs +1 -0
  198. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs.map +1 -1
  199. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs +1 -0
  200. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs.map +1 -1
  201. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs +1 -0
  202. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs.map +1 -1
  203. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs +1 -0
  204. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs.map +1 -1
  205. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs +1 -0
  206. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs.map +1 -1
  207. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs +1 -0
  208. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs.map +1 -1
  209. package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs +1 -0
  210. package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs.map +1 -1
  211. package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs +1 -0
  212. package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs.map +1 -1
  213. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +1 -0
  214. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs.map +1 -1
  215. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs +1 -0
  216. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs.map +1 -1
  217. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs +1 -0
  218. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs.map +1 -1
  219. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs +1 -0
  220. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs.map +1 -1
  221. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +1 -0
  222. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs.map +1 -1
  223. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +1 -0
  224. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs.map +1 -1
  225. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +1 -0
  226. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs.map +1 -1
  227. package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs +1 -0
  228. package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs.map +1 -1
  229. package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs +1 -0
  230. package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs.map +1 -1
  231. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +1 -0
  232. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs.map +1 -1
  233. package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs +1 -0
  234. package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs.map +1 -1
  235. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +1 -0
  236. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs.map +1 -1
  237. package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs +1 -0
  238. package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs.map +1 -1
  239. package/.output/server/chunks/routes/api/workshop/channels.get.mjs +1 -0
  240. package/.output/server/chunks/routes/api/workshop/channels.get.mjs.map +1 -1
  241. package/.output/server/chunks/routes/api/workshop/channels.post.mjs +1 -0
  242. package/.output/server/chunks/routes/api/workshop/channels.post.mjs.map +1 -1
  243. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +1 -0
  244. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs.map +1 -1
  245. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs +1 -0
  246. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs.map +1 -1
  247. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs +1 -0
  248. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs.map +1 -1
  249. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +1 -0
  250. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs.map +1 -1
  251. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +1 -0
  252. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs.map +1 -1
  253. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +1 -0
  254. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs.map +1 -1
  255. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +1 -0
  256. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs.map +1 -1
  257. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs +1 -0
  258. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs.map +1 -1
  259. package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs +1 -0
  260. package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs.map +1 -1
  261. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +1 -0
  262. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs.map +1 -1
  263. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +1 -0
  264. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs.map +1 -1
  265. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +1 -0
  266. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs.map +1 -1
  267. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +1 -0
  268. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs.map +1 -1
  269. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +1 -0
  270. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs.map +1 -1
  271. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +1 -0
  272. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs.map +1 -1
  273. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +1 -0
  274. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs.map +1 -1
  275. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +1 -0
  276. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs.map +1 -1
  277. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +1 -0
  278. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs.map +1 -1
  279. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +31 -0
  280. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs.map +1 -0
  281. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +1 -0
  282. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs.map +1 -1
  283. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +1 -0
  284. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs.map +1 -1
  285. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +1 -0
  286. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs.map +1 -1
  287. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +1 -0
  288. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs.map +1 -1
  289. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +1 -0
  290. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs.map +1 -1
  291. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +1 -0
  292. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs.map +1 -1
  293. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +1 -0
  294. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs.map +1 -1
  295. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +1 -0
  296. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs.map +1 -1
  297. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +1 -0
  298. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs.map +1 -1
  299. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +1 -0
  300. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs.map +1 -1
  301. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +1 -0
  302. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs.map +1 -1
  303. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +1 -0
  304. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs.map +1 -1
  305. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +1 -0
  306. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs.map +1 -1
  307. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +1 -0
  308. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs.map +1 -1
  309. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +1 -0
  310. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs.map +1 -1
  311. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +1 -0
  312. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs.map +1 -1
  313. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +1 -0
  314. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs.map +1 -1
  315. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +1 -0
  316. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs.map +1 -1
  317. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +1 -0
  318. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs.map +1 -1
  319. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs +1 -0
  320. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs.map +1 -1
  321. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +1 -0
  322. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs.map +1 -1
  323. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +1 -0
  324. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs.map +1 -1
  325. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +1 -0
  326. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs.map +1 -1
  327. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +1 -0
  328. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs.map +1 -1
  329. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +1 -0
  330. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs.map +1 -1
  331. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +1 -0
  332. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs.map +1 -1
  333. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +1 -0
  334. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs.map +1 -1
  335. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +1 -0
  336. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs.map +1 -1
  337. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +1 -0
  338. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs.map +1 -1
  339. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +1 -0
  340. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs.map +1 -1
  341. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.patch.mjs +1 -0
  342. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.patch.mjs.map +1 -1
  343. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +1 -0
  344. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs.map +1 -1
  345. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +1 -0
  346. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs.map +1 -1
  347. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +1 -0
  348. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs.map +1 -1
  349. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +1 -0
  350. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs.map +1 -1
  351. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +1 -0
  352. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs.map +1 -1
  353. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +1 -0
  354. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs.map +1 -1
  355. package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs +1 -0
  356. package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs.map +1 -1
  357. package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs +1 -0
  358. package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs.map +1 -1
  359. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +1 -0
  360. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs.map +1 -1
  361. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +1 -0
  362. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs.map +1 -1
  363. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs +1 -0
  364. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs.map +1 -1
  365. package/.output/server/chunks/routes/api/workshop/index.get.mjs +1 -0
  366. package/.output/server/chunks/routes/api/workshop/index.get.mjs.map +1 -1
  367. package/.output/server/chunks/routes/api/workshop/index.post.mjs +1 -0
  368. package/.output/server/chunks/routes/api/workshop/index.post.mjs.map +1 -1
  369. package/.output/server/chunks/routes/api/workshop/index10.get.mjs +1 -0
  370. package/.output/server/chunks/routes/api/workshop/index10.get.mjs.map +1 -1
  371. package/.output/server/chunks/routes/api/workshop/index2.get.mjs +1 -0
  372. package/.output/server/chunks/routes/api/workshop/index2.get.mjs.map +1 -1
  373. package/.output/server/chunks/routes/api/workshop/index2.post.mjs +1 -0
  374. package/.output/server/chunks/routes/api/workshop/index2.post.mjs.map +1 -1
  375. package/.output/server/chunks/routes/api/workshop/index3.get.mjs +1 -0
  376. package/.output/server/chunks/routes/api/workshop/index3.get.mjs.map +1 -1
  377. package/.output/server/chunks/routes/api/workshop/index3.post.mjs +1 -0
  378. package/.output/server/chunks/routes/api/workshop/index3.post.mjs.map +1 -1
  379. package/.output/server/chunks/routes/api/workshop/index4.get.mjs +1 -0
  380. package/.output/server/chunks/routes/api/workshop/index4.get.mjs.map +1 -1
  381. package/.output/server/chunks/routes/api/workshop/index4.post.mjs +1 -0
  382. package/.output/server/chunks/routes/api/workshop/index4.post.mjs.map +1 -1
  383. package/.output/server/chunks/routes/api/workshop/index5.get.mjs +1 -0
  384. package/.output/server/chunks/routes/api/workshop/index5.get.mjs.map +1 -1
  385. package/.output/server/chunks/routes/api/workshop/index5.post.mjs +1 -0
  386. package/.output/server/chunks/routes/api/workshop/index5.post.mjs.map +1 -1
  387. package/.output/server/chunks/routes/api/workshop/index6.get.mjs +1 -0
  388. package/.output/server/chunks/routes/api/workshop/index6.get.mjs.map +1 -1
  389. package/.output/server/chunks/routes/api/workshop/index6.post.mjs +1 -0
  390. package/.output/server/chunks/routes/api/workshop/index6.post.mjs.map +1 -1
  391. package/.output/server/chunks/routes/api/workshop/index7.get.mjs +1 -0
  392. package/.output/server/chunks/routes/api/workshop/index7.get.mjs.map +1 -1
  393. package/.output/server/chunks/routes/api/workshop/index7.post.mjs +1 -0
  394. package/.output/server/chunks/routes/api/workshop/index7.post.mjs.map +1 -1
  395. package/.output/server/chunks/routes/api/workshop/index8.get.mjs +1 -0
  396. package/.output/server/chunks/routes/api/workshop/index8.get.mjs.map +1 -1
  397. package/.output/server/chunks/routes/api/workshop/index8.post.mjs +1 -0
  398. package/.output/server/chunks/routes/api/workshop/index8.post.mjs.map +1 -1
  399. package/.output/server/chunks/routes/api/workshop/index9.get.mjs +1 -0
  400. package/.output/server/chunks/routes/api/workshop/index9.get.mjs.map +1 -1
  401. package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs +1 -0
  402. package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs.map +1 -1
  403. package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs +1 -0
  404. package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs.map +1 -1
  405. package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs +1 -0
  406. package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs.map +1 -1
  407. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +1 -0
  408. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs.map +1 -1
  409. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +1 -0
  410. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs.map +1 -1
  411. package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs +1 -0
  412. package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs.map +1 -1
  413. package/.output/server/chunks/routes/api/workshop/runtime.get.mjs +1 -0
  414. package/.output/server/chunks/routes/api/workshop/runtime.get.mjs.map +1 -1
  415. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +1 -0
  416. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs.map +1 -1
  417. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +1 -0
  418. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs.map +1 -1
  419. package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs +1 -0
  420. package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs.map +1 -1
  421. package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs +1 -0
  422. package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs.map +1 -1
  423. package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs +1 -0
  424. package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs.map +1 -1
  425. package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs +1 -0
  426. package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs.map +1 -1
  427. package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs +1 -0
  428. package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs.map +1 -1
  429. package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs +1 -0
  430. package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs.map +1 -1
  431. package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs +1 -0
  432. package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs.map +1 -1
  433. package/.output/server/chunks/routes/api/workshop/tasks.get.mjs +1 -0
  434. package/.output/server/chunks/routes/api/workshop/tasks.get.mjs.map +1 -1
  435. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +1 -0
  436. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs.map +1 -1
  437. package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs +1 -0
  438. package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs.map +1 -1
  439. package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs +1 -0
  440. package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs.map +1 -1
  441. package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs +1 -0
  442. package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs.map +1 -1
  443. package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs +1 -0
  444. package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs.map +1 -1
  445. package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs +1 -0
  446. package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs.map +1 -1
  447. package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs +1 -0
  448. package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs.map +1 -1
  449. package/.output/server/chunks/routes/api/workshop/users/me.get.mjs +1 -0
  450. package/.output/server/chunks/routes/api/workshop/users/me.get.mjs.map +1 -1
  451. package/.output/server/chunks/routes/api/workshop/users/register.post.mjs +1 -0
  452. package/.output/server/chunks/routes/api/workshop/users/register.post.mjs.map +1 -1
  453. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +1 -0
  454. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs.map +1 -1
  455. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs +1 -0
  456. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs.map +1 -1
  457. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs +1 -0
  458. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs.map +1 -1
  459. package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs +1 -0
  460. package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs.map +1 -1
  461. package/.output/server/chunks/routes/renderer.mjs +1 -1
  462. package/.output/server/chunks/virtual/entry.mjs +287 -85
  463. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  464. package/.output/server/index.mjs +1 -0
  465. package/.output/server/package.json +1 -1
  466. package/README-zh.md +434 -430
  467. package/README.md +5 -1
  468. package/app/components/workshop/DeviceTwinPanel.vue +34 -0
  469. package/app/components/workshop/town/TownView.vue +5 -0
  470. package/app/composables/workshop/useDcwStream.ts +15 -1
  471. package/app/config/schema.ts +54 -0
  472. package/app/pages/dcw/[id].vue +57 -0
  473. package/app/pages/settings.vue +2 -1
  474. package/config.yml +58 -1
  475. package/i18n/dicts/_en.json +56 -2
  476. package/i18n/dicts/dcwDetail.json +9 -1
  477. package/i18n/dicts/deviceTwinPanel.json +2 -1
  478. package/i18n/dicts/settings.json +48 -1
  479. package/i18n/locales/en.ts +139 -38
  480. package/i18n/locales/zh-CN.ts +139 -38
  481. package/package.json +1 -1
  482. package/scripts/_dbg-agent-dcw-rw.ts +131 -0
  483. package/scripts/_dbg-config-smoke.ts +28 -0
  484. package/scripts/_dbg-dcw-read-rest.mjs +103 -0
  485. package/scripts/_dbg-dcw-read-toolface.ts +13 -0
  486. package/scripts/_dbg-dcw-read-ui.mjs +74 -0
  487. package/scripts/_dbg-plugin-tools-inject.ts +80 -0
  488. package/scripts/_dbg-plugin-ui-wizard.mjs +125 -0
  489. package/scripts/_dbg-plugin-verify-e2e.mjs +123 -0
  490. package/scripts/test-config-precedence.ts +124 -0
  491. package/scripts/test-dcw-read.ts +153 -0
  492. package/server/api/workshop/dcw/[id]/read.post.ts +18 -0
  493. package/server/api/workshop/ws.ts +6 -4
  494. package/server/data/daqs.json +78 -8
  495. package/server/data/dcw-rollback.json +221 -1
  496. package/server/data/dcw-runs.json +123 -54
  497. package/server/data/dcw-writes.json +312 -0
  498. package/server/data/dcws.json +646 -4
  499. package/server/data/line-runs.json +12 -1
  500. package/server/plugins/backup.ts +7 -5
  501. package/server/plugins/retention.ts +59 -57
  502. package/server/plugins/workshop.ts +5 -4
  503. package/server/services/workshop/agents/industrial-tools.ts +50 -1
  504. package/server/services/workshop/agents/omp-agent.ts +10 -8
  505. package/server/services/workshop/agents/tool-approvals.ts +175 -174
  506. package/server/services/workshop/daq/alarm-notify.ts +102 -100
  507. package/server/services/workshop/daq/bus/mqtt.adapter.ts +14 -15
  508. package/server/services/workshop/daq/daq-controller.ts +3 -3
  509. package/server/services/workshop/daq/storage/sqlite.adapter.ts +5 -4
  510. package/server/services/workshop/daq/storage/timescale.adapter.ts +5 -4
  511. package/server/services/workshop/db/retention.ts +49 -50
  512. package/server/services/workshop/dcw/dcw-controller.ts +56 -1
  513. package/server/services/workshop/dcw/dcw-node.ts +233 -200
  514. package/server/services/workshop/dcw/dcw-runtime.ts +46 -9
  515. package/server/services/workshop/dcw/drivers.ts +98 -0
  516. package/server/services/workshop/dcw/recipe-rollback-manager.ts +16 -15
  517. package/server/services/workshop/logger.ts +65 -58
  518. package/server/services/workshop/runtime/embedding-provider.ts +9 -5
  519. package/server/services/workshop/runtime/manager.ts +16 -7
  520. package/server/services/workshop/runtime/memory.ts +14 -7
  521. package/server/services/workshop/settings.ts +143 -0
  522. package/shared/config/engine.mjs +6 -2
  523. package/shared/config/schema.json +48 -1
  524. package/shared/dcw-protocol.ts +21 -0
  525. package/.output/public/_nuxt/BD9D9pl4.js +0 -1
  526. package/.output/public/_nuxt/BxD8Fg_Z.js +0 -2
  527. package/.output/public/_nuxt/CwcOEM8m.js +0 -1
  528. package/.output/public/_nuxt/TownView.CI2Wpzty.css +0 -1
  529. package/.output/public/_nuxt/_id_.Ci4u30cR.css +0 -1
  530. package/.output/public/_nuxt/builds/meta/a0ac51ef-51c0-4ff9-8484-7c90d8dd10ba.json +0 -1
  531. package/.output/public/_nuxt/settings.BG0K9_MG.css +0 -1
  532. package/.output/server/chunks/build/_id_-CmKAEFHV.mjs.map +0 -1
  533. package/.output/server/chunks/build/_id_-xR3AChMO.mjs.map +0 -1
  534. package/.output/server/chunks/build/daq-Boz_dlAQ.mjs.map +0 -1
  535. package/.output/server/chunks/build/dcw-wTRwBAUi.mjs.map +0 -1
  536. package/.output/server/chunks/build/logs-Cdi-eXlN.mjs.map +0 -1
  537. package/.output/server/chunks/build/pages-bWKy0ZsA.mjs.map +0 -1
  538. package/.output/server/chunks/build/settings-C3T5hR2A.mjs.map +0 -1
  539. package/.output/server/chunks/build/town-CKg6Qxba.mjs.map +0 -1
  540. package/.output/server/chunks/build/useDcwStream-BkWDGaWp.mjs.map +0 -1
@@ -0,0 +1,153 @@
1
+ /**
2
+ * DCW 读写集成单元测试:驱动 read 原语(mock/modbus 形态判定)/工程量↔原始值对称映射/
3
+ * 节点读状态记账/运行时周期读调度/手动读取/Agent dcw_read 工具(鉴权+执行,AW_HOME 隔离)。
4
+ * 运行: AW_MODE=home AW_HOME=<tmp> npx tsx --tsconfig .nuxt/tsconfig.server.json scripts/test-dcw-read.ts
5
+ */
6
+ import { mkdtempSync, rmSync } from 'node:fs'
7
+ import { tmpdir } from 'node:os'
8
+ import { join } from 'node:path'
9
+
10
+ // 工具段需要文件型仓库:整体进程重定向到一次性配置根(避免触碰检出内 .AgentWorkShop)
11
+ const awHome = mkdtempSync(join(tmpdir(), 'aw-dcw-read-'))
12
+ process.env.AW_MODE = 'home'
13
+ process.env.AW_HOME = awHome
14
+
15
+ let failures = 0
16
+ function check(name: string, ok: boolean, detail = ''): void {
17
+ console.log(` ${ok ? 'PASS' : 'FAIL'} ${name}${detail ? ` — ${detail}` : ''}`)
18
+ if (!ok) failures += 1
19
+ }
20
+
21
+ // ===== 1. 驱动 read 原语 =====
22
+ console.log('\n--- 驱动 read 原语 ---')
23
+ {
24
+ const { mockDcwDriver, supportsDcwRead } = await import('../server/services/workshop/dcw/drivers')
25
+ const domain = { min: 0, max: 300 }
26
+ const w = await mockDcwDriver.write({ eng: 165, tolerance: 0.1, domain, driverConfig: { key: 't1' } })
27
+ check('mock 写入成功', w.ok)
28
+ const r = await mockDcwDriver.read!({ domain, driverConfig: { key: 't1' } })
29
+ check('mock 读回写值(读写闭环)', r.ok && r.eng === 165 && r.raw === 165, `eng=${r.eng}`)
30
+ const miss = await mockDcwDriver.read!({ domain, driverConfig: { key: 'never-written' } })
31
+ check('mock 未写地址读取明确失败', !miss.ok && miss.eng == null)
32
+ check('读能力判定:mock/modbus-tcp/modbus-rtu/opcua 可读,mqtt/http 不可读',
33
+ supportsDcwRead('mock') && supportsDcwRead('modbus-tcp') && supportsDcwRead('modbus-rtu') && supportsDcwRead('opcua')
34
+ && !supportsDcwRead('mqtt') && !supportsDcwRead('http'))
35
+ }
36
+
37
+ // ===== 2. 工程量↔原始值映射对称 =====
38
+ console.log('\n--- 工程量↔原始值映射 ---')
39
+ {
40
+ const { engToRaw, rawToEng } = await import('../server/services/workshop/dcw/drivers')
41
+ const input = { eng: 50, tolerance: 0, domain: { min: 0, max: 100 }, driverConfig: { rawMin: 0, rawMax: 16383, engMin: 0, engMax: 100 } }
42
+ const raw = engToRaw(50, input)
43
+ check('线性映射:eng 50 → raw 8191.5', Math.abs(raw - 8191.5) < 1e-9, String(raw))
44
+ check('映射对称:rawToEng(engToRaw(x)) = x', Math.abs(rawToEng(raw, input) - 50) < 1e-9)
45
+ const pass = { eng: 7, tolerance: 0, domain: { min: 0, max: 100 }, driverConfig: {} }
46
+ check('无原始量程:直传(float32 语义)', engToRaw(7, pass) === 7 && rawToEng(7, pass) === 7)
47
+ }
48
+
49
+ // ===== 3. 节点读状态记账 =====
50
+ console.log('\n--- 节点读状态 ---')
51
+ {
52
+ const { DcwNode } = await import('../server/services/workshop/dcw/dcw-node')
53
+ const n = new DcwNode({ id: 'dw-t1', templateRef: 'dcw-temp-sp', readIntervalMs: 2000 })
54
+ const at = new Date().toISOString()
55
+ n.applyReadResult(168.456, 168.456, true, '读回', at)
56
+ check('成功读数回填(按 decimals 取整)', n.readValue === 168.5 && n.lastReadAt === at && n.lastReadError == null, `readValue=${n.readValue}`)
57
+ n.applyReadResult(null, null, false, '链路超时', new Date().toISOString())
58
+ check('失败读保留旧值并记原因', n.readValue === 168.5 && n.lastReadError === '链路超时')
59
+ n.applyReadResult(170, 170, true, '读回', new Date().toISOString())
60
+ check('恢复成功后清空错误', n.readValue === 170 && n.lastReadError == null)
61
+ const row = n.toRow()
62
+ const n2 = DcwNode.fromRow(row)
63
+ check('持久化 roundtrip(readIntervalMs/readValue/lastRead*)', n2.readIntervalMs === 2000 && n2.readValue === 170 && n2.lastReadError == null)
64
+ const v = n2.toView()
65
+ check('视图透出读字段', v.readValue === 170 && v.readIntervalMs === 2000 && 'lastReadError' in v)
66
+ }
67
+
68
+ // ===== 4. 运行时周期读调度 =====
69
+ console.log('\n--- 运行时周期读调度 ---')
70
+ {
71
+ const { DcwNode } = await import('../server/services/workshop/dcw/dcw-node')
72
+ const rtMod = await import('../server/services/workshop/dcw/dcw-runtime')
73
+ const { DcwNodeRuntime } = rtMod
74
+ type DcwRuntimeHost = import('../server/services/workshop/dcw/dcw-runtime').DcwRuntimeHost
75
+ type DcwNodeT = import('../server/services/workshop/dcw/dcw-node').DcwNode
76
+ const reads: number[] = []
77
+ const atNow = () => new Date().toISOString()
78
+ // 记账语义与控制器一致:读成功回填节点 readValue
79
+ const makeHost = (defaults: { holdIntervalMs: number, readIntervalMs: number }): DcwRuntimeHost => ({
80
+ running: () => true,
81
+ defaults: () => defaults,
82
+ executeWrite: async () => ({ ok: true, message: '', raw: null, readback: null }),
83
+ executeRead: async (node: DcwNodeT) => {
84
+ reads.push(Date.now())
85
+ node.applyReadResult(1, 1, true, '读回', atNow())
86
+ return { ok: true, value: 1, raw: 1, message: '', at: atNow() }
87
+ },
88
+ })
89
+ const n = new DcwNode({ id: 'dw-t2', templateRef: 'dcw-temp-sp', readIntervalMs: 1000 })
90
+ const rt = new DcwNodeRuntime(n, makeHost({ holdIntervalMs: 0, readIntervalMs: 5000 }))
91
+ const t0 = 1_000_000
92
+ rt.tick(t0)
93
+ rt.tick(t0 + 500)
94
+ rt.tick(t0 + 1100)
95
+ check('周期读按 readIntervalMs 节拍触发(两次窗内各一次)', reads.length === 2, `reads=${reads.length}`)
96
+ check('写心跳不触发(value=null)', reads.length === 2)
97
+ n.readValue = 165
98
+ const manual = await rt.readNow()
99
+ check('手动读取(readNow)执行并记账', manual.ok && n.readValue === 1 && n.lastReadError == null, `readValue=${n.readValue}`)
100
+ const schedAfterManual = reads.length
101
+ const off = new DcwNode({ id: 'dw-t3', templateRef: 'dcw-temp-sp', readIntervalMs: 0 })
102
+ const rtOff = new DcwNodeRuntime(off, makeHost({ holdIntervalMs: 0, readIntervalMs: 5000 }))
103
+ rtOff.tick(t0)
104
+ rtOff.tick(t0 + 2000)
105
+ check('readIntervalMs=0 关闭周期读', reads.length === schedAfterManual)
106
+ // 在飞互斥:挂起中的读阻塞 readNow → 409
107
+ let release: (() => void) | null = null
108
+ const slowHost: DcwRuntimeHost = {
109
+ running: () => true,
110
+ defaults: () => ({ holdIntervalMs: 0, readIntervalMs: 5000 }),
111
+ executeWrite: async () => ({ ok: true, message: '', raw: null, readback: null }),
112
+ executeRead: async () => {
113
+ await new Promise<void>((r) => {
114
+ release = r
115
+ })
116
+ return { ok: true, value: 1, raw: null, message: '', at: atNow() }
117
+ },
118
+ }
119
+ const rtSlow = new DcwNodeRuntime(new DcwNode({ id: 'dw-t4', templateRef: 'dcw-temp-sp', readIntervalMs: null }), slowHost)
120
+ const inFlight = rtSlow.readNow()
121
+ let conflicted = false
122
+ await rtSlow.readNow().catch((e: unknown) => {
123
+ conflicted = (e as { status?: number }).status === 409
124
+ })
125
+ release!()
126
+ const done = await inFlight
127
+ check('读在飞互斥(并发 readNow → 409)', conflicted && done.ok)
128
+ }
129
+
130
+ // ===== 5. Agent dcw_read 工具(鉴权 + 执行;隔离配置根) =====
131
+ console.log('\n--- Agent dcw_read 工具 ---')
132
+ {
133
+ const { toolDcwRead } = await import('../server/services/workshop/agents/industrial-tools')
134
+ const denied = await toolDcwRead('agent-x', { node_id: 'dw-none' })
135
+ check('未绑定 agent 读取被拒', denied.isError === true && /未绑定|无权/.test(denied.text))
136
+ const { getDcwController } = await import('../server/services/workshop/dcw/dcw-controller')
137
+ const { getAgentNodeBindingRepo } = await import('../server/services/workshop/agents/node-bindings.repo')
138
+ const node = getDcwController().create({ templateRef: 'dcw-temp-sp', driver: 'mock', driverConfig: { key: 'agent-t' }, readIntervalMs: 0, name: '读链路测试节点' })
139
+ const repo = getAgentNodeBindingRepo()
140
+ repo.bind('agent-a', node.id, 'dcw', 'auto')
141
+ const before = await toolDcwRead('agent-a', { node_id: node.id })
142
+ check('从未下发的节点:鉴权通过并如实报告读取失败(mock 无记录)', before.isError === true && /读取失败/.test(before.text) && !/无权|未绑定/.test(before.text), before.text.slice(0, 80))
143
+ await getDcwController().write(node.id, 172.5, null, { source: 'manual', actor: 'tester' })
144
+ const after = await toolDcwRead('agent-a', { node_id: node.id })
145
+ check('写入后读取:ACT 与 SET 一致', after.isError !== true && /172\.5/.test(after.text) && /一致/.test(after.text), after.text.replace(/\n/g, ' | ').slice(0, 140))
146
+ const other = await toolDcwRead('agent-b', { node_id: node.id })
147
+ check('其他 agent 越权读取被拒', other.isError === true)
148
+ }
149
+
150
+ // 收尾
151
+ rmSync(awHome, { recursive: true, force: true })
152
+ console.log(failures === 0 ? '\nDCW-READ ALL PASS' : `\nDCW-READ FAILED(${failures})`)
153
+ process.exit(failures === 0 ? 0 : 1)
@@ -0,0 +1,18 @@
1
+ /**
2
+ * POST /api/workshop/dcw/:id/read —— 手动读取 PLC 当前值(读写集成的读半边)。
3
+ * 驱动读(寄存器解码/节点值)→ 标定 decode → 节点读状态记账 + WS dcw.read 直推。
4
+ * 读取是被动观测:不受控制暂停/产线运行门控;不支持读的驱动返回 ok:false 说明。
5
+ */
6
+ import { getRouterParam } from 'h3'
7
+ import { resolveUser } from '@/server/api/workshop/caller'
8
+ import { defineApiHandler } from '@/server/utils/response'
9
+ import { bindDcwBroadcast, getDcwController } from '@/server/services/workshop/dcw/dcw-controller'
10
+ import { broadcastSceneEvent } from '@/server/services/workshop/scene-events'
11
+
12
+ export default defineApiHandler(async (event) => {
13
+ resolveUser(event)
14
+ bindDcwBroadcast(broadcastSceneEvent)
15
+ const id = getRouterParam(event, 'id') ?? ''
16
+ const read = await getDcwController().readNow(id)
17
+ return { read }
18
+ })
@@ -26,6 +26,7 @@ import type { AepEnvelope } from '../../../shared/workshop-protocol'
26
26
  import { parseJson } from '../../services/workshop/db/database'
27
27
  import { registerScenePeer, unregisterScenePeer } from '../../services/workshop/scene-events'
28
28
  import { createLogger } from '../../services/workshop/logger'
29
+ import { retentionSettings } from '../../services/workshop/settings'
29
30
 
30
31
  const log = createLogger('workshop.ws')
31
32
 
@@ -35,8 +36,8 @@ const RING_CAP = 5000
35
36
  const RING_BYTES_CAP = 4 * 1024 * 1024
36
37
  /** 落库聚合缓冲上限(滞留超限即刷,防库故障时缓冲无限涨) */
37
38
  const DB_BUFFER_CAP = 2000
38
- /** 事件保留期(天;channel_events 周期清理,防磁盘无限涨) */
39
- const EVENTS_RETENTION_DAYS = Number(process.env.AW_EVENTS_RETENTION_D ?? 7)
39
+ /** 事件保留期(天;retention.events_days,env AW_EVENTS_RETENTION_D 可覆盖) */
40
+ const EVENTS_RETENTION_DAYS = (): number => retentionSettings().events_days
40
41
  /** 单 peer 发送预算(字节/秒):超限视为慢消费者断开(1013),客户端重连快照对齐 */
41
42
  const PEER_SEND_BUDGET_BYTES = 32 * 1024 * 1024
42
43
 
@@ -449,8 +450,9 @@ if (!(hubGlobal as Record<string, unknown>)[RETENTION_TIMER_KEY]) {
449
450
  const t = setInterval(() => {
450
451
  if (!hub.boundManager) return
451
452
  try {
452
- const removed = internalsOf(hub.boundManager).deps.repos.channelEvents.sweepRetention(EVENTS_RETENTION_DAYS)
453
- if (removed > 0) console.log(`[workshop-ws] 事件保留期清理 ${removed} 行(>${EVENTS_RETENTION_DAYS}d)`)
453
+ const days = EVENTS_RETENTION_DAYS()
454
+ const removed = internalsOf(hub.boundManager).deps.repos.channelEvents.sweepRetention(days)
455
+ if (removed > 0) console.log(`[workshop-ws] 事件保留期清理 ${removed} 行(>${days}d)`)
454
456
  }
455
457
  catch (err) {
456
458
  console.error('[workshop-ws] 事件保留期清理失败:', err)
@@ -64,9 +64,9 @@
64
64
  "posX": 1695,
65
65
  "posZ": 1135,
66
66
  "lineId": "ln-af002514",
67
- "value": 167.5,
67
+ "value": 165.8,
68
68
  "state": "ok",
69
- "lastAt": "2026-09-03T01:05:23.754Z",
69
+ "lastAt": "2026-09-03T11:35:11.135Z",
70
70
  "createdAt": "2026-08-27T12:39:08.110Z"
71
71
  },
72
72
  {
@@ -308,9 +308,9 @@
308
308
  "deviceBindingId": null,
309
309
  "driverConfig": {},
310
310
  "lineId": "ln-af002514",
311
- "value": 312,
311
+ "value": 315,
312
312
  "state": "ok",
313
- "lastAt": "2026-09-03T01:05:23.754Z",
313
+ "lastAt": "2026-09-03T11:35:11.135Z",
314
314
  "createdAt": "2026-08-28T09:37:38.518Z"
315
315
  },
316
316
  {
@@ -330,9 +330,9 @@
330
330
  "deviceBindingId": null,
331
331
  "driverConfig": {},
332
332
  "lineId": "ln-af002514",
333
- "value": 166.5,
333
+ "value": 168.2,
334
334
  "state": "ok",
335
- "lastAt": "2026-09-03T01:05:23.754Z",
335
+ "lastAt": "2026-09-03T11:35:11.135Z",
336
336
  "createdAt": "2026-08-29T03:30:57.463Z"
337
337
  },
338
338
  {
@@ -1012,9 +1012,9 @@
1012
1012
  "posX": 2395,
1013
1013
  "posZ": 1135,
1014
1014
  "lineId": "ln-af002514",
1015
- "value": 172.4,
1015
+ "value": 169.8,
1016
1016
  "state": "ok",
1017
- "lastAt": "2026-09-03T01:05:23.754Z",
1017
+ "lastAt": "2026-09-03T11:35:11.135Z",
1018
1018
  "createdAt": "2026-08-31T04:07:19.038Z"
1019
1019
  },
1020
1020
  {
@@ -3006,5 +3006,75 @@
3006
3006
  "state": "ok",
3007
3007
  "lastAt": "2026-09-02T15:29:49.039Z",
3008
3008
  "createdAt": "2026-09-02T11:55:28.275Z"
3009
+ },
3010
+ {
3011
+ "id": "dn-2b91d255",
3012
+ "templateRef": "plug-verify-x2-profile",
3013
+ "name": "全栈验证 ×2 轮廓",
3014
+ "driver": "mock",
3015
+ "enabled": true,
3016
+ "intervalMs": null,
3017
+ "publishIntervalMs": null,
3018
+ "unit": "mm",
3019
+ "decimals": 4,
3020
+ "min": 0.4,
3021
+ "max": 0.6,
3022
+ "warnLow": 0.416,
3023
+ "warnHigh": 0.584,
3024
+ "deviceBindingId": "dev-mthzr991-ujuad",
3025
+ "driverConfig": {},
3026
+ "posX": 120,
3027
+ "posZ": 120,
3028
+ "lineId": "ln-af002514",
3029
+ "value": 1.0275,
3030
+ "state": "ok",
3031
+ "lastAt": "2026-09-03T11:35:11.135Z",
3032
+ "createdAt": "2026-09-03T10:17:59.182Z"
3033
+ },
3034
+ {
3035
+ "id": "dn-77ea5d9d",
3036
+ "templateRef": "plug-verify-x2-profile",
3037
+ "name": "全栈验证 ×2 轮廓",
3038
+ "driver": "verify-burst",
3039
+ "enabled": true,
3040
+ "intervalMs": null,
3041
+ "publishIntervalMs": null,
3042
+ "unit": "mm",
3043
+ "decimals": 4,
3044
+ "min": 0.4,
3045
+ "max": 0.6,
3046
+ "warnLow": 0.416,
3047
+ "warnHigh": 0.584,
3048
+ "deviceBindingId": "dev-mthzr991-ujuad",
3049
+ "driverConfig": {},
3050
+ "posX": 120,
3051
+ "posZ": 120,
3052
+ "lineId": "ln-af002514",
3053
+ "value": 0.9769,
3054
+ "state": "ok",
3055
+ "lastAt": "2026-09-03T11:35:11.135Z",
3056
+ "createdAt": "2026-09-03T11:18:01.401Z"
3057
+ },
3058
+ {
3059
+ "id": "dn-6e3a9306",
3060
+ "templateRef": "daq-plug-verify-x2-profile",
3061
+ "name": "UI向导插件验证",
3062
+ "driver": "mock",
3063
+ "enabled": true,
3064
+ "intervalMs": null,
3065
+ "publishIntervalMs": null,
3066
+ "unit": "mm",
3067
+ "decimals": 4,
3068
+ "min": 0.4,
3069
+ "max": 0.6,
3070
+ "warnLow": 0.416,
3071
+ "warnHigh": 0.584,
3072
+ "deviceBindingId": "dev-mthzr991-ujuad",
3073
+ "driverConfig": {},
3074
+ "lineId": "ln-af002514",
3075
+ "value": 1.0251,
3076
+ "state": "ok",
3077
+ "lastAt": "2026-09-03T11:35:10.871Z",
3078
+ "createdAt": "2026-09-03T11:34:59.332Z"
3009
3079
  }
3010
3080
  ]
@@ -3128,6 +3128,226 @@
3128
3128
  "id": "anc-cf431b05",
3129
3129
  "at": "2026-09-02T13:05:36.877Z",
3130
3130
  "recordId": "opt-b930283b"
3131
+ },
3132
+ {
3133
+ "lineId": "",
3134
+ "nodeId": "dw-6df62f07",
3135
+ "prevValue": null,
3136
+ "newValue": 165.5,
3137
+ "source": "manual",
3138
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3139
+ "recipeRunId": null,
3140
+ "id": "anc-6b5c70d1",
3141
+ "at": "2026-09-03T12:07:07.574Z"
3142
+ },
3143
+ {
3144
+ "lineId": "",
3145
+ "nodeId": "dw-6df62f07",
3146
+ "prevValue": 165.5,
3147
+ "newValue": 180,
3148
+ "source": "manual",
3149
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3150
+ "recipeRunId": null,
3151
+ "id": "anc-73e44854",
3152
+ "at": "2026-09-03T12:07:07.741Z"
3153
+ },
3154
+ {
3155
+ "lineId": "",
3156
+ "nodeId": "dw-82ebb64a",
3157
+ "prevValue": null,
3158
+ "newValue": 165.5,
3159
+ "source": "manual",
3160
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3161
+ "recipeRunId": null,
3162
+ "id": "anc-76009f69",
3163
+ "at": "2026-09-03T12:08:19.829Z"
3164
+ },
3165
+ {
3166
+ "lineId": "",
3167
+ "nodeId": "dw-82ebb64a",
3168
+ "prevValue": 165.5,
3169
+ "newValue": 180,
3170
+ "source": "manual",
3171
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3172
+ "recipeRunId": null,
3173
+ "id": "anc-d0e6bebd",
3174
+ "at": "2026-09-03T12:08:19.938Z"
3175
+ },
3176
+ {
3177
+ "lineId": "",
3178
+ "nodeId": "dw-f6aeca63",
3179
+ "prevValue": null,
3180
+ "newValue": 100,
3181
+ "source": "manual",
3182
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3183
+ "recipeRunId": null,
3184
+ "id": "anc-5f6989b0",
3185
+ "at": "2026-09-03T12:08:20.140Z"
3186
+ },
3187
+ {
3188
+ "lineId": "",
3189
+ "nodeId": "dw-787402f0",
3190
+ "prevValue": null,
3191
+ "newValue": 155,
3192
+ "source": "manual",
3193
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3194
+ "recipeRunId": null,
3195
+ "id": "anc-2e00ea3c",
3196
+ "at": "2026-09-03T12:08:20.310Z"
3197
+ },
3198
+ {
3199
+ "lineId": "",
3200
+ "nodeId": "dw-fe8cdcbb",
3201
+ "prevValue": null,
3202
+ "newValue": 3.1416,
3203
+ "source": "manual",
3204
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3205
+ "recipeRunId": null,
3206
+ "id": "anc-6486b0bc",
3207
+ "at": "2026-09-03T12:08:23.109Z"
3208
+ },
3209
+ {
3210
+ "lineId": "",
3211
+ "nodeId": "dw-fe8cdcbb",
3212
+ "prevValue": 3.1,
3213
+ "newValue": 2.71828,
3214
+ "source": "manual",
3215
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3216
+ "recipeRunId": null,
3217
+ "id": "anc-7740538b",
3218
+ "at": "2026-09-03T12:08:23.187Z"
3219
+ },
3220
+ {
3221
+ "lineId": "",
3222
+ "nodeId": "dw-47b4957b",
3223
+ "prevValue": null,
3224
+ "newValue": 165.5,
3225
+ "source": "manual",
3226
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3227
+ "recipeRunId": null,
3228
+ "id": "anc-9a3435d8",
3229
+ "at": "2026-09-03T12:09:40.660Z"
3230
+ },
3231
+ {
3232
+ "lineId": "",
3233
+ "nodeId": "dw-47b4957b",
3234
+ "prevValue": 165.5,
3235
+ "newValue": 180,
3236
+ "source": "manual",
3237
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3238
+ "recipeRunId": null,
3239
+ "id": "anc-ee35f163",
3240
+ "at": "2026-09-03T12:09:40.769Z"
3241
+ },
3242
+ {
3243
+ "lineId": "",
3244
+ "nodeId": "dw-828f683b",
3245
+ "prevValue": null,
3246
+ "newValue": 100,
3247
+ "source": "manual",
3248
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3249
+ "recipeRunId": null,
3250
+ "id": "anc-bdbcc26c",
3251
+ "at": "2026-09-03T12:09:40.925Z"
3252
+ },
3253
+ {
3254
+ "lineId": "",
3255
+ "nodeId": "dw-e9b4575e",
3256
+ "prevValue": null,
3257
+ "newValue": 155,
3258
+ "source": "manual",
3259
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3260
+ "recipeRunId": null,
3261
+ "id": "anc-477efae1",
3262
+ "at": "2026-09-03T12:09:41.049Z"
3263
+ },
3264
+ {
3265
+ "lineId": "",
3266
+ "nodeId": "dw-167e357a",
3267
+ "prevValue": null,
3268
+ "newValue": 3.1416,
3269
+ "source": "manual",
3270
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3271
+ "recipeRunId": null,
3272
+ "id": "anc-955dbbf6",
3273
+ "at": "2026-09-03T12:09:43.846Z"
3274
+ },
3275
+ {
3276
+ "lineId": "",
3277
+ "nodeId": "dw-167e357a",
3278
+ "prevValue": 3.1,
3279
+ "newValue": 2.71828,
3280
+ "source": "manual",
3281
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3282
+ "recipeRunId": null,
3283
+ "id": "anc-d9cc48ff",
3284
+ "at": "2026-09-03T12:09:43.908Z"
3285
+ },
3286
+ {
3287
+ "lineId": "",
3288
+ "nodeId": "dw-a970a489",
3289
+ "prevValue": null,
3290
+ "newValue": 165.5,
3291
+ "source": "manual",
3292
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3293
+ "recipeRunId": null,
3294
+ "id": "anc-ab0b08e6",
3295
+ "at": "2026-09-03T13:34:21.879Z"
3296
+ },
3297
+ {
3298
+ "lineId": "",
3299
+ "nodeId": "dw-a970a489",
3300
+ "prevValue": 165.5,
3301
+ "newValue": 180,
3302
+ "source": "manual",
3303
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3304
+ "recipeRunId": null,
3305
+ "id": "anc-cafcbb0a",
3306
+ "at": "2026-09-03T13:34:22.017Z"
3307
+ },
3308
+ {
3309
+ "lineId": "",
3310
+ "nodeId": "dw-365a3630",
3311
+ "prevValue": null,
3312
+ "newValue": 100,
3313
+ "source": "manual",
3314
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3315
+ "recipeRunId": null,
3316
+ "id": "anc-626b5b33",
3317
+ "at": "2026-09-03T13:34:22.200Z"
3318
+ },
3319
+ {
3320
+ "lineId": "",
3321
+ "nodeId": "dw-2259a4eb",
3322
+ "prevValue": null,
3323
+ "newValue": 155,
3324
+ "source": "manual",
3325
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3326
+ "recipeRunId": null,
3327
+ "id": "anc-62934ab1",
3328
+ "at": "2026-09-03T13:34:22.344Z"
3329
+ },
3330
+ {
3331
+ "lineId": "",
3332
+ "nodeId": "dw-7eec4a83",
3333
+ "prevValue": null,
3334
+ "newValue": 3.1416,
3335
+ "source": "manual",
3336
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3337
+ "recipeRunId": null,
3338
+ "id": "anc-12d60ab2",
3339
+ "at": "2026-09-03T13:34:25.133Z"
3340
+ },
3341
+ {
3342
+ "lineId": "",
3343
+ "nodeId": "dw-7eec4a83",
3344
+ "prevValue": 3.1,
3345
+ "newValue": 2.71828,
3346
+ "source": "manual",
3347
+ "actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
3348
+ "recipeRunId": null,
3349
+ "id": "anc-5ac6a74f",
3350
+ "at": "2026-09-03T13:34:25.211Z"
3131
3351
  }
3132
3352
  ],
3133
3353
  "records": [
@@ -3519,7 +3739,7 @@
3519
3739
  "channels": [],
3520
3740
  "degraded": true
3521
3741
  },
3522
- "evaluatedAt": "2026-09-03T01:17:44.206Z",
3742
+ "evaluatedAt": "2026-09-03T13:40:24.088Z",
3523
3743
  "windowAgg": {
3524
3744
  "at": "2026-08-31T16:25:17.398Z",
3525
3745
  "fromMs": 1788193396897,