agentworkshop 0.5.8 → 0.6.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 (571) hide show
  1. package/.AgentWorkShop/prompts/compaction-hints.md +9 -9
  2. package/.AgentWorkShop/prompts/host-tools.json +42 -0
  3. package/.output/.AgentWorkShop/prompts/compaction-hints.md +9 -9
  4. package/.output/.AgentWorkShop/prompts/host-tools.json +42 -0
  5. package/.output/nitro.json +1 -1
  6. package/.output/public/_nuxt/{Dm5mD6XT.js → BD9D9pl4.js} +1 -1
  7. package/.output/public/_nuxt/{BdKzfJiM.js → BxD8Fg_Z.js} +1 -1
  8. package/.output/public/_nuxt/{dRAyjbJ6.js → C-Y5ydB6.js} +3 -3
  9. package/.output/public/_nuxt/{Bok1DRqh.js → C0FogB-p.js} +1 -1
  10. package/.output/public/_nuxt/{BUNGEK2z.js → C2QSTAWf.js} +1 -1
  11. package/.output/public/_nuxt/{CWDzKGtj.js → CclO6GyL.js} +1 -1
  12. package/.output/public/_nuxt/{B3__nfxM.js → Ck6tznoQ.js} +1 -1
  13. package/.output/public/_nuxt/CwS_UHeH.js +1 -0
  14. package/.output/public/_nuxt/{CE2ynNi9.js → CwcOEM8m.js} +1 -1
  15. package/.output/public/_nuxt/MhK4buEJ.js +1 -0
  16. package/.output/public/_nuxt/_id_.DN3U6EF9.css +1 -0
  17. package/.output/public/_nuxt/builds/latest.json +1 -1
  18. package/.output/public/_nuxt/builds/meta/a0ac51ef-51c0-4ff9-8484-7c90d8dd10ba.json +1 -0
  19. package/.output/public/_nuxt/{entry.DjhxLu-f.css → entry.DvlXlPwx.css} +1 -1
  20. package/.output/public/_nuxt/settings.BG0K9_MG.css +1 -0
  21. package/.output/server/chunks/_/error-500.mjs.map +1 -1
  22. package/.output/server/chunks/_/nitro.mjs +2634 -1387
  23. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  24. package/.output/server/chunks/build/{OmpTerminalPanel-CZnxR3M_.mjs → OmpTerminalPanel-B_SYhmgb.mjs} +2 -2
  25. package/.output/server/chunks/build/{OmpTerminalPanel-CZnxR3M_.mjs.map → OmpTerminalPanel-B_SYhmgb.mjs.map} +1 -1
  26. package/.output/server/chunks/build/{TownView-DYlUNRZe.mjs → TownView-D9yCQe1T.mjs} +6 -6
  27. package/.output/server/chunks/build/{TownView-DYlUNRZe.mjs.map → TownView-D9yCQe1T.mjs.map} +1 -1
  28. package/.output/server/chunks/build/{_id_-BOhG2yz8.mjs → _id_-CmKAEFHV.mjs} +4 -2
  29. package/.output/server/chunks/build/_id_-CmKAEFHV.mjs.map +1 -0
  30. package/.output/server/chunks/build/{_id_-CuyMYmhY.mjs → _id_-xR3AChMO.mjs} +74 -26
  31. package/.output/server/chunks/build/_id_-xR3AChMO.mjs.map +1 -0
  32. package/.output/server/chunks/build/{_wsId_-B5f5BdW2.mjs → _wsId_-C45nVrl-.mjs} +12 -10
  33. package/.output/server/chunks/build/{_wsId_-B5f5BdW2.mjs.map → _wsId_-C45nVrl-.mjs.map} +1 -1
  34. package/.output/server/chunks/build/{agents-BVaxN75W.mjs → agents-D4l1icvn.mjs} +5 -3
  35. package/.output/server/chunks/build/agents-D4l1icvn.mjs.map +1 -0
  36. package/.output/server/chunks/build/{channel-templates-D1K2IKrE.mjs → channel-templates-DqjtC-R0.mjs} +5 -3
  37. package/.output/server/chunks/build/channel-templates-DqjtC-R0.mjs.map +1 -0
  38. package/.output/server/chunks/build/{client-only-CFTHwakk.mjs → client-only-D5BzSQc6.mjs} +2 -2
  39. package/.output/server/chunks/build/client-only-D5BzSQc6.mjs.map +1 -0
  40. package/.output/server/chunks/build/{daq-ObtN1TQ4.mjs → daq-Boz_dlAQ.mjs} +6 -4
  41. package/.output/server/chunks/build/daq-Boz_dlAQ.mjs.map +1 -0
  42. package/.output/server/chunks/build/{dcw-fINr-He1.mjs → dcw-wTRwBAUi.mjs} +3 -1
  43. package/.output/server/chunks/build/dcw-wTRwBAUi.mjs.map +1 -0
  44. package/.output/server/chunks/build/{default-CVVO40Jj.mjs → default-Dt6xLdpd.mjs} +7 -5
  45. package/.output/server/chunks/build/{default-CVVO40Jj.mjs.map → default-Dt6xLdpd.mjs.map} +1 -1
  46. package/.output/server/chunks/build/interval-WlxgjTzO.mjs +9 -0
  47. package/.output/server/chunks/build/interval-WlxgjTzO.mjs.map +1 -0
  48. package/.output/server/chunks/build/{logs-DqNgCJAn.mjs → logs-Cdi-eXlN.mjs} +5 -3
  49. package/.output/server/chunks/build/logs-Cdi-eXlN.mjs.map +1 -0
  50. package/.output/server/chunks/build/{monitor-CTZLwbdw.mjs → monitor-yNoV98rf.mjs} +6 -4
  51. package/.output/server/chunks/build/{monitor-CTZLwbdw.mjs.map → monitor-yNoV98rf.mjs.map} +1 -1
  52. package/.output/server/chunks/build/{pages-DC52d7z7.mjs → pages-bWKy0ZsA.mjs} +6 -4
  53. package/.output/server/chunks/build/pages-bWKy0ZsA.mjs.map +1 -0
  54. package/.output/server/chunks/build/{plugins-DVQty7qG.mjs → plugins-B-ZNey0Z.mjs} +4 -2
  55. package/.output/server/chunks/build/plugins-B-ZNey0Z.mjs.map +1 -0
  56. package/.output/server/chunks/build/{settings-BeergncK.mjs → settings-C3T5hR2A.mjs} +21 -19
  57. package/.output/server/chunks/build/settings-C3T5hR2A.mjs.map +1 -0
  58. package/.output/server/chunks/build/{teams-CFeDlHDh.mjs → teams-QR3BBF7A.mjs} +5 -3
  59. package/.output/server/chunks/build/teams-QR3BBF7A.mjs.map +1 -0
  60. package/.output/server/chunks/build/{tokens-CBAUbOce.mjs → tokens-DFvr_TLj.mjs} +4 -2
  61. package/.output/server/chunks/build/tokens-DFvr_TLj.mjs.map +1 -0
  62. package/.output/server/chunks/build/town-BUqRobze.mjs +2 -0
  63. package/.output/server/chunks/build/town-BUqRobze.mjs.map +1 -1
  64. package/.output/server/chunks/build/{town-BxH-XXth.mjs → town-CKg6Qxba.mjs} +9 -7
  65. package/.output/server/chunks/build/town-CKg6Qxba.mjs.map +1 -0
  66. package/.output/server/chunks/build/{useDaqStream-CwORhsD7.mjs → useDaqStream-zHEptJQ_.mjs} +44 -1
  67. package/.output/server/chunks/build/useDaqStream-zHEptJQ_.mjs.map +1 -0
  68. package/.output/server/chunks/build/{useSiteConfig-Cc-ABesl.mjs → useSiteConfig-DJe_KMVr.mjs} +1 -1
  69. package/.output/server/chunks/build/{useSiteConfig-Cc-ABesl.mjs.map → useSiteConfig-DJe_KMVr.mjs.map} +1 -1
  70. package/.output/server/chunks/build/{useWorkshopApi-5er8_EHZ.mjs → useWorkshopApi-Bh5VUHWu.mjs} +1 -1
  71. package/.output/server/chunks/build/{useWorkshopApi-5er8_EHZ.mjs.map → useWorkshopApi-Bh5VUHWu.mjs.map} +1 -1
  72. package/.output/server/chunks/build/{useWorkshopWs-Dwr_1Q8f.mjs → useWorkshopWs-xcdeiSmJ.mjs} +2 -2
  73. package/.output/server/chunks/build/{useWorkshopWs-Dwr_1Q8f.mjs.map → useWorkshopWs-xcdeiSmJ.mjs.map} +1 -1
  74. package/.output/server/chunks/build/{user-CpVY4OAA.mjs → user-Dk-ytEUV.mjs} +1 -1
  75. package/.output/server/chunks/build/{user-CpVY4OAA.mjs.map → user-Dk-ytEUV.mjs.map} +1 -1
  76. package/.output/server/chunks/build/{users-BMs4s_6K.mjs → users-4FZ0yFUO.mjs} +4 -2
  77. package/.output/server/chunks/build/users-4FZ0yFUO.mjs.map +1 -0
  78. package/.output/server/chunks/build/{workshop-CJAyZ5zS.mjs → workshop-CLhwe5eo.mjs} +6 -4
  79. package/.output/server/chunks/build/workshop-CLhwe5eo.mjs.map +1 -0
  80. package/.output/server/chunks/build/{workspaces-Dq-1zvu9.mjs → workspaces-IfORCDJE.mjs} +2 -2
  81. package/.output/server/chunks/build/{workspaces-Dq-1zvu9.mjs.map → workspaces-IfORCDJE.mjs.map} +1 -1
  82. package/.output/server/chunks/routes/api/health.get.mjs +2 -0
  83. package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
  84. package/.output/server/chunks/routes/api/index.get.mjs +2 -0
  85. package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
  86. package/.output/server/chunks/routes/api/index.post.mjs +2 -0
  87. package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
  88. package/.output/server/chunks/routes/api/mcp/workshop.mjs +2 -0
  89. package/.output/server/chunks/routes/api/mcp/workshop.mjs.map +1 -1
  90. package/.output/server/chunks/routes/api/metrics.mjs +2 -0
  91. package/.output/server/chunks/routes/api/metrics.mjs.map +1 -1
  92. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +2 -0
  93. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs.map +1 -1
  94. package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs +2 -0
  95. package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs.map +1 -1
  96. package/.output/server/chunks/routes/api/plugins/manifest.get.mjs +2 -0
  97. package/.output/server/chunks/routes/api/plugins/manifest.get.mjs.map +1 -1
  98. package/.output/server/chunks/routes/api/system/config.get.mjs +2 -0
  99. package/.output/server/chunks/routes/api/system/config.get.mjs.map +1 -1
  100. package/.output/server/chunks/routes/api/system/index.get.mjs +2 -0
  101. package/.output/server/chunks/routes/api/system/index.get.mjs.map +1 -1
  102. package/.output/server/chunks/routes/api/system/index.patch.mjs +2 -0
  103. package/.output/server/chunks/routes/api/system/index.patch.mjs.map +1 -1
  104. package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs +2 -0
  105. package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs.map +1 -1
  106. package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs +2 -0
  107. package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs.map +1 -1
  108. package/.output/server/chunks/routes/api/system/monitor.get.mjs +2 -0
  109. package/.output/server/chunks/routes/api/system/monitor.get.mjs.map +1 -1
  110. package/.output/server/chunks/routes/api/system/settings/events.get.mjs +3 -2
  111. package/.output/server/chunks/routes/api/system/settings/events.get.mjs.map +1 -1
  112. package/.output/server/chunks/routes/api/system/settings/reset.post.mjs +2 -0
  113. package/.output/server/chunks/routes/api/system/settings/reset.post.mjs.map +1 -1
  114. package/.output/server/chunks/routes/api/users/_id_.delete.mjs +2 -0
  115. package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
  116. package/.output/server/chunks/routes/api/users/_id_.get.mjs +2 -0
  117. package/.output/server/chunks/routes/api/users/_id_.get.mjs.map +1 -1
  118. package/.output/server/chunks/routes/api/users/_id_.put.mjs +2 -0
  119. package/.output/server/chunks/routes/api/users/_id_.put.mjs.map +1 -1
  120. package/.output/server/chunks/routes/api/users/index.get.mjs +2 -0
  121. package/.output/server/chunks/routes/api/users/index.get.mjs.map +1 -1
  122. package/.output/server/chunks/routes/api/users/index.post.mjs +2 -0
  123. package/.output/server/chunks/routes/api/users/index.post.mjs.map +1 -1
  124. package/.output/server/chunks/routes/api/users/login.post.mjs +2 -0
  125. package/.output/server/chunks/routes/api/users/login.post.mjs.map +1 -1
  126. package/.output/server/chunks/routes/api/users/logout.post.mjs +2 -0
  127. package/.output/server/chunks/routes/api/users/logout.post.mjs.map +1 -1
  128. package/.output/server/chunks/routes/api/users/me.get.mjs +2 -0
  129. package/.output/server/chunks/routes/api/users/me.get.mjs.map +1 -1
  130. package/.output/server/chunks/routes/api/users/register.post.mjs +2 -0
  131. package/.output/server/chunks/routes/api/users/register.post.mjs.map +1 -1
  132. package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs +2 -0
  133. package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs.map +1 -1
  134. package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs +2 -0
  135. package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs.map +1 -1
  136. package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs +2 -0
  137. package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs.map +1 -1
  138. package/.output/server/chunks/routes/api/workshop/_...path_.mjs +2 -0
  139. package/.output/server/chunks/routes/api/workshop/_...path_.mjs.map +1 -1
  140. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs +2 -0
  141. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs.map +1 -1
  142. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs +2 -0
  143. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs.map +1 -1
  144. package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs +2 -0
  145. package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs.map +1 -1
  146. package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs +2 -0
  147. package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs.map +1 -1
  148. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs +2 -0
  149. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs.map +1 -1
  150. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs +2 -0
  151. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs.map +1 -1
  152. package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs +2 -0
  153. package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs.map +1 -1
  154. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +2 -0
  155. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs.map +1 -1
  156. package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs +2 -0
  157. package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs.map +1 -1
  158. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +2 -0
  159. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs.map +1 -1
  160. package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs +2 -0
  161. package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs.map +1 -1
  162. package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs +2 -0
  163. package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs.map +1 -1
  164. package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs +2 -0
  165. package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs.map +1 -1
  166. package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs +2 -0
  167. package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs.map +1 -1
  168. package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs +2 -0
  169. package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs.map +1 -1
  170. package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs +2 -0
  171. package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs.map +1 -1
  172. package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs +2 -0
  173. package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs.map +1 -1
  174. package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs +2 -0
  175. package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs.map +1 -1
  176. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +2 -0
  177. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs.map +1 -1
  178. package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs +2 -0
  179. package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs.map +1 -1
  180. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +2 -0
  181. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs.map +1 -1
  182. package/.output/server/chunks/routes/api/workshop/audit.get.mjs +2 -0
  183. package/.output/server/chunks/routes/api/workshop/audit.get.mjs.map +1 -1
  184. package/.output/server/chunks/routes/api/workshop/caller.mjs +2 -0
  185. package/.output/server/chunks/routes/api/workshop/caller.mjs.map +1 -1
  186. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +2 -0
  187. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs.map +1 -1
  188. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs +2 -0
  189. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs.map +1 -1
  190. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs +2 -0
  191. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs.map +1 -1
  192. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs +2 -0
  193. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs.map +1 -1
  194. package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs +2 -0
  195. package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs.map +1 -1
  196. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +2 -0
  197. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs.map +1 -1
  198. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs +2 -0
  199. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs.map +1 -1
  200. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs +2 -0
  201. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs.map +1 -1
  202. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs +2 -0
  203. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs.map +1 -1
  204. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs +2 -0
  205. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs.map +1 -1
  206. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs +2 -0
  207. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs.map +1 -1
  208. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs +2 -0
  209. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs.map +1 -1
  210. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs +2 -0
  211. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs.map +1 -1
  212. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs +2 -0
  213. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs.map +1 -1
  214. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs +2 -0
  215. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs.map +1 -1
  216. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs +2 -0
  217. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs.map +1 -1
  218. package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs +2 -0
  219. package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs.map +1 -1
  220. package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs +2 -0
  221. package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs.map +1 -1
  222. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +2 -0
  223. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs.map +1 -1
  224. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs +2 -0
  225. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs.map +1 -1
  226. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs +2 -0
  227. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs.map +1 -1
  228. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs +2 -0
  229. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs.map +1 -1
  230. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +2 -0
  231. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs.map +1 -1
  232. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +2 -0
  233. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs.map +1 -1
  234. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +2 -0
  235. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs.map +1 -1
  236. package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs +2 -0
  237. package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs.map +1 -1
  238. package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs +2 -0
  239. package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs.map +1 -1
  240. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +2 -0
  241. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs.map +1 -1
  242. package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs +2 -0
  243. package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs.map +1 -1
  244. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +2 -0
  245. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs.map +1 -1
  246. package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs +2 -0
  247. package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs.map +1 -1
  248. package/.output/server/chunks/routes/api/workshop/channels.get.mjs +2 -0
  249. package/.output/server/chunks/routes/api/workshop/channels.get.mjs.map +1 -1
  250. package/.output/server/chunks/routes/api/workshop/channels.post.mjs +2 -0
  251. package/.output/server/chunks/routes/api/workshop/channels.post.mjs.map +1 -1
  252. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +2 -0
  253. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs.map +1 -1
  254. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs +36 -0
  255. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs.map +1 -0
  256. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs +53 -0
  257. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs.map +1 -0
  258. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +2 -0
  259. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs.map +1 -1
  260. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +2 -0
  261. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs.map +1 -1
  262. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +2 -0
  263. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs.map +1 -1
  264. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +2 -0
  265. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs.map +1 -1
  266. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs +2 -0
  267. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs.map +1 -1
  268. package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs +2 -0
  269. package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs.map +1 -1
  270. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +2 -0
  271. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs.map +1 -1
  272. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +2 -0
  273. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs.map +1 -1
  274. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +2 -0
  275. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs.map +1 -1
  276. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +2 -0
  277. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs.map +1 -1
  278. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +2 -0
  279. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs.map +1 -1
  280. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +2 -0
  281. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs.map +1 -1
  282. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +2 -0
  283. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs.map +1 -1
  284. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +2 -0
  285. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs.map +1 -1
  286. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +2 -0
  287. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs.map +1 -1
  288. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +2 -0
  289. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs.map +1 -1
  290. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +2 -0
  291. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs.map +1 -1
  292. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +2 -0
  293. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs.map +1 -1
  294. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +2 -0
  295. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs.map +1 -1
  296. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +2 -0
  297. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs.map +1 -1
  298. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +2 -0
  299. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs.map +1 -1
  300. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +2 -0
  301. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs.map +1 -1
  302. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +2 -0
  303. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs.map +1 -1
  304. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +2 -0
  305. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs.map +1 -1
  306. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +2 -0
  307. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs.map +1 -1
  308. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +2 -0
  309. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs.map +1 -1
  310. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +2 -0
  311. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs.map +1 -1
  312. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +2 -0
  313. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs.map +1 -1
  314. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +2 -0
  315. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs.map +1 -1
  316. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +2 -0
  317. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs.map +1 -1
  318. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +2 -0
  319. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs.map +1 -1
  320. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +2 -0
  321. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs.map +1 -1
  322. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +2 -0
  323. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs.map +1 -1
  324. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +2 -0
  325. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs.map +1 -1
  326. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs +2 -0
  327. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs.map +1 -1
  328. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +2 -0
  329. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs.map +1 -1
  330. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +2 -0
  331. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs.map +1 -1
  332. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +2 -0
  333. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs.map +1 -1
  334. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +2 -0
  335. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs.map +1 -1
  336. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +2 -0
  337. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs.map +1 -1
  338. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +2 -0
  339. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs.map +1 -1
  340. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +2 -0
  341. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs.map +1 -1
  342. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +2 -0
  343. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs.map +1 -1
  344. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +2 -0
  345. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs.map +1 -1
  346. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +2 -0
  347. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs.map +1 -1
  348. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.patch.mjs +2 -0
  349. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.patch.mjs.map +1 -1
  350. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +2 -0
  351. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs.map +1 -1
  352. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +2 -0
  353. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs.map +1 -1
  354. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +2 -0
  355. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs.map +1 -1
  356. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +2 -0
  357. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs.map +1 -1
  358. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +2 -0
  359. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs.map +1 -1
  360. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +2 -0
  361. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs.map +1 -1
  362. package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs +2 -0
  363. package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs.map +1 -1
  364. package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs +2 -0
  365. package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs.map +1 -1
  366. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +2 -0
  367. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs.map +1 -1
  368. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +2 -0
  369. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs.map +1 -1
  370. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs +2 -0
  371. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs.map +1 -1
  372. package/.output/server/chunks/routes/api/workshop/index.get.mjs +2 -0
  373. package/.output/server/chunks/routes/api/workshop/index.get.mjs.map +1 -1
  374. package/.output/server/chunks/routes/api/workshop/index.post.mjs +2 -0
  375. package/.output/server/chunks/routes/api/workshop/index.post.mjs.map +1 -1
  376. package/.output/server/chunks/routes/api/workshop/index10.get.mjs +2 -0
  377. package/.output/server/chunks/routes/api/workshop/index10.get.mjs.map +1 -1
  378. package/.output/server/chunks/routes/api/workshop/index2.get.mjs +2 -0
  379. package/.output/server/chunks/routes/api/workshop/index2.get.mjs.map +1 -1
  380. package/.output/server/chunks/routes/api/workshop/index2.post.mjs +2 -0
  381. package/.output/server/chunks/routes/api/workshop/index2.post.mjs.map +1 -1
  382. package/.output/server/chunks/routes/api/workshop/index3.get.mjs +2 -0
  383. package/.output/server/chunks/routes/api/workshop/index3.get.mjs.map +1 -1
  384. package/.output/server/chunks/routes/api/workshop/index3.post.mjs +2 -0
  385. package/.output/server/chunks/routes/api/workshop/index3.post.mjs.map +1 -1
  386. package/.output/server/chunks/routes/api/workshop/index4.get.mjs +2 -0
  387. package/.output/server/chunks/routes/api/workshop/index4.get.mjs.map +1 -1
  388. package/.output/server/chunks/routes/api/workshop/index4.post.mjs +2 -0
  389. package/.output/server/chunks/routes/api/workshop/index4.post.mjs.map +1 -1
  390. package/.output/server/chunks/routes/api/workshop/index5.get.mjs +2 -0
  391. package/.output/server/chunks/routes/api/workshop/index5.get.mjs.map +1 -1
  392. package/.output/server/chunks/routes/api/workshop/index5.post.mjs +2 -0
  393. package/.output/server/chunks/routes/api/workshop/index5.post.mjs.map +1 -1
  394. package/.output/server/chunks/routes/api/workshop/index6.get.mjs +2 -0
  395. package/.output/server/chunks/routes/api/workshop/index6.get.mjs.map +1 -1
  396. package/.output/server/chunks/routes/api/workshop/index6.post.mjs +2 -0
  397. package/.output/server/chunks/routes/api/workshop/index6.post.mjs.map +1 -1
  398. package/.output/server/chunks/routes/api/workshop/index7.get.mjs +2 -0
  399. package/.output/server/chunks/routes/api/workshop/index7.get.mjs.map +1 -1
  400. package/.output/server/chunks/routes/api/workshop/index7.post.mjs +2 -0
  401. package/.output/server/chunks/routes/api/workshop/index7.post.mjs.map +1 -1
  402. package/.output/server/chunks/routes/api/workshop/index8.get.mjs +2 -0
  403. package/.output/server/chunks/routes/api/workshop/index8.get.mjs.map +1 -1
  404. package/.output/server/chunks/routes/api/workshop/index8.post.mjs +2 -0
  405. package/.output/server/chunks/routes/api/workshop/index8.post.mjs.map +1 -1
  406. package/.output/server/chunks/routes/api/workshop/index9.get.mjs +2 -0
  407. package/.output/server/chunks/routes/api/workshop/index9.get.mjs.map +1 -1
  408. package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs +2 -0
  409. package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs.map +1 -1
  410. package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs +2 -0
  411. package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs.map +1 -1
  412. package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs +2 -0
  413. package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs.map +1 -1
  414. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +2 -0
  415. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs.map +1 -1
  416. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +2 -0
  417. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs.map +1 -1
  418. package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs +2 -0
  419. package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs.map +1 -1
  420. package/.output/server/chunks/routes/api/workshop/runtime.get.mjs +2 -0
  421. package/.output/server/chunks/routes/api/workshop/runtime.get.mjs.map +1 -1
  422. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +2 -0
  423. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs.map +1 -1
  424. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +2 -0
  425. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs.map +1 -1
  426. package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs +2 -0
  427. package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs.map +1 -1
  428. package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs +2 -0
  429. package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs.map +1 -1
  430. package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs +2 -0
  431. package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs.map +1 -1
  432. package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs +2 -0
  433. package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs.map +1 -1
  434. package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs +2 -0
  435. package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs.map +1 -1
  436. package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs +2 -0
  437. package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs.map +1 -1
  438. package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs +2 -0
  439. package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs.map +1 -1
  440. package/.output/server/chunks/routes/api/workshop/tasks.get.mjs +2 -0
  441. package/.output/server/chunks/routes/api/workshop/tasks.get.mjs.map +1 -1
  442. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +2 -0
  443. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs.map +1 -1
  444. package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs +2 -0
  445. package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs.map +1 -1
  446. package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs +2 -0
  447. package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs.map +1 -1
  448. package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs +2 -0
  449. package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs.map +1 -1
  450. package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs +2 -0
  451. package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs.map +1 -1
  452. package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs +2 -0
  453. package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs.map +1 -1
  454. package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs +2 -0
  455. package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs.map +1 -1
  456. package/.output/server/chunks/routes/api/workshop/users/me.get.mjs +2 -0
  457. package/.output/server/chunks/routes/api/workshop/users/me.get.mjs.map +1 -1
  458. package/.output/server/chunks/routes/api/workshop/users/register.post.mjs +2 -0
  459. package/.output/server/chunks/routes/api/workshop/users/register.post.mjs.map +1 -1
  460. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +2 -0
  461. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs.map +1 -1
  462. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs +2 -0
  463. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs.map +1 -1
  464. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs +2 -0
  465. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs.map +1 -1
  466. package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs +2 -0
  467. package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs.map +1 -1
  468. package/.output/server/chunks/routes/renderer.mjs +1 -1
  469. package/.output/server/chunks/routes/renderer.mjs.map +1 -1
  470. package/.output/server/chunks/virtual/entry.mjs +166 -114
  471. package/.output/server/chunks/virtual/entry.mjs.map +1 -1
  472. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  473. package/.output/server/index.mjs +2 -0
  474. package/.output/server/index.mjs.map +1 -1
  475. package/.output/server/package.json +1 -1
  476. package/app/composables/workshop/useDaqStream.ts +59 -1
  477. package/app/config/schema.ts +8 -0
  478. package/app/pages/daq/[id].vue +141 -1
  479. package/app/pages/settings.vue +10 -5
  480. package/app/plugins/runtime-config.client.ts +65 -65
  481. package/app/stores/runtime-config.ts +212 -212
  482. package/config.yml +77 -70
  483. package/docker-compose.yml +19 -2
  484. package/docs/plugins.md +271 -197
  485. package/i18n/dicts/_en.json +7 -2
  486. package/i18n/dicts/daqDetail.json +8 -2
  487. package/i18n/locales/en.ts +55 -29
  488. package/i18n/locales/zh-CN.ts +55 -29
  489. package/nuxt.config.ts +1 -1
  490. package/package.json +144 -143
  491. package/scripts/_dbg-collab-scenario-e2e.mjs +185 -0
  492. package/scripts/_dbg-daq-frame-alarm.mjs +49 -0
  493. package/scripts/_dbg-daq-frame-ui.mjs +62 -0
  494. package/scripts/_dbg-daq-frame-ws.mjs +72 -0
  495. package/scripts/_dbg-daq-frames-e2e.mjs +118 -0
  496. package/scripts/_dbg-host.mjs +16 -0
  497. package/scripts/_dbg-plugin-agent-read.ts +56 -0
  498. package/scripts/_dbg-plugin-sink-rest.mjs +70 -0
  499. package/scripts/_dbg-plugin-sink-ui.mjs +81 -0
  500. package/scripts/_dbg-prompts-hotreload-test.ts +76 -0
  501. package/scripts/_dbg-release-smoke.mjs +104 -0
  502. package/scripts/home-bootstrap.mjs +18 -0
  503. package/scripts/i18n-merge.mjs +69 -67
  504. package/scripts/test-context-governor.ts +176 -176
  505. package/scripts/test-daq-frames.ts +180 -0
  506. package/scripts/test-daq-minio.ts +77 -0
  507. package/scripts/test-memory-rrf-mmr.ts +114 -114
  508. package/scripts/test-plugin-ext.ts +173 -0
  509. package/server/api/system/settings/events.get.ts +27 -28
  510. package/server/api/system/settings/index.get.ts +14 -14
  511. package/server/api/system/settings/index.patch.ts +22 -22
  512. package/server/api/system/settings/reset.post.ts +12 -12
  513. package/server/api/workshop/daq/[id]/frames/content.get.ts +24 -0
  514. package/server/api/workshop/daq/[id]/frames.get.ts +44 -0
  515. package/server/data/daqs.json +89 -89
  516. package/server/data/dcw-rollback.json +1 -1
  517. package/server/data/dcw-runs.json +3136 -2492
  518. package/server/data/dcw-writes.json +672 -0
  519. package/server/data/dcws.json +4 -4
  520. package/server/data/line-runs.json +1 -232
  521. package/server/plugins/daq.ts +11 -0
  522. package/server/plugins/system-config.ts +38 -38
  523. package/server/services/system-config.ts +365 -356
  524. package/server/services/workshop/agents/industrial-tools.ts +91 -25
  525. package/server/services/workshop/agents/omp-agent.ts +1955 -1895
  526. package/server/services/workshop/agents/plugin-tools.ts +145 -0
  527. package/server/services/workshop/daq/bus/queue-port.ts +18 -0
  528. package/server/services/workshop/daq/daq-controller.ts +216 -14
  529. package/server/services/workshop/daq/daq-node.ts +257 -247
  530. package/server/services/workshop/daq/daq-runtime.ts +36 -4
  531. package/server/services/workshop/daq/daq-templates.ts +213 -157
  532. package/server/services/workshop/daq/drivers.ts +134 -30
  533. package/server/services/workshop/daq/frames.ts +227 -0
  534. package/server/services/workshop/daq/infra.ts +31 -17
  535. package/server/services/workshop/daq/objectstore/disk.adapter.ts +38 -0
  536. package/server/services/workshop/daq/objectstore/index.ts +88 -0
  537. package/server/services/workshop/daq/objectstore/minio.adapter.ts +60 -0
  538. package/server/services/workshop/daq/objectstore/objectstore-port.ts +27 -0
  539. package/server/services/workshop/daq/plugin-bridge.ts +73 -0
  540. package/server/services/workshop/daq/png-enc.ts +71 -0
  541. package/server/services/workshop/daq/storage/sqlite.adapter.ts +104 -1
  542. package/server/services/workshop/daq/storage/timescale.adapter.ts +95 -4
  543. package/server/services/workshop/daq/storage/tsdb-port.ts +46 -0
  544. package/server/services/workshop/plugins/host.mjs +479 -417
  545. package/server/services/workshop/runtime/agent-runtime.ts +744 -744
  546. package/shared/config/schema.json +6 -1
  547. package/shared/daq-protocol.ts +88 -0
  548. package/.output/public/_nuxt/B-PgoIPN.js +0 -1
  549. package/.output/public/_nuxt/DVNYfGsj.js +0 -1
  550. package/.output/public/_nuxt/_id_.CbiF5PrV.css +0 -1
  551. package/.output/public/_nuxt/builds/meta/998b4cce-8563-44e5-b0ef-ff3d71a8480f.json +0 -1
  552. package/.output/public/_nuxt/settings.BANibAnV.css +0 -1
  553. package/.output/server/chunks/build/_id_-BOhG2yz8.mjs.map +0 -1
  554. package/.output/server/chunks/build/_id_-CuyMYmhY.mjs.map +0 -1
  555. package/.output/server/chunks/build/agents-BVaxN75W.mjs.map +0 -1
  556. package/.output/server/chunks/build/channel-templates-D1K2IKrE.mjs.map +0 -1
  557. package/.output/server/chunks/build/client-only-CFTHwakk.mjs.map +0 -1
  558. package/.output/server/chunks/build/daq-ObtN1TQ4.mjs.map +0 -1
  559. package/.output/server/chunks/build/dcw-fINr-He1.mjs.map +0 -1
  560. package/.output/server/chunks/build/interval-Bt11uRPw.mjs +0 -9
  561. package/.output/server/chunks/build/interval-Bt11uRPw.mjs.map +0 -1
  562. package/.output/server/chunks/build/logs-DqNgCJAn.mjs.map +0 -1
  563. package/.output/server/chunks/build/pages-DC52d7z7.mjs.map +0 -1
  564. package/.output/server/chunks/build/plugins-DVQty7qG.mjs.map +0 -1
  565. package/.output/server/chunks/build/settings-BeergncK.mjs.map +0 -1
  566. package/.output/server/chunks/build/teams-CFeDlHDh.mjs.map +0 -1
  567. package/.output/server/chunks/build/tokens-CBAUbOce.mjs.map +0 -1
  568. package/.output/server/chunks/build/town-BxH-XXth.mjs.map +0 -1
  569. package/.output/server/chunks/build/useDaqStream-CwORhsD7.mjs.map +0 -1
  570. package/.output/server/chunks/build/users-BMs4s_6K.mjs.map +0 -1
  571. package/.output/server/chunks/build/workshop-CJAyZ5zS.mjs.map +0 -1
package/docs/plugins.md CHANGED
@@ -1,197 +1,271 @@
1
- # AgentWorkShop 插件开发指南
2
-
3
- > 插件 = 配置根 `plugins/<name>/` 下的一个 node 项目。基于内置 SDK 的生命周期钩子,
4
- > 同时增强**服务端**(数据/事件/API)与**浏览器**(面板/遥测/交互)。
5
- > 与 `aw` 指令同哲学:放入目录即装载,约定优于配置。
6
- > SDK 全部成员的逐项详解见 [sdk.md](./sdk.md)——本文聚焦插件视角的装配与生命周期。
7
-
8
- ## 一、快速开始
9
-
10
- ```bash
11
- aw plugin create my-plugin # 脚手架到 ~/.AgentWorkShop/plugins/(用户级)
12
- aw plugin create my-plugin --project # 或项目级 <repo>/.AgentWorkShop/plugins/
13
- aw plugin list # 查看两处已装插件
14
- aw start # 重启即自动装载
15
- ```
16
-
17
- 目录结构(标准 node 项目形态):
18
-
19
- ```
20
- plugins/my-plugin/
21
- ├── index.mjs # 服务端入口(必需): export default { name, setup(ctx) }
22
- ├── client.mjs # 浏览器增强(可选): export function setup(ctx)
23
- └── README.md
24
- ```
25
-
26
- ## 二、装载流程(项目启动时自动发现)
27
-
28
- ```
29
- 服务启动(nitro 插件 server/plugins/aw-plugins.ts)
30
- └─ 宿主扫描(双作用域,同名项目级覆盖用户级)
31
- ├─ <检出>/.AgentWorkShop/plugins/*/index.mjs (project)
32
- └─ ~/.AgentWorkShop/plugins/*/index.mjs (user / AW_HOME 重定向)
33
- └─ 逐插件: 动态 import → 形态校验 → createPluginContext → setup(ctx)
34
- └─ 注册插件路由(/api/plugins/<name>/**) + 解析客户端入口
35
- └─ emit plugin:host:init
36
- ```
37
-
38
- - **错误隔离**:单插件装载/执行失败记入 `failures` 并告警,绝不拖垮主服务。
39
- - **修改插件文件后需重启服务**(插件目录不在热更新监听范围)。
40
- - 客户端插件由 `app/plugins/aw-plugins.client.ts` loader 在浏览器侧动态装载,互不影响。
41
-
42
- ## 三、插件契约
43
-
44
- `index.mjs` 导出**普通对象**(零导入依赖——`ctx` 由宿主注入;TypeScript 可 type-only
45
- 导入 `agentworkshop/sdk` 获得类型,运行时擦除):
46
-
47
- ```js
48
- export default {
49
- name: 'my-plugin', // 必填,全局唯一
50
- version: '1.0.0',
51
- description: '…',
52
- client: './client.mjs', // 可选:浏览器增强入口(相对路径)
53
- routes: [ // 可选:声明式 API(也可在 setup 里 ctx.route())
54
- { method: 'GET', path: '/health', handler: () => ({ ok: true }) },
55
- ],
56
- async setup(ctx) { /* 服务端生命周期 */ },
57
- }
58
- ```
59
-
60
- ## 四、服务端生命周期(完整)
61
-
62
- 装载完成后,以下事件按业务发生顺序流经 `ctx.hooks`(**每个都可直接 `ctx.hooks.on` 消费**):
63
-
64
- ### 4.1 `plugin:host:init`
65
- - **时机**:宿主装载完所有插件后(一次性)。
66
- - **payload**:`{ plugins: string[], failures: number }`。
67
- - **用途**:就绪自证;延迟初始化(依赖其他插件已注册路由的场景)。
68
-
69
- ### 4.2 `daq:sample`
70
- - **时机**:数采**下发级**采样——与 WS `daq.reading` 同一点、按节点 `publishIntervalMs` 节拍。
71
- - **payload**:`{ nodeId, templateRef, value, state, at }`。
72
- - **用途**:越限告警、采样统计、实时联动。
73
- - **示例**:
74
- ```js
75
- ctx.hooks.on('daq:sample', (s) => {
76
- if (s.value > (ctx.kv.get('threshold') ?? 180)) ctx.kv.bump('alarms')
77
- })
78
- ```
79
-
80
- ### 4.3 `dcw:write`
81
- - **时机**:写控 ACK 之后(与运维入册同点、同 10s 去重节流)——**观察语义,不影响写控决策**。
82
- - **payload**:`{ nodeId, name, eng, prevValue, ok, source('manual'|'recipe'|'agent'|'rollback'), lineId, at }`。
83
- - **用途**:写审计、下发趋势、回写记录。
84
-
85
- ### 4.4 `line:start` / `line:stop`
86
- - **时机**:产线开跑/停止(批次窗口开/闭)。
87
- - **payload**:`{ lineId, runId, recipeId?, productName? }` / `{ lineId, runId }`。
88
- - **用途**:批次开始联动、停线报告。
89
-
90
- ### 4.5 `event:<type>` / `event:*`
91
- - **时机**:scene 全部实时事件(`device.created|updated|deleted`、`daq.reading`、
92
- `daq.node.changed`、`daq.controller`、`ops.log` …)——与浏览器 WS 完全同源。
93
- - **消费**:`ctx.events.on('daq.reading', fn)`(糖衣)或 `ctx.hooks.on('event:daq.reading', fn)`。
94
- - **用途**:任意平台事件的观察与增强,无需自建 WS 连接。
95
-
96
- ### 4.6 `config:changed`
97
- - **时机**:`runtime-settings.json` 变化(`aw config set` / 网页设置写入;宿主 fs.watch 防抖 300ms)。
98
- - **payload**:`{ at }`;配合 `ctx.config.get/all()` 读取新值。
99
- - **用途**:阈值热更新、联动参数刷新。
100
-
101
- ### 4.7 `server:close`
102
- - **时机**:服务关闭——**先逐插件执行 `ctx.onDispose` 队列,再广播本事件**。
103
- - **payload**:`{ at }`。
104
- - **用途**:最终落盘、对外通知。
105
-
106
- ## 五、服务端 ctx 全成员
107
-
108
- | 分组 | 成员 | 说明 |
109
- |---|---|---|
110
- | 身份 | `ctx.name / scope / dir / sdkVersion` | 插件名 / `'project'\|'user'` / 目录 / SDK 版本 |
111
- | 钩子 | `ctx.hooks` | HookBus:`on/once/off/emit`(异步串行、错误隔离、`'*'` 通配、连续失败 8 次熔断) |
112
- | 日志 | `ctx.logger` | `debug/info/warn/error`,自动前缀 `[插件名]` |
113
- | 配置 | `ctx.config.get(key)` / `all()` / `onChange(fn)` | 有效配置只读 + 变更订阅 |
114
- | 存储 | `ctx.kv.get/set/all/bump` | 插件私有 KV(内存态 + 200ms 防抖落盘,高频钩子零竞态) |
115
- | 定时 | `ctx.timer.setInterval/setTimeout` | **服务关闭自动回收**,杜绝定时器泄漏 |
116
- | 清理 | `ctx.onDispose(fn)` / `ctx.subscriptions.add(d)` | `server:close` 前逐个执行(先于广播) |
117
- | 路由 | `ctx.route(method, path, handler)` | 插件 API → `/api/plugins/<name><path>` |
118
- | 平台 | `ctx.api` | 平台 REST 客户端(自环 origin;鉴权端点 `ctx.api.setToken(token)`) |
119
- | 网络 | `ctx.http.get/post` | 通用请求(仅 http/https,默认 8s 超时) |
120
- | 事件 | `ctx.events.on(type, fn)` | scene 实时事件订阅 |
121
- | 路径 | `ctx.paths` | `{ home, configRoot, dataDir }` |
122
-
123
- > **鉴权说明**:`ctx.api` 自环调用遵循平台 REST 鉴权——免鉴权端点(manifest/ping)开箱即用;
124
- > 鉴权端点需 `ctx.api.setToken(token)`(token 可经 `AW_TOKEN` 环境变量注入插件)。
125
- > 仅需进程内数据时优先 `ctx.events`/`ctx.hooks`(零鉴权、零开销)。
126
-
127
- ## 六、浏览器增强(client.mjs)
128
-
129
- `client.mjs` 为**自包含 ESM**(无裸导入),导出 `setup(ctx)`。loader
130
- (`app/plugins/aw-plugins.client.ts`) 启动期经 `/api/plugins/manifest` 发现并动态装载,
131
- 事件与 WS 完全同源:
132
-
133
- | 成员 | 说明 |
134
- |---|---|
135
- | `ctx.on(type, fn)` | `daq:sample` / `event:<type>` / `event:*` / `page:change` 订阅(pagehide 自动回收) |
136
- | `ctx.fetch(path, opt?)` | 同源平台 API(JSON + 信封解包,非 2xx 抛错) |
137
- | `ctx.el(tag, attrs, children)` | DOM 构建 |
138
- | `ctx.root()` / `ctx.mount(target, node)` | 私有挂载点 / 任意位置挂载 |
139
- | `ctx.hooks` | 本地 HookBus(`client:init` / `page:change` / `client:destroy`) |
140
- | `ctx.dispose()` | 卸载(回收订阅 + 清空挂载点;pagehide 自动触发) |
141
-
142
- ```js
143
- export function setup(ctx) {
144
- const badge = ctx.el('div', { style: 'color:#35e0a0' }, ['⌁ 0'])
145
- ctx.root().append(badge)
146
- let n = 0
147
- ctx.on('daq:sample', () => { badge.textContent = `⌁ ${++n}` })
148
- }
149
- ```
150
-
151
- ## 七、插件 API(增强后端)
152
-
153
- ```js
154
- ctx.route('GET', '/stats', () => ctx.kv.all())
155
- ctx.route('POST', '/reset', (event) => {
156
- const body = event.awBody // 宿主已预读 JSON body
157
- ctx.kv.reset()
158
- return { ok: true }
159
- })
160
- ```
161
-
162
- → `/api/plugins/<name><path>`。宿主 catchall 转发(exact-match),body 预读挂 `event.awBody`;
163
- v1 鉴权由插件自理(可在 handler 内 `resolveUser(event)` 复用业务鉴权)。
164
-
165
- ## 八、真实案例:line-sentinel(产线哨兵)
166
-
167
- 用户级安装,展示 SDK 全部能力面——源码 `~/.AgentWorkShop/plugins/line-sentinel/`:
168
-
169
- - **`ctx.api`**:启动读取平台产线清单(自环 REST)
170
- - **`ctx.hooks.on('daq:sample')`**:逐样本计数 + 越限告警(阈值可调)
171
- - **`ctx.hooks.on('line:start'/'line:stop')`**:运行态跟踪
172
- - **`ctx.config.onChange`**:配置热更新感知
173
- - **`ctx.timer`**:5s 心跳 + 免鉴权 manifest ping 自证 REST 通道
174
- - **`ctx.route`**:`GET /report` 综合报告、`POST /threshold` 阈值设置(`event.awBody`)
175
- - **`client.mjs`**:右下角实时徽标(样本数 + 告警数)
176
-
177
- 实测记录(dev 3127 / prod 3601 双形态):8 秒采样计数 288+、12 节点越限告警、
178
- 心跳间隔 ~1s 内新鲜、浏览器徽标挂载零 pageerror。
179
-
180
- ## 九、调试与陷阱
181
-
182
- | 现象 | 原因 / 处理 |
183
- |---|---|
184
- | 改了插件代码没生效 | 插件目录不在热更新范围——**重启 `aw start` / `aw dev`** |
185
- | 客户端徽标没出现 | 打开浏览器 console 看 `[aw-plugins]` 告警;确认 manifest 中 `hasClient: true` |
186
- | 插件路由 404 | 路由为 exact-match;注意 method 与 path 前导 `/` |
187
- | `ctx.api` 鉴权 401 | 鉴权端点需 `ctx.api.setToken(token)`;免鉴权端点(manifest/ping)无需 |
188
- | 插件装载失败 | `aw dev/start` 启动日志有 `[aw-plugins] 装载失败` 详情;修复后重启 |
189
-
190
- **信任模型**:插件是任意 node 代码,与 aw commands 同级——只安装/启用你信任的插件。
191
-
192
- ## 十、发布与作用域
193
-
194
- - 用户级(全局):`~/.AgentWorkShop/plugins/` —— `AW_HOME` 可重定向。
195
- - 项目级(检出):`<repo>/.AgentWorkShop/plugins/` —— 团队可 git 版本化共享。
196
- - 同名指令式覆盖规则与 commands 一致:**项目级 > 用户级 > 内建**。
197
- - 卸载 = 删除目录后重启。
1
+ # AgentWorkShop 插件开发指南
2
+
3
+ > 插件 = 配置根 `plugins/<name>/` 下的一个 node 项目。基于内置 SDK 的生命周期钩子,
4
+ > 同时增强**服务端**(数据/事件/API)与**浏览器**(面板/遥测/交互)。
5
+ > 与 `aw` 指令同哲学:放入目录即装载,约定优于配置。
6
+ > SDK 全部成员的逐项详解见 [sdk.md](./sdk.md)——本文聚焦插件视角的装配与生命周期。
7
+
8
+ ## 一、快速开始
9
+
10
+ ```bash
11
+ aw plugin create my-plugin # 脚手架到 ~/.AgentWorkShop/plugins/(用户级)
12
+ aw plugin create my-plugin --project # 或项目级 <repo>/.AgentWorkShop/plugins/
13
+ aw plugin list # 查看两处已装插件
14
+ aw start # 重启即自动装载
15
+ ```
16
+
17
+ 目录结构(标准 node 项目形态):
18
+
19
+ ```
20
+ plugins/my-plugin/
21
+ ├── index.mjs # 服务端入口(必需): export default { name, setup(ctx) }
22
+ ├── client.mjs # 浏览器增强(可选): export function setup(ctx)
23
+ └── README.md
24
+ ```
25
+
26
+ ## 二、装载流程(项目启动时自动发现)
27
+
28
+ ```
29
+ 服务启动(nitro 插件 server/plugins/aw-plugins.ts)
30
+ └─ 宿主扫描(双作用域,同名项目级覆盖用户级)
31
+ ├─ <检出>/.AgentWorkShop/plugins/*/index.mjs (project)
32
+ └─ ~/.AgentWorkShop/plugins/*/index.mjs (user / AW_HOME 重定向)
33
+ └─ 逐插件: 动态 import → 形态校验 → createPluginContext → setup(ctx)
34
+ └─ 注册插件路由(/api/plugins/<name>/**) + 解析客户端入口
35
+ └─ emit plugin:host:init
36
+ ```
37
+
38
+ - **错误隔离**:单插件装载/执行失败记入 `failures` 并告警,绝不拖垮主服务。
39
+ - **修改插件文件后需重启服务**(插件目录不在热更新监听范围)。
40
+ - 客户端插件由 `app/plugins/aw-plugins.client.ts` loader 在浏览器侧动态装载,互不影响。
41
+
42
+ ## 三、插件契约
43
+
44
+ `index.mjs` 导出**普通对象**(零导入依赖——`ctx` 由宿主注入;TypeScript 可 type-only
45
+ 导入 `agentworkshop/sdk` 获得类型,运行时擦除):
46
+
47
+ ```js
48
+ export default {
49
+ name: 'my-plugin', // 必填,全局唯一
50
+ version: '1.0.0',
51
+ description: '…',
52
+ client: './client.mjs', // 可选:浏览器增强入口(相对路径)
53
+ routes: [ // 可选:声明式 API(也可在 setup 里 ctx.route())
54
+ { method: 'GET', path: '/health', handler: () => ({ ok: true }) },
55
+ ],
56
+ async setup(ctx) { /* 服务端生命周期 */ },
57
+ }
58
+ ```
59
+
60
+ ## 四、服务端生命周期(完整)
61
+
62
+ 装载完成后,以下事件按业务发生顺序流经 `ctx.hooks`(**每个都可直接 `ctx.hooks.on` 消费**):
63
+
64
+ ### 4.1 `plugin:host:init`
65
+ - **时机**:宿主装载完所有插件后(一次性)。
66
+ - **payload**:`{ plugins: string[], failures: number }`。
67
+ - **用途**:就绪自证;延迟初始化(依赖其他插件已注册路由的场景)。
68
+
69
+ ### 4.2 `daq:sample`
70
+ - **时机**:数采**下发级**采样——与 WS `daq.reading` 同一点、按节点 `publishIntervalMs` 节拍。
71
+ - **payload**:`{ nodeId, templateRef, value, state, at }`。
72
+ - **用途**:越限告警、采样统计、实时联动。
73
+ - **示例**:
74
+ ```js
75
+ ctx.hooks.on('daq:sample', (s) => {
76
+ if (s.value > (ctx.kv.get('threshold') ?? 180)) ctx.kv.bump('alarms')
77
+ })
78
+ ```
79
+
80
+ ### 4.2b `daq:frame`
81
+ - **时机**:数采**多形态帧**下发级(向量/图像节点;与 WS `daq.frame` 同点、按 `publishIntervalMs` 节拍)。
82
+ - **payload**:`{ nodeId, templateRef, kind: 'vector'|'image', at, preview?, metrics?, thumbUrl? }`。
83
+ **不含像素 blob**——图像只有缩略图 URL 与派生指标(brightness/contrast…),防止插件侧内存放大。
84
+ - **用途**:帧级质检、缺陷计数、图像指标联动。
85
+
86
+ ### 4.3 `dcw:write`
87
+ - **时机**:写控 ACK 之后(与运维入册同点、同 10s 去重节流)——**观察语义,不影响写控决策**。
88
+ - **payload**:`{ nodeId, name, eng, prevValue, ok, source('manual'|'recipe'|'agent'|'rollback'), lineId, at }`。
89
+ - **用途**:写审计、下发趋势、回写记录。
90
+
91
+ ### 4.4 `line:start` / `line:stop`
92
+ - **时机**:产线开跑/停止(批次窗口开/闭)。
93
+ - **payload**:`{ lineId, runId, recipeId?, productName? }` / `{ lineId, runId }`。
94
+ - **用途**:批次开始联动、停线报告。
95
+
96
+ ### 4.5 `event:<type>` / `event:*`
97
+ - **时机**:scene 全部实时事件(`device.created|updated|deleted`、`daq.reading`、
98
+ `daq.node.changed`、`daq.controller`、`ops.log` …)——与浏览器 WS 完全同源。
99
+ - **消费**:`ctx.events.on('daq.reading', fn)`(糖衣)或 `ctx.hooks.on('event:daq.reading', fn)`。
100
+ - **用途**:任意平台事件的观察与增强,无需自建 WS 连接。
101
+
102
+ ### 4.6 `config:changed`
103
+ - **时机**:`runtime-settings.json` 变化(`aw config set` / 网页设置写入;宿主 fs.watch 防抖 300ms)。
104
+ - **payload**:`{ at }`;配合 `ctx.config.get/all()` 读取新值。
105
+ - **用途**:阈值热更新、联动参数刷新。
106
+
107
+ ### 4.7 `server:close`
108
+ - **时机**:服务关闭——**先逐插件执行 `ctx.onDispose` 队列,再广播本事件**。
109
+ - **payload**:`{ at }`。
110
+ - **用途**:最终落盘、对外通知。
111
+
112
+ ## 五、服务端 ctx 全成员
113
+
114
+ | 分组 | 成员 | 说明 |
115
+ |---|---|---|
116
+ | 身份 | `ctx.name / scope / dir / sdkVersion` | 插件名 / `'project'\|'user'` / 目录 / SDK 版本 |
117
+ | 钩子 | `ctx.hooks` | HookBus:`on/once/off/emit`(异步串行、错误隔离、`'*'` 通配、连续失败 8 次熔断) |
118
+ | 日志 | `ctx.logger` | `debug/info/warn/error`,自动前缀 `[插件名]` |
119
+ | 配置 | `ctx.config.get(key)` / `all()` / `onChange(fn)` | 有效配置只读 + 变更订阅 |
120
+ | 存储 | `ctx.kv.get/set/all/bump` | 插件私有 KV(内存态 + 200ms 防抖落盘,高频钩子零竞态) |
121
+ | 定时 | `ctx.timer.setInterval/setTimeout` | **服务关闭自动回收**,杜绝定时器泄漏 |
122
+ | 清理 | `ctx.onDispose(fn)` / `ctx.subscriptions.add(d)` | `server:close` 前逐个执行(先于广播) |
123
+ | 路由 | `ctx.route(method, path, handler)` | 插件 API → `/api/plugins/<name><path>` |
124
+ | 平台 | `ctx.api` | 平台 REST 客户端(自环 origin;鉴权端点 `ctx.api.setToken(token)`) |
125
+ | 网络 | `ctx.http.get/post` | 通用请求(仅 http/https,默认 8s 超时) |
126
+ | 事件 | `ctx.events.on(type, fn)` | scene 实时事件订阅 |
127
+ | DAQ 扩展 | `ctx.daq.registerDriver(driver)` / `registerProcessor(kind, name, fn)` | 注册自定义采集驱动 / 下沉处理器(同名覆盖内置;详见 §九) |
128
+ | 路径 | `ctx.paths` | `{ home, configRoot, dataDir }` |
129
+
130
+ > **鉴权说明**:`ctx.api` 自环调用遵循平台 REST 鉴权——免鉴权端点(manifest/ping)开箱即用;
131
+ > 鉴权端点需 `ctx.api.setToken(token)`(token 可经 `AW_TOKEN` 环境变量注入插件)。
132
+ > 仅需进程内数据时优先 `ctx.events`/`ctx.hooks`(零鉴权、零开销)。
133
+
134
+ ## 六、浏览器增强(client.mjs)
135
+
136
+ `client.mjs` 为**自包含 ESM**(无裸导入),导出 `setup(ctx)`。loader
137
+ (`app/plugins/aw-plugins.client.ts`) 启动期经 `/api/plugins/manifest` 发现并动态装载,
138
+ 事件与 WS 完全同源:
139
+
140
+ | 成员 | 说明 |
141
+ |---|---|
142
+ | `ctx.on(type, fn)` | `daq:sample` / `event:<type>` / `event:*` / `page:change` 订阅(pagehide 自动回收) |
143
+ | `ctx.fetch(path, opt?)` | 同源平台 API(JSON + 信封解包,非 2xx 抛错) |
144
+ | `ctx.el(tag, attrs, children)` | DOM 构建 |
145
+ | `ctx.root()` / `ctx.mount(target, node)` | 私有挂载点 / 任意位置挂载 |
146
+ | `ctx.hooks` | 本地 HookBus(`client:init` / `page:change` / `client:destroy`) |
147
+ | `ctx.dispose()` | 卸载(回收订阅 + 清空挂载点;pagehide 自动触发) |
148
+
149
+ ```js
150
+ export function setup(ctx) {
151
+ const badge = ctx.el('div', { style: 'color:#35e0a0' }, ['⌁ 0'])
152
+ ctx.root().append(badge)
153
+ let n = 0
154
+ ctx.on('daq:sample', () => { badge.textContent = `⌁ ${++n}` })
155
+ }
156
+ ```
157
+
158
+ ## 七、插件 API(增强后端)
159
+
160
+ ```js
161
+ ctx.route('GET', '/stats', () => ctx.kv.all())
162
+ ctx.route('POST', '/reset', (event) => {
163
+ const body = event.awBody // 宿主已预读 JSON body
164
+ ctx.kv.reset()
165
+ return { ok: true }
166
+ })
167
+ ```
168
+
169
+ → `/api/plugins/<name><path>`。宿主 catchall 转发(exact-match),body 预读挂 `event.awBody`;
170
+ v1 鉴权由插件自理(可在 handler 内 `resolveUser(event)` 复用业务鉴权)。
171
+
172
+ ## 八、多形态数采扩展(v2 帧管线)
173
+
174
+ 数采不止单点数值:模板可声明 `signalKind: 'vector'`(测厚仪/扫描仪多点轮廓)或 `'image'`(CCD 图像)。
175
+ 向量/元数据入 Timescale(`daq_frames`),图像像素入对象存储(MinIO,disk 降级)。插件两种扩展点:
176
+
177
+ ```js
178
+ // ① 自定义下沉处理器(推荐入口):模板 sink 配置 { name: 'demo-roughness', args: { window: 8 } } 即生效
179
+ ctx.daq.registerProcessor('vector', 'demo-roughness', (frame, args) => {
180
+ // frame = { kind, points? | blob?(仅图像生产侧), metrics }
181
+ // 返回变换后的 frame;单步异常被网关捕获(保留原帧,不阻塞采集)
182
+ return { ...frame, metrics: { ...frame.metrics, roughness: computeRoughness(frame.points) } }
183
+ })
184
+
185
+ // ② 注册自定义节点模板(出现在 /daq 模板目录与创建向导;用户可即刻建节点使用)
186
+ ctx.daq.registerTemplate({
187
+ key: 'plug-my-sensor', // 必填,建议 plug-<name>-<信号> 命名;同名覆盖(热重载幂等)
188
+ name: '我的传感器', code: 'MY · SNS', ch: '自定义信号', unit: 'mm',
189
+ base: 0.5, amp: 0.02, min: 0.4, max: 0.6, decimals: 3, icon: 'tension',
190
+ signalKind: 'vector', // scalar(缺省)/ vector / image
191
+ vector: { points: 32, min: 0.4, max: 0.6 },
192
+ sink: { processors: [{ name: 'resample', args: { n: 32 } }, { name: 'my-derive' }] }, // 下沉管线(入库+下发前加工)
193
+ metrics: [{ key: 'avg', label: '均值', unit: 'mm', alarmHigh: 0.55 }], // 派生指标阈值告警
194
+ })
195
+
196
+ // ③ 自定义采集驱动(任意协议/设备):实现与内置驱动同契约
197
+ ctx.daq.registerDriver({
198
+ kind: 'my-ccd', // 节点 driver 字段引用;与内置同名会覆盖并告警
199
+ available: async () => true,
200
+ sample: async ({ ctx, config, driverConfig, signalKind, vector }) => {
201
+ if (signalKind === 'image') {
202
+ const blob = await grabJpeg(driverConfig.url) // Buffer
203
+ return { frame: { kind: 'image', blob, mime: 'image/jpeg', width: 640, height: 480 } }
204
+ }
205
+ if (signalKind === 'vector') {
206
+ return { frame: { kind: 'vector', points: readProfile(), metrics: {} } }
207
+ }
208
+ return readScalar()
209
+ },
210
+ test: async () => ({ ok: true, message: 'ok' }),
211
+ })
212
+ ```
213
+
214
+ - 处理器内置件:`resample` / `derive-metric` / `zones` / `thumbnail` / `quality-gate`;
215
+ - 指标阈值在模板 `metrics` 声明(如 `{ key: 'roughness', alarmHigh: 0.05 }`),越限走平台既有告警链路;
216
+ - 帧消费:`ctx.daq.onFrame(fn)` / `ctx.daq.onSample(fn)`(分别对应 daq:frame / daq:sample 钩子别名);
217
+ - 完整示例见 `.AgentWorkShop/plugins/daq-vector-demo/`(处理器+模板,project 作用域,可直接改)。
218
+
219
+ ## 九、omp 自定义工具(运行时热注入)
220
+
221
+ 插件经 `ctx.omp.registerTool(tool)` 注册 omp host 工具:工具 schema 自动并入 agent 工具面
222
+ (随 `set_host_tools` 下发),**注册表变更即时热注入全部在跑 agent 会话**(无需重启/重spawn);
223
+ `handleHostTool` 对插件工具名分发执行,handler 收到 `(args, agent={agentId,channelId,role,name})`。
224
+
225
+ ```js
226
+ ctx.omp.registerTool({
227
+ name: 'sensor_calibration_log', // 与内置 host tool 同名会被忽略(内置优先)
228
+ label: '标定记录本',
229
+ description: '查询/登记各传感器的标定结论…',
230
+ parameters: { type: 'object', properties: { action: { type: 'string', enum: ['get','put','list'] } }, required: ['action'] },
231
+ roles: ['lead', 'worker'], // 缺省双角色;['lead'] = 仅 lead 工具面
232
+ handler: async (args, agent) => ({ text: `结果…` }), // isError: true 按工具错误呈现
233
+ })
234
+ ```
235
+
236
+ - 示例插件:`.AgentWorkShop/plugins/omp-sensor-tools/`(传感器标定记录本)。
237
+ - 热注入语义:插件装载/停用/重载 → 工具面变更 → 全部在跑 omp 子进程收到新的 set_host_tools。
238
+
239
+ ## 十、真实案例:line-sentinel(产线哨兵)
240
+
241
+ 用户级安装,展示 SDK 全部能力面——源码 `~/.AgentWorkShop/plugins/line-sentinel/`:
242
+
243
+ - **`ctx.api`**:启动读取平台产线清单(自环 REST)
244
+ - **`ctx.hooks.on('daq:sample')`**:逐样本计数 + 越限告警(阈值可调)
245
+ - **`ctx.hooks.on('line:start'/'line:stop')`**:运行态跟踪
246
+ - **`ctx.config.onChange`**:配置热更新感知
247
+ - **`ctx.timer`**:5s 心跳 + 免鉴权 manifest ping 自证 REST 通道
248
+ - **`ctx.route`**:`GET /report` 综合报告、`POST /threshold` 阈值设置(`event.awBody`)
249
+ - **`client.mjs`**:右下角实时徽标(样本数 + 告警数)
250
+
251
+ 实测记录(dev 3127 / prod 3601 双形态):8 秒采样计数 288+、12 节点越限告警、
252
+ 心跳间隔 ~1s 内新鲜、浏览器徽标挂载零 pageerror。
253
+
254
+ ## 十一、调试与陷阱
255
+
256
+ | 现象 | 原因 / 处理 |
257
+ |---|---|
258
+ | 改了插件代码没生效 | 插件目录不在热更新范围——**重启 `aw start` / `aw dev`** |
259
+ | 客户端徽标没出现 | 打开浏览器 console 看 `[aw-plugins]` 告警;确认 manifest 中 `hasClient: true` |
260
+ | 插件路由 404 | 路由为 exact-match;注意 method 与 path 前导 `/` |
261
+ | `ctx.api` 鉴权 401 | 鉴权端点需 `ctx.api.setToken(token)`;免鉴权端点(manifest/ping)无需 |
262
+ | 插件装载失败 | `aw dev/start` 启动日志有 `[aw-plugins] 装载失败` 详情;修复后重启 |
263
+
264
+ **信任模型**:插件是任意 node 代码,与 aw commands 同级——只安装/启用你信任的插件。
265
+
266
+ ## 十二、发布与作用域
267
+
268
+ - 用户级(全局):`~/.AgentWorkShop/plugins/` —— `AW_HOME` 可重定向。
269
+ - 项目级(检出):`<repo>/.AgentWorkShop/plugins/` —— 团队可 git 版本化共享。
270
+ - 同名指令式覆盖规则与 commands 一致:**项目级 > 用户级 > 内建**。
271
+ - 卸载 = 删除目录后重启。
@@ -1093,5 +1093,10 @@
1093
1093
  "{p0}{p1} 月 {p2} 日": "{p0}{p1}-{p2}",
1094
1094
  "{p0} 角色已调整为 {p1}": "{p0} role changed to {p1}",
1095
1095
  "{p0} 已{p1}": "{p0} {p1}",
1096
- "已删除 {p0}": "Deleted {p0}"
1097
- }
1096
+ "已删除 {p0}": "Deleted {p0}",
1097
+ "图像帧画廊": "Image frame gallery",
1098
+ "多点轮廓帧": "Profile frames",
1099
+ "暂无帧(产线运行中才有数据)": "No frames yet (data flows only while the line is running)",
1100
+ "指标": "Metrics",
1101
+ "点击查看原图": "Click to view full image"
1102
+ }
@@ -51,5 +51,11 @@
51
51
  "ksn9cgo050": "下发参数到采集器",
52
52
  "k1fstglk051": "测试连接",
53
53
  "k452a8052": "绑定",
54
- "k9vnp9h053": "全局 {p0}ms"
55
- }
54
+ "k9vnp9h053": "全局 {p0}ms",
55
+ "kfrm0001": "图像帧画廊",
56
+ "kfrm0002": "多点轮廓帧",
57
+ "kfrm0003": "暂无帧(产线运行中才有数据)",
58
+ "kfrm0004": "点数",
59
+ "kfrm0005": "指标",
60
+ "kfrm0006": "点击查看原图"
61
+ }
@@ -532,6 +532,12 @@ export default {
532
532
  k1evt004: 'No events yet — waiting for activity…',
533
533
  },
534
534
  daqDetail: {
535
+ kfrm0001: 'Image frame gallery',
536
+ kfrm0002: 'Profile frames',
537
+ kfrm0003: 'No frames yet (data flows only while the line is running)',
538
+ kfrm0004: 'Points',
539
+ kfrm0005: 'Metrics',
540
+ kfrm0006: 'Click to view full image',
535
541
  k9vnp9h053: 'Global {p0}ms',
536
542
  k3n5aaj045: 'Disabled',
537
543
  k1cgi8fy046: 'Per-node Interval',
@@ -587,34 +593,54 @@ export default {
587
593
  k3lha20031: 'Raw points',
588
594
  },
589
595
  logs: {
590
- title: 'Operations log',
591
- sub: 'One unified record of every operation: what control was issued, what users and agents did — queryable by line / product / recipe',
592
- live: 'Live',
593
- liveHint: 'Receiving operation events over WS (summary rendering only; full details queryable below)',
594
- manual: 'Manual entry',
595
- all: 'All',
596
- fLine: 'Line',
597
- fProduct: 'Product',
598
- fSource: 'Source',
599
- fKind: 'Kind',
600
- fKeyword: 'Keyword',
601
- fKeywordPh: 'Search summary / action / actor…',
602
- query: 'Query',
603
- reset: 'Reset',
604
- thTime: 'Time',
605
- thActor: 'Actor',
606
- thSummary: 'Event summary',
607
- thScope: 'Scope (line / product / recipe)',
608
- thDetail: 'Detail',
609
- expand: 'Detail',
610
- fold: 'Fold',
611
- loading: 'Querying…',
612
- empty: 'No matching log entries',
613
- src: {
596
+ 'src.user': '用户',
597
+ 'src.system': 'System',
598
+ 'kind.write': 'Apply',
599
+ 'kind.manual': '人工',
600
+ 'kind.alarm': 'Alarm',
601
+ 'kind.line': 'Line',
602
+ 'kind.recipe': 'Recipe',
603
+ 'kind.rollback': '回退',
604
+ 'kind.daq': 'DAQ',
605
+ 'kind.system': 'System',
606
+ 'src.user': '用户',
607
+ 'src.system': 'System',
608
+ 'kind.write': 'Apply',
609
+ 'kind.manual': '人工',
610
+ 'kind.alarm': 'Alarm',
611
+ 'kind.line': 'Line',
612
+ 'kind.recipe': 'Recipe',
613
+ 'kind.rollback': '回退',
614
+ 'kind.daq': 'DAQ',
615
+ 'kind.system': 'System',
616
+ 'title': 'Operations log',
617
+ 'sub': 'One unified record of every operation: what control was issued, what users and agents did — queryable by line / product / recipe',
618
+ 'live': 'Live',
619
+ 'liveHint': 'Receiving operation events over WS (summary rendering only; full details queryable below)',
620
+ 'manual': 'Manual entry',
621
+ 'all': 'All',
622
+ 'fLine': 'Line',
623
+ 'fProduct': 'Product',
624
+ 'fSource': 'Source',
625
+ 'fKind': 'Kind',
626
+ 'fKeyword': 'Keyword',
627
+ 'fKeywordPh': 'Search summary / action / actor…',
628
+ 'query': 'Query',
629
+ 'reset': 'Reset',
630
+ 'thTime': 'Time',
631
+ 'thActor': 'Actor',
632
+ 'thSummary': 'Event summary',
633
+ 'thScope': 'Scope (line / product / recipe)',
634
+ 'thDetail': 'Detail',
635
+ 'expand': 'Detail',
636
+ 'fold': 'Fold',
637
+ 'loading': 'Querying…',
638
+ 'empty': 'No matching log entries',
639
+ 'src': {
614
640
  user: 'User',
615
641
  system: 'System',
616
642
  },
617
- kind: {
643
+ 'kind': {
618
644
  write: 'Write',
619
645
  manual: 'Manual',
620
646
  alarm: 'Alarm',
@@ -624,10 +650,10 @@ export default {
624
650
  daq: 'DAQ',
625
651
  system: 'System',
626
652
  },
627
- mSummary: 'Entry content',
628
- mSummaryPh: 'e.g. Replaced heater coil of oven #3; extended soaking for current batch by 10 min',
629
- mSubmit: 'Record',
630
- mOk: 'Recorded',
653
+ 'mSummary': 'Entry content',
654
+ 'mSummaryPh': 'e.g. Replaced heater coil of oven #3; extended soaking for current batch by 10 min',
655
+ 'mSubmit': 'Record',
656
+ 'mOk': 'Recorded',
631
657
  },
632
658
  dcw: {
633
659
  k1qidbpy061: 'Default {p0} (by creation order)',