agentworkshop 0.5.9 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (572) 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/221de779-a113-4232-b9a1-31a614f5e3c7.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 +2675 -1425
  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-plugin-tools-inject.ts +80 -0
  501. package/scripts/_dbg-plugin-verify-e2e.mjs +123 -0
  502. package/scripts/_dbg-prompts-hotreload-test.ts +76 -0
  503. package/scripts/_dbg-release-smoke.mjs +104 -0
  504. package/scripts/i18n-merge.mjs +69 -67
  505. package/scripts/test-context-governor.ts +176 -176
  506. package/scripts/test-daq-frames.ts +180 -0
  507. package/scripts/test-daq-minio.ts +77 -0
  508. package/scripts/test-memory-rrf-mmr.ts +114 -114
  509. package/scripts/test-plugin-ext.ts +173 -0
  510. package/server/api/system/settings/events.get.ts +27 -28
  511. package/server/api/system/settings/index.get.ts +14 -14
  512. package/server/api/system/settings/index.patch.ts +22 -22
  513. package/server/api/system/settings/reset.post.ts +12 -12
  514. package/server/api/workshop/daq/[id]/frames/content.get.ts +24 -0
  515. package/server/api/workshop/daq/[id]/frames.get.ts +44 -0
  516. package/server/data/daqs.json +113 -89
  517. package/server/data/dcw-rollback.json +1 -1
  518. package/server/data/dcw-runs.json +3207 -2517
  519. package/server/data/dcw-writes.json +720 -0
  520. package/server/data/dcws.json +4 -4
  521. package/server/data/line-runs.json +1 -232
  522. package/server/plugins/daq.ts +11 -0
  523. package/server/plugins/system-config.ts +38 -38
  524. package/server/services/system-config.ts +365 -356
  525. package/server/services/workshop/agents/industrial-tools.ts +91 -25
  526. package/server/services/workshop/agents/omp-agent.ts +1955 -1895
  527. package/server/services/workshop/agents/plugin-tools.ts +145 -0
  528. package/server/services/workshop/daq/bus/queue-port.ts +18 -0
  529. package/server/services/workshop/daq/daq-controller.ts +216 -14
  530. package/server/services/workshop/daq/daq-node.ts +257 -247
  531. package/server/services/workshop/daq/daq-runtime.ts +36 -4
  532. package/server/services/workshop/daq/daq-templates.ts +213 -157
  533. package/server/services/workshop/daq/drivers.ts +134 -30
  534. package/server/services/workshop/daq/frames.ts +227 -0
  535. package/server/services/workshop/daq/infra.ts +31 -17
  536. package/server/services/workshop/daq/objectstore/disk.adapter.ts +38 -0
  537. package/server/services/workshop/daq/objectstore/index.ts +88 -0
  538. package/server/services/workshop/daq/objectstore/minio.adapter.ts +60 -0
  539. package/server/services/workshop/daq/objectstore/objectstore-port.ts +27 -0
  540. package/server/services/workshop/daq/plugin-bridge.ts +73 -0
  541. package/server/services/workshop/daq/png-enc.ts +71 -0
  542. package/server/services/workshop/daq/storage/sqlite.adapter.ts +104 -1
  543. package/server/services/workshop/daq/storage/timescale.adapter.ts +95 -4
  544. package/server/services/workshop/daq/storage/tsdb-port.ts +46 -0
  545. package/server/services/workshop/plugins/host.mjs +479 -417
  546. package/server/services/workshop/runtime/agent-runtime.ts +744 -744
  547. package/shared/config/schema.json +6 -1
  548. package/shared/daq-protocol.ts +88 -0
  549. package/.output/public/_nuxt/B-PgoIPN.js +0 -1
  550. package/.output/public/_nuxt/DVNYfGsj.js +0 -1
  551. package/.output/public/_nuxt/_id_.CbiF5PrV.css +0 -1
  552. package/.output/public/_nuxt/builds/meta/6f7e40bf-a960-4f51-8a2e-bb1fffeaa5e8.json +0 -1
  553. package/.output/public/_nuxt/settings.BANibAnV.css +0 -1
  554. package/.output/server/chunks/build/_id_-BOhG2yz8.mjs.map +0 -1
  555. package/.output/server/chunks/build/_id_-CuyMYmhY.mjs.map +0 -1
  556. package/.output/server/chunks/build/agents-BVaxN75W.mjs.map +0 -1
  557. package/.output/server/chunks/build/channel-templates-D1K2IKrE.mjs.map +0 -1
  558. package/.output/server/chunks/build/client-only-CFTHwakk.mjs.map +0 -1
  559. package/.output/server/chunks/build/daq-ObtN1TQ4.mjs.map +0 -1
  560. package/.output/server/chunks/build/dcw-fINr-He1.mjs.map +0 -1
  561. package/.output/server/chunks/build/interval-Bt11uRPw.mjs +0 -9
  562. package/.output/server/chunks/build/interval-Bt11uRPw.mjs.map +0 -1
  563. package/.output/server/chunks/build/logs-DqNgCJAn.mjs.map +0 -1
  564. package/.output/server/chunks/build/pages-DC52d7z7.mjs.map +0 -1
  565. package/.output/server/chunks/build/plugins-DVQty7qG.mjs.map +0 -1
  566. package/.output/server/chunks/build/settings-BeergncK.mjs.map +0 -1
  567. package/.output/server/chunks/build/teams-CFeDlHDh.mjs.map +0 -1
  568. package/.output/server/chunks/build/tokens-CBAUbOce.mjs.map +0 -1
  569. package/.output/server/chunks/build/town-BxH-XXth.mjs.map +0 -1
  570. package/.output/server/chunks/build/useDaqStream-CwORhsD7.mjs.map +0 -1
  571. package/.output/server/chunks/build/users-BMs4s_6K.mjs.map +0 -1
  572. package/.output/server/chunks/build/workshop-CJAyZ5zS.mjs.map +0 -1
@@ -1,114 +1,114 @@
1
- /**
2
- * 记忆检索 v2 算法测试:RRF 融合 / MMR 多样性 / kind 感知半衰期 / 任务关联加权 / 策展层排除。
3
- * 运行: npx tsx --tsconfig .nuxt/tsconfig.server.json scripts/test-memory-rrf-mmr.ts
4
- */
5
- import type { DatabaseSync } from 'node:sqlite'
6
- import { openWorkshopDb } from '../server/services/workshop/db/database'
7
- import { createMemoryRepo, TEAM_AGENT_ID } from '../server/services/workshop/db/memory.repo'
8
- import { AgentMemory, buildMatchQuery, estimateTokens } from '../server/services/workshop/runtime/memory'
9
-
10
- let failures = 0
11
- function check(name: string, ok: boolean, detail = ''): void {
12
- console.log(` ${ok ? 'PASS' : 'FAIL'} ${name}${detail ? ` — ${detail}` : ''}`)
13
- if (!ok) failures += 1
14
- }
15
-
16
- const db: DatabaseSync = openWorkshopDb(':memory:')
17
- const repo = createMemoryRepo(db)
18
- const seg = (s: string): string => s.replace(/([\u4e00-\u9fff])/g, ' $1 ')
19
-
20
- // ===== buildMatchQuery:CJK 词项扩容 + 去重 =====
21
- console.log('\n--- buildMatchQuery(CJK 词项扩容)---')
22
- {
23
- const q = buildMatchQuery('网关限流方案讨论,部署脚本与令牌桶阈值约定')
24
- const termCount = q ? q.split(' OR ').length : 0
25
- check('CJK 单字词项上限提升(>12)', termCount > 12, `terms=${termCount}`)
26
- const deduped = buildMatchQuery('限流 限流 限流')
27
- check('词项去重', deduped !== null && deduped.split(' OR ').length === 2, `terms=${deduped}`) // 限/流
28
- check('token 估算为正', estimateTokens('abc 中文') > 0)
29
- }
30
-
31
- // ===== RRF 融合:FTS+向量双榜融合(词袋 embedder)=====
32
- console.log('\n--- RRF 融合(混合检索)---')
33
- {
34
- // hash 词袋 provider:同词集 → 相近向量(零网络)
35
- const { createHashEmbeddingProvider } = await import('../server/services/workshop/runtime/embedding-provider')
36
- const embedder = createHashEmbeddingProvider(64)
37
-
38
- const rows = [
39
- { dedup: 'task:a', title: 'Redis 缓存穿透方案', content: '布隆过滤器前置拦截,空值缓存五分钟' },
40
- { dedup: 'task:b', title: 'Redis 雪崩预案', content: '过期时间加随机抖动,多级缓存兜底' },
41
- { dedup: 'task:c', title: '部署脚本清单', content: 'docker compose 拉镜像,健康检查后切流量' },
42
- ]
43
- for (const r of rows) {
44
- repo.upsert({ channelId: 'ch1', agentId: 'a1', kind: 'episodic-task', title: r.title, titleFts: seg(r.title), content: seg(r.content), importance: 0.8, taskId: r.dedup, dedupKey: `task:${r.dedup}` })
45
- }
46
- const mem = new AgentMemory(repo, { channelId: 'ch1', agentId: 'a1', embedder })
47
- // 向量可命中(词袋相似)但 FTS 无词面匹配的查询:RRF 仍能通过向量榜给出结果
48
- const hits = await mem.recallRows('cache 穿透 拦截')
49
- check('向量榜独有命中可达(RRF 不丢向量结果)', hits.some(s => s.title === 'Redis 缓存穿透方案'), JSON.stringify(hits.map(s => s.title)))
50
-
51
- // 双榜同时命中:融合排序应把两榜都命中的排前
52
- const both = await mem.recallRows('Redis 雪崩')
53
- check('双榜命中排序靠前', both.length > 0 && both[0]!.title === 'Redis 雪崩预案', JSON.stringify(both.map(s => `${s.title}:${s.score}`)))
54
- }
55
-
56
- // ===== kind 感知半衰期:semantic 不衰减,episodic-task 14d =====
57
- console.log('\n--- kind 感知半衰期 ---')
58
- {
59
- const old = new Date(Date.now() - 60 * 86_400_000).toISOString()
60
- repo.upsert({ channelId: 'ch1', agentId: 'old1', kind: 'semantic', title: '六十天前的架构决策', titleFts: seg('六十天前的架构决策'), content: seg('内核结论:单写多读'), importance: 0.9, taskId: null, dedupKey: 'manual:old-sem' })
61
- repo.upsert({ channelId: 'ch1', agentId: 'old1', kind: 'episodic-task', title: '六十天前的任务', titleFts: seg('六十天前的任务'), content: seg('过程性记录,内容已过时'), importance: 0.9, taskId: 't-old', dedupKey: 'task:t-old' })
62
- // 直接改 created_at 模拟老化(upsert ON CONFLICT 会刷新,故用参数化 UPDATE)
63
- db.prepare('UPDATE agent_memories SET created_at = ? WHERE agent_id = ?').run(old, 'old1')
64
-
65
- const mem = new AgentMemory(repo, { channelId: 'ch1', agentId: 'old1' })
66
- const hits = await mem.recallRows('六十天前')
67
- const sem = hits.find(s => s.title === '六十天前的架构决策')
68
- const epi = hits.find(s => s.title === '六十天前的任务')
69
- check('semantic 知识不随时近衰减(分高于 episodic)', sem !== undefined && epi !== undefined && sem.score > epi.score, `sem=${sem?.score} epi=${epi?.score}`)
70
- }
71
-
72
- // ===== 任务关联加权:兄弟/父任务记忆置顶 =====
73
- console.log('\n--- 任务关联加权(related-task boost)---')
74
- {
75
- repo.upsert({ channelId: 'ch1', agentId: 'rel', kind: 'episodic-task', title: '无关旧任务', titleFts: seg('无关旧任务'), content: seg('数据库迁移完成,版本升到 v14'), importance: 0.8, taskId: 't-other', dedupKey: 'task:t-other' })
76
- repo.upsert({ channelId: 'ch1', agentId: 'rel', kind: 'episodic-task', title: '兄弟任务结论', titleFts: seg('兄弟任务结论'), content: seg('API 网关路由表已生成'), importance: 0.55, taskId: 't-sib1', dedupKey: 'task:t-sib1' })
77
- const mem = new AgentMemory(repo, { channelId: 'ch1', agentId: 'rel' })
78
- // 查询词面同时弱命中两行;兄弟任务 id 加权后必须反超高重要度旧行
79
- const hits = await mem.recallRows('任务 结论 数据库 网关', { relatedTaskIds: ['t-sib1', 't-parent'] })
80
- check('兄弟任务记忆加权反超(置顶)', hits[0]?.title === '兄弟任务结论', JSON.stringify(hits.map(s => `${s.title}:${s.score}`)))
81
- const hitsNoRel = await mem.recallRows('任务 结论 数据库 网关', { touch: false })
82
- check('无关联集时高重要度旧行居前(对照)', hitsNoRel[0]?.title === '无关旧任务', JSON.stringify(hitsNoRel.map(s => `${s.title}:${s.score}`)))
83
- }
84
-
85
- // ===== 策展层:brief 走 L0 置顶,L1 引子不重复;chronicle 不进 L1 但 L2 可检索 =====
86
- console.log('\n--- 策展层(L0/L1/L2 分层)---')
87
- {
88
- const mem = new AgentMemory(repo, { channelId: 'ch1', agentId: 'cur' })
89
- await mem.save({ title: '普通结论', content: '普通检索应该能命中', scope: 'private', dedupKey: 'note:normal' })
90
- mem.repo.upsert({ channelId: 'ch1', agentId: 'cur', kind: 'brief', title: '会话简报', titleFts: seg('会话简报'), content: seg('最近完成:普通结论'), importance: 0.6, taskId: null, dedupKey: 'brief:cur' })
91
- mem.repo.upsert({ channelId: 'ch1', agentId: 'cur', kind: 'chronicle', title: '团队编年史', titleFts: seg('团队编年史'), content: seg('完成 普通结论'), importance: 0.9, taskId: null, dedupKey: 'chronicle:ch1' })
92
-
93
- // L1(recall):brief 经 L0 路径恰好注入一次(去重靠 excludeCurated);chronicle 不进 L1
94
- const primer = await mem.recall('普通')
95
- const briefHits = (primer?.match(/会话简报/g) ?? []).length
96
- check('brief 恰好注入一次(L0 路径)', briefHits === 1, `hits=${briefHits}`)
97
- check('L1 引子不含 chronicle(防双份注入)', primer !== null && !primer.includes('编年史'))
98
-
99
- // L2(search_memory/recallRows):策展层可被检索(特性)
100
- const found = await mem.recallRows('编年史')
101
- check('L2 search_memory 可命中 chronicle', found.some(s => s.title === '团队编年史'), JSON.stringify(found.map(s => s.title)))
102
- }
103
-
104
- // ===== team 域可见性:episodic-team-task 对全员 shared 可检索 =====
105
- console.log('\n--- team-task 共享域 ---')
106
- {
107
- repo.upsert({ channelId: 'ch1', agentId: TEAM_AGENT_ID, kind: 'episodic-team-task', title: '团队任务成果', titleFts: seg('团队任务成果'), content: seg('数据迁移已全部完成并验证'), importance: 0.8, taskId: 't-team', dedupKey: 'team-task:t-team' })
108
- const memB = new AgentMemory(repo, { channelId: 'ch1', agentId: 'member-b' })
109
- const seen = await memB.recallRows('数据迁移', { scope: 'shared' })
110
- check('其他成员 shared 域可命中 team-task 行', seen.some(s => s.title === '团队任务成果'), JSON.stringify(seen.map(s => s.title)))
111
- }
112
-
113
- console.log(failures === 0 ? '\nALL PASS' : `\n${failures} FAILED`)
114
- process.exit(failures === 0 ? 0 : 1)
1
+ /**
2
+ * 记忆检索 v2 算法测试:RRF 融合 / MMR 多样性 / kind 感知半衰期 / 任务关联加权 / 策展层排除。
3
+ * 运行: npx tsx --tsconfig .nuxt/tsconfig.server.json scripts/test-memory-rrf-mmr.ts
4
+ */
5
+ import type { DatabaseSync } from 'node:sqlite'
6
+ import { openWorkshopDb } from '../server/services/workshop/db/database'
7
+ import { createMemoryRepo, TEAM_AGENT_ID } from '../server/services/workshop/db/memory.repo'
8
+ import { AgentMemory, buildMatchQuery, estimateTokens } from '../server/services/workshop/runtime/memory'
9
+
10
+ let failures = 0
11
+ function check(name: string, ok: boolean, detail = ''): void {
12
+ console.log(` ${ok ? 'PASS' : 'FAIL'} ${name}${detail ? ` — ${detail}` : ''}`)
13
+ if (!ok) failures += 1
14
+ }
15
+
16
+ const db: DatabaseSync = openWorkshopDb(':memory:')
17
+ const repo = createMemoryRepo(db)
18
+ const seg = (s: string): string => s.replace(/([\u4e00-\u9fff])/g, ' $1 ')
19
+
20
+ // ===== buildMatchQuery:CJK 词项扩容 + 去重 =====
21
+ console.log('\n--- buildMatchQuery(CJK 词项扩容)---')
22
+ {
23
+ const q = buildMatchQuery('网关限流方案讨论,部署脚本与令牌桶阈值约定')
24
+ const termCount = q ? q.split(' OR ').length : 0
25
+ check('CJK 单字词项上限提升(>12)', termCount > 12, `terms=${termCount}`)
26
+ const deduped = buildMatchQuery('限流 限流 限流')
27
+ check('词项去重', deduped !== null && deduped.split(' OR ').length === 2, `terms=${deduped}`) // 限/流
28
+ check('token 估算为正', estimateTokens('abc 中文') > 0)
29
+ }
30
+
31
+ // ===== RRF 融合:FTS+向量双榜融合(词袋 embedder)=====
32
+ console.log('\n--- RRF 融合(混合检索)---')
33
+ {
34
+ // hash 词袋 provider:同词集 → 相近向量(零网络)
35
+ const { createHashEmbeddingProvider } = await import('../server/services/workshop/runtime/embedding-provider')
36
+ const embedder = createHashEmbeddingProvider(64)
37
+
38
+ const rows = [
39
+ { dedup: 'task:a', title: 'Redis 缓存穿透方案', content: '布隆过滤器前置拦截,空值缓存五分钟' },
40
+ { dedup: 'task:b', title: 'Redis 雪崩预案', content: '过期时间加随机抖动,多级缓存兜底' },
41
+ { dedup: 'task:c', title: '部署脚本清单', content: 'docker compose 拉镜像,健康检查后切流量' },
42
+ ]
43
+ for (const r of rows) {
44
+ repo.upsert({ channelId: 'ch1', agentId: 'a1', kind: 'episodic-task', title: r.title, titleFts: seg(r.title), content: seg(r.content), importance: 0.8, taskId: r.dedup, dedupKey: `task:${r.dedup}` })
45
+ }
46
+ const mem = new AgentMemory(repo, { channelId: 'ch1', agentId: 'a1', embedder })
47
+ // 向量可命中(词袋相似)但 FTS 无词面匹配的查询:RRF 仍能通过向量榜给出结果
48
+ const hits = await mem.recallRows('cache 穿透 拦截')
49
+ check('向量榜独有命中可达(RRF 不丢向量结果)', hits.some(s => s.title === 'Redis 缓存穿透方案'), JSON.stringify(hits.map(s => s.title)))
50
+
51
+ // 双榜同时命中:融合排序应把两榜都命中的排前
52
+ const both = await mem.recallRows('Redis 雪崩')
53
+ check('双榜命中排序靠前', both.length > 0 && both[0]!.title === 'Redis 雪崩预案', JSON.stringify(both.map(s => `${s.title}:${s.score}`)))
54
+ }
55
+
56
+ // ===== kind 感知半衰期:semantic 不衰减,episodic-task 14d =====
57
+ console.log('\n--- kind 感知半衰期 ---')
58
+ {
59
+ const old = new Date(Date.now() - 60 * 86_400_000).toISOString()
60
+ repo.upsert({ channelId: 'ch1', agentId: 'old1', kind: 'semantic', title: '六十天前的架构决策', titleFts: seg('六十天前的架构决策'), content: seg('内核结论:单写多读'), importance: 0.9, taskId: null, dedupKey: 'manual:old-sem' })
61
+ repo.upsert({ channelId: 'ch1', agentId: 'old1', kind: 'episodic-task', title: '六十天前的任务', titleFts: seg('六十天前的任务'), content: seg('过程性记录,内容已过时'), importance: 0.9, taskId: 't-old', dedupKey: 'task:t-old' })
62
+ // 直接改 created_at 模拟老化(upsert ON CONFLICT 会刷新,故用参数化 UPDATE)
63
+ db.prepare('UPDATE agent_memories SET created_at = ? WHERE agent_id = ?').run(old, 'old1')
64
+
65
+ const mem = new AgentMemory(repo, { channelId: 'ch1', agentId: 'old1' })
66
+ const hits = await mem.recallRows('六十天前')
67
+ const sem = hits.find(s => s.title === '六十天前的架构决策')
68
+ const epi = hits.find(s => s.title === '六十天前的任务')
69
+ check('semantic 知识不随时近衰减(分高于 episodic)', sem !== undefined && epi !== undefined && sem.score > epi.score, `sem=${sem?.score} epi=${epi?.score}`)
70
+ }
71
+
72
+ // ===== 任务关联加权:兄弟/父任务记忆置顶 =====
73
+ console.log('\n--- 任务关联加权(related-task boost)---')
74
+ {
75
+ repo.upsert({ channelId: 'ch1', agentId: 'rel', kind: 'episodic-task', title: '无关旧任务', titleFts: seg('无关旧任务'), content: seg('数据库迁移完成,版本升到 v14'), importance: 0.8, taskId: 't-other', dedupKey: 'task:t-other' })
76
+ repo.upsert({ channelId: 'ch1', agentId: 'rel', kind: 'episodic-task', title: '兄弟任务结论', titleFts: seg('兄弟任务结论'), content: seg('API 网关路由表已生成'), importance: 0.55, taskId: 't-sib1', dedupKey: 'task:t-sib1' })
77
+ const mem = new AgentMemory(repo, { channelId: 'ch1', agentId: 'rel' })
78
+ // 查询词面同时弱命中两行;兄弟任务 id 加权后必须反超高重要度旧行
79
+ const hits = await mem.recallRows('任务 结论 数据库 网关', { relatedTaskIds: ['t-sib1', 't-parent'] })
80
+ check('兄弟任务记忆加权反超(置顶)', hits[0]?.title === '兄弟任务结论', JSON.stringify(hits.map(s => `${s.title}:${s.score}`)))
81
+ const hitsNoRel = await mem.recallRows('任务 结论 数据库 网关', { touch: false })
82
+ check('无关联集时高重要度旧行居前(对照)', hitsNoRel[0]?.title === '无关旧任务', JSON.stringify(hitsNoRel.map(s => `${s.title}:${s.score}`)))
83
+ }
84
+
85
+ // ===== 策展层:brief 走 L0 置顶,L1 引子不重复;chronicle 不进 L1 但 L2 可检索 =====
86
+ console.log('\n--- 策展层(L0/L1/L2 分层)---')
87
+ {
88
+ const mem = new AgentMemory(repo, { channelId: 'ch1', agentId: 'cur' })
89
+ await mem.save({ title: '普通结论', content: '普通检索应该能命中', scope: 'private', dedupKey: 'note:normal' })
90
+ mem.repo.upsert({ channelId: 'ch1', agentId: 'cur', kind: 'brief', title: '会话简报', titleFts: seg('会话简报'), content: seg('最近完成:普通结论'), importance: 0.6, taskId: null, dedupKey: 'brief:cur' })
91
+ mem.repo.upsert({ channelId: 'ch1', agentId: 'cur', kind: 'chronicle', title: '团队编年史', titleFts: seg('团队编年史'), content: seg('完成 普通结论'), importance: 0.9, taskId: null, dedupKey: 'chronicle:ch1' })
92
+
93
+ // L1(recall):brief 经 L0 路径恰好注入一次(去重靠 excludeCurated);chronicle 不进 L1
94
+ const primer = await mem.recall('普通')
95
+ const briefHits = (primer?.match(/会话简报/g) ?? []).length
96
+ check('brief 恰好注入一次(L0 路径)', briefHits === 1, `hits=${briefHits}`)
97
+ check('L1 引子不含 chronicle(防双份注入)', primer !== null && !primer.includes('编年史'))
98
+
99
+ // L2(search_memory/recallRows):策展层可被检索(特性)
100
+ const found = await mem.recallRows('编年史')
101
+ check('L2 search_memory 可命中 chronicle', found.some(s => s.title === '团队编年史'), JSON.stringify(found.map(s => s.title)))
102
+ }
103
+
104
+ // ===== team 域可见性:episodic-team-task 对全员 shared 可检索 =====
105
+ console.log('\n--- team-task 共享域 ---')
106
+ {
107
+ repo.upsert({ channelId: 'ch1', agentId: TEAM_AGENT_ID, kind: 'episodic-team-task', title: '团队任务成果', titleFts: seg('团队任务成果'), content: seg('数据迁移已全部完成并验证'), importance: 0.8, taskId: 't-team', dedupKey: 'team-task:t-team' })
108
+ const memB = new AgentMemory(repo, { channelId: 'ch1', agentId: 'member-b' })
109
+ const seen = await memB.recallRows('数据迁移', { scope: 'shared' })
110
+ check('其他成员 shared 域可命中 team-task 行', seen.some(s => s.title === '团队任务成果'), JSON.stringify(seen.map(s => s.title)))
111
+ }
112
+
113
+ console.log(failures === 0 ? '\nALL PASS' : `\n${failures} FAILED`)
114
+ process.exit(failures === 0 ? 0 : 1)
@@ -0,0 +1,173 @@
1
+ /**
2
+ * 插件扩展面单元测试:omp 插件工具(桥/合并/分发/热注入)+ 插件 DAQ 模板(桥/覆盖/REST 守卫)。
3
+ * 运行: npx tsx --tsconfig .nuxt/tsconfig.server.json scripts/test-plugin-ext.ts
4
+ */
5
+ import type { DatabaseSync } from 'node:sqlite'
6
+ import { openWorkshopDb } from '../server/services/workshop/db/database'
7
+ import {
8
+ hostToolsForRole,
9
+ } from '../server/services/workshop/agents/omp-agent'
10
+ import { attachOmpPluginBridge, registerPluginTool, onPluginToolsChange, listPluginTools } from '../server/services/workshop/agents/plugin-tools'
11
+ import { getDaqTemplateRegistry, findDaqTemplate } from '../server/services/workshop/daq/daq-templates'
12
+
13
+ let failures = 0
14
+ function check(name: string, ok: boolean, detail = ''): void {
15
+ console.log(` ${ok ? 'PASS' : 'FAIL'} ${name}${detail ? ` — ${detail}` : ''}`)
16
+ if (!ok) failures += 1
17
+ }
18
+
19
+ // 全局桥接管(模拟 host.mjs 先行的装载顺序)
20
+ attachOmpPluginBridge()
21
+
22
+ // ===== omp 插件工具:注册 → 合并进角色工具面 =====
23
+ console.log('\n--- omp 插件工具注册与合并 ---')
24
+ {
25
+ registerPluginTool('demo-plugin', {
26
+ name: 'plugin_echo',
27
+ description: '回显测试工具',
28
+ parameters: { type: 'object', properties: { msg: { type: 'string' } }, required: ['msg'] },
29
+ handler: args => ({ text: `echo:${String(args.msg ?? '')}` }),
30
+ })
31
+ registerPluginTool('demo-plugin', {
32
+ name: 'plugin_lead_only',
33
+ description: '仅 lead 可见的工具',
34
+ parameters: { type: 'object', properties: {} },
35
+ roles: ['lead'],
36
+ handler: () => ({ text: 'lead tool' }),
37
+ })
38
+
39
+ const lead = hostToolsForRole('lead')
40
+ const worker = hostToolsForRole('worker')
41
+ check('lead 工具面含 plugin_echo', lead.some(t => t.name === 'plugin_echo'))
42
+ check('worker 工具面含 plugin_echo(缺省双角色)', worker.some(t => t.name === 'plugin_echo'))
43
+ check('roles 过滤:plugin_lead_only 仅 lead 可见', lead.some(t => t.name === 'plugin_lead_only') && !worker.some(t => t.name === 'plugin_lead_only'))
44
+ check('内置工具不因插件合并丢失', lead.some(t => t.name === 'complete_task') && lead.some(t => t.name === 'daq_frames'))
45
+
46
+ // 分发(handleHostTool 为类私有,经实例 + 任意未知内置名走插件查表)
47
+ const { OmpRpcAgentImpl } = await import('../server/services/workshop/agents/omp-agent')
48
+ const impl = new OmpRpcAgentImpl({ agentId: 'a1', name: 'A', role: 'worker', channelId: 'ch1' })
49
+ const handle = (impl as unknown as Record<string, (req: unknown) => Promise<{ text: string, isError?: boolean }>>).handleHostTool.bind(impl)
50
+ const out = await handle({ toolName: 'plugin_echo', arguments: { msg: 'hello' } })
51
+ check('handleHostTool 分发到插件 handler', out.text === 'echo:hello', out.text)
52
+
53
+ // 同名覆盖(热重载幂等:再注册同插件同名,byName 不重复)
54
+ const before = listPluginTools().size
55
+ registerPluginTool('demo-plugin', {
56
+ name: 'plugin_echo',
57
+ description: '回显测试工具 v2',
58
+ parameters: { type: 'object', properties: {} },
59
+ handler: () => ({ text: 'echo2' }),
60
+ })
61
+ check('同名覆盖不增表(热重载幂等)', listPluginTools().size === before, `size=${listPluginTools().size}`)
62
+ const out2 = await handle({ toolName: 'plugin_echo', arguments: {} })
63
+ check('覆盖后新 handler 生效', out2.text === 'echo2')
64
+ }
65
+
66
+ // ===== 运行时热注入:注册表变更 → 在跑实例重发 set_host_tools =====
67
+ console.log('\n--- 运行时热注入 ---')
68
+ {
69
+ const { OmpRpcAgentImpl } = await import('../server/services/workshop/agents/omp-agent')
70
+ const impl = new OmpRpcAgentImpl({ agentId: 'a2', name: 'B', role: 'worker', channelId: 'ch1' })
71
+ const sent: Array<Record<string, unknown>> = []
72
+ const fakeClient = {
73
+ alive: true,
74
+ onEvent: () => () => {},
75
+ send: async (cmd: Record<string, unknown>) => {
76
+ sent.push(cmd)
77
+ return { success: true }
78
+ },
79
+ onHostToolCall: () => {},
80
+ getContextUsage: () => null,
81
+ setContextWindow: () => {},
82
+ }
83
+ ;(impl as unknown as Record<string, unknown>).client = fakeClient
84
+
85
+ let changeCount = 0
86
+ const off = onPluginToolsChange(() => changeCount++)
87
+ registerPluginTool('hot-plugin', {
88
+ name: 'plugin_hot',
89
+ description: '热注入工具',
90
+ parameters: { type: 'object', properties: {} },
91
+ handler: () => ({ text: 'hot' }),
92
+ })
93
+ off()
94
+ await new Promise(r => setTimeout(r, 20))
95
+ check('注册触发变更通知', changeCount >= 1, `changes=${changeCount}`)
96
+ const setTools = sent.filter(c => c.type === 'set_host_tools')
97
+ if (setTools.length > 0) {
98
+ const tools = setTools[setTools.length - 1]!.tools as Array<{ name: string }>
99
+ check('热注入重发 set_host_tools', true)
100
+ check('热注入载荷含新插件工具', tools.some(t => t.name === 'plugin_hot'))
101
+ }
102
+ else {
103
+ fail('热注入重发 set_host_tools')
104
+ }
105
+ impl.dispose()
106
+ }
107
+
108
+ // ===== 插件 DAQ 模板:注册 → 目录可见 → findDaqTemplate 可解析 → REST 守卫 =====
109
+ console.log('\n--- 插件 DAQ 模板 ---')
110
+ {
111
+ const registry = getDaqTemplateRegistry()
112
+ registry.registerPlugin({
113
+ key: 'plug-test-probe',
114
+ name: '插件测试模板',
115
+ code: 'PLUG · T',
116
+ ch: '测试信号',
117
+ unit: 'mm',
118
+ base: 0.5,
119
+ amp: 0.01,
120
+ min: 0.4,
121
+ max: 0.6,
122
+ decimals: 3,
123
+ icon: 'tension',
124
+ signalKind: 'vector',
125
+ vector: { points: 16, min: 0.4, max: 0.6 },
126
+ sink: { processors: [{ name: 'derive-metric', args: { name: 'avg', op: 'avg' } }] },
127
+ metrics: [{ key: 'avg', label: '均值', unit: 'mm' }],
128
+ plugin: 'test-plugin',
129
+ })
130
+ check('插件模板进入目录', registry.all().some(t => t.key === 'plug-test-probe'))
131
+ check('findDaqTemplate 可解析插件模板', findDaqTemplate('plug-test-probe')?.signalKind === 'vector')
132
+ check('插件标记透传', registry.all().find(t => t.key === 'plug-test-probe')?.plugin === 'test-plugin')
133
+
134
+ // 同 key 覆盖(热重载幂等,不增行)
135
+ const before = registry.all().length
136
+ registry.registerPlugin({
137
+ key: 'plug-test-probe', name: '插件测试模板 v2', code: 'PLUG · T', ch: '测试信号', unit: 'mm',
138
+ base: 0.5, amp: 0.01, min: 0.4, max: 0.6, decimals: 3, icon: 'tension', plugin: 'test-plugin',
139
+ })
140
+ check('同 key 覆盖幂等(不增行)', registry.all().length === before && registry.byKey('plug-test-probe')?.name === '插件测试模板 v2')
141
+
142
+ // REST 守卫:插件模板不可改/删
143
+ let guarded = false
144
+ try {
145
+ registry.update('plug-test-probe', { name: 'hack' })
146
+ }
147
+ catch { guarded = true }
148
+ check('update 插件模板被拒', guarded)
149
+ guarded = false
150
+ try {
151
+ registry.remove('plug-test-probe')
152
+ }
153
+ catch { guarded = true }
154
+ check('remove 插件模板被拒', guarded)
155
+
156
+ // 与内置冲突拒绝
157
+ let builtinClash = false
158
+ try {
159
+ registry.registerPlugin({ key: 'temp-tc', name: 'x', code: 'x', ch: 'x', unit: 'x', base: 0, amp: 1, min: 0, max: 1, decimals: 1, icon: 'thermo' })
160
+ }
161
+ catch { builtinClash = true }
162
+ check('与内置模板 key 冲突拒绝', builtinClash)
163
+ }
164
+
165
+ // ===== db 依赖声明(类型面冒烟,防 import 环断裂)=====
166
+ console.log('\n--- 冒烟 ---')
167
+ {
168
+ const db: DatabaseSync = openWorkshopDb(':memory:')
169
+ check('db 可用( import 链健康)', db !== null)
170
+ }
171
+
172
+ console.log(failures === 0 ? '\nALL PASS' : `\n${failures} FAILED`)
173
+ process.exit(failures === 0 ? 0 : 1)
@@ -1,28 +1,27 @@
1
- /**
2
- * GET /api/system/settings/events —— 设置变更 SSE 事件流。
3
- * 客户端用 fetch + ReadableStream(带 Authorization 头)订阅;
4
- * 服务端任何写入(UI / CLI / 文件监听)都会 push { type, changed, restartRequired, effective }。
5
- * 连接前先鉴权(无效 token 直接 401,不开流)。
6
- */
7
- import { createEventStream } from 'h3'
8
- import { resolveUser } from '../../workshop/caller'
9
- import { getSystemConfigService, type ConfigEventPayload } from '../../../services/system-config'
10
-
11
- export default defineEventHandler(async (event) => {
12
- resolveUser(event) // 开流前鉴权:无 token → 401
13
- const service = getSystemConfigService()
14
- const stream = createEventStream(event)
15
-
16
- let listener: ((payload: ConfigEventPayload) => void) | undefined
17
- listener = (payload) => {
18
- void stream.push(JSON.stringify(payload))
19
- }
20
- const unsubscribe = service.subscribe(listener)
21
-
22
- stream.onClosed(async () => {
23
- unsubscribe()
24
- await stream.close()
25
- })
26
-
27
- return stream.send()
28
- })
1
+ /**
2
+ * GET /api/system/settings/events —— 设置变更 SSE 事件流。
3
+ * 客户端用 fetch + ReadableStream(带 Authorization 头)订阅;
4
+ * 服务端任何写入(UI / CLI / 文件监听)都会 push { type, changed, restartRequired, effective }。
5
+ * 连接前先鉴权(无效 token 直接 401,不开流)。
6
+ */
7
+ import { createEventStream } from 'h3'
8
+ import { resolveUser } from '../../workshop/caller'
9
+ import { getSystemConfigService, type ConfigEventPayload } from '../../../services/system-config'
10
+
11
+ export default defineEventHandler(async (event) => {
12
+ resolveUser(event) // 开流前鉴权:无 token → 401
13
+ const service = getSystemConfigService()
14
+ const stream = createEventStream(event)
15
+
16
+ const listener = (payload: ConfigEventPayload): void => {
17
+ void stream.push(JSON.stringify(payload))
18
+ }
19
+ const unsubscribe = service.subscribe(listener)
20
+
21
+ stream.onClosed(async () => {
22
+ unsubscribe()
23
+ await stream.close()
24
+ })
25
+
26
+ return stream.send()
27
+ })
@@ -1,14 +1,14 @@
1
- /**
2
- * GET /api/system/settings —— 运行时设置全量快照。
3
- * 返回描述符 + 有效值 + 各键来源(config.yml/runtime/env) + 覆盖文件路径。
4
- * 前端「系统设置 → 运行配置」表单据此渲染;CLI `aw status` 也走同源概念。
5
- * 鉴权:任何已登录用户可读(config.get 同语义)。
6
- */
7
- import { defineApiHandler } from '../../../utils/response'
8
- import { resolveUser } from '../../workshop/caller'
9
- import { getSystemConfigService } from '../../../services/system-config'
10
-
11
- export default defineApiHandler((event) => {
12
- resolveUser(event)
13
- return getSystemConfigService().snapshot()
14
- })
1
+ /**
2
+ * GET /api/system/settings —— 运行时设置全量快照。
3
+ * 返回描述符 + 有效值 + 各键来源(config.yml/runtime/env) + 覆盖文件路径。
4
+ * 前端「系统设置 → 运行配置」表单据此渲染;CLI `aw status` 也走同源概念。
5
+ * 鉴权:任何已登录用户可读(config.get 同语义)。
6
+ */
7
+ import { defineApiHandler } from '../../../utils/response'
8
+ import { resolveUser } from '../../workshop/caller'
9
+ import { getSystemConfigService } from '../../../services/system-config'
10
+
11
+ export default defineApiHandler((event) => {
12
+ resolveUser(event)
13
+ return getSystemConfigService().snapshot()
14
+ })
@@ -1,22 +1,22 @@
1
- /**
2
- * PATCH /api/system/settings —— 写入运行时设置(持久化 + 热重载)。
3
- * body: { "override": { "<key>": value | null } }
4
- * value 非 null → 校验后写入 data/runtime-settings.json 并立即应用(live 键实时生效)
5
- * value 为 null → 清除该键覆盖(回落 config.yml)
6
- * 返回 { changed, restartRequired, effective, sources, overrides }。
7
- * 鉴权:仅 admin(系统级设置变更属高危管理面)。
8
- */
9
- import { readBody } from 'h3'
10
- import { defineApiHandler } from '../../../utils/response'
11
- import { requireRole } from '../../workshop/caller'
12
- import { getSystemConfigService } from '../../../services/system-config'
13
-
14
- export default defineApiHandler(async (event) => {
15
- requireRole(event, ['admin'])
16
- const body = (await readBody(event)) ?? {}
17
- const overrides = body.override ?? body.overrides ?? body
18
- if (!overrides || typeof overrides !== 'object' || Array.isArray(overrides)) {
19
- return { ok: false, message: '请求体应为 { "override": { key: value } }' }
20
- }
21
- return { ok: true, ...getSystemConfigService().patch(overrides as Record<string, unknown>) }
22
- })
1
+ /**
2
+ * PATCH /api/system/settings —— 写入运行时设置(持久化 + 热重载)。
3
+ * body: { "override": { "<key>": value | null } }
4
+ * value 非 null → 校验后写入 data/runtime-settings.json 并立即应用(live 键实时生效)
5
+ * value 为 null → 清除该键覆盖(回落 config.yml)
6
+ * 返回 { changed, restartRequired, effective, sources, overrides }。
7
+ * 鉴权:仅 admin(系统级设置变更属高危管理面)。
8
+ */
9
+ import { readBody } from 'h3'
10
+ import { defineApiHandler } from '../../../utils/response'
11
+ import { requireRole } from '../../workshop/caller'
12
+ import { getSystemConfigService } from '../../../services/system-config'
13
+
14
+ export default defineApiHandler(async (event) => {
15
+ requireRole(event, ['admin'])
16
+ const body = (await readBody(event)) ?? {}
17
+ const overrides = body.override ?? body.overrides ?? body
18
+ if (!overrides || typeof overrides !== 'object' || Array.isArray(overrides)) {
19
+ return { ok: false, message: '请求体应为 { "override": { key: value } }' }
20
+ }
21
+ return { ok: true, ...getSystemConfigService().patch(overrides as Record<string, unknown>) }
22
+ })
@@ -1,12 +1,12 @@
1
- /**
2
- * POST /api/system/settings/reset —— 清空全部运行时覆盖(回落 config.yml/base + env)。
3
- * 鉴权:仅 admin。
4
- */
5
- import { defineApiHandler } from '../../../utils/response'
6
- import { requireRole } from '../../workshop/caller'
7
- import { getSystemConfigService } from '../../../services/system-config'
8
-
9
- export default defineApiHandler((event) => {
10
- requireRole(event, ['admin'])
11
- return { ok: true, ...getSystemConfigService().reset() }
12
- })
1
+ /**
2
+ * POST /api/system/settings/reset —— 清空全部运行时覆盖(回落 config.yml/base + env)。
3
+ * 鉴权:仅 admin。
4
+ */
5
+ import { defineApiHandler } from '../../../utils/response'
6
+ import { requireRole } from '../../workshop/caller'
7
+ import { getSystemConfigService } from '../../../services/system-config'
8
+
9
+ export default defineApiHandler((event) => {
10
+ requireRole(event, ['admin'])
11
+ return { ok: true, ...getSystemConfigService().reset() }
12
+ })
@@ -0,0 +1,24 @@
1
+ /**
2
+ * GET /api/workshop/daq/:id/frames/content —— 帧图像内容(对象存储流式输出)。
3
+ * query: ts(epoch ms,必填)、thumb?(1=缩略图,缺省主图)
4
+ * 像素不落 Timescale(元数据分离,plan D1);此处经 DaqObjectStore 读取后直出。
5
+ * 注意:二进制路由不走 defineApiHandler(JSON 信封会把 Buffer 序列化成
6
+ * {type:'Buffer',data:[…]} 文本,84 字节 500 事故实录),h3 对 Buffer 原生二进制响应。
7
+ */
8
+ import { createError, defineEventHandler, getQuery, getRouterParam, setResponseHeader } from 'h3'
9
+ import { resolveUser } from '@/server/api/workshop/caller'
10
+ import { getDaqController } from '@/server/services/workshop/daq/daq-controller'
11
+
12
+ export default defineEventHandler(async (event) => {
13
+ resolveUser(event)
14
+ const id = getRouterParam(event, 'id') ?? ''
15
+ const q = getQuery(event)
16
+ const ts = Number(q.ts)
17
+ if (!Number.isFinite(ts) || ts <= 0) {
18
+ throw createError({ statusCode: 400, statusMessage: '参数 ts(epoch ms)必填' })
19
+ }
20
+ const { data, mime } = await getDaqController().frameContent(id, ts, q.thumb === '1')
21
+ setResponseHeader(event, 'content-type', mime)
22
+ setResponseHeader(event, 'cache-control', 'private, max-age=86400')
23
+ return data
24
+ })
@@ -0,0 +1,44 @@
1
+ /**
2
+ * GET /api/workshop/daq/:id/frames —— 节点帧历史(v2 多形态信号:向量/图像元数据)。
3
+ * query: from?/to?(epoch ms)、kind?(vector|image)、limit?(默认 100,上限 1000)
4
+ * 图像像素经 contentUrl(鉴权流式)按需取,本接口只返回元数据与派生指标。
5
+ */
6
+ import { getQuery, getRouterParam } from 'h3'
7
+ import { resolveUser } from '@/server/api/workshop/caller'
8
+ import { defineApiHandler } from '@/server/utils/response'
9
+ import { getDaqController } from '@/server/services/workshop/daq/daq-controller'
10
+
11
+ export default defineApiHandler(async (event) => {
12
+ resolveUser(event)
13
+ const id = getRouterParam(event, 'id') ?? ''
14
+ const q = getQuery(event)
15
+ const num = (k: string): number | undefined => (q[k] != null && !Number.isNaN(Number(q[k])) ? Number(q[k]) : undefined)
16
+ const kind = q.kind === 'vector' || q.kind === 'image' ? q.kind : undefined
17
+ const frames = await getDaqController().frames(id, {
18
+ fromMs: num('from'),
19
+ toMs: num('to'),
20
+ kind,
21
+ limit: num('limit'),
22
+ })
23
+ return {
24
+ frames: frames.map(f => ({
25
+ at: f.at,
26
+ kind: f.kind,
27
+ points: f.points,
28
+ metrics: f.metrics,
29
+ /** 图像元数据(objectKey/thumbKey/mime/width/height) */
30
+ meta: f.meta,
31
+ deviceBindingId: f.deviceBindingId,
32
+ lineId: f.lineId,
33
+ productId: f.productId,
34
+ recipeId: f.recipeId,
35
+ runId: f.runId,
36
+ contentUrl: f.kind === 'image'
37
+ ? `/api/workshop/daq/${id}/frames/content?ts=${f.at}`
38
+ : undefined,
39
+ thumbUrl: f.kind === 'image'
40
+ ? `/api/workshop/daq/${id}/frames/content?ts=${f.at}&thumb=1`
41
+ : undefined,
42
+ })),
43
+ }
44
+ })